diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index e0143714e2..8e093fbdb9 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -370,7 +370,7 @@ PARAM_DEFINE_FLOAT(COM_OF_LOSS_T, 1.0f); * * @group Commander */ -PARAM_DEFINE_INT32(COM_OBL_ACT, 0); +PARAM_DEFINE_INT32(COM_OBL_ACT, 2); /** * Set offboard loss failsafe mode when RC is available @@ -389,7 +389,7 @@ PARAM_DEFINE_INT32(COM_OBL_ACT, 0); * @value 7 Lockdown * @group Commander */ -PARAM_DEFINE_INT32(COM_OBL_RC_ACT, 0); +PARAM_DEFINE_INT32(COM_OBL_RC_ACT, 3); /** * Time-out to wait when onboard computer connection is lost before warning about loss connection. diff --git a/src/modules/fw_dyn_soar_control/FixedwingPositionINDIControl.cpp b/src/modules/fw_dyn_soar_control/FixedwingPositionINDIControl.cpp index aaff3cc388..b901e4a8a5 100644 --- a/src/modules/fw_dyn_soar_control/FixedwingPositionINDIControl.cpp +++ b/src/modules/fw_dyn_soar_control/FixedwingPositionINDIControl.cpp @@ -1051,15 +1051,16 @@ FixedwingPositionINDIControl::_compute_NDI_stage_1(Vector3f pos_ref, Vector3f ve // get required rotation vector (in body frame) AxisAnglef q_err(R_ref_true); Vector3f w_err; - if (abs(q_err.angle())0.f){ - w_err = (2*M_PI_F-q_err.angle())*q_err.axis(); + w_err = (2.f*M_PI_F-(float)fmod(q_err.angle(),2.f*M_PI_F))*q_err.axis(); } else{ - w_err = (-2*M_PI_F-q_err.angle())*q_err.axis(); + w_err = (-2.f*M_PI_F-(float)fmod(q_err.angle(),2.f*M_PI_F))*q_err.axis(); } } @@ -1075,7 +1076,7 @@ FixedwingPositionINDIControl::_compute_NDI_stage_1(Vector3f pos_ref, Vector3f ve // ========================================== // input meant for tuning the INDI controller // ========================================== - + /* if(hrt_absolute_time()%2000000>1000000){ rot_acc_command = Vector3f{2.0f,1.f,0.f}; //rot_acc_command = Vector3f{0.f,0.f,0.5f}; @@ -1084,12 +1085,12 @@ FixedwingPositionINDIControl::_compute_NDI_stage_1(Vector3f pos_ref, Vector3f ve rot_acc_command = Vector3f{-2.0f,-1.f,0.f}; //rot_acc_command = Vector3f{0.f,0.f,-0.5f}; } - + */ //PX4_INFO("force command: \t%.2f", (double)(f_command*f_command)); //PX4_INFO("force command: \t%.2f\t%.2f\t%.2f", (double)f_command(0), (double)f_command(1), (double)f_command(2)); //PX4_INFO("FRD body frame rotation vec: \t%.2f\t%.2f\t%.2f", (double)w_err(0), (double)w_err(1), (double)w_err(2)); - if (sqrtf(w_err(0)*w_err(0) + w_err(1)*w_err(1) + w_err(2)*w_err(2))>M_PI_F){ - PX4_ERR("rotation angle larger than pi: \t%.2f", (double)sqrtf(w_err(0)*w_err(0) + w_err(1)*w_err(1) + w_err(2)*w_err(2))); + if (sqrtf(w_err*w_err)>M_PI_F){ + PX4_ERR("rotation angle larger than pi: \t%.2f, \t%.2f, \t%.2f", (double)sqrtf(w_err*w_err), (double)q_err.angle(), (double)(q_err.axis()*q_err.axis())); } return rot_acc_command;