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

Isaac Lab安装可以看这个教程:http://t.csdnimg.cn/SN7duicon-default.png?t=N7T8http://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_plane 、 normals 或 USD 相机传感器支持的其他类型。
官方的一个相机例子:

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值函数。
  • 随着迭代的进行,智能体将学会在给定状态下选择最佳动作,以最大化累积奖励。
# 不使用摄像头训练
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来查看训练过程:

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'

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

 

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值