扣扣技术交流群:460189483

1. 简介

  RPLIDAR A2的运行教程在这里不做重点讲解,官方教程已经介绍的很详细,在这里跟大家解释下例程中是怎么在RVIZ中事实显示图像的。

  运行下面这句话时,可以看到rviz自动打开,并且在图像中显示出了激光雷达扫描到的数据信息,那么激光雷达的数据是如何传递到rviz中的那?

roslaunch rplidar_ros view_rplidar.launch

2. view_rplidar.launch分析

打开view_rplidar.launch

<launch><include file="$(find rplidar_ros)/launch/rplidar.launch" /><node name="rviz" pkg="rviz" type="rviz" args="-d $(find rplidar_ros)/rviz/rplidar.rviz" />
</launch>

我们发现在其中调用了rplidar.launch,使用include命令是为了减少冗余代码的数量,简化代码。rplidar.launch如下

<launch><node name="rplidarNode"          pkg="rplidar_ros"  type="rplidarNode" output="screen"><param name="serial_port"         type="string" value="/dev/ttyUSB0"/>  <param name="serial_baudrate"     type="int"    value="115200"/><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>

  在这个launch文件中可以清楚的看到,在其中定义了串口的名字"/dev/ttyUSB0",波特率"115200"等等一系列的串口配置信息,正是由于这些配置信息,才可以在rplidarNode节点中获取激光雷达发送过来的数据信息。

3.分析如何发送数据到rviz

  看到这里可能很多朋友会比较疑惑是如何发送数据到rviz平台的,在此我们打开rplidar_ros/src/node.cpp文件,在193行左右可以发现这个消息发布者的节点名字和类型,类型和我们以往使用的不太一样。

ros::Publisher scan_pub = nh.advertise<sensor_msgs::LaserScan>("scan", 1000);

没错,这个<sensor_msgs::LaserScan>类型就是rviz中LaserScan功能模块定义的标准信息格式

我们可以在命令行中输入下列命令来查看LaserScan的数据格式

rosmsg show sensor_msgs/LaserScan
  • 1

运行结果如图所示:

这个时候我们再来对比rplidar_ros/src/node.cpp文件中的void publish_scan()函数

void publish_scan(ros::Publisher *pub,rplidar_response_measurement_node_t *nodes,size_t node_count, ros::Time start,double scan_time, bool inverted,float angle_min, float angle_max,std::string frame_id)
{static int scan_count = 0;sensor_msgs::LaserScan scan_msg;scan_msg.header.stamp = start;scan_msg.header.frame_id = frame_id;scan_count++;bool reversed = (angle_max > angle_min);if ( reversed ) {scan_msg.angle_min =  M_PI - angle_max;scan_msg.angle_max =  M_PI - angle_min;} else {scan_msg.angle_min =  M_PI - angle_min;scan_msg.angle_max =  M_PI - angle_max;}scan_msg.angle_increment =(scan_msg.angle_max - scan_msg.angle_min) / (double)(node_count-1);scan_msg.scan_time = scan_time;scan_msg.time_increment = scan_time / (double)(node_count-1);scan_msg.range_min = 0.15;scan_msg.range_max = 8.0;scan_msg.intensities.resize(node_count);scan_msg.ranges.resize(node_count);bool reverse_data = (!inverted && reversed) || (inverted && !reversed);if (!reverse_data) {for (size_t i = 0; i < node_count; i++) {float read_value = (float) nodes[i].distance_q2/4.0f/1000;if (read_value == 0.0)scan_msg.ranges[i] = std::numeric_limits<float>::infinity();elsescan_msg.ranges[i] = read_value;scan_msg.intensities[i] = (float) (nodes[i].sync_quality >> 2);}} else {for (size_t i = 0; i < node_count; i++) {float read_value = (float)nodes[i].distance_q2/4.0f/1000;if (read_value == 0.0)scan_msg.ranges[node_count-1-i] = std::numeric_limits<float>::infinity();elsescan_msg.ranges[node_count-1-i] = read_value;scan_msg.intensities[node_count-1-i] = (float) (nodes[i].sync_quality >> 2);}}pub->publish(scan_msg);
}

在函数中可以清楚的看到有对下列变量进行赋值操作

std_msgs/Header headeruint32 seqtime stampstring frame_id
float32 angle_min
float32 angle_max
float32 angle_increment
float32 time_increment
float32 scan_time
float32 range_min
float32 range_max
float32[] ranges
float32[] intensities

因此可以断定正是通过对这些数据赋值,然后再讲消息发布出去,rviz中的LaserScan便会自动订阅这些消息,从而将激光雷达中的数据显示出来,如果还是有疑问的话大家可以在运行roslaunch rplidar_ros view_rplidar.launch的同时,在行的命令行中输入下列命令查看ROS话题发发布订阅情况:

rosrun rqt_graph rqt_graph

在这个图中可以清楚的看到程序只发布了一个topic——”/scan”,同时在我们的rviz中我们也可以看到在”topic”选项后面对应的是”/scan”,即我们的分析完全正确。

RPLIDAR A2 rviz显示雷达数据教程相关推荐

  1. 使用数传电台无线远程传输雷达数据的参考方案

    本文介绍使用数传电台无线远程传输雷达数据的参考方案. 方案概述 本方案为使用数传电台方式无线远程传输北醒TF系列雷达数据的参考方案.本方案中所使用的除TF激光雷达外的设备和工具并非北醒官方产品,不提供 ...

  2. Rviz显示不出数据了之一文搞懂Qos

    ROS2的通信中间件换成了DDS.这让我们可以精准地控制节点间的通信质量.通信效率也迎来了一次大的提升. 但是- 但是- 一个不小心,看到了类似这样的报错信息: [WARN] [1644578813. ...

  3. ros rviz显示rosbag中的图像和imu数据

    一.rosbag相关的指令 1. rostopic list //列举出系统中正在发布的ros 话题 2. rosbag record -a //录制系统中所有正在发布的ros 话题 3. rosba ...

  4. RVIZ可视化rosbag雷达数据

    ROS播包并RVIZ可视化Lidar数据 准备 启动roscore 启动rviz 配置RVIZ 可视化Lidar数据 准备 利用rosbag录制好的Lidar数据包 进入该目录,查看该数据包的信息.键 ...

  5. ROS学习心得——正确运行RPLIDAR A2激光雷达(让它转起来吧!)

    ROS学习心得--正确运行RPLIDAR A2激光雷达 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: 产品相关数据与官方文档:http:// ...

  6. 思岚RPLIDAR A2激光雷达使用及问题解决

    思岚RPLIDAR A2激光雷达使用及问题解决1.下载源码第一步,下载雷达源代码,第一种方法是输入下列网址:http://slamtec.com/rplidar/a2/download,界面有雷达的说 ...

  7. Rplidar A2 激光雷达使用hector_slam进行建图

    手头上有一个Rplidar A2 激光雷达,通过其进行slam建图,如下. 环境: 1.Rplidar A2 激光雷达: 2.笔记本电脑: 3.Ubuntu 16.04; 4.ROS Kinetic. ...

  8. 第一次在我的P200上自己用rviz展现激光雷达数据

    第一次在我的P200上自己用rviz展现激光雷达数据 A1  A2激光雷达可以用下面这个命令启动 roslaunch rplidar_ros rplidar.launch S1激光雷达可以用下面这个命 ...

  9. ROS学习心得——定位-SLAM-hector_mapping(RPLIDAR A2)

    ROS学习心得--定位-SLAM-hector_mapping FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: 产品相关数据与官方文档:htt ...

最新文章

  1. python入门经典例题-Python入门练习题(适合Python初学者做的练习题)
  2. 线程队列 线程池 协程
  3. OpenCASCADE:Modeling Data之几何实用程序
  4. mysql中使用sqldriverconnect()报错的解决
  5. Vue打包发布项目---vue工作笔记0020
  6. 使用计算机过程存在的问题,中小学教师计算机应用过程中存在的问题及解决方法...
  7. 【C#】带等待窗体的BackgroundWorker
  8. [转载] python dict 查找原理
  9. ubuntu 安装php 5.4.9 编译安装
  10. VNC远程控制软件,五款用了都说好的VNC远程控制软件
  11. Statement cancelled due to timeout or client request 异常的修复【已解决】
  12. Ezchip Tilera Tile-Mx100: Der 100-ARM-Netzwerkprozessor
  13. 服务器返回json中显示403,接口返回了403错误如何解决?
  14. POJ 图论---1_Uriel's Corner Uriel's Coding Learning Cubing Zone
  15. excel 常见的六个排序方法,你必须要学会
  16. 程序人生--2010年(60)
  17. Xavier NX实现硬解码H264H265
  18. padding oracle attack相关之padding oracle attack
  19. (imx6)添加RT3070 STA AP 支持
  20. 【ffmpeg】批量提取视频中音频

热门文章

  1. App质量把控:简述质量问题现状及解决方案
  2. 偏向锁、轻量级锁、重量级锁的区别和解析
  3. Android 网络请求库Retrofit简单使用
  4. Codevs 2382 挂缀
  5. win10+python3.6+百度AI——实现人脸识别
  6. XWiKi 部分汉化
  7. OSChina 周六乱弹 ——对!今天全是妹子!
  8. 数据库关系模型不合理会带来什么问题?
  9. Java习题练习:和尚挑水
  10. JDK、JRE、JVM、SDK