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效果

相关推荐
冬奇Lab41 分钟前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab41 分钟前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP4 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年4 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼5 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS5 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区6 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈6 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang7 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx
shengjk18 小时前
NanoClaw 深度剖析:一个"AI 原生"架构的个人助手是如何运转的?
人工智能