第一层:硬件物理通信
激光雷达到机载电脑
- 物理连接:网线(以太网)
- 通信协议:UDP协议,IP地址通常是192.168.1.X
- 数据包格式:Livox自定义的二进制数据包,包含点的坐标(x,y,z)和反射强度
- 传输频率:10Hz,每秒发送10帧点云数据
- 数据量:每帧约240KB,每秒约2.4MB
具体过程:激光雷达扫描环境后,将测量的距离、角度转换为三维坐标,打包成UDP数据包,通过网线发送给机载电脑的指定端口(通常是65000端口)。
PX4飞控内部通信
- IMU到主控:SPI总线,时钟频率1-8MHz,数字信号
- GPS到主控:UART串口,波特率115200,3.3V电平
- 气压计/磁力计:I2C总线,时钟频率400kHz
- 数据格式:各传感器有自己的寄存器地址和数据格式
机载电脑到PX4飞控
- 物理连接:USB线或UART串口线
- 通信协议:MAVLink协议
- 波特率:921600或1500000(高速串口)
- 数据包:每个MAVLink消息有固定的头部、消息ID、载荷和校验和
第二层:驱动层协议转换
Livox驱动程序
机载电脑上运行livox_ros_driver,这个驱动做了以下转换:
- 接收:监听UDP端口,解析Livox二进制数据包
- 时间戳同步:给每个点云帧添加ROS时间戳
- 坐标转换:将激光雷达坐标系转换到机体坐标系
- 格式转换:转换为ROS标准的sensor_msgs/PointCloud2消息
- 发布频率:保持10Hz,发布到/livox/lidar话题
MAVROS驱动
机载电脑上的mavros节点负责ROS和PX4之间的通信:
- 双向转换:MAVLink消息 ↔ ROS消息
- 话题映射:
- PX4的IMU数据 → /mavros/imu/data (sensor_msgs/Imu)
- PX4的位置信息 → /mavros/local_position/pose (geometry_msgs/PoseStamped)
- 控制指令 → /mavros/setpoint_position/local → PX4
数据流向
激光雷达UDP → livox_ros_driver → sensor_msgs/PointCloud2 → /livox/lidar话题
PX4传感器 → MAVLink → mavros → sensor_msgs/Imu → /mavros/imu/data话题
第三层:算法处理与融合
FastLIO算法节点
这是在机载电脑上运行的核心算法:
- 订阅话题:
- /livox/lidar (点云数据)
- /mavros/imu/data (IMU数据)
- 数据同步:通过时间戳对齐点云和IMU数据
- 算法处理:
- 点云预处理(去噪、降采样)
- IMU预积分计算
- 点云配准优化
- 卡尔曼滤波状态更新
- 输出:
- nav_msgs/Odometry消息 → /odometry话题
- tf变换(从odom到base_link)
- 更新频率:50Hz
数据格式细节
nav_msgs/Odometry包含:
- header: 时间戳和坐标系ID
- pose: 位置(x,y,z)和姿态(四元数)
- twist: 线速度和角速度
- 协方差矩阵:表示估计的不确定性
第四层:控制指令传递
你的项目中的简化控制
由于没有路径规划,控制流程很直接:
目标设定:
- 用户或程序设定目标点坐标(x_target, y_target, z_target)
- 发布到/mavros/setpoint_position/local话题
- 消息格式:geometry_msgs/PoseStamped
PX4位置控制器:
- 订阅目标位置和当前位置
- 计算位置偏差:error = target - current
- PID控制计算:velocity_cmd = Kperror + Kiintegral + Kd*derivative
- 输出速度指令到姿态控制器
姿态控制器:
- 将速度指令转换为期望的姿态角(倾斜角度)
- 姿态PID控制:计算需要的力矩
- 力矩分配:将总力矩分配到各个电机
电机输出:
- 生成PWM信号(1000-2000微秒脉宽)
- 通过硬件定时器输出到各个电机的ESC
控制频率
- 位置控制器:50Hz
- 姿态控制器:250Hz
- 电机输出:400Hz(PWM频率)
第五层:反馈闭环
状态反馈
传感器采集新状态:
- IMU持续测量新的加速度和角速度(200Hz)
- 激光雷达扫描新的环境点云(10Hz)
状态估计更新:
- FastLIO融合新的传感器数据
- 更新位置和姿态估计
- 发布新的里程计数据
控制器响应:
- PX4接收新的位置信息
- 重新计算与目标的偏差
- 调整控制输出
通信时序
整个系统是并发运行的:
时间线:
0ms: 激光雷达发送点云帧
5ms: IMU数据更新(200Hz中的一次)
10ms: IMU数据更新
15ms: IMU数据更新
20ms: FastLIO处理完成,发布新位姿
25ms: PX4位置控制器更新(50Hz中的一次)
...
100ms: 下一帧激光雷达数据到达
关键通信参数总结
数据带宽:
- 激光雷达:2.4MB/s
- MAVLink:约10KB/s
- ROS话题:总计约3MB/s
延迟特性:
- 传感器到估计:20-40ms
- 控制指令到执行:10-20ms
- 总体闭环延迟:50-80ms
可靠性机制:
- MAVLink有消息确认和重传
- ROS使用TCP保证可靠传输
- 时间戳同步确保数据时序正确
这就是整个系统的通信流程,每一步都有明确的协议、格式和时序要求,最终形成一个实时的闭环控制系统。