rplidar的安装与使用

2023-05-16

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 

2、RPLIDAR驱动下载

打开ROS Wiki网址。下载git源码.

3、将RPLIDAR连接好后,检测串口是否连接成功

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

lsusb

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

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

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

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

在这里插入图片描述
感觉下图中的串口号与上个命令中写入的串口号应该对应起来——此处有个疑问,一般插入该激光雷达就会显示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>

6、查看RPLIDAR显示的图形

roslaunch rplidar_ros view_rplidar.launch

在这里插入图片描述
注意事项:
运行rplidar这一launch命令之前,一定要首先配置一下环境变量(source devel/setup.bash),否则容易出现以下错误:
在这里插入图片描述

6、进行雷达实时数据的采集,并基于cartographer进行地图的保存

(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

7、地图保存

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'}"

在这里插入图片描述
注意此处的${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

此处的图片名为mymap。保存路径在HOME}/lc/mymap
在这里插入图片描述
注意:3)与4)中设置的地图保存路径要完全对应起来

8、雷达相关知识点的扩充

启动激光雷达节点

rosrun rplidar_ros rplidarNode

查看当前节点信息

rostopic list

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

rostopic echo /scan

9、常见错误

运行中出现过串口号无法识别的问题,发现重新换根数据线后就好了

10 基于真实机器人用catrtographer建图——失败

(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

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;
           }
       }

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

13 实际运用中出现的问题

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rplidar的安装与使用 的相关文章

  • 【实例记录】在ubuntu上运行python实现与单片机多线程串口通信

    文章目录 工具步骤 工具 工具 xff1a 自己电脑双系统的ubuntu18 04 单片机esp8266 一个usb转ttl模块 xff0c ubuntu上已经下载了python的3 6和pip xff0c 还需要pip install s
  • 【过程记录 】windows和ubuntu两台电脑局域网进行socket通信收发数据和传输文件

    实验图片和前期准备 xff1a ubuntu作为服务端 xff0c windows客户端传输数据和文件 xff1a windows作为服务端 xff0c ubuntu作为客户端 xff1a 实验图片和前期准备 xff1a 服务端发送和接受i
  • 过程记录 yolov3目标检测输出目标坐标和原图物体像素坐标比较

    设备 xff1a jetsonnano B01 一个usb广角摄像头 语言为python 库为opencv 框架pytorch 大家都知道yolov3的坐标变换过程比较复杂 xff0c 大概要经过图片缩放 xff0c 对数空间变换等等 xf
  • Rt-Thread学习笔记-----信号量(五)

    线程间同步 1 什么是线程间同步 xff1f 同步是指按预定的先后次序进行运行 xff0c 线程同步是指多个线程通过特定的机制来控制线程之间的执行顺序 xff0c 也可以说是在线程之间通过同步建立起执行顺序的关系 xff0c 如果没有同步
  • C++类和对象——空指针访问成员函数

    C 43 43 中空指针也是可以访问成员函数的 xff0c 但是也要注意有没有用到this指针 xff1b 如果用到this指针 xff0c 需要加以判断保证代码的健壮性 span class token macro property sp
  • nodejs实现简单的自动化部署

    如题 xff0c nodejs通过码云提供的web hooks实现简单的服务器自动部署 大致流程 xff1a 1 通过码云提供的web hooks xff0c 创建一个request通过后的回调接口 xff08 说白了就是配置一个码云审批通
  • 2022届春招实习面经(CV岗)——offer经

    已拿offer公司 xff1a 腾讯 ponyai vivo研究院 华为 字节 面了一面就没继续面了 xff1a 海康威视 虎牙 京东 本科211 xff0c 硕士985 二区在投论文 43 顶会下的top5比赛 43 小厂三个月实习经历
  • LeetCode刷题笔记 --- python

    目录 一 python交换两个变量的值1 1 使用tuple1 2 使用临时变量temp 二 python中 和 区别三 python列表的使用3 1 列表的基本操作3 2 列表实现栈操作3 3 列表实现排序3 4 列表的算法效率 四 py
  • 无人机高度控制

    这个第一次看就完全没看懂 xff0c 现在再看还是没看懂orz xff0c 而且定高还是重要的功能和考点 xff0c 详细分析一下程序吧 首先是表示高度信息的结构体 xff1a 数据结构声明 typedef struct float Z S
  • ssh_exchange_identification: Connection closed by remote host

    ssh exchange identification Connection closed by remote host 导致这个问题的原因有很多 xff0c 笔者是因为在ssh中设置了代理 xff0c 这个可以作为阅读者排查问题的一个点
  • 匿名无人机飞控代码整理5

    先跳过高度部分 xff0c 这里看location部分 可以看出来这部分也是直接与我们的循迹 追踪任务相关的 所以这部分的掌握应该很重要把 前面有很多暂时不需要看 xff0c flyctrl那个巨长 所以就先看速度环控制部分了 if swi
  • 匿名无人机飞控代码整理

    看了半天 xff0c 各部分都看得都很零散 xff0c 写的也很简略 xff0c 但目前为止还是无法对系统各部分做具体一点的整合 xff0c 今天试试看 1 先从主函数起 xff0c 进入主轮询函数 Main Task 这个主函数的调用就在
  • 一直没看的无人机定高

    除了定高的部分 xff0c 其他没看的还有一些控制函数 定高的原理的话 xff0c 也是利用了两级pid xff0c 按照原本的理解 xff0c 从外环开始看的话 xff0c 反馈高度比较容易获得 xff0c 就是激光测距得到的高度 期望高
  • 匿名无人机代码FlightCtrl简单分析

    这个flightCtrl文件 xff0c 是真的很长又很难 各种标志位啊 xff0c 判断啊 xff0c 开关啊 xff0c 逻辑判断啊什么的 xff0c 趁通宵把代码梳理一遍 这个文件里的函数虽不算最多 xff0c 但引用的头文件相当多
  • 简历—项目经验范例

    xff08 看着比较专业的一份项目经验样板 xff09 原文链接https mp weixin qq com s rxGTTVKryvYoyst jsayLw 项目一 米乐淘网上商城 项目名称 xff1a 米乐淘网上商城 开发环境 xff1
  • 家庭网络和路由器

    1 什么是家庭网络 xff1f 一个典型的家庭网络由多个设备组成 xff0c 且几乎所有的家庭网络都有一个路由器作为它们的中心设备 路由器连接到 Internet 连接 xff0c 然后与本地网络上的一台或多台计算机共享该连接 家庭网络通常
  • ROS动态调整PID

    64 动态调整PID ROS提供了一个专门用于动态调整参数的功能包dynamic reconfigure 它实现了动态配置参数的机制 我们先来创建一个功能包 添加相应的一些依赖 cd catkin ws src catkin create
  • CubeMX配置串口的程序烧入板子不跑的解决方法

    对于cubeMX配置串口 xff0c keil5编译通过的 xff0c 自己确定无问题的程序 xff0c 以ISP烧入 xff0c 烧入板子后无法运行的情况 xff0c 我暂时的解决策略是按住reset键点击 开始编程 xff0c 点击后松
  • realsense D455+ROS+OpenCV4.5完成目标距离检测

    ROS OpenCV 1 环境配置 1 1 realsense SDK2 0安装 通过官网找到最新的SDK包并下载 Intel RealSense SDK 2 0 解压安装包 xff08 librealsense 2 47 0 tar gz
  • 什么是 PID 控制器:工作原理及其应用

    什么是 PID 控制器 xff1a 工作原理及其应用 什么是PID控制器 xff1f 历史PID控制器框图PID控制器的工作P 控制器I 控制器D 控制器 PID控制器的类型开 关控制比例控制标准型PID控制器实时 PID 控制器 调优方法

随机推荐