import pybullet as p
import pybullet_data
import time
import math
import os
def main():
p.connect(p.GUI)
p.setAdditionalSearchPath(pybullet_data.getDataPath())
p.setGravity(0, 0, -9.81)
p.loadURDF("plane.urdf")
script_dir = os.path.dirname(os.path.abspath(__file__))
urdf_path = os.path.join(script_dir, "../../../asserts/franka_panda/panda.urdf")
if not os.path.exists(urdf_path):
print(f"Error: URDF file not found at {urdf_path}")
return
startPos = [0, 0, 0]
startOrientation = p.getQuaternionFromEuler([0, 0, 0])
robotId = p.loadURDF(urdf_path, startPos, startOrientation, useFixedBase=True)
target_joints = [
0.0,
-math.pi / 4,
0.0,
-3.0 * math.pi / 4,
0.0,
math.pi / 2,
math.pi / 4,
]
num_joints = p.getNumJoints(robotId)
controllable_joints = []
for i in range(num_joints):
info = p.getJointInfo(robotId, i)
joint_type = info[2]
if joint_type == p.JOINT_REVOLUTE:
controllable_joints.append(i)
print(f"Found {len(controllable_joints)} revolute joints.")
if len(controllable_joints) >= len(target_joints):
for i, target_pos in enumerate(target_joints):
joint_index = controllable_joints[i]
p.resetJointState(robotId, joint_index, target_pos)
p.setJointMotorControl2(
robotId, joint_index, p.POSITION_CONTROL, targetPosition=target_pos
)
print(f"Set joint {joint_index} to {target_pos}")
else:
print(
f"Warning: Robot has {len(controllable_joints)} revolute joints, but {len(target_joints)} target angles provided."
)
print("Starting simulation loop...")
while p.isConnected():
p.stepSimulation()
time.sleep(1.0 / 240.0)
if __name__ == "__main__":
main()