首页 / 资讯中心 / 文章详情

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

Microduck自定义动作开发:继承Move类,三步为双足机器人添加新技能 ★ FEATURED ARTICLE
【免费下载链接】Microduck-build-tutorialA 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从当前姿势平滑过渡到动作起始姿势完成后置ACTIVEACTIVE动作执行中step每个控制周期50 Hz计算目标关节角STOPPING按键再次按下on_stop平滑回到中立姿势完成后置INACTIVE调度器 microduck/src/scheduler.py 以 50 Hz 的频率运行主循环每 tick 会由Observer读取 IMU 姿态与全部舵机的位置/速度打包成Observation遍历所有已注册动作根据状态分发调用on_start/step/on_stop把动作写入MotorCommand的目标角度批量下发到舵机并执行过流保护总电流连续超阈值即自动断电阈值见 microduck/src/constants.py 中的OVERCURRENT_CUTOFF_A。也就是说你的动作类只需要回答一个问题这一 tick各关节应该转到哪个角度把它写进command.target_angles即可。二、第一步写一个继承 Move 的动作类在microduck/src/moves/目录下新建文件即可。以点头动作为例核心结构如下完整实现可参考头颈旋转动作 microduck/src/moves/rotate_head.pyfrom 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里提供陀螺仪、投影重力向量、各关节位置与速度做需要平衡补偿的动作时直接读取即可。三、第二步把动作注册进 SchedulerScheduler构造时接收一个moves字典动作名就是之后触发它的标签。默认注册如下见 microduck/src/scheduler.pyregistered_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-tutorialA practical hardware and software setup for a compact RL-powered biped robot.项目地址https://gitcode.com/gh_mirrors/mi/Microduck-build-tutorial点击查看免费下载相关推荐如何为OpenDroid添加自定义Action三步实现新设备能力如何为OpenDroid添加自定义Action三步实现新设备能力 OpenDroid 是一款开源的自主 Android 智能体AI Agent能通过本地一文读懂paddlepaddle/arabic_PP-OCRv5_mobile_rec_safetensors移动端阿拉伯文识别的终极解决方案一文读懂paddlepaddle/arabic_PP OCRv5_mobile_rec_safetensors移动端阿拉伯文识别的终极解决方案 在当今数字化时如何用好 Element PlusVue 3 UI 组件库完整上手指南含 5 个常见坑如何用好 Element PlusVue 3 UI 组件库完整上手指南含 5 个常见坑 Element Plus 是一套基于 Vue 3 的企业级 UI前端UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站