Nanowii als reine Gimbalsteuerung

raceagain

Erfahrener Benutzer
da ich verschiedene Möglichkeiten für Gimbalsteuerungen durchforste bin ich auch auf diesen Thread gestossen. Gibt es da schon evtl. neue Erkenntnisse/Videos?

Habe auch gelesen, das der Entwickler sehr beschäftigt ist mit den "ultra-ESC". Auch wirklich interessante Geschichte. Nicht böse sein, wollte nur mal anfragen.
 

Bogomir67

Neuer Benutzer
erstmal Danke für die Arbeit, nach solch einer reinen Gimbal-Steuerung suche ich schon eine Weile.
Zumal der Gimbal nicht unbedingt unter einem Flieger hängt, sondern ggf. an einem Teleskoparm, einem Fahrzeug (Land oder auch Boot).

Dazu vielleicht noch eine Idee:
Ideal wäre, wenn der Sensor bzw. die ganze Platine auf der Ebene der Kamera wäre, also auf der 2Platte", auf der auch die Kamera befestigt ist.

Dann wäre es egal, mit welchen Servos man arbeitet, denn die Aufgabe der Platine wäre einfach "halt dich selbst in den gewünschten Winkeln".

Und um noch einen drauf zu setzen:
Mit GPS und Kompass könnte man eine Wegpunktsteuerung machen, so dass die Kamera immer auf eine GPS-Position zeigt.
Beim MK heißt das glaube ich "POI-Setting" oder so, weil man den POI immer im Bild hält.
 
Hallo zusammen,

habe Felix's neue Software-Version zur Montage des nanoWii's am Gimbal probiert. Mit der ersten Software hat es eigentlich gut funktioniert. Die neue Software funktioniert bei mir irgendwie gar nicht. Habe folgende Settings:

//default settings
///////////////////////////////////////////////////////////////////////////////////////////////////
static uint8_t GimbalType = 1; // 0 normal / 1 = nanowii auf dem gimbal
static uint8_t servoType = 1; // 0 50Hz / 1 = 300Hz

// nur wenn GimablType = 1
static uint8_t Proll = 100; // P für Roll (100 = 10)
static uint8_t Ppitch = 100; // P für Pitch (100 = 10)

static uint8_t Iroll = 100; // I für Roll (100 = 0.0100)
static uint8_t Ipitch = 100; // I für Pitch (100 = 0.0100)

static uint8_t RServoLPF = 20; // Roll Low pass filter
static uint8_t PServoLPF = 20; // Pitch Low pass filter

// für beide typen

static uint8_t TravelMultiRoll = 130;
static uint8_t TravelMultiPitch = 130;

static uint16_t TravelMinPitch = 1000;
static uint16_t TravelMaxPitch = 2000;

static uint16_t TravelMinRoll = 1000;
static uint16_t TravelMaxRoll = 2000;

static uint16_t TravelMidRoll = 1500;
static uint16_t TravelMidPitch = 1500;

static int8_t TravelDirectionPitch = 1; // -1 zum invertieren
static int8_t TravelDirectionRoll = 1; // -1 zum invertieren

// end default settings

nach dem Einschalten fahren die Servos fast an einen Anschlag. Beim Nicken gibt es eine Stellung, in der das Nick Servo dann plötzlich die andere Endstellung erreicht. Es ist eher ein Wechsel zwischen zwei festen Positionen statt einer stufenlosen Regelung. An der Einstellung 300Hz liegt es nicht. Das hat mit dem Gimbal mit der ersten Version auch funktioniert. Hat jemand eine Idee?

Gruß
Peter
 

ronco

Erfahrener Benutzer
Hi Peter,

bei dieser variante ist ganz wichtig, das die servo wirkrichtung stimmt!
static int8_t TravelDirectionPitch = 1; // -1 zum invertieren
static int8_t TravelDirectionRoll = 1; // -1 zum invertieren

sonnst sinnst addieren sich die ausgleichsbewegungen auf.

wenn das vorher mit dieser einstellung lief, musst du die servos jetzt genau anderstrum stellen .. also -1

gruß

Felix
 
Hallo Felix,

danke für Deine Antwort. Daran kann es nicht liegen, das ich bei einer falschen Servorichtung trotzdem noch eine kontinuierliche Bewegung im Servos habe, nur falsch herum.

Hatte ich am Anfang bei Deiner ersten Version auch. Ich muss morgen das Thema nochmal auf dem Tisch einzeln aufbauen...

Gruss
Peter
 
Hallo,

ich hab die Nanowii Platine auch auf meinem Gibal getestet !

Bei den ersten Versuchen hatte ich die Platine auf der Wippe und ohne Potis ( Festwiderstand )
war sau schnell aber Ruckelte um die Mitte
das drehen an den Parametern hat nix gebracht
und auch andere Servos wurden getestet

nun hab ich wieder Potis an den Achsen und die Platine oben auf dem Gimbal

nun regelt es sauber aber die Geschwindigkeit ist zu langsam !
Die Servos sind schnell genug !!
ich hab eine Untersetzung von 1:4
Ich hab auch beide Versionen der Soft getestet ist überall das selbe.

Wie kann ich im Code was ändern damit sich die Geschwindigkeit erhöht ?

habt ihr eine Idee ?


Grüße
Peter
 

Sledge

lonesome Cowboy
erstmal Danke für die Arbeit, nach solch einer reinen Gimbal-Steuerung suche ich schon eine Weile.
Zumal der Gimbal nicht unbedingt unter einem Flieger hängt, sondern ggf. an einem Teleskoparm, einem Fahrzeug (Land oder auch Boot).

Dazu vielleicht noch eine Idee:
Ideal wäre, wenn der Sensor bzw. die ganze Platine auf der Ebene der Kamera wäre, also auf der 2Platte", auf der auch die Kamera befestigt ist.

Dann wäre es egal, mit welchen Servos man arbeitet, denn die Aufgabe der Platine wäre einfach "halt dich selbst in den gewünschten Winkeln".

Und um noch einen drauf zu setzen:
Mit GPS und Kompass könnte man eine Wegpunktsteuerung machen, so dass die Kamera immer auf eine GPS-Position zeigt.
Beim MK heißt das glaube ich "POI-Setting" oder so, weil man den POI immer im Bild hält.
Moin Thomas und willkommen in der fpvc :) Bezüglich Nanowii auf der Wippe: http://fpv-community.de/showthread....imbalsteuerung&p=248521&viewfull=1#post248521
 
Hallo Peter,

was meinst Du mit "ohne Potis ( Festwiderstand )"? Das Ruckeln um die Mitte hört sich nach dem Wobbeln an, was man laut Felix durch Einstellen der Wert "static uint8_t RServoLPF = 20; // Roll Low pass filter" für Roll und Pitch einstellen kann.

Dein anderes Problem scheint eher etas mit den "Prop" Werten für Pitch und Roll zu tun zu haben. Je größer die Untersetzung ist, umso größer muss auch der Wert sein, da dass Servo ja einen größeren Weg zurücklegen muss, um z.B. die Wippe wieder in die Waagerechte zu bekommen.

Hilft das?

Gruß
Peter
 
Mann kann ja bei den Servos einfach die Potis stillegen ! wenn die Sensoren auf der Wippe sind !

Die PID und die LPF Werte sind nur aktiv wenn die Sensoren auf der Wippe sind.

Der Prop Wert ist ja nur wie weit das servo Regeln soll damit die Nulllage erreicht wird.

Nur wie schnell das Servo dahin fahren soll ! wo wird das eingestellt !
das Servo kann schneller !

Gruße
Peter
 
OK, verstehe, da das Baord ja selbst weiß, wann es wieder waagerecht ist.

Ich gehe mal davon aus, dass Du 300 Hz als Ansteuerfrequenz eingestellt hast. Das Servo (zumindest mit Poti) wird sich umso schneller bewegen, je größer der Unterschied der Impulslänge ist. Sende ich einen 1500 µs Impuls und 3ms später (Anstuerung 300 Hz) einen 2000 µs Impuls, wird das Servo mit einem "Schlag" aus der Mittelposition in eine Endposition fahren.

Hast Du schon versucht, mit dem Wert "TravelMultiPitch" zu spielen? Bei größerem Wert müssten die Änderungen der Impulsdauer auch größer werden, um Untersetzungen etc. zu berücksichtigen...

Werde heute Abend ein wenig damit rumspielen.

Gruß
Peter
 
Hallo Felix,

Du hattest natürlich recht. Die Servorichtung war bei mir falsch, deshalb führ die Wippe beim "Überqueren" der waagerechten des Boards immer bis zum Anschlag.

Trotzdem bekomme ich es irgendwie nicht wirklich hin. Die Pitchachse lief schon mal sauber, beim nächsten Einschalten stand sie wieder schief. Ich bin mir auch nicht sicher, ob das Kalibrieren funktioniert, da ich keine "blinkende" Quittung vom Board bekomme, wenn ich im seriellen Monitor mit E oder C kalibriere.

Baue wieder auf "Board steht fest" um, da die Software bei mir wesentlich besser lãuft. Vielleicht bekommst Du ja mal wieder Lust, an dem Projekt weiter zu arbeiten.... :)

Gruss
Peter
 

ronco

Erfahrener Benutzer
HI,

ja also die version ist ja noch ziemlich beta ;) .. und lust habe ich .. das ist nicht das poblem .. es sind nur im momment andere sachen (z.b UltraESC) die mich weitaus mehr in anspruch nehmen als zuerst gedacht. der kalibriet im momment das acc bei jedem anschalten (da die GUI noch nicht geht) per E im serial amonitor kalibriert es aber (ich glaube noch ohne LED bestätigung)

ein trick zu geschwindigkeit.. ich habe bisher nur mit einem eher wackeligen gimbal getestet.. und hier musste ich den gyro anteil sehr klein halten. der ist aber bei der onboard variante für die geschwindigkeit zuständig. deshalb:

Code:
static uint8_t P8[5] = {2,2,0,Proll,Ppitch};
static uint8_t I8[5] = {10,10,0,Iroll,Ipitch};
static uint8_t D8[5] = {10,10,0,100,100};
ist etwas unter den einstellungen

ist {gyroRoll,gyroPitch,gyroYaw,ACCRoll,ACCPitch}

hier haben wir die misch verhältnisse von Gyro und ACC die ersten beiden werte sind gyro roll und pitch und die 2. die vom ACC die auch durch die haupteinstellungen beeeinflusst werden.

wenn du jetzt z.b gyro P und i hochschraubst (gyro p steht auf 2 und I auf 10) sollte es wesentlich schneller werden .. aber könnte eben auchanfangen zu zittern.

hier muss eben noch getesstet werden was sich wie lohnt

und generell . hast du versucht roll und pitch hochzuschrauben?

gruß

Felix
 
Zuletzt bearbeitet:

Bogomir67

Neuer Benutzer
Servo mit Festwiderstand geht theoretisch, aber:
Die Servoplatine ist nichts Anderes als ein Bürstenregler, und das Poti legt als Spannungsteiler den Mittelpunkt fest. Verschiebt man den Knüppel, fährt der Servo an, bis das Poti die neue Mittelstellung findet, die zum aktuellen Servosignal passt. Der Motor bleibt stehen.
Mit Festwiderstand ist der Mittelpunkt fest, aber der interessiert ja nicht, weil das Board ja selber merkt, wann es den gewünschten Winkel hat.
Aber das Poti regelt auch die Motorgeschwindigkeit! Es wirkt also bei kleinen Ausschlägen als Dämpfung. Daher erreicht der Servo auch bei kleinen Ausschlägen mit Poti keine hohe Geschwindigkeit, weil er aus der Dämpfungsphase nicht rauskommt.
Servoplatinen haben meist auch keinen breiten Totpunkt. Daher laufen die auch bei kleinen Signaländerungen schon los, oder brummen, wenn Jitter auf dem Signal ist.

Daher kann man sich überlegen, wenn der Gimbal groß genug ist, den Antrieb über einen (Getriebe-) Motor zu machen, den man mit einem kleinen Fahrtregler ansteuert. Der Fahrtregler darf dann aber keine Bremsfunktion haben, und Vor-Rück muss symetrisch sein (manche haben den Rückwärtsgang kleiner/langsamer). Was gehen müsste, wären z.B. ein THOR 4 oder Thor 15.
 
Zuletzt bearbeitet:

ronco

Erfahrener Benutzer
Hi,

das it nur in der neueren beta version .. eigentlich ziemlich direkt unter den einstellungen in der hauptdatei
Code:
//default settings
///////////////////////////////////////////////////////////////////////////////////////////////////
static uint8_t GimbalType = 0; // 0 normal / 1 = nanowii auf dem gimbal
static uint8_t servoType  = 0; // 0 50Hz / 1 = 300Hz

// nur wenn GimablType = 1
static uint8_t Proll = 100; // P für Roll (100 = 10)
static uint8_t Ppitch = 100; // P für Pitch (100 = 10)

static uint8_t Iroll = 100; // I für Roll (100 = 0.0100)
static uint8_t Ipitch = 100; // I für Pitch (100 = 0.0100)

static uint8_t RServoLPF = 20; // Roll Low pass filter
static uint8_t PServoLPF = 20; // Pitch Low pass filter

// für beide typen

static uint8_t TravelMultiRoll = 130;
static uint8_t TravelMultiPitch = 130;

static uint16_t TravelMinPitch = 1000;
static uint16_t TravelMaxPitch = 2000;

static uint16_t TravelMinRoll = 1000;
static uint16_t TravelMaxRoll = 2000;

static uint16_t TravelMidRoll = 1500;
static uint16_t TravelMidPitch = 1500;

static int8_t TravelDirectionPitch = 1; // -1 zum invertieren
static int8_t TravelDirectionRoll = 1; // -1 zum invertieren

// end default settings
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static int16_t rcData[6] = {1500,1500,1500,1500,1500,1500};          // interval [1000;2000]
static int16_t rcCommand[4] = {0,0,0,1000};       // interval [1000;2000] for THROTTLE and [-500;+500] for ROLL/PITCH/YAW 
static int16_t lookupPitchRollRC[6];// lookup table for expo & RC rate PITCH+ROLL
static int16_t lookupThrottleRC[11];// lookup table for expo & mid THROTTLE
volatile uint8_t rcFrameComplete; // for serial rc receiver Spektrum


static int8_t RCrate = 150;
static int8_t yawRate = 150;
--
static uint8_t P8[5] = {2,2,0,Proll,Ppitch};<------!!!!!!!!!!!!!!!!!!
static uint8_t I8[5] = {10,10,0,Iroll,Ipitch};<------!!!!!!!!!!!!!!!!!!
static uint8_t D8[5] = {10,10,0,100,100};<------!!!!!!!!!!!!!!!!!!

static uint8_t RXtype = 0;
static uint8_t satType = 1;

static uint16_t CaccZero[3];
gruß

Felix
 

Bogomir67

Neuer Benutzer
OK, hab es, und auch schon rumgespielt. Allerdings erstmal nur Pitch.
Dabei folgende Beobachtung:
Das geht, mit den Einstellungen wie oben (Platine auf der Pitch-Platte), und der Servo fährt die Platte sehr präzise in die gewünschte Lage.
Aber:

Die letzten 10% kriecht der Servo in die Position. Als Kurve würde das aussehen wie eine e-Funktion. Das heißt aber, dass kleinere Ausschläge nicht schnell genug ausgeglichen werden.

Und wenn ich den Servo direkt an den Servotester hänge, fährt der recht flink von Stellung zu Stellung. Aber wenn ich die nanoWii dazwischenschleife, verzögert/verlangsamt die NanoWii die Servoreaktion, und die Servobewegung ist nicht mehr linear zur Knüppelbewegung. Auch hier werden kleine Ausschläge verschluckt. Als ob ein Tiefpass da rumfiltert.

Nochwas:
Ich habe zwei Versuchsaufbauten.

Das eine sind 2 Platten, mit Scharnier verbunden, Servo mit einer Drahtanlenkung bewegt die Platte. Hier klappt es, wie oben beschrieben.

Das Andere ist einfach ein Standardservo, das liegt auf der Seite und auf dem Servohorn ist eine Platte angeschraubt. Direkter geht es also nicht.

Hier habe ich ein übles Zappeln um den Nullpunkt. Ich habe schon die Werte (2 und 10) halbiert, damit wird es besser, aber nicht ganz weg. Durch das Gezappel wird auch die Nullage nicht mehr erreicht.
 
Zuletzt bearbeitet:
Hallo Felix,

ist es möglich, bei Deiner ersten Version (nanoWii NICHT auf Wippe) das nanoWii "auf dem Kopf" einzubauen? Vorne/hinten ist korrekt (Pfeil nach vorne), jedoch Bestückungsseite nach "unten".

Habe die heute so verbaut und merkwürdige Ergebnisse. Schnelle Bewegeungen rufen schnelle Korrekturen hervor, jedoch großer Nachlauf und Drift...

Gruß
Peter
 

ronco

Erfahrener Benutzer
hi,

da musst du dier mal die nanowii define in der def.h anschauen. da ist eine ACC und gyro sensor orientierung. musst da das vorzeichen (+ oder -) vor der Z achse des acc, und der roll achse bei gyro und acc tauschen. ... wenn ich mich grade nicht verdacht habe müsste es das beheben :)


gruß

Felix
 

Karsten J.

Erfahrener Benutzer
Hi Felix,

kann man das Nanowii Board für dieses Projekt schon bestellen oder hast Du noch vor, irgendetwas an der Hardware hier zu verändern ?
Gruß Karsten
 
FPV1

Banggood

Oben Unten