上次我们浅谈了一下全向轮小车运动学分析,那么今天我们聊聊两轮差速小车的运动分析吧。

     

      首先看看两轮差速小车的特点吧,机器人左右两侧是驱动轮,分别由两个电机驱动,而前后是被动轮,采用万向轮。通过调节左右驱动的速度,控制机器人运动:若左右驱动轮的速度相同,则机器人直线运动,若左右轮速度不同(有差异),则机器人做圆周运动。

    我们可以发现使用两轮差速进行运动控制时,小车在行进过程中非常灵巧方便,并且低能减排环保,消耗较少的资源。因此在我们一开始接触单片机小工程时,两轮差速小车是我们的优先选择。它既让我们接触一系列传感器,又可以入门运动学控制,一举多得。

那么我们现在就来进行运动学分析吧

                                                   

机器人的运动简化模型如图 4-1 所示,X 轴正方向为前进、Y 轴正方向为左平移、Z 轴正方向为逆时针(后面产品同样,将不再赘述)。机器人两个轮子之间的间距为 D,机器人 X 轴和 Z 轴的速度分别为:VX和VZ ,机器人左轮和右轮
的速度分别为:VL 和VR。
假设机器人往一个左前的方向行进了一段距离,设机器人的右轮比左轮多走
的距离近似为 K,以机器人的轮子上的点作为参考点做延长参考线,可得:θ1 =θ2 。
由于这个Δt 很小(10ms),因此角度的变化量θ1 也很小,因此有近似公式:

                                                                             

由数学分析可以得到下面的式子:

                                                             

由上面的公式和式子可以求解出运动学正解的结果:机器人 X 轴方向速度VX=(VL+VR)/2,机器人 Z 轴方向速度VZ=(VR-VL)/D。
由正解直接反推得出运动学逆解的结果:机器人左轮的速度VL=VX-(VZ*D)/2,机器人右轮的速度VR=VX+(VZ*D)/2

C 语言实现

机器人上面有 2 个带编码器的电机,我们需要通过 C 语言写出上面的运动
关系,然后对电机进行控制。代码如下:

void Drive_Motor(float vx,float vz)
{
Target_Left = vx - vz * WIDTH_OF_ROBOT / 2.0f; //计算出左轮的目标速度
Target_Right = vx + vz * WIDTH_OF_ROBOT / 2.0f; //计算出右轮的目标速度
}

以上语句是通过机器人的 X 和 Z 轴方向的速度求两个电机的目标速度大小(运动学逆解),其中 WIDTH_OF_ROBOT 是两个车轮直线距离的宏定义。

这次就是本次文章的全部内容了,欢迎大家积极讨论!