1. ünite / 10
Multirotor nasıl uçar: kuvvetler, gövde ve karıştırıcı
Bu ünitenin sonunda
- Askıdaki bir quadrotorun kuvvet dengesini kurmak
- Dört motorun hızından gaz, yuvarlanma, yunuslama ve sapmanın nasıl çıktığını açıklamak
- X ve H gövdeyi, boyut sınıflarını karşılaştırmak
- Karıştırıcının doyumda neyi feda ettiğini simülasyonda göstermek
Ders notları
Bir quadrotorun dört sabit hatveli pervanesi vardır; her biri yaklaşık T = kf ω² itkisi ve Q = km ω² reaksiyon torku üretir. İkisi saat yönünde (CW), ikisi tersine (CCW) döner: reaksiyon torkları birbirini sıfırlar, drone kendi ekseninde dönmez.
Dört motordan dört komut
- Gaz: dört motor birlikte hızlanır; toplam itki ağırlığı aşarsa drone yükselir.
- Yuvarlanma (roll): sol motorlar sağdakilerden hızlı döner, drone sağa yatar.
- Yunuslama (pitch): öndekiler hızlanınca burun kalkar.
- Sapma (yaw): CCW çift CW çiftten hızlı dönünce net reaksiyon torku gövdeyi saat yönünde çevirir. Toplam itki değişmez.
Drone eksik eyleyicilidir: altı serbestlik derecesine karşı dört giriş. Yana gitmek için önce eğilmesi gerekir; itkinin yatay bileşeni ivmeyi verir. Bu yüzden konum denetimi her zaman yönelim denetiminin üstünden geçer (5–7. üniteler).
Gövde geometrisi
X gövdede motorlar merkeze simetriktir; H gövde daha çok iç hacim verir ama yuvarlanma ve yunuslama eylemsizliği farklıdır. Boyut sınıfı pervaneyle anılır: 5 inç FPV yaklaşık 220 mm, X500 sınıfı 500 mm dingil açıklığındadır. Kol ne kadar uzunsa aynı itki farkı o kadar büyük tork üretir ama gövde o kadar ağır ve esnek olur.
Simülasyon
Quad X motor karıştırıcı
Gaz, yuvarlanma, yunuslama ve sapma komutları dört motora dağıtılır (PX4 Quad X numaralandırması). Bir motor %100'e dayanınca ne olduğuna bak: karıştırıcı önce yönelimi korur, sonra gazı kaydırır, en son sapmadan kısar.
3B sahne yükleniyor…
Simülasyon görevi
Karıştırıcıda gazı 0,5'te tut, yuvarlanmayı +0,3 yap: hangi motorlar hızlandı? Sonra gazı 0,95'e çıkar: karıştırıcı gazı ne kadar kaydırdı? Yuvarlanmayı 0,5, sapmayı 0,3 yap ve sapmanın neden kısıldığını açıkla. Son olarak gazı 0'a indirip airmode'u kapat.
Kod
// PX4 Quad X: M1 sağ ön (CCW), M2 sol arka (CCW), M3 sol ön (CW), M4 sağ arka (CW)
// roll > 0 sağa yatış, pitch > 0 burun yukarı, yaw > 0 yukarıdan saat yönü; çıkış 0..1
#include <algorithm>
#include <array>
constexpr float R[4] = {-1, +1, +1, -1}, P[4] = {+1, -1, +1, -1}, Y[4] = {+1, +1, -1, -1};
std::array<float, 4> mix(float thrust, float roll, float pitch, float yaw) {
std::array<float, 4> rp{}, out{};
float hi = -1e9f, lo = 1e9f;
for (int i = 0; i < 4; ++i) { rp[i] = R[i] * roll + P[i] * pitch; hi = std::max(hi, rp[i]); lo = std::min(lo, rp[i]); }
if (hi - lo > 1.f) { const float k = 1.f / (hi - lo); for (auto& v : rp) v *= k; hi *= k; lo *= k; } // 1) yönelimi ölçekle
if (thrust + hi > 1.f) thrust = 1.f - hi; // 2) gazı aşağı kaydır
else if (thrust + lo < 0.f) thrust = -lo; // ya da yukarı (airmode)
float s = 1.f; // 3) sapmaya kalan pay
for (int i = 0; i < 4; ++i) {
float base = thrust + rp[i], y = Y[i] * yaw;
if (y > 0) s = std::min(s, std::max(0.f, (1.f - base) / y));
if (y < 0) s = std::min(s, std::max(0.f, base / -y));
}
for (int i = 0; i < 4; ++i) out[i] = std::clamp(thrust + rp[i] + s * Y[i] * yaw, 0.f, 1.f);
return out; // DShot değeri: 48 + out × 1999
}Sık yapılan hatalar
- Motor numaralandırmasını ve dönüş yönünü firmware belgesinden kontrol etmemek: PX4 ve Betaflight farklı numaralandırır.
- Pervaneyi ters takmak: drone kalkışta takla atar. Her motorda CW/CCW pervane kontrol edilmeli.
- Sapmanın toplam itkiyi değiştirdiğini sanmak: CW ve CCW çiftleri zıt yönde değişir, toplam sabittir.
- Doyumda tüm komutların korunacağını varsaymak: motor %100'e dayanınca bir şey feda edilir, PX4'te önce sapma.
Yazılım mühendisliği bağlantısı
Karıştırıcı saf bir fonksiyondur: aynı girdi, aynı çıktı. Bu, onu birim testi için ideal yapar.
- Özellik testleri yaz: "doyum yoksa motorların toplamı 4 × gazdır", "çıkış her zaman 0..1 aralığındadır", "yuvarlanma işareti değişince sol ve sağ yer değiştirir".
- Geometriyi koddan ayır: motor konumları ve dönüş yönleri bir tablo (PX4'te CA_ROTOR* parametreleri) olsun, kod tabloyu okusun.
Kendini sına
1,5 kg'lık bir quadrotor askıda duruyor. Motor başına itki yaklaşık kaç gram-kuvvet?
PX4 Quad X'te drone'u yukarıdan bakınca saat yönünde çevirmek (yaw +) için hangi motorlar hızlanır?
Quadrotor neden eksik eyleyicili (underactuated) sayılır?
Sağa yatmak (roll +) için hangi motorlar hızlanır?
Bu ünitenin parçaları
3B modelli gerçek Hyvex parçaları: