📦 JoyIn Robot Control — 机器人遥控
v1.1.0通过 OpenAPI 远程控制 JoyIn AI 机器人(W-1 Walle / M-1 Mini),实现移动、跟随、拍照、录像、直播、语音合成、智能体配置及设备状态查询等功能。
详细分析 ▾
运行时依赖
版本
新增预检检查命令及状态感知的代理工作流规则。
安装命令
点击复制技能文档
设置
OpenClaw 配置 在 ~/.openclaw/openclaw.json 中添加以下内容: ``json5 { "skills": { "entries": { "joyin-robot-control": { "enabled": true, "apiKey": "YOUR_AUTH_KEY", "env": { "JOYIN_API_BASE": "https://api-open-test.joyin-ai.com", "JOYIN_AUTH_KEY": "YOUR_AUTH_KEY", "JOYIN_DEVICE_SN": "YOUR_DEVICE_SN", "JOYIN_DEVICE_TYPE_ID": "3" } } } } } ` 完整模板见 {baseDir}/openclaw.config.example.json5。
环境变量 | 变量 | 必须 | 说明 | |----------|----------|-------------| | JOYIN_API_BASE | 是 | API 基地址(测试环境:https://api-open-test.joyin-ai.com) | | JOYIN_AUTH_KEY | 是 | 授权密钥(联系 JoyIn 工作人员获取) | | JOYIN_DEVICE_SN | 是 | 目标设备序列号 | | JOYIN_DEVICE_TYPE_ID | 否 | 3 表示 Walle(默认),2 表示 Mini | OpenClaw 在 agent 运行时通过 skills.entries.*.env 注入,作用域仅限本次运行,不会泄漏到全局 shell 环境。
工具 ` python3 {baseDir}/scripts/robot_cmd.py [options]
Agent 工作流规则(重要) 任何机器人指令前必须先执行 preflight,用于检查设备是否在线、电量及当前工作模式。
决策流程: 1. 运行:python3 {baseDir}/scripts/robot_cmd.py preflight 2. 检查结果: - "ready": false → 告知用户原因(离线/OTA/低电量)。禁止发送指令。 - "ready": true,且 "note" 提示当前模式 → 先告知用户,再继续。 - "ready": true,且 idle → 直接执行指令。 3. 执行用户请求的指令。 4. 向用户汇报结果。
状态感知行为: | current_status | 含义 | 处理方式 | |----------------|---------|------------| | offline | 设备离线 | 告知用户,禁止发送指令。 | | idle | 空闲就绪 | 正常继续。 | | follow | 跟随模式中 | 发送冲突指令前(如 remote_control)需先警告。先 stop。 | | remote_control | 摇杆已激活 | 已在 RC 模式,可直接发送移动指令。 | | patrol | 巡逻中 | 中断前需警告,先 stop。 | | go_charge | 回充中 | 中断前需警告。 | | guard | 值守中 | 中断前需警告。 | | ota | 固件升级中 | 禁止任何指令,等待完成。 | | build_map | 建图中 | 禁止中断。 | | active_action | 执行动作中 | 与 follow 冲突,必要时先 stop。 |
电量规则: - < 10% 且未充电 → 建议先执行 charge 再移动。 - < 5% → 拒绝移动类指令,仅允许 charge 与 status。
快速示例 bash # 务必先执行预检 python3 {baseDir}/scripts/robot_cmd.py preflight
# 机器人前进 python3 {baseDir}/scripts/robot_cmd.py move --direction forward
# 停止所有运动 python3 {baseDir}/scripts/robot_cmd.py stop
# 让机器人说话 python3 {baseDir}/scripts/robot_cmd.py tts --text "你好,我是你的机器人助手"
# 查看设备状态(电量、在线、充电) python3 {baseDir}/scripts/robot_cmd.py status
# 获取实时视频流地址 python3 {baseDir}/scripts/robot_cmd.py live_pull_url ` ---
指令参考
1. 移动 — 遥控模式 进入/退出遥控模式: `bash python3 {baseDir}/scripts/robot_cmd.py rc_enter python3 {baseDir}/scripts/robot_cmd.py rc_exit
底盘移动(8 方向,需约 100 ms 连续发送,停止指令即停车): bash python3 {baseDir}/scripts/robot_cmd.py move --direction forward python3 {baseDir}/scripts/robot_cmd.py move --direction backward python3 {baseDir}/scripts/robot_cmd.py move --direction left python3 {baseDir}/scripts/robot_cmd.py move --direction right python3 {baseDir}/scripts/robot_cmd.py move --direction left_up python3 {baseDir}/scripts/robot_cmd.py move --direction right_up python3 {baseDir}/scripts/robot_cmd.py move --direction left_down python3 {baseDir}/scripts/robot_cmd.py move --direction right_down# 停止底盘 python3 {baseDir}/scripts/robot_cmd.py move_stop
头部控制(仅 Walle) — 上下左右,约 100 ms 连续:
bash python3 {baseDir}/scripts/robot_cmd.py head --direction up python3 {baseDir}/scripts/robot_cmd.py head --direction down python3 {baseDir}/scripts/robot_cmd.py head --direction left python3 {baseDir}/scripts/robot_cmd.py head --direction right python3 {baseDir}/scripts/robot_cmd.py head --direction stop
手臂控制(仅 Walle) — 左臂或右臂:
bash python3 {baseDir}/scripts/robot_cmd.py arm --side left --direction up python3 {baseDir}/scripts/robot_cmd.py arm --side left --direction down python3 {baseDir}/scripts/robot_cmd.py arm --side left --direction stop python3 {baseDir}/scripts/robot_cmd.py arm --side right --direction up python3 {baseDir}/scripts/robot_cmd.py arm --side right --direction stop
复位(仅 Walle):
bash python3 {baseDir}/scripts/robot_cmd.py reset --target all # 全部复位 python3 {baseDir}/scripts/robot_cmd.py reset --target head # 仅头部 python3 {baseDir}/scripts/robot_cmd.py reset --target arm # 仅手臂
2. 固定动作(仅 Mini)
bash python3 {baseDir}/scripts/robot_cmd.py car_on # 上车 python3 {baseDir}/scripts/robot_cmd.py car_off # 下车 python3 {baseDir}/scripts/robot_cmd.py standup # 站立 python3 {baseDir}/scripts/robot_cmd.py boot_off # 收脚 python3 {baseDir}/scripts/robot_cmd.py boot_on # 卡脚 python3 {baseDir}/scripts/robot_cmd.py hello # 打招呼 python3 {baseDir}/scripts/robot_cmd.py hello_off # 收手 python3 {baseDir}/scripts/robot_cmd.py head_up # 抬头 python3 {baseDir}/scripts/robot_cmd.py head_down # 回头 (低头) python3 {baseDir}/scripts/robot_cmd.py charge # 回充电桩 python3 {baseDir}/scripts/robot_cmd.py charge_stop # 停止回充
3. 紧急停止
bash python3 {baseDir}/scripts/robot_cmd.py stop # 急停,停止所有移动和功能
4. 语音 — TTS
bash # 在设备扬声器播放文本 python3 {baseDir}/scripts/robot_cmd.py tts --text "你好世界"# 播放后关闭麦克风(keep_silent=1) python3 {baseDir}/scripts/robot_cmd.py tts --text "请安静" --keep-silent
5. 设备状态与预检
bash # 飞行前检查(任何指令前必跑) python3 {baseDir}/scripts/robot_cmd.py preflight # 返回:ready (bool)、current_status、battery、is_charging、issues[]、suggestion# 获取原始设备状态 python3 {baseDir}/scripts/robot_cmd.py status
预检返回示例(就绪):
json { "ready": true, "current_status": "idle", "current_status_name": "空闲", "battery": 85, "is_charging": false, "note": "Device is online and idle. Ready to accept commands." }
预检返回示例(未就绪):
json { "ready": false, "current_status": "offline", "battery": -1, "issues": ["Device is OFFLINE — cannot accept commands"], "suggestion": "Device is OFFLINE — cannot accept commands" }
6. 实时视频
bash # 启动设备摄像头推流 python3 {baseDir}/scripts/robot_cmd.py live_push --status 1# 停止推流 python3 {baseDir}/scripts/robot_cmd.py live_push --status 0
# 获取拉流地址(HLS/RTMP) python3 {baseDir}/scripts/robot_cmd.py live_pull_url
# 获取推流地址 python3 {baseDir}/scripts/robot_cmd.py live_push_url
7. ASR 结果
bash # 获取机器人最新的语音识别结果 python3 {baseDir}/scripts/robot_cmd.py asr_result
8. WiFi 配置
bash # 配置机器人 WiFi(SSID 与密码需 base64 编码) python3 {baseDir}/scripts/robot_cmd.py wifi --ssid "MyWiFi" --password "12345678"
9. LLM 配置(注册自定义模型)
bash # 注册自定义 LLM python3 {baseDir}/scripts/robot_cmd.py llm_register --name "My GPT" --base-url "https://api.openai.com/v1" --api-key "sk-xxx" --model "gpt-4"# 列出已注册 LLM python3 {baseDir}/scripts/robot_cmd.py llm_list
# 更新已注册 LLM python3 {baseDir}/scripts/robot_cmd.py llm_update --id 123 --model "gpt-4o"
10. Agent 配置
bash # 使用已注册 LLM 创建 agent python3 {baseDir}/scripts/robot_cmd.py agent_create --name "My Agent" --llm-id 123# 列出 agents python3 {baseDir}/scripts/robot_cmd.py agent_list
# 更新 agent python3 {baseDir}/scripts/robot_cmd.py agent_update --id 123 --name "New Name"
# 将 agent 绑定到设备 python3 {baseDir}/scripts/robot_cmd.py agent_bind --agent-id 123
# 查询设备已绑定 agent python3 {baseDir}/scripts/robot_cmd.py agent_query
# 恢复默认 JoyIn agent python3 {baseDir}/scripts/robot_cmd.py agent_reset `