转载自:https://zhuanlan.zhihu.com/p/45207081?utm_source=qq&utm_medium=social&utm_oi=726911971793838080

原文有视频

这篇文章实现了《概率机器人》第10章中提到的EKF-SLAM算法,更确切的说是实现了已知一致性的EKF-SLAM算法。

ArUco EKF SLAM

EKF-SLAM一般是基于路标的SLAM系统。本文使用了一种人工路标——ArUco码。每个ArUco码有一个独立的ID,通过PnP方法还可以计算出码和相机之间的相对位姿。OpenCV中集成了ArUco码库,提供了检测和位姿估计的功能。大家可以参考:

https://docs.opencv.org/3.3.0/d9/d6d/tutorial_table_of_content_aruco.html。​docs.opencv.org

Aruco Marker

首先在房间的地面上贴若干ArUco码作为路标,然后遥控一个带有摄像头+编码器的机器人在房间内运动。本文的目标就是通过EKF算法同时估计出这些码的位置和机器人的位姿。

实验环境

要实现EKF-SLAM,最关键的就是建立运动模型和观测模型,将这两个模型直接带进EKF算法框架就是EKF-SLAM。EKF-SLAM算法使用扩展的状态空间: 

前3项是机器人位姿,后2N项是 N个路标点的位置。

1. 运动模型

1.1 里程计模型

我比较喜欢采用《自主移动机器人导论》中的里程计模型作为运动模型。具体的,如果t-1时刻机器人的位姿是  ,那么t时刻的机器人位姿为:   为左右轮系数,把编码器增量转化为左右轮的位移,  是轮间距。左右轮位移的增量服从高斯分布,均值就是编码器计算出的位移增量,标准差与增量大小成正比。如果t-1时刻机器人位姿的协方差为,控制的协方差也就是左右轮位移增量的协方差为,那么机器人位姿在t时刻的协方差就是:   是(1)式关于机器人位姿的雅克比:

 是(1)式关于控制)的雅克比:

1.2 EKF-SLAM运动更新

上面说的还是只考虑机器人位姿的情况,但是SLAM系统还需要考虑路标点。扩展路标点之后,运动方程为:

系统状态的均值 更新利用(5)式,下面看状态的方差  更新。

 是  关于  的雅克比:

关于  的雅克比:

把(6)式展开看一下:

可以看出,运动更新同时影响了机器人位姿的协方差,以及位姿与地图之间的协方差。

2. 测量模型

首先解决测量值的问题。虽然可以获得ArUco码相对于机器人的6自由度位姿信息,但是为了与书上的观测统一,本文还是把相机作为Range-bearing传感器使用,也就是转换成距离和角度。1个ArUco码作为一个路标点  ,坐标为 

先说一下如何转化成距离和角度。下图是示意图,码与相机的相对位姿为,相机与机器人的相对位姿为  ,那么码相对于机器人的位姿为  。的平移项和  就是码的原点在机器人坐标系下的坐标。转化成距离信息就是,角度就是  。这样就得到了测量值。这里再做一个近似假设,认为观测的方差与距离和角度成线性关系:

第  个路标点的观测模型为:

展开来看:

根据扩展卡尔曼滤波,需要求解观测  相对于的雅克比,实际上一个路标点观测只涉及到机器人的位姿和这个路标点的坐标,组合在一起就是五个量:  。于是,观测相对于的雅克比是:

由于实际的状态空间是3+2N维的,要求的观测雅克比应该是2x(3+2N)维的。对(13)进行转换得到观测相对于全状态空间  的雅克比:

下面就可以按照EKF的框架进行操作了。

其中, 

就是由路标点和机器人位姿的均值获取。对每个观测到的路标点进行上述操作就完成了观测更新。

3. 地图构建

上文所说的操作都是假设路标点的数量是已知的,这个值也可以认为是不知道的,可以边运行边加入路标点:当看到一个新的地图点时就扩展状态空间和协方差。当观测到一个新的路标点,其观测为,根据机器人的位姿可以计算地图点的坐标为: 地图点的协方差为:   是(17)式关于机器人位姿的雅克比:   是(17)式关于观测  的雅克比: 通过以上各式,算出新路标的均值和协方差,加入到均值向量和协方差矩阵中即可。至此,EKF算法中所有的模型都已建立完毕。下面给出具体的实施代码。

4. 算法实现

  • 全部工程代码:

https://github.com/ydsf16/aruco_ekf_slam​github.com

  • 我利用Falconbot机器人,采集了两组实验数据,大家可以在这里下载:

https://pan.baidu.com/s/1EX9CYmdEUR2BJh7v5dTNfA​pan.baidu.com

5. 参考文献

《概率机器人》

《自主移动机器人导论》

Freiburg SLAM Course:

http://ais.informatik.uni-freiburg.de/teaching/ws13/mapping/​ais.informatik.uni-freiburg.de

[PR-3]ArUco EKF SLAM 扩展卡尔曼SLAM相关推荐

  1. ROS中EKF(扩展卡尔曼跟踪)的使用

    0.简版(更新于2020年最后一天) #include <bfl/wrappers/matrix/matrix_wrapper.h> #include <bfl/filter/ext ...

  2. SLAM综述-Lidar SLAM

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 SLAM包含了两个主要的任务:定位与构图,在移动机器人或者自动驾驶中,这是一个十分重要的问题:机器人要 ...

  3. 【滤波】扩展卡尔曼滤波器(EKF)

    %matplotlib inline #format the book import book_format book_format.set_style() 我们发展了线性卡尔曼滤波器的理论.然后在上 ...

  4. ## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)***

    ## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)*** ## 1 研究背景 电池的荷电状态(SOC)代表的是电池当前的剩余容量,数值定义是电池剩余电量与电池额 ...

  5. 视觉SLAM总结——视觉SLAM面试题汇总

    视觉SLAM总结--视觉SLAM面试题汇总 视觉SLAM总结--视觉SLAM面试题汇总 1. SIFT和SUFT的区别 2. 相似变换.仿射变换.射影变换的区别 3. Homography.Essen ...

  6. 【目标定位】基于matlab扩展卡尔曼滤波器多机器人定位【含Matlab源码 2327期】

    ⛄一.简介 1 机器人运动模型分析 1.2 坐标系 一个是全局坐标系(Xw,Yw), 另一个是机器人的局部坐标系(Xr,Yr). 如下图所示: 图1 机器人坐标系 室内环境用二维平面表示在全局坐标系X ...

  7. 说不尽的卡尔曼 | 详解扩展卡尔曼滤波器

    作者 | 火山 编辑 | 空中机器人前沿 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[目标跟踪]技术交流群 后台回复[卡尔曼滤波] ...

  8. PSL‑SLAM:PSL‑SLAM: a monocular SLAM system using points and structure lines in Manh 曼哈顿世界中的点线单目SLAM

    文章下载地址:https://download.csdn.net/download/weixin_50508111/85811572 一.文章简介 1. 文章类型/时间/作者/所属单位: 期刊论文/2 ...

  9. 激光slam与视觉slam

    文章目录 介绍 前端差异 后端优化 回环检测 视觉/激光优劣势对比 开源算法 视觉slam开源算法 激光slam开源算法 其他开源代码地址参考 知识点 激光雷达的参数定义 深度摄像头会不会取代雷达 结 ...

最新文章

  1. Silverlight 2.0学习笔记——XAML
  2. MATLAB-冒号符号
  3. 财务凭证过账增强 BAPI_ACC_DOCUMENT_POST
  4. TeeChart用法(网络收集)默认分类 2010-03-05 21:46:05 阅读788 评论0 字号:大中小 .
  5. spring技术小结
  6. 【ASM C/C++】 Makefile 规则说明
  7. Thinkpad 笔记本VMware Workstation 安装虚拟机出现“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”解决方法
  8. sklearn学习(模块列表)
  9. 六石风格:雨伞用袋子套起来
  10. PHP毕业设计——许愿墙(有源码)
  11. 影音先锋 android下载地址,影音先锋app官方普通下载-影音先锋 安卓版v5.8.2-PC6安卓网...
  12. U盘必备的5个软件(让你的U盘无所不能)
  13. 让iPhone不能自动下载系统更新的一个办法
  14. win7安全模式卡在Classpnp.sys文件的解决办法
  15. 同步电路设计中CLOCK SKEW的分析
  16. 创建临时文件及文件夹
  17. hasnext() java_java中Scanner的hasNext()的疑问
  18. 荣品电子T507移值Qt
  19. STL-夏天来了~~好开心啊,呵呵,好多好多水果~~-C++
  20. 解决css字体图标如何下载使用

热门文章

  1. perl 中单引号双引号的区别-----perl学习笔记
  2. m-orchastration system
  3. 第60天:js常用访问CSS属性的方法
  4. 13.组合查询--SQL
  5. 【原创】浅说windows下的中断请求级IRQL
  6. spring MVC、mybatis配置读写分离
  7. WinAPI: CreateFontIndirect - 根据字体结构建立逻辑字体
  8. [C]计算某一天是该年中的第几天
  9. Tomcat自定义Http错误信息
  10. linux系统下网卡故障解决