Wiki
MID360與TF聯調
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
1.MID360與TF聯調
1.1.檢查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插件看各個座標系。


1.2.測試mid360
1.2.1.修改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相關參數就改好了。
1.2.2.測試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 不顯示
1.2.3.聯合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 |
環境應基本不動 | 有正確里程計/定位後,環境也應基本不動 |