我正在使用带有 j2n6s300.urdf 文件的 Kinova Jaco 机械臂,我只是想从侧面抓住一个杯子并尽情享受。 然而,夹持器无法拿起杯子。似乎在抓手手指和杯子之间有一个“看不见的”屏障。如果我抬起抓手,杯子就会留在原处。
但是,如果我使用 Franka Panda 机器人运行相同的代码(对关节进行轻微调整),我可以举起杯子。 我的问题是什么?跟urdf文件有关系吗?
这是我的代码:
import os
import pybullet as pb
import pybullet_data
import math
import time
import pybullet_data as pd
jaco_path = 'jaco_reza/j2n6s300.urdf'
pb.connect(pb.GUI)
path = pd.getDataPath()
jaco_orientation_euler = [0,math.pi/2,0]
jaco_orientation_quaternion = pb.getQuaternionFromEuler(jaco_orientation_euler)
jacoUid = pb.loadURDF(os.path.join(jaco_path,), useFixedBase=True, basePosition=[-0.63,0,0.46], baseOrientation=jaco_orientation_quaternion)
pos, ori = pb.getBasePositionAndOrientation(jacoUid)
tableUid = pb.loadURDF(os.path.join(pybullet_data.getDataPath(), "table/table.urdf"),basePosition=[0.5,0,-0.66])
mug_orientation_euler = [0,0,-math.pi/2]
mug_orientation_quaternion = pb.getQuaternionFromEuler(mug_orientation_euler)
mugUid = pb.loadURDF(os.path.join(pybullet_data.getDataPath(), "objects/mug.urdf"),basePosition=[0.148,0,-0.035], baseOrientation=mug_orientation_quaternion)
pb.setGravity(0,0,-10)
pb.resetDebugVisualizerCamera(
cameraDistance=1.5,
cameraYaw=0,
cameraPitch=-20,
cameraTargetPosition=[-0.15,0,0.1])
# #init Jaco Position
rest_poses = [0,0,0,1.5,1.4,1.5,0,1.5,3,0,0.5,0,0.5,0,0.5]
for i in range(15):
pb.resetJointState(jacoUid,i, rest_poses[i])
fingerAngle = 0.7
for i in range(180):
pb.setJointMotorControl2(jacoUid,9,pb.POSITION_CONTROL,targetPosition=fingerAngle,force=2000)
pb.setJointMotorControl2(jacoUid,11,pb.POSITION_CONTROL,targetPosition=fingerAngle,force=1000)
pb.setJointMotorControl2(jacoUid,13,pb.POSITION_CONTROL,targetPosition=fingerAngle,force=1000)
pb.stepSimulation()
fingerAngle += 0.1 / 100.
if fingerAngle > 2:
fingerAngle = 2 #upper limit
time.sleep(0.02)
for i in range(20):
print(pb.getJointState(jacoUid,4)[0])
pb.setJointMotorControl2(jacoUid, 4,
pb.POSITION_CONTROL,
targetPosition=1)
pb.stepSimulation()
while True:
pb.configureDebugVisualizer(pb.COV_ENABLE_SINGLE_STEP_RENDERING)
pb.stepSimulation()
我试图更改 Kinova 机器人的 .urdf 文件,但它没有用,我觉得我错过了一个重要的步骤。