前提條件:1,確保讀者已經安裝了kinect或者其他深度攝像頭的驅動,如果未安裝,可以直接在網盤下載:http://pan.baidu.com/s/1hqHB10w 提取密碼:wrmn
利用深度相機仿激光數據創建地圖:
所依賴包的下載與安裝:
1,安裝hector_slam
2,下載hector_slam_example:下載地址,編譯好之后,記住需要將這個文件加入ros包中
ROS_PACKAGE_PATH=/home/用戶名/catkin_ws/hector_slam_example:$ROS_PACKAGE_PATH
當然路徑改成你自己的路徑。
3,Install the dependency packages:
rosdep install hector_slam_example
4,在啟動之前如果你用的是kinect,那就請你修改一下launch文件吧。
<include file="$(find openni_launch)/launch/openni.launch">
#由於我們使用的kinect,openni2已近不支持了。所以用openni然后就是roslaunch
roslaunch hector_slam_example hector_openni.launch
只需要讓移動平台移動就可以去構建地圖了,當然這里面用的生成模擬極光的方法是depthimage_to_laserscan,代碼的方法速度更快但是要求攝像頭要相對穩定,並且盡量水平放置。
效果:

從單幀來看,還是不錯的,
但是移動一下后就發現問題了:

查了一下后才知道:
ros中常用的2d slam算法主要有gmapping和hector_slam,其中
hector_slam是個性能非常好的算法,但是作者在論文中說的很明白,hector_slam通過最小二乘法匹配掃描點,且依賴高精度的激光雷達數據,但是不需要里程計。因此掃描角很小且噪聲較大的kinect是不行的,我試過,匹配的時候會陷入局部點,地圖非常混亂。
hector_slam是個性能非常好的算法,但是作者在論文中說的很明白,hector_slam通過最小二乘法匹配掃描點,且依賴高精度的激光雷達數據,但是不需要里程計。因此掃描角很小且噪聲較大的kinect是不行的,我試過,匹配的時候會陷入局部點,地圖非常混亂。