[輕鬆打造自己的ROS Jetbot] 單元3 : 快速完成LiDAR (YDlidar X) 設定 和 Hector-SLAM安裝
<source : greatway9999>
一、前言
開發套件上可能受限於硬體規格,如果想要新增感測器,就要自己思考如何擴增。
由於採購的套件並未設計安裝LiDAR的位置,因此先以陽春的鐵架方式,搭建一個放置LiDAR的位置。
另外,採用的馬達未具備encoder的功能,因此SLAM演算法採用不依靠里程計資料的 Hector-SLAM。
接下來就要來分享如何讓LiDAR和Hector-SLAM演算法順利運作。
實作目標 :
- LiDAR可以運作,收得到資料。
- Hector-SLAM可以正常運作。
- 本機可以接收到機器人端的資訊,成功進行SLAM建圖。
二、步驟
本次採用的LiDAR為YDlidar X4,比起市面上動則幾十萬上下的LiDAR,YDlidar X4是比較經濟實惠的選擇。
所以要驅動YDlidar X4,就要完成和Jetson nano相關的接線與驅動安裝。另外,為了減緩Jetson nano的運算壓力,規劃Hector-SLAM的演算法在電腦上計算,因此相關套件會安裝在電腦上。
接下來讓我們開始動手。
(一)、YDlidar X4的相關設置
步驟0. 接線
<source : YDLIDAR X2/X4 user manual>
YDLidar X4內附的轉接器有2個接頭,一個是資料線,一個是電源線。基本上只要接資料線就可以運作了,但是從實作經驗來看,兩條都要接,YDLidar X4才能順利運作。
步驟1. 進入Jetson nano工作空間的 src資料夾
步驟2. 下載 ydlidar 的套件並編譯
步驟3. 更新環境變量
步驟4. 添加udev規則(非必須)
步驟5. 將ydlidar拔掉重插
步驟6. 使用Launch檔啟動 ydlidar
(二)、Hector-SLAM 相關設置
Hector-SLAM會安裝在電腦上,步驟如下 :
步驟1. 進到工作空間的src資料夾
$ cd ~/hector_ws/src
步驟2. 從github下載 hector slam套件包
$ git clone http://github.com/tu-darmstadt-ros-pkg/hector_slam.git
步驟3. 編譯
$ catkin_make
步驟4. 更新環境變量
$ source ~/catkin_ws/devel/setup.bash
步驟5. 修改launch檔
進入 hector_slam_launch 中的 launch 目錄中,新增 3 個launch 檔:
- slam.launch
- hector_mapping.launch
- geotiff_mapper.launch
並分別在這3個Launch檔中撰寫以下內容。
slam.launch
<?xml version="1.0"?>
<launch>
<param name="/use_sim_time" value="false"/>
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>
<include file="$(find hector_slam_launch)/launch/hector_mapping.launch"/>
<include file="$(find hector_slam_launch)/launch/geotiff_mapper.launch">
<arg name="trajectory_source_frame_name" value="scanmatcher_frame"/>
</include>
</launch>
hector_mapping.launch
<?xml version="1.0"?>
<launch>
<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
<param name="pub_map_odom_transform" value="true"/>
<param name="map_frame" value="map" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="base_link" />
<!-- Map size / start point -->
<param name="map_resolution" value="0.050"/>
<param name="map_size" value="1048"/>
<param name="map_start_x" value="0.5"/>
<param name="map_start_y" value="0.5" />
<param name="map_multi_res_levels" value="2" />
<!-- Map update parameters -->
<param name="update_factor_free" value="0.4"/>
<param name="update_factor_occupied" value="0.9" />
<param name="map_update_distance_thresh" value="0.4"/>
<param name="map_update_angle_thresh" value="0.06" />
<param name="laser_z_min_value" value = "-1.0" />
<param name="laser_z_max_value" value = "1.0" />
</node>
<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser_frame 100" />
</launch>
<?xml version="1.0"?>
<launch>
<arg name="trajectory_source_frame_name" default="/base_link"/>
<arg name="trajectory_update_rate" default="4"/>
<arg name="trajectory_publish_rate" default="0.25"/>
<node pkg="hector_trajectory_server" type="hector_trajectory_server" name="hector_trajectory_server" output="screen">
<param name="target_frame_name" type="string" value="/map" />
<param name="source_frame_name" type="string" value="$(arg trajectory_source_frame_name)" />
<param name="trajectory_update_rate" type="double" value="$(arg trajectory_update_rate)" />
<param name="trajectory_publish_rate" type="double" value="$(arg trajectory_publish_rate)" />
</node>
<node pkg="hector_geotiff" type="geotiff_node" name="hector_geotiff_node" output="screen" launch-prefix="nice -n 15">
<remap from="map" to="/dynamic_map" />
<param name="map_file_path" type="string" value="$(find hector_geotiff)/maps" />
<param name="map_file_base_name" type="string" value="uprobotics" />
<param name="geotiff_save_period" type="double" value="0" />
<param name="draw_background_checkerboard" type="bool" value="true" />
<param name="draw_free_space_grid" type="bool" value="true" />
</node>
</launch>
關於 YDLidar X4,更多內容請見本篇文章。
三、啟動 YDLidar X4 和 Hector-SLAM
請在SBC(Jetson Nano)端啟動 lidar
$ roslaunch ydlidar lidar.launch
此時,LiDAR應該會正常轉動。
接著在PC端起動hector slam
$ roslaunch hector_slam_launch slam.launch
RVIZ會被打開,你會看到地圖逐漸生成,再搭配機器人移動,就可以讓機器人越來越完整。
順利完成安裝後,一定迫不及待要來跑跑看,結果就如下圖所示。
看來建圖效果不太優,原因是機構待改進,因為沒有把LiDAR固定好,影響到建圖精度。
原圖如下 :
後機構經調整後,如下圖
讓Lidar被穩穩地固定住,改善Lidar轉動時產生的晃動,因此,建圖的效果明顯改進很多,就如下圖所示。
最後,如果你滿意建圖成果,請輸入以下指令將圖儲存。
rosrun map_server map_server 地圖命名.yaml
ex.$ rosrun map_server map_server mymap.yaml
如果你未安裝map_server套件,請輸入以下指令進行安裝。
$ sudo apt-get install ros-melodic-map-server
完整的 Demo 影片如下 :
---
參考資料 :
0 留言