Przejdź do głównej zawartości

Gimbal do kamery sterowany ruchem głowy

🟢 Start — zero wiedzy, proste słowa. 🟡 W praktyce — budujesz, konkrety i kompromisy. 🔴 Zaawansowany — fizyka i matematyka. ⚫ Mistrz — rozwijasz dalej.

Obracasz głową, a kamera na biurku obraca się razem z Tobą. Ten projekt nie wymaga drona — wykorzystuje sprzęt, który już masz, jeśli latasz FPV (gogle, aparatura, odbiornik ELRS), plus jedną małą otwartoźródłową płytkę i dwa tanie serwa. To najlepszy pierwszy projekt na tej stronie, bo ćwiczy dokładnie te same trzy warstwy, których używa prawdziwy quad — czujniki, łącze radiowe i aktuację — w układzie, który debugujesz siedząc przy biurku, zamiast gonić po polu.

Co budujesz

Dwa wolne kanały aparatury niosą orientację głowy zamiast wychyleń drążków. Wszystko za aparaturą — łącze ELRS, odbiornik, wyjście PWM — jest identyczne z tym, co już lata w Twoim dronie.

🟢 Start — pomysł prostymi słowami

Żyroskop na goglach mierzy, jak obraca się Twoja głowa; mała płytka zamienia to na dwie liczby (kąt pan, kąt tilt) i podaje je aparaturze tak, jakby były dwoma dodatkowymi kanałami drążków. Aparatura wysyła je tym samym łączem 2,4 GHz, którego już używa do drona (Moduł 1 — Łącza radiowe i komunikacyjne), odbiornik na biurkowym riggu je odbiera, a dwa serwa fizycznie kierują kamerę tam, gdzie patrzy Twoja głowa. Żadnego nowego systemu bezprzewodowego, żadnego nowego protokołu do nauki — wykorzystujesz łącze sterujące, które już masz.

🟡 W praktyce — części i budowa

CzęśćWybór (przykład)Uwagi
Płytka head trackera(open source: HeadTracker) — działa na płytkach klasy Arduino Nano 33 BLEWyjście PPM, SBUS lub CRSF; łączy się z aparaturą przewodem (port trenera) lub Bluetooth na wspieranych aparaturach EdgeTX
MocowanieKlips drukowany 3D lub na rzep na pasku gogliTrzymaj blisko środka obrotu głowy, by zminimalizować paralaksę
AparaturaDowolna EdgeTX z wolnym wejściem trenera/CRSFZmiksuj dwa kanały head trackera na wolne kanały AUX
OdbiornikDowolny zapasowy ELRS RX z 2 wolnymi wyjściami PWMTen sam typ, którego już używasz w quadzie
Serwa2× mikroserwa klasy SG90 (pan + tilt)Tania, drukowana wsporniki pan-tilt trzyma je pod kątem 90° do siebie
ZasilanieBEC 5 V lub mały zasilacz stabilizowanySerwa pod obciążeniem są prądożerne — nie zasilaj ich z portu USB
ŁadunekKlips na telefon, wskaźnik laserowy albo prawdziwa kamera FPVZacznij od wskaźnika laserowego na ścianie — błędy widać od razu i za darmo

Kolejność budowy:

  1. Wgraj firmware head trackera na płytkę i ustaw protokół wyjścia (zacznij od PPM — najprościej zweryfikować testerem serw, zanim zaangażujesz aparaturę).
  2. Podłącz płytkę do portu trenera aparatury (albo sparuj przez Bluetooth, jeśli Twoja aparatura to wspiera) i potwierdź, że dwa kanały poruszają się w monitorze kanałów aparatury, gdy kręcisz głową.
  3. Zmiksuj te kanały na dwa wolne kanały AUX w ustawieniach modelu.
  4. Zbinduj odbiornik ELRS, podłącz jego dwa wyjścia PWM do serw pan i tilt, zasil rig z zasilacza warsztatowego — jeszcze bez kamery.
  5. Wytrymuj oba serwa do pozycji środkowej, zanim jeszcze cokolwiek udźwigną, potem zamontuj ładunek i przetestuj pełny zakres ruchu powoli, obserwując, czy nic mechanicznie się nie blokuje.
Ponowne użycie kanałów aparatury

Jeśli miksujesz kanały head trackera na profilu modelu, którego używasz też do latania, sprawdź dokładnie, czy te kanały AUX nie są już przypisane do uzbrojenia, trybów lotu albo failsafe w tym modelu. Daj temu riggowi własny, dedykowany profil modelu w aparaturze, żeby wykluczyć jakiekolwiek ryzyko skrzyżowania przełącznika uzbrojenia drona z miksem serwa.

🔴 Zaawansowany — matematyka

Estymacja orientacji. Head tracker rozwiązuje ten sam problem estymacji co Moduł 3 — Sensory i estymacja stanu: żyroskop całkowany w czasie dryfuje, akcelerometr jest zaszumiony, ale nie dryfuje, a filtr komplementarny miesza oba źródła:

θ^k=α(θ^k1+ωkΔt)+(1α)θacc,k\hat\theta_k = \alpha\left(\hat\theta_{k-1} + \omega_k\,\Delta t\right) + (1-\alpha)\,\theta_{\text{acc},k}

W head trackingu przechył (roll) zwykle jest ignorowany (podczas latania głową się mocno nie przechylasz), a odchylenie i pochylenie (yaw/pitch) sterują dwoma serwami.

Kąt na impuls serwa. Pozycję serwa hobbystycznego ustawia szerokość impulsu, nie napięcie ani wypełnienie PWM: 1000 µs to jeden kraniec ruchu, 2000 µs drugi, 1500 µs środek. Mapowanie kąta θ\theta z zakresu użytkowego serwa [θlo,θhi][\theta_\text{lo}, \theta_\text{hi}] na impuls w mikrosekundach:

impuls(θ)=1000+1000×θθloθhiθlo\text{impuls}(\theta) = 1000 + 1000 \times \frac{\theta - \theta_\text{lo}}{\theta_\text{hi} - \theta_\text{lo}}

Wygładzanie. Surowy ruch głowy jest szarpany; podanie go wprost na serwo daje nieprzyjemny, drgający obraz. Rozwiązaniem jest ten sam jednoliniowy filtr wykładniczy z Modułu 9 — Tuning i analiza testów w locie, zastosowany do zadanej pozycji serwa zamiast do szumu żyroskopu:

yk=yk1+α(xkyk1)y_k = y_{k-1} + \alpha\,(x_k - y_{k-1})

Małe α\alpha (≈0,1–0,2) zamienia responsywność na płynność — dokładnie ten sam kompromis co filtr dolnoprzepustowy na żyroskopie, tylko działający o rzędy wielkości wolniej.

Budżet opóźnienia. Ruch głowy → próbka IMU → filtr → ramka radiowa → łącze ELRS → odbiornik → PWM serwa to krótsza wersja łańcucha drążek-do-silnika z Modułu 0 — Podstawy i orientacja. Każdy krok dokłada kilka milisekund; ospały head tracker to niemal zawsze zbyt mocne wygładzanie (za małe α), nie problem RF — samo łącze ELRS jest zwykle najszybszym ogniwem w całym łańcuchu.

⚫ Mistrz — rozwiń projekt

  • Zamień wskaźnik laserowy na prawdziwą kamerę FPV z VTX na riggu pan-tilt: teraz latasz "head-lookiem" przy biurku, zanim jeszcze zakręci się choć jeden silnik.
  • Dodaj komputer pokładowy z OpenCV, żeby gimbal śledził cel zamiast Twojej głowy — to ta sama architektura co diagram komputera pokładowego z Modułu 11 — Nawigacja i autonomia, tylko z kamerką USB zamiast GNSS zasilającą zadane wartości.
  • Napisz własny firmware zamiast wgrywać HeadTracker: odczytaj 6-osiowe IMU po I2C/SPI, sam policz filtr komplementarny i wygeneruj PPM, bit-bangując przerwanie timera — ta sama pętla "odczytaj czujnik → estymuj → steruj aktuatorem" co w Module 8 — Programowanie kontrolera lotu, tylko z serwem zamiast silnika na końcu.
  • Przenieś cały rig na prawdziwego drona filmowego jako realny, noszony gimbal do kamery — matematyka serw powyżej się nie zmienia, zmienia się tylko środowisko wibracji.

Minimalny mapper serwa, jeśli piszesz własny kod

Jeśli wolisz nie wgrywać cudzego firmware'u, to cała pętla sterowania w C++ w stylu Arduino — odczytaj dwie wartości orientacji, jak tylko podaje je Twoja biblioteka IMU, wygładź je i steruj dwoma serwami:

#include <Servo.h>

Servo panServo, tiltServo;
float emaYaw = 0, emaPitch = 0;
const float alpha = 0.15; // wygładzanie — zob. filtr PT1 z Modułu 9

void setup() {
panServo.attach(9);
tiltServo.attach(10);
}

void loop() {
float yaw, pitch;
readOrientation(yaw, pitch); // Twoje IMU + filtr komplementarny (Moduł 3)

emaYaw += alpha * (yaw - emaYaw);
emaPitch += alpha * (pitch - emaPitch);

panServo.write(mapAngle(emaYaw, -90, 90));
tiltServo.write(mapAngle(emaPitch, -45, 45));
}

int mapAngle(float angle, float lo, float hi) {
angle = constrain(angle, lo, hi);
return (int)((angle - lo) / (hi - lo) * 180.0);
}

Servo::write() przyjmuje stopnie i wewnętrznie obsługuje matematykę impulsu w mikrosekundach pokazaną wyżej — warto raz przeczytać ją w źródłach biblioteki, żeby ta abstrakcja przestała być magią.

Powiązane materiały: Moduł 1 — Łącza radiowe i komunikacyjne, Moduł 3 — Sensory i estymacja stanu, Moduł 8 — Programowanie kontrolera lotu.