uavcan: esc: fix actuator test on uavcan ESCs that consume ArmingStatus (#26255)

* uavcan esc: remove unused includes

* uavcan arming_status: disarm when terminated

To stay consistent with kill.

* uavcan: publish armed during actuator tests to make it possible spinning motors
This commit is contained in:
Matthias Grob 2026-01-13 20:57:54 +01:00 committed by GitHub
parent 46d9b14ba0
commit 473ef5fd06
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 13 additions and 10 deletions

View File

@ -43,8 +43,6 @@
#include <drivers/drv_hrt.h>
#include <lib/atmosphere/atmosphere.h>
#define MOTOR_BIT(x) (1<<(x))
using namespace time_literals;
UavcanEscController::UavcanEscController(uavcan::INode &node) :

View File

@ -47,13 +47,9 @@
#include <uavcan/uavcan.hpp>
#include <uavcan/equipment/esc/RawCommand.hpp>
#include <uavcan/equipment/esc/Status.hpp>
#include <lib/perf/perf_counter.h>
#include <uORB/PublicationMulti.hpp>
#include <uORB/topics/actuator_outputs.h>
#include <uORB/topics/esc_status.h>
#include <drivers/drv_hrt.h>
#include <drivers/uavcan/node_info.hpp>
#include <parameters/param.h>
#include "../node_info.hpp"
class UavcanEscController
{

View File

@ -66,10 +66,9 @@ void UavcanArmingStatus::periodic_update(const uavcan::TimerEvent &)
if (_actuator_armed_sub.update(&actuator_armed)) {
uavcan::equipment::safety::ArmingStatus cmd;
if (actuator_armed.lockdown || actuator_armed.kill) {
cmd.status = cmd.STATUS_DISARMED;
bool lockdown_active = actuator_armed.lockdown || actuator_armed.termination || actuator_armed.kill;
} else if (actuator_armed.armed) {
if (!lockdown_active && (actuator_armed.armed || _is_actuator_test_running)) {
cmd.status = cmd.STATUS_FULLY_ARMED;
} else {

View File

@ -57,6 +57,8 @@ public:
*/
int init();
void setActuatorTestRunning(bool running) {_is_actuator_test_running = running;}
private:
/*
* Max update rate to avoid exessive bus traffic
@ -80,4 +82,5 @@ private:
uORB::Subscription _actuator_armed_sub{ORB_ID(actuator_armed)};
bool _is_actuator_test_running = false;
};

View File

@ -969,6 +969,10 @@ UavcanNode::Run()
}
}
#if defined(CONFIG_UAVCAN_OUTPUTS_CONTROLLER)
_arming_status_controller.setActuatorTestRunning(_mixing_interface_esc.isActuatorTestRunning());
#endif
perf_end(_cycle_perf);
pthread_mutex_unlock(&_node_mutex);

View File

@ -136,6 +136,8 @@ public:
MixingOutput &mixingOutput() { return _mixing_output; }
bool isActuatorTestRunning() const { return _mixing_output.isActuatorTestRunning(); }
protected:
void Run() override;
private:

View File

@ -163,6 +163,7 @@ public:
void setMaxTopicUpdateRate(unsigned max_topic_update_interval_us);
const actuator_armed_s &armed() const { return _armed; }
bool isActuatorTestRunning() const { return _actuator_test.inTestMode(); }
void setAllFailsafeValues(uint16_t value);
void setAllDisarmedValues(uint16_t value);