超详细!思岚S2激光雷达hector_mapping建图

ROS中最常见的定位包还是gmapping,gmapping是需要里程计的数据也就是IMU或者视觉里程计的数据,但是目前还是仅仅在电脑中测试,并未实现树莓派与飞控通信,因此使用不用里程计数据的hector_mapping首先进行测试,并熟悉ROS中建图所需要的基础技能。

环境为:ubuntu20.04,双系统;ROS版本: noetic

(如有不一样的注意替换部分代码中的ROS版本号即可)

目录

一.创建工作空间

二.下载rplidar_ros功能包并测试

 三.使用hector_slam算法建图

四.保存地图 

五.查看坐标系与话题关系


一.创建工作空间

1.打开终端,输入以下命令,创建名为catkin_ws的工作空间(工作空间名可自行设置)

mkdir -p ~/catkin_ws

2.运行以下命令,终端将打开刚创建的工作空间,便于后续的操作

cd catkin_ws/

3.在catkin_ws文件夹中创建src文件夹,用于后续放置功能包和源码

mkdir src

4.输入以下命令,编译工作空间

catkin_make

二.下载rplidar_ros功能包并测试

1.终端输入以下命令,使得终端选中src目录

cd ~/catkin_ws/src

2.继续输入以下命令,下载rplidar_ros功能包到src目录下

git clone https://github.com/Slamtec/rplidar_ros.git

3.运行以下命令,回到工作空间的根目录下

cd ..

4.再次编译工作空间

catkin_make

成功编译将如下图所示

 5.将雷达电源接通,并将USB接口连接电脑

6.运行以下命令,使雷达工作起来

(我的激光雷达型号是S2,可修改命令中的launch文件名来运行对应的launch文件)

roslaunch rplidar_ros rplidar_s2.launch

7.在终端窗口按Ctrcl+C结束命令,雷达停止运行

8.再次输入以下命令,可以在RViz中看到激光雷达采集到的点云数据

roslaunch rplidar_ros view_rplidar_s2.launch

若运行正常,可以看到激光雷达数据如下图所示:

9.已测试雷达能够正常运行,在终端窗口按Ctrl+C结束操作。

注意注意,如果是第一次运行激光雷达,会报错如下:

[ERROR] [1723530053.709783387]: Error, unexpected error, code: 80008004
[rplidarNode-2] process has died [pid 4342, exit code 255, cmd /home/sch/catkin_ws/devel/lib/rplidar_ros/rplidarNode __name:=rplidarNode __log:=/home/sch/.ros/log/315c68b0-593c-11ef-a37a-03c60d07af29/rplidarNode-2.log].
log file: /home/sch/.ros/log/315c68b0-593c-11ef-a37a-03c60d07af29/rplidarNode-2*.log

这是因为此时ROS没有权限访问激光雷达的端口,按照以下步骤即可:

ls /dev/ttyUSB0 -lh
sudo chmod 666 /dev/ttyUSB0

 这个时候再次运行launch文件即可成功。

 三.使用hector_slam算法建图

1.运行以下命令,回到src目录下

cd ~/catkin_ws/src

2.运行以下命令,下载hector_slam功能包

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

下载成功如下图所示

3.接着进入rplidar_ros文件夹下,添加hector_mapping_demo.launch文件,并打开此文件。具体实现过程为,分别运行以下代码

 cd rplidar_ros/launch/
 touch hector_mapping_demo.launch
 gedit hector_mapping_demo.launch

4.在打开的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>

之后按Ctrl+S保存文件,之后关闭此文件

5.先运行3次cd ..,使得终端回到工作空间根目录下(完全按照我的步骤的情况下)

cd ..

6.重新编译工作空间

catkin_make

7. 运行以下命令,使得雷达运行起来

roslaunch rplidar_ros rplidar_s2.launch

8.再打开一个新的终端窗口,输入以下命令,雷达将成功建图

roslaunch rplidar_ros hector_mapping_demo.launch

若出现以下错误,输入以下命令以刷新环境变量

souce ./devel/setup.bash

 刷新变量后再次运行上面的命令,成功出现下图,建图成功

9.注意激光雷达在移动的时候要慢一点,要不然会出现以下错误

四.保存地图 

1.把这个地图保存下来,首先安装map_server包

(noetic为我安装的ros的版本,不一样的注意替换) 

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

如下图所示

 2.接着保存地图

rosrun map_server map_saver -f ~/my_map

如下图所示

此时系统主目录下将多出两个文件,其后缀分别为.pgm和.yaml

五.查看坐标系与话题关系

1.用下列tf命令行看一下现在坐标系的关系

rosrun tf view_frames

运行成功后将在系统主目录下生成2个后缀分别为.gv和.pdf的文件

若出现以下错误

解决方法如下:终端窗口中输入以下命令

sudo gedit /opt/ros/noetic/lib/tf/view_frames

稍等将打开文件,然后搜索 m = r.search(vstr)(第89行),在这行前面添加 vstr=str(vstr)即可。修改前如下图所示

vstr=str(vstr)

再次运行以下命令

rosrun tf view_frames

成功运行后可打开pdf文件查看坐标系的关系,如下图所示

2.接下来看一下hector_mapping运行时的节点和话题关系,新建一个终端窗口,运行以下命令

rqt_graph

成功运行后如下图所示

若出现错误,显示“未找到此命令”,则运行以下命令

(noetic为我安装的ros的版本,不一样的注意替换)

sudo apt-get install ros-noetic-rqt
sudo apt-get install ros-noetic-rqt-graph
sudo apt-get install ros-noetic-rqt-common-plugins

 3.获取base_link的姿态,需要手动获取对应的tf,终端输入以下命令

rosrun tf tf_echo /map /base_link

 成功运行后如下所示

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值