ICE: allow throttle setpoint to be set to NAN to stop motor without disarming

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
This commit is contained in:
Silvan Fuhrer
2025-05-19 13:23:45 +02:00
parent ed15258abb
commit cff5ecfd88
3 changed files with 6 additions and 2 deletions

View File

@@ -1,7 +1,7 @@
uint64 timestamp # time since system start (microseconds)
bool ignition_on # activate/deactivate ignition (spark plug)
float32 throttle_control # setpoint for throttle actuator, with slew rate if enabled, idles with 0 [norm] [@range 0,1]
float32 throttle_control # setpoint for throttle actuator, with slew rate if enabled, idles with 0 [norm] [@range 0,1] [@uncontrolled NAN to stop motor]
float32 choke_control # setpoint for choke actuator, 1: fully closed [norm] [@range 0,1]
float32 starter_engine_control # setpoint for (electric) starter motor [norm] [@range 0,1]

View File

@@ -55,6 +55,7 @@ public:
internal_combustion_engine_control_s internal_combustion_engine_control;
// map [0, 1] to [-1, 1] which is the interface for non-motor PWM channels
// NAN is mapped to disarmed
if (_internal_combustion_engine_control_sub.update(&internal_combustion_engine_control)) {
_data[0] = internal_combustion_engine_control.ignition_on * 2.f - 1.f;
_data[1] = internal_combustion_engine_control.throttle_control * 2.f - 1.f;

View File

@@ -291,7 +291,7 @@ void InternalCombustionEngineControl::controlEngineStop()
_ignition_on = false;
_choke_control = _param_ice_stop_choke.get() ? 1.f : 0.f;
_starter_engine_control = 0.f;
_throttle_control = 0.f;
_throttle_control = NAN; // this will set it to the DISARMED value
}
void InternalCombustionEngineControl::controlEngineFault()
@@ -393,6 +393,9 @@ The state machine:
- Allows for user inputs from:
- Manual control AUX
- Arming state in [VehicleStatus.msg](../msg_docs/VehicleStatus.md)
- In the state "Stopped" the throttle is set to NAN, which by definition will set the
throttle output to the disarmed value configured for the specific output.
The module publishes [InternalCombustionEngineControl.msg](../msg_docs/InternalCombustionEngineControl.md).