前言
- 最近在搞强化学习,需要找一个物理仿真软件来跑我的机械臂强化学习模型,去网上搜了一下,当前比较主流的有
- PyBullet
- Mujoco
- VREP
- …
- 一开始是想用Mujoco,听说Mujoco现在免费了很适合强化学习,还有一个基于Mujoco的Robosuite很适合机器人的强化学习,一顿操作下来发现Bug实在太多(两个都是),想要去复现 这一篇带着UR5的强化学习凯源代码,发现各种报错,甚至重装了系统仍然不行。
- 软件肯定是好软件,但本人能力实在有限,还是转战PyBullet。 20230326
- 然后本文参照了很多前辈、大佬的文章,太乱了不一一列举了。
环境
配置 版本 显卡 3080 Ubuntu 20.04 Python 3.8 Nvidia 515 cuda 11.7 PyTorch 2.0 gym 0.17.2 - 感觉gym版本要更新一下
如果下面有报错,基本上就是你的环境不满足,去网上搜下把缺的环境补足就行
安装及简单测试
安装
- 安装指令
pip3 install pybullet
- 跑一下官方的案例
python -m pybullet_robots.panda.loadpanda
python3 -m pybullet_envs.examples.enjoy_TF_HumanoidFlagrunHarderBulletEnv_v1_2017jul
python3 -m pybullet_envs.examples.enjoy_TF_AntBulletEnv_v0_2017may
PyBullet文件介绍
- 再看一下文件位置,因为我装了anaconda,所以这个PyBullet也就到了anaconda的库文件下了
- /home/xxx/anaconda3/lib/python3.9/site-packages
- 看一下各个文件的作用
- pybullet_data:存放各种机器人的URDF文件和模型。
- pybullet_envs:存放各种机器人环境(类似gym)和示例效果。
- pybullet_examples:介绍pybullet的各种基本功能,如运动学、动力学、PD控制、碰撞检测等。
- pybullet_robots:演示几种典型的机器人,如 laikago、panda、xarm。
- pybullet_utils:提供一些实用工具,如读写urdf、数学函数、矩阵操作等。
- pybullet-3.1.7.dist-info:安装信息。
PyBullet导入Ur5
虽然说,我们可以直接从官方GitHub上直接下载到ur5的文件。但是它并不能直接为我们所用,因为官方为了通用性,已经用xacro格式将整个ur系列进行了统一管理。这也导致了并不方便我们直接使用
改造我们可用的ur文件
- 我们直接参照PyBullet中它对franka_panda的描述,打造一个我们自己的ur5文件夹。先看这个franka_panda:
- franka - meshes - collision - visual - LICENSE - panda.urdf
- 这其中 meshes下的collision,visual下的dae和stl文件我们直接用官方的,但ur5e.urdf需要自己从.xacro转换成.urdf文件
ur5e 和ur5模型通用
-
原版ur5e.urdf`文件有几个小细节要修改:
- 删掉ur_description : 使之与文件位置对应。
- 因为不用gazebo,我把gazebo相关的标签也删掉了
- 同理,删掉了transmission相关的标签(关节驱动电机)
- 也删掉了最后的描述坐标系的三个标签内容
-
搞了半天,我自己删了东西的urdf总是出现link偏斜的问题,所以我觉得【只调整下文件位置+mesh filename ="xxx"这里文件地址对应好】就行了。
-
我的文件上传到CSDN了,大家可以直接点击下载
-
最终我们有了和PyBullet案例中一样的文件结构
撰写Python代码
- 这里直接把Python代码列举出来
注意robotId = p.loadURDF 这里改成自己的文件地址
import pybullet as p import time import pybullet_data import math from collections import namedtuple # from attrdict import AttrDict # 连接物理模拟 physicsClient = p.connect(p.GUI) p.setAdditionalSearchPath(pybullet_data.getDataPath())# p.setGravity(0,0,-9.81) #转变视角 p.resetDebugVisualizerCamera(cameraDistance=2,cameraYaw=0,cameraPitch=-40,cameraTargetPosition=[0.5,-0.9,0.5]) planeId = p.loadURDF("plane.urdf") #地面 robotId = p.loadURDF("/home/zhangshidi/GitHub/ReinforcementLearning/PyBullet/ur5e/ur5e.urdf",useFixedBase = True) #机器人 #机器人起始位姿设定 robotStartPos = [0,0,0] robotStartOrientation = p.getQuaternionFromEuler([0,0,0]) p.resetBasePositionAndOrientation(robotId,robotStartPos,robotStartOrientation) p.setRealTimeSimulation(1) while True: pass # p.disconnect()
- 感觉还不错,按住ctrl+鼠标可以控制视角
小小的锦上添花
- 假如我把我的ur5e文件夹完全放到这个pybullet_data中,就可以优雅的直接加载了,而不用写这么长的文件位置。
在学习的过程中阅读了大量前辈的博客,要感谢他们的付出!
- 假如我把我的ur5e文件夹完全放到这个pybullet_data中,就可以优雅的直接加载了,而不用写这么长的文件位置。
- 感觉还不错,按住ctrl+鼠标可以控制视角
- 这里直接把Python代码列举出来
-
- 这其中 meshes下的collision,visual下的dae和stl文件我们直接用官方的,但ur5e.urdf需要自己从.xacro转换成.urdf文件
- 我们直接参照PyBullet中它对franka_panda的描述,打造一个我们自己的ur5文件夹。先看这个franka_panda:
- 跑一下官方的案例
- 安装指令
- 感觉gym版本要更新一下