mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-06-27 17:00:35 +08:00
Refactored battery library for multiple instances
This commit is contained in:
committed by
Julian Oes
parent
d7b95870b9
commit
bff1df7080
@@ -101,7 +101,7 @@ private:
|
||||
orb_advert_t _battery_topic;
|
||||
orb_advert_t _esc_topic;
|
||||
|
||||
Battery _battery;
|
||||
Battery1 _battery;
|
||||
bool _armed;
|
||||
float _last_throttle;
|
||||
|
||||
@@ -201,14 +201,8 @@ int DfBebopBusWrapper::set_esc_speeds(const float speed_scaled[4])
|
||||
int DfBebopBusWrapper::_publish(struct bebop_state_data &data)
|
||||
{
|
||||
|
||||
battery_status_s battery_report;
|
||||
const hrt_abstime timestamp = hrt_absolute_time();
|
||||
|
||||
// TODO Check if this is the right way for the Bebop
|
||||
// We don't have current measurements
|
||||
_battery.updateBatteryStatus(timestamp, data.battery_voltage_v, 0.0, true, true, 0, _last_throttle, _armed,
|
||||
&battery_report);
|
||||
|
||||
esc_status_s esc_status = {};
|
||||
|
||||
uint16_t esc_speed_setpoint_rpm[4] = {};
|
||||
@@ -224,13 +218,9 @@ int DfBebopBusWrapper::_publish(struct bebop_state_data &data)
|
||||
// TODO: when is this ever blocked?
|
||||
if (!(m_pub_blocked)) {
|
||||
|
||||
if (_battery_topic == nullptr) {
|
||||
_battery_topic = orb_advertise_multi(ORB_ID(battery_status), &battery_report,
|
||||
&_battery_orb_class_instance, ORB_PRIO_LOW);
|
||||
|
||||
} else {
|
||||
orb_publish(ORB_ID(battery_status), _battery_topic, &battery_report);
|
||||
}
|
||||
// TODO Check if this is the right way for the Bebop
|
||||
// We don't have current measurements
|
||||
_battery.updateBatteryStatus(data.battery_voltage_v, 0.0, timestamp, true, 0, _last_throttle, _armed);
|
||||
|
||||
if (_esc_topic == nullptr) {
|
||||
_esc_topic = orb_advertise(ORB_ID(esc_status), &esc_status);
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
#include <ltc2946/LTC2946.hpp>
|
||||
|
||||
#include <uORB/uORB.h>
|
||||
#include <uORB/topics/battery_status.h>
|
||||
#include <uORB/topics/actuator_controls.h>
|
||||
#include <uORB/topics/vehicle_control_mode.h>
|
||||
|
||||
@@ -70,9 +69,7 @@ public:
|
||||
private:
|
||||
int _publish(const struct ltc2946_sensor_data &data);
|
||||
|
||||
orb_advert_t _battery_pub{nullptr};
|
||||
battery_status_s _battery_status{};
|
||||
Battery _battery{};
|
||||
Battery1 _battery{};
|
||||
|
||||
int _actuator_ctrl_0_sub{-1};
|
||||
int _vcontrol_mode_sub{-1};
|
||||
@@ -82,7 +79,7 @@ private:
|
||||
DfLtc2946Wrapper::DfLtc2946Wrapper() :
|
||||
LTC2946(LTC2946_DEVICE_PATH)
|
||||
{
|
||||
_battery.reset(&_battery_status);
|
||||
_battery.reset();
|
||||
|
||||
// subscriptions
|
||||
_actuator_ctrl_0_sub = orb_subscribe(ORB_ID(actuator_controls_0));
|
||||
@@ -134,21 +131,16 @@ int DfLtc2946Wrapper::stop()
|
||||
int DfLtc2946Wrapper::_publish(const struct ltc2946_sensor_data &data)
|
||||
{
|
||||
hrt_abstime t = hrt_absolute_time();
|
||||
bool connected = data.battery_voltage_V > BOARD_ADC_OPEN_CIRCUIT_V;
|
||||
|
||||
actuator_controls_s ctrl;
|
||||
orb_copy(ORB_ID(actuator_controls_0), _actuator_ctrl_0_sub, &ctrl);
|
||||
vehicle_control_mode_s vcontrol_mode;
|
||||
orb_copy(ORB_ID(vehicle_control_mode), _vcontrol_mode_sub, &vcontrol_mode);
|
||||
|
||||
_battery.updateBatteryStatus(t, data.battery_voltage_V, data.battery_current_A,
|
||||
connected, true, 1,
|
||||
_battery.updateBatteryStatus(data.battery_voltage_V, data.battery_current_A, t,
|
||||
true, 1,
|
||||
ctrl.control[actuator_controls_s::INDEX_THROTTLE],
|
||||
vcontrol_mode.flag_armed, &_battery_status);
|
||||
|
||||
int instance;
|
||||
orb_publish_auto(ORB_ID(battery_status), &_battery_pub, &_battery_status, &instance, ORB_PRIO_DEFAULT);
|
||||
|
||||
vcontrol_mode.flag_armed);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user