ROS2 桥接
SDK 自带 lixel_sdk_ros2 包,把设备数据桥接为标准 ROS2 Topic,适合已有 ROS2 工作流的用户。
依赖
- ROS2 Humble(Ubuntu 22.04)或 Foxy(Ubuntu 20.04)
- X-Brain SDK 核心库(交付包中的
lib/<arch>/liblixel_sdk.so) - Eigen3
编译
mkdir -p ~/ros2_ws/src
ln -sf <sdk>/ros2 ~/ros2_ws/src/lixel_sdk_ros2
cd ~/ros2_ws
source /opt/ros/humble/setup.bash
colcon build --packages-select lixel_sdk_ros2
运行
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
# <arch> 取 x86_64 或 aarch64,与目标机架构一致
export LD_LIBRARY_PATH=<sdk>/lib/<arch>:$LD_LIBRARY_PATH
# 方式 1:直接运行
ros2 run lixel_sdk_ros2 sdk_bridge_node --ros-args -p device_ip:=192.168.123.103
# 方式 2:launch 文件
ros2 launch lixel_sdk_ros2 sdk_bridge.launch.py device_ip:=192.168.123.103
节点行为:
- 启动时自动连接设备并启动录制;
- 等待设备进入录制状态后开始订阅并发布数据;
Ctrl+C退出时自动停止录制并断开连接。
发布的 Topic
| Topic | 消息类型 | 频率 | 说明 |
|---|---|---|---|
/lixel/odom | nav_msgs/Odometry | ~100Hz | 设备(IMU)系位姿,map → base_link,无外参变换 |
/lixel/tf | tf2_msgs/TFMessage | ~100Hz | map → base_link 动态变换 |
/lixel/cloud_points | sensor_msgs/PointCloud2 | ~10Hz | 设备(IMU)系 reloc 点云(XYZI, float32),frame=base_link |
/lixel/raw_cloud | sensor_msgs/PointCloud2 | ~10Hz | 去畸变原始点云,frame=base_link |
/lixel/imu | sensor_msgs/Imu | ~200Hz | 原始 IMU(加速度 + 角速度),frame=base_link |
/lixel/camera/left/compressed | sensor_msgs/CompressedImage | 取决于设备 | 左相机 JPEG |
/lixel/camera/center/compressed | sensor_msgs/CompressedImage | 取决于设备 | 中相机 JPEG |
/lixel/camera/right/compressed | sensor_msgs/CompressedImage | 取决于设备 | 右相机 JPEG |
/lixel/diagnostics | diagnostic_msgs/DiagnosticArray | ~10Hz | 设备错误码 |
ros2 topic list # 查看话题
ros2 topic hz /lixel/odom # 确认位姿在发(预期 ~100Hz)
ros2 topic echo /lixel/odom # 查看数据
TF 结构
TF 极简,仅两层:
map ──(动态, ~100Hz)──► base_link
└ 世界/地图系 └ 设备(IMU)基准
base_link直接等于设备 IMU 系。桥接把设备位姿原样作为map → base_link,不做任何外参变换。- 世界系命名为
map:设备输出是 SLAM + 可重定位的全局位姿(绑地图、有重定位跳变),语义上是map(REP-105)而非odom。 - 点云 / IMU / 图像的
frame_id均为base_link(都是设备系数据)。
接到你的载体
若设备装在机器狗/车/无人机上,需要载体中心位姿时,由你在 base_link 之下再发一层静态 TF(设备 → 载体):
map ──► base_link(设备IMU) ──► your_robot_center
└ 你自己标定并发布这层静态 TF
ros2 run tf2_ros static_transform_publisher \
<x> <y> <z> <qx> <qy> <qz> <qw> base_link your_robot_center
这与"设备只输出设备系、载体变换归集成方"的约定一致(见核心概念)。
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
device_ip | 192.168.123.103 | 设备 IP |
device_port | 7448 | 设备端口(SDK 只连此单端点) |
connect_timeout_ms | 5000 | 连接超时(ms) |
map_frame | map | 世界/地图坐标系(REP-105 全局无漂移) |
base_frame | base_link | 设备基座坐标系,等于设备 IMU 系 |
各 Topic 名也可通过参数改(odom_topic / cloud_topic / imu_topic 等)。参数可通过 config/default_params.yaml 或命令行 --ros-args -p key:=value 传入。
注:由于 SDK 订阅的位姿/点云本身即设备(IMU)系,桥接不再做外参变换,因此不需要
sensor_frame/use_omega_cross_r/static_tf.*等参数。
前提条件
- 设备与上位机处于同一网段且 7448 端口可达;
- 设备在录制状态下才发布位姿(节点会自动启动录制);
- 点云数据需设备在有图模式下且重定位成功后才发布。
排障见排障与 FAQ。