slam与ros_robot_controller间imu的传递

标题:
slam与ros_robot_controller间imu的传递

产品型号 / 套件:puppypi四足机器狗
2026.6 树莓派5 2G专业开发板 ROS2

背景:
我正在研究地图是把哪些信息整合在一起实现地图显示与保存

问题描述:
{
ros_robot_controller包的代码中有:
self.declare_parameter(‘imu_frame’, ‘imu_link’)
self.imu_pub = self.create_publisher(Imu, ‘~/imu_raw’, 1)
},
{
地图代码中提到:
imu_frame = ‘{}imu_link’.format(frame_prefix)
robot_controller_launch = IncludeLaunchDescription(
PythonLaunchDescriptionSource([os.path.join(robot_controller_package_path, ‘launch/ros_robot_controller.launch.py’)
]),
launch_arguments={
‘imu_frame’: imu_frame,
}.items()
)
ekf.yaml中融合的imu却是:
imu0: imu
},
这让我十分不解,imu_link和ros_robot_controller/imu_raw都没有在其中用到,那imu信息是怎么传递过去的呢?还是其实没有传递过去

尝试过的解决方法:
执行ros2 topic list | grep imu只能得到:
/ros_robot_controller/imu_raw,
而且imu_link也没有见到tf树里在用

结论:按您贴出的这套启动链,当前 IMU 数据没有传入 EKF。imu_link、/ros_robot_controller/imu_raw 和 imu0: imu 分别属于坐标系名称、原始数据话题和 EKF 输入话题,不能直接对应起来。

  • ~/imu_raw 中的 ~ 表示节点私有命名空间。节点名为 ros_robot_controller 时,它解析为 /ros_robot_controller/imu_raw。
  • imu_frame 参数只被写入 IMU 消息的 header.frame_id。它不会重命名话题,也不会自动发布 TF,所以仅设置为 imu_link 并不会让 TF 树中出现该坐标系。
  • ekf.yaml 中的 imu0: imu 表示 EKF 订阅 imu 话题,与 imu_frame 参数没有话题映射关系。

IMU 的完整处理链应为:/ros_robot_controller/imu_raw → imu_calib → imu_corrected → imu_filter → imu → ekf_filter_node。其中校准和滤波链定义在 peripherals/launch/imu_filter.launch.py 中。

但当前 slam/launch/include/robot.launch.py 启动了底层控制和 EKF,却没有包含该 IMU 滤波启动文件。因此,除非还有其他进程单独启动它,否则数据会停在 /ros_robot_controller/imu_raw,不会进入 imu0: imu。您只能查到原始话题,正好符合这个情况。

slam_toolbox 本身主要使用激光 LaserScan 和 odom -> base 的 TF 建图,所以即使 IMU 未参与,地图仍可能正常显示和保存。可运行 rqt_graph 并选择 Nodes/Topics(all),确认上述完整链路是否存在。若要让 EKF 融合 IMU,需要把 peripherals/launch/imu_filter.launch.py 纳入建图启动链,并确认最终的 imu 话题已连接到 ekf_filter_node。


若您觉得本回复有帮助,可以点击下方按钮将其标记为解决方案。

了解了,感谢回复,有很大帮助。
但我去看了代码中虽有peripherals/launch/imu_filter.launch.py,并没有对应路径"/home/ubuntu/ros2_ws/src/calibration"下的calibration文件夹,源代码没有在启动地图时就并入imu是有什么考虑吗?

官方支持人员会来协助您处理这个问题。如仍需要助手帮助,请在这里回复并@我。 @hiwonder_nuowu

好的

好的,不客气!官方支持人员会继续跟进您的问题,如果还有其他需要,随时在这里回复并@我即可。

地图启动时并不强依赖它,因为 SLAM 的主流程可以只依赖激光雷达,IMU 只是增强项,IMU只是可选项并不是必须项, 建图流程优先保证激光 SLAM 跑通

好的,感谢