pybullet中文手册(一)

您所在的位置:网站首页 pybullet安装教程 pybullet中文手册(一)

pybullet中文手册(一)

2023-08-22 21:19| 来源: 网络整理| 查看: 265

这是从 Pybullet 的英文手册中翻译过来的中文手册,由于一些专业词汇不是很了解就直译过来了,如果发现有不对,欢迎指正。^_^

在本 Pybullet 教程中包含了五大部分:

入门准备:包括介绍、安装以及测试API 介绍(会分章节进行)实践例子(结合不同的实战案例对 API 进行讲解) 介绍

pybullet 是一个的 Python 模块,可用于机器人,游戏,视觉效果和机器学习的物理模拟。

使用 pybullet,您可以加载 URDF,SDF,MJCF 和其他文件格式的机器人描述文件。

pybullet 提供正向动力学仿真,逆向动力学计算,正向和逆向运动学,碰撞检测和射线相交查询。 Bullet Physics SDK 提供了许多 pybullet 机器人示例,例如模拟的四足机器人 Minitaur,使用 tensorflow 进行决策的模拟人类跑步,以及 KUKA 抓取物体。

除了物理模拟之外,还具有渲染绑定,包括 CPU 渲染器(TinyRenderer)和 OpenGL 可视化,并支持 HTC Vive 和 Oculus Rift 等虚拟现实。pybullet 还具有执行碰撞检测查询(最近的点,重叠对,射线相交测试等)并添加调试渲染(调试行和文本)的功能。pybullet 具有跨平台的内置客户端服务器,支持共享内存,UDP 和 TCP 网络。因此,您可以在连接到 Windows VR 服务器的 Linux 上运行 pybullet。

安装

pyubullet 的安装非常简单(视情况你可能需要用 pip3):

pip install pybullet

安装完成后你可以在文件包中找到以下文件(最新版),旧版本的 pybullet 是没有 pybullet_robots 这个文件夹的:

pybullet_data:主要存放一些数据文件,例如模型的 urdf/sdf,以及一些 stl 文件

pybullet_envs:存放一些已经搭建好的仿真环境,例如 minitaur,deep_mimic(模仿学习),已经一些经典的强化学习场景。

pybullet_robots:存放 3 个机器人的一些简单搭建仿真环境(基本用不了,只能看看)

pybullet_utils:顾名思义就是一些 pybullet 的工具,这里不细说,大家可以看看文件夹内容

当然以上文件除了可以在 packages 包里找到,还可以在 bullet 的github上找到

Hello pybullet World

这里给出一个样例用来测试一下 pybullet,以及熟悉一下基本使用,各种功能函数会在后续文章中一个一个讲解。

import pybullet as pfrom time import sleepphysicsClient = p.connect(p.GUI)p.setGravity(0, 0, -10)planeId = p.loadURDF("plane.urdf")cubeStartPos = [0, 0, 1]cubeStartOrientation = p.getQuaternionFromEuler([0, 0, 0])boxId = p.loadURDF("r2d2.urdf", cubeStartPos, cubeStartOrientation)cubePos, cubeOrn = p.getBasePositionAndOrientation(boxId)useRealTimeSimulation = 0if (useRealTimeSimulation): p.setRealTimeSimulation(1)while 1: if (useRealTimeSimulation): p.setGravity(0, 0, -10) sleep(0.01) # Time in seconds. else: p.stepSimulation()

执行程序后我们可以看到以下效果:

连接物理服务器 connect, disconnect

导入 pybullet 模块后,要做的第一件事是“连接”到物理引擎。

pybullet 采用客户端-服务端的 API 设计逻辑,即客户端发送命令,物理服务端(物理引擎)返回状态。为了方便记忆,下文统一把物理服务端称为物理引擎。

pybullet 内置了物理引擎的两种连接方式:DIRECT和GUI。无论哪种连接,在 pybullet 中都执行相同物理模拟和渲染。差别在于有无可视化的窗口。

不过需要注意的是,在 DIRECT 模式下,将无法访问 OpenGL 和 VR 硬件功能。

connect()API 的参数如下:api 返回一个客户端 ID,如果没有连接则为-1。

客户端 ID 是大多数其他 pybullet API 的可选参数。在其他 API 中,如果没有给定执行命令的对象,即客户端的 ID,则默认 ID =0。此外,我们可以连接到多个不同的物理引擎,GUI 除外。

GUI 连接 physicsClient = p.connect(p.GUI)

GUI 连接将在与 pybullet 相同的处理空间内创建一个具有 3D OpenGL 渲染的新图形用户界面(GUI)。在 Linux 和 Windows 上,由于操作系统限制,该 GUI 在单独的线程中运行,而在 OSX 上,它在同一线程中运行。

在 Mac OSX 上,可能会在 OpenGL 窗口中看到一个旋转的轮子,直到您运行 stepSimulation或其他 pybullet 命令。

DIRECT 连接 physicsClient = p.connect(p.DIRECT)

这种情况下,DIRECT 连接将命令直接发送到物理引擎,而不使用任何传输层和图形可视化窗口,并且在执行命令后直接返回状态。

使用共享内存连接 pybullet.connect(pybullet.SHARED_MEMORY,1234)

以下列举一些允许共享内存连接的物理引擎:AppSharedMemoryPhysics,AppSharedMemoryPhysics_GUI 和 Bullet Example Browser,在 Experiment / Physics Server 下有一个允许共享内存连接的示例。这样我们可以在单独的进程中执行物理模拟和渲染。

还可以通过共享内存连接到 AppSharedMemoryPhysicsVR(虚拟现实应用程序),该应用程序支持头戴式显示器和 6 轴跟踪的控制器,例如 HTC Vive 和带触摸控制器的 Oculus Rift。由于 Valve OpenVR SDK 仅在 Windows 下正常工作,因此 AppSharedMemoryPhysicsVR 只能使用 premake(最好)或 cmake 构建

使用 UDP 或 TCP 网络连接 pybullet.connect(pybullet.UDP,"192.168.0.1") pybullet.connect(pybullet.UDP,"localhost", 1234) pybullet.connect(pybullet.TCP,"localhost", 6667)

对于 UDP 网络,有一个 App_PhysicsServerUDP 侦听某个 UDP 端口。它使用开源互联网库,用于可靠的 UDP 网络。这使您可以在独立的设备上执行物理模拟和渲染。

对于 TCP pybullet,请使用 clsocket 库。例如,可以在 Linux 上使用 pybullet 运行控制堆栈或机器学习,而在 Windows 上使用 HTC Vive 或 Rift 在 Virtual Reality 中进行仿真。

另一个 UDP 应用程序是 App_PhysicsServerSharedMemoryBridgeUDP 应用程序,该应用程序充当到现有物理服务器的桥接器:您可以通过 UDP 连接到该桥接器,并且该桥接器使用共享内存连接到物理服务器:该桥接器在客户端和服务器之间传递消息。以类似的方式,有一个 TCP 版本(用 TCP 代替 UDP)。

python 注意:目前,客户端和服务器必须同时为 32 位或同时为 64 位版本!

断开连接

我们可以通过制定客户端 ID,使其与物理引擎的连接断开。“'DIRECT”或“ GUI”物理服务器将关闭。

pybullet.disconnect(physicsClient) getConnectionInfo()

该 API 用于获取连接状态,在连接到物理引擎后,我们可以通过getConnectionInfo()函数来获取连接状态, 需要输入参数 physicsClient,该函数返回一个列表 [isConnected, connectionMethod]

功能 API(一) settGravity

默认情况下,连接到物理引擎后,并没有没有启用重力。因此我们需要单独设置。setGravity这个 API 允许我们为所有对象设置默认重力。setGravity输入参数为:

需要Xfloat沿 X 轴的重力需要Xfloat沿 X 轴的重力需要Yfloat沿 Y 轴的重力需要Zfloat沿 Z 轴的重力可选physicsClientIdint如果连接到多个物理服务器,则可以选择其中一个

例子:

import pybullet as pp.connect(p.GUI) # 必须先连接服务器p.setGravity(0, 0, -9.8) loadURDF

loadURDF 将向物理服务器发送命令,以从通用机器人描述文件(URDF)加载物理模型。

重要说明:默认情况下,大多数关节(滑块,旋转,连续)均启用了阻止自由运动的电动机。这类似于具有非常高的谐波驱动力的机器人关节。您应该使用pybullet.setJointMotorControl2设置关节电机控制模式和目标设置。有关更多信息,请参见 setJointMotorControl2 API。

警告:默认情况下,pybullet 将缓存一些文件以加快加载速度。您可以使用 setPhysicsEngineParameter(enableFileCaching = 0)禁用文件缓存。

loadURDF 参数为:

需要文件名字符串物理服务器文件系统上 URDF 文件的相对或绝对路径。可选的basePositionvec3在世界空间坐标[X,Y,Z]中的指定位置创建对象的基础可选的baseOrientationvec4在指定方向将对象的基础创建为世界空间四元数[X,Y, Z,W]可选的useMaximalCoordinatesint实验性的。默认情况下,URDF 文件中的关节是使用精简坐标法创建的:使用 Featherstone Articulated Body 算法模拟关节,useMaximalCoordinates 选项将为每个链接创建 6 个自由度的刚体,这些刚体之间的约束用于建模关节。可选的useFixedBaseint强制加载的对象的基座是静止不动的可选的flagintURDFUSEINERTIAFROMFILE:默认情况下,Bullet 根据碰撞形状的质量和体积重新计算惯性张量。如果可以提供更准确的惯性张量,请使用此标志。URDFUSESELFCOLLISION:默认情况下,Bullet 禁用自碰撞。这个标志让你启用它。您可以使用以下标志来自定义自冲突行为:URDFUSESELFCOLLISIONEXCLUDEPARENT 将丢弃直接连接的链接(父子链接)之间的自碰撞。URDFUSESELFCOLLISIONEXCLUDEALLPARENTS 将丢弃子链接与其任何祖先(父母,父母的父母,直至基层)之间的自冲突。可选的globalScalingfloat应用于 URDF 模型的缩放比例可选的physicsClientIdint如果您连接到多台服务器,则可以选择其中一台。

loadURDF返回主体唯一 ID,即非负整数值。如果无法加载 URDF 文件,则此整数将为负,并且不是有效的主体唯一 ID。

例子:

urdfFlags = p.URDF_USE_SELF_COLLISIONmodel = p.loadURDF("model.urdf", [0, 0, .5], [0, 0, 0, 1], flags=urdfFlags, useFixedBase=False) loadSDF, loadMJCF

您还可以从其他文件格式(例如.bullet,.sdf 和.mjcf)加载对象。这些文件格式支持多个对象,因此返回值是对象唯一 ID 的列表。命令仅提取 SDF 中与机器人模型和几何相关的一些基本部分,而忽略与相机,灯光等相关的许多元素。loadMJCF 命令执行 OpenAI Gym 中使用的 MuJoCo MJCF xml 文件的基本导入。

需要文件名字符串物理服务器文件系统上 URDF 文件的相对或绝对路径。可选的useMaximalCoordinatesint实验性的。有关更多详细信息,请参见 loadURDF。可选的globalScalingfloat每个对象都将使用此比例因子进行缩放(包括链接,链接框架,关节附件和线性关节限制)可选的physicsClientIdint如果您连接到多台服务器,则可以选择其中一台。

loadBullet,loadSDF 和 loadMJCF 将返回对象唯一 ID 的数组:

例子:

robot = p.loadSDF("model.sdf")

阅读全文: http://gitbook.cn/gitchat/activity/5e720e46f9a59926b37b71da

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3