SLAM的提出与发展
以往是以单个传感器依靠积分运算进行定位,因而不够具有鲁棒性差、精度低,
1986年,Hugh Durrant-Whyte等在ICRA上提出了“利用概论估计来解决定位和构图的问题”。
[1] Durrant-Whyte, Hugh, and Tim Bailey. "Simultaneous localization and mapping: part I." IEEE robotics &
automation magazine 13, no. 2 (2006): 99-110.
自此,开启了SLAM的进程,Simultaneous Localization And Mapping同步定位与地图构建,SLAM位于{任务规划、决策层}{感知、定位以及构图层}{控制层}{执行器层及其数学模型}中的{感知、定位以及构图层},解决“我在当前环境的什么位置”“当前所在的环境是个什么样子?”
常见的SLAM传感器:激光雷达(主要用在无人驾驶)、相机(单目、双目、RGBD)、声纳(水下)、IMU(加速度计、角速度计、磁强计[COMPASS一般不用,易受到电子设备影响])
常见的SLAM的应用场景:无人驾驶(Heremaps),虚拟现实(oculus用相当低的价格实现了一个可靠的系统),google Tango(2018年3月停掉,但是主要技术转移到AR CORE),无人机,自主服务机器人(当前是创业热门(2018年),加州湾很多做这方面的创业公司)
VSLAM与激光SLAM:VSLAM,利用可见光,通过特征点提取,基于多视觉几何;激光SLAM,可以得到精确的场景模型,主要是匹配的问题,ICP--迭代最邻近点,经典的一个工具--Scan Matching,集成在ROS中。
算法上经历了几个重要的阶段:EKF-SLAM(为什么叫EKF呢?用到了扩展卡尔曼滤波器解决非线性问题,卡尔曼滤波器属于贝叶斯滤波器的一种特殊情况,贝叶斯滤波器假设系统和环境噪声服从高斯分布),FAST-SLAM(很重要的是使用了Particle Filter粒子滤波器--随机撒点,再进行观测),Graph-SLAM(百分八九十的人都在做Graph-SLAM,图优化理论,滤波器的问题在于后期的特征空间巨大)
里程碑人物:Andrew(全称:Javier Civera,Andrew J.Davison),Andrew让单目摄像机可以做SLAM,大幅度降低了VSLAM的成本(扩展:他的学生正在做SLAM++,三维场景分割,语义理解),让SLAM可以用更廉价的设备获取更丰富的信息,图像信息丰富,适合做深度学习等。2,Georg Klein,David Murray,提出了后来做SLAM的pipline,开始做多线程图优化的SLAM(在做定位的时候,线程独立,xxxx捆绑约束xxx)。后来才出现了RGBD-SLAM,ORB-SLAM,LSD-SLAM,视觉IMU融合(第一个吃螃蟹的:明尼苏达大学马尔斯实验室用tango做的)。激光SLAM的代表人物JI ZHANG。
Google开源的项目:Cartographer
BLAM项目
SegMatch---它的问题在于点云没有意义,现在它的方向转向点云的语义理解。
KLTTI数据集http://www.cvlibs.net/datasets/kitti/
从滤波器谈SLAM
滤波器的重要性在于,可以减少对与硬件(高精度)传感器的依赖,一个反例就是tango对传感器的依赖性太强,因此tango被CUT。
先验+后验,俗称融合
Encoder 编码器,可以测速,估计自己的位置prediction of position,基于观测量的Observation,
实验:
1,安装ROS
忘记记录了,待补充
2,配置ROS工作空间
cd ~ %%来到home目录 mkdir ROSWORKSPACE %%创建一个文件夹 gedit ~/.bashrc %%编辑bashrc
在bashrc后面添加
ROS_WORKSPACE=$HOME/ROS_WORKSPACE export ROS_WORKSPACE ROS_PACKAGE_PATH=$ROS_WORKSPACE:$ROS_PACKAGE_PATH export ROS_PACKAGE_PATH
在Terminal中尝试
source ~/.bashrc这是为了在当前bash环境下读取并执行.bashrc中的 命令,当然也可以重新打开一个terminal
roscd》》成功咯
3,启动ROSCORE
在Terminal中输入roscore可以看到如下信息:
... logging to /home/jj/.ros/log/d0dccac8-28ca-11e8-b8db-fc45969f3dd9/roslaunch-jj-Aspire-VX5-591G-12238.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://jj-Aspire-VX5-591G:40717/ ros_comm version 1.12.12 SUMMARY ======== PARAMETERS * /rosdistro: kinetic * /rosversion: 1.12.12 NODES auto-starting new master process[master]: started with pid [12250] ROS_MASTER_URI=http://jj-Aspire-VX5-591G:11311/ setting /run_id to d0dccac8-28ca-11e8-b8db-fc45969f3dd9 process[rosout-1]: started with pid [12263] started core service [/rosout]
可以看到rosdistribution是kinetic,版本是1.12.12,ROS_MASTER_URI=http://jj-Aspire-VX5-591G:11311/,端口11311,这个URL和端口用于设置主从服务器。
4,下载数据集
用wget指令下载数据集
wget https://vision.in.tum.de/rgbd/dataset/freiburg1/rgbd_dataset_freiburg1_room.bag
如果没有安装,可以安装
sudo apt-get install wget如果找不到,那么可以用指令寻找
apt-cache search wget
再重新用install指令安装
5,gitclone资源
在WORKSPACE中打开Terminal,执行
git clone https://github.com/EricLYang/courseRepo
6,ROS操作
在有数据集的目录下
rosbag play rgbd_dataset_freiburg1_room.bag
rosbag play指令,相当于把原来的数据存下来,一次性去播放,而且它是有时间戳,跟原始的真实数据是一样的,一旦你运行它,它就开始播放了。另外打开一个终端,执行
rostopic list
就可以看到有这么些消息量,Message,每一个名字就代表一个Message
/camera/depth/camera_info /camera/depth/image /camera/rgb/camera_info /camera/rgb/image_color /clock /cortex_marker_array /imu /rosout /rosout_agg /tf
rostopic info /camera/depth/image
就可以看到这个Message的类型,如下
Type: sensor_msgs/Image Publishers: * /play_1521194249474442692 (http://jj-Aspire-VX5-591G:40045/) Subscribers: None
可以看到,它的类型是sensor_msgs/Image,然后Publishers: * /play_1521194249474442692 (http://jj-Aspire-VX5-591G:40045/)表明它是通过rosplay发布出来的,它的发布端口是http://jj-Aspire-VX5-591G:40045/,但是这个东西其实不需要管,只需要接收就行,接收的方法,可以用image_view,
rosrun image_view image_view image:=/camera/depth/image
它是一个可视化的小插件,这就是ROS的一个简单的小功能。
rostopic hz /camera/depth/image
对于每个每个消息量来说,这个可以看到发布的消息量的频率。另外echo
rostopic echo /camera/depth/image
可以把数据集完整发布出来,数据量特别巨大,另外,写程序的时候肯定要涉及到Message的数据格式,比如这个image的数据格式为
可以单独播放Message中的某个数据,比如,
rostopic echo /camera/depth/image/width
rosrun rqt_plot rqt_plot
ros消息的内容,百度rosmessage sensor image,看wiki,http://wiki.ros.org/Messages
RGBD的演示程序
ROS的可视化程序
rosrun rviz rviz
链接
<(⊙o⊙)…蓝灯已开始收费>蓝灯的GIT地址:https://github.com/getlantern/lantern
Eric的GITHUB地址:https://github.com/EricLYang/courseRepo
http://jj-Aspire-VX5-591G:40045/