ros+px4仿真中的二维激光雷达消息

数据结构

ros 提供了一个特殊的消息类型 LaserScan来存储激光信息。

LaserScan 消息是 ros 激光扫描数据的软件层表示。消息的规范定义如下:

复制代码
#
# 测量的激光扫描角度,逆时针为正
# 设备坐标帧的0度面向前(沿着X轴方向)
#
Header header
float32 angle_min        # scan的开始角度 [弧度]
float32 angle_max        # scan的结束角度 [弧度]
float32 angle_increment  # 测量的角度间的距离 [弧度]
float32 time_increment   # 测量间的时间 [秒]
float32 scan_time        # 扫描间的时间 [秒]
float32 range_min        # 最小的测量距离 [米]
float32 range_max        # 最大的测量距离 [米]
float32[] ranges         # 测量的距离数据 [米] (注意: 值 < range_min 或 > range_max 应当被丢弃)
float32[] intensities    # 强度数据 [device-specific units]

这些数据也都对应了 launch 文件中的参数。

在上面的数据结构中,range_min 和 range_max 表示激光雷达的测量范围,因为激光雷达在太近和太远的地方都不准确。

ranges 则是一个数组,里面存放的就是距离数值。

加入 range_min 为 -pi,range_max 为 pi 则扫描就是从 -180 度开始,到 +180 度结束 正角度代表顺时针方形,负角度代表逆时针角度

launch 文件

结合 2D 避障中的 launch 文件,分析其调用顺序,在启动文件中,调用到 2Dlidar_px4.launch 文件:

之后找到此文件可以看到其调用了激光雷达的 sdf 格式文件:

之后可以找到此 sdf 文件,可以看到与 ros 中的数据类型对应:

gazebo可视化激光雷达

在vfh加载模型的launch文件 2Dlidar_px4_vfh.launch 文件中,调用的时 px4 工程中的模型文件:

模型参数 "iris" 以及 "iris_rplidar" 都是可以打开激光雷达的蓝色光束的,但如果打开gazebo时没有蓝色光束,很有可能是加载world文件时,world文件中有包含飞机模型的配置,将其屏蔽了:

将此world修改为空世界文件 empty,不包含任何飞机信息,则可以正常显示:

后续再修改world文件即可

仿真中经常有0.1m的小雷达值

这是由于激光雷达测到了飞机的桨叶,因此需要将激光雷达的高度调高,在工程中,调用的是 iris_2Dlidar_vfh.sdf 文件来调用的激光雷达模型,会传入激光雷达的位置参数,将其设置的高一些即可:

相关推荐
kobesdu1 天前
ORB-SLAM3:从特征提取到稠密点云建图
机器人·ros·orbslam
kobesdu2 天前
FAST-LIO2 + 蓝海M300激光雷达:从建图到实时栅格图的完整流程
算法·机器人·ros·slam·fast lio
bryant_meng3 天前
【SLAM】Map Folding
计算机视觉·map·slam·激光雷达·回环检测
kobesdu3 天前
综合强度信息的激光雷达去拖尾算法解析和源码实现
算法·机器人·ros·slam·激光雷达
ZTL-NPU3 天前
Jetbrains开发ros
ide·python·pycharm·编辑器·ros·clion
kobesdu5 天前
ROS Flutter GUI App:跨平台机器人可视化控制界面使用记录
flutter·机器人·ros
kobesdu5 天前
LeRobot “机器人万能接口”:现状与前沿进展
机器人·ros
kobesdu6 天前
laser_line_extraction线段提取开源功能包解读和使用例程
人工智能·算法·机器人·ros
kyle~6 天前
C++---Boost库(准标准库)
开发语言·c++·机器人·ros·boost
康谋自动驾驶11 天前
从数据采集到回放验证:ADTF 适配 ROS2 的 ADAS 测试实践
汽车·ros·数据采集·测试