机器人运动估计——IMU运动方程与ESKF原理介绍(上)

Hello! 欢迎来到我的博客
今天的内容关于机器人中常用的传感器IMU,我们用它来实现机器人姿态、速度、位置的估计。
今天将会介绍使用低成本IMU进行机器人运动估计的一个常用方法——ESKF。

1 四元数基础

四元数,英文名称为:quaternion。正如一个单位复数可以表示在复平面上的旋转一样,单位四元数也可以用于表示三维空间中的旋转,并且由于其在更新过程中不会发生奇异现象,因此在惯性导航中被广泛使用。一般来说,四元数的表示方式有许多,其中最常用的是两种,一种是Hamilton,另一种是JPL。由于,在机器人领域中,无论是ROS,Eigen,Ceres等等项目中都用到的是Hamilton四元数,因此,这里后续文章中使用以及介绍的也是这种。

以下介绍的都是在IMU运动方程以及ESKF中必要的关于四元数的知识,因此可能会过于简略,读者可暂时先跳转至第二部分阅读,遇到不明的四元数定义时,再回来查阅。

(1)四元数定义

Q = a + b i + c j + d k ∈ H Q=a+b i+c j+d k \in \mathbb{H} Q=a+bi+cj+dkH
其中, { a , b , c , d } ∈ R \{a, b, c, d\} \in \mathbb{R} {a,b,c,d}R是系数, { i , j , k } \{i, j, k\} {i,j,k}是虚部单位。
一个四元数可以表示为实部和虚部,如下:
Q = q w + q x i + q y j + q z k ⇔ Q = q w + q v Q=q_{w}+q_{x} i+q_{y} j+q_{z} k \quad \Leftrightarrow \quad Q=q_{w}+\mathbf{q}_{v} Q=qw+qxi+qyj+qzkQ=qw+qv
记作向量形式则为:
q ≜ [ q w q v ] = [ q w q x q y q z ] \mathbf{q} \triangleq\left[\begin{array}{l} q_{w} \\ \mathbf{q}_{v} \end{array}\right]=\left[\begin{array}{l} q_{w} \\ q_{x} \\ q_{y} \\ q_{z} \end{array}\right] q[qwqv]=qwqxqyqz

(2)单位四元数

单位四元数可以作为一种旋转的表示方式,它可以转换为欧拉角,也可以转换为旋转矩阵。
单位四元数的定义:
q = [ cos ⁡ θ u sin ⁡ θ ] \mathbf{q}=\left[\begin{array}{c} \cos \theta \\ \mathbf{u} \sin \theta \end{array}\right] q=[cosθusinθ]
其中, u = u x i + u y j + u z k \mathbf{u}=u_{x} i+u_{y} j+u_{z} k u=uxi+uyj+uzk是单位向量,而 θ \theta θ为一个标量。
由此可知,单位四元数的模长为1。
∣ ∣ q ∣ ∣ = cos ⁡ 2 θ + sin ⁡ 2 θ ( u x 2 + u y 2 + u z 2 ) = 1 ||\mathbf{q}||=\sqrt{\cos^2\theta+\sin^2\theta(u_x^2+u_y^2+u_z^2)}=1 q=cos2θ+sin2θ(ux2+uy2+uz2) =1

(3)乘法

两个四元数乘法的记号为: ⊗ \otimes ,乘法的具体定义为:
p ⊗ q = [ p w q w − p x q x − p y q y − p z q z p w q x + p x q w + p y q z − p z q y p w q y − p x q z + p y q w + p z q x p w q z + p x q y − p y q x + p z q w ] \mathbf{p} \otimes \mathbf{q}=\left[\begin{array}{l} p_{w} q_{w}-p_{x} q_{x}-p_{y} q_{y}-p_{z} q_{z} \\ p_{w} q_{x}+p_{x} q_{w}+p_{y} q_{z}-p_{z} q_{y} \\ p_{w} q_{y}-p_{x} q_{z}+p_{y} q_{w}+p_{z} q_{x} \\ p_{w} q_{z}+p_{x} q_{y}-p_{y} q_{x}+p_{z} q_{w} \end{array}\right] pq=pwqwpxqxpyqypzqzpwqx+pxqw+pyqzpzqypwqypxqz+pyqw+pzqxpwqz+pxqypyqx+pzqw
值得注意的是,两个单位四元数相乘还是单位四元数。

(4)纯四元数的指数函数

纯四元数的定义为,实部为0的四元数,即: v = [ 0 q v ] \mathbf{v}=\left[\begin{array}{l}0 \\ \mathbf{q}_{v}\end{array}\right] v=[0qv]

定义纯四元数的指数函数如下:
e v = e u θ = cos ⁡ θ + u sin ⁡ θ = [ cos ⁡ θ u sin ⁡ θ ] e^{\mathbf{v}}=e^{\mathbf{u} \theta}=\cos \theta+\mathbf{u} \sin \theta=\left[\begin{array}{c} \cos \theta \\ \mathbf{u} \sin \theta \end{array}\right] ev=euθ=cosθ+usinθ=[cosθusinθ]
其中: v = u θ \mathbf{v}=\mathbf{u} \theta v=uθ,并且 θ = ∥ v ∥ ∈ R \theta=\|\mathbf{v}\| \in \mathbb{R} θ=vR u \mathbf{u} u为单位向量。

(5)单位四元数转旋转矩阵

R = R { q } = [ q w 2 + q x 2 − q y 2 − q z 2 2 ( q x q y − q w q z ) 2 ( q x q z + q w q y ) 2 ( q x q y + q w q z ) q w 2 − q x 2 + q y 2 − q z 2 2 ( q y q z − q w q x ) 2 ( q x q z − q w q y ) 2 ( q y q z + q w q x ) q w 2 − q x 2 − q y 2 + q z 2 ] \mathbf{R}=\mathbf{R}\{\mathbf{q}\}=\left[\begin{array}{ccc} q_{w}^{2}+q_{x}^{2}-q_{y}^{2}-q_{z}^{2} & 2\left(q_{x} q_{y}-q_{w} q_{z}\right) & 2\left(q_{x} q_{z}+q_{w} q_{y}\right) \\ 2\left(q_{x} q_{y}+q_{w} q_{z}\right) & q_{w}^{2}-q_{x}^{2}+q_{y}^{2}-q_{z}^{2} & 2\left(q_{y} q_{z}-q_{w} q_{x}\right) \\ 2\left(q_{x} q_{z}-q_{w} q_{y}\right) & 2\left(q_{y} q_{z}+q_{w} q_{x}\right) & q_{w}^{2}-q_{x}^{2}-q_{y}^{2}+q_{z}^{2} \end{array}\right] R=R{q}=qw2+qx2qy2qz22(qxqy+qwqz)2(qxqzqwqy)2(qxqyqwqz)qw2qx2+qy2qz22(qyqz+qwqx)2(qxqz+qwqy)2(qyqzqwqx)qw2qx2qy2+qz2
注意,必须是单位四元数!!!

(6)单位四元数转欧拉角

由于欧拉角的定义方式也有很多,这里说明的是依据Z-Y-X定义的欧拉角,其中欧拉角与旋转矩阵的变换关系是:
R = [ cos ⁡ ψ cos ⁡ θ cos ⁡ ψ sin ⁡ θ sin ⁡ ϕ − sin ⁡ ψ cos ⁡ ϕ cos ⁡ ψ sin ⁡ θ cos ⁡ ϕ + sin ⁡ ψ sin ⁡ ϕ sin ⁡ ψ cos ⁡ θ sin ⁡ ψ sin ⁡ θ sin ⁡ ϕ + cos ⁡ ψ cos ⁡ ϕ sin ⁡ ψ sin ⁡ θ cos ⁡ ϕ − cos ⁡ ψ sin ⁡ ϕ − sin ⁡ θ cos ⁡ θ sin ⁡ ϕ cos ⁡ θ cos ⁡ ϕ ] \mathbf{R}=\left[\begin{array}{ccc}{\cos \psi \cos \theta} & {\cos \psi \sin \theta \sin \phi-\sin \psi \cos \phi} & {\cos \psi \sin \theta \cos \phi+\sin \psi \sin \phi} \\ {\sin \psi \cos \theta} & {\sin \psi \sin \theta \sin \phi+\cos \psi \cos \phi} & {\sin \psi \sin \theta \cos \phi-\cos \psi \sin \phi} \\ {-\sin \theta} & {\cos \theta \sin \phi} & {\cos \theta \cos \phi}\end{array}\right] R=cosψcosθsinψcosθsinθcosψsinθsinϕsinψcosϕsinψsinθsinϕ+cosψcosϕcosθsinϕcosψsinθcosϕ+sinψsinϕsinψsinθcosϕcosψsinϕcosθcosϕ
其中: ϕ , θ , ψ ​ \phi,\theta,\psi​ ϕ,θ,ψ为欧拉角,分别为横滚角(X),俯仰角(Y),偏航角(Z)。
所以,四元数转欧拉角的关系为:
ϕ = arctan ⁡ 2 ( q y q z + q w q x ) q w 2 − q x 2 − q y 2 + q z 2 θ = − arcsin ⁡ [ 2 ( q x q z − q w q y ) ] ψ = arctan ⁡ 2 ( q x q y + q w q z ) q w 2 + q x 2 − q y 2 − q z 2 \begin{aligned} \phi &= \arctan\frac{ 2\left(q_{y} q_{z}+q_{w} q_{x}\right)}{q_{w}^{2}-q_{x}^{2}-q_{y}^{2}+q_{z}^{2}}\\ \theta&=-\arcsin [2\left(q_{x} q_{z}-q_{w} q_{y}\right)]\\ \psi&=\arctan\frac{2\left(q_{x} q_{y}+q_{w} q_{z}\right)}{q_{w}^{2}+q_{x}^{2}-q_{y}^{2}-q_{z}^{2}} \end{aligned} ϕθψ=arctanqw2qx2qy2+qz22(qyqz+qwqx)=arcsin[2(qxqzqwqy)]=arctanqw2+qx2qy2qz22(qxqy+qwqz)
注意,必须是单位四元数!!!

2 IMU运动方程

2.1 关于IMU测量数据

在聊到IMU测量数据的时候,我们首先需要明白两个坐标系的定义。

一是惯性系,二是IMU坐标系。

这里的惯性系就是指静止或者其速度的改变可以忽略不记的坐标系。通常在机器人的应用中,由于所用的IMU都是低成本IMU,对于地球自转角速度不够敏感,所以可以认为与地面固连的坐标系都是惯性坐标系。然而对于,航空航天应用而言,用到的IMU精度很高,对于惯性导航的要求也很严格,则需要考虑地球自转角速度,这是惯性坐标系为地球惯性坐标系。

IMU测量的实际上就是IMU坐标系相对于惯性系的加速度和角速度。值得注意的是,这里的相对于惯性系的加速度不仅包括载体的运动加速度,还包括重力加速度。
所以,我们需要特别注意,加速度计测量的不是载体的运动加速度,而是载体相对惯性空间的绝对加速度和引力加速度之和,称作“比力”。

通常,IMU的测量模型如下:
a m = R t ⊤ ( a t − g t ) + a b t + a n ω m = ω t + ω b t + ω n \begin{array}{l} \mathbf{a}_{m}=\mathbf{R}_{t}^{\top}\left(\mathbf{a}_{t}-\mathbf{g}_{t}\right)+\mathbf{a}_{b t}+\mathbf{a}_{n} \\ \bm{\omega}_{m}=\bm\omega_{t}+\bm\omega_{b t}+\bm\omega_{n} \end{array} am=Rt(atgt)+abt+anωm=ωt+ωbt+ωn
其中, R t ⊤ \mathbf{R}_{t}^{\top} Rt表示从惯性系到IMU坐标系的旋转矩阵。 a b t , ω b t \mathbf{a}_{b t},\bm\omega_{b t} abt,ωbt代表随机游走噪声,可以理解为加速度计和陀螺仪的零漂。 a n , ω n \mathbf{a}_{n},\bm\omega_{n} an,ωn为零均值高斯白噪声。 g t \mathbf{g}_{t} gt代表重力加速度,表示在惯性系下。这里关于 g t \mathbf{g}_{t} gt的符号不用特别在意,这个负号并不是一定的,也可以写成正号,取决于 g t \mathbf{g}_{t} gt的定义。

2.2 IMU运动方程

IMU的运动方程主要描述了物体速度,位置以及姿态在IMU测量数据的激励下产生的变化。除了关于四元数的部分以外,用到的知识就是小学二年级学过的物理知识。比如,位置的导数是速度,速度的导数是加速度。
我们定义我们关心的状态量为:

  • p t \mathbf{p}_{t} pt:表示IMU系相对惯性系的位置,在惯性系下表示的,默认是三维的
  • v t \mathbf{v}_{t} vt:表示IMU系相对惯性系的速度,同样是在惯性系下表示的,默认是三维的
  • q t \mathbf{q}_{t} qt:表示从IMU系到惯性系的四元数,表示从IMU系到惯性系的旋转变换

于是,IMU的运动方程可以表示如下:
p ˙ t = v t v ˙ t = a t = R t ( a m − a b t − a n ) + g t q ˙ t = 1 2 q t ⊗ ω t = 1 2 q t ⊗ ( ω m − ω b t − ω n ) a ˙ b t = a w ω ˙ b t = ω w g ˙ t = 0 \begin{aligned} \dot{\mathbf{p}}_{t} &=\mathbf{v}_{t} \\ \dot{\mathbf{v}}_{t} &=\mathbf{a}_{t}=\mathbf{R}_{t}\left(\mathbf{a}_{m}-\mathbf{a}_{b t}-\mathbf{a}_{n}\right)+\mathbf{g}_{t} \\ \dot{\mathbf{q}}_{t} &=\frac{1}{2} \mathbf{q}_{t} \otimes \bm\omega_{t}=\frac{1}{2} \mathbf{q}_{t} \otimes\left(\bm\omega_{m}-\bm\omega_{b t}-\bm\omega_{n}\right) \\ \dot{\mathbf{a}}_{b t} &=\mathbf{a}_{w} \\ \dot{\bm\omega}_{b t} &=\boldsymbol{\omega}_{w} \\ \dot{\mathbf{g}}_{t} &=0 \end{aligned} p˙tv˙tq˙ta˙btω˙btg˙t=vt=at=Rt(amabtan)+gt=21qtωt=21qt(ωmωbtωn)=aw=ωw=0
其中, R t = R { q t } \mathbf{R}_{t}=\mathbf{R}\{\mathbf{q}_{t}\} Rt=R{qt}为基于 q t \mathbf{q}_{t} qt得到的旋转矩阵,表示了从IMU系到惯性系的旋转变换。 a w , ω w \mathbf{a}_{w},\bm\omega_w aw,ωw为零均值高斯白噪声。

值得注意的是,在这组运动方程中,把 g t \mathbf{g}_{t} gt也视作变化的量,后续基于此运动方程构造的ESKF也会对 g t \mathbf{g}_{t} gt进行更新。这在许多IMU运动方程中是不常见到的,这样做有什么好处呢?

首先,我们要明白 g t \mathbf{g}_{t} gt并不等于 [ 0 , 0 , 9.8 ] T [0,0,9.8]^T [0,0,9.8]T g t \mathbf{g}_{t} gt的值取决于IMU的初始姿态。这是因为,IMU运动方程是递推的方程,计算出来的位置和速度都是相对于初始状态的,而不是绝对的位置和速度。因此为了方便起见,我们通常都会定义初始时刻的IMU坐标系为惯性系,这样我们后面计算出来的虽然是相对于初始IMU系的位置和速度,但也可以作为绝对的位置和速度了。于是, g t \mathbf{g}_{t} gt既然代表了惯性系下的重力加速度,也就是初始的IMU坐标系下表示的重力加速度,所以当初始IMU坐标系不是水平的时候, g t \mathbf{g}_{t} gt自然也就不等于 [ 0 , 0 , 9.8 ] T [0,0,9.8]^T [0,0,9.8]T了。

进一步地,我们也可以知道,估计 g t \mathbf{g}_{t} gt,也就是估计初始时刻IMU的姿态。既然我们通过可以 g t \mathbf{g}_{t} gt估计了初始IMU的姿态,那么初始时刻的四元数就可以直接定义为 q 0 = ( 1 , 0 , 0 , 0 ) \mathbf{q}_{0}=(1,0,0,0) q0=(1,0,0,0)。这种操作实际上就是,我们先假设初始时刻四元数为 q 0 = ( 1 , 0 , 0 , 0 ) \mathbf{q}_{0}=(1,0,0,0) q0=(1,0,0,0),然后在此基础上估计 g t \mathbf{g}_{t} gt。当然,还有另外一种方法就是,先假设 g t = [ 0 , 0 , 9.8 ] \mathbf{g}_{t}=[0,0,9.8] gt=[0,0,9.8],然后估计初始时刻的IMU相距水平姿态相差多少。这两种方法都可以,然后估计 g t \mathbf{g}_{t} gt的话可以使模型的线性化程度更好。

为了更好的阅读体验,本文分为上下两文,关于ESKF的内容以及MATLAB代码,请移步下一篇文章。

你可能感兴趣的:(机器人基础技术)