利用legged_gym实现宇树GO2机器人强化学习环境配置与训练

利用legged_gym实现宇树GO2机器人强化学习环境配置与训练 1. 宇树GO2机器人强化学习环境搭建最近在研究四足机器人强化学习时发现宇树科技的GO2是个不错的实验平台。legged_gym作为开源的机器人强化学习框架可以很好地支持GO2的训练。下面我就来分享下如何从零开始搭建这个环境。首先需要准备GO2的URDF模型文件。URDF是机器人描述文件相当于机器人的数字身份证包含了机器人的关节、连杆、外观等所有物理信息。宇树官方在GitHub上提供了GO2的URDF文件我们可以直接克隆他们的仓库git clone https://github.com/unitreerobotics/unitree_rl_gym.git克隆完成后找到resources/robots/go2目录把这个文件夹整个复制到legged_gym/resources/robots/目录下。这里有个小技巧建议先检查下legged_gym是否已经安装好如果没有安装可以先按照官方文档安装legged_gym框架。2. 配置GO2的训练参数有了URDF文件后接下来要配置训练参数。在legged_gym/legged_gym/envs/目录下新建一个go2文件夹然后创建go2_config.py配置文件。这个文件决定了机器人如何与环境交互、如何被控制、以及训练的目标等关键参数。配置文件中最重要的是初始状态设置。对于GO2来说站立时的初始高度设为0.42米比较合适。关节角度也需要仔细调整特别是髋关节和膝关节的角度这关系到机器人能否稳定站立。下面是一个经过测试的配置示例class GO2RoughCfg(LeggedRobotCfg): class init_state(LeggedRobotCfg.init_state): pos [0.0, 0.0, 0.42] # x,y,z [m] default_joint_angles { FL_hip_joint: 0.1, RL_hip_joint: 0.1, FR_hip_joint: -0.1, RR_hip_joint: -0.1, FL_thigh_joint: 0.8, RL_thigh_joint: 1., FR_thigh_joint: 0.8, RR_thigh_joint: 1., FL_calf_joint: -1.5, RL_calf_joint: -1.5, FR_calf_joint: -1.5, RR_calf_joint: -1.5, }控制参数部分需要设置PD控制的刚度和阻尼。GO2的关节比较灵活建议开始时把刚度设为20Nm/rad阻尼设为0.5Nm*s/rad。动作缩放系数(action_scale)设为0.25可以让学习过程更稳定。3. 注册GO2环境配置好参数后需要在legged_gym框架中注册GO2环境。打开legged_gym/legged_gym/envs/init.py文件在适当位置添加以下代码from .go2.go2_config import GO2RoughCfg, GO2RoughCfgPPO # 在task_registry.register部分添加 task_registry.register(go2, LeggedRobot, GO2RoughCfg(), GO2RoughCfgPPO())这一步相当于告诉legged_gym框架现在有个新同学GO2要加入训练这是它的基本信息。注册完成后就可以像使用框架内置的其他机器人一样使用GO2了。4. 启动训练一切准备就绪后就可以开始训练了。legged_gym使用PPO算法进行训练这是目前强化学习中最流行的算法之一。启动训练的命令如下python legged_gym/scripts/train.py --taskgo2 --num_env1000这里的num_env参数表示并行环境数量设为1000可以在我的RTX 3090上跑满显存。根据你的显卡性能可以适当调整这个值。如果显存不足可以减小这个数字如果有更强的显卡可以增大以加快训练速度。训练过程中建议使用Tensorboard来监控训练进度tensorboard --logdirruns这样可以在浏览器中实时查看各种训练指标包括回报值、步长、接触力等。我通常会让模型训练至少2000万步这大概需要12小时左右。5. 测试训练结果训练完成后可以使用play.py脚本来测试训练好的模型python legged_gym/scripts/play.py --taskgo2这个脚本会加载最新训练的模型并在可视化环境中展示机器人的表现。第一次运行时你可能会发现机器人动作不太协调这是正常现象。可以通过调整奖励函数中的各项权重来改进。比如增加base_height_target可以让机器人更倾向于保持一定高度调整torques的权重可以控制关节力矩的平滑程度。这些参数需要根据具体需求反复调试。6. 常见问题排查在实际操作中可能会遇到各种问题。这里分享几个我踩过的坑首先是URDF文件版本问题。有时候官方仓库的URDF文件会更新可能导致与legged_gym不兼容。如果遇到奇怪的碰撞检测问题可以检查URDF中的碰撞体设置。其次是训练初期机器人总是摔倒。这可能是因为初始状态设置不合理可以尝试降低初始高度或者减小动作缩放系数让机器人的动作幅度更小。还有一个常见问题是训练停滞。如果发现回报值长时间不增长可以尝试调整学习率或增大并行环境数量。有时候换个随机种子也能解决问题。7. 进阶调优技巧当基本训练完成后可以尝试一些进阶技巧来提升性能。比如课程学习从简单地形开始逐步增加难度域随机化随机化地面摩擦系数、机器人质量等参数增强泛化能力多任务学习同时训练行走、奔跑、转向等多种技能这些方法可以在legged_gym的配置文件中实现。例如要添加域随机化可以在配置类中添加class domain_rand(LeggedRobotCfg.domain_rand): randomize_friction True friction_range [0.5, 1.25] randomize_base_mass True added_mass_range [-1., 1.]通过这些技巧可以让GO2在各种复杂环境下都表现稳定。我最高记录是训练出一个能在斜坡、楼梯、碎石路等各种地形自由行走的模型。