概述
背景
文章关注于灵巧手的控制和任务的实现,实现24自由度关节的运动。 之前的Model-based RL 很难实现这么高维度的关节控制,或者需要极其大量的数据。
基础文章: Deep Reinforcement Learning in a Handful of Trialsusing Probabilistic DM(PETS) 讲述了基本的模型。
解决的问题
将 PETS 进行改进,然后实现 24自由度的关节运动。
采用的模型
仿真采用的环境:
- valve turning:9自由度手臂控制; valve 单自由度。 难度中低。
- In-hand Orientation: 24自由度手臂控制, object6自由度。 难度高。
- Handwriting: 手臂对笔的控制,完成写字。 难度极高。
- 完成保定球的旋转: 难度极高。
后三个问题: 因为关节和物体的接触复杂度较高,接触信息时常发生变动,因此控制难度高。 书写的问题因为控制精度要求高,保定球问题因为双物体控制,因此难度极高。
probabilistic neural network
见 Deep Reinforcement Learning in a Handful of Trialsusing Probabilistic DM (PETS)
MPC模型
MPC的总结文章链接 本文采用 Filtering and Reward-weighted Refinement。
Trajectory optimization
见 Deep Reinforcement Learning in a Handful of Trialsusing Probabilistic DM (PETS)
代码分析
github 代码 链接
环境分析
建立的类的作用(从底层说起): –渲染作用 RebderMode: 枚举类型, 将不同的渲染模式设置成在一起,方便后续选择。包含 RGB,DEPTH和SEGMENTATION。 MjPyRender: 从Render父类上创建,[Render类的作用在于定义要使用的函数名,而没有内容,可以适用于mujoco环境的父类,也可以适用与其他环境的父类,比如pybullet等等],创建Mujoco环境,建立model,sim and data,定义渲染相关的功能。同时生成的sim 和 data 会应用与其他的类中。 – 仿真作用 MujocoSimRobot: 1. 调用MjPyRender函数,包含渲染作用 2. 基本作用:存储当前模型 MUjocoEnv: 1. 调用MujocoSimRobot,生成基本模型 2. 从Mujoco环境data中得到 state的维度, action维度 和 action的边界值 3. reset 4. 得到 state 5. simulation [但是此处的仿真之后并没有用到] 6. 可视化policy ** Robot**: 通过state和action的维度,另外使用action的range 对 mujoco环境进行操作: 1. 得到state 2. 在限制位置和最大速度的前提下 控制动作信号,完成仿真 3. 重置环境 – 具体到特定环境: 比如CubeEnv CubeEnv: 以MujocoSimRobot为父类,通过对Robot进行调用,实现 step, reset_model
不足之处:
- 类之间的调用过于复杂,有些功能没有用到,而且重复很多,很容易让读者混淆。
- 我认为 将所有与mujoco直接联系的参数整合在一个类中会比较好: Robot类可以作为直接与mujoco调用的类,从此处建立mujoco model,sim 和data, 然后一方面,根据sim调用 Render类,实现渲染功能;另一方面,直接得到state, 通过action range 对mujcoo环境进行仿真。 然后3. 创建MjPyEnv,调用Robot实现信息的沟通,在该类中实现 reset,step,get_reward,save_model等等。
代码细节
神经网络参数:
隐藏层:[250,250] 输入层: 24 dims (joint position) + 6 dims (cube position and orientation) + 24 dims (action)
|