默认情况下,连接到物理引擎后,并没有没有启用重力。因此我们需要单独设置。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)
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)
您还可以从其他文件格式(例如.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")