diff --git "a/zh/k3/03-\345\217\202\350\200\203\346\226\271\346\241\210/3.1-\346\241\214\351\235\242\346\234\272\345\231\250\344\272\272Reachy mini.md" "b/zh/k3/03-\345\217\202\350\200\203\346\226\271\346\241\210/3.1-\346\241\214\351\235\242\346\234\272\345\231\250\344\272\272Reachy mini.md" index 65d8c10..169303a 100644 --- "a/zh/k3/03-\345\217\202\350\200\203\346\226\271\346\241\210/3.1-\346\241\214\351\235\242\346\234\272\345\231\250\344\272\272Reachy mini.md" +++ "b/zh/k3/03-\345\217\202\350\200\203\346\226\271\346\241\210/3.1-\346\241\214\351\235\242\346\234\272\345\231\250\344\272\272Reachy mini.md" @@ -11,7 +11,7 @@ Reachy Mini 是由 Hugging Face 与 Pollen Robotics 联合推出的开源桌面 Reachy Mini 是一个小型机器人运动控制交互应用,支持以下功能: - **视觉跟随**:通过摄像头实时检测人脸/手势,经 PD 控制算法驱动 Stewart 并联平台电机 -- **语音对话控制**:集成 VAD + ASR + LLM + TTS 全链路语音交互,支持语音指令控制机器人动作 +- **语音对话控制**:集成 VAD + ASR + LLM + TTS 全链路语音交互,支持语音指令控制机器人动作,**支持纯本地模型,也可接入国内外云端模型** - **舞蹈表演**:预编排的舞蹈动作序列,支持音频同步播放 - **仿真控制**:通过 gRPC 远程控制 PC 端 MuJoCo 仿真,支持键盘实时操控和预设动作 @@ -52,9 +52,9 @@ Reachy Mini 是一个小型机器人运动控制交互应用,支持以下功 ### 3.2 代码下载 ``` - repo init -u https://github.com/spacemit-robotics/manifest.git -b main -m default.xml \ - --repo-url=https://gitee.com/spacemit-robotics/git-repo \ - -g core,peripherals,agent_tools,model_zoo,multimedia,reachy_mini +repo init -u https://github.com/spacemit-robotics/manifest.git -b main -m default.xml \ +--repo-url=https://gitee.com/spacemit-robotics/git-repo \ +-g core,peripherals,agent_tools,model_zoo,multimedia,reachy_mini repo sync -j4 repo start robot-dev --all ``` @@ -171,8 +171,8 @@ reachy_voice_bot status # 查看运行状态和当前模式 |--------|------| | `初始化中` | 程序正在启动,正在初始化 LLM、VAD、TTS、音频设备等 | | `对话模式` | 所有引擎与音频初始化完成,等待语音输入(正常就绪) | -| `人脸跟随` | 当前处于人脸跟随模式(NPU 占用,限制其他动作) | -| `手势跟踪` | 当前处于手势跟踪模式(NPU 占用) | +| `人脸跟随` | 当前处于人脸跟随模式(TCM 占用,限制 TTS) | +| `手势跟踪` | 当前处于手势跟踪模式(TCM 占用) | | `未知` / 无文件 | 未运行或状态不可用 | @@ -271,7 +271,7 @@ reachy_voice_bot --llm-url https://api.deepseek.com/v1 --model deepseek-chat 1. **关键词优先**:语音识别结果首先匹配预定义关键词表,命中后直接执行对应动作(绕过 LLM),响应更快 2. **LLM 兜底**:未命中关键词的自然语言输入交由 LLM 处理,支持自由对话和 MCP 工具调用 -3. **NPU 互斥保护**:人脸/手势跟随运行期间 NPU 被占用,系统自动拦截除"停止跟随"外的所有指令,避免资源冲突 +3. **TCM 互斥保护**:人脸/手势跟随运行期间 TCM 被占用,系统自动拦截除"停止跟随"外的所有指令,避免资源冲突 4. **语音关机**:说"睡觉吧"或"关机",机器人回复"好的,再见,下次再聊"后自动终止进程 ### 4.4 典型使用流程 @@ -281,10 +281,10 @@ reachy_voice_bot --llm-url https://api.deepseek.com/v1 --model deepseek-chat 机器人: "好的,即将启动跟随" → 启动人脸跟随 用户: "左转" -机器人: (无响应,NPU 围栏拦截) → 跟随期间不响应其他动作 +机器人: (无响应,TCM 围栏拦截) → 跟随期间不响应其他动作 用户: "别跟了" -机器人: "好的,停止跟随" → 停止跟随,释放 NPU +机器人: "好的,停止跟随" → 停止跟随,释放 TCM 用户: "甩头舞" 机器人: "好的,甩头舞" → 播放舞蹈音乐 + 执行编排动作 @@ -451,12 +451,18 @@ ping 192.168.88.1 ### 7.5 启动与运行 **1. 启动 PC 端仿真服务** + +`sim_server` 的第一个参数为监听地址,支持两种写法。不带参数时默认监听 `0.0.0.0:50051`(即监听所有网卡),端口默认 `50051`,须与客户端保持一致。 + ```bash -# 默认监听 0.0.0.0:50051 -sim_server :50051 # 为 PC 的 IP 地址 +# 形式 1:仅传 IP,自动追加默认端口 50051 +sim_server 192.168.88.1 # 等价于 192.168.88.1:50051 -# 指定服务端的实际 IP 地址(如网线直连 IP) +# 形式 2:显式指定 host:port,自定义端口时使用这种 sim_server 192.168.88.1:50051 + +# 不带参数:默认监听 0.0.0.0:50051 +sim_server ``` 服务端效果图: ![仿真端效果](assets/reachy-mini_simulation_effect.jpg) @@ -530,6 +536,7 @@ service ReachySimService { ``` reachy_mini +├── assets ├── CMakeLists.txt ├── config │   ├── config_paras.yaml @@ -537,22 +544,30 @@ reachy_mini │   ├── yolov5-face.yaml │   └── yolov5_gesture.yaml ├── LICENSE +├── NOTICE ├── package.xml +├── README.md ├── simulation -│   ├── CMakeLists.txt -│   ├── control_client.cc -│   └── reachy_sim.proto -└── src - ├── face_tracker.c - ├── gesture_tracker.c - ├── kinematics - ├── media - ├── motor_ctl - ├── talent_show - ├── tracker_generic - ├── vision - ├── voice - └── voice_bot.cpp +│   ├── client +│   ├── reachy_sim.proto +│   └── server +├── src +│   ├── face_tracker.c +│   ├── gesture_tracker.c +│   ├── kinematics +│   ├── media +│   ├── motor_ctl +│   ├── talent_show +│   ├── tracker_generic +│   ├── vision +│   ├── voice +│   └── voice_bot.cpp +├── tests +│   ├── test_functional.sh +│   └── test_manual.sh +└── test.yaml + + ``` ## 9. 许可证 diff --git "a/zh/k3/06-\347\263\273\347\273\237\344\270\216\345\271\263\345\217\260/6.2-\345\244\226\350\256\276\344\270\216\351\251\261\345\212\250/6.2.1-\347\224\265\346\234\272.md" "b/zh/k3/06-\347\263\273\347\273\237\344\270\216\345\271\263\345\217\260/6.2-\345\244\226\350\256\276\344\270\216\351\251\261\345\212\250/6.2.1-\347\224\265\346\234\272.md" index afee473..37cf3b4 100644 --- "a/zh/k3/06-\347\263\273\347\273\237\344\270\216\345\271\263\345\217\260/6.2-\345\244\226\350\256\276\344\270\216\351\251\261\345\212\250/6.2.1-\347\224\265\346\234\272.md" +++ "b/zh/k3/06-\347\263\273\347\273\237\344\270\216\345\271\263\345\217\260/6.2-\345\244\226\350\256\276\344\270\216\351\251\261\345\212\250/6.2.1-\347\224\265\346\234\272.md" @@ -4,8 +4,6 @@ slug: /k3/system-platform/peripherals-drivers/6-2-1-电机 --- - - # 外设与驱动 · motor ## 1. 模块概述 @@ -25,6 +23,7 @@ slug: /k3/system-platform/peripherals-drivers/6-2-1-电机 | `include/motor.h` | 统一的对外 API 头文件 | | `src/motor_core.c` | 电机管理核心逻辑与工厂函数 | | `src/drivers/drv_can_dm/` | 达妙 CAN 电机驱动实现 | + | `src/drivers/drv_canopen_jmc/` | JMC CANOpen 电机驱动实现 | | `src/drivers/drv_ethercat_jmc/` | JMC EtherCAT 电机驱动实现 | | `src/drivers/drv_uart_feetech/` | Feetech UART 舵机驱动实现 | | `src/drivers/drv_uart_xl330/` | Reachy Mini xl330 电机驱动实现 | @@ -230,6 +229,32 @@ test_motor_ecat #默认测试两台电机 **步骤 3**:预期现象。 - 电机使能,进入位置/速度循环模式。 +--- + +### 3.5 【CANOpen 伺服电机测试】 + +**前置**: +1. 硬件:完成 JMC 伺服电机的 CAN 连接,确认总线速率。 + + ![canopen电机接线图](assets/canopen_motor.png) + +2. 软件:开启 CAN 接口(如 `sudo ip link set can0 up type can bitrate 1000000`,请根据驱动器拨码配置修改)。 + +**步骤 1**:运行运动测试。 +```bash +# 默认测试 ID 为 1 的 CANOpen 电机,控制周期 10ms +test_motor_canopen_jmc --motors 1 --cycle 10 -v +``` + +**步骤 2**:关键特性与逻辑(详见 `src/drivers/drv_canopen_jmc/README.md`)。 +- **状态机自动托管**:底层的独立后台线程会自动通过 NMT 和 TPDO/RPDO 报文让电机流转到 `Operation Enabled` 状态。 +- **SDO/PDO 交互**:程序会自动进行同步参数修改测试(向 `0x6083` 写入加速度)并读取校验。**注意:对于 JMC 伺服,`0x6083` 加速度是非标的 2 字节 长度。** +- **自动测试流程**:程序将串行演示 PP (Profile Position) 往复运动、PV (Profile Velocity) 速度巡航,以及 HM (Homing) 自动回零。 + +**步骤 3**:预期现象。 +- 终端打印“参数修改验证成功”。 +- 电机完成一圈正转、回零、一圈反转、回零。接着按恒定速度正反转,最后触发寻零。 + ## 4. 应用开发 @@ -341,6 +366,7 @@ struct motor_state { | 类型 | 电机型号 | 对应驱动名称 | 备注 | | --- | --- | --- | --- | | **CAN** | 达妙 DM-J4310-2EC / DM4310 | `drv_can_dm` | 推荐使用 MIT 模式 | +| **CAN** | JMC CANOpen 伺服系列 | `drv_canopen_jmc` | 状态机自动托管,支持 PP/PV/HM | | **EtherCAT** | JMC IHSS42-EC | `drv_ethercat_jmc` | 集成式步进伺服 | | **UART** | Feetech STS3215 系列 | `drv_uart_feetech` | 智能舵机 | | **UART** | Dynamixel XL330 / XC330 | `drv_uart_xl330` | Reachy Mini 专用,含 python 绑定 | diff --git "a/zh/k3/06-\347\263\273\347\273\237\344\270\216\345\271\263\345\217\260/6.2-\345\244\226\350\256\276\344\270\216\351\251\261\345\212\250/assets/canopen_motor.png" "b/zh/k3/06-\347\263\273\347\273\237\344\270\216\345\271\263\345\217\260/6.2-\345\244\226\350\256\276\344\270\216\351\251\261\345\212\250/assets/canopen_motor.png" new file mode 100644 index 0000000..1b97587 Binary files /dev/null and "b/zh/k3/06-\347\263\273\347\273\237\344\270\216\345\271\263\345\217\260/6.2-\345\244\226\350\256\276\344\270\216\351\251\261\345\212\250/assets/canopen_motor.png" differ