rl_sar功能包详解

文章目录

  • [1. 功能包概述](#1. 功能包概述)
  • [2. 目录结构详解](#2. 目录结构详解)
    • [2.1 核心目录结构](#2.1 核心目录结构)
    • [2.2 各目录功能](#2.2 各目录功能)
      • [src/ 目录 - C++源代码实现](#src/ 目录 - C++源代码实现)
      • [scripts/ 目录 - Python脚本实现](#scripts/ 目录 - Python脚本实现)
      • [include/ 目录 - C++头文件](#include/ 目录 - C++头文件)
      • [library/ 目录 - 核心库和第三方依赖](#library/ 目录 - 核心库和第三方依赖)
      • [models/ 目录 - 预训练模型库](#models/ 目录 - 预训练模型库)
      • [launch/ 目录 - ROS启动文件](#launch/ 目录 - ROS启动文件)
      • [worlds/ 目录 - Gazebo仿真世界](#worlds/ 目录 - Gazebo仿真世界)
      • package.xml:ROS包配置文件
      • CMakeLists.txt:编译配置文件
  • [3. 支持的机器人平台](#3. 支持的机器人平台)
    • [3.1 仿真支持 (launch/)](#3.1 仿真支持 (launch/))
    • [3.2 真实机器人支持](#3.2 真实机器人支持)
  • [4. 模型管理系统](#4. 模型管理系统)
    • [4.1 模型组织结构](#4.1 模型组织结构)
    • [4.2 配置文件系统](#4.2 配置文件系统)
  • [5. 高级功能](#5. 高级功能)
    • [5.1 执行器网络训练 (actuator_net.py)](#5.1 执行器网络训练 (actuator_net.py))
    • [5.2 观测历史缓冲 (observation_buffer)](#5.2 观测历史缓冲 (observation_buffer))
  • [6. 使用流程](#6. 使用流程)
    • [6.1 仿真运行](#6.1 仿真运行)
    • [6.2 真实机器人部署](#6.2 真实机器人部署)
    • [6.3 执行器网络训练](#6.3 执行器网络训练)

1. 功能包概述

rl_sar 是一个专门用于机器人强化学习算法仿真验证与实物部署的ROS功能包。它提供了从仿真训练到真实机器人部署的完整工具链。

2. 目录结构详解

2.1 核心目录结构

python 复制代码
src/rl_sar/
├── src/                    # C++源代码
├── scripts/                # Python脚本
├── include/                # C++头文件
├── library/                # 核心库和第三方依赖
├── models/                 # 预训练模型
├── launch/                 # ROS启动文件
├── worlds/                 # Gazebo仿真世界
├── package.xml             # ROS包配置
└── CMakeLists.txt          # 编译配置

2.2 各目录功能

src/ 目录 - C++源代码实现

  • rl_sim.cpp:仿真环境控制程序

Gazebo仿真环境下的机器人控制

支持键盘和手柄控制

集成ROS话题通信

支持仿真重置和暂停/恢复

  • rl_real_go2.cpp:Unitree Go2真实机器人控制

基于Unitree SDK2

以太网通信

更先进的控制接口

支持网络接口配置

scripts/ 目录 - Python脚本实现

  • rl_sim.py :Python版本仿真控制

与C++版本功能对等

更易于调试和修改

支持相同的ROS接口

  • rl_sdk.py:核心RL SDK Python实现

完整的RL控制框架

观测处理和动作计算

状态机控制逻辑

安全保护机制

  • actuator_net.py :执行器网络训练工具

神经网络模型定义

数据加载和预处理

训练和验证流程

模型保存和加载

  • observation_buffer.py :观测历史缓冲区Python版本

时序观测数据管理

支持多帧历史存储

include/ 目录 - C++头文件

  • rl_sim.hpp :仿真控制类声明

RL_Sim类定义

ROS接口声明

Gazebo服务接口

  • rl_real_go2.hpp:Go2机器人控制类声明

更复杂的控制接口

网络配置选项

高级控制功能

library/ 目录 - 核心库和第三方依赖

  • library/core/ - 核心功能库

rl_sdk/:核心RL SDK C++实现

rl_sdk.hpp:类定义和接口声明

rl_sdk.cpp:完整实现,包括观测处理、控制逻辑、安全机制

  • observation_buffer/:观测缓冲区

observation_buffer.hpp:缓冲区类声明

observation_buffer.cpp:时序数据管理实现

  • loop/:循环控制系统

loop.hpp:高精度定时循环控制

支持多线程实时控制

线程优先级管理

  • matplotlibcpp/:C++绘图库

matplotlibcpp.h:Python matplotlib的C++封装

用于实时数据可视化和调试

  • library/thirdparty/ - 第三方SDK

unitree_legged_sdk_3.2/:Unitree A1 SDK

A1机器人官方SDK

低级控制接口

UDP通信协议

unitree_sdk2/:Unitree Go2 SDK

Go2机器人新版SDK

更高级的控制功能

DDS通信协议

models/ 目录 - 预训练模型库

  • a1/:Unitree A1四足机器人

legged_gym/:基于legged_gym训练的模型

robot_lab/:基于robot_lab(IsaacLab)训练的模型

  • go2/:Unitree Go2四足机器人

himloco/:HiMLoco算法训练的模型

robot_lab/:robot_lab训练的模型

  • g1/:Unitree G1人形机器人
    robot_lab/:robot_lab训练的模型

launch/ 目录 - ROS启动文件

为每种机器人提供专用启动文件:

gazebo_a1.launch:A1仿真启动

gazebo_g1.launch:G1人形仿真启动

gazebo_go2.launch:Go2仿真启动

worlds/ 目录 - Gazebo仿真世界

earth.world:基础平地环境

简单的平坦地面

基础物理设置

适合基本测试

stairs.world:楼梯环境

复杂的楼梯地形

挑战性测试环境

包含多种障碍物

package.xml:ROS包配置文件

包依赖关系定义

版本信息

维护者信息

CMakeLists.txt:编译配置文件

编译选项和依赖

可执行文件定义

库链接配置

3. 支持的机器人平台

3.1 仿真支持 (launch/)

A1, B2, Go2系列:四足机器人

B2W, Go2W, L4W4:轮足机器人

GR1T1, GR1T2, G1:人形机器人

3.2 真实机器人支持

Unitree A1:通过unitree_legged_sdk_3.2

Unitree Go2:通过unitree_sdk2

L4W4轮足机器人:通过l4w4_sdk

4. 模型管理系统

4.1 模型组织结构

python 复制代码
models/
├── a1/
│   ├── legged_gym/        # legged_gym训练的模型
│   └── robot_lab/         # robot_lab训练的模型
├── go2/
├── b2/
└── ...

4.2 配置文件系统

每个模型都有独立的config.yaml:

python 复制代码
a1/legged_gym:
  model_name: "model.pt"
  framework: "isaacgym"          # 训练框架
  dt: 0.005                      # 控制频率
  decimation: 4                  # RL推理频率
  num_observations: 45           # 观测维度
  observations: ["ang_vel", "gravity_vec", "commands", "dof_pos", "dof_vel", "actions"]
  rl_kp: [20.0, ...]           # RL控制器增益
  rl_kd: [0.5, ...]            # RL控制器阻尼
  action_scale: [0.125, ...]    # 动作缩放
  torque_limits: [33.5, ...]    # 扭矩限制

5. 高级功能

5.1 执行器网络训练 (actuator_net.py)

用于补偿电机动态特性:

python 复制代码
class ActuatorNetwork:
    # 输入:位置误差、速度、历史信息
    # 输出:扭矩补偿
    # 用途:提高sim-to-real的性能

5.2 观测历史缓冲 (observation_buffer)

支持时序观测:

python 复制代码
class ObservationBuffer {
    // 存储多帧历史观测
    // 支持LSTM等时序模型
};

6. 使用流程

6.1 仿真运行

python 复制代码
# 启动仿真环境
roslaunch rl_sar gazebo_a1.launch cfg:=legged_gym

# C++版本控制
rosrun rl_sar rl_sim

# Python版本控制  
rosrun rl_sar rl_sim.py

6.2 真实机器人部署

python 复制代码
# A1机器人
rosrun rl_sar rl_real_a1

# Go2机器人
rosrun rl_sar rl_real_go2 <网络接口>

6.3 执行器网络训练

python 复制代码
# 训练
rosrun rl_sar actuator_net.py --mode train --data a1/motor.csv --output a1/motor.pt

# 验证
rosrun rl_sar actuator_net.py --mode play --data a1/motor.csv --output a1/motor.pt
相关推荐
白熊18816 分钟前
【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)
人工智能·机器学习
编程绿豆侠20 分钟前
力扣HOT100之多维动态规划:62. 不同路径
算法·leetcode·动态规划
鑫鑫向栄21 分钟前
[蓝桥杯]剪格子
数据结构·c++·算法·职场和发展·蓝桥杯
pen-ai23 分钟前
【深度学习】17. 深度生成模型:DCGAN与Wasserstein GAN公式深度推导
人工智能·深度学习·生成对抗网络
羊儿~1 小时前
P12592题解
数据结构·c++·算法
Wendy_robot1 小时前
池中锦鲤的自我修养,聊聊蓄水池算法
程序人生·算法·面试
.Vcoistnt1 小时前
Codeforces Round 1028 (Div. 2)(A-D)
数据结构·c++·算法·贪心算法·动态规划
白熊1881 小时前
【机器学习基础】机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法)
算法·机器学习·聚类
简简单单做算法1 小时前
基于mediapipe深度学习的虚拟画板系统python源码
人工智能·python·深度学习·mediapipe·虚拟画板
qq_314009831 小时前
Windows+VSCode搭建小智(xiaozhi)开发环境
ide·人工智能·vscode·编辑器·开源软件