Sistem autopilot pentru elicopterul cu comandă radio

Sistem autopilot pentru elicopterul cu comandă radio. Partea 2: Interceptarea controlului -3

  • 11.06.15 03:50 •
  • altaniu •
  • # 259683
  • Habrahabr •
  • 25 •
  • 6678

- la fel ca Forbes, doar mai bine.







Aceasta este o continuare a articolului privind dezvoltarea unui sistem autopilot pentru un elicopter controlat radio.

Din moment ce nu intenționez să construiesc un UAV cu drepturi depline, în cea mai mare parte e încă un elicopter cu operare manuală și nu voi elimina complet receptorul de la el. Prin urmare, este necesar să realizăm într-un fel comunicarea dintre Arduino, receptorul radio și controlerul motorului.

În primul rând, am decis să înțeleg modul în care receptorul comunică cu controlorul. Odată ce serverele sunt conectate la receptor și la controler, atunci principiul de comandă al motorului este același ca și servo-drive-urile bazate pe PWM.

Apoi am decis să încerc să citesc valorile de la ieșirile receptorului.

Aranjarea contactelor pe receptor și pe controlerul motorului: 1-GND, 2-VCC, 3-signal.

În acest scop, conectați ieșirile de semnal receptor (numai 4, superioare 2 - Servomecanismele, următoarele 2 - controlul motoarelor) la Arduino pin 5,6,7,8, una dintre intrările la VCC 5v Arduino, iar una dintre intrările la GND Arduino . Cu pulseIn () funcția citește semnalul de intrare la o lungime predeterminată, obținem valorile furnizate de receptor. Maximizarea pârghiilor de pe panoul de control, am stabilit valorile de care aveam nevoie. Această valoare de 1080-1800, în care valoarea eliberată atunci când mânerele sunt în stare normală pentru ruliu, tangaj și titlul - 1450, și un gaz - 1080.

Schița este destul de simplă:

De fapt, ar părea totul, poți deja să transferi controlul asupra lui Arduino? Acum conectăm controlerul motorului (arduino pinul 5 și 6) și servomotoarele (Arduino pin 7 și 8) cu Arduino și scriem o altă schiță:


Umpleți-vă, așteptăm și aici începe problemele. În primul rând, a fost nevoie de mult timp să înțelegem de ce se pornește controlerul, dar nu poate fi calibrat și să înceapă să funcționeze. O jumătate de oră mai târziu, am găsit o soluție: problema a fost că se aprinde și clipește atunci când orice tensiune, dar lucrarea începe numai atunci când tensiunea minimă a bateriei este de 7,4 volți. De fapt, chiar a beneficiat, Arduino foarte bine hrănit și alimentat de baterie prin intermediul controlerului, și nu va trebui să pună o gestionare a bateriei, iar celălalt pe controlerul motorului (de obicei, controler este o baterie reîncărcabilă puternic, cu capacitate mare și tensiune de 11.1V, și gestionarea unei baterii cu o capacitate mică (850 mAh) și o tensiune de 7,4 V).

Conectăm acumulatorul, încercați din nou. Din nou, clipește doar. Pentru a rezolva această problemă a luat o ora 3. Se pare ca operatorul să funcționeze, are nevoie de un anumit fel, atunci când povzaimodeystvovat cu receptorul. Cum exact, încă nu am reușit să aflu, poate că receptorul trimite niște valori speciale. Pentru a rezolva acest lucru, conectați la Arduino, de asemenea, un receptor (Arduino pini 9,10,11,12), citește din ea valorile provenind din telecomandă, și le transmite la controler:

Umpleți, conectați, lucrați!

Acum, receptorul este conectat la controler prin intermediul Arduino, care interceptează semnalul și îl trimite la canalul de comandă dorit. Chiar dacă semnalul se schimbă (de obicei, valoarea scade cu 15-20 de unități), elicopterul poate fi chiar ridicat în aer.

Acum adăugați butonul Arduino când este fixat pentru a activa controlul automat.


Pentru a transfera controlul la Arduino, este necesar să conectați bateria, așteptați până când indicatorul de pe controler începe să se ardă în mod constant și apoi puteți chiar să opriți receptorul, în principiu. După inițializare, controlerul poate funcționa deja fără receptor.

În acest exemplu, cu un ciclu (pentru buna funcționare a servomotorului), unghiul de înclinare a lamelor se schimbă. În viitor, aceeași metodă va fi folosită pentru a controla elicopterul în zbor.







Vă puteți ajuta și puteți transfera niște bani la dezvoltarea site-ului

Am citit ambele articole despre rudimente (îmi pare rău, dar până acum este așa) despre pilotul automat. Vreau să vă avertizez imediat, că pentru un pilot automat nu veți gestiona un giroscoapă, voi explica de ce. Giroul are proprietatea de a minți atunci când integrează citirile sale. Pe elicopterele cârmei se pun giroscoape de blocare a capului cu o singură axă (de exemplu, aliniați gp780). Ele sunt necesare pentru a se stabiliza numai prin y și y. Din păcate, cunoștințele mele despre modelele UAT și modelele pilotului de autopilot spun în special că autopilotul trebuie să cunoască colțurile corpului, care nu dă un giroscop.

Poate că codul de stabilizare multiwii vă va ajuta, există un mod de elicopter, dar nu este conceput pentru o schemă coaxială a rotorului cu elicopterul 2x și va trebui să vă gândiți puțin.

Există, de asemenea, o probabilitate ca codul scris în acest stil (folosind arduino libraries) să nu aibă suficientă viteză pentru un autopilot serios. Același multiwii nu utilizează, de exemplu, funcțiile de impuls.

P.S. Nu vreau să capc, dar vreau să știu de ce motoarele sunt numite drept și de jos?
Servo rightmot;
Servo nizmot;
P.P.S. Aș dori să faceți formatul codului, iar indicele este setat.
P.P.P.S. Sunteți un om bun și ați ales un subiect interesant, dar merită să stabiliți mai mulți pași pe Khabr decât să schițați în jur cu servleturi. Asemenea lucruri sunt pe arduino.cc

Nu e doar un giroscop. Un alt GPS cu o rată de reîmprospătare de 1 Hz (acum am destabilizat antena, dar aștept până când altul ajunge la 5 Hz) și un barometru (care nu este altimetru). Inițial, motoarele au fost cele mai de sus pentru că pe controler, ieșirile sunt situate una deasupra celeilalte :). Și apoi unul a fost redenumit la unul potrivit. Acest canal este responsabil pentru întoarcerea la stânga și la dreapta, iar al doilea a rămas mai mic, deoarece acest canal - este responsabil pentru up-and-down. Mulțumesc, dar e mai mult ca o schiță a motoarelor mutate prin intermediul regulatorului de viteză. În ceea ce mă privește, era cel mai dificil și mai important.

P.S. Propun să menționez în viitor ceea ce fac servorul / motorul, de exemplu rollServo, pitchServo, yawMotor, motorul de accelerație. Poate că va fi mai convenabil.

Totul, acum înțeleg.
Da, vorbesc despre asta și spun că 1 Hz este mic, așa că am comandat un receptor la 5 Hz.
Ei bine, de fapt, ideea este de a ajunge cu mâna la orice punct de citiri GPS înregistrare, și, ulterior, compara situația actuală cu înregistrat anterior, și deja pe acest ghid cum să procedeze. Dacă am plecat de, zbura spre dreapta (în cazul în care zborul, zbura la stânga, și așa mai departe ad infinitum). Pentru camera aceasta nu se potrivește, dar, de exemplu, pentru un spațiu mare undeva în câmp, doar dreapta. Chiar dacă eroarea de a atârna va fi de până la un metru, mi se va potrivi perfect.
Cu acest lucru mi-am dat seama deja, înainte ca nu am înțeles deloc cum au fost controlate motoarele și servo pe modelele r, acum înțeleg PWM-ul convențional.
Mulțumesc, este o idee bună să apelați canalele în funcție de scopul lor, așa că o voi face.

Mă scuzați, desigur, dar sarcina de a controla obiectele mobile este foarte versatilă și încă nu există o soluție universală. Există PID, dar are și probleme. Faptul este că fac această sarcină în activitatea mea științifică. Dacă ați rezolvat această problemă, comunicați-o cu comunitatea științifică.
În plus, vă veți confrunta cu sarcina de a filtra citirile senzorilor. Nu uita la fel de bine că, fără cunoștințe de modul în care a apelat la orizont, nu se poate chiar zbura prin puncte, iar orizontul nu va înțelege fără accelerometru.
Din nou, dacă zburați spre stânga (ia-ți exemplul), atunci care este valoarea pentru respingerea servo-ului? Maxim la stânga - răsturnați.
Shim este cel mai simplu dintre toate proiectele tale.

Nu răsturnați, verificați. Mai departe de punct, cu cât ne apropiem mai mult de stânga, reducând unghiul de înclinare al servo-ului. Toate acestea vor trebui deduse experimental. Nu înțeleg destul de bine expresia "A apărut orizontul". Este o citire a busolei? Dacă da, atunci aceste citiri sunt de asemenea emise de receptorul GPS (emite un curs și o viteză). În cele din urmă, punerea unui accelerometru nu este o problemă.

Vorbesc despre unghiurile de ruliu și de pitch, care sunt foarte importante. Compasul este doar un dispozitiv auxiliar pentru detectarea eclipselor, ca un accelerometru pentru determinarea rolei și a pasului.
Mai departe de punct, cu cât ne apropiem mai mult de stânga, reducând unghiul de înclinare al servo-ului.
Și cât mai puțin? Este o autoritate de reglementare? Regulatorii P nu sunt întotdeauna ușor de configurat, în special pe obiecte în mișcare, cum ar fi elicopterele. Știu că chiar și pe roboții care călătoresc pe linie, preferă să pună regulatorul PI de multe ori.

În general, vă pot invita să așteptați continuarea, unde vă voi spune despre asta. Dar să fie așa. Dacă suntem în punctul în care unghiul de înclinare este 0 servo condiționat (unghi 0 este unghiul la care o absență completă a elicopterului vânt plutește în loc. Este dotat cu un trimer pe telecomandă). Unghiul servo al elicopterului este undeva aproape de 90 de grade, valoarea de ieșire de la receptor este de aproximativ egală cu 1450. Dacă ne abate de la acest punct, unghiul este incrementat sau decrementat în funcție de modul în care ne-am deviat. Dacă dorim precizie în metru, unghiul maxim de deviere a actuatorului este atins atunci când ne aflăm într-un metru de punctul. Aș putea fi greșit, desigur, dar în cazul în care vântul suflă modelul, de asemenea, nu trebuie să schimbe unghiul de înclinare în raport cu orizontul? Și ce, atunci, este un model ideal în exact poziția troienele într-o parte, iar sistemul crede că elicopterul este încă în același punct? Dar receptorul GPS marchează perfect aceste modificări și cu ajutorul acestuia este ușor să reglați poziția. Din nou, lasă-mă să-ți spun totul când voi adăuga un articol, tot la fel nu știi cum acest sistem acum arată și funcționează, și corectați-mă înainte de a vedea rezultatul este inutil. Atunci jurați cât vreți, nu mă deranjează.







Articole similare

Trimiteți-le prietenilor: