Bu, konunun uzun ve teknik rehberi (ESP-IDF, MicroPython, rclcpp gibi alternatiflerle). Adım adım yol için Porti görevlerine dön.
Dal · Dal · istediğin zaman · 5–15 saat
Uçan kardeş
ArduPilot SITL ile aynı kavramlar üç boyutta
Denge robotunda öğrendiğin cascade kontrol, IMU füzyonu ve durum makinesi bir multikopterin kalbi. Bu dal donanım almadan, ArduPilot'un yazılım içi simülasyonunda bu kavramları tanımanı sağlıyor. Uçan donanım almak ayrı ve pahalı bir karar; önce burada dene.
Günün sonunda elinde
- ArduPilot SITL çalışıyor; MAVProxy ile kalkış ve iniş
- pymavlink ile kare çizen görev betiği
- ArduCopter'ın cascade PID yapısını 4. haftadaki dengeyle eşleştiren bir not
D.1
SITL'de uç
Simüle kopter kalkıp iniyor; roll hız döngüsünün PID parametrelerini bulup ne yaptıklarını açıklayabiliyorsun.
Yap
Kod
sitl.sh
# ArduPilot SITL: donanımsız uçuş kontrolcüsü
git clone --recurse-submodules https://github.com/ArduPilot/ardupilot.git
cd ardupilot && Tools/environment_install/install-prereqs-ubuntu.sh -y && . ~/.profile
sim_vehicle.py -v ArduCopter --console --map -w # ilk çalıştırma derler
# MAVProxy konsolunda:
# mode guided
# arm throttle
# takeoff 10
# param show ATC_RAT_RLL_* ← roll hız döngüsünün PID'i: 1. haftadakiyle aynı yapı
Kanıt: Varsayılan ve bozulmuş P ile roll yanıtı grafiği.
Daha derin
D.2
Görevi koddan ver
pymavlink betiğin kopteri kaldırıp 10 m'lik kare çizdiriyor ve indiriyor.
Yap
Kod
mission.py
#!/usr/bin/env python3
"""mission.py — pymavlink ile kalk, kare çiz, in. pip install pymavlink"""
import time
from pymavlink import mavutil
m = mavutil.mavlink_connection("udp:127.0.0.1:14550")
m.wait_heartbeat()
print("bağlandı, sistem", m.target_system)
def mode(name):
m.set_mode(m.mode_mapping()[name])
def goto_local(n, e, d):
m.mav.set_position_target_local_ned_send(
0, m.target_system, m.target_component, mavutil.mavlink.MAV_FRAME_LOCAL_NED,
0b110111111000, n, e, d, 0, 0, 0, 0, 0, 0, 0, 0)
mode("GUIDED")
m.arducopter_arm()
m.motors_armed_wait()
m.mav.command_long_send(m.target_system, m.target_component,
mavutil.mavlink.MAV_CMD_NAV_TAKEOFF, 0, 0, 0, 0, 0, 0, 0, 10)
time.sleep(10)
for n, e in [(10, 0), (10, 10), (0, 10), (0, 0)]:
goto_local(n, e, -10)
time.sleep(8)
mode("LAND")Kanıt: Haritada çizilen kare ekran kaydı.
Kavramlar
MAVLinkUçuş kontrolcüsü ile yer istasyonu arasındaki mesaj protokolü.
Cascade kontrolKonum → hız → açı → açısal hız. Denge robotundaki yapının aynısı, üç eksende.
EKF3ArduPilot'un IMU, GPS, barometre ve pusulayı birleştiren durum tahmincisi.