日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器人运动估计——IMU运动方程与ESKF原理介绍(上) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hello! 歡迎來(lái)到我的博客
今天的內(nèi)容關(guān)于機(jī)器人中常用的傳感器IMU,我們用它來(lái)實(shí)現(xiàn)機(jī)器人姿態(tài)、速度、位置的估計(jì)。
今天將會(huì)介紹使用低成本IMU進(jìn)行機(jī)器人運(yùn)動(dòng)估計(jì)的一個(gè)常用方法——ESKF。

1 四元數(shù)基礎(chǔ)

四元數(shù),英文名稱為:quaternion。正如一個(gè)單位復(fù)數(shù)可以表示在復(fù)平面上的旋轉(zhuǎn)一樣,單位四元數(shù)也可以用于表示三維空間中的旋轉(zhuǎn),并且由于其在更新過(guò)程中不會(huì)發(fā)生奇異現(xiàn)象,因此在慣性導(dǎo)航中被廣泛使用。一般來(lái)說(shuō),四元數(shù)的表示方式有許多,其中最常用的是兩種,一種是Hamilton,另一種是JPL。由于,在機(jī)器人領(lǐng)域中,無(wú)論是ROS,Eigen,Ceres等等項(xiàng)目中都用到的是Hamilton四元數(shù),因此,這里后續(xù)文章中使用以及介紹的也是這種。

以下介紹的都是在IMU運(yùn)動(dòng)方程以及ESKF中必要的關(guān)于四元數(shù)的知識(shí),因此可能會(huì)過(guò)于簡(jiǎn)略,讀者可暫時(shí)先跳轉(zhuǎn)至第二部分閱讀,遇到不明的四元數(shù)定義時(shí),再回來(lái)查閱。

(1)四元數(shù)定義

Q=a+bi+cj+dk∈HQ=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是系數(shù),{i,j,k}\{i, j, k\}{i,j,k}是虛部單位。
一個(gè)四元數(shù)可以表示為實(shí)部和虛部,如下:
Q=qw+qxi+qyj+qzk?Q=qw+qvQ=q_{w}+q_{x} i+q_{y} j+q_{z} k \quad \Leftrightarrow \quad Q=q_{w}+\mathbf{q}_{v}Q=qw?+qx?i+qy?j+qz?k?Q=qw?+qv?
記作向量形式則為:
q?[qwqv]=[qwqxqyqz]\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?[qw?qv??]=?????qw?qx?qy?qz???????

(2)單位四元數(shù)

單位四元數(shù)可以作為一種旋轉(zhuǎn)的表示方式,它可以轉(zhuǎn)換為歐拉角,也可以轉(zhuǎn)換為旋轉(zhuǎn)矩陣。
單位四元數(shù)的定義:
q=[cos?θusin?θ]\mathbf{q}=\left[\begin{array}{c} \cos \theta \\ \mathbf{u} \sin \theta \end{array}\right] q=[cosθusinθ?]
其中,u=uxi+uyj+uzk\mathbf{u}=u_{x} i+u_{y} j+u_{z} ku=ux?i+uy?j+uz?k是單位向量,而θ\thetaθ為一個(gè)標(biāo)量。
由此可知,單位四元數(shù)的模長(zhǎng)為1。
∣∣q∣∣=cos?2θ+sin?2θ(ux2+uy2+uz2)=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)乘法

兩個(gè)四元數(shù)乘法的記號(hào)為:?\otimes?,乘法的具體定義為:
p?q=[pwqw?pxqx?pyqy?pzqzpwqx+pxqw+pyqz?pzqypwqy?pxqz+pyqw+pzqxpwqz+pxqy?pyqx+pzqw]\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] p?q=?????pw?qw??px?qx??py?qy??pz?qz?pw?qx?+px?qw?+py?qz??pz?qy?pw?qy??px?qz?+py?qw?+pz?qx?pw?qz?+px?qy??py?qx?+pz?qw???????
值得注意的是,兩個(gè)單位四元數(shù)相乘還是單位四元數(shù)。

(4)純四元數(shù)的指數(shù)函數(shù)

純四元數(shù)的定義為,實(shí)部為0的四元數(shù),即:v=[0qv]\mathbf{v}=\left[\begin{array}{l}0 \\ \mathbf{q}_{v}\end{array}\right]v=[0qv??]

定義純四元數(shù)的指數(shù)函數(shù)如下:
ev=euθ=cos?θ+usin?θ=[cos?θusin?θ]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} \thetav=uθ,并且θ=∥v∥∈R\theta=\|\mathbf{v}\| \in \mathbb{R}θ=vRu\mathbf{u}u為單位向量。

(5)單位四元數(shù)轉(zhuǎn)旋轉(zhuǎn)矩陣

R=R{q}=[qw2+qx2?qy2?qz22(qxqy?qwqz)2(qxqz+qwqy)2(qxqy+qwqz)qw2?qx2+qy2?qz22(qyqz?qwqx)2(qxqz?qwqy)2(qyqz+qwqx)qw2?qx2?qy2+qz2]\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?+qx2??qy2??qz2?2(qx?qy?+qw?qz?)2(qx?qz??qw?qy?)?2(qx?qy??qw?qz?)qw2??qx2?+qy2??qz2?2(qy?qz?+qw?qx?)?2(qx?qz?+qw?qy?)2(qy?qz??qw?qx?)qw2??qx2??qy2?+qz2?????
注意,必須是單位四元數(shù)!!!

(6)單位四元數(shù)轉(zhuǎn)歐拉角

由于歐拉角的定義方式也有很多,這里說(shuō)明的是依據(jù)Z-Y-X定義的歐拉角,其中歐拉角與旋轉(zhuǎn)矩陣的變換關(guān)系是:
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)。
所以,四元數(shù)轉(zhuǎn)歐拉角的關(guān)系為:
?=arctan?2(qyqz+qwqx)qw2?qx2?qy2+qz2θ=?arcsin?[2(qxqz?qwqy)]ψ=arctan?2(qxqy+qwqz)qw2+qx2?qy2?qz2\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} ?θψ?=arctanqw2??qx2??qy2?+qz2?2(qy?qz?+qw?qx?)?=?arcsin[2(qx?qz??qw?qy?)]=arctanqw2?+qx2??qy2??qz2?2(qx?qy?+qw?qz?)??
注意,必須是單位四元數(shù)!!!

2 IMU運(yùn)動(dòng)方程

2.1 關(guān)于IMU測(cè)量數(shù)據(jù)

在聊到IMU測(cè)量數(shù)據(jù)的時(shí)候,我們首先需要明白兩個(gè)坐標(biāo)系的定義。

一是慣性系,二是IMU坐標(biāo)系。

這里的慣性系就是指靜止或者其速度的改變可以忽略不記的坐標(biāo)系。通常在機(jī)器人的應(yīng)用中,由于所用的IMU都是低成本IMU,對(duì)于地球自轉(zhuǎn)角速度不夠敏感,所以可以認(rèn)為與地面固連的坐標(biāo)系都是慣性坐標(biāo)系。然而對(duì)于,航空航天應(yīng)用而言,用到的IMU精度很高,對(duì)于慣性導(dǎo)航的要求也很嚴(yán)格,則需要考慮地球自轉(zhuǎn)角速度,這是慣性坐標(biāo)系為地球慣性坐標(biāo)系。

IMU測(cè)量的實(shí)際上就是IMU坐標(biāo)系相對(duì)于慣性系的加速度和角速度。值得注意的是,這里的相對(duì)于慣性系的加速度不僅包括載體的運(yùn)動(dòng)加速度,還包括重力加速度。
所以,我們需要特別注意,加速度計(jì)測(cè)量的不是載體的運(yùn)動(dòng)加速度,而是載體相對(duì)慣性空間的絕對(duì)加速度和引力加速度之和,稱作“比力”。

通常,IMU的測(cè)量模型如下:
am=Rt?(at?gt)+abt+anωm=ωt+ωbt+ω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??(at??gt?)+abt?+an?ωm?=ωt?+ωbt?+ωn??
其中,Rt?\mathbf{R}_{t}^{\top}Rt??表示從慣性系到IMU坐標(biāo)系的旋轉(zhuǎn)矩陣。abt,ωbt\mathbf{a}_{b t},\bm\omega_{b t}abt?,ωbt?代表隨機(jī)游走噪聲,可以理解為加速度計(jì)和陀螺儀的零漂。an,ωn\mathbf{a}_{n},\bm\omega_{n}an?,ωn?為零均值高斯白噪聲。gt\mathbf{g}_{t}gt?代表重力加速度,表示在慣性系下。這里關(guān)于gt\mathbf{g}_{t}gt?的符號(hào)不用特別在意,這個(gè)負(fù)號(hào)并不是一定的,也可以寫(xiě)成正號(hào),取決于gt\mathbf{g}_{t}gt?的定義。

2.2 IMU運(yùn)動(dòng)方程

IMU的運(yùn)動(dòng)方程主要描述了物體速度,位置以及姿態(tài)在IMU測(cè)量數(shù)據(jù)的激勵(lì)下產(chǎn)生的變化。除了關(guān)于四元數(shù)的部分以外,用到的知識(shí)就是小學(xué)二年級(jí)學(xué)過(guò)的物理知識(shí)。比如,位置的導(dǎo)數(shù)是速度,速度的導(dǎo)數(shù)是加速度。
我們定義我們關(guān)心的狀態(tài)量為:

  • pt\mathbf{p}_{t}pt?:表示IMU系相對(duì)慣性系的位置,在慣性系下表示的,默認(rèn)是三維的
  • vt\mathbf{v}_{t}vt?:表示IMU系相對(duì)慣性系的速度,同樣是在慣性系下表示的,默認(rèn)是三維的
  • qt\mathbf{q}_{t}qt?:表示從IMU系到慣性系的四元數(shù),表示從IMU系到慣性系的旋轉(zhuǎn)變換

于是,IMU的運(yùn)動(dòng)方程可以表示如下:
p˙t=vtv˙t=at=Rt(am?abt?an)+gtq˙t=12qt?ωt=12qt?(ωm?ωbt?ωn)a˙bt=awω˙bt=ωwg˙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˙?t?v˙t?q˙?t?a˙bt?ω˙bt?g˙?t??=vt?=at?=Rt?(am??abt??an?)+gt?=21?qt??ωt?=21?qt??(ωm??ωbt??ωn?)=aw?=ωw?=0?
其中,Rt=R{qt}\mathbf{R}_{t}=\mathbf{R}\{\mathbf{q}_{t}\}Rt?=R{qt?}為基于qt\mathbf{q}_{t}qt?得到的旋轉(zhuǎn)矩陣,表示了從IMU系到慣性系的旋轉(zhuǎn)變換。aw,ωw\mathbf{a}_{w},\bm\omega_waw?,ωw?為零均值高斯白噪聲。

值得注意的是,在這組運(yùn)動(dòng)方程中,把gt\mathbf{g}_{t}gt?也視作變化的量,后續(xù)基于此運(yùn)動(dòng)方程構(gòu)造的ESKF也會(huì)對(duì)gt\mathbf{g}_{t}gt?進(jìn)行更新。這在許多IMU運(yùn)動(dòng)方程中是不常見(jiàn)到的,這樣做有什么好處呢?

首先,我們要明白gt\mathbf{g}_{t}gt?并不等于[0,0,9.8]T[0,0,9.8]^T[0,0,9.8]Tgt\mathbf{g}_{t}gt?的值取決于IMU的初始姿態(tài)。這是因?yàn)?#xff0c;IMU運(yùn)動(dòng)方程是遞推的方程,計(jì)算出來(lái)的位置和速度都是相對(duì)于初始狀態(tài)的,而不是絕對(duì)的位置和速度。因此為了方便起見(jiàn),我們通常都會(huì)定義初始時(shí)刻的IMU坐標(biāo)系為慣性系,這樣我們后面計(jì)算出來(lái)的雖然是相對(duì)于初始IMU系的位置和速度,但也可以作為絕對(duì)的位置和速度了。于是,gt\mathbf{g}_{t}gt?既然代表了慣性系下的重力加速度,也就是初始的IMU坐標(biāo)系下表示的重力加速度,所以當(dāng)初始IMU坐標(biāo)系不是水平的時(shí)候,gt\mathbf{g}_{t}gt?自然也就不等于[0,0,9.8]T[0,0,9.8]^T[0,0,9.8]T了。

進(jìn)一步地,我們也可以知道,估計(jì)gt\mathbf{g}_{t}gt?,也就是估計(jì)初始時(shí)刻IMU的姿態(tài)。既然我們通過(guò)可以gt\mathbf{g}_{t}gt?估計(jì)了初始IMU的姿態(tài),那么初始時(shí)刻的四元數(shù)就可以直接定義為q0=(1,0,0,0)\mathbf{q}_{0}=(1,0,0,0)q0?=(1,0,0,0)。這種操作實(shí)際上就是,我們先假設(shè)初始時(shí)刻四元數(shù)為q0=(1,0,0,0)\mathbf{q}_{0}=(1,0,0,0)q0?=(1,0,0,0),然后在此基礎(chǔ)上估計(jì)gt\mathbf{g}_{t}gt?。當(dāng)然,還有另外一種方法就是,先假設(shè)gt=[0,0,9.8]\mathbf{g}_{t}=[0,0,9.8]gt?=[0,0,9.8],然后估計(jì)初始時(shí)刻的IMU相距水平姿態(tài)相差多少。這兩種方法都可以,然后估計(jì)gt\mathbf{g}_{t}gt?的話可以使模型的線性化程度更好。

為了更好的閱讀體驗(yàn),本文分為上下兩文,關(guān)于ESKF的內(nèi)容以及MATLAB代碼,請(qǐng)移步下一篇文章。

總結(jié)

以上是生活随笔為你收集整理的机器人运动估计——IMU运动方程与ESKF原理介绍(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。