分类于: Robotics
关键词: 概率机器人

概率机器人速度运动模型

由于移动机器人考虑跟多的是在空间中的移动,因此,更多的情况是使考虑移动机器人的运动学描述。假设,移动机器人的运动是三维空间的刚体运动,移动机器人与环境的相对位置可以通过二位平面上的位置来反映。它包括相对外部坐标系的二维平面坐标及其方位角。前两个用 $x$$y$ 表示(不要与状态 $x$ ,混淆),后者用 $\theta$ 表示,机器人的位姿用下面向量描述:

$$ \left(\begin{array}{cccc} x\\ y\\ \theta \end{array}\right) $$

在《概率机器人》的书里面,讲解了2种概率机器人模型:1.假定运动数据 $u_t$ 指定了机器人电动机的速度,称之为速度模型;2.模型假设机器人具有测距信息,称之为里程计模型。下面对这两种模型分别进行个人的解释说明。

速度运动模型

在速度运动模型中,假定机器人是可以通过旋转角速度 $\omega_t$ 和平移速度 $v_t$ 来进行控制。针对机器人的状态空间模型,这两个速度合成的一个向量就是状态空间中的 $u_t$ ,可以用下面的式子表示:

$$ u_t = \left(\begin{array}{cccc} v_t\\ \omega_t \end{array}\right) $$

规定:逆时针旋转为角速度的正方向,向前运动是平移速度的正方向。

速度运动模型的闭式计算

根据书上的顺序,先介绍速度运动模型的闭式计算算法:

$$ \begin{align} \text{1:} \qquad \qquad & \text{Algorithm motion_model_velocity} (x_t, u_t, x_{t-1})\\ \text{2:} \qquad \qquad & \mu = \frac{1}{2} \frac{(x-x')\cos{\theta}+(y-y')\sin{\theta}}{(y-y')\cos{\theta}-(x-x')\sin{\theta}}\\ \text{3:} \qquad \qquad & x^{ * } = \frac{x+x'}{2} + \mu(y-y')\\ \text{4:} \qquad \qquad & y^{ * } = \frac{y+y'}{2} + \mu(x'-x)\\ \text{5:} \qquad \qquad & r^{ * } = \sqrt{(x-x^{ * })^2 + (y-y^{ * })^2}\\ \text{6:} \qquad \qquad & \Delta \theta = atan2(y'-y^{ * }, x'-x^{ * }) - atan2(y-y^{ * }, x-x^{ * })\\ \text{7:} \qquad \qquad & \hat{v} = \frac{\Delta \theta}{\Delta t}r^{ * }\\ \text{8:} \qquad \qquad & \hat{\omega} = \frac{\Delta \theta}{\Delta t}\\ \text{9:} \qquad \qquad & \hat{\gamma} = \frac{\theta' - \theta}{\Delta t} - \hat{\omega}\\ \text{10:} \qquad \qquad & \text{return }prob(v-\hat{v}, \alpha_1 v^2 + \alpha_2 \omega) \cdot prob(\omega - \hat{\omega}, \alpha_3 v^2 + \alpha_4 \omega^2) \cdot prob(\hat{\gamma}, \alpha_5 v^2 + \alpha_6 \omega^2) \end{align} $$

在上面的算法中, $u_t$用速度向量 $(v \quad \omega)^T$ 表示, $x_t$ 用向量 $(x' \quad y' \quad \theta')^T$ 表示, $x_{t-1}$ 用向量 $(x \quad y \quad \theta)^T$ 表示。在算法最后的输出函数 $prob(\mathbf{\cdot})$ 用来建立运动误差。它计算其参数 $x$ 以零为中心方差为 $b^2$ 的随机变量下的概率,可以由标准正态分布和三角形分布获得这个值。具体的算法,如下表示:

$$ \begin{align} \text{1:} \qquad \qquad & \text{Algorithm prob_normal_distributiion} (a, b^2):\\ \text{2:} \qquad \qquad & \text{return } \frac{1}{\sqrt{2 \pi b^2}}exp[ -\frac{1}{2} \frac{a^2}{b^2} ]\\ \text{3:} \qquad \qquad & \text{Algorithm prob_triangular_distributiion} (a, b^2):\\ \text{4:} \qquad \qquad & \text{return } max [ 0, \frac{1}{\sqrt{6}b}-\frac{|a|}{6b^2} ] \end{align} $$

速度运动模型的采样算法

个人认为,采样算法主要是为了满足粒子滤波算法的需求,从而形成的采样算法。因为,粒子滤波的本质是用一个样本群表示一个概率分布,在粒子滤波的推导过程中,可以发现粒子滤波的第一步概率获取就是获取运动模型的概率。下面直接给出他的采样算法:

$$ \begin{align} \text{1:} \qquad \qquad & \text{Algorithm sample_motion_model_velocity}(u_t, x_{t-1}):\\ \text{2:} \qquad \qquad & \hat{v} = v + sample(\alpha_1 v^2 + \alpha_2 \omega^2)\\ \text{3:} \qquad \qquad & \hat{\omega} = \omega + sample(\alpha_3 v^2 + \alpha_4 \omega^2)\\ \text{4:} \qquad \qquad & \hat{\gamma} = sample(\alpha_5 v^2 + \alpha_6 \omega^2)\\ \text{5:} \qquad \qquad & x' = x - \frac{\hat{v}}{\hat{\omega}}\sin{\theta} + \frac{\hat{v}}{\hat{\omega}}\sin{(\theta + \hat{\omega} \Delta t)}\\ \text{6:} \qquad \qquad & y' = y + \frac{\hat{v}}{\hat{\omega}}\sin{\theta} - \frac{\hat{v}}{\hat{\omega}}\cos{(\theta + \hat{\omega} \Delta t)}\\ \text{7:} \qquad \qquad & \theta' = \theta + \hat{\omega} \Delta t + \hat{\gamma}\Delta t\\ \text{8:} \qquad \qquad & \text{return } x_t = (x',y',\theta')^T \end{align} $$

上面算法的 $sample(\cdot)$ 可以根据下面的采样算法来进行采样:

$$ \begin{align} \text{1:} \qquad \qquad & \text{Algorithm sample_normal_distribution}(b^2):\\ \text{2:} \qquad \qquad & \text{return} \frac{1}{2} \sum_{i=1}^{12}rand(-b,b)\\ \\ \text{3:} \qquad \qquad & \text{Algorithm sample_triangular_distribution}(b^2):\\ \text{4:} \qquad \qquad & \text{return} \frac{\sqrt{6}}{2} [rand(-b,b) + rand(-b,b)] \end{align} $$

速度运动模型的数学推导

理想运动

在转向概率情况前,先从一种理想的无噪声的机器人运动学开始研究。令 $u_t = (v \quad \omega)^T$表示时刻 $t$ 的控制。如果两种速度在整个时间间隔 $[t-1, t]$ 都是固定的值,则机器人以如下半径的圆运动:

$$ r = |\frac{v}{\omega}| $$

所以,任意半径为 $r$ 圆形轨迹运动的对象在平移速度 $v$ 和旋转速度 $\omega$ 之间都遵循的一般关系:

$$ v = \omega r $$

速度运动模型

$x_{t-1} = (x,y,\theta)^T$ 是机器人的初始位姿,并假定在 $\Delta t$ 时间内保持速度 $(v,\omega)^T$ 恒定。使用 $(x_c, y_c)^T$ 表示运动的圆心坐标,可以利用运动时旋转的圆心 $(x_c,y_c)^T$ 作为中间变量,将运动后的姿态 $(x',y',\theta ')^T$ 与运动前的姿态 $(x,y,\theta)^T$ 通过下面的式子联系起来。

$$ \begin{align} \left(\begin{array}{ccc} x'\\ y'\\ \theta' \end{array}\right) & = \left(\begin{array}{ccc} x_c + \frac{v}{\omega}\sin{(\theta + \omega \Delta t)}\\ y_c - \frac{v}{\omega}\cos{(\theta + \omega \Delta t)}\\ \theta + \omega \Delta t \end{array}\right)\\ & = \left(\begin{array}{ccc} x\\ y\\ \theta \end{array}\right) + \left(\begin{array}{ccc} -\frac{v}{\omega}\sin{\theta}+\frac{v}{\omega}\sin{(\theta + \omega \Delta t)}\\ \frac{v}{\omega}\cos{\theta}-\frac{v}{\omega}\cos{(\theta + \omega \Delta t)}\\ \omega \Delta t \end{array}\right) \end{align} $$

真实运动

实际上,机器人的运动是受噪声影响的。真实的速度与给定的速度(或者测量的速度,在机器人有测量速度的传感器的情况下)是不同的。将这种不同建模为以 $0$ 为中心的具有有限方差的随机变量。更精确的,假定实际的速度由下式给定:

$$ \left(\begin{array}{ccc} \hat{v}\\ \hat{\omega} \end{array}\right) = \left(\begin{array}{ccc} v\\ \omega \end{array}\right) + \left(\begin{array}{ccc} \varepsilon_{\alpha_1 v^2 + \alpha_2 \omega^2}\\ \varepsilon_{\alpha_3 v^2 + \alpha_4 \omega^2} \end{array}\right) $$

参数 $\alpha_1 \sim \alpha_4(\alpha_i \geq 0,i=1,2,\dots,4)$ 是指定的机器人误差参数。其中,$\varepsilon_{b^2}$ 可以从三角分布和正态分布中选择一种来表示误差。

$$ \varepsilon_{b^2}(a) = \frac{1}{\sqrt{2 \pi b^2}}exp[ -\frac{1}{2} \frac{a^2}{b^2} ] $$

或者

$$ \varepsilon_{b^2}(a) = max[0,\frac{1}{\sqrt{6}b}-\frac{|a|}{6b^2}] $$

在理想的速度模型情况下,使用 $(\hat{v},\hat{\omega})$ 替换原来的 $(v,\omega)$ ,就可以得到真实情况下的数学模型。

$$ \begin{align} \left(\begin{array}{ccc} x'\\ y'\\ \theta' \end{array}\right) = \left(\begin{array}{ccc} x\\ y\\ \theta \end{array}\right) + \left(\begin{array}{ccc} -\frac{\hat{v}}{\hat{\omega}}\sin{\theta}+\frac{\hat{v}}{\hat{\omega}}\sin{(\theta + \hat{\omega} \Delta t)}\\ \frac{\hat{v}}{\hat{\omega}}\cos{\theta}-\frac{\hat{v}}{\hat{\omega}}\cos{(\theta + \hat{\omega} \Delta t)}\\ \hat{\omega} \Delta t \end{array}\right) \end{align} $$

最终方向

以上给出的两个方程式都精确地描述了机器人真实地在一个半径为 $ r=\frac{\hat{v}}{\hat{\omega}}$ 形轨迹上移动时的最终位置。而这个圆弧段的半径和移动的距离是受到控制噪声的影响的,轨迹是圆这个事实并不存在。为了推广运动模型,假设机器人到达它的最终位姿时,旋转 $ \hat{\gamma} $ 。通过下式将模型修改为:

$$ \theta' = \theta + \hat{\omega} \Delta t + \hat{\gamma} \Delta t \\ \hat{\gamma} = \varepsilon_{\alpha_5} v^2 + \varepsilon_{\alpha_6} \omega^2 $$

此处的 $\alpha_5$$\alpha_6$ 是确定附加的旋转噪声方差的额外的特定机器人参数。可以得到速度运动模型的最终模型为下式:

$$ \begin{align} \left(\begin{array}{ccc} x'\\ y'\\ \theta' \end{array}\right) = \left(\begin{array}{ccc} x\\ y\\ \theta \end{array}\right) + \left(\begin{array}{ccc} -\frac{\hat{v}}{\hat{\omega}}\sin{\theta}+\frac{\hat{v}}{\hat{\omega}}\sin{(\theta + \hat{\omega} \Delta t)}\\ \frac{\hat{v}}{\hat{\omega}}\cos{\theta}-\frac{\hat{v}}{\hat{\omega}}\cos{(\theta + \hat{\omega} \Delta t)}\\ \hat{\omega} \Delta t + \hat{\gamma} \Delta t \end{array}\right) \end{align} $$

$p(x_t|u_t, x_{t-1})$ 的计算

motion_model_velocity 算法(最开始的闭式运算)实现了对给定 $x_{t-1} = (x,y,\theta)^T$$u_t = (v,\omega)^T$$x_t = (x',y',\theta')^T$ 值时 $p(x_t|u_t, x_{t-1})$ 的计算。

计算在时间单元 $\Delta t$ 内,控制作用 $u_t = (v,\omega)^T$ 下将机器人位姿从 $x_{t-1} = (x,y,\theta)^T$ 变成位置 $x_t = (x',y',\theta')^T$ 的概率 $ p(x_t|u_t, x_{t-1}) $ 。接下来,确定机器人要获得方向 $\theta'$ 需要最终旋转的 $\hat{\gamma}$ 。基于这些,然后可很容易计算出想得到的概率 $ p(x_t|u_t, x_{t-1}) $

模型假设机器入在 $\Delta t$ 内移动速度是恒定的,形成一个圆形的轨迹。对一个从 $x_{t-1}=(x,y,\theta)^T$ 移动到 $x_t = (x',y')^T$ 的机器人,圆的中心定义为 $(x^{ * }, y^{ * })^T$ 并由下式给出:

$$ \left(\begin{array}{ccc} x^{ * } \\ y^{ * } \end{array}\right) = \left(\begin{array}{ccc} x \\ y \end{array}\right) + \left(\begin{array}{ccc} -\lambda \sin{\theta}\\ \lambda \cos{\theta} \end{array}\right) = \left(\begin{array}{ccc} \frac{x+x'}{2} + \mu(y-y')\\ \frac{y+y'}{2} + \mu(x'-x) \end{array}\right) $$

利用圆周运动的几何特性,可以解出 $\mu$ 的结果如下式:

$$ \mu = \frac{1}{2} \frac{(x-x')\cos{\theta} + (y-y')\sin{\theta}}{(y-y')\cos{\theta} - (x-x')\sin{\theta}} $$

圆的半径可由欧拉距离给定:

$$ r^{ * } = \sqrt{(x-x^{ * })^2 + (y-y^{ * })^2} = \sqrt{(x' - x^{ * })^2 + (y' - y^ { * })^2} $$

并且:

$$ \Delta \theta = atan2(y' - y^{ * }, x' - x^{ * }) - atan2(y-y^{ * }, x-x^{ * }) $$

既然假定机器人遵循一个圆形轨迹,沿该圆在 $x_t$$x_{t-1}$ 之间的平移距离为

$$ \Delta dist = r^{ * } \Delta \theta $$

$ \Delta dist$$\Delta \theta$ ,可以很容易地计算速度 $\hat{v}$$\hat{\omega}$

$$ \hat{u}_t = \left( \begin{array} \hat{v} \\ \hat{\omega} \end{array} \right) = \Delta t^{-1} \left( \begin{array} \Delta dist \Delta \theta \end{array} \right) $$

旋转速度为:

$$ \hat{\gamma} = \Delta t^{-1} (\theta' - \theta) - \hat{\omega} $$

运动误差由下式定义:

$$ \begin{align} v_{err} &= v - \hat{v}\\ \omega_{err} &= \omega - \hat{\omega}\\ \gamma_{err} &= \hat{\gamma} \end{align} $$

这些误差具有如下的概率:

$$ \begin{align} & \varepsilon_{\alpha_1 v^2 + \alpha_2 \omega^2}(v_{err})\\ & \varepsilon_{\alpha_3 v^2 + \alpha_4 \omega^2}(\omega_{err})\\ & \varepsilon_{\alpha_5 v^2 + \alpha_6 \omega^2}(\gamma_{err}) \end{align} $$

最后可以获得概率 $p(x_t|u_t, x_{t-1})$ 如下式:

$$ p(x_t|u_t, x_{t-1}) = \varepsilon_{\alpha_1 v^2 + \alpha_2 \omega^2}(v_{err}) \cdot \varepsilon_{\alpha_3 v^2 + \alpha_4 \omega^2}(\omega_{err}) \cdot \varepsilon_{\alpha_5 v^2 + \alpha_6 \omega^2}(\gamma_{err}) $$