Rplidar A1在ROS中使用和用来建图
1.ROS中使用激光雷达(RPLIDAR)
我这里用的是思岚(rplidar)A1,通过ros系统去驱动激光雷达,下面做简单的介绍。
RPLIDAR是低成本的二维雷达解决方案,由SlamTec公司的RoboPeak团队开发。
它能扫描360°,12米半径的范围。
它适合用于构建地图,SLAM,和建立3D模型。
- 源码安装 rplidar-ros 雷达驱动
$ mkdir -p ~/turtlebot_ws/src
$ cd ~/turtlebot_ws/src
## 激光雷达rplidar一代驱动
$ git clone https://github.com/ncnynl/rplidar_ros.git
- 添加环境变量,在~/.bashrc最后添加一行:
$ source ~/turtlebot_ws/devel/setup.bash
(根据自己的环境变量路径去添加)
- 刷新配置
$ source ~/.bashrc
- 配置
*检查端口权限
$ ls -l /dev |grep ttyUSB
*设置端口权限666
$ sudo chmod 666 /dev/ttyUSB0
- 测试
运行rplidar和并打开rviz查看
$ roslaunch rplidar_ros view_rplidar.launch
- 使用别名
建立别名,运行脚本创建别名
$ ./scripts/create_udev_rules.sh
使用别名,在启动的launch文件,修改使用别名
<param name="serial_port" type="string" value="/dev/rplidar"/>
2.RPlidar A1在Hector SLAM功能包下建图
2.1建立工作空间并下载编译源码
mkdir -p ~/turtlebot_ws/src
cd ~/turtlebot_ws/src
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git
2.2返回上级包编译
cd ..
catkin_make
2.3 添加环境变量
source /turtlebot_ws/devel/setup.bash
2.4 建图过程
1)首先将Rplidar连接到电脑上
2)ctrl alt +t 打开终端,输入
检查rplidar的串行端口的权限
$ ls /dev/ttyUSB* 或者 $ls -l /dev|grep ttyUSB
添加写权限(例如/ dev / ttyUSB0)
$ sudo chmod 666 /dev/ttyUSB0
3)测试扫描界面
$ roslaunch rplidar_ros view_rplidar.launch
4)slam建图
$ roslaunch rplidar_ros slam.launch //slam.launch的代码见下文
5)保存slam得到的地图信息
首先,需要安装map_server包。由于melodic中没有提供map_server的安装方法,而map_server存在于navigation包中,于是我们通过安装navigation包来安装map_server包。
$ sudo apt install ros-melodic-navigation
然后,保存图形。
$ rosrun map_server map_saver
3.源码
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>