1 概述
里程计(Odometry)是机器人定位与导航中的基础模块,用于通过传感器数据估计机器人相对于初始位置的相对运动。
里程计分为轮式里程计(Wheel Odometry)、视觉里程计(Visual Odometry,VO)、惯性里程计(IMU Odometry)、雷达里程计(Laser Odometry)等。本文所说的odometry是指轮式里程计。
2 基本原理
轮式里程计是一种基于车轮转动信息来估算移动机器人或车辆位置与姿态变化的技术。它通过处理车轮旋转产生的数据,推算出车辆或机器人在平面上的运动轨迹。
其核心思想是:通过编码器或其他传感器测量车轮的旋转量,然后根据车轮的几何关系,将旋转量转换为线性位移和角度变化,最后通过积分计算,估计机器人的位置与姿态。
3 运动学模型
轮式里程计的运动学模型分为单轮模型、差分运动模型(两轮)、全向轮模型(三轮或四轮全向轮),本文主要描述差分运动模型。
3.1 差分运动模型 概念
差分运动模型(Differential Drive Model)是描述两轮差分驱动机器人运动的一种数学模型。这种模型广泛应用于移动机器人、AGV和轮式机器人中。它通常由两个驱动轮(左右各一个)和一个或多个支撑轮(如万向轮)组成。
差分运动模型的核心思想是控制两个驱动轮的速度差来实现机器人的运动。
3.2 差分运动模型 运动求解
差分运动模型的机器人始终做的是以
r
r
r为半径的圆弧运动。
已知:两轮旋转的角速度
w
R
,
w
L
w_R,w_L
wR,wL、两轮的线速度
v
R
,
v
L
v_R,v_L
vR,vL、两轮的半径
r
R
,
r
L
r_R,r_L
rR,rL、轮子离底盘中心的距离
d
d
d、两轮之间的距离
D
=
2
d
D=2d
D=2d
求解:底盘中心的线速度
v
v
v、底盘中心的角速度
w
w
w、两轮相对于车体旋转中心
O
O
O转动的角速度
w
r
,
w
l
w_r,w_l
wr,wl、底盘中心圆弧运动的半径
r
r
r
注意:直线运动可看作圆周运动的特殊情况,即
r
→
+
∝
r \to +\propto
r→+∝,直线运动时,
v
R
=
v
L
v_R = v_L
vR=vL
求解运动半径
r
r
r:
底盘中心相对于车体旋转中心
O
O
O转动的角速度与两轮相对于车体旋转中心
O
O
O转动的角速度是相等的。
w
=
w
l
=
w
r
v
=
w
r
}
⟹
v
L
r
−
d
=
v
R
r
+
d
⟹
v
L
(
r
+
d
)
=
v
R
(
r
−
d
)
⟹
(
v
R
−
v
L
)
r
=
(
v
R
+
v
L
)
d
⟹
r
=
(
v
R
+
v
L
)
d
(
v
R
−
v
L
)
\begin{rcases} w=w_l=w_r \\ v=wr \end{rcases} \implies \frac{v_L}{r-d}=\frac{v_R}{r+d} \implies v_L(r+d)=v_R(r-d) \implies (v_R-v_L)r=(v_R+v_L)d \implies r=\frac{(v_R+v_L)d}{(v_R-v_L)}
w=wl=wrv=wr}⟹r−dvL=r+dvR⟹vL(r+d)=vR(r−d)⟹(vR−vL)r=(vR+vL)d⟹r=(vR−vL)(vR+vL)d
求解角速度
w
w
w:
w
=
v
R
r
+
d
⟹
v
R
(
v
R
+
v
L
)
d
(
v
R
−
v
L
)
+
d
⟹
w
=
v
R
−
v
L
2
d
w=\frac{v_R}{r+d} \implies \frac{v_R}{\frac{(v_R+v_L)d}{(v_R-v_L)} + d} \implies w=\frac{v_R-v_L}{2d}
w=r+dvR⟹(vR−vL)(vR+vL)d+dvR⟹w=2dvR−vL
求解线速度
v
v
v:
v
=
w
r
⟹
v
=
v
R
−
v
L
2
d
(
v
R
+
v
L
)
d
(
v
R
−
v
L
)
⟹
v
=
v
R
+
v
L
2
v=wr \implies v=\frac{v_R-v_L}{2d} \frac{(v_R+v_L)d}{(v_R-v_L)} \implies v=\frac{v_R+v_L}{2}
v=wr⟹v=2dvR−vL(vR−vL)(vR+vL)d⟹v=2vR+vL
3.3 差分运动模型 航迹推演
航迹推演的核心思想是基于物体的运动状态进行位置的递推计算。
它假定物体在运动过程中,其速度和方向是可以被测量或估计的。从一个已知的起始位置开始,根据物体在每个时间段内的运动速度和方向,逐步推算出后续时刻的位置。
由于机器人在相邻时刻
Δ
t
\Delta t
Δt内,运动距离非常短,因此可认为机器人是匀速运动,两相邻点之间的运动轨迹可看成直线。
已知
t
−
1
t-1
t−1时刻机器人位姿
(
x
,
y
,
θ
)
(x,y,\theta)
(x,y,θ)、线速度
v
x
v_x
vx、角速度
w
w
w、与
t
t
t时刻的间隔时间
Δ
t
\Delta t
Δt,求解
t
t
t时刻机器人位姿
(
x
′
,
y
′
,
θ
′
)
(x^{\prime},y^{\prime},\theta^{\prime})
(x′,y′,θ′)
t
t
t时刻沿机器人坐标系
X
R
X_R
XR轴移动了
v
x
∗
Δ
t
v_x * \Delta t
vx∗Δt,只需要将该段距离分别投影在世界坐标系
X
w
,
Y
w
X_w,Y_w
Xw,Yw轴上,就可以得到
t
t
t时刻相对于
t
−
1
t-1
t−1时刻机器人在世界坐标系中坐标移动的位移
Δ
x
和
Δ
y
\Delta x和 \Delta y
Δx和Δy。
Δ
x
=
v
x
∗
Δ
t
∗
c
o
s
(
θ
t
−
1
)
Δ
y
=
v
x
∗
Δ
t
∗
s
i
n
(
θ
t
−
1
)
\Delta x = v_x * \Delta t * cos(\theta_{t-1}) \\ \Delta y = v_x * \Delta t * sin(\theta_{t-1})
Δx=vx∗Δt∗cos(θt−1)Δy=vx∗Δt∗sin(θt−1)
则
t
t
t时刻机器人的位姿
(
x
′
,
y
′
,
θ
′
)
(x^{\prime},y^{\prime},\theta^{\prime})
(x′,y′,θ′)
x
′
=
x
+
v
x
∗
Δ
t
∗
c
o
s
(
θ
t
−
1
)
y
′
=
y
+
v
x
∗
Δ
t
∗
s
i
n
(
θ
t
−
1
)
θ
′
=
θ
′
+
w
Δ
t
x' = x + v_x * \Delta t * cos(\theta_{t-1}) \\ y' = y + v_x * \Delta t * sin(\theta_{t-1}) \\ \theta' = \theta' + w \Delta t
x′=x+vx∗Δt∗cos(θt−1)y′=y+vx∗Δt∗sin(θt−1)θ′=θ′+wΔt
附加功能,如果机器人是全向运动即有了
y
y
y轴的速度时,那轨迹如何推演呢?
已知
t
−
1
t-1
t−1时刻机器人位姿
(
x
,
y
,
θ
)
(x,y,\theta)
(x,y,θ)、线速度
v
x
,
v
y
v_x,v_y
vx,vy、角速度
w
w
w、与
t
t
t时刻的间隔时间
Δ
t
\Delta t
Δt,求解
t
t
t时刻机器人位姿
(
x
′
,
y
′
,
θ
′
)
(x^{\prime},y^{\prime},\theta^{\prime})
(x′,y′,θ′)
t
t
t时刻沿机器人坐标系
X
R
X_R
XR轴移动了
v
x
∗
Δ
t
v_x * \Delta t
vx∗Δt,沿机器人坐标系
Y
R
Y_R
YR轴移动了
v
y
∗
Δ
t
v_y * \Delta t
vy∗Δt,只需要将每段距离分别投影在世界坐标系
X
w
,
Y
w
X_w,Y_w
Xw,Yw轴上并相加,就可以得到
t
t
t时刻相对于
t
−
1
t-1
t−1时刻机器人在世界坐标系中坐标移动的位移
Δ
x
和
Δ
y
\Delta x和 \Delta y
Δx和Δy。
Δ
x
=
v
x
∗
Δ
t
∗
c
o
s
(
θ
t
−
1
)
−
v
y
∗
Δ
t
∗
s
i
n
(
θ
t
−
1
)
Δ
y
=
v
x
∗
Δ
t
∗
s
i
n
(
θ
t
−
1
)
+
v
y
∗
Δ
t
∗
c
o
s
(
θ
t
−
1
)
\Delta x = v_x * \Delta t * cos(\theta_{t-1})-v_y * \Delta t * sin(\theta_{t-1}) \\ \Delta y = v_x * \Delta t * sin(\theta_{t-1})+ v_y * \Delta t * cos(\theta_{t-1})
Δx=vx∗Δt∗cos(θt−1)−vy∗Δt∗sin(θt−1)Δy=vx∗Δt∗sin(θt−1)+vy∗Δt∗cos(θt−1)
则
t
t
t时刻机器人的位姿
(
x
′
,
y
′
,
θ
′
)
(x^{\prime},y^{\prime},\theta^{\prime})
(x′,y′,θ′)
x
′
=
x
+
v
x
∗
Δ
t
∗
c
o
s
(
θ
t
−
1
)
−
v
y
∗
Δ
t
∗
s
i
n
(
θ
t
−
1
)
y
′
=
y
+
v
x
∗
Δ
t
∗
s
i
n
(
θ
t
−
1
)
+
v
y
∗
Δ
t
∗
c
o
s
(
θ
t
−
1
)
θ
′
=
θ
′
+
w
Δ
t
x' = x + v_x * \Delta t * cos(\theta_{t-1})-v_y * \Delta t * sin(\theta_{t-1}) \\ y' = y + v_x * \Delta t * sin(\theta_{t-1})+ v_y * \Delta t * cos(\theta_{t-1}) \\ \theta' = \theta' + w \Delta t
x′=x+vx∗Δt∗cos(θt−1)−vy∗Δt∗sin(θt−1)y′=y+vx∗Δt∗sin(θt−1)+vy∗Δt∗cos(θt−1)θ′=θ′+wΔt
从以上得知,全向运动的计算是包含不是全向的,只需要令线速度
v
y
=
0
v_y=0
vy=0即可。
4 总结
本博文讲解了轮式里程计的基本原理和运动学模型的推导。