第一讲 SLAM概论和架构

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/

猜你喜欢

转载自blog.csdn.net/j_____j/article/details/78995629