Walker C1 EDU 共创者:推理服务器(常驻预热)¶
把策略常驻在机器人侧(或 GPU 侧)容器内,操作机通过 ZMQ 远程控制:启动模型、热切换 checkpoint、开始/停止执行、回 home、订阅状态。
操作机 inference_client.py ──ZMQ REQ 5690──► inference_server(lerobot venv)
◄──ZMQ PUB 5691── │
├─ lerobot-rollout(26 / 13 维)
└─ ros2_walker_c1_bridge(ZMQ 5661/5662)
1. 脚本¶
| 文件 | 作用 |
|---|---|
scripts/deploy/walker_c1/inference_server.sh |
后台拉起 python -m lerobot.scripts.inference_server(5690/5691) |
scripts/deploy/walker_c1/inference_client.py |
指令客户端 / 状态订阅 |
scripts/deploy/walker_c1/inference_client.sh |
薄包装(优先 /lerobot/.venv/bin/python) |
2. 快速开始¶
# 机器人侧(容器内):先确认/切到 half_sdk(服务启动会校验,非 half_sdk 直接拒绝)
bash /ubt_IL/scripts/deploy/walker_c1/sdk_mode.sh half_sdk
# 后台 + 预热(真机加 WALKER_C1_REAL=1 打开门禁)
# 真机已验证(2026-11):13D 真机模型
WALKER_C1_REAL=1 \
POLICY_PATH=/ubt_IL/model/walker_c1_real_13d_act_1RGB/checkpoints/last/pretrained_model \
bash /ubt_IL/scripts/deploy/walker_c1/inference_server.sh
# 操作机侧
bash /ubt_IL/scripts/deploy/walker_c1/inference_client.sh status
bash /ubt_IL/scripts/deploy/walker_c1/inference_client.sh start
bash /ubt_IL/scripts/deploy/walker_c1/inference_client.sh home
bash /ubt_IL/scripts/deploy/walker_c1/inference_client.sh stop
bash /ubt_IL/scripts/deploy/walker_c1/inference_client.sh shutdown
launch 会拉起服务并轮询到 READY:
bash /ubt_IL/scripts/deploy/walker_c1/inference_client.sh launch \
--policy-path /ubt_IL/model/walker_c1_real_13d_act_1RGB/checkpoints/last/pretrained_model \
--robot-type walker_c1 --robot-model walker_c1_13d \
--inference-hz 2 --fps 30
远程拉起(SSH + docker exec 到跑容器的机器):
bash /ubt_IL/scripts/deploy/walker_c1/inference_client.sh launch --remote \
--host 192.168.11.3 --ssh-user ubt --ssh-port 22 --container lerobot-tienkung \
--policy-path /ubt_IL/model/.../pretrained_model \
--robot-type walker_c1 --robot-model walker_c1_26d
推理后端建议(walker 系列):优先
INFERENCE_TYPE=act_async(默认)。sync仅用于调试,且必须保留单动作平滑(WALKER_C1_SINGLE_ACTION_SMOOTH_S,默认 0.15 s,置 0 会告警)。
--robot.type不硬编码:优先取load指令里的robot_type,其次ROBOT_TYPE环境变量,缺省walker(walker_s2 行为不变);C1 客户端会透传walker_c1。
3. 客户端指令¶
| 指令 | 说明 |
|---|---|
launch |
拉起服务(本地或 --remote)并等待 READY |
load |
热切换 checkpoint / 机型(--policy-path、--robot-type、--robot-model) |
start / stop |
开始 / 停止下发动作(stop 立即停发,C1 由运控保持当前位) |
home |
平滑回 home(chunk 路径,2 s) |
status |
单次查询状态 |
watch |
订阅 PUB 状态流(state/loop_hz/chunk_id/robot_connected/uptime_s) |
shutdown |
关闭服务 |
4. 状态机¶
READY:模型已加载、机器人已连接、未下发动作RUNNING:按inference_hz推理并下发RETURNING_HOME:执行回 home,完成后回READY
5. 环境变量¶
服务端(inference_server.sh)
| 变量 | 默认 | 说明 |
|---|---|---|
POLICY_PATH |
—(必填) | pretrained_model 目录 |
CAMERA_TOPIC |
/sensor/camera/head_stereo_left/color/raw |
相机话题(C1 真机头左目;仿真用 /sensor/camera/head/color/raw) |
CAMERA_MSG_TYPE |
shm_msgs/Image6m |
相机消息类型(真机 shm_msgs/Image6m;仿真 sensor_msgs/Image) |
ROBOT_TYPE |
walker_c1 |
LeRobot 插件注册名 |
ROBOT_MODEL |
walker_c1_13d |
ROBOT_MODELS 键(= --robot.joint_config) |
ROBOT_CONFIG |
空 | 指定硬件配置 JSON 时优先于 ROBOT_MODEL |
INFERENCE_TYPE |
act_async |
act_async / sync |
INFERENCE_HZ |
1 |
重规划频率(实测约 1 Hz) |
EXECUTION_HORIZON |
0 |
chunk 截断步数(0=不截断) |
FPS |
15 |
控制环 FPS |
TASK |
walker c1 pick place |
任务描述 |
SERVER_CMD_PORT |
5690 |
REQ 指令端口 |
SERVER_STATUS_PORT |
5691 |
PUB 状态端口 |
ALLOW_DIM_ONLY_POLICY |
1 |
预检只校验维度 |
BLEND_HORIZON / BODY_PUBLISH_HZ / BODY_V_MAX |
桥接默认 | chunk 融合参数(透传 bridge) |
WALKER_C1_SINGLE_ACTION_SMOOTH_S |
0.15 |
sync 单动作平滑窗口(秒):把每个 action 展开为 current→target 短轨迹再按 300 Hz 限速执行;0=关闭。FPS=15 建议 0.15,FPS=30 建议 0.1–0.15 |
客户端
| 变量 | 默认 |
|---|---|
DEPLOY_CONTAINER |
lerobot-tienkung |
SERVER_CMD_PORT / SERVER_STATUS_PORT |
5690 / 5691 |
--host |
127.0.0.1 |
--camera-topic / --camera-msg-type |
/sensor/camera/head_stereo_left/color/raw / shm_msgs/Image6m |
launch会把--camera-topic/--camera-msg-type转成CAMERA_TOPIC/CAMERA_MSG_TYPE传给服务端脚本(远程 launch 时以env VAR=... bash ...前缀注入)。相机只在服务启动时读取,运行中load不会改变相机源。
6. 常见问题¶
| 现象 | 处理 |
|---|---|
launch 一直 LOADING |
看 /tmp/walker_c1_inference_server.log;多为模型路径/相机超时 |
status 连不上 |
--host 与端口;服务端是否在别的容器 |
load 后仍用旧模型 |
watch 看 model 字段;确认 --robot-model 与策略维度一致 |
| 报 action dim mismatch | 策略维度与 ROBOT_MODEL 不一致(26D / 13D);检查训练数据集与启动参数 |
stop 后仍动 |
在飞 chunk 最多 ~1 个 tick 后停发;若持续动,确认桥接已重启到新版本(hold_trajectory 生效) |
| PID 文件残留 | /tmp/walker_c1_inference_server.pid;单例守卫会自动修正 |