From c0cd46e37d2056c82c69a646444689b9fa8fb33e Mon Sep 17 00:00:00 2001 From: Luca Erbetta <luca.erbetta@skywarder.eu> Date: Wed, 6 Nov 2019 23:45:36 +0100 Subject: [PATCH] Updated state machines --- .../event_header_generator/Events.h.template | 1 - .../DeploymentController.cpp | 18 ++++++++++++++++ .../DeploymentController.h | 6 ++++++ .../FlightModeManager/FlightModeManager.cpp | 6 ++++++ .../SensorManager/SensorManager.cpp | 21 +++++++++---------- .../DeathStack/TMTCManager/TMTCManager.cpp | 4 ++-- .../DeathStack/TMTCManager/TMTCManager.h | 1 - .../DeathStack/configs/DeploymentConfig.h | 5 +++-- 8 files changed, 45 insertions(+), 17 deletions(-) diff --git a/scripts/event_header_generator/Events.h.template b/scripts/event_header_generator/Events.h.template index 456d25118..3d79b5859 100644 --- a/scripts/event_header_generator/Events.h.template +++ b/scripts/event_header_generator/Events.h.template @@ -37,7 +37,6 @@ #include "events/Event.h" #include "events/EventBroker.h" -#include "EventStrings.h" #include "Topics.h" using std::string; diff --git a/src/boards/DeathStack/DeploymentController/DeploymentController.cpp b/src/boards/DeathStack/DeploymentController/DeploymentController.cpp index b1dc60205..6df81f36d 100644 --- a/src/boards/DeathStack/DeploymentController/DeploymentController.cpp +++ b/src/boards/DeathStack/DeploymentController/DeploymentController.cpp @@ -132,6 +132,11 @@ State DeploymentController::state_idle(const Event& ev) resetServo(); break; } + case EV_WIGGLE_SERVO + { + wiggleServo(); + break; + } default: { retState = tran_super(&DeploymentController::Hsm_top); @@ -407,4 +412,17 @@ void DeploymentController::disableServo() ejection_servo.disable(SERVO_CHANNEL); } +void DeploymentController::wiggleServo() +{ + for (int i = 0; i < 3; i++) + { + ejection_servo.setPosition(SERVO_CHANNEL, SERVO_RESET_POS + SERVO_WIGGLE_AMPLITUDE); + Thread::sleep(500); + ejection_servo.setPosition(SERVO_CHANNEL, SERVO_RESET_POS - SERVO_WIGGLE_AMPLITUDE); + Thread::sleep(500); + ejection_servo.setPosition(SERVO_CHANNEL, SERVO_RESET_POS); + Thread::sleep(500); + } +} + } // namespace DeathStackBoard diff --git a/src/boards/DeathStack/DeploymentController/DeploymentController.h b/src/boards/DeathStack/DeploymentController/DeploymentController.h index fca36fe51..c8d0f9db3 100644 --- a/src/boards/DeathStack/DeploymentController/DeploymentController.h +++ b/src/boards/DeathStack/DeploymentController/DeploymentController.h @@ -90,6 +90,12 @@ private: void ejectNosecone(); void disableServo(); + /** + * @brief Wiggle the servo just a bit around the reset position to show it's + * working + */ + void wiggleServo(); + /** * Defer an event to be processed when the state machine goes back to * state_idle diff --git a/src/boards/DeathStack/FlightModeManager/FlightModeManager.cpp b/src/boards/DeathStack/FlightModeManager/FlightModeManager.cpp index 304466402..2e50d0c57 100644 --- a/src/boards/DeathStack/FlightModeManager/FlightModeManager.cpp +++ b/src/boards/DeathStack/FlightModeManager/FlightModeManager.cpp @@ -339,6 +339,7 @@ State FlightModeManager::state_armed(const Event& ev) break; } case EV_UMBILICAL_DETACHED: + case EV_TC_LAUNCH: { retState = transition(&FlightModeManager::state_ascending); break; @@ -412,6 +413,11 @@ State FlightModeManager::state_testing(const Event& ev) sEventBroker->post(Event{EV_RESET_SERVO}, TOPIC_DEPLOYMENT); break; } + case EV_TC_WIGGLE_SERVO: + { + sEventBroker->post(Event{EV_WIGGLE_SERVO}, TOPIC_DEPLOYMENT); + break; + } case EV_TC_CLOSE_LOG: { logger.stop(); diff --git a/src/boards/DeathStack/SensorManager/SensorManager.cpp b/src/boards/DeathStack/SensorManager/SensorManager.cpp index 1ab94e8b1..de2107d07 100644 --- a/src/boards/DeathStack/SensorManager/SensorManager.cpp +++ b/src/boards/DeathStack/SensorManager/SensorManager.cpp @@ -122,16 +122,24 @@ void SensorManager::initSensors() sensor_status.piksi = 1; // Initialization + TRACE("Mpu init\n"); sensor_status.mpu9250 = imu_mpu9250->init(); // sensor_status.adis = imu_adis16405->init(); + TRACE("LM75b IMU init\n"); sensor_status.lm75b_imu = temp_lm75b_imu->init(); + + TRACE("LM75b ANAL init\n"); + sensor_status.lm75b_analog = temp_lm75b_analog->init(); // // TODO: lsm6ds3h - sensor_status.ms5803 = pressure_ms5803->init(); + TRACE("MS5803 init\n"); + sensor_status.ms5803 = pressure_ms5803->init(); + TRACE("AD7994 init\n"); + sensor_status.ad7994 = adc_ad7994->init(); sensor_status.battery_sensor = adc_internal->getBatterySensorPtr()->init(); @@ -254,16 +262,7 @@ void SensorManager::stateIdle(const Event& ev) // Perform the transition in both cases case EV_TC_START_SENSOR_LOGGING: - case EV_LIFTOFF: - -#ifdef USE_MOCK_SENSORS - // Signal to the mock pressure sensor that we have liftoff in order - // to start simulating flight pressures - if (ev.sig == EV_LIFTOFF) - { - mock_pressure_sensor->before_liftoff = false; - } -#endif + case EV_ARMED: transition(&SensorManager::stateLogging); break; diff --git a/src/boards/DeathStack/TMTCManager/TMTCManager.cpp b/src/boards/DeathStack/TMTCManager/TMTCManager.cpp index c350f125f..6546c580c 100644 --- a/src/boards/DeathStack/TMTCManager/TMTCManager.cpp +++ b/src/boards/DeathStack/TMTCManager/TMTCManager.cpp @@ -75,7 +75,7 @@ void TMTCManager::stateGroundTM(const Event& ev) test_tm_event_id = sEventBroker->postDelayed<TEST_TM_TIMEOUT>( Event{EV_SEND_TEST_TM}, TOPIC_TMTC); - TRACE("[TMTC] Entering stateTestTM\n"); + TRACE("[TMTC] Entering stateGroundTM\n"); StackLogger::getInstance()->updateStack(THID_TMTC_FSM); break; @@ -118,7 +118,7 @@ void TMTCManager::stateGroundTM(const Event& ev) { sEventBroker->removeDelayed(test_tm_event_id); - TRACE("[TMTC] Exiting stateTestTM\n"); + TRACE("[TMTC] Exiting stateGroundTM\n"); break; } default: diff --git a/src/boards/DeathStack/TMTCManager/TMTCManager.h b/src/boards/DeathStack/TMTCManager/TMTCManager.h index 2aa2b8710..da3e07f9d 100644 --- a/src/boards/DeathStack/TMTCManager/TMTCManager.h +++ b/src/boards/DeathStack/TMTCManager/TMTCManager.h @@ -74,7 +74,6 @@ private: // void stateIdle(const Event& ev); void stateGroundTM(const Event& ev); void stateFlightTM(const Event& ev); - void stateTestTM(const Event& ev); inline void packHRTelemetry(uint8_t* packet, unsigned int index); inline void packLRTelemetry(uint8_t* packet); diff --git a/src/boards/DeathStack/configs/DeploymentConfig.h b/src/boards/DeathStack/configs/DeploymentConfig.h index 99b32893b..3c71bc688 100644 --- a/src/boards/DeathStack/configs/DeploymentConfig.h +++ b/src/boards/DeathStack/configs/DeploymentConfig.h @@ -38,8 +38,7 @@ namespace DeploymentConfigs static constexpr uint8_t MAX_EJECTION_ATTEMPTS = 1; -static constexpr int NC_OPEN_TIMEOUT = 10000; -static constexpr int SERVO_RESET_TIMEOUT = 1000; +static constexpr int NC_OPEN_TIMEOUT = 5000; static const PWM::Timer SERVO_TIMER{ TIM4, &(RCC->APB1ENR), RCC_APB1ENR_TIM4EN, @@ -49,6 +48,8 @@ static constexpr PWMChannel SERVO_CHANNEL = PWMChannel::CH1; // Servo rest position static constexpr float SERVO_RESET_POS = 0.77f; +static constexpr float SERVO_WIGGLE_AMPLITUDE = 0.02f; + // Servo position when ejecting the nosecone static constexpr float SERVO_EJECT_POS = 0.45f; -- GitLab