Isaac Lab CartPole实验(摄像头版本)

Isaac Lab安装可以看这个教程:http://t.csdnimg.cn/SN7duhttp://t.csdnimg.cn/SN7du

1. 问题定义与建模

  • 问题描述:CartPole问题是一个经典的强化学习问题,cartpole 由 cart和pole构成,其中一个小车(Cart)上连接着一根可以摆动的杆子(Pole)。小车可以在一条无摩擦的轨道上左右移动,而我们的目标是通过对小车施加向左或向右的力,使杆子保持直立状态尽可能长的时间。
  • 状态空间S:状态通常包括小车的位置、速度、杆子的角度和角速度。这里我们使用摄像头传感器作为状态空间。
  • 动作空间A:一般的cartpole-v0与cartPole -v1动作空间是离散的,只有两种可能的动作------向左(0)或向右(1)。这里动作是给cart施加力,动作空间是(-∞,+∞)。

动作接口方法

  • 奖励函数R :每当杆子保持直立时,会获得一个正的奖励(如+1)。当杆子偏离垂直方向超过一定角度(如15度)或小车偏离中心过远时,该回合结束,并可能获得一个负的奖励。

reward接口方法

具体reward计算方法

这里reward可以看到,活着有奖励,杆子角度偏离0°惩罚线性增大,这个惩罚权重最高,同时车的速度波动也有惩罚。

  • 终止条件

2. 环境设置

  • 在强化学习中,我们通常使用现有的库(如OpenAI Gym)来提供CartPole环境。通过gym.make('CartPole-v1')(或v0,取决于版本)可以创建CartPole环境。
  • 如何添加摄像头:

Adding sensors on a robot --- Isaac Lab documentation (isaac-sim.github.io)

相机是使用 sensors.CameraCfg .它基于 USD Camera 传感器,并使用 Omniverse Replicator API 捕获不同的数据类型。由于它在场景中具有相应的prim,因此在场景中以指定的prims路径创建prim。

相机传感器的配置包括以下参数:

spawn :要创建的 USD 相机类型。这可以是 PinholeCameraCfg FisheyeCameraCfg

offset :相机传感器与父prim的偏移量。

data_types :相机要获取的数据类型。这可以是 rgb 、depth 、 distance_to_image_planenormals 或 USD 相机传感器支持的其他类型。

官方的一个相机例子:

python 复制代码
camera = CameraCfg(
        prim_path="{ENV_REGEX_NS}/Robot/base/front_cam",
        update_period=0.1,
        height=480,
        width=640,
        data_types=["rgb", "distance_to_image_plane"],
        spawn=sim_utils.PinholeCameraCfg(
            focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 1.0e5)
        ),
        offset=CameraCfg.OffsetCfg(pos=(0.510, 0.0, 0.015), rot=(0.5, -0.5, 0.5, -0.5), convention="ros"),
    )

我们将相机的更新周期设置为 0.1s,这意味着相机传感器以 10Hz 更新。prim_path 设置为 {ENV_REGEX_NS}/Robot/base/front_cam 其中 是 {ENV_REGEX_NS} 环境命名空间, "Robot" 是机器人的名称, "base" 是相机附加到的 prim 的名称,"front_cam"是 与相机传感器关联的 prim 的名称。

这里的offset是偏移量,被指定为相对于base基础框架的平移和旋转。convention似乎是该指定偏移的约定。

再看CartPole例程里添加的RGB和深度相机的配置:

那么这里offset实际该如何确定呢?

在运行的场景里查看摄像头实际偏移量offset,很明显这里的摄像头offset是相对于env_120的。

切到该摄像头视角

所以这里是将摄像头架到倒立摆前面,去做视觉端到端训练。

offset具体参数如何定义,我的建议是去USD Composer或Isaac Sim里设置,然后将获取的坐标关系带到代码里。

3. 策略定义

  • 初始策略可以是随机的,即随机选择向左或向右的动作。
  • 随着学习的进行,策略会逐渐优化,使智能体能够更长时间地保持杆子直立。

4. 学习算法选择

  • 对于CartPole这样的简单问题,可以选择多种强化学习算法,如Q-learning、SARSA、策略梯度等。
  • 也可以使用深度学习技术,如深度Q网络(DQN),来逼近Q值函数

这里使用的是ppo算法,配置在yaml文件中,网络是cnn,可以从文件中看到模型结构。

5. 训练与迭代

  • 智能体与环境进行交互,收集数据(状态、动作、奖励和下一个状态)。
  • 使用这些数据来更新策略或Q值函数。
  • 随着迭代的进行,智能体将学会在给定状态下选择最佳动作,以最大化累积奖励。
bash 复制代码
# 不使用摄像头训练
python source/standalone/workflows/rl_games/train.py --task=Isaac-Cartpole-Direct-v0
# 使用RGB摄像头
python source/standalone/workflows/rl_games/train.py --task=Isaac-Cartpole-RGB-Camera-Direct-v0 --headless --enable_cameras --video

由于加了--video,可以在logs目录里看到保存的视频;

Isaac Lab CartPole训练20000步效果

训练窗口展示,当有最高reward的时候会保存模型

使用tensorboard来查看训练过程:

bash 复制代码
python -m tensorboard.main --logdir logs/rl_games/cartpole_camera_direct

6. 测试与评估

  • 在测试环境中评估智能体的性能,观察它能够保持杆子直立多长时间。
  • 可以比较不同算法或参数设置下的性能。

cartpole_camera_direct.pth 是 best rewards的结果,所以加载该checkpoint 来演示效果。

saving next best rewards: [250.49663]

=> saving checkpoint 'D:\omniverse\pkg\isaac-lab\IsaacLab\logs\rl_games\cartpole_camera_direct\2024-06-06_11-01-07\nn\cartpole_camera_direct.pth'

bash 复制代码
# python source/standalone/workflows/rl_games/play.py --task=Isaac-Cartpole-RGB-Camera-Direct-v0 --checkpoint /PATH/TO/model.pth

python source/standalone/workflows/rl_games/play.py --task=Isaac-Cartpole-RGB-Camera-Direct-v0 --checkpoint logs/rl_games/cartpole_camera_direct/2024-06-06_11-01-07/nn/cartpole_camera_direct.pth

Isaac Lab CartPole play效果

相关推荐
IT古董39 分钟前
【漫话机器学习系列】017.大O算法(Big-O Notation)
人工智能·机器学习
凯哥是个大帅比39 分钟前
人工智能ACA(五)--深度学习基础
人工智能·深度学习
m0_748232921 小时前
DALL-M:基于大语言模型的上下文感知临床数据增强方法 ,补充
人工智能·语言模型·自然语言处理
szxinmai主板定制专家1 小时前
【国产NI替代】基于FPGA的32通道(24bits)高精度终端采集核心板卡
大数据·人工智能·fpga开发
海棠AI实验室1 小时前
AI的进阶之路:从机器学习到深度学习的演变(三)
人工智能·深度学习·机器学习
机器懒得学习1 小时前
基于YOLOv5的智能水域监测系统:从目标检测到自动报告生成
人工智能·yolo·目标检测
QQ同步助手2 小时前
如何正确使用人工智能:开启智慧学习与创新之旅
人工智能·学习·百度
AIGC大时代2 小时前
如何使用ChatGPT辅助文献综述,以及如何进行优化?一篇说清楚
人工智能·深度学习·chatgpt·prompt·aigc
流浪的小新2 小时前
【AI】人工智能、LLM学习资源汇总
人工智能·学习
martian6653 小时前
【人工智能数学基础篇】——深入详解多变量微积分:在机器学习模型中优化损失函数时应用
人工智能·机器学习·微积分·数学基础