Virtueller Copter wandert in die Neutrallage

Status
Nicht offen für weitere Antworten.
#1
Hallo zusammen,

ich fliege nun schon seit einiger Zeit mit meinen beiden Quads ohne Probleme, allerdings gibt es da etwas, was mich seitdem irritiert.
Ich fliege mit der Multiwii 1.8. Wenn ich meine Copter in Schräglage bringe, dann wandert der virtuelle Copter in der GUI zwar richtig mit, wenn ich ihn aber dann in Schräglage lasse, bewegt sich der virtuelle Copter langsam in die Neutrallage zurück. Meiner Meinung nach müsste er aber doch ebenfalls in der selben Schräglage wie der originale Copter verharren. Entweder habe ich einen Fehler eingebaut, oder ich habe einfach nur ein Verständnisproblem.
Ich hoffe ihr könnt mir helfen.

Grüße Andy
 
#5
Die ACC Werte in der GUI sind einwandfrei.
Wie schon erwähnt, er fliegt ja auch perfekt, daher bin ich mir schon unsicher ob ich nicht einfach nur einen Denkfehler habe :???:
 
#7
Ja, sorry, hab ich vergessen zu erwähnen. Ist ein BMA020.
Nur wenn er immer wieder in die Neutrallage wandert, dann ist der ACC doch nie richtig getrimmt, da er bei Schräglage ja immer mitwandert.
 
#9
Also arbeiten tut er, ist im Flug deutlich zu merken, aber wenn ich länger in der Schräglage bin, dann stimmt die Neutrallage nicht mehr.
Habe mir auch 2 Copter gebaut, bei beiden das gleiche Verhalten. Hab auch schon mal auf Verdacht den ACC getauscht, also am Bauteil liegts nicht.
Bin da etwas Ratlos. Kabel kann ich soweit ausschließen, hab ich schon auf Stecker und Pins umgelötet.

Das Verhalten ist bei laufenden Motoren, bei stehenden Motoren, mit und ohne Akku, also kurz, immer
 
#11
Das wär traumhaft :)

Kann es sein das im Sketch irgend etwas falsch ist? Mein Bruder hat auch einen Baugleichen Copter, der zeigt das gleiche Problem wie meine beiden. Ist ja eher unwahrscheinlich das 3 BMA´s hinüber sind oder 3 Lötstellen nicht passen.

Wird mir wohl nichts anderes übrig bleiben als weiterhin auf die Suche zu gehen
 
#13
Was mir noch aufgefallen ist, wenn ich den Sketch neu aufspiele, dann funktioniert alles super, sobald ich den ACC kalibriere tritt das Phänomen auf.

/* Set the minimum throttle command sent to the ESC (Electronic Speed Controller)
This is the minimum value that allow motors to run at a idle speed */
//#define MINTHROTTLE 1300 // for Turnigy Plush ESCs 10A
//#define MINTHROTTLE 1120 // for Super Simple ESCs 10A
//#define MINTHROTTLE 1220
#define MINTHROTTLE 1250

/* The type of multicopter */
//#define GIMBAL
//#define BI
//#define TRI
//#define QUADP
#define QUADX
//#define Y4
//#define Y6
//#define HEX6
//#define HEX6X
//#define OCTOX8 //beta
//#define OCTOFLATP //beta
//#define OCTOFLATX //beta
//#define FLYING_WING //experimental

#define YAW_DIRECTION 1 // if you want to reverse the yaw correction direction
//#define YAW_DIRECTION -1

#define I2C_SPEED 100000L //100kHz normal mode, this value must be used for a genuine WMP
//#define I2C_SPEED 400000L //400kHz fast mode, it works only with some WMP clones

//#define PROMINI //Arduino type
#define MEGA

//enable internal I2C pull ups
#define INTERNAL_I2C_PULLUPS

//****** advanced users settings *************

/* Pseudo-derivative conrtroller for level mode (experimental)
Additional information: http://wbb.multiwii.com/viewtopic.php?f=8&t=503 */
//#define LEVEL_PDF

/* introduce a deadband around the stick center */
//#define DEADBAND

/* Failsave settings - added by MIS
Failsafe check pulse on THROTTLE channel. If the pulse is OFF (on only THROTTLE or on all channels) the failsafe procedure is initiated.
After FAILSAVE_DELAY time of pulse absence, the level mode is on (if ACC or nunchuk is avaliable), PITCH, ROLL and YAW is centered
and THROTTLE is set to FAILSAVE_THR0TTLE value. You must set this value to descending about 1m/s or so for best results.
This value is depended from your configuration, AUW and some other params.
Next, afrer FAILSAVE_OFF_DELAY the copter is disarmed, and motors is stopped.
If RC pulse coming back before reached FAILSAVE_OFF_DELAY time, after the small quard time the RC control is returned to normal.
If you use serial sum PPM, the sum converter must completly turn off the PPM SUM pusles for this FailSafe functionality.*/
#define FAILSAFE // Alex: comment this line if you want to deactivate the failsafe function
#define FAILSAVE_DELAY 10 // Guard time for failsafe activation after signal lost. 1 step = 0.1sec - 1sec in example
#define FAILSAVE_OFF_DELAY 200 // Time for Landing before motors stop in 0.1sec. 1 step = 0.1sec - 20sec in example
#define FAILSAVE_THR0TTLE (MINTHROTTLE + 100) // Throttle level used for landing - may be relative to MINTHROTTLE - as in this case


/* The following lines apply only for a pitch/roll tilt stabilization system
On promini board, it is not compatible with config with 6 motors or more
Uncomment the first line to activate it */
#define SERVO_TILT
#define TILT_PITCH_MIN 1020 //servo travel min, don't set it below 1020
#define TILT_PITCH_MAX 2000 //servo travel max, max value=2000
#define TILT_PITCH_MIDDLE 1500 //servo neutral value
#define TILT_PITCH_PROP 20 //servo proportional (tied to angle) ; can be negative to invert movement
#define TILT_ROLL_MIN 1020
#define TILT_ROLL_MAX 2000
#define TILT_ROLL_MIDDLE 1600
#define TILT_ROLL_PROP -25

/* if you use a specific sensor board:
please submit any correction to this list.
Note from Alex: I only own some boards
for other boards, I'm not sure, the info was gathered via rc forums, be cautious */
//#define FFIMUv1 // first 9DOF+baro board from Jussi, with HMC5843 <- confirmed by Alex
//#define FFIMUv2 // second version of 9DOF+baro board from Jussi, with HMC5883 <- confirmed by Alex
//#define FREEIMUv1 // v0.1 & v0.2 & v0.3 version of 9DOF board from Fabio
//#define FREEIMUv035 // FreeIMU v0.3.5 no baro
//#define FREEIMUv035_MS // FreeIMU v0.3.5_MS
//#define FREEIMUv035_BMP // FreeIMU v0.3.5_MS
//#define PIPO // 9DOF board from erazz
//#define QUADRINO // full FC board 9DOF+baro board from witespy <- confirmed by Alex
//#define ALLINONE // full FC board or standalone 9DOF+baro board from CSG_EU
//#define AEROQUADSHIELDv2
//#define ATAVRSBIN1 // Atmel 9DOF (Contribution by EOSBandi). The board requires 3.3V power.

//if you use independent sensors
//leave it commented it you already checked a specific board above
/* I2C gyroscope */
//#define ITG3200
//#define L3G4200D

/* I2C accelerometer */
//#define ADXL345
#define BMA020
//#define BMA180
//#define NUNCHACK // if you want to use the nunckuk as a standalone I2C ACC without WMP
//#define LIS3LV02

/* I2C barometer */
//#define BMP085
//#define MS561101BA //non tested

/* I2C magnetometer */
//#define HMC5843
//#define HMC5883
//#define AK8975

/* ADC accelerometer */ // for 5DOF from sparkfun, uses analog PIN A1/A2/A3
//#define ADCACC

/* ITG3200 & ITG3205 Low pass filter setting. In case you cannot eliminate all vibrations to the Gyro, you can try
to decrease the LPF frequency, only one step per try. As soon as twitching gone, stick with that setting.
It will not help on feedback wobbles, so change only when copter is randomly twiching and all dampening and
balancing options ran out. Uncomment only one option!
IMPORTANT! Change low pass filter setting changes PID behaviour, so retune your PID's after changing LPF.*/
//#define ITG3200_LPF_256HZ // This is the default setting, no need to uncomment, just for reference
//#define ITG3200_LPF_188HZ
//#define ITG3200_LPF_98HZ
//#define ITG3200_LPF_42HZ
//#define ITG3200_LPF_20HZ
//#define ITG3200_LPF_10HZ // Use this only in extreme cases, rather change motors and/or props

/* The following lines apply only for specific receiver with only one PPM sum signal, on digital PIN 2
IF YOUR RECEIVER IS NOT CONCERNED, DON'T UNCOMMENT ANYTHING. Note this is mandatory for a Y6 setup on a promini
Select the right line depending on your radio brand. Feel free to modify the order in your PPM order is different */
//#define SERIAL_SUM_PPM PITCH,YAW,THROTTLE,ROLL,AUX1,AUX2,CAMPITCH,CAMROLL //For Graupner/Spektrum
//#define SERIAL_SUM_PPM ROLL,PITCH,THROTTLE,YAW,AUX1,AUX2,CAMPITCH,CAMROLL //For Robe/Hitec/Futaba
//#define SERIAL_SUM_PPM PITCH,ROLL,THROTTLE,YAW,AUX1,AUX2,CAMPITCH,CAMROLL //For some Hitec/Sanwa/Others

/* The following lines apply only for Spektrum Satellite Receiver on MEGA boards only */ //not yet implemented
//#define SPEKTRUM

/* interleaving delay in micro seconds between 2 readings WMP/NK in a WMP+NK config
if the ACC calibration time is very long (20 or 30s), try to increase this delay up to 4000
it is relevent only for a conf with NK */
#define INTERLEAVING_DELAY 3000

/* for V BAT monitoring
after the resistor divisor we should get [0V;5V]->[0;1023] on analog V_BATPIN
with R1=6,8k and R2=16,9k
vbat = [0;1023]*16/VBATSCALE */
#define VBAT // comment this line to suppress the vbat code
#define VBATSCALE 131 // change this value if readed Battery voltage is different than real voltage
#define VBATLEVEL1_3S 72 // 10,2V
#define VBATLEVEL2_3S 71 // 10,0V
#define VBATLEVEL3_3S 70 // 9,9V
#define NO_VBAT 20 // Avoid beeping without any battery

/* when there is an error on I2C bus, we neutralize the values during a short time. expressed in microseconds
it is relevent only for a conf with at least a WMP */
#define NEUTRALIZE_DELAY 100000

/* this is the value for the ESCs when they are not armed
in some cases, this value must be lowered down to 900 for some specific ESCs */
#define MINCOMMAND 1000

/* this is the maximum value for the ESCs at full power
this value can be increased up to 2000 */
#define MAXTHROTTLE 2000

/* This is the speed of the serial interface. 115200 kbit/s is the best option for a USB connection.*/
#define SERIAL_COM_SPEED 115200

/* In order to save space, it's possibile to desactivate the LCD configuration functions
comment this line only if you don't plan to used a LCD */
#define LCD_CONF

/* to use Cat's whisker TEXTSTAR LCD, uncomment following line.
Pleae note this display needs a full 4 wire connection to (+5V, Gnd, RXD, TXD )
Configure display as follows: 115K baud, and TTL levels for RXD and TXD, terminal mode
NO rx / tx line reconfiguration, use natural pins */
//#define LCD_TEXTSTAR
/* keys to navigate the LCD menu (preset to TEXTSTAR key-depress codes)*/
#define LCD_MENU_PREV 'a'
#define LCD_MENU_NEXT 'c'
#define LCD_VALUE_UP 'd'
#define LCD_VALUE_DOWN 'b'

/* motors will not spin when the throttle command is in low position
this is an alternative method to stop immediately the motors */
//#define MOTOR_STOP

/* some radios have not a neutral point centered on 1500. can be changed here */
#define MIDRC 1500

/* experimental
camera trigger function : activated via Rc Options in the GUI, servo output=A2 on promini */
//#define CAMTRIG
#define CAM_SERVO_HIGH 2000 // the position of HIGH state servo
#define CAM_SERVO_LOW 1020 // the position of LOW state servo
#define CAM_TIME_HIGH 1000 // the duration of HIGH state servo expressed in ms
#define CAM_TIME_LOW 1000 // the duration of LOW state servo expressed in ms

/* you can change the tricopter servo travel here */
#define TRI_YAW_CONSTRAINT_MIN 1020
#define TRI_YAW_CONSTRAINT_MAX 2000
#define TRI_YAW_MIDDLE 1500

/* enable monitoring of the power consumption from battery (think of mAh) */
/* allows to set alarm value in GUI or via LCD */
/* Two options: */
/* 1 - soft: - (good results +-5% for plush and mystery ESCs @ 2S and 3S, not good with SuperSimple ESC */
/* 00. relies on your combo of battery type (Voltage, cpacity), ESC, ESC settings, motors, props and multiwii cycle time */
/* 01. set POWERMETER soft. Uses PLEVELSCALE = 50, PLEVELDIV = PLEVELDIVSOFT = 10000 */
/* 0. output is a value that linearily scales to power (mAh) */
/* 1. get voltage reading right first */
/* 2. start with freshly charged battery */
/* 3. go fly your typical flight (routine and duration) */
/* 4. at end connect to GUI or LCD and read the power value; write it down (example 4711)*/
/* 5. charge battery, write down amount of energy needed (example 722 mAh) */
/* 6. compute alarm value for desired power threshold (example 750 mAh : alarm = 4711 / 722 * 750) */
/* 7. set alarm value in GUI or LCD */
/* 8. enjoy your new battery alarm - possibly repeat steps 2 .. 7 */
/* 9. if you want the numbers to represent your mAh value, you must change PLEVELDIV */
/* 2 - hard: - (uses hardware sensor, after configuration gives reasonable results */
/* 00. uses analog pin 2 to read voltage output from sensor. */
/* 01. set POWERMETER hard. Uses PLEVELSCALE = 50 */
/* 02. install low path filter for 25 Hz to sensor input */
/* 1. compute PLEVELDIV for your sensor (see below for insturctions) */
/* 2. set PLEVELDIVSOFT to 10000 ( to use LOG_VALUES for individual motor comparison) */
/* 3. attach, set PSENSORNULL and PINT2mA */
/* 4. configure, compile, upload, set alarm value in GUI or LCD */
/* 3. enjoy true readings of mAh consumed */
/* set POWERMETER to "soft" (1) or "hard" (2) depending on sensor you want to utilize */
//#define POWERMETER 1
//#define POWERMETER 2
/* the sum of all powermeters ranges from [0:60000 e4] theoretically. */
/* the alarm level from eeprom is out of [0:255], so we multipy alarm level with PLEVELSCALE and with 1e4 before comparing */
/* PLEVELSCALE is the step size you can use to set alarm */
#define PLEVELSCALE 50 // if you change this value for other granularity, you must search for comments in code to change accordingly
/* larger PLEVELDIV will get you smaller value for power (mAh equivalent) */
#define PLEVELDIV 10000 // default for soft - if you lower PLEVELDIV, beware of overrun in uint32 pMeter
#define PLEVELDIVSOFT PLEVELDIV // for soft always equal to PLEVELDIV; for hard set to 10000
//#define PLEVELDIV 1361L // to convert the sum into mAh divide by this value
/* amploc 25A sensor has 37mV/A */
/* arduino analog resolution is 4.9mV per unit; units from [0..1023] */
/* sampling rate 20ms, approx 19977 micro seconds */
/* PLEVELDIV = 37 / 4.9 * 10e6 / 19977 * 3600 / 1000 = 1361L */
/* set to analogRead() value for zero current */
#define PSENSORNULL 510 // for I=0A my sensor gives 1/2 Vss; that is approx 2.49Volt
#define PINT2mA 13 // for telemtry display: one integer step on arduino analog translates to mA (example 4.9 / 37 * 100

/* to monitor system values (battery level, loop time etc. with LCD enable this */
/* note: for now you must send single characters 'A', 'B', 'C', 'D' to request 4 different pages */
/* Buttons toggle request for page on/off */
/* The active page on the LCD does get updated automatically */
/* Easy to use with Terminal application or Textstar LCD - the 4 buttons are preconfigured to send 'A', 'B', 'C', 'D' */
/* The value represents the refresh interval in cpu time (micro seconds) */
//#define LCD_TELEMETRY 100011
/* to enable automatic hopping between 4 telemetry pages uncomment this. */
/* This may be useful if your LCD has no buttons or the sending is broken */
/* hopping is activated and deactivated in unarmed mode with throttle=low & roll=left & pitch=forward */
/* The value represents the hopping interval in cpu time (micro seconds) */
//#define LCD_TELEMETRY_AUTO 2000123
/* on telemetry page B it gives a bar graph which shows how much voltage battery has left. Range from 0 to 12 Volt is not very informative */
/* so we try do define a meaningful part. For a 3S battery we define full=12,6V and calculate how much it is above first warning level */
/* Example: 12.6V - VBATLEVEL1_3S (for me = 126 - 102 = 24) */
#define VBATREF 24

/* to log values like max loop time and others to come */
/* logging values are visible via LCD config */
//#define LOG_VALUES

//****** end of advanced users settings *************

//if you want to change to orientation of individual sensor
//#define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = Y; accADC[PITCH] = -X; accADC[YAW] = Z;}
//#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = -Y; gyroADC[PITCH] = X; gyroADC[YAW] = Z;}
//#define MAG_ORIENTATION(X, Y, Z) {magADC[ROLL] = X; magADC[PITCH] = Y; magADC[YAW] = Z;}

/**************************************/
/****END OF CONFIGURABLE PARAMETERS****/
/**************************************/[/php]
 

Waldmensch

Erfahrener Benutzer
#14
Ich kann dieses Verhalten in der GUI bestätigen. Ob man ACC an der Funke aktiviert (wird grün in der GUI) oder nicht der Virtuelle Copter sowie Die Roll und Nick Anzeige richten sich wieder gerade. Ich habe das bis dato als normal angesehen

Ich habe die vorkonfigurierte 1.8 aus dem BlueAngel Bauthread unverändert. Desweiteren BMA020 und WMP Clone.

Werte kommen bei Bewegung rein wobei die Ausschläge des BMA wesentlich geringer sind als die des WMP.

Eventuell hilfts. Ob es normal ist kann ich nicht einschätzen.

 

Anhänge

Treeda

Erfahrener Benutzer
#15
Ich hatte exakt das von dir beschriebene verhalten mit meinem flydumini auch, Acromodus war gut fliegbar, acc war ... naja nicht nutzbar :)
grund war simpel. die Achsen des Gyro waren richtig, aber nicht die des ACC

Achte mal darauf das sich die werte des Gyro und ACC gleichsinning bewegen. also wenn eine achse beim gyro ins negative geht beim ROLL oder PITCH z.b. muss das beim acc ebenfalls so laufen.

Ich hab einfach im Code die Achsen umgekehrt :)
#define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = -X; accADC[PITCH] = -Y; accADC[YAW] = Z;}

man beachte -X und -Y
 

kalle123

Jugend forscht ....
#17
Überprüfung geht doch recht einfach mit der Anleitung:

How should be the sensor axis directions

TILT the MULTI to the RIGHT (left side up):

MAG_ROLL, ACC_ROLL and GYRO_ROLL goes up
MAG_Z and ACC_Z goes down

TILT the MULTI forward (tail up):

MAG_PITCH, ACC_PITCH and GYRO_PITCH goes up
MAG_Z and ACC_Z goes down

Rotating the copter clockwise (YAW):

GYRO_YAW goes up

The copter stays level:

MAG_Z is positive ; ACC_Z is positive

Test Schritt für Schritt machen und nur die entsprechenden Sensoren einblenden.
 

Waldmensch

Erfahrener Benutzer
#18
Also bei mir war in der Tat der ACC zum WMP gegenläufig. Ich habe es nur bisher nie bemerkt da ich ACC noch nie beim fliegen aktiviert hab (BMA020 ist erst seit 2 Wochen auf dem Board)

Ich habe Treeda's Hinweis in die Tat umgesetzt und die Config angepaßt. Nun stellt es sich in der GUI so dar, das beim Roll und aktivierten ACC die Symbole nicht ganz auf Nullage zurückkehren sondern auf dem Wert von ACC stehenbleiben. Also erst beim kippen über Rollachse großer Ausschlag durch WMP und langsame Rückkehr auf den Kippwinkel der durch den BMA vorgegeben wird.

Warum bei mir jetzt die Achsen des BMA negiert sind kann ich nicht nachvollziehen. Das würde ja bedeuten das ich ihn mit Bestückungsseite nach unten verbaut habe?! Das ist aber nicht der Fall.
 

Waldmensch

Erfahrener Benutzer
#20
heckmic hat gesagt.:
Falsch herum eingebaut. Wie ich geschrieben habe: da wo die ganzen Leitungen abgehen ist Vorne ;)
Bevor man am Code anpasst würde ich eher am Standard bleiben, damit beim nächsten Update auch alles passt. Hardware korrigieren finde ich da sicherer. Muss aber jeder selber wissen.
Ja, das ist sicher die beste Lösung. Ist nur alles sehr gut verklebt und verbaut. Board ist ein Paris. Ich bin mir eigentlich sicher das ich die Kabelseite vorn hab da der I2C beim Paris ja auch vorn ist. Auch sind die Achsen auf dem Paris aufgedruckt und auf dem BMA auch. Das hatte ich verglichen. Ich guck mir das heut abend nochmal genauer an.

In jedem Fall sollte man für jeden Kopter ein eignes Sketch nutzen - sonst kommt man sicher schnell durcheinander.
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten