Ubuntu安装PyBullet | PyBullet 导入Ur5 | PyBullet简单使用 | 关于机械臂强化学习仿真引擎的选择 | PyBullet入门操作

慈云数据 2024-03-20 技术支持 47 0

前言

  • 最近在搞强化学习,需要找一个物理仿真软件来跑我的机械臂强化学习模型,去网上搜了一下,当前比较主流的有
    • PyBullet
    • Mujoco
    • VREP
    • 一开始是想用Mujoco,听说Mujoco现在免费了很适合强化学习,还有一个基于Mujoco的Robosuite很适合机器人的强化学习,一顿操作下来发现Bug实在太多(两个都是),想要去复现 这一篇带着UR5的强化学习凯源代码,发现各种报错,甚至重装了系统仍然不行。
    • 软件肯定是好软件,但本人能力实在有限,还是转战PyBullet。 20230326
    • 然后本文参照了很多前辈、大佬的文章,太乱了不一一列举了。

      环境

      配置版本
      显卡3080
      Ubuntu20.04
      Python3.8
      Nvidia515
      cuda11.7
      PyTorch2.0
      gym0.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中,就可以优雅的直接加载了,而不用写这么长的文件位置。

                              在这里插入图片描述

                              在这里插入图片描述

                              在学习的过程中阅读了大量前辈的博客,要感谢他们的付出!

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon