diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 4312763b092dec381ecb2560da6059397ff28bba..b0c1bcd23ce3f555c5bd4de65851ce97acea7b8d 100755 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -247,7 +247,7 @@ } }, { - "name": "stm32f429zi_skyward_death_stack_v3_hil", + "name": "stm32f429zi_skyward_death_stack_v3_hil_euroc", "cStandard": "c11", "cppStandard": "c++11", "compilerPath": "/opt/arm-miosix-eabi/bin/arm-miosix-eabi-g++", @@ -261,7 +261,8 @@ "_MIOSIX", "__cplusplus=201103L", "HILSimulation", - "USE_XBEE_TRANSCEIVER" + "USE_XBEE_TRANSCEIVER", + "EUROC" ], "includePath": [ "${workspaceFolder}/skyward-boardcore/libs/miosix-kernel/miosix/config/arch/cortexM4_stm32f4/stm32f429zi_skyward_death_stack_v3", diff --git a/.vscode/settings.json b/.vscode/settings.json index ad21fcf0fffe8a054a310970e7b4d7ea6c7755e9..befe29ab75f0f5a01539623896c81d91a2676341 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -122,11 +122,14 @@ "Eigen", "EXTI", "GPIOF", + "KALM", "kalman", "mavlink", "miosix", + "MPXH", "Nidasio", "pitot", + "Setpoint", "stateinitializer", "telecommands", "UBXGPS", diff --git a/src/boards/Main/Configs/ActuatorsConfigs.h b/src/boards/Main/Configs/ActuatorsConfigs.h index f106980a876230ce6e85043153df90cf57f70e0c..0ea215be3d84250da11c19a38934bc59b1fd6c3b 100644 --- a/src/boards/Main/Configs/ActuatorsConfigs.h +++ b/src/boards/Main/Configs/ActuatorsConfigs.h @@ -49,7 +49,8 @@ constexpr Boardcore::TimerUtils::Channel ABK_SERVO_PWM_CH = Boardcore::TimerUtils::Channel::CHANNEL_1; // TODO: Change rotation with min and max -constexpr float ABK_SERVO_ROTATION = 50; // [deg] +constexpr float ABK_SERVO_ROTATION = 66.4; // [deg] AirBrakes without end stop +// constexpr float ABK_SERVO_ROTATION = 65; // [deg] AirBrakes with end stop constexpr float ABK_SERVO_MIN_PULSE = 1410; // [deg] constexpr float ABK_SERVO_MAX_PULSE = ABK_SERVO_MIN_PULSE - 10 * ABK_SERVO_ROTATION; // [us] diff --git a/src/boards/Main/Configs/AirBrakesControllerConfig.h b/src/boards/Main/Configs/AirBrakesControllerConfig.h index c658c328ab2f1e3617b5e9d8eaaf34410833bdf5..212da509b2b54ef605f6f82af91b136705d79530 100644 --- a/src/boards/Main/Configs/AirBrakesControllerConfig.h +++ b/src/boards/Main/Configs/AirBrakesControllerConfig.h @@ -39,6 +39,8 @@ static constexpr int SHADOW_MODE_TIMEOUT = 5 * 1000; static constexpr int SHADOW_MODE_TIMEOUT = 3.5 * 1000; #endif +constexpr float MACH_LIMIT = 0.6; + // Vertical speed limit beyond which the airbrakes need to be disabled. constexpr float DISABLE_VERTICAL_SPEED_TARGET = 10.0; diff --git a/src/boards/Main/StateMachines/ADAController/ADAController.cpp b/src/boards/Main/StateMachines/ADAController/ADAController.cpp index d86908816f091aad14986934b688cfc1826ff324..88ec38c416258df242df4c17f8d760b440b0c427 100644 --- a/src/boards/Main/StateMachines/ADAController/ADAController.cpp +++ b/src/boards/Main/StateMachines/ADAController/ADAController.cpp @@ -232,6 +232,7 @@ void ADAController::calibrate() { miosix::PauseKernelLock l; ada.setReferenceValues(reference); + ada.setKalmanConfig(getADAKalmanConfig()); } EventBroker::getInstance().post(ADA_READY, TOPIC_ADA); @@ -311,10 +312,12 @@ void ADAController::state_calibrating(const Event& event) { case EV_ENTRY: { + logStatus(ADAControllerState::CALIBRATING); + // Calibrate the ADA calibrate(); - return logStatus(ADAControllerState::CALIBRATING); + return; } case ADA_READY: { diff --git a/src/boards/Main/StateMachines/AirBrakesController/AirBrakesController.cpp b/src/boards/Main/StateMachines/AirBrakesController/AirBrakesController.cpp index 6ce0c15686310121ad5b5c204b9e45e03ce4bb29..555a2c4c2ef3648fa39986ff1ae2b203e05e5108 100644 --- a/src/boards/Main/StateMachines/AirBrakesController/AirBrakesController.cpp +++ b/src/boards/Main/StateMachines/AirBrakesController/AirBrakesController.cpp @@ -61,7 +61,17 @@ bool AirBrakesController::start() return ActiveObject::start(); } -void AirBrakesController::update() { abk.update(); } +void AirBrakesController::update() +{ + auto currentPoint = + TimedTrajectoryPoint{NASController::getInstance().getNasState()}; + + if (!abk.isRunning() && status.state == AirBrakesControllerState::ACTIVE && + currentPoint.getMac() < MACH_LIMIT) + abk.begin(); + + abk.update(); +} AirBrakesControllerStatus AirBrakesController::getStatus() { @@ -146,8 +156,6 @@ void AirBrakesController::state_active(const Event& event) { case EV_ENTRY: { - abk.begin(); - return logStatus(AirBrakesControllerState::ACTIVE); } case FLIGHT_APOGEE_DETECTED: @@ -164,11 +172,12 @@ void AirBrakesController::state_end(const Event& event) { case EV_ENTRY: { - abk.end(); + logStatus(AirBrakesControllerState::END); + abk.end(); Actuators::getInstance().setServoAngle(AIRBRAKES_SERVO, 0); - return logStatus(AirBrakesControllerState::END); + return; } } } @@ -185,9 +194,11 @@ AirBrakesController::AirBrakesController() []() { return Sensors::getInstance().state.kalman->getLastSample(); }, #endif // HILMockNAS TRAJECTORY_SET, AirBrakesControllerConfig::ABK_CONFIG, - [](float position) { - Actuators::getInstance().setServo(ServosList::AIRBRAKES_SERVO, - position); + [](float position) + { + // Actuators::getInstance().setServo(ServosList::AIRBRAKES_SERVO, + // position); + Actuators::getInstance().setServo(ServosList::AIRBRAKES_SERVO, 1); }) { EventBroker::getInstance().subscribe(this, TOPIC_ABK); diff --git a/src/boards/Main/StateMachines/NASController/NASController.cpp b/src/boards/Main/StateMachines/NASController/NASController.cpp index 987fbfa976563ca281a3786fa409c1115e4f5d5d..f3ee9c74a9e7842b14e7f692177544f7a0a0c3b7 100644 --- a/src/boards/Main/StateMachines/NASController/NASController.cpp +++ b/src/boards/Main/StateMachines/NASController/NASController.cpp @@ -56,7 +56,7 @@ void NASController::update() Sensors::getInstance().getBMX160WithCorrectionLastSample(); auto gpsData = Sensors::getInstance().getUbxGpsLastSample(); auto pressureData = Sensors::getInstance().getMS5803LastSample(); - auto pitotData = Sensors::getInstance().getPitotData(); + auto pitotData = Sensors::getInstance().getPitotLastSample(); // Predict step nas.predictGyro(imuData); @@ -224,10 +224,12 @@ void NASController::state_calibrating(const Event &event) { case EV_ENTRY: { + logStatus(NASControllerState::CALIBRATING); + // Calibrate the NAS calibrate(); - return logStatus(NASControllerState::CALIBRATING); + return; } case NAS_READY: {