推理部署
先完成 通信准备。Server 负责模型推理,Client 负责读取相机与状态并向机器人发送动作。 下文以 LingBot-VLA v2 为例,命令在边侧机的 LeTools-Learning 仓库根目录执行。
1. 配置并启动 Server
编辑 configs/server/launcher.yaml 中的 lingbotvla2_roban_wholebody,保留全身 adapter,按本机路径填写:
lingbotvla2_roban_wholebody:
adapter: lingbot_vla_v2_roban_wholebody
env:
mode: conda
conda_env: lingbotvla2
args:
checkpoint: /path/to/training_output/global_step_40000/hf_ckpt
training_config_path: /path/to/training_output/lingbotvla_cli.yaml
qwen3vl_path: /path/to/Qwen3-VL-4B-Instruct
robot_norm_path: /path/to/roban_wholebody.json
robot_config_path: /path/to/LeTools-Learning/kuavo_model/external_models/lingbot-vla-v2/configs/robot_configs/roban_wholebody.yaml
execution_horizon: 50
checkpoint写到包含模型权重的hf_ckpt目录。training_config_path使用本次训练输出的快照,不能用默认训练 YAML 代替。robot_norm_path使用匹配的归一化统计;robot_config_path明确指向全身机器人配置。- 基础模型、动作布局与训练保持一致,不使用双臂配置。
在 LeTools 主环境启动 Server:
conda activate letools
python kuavo_server/launch.py lingbotvla2_roban_wholebody
使用其他模型时,仅切换对应 Server 配置,后续 Client 流程相同:
| 模型 | 启动命令 | 必须核对 |
|---|---|---|
| OpenPI | python kuavo_server/launch.py openpi_roban_wholebody | checkpoint;policy_config_name 与训练名称一致,例如 pi05_roban_wholebody |
| Isaac GR00T N1.7 | python kuavo_server/launch.py groot_roban_wholebody | checkpoint;全身 adapter;execution_horizon: 40 |
完整模型参数见 LETools 全身 VLA 教程。
2. 配置 Client
编辑 configs/deploy/roban_wholebody_deploy.yaml 的对应字段,保留通信准备中已填写的 heft.switch_cli 和 heft.switch_library_path:
platform_type: roban
camera:
topic: /camera/color/image_raw/compressed
dds:
config_uri: cyclonedds_roban_edge.xml
inference:
policy_type: client
server_host: localhost
server_port: 5555
task_prompt: "robot manipulation"
execution:
mode: sync
action_hz: 50.0
heft:
controller: heft_pico
fallback_controller: amp
hand_scale: 100.0
- 示例假设 Server 与 Client 同机;分开运行时将
server_host改为 Server 地址,并核对端口。 task_prompt与训练任务指令一致;相机话题与当前 ROS 数据一致。heft、heft_pico、amp是实际配置标识,不要替换成描述文字。- 模型夹爪范围为
[0, 1],DDS/rt/hand_cmd为[0, 100],通过hand_scale: 100.0缩放。保留配套warmup_sec,切换前预热下位机缓冲。
3. 启动与停止
确认 Server 已就绪,在 Client 终端激活 LeTools 环境,并重新设置 ROS 地址。下列 IP 为通信页的示例地址:
conda activate letools
export ROS_MASTER_URI=http://192.168.26.12:11311
export ROS_IP=192.168.26.10
rostopic list
python kuavo_deploy/eval.py configs/deploy/roban_wholebody_deploy.yaml
确认相机数据、DDS 和机器人状态正常后,在菜单中选 1 开始全身推理;中途输入 s 停止,并确认机器人停止执行、回退状态正常。此入口没有 Kuavo 双臂流程中的 go / bag 回放操作。
真机先使用 sync
首次联调保持 execution.mode: sync。async 会在下一动作段推理时继续以 50 Hz 向 HEFT 发送指令,不应未经验证直接用于真机任务。短时欠载会保持上一拍动作,持续欠载会停流并回退至 amp;仍须监护机器人状态,异常时使用硬件急停。
排查顺序
- 无相机数据:检查相机服务、ROS 地址与 topic。
- 切换失败:检查 DDS 网卡、CLI 和动态库路径,以及机器人端控制器状态。
- 模型加载或动作异常:检查 checkpoint、训练快照、统计文件与全身 adapter 是否匹配。
- 持续欠载或断流:先停止运行,检查网络与推理速度,不通过盲目提高频率继续测试。