@Upapa: Gottseidank hat die DEV Dir nichts geschrottet!!! So lange ich von den Devs noch Horrorstories von Scotch lese, oder das hier:
http://www.multiwii.com/forum/viewtopic.php?f=8&t=2694 , traue ich denen nicht über den Weg, da kann ich Holger nur zustimmen.
Gut zu wissen, dass das GPS gegenüber der original 2.1 auch keinen Sprung gemacht hat.
Basierend auf der Idee hier
http://www.multiwii.com/forum/viewtopic.php?f=8&t=2503 habe ich mir ein paar ACC Formeln zusammengeschnitzt. Wahrscheinlich ist das mathematisch vollkommen daneben, bringt aber für kleine Winkel (schätze mal so 25 Grad) gute Ergebnisse. Mit einem GPS zusammen zur accX und accY Driftkompensation dürfte sich das sehr positiv auf das GPS PositionHold auswirken, das wird DJI auch nicht viel anders machen. Da das hier auch eine Code-Ecke ist, stelle ich den Ansatz zuerst hier rein. Das mwii Forum bekommt ggf. einen Link hier hin. Wenn ich meine mwii mit einem GPS aufrüste, wird das auf jeden Fall in Natura getestet. Im Prinzip läuft das dann wie mit ACC und Baro, nur dann eben mit ACC und GPS.
Das velXYdamp ist nur eine Krücke, damit ich auch einen Flugtest ohne GPS machen konnte. Ich bin zuversichtlich, das dass mit GPS Fusion etwas bringt. Das fehlt bislang der Mwii und APM.
Code:
#define velXYdamp 0.5f
static uint16_t ACCDeltaTime;
...
accVelScale = 9.80665f/10000.0f/acc_1G;
...
float angle = EstG.V.Z/acc_1G;
uint8_t ThrAngle = angle * 100.0f;
if (ThrAngle>100){ThrAngle = 100; angle = 1;}
...
float factor = accVelScale*ACCDeltaTime*angle;
...
if (abs(gyroData[YAW])<100){
float x = ((accADC[ROLL]-EstG.V.X)/acc_1G)*factor*1000; // if (abs(gyroData[YAW])<100
float y = ((accADC[PITCH]-EstG.V.Y)/acc_1G)*factor*1000;
velx = velx+x;
vely = vely+y;
}
velx = velx*velXYdamp; // Insert GPS Kompensation here //*velXYdamp;
vely = vely*velXYdamp; // Insert GPS Kompensation here //*velXYdamp;
xdrift = velx; // Rightdrift - ; Leftdrift + // xdrift = constrain(xdrift,-100,100); // Rightdrift - ; Leftdrift +
ydrift = vely; // Frontdrift - ; Reardrift + // ydrift = constrain(ydrift,-100,100); // Rightdrift - ; Leftdrift +
...
LG
Rob