Als FlightController muss z.B. ein Multiwii Mega bzw. Crius AIOP vorhanden sein - z.B. MegaPirate AIO Flight Controller (Atmega 2560) von Hobbyking. Nur ein Atmega 2560 hat genügend Ausgänge um neben den flugbetrieb auch zusätzlich noch genug externe Servos ansteuern zu können.
Den Headtracker der Fatshark Attitude habe ich über Lehrer Schüler Eingang in meine MC-22 von Graupner eingeschleift. Die Signale selbst lege ich dann im Gebermenü auf die Kanäle 10 (PAN), 11(TILT) und 12(ROLL), so das diese am RSat2 Empfänger auf den hinteren obersten Kanälen landen und ich trotzdem noch zusätzlich alle 4 Aux Kanäle nutzen kann. Mit diesem Setup haben wir das Signal schonmal prinzipiell auf den Flightcontroller - nun müssen wir jedoch noch die MultiWii Software so modifizieren das diese auch das Signal durchreicht. Auf folgenden Link sehen wir das auf einen Mega mit aktivierten Hardware PWM folgende Anschlüsse als Servoausgänge genutzt werden können.
- Servos HW_PWM : 44,45,46,11,12,6,7,8
- Empfänger Kanal 10 -> Controller Ausgang 44 (PAN)
- Empfänger Kanal 11 -> Controller Ausgang 45 (TILT)
- Empfänger Kanal 12 -> Controller Ausgang 46 (ROLL)
- Ausgang 44 -> Position 0, d.h., Servo[0]
- Ausgang 45 -> Servo[1]
- Ausgang 46 -> Servo[2]
- #define MEGA_HW_PWM_SERVOS
- #define SERVO_HEADTRACKER
#elif defined( VTAIL4 ) motor[0] = PIDMIX(-8/10,+1, +1); //REAR_R motor[1] = PIDMIX(-1, -1, +0); //FRONT_R motor[2] = PIDMIX(+8/10,+1, -1); //REAR_L motor[3] = PIDMIX(+1, -1, -0); //FRONT_L //3-axis trinity headtracker servo[0] = rcData[9]; // PAN signal on ppm-sum channel 9 servo[1] = rcData[10]; // TILT signal on ppm-sum channel 10 servo[2] = rcData[11]; // ROLL signal on ppm-sum channel 11 #elif defined( FLYING_WING )Diese Anpassung sorgt dafür das die Servosignale welche in rcData bereitliegen auf die Servoausgänge servo[0-2] gemapped werden. Nun sorgen wir noch dafür das unsere Servosignale auch verarbeitet/ausgegeben werden, hierfür muss u.a. #define SERVO gesetzt sein (def.h). Um dies zu erreichen habe ich mich entschieden folgende Stelle anzupassen.
#if defined(COPTER_WITH_SERVO) || defined(SERVO_TILT) || defined(GIMBAL) || defined(CAMTRIG) || defined(SERVO_MIX_TILT) #define SERVO #endifWir erweitern dieses define um unseren Headtracker define switch.
#if defined(COPTER_WITH_SERVO) || defined(SERVO_TILT) || defined(GIMBAL) || defined(CAMTRIG) || defined(SERVO_MIX_TILT) || defined(SERVO_HEADTRACKER) #define SERVO #endifNun müssen wir nur noch an einer Stelle dafür sorgen das auch ein entsprechendes internes Servo Mapping realisiert wird, dies erreichen wir über folgende Anpassung.
#if (defined(SERVO_TILT)|| defined(SERVO_MIX_TILT))&& defined(CAMTRIG) #define SEC_SERVO_FROM 1 // use servo from 1 to 3 #define SEC_SERVO_TO 3 #elseDiesen Teil erweitern wir ebenfalls mit unseren define SERVO_HEADTRACKER...
#if (defined(SERVO_TILT)|| defined(SERVO_MIX_TILT))&& defined(CAMTRIG) || defined(SERVO_HEADTRACKER) #define SEC_SERVO_FROM 1 // use servo from 1 to 3 #define SEC_SERVO_TO 3 #else
Wir sind nun in der Lage unsere Kamera gesteuert durch einen Headtracker über das PPM-SUM Signal am Flightcontroller zu betreiben.
Quellen:
- http://www.hobbyking.com/hobbyking/store/uploads/684736734X7478X34.pdf
- http://www.rctimer.com/download/Crius_AIOP_Manual_MWC.pdf
- https://wiki.fs-et.de/student-lab/MC22s