README.md 6.9 KB

guguji_rl

guguji_rlguguji_simulation 仓库里的强化学习训练工程。

为什么单独放在仓库根目录

我把训练代码放在 guguji_ros2_ws 外面,原因是:

  • guguji_ros2_ws/src/guguji_ros2 继续专注于机器人描述、Gazebo 启动和 ROS 2 接口
  • guguji_rl 专注于 Python 强化学习依赖,例如 stable-baselines3gymnasiumtorch
  • 这样后续你更容易分别调试“机器人仿真问题”和“训练算法问题”

当前实现内容

  • configs/:训练配置,支持 CPU / GPU 切换
  • guguji_rl/ros2_interface.py:ROS 2 与 Gazebo 的训练接口
  • guguji_rl/envs/gazebo_biped_env.py:Gymnasium 环境封装
  • guguji_rl/envs/mujoco_biped_env.py:MuJoCo 训练环境
  • guguji_rl/mujoco_model.py:从当前 URDF 动态生成 MuJoCo MJCF
  • guguji_rl/rewards.py:奖励函数
  • scripts/train.py:PPO 训练入口
  • scripts/evaluate_forward_progress.py:评估模型的 delta_x / mean_vx
  • scripts/run_policy.py:把训练好的策略作为在线控制程序持续运行
  • scripts/check_env.py:训练前自检脚本
  • scripts/export_mujoco_xml.py:导出动态生成的 MuJoCo XML
  • configs/mujoco_command_walk_ppo.yaml:前进 / 后退 / 转弯命令条件化训练配置

建议工作流

  1. 先启动 Gazebo 仿真
  2. 再运行 check_env.py 检查 ROS 2 / Gazebo 训练接口
  3. 先跑 balance_ppo.yaml 训练站立平衡
  4. 再跑 forward_transition_ppo.yaml 做轻微前进过渡训练
  5. 再跑 walk_ppo.yaml 训练固定目标前进
  6. 如果平衡和固定前进都比较稳定,再跑 mujoco_command_walk_ppo.yaml 进入“前进 / 后退 / 转弯”的命令条件化训练
  7. walk_ppo.yaml 现在已经内置了 0.18 -> 0.22 -> 0.26 的 walking 课程阶段
  8. 训练出模型后,先用 evaluate_forward_progress.py 看前进效果,再用 run_policy.py 在 ROS 2 系统中持续推理控制
  9. 每轮训练结束后,train.py 会自动输出一次 delta_x / mean_vx 前进评估

安装依赖

建议在独立虚拟环境中安装:

cd /home/corvin/Project/guguji_simulation/guguji_rl
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt

如果要用 GPU,请先确认 torch.cuda.is_available()True,然后在配置文件里把 training.device 设为 cudaauto

现在 requirements.txt 已经包含 mujoco,所以你可以直接按同一套依赖把 MuJoCo 后端也装好。

MuJoCo 快速开始

如果你想直接在 MuJoCo 里做强化学习,不需要先启动 Gazebo。

先做模型导出和环境自检:

cd /home/corvin/Project/guguji_simulation/guguji_rl
source .venv/bin/activate
python scripts/export_mujoco_xml.py --config configs/mujoco_balance_ppo.yaml
python scripts/check_env.py --config configs/mujoco_balance_ppo.yaml --steps 8

然后训练第一轮 MuJoCo 平衡模型:

python scripts/train.py --config configs/mujoco_balance_ppo.yaml --device auto

平衡模型出来后,再继续 MuJoCo walking 课程:

python scripts/train.py \
  --config configs/mujoco_walk_ppo.yaml \
  --init-model outputs/<你的_mujoco_balance_实验目录>/final_model.zip \
  --device auto

如果你已经完成“稳定站立”,下一步建议直接切到命令条件化 walking:

python scripts/train.py \
  --config configs/mujoco_command_walk_ppo.yaml \
  --init-model outputs/<你的_mujoco_balance_实验目录>/final_model.zip \
  --device auto

mujoco_command_walk_ppo.yaml 会把 observation 从原来的 29 维扩展成 32 维,新增:

  • 当前横摆角速度 yaw_rate
  • 当前命令前进速度 cmd_vx
  • 当前命令偏航角速度 cmd_yaw

train.py 现在已经支持兼容 warm start:

  • 如果 observation 维度没变,会完整加载旧模型参数
  • 如果 observation 维度变了,会自动跳过第一层输入权重,只保留后续可兼容的策略权重

MuJoCo 版的详细步骤建议直接看:

  • /home/corvin/Project/guguji_simulation/docs/guguji_mujoco_rl_guide.md

训练时推荐的 Gazebo 启动方式

如果你准备正式开始训练,建议这样启动 Gazebo:

source /opt/ros/humble/setup.bash
cd /home/corvin/Project/guguji_simulation/guguji_ros2_ws
source install/setup.bash
ros2 launch guguji_ros2 gazebo.launch.py gui:=false pause:=true

这样训练环境可以通过 /world/default/control 精确推进仿真步数,更适合强化学习。

在线运行训练好的策略

cd /home/corvin/Project/guguji_simulation/guguji_rl
source .venv/bin/activate
python3 scripts/run_policy.py \
  --config configs/walk_ppo.yaml \
  --model outputs/<你的实验目录>/final_model.zip \
  --deterministic

命令条件化模型回放时,也可以临时固定一条命令来看策略反应:

python3 scripts/run_policy.py \
  --config configs/mujoco_command_walk_ppo.yaml \
  --model outputs/<你的实验目录>/final_model.zip \
  --deterministic \
  --render-human \
  --command-forward 0.18 \
  --command-yaw 0.0

单独评估前进效果

如果你想手动比较两个模型的前进能力,可以直接运行:

cd /home/corvin/Project/guguji_simulation/guguji_rl
source .venv/bin/activate
python3 scripts/evaluate_forward_progress.py \
  --config configs/walk_ppo.yaml \
  --model outputs/<你的实验目录>/final_model.zip

如果是命令条件化模型,也可以临时指定评估命令:

python3 scripts/evaluate_forward_progress.py \
  --config configs/mujoco_command_walk_ppo.yaml \
  --model outputs/<你的实验目录>/final_model.zip \
  --command-forward 0.18 \
  --command-yaw 0.0

评估结果会直接输出每个 episode 的:

  • delta_x
  • mean_vx
  • total_reward

以及最后的平均汇总值,后面调 walking 参数时会很方便。

课程学习训练示例

如果你已经训练出一个平衡模型,建议轻微前进阶段直接在它的基础上继续训练:

cd /home/corvin/Project/guguji_simulation/guguji_rl
source .venv/bin/activate
python3 scripts/train.py \
  --config configs/forward_transition_ppo.yaml \
  --init-model outputs/<你的平衡实验目录>/final_model.zip

对于 walk_ppo.yaml,现在不需要你手动分三次启动训练。 只要直接运行一次:

cd /home/corvin/Project/guguji_simulation/guguji_rl
source .venv/bin/activate
python3 scripts/train.py --config configs/walk_ppo.yaml

train.py 会自动按下面三段课程顺序继续训练,并把每段的模型单独保存到对应子目录:

  • 0.18 m/s
  • 0.22 m/s
  • 0.26 m/s

MuJoCo 版的 mujoco_walk_ppo.yaml 也采用同样的三段课程思路。

如果你切到 mujoco_command_walk_ppo.yaml,课程的重点就不再只是“速度越来越快”,而是:

  • 命令速度范围逐步放开
  • 转弯命令范围逐步放开
  • stand / turn / translate / combined 这几类命令的占比逐步增加