turtlebot3-burger_150.png
turtlebot3-waffle-pi_150.png
turtlebot3-arm_150.png
walking-y2_150.png
turbot3-multi_150.png
turbot3-dl-ros1_150.png
turbot3-ai.png
turbot3-dl-ros2_150.png
turbot3-slam_150.png
turbot3-arm_150.png
turtlebot4-lite_150.png
turtlebot4-pro_150.png
turbot4-dl_150.png
turbot4-ai_150.png
aidriving-racebot_150.png
aidriving-autodrive_150.png
turtlebot-arm_150.png
openmanipulator-x_150.png
Home » OpenDuckMini强化学习框架入门教程 » OpenDuckMini强化学习框架入门教程-项目结构

OpenDuckMini强化学习框架入门教程-项目结构

纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号

欢迎加入我们的openduckmini交流群,微信扫描右侧二维码立即进群交流

群二维码

项目结构

  • 进一步理解整个OpenDuckMini强化学习框架项目结构

目录树

.
├── pyproject.toml           # 项目配置与依赖声明
├── README.md                # 项目说明文档
├── playground/              # 核心代码目录
│   ├── common/              # 共享模块
│   │   ├── export_onnx.py   # ONNX 模型导出
│   │   ├── onnx_infer.py    # ONNX 推理接口
│   │   ├── poly_reference_motion.py     # 参考运动生成 (JAX)
│   │   ├── poly_reference_motion_numpy.py  # 参考运动生成 (NumPy)
│   │   ├── randomize.py     # 域随机化
│   │   ├── rewards.py       # 通用奖励函数
│   │   ├── rewards_numpy.py # 奖励函数 (NumPy 版本)
│   │   ├── runner.py        # 训练 Runner 基类
│   │   └── utils.py         # 工具函数
│   └── open_duck_mini_v2/   # Open Duck Mini V2 机器人特定代码
│       ├── base.py          # 基础环境 (OpenDuckMiniV2Env)
│       ├── constants.py     # 常量定义
│       ├── custom_rewards.py        # 机器人特定奖励 (JAX)
│       ├── custom_rewards_numpy.py  # 机器人特定奖励 (NumPy)
│       ├── joystick.py      # 摇杆控制环境
│       ├── mujoco_infer.py  # MuJoCo 推理主入口
│       ├── mujoco_infer_base.py     # MuJoCo 推理基类
│       ├── ref_motion_viewer.py     # 参考运动可视化
│       ├── runner.py        # 机器人特定训练 Runner
│       ├── standing.py      # 站立任务环境
│       ├── data/            # 数据目录
│       │   └── polynomial_coefficients.pkl  # 参考运动多项式系数
│       └── xmls/            # MuJoCo XML 模型文件
│           ├── assets/      # 3D 网格资源 (STL 文件)
│           ├── open_duck_mini_v2.xml                # 机器人模型定义
│           ├── open_duck_mini_v2_backlash.xml       # 含回差建模的机器人模型
│           ├── open_duck_mini_v2_no_head.xml        # 无头部的机器人模型
│           ├── scene_flat_terrain.xml               # 平坦地形场景
│           ├── scene_flat_terrain_backlash.xml      # 平坦地形 + 回差
│           ├── scene_rough_terrain.xml              # 粗糙地形场景
│           ├── scene_rough_terrain_backlash.xml     # 粗糙地形 + 回差
│           ├── scene.xml                            # 默认场景
│           ├── sensors.xml                          # 传感器定义
│           └── joints_properties.xml                # 关节属性定义

各文件作用

共享模块 (playground/common/)

文件 类/函数 作用
runner.py BaseRunner 训练管线的抽象基类,定义检查点保存、日志记录和训练循环
rewards.py 奖励函数集 通用奖励组件,如速度跟踪、力矩惩罚、姿态保持等
randomize.py domain_randomize() 域随机化函数,在训练过程中变化物理参数
export_onnx.py export_onnx() 将 JAX 训练参数转换为 TensorFlow 模型,再导出为 ONNX
onnx_infer.py OnnxInfer ONNX 模型的轻量级推理封装
poly_reference_motion.py PolyReferenceMotion 基于多项式的参考运动生成器(JAX 版本,用于训练)
poly_reference_motion_numpy.py 参考运动生成器的 NumPy 版本(用于推理)
utils.py LowPassActionFilter 动作低通滤波器,平滑控制信号

机器人特定代码 (playground/open_duck_mini_v2/)

文件 类/函数 作用
base.py OpenDuckMiniV2Env 机器人基础环境类,处理 MuJoCo 模型加载、关节管理、传感器读取
joystick.py Joystick 摇杆运动环境,实现速度跟踪和基于摇杆命令的运动控制
standing.py Standing 站立任务环境,专注于稳定站立和平衡
runner.py OpenDuckMiniV2Runner 机器人特定的训练 Runner,整合环境、随机化和训练配置
mujoco_infer.py MjInfer MuJoCo 实时推理的主入口,处理键盘输入
mujoco_infer_base.py MJInferBase 推理基类,加载模型并处理关节/传感器查询
ref_motion_viewer.py N/A 参考运动的 3D 可视化工具
constants.py 常量 传感器名称、路径、关节顺序等全局常量
custom_rewards.py reward_imitation 模仿学习奖励函数(JAX,用于训练)

XML 模型文件 (xmls/)

文件 作用
open_duck_mini_v2.xml 完整的机器人 MJCF 模型,包含所有关节、几何体和执行器
open_duck_mini_v2_backlash.xml 含回差(backlash)虚拟关节的机器人模型
sensors.xml 传感器定义片段(被主 XML include)
joints_properties.xml 关节属性定义片段,如 STS3215 舵机参数和回差属性
scene_*.xml 场景文件,包含地形定义和机器人模型引用

架构分层

┌─────────────────────────────────────────────────┐
│                  应用层                           │
│  runner.py      mujoco_infer.py   ref_motion_viewer.py │
└──────────────────────┬──────────────────────────┘
                       │
┌──────────────────────┴──────────────────────────┐
│                  环境层                           │
│  joystick.py   standing.py                      │
│  (任务特定逻辑、奖励计算)                         │
└──────────────────────┬──────────────────────────┘
                       │
┌──────────────────────┴──────────────────────────┐
│                  基础层                           │
│  base.py → OpenDuckMiniV2Env                    │
│  (MJCF 加载、关节管理、传感器读取)                │
└──────────────────────┬──────────────────────────┘
                       │
┌──────────────────────┴──────────────────────────┐
│                  共享层                           │
│  rewards.py  randomize.py  onnx_infer.py        │
│  export_onnx.py  poly_reference_motion.py       │
└─────────────────────────────────────────────────┘

添加新机器人的步骤

该框架设计为可扩展的。要添加新的机器人:

  1. 创建机器人目录:在 playground/ 下创建以机器人命名的目录(可以复制 open_duck_mini_v2 目录作为起点)

  2. 编辑 base.py

    • 重命名类以匹配新机器人名称
    • 调整模型加载逻辑
  3. 编辑 constants.py

    • 指定关节名称、几何体名称、传感器名称
    • 在 MJCF 中可能需要添加 site、命名 body/geom 并配置传感器
  4. 添加 MJCF 资源

    • xmls/ 目录中添加机器人的 XML 模型文件和 3D 网格资源
    • 注意:目前关节顺序等部分值仍是硬编码的,后续将改进
  5. 配置奖励:编辑 joystick.py 选择所需的奖励组件

  6. 配置训练:编辑 runner.py 设置训练参数

  7. 安装 Open Duck Playground 包

cd Open_Duck_Playground
uv sync

纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号

欢迎加入我们的openduckmini交流群,微信扫描右侧二维码立即进群交流

群二维码

标签: OpenDuckMini强化学习框架