Reinforcement Learning学习(三)

作者 : admin 本文共1700个字,预计阅读时间需要5分钟 发布时间: 2024-06-10 共1人阅读

前言

最近在学习Mujoco环境,学习了一些官方的Tutorials以及开源的Demo,对SB3库的强化学习标准库有了一定的了解,尝试搭建了自己的环境,基于UR5E机械臂,进行了一个避障的任务,同时尝试接入了图像大模型API,做了一些有趣的应用,参考资料如下:

https://mujoco.readthedocs.io/en/stable/overview.html
https://pab47.github.io/mujocopy.html
https://github.com/ian-chuang/Manipulator-Mujoco.git

下面我打算分为原理部分,实验过程,结果展示,后续优化几个方面来展开

原理部分

首先是SB3的强化学习库,就我目前的理解来看,这个库基于gym环境以及其变体gymnasium,能够通过矢量转换方法加快训练速度,虽然比不上isaac gym,但其使用性相较更友好(个人意见),因此这里我就使用了该库进行学习

由于我的任务是机械臂的运动控制,因此我的动作空间是连续的,在这里最好还是使用PPO来作为基座模型,先把实验跑通,后续再尝试进行一些其他的优化

关于PPO的原理,其实之前有接触过了,简单理解就是分为两个策略来同时训练,一个策略和实时环境交互,过数个单位时间再把单位信息和真正的策略进行耦合,这里会用到KL散度以及一些Clip约束和优势函数来显示策略的更新速度和步长,防止策略跨度过大,再者就是一个价值损失:预测价值和真实价值之间的差距,这里我就使用了多层感知机来搭建网络

实验过程

整个实验过程分为以下几步:

  1. 环境的搭建,要抓取的目标,奖励的设定,障碍物&相机的配置
  2. 模型导入以及训练
  3. 重写函数,创建自由移动功能
  4. 接入大模型进行位置的设定

环境的一些坐标和物体参数代码如下:

# checkerboard floor
self._arena = StandardArena()
self._arena._mjcf_model
# 定义障碍物的尺寸
self.block_size = [0.3, 0.2, 0.2] # 方块的长, 宽, 高
self.block1_pos = [-1, .7, 0.35]
self.block2_pos = [-1, -.7, 0.35]
self.block3_pos = [-1, 0, 0.35]
# self.block4_pos = [.8, -.6, 1.5]
# 添加方块障碍物
block_body = self._arena._mjcf_model.worldbody.add("body", name=f"block1", pos=self.block1_pos)
block_body.add("geom", type="box", size=self.block_size, rgba=[0, 0, 1, 1])
block_body.add("freejoint") # 添加自由关节
block_body = self._arena._mjcf_model.worldbody.add("body", name=f"block2", pos=self.block2_pos)
block_body.add("geom", type="box", size=self.block_size, rgba=[0, 0, 0, 1])
block_body.add("freejoint") # 添加自由关节
block_body = self._arena._mjcf_model.worldbody.add("body", name=f"block3", pos=self.block3_pos)
block_body.add("geom", type="box", size=self.block_size, rgba=[1, 1, 1, 1])
block_body.add("freejoint") # 添加自由关节
# 目标方块
self.block_size2 = [0.1, 0.1, 0.1] # 方块的长, 宽, 高
# 添加方块障碍物
self.block_positions2 = [
[.6, .7, 0], # 方块1
[-.6,.7, 0], # 方块2
[0, .7, 0]
]
block_body = self._arena
本站无任何商业行为
个人在线分享 » Reinforcement Learning学习(三)
E-->