前言
- 最近在搞强化学习,需要找一个物理仿真软件来跑我的机械臂强化学习模型,去网上搜了一下,当前比较主流的有
- 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中,就可以优雅的直接加载了,而不用写这么长的文件位置。
在学习的过程中阅读了大量前辈的博客,要感谢他们的付出!
文章出处登录后可见!
已经登录?立即刷新