5.开源项目Bi-DexHands代码框架
摘要:Bi-DexHands是一个基于强化学习的双手操作项目,采用模块化架构设计。核心包含:1)训练入口train.py负责参数解析和环境初始化;2)tasks模块定义物理仿真环境,实现任务类基础方法;3)algorithms模块实现PPO、MAPPO等算法;4)utils提供辅助工具;5)cfg目录存放Hydra格式的配置参数。项目特色是支持多智能体强化学习,通过GPU并行环境实现高效训练,包含
其代码框架主要可以分为以下几个核心板块:入口与配置、环境定义 (Tasks)、算法实现 (Algorithms) 和 工具类 (Utils)
代码结构框架
Bi-DexHands/
├── assets/ # [关键] 存放机器人和物体的模型文件 (URDF, MJCF, Meshes)
├── bidexhands/
│ ├── algorithms/ # 存放RL/MARL算法的实现 (如 ma_ppo, happo 等)
│ ├── tasks/ # [核心] 环境定义的源代码
│ │ ├── shadow_hand_over.py # 具体任务:例如双手交接
│ │ ├── shadow_hand_catch.py # 具体任务:例如接球
│ │ ├── base/ # 基础类,定义了通用的仿真接口
│ │ └── ...
│ └── utils/ # 工具脚本 (解析配置、处理数据等)
├── cfg/ # [关键] 配置文件目录
│ ├── config.yaml # 总入口配置
│ ├── task/ # 环境的具体参数 (重力、物理参数、奖励权重)
│ │ ├── ShadowHandOver.yaml
│ │ └── ...
│ └── train/ # 训练算法的超参数 (学习率、Batch size等)
│ ├── ShadowHandOverPPO.yaml
│ └── ...
├── train.py # 训练入口脚本
└── ...
核心模块详解
A. 入口脚本 (train.py)
这是整个项目的启动点。它的主要职责是:
-
解析参数:利用 Hydra 读取 cfg/ 目录下的配置文件(包括任务配置、算法配置、训练参数)。
-
初始化环境:根据配置名称调用 tasks/ 中的对应环境类。
-
初始化算法/Runner:实例化 PPO 或 MAPPO 等算法的 Runner。
-
启动循环:开始训练(Training)或评估(Evaluation)循环。
B. 环境定义 (bi-dexhands/tasks/) —— 最核心部分
这里定义了物理仿真的具体逻辑。所有的任务类通常继承自一个基类(如 BaseTask 或 Isaac Gym 的 VecTask)。
-
基类 (base/vec_task.py):处理与 Isaac Gym 引擎的底层交互,如创建仿真场景、分配 GPU 缓冲区。
-
具体任务 (e.g., shadow_hand_over.py, shadow_hand_catch.py):
每个任务文件包含一个类(例如 ShadowHandOver),必须实现以下关键方法:-
create_sim(): 加载资产(Shadow Hand, 物体),设置物理属性,创建数千个并行的环境实例 (Envs)。
-
reset_idx(env_ids): 重置指定环境的状态(当任务失败或超时时)。
-
pre_physics_step(actions): 在物理引擎步进前,将神经网络输出的动作应用到电机上。
-
post_physics_step(): 物理引擎步进后,计算观测 (Observation)、奖励 (Reward) 和 结束信号 (Done)。
-
compute_reward(): 这是设计的难点。定义了引导机器人完成任务的奖励函数(如距离惩罚、姿态奖励等)。
-
compute_observations(): 收集传感器数据(关节角度、物体位置)并填充到 Tensor 中。
-
C. 算法实现 (bi-dexhands/algorithms/)
Bi-DexHands 的一大特色是原生支持 MARL(多智能体强化学习)。
-
r_mappo/ (Recurrent MAPPO): 这是一个主要使用的算法目录。
-
r_mappo.py: 实现 PPO 更新逻辑(计算 Loss,Clip,反向传播)。
-
algorithm/rMAPPOPolicy.py: 定义 Actor 和 Critic 网络结构。
-
-
utils/ (Algorithm Utils):
-
act.py: 动作分布采样(Gaussian, Beta 等)。
-
buffer.py: 经验回放池 (Replay Buffer),用于存储 (obs, act, reward, done)。
-
D. 配置文件 (bi-dexhands/cfg/)
项目使用 Hydra 进行配置管理,结构非常灵活:
-
config.yaml: 总入口,指定默认的任务和算法。
-
task/: 存放具体任务的参数(如 ShadowHandOver.yaml),包括:
-
物理参数(重力、摩擦力)。
-
环境参数(最大步数、重置阈值)。
-
观测空间和动作空间的维度。
-
-
train/: 存放算法超参数(如 ShadowHandOverPPO.yaml),包括:
-
学习率 (lr)、Batch Size、Gamma、Clip range。
-
网络层数 (Hidden layers)。
-
数据流与执行逻辑 (Execution Flow)
当你运行 python train.py task=ShadowHandOver 时,系统内部流程如下:
-
环境构建 (Environment Build):
-
Isaac Gym 创建物理场景。
-
PyTorch 张量被绑定到仿真器的GPU显存上(实现 Zero-copy 高效数据传输)。
-
-
交互循环 (Rollout Loop):
-
Get Action: Agent 网络根据当前的 obs_buf 计算 action。
-
Step: 动作传入环境,物理引擎运行一步。
-
Get Data: 环境返回新的 obs, reward, done。
-
Store: 数据存入 ReplayBuffer。
-
-
训练更新 (Training Update):
-
当 Buffer 存满一定步数后,计算优势函数 (GAE)。
-
从 Buffer 中采样 Batch,计算 Policy Loss 和 Value Loss。
-
更新神经网络权重。
-
项目地址
后续大概率会继续更新的

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)