MID360与TF联调
MID360与TF联调
检查TF的生成情况
启动robot_description,里面有joint_state_publisher,robot_state_publisher,RViz2:
source install/setup.bash
ros2 launch robot_description robot_description_launch.py \
robot_name:=reality_robot \
use_sim_time:=false \
use_rviz:=true
这里需要显式设置 robot_name:=reality_robot,因为描述包自身的默认入口仍是 default_value="simulation_robot"。
然后use_rviz默认就是true,可以不加。
启动串口程序发布/serial/gimbal_joint_state
source install/setup.bash
ros2 launch serial_comm serial_comm.launch.py
- chassis → gimbal_yaw(唯一实际yaw)
ros2 run tf2_ros tf2_echo chassis gimbal_yaw
手动往左转云台:
如果定义正确,你应该看到 yaw 从:0 → 正值
向左90度:

向右90度:

- chassis → front_mid360
ros2 run tf2_ros tf2_echo chassis front_mid360
它应该同步跟着转。
向左90度:

向右90度:

再抬头/低头时,不应该跟 pitch 改变
- gimbal_yaw → gimbal_pitch(实际pitch)
ros2 run tf2_ros tf2_echo gimbal_yaw gimbal_pitch
接近水平:

抬头:

低头:

应该随 joint_pitch 变化。
直接在rviz2里进行测试也是一样的,在rviz2里打开TF插件看各个坐标系。


测试mid360
修改mid360相关配置文件
sudo apt update
sudo apt install -y iproute2 iputils-ping arp-scan
首先你得知道宿主机的ip地址:
ip addr

得知宿主机拿到的ip地址是192.168.1.50:
然后你得知道mid360的ip地址:
扫描一下:
arp-scan --interface=enp3s0 192.168.1.0/24
# 或者
arp-scan --interface=enp3s0 --localnet
如下图,扫出来是192.168.1.107:
可以ping一下:ping 192.168.1.107

项目里至少有两份 Mid360 配置,建议都改掉,避免以后单独启动驱动和整套 reality launch 用到不同 IP:
# 单独测试mid360的launch的配置(和导航无关)
src/pb2025_sentry_nav/livox_ros_driver2/config/MID360_config.json
# 集成于导航里的mid360真实的配置
src/pb2025_sentry_nav/pb2025_nav_bringup/config/reality/mid360_user_config.json
把下面这些
"ip": "192.168.1.146"
"cmd_data_ip": "192.168.1.50",
"push_msg_ip": "192.168.1.50",
"point_data_ip": "192.168.1.50",
"imu_data_ip": "192.168.1.50"
改为
"ip": "192.168.1.107"
"cmd_data_ip": "192.168.1.50",
"push_msg_ip": "192.168.1.50",
"point_data_ip": "192.168.1.50",
"imu_data_ip": "192.168.1.50"
最终:
Mid360
192.168.1.107
↕
工控机 enp3s0
192.168.1.50
现在为了单独测试 Mid360,而/src/pb2025_sentry_nav/livox_ros_driver2/launch/msg_MID360_launch.py和实车代码reality/nav2_params.yaml不一样,所以建议改一下,测试更好测试一下。
然后把msg_MID360_launch.py里的:
publish_freq = 10.0
frame_id = 'livox_frame'
改成
publish_freq = 20.0
frame_id = 'front_mid360'
如此,我们的:
# 单独测试mid360
ros2 launch livox_ros_driver2 msg_MID360_launch.py
# 导航
ros2 launch pb2025_nav_bringup rm_navigation_reality_launch.py
这俩的mid360相关参数就改好了。
测试mid360是否正常开启
修改完毕就可以:
source install/setup.bash
ros2 launch livox_ros_driver2 msg_MID360_launch.py
进行测试。
查看mid360话题是否发布了
ros2 topic list | grep livox
/livox/lidar
/livox/lidar/pointcloud
/livox/imu

然后查看雷达和imu的频率:
source install/setup.bash
ros2 topic hz /livox/lidar
ros2 topic hz /livox/imu
ros2 topic hz /livox/lidar/pointcloud
可以在电脑和工控机上都试一下,工控机全显示就没啥问题,电脑有不显示的可能是数据包大小的问题,但DDS一般没问题。
lidar和pointcloud应该是20hz,而imu是200hz。


比如说ros2 topic hz /livox/lidar可能在电脑上一直不显示,但在工控机上显示,则输入下面这俩命令在电脑上:
ros2 topic echo /livox/lidar --once --field point_num
ros2 topic echo /livox/lidar --once --field timebase

如果这两个能出来,就说明:
/livox/lidar 实际上也能跨机器收到,只是 ros2 topic hz 这条 CLI 在你这个 CustomMsg 上表现不正常。
再确认点云 frame:
ros2 topic echo /livox/lidar/pointcloud --once

确认下frame是咱们设置的frame_id: front_mid360。
然后打开一个rviz2:
rviz2
然后在rviz2里把Fixed Frame = front_mid360修改好。
然后在rviz2里点By Topic,然后选择/livox/lidar/pointcloud。

先确认能看到正常环境点云。
如果都正常,那么mid360就正常开启了。
出现问题,雷达的hz特别的小:
这个现象很像不是 Mid360 真掉到 3 Hz,而是 RELIABLE 大点云被远端订阅者拖慢了。 这版驱动的 /livox/lidar/pointcloud publisher 是默认 QoS,也就是你前面看到的那种 RELIABLE。一帧约 257 KB,20 Hz 单独 PointCloud2 就约 41 Mb/s。ROS 2 的 DDS/QoS 本身支持不同可靠性策略;对这类高频传感器数据,让显示/调试端用“允许丢旧帧、优先拿最新帧”的方式通常更合适。ROS Documentation 而且一个慢的远程 RELIABLE reader,可能让 writer 做重传、排队甚至产生反压。于是你会看到一个很反直觉的现象
电脑/RViz 收得慢
↓
RELIABLE 重传/积压
↓
工控机 publisher 也被拖住
↓
连工控机本地 ros2 topic hz 看起来都只剩 3 Hz
解决方案:
详见ROS 2 远端查看 MID360 点云导致降频、延迟和 RViz 不显示
联合TF测试下是否整套是否成功
总体框架就是:
livox_ros_driver2和serial_comm由工控机开启。robot_state_publisher由电脑或者工控机开启。
工控机
STM32
↓
serial_comm
↓
/serial/gimbal_joint_state
│
│ DDS
▼
电脑
joint_state_publisher
↓
/joint_states
↓
robot_state_publisher
↓
TF
chassis → gimbal_yaw_odom → front_mid360
Mid360
↓ Ethernet
livox_ros_driver2 (工控机)
↓
/livox/lidar
/livox/lidar/pointcloud
/livox/imu
│
│ DDS
▼
RViz (电脑)
工控机:
source install/setup.bash
ros2 launch livox_ros_driver2 msg_MID360_launch.py
source install/setup.bash
ros2 launch serial_comm serial_comm.launch.py
电脑:
source install/setup.bash
ros2 launch robot_description robot_description_launch.py \
robot_name:=reality_robot \
use_sim_time:=false \
use_rviz:=true
RViz 的 Fixed Frame 理解成 “我站在哪个坐标系里看整个世界?”
而点云坐标系是frame_id = front_mid360,
也就是说,每一帧原始点云都是“以雷达自身为原点”描述的。
| RViz Fixed Frame | 你转云台 yaw 时 | 你整车移动时 |
|---|---|---|
front_mid360 | 环境点云会动/转 | 环境也会动 |
chassis | 环境应基本不动 | 环境会动 |
odom / map | 环境应基本不动 | 有正确里程计/定位后,环境也应基本不动 |