两轮差速模型指机器人底盘由两个驱动轮和若干支撑轮构成的底盘模型,像turtlebot和开源机器人fishbot都是两轮差速模型。
两轮差速模型通过两个驱动轮可以通过不同转速和转向,使得机器人的达到某个特定的角速度和线速度。
你好,我是小鱼。上一节了解了两轮差速运动学,本节我们线进一步的了解两轮差速正运动学的推导过程,并利用两轮差速运动学正解,来完成对小车的实时速度计算。
graph LR;
A(左轮当前速度)
B(右轮当前速度)
K([正运动学])
C(机器人当前角速度)
D(机器人当前线速度)
A-->K;
B-->K;
K-->C;
K-->D;
两轮差速机器人是一种常见的移动机器人类型,由两个轮子和一个中心点组成。我们可以通过控制每个轮子的转速来实现移动,并且可以在一个平面上进行自由移动。
前面通过 PID+ 编码器完成了 FishBot 底盘两个轮子单独速度的测量,但是在实际使用当中,我们把机器人当作一个整体来看,而对于这样一个整体在空间中的速度,我们一般采用
需要注意的是:在 ROS 中,机器人的前方通常指的是机器人本体坐标系的正方向。本体坐标系是相对于机器人自身的一个坐标系,通常定义在机器人的中心位置,以机器人的前进方向为 X 轴,左侧为 Y 轴,垂直于机器人平面的方向为 Z 轴。
而全局坐标系中的正方向 X 轴指向右方,Y 轴指向前方,Z 轴垂直于地面。
X | Y | Z | |
---|---|---|---|
机器人本体坐标系 | 前方 | 左侧 | 垂直于机器人平面 |
全局坐标系 | 右方 | 前方 | 垂直于地面 |
所以问题就变成了假设机器人在一小段时间
我们看上图来推导
因为机器人的线速度方向和轮子转动方向始终保持一致,所以机器人的线速度为左右轮线速度的平均值,即:
$$
v=\frac{v_r+v_l}{2}
$$
我们知道
graph LR;
A(机器人目标线速度)
B(机器人目标角速度)
K([运动学逆解])
C(左轮目标速度)
D(右轮目标速度)
A-->K;
B-->K;
K-->C;
K-->D;
直接用正解结果进行求逆解即可,通过 $$ v=\frac{v_r+v_l}{2}\ ω=\frac{v_r−v_l}{l} $$ 可以求得 $$ v_l=v-\frac{ω\cdot l}{2}\ v_r=v+\frac{ω\cdot l}{2} $$
graph LR;
A(左右轮当前速度 / 位置)
K([里程计推算])
C(里程计 odom)
A-->K;
K-->C;
当知道了两个轮子之间的相对位置,同时知道了每一时刻机器人的角速度和线速度,那如何获取机器人的当前角度和位置呢?
假设在某一个时间段
- 影响机器人当前角度的因素只有一个,就是角速度。
- 某一时刻机器人转动的角度 = 这一时刻机器人的角速度
这一时刻时长 - 假如我们认定初始时刻机器人的角度为 0,通过对机器人转动角度角度进行累加,即可获得机器人的当前角度。
- ==上述过程其实就是对角速度进行积分得到角度==。
在时间段
机器人某一时刻自身方向上的前进速度可以分解为里程计坐标系中 x 轴和 y 轴方向上的速度。
从图中可以看出: $$ v_x=v\cdot \cos(\theta)\ v_y=v\cdot\sin(θ) $$ 得到了
和 方向上的速度,乘上该速度对应的某一时刻经过的时间,即可得到这一时刻在 轴和 轴方向上的位>>移,对位移进行累加即可得到里程计中的 和 。
在时间段