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

相关推荐
何伯特3 天前
ROS与Conda的兼容性问题深度解析与解决方案
conda·ros
hhzz7 天前
利用Terraform格式模板文件创建和部署基本网络资源
阿里云·云原生·ros·terraform·资源编排
github5actions8 天前
ROS开发实战:如何用rviz文件保存和加载你的SLAM可视化配置(附避坑指南)
ros·slam·rviz·机器人开发
REDcker8 天前
DDS 协议详解
机器人·ros·ros2·dds
铁头七娃11 天前
Solidworks 2024 根据机器人装配体,生成urdf文件
机器人·ros·solidworks
三克的油12 天前
ros-day5
ros
元让_vincent16 天前
DailyCoding C++ CMake | CMake 踩坑记:解决 ROS 项目中的“循环引用”与库链接依赖问题
c++·机器人·ros·动态库·静态库·cmake·循环引用
元让_vincent16 天前
DaliyCoding C++ ROS | C++ 避坑指南:ROS 回调函数中的对象生命周期陷阱 (Use-After-Free)
开发语言·c++·机器人·ros·ros2
liuniu081817 天前
参数--parameters
ros
liuniu081817 天前
服务--services
ros