Skip to main content

多控制器 H12 部署和操作说明

状态转换图​

Mermaid 图表​

在支持 Mermaid 的 Markdown 查看器中可以看到交互式图表:

flowchart TB
Start(["初始状态<br>Initial"]) -- E左 F右 + C --> Ready["准备站立<br>Ready Stance"]
Start -- E左 F右 + D --> Cali["校准模式<br>Calibrate"]
Cali -- E左 F右 + C --> Ready
Cali -- C长按 + D长按 --> Start
Ready -- E左 F右 + C --> Stance["站立<br>Stance"]
Ready -- C长按 + D长按 --> Start
Stance -- E中 F中 + A --> Walk["行走<br>Walk"]
Stance -- E中 F中 + B --> Trot["踏步<br>Trot"]
Stance <-- E中 F中 + C --> 切换控制器["切换控制器<br>switch_controller"]
Stance -- E右 F左 + A长按 --> VMP["VMP控制<br>VMP Controller"]
Stance -- E中 F中 + A长按 --> VR["VR控制<br>VR Remote Control"]
Stance <--> TACT动作["TACT动作<br>customize_action_LL_A/B/C/D<br>或 customize_action_RR_A/B/C/D"]
Walk -- E中 F中 + D --> Stance
Walk -- E中 F中 + B --> Trot
Walk -- C长按 + D长按 --> Start
Trot -- E中 F中 + D --> Stance
Trot -- E中 F中 + A --> Walk
Trot -- C长按 + D长按 --> Start
VMP -- E右 F左 + B长按 --> Stance
VMP -- C长按 + D长按 --> Start
VR -- E中 F中 + B长按 --> Stance
VR -- C长按 + D长按 --> Start
VMP <--> VMP动作["VMP动作<br>vmp_action_RL_A/B/C/D"]

Start:::initialState
Ready:::readyState
Cali:::caliState
Stance:::normalState
Walk:::motionState
Trot:::motionState
VMP:::specialState
VR:::vrState
classDef initialState fill:#ffcccc,stroke:#cc0000,stroke-width:3px
classDef normalState fill:#ccffcc,stroke:#00cc00,stroke-width:2px
classDef motionState fill:#ccccff,stroke:#0000cc,stroke-width:2px
classDef specialState fill:#ffcccc,stroke:#cc6600,stroke-width:2px
classDef vrState fill:#ffccff,stroke:#cc00cc,stroke-width:2px
classDef readyState fill:#ffffcc,stroke:#cccc00,stroke-width:2px
classDef caliState fill:#ffccff,stroke:#cc00cc,stroke-width:2px
style 切换控制器 stroke:#FF6D00,fill:#FFE0B2
style TACT动作 stroke:#00C853,fill:#C8E6C9
style VMP动作 stroke:#2962FF,fill:#BBDEFB

生成状态转换图​

将上述代码传入 https://www.mermaidchart.com/ 中生成

multi_controller_machine_state


快速参考表​

急停(所有状态)​

按键: C长按 + D长按 → 初始状态

主要状态切换​

操作按键开关位置从状态 → 到状态
启动机器人CE左 + F右Initial → Ready
校准模式DE左 + F右Initial → Calibrate
站立CE左 + F右Ready Stance→ Stance
行走AE中 + F中Stance → Walk
踏步BE中 + F中Stance → Trot
切换控制器CE中 + F中Stance → Stance
进入VMPA长按E右 + F左Stance → VMP
退出VMPB长按E右 + F左VMP → Stance
进入VRA长按E中 + F中Stance → VR
退出VRB长按E中 + F中VR → Stance

运动状态切换​

操作按键开关位置从状态 → 到状态
停止行走DE中 + F中Walk → Stance
行走到踏步BE中 + F中Walk → Trot
停止踏步DE中 + F中Trot → Stance
踏步到行走AE中 + F中Trot → Walk

部署自启动服务​

执行部署脚本​

cd <kuavo-ros-control>/src/humanoid-control/h12pro_controller_node/scripts
sudo su
./deploy_autostart.sh

选择控制方案​

脚本会提示选择控制方案,输入 3 选择 multi 模式:

请选择控制方案 (1: ocs2, 2: rl, 3: multi):
3
已选择: multi

VR 启动配置​

部署脚本在选择相机型号后,会提示选择 VR 启动方式:

  • 输入 1: H12 进入 VR 时启动 launch_quest3_ik.launch
  • 输入 2: H12 进入 VR 时启动 launch_quest3_ik_videostream_orbbec.launch

选择 2 时可继续输入 Quest3 IP。输入后会拼接 ip_address 参数,例如:

roslaunch noitom_hi5_hand_udp_python launch_quest3_ik_videostream_orbbec.launch ip_address:=192.168.50.103

如果不输入 Quest3 IP,则使用不带 ip_address 的启动命令,通过广播发现 Quest3。

VR 遥操参数配置(h12_vr_launch.yaml)​

H12/G12 进入 VR 时,会读取配置文件把 IP、遥操形式、控腰、急停开关等参数追加到上述启动命令,无需改代码即可在现场调整。

仅作用于方式1(launch_quest3_ik.launch)。方式2(视频回传)的 launch 未声明这些参数,不注入、保持原行为。

  • 包内默认:config/h12_vr_launch.yaml
  • 用户覆盖:~/.config/lejuconfig/h12_vr_launch.yaml(存在则覆盖同名字段,缺省字段沿用包内默认)

字段说明:

字段含义
ip_addressVR 设备 IP,留空则不注入、走 launch 默认(广播发现)
use_cpp_incremental_ik位置是否使用增量模式
use_incremental_hand_orientation姿态是否使用增量模式
control_torso是否启用控腰,false 可避免 VR 重连时腰部猛转
enable_vr_stop_robotVR 手柄 X+Y 是否允许触发 stop_robot(关闭全身使能)

约束:use_cpp_incremental_ik=false 且 use_incremental_hand_orientation=true 为无效组合,启动时会校验失败并终止(终端打印异常日志),需修正配置后重试。

⚠️ enable_vr_stop_robot: false 后,VR 手柄不再能关闭机器人,只能用 H12/G12 遥控器 C长按 + D长按 急停。展会/验收等防误触场景可置 false,但需周知现场(含训练场)同事。

交互式编辑脚本​

无需手动 vim,可用交互脚本读改用户配置:

rosrun h12pro_controller_node h12_vr_launch_config_editor.py

脚本以「包内默认 + 现有用户配置」为起始值,逐字段提示修改(回车保留当前值),保存前做同样的校验,最终写入 ~/.config/lejuconfig/h12_vr_launch.yaml。

⚠️ 配置在进入 VR 时读取,非热加载。改完 yaml(脚本或手改)后,需先退出 VR(B长按)再重新进入 VR(A长按) 才会生效;正处于 VR 遥操中的修改不会即时生效。

典型配置(展会防误触 + 指定 IP + 关控腰):

ip_address: "192.168.50.103"
use_cpp_incremental_ik: false
use_incremental_hand_orientation: false
control_torso: false
enable_vr_stop_robot: false

站立状态下的操作​

自定义动作​

  • 操作方式
    • E右 + F右 + A/B/C/D → customize_action_RR_A/B/C/D
    • E左 + F左 + A/B/C/D → customize_action_LL_A/B/C/D
  • 配置方式

轮臂按键映射执行动作​

轮臂机器人在 multi 模式进入 Stance 后,可通过 H12 的 E/F 拨杆组合加 A/B/C/D 按键触发自定义动作。轮臂版本通过 ROBOT_VERSION 以 6 开头识别,状态机会禁止 walk/trot 步态切换,动作触发仍使用下面的 customize_action_* 映射。

开关位置按键触发名默认执行内容
E右 + F右Acustomize_action_RR_A抱拳,播放 2_抱拳.wav
E右 + F右Bcustomize_action_RR_B打招呼,播放 1_挥手.wav
E右 + F右Ccustomize_action_RR_C点赞,播放 3_点赞.wav

配置文件为 customize_config.json。每个按键映射项支持:

  • arm_pose_name: 要执行的动作名称列表,节点会依次调用 /execute_arm_action 执行动作;空字符串表示该位置不执行动作。
  • music_name: 要播放的音乐文件名列表;同时配置动作和音乐时,音乐会在检测到动作开始执行后播放。

VMP 动作(VMP 模式下)​

  • 操作方式
    • E右 + F左 + A/B/C/D → vmp_action_RL_A/B/C/D
  • 配置方式
    • 修改 customize_config.json 中 vmp_action_RL_X 的 action_name
    • 可支持的 action_name 为,全套: yc_126_spec、正踢: yc_01_front_kick、侧踢: yc_02_side_kick、直拳: yc_06_straight_punch

摇杆控制​

  • 左摇杆: 平移(左右)、前后(上下)

  • 右摇杆: 转向(左右)、高度(上下)

    • AMP 控制器暂不支持高度控制

重要提示​

  1. 控制器切换: 在站立状态下按 E中 F中 + C 可循环切换控制器(MPC <--> AMP),切换之后会自动回到站立状态,两控制器共用一套状态机
  2. VMP 控制器限制: 只能从 AMP 控制器进入,不能从 MPC 控制器进入。且仅有动作展示。
  3. 急停: 在任何状态下都可以使用 C长按 + D长按 紧急停止,MPC 控制器会缓慢下蹲再结束程序,AMP 和 VMP 控制器则立马结束程序,可切换到 MPC 再停止。
  4. 遥控器初始化: 当通过 roslaunch humanoid_controllers load_kuavo_real.launch joystick_type:=h12 启动机器人前需要export KUAVO_CONTROL_SCHEME=multi设置环境变量后再执行命令,否则启动后程序会默认启动ocs2的遥控服务,会有问题。启动程序后在终端键盘 o 站立机器人时,遥控器仍需要 E 的拨杆到最左边,F 的拨杆到最右边,然后按 C 切换遥控器的状态后,后续遥控器按键才能正常使用。