RPLIDAR A2 rviz显示雷达数据教程
扣扣技术交流群: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显示雷达数据教程相关推荐
- 使用数传电台无线远程传输雷达数据的参考方案
本文介绍使用数传电台无线远程传输雷达数据的参考方案. 方案概述 本方案为使用数传电台方式无线远程传输北醒TF系列雷达数据的参考方案.本方案中所使用的除TF激光雷达外的设备和工具并非北醒官方产品,不提供 ...
- Rviz显示不出数据了之一文搞懂Qos
ROS2的通信中间件换成了DDS.这让我们可以精准地控制节点间的通信质量.通信效率也迎来了一次大的提升. 但是- 但是- 一个不小心,看到了类似这样的报错信息: [WARN] [1644578813. ...
- ros rviz显示rosbag中的图像和imu数据
一.rosbag相关的指令 1. rostopic list //列举出系统中正在发布的ros 话题 2. rosbag record -a //录制系统中所有正在发布的ros 话题 3. rosba ...
- RVIZ可视化rosbag雷达数据
ROS播包并RVIZ可视化Lidar数据 准备 启动roscore 启动rviz 配置RVIZ 可视化Lidar数据 准备 利用rosbag录制好的Lidar数据包 进入该目录,查看该数据包的信息.键 ...
- ROS学习心得——正确运行RPLIDAR A2激光雷达(让它转起来吧!)
ROS学习心得--正确运行RPLIDAR A2激光雷达 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: 产品相关数据与官方文档:http:// ...
- 思岚RPLIDAR A2激光雷达使用及问题解决
思岚RPLIDAR A2激光雷达使用及问题解决1.下载源码第一步,下载雷达源代码,第一种方法是输入下列网址:http://slamtec.com/rplidar/a2/download,界面有雷达的说 ...
- Rplidar A2 激光雷达使用hector_slam进行建图
手头上有一个Rplidar A2 激光雷达,通过其进行slam建图,如下. 环境: 1.Rplidar A2 激光雷达: 2.笔记本电脑: 3.Ubuntu 16.04; 4.ROS Kinetic. ...
- 第一次在我的P200上自己用rviz展现激光雷达数据
第一次在我的P200上自己用rviz展现激光雷达数据 A1 A2激光雷达可以用下面这个命令启动 roslaunch rplidar_ros rplidar.launch S1激光雷达可以用下面这个命 ...
- ROS学习心得——定位-SLAM-hector_mapping(RPLIDAR A2)
ROS学习心得--定位-SLAM-hector_mapping FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: 产品相关数据与官方文档:htt ...
最新文章
- python入门经典例题-Python入门练习题(适合Python初学者做的练习题)
- 线程队列 线程池 协程
- OpenCASCADE:Modeling Data之几何实用程序
- mysql中使用sqldriverconnect()报错的解决
- Vue打包发布项目---vue工作笔记0020
- 使用计算机过程存在的问题,中小学教师计算机应用过程中存在的问题及解决方法...
- 【C#】带等待窗体的BackgroundWorker
- [转载] python dict 查找原理
- ubuntu 安装php 5.4.9 编译安装
- VNC远程控制软件,五款用了都说好的VNC远程控制软件
- Statement cancelled due to timeout or client request 异常的修复【已解决】
- Ezchip Tilera Tile-Mx100: Der 100-ARM-Netzwerkprozessor
- 服务器返回json中显示403,接口返回了403错误如何解决?
- POJ 图论---1_Uriel's Corner Uriel's Coding Learning Cubing Zone
- excel 常见的六个排序方法,你必须要学会
- 程序人生--2010年(60)
- Xavier NX实现硬解码H264H265
- padding oracle attack相关之padding oracle attack
- (imx6)添加RT3070 STA AP 支持
- 【ffmpeg】批量提取视频中音频