Skip to content

Commit

Permalink
ackermann: reset controllers on disarm
Browse files Browse the repository at this point in the history
  • Loading branch information
chfriedrich98 committed Sep 2, 2024
1 parent 60b27c0 commit 3e90f51
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/modules/rover_ackermann/RoverAckermann.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ void RoverAckermann::Run()
hrt_abstime timestamp = hrt_absolute_time();

if (_armed) {
_was_armed = true;

switch (_nav_state) {
case vehicle_status_s::NAVIGATION_STATE_MANUAL: {
manual_control_setpoint_s manual_control_setpoint{};
Expand Down Expand Up @@ -98,18 +100,20 @@ void RoverAckermann::Run()
break;
}

} else { // Reset on disarm
_ackermann_control.computeMotorCommands(_vehicle_forward_speed, _vehicle_yaw);

} else if (_was_armed) { // Reset on disarm
_was_armed = false;
rover_ackermann_setpoint_s rover_ackermann_setpoint{};
rover_ackermann_setpoint.timestamp = timestamp;
rover_ackermann_setpoint.forward_speed_setpoint = NAN;
rover_ackermann_setpoint.forward_speed_setpoint_normalized = 0.f;
rover_ackermann_setpoint.steering_setpoint = NAN;
rover_ackermann_setpoint.steering_setpoint_normalized = 0.f;
_rover_ackermann_setpoint_pub.publish(rover_ackermann_setpoint);
_ackermann_control.resetControllers();
}

_ackermann_control.computeMotorCommands(_vehicle_forward_speed, _vehicle_yaw);

}

void RoverAckermann::updateSubscriptions()
Expand Down
1 change: 1 addition & 0 deletions src/modules/rover_ackermann/RoverAckermann.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,5 +114,6 @@ class RoverAckermann : public ModuleBase<RoverAckermann>, public ModuleParams,
float _vehicle_forward_speed{0.f};
float _vehicle_yaw{0.f};
bool _armed{false};
bool _was_armed{false};

};
Original file line number Diff line number Diff line change
Expand Up @@ -185,3 +185,10 @@ void RoverAckermannControl::publishMotorSetpoints(motor_setpoint_struct motor_se
actuator_servos.timestamp = _timestamp;
_actuator_servos_pub.publish(actuator_servos);
}

void RoverAckermannControl::resetControllers()
{
pid_reset_integral(&_pid_throttle);
_throttle_with_accel_limit.setForcedValue(0.f);
_steering_with_rate_limit.setForcedValue(0.f);
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ class RoverAckermannControl : public ModuleParams
*/
void computeMotorCommands(float vehicle_forward_speed, float vehicle_yaw);

/**
* @brief Reset PID controllers and slew rates
*/
void resetControllers();

protected:
/**
* @brief Update the parameters of the module.
Expand Down

0 comments on commit 3e90f51

Please sign in to comment.