开源桌面机器人 Reachy Mini:六自由度平台控制好不好上手
【免费下载链接】reachy_miniReachy Mini's SDK项目地址: https://gitcode.com/GitHub_Trending/re/reachy_mini
Reachy Mini 是一款开源桌面机器人,头部是六自由度斯图尔特平台,配两根天线和一套 Python SDK。它的主打点就一个:仿真、Lite 版(USB 接电脑)、无线版(Raspberry Pi CM4 独立运行)三套硬件,用的都是同一套 API。
30 秒跑通验证:仿真模式先跑起来
不用接硬件,最短路径是仿真模式。安装 SDK 然后启动 MuJoCo 仿真 daemon:
uv pip install reachy_mini[all,mujoco] reachy-mini-daemon --sim你输入这两条命令后,浏览器打开http://localhost:8000/docs,看到 REST API 文档页说明 daemon 已就绪;同一目录下写个脚本python hello.py,你看到仿真窗口里的机器人动了一下。这就是入门的全部动作:daemon 常驻,SDK 只是它的客户端。
Reachy Mini Control 控制应用的仪表板,开源桌面机器人开源桌面机器人的关节状态、媒体状态都在这里
它到底替你省了什么事
笔记本上跑仿真,不接硬件。以前想试一个转头逻辑,得先装配好机器人、刷好电机固件;现在reachy-mini-daemon --sim起来就能写代码,逻辑验证完再搬到真机。
让机器人追着说话人转头。以前声源定位要自己调 ReSpeaker 麦克风阵列、算 DoA、再做坐标变换;现在 examples/sound_doa.py 已经轮询/api/state/doa接口、把角度转成世界坐标、调look_at转头,通读一遍就能抄到自己的应用里。
AI 代码和机器人分开部署。以前控制代码只能写在机器人那颗性能有限的主板上;现在 SDK 是纯客户端,走 WebSocket 连 daemon,重活(视觉模型、LLM 调用)放你自己的电脑或服务器上,Raspberry Pi 机器人本体只负责硬件 I/O 和安全限位,这就是典型的 Raspberry Pi 机器人部署里"强弱分工"的玩法。
架构一张图看懂:从 SDK 到六自由度关节
Reachy Mini 开源桌面机器人开源桌面机器人的斯图尔特平台组件分解,六根执行器撑起头部的六自由度
整条链路分四层:
src/reachy_mini/reachy_mini.py的ReachyMini类是 SDK 入口,管连接和高层动作(wake_up、goto_target、look_at_world)。src/reachy_mini/io/是通信层,WebSocket 客户端把命令发给 daemon,同时订阅状态广播。src/reachy_mini/daemon/是 FastAPI 服务,跑在连着机器人的机器上,负责命令排队、状态发布、安全检查。daemon/backend/提供三个可替换后端:真机串口、MuJoCo 仿真、mockup,上层对它们一视同仁。
核心调用就这几行,位姿目标传 4x4 矩阵,插值在客户端算好逐帧下发:
from reachy_mini import ReachyMini from reachy_mini.utils import create_head_pose with ReachyMini() as mini: mini.wake_up() mini.goto_target(head=create_head_pose(z=10, roll=15), duration=1.0)head frame 坐标系:goto_target 的开源桌面机器人开源桌面机器人位姿目标都以这个基准为准
三个值得你翻源码的点
三套运动学引擎共用一个接口。src/reachy_mini/kinematics/ 里 analytical、nn(ONNX 推理,含 int8 量化模型)、placo(物理引擎)三个实现都是ik(pose) / fk(joints)签名,daemon 启动参数kinematics_engine切换。这样设计是因为三种方案各占一头:解析解最准但有边界特例,NN 在 Pi 上推理快,placo 能算重力补偿和碰撞检测。你复用时能学到:给算法留同一个接口,上层代码就不怕换实现。
指令流和状态流分开两个通道。SDK 发命令走请求-回执,daemon 的关节角、IMU、媒体状态走独立广播(io/publisher.py+ws_server.py),互不阻塞。原因是 WebSocket 长连接下,如果 UI 每帧都等回执,后台任务会互相卡死。这是做机器人前端时很实用的模式:状态用发布,动作用任务加完成通知。
安全限位长在 API 里,不靠自觉。create_head_pose收毫米和角度,SDK 把请求自动 clamp 到关节限位(head pitch/roll ±40°、body yaw ±160°);越界目标被截断而不是抛异常。翻源码会发现 clamp 逻辑在 daemon 侧而不是客户端,任何客户端都绕不过去。你的项目如果是"上位机发指令、下位机执行"的结构,把安全边界放在服务端而不是 SDK 里,这个思路可以直接搬。
踩坑提醒
连不上机器人。现象:ReachyMini()构造时超时。原因:默认走 mDNS 发现reachy-mini.local,公司网络常禁组播广播。处理:先用find_robots()(src/reachy_mini/utils/discovery.py)看局域网里实际发现了什么,发现不了就构造时显式传host="192.168.x.x", connection_mode="network"。
扫描电机时一个都找不到。现象:Testbench 里 scan 全空,但 daemon 明明正常。原因:扫描要求独占串口,daemon 占着就不行。处理:先停掉 daemon(桌面应用设置里关掉 motor backend)再扫描,扫完重启 daemon 即可,详见 docs/source/troubleshooting/motors_diagnosis.md。
macOS 上仿真段错误。现象:reachy-mini-daemon --sim起来就崩。原因:uv装的 MuJoCo 相关包在 macOS 有兼容问题,libgstpython也可能段错误。处理:按 docs/source/platforms/simulation/get_started.md 的建议,Mac 上用pip而不是uv装 MuJoCo 相关依赖,必要时改用mjpython -m reachy_mini.daemon.app.main --sim启动。
下一步往哪走
路径由轻到重。先跑 examples/ 里三个脚本:sound_doa.py 看声源追踪、look_at_image.py 看图像坐标转头、sequence.py 看动作编排。再翻 src/reachy_mini/kinematics/,对比三套ik/fk实现的输入输出,顺手看 docs/source/SDK/core-concept.md 里的坐标系和限位表。最后尝试接自己的传感器:把任何方位估计接进look_at_world(x, y, z),六自由度平台的运动控制部分就归你调了。
把reachy-mini-daemon --sim拉起来,今天就能让机器人在你屏幕上动一下。
【免费下载链接】reachy_miniReachy Mini's SDK项目地址: https://gitcode.com/GitHub_Trending/re/reachy_mini
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考