sudo apt-get install ros-kinetic-rplidar-ros
打开ROS Wiki网址。下载git源码.
lsusb
~/RPLIDAR$ catkin_make
~/RPLIDAR$ source devel/setup.bash
~/RPLIDAR$ ls /dev/ttyUSB*
~/RPLIDAR$ sudo chmod 777 /dev/ttyUSB0
感觉下图中的串口号与上个命令中写入的串口号应该对应起来——此处有个疑问,一般插入该激光雷达就会显示USB0吗?还是也会显示其他串口号?发现一般默认是USB0.
打开src/rplidar_ros-master/launch/rplidar.launch文件,将 value="/dev/ttyUSB1"/>
中的串口改为与以上命令显示的串口一致即可
roslaunch rplidar_ros view_rplidar.launch
注意事项:
运行rplidar这一launch命令之前,一定要首先配置一下环境变量(source devel/setup.bash),否则容易出现以下错误:
(1)在新终端开启ROS
roscore
(2)运行rplidar ros包 (这是位于在RPLIDAR包的路径下的指令): #开启雷达驱动,其不包含rviz节点
cd lc
source devel/setup.bash
roslaunch rplidar_ros rplidar.launch
(3)开启cartographer节点(在cartographer所在的包目录下),其包含rviz节点
cd catkin_ws_cartographer
source install_isolated/setup.bash
roslaunch cartographer_ros cartographer_demo_rplidar.launch
1)打开雷达驱动所在的文件夹终端,就是进行catkin_make的窗口,设置环境变量,否则后边无法保存
cd catkin_ws_cartographer
source install_isolated/setup.bash
此步非常重要,之前就是由于忘记进行操作此步,以至于一直保存地图不成功
2)完成轨迹, 不接受进一步的数据。
rosservice call /finish_trajectory 0
3)序列化保存其当前状态
rosservice call /write_state "{filename: '${HOME}/lc/20201103map.pbstream'}"
注意:此步是进行地图路径的保存,路径自己设置就好
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
此处的图片名为mymap。保存路径在HOME}/lc/mymap
注意:3)与4)中设置的地图保存路径要完全对应起来
启动激光雷达节点
rosrun rplidar_ros rplidarNode
查看当前节点信息
rostopic list
查看更多关于激光雷达发布的信息
rostopic echo /scan
运行中出现过串口号无法识别的问题,发现重新换根数据线后就好了
(1)机器人端
sdas@sdas-Default-string:~/lc$ roslaunch test navigation_cartographer_map.launch
(2)pc端——运行cartographer节点
sdas@sdas-Default-string:~/catkin_ws_cartographer$ roslaunch cartographer_ros cartographer_demo_rplidar.launch
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;
}
}
可是此处不明白的是,rplidar-ros对其内部坐标进行了顺时针180度的旋转,可是-180度,-90度对应的是哪个范围的坐标值呢??????????
后期发现,其内部rplidar_ros已经对其坐标角度进行了相关处理,此时,-180度对应x轴负方向,-90度对应y轴正方向,而x与y轴方向依旧基于RPLIDAR上述中规定的右手坐标系方向即可,此时便可继续基于上述坐标公式计算就行了,计算出的正负值也可以与其完全对应上
基于RPLIDAR扫描点的过程中,会发现出现点缺失的情况,通过查阅资料分析是激光雷达强度不够的原因
由于其激光点的能量强度不高,导致当墙面与雷达夹角过大时雷达返回的数据不够好。