forked from Archive/PX4-Autopilot
Compare commits
3 Commits
pr-ekf2-gl
...
main
Author | SHA1 | Date |
---|---|---|
Matthias Grob | b5f6699f2e | |
Matthias Grob | 1096384a38 | |
Matthias Grob | 999a71c4dd |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -364,6 +364,13 @@ PX4IO::~PX4IO()
|
||||||
bool PX4IO::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS],
|
bool PX4IO::updateOutputs(bool stop_motors, uint16_t outputs[MAX_ACTUATORS],
|
||||||
unsigned num_outputs, unsigned num_control_groups_updated)
|
unsigned num_outputs, unsigned num_control_groups_updated)
|
||||||
{
|
{
|
||||||
|
for (size_t i = 0; i < num_outputs; i++) {
|
||||||
|
if (!_mixing_output.isFunctionSet(i)) {
|
||||||
|
// do not run any signal on disabled channels
|
||||||
|
outputs[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!_test_fmu_fail) {
|
if (!_test_fmu_fail) {
|
||||||
/* output to the servos */
|
/* output to the servos */
|
||||||
io_reg_set(PX4IO_PAGE_DIRECT_PWM, 0, outputs, num_outputs);
|
io_reg_set(PX4IO_PAGE_DIRECT_PWM, 0, outputs, num_outputs);
|
||||||
|
|
|
@ -455,7 +455,8 @@ bool MixingOutput::update()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!all_disabled) {
|
// Send output if any function mapped or one last disabling sample
|
||||||
|
if (!all_disabled || !_was_all_disabled) {
|
||||||
if (!_armed.armed && !_armed.manual_lockdown) {
|
if (!_armed.armed && !_armed.manual_lockdown) {
|
||||||
_actuator_test.overrideValues(outputs, _max_num_outputs);
|
_actuator_test.overrideValues(outputs, _max_num_outputs);
|
||||||
}
|
}
|
||||||
|
@ -463,6 +464,8 @@ bool MixingOutput::update()
|
||||||
limitAndUpdateOutputs(outputs, has_updates);
|
limitAndUpdateOutputs(outputs, has_updates);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_was_all_disabled = all_disabled;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -288,6 +288,7 @@ private:
|
||||||
hrt_abstime _lowrate_schedule_interval{300_ms};
|
hrt_abstime _lowrate_schedule_interval{300_ms};
|
||||||
ActuatorTest _actuator_test{_function_assignment};
|
ActuatorTest _actuator_test{_function_assignment};
|
||||||
uint32_t _reversible_mask{0}; ///< per-output bits. If set, the output is configured to be reversible (motors only)
|
uint32_t _reversible_mask{0}; ///< per-output bits. If set, the output is configured to be reversible (motors only)
|
||||||
|
bool _was_all_disabled{false};
|
||||||
|
|
||||||
uORB::SubscriptionCallbackWorkItem *_subscription_callback{nullptr}; ///< current scheduling callback
|
uORB::SubscriptionCallbackWorkItem *_subscription_callback{nullptr}; ///< current scheduling callback
|
||||||
|
|
||||||
|
|
|
@ -191,11 +191,15 @@ TEST_F(MixerModuleTest, basic)
|
||||||
mixing_output.setAllMaxValues(MAX_VALUE);
|
mixing_output.setAllMaxValues(MAX_VALUE);
|
||||||
EXPECT_EQ(test_module.num_updates, 0);
|
EXPECT_EQ(test_module.num_updates, 0);
|
||||||
|
|
||||||
// all functions disabled: not expected to get an update
|
// all functions disabled: expect to get one single update to process disabling the output signal
|
||||||
mixing_output.update();
|
mixing_output.update();
|
||||||
mixing_output.updateSubscriptions(false);
|
mixing_output.updateSubscriptions(false);
|
||||||
mixing_output.update();
|
mixing_output.update();
|
||||||
EXPECT_EQ(test_module.num_updates, 0);
|
EXPECT_EQ(test_module.num_updates, 1);
|
||||||
|
mixing_output.update();
|
||||||
|
mixing_output.updateSubscriptions(false);
|
||||||
|
mixing_output.update();
|
||||||
|
EXPECT_EQ(test_module.num_updates, 1);
|
||||||
test_module.reset();
|
test_module.reset();
|
||||||
|
|
||||||
// configure motor, ensure all still disarmed
|
// configure motor, ensure all still disarmed
|
||||||
|
|
|
@ -180,17 +180,21 @@ mixer_tick()
|
||||||
* Run the mixers.
|
* Run the mixers.
|
||||||
*/
|
*/
|
||||||
if (source == MIX_FAILSAFE) {
|
if (source == MIX_FAILSAFE) {
|
||||||
/* copy failsafe values to the servo outputs */
|
// Set failsafe value if the PWM output isn't disabled
|
||||||
for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++) {
|
for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++) {
|
||||||
|
if (r_page_servos[i] != 0) {
|
||||||
r_page_servos[i] = r_page_servo_failsafe[i];
|
r_page_servos[i] = r_page_servo_failsafe[i];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else if (source == MIX_DISARMED) {
|
} else if (source == MIX_DISARMED) {
|
||||||
/* copy disarmed values to the servo outputs */
|
// Set disarmed value if the PWM output isn't disabled
|
||||||
for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++) {
|
for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++) {
|
||||||
|
if (r_page_servos[i] != 0) {
|
||||||
r_page_servos[i] = r_page_servo_disarmed[i];
|
r_page_servos[i] = r_page_servo_disarmed[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* set arming */
|
/* set arming */
|
||||||
bool needs_to_arm = (should_arm || should_arm_nothrottle || should_always_enable_pwm);
|
bool needs_to_arm = (should_arm || should_arm_nothrottle || should_always_enable_pwm);
|
||||||
|
|
Loading…
Reference in New Issue