15HOME_POSE = [0.0, 0.2618, 3.1416, -2.2689, 0.0, 0.9599, 1.5708]
17KP = [100, 200, 100, 200, 100, 200, 100]
18KD = [10, 20, 10, 20, 10, 20, 10]
39 parser = argparse.ArgumentParser()
40 parser.add_argument(
"--gui", action=
"store_true")
41 args = parser.parse_args()
43 arm_path = mjk.menagerie.model_path(
"kinova_gen3", env_var=
"MJ_KDL_MODEL")
44 gripper_path = mjk.menagerie.asset_path(
"robotiq_2f85/2f85.xml", env_var=
"MJ_KDL_GRIPPER")
47 spec = mjk.SceneSpec()
50 spec.add_skybox =
True
51 left = mjk.RobotSpec()
53 left.pos = [-1.0, 0.0, 0.0]
54 left.attachments = [attach]
55 right = mjk.RobotSpec()
58 right.pos = [1.0, 0.0, 0.0]
59 right.attachments = [attach]
60 spec.robots = [left, right]
62 env = mjk.Env.build(spec)
64 tool1 = mjk.ToolFrameSpec()
65 tool1.tool_body =
"g_base"
66 tool1.tcp_site =
"g_pinch"
67 tool2 = mjk.ToolFrameSpec()
68 tool2.tool_body =
"r2_g_base"
69 tool2.tcp_site =
"r2_g_pinch"
70 arm1 = env.create_robot(
"base_link",
"bracelet_link", tool=tool1)
71 arm2 = env.create_robot(
"r2_base_link",
"r2_bracelet_link", tool=tool2)
72 for robot
in (arm1, arm2):
73 robot.ctrl_mode = mjk.CtrlMode.TORQUE
76 arm1.set_joint_pos(HOME_POSE, call_forward=
False)
77 arm2.set_joint_pos(HOME_POSE, call_forward=
False)
79 env.on_reset = on_reset
83 apply(arm1, HOME_POSE)
84 apply(arm2, HOME_POSE)
85 grip = 255.0
if math.fmod(env.time(), 6.0) < 3.0
else 0.0
86 for name
in (
"g_fingers_actuator",
"r2_g_fingers_actuator"):
87 if env.has_actuator(name):
88 env.set_actuator_ctrl(name, grip)
91 viewer = mjk.SimulateViewer.open(arm1,
"ex_dual_arm.py")
94 while viewer.is_running():
95 if env.time() < prev - 1e-6:
104 end = env.time() + 1.2
105 while env.time() < end:
108 arm1_frame = arm1.fk_frame()
109 arm2_frame = arm2.fk_frame()
110 arm1_pos = [arm1_frame.p.x(), arm1_frame.p.y(), arm1_frame.p.z()]
111 arm2_pos = [arm2_frame.p.x(), arm2_frame.p.y(), arm2_frame.p.z()]
112 print(f
"arm1 EE: {[round(x, 4) for x in arm1_pos]}")
113 print(f
"arm2 EE: {[round(x, 4) for x in arm2_pos]}")