mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-21 00:43:34 +08:00
Pr external battery monitoring (#4881)
* mavlink receiver: added handling of battery status handle incoming battery status messages in order to support external battery monitoring Signed-off-by: Roman <bapstr@ethz.ch> * sensor params: added parameter for battery monitoring source Signed-off-by: Roman <bapstr@ethz.ch> * sensors: only publish battery status if we don't have external battery monitoring activated Signed-off-by: Roman <bapstr@ethz.ch>
This commit is contained in:
committed by
Lorenz Meier
parent
9f95f457a9
commit
571798c318
@@ -258,6 +258,9 @@ MavlinkReceiver::handle_message(mavlink_message_t *msg)
|
||||
case MAVLINK_MSG_ID_GPS_RTCM_DATA:
|
||||
handle_message_gps_rtcm_data(msg);
|
||||
break;
|
||||
case MAVLINK_MSG_ID_BATTERY_STATUS:
|
||||
handle_message_battery_status(msg);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
@@ -1154,6 +1157,44 @@ MavlinkReceiver::handle_message_radio_status(mavlink_message_t *msg)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MavlinkReceiver::handle_message_battery_status(mavlink_message_t *msg)
|
||||
{
|
||||
// external battery measurements
|
||||
mavlink_battery_status_t battery_mavlink;
|
||||
mavlink_msg_battery_status_decode(msg, &battery_mavlink);
|
||||
|
||||
battery_status_s battery_status = {};
|
||||
battery_status.timestamp = hrt_absolute_time();
|
||||
|
||||
float voltage_sum = 0.0f;
|
||||
uint8_t cell_count = 0;
|
||||
for (unsigned i = 0; i < 10;i++) {
|
||||
if (battery_mavlink.voltages[i] < UINT16_MAX) {
|
||||
voltage_sum += (float)(battery_mavlink.voltages[i]) / 1000.0f;
|
||||
} else {
|
||||
cell_count = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
battery_status.voltage_v = voltage_sum;
|
||||
battery_status.voltage_filtered_v = voltage_sum;
|
||||
battery_status.current_a = battery_status.current_filtered_a = (float)(battery_mavlink.current_battery) / 10000.0f;
|
||||
battery_status.current_filtered_a = battery_status.current_a;
|
||||
battery_status.remaining = (float)battery_mavlink.battery_remaining / 100.0f;
|
||||
battery_status.discharged_mah = (float)battery_mavlink.current_consumed;
|
||||
battery_status.cell_count = cell_count;
|
||||
battery_status.connected = true;
|
||||
|
||||
if (_battery_pub == nullptr) {
|
||||
_battery_pub = orb_advertise(ORB_ID(battery_status), &battery_status);
|
||||
|
||||
} else {
|
||||
orb_publish(ORB_ID(battery_status), _battery_pub, &battery_status);
|
||||
}
|
||||
}
|
||||
|
||||
switch_pos_t
|
||||
MavlinkReceiver::decode_switch_pos(uint16_t buttons, unsigned sw)
|
||||
{
|
||||
|
||||
@@ -142,6 +142,7 @@ private:
|
||||
void handle_message_follow_target(mavlink_message_t *msg);
|
||||
void handle_message_adsb_vehicle(mavlink_message_t *msg);
|
||||
void handle_message_gps_rtcm_data(mavlink_message_t *msg);
|
||||
void handle_message_battery_status(mavlink_message_t *msg);
|
||||
|
||||
void *receive_thread(void *arg);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user