Go2 ros2_control
验证台
这里运行的不再是孤立的关节发布器:go2_mock.yaml 描述机器人、硬件插件、控制器和 Lifecycle supervisor,再由同一个 Launch 图拉起 controller_manager、Robot State Publisher 与 RViz2。
受 ros2_control 驱动的 Go2 · 真实 RViz2
正在确认本地预览环境,准备加载 noVNC 桌面。
当前 ros2_control 容器 · 非 root Zsh
终端与上方 RViz2 位于同一个容器,ROS 2 与 /opt/lsqy-ros2-control/install 已载入;默认目录 /workspace 是宿主仓库的读写挂载。
ros2 control list_controllers -c /go2/controller_manager
ros2 control list_hardware_components -c /go2/controller_manager
ros2 lifecycle get /go2/control_supervisor
ros2 lifecycle set /go2/control_supervisor deactivate
ros2 lifecycle set /go2/control_supervisor activate
ros2 service call /go2/control/reset_fault std_srvs/srv/Trigger {}
一个场景描述文件,拉起完整控制图
场景 ID 决定 xacro、控制器参数、硬件插件、命名空间与可视化配置;严格校验通过后才生成 Launch actions。
mock_components/GenericSystem当前是理想回显硬件,不代表动力学或实体 Go2/go2/joint_state_broadcaster/joint_states读取 12 个 position / velocity 状态接口/go2/control/position_command → supervisor/go2/go2_position_controller/commands按关节名校验并排序,再申领 12 个 position command interfaces负责控制器激活 / 停用、命令 watchdog 与故障锁存;不会绕过 Controller Manager 直接伪造 JointState。
- MODE
- WAITING
- HARDWARE
- Go2MockSystem
- JOINT STATE
- UNKNOWN
- POSITION
- UNKNOWN
ros2_control 在线诊断只有 Lifecycle active、无 fault、control_ready 且两个控制器 active 时才显示 LIVE OFFLINE
Unitree Go2 · 12 关节受管状态
数值来自 joint_state_broadcaster,而不是独立的网页动画或直接 JointState publisher;运动画面以上方 RViz2 为准。
| LEG | HIP | THIGH | CALF |
|---|---|---|---|
| FLfront left | |||
| FRfront right | |||
| RLrear left | |||
| RRrear right |
- RATE
- — Hz
- AGE
- — ms
选择场景并启动完整控制图
入口会按场景描述加载 Go2 xacro、ros2_control hardware、两个控制器、Lifecycle supervisor、RViz2、noVNC 与只读诊断服务。
ROS2_CONTROL_SCENARIO=go2_mock ./bin/site.sh ros2-serve 4000
集成方式:新增机器人时提供一份受校验的 scenario YAML、对应 xacro / URDF 和控制器参数;接真实硬件或仿真时,把 mock_components/GenericSystem 替换为实现 ros2_control 接口的 hardware plugin。上层 Controller Manager、Lifecycle 状态约束与观察链路可以继续复用。
能证明什么,以及不能证明什么
标准 Controller Manager 管理 12 个 position command interfaces,两个控制器状态、Lifecycle 状态与 Go2 RViz2 画面来自同一容器内 ROS 图。
GenericSystem 不是接触动力学或真实执行器;GPU 加速、真实相机、串口 / USB、实体 Go2 DDS、跨机器及公网访问也未由本页验证。
/workspace 是宿主仓库的读写 bind mount,文件修改会持久化;容器根文件系统只读,且没有 Docker socket。
:6080、:7681、:9090 只绑定回环地址,不应反向代理到局域网或公网。