【pybullet教程3】设置重力&加载模型

文章目录

  • 1、settGravity
  • 2、loadURDF
  • 3、loadSDF, loadMJCF

1、settGravity

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

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

例子:

import pybullet as p

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

2、loadURDF

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

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

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

loadURDF参数为:

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

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

例子:

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

3、loadSDF, loadMJCF

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

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

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

objectUniqueIds 整数列表 该列表包含每个加载的对象的对象唯一ID。

例子:

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

如果觉得ok,点个赞,点个关注,也欢迎给个打赏支持一下编者的工作

你可能感兴趣的:(pybullet,python)