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 BLE | Wyjście PPM, SBUS lub CRSF; łączy się z aparaturą przewodem (port trenera) lub Bluetooth na wspieranych aparaturach EdgeTX |
| Mocowanie | Klips drukowany 3D lub na rzep na pasku gogli | Trzymaj blisko środka obrotu głowy, by zminimalizować paralaksę |
| Aparatura | Dowolna EdgeTX z wolnym wejściem trenera/CRSF | Zmiksuj dwa kanały head trackera na wolne kanały AUX |
| Odbiornik | Dowolny zapasowy ELRS RX z 2 wolnymi wyjściami PWM | Ten sam typ, którego już używasz w quadzie |
| Serwa | 2× mikroserwa klasy SG90 (pan + tilt) | Tania, drukowana wsporniki pan-tilt trzyma je pod kątem 90° do siebie |
| Zasilanie | BEC 5 V lub mały zasilacz stabilizowany | Serwa pod obciążeniem są prądożerne — nie zasilaj ich z portu USB |
| Ładunek | Klips na telefon, wskaźnik laserowy albo prawdziwa kamera FPV | Zacznij od wskaźnika laserowego na ścianie — błędy widać od razu i za darmo |
Kolejność budowy:
- Wgraj firmware head trackera na płytkę i ustaw protokół wyjścia (zacznij od PPM — najprościej zweryfikować testerem serw, zanim zaangażujesz aparaturę).
- 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ą.
- Zmiksuj te kanały na dwa wolne kanały AUX w ustawieniach modelu.
- Zbinduj odbiornik ELRS, podłącz jego dwa wyjścia PWM do serw pan i tilt, zasil rig z zasilacza warsztatowego — jeszcze bez kamery.
- 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.
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:
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 z zakresu użytkowego serwa na impuls w mikrosekundach:
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:
Małe (≈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.