mid360(4): 修改数据格式

📅 2026/7/16 8:31:09
mid360(4): 修改数据格式
mid360的数据格式疑问mid360中/livox/imu数据为angular_velocity: x: 0.011634375900030136 y: 0.0006460240110754967 z: 0.008795350790023804 linear_acceleration: x: -0.00048312381841242313 y: 0.013906502164900303 z: 1.002263069152832为什么Z轴的加速度基本都是接近于1单位是什么这个现象完全正常Mid-360 输出的 Z 轴加速度约等于 1是因为它的加速度数据默认单位是重力加速度g约 9.81 m/s²而不是 ROS 标准中常用的m/s²。当设备静止或匀速运动时Z 轴测量的正是方向向下的重力所以读数接近 1。具体问题cartographer的IMU单位是什么Cartographer 对 IMU 输入的z 轴线性加速度单位要求是m/s²。当设备静止时这个值应该近似等于重力加速度即9.80665 m/s²。这是 ROS 标准sensor_msgs/Imu消息定义的官方单位并且 Cartographer 的源码和实际案例都确认了这一要求源码定义Cartographer 内部定义的ImuData结构体其linear_acceleration字段的注释明确写为“linear acceleration, M / S2”。算法逻辑Cartographer 依赖加速度数据来估计重力方向从而进行“重力对齐”。这个估计要求加速度值符合物理世界的真实单位。如果 IMU 的 z 轴加速度在静止时接近 1单位是g而非 9.8单位是m/s²算法将无法正确估计重力方向导致建图失败。数据来源与单位差异根据 Livox 官方文档和相关技术讨论这个现象主要源于两个因素硬件数据格式Mid-360 内置的 IMU 芯片型号为 ICM-40609-D在输出原始加速度数据时单位就是g。ROS 驱动的处理方式livox_ros_driver2这个驱动包在接收到 IMU 数据后会按协议解析并填充到sensor_msgs/Imu消息中。但 ROS 官方要求该消息中的加速度单位应为m/s²这导致了矛盾。由于驱动在发布前并未将单位从g转换为m/s²所以当你查看/livox/imu话题时就会读到数值为 1 左右的数据而不是 9.81。因此数值接近 1 并不是错误只是原始单位没有经过转换。如何解决编写一个转换节点创建一个 ROS 节点订阅/livox/imu将其加速度数据乘以9.81后再以新的话题名发布出去供下游节点使用。或者直接修改livox_ros_driver2将加速度值统一乘以9.81。修改livox_ros_driver2要修改livox_ros_driver2的 IMU 加速度单位你需要修改lddc.cpp文件找到发布 IMU 数据的部分并在那里将加速度数据乘以重力加速度常数9.80665。这个文件通常位于驱动源码的src/目录下。需要修改目标是livox_ros_driver2的LddcLiDAR Data Distribute Control模块因为这是负责将 SDK 数据转换为 ROS 消息并发布的核心组件。需要修改的文件就是实现Lddc的lddc.cpp文件。在这个文件中你需要找到类似imu_msg.linear_acceleration.x imu_data.acc_x;并将其修改为// 修改前 (单位为 g) imu_msg.linear_acceleration.x imu_data.acc_x; imu_msg.linear_acceleration.y imu_data.acc_y; imu_msg.linear_acceleration.z imu_data.acc_z; // 修改后 (单位为 m/s²) imu_msg.linear_acceleration.x imu_data.acc_x * 9.80665; imu_msg.linear_acceleration.y imu_data.acc_y * 9.80665; imu_msg.linear_acceleration.z imu_data.acc_z * 9.80665;livox_ros_driver2构建方法作为前置条件Livox-SDK2 必须先被构建和安装然后才能正常编译使用 livox_ros_driver2。具体步骤如下git clone https://github.com/Livox-SDK/Livox-SDK2.git cd ./Livox-SDK2/ mkdir build cd build cmake .. make -j sudo make install这条命令会将编译好的库文件/usr/local/lib/和头文件/usr/local/include/安装到系统目录以便其他程序如 livox_ros_driver2能够找到它们。安装好以后通常不必重复构建。Livox-SDK2安装完成后执行livox_ros_driver2的构建命令如下cd src/livox_ros_driver2 source /opt/ros/humble/setup.sh ./build.sh humble修改后的验证修改完成后你需要重新编译livox_ros_driver2。之后你可以通过ros2 topic echo /livox/imu查看输出的加速度值验证静止状态下 z 轴读数是否变为约9.8。