diff --git a/src/RIGv2/Actuators/Actuators.cpp b/src/RIGv2/Actuators/Actuators.cpp
index beedaff5633bf4e76a7552001acd5938ea2f4613..cb671723e7dd0117b5d25be416a4973061f8b86d 100644
--- a/src/RIGv2/Actuators/Actuators.cpp
+++ b/src/RIGv2/Actuators/Actuators.cpp
@@ -132,7 +132,8 @@ Actuators::Actuators()
Config::Servos::MIN_PULSE, Config::Servos::MAX_PULSE,
Config::Servos::FREQUENCY);
// This servo is currently unusable, due to it sharing the same timer as
- // miosix, TIM5 infos[4].servo = std::make_unique<Servo>(
+ // miosix, TIM5
+ // infos[4].servo = std::make_unique<Servo>(
// MIOSIX_SERVOS_5_TIM, TimerUtils::Channel::MIOSIX_SERVOS_5_CHANNEL,
// Config::Servos::MIN_PULSE, Config::Servos::MAX_PULSE,
// Config::Servos::FREQUENCY);
@@ -142,10 +143,11 @@ Actuators::Actuators()
Config::Servos::FREQUENCY);
infos[6].servo = std::make_unique<Servo>(
MIOSIX_SERVOS_7_TIM, TimerUtils::Channel::MIOSIX_SERVOS_7_CHANNEL,
- Config::Servos::MIN_PULSE, Config::Servos::MAX_PULSE,
+ Config::Servos::SERVO2_MIN_PULSE, Config::Servos::SERVO2_MAX_PULSE,
Config::Servos::FREQUENCY);
// This servo is currently unusable, due to it sharing the same timer as
- // servo 1 infos[7].servo = std::make_unique<Servo>(
+ // servo 1
+ // infos[7].servo = std::make_unique<Servo>(
// MIOSIX_SERVOS_8_TIM, TimerUtils::Channel::MIOSIX_SERVOS_8_CHANNEL,
// Config::Servos::MIN_PULSE, Config::Servos::MAX_PULSE,
// Config::Servos::FREQUENCY);
@@ -159,7 +161,7 @@ Actuators::Actuators()
Config::Servos::FREQUENCY);
ServoInfo* info;
- info = getServo(ServosList::FILLING_VALVE);
+ info = getServo(ServosList::N2O_FILLING_VALVE);
info->defaultMaxAperture = Config::Servos::DEFAULT_FILLING_MAX_APERTURE;
info->defaultOpeningTime = Config::Servos::DEFAULT_FILLING_OPENING_TIME;
info->limit = Config::Servos::FILLING_LIMIT;
@@ -170,7 +172,7 @@ Actuators::Actuators()
info->maxApertureKey = CONFIG_ID_FILLING_MAX_APERTURE;
info->unsafeSetServoPosition(0.0f);
- info = getServo(ServosList::RELEASE_VALVE);
+ info = getServo(ServosList::N2O_RELEASE_VALVE);
info->defaultMaxAperture = Config::Servos::DEFAULT_RELEASE_MAX_APERTURE;
info->defaultOpeningTime = Config::Servos::DEFAULT_RELEASE_OPENING_TIME;
info->limit = Config::Servos::RELEASE_LIMIT;
@@ -181,7 +183,40 @@ Actuators::Actuators()
info->maxApertureKey = CONFIG_ID_RELEASE_MAX_APERTURE;
info->unsafeSetServoPosition(0.0f);
- info = getServo(ServosList::DISCONNECT_SERVO);
+ info = getServo(ServosList::N2O_VENTING_VALVE);
+ info->defaultMaxAperture = Config::Servos::DEFAULT_VENTING_MAX_APERTURE;
+ info->defaultOpeningTime = Config::Servos::DEFAULT_VENTING_OPENING_TIME;
+ info->limit = Config::Servos::VENTING_LIMIT;
+ info->flipped = Config::Servos::VENTING_FLIPPED;
+ info->openingEvent = Common::Events::MOTOR_OPEN_VENTING_VALVE;
+ info->closingEvent = Common::Events::MOTOR_CLOSE_VENTING_VALVE;
+ info->openingTimeKey = CONFIG_ID_VENTING_OPENING_TIME;
+ info->maxApertureKey = CONFIG_ID_VENTING_MAX_APERTURE;
+ info->unsafeSetServoPosition(0.0f);
+
+ info = getServo(ServosList::N2_FILLING_VALVE);
+ info->defaultMaxAperture = Config::Servos::DEFAULT_FILLING_MAX_APERTURE;
+ info->defaultOpeningTime = Config::Servos::DEFAULT_FILLING_OPENING_TIME;
+ info->limit = Config::Servos::FILLING_LIMIT;
+ info->flipped = Config::Servos::FILLING_FLIPPED;
+ info->openingEvent = Common::Events::MOTOR_OPEN_FILLING_VALVE;
+ info->closingEvent = Common::Events::MOTOR_CLOSE_FILLING_VALVE;
+ info->openingTimeKey = CONFIG_ID_FILLING_OPENING_TIME;
+ info->maxApertureKey = CONFIG_ID_FILLING_MAX_APERTURE;
+ info->unsafeSetServoPosition(0.0f);
+
+ info = getServo(ServosList::N2_RELEASE_VALVE);
+ info->defaultMaxAperture = Config::Servos::DEFAULT_RELEASE_MAX_APERTURE;
+ info->defaultOpeningTime = Config::Servos::DEFAULT_RELEASE_OPENING_TIME;
+ info->limit = Config::Servos::RELEASE_LIMIT;
+ info->flipped = Config::Servos::RELEASE_FLIPPED;
+ info->openingEvent = Common::Events::MOTOR_OPEN_RELEASE_VALVE;
+ info->closingEvent = Common::Events::MOTOR_CLOSE_RELEASE_VALVE;
+ info->openingTimeKey = CONFIG_ID_RELEASE_OPENING_TIME;
+ info->maxApertureKey = CONFIG_ID_RELEASE_MAX_APERTURE;
+ info->unsafeSetServoPosition(0.0f);
+
+ info = getServo(ServosList::N2_DETACH_SERVO);
info->defaultMaxAperture = Config::Servos::DEFAULT_DISCONNECT_MAX_APERTURE;
info->defaultOpeningTime = Config::Servos::DEFAULT_DISCONNECT_OPENING_TIME;
info->limit = Config::Servos::DISCONNECT_LIMIT;
@@ -202,15 +237,15 @@ Actuators::Actuators()
info->maxApertureKey = CONFIG_ID_MAIN_MAX_APERTURE;
info->unsafeSetServoPosition(0.0f);
- info = getServo(ServosList::VENTING_VALVE);
- info->defaultMaxAperture = Config::Servos::DEFAULT_VENTING_MAX_APERTURE;
- info->defaultOpeningTime = Config::Servos::DEFAULT_VENTING_OPENING_TIME;
- info->limit = Config::Servos::VENTING_LIMIT;
- info->flipped = Config::Servos::VENTING_FLIPPED;
- info->openingEvent = Common::Events::MOTOR_OPEN_VENTING_VALVE;
- info->closingEvent = Common::Events::MOTOR_CLOSE_VENTING_VALVE;
- info->openingTimeKey = CONFIG_ID_VENTING_OPENING_TIME;
- info->maxApertureKey = CONFIG_ID_VENTING_MAX_APERTURE;
+ info = getServo(ServosList::NITROGEN_VALVE);
+ info->defaultMaxAperture = Config::Servos::DEFAULT_MAIN_MAX_APERTURE;
+ info->defaultOpeningTime = Config::Servos::DEFAULT_MAIN_OPENING_TIME;
+ info->limit = Config::Servos::MAIN_LIMIT;
+ info->flipped = Config::Servos::MAIN_FLIPPED;
+ info->openingEvent = 0;
+ info->closingEvent = 0;
+ info->openingTimeKey = CONFIG_ID_MAIN_OPENING_TIME;
+ info->maxApertureKey = CONFIG_ID_MAIN_MAX_APERTURE;
info->unsafeSetServoPosition(0.0f);
}
@@ -328,7 +363,8 @@ void Actuators::closeAllServos()
infos[idx].closeServo();
getModule<CanHandler>()->sendServoCloseCommand(ServosList::MAIN_VALVE);
- getModule<CanHandler>()->sendServoCloseCommand(ServosList::VENTING_VALVE);
+ getModule<CanHandler>()->sendServoCloseCommand(
+ ServosList::N2O_VENTING_VALVE);
}
bool Actuators::setMaxAperture(ServosList servo, float aperture)
@@ -366,7 +402,7 @@ bool Actuators::isCanServoOpen(ServosList servo)
Lock<FastMutex> lock(infosMutex);
if (servo == ServosList::MAIN_VALVE)
return canMainOpen;
- else if (servo == ServosList::VENTING_VALVE)
+ else if (servo == ServosList::N2O_VENTING_VALVE)
return canVentingOpen;
else
return false;
@@ -423,7 +459,7 @@ void Actuators::setCanServoOpen(ServosList servo, bool open)
Lock<FastMutex> lock(infosMutex);
if (servo == ServosList::MAIN_VALVE)
canMainOpen = open;
- else if (servo == ServosList::VENTING_VALVE)
+ else if (servo == ServosList::N2O_VENTING_VALVE)
canVentingOpen = open;
}
@@ -436,18 +472,25 @@ void Actuators::inject(DependencyInjector& injector)
Actuators::ServoInfo* Actuators::getServo(ServosList servo)
{
+ // info[4] and info[7] are currently unavailable
switch (servo)
{
- case FILLING_VALVE:
+ case N2O_FILLING_VALVE:
return &infos[0];
- case RELEASE_VALVE:
+ case N2O_RELEASE_VALVE:
return &infos[1];
- case DISCONNECT_SERVO:
+ case N2O_VENTING_VALVE:
return &infos[2];
- case MAIN_VALVE:
+ case N2_FILLING_VALVE:
return &infos[3];
- case VENTING_VALVE:
+ case N2_RELEASE_VALVE:
+ return &infos[5];
+ case N2_DETACH_SERVO:
return &infos[6];
+ case MAIN_VALVE:
+ return &infos[8];
+ case NITROGEN_VALVE:
+ return &infos[9];
default:
// Oh FUCK
diff --git a/src/RIGv2/Actuators/Actuators.h b/src/RIGv2/Actuators/Actuators.h
index 58342d074134aca1e148f84f61740faa2c759adb..41cf009ff31099c16f6800692d96c8eef6f2cdf0 100644
--- a/src/RIGv2/Actuators/Actuators.h
+++ b/src/RIGv2/Actuators/Actuators.h
@@ -26,7 +26,7 @@
#include <RIGv2/CanHandler/CanHandler.h>
#include <RIGv2/Registry/Registry.h>
#include <actuators/Servo/Servo.h>
-#include <common/MavlinkLyra.h>
+#include <common/MavlinkOrion.h>
#include <miosix.h>
#include <scheduler/TaskScheduler.h>
diff --git a/src/RIGv2/CanHandler/CanHandler.h b/src/RIGv2/CanHandler/CanHandler.h
index 282d8eef931a444188179e981d0e906dd77257a3..0b8a305e5fc7c8cd8a7d1487d06ccdafd15e9b10 100644
--- a/src/RIGv2/CanHandler/CanHandler.h
+++ b/src/RIGv2/CanHandler/CanHandler.h
@@ -26,7 +26,7 @@
#include <RIGv2/Configs/CanHandlerConfig.h>
#include <RIGv2/Sensors/Sensors.h>
#include <common/CanConfig.h>
-#include <common/MavlinkLyra.h>
+#include <common/MavlinkOrion.h>
#include <drivers/canbus/CanProtocol/CanProtocol.h>
#include <utils/DependencyManager/DependencyManager.h>
diff --git a/src/RIGv2/Configs/ActuatorsConfig.h b/src/RIGv2/Configs/ActuatorsConfig.h
index 7d7fee299a566fca74d94abaaf09ec1951409eaa..bfa3ddf4397c4c2f6a7cc3fb2bf77fc4ffa98bfa 100644
--- a/src/RIGv2/Configs/ActuatorsConfig.h
+++ b/src/RIGv2/Configs/ActuatorsConfig.h
@@ -72,7 +72,7 @@ constexpr bool FILLING_FLIPPED = true;
constexpr bool VENTING_FLIPPED = true;
constexpr bool MAIN_FLIPPED = true;
constexpr bool RELEASE_FLIPPED = true;
-constexpr bool DISCONNECT_FLIPPED = true;
+constexpr bool DISCONNECT_FLIPPED = false;
} // namespace Servos
diff --git a/src/RIGv2/Configs/RadioConfig.h b/src/RIGv2/Configs/RadioConfig.h
index 98830ac094ccfdcb2c929d808389de2448c4a60f..af1b8643e9be58a52e7c29b74f2514fd5a38db79 100644
--- a/src/RIGv2/Configs/RadioConfig.h
+++ b/src/RIGv2/Configs/RadioConfig.h
@@ -22,7 +22,7 @@
#pragma once
-#include <common/MavlinkLyra.h>
+#include <common/MavlinkOrion.h>
namespace RIGv2
{
diff --git a/src/RIGv2/Radio/Radio.cpp b/src/RIGv2/Radio/Radio.cpp
index 5e7bdc47aaf2ac5870f6952b5fe21d35e833ab20..f657b77f314326b7d701792baa38ace350e47bc3 100644
--- a/src/RIGv2/Radio/Radio.cpp
+++ b/src/RIGv2/Radio/Radio.cpp
@@ -515,10 +515,18 @@ bool Radio::enqueueSystemTm(uint8_t tmId)
tm.timestamp = TimestampTimer::getTimestamp();
// Sensors
- tm.loadcell_rocket = sensors->getTankWeightLastSample().load;
- tm.loadcell_vessel = sensors->getVesselWeightLastSample().load;
- tm.filling_pressure = sensors->getFillingPressLastSample().pressure;
- tm.vessel_pressure = sensors->getVesselPressLastSample().pressure;
+ tm.rocket_mass = sensors->getTankWeightLastSample().load;
+ tm.n2o_vessel_mass = sensors->getVesselWeightLastSample().load;
+
+ tm.n2o_filling_pressure =
+ sensors->getFillingPressLastSample().pressure;
+ tm.n2o_vessel_pressure =
+ sensors->getVesselPressLastSample().pressure;
+
+ tm.n2_filling_pressure = -1.f; // TODO
+ tm.n2_vessel_1_pressure = -1.f; // TODO
+ tm.n2_vessel_2_pressure = -1.f; // TODO
+
tm.battery_voltage = sensors->getBatteryVoltageLastSample().voltage;
tm.current_consumption =
sensors->getServoCurrentLastSample().current;
@@ -540,15 +548,28 @@ bool Radio::enqueueSystemTm(uint8_t tmId)
sdLogger.log(cpuStats);
// Valve states
- tm.filling_valve_state =
- actuators->isServoOpen(ServosList::FILLING_VALVE) ? 1 : 0;
- tm.venting_valve_state =
- actuators->isServoOpen(ServosList::VENTING_VALVE) ? 1 : 0;
- tm.release_valve_state =
- actuators->isServoOpen(ServosList::RELEASE_VALVE) ? 1 : 0;
+ tm.n2o_filling_valve_state =
+ actuators->isServoOpen(ServosList::N2O_FILLING_VALVE);
+ tm.n2o_release_valve_state =
+ actuators->isServoOpen(ServosList::N2O_RELEASE_VALVE);
+ tm.n2o_detach_state = 0; // TODO
+ tm.n2o_venting_valve_state =
+ actuators->isServoOpen(ServosList::N2O_VENTING_VALVE);
+
+ tm.n2_filling_valve_state =
+ actuators->isServoOpen(ServosList::N2_FILLING_VALVE);
+ tm.n2_release_valve_state =
+ actuators->isServoOpen(ServosList::N2_RELEASE_VALVE);
+ tm.n2_detach_state =
+ actuators->isServoOpen(ServosList::N2_DETACH_SERVO);
+ tm.n2_quenching_valve_state = 0; // TODO
+ tm.n2_3way_valve_state = 0; // TODO
+
tm.main_valve_state =
- actuators->isServoOpen(ServosList::MAIN_VALVE) ? 1 : 0;
- tm.nitrogen_valve_state = actuators->isNitrogenOpen() ? 1 : 0;
+ actuators->isServoOpen(ServosList::MAIN_VALVE);
+ tm.nitrogen_valve_state =
+ actuators->isServoOpen(ServosList::NITROGEN_VALVE);
+ tm.ignition_state = actuators->isNitrogenOpen();
// Internal states
tm.gmm_state = getModule<GroundModeManager>()->getState();
@@ -600,7 +621,8 @@ bool Radio::enqueueSystemTm(uint8_t tmId)
tm.main_valve_state =
actuators->isCanServoOpen(ServosList::MAIN_VALVE) ? 1 : 0;
tm.venting_valve_state =
- actuators->isCanServoOpen(ServosList::VENTING_VALVE) ? 1 : 0;
+ actuators->isCanServoOpen(ServosList::N2O_VENTING_VALVE) ? 1
+ : 0;
// Can data
CanHandler::CanStatus canStatus =
@@ -857,53 +879,81 @@ void Radio::handleConrigState(const mavlink_message_t& msg)
lastManualActuation = currentTime;
}
- if (oldConrigState.filling_valve_btn == 0 &&
- state.filling_valve_btn == 1)
+ if (oldConrigState.n2o_filling_btn == 0 && state.n2o_filling_btn == 1)
{
- // The filling switch was pressed
+ // The N2O filling switch was pressed
EventBroker::getInstance().post(MOTOR_MANUAL_ACTION, TOPIC_TARS);
- getModule<Actuators>()->toggleServo(ServosList::FILLING_VALVE);
+ getModule<Actuators>()->toggleServo(ServosList::N2O_FILLING_VALVE);
lastManualActuation = currentTime;
}
- if (oldConrigState.quick_connector_btn == 0 &&
- state.quick_connector_btn == 1)
+ if (oldConrigState.n2o_release_btn == 0 && state.n2o_release_btn == 1)
{
- // The quick conector switch was pressed
+ // The N2O release switch was pressed
EventBroker::getInstance().post(MOTOR_MANUAL_ACTION, TOPIC_TARS);
- getModule<Actuators>()->toggleServo(ServosList::DISCONNECT_SERVO);
+ getModule<Actuators>()->toggleServo(ServosList::N2O_RELEASE_VALVE);
lastManualActuation = currentTime;
}
- if (oldConrigState.release_pressure_btn == 0 &&
- state.release_pressure_btn == 1)
+ // TODO: n2o_detach_btn
+
+ if (oldConrigState.n2o_venting_btn == 0 && state.n2o_venting_btn == 1)
{
- // The release switch was pressed
+ // The N2O venting switch was pressed
EventBroker::getInstance().post(MOTOR_MANUAL_ACTION, TOPIC_TARS);
- getModule<Actuators>()->toggleServo(ServosList::RELEASE_VALVE);
+ getModule<Actuators>()->toggleServo(ServosList::N2O_VENTING_VALVE);
lastManualActuation = currentTime;
}
- if (oldConrigState.venting_valve_btn == 0 &&
- state.venting_valve_btn == 1)
+ if (oldConrigState.n2_filling_btn == 0 && state.n2_filling_btn == 1)
{
- // The venting switch was pressed
+ // The N2 filling switch was pressed
EventBroker::getInstance().post(MOTOR_MANUAL_ACTION, TOPIC_TARS);
- getModule<Actuators>()->toggleServo(ServosList::VENTING_VALVE);
+ getModule<Actuators>()->toggleServo(ServosList::N2_FILLING_VALVE);
lastManualActuation = currentTime;
}
- if (oldConrigState.start_tars_btn == 0 && state.start_tars_btn == 1)
+ if (oldConrigState.n2_release_btn == 0 && state.n2_release_btn == 1)
+ {
+ // The N2 release switch was pressed
+ EventBroker::getInstance().post(MOTOR_MANUAL_ACTION, TOPIC_TARS);
+ getModule<Actuators>()->toggleServo(ServosList::N2_RELEASE_VALVE);
+
+ lastManualActuation = currentTime;
+ }
+
+ if (oldConrigState.n2_detach_btn == 0 && state.n2_detach_btn == 1)
+ {
+ // The N2 detach switch was pressed
+ EventBroker::getInstance().post(MOTOR_MANUAL_ACTION, TOPIC_TARS);
+ getModule<Actuators>()->toggleServo(ServosList::N2_DETACH_SERVO);
+
+ lastManualActuation = currentTime;
+ }
+
+ // TODO: n2_quenching_btn
+ // TODO: n2_3way_btn
+
+ if (oldConrigState.tars_btn == 0 && state.tars_btn == 1)
{
// The TARS switch was pressed
EventBroker::getInstance().post(MOTOR_START_TARS, TOPIC_TARS);
lastManualActuation = currentTime;
}
+
+ if (oldConrigState.nitrogen_btn == 0 && state.nitrogen_btn == 1)
+ {
+ // The nitrogen switch was pressed
+ EventBroker::getInstance().post(MOTOR_MANUAL_ACTION, TOPIC_TARS);
+ getModule<Actuators>()->toggleServo(ServosList::NITROGEN_VALVE);
+
+ lastManualActuation = currentTime;
+ }
}
// Special case for disarming, that can be done bypassing the timeout
diff --git a/src/RIGv2/Radio/Radio.h b/src/RIGv2/Radio/Radio.h
index 26a32da17469e7c7b3a031d438fd882120b6bd0d..582ee6d9787741f4ef1a59b7662b88953fccbf9a 100644
--- a/src/RIGv2/Radio/Radio.h
+++ b/src/RIGv2/Radio/Radio.h
@@ -31,7 +31,7 @@
#include <RIGv2/Sensors/Sensors.h>
#include <RIGv2/StateMachines/GroundModeManager/GroundModeManager.h>
#include <RIGv2/StateMachines/TARS1/TARS1.h>
-#include <common/MavlinkLyra.h>
+#include <common/MavlinkOrion.h>
#include <interfaces-impl/hwmapping.h>
#include <radio/MavlinkDriver/MavlinkDriver.h>
#include <radio/SX1278/SX1278Lora.h>
diff --git a/src/RIGv2/StateMachines/TARS1/TARS1.cpp b/src/RIGv2/StateMachines/TARS1/TARS1.cpp
index 5b0f879d6ee4252d57bf60c0893bbbbf5318ee5f..50a1f90d7c405769b4f0a03bf1a42ec5f420ca55 100644
--- a/src/RIGv2/StateMachines/TARS1/TARS1.cpp
+++ b/src/RIGv2/StateMachines/TARS1/TARS1.cpp
@@ -104,13 +104,13 @@ void TARS1::state_refueling(const Event& event)
logAction(TarsActionType::WASHING);
// Start washing
- actuators->openServoWithTime(ServosList::VENTING_VALVE,
+ actuators->openServoWithTime(ServosList::N2O_VENTING_VALVE,
Config::TARS1::WASHING_OPENING_TIME);
// Wait a bit so that the servo don't actuate at the same time
Thread::sleep(Config::TARS1::WASHING_TIME_DELAY);
- actuators->openServoWithTime(ServosList::FILLING_VALVE,
+ actuators->openServoWithTime(ServosList::N2O_FILLING_VALVE,
Config::TARS1::WASHING_OPENING_TIME);
// After double the time we opened the valve, move to the next phase
@@ -127,7 +127,7 @@ void TARS1::state_refueling(const Event& event)
logAction(TarsActionType::OPEN_FILLING);
// Open the filling for a long time
- actuators->openServoWithTime(ServosList::FILLING_VALVE,
+ actuators->openServoWithTime(ServosList::N2O_FILLING_VALVE,
Config::TARS1::FILLING_OPENING_TIME);
nextDelayedEventId = EventBroker::getInstance().postDelayed(
@@ -176,11 +176,11 @@ void TARS1::state_refueling(const Event& event)
logAction(TarsActionType::OPEN_VENTING);
// Open the venting and check for pressure stabilization
- actuators->openServo(ServosList::VENTING_VALVE);
+ actuators->openServo(ServosList::N2O_VENTING_VALVE);
// Calculate next check time based on the time the valve stays open
unsigned int nextCheckTime =
- actuators->getServoOpeningTime(ServosList::VENTING_VALVE) +
+ actuators->getServoOpeningTime(ServosList::N2O_VENTING_VALVE) +
Config::TARS1::PRESSURE_STABILIZE_WAIT_TIME * 5;
nextDelayedEventId = EventBroker::getInstance().postDelayed(