跳到正文

Wiki

运行第一个RRBot实例

约 4 分钟阅读

先运行官方实例,建立“命令确实经过控制器进入硬件插件”的证据,再自己写包。

1.示例 1:启动官方 RRBot

1.1.程序目标

运行两个旋转关节,查看控制器是否 active、命令接口是否 claimed,然后发送目标。

终端 1:

source /opt/ros/humble/setup.bash
source ~/ros2_control_demos_ws/install/setup.bash
ros2 launch ros2_control_demo_example_1 rrbot.launch.py gui:=false

先使用 gui:=false 观察后台组件。在 Ubuntu 图形桌面中需要 RViz 时,把它改为 gui:=true;无图形桌面时,继续通过命令行检查接口和反馈。

终端 2,source 同一个工作区后执行:

ros2 control list_controllers
ros2 control list_hardware_components
ros2 control list_hardware_interfaces
ros2 topic info /forward_position_controller/commands -v

1.2.运行输出与执行顺序

控制器列表应包含两个 active 实例:joint_state_broadcaster 和 forward_position_controller。命令接口为 joint1/position、joint2/position,应显示 available、claimed。

available 表示接口可以被框架使用;claimed 表示某个控制器已经获得该命令接口。声明在 YAML 中并不等于控制器已经加载或激活。

2.示例 2:发送位置目标并观察反馈

ros2 topic pub --once /forward_position_controller/commands \
  std_msgs/msg/Float64MultiArray "{data: [0.4, -0.2]}"
ros2 topic echo /joint_states

不要只看 position 数组。先对照 name 数组,确认哪一个值属于哪个关节。JointState 的关节排列顺序不应靠猜测。

2.1.预期现象

发送目标后,joint1 应从初始位置向 0.4 rad 靠近,joint2 应向 -0.2 rad 靠近。通过连续观察反馈确认方向和收敛趋势;不要求在固定墙上时间采到某个精确小数。

为什么没有立刻达到 0.4 和 -0.2?当前固定提交的硬件配置中 example_param_hw_slowdown 为 100;模拟 read 每轮只走剩余误差的一小部分。它不是 Gazebo 动力学,也不是串口失灵。

2.2.一条命令经过哪些文件

rrbot.launch.py 启动 robot_state_publisher 和 ros2_control_node
  → Xacro 展开硬件描述
  → ResourceManager 加载 RRBot 硬件插件
  → spawner 加载并激活两个控制器
  → Topic 回调收到 Float64MultiArray
  → ForwardCommandController::update 写入命令接口
  → RRBot 的 read 逐渐更新模拟状态
  → broadcaster 发布 JointState

3.示例 3:确认 RViz 显示的依据

如果打开 RViz,选择与模型对应的 Fixed Frame,添加 RobotModel 和 TF。RViz 读取模型及 TF,不会直接读取硬件插件中的 C++ vector。

不要同时启动 joint_state_publisher_gui 来给同一机器人发布 /joint_states。它会让你无法分清显示来自硬件反馈还是手动滑块。

4.常见问题

  • 没有 /controller_manager 服务:先看启动终端中 URDF、插件和 YAML 的报错。
  • 控制器 inactive:查看接口名称、硬件状态和激活日志。
  • Topic 存在却不动:确认类型、订阅者、命令数组长度,以及当前 active 的控制器。
  • 反馈缓慢变化:先查看模拟参数和更新频率,不能只凭速度判断失败。

5.对应底层源码

依次阅读 ros2_control_demos/example_1/bringup/launch/rrbot.launch.py、ros2_control_demos/example_1/bringup/config/rrbot_controllers.yaml、ros2_control_demos/example_1/hardware/rrbot.cpp。先定位文件之间的关系,再阅读函数体。


返回 Humble 总览 · 上一篇:ros2_control整体工作过程 · 下一篇:从零创建学习工作区