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 文件来调用的激光雷达模型,会传入激光雷达的位置参数,将其设置的高一些即可:

相关推荐
Zhichao_971 天前
【ROS1】09-ROS通信机制——参数服务器
ros
想要成为计算机高手2 天前
10. isaacsim4.2教程-RTX Lidar 传感器
数码相机·机器人·ros·仿真·具身智能·vla·isaacsim
城北有个混子2 天前
【机器人】—— 3. ROS 架构 & 文件系统
机器人·ros
Tipriest_2 天前
激光雷达的单播和广播模式介绍
激光雷达·广播·单播
Mr.Winter`5 天前
轨迹优化 | 基于边界中间值问题(BIVP)的路径平滑求解器(附C++/Python仿真)
人工智能·机器人·自动驾驶·ros·路径规划·数值优化·轨迹优化
Hi202402176 天前
基于ROS2进行相机标定,并通过测试相机到棋盘格之间的距离进行验证
数码相机·docker·ros·相机·机器视觉·ros2·单目测距
想要成为计算机高手7 天前
9. isaacsim4.2教程-ROS加相机/CLOCK
人工智能·机器人·ros·仿真·具身智能·isaacsim
hero_heart9 天前
2D和3D激光slam的点云去运动畸变
激光雷达
hero_heart15 天前
ros topic和service的使用
ros
Dirschs16 天前
【Ubuntu22.04安装ROS Noetic】
linux·ubuntu·ros