@ -2827,14 +2827,26 @@ class G1Deploy {
float * floatarr = action_buffer . data ( ) ;
MotorCommand motor_command_tmp ;
for ( int i = 0 ; i < G1_NUM_MOTOR ; i + + ) {
const double action_value = static_cast < double > ( floatarr [ isaaclab_to_mujoco [ i ] ] ) * g1_action_scale [ i ] ;
last_action [ i ] = static_cast < double > ( floatarr [ i ] ) ;
motor_command_tmp . q_target . at ( i ) = static_cast < float > ( default_angles [ i ] + action_value ) ;
motor_command_tmp . tau_ff . at ( i ) = 0.0 ;
motor_command_tmp . kp . at ( i ) = kps [ i ] ;
motor_command_tmp . kd . at ( i ) = kds [ i ] ;
motor_command_tmp . dq_target . at ( i ) = 0.0 ;
// Neutral hold mode: bypass NN, command default angles directly (key 'n')
if ( g_neutral_hold_mode . load ( ) ) {
for ( int i = 0 ; i < G1_NUM_MOTOR ; i + + ) {
motor_command_tmp . q_target . at ( i ) = static_cast < float > ( default_angles [ i ] ) ;
motor_command_tmp . tau_ff . at ( i ) = 0.0 ;
motor_command_tmp . kp . at ( i ) = kps [ i ] ;
motor_command_tmp . kd . at ( i ) = kds [ i ] ;
motor_command_tmp . dq_target . at ( i ) = 0.0 ;
}
} else {
for ( int i = 0 ; i < G1_NUM_MOTOR ; i + + ) {
const double action_value = static_cast < double > ( floatarr [ isaaclab_to_mujoco [ i ] ] ) * g1_action_scale [ i ] ;
last_action [ i ] = static_cast < double > ( floatarr [ i ] ) ;
motor_command_tmp . q_target . at ( i ) = static_cast < float > ( default_angles [ i ] + action_value ) ;
motor_command_tmp . tau_ff . at ( i ) = 0.0 ;
motor_command_tmp . kp . at ( i ) = kps [ i ] ;
motor_command_tmp . kd . at ( i ) = kds [ i ] ;
motor_command_tmp . dq_target . at ( i ) = 0.0 ;
}
}
// Optional waist pitch offset (keys 7/8). Default 0°.
double waist_offset_rad = g_waist_pitch_offset_deg . load ( ) * M_PI / 180.0 ;