Livox-Mid-360 固态激光雷达ROS格式数据分析

文章介绍了Livox-Mid-360如何通过livox_ros_driver2将原始雷达数据转化为ROS格式,包括点云帧的概念、发布频率、扫描频率以及livox_ros_driver2包中的关键配置。还详细解读了PointCloud2数据结构和实际数据分析部分。

前言:

Livox-Mid-360 官方采用livox_ros_driver2ROS功能包发布ROS格式的数据,livox_ros_driver2可以把Livox原始雷达数据转化成ROS格式并以话题的形式发布出去。

下面列举一些雷达的基本概念:

  • 点云帧:雷达驱动每次向外发送的一组雷达数据集合称为一帧雷达数据。如果帧率是10HZ,那么每帧点云数据是100ms内雷达扫描的点云集合。每发布一次toptic就是一帧。注意:一帧激光点云数据并不一定是雷达旋转一周所扫描的点云数据。
  • 点云帧发布频率:1s内雷达发送的帧数,比如10HZ表示1s内雷达发送10帧的点云数据,即每100ms发送一帧点云数据。
  • 扫描频率:雷达的扫描频率一般是针对机械式旋转激光雷达而言的,指1s内雷达旋转的圈数。固态激光雷达的扫描方式和旋转式激光雷达不同,不同产品、厂商有不同的方式。

1.livox_ros_driver2

livox_ros_driver2包中用于处理livox-mid-360的接口有rviz_MID360.launch文件,负责连接到 MID360 LiDAR 设备、发布 pointcloud2 格式数据、自动加载 rviz。

Livox ros 2内部主要参数配置说明:

  • publish_freq:设置点云发布,浮点数据类型的频率,推荐值为5.0、10.0、20.0、50.0等。最大发布频率为 100.0 Hz。
  • multi_topic:如果 LiDAR 设备有独立的主题来发布点云数据 0 -- 所有 LiDAR 设备都使用相同的主题发布点云数据 1 -- 每个 LiDAR 设备都有自己的主题来发布点云数据
  • xfer_format:设置点云格式,0 -- Livox pointcloud2(PointXYZRTLT)点云格式, 1 -- Livox 自定义点云格式, 2 -- PCL 库中的标准点云 2 (pcl :: PointXYZI) 点云格式。

2.点云数据:

查看livox_ros_driver2发布出的话题,/livox/lidar 的消息类型为:sensor_msgs/PointCloud2,sensor_msgs/PointCloud2消息的内容为下(注意:这是一帧点云的消息类型,不是每个点云的信息):


其中每个参数的意义参考以下文章:

sensor_msgs/PointCloud2雷达数据信息-优快云博客

2.1 PointCloud2数据结构

sensor_msgs/PointCloud2 Message
File: sensor_msgs/PointCloud2.msg
Raw Message Definition
# 该消息包含一个n维点的集合,它可能包含额外的信息,如法线、强度等。点数据以二进制blob的形式存储,其布局由“fields”数组的内容描述。

# 点云数据可以组织为2d(类似图像)或1d(无序)。以二维图像组织的点云可以由立体或飞行时间等相机深度传感器产生。

# 传感器数据采集时间,坐标坐标系ID (3d点)。
Header header
	uint32 seq
	time stamp			# topic发布的系统时间 unit:秒
	string frame_id		# topic发布的系统时间 unit:纳秒

# 点云的二维结构。如果云是无序的,高度为1,宽度是点云的长度(个数)。
uint32 height            #也就是线数,固态激光雷达点云不分线数,所以是1
uint32 width

# 描述通道及其在二进制数据块中的布局。
PointField[] fields				# 每个点的数据类型,不同枚举值对应不同类型

bool    is_bigendian			# 字节的排列顺序
uint32  point_step				# 单点的数据字节步长
uint32  row_step				# 一行数据的字节步长
uint8[] data					# 存储点云的数组,总长度为row_step*height

bool is_dense					# 如果没有非法数据点为真

2.2 fields数据结构

sensor_msgs/PointField Message
File: sensor_msgs/PointField.msg
Raw Message Definition
# 该消息以PointCloud2消息格式保存一个 点 条目的描述。
PointCloud2 message format.
uint8 INT8    = 1
uint8 UINT8   = 2
uint8 INT16   = 3
uint8 UINT16  = 4
uint8 INT32   = 5
uint8 UINT32  = 6
uint8 FLOAT32 = 7
uint8 FLOAT64 = 8

string name			# 名
uint32 offset		# 从点结构开始的偏移量
uint8  datatype		# 枚举数据类型
uint32 count		# 有多少个元素

2.3 实际数据分析

header: 					// 点云的头信息
  seq: 4873
  stamp: 					// 时间戳
    secs: 595
    nsecs: 698295140
  frame_id: "livox_frame"
height: 1					// 如果cloud 是无序的 height 是 1
width: 9984					// 点云的长度(点云中点的个数)
fields: 					// 该消息以PointCloud2消息格式保存一个 点 条目的描述。
  - 
    name: "x"				// “x”坐标信息
    offset: 0				// 从点结构开始的偏移量
    datatype: 7				// 枚举数据类型		FLOAT32 
    count: 1				// 域中有多少个元素
  - 
    name: "y"				// “y”坐标信息
    offset: 4
    datatype: 7				// FLOAT32  占4个字节
    count: 1
  - 
    name: "z"				// “z”坐标信息
    offset: 8
    datatype: 7				// FLOAT32  占4个字节
    count: 1
  - 
    name: "intensity"		// 反射强度坐标信息
    offset: 12
    datatype: 7				// FLOAT32  占4个字节
    count: 1
  - 
    name: "tag"				// 回波信息
    offset: 16
    datatype: 2				// UINT8    占1个字节
    count: 1
  - 
    name: "line"
    offset: 17
    datatype: 2				// UINT8    占1个字节
    count: 1
is_bigendian: False			// 数据存储方式,包括大端与小端,具体解释见后文参考链接
point_step: 18				// 一个点占的字节数 
row_step: 179712			// 一行的长度占用的字节数
data:[省略]
is_dense: True				// 没有非法数据点
---

MID360 是一款由 Livox 推出的高性能固态激光雷达,广泛应用于机器人、无人机(如 PX4 无人机)以及自动驾驶系统中,用于环境感知、SLAM(同步定位与地图构建)、避障和导航等任务。在仿真环境中对 MID360 进行设置和测试是开发过程中的重要环节,有助于验证算法性能并优化系统配置。 ### 仿真平台选择 通常使用 **Gazebo** 或 **ROS2(Robot Operating System 2)** 配合其插件机制来模拟 MID360 的数据输出。Livox 提供了专门的 ROS2 插件支持 Gazebo 经典版本,用于仿真 Livox 系列 LiDAR 设备的数据流[^3]。该插件能够生成类似于真实设备的点云数据,便于开发者在虚拟环境中测试感知与导航算法。 ### MID360 仿真设置流程 1. 安装 ROS2 和 Gazebo:确保系统中已安装 ROS2 Foxy/Humble 及其配套工具,并安装 Gazebo Classic。 2. 获取仿真插件:从开源项目 `livox_laser_simulation_RO2` 下载适用于 ROS2 的 Gazebo 插件包。 3. 配置模型描述文件:在 URDF 或 SDF 文件中添加 MID360 的传感器模型,并指定插件参数,包括扫描频率、角度范围、分辨率等。 4. 启动仿真:使用 `roslaunch` 或 `ros2 launch` 命令启动仿真环境,观察点云数据是否正常发布到 `/livox/lidar` 等话题。 5. 验证数据质量:通过 RVIZ 或其他可视化工具查看点云数据,并结合 SLAM 或定位算法进行进一步处理。 例如,在 ROS2 中启动 MID360 仿真的基本命令如下: ```bash ros2 launch livox_laser_simulation_RO2 mid360_simulation.launch.py ``` ### 数据采集与处理 在仿真过程中,可以通过订阅 `/livox/lidar` 主题获取点云数据。以下是一个简单的 Python 示例代码,展示如何接收并打印点云信息: ```python import rclpy from rclpy.node import Node from sensor_msgs.msg import PointCloud2 class MID360Subscriber(Node): def __init__(self): super().__init__('mid360_subscriber') self.subscription = self.create_subscription( PointCloud2, '/livox/lidar', self.listener_callback, 10) self.subscription # prevent unused variable warning def listener_callback(self, msg): self.get_logger().info('Received point cloud data with %d points' % (len(msg.data))) def main(args=None): rclpy.init(args=args) mid360_subscriber = MID360Subscriber() rclpy.spin(mid360_subscriber) rclpy.shutdown() if __name__ == '__main__': main() ``` ### 应用场景 MID360 在仿真中的应用涵盖多个领域: - **无人机自主导航**:结合 FAST-LIO 等紧耦合惯性里程计与激光雷达融合算法实现高精度定位与建图[^1]。 - **自动驾驶感知**:用于障碍物检测、车道线识别及多模态融合感知系统开发[^2]。 - **机器人路径规划**:提供精确的环境地图信息,辅助路径规划与避障策略设计。 ### 注意事项 - 确保仿真环境中的物理引擎(如 ODE、Bullet)与真实硬件的行为一致。 - 调整点云噪声参数以更贴近真实传感器输出,提升算法鲁棒性[^4]。 - 使用 TF 树管理坐标变换,确保传感器数据在全局坐标系中正确表示。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jiqiang_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值