当前位置:   article > 正文

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

isaaclab 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 相机传感器支持的其他类型。
官方的一个相机例子:

  1. camera = CameraCfg(
  2. prim_path="{ENV_REGEX_NS}/Robot/base/front_cam",
  3. update_period=0.1,
  4. height=480,
  5. width=640,
  6. data_types=["rgb", "distance_to_image_plane"],
  7. spawn=sim_utils.PinholeCameraCfg(
  8. focal_length=24.0, focus_distance=400.0, horizontal_aperture=20.955, clipping_range=(0.1, 1.0e5)
  9. ),
  10. offset=CameraCfg.OffsetCfg(pos=(0.510, 0.0, 0.015), rot=(0.5, -0.5, 0.5, -0.5), convention="ros"),
  11. )

我们将相机的更新周期设置为 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值函数。
  • 随着迭代的进行,智能体将学会在给定状态下选择最佳动作,以最大化累积奖励。
  1. # 不使用摄像头训练
  2. python source/standalone/workflows/rl_games/train.py --task=Isaac-Cartpole-Direct-v0
  3. # 使用RGB摄像头
  4. 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'

  1. # python source/standalone/workflows/rl_games/play.py --task=Isaac-Cartpole-RGB-Camera-Direct-v0 --checkpoint /PATH/TO/model.pth
  2. 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效果

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/990501
推荐阅读
相关标签
  

闽ICP备14008679号