We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
问题描述 在使用 PyBullet 创建旋转关节约束(p.JOINT_REVOLUTE)时,约束创建失败,错误信息为 unknown constraint type。点对点约束(p.JOINT_POINT2POINT)可以成功创建,但旋转关节无法正常工作。
复现步骤 运行以下代码:
python 复制 import pybullet as p import pybullet_data import time
physicsClient = p.connect(p.GUI) # 使用 GUI 模式 p.setGravity(0, 0, -9.81) # 设置重力
p.setAdditionalSearchPath(pybullet_data.getDataPath())
planeId = p.loadURDF("plane.urdf")
lever_length = 6 # 杠杆长度 lever_width = 0.1 # 杠杆宽度 lever_height = 0.1 # 杠杆高度
lever_collision_shape = p.createCollisionShape(p.GEOM_BOX, halfExtents=[lever_length / 2, lever_width / 2, lever_height / 2]) lever_visual_shape = p.createVisualShape(p.GEOM_BOX, halfExtents=[lever_length / 2, lever_width / 2, lever_height / 2], rgbaColor=[0, 1, 0, 1])
lever_base_position = [0, 0, lever_height / 2 + 0.5] # 将杠杆升高 0.5 米
lever_body = p.createMultiBody( baseMass=1, # 杠杆质量 baseCollisionShapeIndex=lever_collision_shape, baseVisualShapeIndex=lever_visual_shape, basePosition=lever_base_position # 初始位置 )
pivot_position = [-lever_length / 3, 0, lever_base_position[2]] # 支点在杠杆的 1/3 处,高度与杠杆一致
pivot_body = p.createMultiBody( baseMass=0, # 支点质量为 0,表示固定点 baseCollisionShapeIndex=-1, # 无碰撞形状 baseVisualShapeIndex=-1, # 无视觉形状 basePosition=pivot_position # 支点位置 )
print("杠杆 ID:", lever_body) print("支点 ID:", pivot_body)
try: constraint_id = p.createConstraint( parentBodyUniqueId=lever_body, # 杠杆 parentLinkIndex=-1, # 杠杆的基座 childBodyUniqueId=pivot_body, # 支点 childLinkIndex=-1, # 支点的基座 jointType=p.JOINT_REVOLUTE, # 旋转关节 jointAxis=[0, 0, 1], # 绕 Z 轴旋转 parentFramePosition=[lever_length / 3, 0, 0], # 支点在杠杆上的位置(相对于杠杆局部坐标系) childFramePosition=[0, 0, 0], # 支点在其自身坐标系中的位置 parentFrameOrientation=[0, 0, 0, 1], # 方向(四元数) childFrameOrientation=[0, 0, 0, 1] # 方向(四元数) ) print("旋转关节约束创建成功!约束 ID:", constraint_id) except Exception as e: print("旋转关节约束创建失败!错误信息:", e)
for _ in range(1000): p.stepSimulation() time.sleep(1 / 240) # 控制仿真速度
p.disconnect() 运行代码后,旋转关节约束创建失败,错误信息为:
复制 b3Printf: unknown constraint type b3Printf: createConstraint failed 旋转关节约束创建失败!错误信息:createConstraint failed. 期望行为 旋转关节约束应成功创建,杠杆可以绕支点旋转。
实际行为 旋转关节约束创建失败,错误信息为 unknown constraint type。
环境信息 PyBullet 版本:最新版本(通过 pip install --upgrade pybullet 安装)。
操作系统:Windows 10。
Python 版本:3.9。
硬件信息:Intel(R) Arc(TM) Graphics。
其他信息 点对点约束(p.JOINT_POINT2POINT)可以成功创建。
固定关节(p.JOINT_FIXED)也可以成功创建。
The text was updated successfully, but these errors were encountered:
could you please repost in English?
Sorry, something went wrong.
No branches or pull requests
问题描述
在使用 PyBullet 创建旋转关节约束(p.JOINT_REVOLUTE)时,约束创建失败,错误信息为 unknown constraint type。点对点约束(p.JOINT_POINT2POINT)可以成功创建,但旋转关节无法正常工作。
复现步骤
运行以下代码:
python
复制
import pybullet as p
import pybullet_data
import time
连接到物理服务器
physicsClient = p.connect(p.GUI) # 使用 GUI 模式
p.setGravity(0, 0, -9.81) # 设置重力
设置数据路径
p.setAdditionalSearchPath(pybullet_data.getDataPath())
加载地面
planeId = p.loadURDF("plane.urdf")
创建杠杆
lever_length = 6 # 杠杆长度
lever_width = 0.1 # 杠杆宽度
lever_height = 0.1 # 杠杆高度
创建杠杆的碰撞形状和视觉形状
lever_collision_shape = p.createCollisionShape(p.GEOM_BOX, halfExtents=[lever_length / 2, lever_width / 2, lever_height / 2])
lever_visual_shape = p.createVisualShape(p.GEOM_BOX, halfExtents=[lever_length / 2, lever_width / 2, lever_height / 2], rgbaColor=[0, 1, 0, 1])
将杠杆位置升高,避免与地面碰撞
lever_base_position = [0, 0, lever_height / 2 + 0.5] # 将杠杆升高 0.5 米
创建杠杆刚体
lever_body = p.createMultiBody(
baseMass=1, # 杠杆质量
baseCollisionShapeIndex=lever_collision_shape,
baseVisualShapeIndex=lever_visual_shape,
basePosition=lever_base_position # 初始位置
)
计算支点位置(杠杆的 1/3 处)
pivot_position = [-lever_length / 3, 0, lever_base_position[2]] # 支点在杠杆的 1/3 处,高度与杠杆一致
创建支点(固定点)
pivot_body = p.createMultiBody(
baseMass=0, # 支点质量为 0,表示固定点
baseCollisionShapeIndex=-1, # 无碰撞形状
baseVisualShapeIndex=-1, # 无视觉形状
basePosition=pivot_position # 支点位置
)
打印调试信息
print("杠杆 ID:", lever_body)
print("支点 ID:", pivot_body)
测试创建旋转关节约束
try:
constraint_id = p.createConstraint(
parentBodyUniqueId=lever_body, # 杠杆
parentLinkIndex=-1, # 杠杆的基座
childBodyUniqueId=pivot_body, # 支点
childLinkIndex=-1, # 支点的基座
jointType=p.JOINT_REVOLUTE, # 旋转关节
jointAxis=[0, 0, 1], # 绕 Z 轴旋转
parentFramePosition=[lever_length / 3, 0, 0], # 支点在杠杆上的位置(相对于杠杆局部坐标系)
childFramePosition=[0, 0, 0], # 支点在其自身坐标系中的位置
parentFrameOrientation=[0, 0, 0, 1], # 方向(四元数)
childFrameOrientation=[0, 0, 0, 1] # 方向(四元数)
)
print("旋转关节约束创建成功!约束 ID:", constraint_id)
except Exception as e:
print("旋转关节约束创建失败!错误信息:", e)
运行仿真
for _ in range(1000):
p.stepSimulation()
time.sleep(1 / 240) # 控制仿真速度
断开连接
p.disconnect()
运行代码后,旋转关节约束创建失败,错误信息为:
复制
b3Printf: unknown constraint type
b3Printf: createConstraint failed
旋转关节约束创建失败!错误信息:createConstraint failed.
期望行为
旋转关节约束应成功创建,杠杆可以绕支点旋转。
实际行为
旋转关节约束创建失败,错误信息为 unknown constraint type。
环境信息
PyBullet 版本:最新版本(通过 pip install --upgrade pybullet 安装)。
操作系统:Windows 10。
Python 版本:3.9。
硬件信息:Intel(R) Arc(TM) Graphics。
其他信息
点对点约束(p.JOINT_POINT2POINT)可以成功创建。
固定关节(p.JOINT_FIXED)也可以成功创建。
The text was updated successfully, but these errors were encountered: