zoukankan      html  css  js  c++  java
  • 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

    作者:柒月
    Q群 :2122210(嵌入式/机器学习)
  • 相关阅读:
    作业1-1 打印华氏温度与摄氏温度对照表
    python配置yaml
    python读写Excel方法(xlwt和xlrd)
    python发送邮件(smtplib)
    python之os模块(os.path)
    python简单面试题(2)
    python---Logging日志模块
    python---python装饰器
    如何从零开始学习自动化
    软件测试不得不知的基础知识
  • 原文地址:https://www.cnblogs.com/Ph-one/p/14614170.html
Copyright © 2011-2022 走看看