差速驱动机器人:将车轮速度转换为lin / ang速度

时间:2015-03-24 07:05:52

标签: box2d robotics kinematics

我正在使用pyBox2D为一个简单的差分驱动机器人(例如e-Puck,Khepera等)建模。这类机器人通常通过以rad / sec表示左右车轮的速度来控制 但是,Box2D只能通过两个参数来控制(运动)体:线速度(以米/秒为单位,作为2D矢量)和角速度(以弧度/秒为单位)。我需要将轮速转换为线性+角速度。

线速度实际上很简单。给定以米为单位的车轮半径r和以弧度表示的当前机器人方向θ,前进速度只是两个车轮速度的平均值(以米/秒为单位),并根据当前方向缩小为矢量:

(1)forwardSpeed =((rightSpeed * r)+(leftSpeed * r))/ 2

(2)linearVelocity =(forwardSpeed * cos(theta),forwardSpeed * sin(theta))

但是,我无法弄清楚角速度的正确公式。直观地说,它应该是模拟车轮之间距离的两个速度之间的差异:

(3)angularVelocity =(rightSpeed - leftSpeed)/ wheelSeparation

在极限情况下:当right = left时,机器人旋转到位,当rightSpeed = 0或leftSpeed = 0时,机器人绕固定轮旋转(转动),即半径为=的圆圈轮子之间的分离。

但是,我没有得到公式(3)的预期行为。作为测试,我将左轮速度设置为0并逐渐增加右轮速度的值。预期的行为是机器人应该以更高的速度绕左轮旋转。 相反,机器人以增加的半径旋转,即向外螺旋,这表明角速度不足。

请注意,我正在为机器人使用Box2D运动体,因此摩擦不会对我的结果起作用。

1 个答案:

答案 0 :(得分:0)

请记住,Box2D中的角速度在局部身体坐标中的原点(0,0)附近工作,这使得准确再现这种类型的运动非常尴尬。据推测,机器人的起源位于车身的中心,在这种情况下,你永远无法让它围绕一个车轮旋转(这需要旋转和平移)。将机器人建模为动态车身并在车轮所在的位置施加力量实际上可能更容易。如果你不想处理摩擦损失等问题,你可以为每个车轮使用一个运动车身,并将它们连接到带有旋转关节的主(动态)车身上。