ROS SLAM #2 Hector SLAM (2D地圖建置)

Published on:

最近看的資料有點多,頭昏腦脹的^^"

大概就是如下面的影片那樣,利用RPLidar這個Laser scanner感測器,搭配Hector SLAM演算法去做地圖建置。
Demo影片

[安裝RPLidar driver]

硬體:RPLidar、Tegra TK1
軟體:Ubuntu 14.04、ROS Indigo

大概可以掃到的範圍是六米內,在使用前還是得先到官方網站下載SDK。

[圖一] RPLidar的樣子

官網的資料提供Windows跟Ubuntu板本的範例,同時也附上cp2102轉接晶片的driver。(在ubuntu安裝外來驅動點我) <– 如果不能按的話就是還沒寫XD

如果原本的kernel版本裡面就有的話也可以從裡面將驅動打開就好

這是RPLidar的Driver

$ cd ~/rplidar_sdk_v1.4.5/sdk/sdk

$ make

[圖二] RPLidar盒子附的轉接頭

windows在這裡就不說了,然而Ubuntu的sample要build過才能執行喔(大家自己摸索吧哇哈哈)

驅動都OK之後,要記得把com port的權限改掉,否則會遇到無法從感測器獲得資訊的情況。

先確定有認到port,再改權限成666即可。

$ ls /dev/ttyUSB*

[圖三]

更改com port 權限

$ sudo chmod 666 /dev/ttyUSB0

再來要裝的是RPLidar 在 ROS的package,有兩種方式。

第一種:透過PPA下載

$ sudo apt-get install ros-indigo-rplidar-ros

第二種:把Github 上的 source code放到catkin_ws裡 (選擇SLAM的branch)

$ cd ~/catkin_ws/src

$ git clone https://github.com/robopeak/rplidar_ros

$ cd ~/catkin_ws

$ catkin_make

載好ROS的範例就可以來執行看看囉~

單純preview畫面
$ roslaunch rplidar_ros view_rplidar.launch


[圖四] RPLidar preview

[下載Hector SLAM]

$ cd ~/catkin_ws/src

$ git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam

$ cd ~/catkin_ws

$ catkin_make

然後就可以來執行SLAM的部份

$ roslaunch rplidar_ros view_slam.launch

[圖五] 搭配hector slam demo

Hector SLAM簡介

Hector = Heterogeneous Cooperating Team of Robots
成立於2008的秋天,於2010年晚期從原本的RoboFrame中的演算法移植變成ROS的型式package。
註:RoboFrame似乎是某一個機器人作業系統

用2D網格的方式,將Laser scanner的值透過tf library轉換成xy坐標。
Pm為sensor位置,其餘紅點為暫存走過的格點。
estimate估計障礙物可能的位置並且描繪,重複掃描用bilinear filtering方式不斷修正地圖。

​[圖六] Hector SLAM原裡

感測器使用的是RPLidar,下圖是利用rqt_graph畫出的關係圖。
大致上主要的路徑已塗上顏色。
RPlidar讀資料跟SLAM演算法是不同Package,並不是寫在一起的,透過message機制傳遞資訊。(這就是ROS的優點啊!)

Node 功能
/link2_broadcaster ROS navigation的功能[見補充]
/link1_broadcaster ROS navigation的功能[見補充]
/rplidarNode 將讀到的值丟到 /scan 的這個topic
/hector_height_mapping Hector SLAM演算法

Topic (資料型態)

Topic Data type 功能
/tf_static tf2_msgs/TFMessage ROS navigation的功能[見補充]
/tf tf2_msgs/TFMessage ROS navigation的功能
/initalpose() ROS navigation的功能 [見補充]
/scan sensor_msgs/LaserScan Lidar讀到的值
/map nav_msgs/OccupancyGrid Map的值


[圖七] Demo code的流程圖

再將hector mapping的部份拆開來會看到

Node 功能
hector_pose_estimation 將sensor的值轉換成imu資訊丟給tf處理。
hector_mapping 不斷地即時更新map,並publish。
hector_map_server 儲存並畫出地圖形狀,提供查詢位置(pose)服務。
hector_trajectory_server 從TF中提取資訊,轉換成移動路徑位置。
hector_geotiff 將所有得到的資訊整合到網格地圖(可以從rviz看到)。

imu = (Inertial Measurement Unit)

data type:geometry_msgs
包含方位變異值(orientation)、角速度變異值(angular velocity)、線性加速度變異值(linear acceleration)主要是roll(x)與pitch(y),因為不需要考慮高度。


​​[圖八] 網路上抓的,畫的比較好的圖。
[​補充] ROS navigation的功能
包含​tf、actionlib、pluginlib、dynamic_reconfigure​簡單來說,是ros提供用在地圖與機器人姿態之間轉換的功能。
​用這些現成的工具,就可以做到定位(相對定位)的效果。

歡迎轉載分享,但是要告知並註明出處。

若有錯誤,懇請指正。

Comments

comments powered by Disqus