介绍:
- 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