文章目录
- [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