@@ -350,6 +350,63 @@ def acquire_base_tensors(self):
350350 (self .num_envs , self .num_actions ), device = self .device
351351 )
352352
353+ def generate_ctrl_signals (self ):
354+ """Get Jacobian. Set Franka DOF position targets or DOF torques."""
355+ # Get desired Jacobian
356+ if self .cfg_ctrl ['jacobian_type' ] == 'geometric' :
357+ self .fingertip_midpoint_jacobian_tf = self .fingertip_centered_jacobian
358+ elif self .cfg_ctrl ['jacobian_type' ] == 'analytic' :
359+ self .fingertip_midpoint_jacobian_tf = fc .get_analytic_jacobian (
360+ fingertip_quat = self .fingertip_quat ,
361+ fingertip_jacobian = self .fingertip_centered_jacobian ,
362+ num_envs = self .num_envs ,
363+ device = self .device )
364+ # Set PD joint pos target or joint torque
365+ if self .cfg_ctrl ['motor_ctrl_mode' ] == 'gym' :
366+ self ._set_dof_pos_target ()
367+ elif self .cfg_ctrl ['motor_ctrl_mode' ] == 'manual' :
368+ self ._set_dof_torque ()
369+
370+ def _set_dof_pos_target (self ):
371+ """Set Franka DOF position target to move fingertips towards target pose."""
372+ self .ctrl_target_dof_pos = fc .compute_dof_pos_target (
373+ cfg_ctrl = self .cfg_ctrl ,
374+ arm_dof_pos = self .arm_dof_pos ,
375+ fingertip_midpoint_pos = self .fingertip_centered_pos ,
376+ fingertip_midpoint_quat = self .fingertip_centered_quat ,
377+ jacobian = self .fingertip_midpoint_jacobian_tf ,
378+ ctrl_target_fingertip_midpoint_pos = self .ctrl_target_fingertip_centered_pos ,
379+ ctrl_target_fingertip_midpoint_quat = self .ctrl_target_fingertip_centered_quat ,
380+ ctrl_target_gripper_dof_pos = self .ctrl_target_gripper_dof_pos ,
381+ device = self .device )
382+ self .gym .set_dof_position_target_tensor_indexed (self .sim ,
383+ gymtorch .unwrap_tensor (self .ctrl_target_dof_pos ),
384+ gymtorch .unwrap_tensor (self .franka_actor_ids_sim ),
385+ len (self .franka_actor_ids_sim ))
386+ def _set_dof_torque (self ):
387+ """Set Franka DOF torque to move fingertips towards target pose."""
388+ self .dof_torque = fc .compute_dof_torque (
389+ cfg_ctrl = self .cfg_ctrl ,
390+ dof_pos = self .dof_pos ,
391+ dof_vel = self .dof_vel ,
392+ fingertip_midpoint_pos = self .fingertip_centered_pos ,
393+ fingertip_midpoint_quat = self .fingertip_centered_quat ,
394+ fingertip_midpoint_linvel = self .fingertip_centered_linvel ,
395+ fingertip_midpoint_angvel = self .fingertip_centered_angvel ,
396+ left_finger_force = self .left_finger_force ,
397+ right_finger_force = self .right_finger_force ,
398+ jacobian = self .fingertip_midpoint_jacobian_tf ,
399+ arm_mass_matrix = self .arm_mass_matrix ,
400+ ctrl_target_gripper_dof_pos = self .ctrl_target_gripper_dof_pos ,
401+ ctrl_target_fingertip_midpoint_pos = self .ctrl_target_fingertip_centered_pos ,
402+ ctrl_target_fingertip_midpoint_quat = self .ctrl_target_fingertip_centered_quat ,
403+ ctrl_target_fingertip_contact_wrench = self .ctrl_target_fingertip_contact_wrench ,
404+ device = self .device )
405+ self .gym .set_dof_actuation_force_tensor_indexed (self .sim ,
406+ gymtorch .unwrap_tensor (self .dof_torque ),
407+ gymtorch .unwrap_tensor (self .franka_actor_ids_sim ),
408+ len (self .franka_actor_ids_sim ))
409+
353410 def simulate_and_refresh (self ):
354411 """Simulate one step, refresh tensors, and render results."""
355412
0 commit comments