I think there is work underway to improve battery monitoring by battery voltage. However doing so is complex and difficult to do with accuracy. The measured battery voltage varies widely depending on load.
I initially had problems with premature battery failsafe triggers due to low battery voltage.
What I did was to greatly reduce the low battery voltage threshold, and configure my system to trigger on mAh consumed. This has allowed me to have much longer flights without over discharging my batteries.
My current low battery threshold voltage is somewhere between 8 and 9 volts, as I typically fly 3S batteries. My copter hovers in the 25-30 amp range.
What I rely on to make sure my hexcopter can safely return is mAh consumed. I try to make sure that I terminate a mission at about 80% of battery capacity consumed, or when 20% still remains.
Using that strategy, I recently made an 18 minute flight with my F550 hexcopter with 2212 motors, 1045 props, and a 10,000 mAh 25C battery.
You need to have your system calibrated properly to make this work. The default calibration for battery current on my system was far from accurate. Your system is likely capable of doing a decent job of monitoring current consumption if properly calibrated. I have thought about making a video of the current measurement calibration procedure that I used.
BTW, this is a problem when changing batteries on the fly (subsequent batteries start with lower capacity left), unless I am missing something. Any workaround suggested, other than informing much greater capacity or rebooting FC?
Probably intelligent batteries, that’s how DJI is doing it. There are some smart batteries supported and I even played around some time with my own implementation of the SBS protocol, but I’m not sure if ardupilot can handle a battery change…
As mentioned by @Vabe, smart batteries are one solution.
Why do subsequent batteries start with lower capacity?
Even if this is the case, the problem can be addressed by setting a lower capacity through your GCS.
I am fairly new to this, but I am having good results by setting a fairly low minimum voltage (to allow for voltage drop under load), calibrating my power module’s current measurement, and flying until the battery reaches about 20% capacity remaining.
By “good results” I mean that the mAh needed to recharge is close to the mAh reported as consumed by the flight.
I think that the problem has not been understood: it is not about remaining capacity estimation, but of resetting remaining capacity after changing a battery on the fly.
Image above corresponds to a .tlog for batteries changed on the fly, as seen by voltage going from 12V to 0V and back to 12V, part of finding the reason for ROI loss with receivers shifting and losing RC3 pulses (hence yaw appearing, which is as should on above image).
As seen, wasted capacity grows and grows: the FC is not aware about the battery change, even voltage goes from 0V to 12V. In the long run it can prevent arming and need FC reset, so I define a very high battery capacity, since I don’t mind much about it.
It is so evident (and has such a simple solution in the FC) that I have always thought I am missing something.
No, I got your point. I didn’t expect Ardupilot to realize that you’ve changed the battery with a normal “dumb” battery. With an intelligent battery I think it could work.
The SBS-protocol has a few parameters concerning the capacity.
The advertised capacity of the battery when it’s full. This value is automatically saved as to the BATT_CAPACITY parameter on the FC. I’m not sure how often this parameter gets updated, but probably only once at startup.
Already used capacity
Here is why I say it could work with intelligent batteries:
If Ardupilot only uses the value of remaining capacity it should be fine. Your remaining capacity drops towards zero, you land, swap the battery and the remaining capacity is close to full again and your are good to go.
However if the remaining capacity is calculated inside the flight controller based on the full capacity and the used capacity, you would run into problems, since Ardupilot (to my knowledge) doesn’t realize a battery change (even with smart batteries).
But as a side note: Hot swapping a battery (like on the Inspire 2) is a delicate task which only works because very carefully designed hardware. Because if you just connect the two batteries together they will (try to) level each other out, which could lead to charge rates far beyond the maximum.
No need for intelligent batteries. If FC (not rebooted) sees exhausted battery voltage (such as 9V to 10V), then a low voltage (such as 1V to 3V), and then a charged battery voltage (such as 12V), all like image above, it is clearly an on the fly battery change.
Of coarse it is not done that way. Internally there is circuitry similar to diodes oring voltage, so the highest one is effective. I use a simple power bank through USB.