(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

猜你喜欢

转载自blog.csdn.net/qq_36371342/article/details/88817850