pybullet机器人仿真环境搭建 1.安装pybullet,测试官方示例,基础环境搭建

前言

ROS + Gazebo应该是目前最常用的机器人仿真环境,但在gazebo中进行重复实验、记录数据是很麻烦(重置模型状态、渲染都很费时间),不适合快速验证DL、RL算法。

pybullet + gym应该是目前最常见的机器人强化学习仿真环境了,本篇开始学习搭建自己的pybullet仿真环境。

安装

首先要确定本地主机性能够不够,系统支持windows,linux,硬件需要一个比较好的独显(官网建议GTX680以上)用来做渲染,软件需要有OpenGL2或3。

pybullet的安装非常简单:

pip install pybullet tensorflow

因为tensorflow是google的亲儿子,自然pybullet内置的模型也是tensorflow的版本。

安装
pip安装的pybullet有上面五个文件夹,提供了测试用的数据、环境、示例、机器人模型和一些常用的工具。

测试官方示例

官方提供了一些测试示例:

python -m pybullet_envs.examples.enjoy_TF_AntBulletEnv_v0_2017may

运行后看到一个行走的机器人,表示pybullet安装就没问题了。可以用鼠标滚轮接近/远离视角,可以用Ctrl+滚轮或者鼠标左键分别拖动和旋转视角。

基础环境搭建

然后就是搭建自己需要的仿真环境。一口吃不成胖子,先从最基础的环境创建API开始。

pybullet和ros、carla一样,都采用的是client-server的通信方式,仿真器是一个server,本地client通过代码向server发送指令,server执行代码指令。

导入pybullet

首先,导入pybullet包以及数据:

import time

import pybullet
import pybullet_data

创建服务端

然后创建一个服务端

client = pybullet.connect(pybullet.GUI)
# client = pybullet.connect(pybullet.DIRECT)

pybullet.GUI:服务端打开图形GUI做渲染,需要独显,性能消耗大
pybullet.DIRECT:不打开图形渲染,性能消耗小

(可选)配置图形GUI

设置可视化的参数:

pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_RENDERING, 0)
pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_GUI, 0)
pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_TINY_RENDERER, 0)

pybullet.COV_ENABLE_RENDERING:是否渲染
pybullet.COV_ENABLE_GUI:是否打开控件
pybullet.COV_ENBALE_TINY_RENDERER:是否使用核显渲染
0=否,1=是

添加资源路径

在环境变量中添加资源路径,后面加载机器人就不用写绝对路径了:

pybullet.setAdditionalSearchPath(pybullet_data.getDataPath())

设置重力

设置X,Y,Z轴的重力:

pybullet.setGravity(0, 0, -9.8)

一般设置Z轴重力为g,也就是-9.8

加载模型

主要是加载两种模型,即场景,机器人:

sceneID = pybullet.loadURDF('plane.urdf')
robotID = pybullet.loadURDF('r2d2.urdf', [0, 0, 0], [0, 0, 0, 1])

需要注意的是,加载机器人时,要给机器人提供初始的位置和姿态。姿态使用四元数xyzw表示。

迭代运行

仿真循环迭代设置延时:

while(True):
	pybullet.stepSimulation()
	time.sleep(0.05)

上面使得仿真环境每0.05秒执行一步。

或者直接实时仿真:

pybullet.setRealTimeSimulation(1)
while(True):
	pass

关闭服务端

pybullet.disconnect()

基础环境代码

把上面的API组合起来,就搭建了一个基础的仿真环境。全代码如下:

import time

import pybullet
import pybullet_data

if __name__ == '__main__':
    # open the server
    physicsClient = pybullet.connect(pybullet.GUI)

    # config GUI
    pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_RENDERING, 0)
    pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_GUI, 0)
    pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_TINY_RENDERER, 0)

    # add the resource path
    pybullet.setAdditionalSearchPath(pybullet_data.getDataPath())

    # set gravity
    pybullet.setGravity(0, 0, -9.8)

    # load scene
    planeID = pybullet.loadURDF('plane.urdf')

    # load robot
    robotID = pybullet.loadURDF('r2d2.urdf', [0, 0, 1], [0, 0, 0, 1])

    # start rendering
    pybullet.configureDebugVisualizer(pybullet.COV_ENABLE_RENDERING, 1)

    pybullet.setRealTimeSimulation(1)
    while True:
        pass

    # close server
    pybullet.disconnect()
  • 10
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值