发明名称 一种基于图像标志物识别的移动机器人SLAM方法
摘要 本发明提出一种基于图像标志物识别的移动机器人SLAM方法,采用EKF-SLAM模型进行机器人状态参数的时间更新和基于标志物识别的测量更新。本方法可以从环境中获取大量信息,从而使机器人能够构建出高精度的环境地图。与现有方法相比具有对环境空间结构理解更准确,抗干扰能力强,构建的地图精度高的特点。
申请公布号 CN104062973A 申请公布日期 2014.09.24
申请号 CN201410283032.7 申请日期 2014.06.23
申请人 西北工业大学 发明人 布树辉;何毕;刘贞报
分类号 G05D1/02(2006.01)I 主分类号 G05D1/02(2006.01)I
代理机构 西北工业大学专利中心 61204 代理人 陈星
主权项 一种基于图像标志物识别的移动机器人SLAM方法,其特征在于:采用以下步骤:步骤1:机器人开始运动后,由实际中机器人对应的数学模型和运动的初始条件,机器人使用上一时刻的状态信息,根据EKF‑SLAM模型的时间更新方程对此时的状态进行预测估计,完成先验估计的构造,同时构建地图:由机器人运动过程第k‑1时刻的状态信息<img file="FDA0000525420610000011.GIF" wi="107" he="73" />按照时间更新方程:<maths num="0001" id="cmaths0001"><math><![CDATA[<mfenced open='{' close=''><mtable><mtr><mtd><msubsup><mover><mi>x</mi><mo>^</mo></mover><mi>k</mi><mo>-</mo></msubsup><mo>=</mo><mi>A</mi><msub><mover><mi>x</mi><mo>^</mo></mover><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>Bu</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd></mtr><mtr><mtd><msup><msub><mi>P</mi><mi>k</mi></msub><mo>-</mo></msup><mo>=</mo><msub><mi>AP</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub><msup><mi>A</mi><mi>T</mi></msup><mo>+</mo><mi>Q</mi></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000525420610000012.GIF" wi="404" he="172" /></maths>推算第k时刻状态估计的先验值<img file="FDA0000525420610000013.GIF" wi="84" he="73" />其中P<sub>k</sub><sup>‑</sup>为第k时刻协方差的先验值,u<sub>k‑1</sub>为第k‑1时刻对机器人施加的控制信号,A、B分别表示机器人运动模型对<img file="FDA0000525420610000014.GIF" wi="82" he="75" />u<sub>k‑1</sub>的雅克比矩阵;Q为先验估计误差;P<sub>k‑1</sub>为第k‑1时刻协方差的后验值;机器人运动过程的状态信息由机器人的位置和姿态信息组成;地图由m=(m<sub>1</sub>,m<sub>2</sub>,...)<sup>T</sup>表示,由到第k时刻为止机器人存储的所有标识物坐标构成;步骤2:机器人实时拍摄环境,使用计算机视觉方法的处理拍摄到的图像,找到标志物在图像中的位置,然后用机器视觉测量方法计算出机器人与标志物的相对位置关系;得到相对位置关系作为EKF‑SLAM模型的测量更新方程的输入,根据测量更新方程对机器人位置状态的先验估计进行修正:步骤2.1:识别标志物:所述标志物由7x7的黑色和白色小方格组成,最外围的小方格全为黑色,内部的5x5的小方格中,每一行均包括3个奇偶校验位和2个数据位,其中第2位和第4位为数据位;奇偶校验位确定出标志物的方向,数据位表示标志物唯一的ID号;步骤2.1.1:将机器人拍摄的图像转化至灰度空间;步骤2.1.2:对已转化至灰度空间的图像进行二值化操作;步骤2.1.3:在二值化的图像中检测轮廓线,并查找候选的标志物对象;步骤2.1.4:对候选标志物进行检测并确定标志物的ID号;步骤2.2:估计标志物相对于机器人的位置和姿态:步骤2.2.1:对于识别出的标志物,取其轮廓上不共线的三点A`、B`、C`的图像坐标(u<sub>i</sub>,v<sub>i</sub>),分别算出它们在机器人图像采集装置成像平面上的成像点坐标<img file="FDA0000525420610000015.GIF" wi="202" he="81" />i=A`、B`、C`:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>x</mi><msub><mi>c</mi><mi>i</mi></msub></msub></mtd></mtr><mtr><mtd><msub><mi>y</mi><msub><mi>c</mi><mi>i</mi></msub></msub></mtd></mtr><mtr><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mo>=</mo><msup><mi>M</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>u</mi><mi>i</mi></msub></mtd></mtr><mtr><mtd><msub><mi>v</mi><mi>i</mi></msub></mtd></mtr><mtr><mtd><mn>1</mn></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000525420610000021.GIF" wi="344" he="250" /></maths>其中,M为机器人图像采集装置的内参数矩阵,得到了点A、B、C在机器人图像采集装置坐标系中投影方向上的单位向量e<sub>i</sub>,其中点A、B、C为点A`、B`、C`对应的现实世界中的点:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>e</mi><mi>i</mi></msub><mo>=</mo><mfrac><mn>1</mn><msqrt><msubsup><mi>x</mi><msub><mi>c</mi><mi>i</mi></msub><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>y</mi><msub><mi>c</mi><mi>i</mi></msub><mn>2</mn></msubsup><mo>+</mo><mn>1</mn></msqrt></mfrac><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>x</mi><msub><mi>c</mi><mi>i</mi></msub></msub></mtd></mtr><mtr><mtd><msub><mi>y</mi><msub><mi>c</mi><mi>i</mi></msub></msub></mtd></mtr><mtr><mtd><mn>1</mn></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000525420610000022.GIF" wi="469" he="250" /></maths>e<sub>A</sub>'、e<sub>B</sub>'、e<sub>C</sub>'分别为点A、B、C在机器人图像采集装置坐标系中投影方向上的单位向量;步骤2.2.2:根据以下公式:<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>D</mi><mi>AB</mi></msub><mo>=</mo><mi>&lambda;</mi><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><msub><mi>c</mi><msup><mi>A</mi><mtext>&prime;</mtext></msup></msub></msub><mo>-</mo><msub><mi>x</mi><msub><mi>c</mi><msup><mi>B</mi><mo>&prime;</mo></msup></msub></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><msub><mi>c</mi><msup><mi>A</mi><mo>&prime;</mo></msup></msub></msub><mo>-</mo><msub><mi>y</mi><msub><mi>c</mi><msup><mi>B</mi><mo>&prime;</mo></msup></msub></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt></mtd></mtr><mtr><mtd><msub><mi>D</mi><mi>BC</mi></msub><mo>=</mo><mi>&lambda;</mi><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><msub><mi>c</mi><msup><mi>B</mi><mtext>&prime;</mtext></msup></msub></msub><mo>-</mo><msub><mi>x</mi><msub><mi>c</mi><msup><mi>C</mi><mo>&prime;</mo></msup></msub></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><msub><mi>c</mi><msup><mi>B</mi><mo>&prime;</mo></msup></msub></msub><mo>-</mo><msub><mi>y</mi><msub><mi>c</mi><msup><mi>C</mi><mo>&prime;</mo></msup></msub></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt></mtd></mtr><mtr><mtd><msub><mi>D</mi><mi>AC</mi></msub><mo>=</mo><mi>&lambda;</mi><msqrt><msup><mrow><mo>(</mo><msub><mi>x</mi><msub><mi>c</mi><msup><mi>A</mi><mtext>&prime;</mtext></msup></msub></msub><mo>-</mo><msub><mi>x</mi><msub><mi>c</mi><msup><mi>C</mi><mo>&prime;</mo></msup></msub></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><msub><mi>c</mi><msup><mi>A</mi><mo>&prime;</mo></msup></msub></msub><mo>-</mo><msub><mi>y</mi><msub><mi>c</mi><msup><mi>C</mi><mo>&prime;</mo></msup></msub></msub><mo>)</mo></mrow><mn>2</mn></msup></msqrt></mtd></mtr></mtable></mfenced><mfenced open='{' close=''><mtable><mtr><mtd><mi>cos</mi><msub><mi>&theta;</mi><mi>AB</mi></msub><mo>=</mo><msubsup><mi>e</mi><msup><mi>B</mi><mo>&prime;</mo></msup><mi>T</mi></msubsup><msub><mi>e</mi><msup><mi>C</mi><mo>&prime;</mo></msup></msub></mtd></mtr><mtr><mtd><mi>cos</mi><msub><mi>&theta;</mi><mi>AC</mi></msub><mo>=</mo><msubsup><mi>e</mi><msup><mi>A</mi><mo>&prime;</mo></msup><mi>T</mi></msubsup><msub><mi>e</mi><msup><mi>C</mi><mo>&prime;</mo></msup></msub></mtd></mtr><mtr><mtd><mi>cos</mi><msub><mi>&theta;</mi><mi>BC</mi></msub><mo>=</mo><msubsup><mi>e</mi><msup><mi>A</mi><mo>&prime;</mo></msup><mi>T</mi></msubsup><msub><mi>e</mi><msup><mi>B</mi><mo>&prime;</mo></msup></msub></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000525420610000023.GIF" wi="1227" he="326" /></maths>计算空间点A、B、C间的距离D<sub>AB</sub>,D<sub>BC</sub>,D<sub>AC</sub>以及相应角度余弦值cosθ<sub>AB</sub>,cosθ<sub>AC</sub>,cosθ<sub>BC</sub>;其中λ为比例系数,λ=1/L,L为标志物中单个小方格的边长;并根据方程<maths num="0005" id="cmaths0005"><math><![CDATA[<mfenced open='{' close=''><mtable><mtr><mtd><msubsup><mi>d</mi><mi>A</mi><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>d</mi><mi>B</mi><mn>2</mn></msubsup><mo>-</mo><mn>2</mn><msub><mi>d</mi><mi>A</mi></msub><msub><mi>d</mi><mi>B</mi></msub><mi>cos</mi><msub><mi>&theta;</mi><mi>AB</mi></msub><mo>=</mo><msubsup><mi>D</mi><mi>AB</mi><mn>2</mn></msubsup></mtd></mtr><mtr><mtd><msubsup><mi>d</mi><mi>A</mi><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>d</mi><mi>C</mi><mn>2</mn></msubsup><mo>-</mo><mn>2</mn><msub><mi>d</mi><mi>A</mi></msub><msub><mi>d</mi><mi>C</mi></msub><mi>cos</mi><msub><mi>&theta;</mi><mi>AC</mi></msub><mo>=</mo><msubsup><mi>D</mi><mi>AC</mi><mn>2</mn></msubsup></mtd></mtr><mtr><mtd><msubsup><mi>d</mi><mi>B</mi><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>d</mi><mi>C</mi><mn>2</mn></msubsup><mo>-</mo><mn>2</mn><msub><mi>d</mi><mi>B</mi></msub><msub><mi>d</mi><mi>C</mi></msub><mi>cos</mi><msub><mi>&theta;</mi><mi>BC</mi></msub><mo>=</mo><msubsup><mi>D</mi><mi>BC</mi><mn>2</mn></msubsup></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000525420610000024.GIF" wi="641" he="245" /></maths>得到机器人图像采集装置光心到点A、B、C的距离d<sub>A</sub>,d<sub>B</sub>,d<sub>c</sub>;并由公式<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><msub><mi>P</mi><mi>j</mi></msub><mo>=</mo><msub><mi>d</mi><mi>j</mi></msub><msub><mi>e</mi><mi>j</mi></msub><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>x</mi><mi>j</mi></msub></mtd></mtr><mtr><mtd><msub><mi>y</mi><mi>j</mi></msub></mtd></mtr><mtr><mtd><msub><mi>z</mi><mi>j</mi></msub></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000525420610000025.GIF" wi="343" he="258" /></maths>得到点A、B、C在机器人图像采集装置坐标系下的坐标P<sub>j</sub>,j=A,B,C;e<sub>A</sub>=e<sub>A'</sub>,e<sub>B</sub>=e<sub>B'</sub>,e<sub>C</sub>=e<sub>C'</sub>;步骤2.2.3:在点A、B、C中任意取一点,进行如下运算:<img file="FDA0000525420610000031.GIF" wi="564" he="269" />其中,D<sub>j</sub>为机器人与标志物的距离,<img file="FDA0000525420610000032.GIF" wi="62" he="65" />为标志物与机器人前进方向的夹角;x<sub>j</sub>、z<sub>j</sub>为点A、B、C中任意取的一点的坐标值;η为观测误差;z<sub>k</sub>为第k时刻的测量值;步骤2.3:根据步骤2.2得到的第k时刻的测量值,在EKF‑SLAM模型的测量更新方程中<maths num="0007" id="cmaths0007"><math><![CDATA[<mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>K</mi><mi>k</mi></msub><mo>=</mo><msup><msub><mi>P</mi><mi>k</mi></msub><mo>-</mo></msup><msup><mi>H</mi><mi>T</mi></msup><msup><mrow><mo>(</mo><msup><msub><mi>HP</mi><mi>k</mi></msub><mo>-</mo></msup><msup><mi>H</mi><mi>T</mi></msup><mo>+</mo><mi>R</mi><mo>)</mo></mrow><mrow><mo>-</mo><mn>1</mn></mrow></msup></mtd></mtr><mtr><mtd><msub><mover><mi>x</mi><mo>^</mo></mover><mi>k</mi></msub><mo>=</mo><msubsup><mover><mi>x</mi><mo>^</mo></mover><mi>k</mi><mo>-</mo></msubsup><mo>+</mo><msub><mi>K</mi><mi>k</mi></msub><mrow><mo>(</mo><msub><mi>z</mi><mi>k</mi></msub><mo>-</mo><mi>H</mi><msubsup><mover><mi>x</mi><mo>^</mo></mover><mi>k</mi><mo>-</mo></msubsup><mo>)</mo></mrow></mtd></mtr><mtr><mtd><msub><mi>P</mi><mi>k</mi></msub><mo>=</mo><mrow><mo>(</mo><mi>I</mi><mo>-</mo><msub><mi>K</mi><mi>k</mi></msub><mi>H</mi><mo>)</mo></mrow><msup><msub><mi>P</mi><mi>k</mi></msub><mo>-</mo></msup></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0000525420610000033.GIF" wi="592" he="256" /></maths>对步骤1得到的第k时刻状态估计的先验值<img file="FDA0000525420610000034.GIF" wi="64" he="72" />以及第k时刻协方差的先验值P<sub>k</sub><sup>‑</sup>进行修正,得到第k时刻机器人状态估计的后验值<img file="FDA0000525420610000035.GIF" wi="54" he="73" />和协方差的后验值P<sub>k</sub>;其中H表示机器人观测模型对<img file="FDA0000525420610000036.GIF" wi="52" he="72" />的雅克比矩阵;R为测量误差;步骤2.4:地图扩建:每次观测到标志物后,机器人会将该标志物的位置扩充到构建的地图中。
地址 710072 陕西省西安市友谊西路127号