rplidar的安装与使用

rplidar的安装与使用

1、rplidar的安装
2、RPLIDAR驱动下载
3、将RPLIDAR连接好后,检测串口是否连接成功
4、编译工作空间并设置环境变量
5、检查RPLIDAR A2的串行端口的权限并添加写权限(都是在RPLIDAR当前路径下配置的)
6、查看RPLIDAR显示的图形
6、进行雷达实时数据的采集,并基于cartographer进行地图的保存
7、地图保存
8、雷达相关知识点的扩充
9、常见错误
10 基于真实机器人用catrtographer建图——失败
11 链接参考
12 RPLIDAR坐标系解析
13 实际运用中出现的问题

1、rplidar的安装

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

1

2、RPLIDAR驱动下载

打开ROS Wiki网址。下载git源码.
3、将RPLIDAR连接好后,检测串口是否连接成功

连接图片见下图,用安卓数据线连接电脑usb串口即可
在这里插入图片描述

lsusb

1

4、编译工作空间并设置环境变量

~/RPLIDAR$ catkin_make
~/RPLIDAR$ source devel/setup.bash

1
2

5、检查RPLIDAR A2的串行端口的权限并添加写权限(都是在RPLIDAR当前路径下配置的)

~/RPLIDAR$ ls /dev/ttyUSB*
~/RPLIDAR$ sudo chmod 777 /dev/ttyUSB0

1
2

在这里插入图片描述
感觉下图中的串口号与上个命令中写入的串口号应该对应起来——此处有个疑问,一般插入该激光雷达就会显示USB0吗?还是也会显示其他串口号?发现一般默认是USB0.
打开src/rplidar_ros-master/launch/rplidar.launch文件,将 value="/dev/ttyUSB1"/>中的串口改为与以上命令显示的串口一致即可

<launch>
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/ttyUSB1"/>
<param name="serial_baudrate" type="int" value="115200"/><!--A1/A2 -->
<!--param name="serial_baudrate" type="int" value="256000"--><!--A3 -->
<param name="frame_id" type="string" value="laser"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
</launch>

1
2
3
4
5
6
7
8
9
10

6、查看RPLIDAR显示的图形

roslaunch rplidar_ros view_rplidar.launch

1

在这里插入图片描述
注意事项:
运行rplidar这一launch命令之前,一定要首先配置一下环境变量(source devel/setup.bash),否则容易出现以下错误:
在这里插入图片描述
6、进行雷达实时数据的采集,并基于cartographer进行地图的保存

(1)在新终端开启ROS

roscore

1

(2)运行rplidar ros包 (这是位于在RPLIDAR包的路径下的指令): #开启雷达驱动,其不包含rviz节点

cd lc
source devel/setup.bash
roslaunch rplidar_ros rplidar.launch

1
2
3

(3)开启cartographer节点(在cartographer所在的包目录下),其包含rviz节点

cd catkin_ws_cartographer
source install_isolated/setup.bash
roslaunch cartographer_ros cartographer_demo_rplidar.launch

1
2
3

7、地图保存

1)打开雷达驱动所在的文件夹终端,就是进行catkin_make的窗口,设置环境变量,否则后边无法保存

cd catkin_ws_cartographer
source install_isolated/setup.bash

1
2

此步非常重要,之前就是由于忘记进行操作此步,以至于一直保存地图不成功
2)完成轨迹, 不接受进一步的数据。

rosservice call /finish_trajectory 0

1

3)序列化保存其当前状态

rosservice call /write_state "{filename: '${HOME}/lc/20201103map.pbstream'}"

1

在这里插入图片描述
注意此处的${HOME}表示绝对路径/home/sdas
在这里插入图片描述

注意:此步是进行地图路径的保存,路径自己设置就好
4)将pbstream转换为pgm和yaml

rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/lc/mymap -pbstream_filename=${HOME}/lc/20201103map.pbstream -resolution=0.05

1
2

此处的图片名为mymap。保存路径在HOME}/lc/mymap
在这里插入图片描述
注意:3)与4)中设置的地图保存路径要完全对应起来
8、雷达相关知识点的扩充

启动激光雷达节点

rosrun rplidar_ros rplidarNode

1

查看当前节点信息

rostopic list

1

查看更多关于激光雷达发布的信息

rostopic echo /scan

1

9、常见错误

运行中出现过串口号无法识别的问题,发现重新换根数据线后就好了
10 基于真实机器人用catrtographer建图——失败

(1)机器人端

sdas@sdas-Default-string:~/lc$ roslaunch test navigation_cartographer_map.launch

1

(2)pc端——运行cartographer节点

sdas@sdas-Default-string:~/catkin_ws_cartographer$ roslaunch cartographer_ros cartographer_demo_rplidar.launch

1

11 链接参考

RPlidar(一)——雷达试用.
12 RPLIDAR坐标系解析

ROS与RPLIDAR结合使用说明及问题汇总
ROS——RPLIDAR A1 SDK详解
其测量半径为12m
在这里插入图片描述

在这里插入图片描述
rplidar原始数据输出是非固定角度增量的输出形式,rplidar_ros输出是修正式固定角度增量输出的数据格式

rplidar_ros 是360全角度输出的rplidar驱动,如有固定角度需求,请自行添加角度滤波的节点。
(1)基于RPLIDAR将极坐标转换为平面坐标
在这里插入图片描述
基于源码中的sdk订阅后,输出的极坐标下的距离与角度值如下:
在这里插入图片描述
原始数据输出信息为:
在这里插入图片描述
其degree的求取方法为

// 基于for循环去除雷达数据中存在的大量的inf或nan的值,将有效数据打印出来
int scan_count= scan_msg->ranges.size();
for (int i = 0; i < scan_count; i++)
{
if(std::isfinite(scan_msg->ranges[i]) )
{
double range=scan_msg->ranges[i];
double angle=scan_msg->angle_min+scan_msg->angle_increment*i;
ROS_INFO("%d,%f,%f",i,angle,scan_msg->ranges[i]);
continue;
}
}

1
2
3
4
5
6
7
8
9
10
11
12

可是此处不明白的是,rplidar-ros对其内部坐标进行了顺时针180度的旋转,可是-180度,-90度对应的是哪个范围的坐标值呢??????????
后期发现,其内部rplidar_ros已经对其坐标角度进行了相关处理,此时,-180度对应x轴负方向,-90度对应y轴正方向,而x与y轴方向依旧基于RPLIDAR上述中规定的右手坐标系方向即可,此时便可继续基于上述坐标公式计算就行了,计算出的正负值也可以与其完全对应上
在这里插入图片描述
13 实际运用中出现的问题

基于RPLIDAR扫描点的过程中,会发现出现点缺失的情况,通过查阅资料分析是激光雷达强度不够的原因
由于其激光点的能量强度不高,导致当墙面与雷达夹角过大时雷达返回的数据不够好。
在这里插入图片描述


原文链接:https://blog.csdn.net/qq_41545537/article/details/107791897

上一篇:cartographer_common_block_queue


下一篇:raspberry4b install cartographer_ros