概率机器人:里程计运动模型

里程计运动模型

速度运动模型采用机器人的速度来计算位姿的后验概率。里程计运动模型(Odometry motion model)则以里程计测量为基础来计算机器人随时间的运动。

通常,通过编码器可以获得机器人的里程信息。相比而言,里程计虽仍存在误差,但比之速度信息更为精确。

模型建立

理想模型

里程计信息实际上是对传感器的读取测量值,而非控制量。为建立作为测量的里程计模型且保持状态空间较小,将里程计测量值认为控制信号。

在时刻 t t t,机器人确切的位姿由随机变量 x t x_t xt建立,里程计用于估计该位姿信息。由于里程计存在漂移、打滑情况,机器人里程计坐标系与世界坐标系间不存在固定的变换关系。

里程计模型使用由机器人内部里程计测量的相对运动信息。即在时间间隔 ( t − 1 , t ] (t-1, t] (t1,t]中,机器人位姿由 x t − 1 x_{t-1} xt1前进至 x t x_t xt,里程计反馈了 x ˉ t − 1 = [ X ˉ Y ˉ θ ˉ ] T \bar x_{t-1}=\begin{bmatrix}\bar X&\bar Y&\bar \theta\end{bmatrix}^T xˉt1=[XˉYˉθˉ]T x ˉ t = [ X ˉ ′ Y ˉ ′ θ ˉ ′ ] T \bar x_t=\begin{bmatrix}\bar X^{'}&\bar Y^{'}&\bar \theta^{'}\end{bmatrix}^T xˉt=[XˉYˉθˉ]T的相对前进。采用上标“ ˉ \bar{\quad} ˉ”表示为机器人坐标系下坐标,该坐标系与世界坐标系转换关系未知。

由此,机器人的控制量 u t = [ x ˉ t − 1 x ˉ t ] T u_t=\begin{bmatrix}\bar x_{t-1}&\bar x_t\end{bmatrix}^T ut=[xˉt1xˉt]T,可将任意两相邻时刻机器人位姿的相对差可通过三个基本运动串联得到,如图所示。

  • 初始旋转: δ r o t 1 = a t a n 2 ( Y ˉ ′ − Y ˉ , X ˉ ′ − X ˉ ) − θ ˉ \delta_{rot1}=atan2(\bar Y^{'}-\bar Y,\bar X^{'}-\bar X)-\bar\theta δrot1=atan2(YˉYˉ,XˉXˉ)θˉ
  • 平移: δ t r a n s = ( X ˉ − X ˉ ′ ) 2 + ( Y ˉ − Y ˉ ′ ) 2 \delta_{trans}=\sqrt{(\bar X-\bar X^{'})^2+(\bar Y-\bar Y^{'})^2} δtrans=(XˉXˉ)2+(YˉYˉ)2
  • 二次旋转: δ r o t 2 = θ ˉ ′ − θ ˉ − δ r o t 1 \delta_{rot2}=\bar \theta^{'}-\bar \theta-\delta_{rot1} δrot2=θˉθˉδrot1

在这里插入图片描述

由此,机器人由初始位姿 x t − 1 = [ X Y θ ] T x_{t-1}=\begin{bmatrix}X&Y&\theta\end{bmatrix}^T xt1=[XYθ]T沿着运动轨迹方向(下图中紫线所示)运动至当前时刻位姿 x t = [ X ′ Y ′ θ ′ ] T x_{t}=\begin{bmatrix}X^{'}&Y^{'}&\theta^{'}\end{bmatrix}^T xt=[XYθ]T可拆分为机器人首先旋转角度 δ r o t 1 \delta_{rot1} δrot1再沿着此方向平移 δ t r a n s \delta_{trans} δtrans,随后再次旋转 δ r o t 2 \delta_{rot2} δrot2抵达目标位姿,如图所示:

在这里插入图片描述

上图中,由三角函数化简可以得到如下表达式:
[ X ′ Y ′ θ ′ ] = [ X Y θ ] + [ δ t r a n s ⋅ cos ⁡ ( θ + δ r o t 1 ) δ t r a n s ⋅ sin ⁡ ( θ + δ r o t 1 ) δ r o t 1 + δ r o t 2 ] \begin{bmatrix} X^{'}\\Y^{'}\\\theta^{'}\\ \end{bmatrix}=\begin{bmatrix} X\\Y\\\theta \end{bmatrix}+\begin{bmatrix} \delta_{trans}\cdot\cos(\theta+\delta_{rot1})\\ \delta_{trans}\cdot\sin(\theta+\delta_{rot1})\\ \delta_{rot1}+\delta_{rot2} \end{bmatrix} XYθ=XYθ+δtranscos(θ+δrot1)δtranssin(θ+δrot1)δrot1+δrot2

噪声模型

在真实环境下,机器人运动及里程计的测量存在噪声。定义里程计的测量值减去噪声得到的为实际里程值:
δ ^ r o t 1 = δ r o t 1 − ε α 1 δ r o t 1 2 + α 2 δ t r a n s 2 δ ^ t r a n s = δ t r a n s − ε α 3 δ t r a n s 2 + α 4 δ r o t 1 2 + α 4 δ r o t 2 2 δ ^ r o t 2 = δ r o t 2 − ε α 1 δ r o t 2 2 + α 2 δ t r a n s 2 \begin{aligned} \hat \delta_{rot1}&=\delta_{rot1}-\varepsilon_{\alpha_1\delta_{rot1}^2+\alpha_2\delta_{trans}^2}\\ \hat \delta_{trans}&=\delta_{trans}-\varepsilon_{\alpha_3\delta_{trans}^2+\alpha_4\delta_{rot1}^2+\alpha_4\delta_{rot2}^2}\\ \hat \delta_{rot2}&=\delta_{rot2}-\varepsilon_{\alpha_1\delta_{rot2}^2+\alpha_2\delta_{trans}^2} \end{aligned} δ^rot1δ^transδ^rot2=δrot1εα1δrot12+α2δtrans2=δtransεα3δtrans2+α4δrot12+α4δrot22=δrot2εα1δrot22+α2δtrans2
则,噪声下机器人的里程计运动模型如下所示:
[ X ′ Y ′ θ ′ ] = [ X Y θ ] + [ δ ^ t r a n s ⋅ cos ⁡ ( θ + δ ^ r o t 1 ) δ ^ t r a n s ⋅ sin ⁡ ( θ + δ ^ r o t 1 ) δ ^ r o t 1 + δ ^ r o t 2 ] \begin{bmatrix} X^{'}\\Y^{'}\\\theta^{'}\\ \end{bmatrix}=\begin{bmatrix} X\\Y\\\theta \end{bmatrix}+\begin{bmatrix} \hat\delta_{trans}\cdot\cos(\theta+\hat\delta_{rot1})\\ \hat\delta_{trans}\cdot\sin(\theta+\hat\delta_{rot1})\\ \hat\delta_{rot1}+\hat\delta_{rot2} \end{bmatrix} XYθ=XYθ+δ^transcos(θ+δ^rot1)δ^transsin(θ+δ^rot1)δ^rot1+δ^rot2

闭式算法

算法推导

在真实环境下,通过里程计测量值减去实际值可以得到里程计误差:
δ r o t 1 , e r r = δ r o t 1 − δ ^ r o t 1 δ t r a n s , e r r = δ t r a n s − δ ^ t r a n s δ r o t 2 , e r r = δ r o t 2 − δ ^ r o t 2 \begin{aligned} \delta_{rot1,err}&=\delta_{rot1}-\hat \delta_{rot1}\\ \delta_{trans,err}&=\delta_{trans}-\hat \delta_{trans}\\ \delta_{rot2,err}&=\delta_{rot2}-\hat \delta_{rot2}\\ \end{aligned} δrot1,errδtrans,errδrot2,err=δrot1δ^rot1=δtransδ^trans=δrot2δ^rot2
由此,得到各项噪声的概率密度计算如下:
p 1 = ε α 1 δ r o t 1 2 + α 2 δ t r a n s 2 ( δ r o t 1 , e r r ) p 2 = ε α 3 δ t r a n s 2 + α 4 δ r o t 1 2 + α 4 δ r o t 2 2 ( δ t r a n s , e r r ) p 3 = ε α 1 δ r o t 2 2 + α 2 δ t r a n s 2 ( δ r o t 2 , e r r ) \begin{aligned} p_1&=\varepsilon_{\alpha_1\delta_{rot1}^2+\alpha_2\delta_{trans}^2}(\delta_{rot1,err})\\ p_2&=\varepsilon_{\alpha_3\delta_{trans}^2+\alpha_4\delta_{rot1}^2+\alpha_4\delta_{rot2}^2}(\delta_{trans,err})\\ p_3&=\varepsilon_{\alpha_1\delta_{rot2}^2+\alpha_2\delta_{trans}^2}(\delta_{rot2,err}) \end{aligned} p1p2p3=εα1δrot12+α2δtrans2(δrot1,err)=εα3δtrans2+α4δrot12+α4δrot22(δtrans,err)=εα1δrot22+α2δtrans2(δrot2,err)
假设各项噪声相互独立,则由 x t − 1 x_{t-1} xt1状态得到 x t x_t xt状态的概率密度:
p ( x t ∣ u t , x t − 1 ) = p 1 ⋅ p 2 ⋅ p 3 p(x_t|u_t,x_{t-1})=p_1\cdot p_2\cdot p_3 p(xtut,xt1)=p1p2p3

算法设计

系统输入: 初始位姿 x t − 1 = [ X Y θ ] T x_{t-1}=\begin{bmatrix}X&Y&\theta\end{bmatrix}^T xt1=[XYθ]T、控制量 u t = [ x ˉ t − 1 x ˉ t ] T u_t=\begin{bmatrix}\bar x_{t-1}&\bar x_t\end{bmatrix}^T ut=[xˉt1xˉt]T、估计后继姿态 x t = [ X ′ Y ′ θ ′ ] T x_t=\begin{bmatrix}X^{'}&Y^{'}&\theta^{'}\end{bmatrix}^T xt=[XYθ]T

系统输出: 后继姿态为 x t x_t xt的概率 p ( x t ∣ u t , x t − 1 ) p(x_t | u_t,x_{t-1}) p(xtut,xt1)

假设条件: 控制算法以固定时间间隔 Δ t \Delta t Δt执行。

用参数 α 1 \alpha_1 α1 ~ α 4 \alpha_4 α4表示机器人里程计运动噪声系数:

  • 里程计平移噪声
    • 参数 α 1 \alpha_1 α1:平移运动中平移分量的噪声
    • 参数 α 2 \alpha_2 α2:平移运动中旋转分量的噪声
  • 里程计旋转噪声
    • 参数 α 3 \alpha_3 α3:旋转运动中平移分量的噪声
    • 参数 α 4 \alpha_4 α4:旋转运动中旋转分量的噪声

算法实现逻辑如下:
A l g o r i t h m m o t i o n _ m o d e l _ o d o m e t r y ( x t , u t , x t − 1 ) : 1 : δ r o t 1 = a t a n 2 ( Y ˉ ′ − Y ˉ , X ˉ ′ − X ˉ ) − θ ˉ 2 : δ t r a n s = ( X ˉ − X ˉ ′ ) 2 + ( Y ˉ − Y ˉ ′ ) 2 3 : δ r o t 2 = θ ˉ ′ − θ ˉ − δ r o t 1 4 : δ ^ r o t 1 = a t a n 2 ( Y ′ − Y , X ′ − X ) − θ 5 : δ ^ t r a n s = ( X − X ′ ) 2 + ( Y − Y ′ ) 2 6 : δ ^ r o t 2 = θ ′ − θ − δ ^ r o t 1 7 : p 1 = p r o b ( δ r o t 1 − δ ^ r o t 1 , α 1 δ ^ r o t 1 2 + α 2 δ ^ t r a n s 2 ) 8 : p 2 = p r o b ( δ t r a n s − δ ^ t r a n s , α 3 δ ^ t r a n s 2 + α 4 δ ^ r o t 1 2 + α 4 δ ^ r o t 2 2 ) 9 : p 3 = p r o b ( δ r o t 2 − δ ^ r o t 2 , α 1 δ ^ r o t 2 2 + α 2 δ ^ t r a n s 2 ) 10 : r e t u r n p 1 ⋅ p 2 ⋅ p 3 \begin{aligned} &Algorithm\quad motion\_model\_odometry(x_t,u_t,x_{t-1}): \\ 1:&\qquad \delta_{rot1}=atan2(\bar Y^{'}-\bar Y,\bar X^{'}-\bar X)-\bar\theta \\ 2:&\qquad \delta_{trans}=\sqrt{(\bar X-\bar X^{'})^2+(\bar Y-\bar Y^{'})^2}\\ 3:&\qquad \delta_{rot2}=\bar \theta^{'}-\bar \theta-\delta_{rot1}\\ \\ 4:&\qquad \hat\delta_{rot1}=atan2(Y^{'}-Y,X^{'}-X)-\theta \\ 5:&\qquad \hat\delta_{trans}=\sqrt{(X-X^{'})^2+(Y-Y^{'})^2}\\ 6:&\qquad \hat\delta_{rot2}=\theta^{'}-\theta-\hat\delta_{rot1}\\ \\ 7:&\qquad p_1=prob(\delta_{rot1}-\hat\delta_{rot1},\alpha_1\hat\delta_{rot1}^2+\alpha_2\hat\delta_{trans}^2)\\ 8:&\qquad p_2=prob(\delta_{trans}-\hat\delta_{trans},\alpha_3\hat\delta_{trans}^2+\alpha_4\hat\delta_{rot1}^2+\alpha_4\hat\delta_{rot2}^2)\\ 9:&\qquad p_3=prob(\delta_{rot2}-\hat\delta_{rot2},\alpha_1\hat\delta_{rot2}^2+\alpha_2\hat\delta_{trans}^2)\\ \\ 10:&\qquad return\quad p_1\cdot p_2\cdot p_3 \end{aligned} 1:2:3:4:5:6:7:8:9:10:Algorithmmotion_model_odometry(xt,ut,xt1):δrot1=atan2(YˉYˉ,XˉXˉ)θˉδtrans=(XˉXˉ)2+(YˉYˉ)2 δrot2=θˉθˉδrot1δ^rot1=atan2(YY,XX)θδ^trans=(XX)2+(YY)2 δ^rot2=θθδ^rot1p1=prob(δrot1δ^rot1,α1δ^rot12+α2δ^trans2)p2=prob(δtransδ^trans,α3δ^trans2+α4δ^rot12+α4δ^rot22)p3=prob(δrot2δ^rot2,α1δ^rot22+α2δ^trans2)returnp1p2p3
其中,1~3行从里程计测量值得到相对运动参数值: [ δ r o t 1 δ t r a n s δ r o t 2 ] T \begin{bmatrix}\delta_{rot1}&\delta_{trans}&\delta_{rot2}\end{bmatrix}^T [δrot1δtransδrot2]T

4~6行由机器人初始位姿 x t − 1 x_{t-1} xt1及预计位姿 x t x_t xt计算得到实际相对运动参数: [ δ ^ r o t 1 δ ^ t r a n s δ ^ r o t 2 ] T \begin{bmatrix}\hat\delta_{rot1}&\hat\delta_{trans}&\hat\delta_{rot2}\end{bmatrix}^T [δ^rot1δ^transδ^rot2]T

7~9行计算各自噪声引起的概率密度 p 1 、 p 2 、 p 3 p_1、p_2、p_3 p1p2p3,由于各噪声相互独立,最后返回累乘值 p 1 ⋅ p 2 ⋅ p 3 p_1\cdot p_2\cdot p_3 p1p2p3

函数 p r o b ( x , b 2 ) prob(x,b^2) prob(x,b2)用于实现x上均值为0,方差为 b 2 b^2 b2的概率分布,可用正态分布或三角形分布实现,同速度运动模型,不在赘述。

应注意,所有角度差值应保持在区间 [ − π , π ] [-\pi,\pi] [π,π]内,即函数 p r o b ( x , b 2 ) prob(x,b^2) prob(x,b2)中参数 x x x属于该区间。

算法效果

在平面空间XOY下,设置机器人具有相同的初始姿态 x t − 1 x_{t-1} xt1和控制量 u t u_t ut,则在不同里程计噪声参数下,模型具有不同效果。

当机器人具有中等误差(参数 α 1 \alpha_1 α1 ~ α 4 \alpha_4 α4),则如图所示:

在这里插入图片描述

当机器人具有较大的平移误差(参数 α 1 、 α 2 \alpha_1、\alpha_2 α1α2),但具有较小的角度误差(参数 α 3 、 α 4 \alpha_3、\alpha_4 α3α4),则如图所示:

在这里插入图片描述
当机器人具有较小的平移误差(参数 α 1 、 α 2 \alpha_1、\alpha_2 α1α2),但具有较大的角度误差(参数 α 3 、 α 4 \alpha_3、\alpha_4 α3α4),则如图所示:

在这里插入图片描述

当两次测量间时间较短时,里程计运动模型同速度运动模型的闭式算法效果差不多。也即,一个机器人如果置信度经常更新(0.1s更新一次),则运动模型间的不同差异不大。

采样算法

算法推导

采用粒子滤波用于采样,与闭式算法不同。该算法通过给定的初始姿态 x t − 1 x_{t-1} xt1和控制量 u t = [ x ˉ t − 1 x ˉ t ] T u_t=\begin{bmatrix}\bar x_{t-1}&\bar x_t\end{bmatrix}^T ut=[xˉt1xˉt]T,估计出一个当前位姿 x t x_t xt

算法设计

系统输入: 初始位姿 x t − 1 = [ X Y θ ] T x_{t-1}=\begin{bmatrix}X&Y&\theta\end{bmatrix}^T xt1=[XYθ]T、控制量 u t = [ x ˉ t − 1 x ˉ t ] T u_t=\begin{bmatrix}\bar x_{t-1}&\bar x_t\end{bmatrix}^T ut=[xˉt1xˉt]T

系统输出: 估计后继姿态 x t = [ X ′ Y ′ θ ′ ] T x_t=\begin{bmatrix}X^{'}&Y^{'}&\theta^{'}\end{bmatrix}^T xt=[XYθ]T

假设条件: 控制算法以固定时间间隔 Δ t \Delta t Δt执行。

算法实现逻辑如下:
A l g o r i t h m s a m p l e _ m o t i o n _ m o d e l _ o d o m e t r y ( x t , u t , x t − 1 ) : 1 : δ r o t 1 = a t a n 2 ( Y ˉ ′ − Y ˉ , X ˉ ′ − X ˉ ) − θ ˉ 2 : δ t r a n s = ( X ˉ − X ˉ ′ ) 2 + ( Y ˉ − Y ˉ ′ ) 2 3 : δ r o t 2 = θ ˉ ′ − θ ˉ − δ r o t 1 4 : δ ^ r o t 1 = δ r o t 1 − s a m p l e ( α 1 δ ^ r o t 1 2 + α 2 δ ^ t r a n s 2 ) 5 : δ ^ t r a n s = δ t r a n s − s a m p l e ( α 3 δ ^ t r a n s 2 + α 4 δ ^ r o t 1 2 + α 4 δ ^ r o t 2 2 ) 6 : δ ^ r o t 2 = δ r o t 2 − s a m p l e ( α 1 δ ^ r o t 2 2 + α 2 δ ^ t r a n s 2 ) 7 : X ′ = X + δ ^ t r a n s cos ⁡ ( θ + δ ^ r o t 1 ) 8 : Y ′ = Y + δ ^ t r a n s sin ⁡ ( θ + δ ^ r o t 1 ) 9 : θ ′ = θ + δ ^ r o t 1 + δ ^ r o t 2 10 : r e t u r n x t = x t = [ X ′ Y ′ θ ′ ] T \begin{aligned} &Algorithm\quad sample\_motion\_model\_odometry(x_t,u_t,x_{t-1}): \\ 1:&\qquad \delta_{rot1}=atan2(\bar Y^{'}-\bar Y,\bar X^{'}-\bar X)-\bar\theta \\ 2:&\qquad \delta_{trans}=\sqrt{(\bar X-\bar X^{'})^2+(\bar Y-\bar Y^{'})^2}\\ 3:&\qquad \delta_{rot2}=\bar \theta^{'}-\bar \theta-\delta_{rot1}\\ \\ 4:&\qquad \hat\delta_{rot1}=\delta_{rot1}-sample(\alpha_1\hat\delta_{rot1}^2+\alpha_2\hat\delta_{trans}^2) \\ 5:&\qquad \hat\delta_{trans}=\delta_{trans}-sample(\alpha_3\hat\delta_{trans}^2+\alpha_4\hat\delta_{rot1}^2+\alpha_4\hat\delta_{rot2}^2)\\ 6:&\qquad \hat\delta_{rot2}=\delta_{rot2}-sample(\alpha_1\hat\delta_{rot2}^2+\alpha_2\hat\delta_{trans}^2)\\ \\ 7:&\qquad X^{'}=X+\hat\delta_{trans}\cos(\theta+\hat\delta_{rot1})\\ 8:&\qquad Y^{'}=Y+\hat\delta_{trans}\sin(\theta+\hat\delta_{rot1})\\ 9:&\qquad \theta^{'}=\theta+\hat\delta_{rot1}+\hat\delta_{rot2}\\ \\ 10:&\qquad return\quad x_t=x_t=\begin{bmatrix}X^{'}&Y^{'}&\theta^{'}\end{bmatrix}^T \end{aligned} 1:2:3:4:5:6:7:8:9:10:Algorithmsample_motion_model_odometry(xt,ut,xt1):δrot1=atan2(YˉYˉ,XˉXˉ)θˉδtrans=(XˉXˉ)2+(YˉYˉ)2 δrot2=θˉθˉδrot1δ^rot1=δrot1sample(α1δ^rot12+α2δ^trans2)δ^trans=δtranssample(α3δ^trans2+α4δ^rot12+α4δ^rot22)δ^rot2=δrot2sample(α1δ^rot22+α2δ^trans2)X=X+δ^transcos(θ+δ^rot1)Y=Y+δ^transsin(θ+δ^rot1)θ=θ+δ^rot1+δ^rot2returnxt=xt=[XYθ]T
其中,1~3行从里程计测量值得到相对运动参数值: [ δ r o t 1 δ t r a n s δ r o t 2 ] T \begin{bmatrix}\delta_{rot1}&\delta_{trans}&\delta_{rot2}\end{bmatrix}^T [δrot1δtransδrot2]T

4~6行由机器人初始位姿 x t − 1 x_{t-1} xt1及采样样本计算得到实际相对运动参数值: [ δ ^ r o t 1 δ ^ t r a n s δ ^ r o t 2 ] T \begin{bmatrix}\hat\delta_{rot1}&\hat\delta_{trans}&\hat\delta_{rot2}\end{bmatrix}^T [δ^rot1δ^transδ^rot2]T

7~9行根据实际相对运动参数值,预测当前时刻机器人位姿 x t x_t xt

式中,函数 s a m p l e ( b 2 ) sample(b^2) sample(b2)用于实现均值为0,方差为 b 2 b^2 b2的随机样本生成,同速度运动模型中采样算法,不在赘述。

算法效果

在平面空间XOY下,设置机器人具有相同的初始姿态 x t − 1 x_{t-1} xt1和控制量 u t u_t ut,且控制量与初始位姿同闭式计算中相同,则在不同不同里程计噪声参数下,具有不同效果。(采样500次)

当机器人具有中等误差(参数 α 1 \alpha_1 α1 ~ α 4 \alpha_4 α4),则如图所示:
在这里插入图片描述

当机器人具有较大的平移误差(参数 α 1 、 α 2 \alpha_1、\alpha_2 α1α2),但具有较小的角度误差(参数 α 3 、 α 4 \alpha_3、\alpha_4 α3α4),则如图所示:

在这里插入图片描述
当机器人具有较小的平移误差(参数 α 1 、 α 2 \alpha_1、\alpha_2 α1α2),但具有较大的角度误差(参数 α 3 、 α 4 \alpha_3、\alpha_4 α3α4),则如图所示:

在这里插入图片描述
当机器人不断进行移动时,不确定性将增加,样本将遍布越来越大的空间,如下图所示机器人沿着实现不断移动:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值