相对位姿

基于IMU里程计数据(nav_msgs/msg/Odometry)实现“相对位姿”计算。以第一帧有效姿态为起点,持续计算并输出:位移分量 dx、dy,位移模长 distance,以及相对偏转角 d_yaw(弧度/角度)。

相对位姿节点(odom_rel_pose) 订阅 odom(里程计),并通过主题 rel_pose_json 发布相对位置和偏移角度。

启动运动底盘

以OriginBot智能小车为例,先启动小车底盘运动控制

shell
ros2 launch originbot_bringup originbot.launch.py

启动节点命令

shell
ros2 run pycodeapp odom_rel_pose

该节点默认绑定可以直接通过平台节点管理菜单启动。

节点参数说明

参数名 描述 类型 默认值 说明
odom_topic 里程计主题 String odom 订阅的 nav_msgs/Odometry 话题名。
log_rate_hz 日志/发布频率 double 5.0 定时输出日志并发布 JSON 的频率(Hz)。
odom_timeout_sec 里程计超时阈值 double 0.6 超过该秒数未更新里程计则暂停输出与发布。
use_header_time 使用消息时间 bool true 优先用消息头时间戳判断超时;否则使用本地时间。
precision 小数位精度 integer 3 日志与 JSON 中数值的保留小数位。
rel_pose_topic 合并 JSON 主题 String rel_pose_json 相对位姿JSON数据 std_msgs/String 话题名。

参数使用方法

shell
# 自定义里程计话题与发布频率、显示精度与日志内容 ros2 run pycodeapp odom_rel_pose --ros-args \ -p odom_topic:=odom \ -p rel_pose_topic:=rel_pose_json \ -p log_rate_hz:=10.0 \ -p precision:=4 # 调整超时阈值与时间戳来源 ros2 run pycodeapp odom_rel_pose --ros-args \ -p odom_timeout_sec:=0.3 \ -p use_header_time:=false

日志查看

点击“相对位姿记录”节点,进入该节点通信页面。

主题订阅示意

点击发布主题“/rel_pose_json”中的“订阅”按钮,类型选择“文字”,可查看 JSON(含 displacement、yaw、stamp)。

消息输出示意

格式说明

json
{ "offset": { "dx": 0.0, //x方向偏移,向前为正,向后为负 "dy": 0.0, //y方向偏移,向左为正,向右为负 "distance": 0.0, //总偏移距离 "unit": "m" //单位(米) }, "yaw": { "deg": 0.0 // 朝向偏移角度,逆时针为正,大于180编为负值表示;顺时针为负,小于-180变为正值表示 "rad": 0.0, // 朝向偏移弧度, }, "stamp": { "sec": 0, // 时间戳秒 "nanosec": 0 // 时间戳纳秒 } }