跳到主要内容
版本:V2.0.5.x

基于强化学习的运控示例-V1.2.1


说明

参考项目:

  • https://github.com/UBTECH-Robot/TienKung-Lab

    该代码库是一个基于强化学习的运动控制系统,专为全尺寸人形机器人天工(TienKung)设计。它将AMP风格的奖励与周期性步态奖励相结合,促进了自然、稳定和高效的行走和跑步行为。

    该代码库建立在IsaacLab上,支持Sim2Sim迁移到MuJoCo,并具有模块化架构,便于无缝定制和扩展。此外,它还集成了基于光线投射的传感器,以增强感知能力,能够精确地与环境进行交互和避障。该框架还已经在真实的天工机器人上成功验证。

  • https://github.com/UBTECH-Robot/Deploy_Tienkung

    该代码库下有两个目录,rl_control_newx_humanoid_rl_sdk

    其中的 rl_control_new 是基于ROS2的人形机器人强化学习控制库,用于控制天工系列人形机器人。该库使用强化学习算法实现机器人运动控制,支持仿真和真实机器人环境。

    另一个 x_humanoid_rl_sdk 是天工人形机器人强化学习控制SDK,包含状态机实现、机器人接口和控制算法。

此指引文档在参考项目基础上,解决了一些编译及配置问题。

  • 适配机型:天工行者(Lite)。天工无界(Plus)及天工无疆(Pro)版本将在26年Q1支持
  • 操作系统:ubuntu 22.04
  • 系统架构:x86
  • 推荐GPU:Nvidia RTX 30系列及以上,显存16G及以上
  • 最低系统配置:磁盘 512G ,内存16G
  • 如果git等资源拉取过慢,建议使用代理

软件包

TienKung-Lab.zipros_lite_src.zip 两个包下载后放到 ~/ 目录下。

~/                              # 软件包
├── TienKung-Lab.zip # 步态训练包
├── ros_lite_src.zip # 步态部署包

一、基础软件

1、CUDA

安装CUDA 。

建议正确安装最新Nvidia驱动后,使用 nvidia-smi查看驱动配套的CUDA版本,在 https://developer.nvidia.com/cuda-toolkit-archive 中选择对应的CUDA Toolkit下载。这里以12.8版本CUDA为例。

cd ~/
wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_570.86.10_linux.run
sudo sh cuda_12.8.0_570.86.10_linux.run

# 设置环境变量 ~/.bashrc
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
# 立即生效
source ~/.bashrc

2、Conda

安装miniconda,一直选择yes完成安装。

cd ~/
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash ./Miniconda3-latest-Linux-x86_64.sh

安装完毕后检查.bashrc文件内有无设置conda环境变量。

cat ~/.bashrc

3、IsaacSim

安装isaacsim 4.5。下载并解压软件包后,创建env_isaacsim环境,进入env_isaacsim环境后安装。

参考链接:https://docs.isaacsim.omniverse.nvidia.com/4.5.0/installation/install_workstation.html

mkdir ~/isaacsimdir
cd ~/isaacsimdir
wget https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone-4.5.0-linux-x86_64.zip
unzip "isaac-sim-standalone-4.5.0-linux-x86_64.zip" -d ~/isaacsimdir
conda create -n env_isaacsim python=3.10
conda activate env_isaacsim
./python.sh -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
./post_install.sh
./isaac-sim.selector.sh
conda deactivate

4、IsaacLab

安装IsaacLab 2.1.0。下载并解压软件包后,创建env_isaaclab环境,进入env_isaaclab环境后安装。

参考链接:https://isaac-sim.github.io/IsaacLab/release/2.1.0/source/setup/installation/binaries_installation.html#installing-isaac-lab

可从Installing Isaac Lab部分开始参考。

sudo apt install git
mkdir ~/isaaclabdir
cd ~/isaaclabdir
wget https://github.com/isaac-sim/IsaacLab/archive/refs/heads/release/2.1.0.zip
unzip "2.1.0.zip" -d ~/isaaclabdir
cd IsaacLab-release-2.1.0
ln -s ~/isaacsimdir ~/isaaclabdir/IsaacLab-release-2.1.0/_isaac_sim
~/isaaclabdir/IsaacLab-release-2.1.0/isaaclab.sh --conda env_isaaclab
conda activate env_isaaclab
sudo apt install cmake build-essential
~/isaaclabdir/IsaacLab-release-2.1.0/isaaclab.sh --install
conda deactivate
注意
  • 执行 ./isaaclab.sh --install 时如果提示权限不足,很可能是 _isaac_sim 目录对应的链接目录没有权限,可尝试修改。
  • 如果提示pip包冲突,可先不理会,等待 --install 执行完后直接尝试后续的步骤,看是否可正常开始训练。
注意

对于50系列GPU,请使用最新的PyTorch nightly版本,而不是Isaac Sim自带的PyTorch 2.5.1:注意链接中的cu128要与自己的CUDA配套。

~/isaaclabdir/IsaacLab-release-2.1.0/isaaclab.sh -p -m pip install --upgrade --pre torch --index-url https://download.pytorch.org/whl/nightly/cu128

二、步态训练及部署

1、解压代码

cd ~/
unzip TienKung-Lab.zip

2、安装环境

注意
  1. 安装与CUDA配套的pytorch版本。例如可以到 https://mirrors.nju.edu.cn/pytorch/whl/ 查看对应版本,然后更新到对应pip指令中。注意链接中的【cu128】要与自己的CUDA版本配套。

  2. 后续命令都需要进入 conda activate env_isaaclab 环境才能正常运行。

conda activate env_isaaclab
cd ~/TienKung-Lab
pip install -e .
pip install -U --index-url https://mirrors.nju.edu.cn/pytorch/whl/cu128/ torchvision==0.24.0 torch==2.9.0
pip uninstall -y rsl-rl-lib || true
cd ~/TienKung-Lab/rsl_rl
pip install -e .
pip install onnxscript

3、训练

使用 tienkung/datasets/motion_amp_expert 中的 AMP 参考运动数据来训练策略。

信息

AMP(Adversarial Motion Priors)最早由学术界提出

在使用欠约束奖励函数训练高维度的仿真智能体时,往往会导致智能体学到在物理上不可行的策略,而这些策略在部署到真实世界时是无效的。为缓解这类不自然的行为,强化学习研究者通常会设计复杂的奖励函数,以鼓励物理上合理的行为。然而,手工设计奖励往往需要繁琐且劳动密集的调参过程,并且这类奖励函数难以在不同平台和任务之间泛化。学术界提出,用从动作捕捉示例数据集中学习得到的“风格奖励(style rewards)”来替代复杂的奖励函数。学习得到的风格奖励可以与任意任务奖励相结合,从而训练出在完成任务的同时,采用自然运动策略的控制策略。这些自然的运动策略同样有助于向真实世界的迁移。

信息

所以这里的AMP 参考运动数据到底是什么?它实际上是一段“动作很像人的参考运动轨迹”。

普通强化学习,只能设定类似如下的奖励:

  • 不摔倒 +1
  • 速度接近目标 +1
  • 能量小 +1

结果通常会如下:

  • 步态奇怪、抖动、僵硬
  • 像“机械怪物” 但数值上完全合法。

原因是奖励函数难以完整描述“人类的自然动作”。而将这里的AMP 参考运动数据是提供给算法,则可在训练时判定:“这个动作和给出的参考运动数据相似度如何?”,进而给出奖励,完成训练。

参数:

  • --task 任务类别,有walk、run
  • --headless 不显示界面训练
  • --num_envs 场景中机器人数量
  • --max_iterations 训练迭代次数,默认值为50000

开始训练

cd ~/TienKung-Lab
python legged_lab/scripts/train.py --task=walk --headless --logger=tensorboard --num_envs=2048
注意
  • 如果使用默认的训练迭代50000次,在RTX4090显卡上,大概需要18个小时。
  • 目前软件包支持天工行者(Lite),天工无界(Plus)及天工无疆(Pro)会在26年Q1添加。

模型位置在:~/TienKung-Lab/logs/walk/xxxx/model_xxx.pt,这里的pt文件是模型,xxxx 是训练开始时候以时间戳为名的文件夹,例如:

  • ~/TienKung-Lab/logs/walk/202x-01-12_05-07-14/model_100.pt
  • ~/TienKung-Lab/logs/walk/202x-01-12_05-07-14/model_49900.pt

查看训练情况

可以打开一个新终端,查看训练情况:

conda activate env_isaaclab
cd ~/TienKung-Lab
tensorboard --logdir=logs/walk

4、恢复训练

cd ~/TienKung-Lab
mkdir ~/TienKung-Lab/logs/walk/pretrained
# Copy the PT file to folder【pretrained】
python legged_lab/scripts/train.py --task=walk --headless --logger=tensorboard --num_envs=2048 --resume=True --load_run=pretrained --checkpoint=model_8100.pt

5、仿真环境运行(Isaac Lab)

在 Isaac Lab 仿真环境中加载和运行已训练的模型。

  • --task 任务类别,有walk、run
  • --num_envs 场景中机器人数量
  • --load_run .pt 文件所在的目录,默认使用最新训练生成的目录
  • --checkpoint .pt 文件的文件名,默认使用最新训练出来的文件
cd ~/TienKung-Lab
mkdir ~/TienKung-Lab/logs/walk/exe
# 将要运行的.pt文件复制到 exe 目录,例如:~/TienKung-Lab/logs/walk/exe/model_49900.pt
python legged_lab/scripts/play.py --task=walk --num_envs=1 --load_run=exe --checkpoint=model_49900.pt

play.py 脚本同时会将本次运行所使用的的模型导出为 .pt.onnx 两种格式的文件到同目录的 exported/ 子目录内以备用,例如:

  • ~/TienKung-Lab/logs/walk/exe/exported/policy.pt
  • ~/TienKung-Lab/logs/walk/exe/exported/policy.onnx

6、Sim2Sim (MuJoCo)

在 MuJoCo 中加载验证训练好的模型,以执行交叉仿真验证。

在前述【运行】步骤中执行 play 脚本时,训练好的模型会自动导出并保存到同目录的下的 exported/ 子目录,在这里可直接用 --policy 参数指定即可。

cd ~/TienKung-Lab
python legged_lab/scripts/sim2sim.py --task walk --duration 50 --policy ./logs/walk/exe/exported/policy.pt

7、模型转换

使用OpenVINO模型转换,得到 bin和xml 文件。

cd ~/TienKung-Lab
pip install openvino
ovc logs/walk/exe/exported/policy.pt --output_model logs/walk/exe/exported/

8、本地部署

将训练好的运控模型部署到训练机器的 ros_lite 项目内。

复制模型文件

模型转换后的 .bin.xml 文件以及训练得到的 .pt 文件,都复制到 ~/ros_lite/install/rl_control_new/share/rl_control_new/config/policy/ 目录下。

cd ~/
unzip ros_lite_src.zip -d ros_lite
cd ~/TienKung-Lab/logs/walk/exe/exported/
cp policy.pt policy.bin policy.xml ~/ros_lite/install/rl_control_new/share/rl_control_new/config/policy/

确保使用正确的模型文件

请确认 ~/ros_lite/install/rl_control_new/share/rl_control_new/config/tg22_config.yaml 配置文件内 mlp.path 指向的是正确的刚刚训练出来的模型的名称,不需要后缀。

例如,如果训练出来的模型文件有policy.pt 和 policy.bin 和 policy.xml,则配置文件内 mlp.path 值应该设置为 /config/policy/policy 即可。

cd ~/ros_lite/install/rl_control_new/share/rl_control_new/config/
cat tg22_config.yaml
信息

真正用来做运动控制的模型文件是 .bin.xml

注意

这里是将模型文件直接复制到 ros_lite 项目的编译后目录了,适用于在真机上不再编译的场景。

如果在真机上还会再做编译,可将模型文件复制到 ~/ros_lite/src/rl_control_new/config/policy 目录,等将项目复制到真机上后再做编译即可。

9、真机部署

将训练机器上的 ~/ros_lite 目录整体打包,放置到天工行者的192.168.41.1的x86板内并解压在 /home/ubuntu/ 目录。至此,就已将步态训练的模型部署到了天工真机。

准备测试

  1. 先在192.168.41.1的x86板上,确保机器人自启动服务是关闭的:
    sudo systemctl status proc_manager.service
  2. 检查服务的状态是否为disable,如果不是,手动disable:
    sudo systemctl disable proc_manager.service
    然后断电重启整个机器人,等待重启完成。
  3. 到192.168.41.1的x86板上手动启动本体服务:
    tmux
    sudo su
    cd ros2ws
    source install/setup.bash
    ros2 launch body_control body.launch.py
  4. 另外启动一个终端,启动本次训练的强化学习运控
     tmux
    cd ~/ros_lite
    source install/setup.bash
    ros2 launch rl_control_new rl.launch.py
危险

由于是新训练出来的模型,效果无法保证,所以一定要确保安全:

  • 机器人一定要用绳子连接在移位机上,绳子不要太松以免紧急时机器人下坠的力量过大造成危险
  • 并且另外有一个人随时准备好按下急停按钮

遥控器按键说明

按键功能
A键+G键(拨至中间零位)切换到MLP(机器学习策略)控制模式
D键切换到ZERO(回零)控制模式
C键切换到STOP(停止)控制模式
左摇杆控制机器人前进/后退和左移/右移
右摇杆控制机器人转向(左转/右转)
危险

启动这个运控服务,按 A 时会直接从回零状态直接进入到行走状态,没有站立状态!尤其需要注意。

控制逻辑说明

  1. 机器人初始状态为STOP模式,启动后按ZERO模式可确保机器人所有关节都回到设置的零位状态
  2. 按A键+G键(拨至中间零位) 切换到MLP模式,机器人开始行走,注意,不会进入站立状态!
  3. 按D键回到ZERO模式,机器人回到初始姿态
  4. 按C键进入STOP模式,保持当前姿态
  5. 状态切换流程为:STOP -> ZERO -> MLP -> STOP

然后可以在确保安全的前提下,逐步用遥控器操作机器人回零,行走。

参考:https://github.com/Open-X-Humanoid/Deploy_Tienkung/tree/main/rl_control_new