Okullar için Robotik ve Mühendislik · anaokulundan liseye

1. ünite / 10

Multirotor nasıl uçar: kuvvetler, gövde ve karıştırıcı

ParçaSimülasyonYazılım

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.
askıda: 4 T = m g  →  T = m g / 4

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

C++: Quad X karıştırıcı, doyum yönetimiyle
// 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. 1,5 kg'lık bir quadrotor askıda duruyor. Motor başına itki yaklaşık kaç gram-kuvvet?

  2. PX4 Quad X'te drone'u yukarıdan bakınca saat yönünde çevirmek (yaw +) için hangi motorlar hızlanır?

  3. Quadrotor neden eksik eyleyicili (underactuated) sayılır?

  4. Sağa yatmak (roll +) için hangi motorlar hızlanır?

Bu ünitenin parçaları

3B modelli gerçek Hyvex parçaları:

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç