news 2026/10/15 18:56:39

Microduck自定义动作开发:继承Move类,三步为双足机器人添加新技能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Microduck自定义动作开发:继承Move类,三步为双足机器人添加新技能

【免费下载链接】Microduck-build-tutorial

A practical hardware and software setup for a compact RL-powered biped robot.

项目地址:https://gitcode.com/gh_mirrors/mi/Microduck-build-tutorial
点击查看免费下载

Microduck 是一个基于树莓派与 Dynamixel 舵机的紧凑型双足机器人项目,内置强化学习行走策略。本教程讲解 Microduck 自定义动作开发方法:通过继承Move基类,三步即可为双足机器人添加点头、深蹲等全新动作技能,并用键盘按键或手柄按钮一键触发。

一、先看懂 Move 基类:所有动作背后的状态机

在 microduck/src/moves/move.py 中,Move是所有运动行为的抽象基类。每个动作的生命周期由四态状态机MoveState驱动:

状态触发时机对应回调你的工作
INACTIVE未激活—等待用户按下按键
STARTING按键按下后on_start从当前姿势平滑过渡到动作起始姿势,完成后置ACTIVE
ACTIVE动作执行中step每个控制周期(50 Hz)计算目标关节角
STOPPING按键再次按下on_stop平滑回到中立姿势,完成后置INACTIVE

调度器 microduck/src/scheduler.py 以 50 Hz 的频率运行主循环,每 tick 会:

  1. 由Observer读取 IMU 姿态与全部舵机的位置/速度,打包成Observation;
  2. 遍历所有已注册动作,根据状态分发调用on_start/step/on_stop;
  3. 把动作写入MotorCommand的目标角度批量下发到舵机,并执行过流保护(总电流连续超阈值即自动断电,阈值见 microduck/src/constants.py 中的OVERCURRENT_CUTOFF_A)。

也就是说,你的动作类只需要回答一个问题:"这一 tick,各关节应该转到哪个角度?"把它写进command.target_angles即可。

二、第一步:写一个继承 Move 的动作类

在microduck/src/moves/目录下新建文件即可。以"点头"动作为例,核心结构如下(完整实现可参考头颈旋转动作 microduck/src/moves/rotate_head.py):

from moves.move import Move, MotorCommand, MoveState class NodMove(Move): def on_start(self, obs, command): # 用 lerp 在 0.5 秒内把头部平滑过渡到起始角,然后进入 ACTIVE ... def step(self, obs, command): # 每个 tick 生成正弦点头目标角(弧度) command.target_angles["head_pitch"] = 0.3 * math.sin(2 * math.pi * 0.3 * t) def on_stop(self, obs, command): # 平滑回到 NEUTRAL_POSE,完成后置 state = MoveState.INACTIVE ...

三个要点:

  • 单位是弧度:target_angles以关节名为键(键名与 microduck/src/constants.py 中MOTOR_TO_ID一致),值为目标角度;中立站姿定义在NEUTRAL_POSE中,MotorCommand初始化时会自动填充它,未覆盖的关节保持不动;
  • 平滑过渡:on_start/on_stop中做 lerp(线性插值)过渡,是现有动作(点头、深蹲)的共同套路,避免关节跳变;
  • 善用观测数据:obs.robot_state里提供陀螺仪、投影重力向量、各关节位置与速度,做需要平衡补偿的动作时直接读取即可。

三、第二步:把动作注册进 Scheduler

Scheduler构造时接收一个moves字典,动作名就是之后触发它的"标签"。默认注册如下(见 microduck/src/scheduler.py):

registered_moves = { "head": RotateHeadMove(), "squat": SquatMove(), "walk": WalkMove(), }

在入口 microduck/src/main.py 中,把新动作加入Scheduler的moves参数即可。若动作需要加载较重资源(如行走策略加载 ONNX 模型),可覆写preload()方法——main.py会在启动控制循环前统一调用所有动作的preload()。

四、第三步:绑定按键,用键盘或手柄触发

输入源(键盘 microduck/src/input/keyboard_input.py 或手柄 microduck/src/input/gamepad_input.py)通过一张"键 → 动作名"映射表来开关动作。在main.py中:

MOVE_KEYS = {"v": "walk"} # 键盘:按 v 切换行走 GAMEPAD_BUTTON_MOVES = {"A": "walk"} # 手柄:按 A 切换行走

只需追加一行映射,例如{"n": "nod"},运行后终端会打印按键帮助。触发逻辑非常简单——同一按键再按一次即停止,调度器会自动让动作走STOPPING流程回到中立姿势。除触发动作外,还可用方向键调节行走速度、i切换 IMU 显示、q紧急停止。

五、实用技巧与避坑指南

  • 先仿真验证:项目提供 MuJoCo 仿真入口(microduck/Makefile 中的sim目标,对应 microduck/src/sim/sim_main.py),新动作先在仿真里看效果,再上实机,避免不必要的摔倒风险;
  • 过渡时间要够长:lerp_duration过短会造成关节冲击;深蹲动作 microduck/src/moves/squat.py 用了 1 秒过渡,可供参考;
  • 别忘记安全网:调度器内置过流保护,若动作让总电流持续超限会自动切断全部舵机扭矩——动作设计应尽量小步幅、低速试错;
  • 调试工具:microduck/src/debug/下提供了各动作的日志绘图脚本(如 plot_squat_log.py),配合各动作文件顶部的LOGGING = False开关,可导出关节角度曲线分析动作质量。

六、相关文件速查

文件说明
microduck/src/moves/move.pyMove基类与状态机定义
microduck/src/moves/rotate_head.py最简单的动作范例:正弦头颈旋转
microduck/src/moves/squat.py使用 placo 逆运动学的深蹲动作
microduck/src/moves/walk.py加载 ONNX 强化学习策略的行走动作
microduck/src/scheduler.py50 Hz 控制主循环与动作分发
microduck/src/main.py动作注册与按键映射入口
microduck/docs/usage.md键盘/手柄操作说明

按照"写类 → 注册 → 绑键"三步,一个完全属于你的 Microduck 自定义动作就开发完成了。

【免费下载链接】Microduck-build-tutorial

A practical hardware and software setup for a compact RL-powered biped robot.

项目地址:https://gitcode.com/gh_mirrors/mi/Microduck-build-tutorial
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 18:56:07

STM32 HAL库下0.96寸OLED驱动移植:I2C与SPI实战避坑指南

简介:这份资源是江协科技0.96寸OLED驱动函数的HAL库移植版本,面向使用STM32微控制器进行嵌入式显示开发的初学者与进阶开发者,帮助解决OLED屏在HAL库环境下初始化、通信与绘图操作繁琐的问题。资源包共151个文件,以c与h源码文件为…

作者头像 李华
网站建设 2026/10/15 18:56:02

如何快速掌握 smc.peering.tw:内置新手引导之旅完整拆解

【免费下载链接】smc.peering.tw A dashboard that shows the current status of submarine cables that connected Taiwan to the world 项目地址: https://gitcode.com/gh_mirrors/sm/smc.peering.tw 点击查看 免费下载 smc.peering.tw 是一个展示台湾海底电缆&a…

作者头像 李华
网站建设 2026/10/15 18:55:10

PCF8591 DA转换实战:从控制字节到精度负载避坑指南

简介:这份资源围绕PCF8591芯片的DA转换展开,面向正在学习单片机与嵌入式外设驱动的初学者及课程设计者,帮助解决数字信号转模拟电压的编程与调试问题。压缩包共15个文件,约31KB,包含C源码、Keil工程文件(uv…

作者头像 李华
网站建设 2026/10/15 18:51:35

前端刷题网站怎么选?从手写代码到工程思维的实战训练指南

我一直觉得,前端这行当,嘴上功夫和手上功夫是两码事。你可以在面试的时候把闭包、事件循环、虚拟 DOM 讲得头头是道,但真给你一个页面,让你在半小时内把布局还原、把交互补全、把性能瓶颈揪出来,很多人当场就露馅了。原…

作者头像 李华