Browse Source

fw pos/att ctrl: pass manual nose wheel increments during takeoff ground roll

main
Thomas Stastny 3 years ago committed by Daniel Agar
parent
commit
721131a135
  1. 3
      src/modules/fw_att_control/FixedwingAttitudeControl.cpp
  2. 8
      src/modules/fw_pos_control_l1/FixedwingPositionControl.cpp
  3. 3
      src/modules/fw_pos_control_l1/FixedwingPositionControl.hpp
  4. 8
      src/modules/fw_pos_control_l1/runway_takeoff/runway_takeoff_params.c

3
src/modules/fw_att_control/FixedwingAttitudeControl.cpp

@ -556,6 +556,9 @@ void FixedwingAttitudeControl::Run()
if (wheel_control) { if (wheel_control) {
yaw_u = _wheel_ctrl.control_bodyrate(dt, control_input); yaw_u = _wheel_ctrl.control_bodyrate(dt, control_input);
// XXX: this is an abuse -- used to ferry manual yaw inputs from position controller during auto modes
yaw_u += _att_sp.yaw_sp_move_rate * _param_fw_man_y_sc.get();
} else { } else {
yaw_u = _yaw_ctrl.control_euler_rate(dt, control_input, bodyrate_ff(2)); yaw_u = _yaw_ctrl.control_euler_rate(dt, control_input, bodyrate_ff(2));
} }

8
src/modules/fw_pos_control_l1/FixedwingPositionControl.cpp

@ -1424,6 +1424,11 @@ FixedwingPositionControl::control_auto_takeoff(const hrt_abstime &now, const flo
// yaw control is disabled once in "taking off" state // yaw control is disabled once in "taking off" state
_att_sp.fw_control_yaw = _runway_takeoff.controlYaw(); _att_sp.fw_control_yaw = _runway_takeoff.controlYaw();
// XXX: hacky way to pass through manual nose-wheel incrementing. need to clean this interface.
if (_param_rwto_nudge.get()) {
_att_sp.yaw_sp_move_rate = _manual_control_setpoint.r;
}
// tune up the lateral position control guidance when on the ground // tune up the lateral position control guidance when on the ground
if (_att_sp.fw_control_yaw) { if (_att_sp.fw_control_yaw) {
_npfg.setPeriod(_param_rwto_l1_period.get()); _npfg.setPeriod(_param_rwto_l1_period.get());
@ -2359,6 +2364,9 @@ FixedwingPositionControl::Run()
// by default we don't want yaw to be contoller directly with rudder // by default we don't want yaw to be contoller directly with rudder
_att_sp.fw_control_yaw = false; _att_sp.fw_control_yaw = false;
// default to zero - is used (IN A HACKY WAY) to pass direct nose wheel steering via yaw stick to the actuators during auto takeoff
_att_sp.yaw_sp_move_rate = 0.0f;
if (_control_mode_current != FW_POSCTRL_MODE_AUTO_LANDING) { if (_control_mode_current != FW_POSCTRL_MODE_AUTO_LANDING) {
reset_landing_state(); reset_landing_state();
} }

3
src/modules/fw_pos_control_l1/FixedwingPositionControl.hpp

@ -765,7 +765,8 @@ private:
(ParamFloat<px4::params::FW_WING_SPAN>) _param_fw_wing_span, (ParamFloat<px4::params::FW_WING_SPAN>) _param_fw_wing_span,
(ParamFloat<px4::params::FW_WING_HEIGHT>) _param_fw_wing_height, (ParamFloat<px4::params::FW_WING_HEIGHT>) _param_fw_wing_height,
(ParamFloat<px4::params::RWTO_L1_PERIOD>) _param_rwto_l1_period (ParamFloat<px4::params::RWTO_L1_PERIOD>) _param_rwto_l1_period,
(ParamBool<px4::params::RWTO_NUDGE>) _param_rwto_nudge
) )
}; };

8
src/modules/fw_pos_control_l1/runway_takeoff/runway_takeoff_params.c

@ -144,3 +144,11 @@ PARAM_DEFINE_FLOAT(RWTO_RAMP_TIME, 2.0f);
* @group Runway Takeoff * @group Runway Takeoff
*/ */
PARAM_DEFINE_FLOAT(RWTO_L1_PERIOD, 5.0f); PARAM_DEFINE_FLOAT(RWTO_L1_PERIOD, 5.0f);
/**
* Enable use of yaw stick for nudging the wheel during runway ground roll
*
* @boolean
* @group Runway Takeoff
*/
PARAM_DEFINE_INT32(RWTO_NUDGE, 0);

Loading…
Cancel
Save