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

相关推荐
滴啦嘟啦哒1 天前
【机械臂】【LLM】一、接入千问LLM实现自然语言指令解析
深度学习·ros·vla
wzyannn3 天前
Ubuntu24.04下ROS2和MoveIt2控制六轴机械臂(持续更新)
ros·机械臂·ros2
岱宗夫up5 天前
基于ROS的视觉导航系统实战:黑线循迹+激光笔跟随双模态实现(冰达机器人Nano改造)
linux·python·机器人·ros
lq mm8 天前
3d-navi 3D导航模拟仿真项目复现
ros
涅小槃9 天前
Carla仿真学习笔记(版本0.9.16)
开发语言·python·ros·carla
佚明zj11 天前
深入浅出 ROS2 QoS:如何为你的机器人选择通信策略
ros
Mr.Winter`12 天前
轨迹优化 | 微分动态规划DDP与迭代线性二次型调节器iLQR理论推导
人工智能·算法·机器人·自动驾驶·动态规划·ros·具身智能
zzzhpzhpzzz15 天前
从SolidWorks中导出机器人URDF模型
机器人·ros·urdf·solidworks
提伯斯64616 天前
Fast-LIO到MAVROS视觉定位转换
linux·ros·无人机·mid360·fasltlio
提伯斯64617 天前
解决 PX4 + ROS px4ctrl 「No odom!」自动起飞失败问题
linux·ros·px4·fastlio·mid360·egoplanner