MultiWiiFlyingwing czyli stabilizacja do skrzydła

Elektronika w modelu i na ziemi

Moderatorzy: moderatorzy2014, moderatorzy

Awatar użytkownika
szymon_wolebez
Posty: 1241
Rejestracja: środa 03 lut 2010, 18:33
Lokalizacja: WARSZAWA

MultiWiiFlyingwing czyli stabilizacja do skrzydła

Post autor: szymon_wolebez »

Temat ciekawy i to rodem z wieszaków.

Jak widać chętnych do popełnienia tego projektu jest wielu.
Przyznam, że już kilka miesięcy czaiłem się ruszyć te zagadnienie.

Materiały są dostępne na forum MultiWii
przykładowy temat którym się dziś posiłkowałem: http://www.multiwii.com/forum/viewtopic.php?f=8&t=594

Podstawowy schemat połączeń:

Obrazek

Zmontowałem to tak jak tylko można było najprościej.
Arduino + graty Wii.
Z gratów Wii zrobiłem IMU (skleiłem dwie płytki i zapakowałem w koszulkę termokurczliwą), do płytki arduino bezpośrednio przewody (wejścia i wyjścia). Docelowo po udanych testach stołowych zrobię małą płytkę z odpowiednimi filtrami wejść i zasilania oraz złącza.
Tym razem do obsługi arduino dorwałem FTDI z wyprowadzonym DTR więc nie musze wciskać na czas resetu.

Dziś zrobiłem tylko przygotowanie do tematu.
Wgrałem wsad MultiWii_1_8_2Flyingwing - musiałem nieco pogrzebać.

To co ma na celu:
1) Stabilizacja skrzydła- przełącznik 3 pozycyjny AUX1, 1 pozycja to sam mikser bez stabilizacji, 2 pozycja to aktywacja samych żyroskopów, 3 aktywacja ACC. ---> ZROBIONE

2) AHI z OSD Remzibi- AHI aktywowane AUX2, bez uzbrajania czy innych zbednych kombinacji ----> OBECNIE

3) Uruchomienie 2-osiowej stabilizacji kamery ----> KOLEJNY ETAP



Aby otrzymać pierwszy punkt zrobiłem tak (zaznaczając trzeci kwadracik w AUX1 dla aktywacji ACC) :

Kod: Zaznacz cały

 #ifdef FLYING_WING
       if(abs(rcData[AUX1])>1650) { //Use aux1 to activate Passthru or MWii mode
    
    int RX_ROLL  = 1500-rcData[ROLL];  // Analog  pin 1 output
    int RX_PITCH = 1500-rcData[PITCH]; // Analog  pin 0 output
    int RX_YAW   = 1500-rcData[YAW];   // Digital pin 3 output
    //Passthru
    servo[0]  = constrain(1500 - RX_YAW, 1020, 2000); //YAW the direction of the servo can be changed here: invert the sign before RX_YAW
    servo[1]  = constrain(1500 - RX_PITCH + RX_ROLL, 1020, 2000); //LEFT the direction of the 2 servo can be changed here: invert the sign before RX_PITCH
    servo[2]  = constrain(1500 + RX_PITCH + RX_ROLL, 1020, 2000); //RIGHT
    motor[0]  = constrain( rcData[THROTTLE], 1020,2000); //MOTOR on pin 9 490hz ESC
    }else{
    //MultiWii
    servo[0]  = constrain(1500 - axisPID[YAW], 1020, 2000); //YAW the direction of the servo can be changed here: invert the sign before axisPID
    servo[1]  = constrain(1500 - axisPID[PITCH] - axisPID[ROLL], 1020, 2000); //LEFT the direction of the 2 servo can be changed here: invert the sign before axisPID
    servo[2]  = constrain(1500 + axisPID[PITCH] - axisPID[ROLL], 1020, 2000); //RIGHT
    motor[0]  = constrain( rcData[THROTTLE], 1020,2000); //MOTOR on pin 9 490hz ESC
    }
  #endif
Ciąg dalszy nastąpi...


EDIT:

Aby otrzymać pierwszy punkt zrobiłem tak (zaznaczając trzeci kwadracik w AUX1 dla aktywacji ACC) :

Kod: Zaznacz cały

 #ifdef FLYING_WING
       if(abs(rcData[AUX1])>1650) { //Use aux1 to activate Passthru or MWii mode
    
    int RX_ROLL  = 1500-rcData[ROLL];  // Analog  pin 1 output
    int RX_PITCH = 1500-rcData[PITCH]; // Analog  pin 0 output
    int RX_YAW   = 1500-rcData[YAW];   // Digital pin 3 output
    //Passthru
    servo[0]  = constrain(1500 - RX_YAW, 1020, 2000); //YAW the direction of the servo can be changed here: invert the sign before RX_YAW
    servo[1]  = constrain(1500 - RX_PITCH + RX_ROLL, 1020, 2000); //LEFT the direction of the 2 servo can be changed here: invert the sign before RX_PITCH
    servo[2]  = constrain(1500 + RX_PITCH + RX_ROLL, 1020, 2000); //RIGHT
    motor[0]  = constrain( rcData[THROTTLE], 1020,2000); //MOTOR on pin 9 490hz ESC
    }else{
    //MultiWii
    servo[0]  = constrain(1500 - axisPID[YAW], 1020, 2000); //YAW the direction of the servo can be changed here: invert the sign before axisPID
    servo[1]  = constrain(1500 - axisPID[PITCH] - axisPID[ROLL], 1020, 2000); //LEFT the direction of the 2 servo can be changed here: invert the sign before axisPID
    servo[2]  = constrain(1500 + axisPID[PITCH] - axisPID[ROLL], 1020, 2000); //RIGHT
    motor[0]  = constrain( rcData[THROTTLE], 1020,2000); //MOTOR on pin 9 490hz ESC
    }
  #endif
Ciąg dalszy nastąpi...


EDIT:

Zrobiłem tak odnośnie AHI, idę sprawdzić - to modyfikacja pirzola (specjalnie dolutowałem piezo aby słyszeć w czasie testów co się dzieje)

Kod: Zaznacz cały

// -----------------------------------------------------------------------------------------------

if (armed == 0 && rcData[ROLL] < MINCHECK && rcData[PITCH] > MAXCHECK) {
switch (telemetry) {
case 1:
BUZZERPIN_ON delay(250); BUZZERPIN_OFF;
delay(150);
BUZZERPIN_ON delay(250); BUZZERPIN_OFF;
delay(150);
BUZZERPIN_ON delay(250); BUZZERPIN_OFF;
telemetry = 0;
OSD_END();
rcData[ROLL] = 1300;
// wartość wieksza niz MINCHECK, bezpieczniej wstawic wartosc srednia=neutralna
break;
case 0:
BUZZERPIN_ON delay(250); BUZZERPIN_OFF;
delay(150);
BUZZERPIN_ON delay(250); BUZZERPIN_OFF;
delay(150);
BUZZERPIN_ON delay(250); BUZZERPIN_OFF;
delay(150);
BUZZERPIN_ON delay(250); BUZZERPIN_OFF;
delay(150);
BUZZERPIN_ON delay(250); BUZZERPIN_OFF;
telemetry = 1;
OSD_INIT();
rcData[ROLL] = 1300;
// wartość wieksza niz MINCHECK, bezpieczniej wstawic wartosc srednia=neutralna
break;
}
} 
Ostatnio zmieniony czwartek 05 sty 2012, 15:09 przez szymon_wolebez, łącznie zmieniany 1 raz.
Pozdrawiam
Szymon
Awatar użytkownika
szymon_wolebez
Posty: 1241
Rejestracja: środa 03 lut 2010, 18:33
Lokalizacja: WARSZAWA

Post autor: szymon_wolebez »

Tak wygląda platforma testowa:

Obrazek

Obrazek

Wracam do pracy nad modyfikacją kodu na własne potrzeby.
Jeszcze wczoraj coś namieszałem przed snem i muszę to poprawić.

Zapraszam do współpracy w temacie.

EDIT:

Z powodu dzikich wskazań z IMU postanowiłem dodać sprzętowy pull up i zasilanie przez dwie diody. Czyli to co jest u Rurka na płytce (posiłkowałem się schematem).
Po dodaniu i odznaczeniu w kodzie programowego pull up zaczęło ładnie działać.

Tu przykład o co mi chodzi.
Diody to 1N1484 a rezystory 4,7k.

Obrazek

Moja prowizorka umieszczona na przewodach sygnałowych pomiedzy IMU a arduino:

Obrazek

Oczywiście na gotowych FC pozostaje już tylko zabawa z kodem. Moja wersja ma być tania i tylko z potrzebnych elementów :p

Wiec praca posuwa się dalej.

AHI uruchomione ----> modyfikacja trwa.

Tylko wymaga zmiany w kodzie - dodatkowy kanał do uzbrajania i uruchamiania AHI.
Tak jak jest obecnie nie nada się do skrzydła, max. w gół i lotka max w lewo powoduje ON/OFF AHI i w tym momencie tracimy możliwość sterowania przez kilka sekund z różną pozycją serw. Wszystko dlatego, że spełniony jest ciagle warunek armed--0 gdyż nie mam podpiętego kanału throttle i yaw (które nie będą podpinane do RX- być może któryś pod przełącznik do uzbrajania/AHI . Sam fakt, że AHI musi być w jakiś sposób uruchamiane jest spowodowany tym, że jak damy w kodzie na stałe to nie będzie komunikacji z GAUI.

Tu nagranie utwierdzające w przekonaniu, że działa. Nagrywane ARCHOSem 405 więc przy okazji można zobaczyć jako to wygląda.

Pozdrawiam
Szymon
Awatar użytkownika
jelcyn
Posty: 3417
Rejestracja: niedziela 23 sty 2011, 16:56
Lokalizacja: B-stok

Post autor: jelcyn »

Widze że przygotowujesz sprzęt do przelotu. Bardzo dobrze :lol:
Awatar użytkownika
szymon_wolebez
Posty: 1241
Rejestracja: środa 03 lut 2010, 18:33
Lokalizacja: WARSZAWA

Post autor: szymon_wolebez »

Puki mogę przygotowuję sam. Później będę potrzebował pomocy i towarzystwa przy testach.

Więc Jelcyn ty również się szykuj.

Szukam, gmeram w kodzie i nie mogę dojść jak zmienić warunek uruchamiania AHI.
Dokładnie chodzi o to aby nie dokładać już więcej połączeń z RX.
Nawet dobrą opcją była by zworka/przełącznik do uruchamiania AHI/komunikacja.
Nie może to być związane z kombinacją drążków. Tu drążkami porusza się różnie i nie można pozwolić sobie na przypadkowe aktywowanie jakiejś funkcji np. kalibracji czy uzbrajania.

Niestety to trzeba mieć już do tego głowę. Jak widzę po kodzie to jest chyba zrobiony obiektowo. Więc dodając coś w jednym miejscu należy uwzględnić to w kolejnym pliku.

Podobnie wygoda by było dodanie potencjometrów do ustawiania PID (coś takiego ma KUKI na swojej płytce). Chodzi mi bardziej o dopisanie/dostawienie tej części kodu.

Trzeba odejść nieco od wieszaków.
Pozdrawiam
Szymon
Awatar użytkownika
Rurek
Posty: 16419
Rejestracja: środa 10 mar 2010, 15:21
Lokalizacja: AIP ENR 5.5 - AAA 153 :-)

Post autor: Rurek »

Trzeba Miś'ia poprosić aby wskazał co w kodzie przemodować abyś osiągnął załączanie zdalne stabilizacji...
infekcja FPV postępuje w zastraszającym tempie...
Awatar użytkownika
szymon_wolebez
Posty: 1241
Rejestracja: środa 03 lut 2010, 18:33
Lokalizacja: WARSZAWA

Post autor: szymon_wolebez »

Rurek pisze:Trzeba Miś'ia poprosić aby wskazał co w kodzie przemodować abyś osiągnął załączanie zdalne stabilizacji...

To ja już mam zrobione:)

Chodzi tylko o pozbycie się wszelkiej możliwości popsucie czegoś poprzez kombinację drążków (i wszelkie inne sprawy co mogą doprowadzić do inicjacji programowych w wyniku których odcina sterowanie, a tak jest w momencie aktywacji AHI z drążków, nie wiem czy też są wyłączone opcje kalibracji ACC z poziomu aparatury -- program nie widzi armed i te opcje mogą się aktywować w czasie lotu). Wprowadzenie do kodu opcji on/off (zwykła komunikacja z programem, pstryk uruchamianie AHI) na zwykłym przełączniku/przycisku zamontowanym do arduino na pokładzie. Nie potrzebuję zdalnej aktywacji AHI, jednak musi być w jakiś sposób aktywowana bo nie może być na stałe gdyż uniemożliwia komunikację z PC emitując telemetrię do OSD.

Poza tymi drobiazgami to na stanowisku testowym pozytywne wrażenia.
Czytam o PID ale nie wiem jak to się ma do płatowca. Tu nie będzie nic z silnika strzelać tylko z lotek :shock: . Dopiero jak wszczepię w skrzydełko to będzie to czuć i widać.

PS. Rurek sprawdziłeś może te graty Wii o ile dotarły.
Pozdrawiam
Szymon
Awatar użytkownika
kuki83
Posty: 2091
Rejestracja: wtorek 19 paź 2010, 19:08
Lokalizacja: Ropczyce/Podkarpacie

Post autor: kuki83 »

napisz pod jakim pinem chcesz przełącznik do aktywacji to ci to zrobię, i wywalę wszystkie niepożądane kombinacje drążków
Awatar użytkownika
szymon_wolebez
Posty: 1241
Rejestracja: środa 03 lut 2010, 18:33
Lokalizacja: WARSZAWA

Post autor: szymon_wolebez »

Może to być pod pinem D2 i obok jest GND i można by tu dać puki co zworkę.

Powiedz mi jeszcze jak to jest z tymi potencjometrami i ustawianiem przy ich pomocy PID
Pozdrawiam
Szymon
Awatar użytkownika
kuki83
Posty: 2091
Rejestracja: wtorek 19 paź 2010, 19:08
Lokalizacja: Ropczyce/Podkarpacie

Post autor: kuki83 »

ok podziałam z tym

potencjometry są pod pinami analogowymi
A2 A7 A6 tak ze wystarczy wlutować pot i będzie działać :-)
Awatar użytkownika
kuki83
Posty: 2091
Rejestracja: wtorek 19 paź 2010, 19:08
Lokalizacja: Ropczyce/Podkarpacie

Post autor: kuki83 »

a patrzyłeś w kod czy czasem występuje coś takiego jak uzbrojenie bo mi się wydaje że nie jutro rano podłącze kontroler i zaglądnę do kodu
Awatar użytkownika
szymon_wolebez
Posty: 1241
Rejestracja: środa 03 lut 2010, 18:33
Lokalizacja: WARSZAWA

Post autor: szymon_wolebez »

kuki83 pisze:ok podziałam z tym

potencjometry są pod pinami analogowymi
A2 A7 A6 tak ze wystarczy wlutować pot i będzie działać :-)
Znaczy, że już jest to nadpisane do kodu 1_8_2 i wystarczy zadeklarować?

Czy może to być PR 10k, czyli pod +5V dzielnik pod analogowy pin i GND.
Widzę A2 ale A7 i A6 to chyba D7 i D6, pod D7 mam podpięty AUX1 to by było trzeb to przenieść na inny pin.
Pozdrawiam
Szymon
Awatar użytkownika
szymon_wolebez
Posty: 1241
Rejestracja: środa 03 lut 2010, 18:33
Lokalizacja: WARSZAWA

Post autor: szymon_wolebez »

kuki83 pisze:a patrzyłeś w kod czy czasem występuje coś takiego jak uzbrojenie bo mi się wydaje że nie jutro rano podłącze kontroler i zaglądnę do kodu

W kodzie nie widziałem armed dla skrzydła. Wiem ,że jest ciągle armed==0 bo spełnia to warunek uzbrajania AHI (pitch max w dół i roll max w lewo).

Więc jak domyślnie jest nieuzbrojony to może wchodzić w konfigurację, które nie są wyłączone (przypuszczam, że nie powinno ich tam być lecz na podstawie mojej znajomości programowania nie mogę dojść czy faktycznie tak jest a sprawdzanie tego w locie to...).
Pozdrawiam
Szymon
Awatar użytkownika
krzysztof21
Posty: 1037
Rejestracja: niedziela 28 lut 2010, 13:22
Lokalizacja: Wschodnia polska i okolice

Post autor: krzysztof21 »

Moja propozycja jest taka zeby jak najmniej zmieniać sprzęt zachowując pewna kompatybilność z płytkami multiwii - pomoże to ewentualnym chętnym na migracje do parapeta . A przecież włączanie stabilizacji dawało sie w multiwii na kanale (5-6?) przypisywać . samo dolutwanie lub dopięcie potencjometrów do pinów nie jest jeszcze znaczącą modyfikacją a może poprawic ergonomie obsługi/regulacji w polu.

Trzeba tylko oczyścić kod z zbędnych wpisów dotyczących coptera i zmienic sposób aktywacji /zazbrajania ( chociaż niby dlaczego nie podłączyc kanału gazu i nie zazbrajać ? lub kanałem (5 lub 6) zazbrajać i aktywować stabilizację ?

Ale jak Kuki sie zachecił to mamy na ten sezon nastepny projekt z poważnym wsparciem merytorycznym ;-) więc bedzie latać.

Jak dla mnie bomba - bo mam juz wszystko do zmontowania takiego układu - multiwii , osd remzibiego , nowe skrzydło prawie kompletne , MLRS(mifał openlrs ;-) ) i checi - tylko czasu troche brak ale sie wezme.
Krzysiek
Awatar użytkownika
szymon_wolebez
Posty: 1241
Rejestracja: środa 03 lut 2010, 18:33
Lokalizacja: WARSZAWA

Post autor: szymon_wolebez »

krzysztof21 pisze: Trzeba tylko oczyścić kod z zbędnych wpisów dotyczących coptera i zmienic sposób aktywacji /zazbrajania ( chociaż niby dlaczego nie podłączyc kanału gazu i nie zazbrajać ? lub kanałem (5 lub 6) zazbrajać i aktywować stabilizację ?
Też o tym myślałem. Jednak im mniej połączeń z RX tym moim zdaniem lepiej.
Wszelkie uzbrajanie lepiej jest wykonać na zworkach i robić to przed startem. Unikał bym kombinacji z poziomu aparatury gdyż machamy drążkami jak popadnie (a szkoda zajmować specjalnie po to inne kanały). Rozbrajamy zworką/przełacznikiem tylko w celu dokonania kalibracji ACC itp. z poziomu aparatury przed startem w razie potrzeby. A tak to ciągle mamy uzbrojone co uniemożliwia dla programu wejście w te funkcje kalibracji podczas normalnej eksploatacji.

Takie zworki to żaden problem na FC a nawet można dorobić jakieś dipswitche czy coś takiego.

Chcę do tego jeszcze podpiąć stabilizację kamery 2 osiową z tym, że sterowanie jednym kanałem tylko pitch kamery. Więc będę potrzebował jeszcze obsługi jednym kanałem na potencjometrze pitch kamery oraz aktywację stabilizacji kamery (opcjonalnie).




Zgadzam się zupełnie ze standaryzacją wejść i wyjść gotowych FC KUKIego.

Rozważam tanią wersję dla desperatów (arduino + graty Wii + minimalny shield z tymi potencjometrami, zworkami itp.)

Projekt bardzo ciekawy, i to pod względem uzupełnienia wskazań OSD (AHI i oczekiwany kierunek na bazę na podstawie magnetometru - co by zawsze strzałka pokazywała poprawną drogę).


Więc tak:
Proponował bym dorobienie 3 zworek/przełączników + potencjometry
1- zworka do uruchamiania telemetrii potrzebnej dla OSD (AHI-on/off)
2- zworka do uzbrajania/rozbrajania (np. w celu kalibracji z poziomu aparatury ACC - wtedy należało by podpiąć dodatkowe kanały i wykonywać to tak jak w kopterach, choć wolał bym tego unikać i kalibrować z poziomu PC)
3- wybór przypisania potencjometrów do ustawiania PID oraz zakresu ustawiania gimbala.

Kanały wejściowe to na pewno lotki i wysokość, plus jeden AUX1 (trzy pozycyjny- off/on żyroskopy/on ACC) do uruchamiania stabilizacji, kanał proporcjonalny (na potencjometrze) ro regulacji pitch kamery (czy to z aktywowaną stabilizacją kamery czy bez - możliwość spoglądania w góra/dół), AUX2 do aktywacji stabilizacji gimbala.

Już chyba więcej cudów nie ma co wymyślać. To chyba już będzie szczyt możliwości dla adruino na atmega 328.

KUKI czy to co napisałem jest możliwe do realizacji na tym arduino czy za wiele sobie wyobrażam?
Pozdrawiam
Szymon
Awatar użytkownika
krzysztof21
Posty: 1037
Rejestracja: niedziela 28 lut 2010, 13:22
Lokalizacja: Wschodnia polska i okolice

Post autor: krzysztof21 »

Wszelkie uzbrajanie lepiej jest wykonać na zworkach i robić to przed startem.


To by było chyba optymalne.

Edit:

Wygląda ,ze serwa do stabilizacji kamery sa już wykorzystane właśnie jako serwa lotek skrzydła - a mamy wolne do dyspozycji wyjścia po kanałach od silników - czy nie można tego przemapować żeby serwa od bimbala jednak były serwami od bimbala z możliwościa sterowania z 2-ch proporcjonalnych kanałów ( albo trzech ;-) i wtedy kamera w 3 płaszczyznach sie stabilizuje ) . Z możliwością wyłączania tej stabilizacji razem lub osobno z stabilizacją skrzydła ? Albo włąsnie na tych kanałach co sterowane były regulatory silników wysterować serwa bimbala kamery.
Krzysiek
ODPOWIEDZ