Turtlebot并不总是直线行驶

时间:2016-12-01 13:23:08

标签: c++ ros robot

我有一些C ++代码,我使用以下方法给turtlebot一个坐标:

b

机器人从一个点移动到另一个点。然而,它很少直线地做到这一点。似乎turtlebot在完成旋转之前开始移动。两点之间没有任何障碍。它能够到达每个点,但它们之间往往会以小弧度移动。

关于如何在没有障碍物的情况下迫使机器人沿直线移动的任何想法?

修改:我使用goal.target_pose.pose.position.x = mypoint.point.x goal.target_pose.pose.position.y = mypoint.point.y turtlebot_bringup minimal.launch

1 个答案:

答案 0 :(得分:0)

实际上,戴夫建议,车轮以不同的速度移动,两轮机器人将沿着车轮周围的弧线移动。但这不是因为车轮直径的变化,而是因为没有两个电机是相同的(由于制造),因此即使相同型号的电机也会有轻微的变化。给定相同的电流和电压,电机将以稍微不同的速度驱动;这让机器人跟着弧线。

解决方案是实现反馈控制,您可以在其中获得旋转反馈并在PID控制等简单控制方案中实现错误。 PID的伪代码如下:

Kp = ..                                   //constant
    Loop forever
       read sensors    
       error = TargetValue - offset       
       integral = integral + error        // calculate the integral 
       derivative = error - lastError     // calculate the derivative
       Turn = Kp*error + Ki*integral + Kd*derivative  
       lastError = error                  // save the current error so it can be the lastError next time around
    end loop forever