【论文阅读】RMA: Rapid Motor Adaptation for Legged Robots

  • Paper: https://arxiv.org/abs/2107.04034
  • Project: https://ashish-kmr.github.io/rma-legged-robots/
  • Code: https://github.com/antonilo/rl_locomotion
  • 训练环境:Raisim

1.方法

RMA(Rapid Motor Adaptation)算法通过两阶段训练实现四足机器人在复杂环境中的快速适应。

在这里插入图片描述

1.1.第一阶段:基础策略训练

在第一阶段,算法引入了一个17维的特权观测向量( e t e_t et),该向量包含了以下信息:

  • 3维的质量和质心位置:描述机器人整体的质量分布。
  • 12维的电机强度:表示每个关节电机的最大输出能力。
  • 1维的摩擦系数:描述机器人与地面之间的摩擦特性。
  • 1维的相对地面高度:表示机器人当前所处地形的相对高度。

这些特权观测信息虽然对训练过程非常有帮助,但在实际部署中无法直接获取。这些信息首先通过一个环境因素编码器( μ \mu μ) 被压缩为一个8维的潜在空间向量 ( z t z_t zt)。压缩的好处包括:

  1. 降低维度:减少计算复杂度,提高训练效率。
  2. 提取关键特征:提取对适应性最有帮助的特征,减少噪声和冗余信息。
  3. 增强泛化能力:通过压缩,潜在空间向量更能捕捉到环境变化的关键特征,从而在不同环境中具有更好的泛化能力。

策略网络 ( π \pi π) 的输入包括:

  • 30维的本体观测:包含机器人的关节位置、速度、姿态等信息。
  • 12维的历史动作:包含前一时刻的动作信息。
  • 8维的潜在空间向量 ( z t z_t zt):由环境因素编码器生成。

策略网络的输出为12维的关节期望位置指令 a = q ^ ∈ R 12 a=\hat q \in \mathbb R^{12} a=q^R12,这些指令通过PD控制器被转换为关节力矩 ( τ \tau τ),驱动机器人运动。
τ = K p ( q ^ − q ) + K d ( 0 − q ˙ ) \tau = K_p(\hat q - q) + K_d (0-\dot q) τ=Kp(q^q)+Kd(0q˙)

第一阶段的训练目标是最大化策略网络在模拟环境中的累积奖励。通过强化学习(PPO算法),策略网络和环境因素编码器被联合训练,以适应各种模拟环境中的复杂地形和动态条件。

1.2.第二阶段:自适应模块训练

第一阶段训练得到的策略网络无法直接部署到实际机器人上,因为实际机器人无法获取17维的特权观测信息( e t e_t et),也无法获取由环境因素编码器生成的8维潜在空间向量 ( z t z_t zt)。为了解决这个问题,RMA算法引入了一个自适应模块网络 ( ϕ \phi ϕ),用于在运行时估计特权信息。

自适应模块网络的输入是机器人最近50组历史状态和动作,这些信息被用来估计特权观测经过压缩后的8维潜在空间向量 ( z ^ t \hat{z}_t z^t)。自适应模块网络由一个1维卷积神经网络(CNN)和一个多层感知机(MLP)组成,通过监督学习进行训练。具体来说,自适应模块网络的训练目标是最小化估计的潜在空间向量 ( z ^ t \hat{z}_t z^t) 与真实潜在空间向量 ( z t z_t zt) 之间的均方误差(MSE)。

第二阶段训练得到的自适应模块网络可以与基础策略网络一起部署到实际机器人上。在实际运行中,自适应模块网络以10Hz的频率更新潜在空间向量 ( z ^ t \hat{z}_t z^t) ,而基础策略网络则以100Hz的频率根据当前状态、历史动作和最新的潜在空间向量生成关节期望位置指令。

2.关键创新点

  • 异步执行设计:基础策略网络和自适应模块网络以不同的频率运行(100Hz和10Hz),并且异步执行。这种设计使得算法能够在计算资源有限的机器人上高效运行,同时保证了实时性和适应性。
  • 无需微调:RMA算法完全在模拟环境中训练,无需在现实世界中进行任何微调或数据收集,即可直接部署。
  • 快速适应:通过自适应模块网络在运行时快速估计特权信息,RMA算法能够在几秒钟内适应新的环境条件,如不同的地形、负载和摩擦系数。

3.实验验证

RMA算法在多种复杂地形上进行了实验验证,包括沙地、泥土、草地、混凝土、鹅卵石、楼梯等。实验结果表明,RMA算法在这些复杂环境中的成功率和适应性优于基线方法,展示了其在实际应用中的潜力。

4.总结

RMA算法通过两阶段训练,第一阶段在模拟环境中训练基础策略,第二阶段训练自适应模块以估计特权信息。通过将17维特权观测压缩为8维潜在空间,算法能够更高效地提取关键特征,减少计算复杂度,增强泛化能力。这种设计使得算法能够在实际机器人上快速适应新环境,无需额外的微调或数据收集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/75535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QQ风格客服聊天窗口

QQ风格客服聊天窗口 展示引入方式 展示 引入方式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

【家政平台开发(37)】家政平台蜕变记:性能优化与代码重构揭秘

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…

PostgreSQL 的 COPY 命令

PostgreSQL 的 COPY 命令 PostgreSQL 的 COPY 命令是高效数据导入导出的核心工具&#xff0c;性能远超常规 INSERT 语句。以下是 COPY 命令的深度解析&#xff1a; 一 COPY 命令基础 1.1 基本语法对比 命令类型语法示例执行位置文件访问权限服务器端COPYCOPY table FROM /p…

Sa-Token 自定义插件 —— SPI 机制讲解(一)

前言 博主在使用 Sa-Token 框架的过程中&#xff0c;越用越感叹框架设计的精妙。于是&#xff0c;最近在学习如何给 Sa-Token 贡献自定义框架。为 Sa-Token 的开源尽一份微不足道的力量。我将分三篇文章从 0 到 1 讲解如何为 Sa-Token 自定义一个插件&#xff0c;这一集将是前沿…

论文精度:基于LVNet的高效混合架构:多帧红外小目标检测新突破

论文地址:https://arxiv.org/pdf/2503.02220 目录 一、论文背景与结构 1.1 研究背景 1.2 论文结构 二、核心创新点解读 2.1 三大创新突破 2.2 创新结构原理 2.2.1 多尺度CNN前端 2.2.2 视频Transformer设计 三、代码复现指南 3.1 环境配置 3.2 数据集准备 3.3 训…

解决 Ubuntu 上 Docker 安装与网络问题:从禁用 IPv6 到配置代理

解决 Ubuntu 上 Docker 安装与网络问题的实践笔记 在 Ubuntu&#xff08;Noble 版本&#xff09;上安装 Docker 时&#xff0c;我遇到了两个常见的网络问题&#xff1a;apt-get update 失败和无法拉取 Docker 镜像。通过逐步排查和配置&#xff0c;最终成功运行 docker run he…

指针的进阶2

六、函数指针数组 字符指针数组 - 存放字符指针的数组 char* arr[10] 整型指针数组 - 存放整型指针的数组 int* arr[10] 函数指针数组 - 存放函数指针的数组 void my_strlen() {} int main() {//指针数组char* ch[5];int arr[10] {0};//pa是是数组指针int (*pa)[10] &…

速盾:高防CDN节点对收录有影响吗?

引言 搜索引擎收录是网站运营中至关重要的环节&#xff0c;它直接影响着网站的曝光度和流量。近年来&#xff0c;随着网络安全威胁的增加&#xff0c;许多企业开始采用高防CDN&#xff08;内容分发网络&#xff09;来保护其网站免受DDoS攻击和其他形式的网络攻击。然而&#x…

2025蓝桥杯省赛C/C++研究生组游记

前言 至少半年没写算法题了&#xff0c;手生了不少&#xff0c;由于python写太多导致行末老是忘记打分号&#xff0c;printf老是忘记写f&#xff0c;for和if的括号也老是忘写&#xff0c;差点连&&和||都忘记了。 题目都是回忆版本&#xff0c;可能有不准确的地方。 …

Quill富文本编辑器支持自定义字体(包括新旧两个版本,支持Windings 2字体)

文章目录 1 新版&#xff08;Quill2 以上版本&#xff09;2 旧版&#xff08;Quill1版本&#xff09; 1 新版&#xff08;Quill2 以上版本&#xff09; 注意&#xff1a;新版设置 style"font-family: Wingdings 2" 这种带空格的字体样式会被过滤掉&#xff0c;故需特…

dbt:新一代数据转换工具

dbt&#xff08;Data Build Tool&#xff09;一款专为数据分析和工程师设计的开源工具&#xff0c;专注于 ETL/ELT 流程的数据转换&#xff08;Transform&#xff09;环节&#xff0c;帮助用户以高效、可维护的方式将原始数据转换为适合分析的数据模型。 用户只需要编写查询&am…

【家政平台开发(39)】解锁家政平台测试秘籍:计划与策略全解析

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…

Java中的Map vs Python字典:核心对比与使用指南

一、核心概念 1. 基本定义 Python字典&#xff08;dict&#xff09; &#xff1a;动态类型键值对集合&#xff0c;语法简洁&#xff0c;支持快速查找。Java Map&#xff1a;接口&#xff0c;常用实现类如 HashMap、LinkedHashMap&#xff0c;需声明键值类型&#xff08;泛型&…

C语言基础之数组

1. 一维数组的创建和初始化 数组的创建 数组是一组相同类型元素的集合。 数组的创建方式&#xff1a; type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n是一个常量表达式&#xff0c;用来指定数组的大小 数组创建的实例&#xff1a; //代码1int arr1[10]; …

虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?

虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解&#xff1f; code review! 文章目录 虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解&#xff1f;理解这句话的关键点1.类&#xff08…

提示词 (Prompt)

引言 在生成式 AI 应用中&#xff0c;Prompt&#xff08;提示&#xff09;是与大型语言模型&#xff08;LLM&#xff09;交互的核心输入格式。Prompt 的设计不仅决定了模型理解任务的准确度&#xff0c;还直接影响生成结果的风格、长度、结构与可控性。随着模型能力和应用场景…

十二、C++速通秘籍—静态库,动态库

上一章节&#xff1a; 十一、C速通秘籍—多线程-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/147055932?spm1001.2014.3001.5502 本章节代码&#xff1a; cpp2/library CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppst…

什么是继承?js中有哪儿些继承?

1、什么是继承&#xff1f; 继承是面向对象软件技术中的一个概念。 2、js中有哪儿些继承&#xff1f; js中的继承有ES6的类class的继承、原型链继承、构造函数继承、组合继承、寄生组合继承。 2.1 ES6中类的继承 class Parent {constructor() {this.age 18;} }class Chil…

Linux进程通信入门:匿名管道的原理、实现与应用场景

Linux系列 文章目录 Linux系列前言一、进程通信的目的二、进程通信的原理2.1 进程通信是什么2.2 匿名管道通讯的原理 三、进程通讯的使用总结 前言 Linux进程间同通讯&#xff08;IPC&#xff09;是多个进程之间交换数据和协调行为的重要机制&#xff0c;是我们学习Linux操作系…