我将Arduino的AccelStepper库与rosserial结合使用以构建ROS节点。但是,我的归位服务功能(在达到限位开关时应该停止步进)太慢了。有时,步进器在到达开关时立即停止,但大多数时候它会移动约1-2秒。此外,"移动"到达开关后我的部分功能甚至没有执行。但我在功能上看不出任何错误:
void Stepper::homing()
{
/*This function is blocking because it runs in a while loop, until homing is completed. This is useful in this case.
Based on: https://www.brainy-bits.com/setting-stepper-motors-home-position-using-accelstepper/
*/
set_homing_params();
long initial_homing = -1;
while (digitalRead(home_switch)) {
stepper.moveTo(initial_homing);
initial_homing--;
stepper.run();
delay(5);
}
stepper.stop();
stepper.setCurrentPosition(0);
//move away:
set_homing_params();
initial_homing = 1;
while (!digitalRead(home_switch)) {
stepper.moveTo(initial_homing);
initial_homing++;
stepper.run();
delay(5);
}
stepper.stop();
stepper.setCurrentPosition(0);
set_params();
homing_completed = 0;
}
我已经尝试过延迟,速度和加速,但我不明白这里发生了什么。在此归位功能期间,我不会调用ROS' spinOnce(),导致"与设备失去同步,重启..."错误。但归巢后,一切都很好,除了停止延迟。
顺便说一句,我使用的是DRV8825电机驱动器(方向/步骤)。
感谢任何帮助!