mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-27 18:27:05 +08:00
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:
@@ -43,8 +43,6 @@
|
|||||||
#include <drivers/drv_hrt.h>
|
#include <drivers/drv_hrt.h>
|
||||||
#include <lib/atmosphere/atmosphere.h>
|
#include <lib/atmosphere/atmosphere.h>
|
||||||
|
|
||||||
#define MOTOR_BIT(x) (1<<(x))
|
|
||||||
|
|
||||||
using namespace time_literals;
|
using namespace time_literals;
|
||||||
|
|
||||||
UavcanEscController::UavcanEscController(uavcan::INode &node) :
|
UavcanEscController::UavcanEscController(uavcan::INode &node) :
|
||||||
|
|||||||
@@ -47,13 +47,9 @@
|
|||||||
#include <uavcan/uavcan.hpp>
|
#include <uavcan/uavcan.hpp>
|
||||||
#include <uavcan/equipment/esc/RawCommand.hpp>
|
#include <uavcan/equipment/esc/RawCommand.hpp>
|
||||||
#include <uavcan/equipment/esc/Status.hpp>
|
#include <uavcan/equipment/esc/Status.hpp>
|
||||||
#include <lib/perf/perf_counter.h>
|
|
||||||
#include <uORB/PublicationMulti.hpp>
|
#include <uORB/PublicationMulti.hpp>
|
||||||
#include <uORB/topics/actuator_outputs.h>
|
|
||||||
#include <uORB/topics/esc_status.h>
|
#include <uORB/topics/esc_status.h>
|
||||||
#include <drivers/drv_hrt.h>
|
#include "../node_info.hpp"
|
||||||
#include <drivers/uavcan/node_info.hpp>
|
|
||||||
#include <parameters/param.h>
|
|
||||||
|
|
||||||
class UavcanEscController
|
class UavcanEscController
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -66,10 +66,9 @@ void UavcanArmingStatus::periodic_update(const uavcan::TimerEvent &)
|
|||||||
if (_actuator_armed_sub.update(&actuator_armed)) {
|
if (_actuator_armed_sub.update(&actuator_armed)) {
|
||||||
uavcan::equipment::safety::ArmingStatus cmd;
|
uavcan::equipment::safety::ArmingStatus cmd;
|
||||||
|
|
||||||
if (actuator_armed.lockdown || actuator_armed.kill) {
|
bool lockdown_active = actuator_armed.lockdown || actuator_armed.termination || actuator_armed.kill;
|
||||||
cmd.status = cmd.STATUS_DISARMED;
|
|
||||||
|
|
||||||
} else if (actuator_armed.armed) {
|
if (!lockdown_active && (actuator_armed.armed || _is_actuator_test_running)) {
|
||||||
cmd.status = cmd.STATUS_FULLY_ARMED;
|
cmd.status = cmd.STATUS_FULLY_ARMED;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
int init();
|
int init();
|
||||||
|
|
||||||
|
void setActuatorTestRunning(bool running) {_is_actuator_test_running = running;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*
|
/*
|
||||||
* Max update rate to avoid exessive bus traffic
|
* Max update rate to avoid exessive bus traffic
|
||||||
@@ -80,4 +82,5 @@ private:
|
|||||||
|
|
||||||
uORB::Subscription _actuator_armed_sub{ORB_ID(actuator_armed)};
|
uORB::Subscription _actuator_armed_sub{ORB_ID(actuator_armed)};
|
||||||
|
|
||||||
|
bool _is_actuator_test_running = false;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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);
|
perf_end(_cycle_perf);
|
||||||
|
|
||||||
pthread_mutex_unlock(&_node_mutex);
|
pthread_mutex_unlock(&_node_mutex);
|
||||||
|
|||||||
@@ -136,6 +136,8 @@ public:
|
|||||||
|
|
||||||
MixingOutput &mixingOutput() { return _mixing_output; }
|
MixingOutput &mixingOutput() { return _mixing_output; }
|
||||||
|
|
||||||
|
bool isActuatorTestRunning() const { return _mixing_output.isActuatorTestRunning(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Run() override;
|
void Run() override;
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ public:
|
|||||||
void setMaxTopicUpdateRate(unsigned max_topic_update_interval_us);
|
void setMaxTopicUpdateRate(unsigned max_topic_update_interval_us);
|
||||||
|
|
||||||
const actuator_armed_s &armed() const { return _armed; }
|
const actuator_armed_s &armed() const { return _armed; }
|
||||||
|
bool isActuatorTestRunning() const { return _actuator_test.inTestMode(); }
|
||||||
|
|
||||||
void setAllFailsafeValues(uint16_t value);
|
void setAllFailsafeValues(uint16_t value);
|
||||||
void setAllDisarmedValues(uint16_t value);
|
void setAllDisarmedValues(uint16_t value);
|
||||||
|
|||||||
Reference in New Issue
Block a user