基于RDK S100的逐际动力点足运控模型部署全流程讲解

1. 前言

这些年,人形机器人和机器狗频频出圈,成为热门话题。而对于这类机器人而言,运动控制无疑是核心技术之一。强化学习作为当前运动控制的主要方法之一,恰好也能充分发挥 RDK 系列板卡在模型推理方面的优势。因此,我们尝试在 RDK S100 上部署强化学习模型,并探索其在实际机器人平台上的应用。

本次实验机器人采用逐际动力的点足机器人,推理设备采用RDK S100(MLP模型小,资源占用极少),该项目基于逐际动力参与发表过的论文《CTS: Concurrent Teacher-Student Reinforcement Learning for Legged Locomotion》,并选择复现和魔改逐际动力提供的Github项目rl-deploy-with-python,我们在该Github项目中加入RDK S100的BPU推理部分。

该项目提供了完整的工程实现,适合作为复现与优化的基础,因此我们最终选择了该方案进行部署与测试。整体流程分为三步:模型训练---->模型量化---->板端部署

2. 论文介绍与训练

2.1. 论文综述

《CTS: Concurrent Teacher-Student Reinforcement Learning for Legged Locomotion》论文中,作者和逐际动力提出了创新性研究,旨在提升腿式机器人在复杂地形上的运动能力。传统的“教师-学生”强化学习架构通常采用两阶段训练:先使用强化学习训练教师策略,利用完整的环境信息(如地形、接触力等);然后通过监督学习将知识传递给仅依赖本体感知的学生策略。​CTS(Concurrent Teacher-Student)打破了这一传统,提出了一个并行训练架构:教师和学生策略在同一强化学习框架下同时训练。​这种方式不仅简化了训练流程,还通过强化学习目标引导学生策略的学习,而非仅仅模仿教师策略,从而提升了策略的泛化能力和鲁棒性。

CTS架构基于Proximal Policy Optimization(PPO)算法,采用非对称的actor-critic结构。​教师策略利用“特权编码器”处理完整状态信息,而学生策略则通过“本体编码器”处理仅有的本体感知数据。​两者共享策略网络和价值网络,确保策略的一致性。训练过程中,学生策略不仅通过强化学习优化自身策略,还通过最小化与教师策略的潜在表示差异来提升自身的感知能力,从而在缺乏完整环境信息的情况下也能做出有效决策。

研究团队在多种机器人平台上验证了CTS的有效性,包括不同尺寸的四足机器人和具有挑战性的点足双足机器人。​实验结果显示,CTS在复杂地形(如斜坡、楼梯和不规则障碍)上的速度跟踪误差比传统两阶段方法降低了最多20%,展现出卓越的运动能力和对外部扰动的鲁棒性。此外,CTS在仿真到现实的迁移过程中表现出色,缩小了仿真与现实之间的差距,使得训练出的策略能够直接应用于现实环境中。

2.2 奖励机制

该模型的奖励机制主要包括以下四个方面:

2.3 模型训练与Onnx导出

关于模型训练的具体步骤,可以参考逐际动力官方文档,其中较为重要的章节为

- 强化学习环境搭建:https://support.limxdynamics.com/docs/tron-1-sdk/rl-env-setup

- 强化学习模型训练:https://support.limxdynamics.com/docs/tron-1-sdk/rl-model-training

这里对训练步骤进行简要提炼:

1. 配置IsaacGym仿真环境,并在环境变量中配置机器人型号

2. 启动仿真训练

3. 查看训练结果:

4. 导出onnx模型

查看模型结构,可得知该模型为线性层搭配Elu激活组成:

3. 模型量化

3.1 环境准备

#拉取S100工具链docker镜像(docker镜像与OE包请联系工程师获取)

#拉取用于模型量化的文件夹解压,见文末附件(该文件夹中包含量化需使用的配置文件以及校准数据)

#将导出的onnx模型放到量化用的文件夹下(确保模型名称与配置文件中一致),并将该文件夹挂在至docker环境中,创建容器
sudo docker run -it --entrypoint="/bin/bash" -v 主机文件夹路径:/limx_model_convert_s100 镜像ID

3.2 模型量化

#进入文件夹
cd /limx_model_convert_s100 

#量化adaptation_module,生成model_output_ad文件夹,存放.bin模型
hb_compile -c ad_config_bpu.yaml --march nash-e

#量化body,生成model_output_body文件夹,存放.bin模型
hb_compile -c body_config_bpu.yaml --march nash-e

模型量化结果如下:

模型转换结果解读:直接看最下方的2x3的表格,该表格中描述了最终结果mlp_output与CPU结果的余弦相似度,通过表格,可以看到mlp_output的结果余弦相似度均大于0.9999

4. 板端部署

4.1 物料清单

本次板端部署需要的物料并不多,除了笔记本外,准备如下物料即可:

1. 逐际动力TRON 1点足机器人一台

2. 逐际动力TRON 1点足机器人遥控器一台

3. RDK S100一台

4. 将RDK S100置于逐际动力头部的3D打印件一份(可用纳米胶/胶布进行粘贴)

5. 网线一条

6. XT60转DC Cable一条(如下图所示,用于将逐际动力的电池供电给RDK S100)

组装步骤:

1. 确保逐际动力机器人的电池,以及遥控器已完成充电

2. 使用纳米胶(或胶布)将3D打印件放置于逐际动力TRON 1机器人的头部

3. 使用螺丝将RDK S100与3D打印件进行固定

4. 使用XT60转DC Cable连接逐际动力的电池与RDK S100,为RDK S100上电。

5. 将逐际动力背后的网口与RDK S100的网口相连接

最终完成的形态参考(图中以胶布为例,实际建议使用纳米胶):

4.2 环境准备

下拉代码,安装环境

git clone --recurse https://gitee.com/chenguanzhong/rdk_s100_limx.git
pip install pointfoot-mujoco-sim/pointfoot-sdk-lowlevel/python3/aarch64/limxsdk-*-py3-none-any.whl

设置机器人类型(建议使用如下方法将机器人类型写入环境变量)

echo 'export ROBOT_TYPE=PF_P441C' >> ~/.bashrc && source ~/.bashrc

编译模型推理库

cd ~
git clone https://github.com/wunuo1/model_task.git -b s100 
mkdir build 
cd build 
cmake .. 
make -j4

4.3 运行

cd rdk_s100_limx
python rl-deploy-with-python/main.py 10.192.1.2

运行效果视频所示: