(ROS學習筆記)激光雷達SLAM構圖--by HectorSlam

介紹:

  • hector_mapping是可以在沒有里程測量的情況下以及在展示(傳感器,平臺或兩者的)俯仰/俯仰運動的平臺上使用的SLAM方法。
  • 利用現代LIDAR系統(如Hokuyo UTM-30LX)的高更新率,並以掃描速率(對於UTM-30LX爲40Hz)提供2D姿態估計。
  • 對於許多真實世界場景足夠準確。

硬件環境:

1.思嵐激光雷達
2. 筆記本電腦
3. Ubuntu16.04
4. ROS-kinetic

API:

1.訂閱的話題

  • scan (sensor_msgs/LaserScan) ,SLAM系統使用的激光掃描。
  • syscommand (std_msgs/String) ,系統命令。 如果字符串等於“復位”,則地圖和機器人姿勢被重置爲其初始狀態。

2.發佈的話題:

  • map_metadata (nav_msgs/MapMetaData) ,從此話題獲取地圖元數據,將其鎖定並定期更新。

  • map (nav_msgs/OccupancyGrid) ,從此話題獲取地圖數據,將其鎖定並定期更新。

  • slam_out_pose (geometry_msgs/PoseStamped) ,估計的機器人姿勢沒有協方差

  • poseupdate (geometry_msgs/PoseWithCovarianceStamped) ,估計的機器人姿態具有高斯估計的不確定性

3.服務:
- dynamic_map (nav_msgs/GetMap) ,調用此服務以獲取地圖數據

4.參數:

- base_frame (string, default: base_link) ,機器人基本座標系的名稱。這是用於定位和用於激光掃描數據的變換
- map_frame (string, default: map_link) ,map 座標系的名稱。
- odom_frame (string, default: odom) ,里程座標系的名稱。

步驟

1、安裝A2 激光雷達程序包

sudo apt-get install ros-kinetic-rplidar-ros

2、配置端口、設置端口權限

ls -l /dev |grep ttyUSB
sudo chmod 666 /dev/ttyUSB0

3、(測試)激光雷達launch文件

roslaunch rplidar_ros view_rplidar.launch

ps:若出現找不到命令,需要添加環境變量:
在catkin_ws目錄下:

source devel/setup.bash

4、安裝Hector-Slam 程序包

sudo apt-get install ros-kinetic-hector-slam

5、創建launch文件
在rplidar_ros/launch/目錄下添加slam.launch文件

<launch>
 <node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen"> 
 
 <!-- Frame names --> 
 <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" /> 
 
 <!-- Tf use --> 
 <param name="use_tf_scan_transformation" value="true"/> 
 <param name="use_tf_pose_start_estimate" value="false"/> 
 <!-- Map size / start point --> <param name="map_resolution" value="0.05"/>
 <param name="map_size" value="2048"/> 
 <param name="map_start_x" value="0.5"/> 
 <param name="map_start_y" value="0.5" /> 
 <param name="laser_z_min_value" value = "-1.0" /> 
 <param name="laser_z_max_value" value = "1.0" /> 
 <param name="map_multi_res_levels" value="2" /> 
 <param name="map_pub_period" value="2" /> 
 <param name="laser_min_dist" value="0.4" /> 
 <param name="laser_max_dist" value="5.5" /> 
 <param name="output_timing" value="false" /> 
 <param name="pub_map_scanmatch_transform" value="true" />
 <!--<param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame" />--> 
 
 <!-- Map update parameters --> 
 <param name="update_factor_free" value="0.4"/> 
 <param name="update_factor_occupied" value="0.7" />
  <param name="map_update_distance_thresh" value="0.2"/> 
  <param name="map_update_angle_thresh" value="0.06" /> 
  
  <!-- Advertising config --> 
  <param name="advertise_map_service" value="true"/> 
  <param name="scan_subscriber_queue_size" value="5"/> 
  <param name="scan_topic" value="scan"/> </node> 
  <node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/> 
  <node pkg="rviz" type="rviz" name="rviz" args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/> 

</launch>

6、啓動雷達、RIVZ構圖(新窗口)

roslaunch rplidar_ros view_rplidar.launch
roslaunch rplidar_ros slam.launch

7、保存slam地圖
首先安裝map_server包。

sudo apt-get install ros-kinetic-map-server

保存:

rosrun map_server map_saver -f ~/my_map
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章