pybullet第一节学习
pybullet的安装
首先安装pybullet,非常简单直接pip即可。在一台可渲染的ubuntu电脑食用更佳~因为本人没有遇到什么安装上的问题,故就不再这里细说。
安装完成pybullet之后,可以通过跑一些其提供的demo进行渲染。
如直接运行:
python -m pybullet_envs.examples.loadpanda
即可看到一个机械臂在进行manipulation:
安装完成后可以看到pybullet提供了些什么:
这4种文件里面包含了各种各样现成的模型供我们加载和使用,所以我们先来熟悉一下这些文件里面有什么:
pybullet_data: 这一文件夹中包含了一系列的实物模型,这里简单列举几个:
类型 | 加载方式 |
---|---|
自行车 | bicycle/bike.urdf |
双足人 | bipid/biped2d_pybullet.urdf |
平面 | plane.urdf |
各种平面 | plane100.urdf, plane_implicit.urdf, plane_transparent.urdf |
赛车 | racecar/racecar.urdf |
杯子 | urdf/mug.urdf |
杯子2 | urdf/mug.urdf |
机械臂 | franka_panda/panda.urdf |
gripper | gripper/下面各种 |
pybullet_envs: 有一些现成的环境可以用来进行操作。
pybullet_examples: 里面有一些非常好的exmpales可以用来学习如何构建任务,以及使用强化学习来进行simulate和training。
pybullet_robots: 内部包含有2种机械臂(xarm,pandas)和1种机械狗(laikago)。里面有相应的py文件和相关的任务示例展示了如何使用这些部件。
**pybullet_utils:**里面也有相关的代码示例。
打开urdf文件后其编写格式与ROS,Mujoco等比较像,可以通过修改内部的参数进行对model的改进。
pybullet基本操作
先导入一些包:
import pybullet as p
import time
import pybullet_data
对物理引擎进行连接:
physicsCilent = p.connect(p.GUI)
connect函数接受一个参数,代表用户选择连接的物理引擎服务器。p.GUI
表示可渲染,p.DIRECT
表示不渲染。
如果要取消渲染时候周围的控制面板,可以使用如下命令进行去除:
p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0)
设置重力:
p.setGravity(0, 0, -10)
使用loadURDF函数进行模型加载:
loadURDF函数具体信息如下:
filename
用于指加载文件的路径,basePosition
指放置模型位置,baseOrientation
用于描述模型放置的朝向,globalScaling
用于控制模型比例等。
为了加载模型我们通常会载入这一行代码来使用相对路径读入库中现成的模型:
p.setAdditionalSearchPath(pybullet_data.getDataPath())
注意: 除了使用loadURDF加载urdf模型外,我们还可以通过loadSDF来加载sdf模型,通过loadMJCF来加载mjcf模型。其中sdf是数据库文件,mjcf是MuJoCo平台的机器人描述文件。
使用stepSimulation函数进行模拟:
p.stepSimulation()
time.sleep(1/240)
但是渲染出来的样子感觉像是重力加速度变小了,可以通过加time.sleep(1/240)
来让渲染变得舒服。
同时还可以是用下面的函数进行实时渲染,直接将物理引擎渲染的时间和RTC(real time clock)同步:
p.setRealTimeSimulation(1)
一个简单的demo:
import pybullet as p
import pybullet_data as pd
import math
import time
import numpy as np
import pybullet_robots.panda.panda_sim as panda_sim
import pybullet_data
p.connect(p.GUI)
p.setGravity(0, 0, -10)
p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0)
p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1)
p.resetSimulation()
p.setAdditionalSearchPath(pybullet_data.getDataPath())
planeId = p.loadURDF("plane.urdf")
tableUid = p.loadURDF("table/table.urdf", basePosition=[0, 0.3, -0.45], globalScaling=1)
mugid = p.loadURDF("urdf/mug.urdf", basePosition=[1, 1, 1], globalScaling=1)
cubeStartPos = [0, 0, 0,5]
cubeStartOrientation = p.getQuaternionFromEuler([0, 1, 1])
pandaUid = p.loadURDF('franka_panda/panda.urdf', cubeStartPos, cubeStartOrientation)
while 1:
p.stepSimulation()
time.sleep(1 / 240)
p.getCameraImage(320, 240)
一个好用的看urdf文件的网站
https://mymodelrobot.appspot.com/5629499534213120
参考链接:
https://zhuanlan.zhihu.com/p/347618698