> ## Documentation Index
> Fetch the complete documentation index at: https://docs.t3gemstone.org/llms.txt
> Use this file to discover all available pages before exploring further.

# ArduPilot

> T3 Gemstone kartları için açık kaynaklı otopilot sistemi

export const dev_0 = "Çevre Birimi"

export const path_0 = "Cihaz Yolu"

export const func_0 = "İŞLEV"

export const pins_0 = "PİNLER"

<Frame>
  <img className="rounded-lg" src="https://mintcdn.com/t3gemstone-754bcb96/DqBDlLDn29Knu23Y/images/o1-board/19-typec.png?fit=max&auto=format&n=DqBDlLDn29Knu23Y&q=85&s=6f91b96d5c62f3ec51edf1772c239a57" width="1337" height="884" data-path="images/o1-board/19-typec.png" />
</Frame>

## 1. Genel Bakış

ArduPilot; sabit kanatlı, döner kanatlı, kara araçları ve denizaltılar dahil olmak üzere çeşitli araç türlerini
destekleyen olgun, özellik açısından zengin bir açık kaynaklı otopilot sistemidir.

Bu kılavuz, T3 Gemstone O1 geliştirme kartlarında ArduPilot çalıştırmayı kapsar.

<iframe className="w-full aspect-video rounded-xl" src="https://www.youtube.com/embed/g7lm5u7EQis" title="T3 Gemstone O1 Quadcopter" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen />

## 2. Donanım Özellikleri

### <Icon icon="compass" /> Atalet Ölçüm Birimi (IMU)

* **Model**: InvenSense ICM-20948
* **Arayüz**: SPI

### <Icon icon="magnet" /> Manyetometre (Pusula)

* **Model**: AKM AK09916
* **Arayüz**: Dahili (ICM-20948 üzerinden)
* **Harici I2C Pusula Taraması**: Etkin

### <Icon icon="line-height" /> Barometre

* **Model**: STMicroelectronics LPS22DFTR
* **Arayüz**: SPI

### <Icon icon="network-wired" /> CAN Veri Yolu

* **Transceiver**: TCAN1462-Q1
* **Arayüz**: 1x CAN arayüzü mevcut

### <Icon icon="battery-three-quarters" /> Batarya İzleyici

* **Model**: ADS1115
* **Arayüz**: 0x48 adresinde I2C-MCU0 üzerinden harici olarak bağlanabilir
* **Kanallar**: Voltaj/akım algılama için 4 kanallı 16-bit ADC

### <Icon icon="lightbulb" /> Durum Göstergeleri

* **LED'ler**: Yeşil-kırmızı durum LED'leri
* **Buzzer**: GPIO-26 üzerinden harici olarak bağlanabilir

### <Icon icon="satellite-dish" /> GPS, RC Girişi ve PWM Çıkışları

* **GPS**: UART-MAIN6 üzerinden seri iletişim, I2C-MCU0 üzerinden harici pusula
* **RC Girişi**: UART-MAIN1 üzerinden SBUS iletişimi
* **PWM Çıkışları**: 40-pin GPIO başlığından erişilebilen 7 adet donanımsal PWM kanalı

## 3. Kurulum

ArduPilot, T3 Gemstone APT deposu aracılığıyla bir Debian paketi olarak dağıtılır. Paket, tüm araç türleri için önceden
derlenmiş binary dosyaları ve gerekli yapılandırma dosyalarını içerir.

```bash theme={"system"}
gemstone@t3-gem-o1:~$ sudo apt update
gemstone@t3-gem-o1:~$ sudo apt install t3-gem-ardupilot
```

Kurulum aşağıdaki dizin yapısını oluşturur:

```
/opt/ardupilot/
├── bin/
│   ├── arducopter
│   ├── arduplane
│   ├── ardurover
│   └── ardusub
├── etc/
│   ├── ardupilot.env
│   └── ardupilot.parm
└── var/
    ├── log/
    ├── storage/
    └── terrain/
```

<Note>
  ArduPilot'u kaynaktan derlemeyi tercih ederseniz, derleme talimatları
  [github.com/t3gemstone/ardupilot](https://github.com/t3gemstone/ardupilot/) adresinde mevcuttur
</Note>

### 3.1. Device-tree Overlay'leri

ArduPilot'u çalıştırmadan önce, gerekli çevre birimleri yapılandırmak için çeşitli device-tree overlay'lerini
etkinleştirmelisiniz.

`/boot/uEnv.txt` dosyasını düzenleyin ve aşağıdaki overlay'leri `overlays=` satırına ekleyin:

```
k3-am67a-t3-gem-o1-spidev0-1cs.dtbo
k3-am67a-t3-gem-o1-i2c1-400000.dtbo
k3-am67a-t3-gem-o1-uart-ttys0.dtbo
k3-am67a-t3-gem-o1-uart-ttys6.dtbo
k3-am67a-t3-gem-o1-pwm-ecap0-gpio12.dtbo
k3-am67a-t3-gem-o1-pwm-ecap1-gpio16.dtbo
k3-am67a-t3-gem-o1-pwm-ecap2-gpio18.dtbo
k3-am67a-t3-gem-o1-pwm-epwm0-gpio5-gpio14.dtbo
k3-am67a-t3-gem-o1-pwm-epwm1-gpio6-gpio13.dtbo
```

**Örnek `/boot/uEnv.txt` yapılandırması:**

```
overlays=k3-am67a-t3-gem-o1-spidev0-1cs.dtbo k3-am67a-t3-gem-o1-i2c1-400000.dtbo k3-am67a-t3-gem-o1-uart-ttys0.dtbo k3-am67a-t3-gem-o1-uart-ttys6.dtbo k3-am67a-t3-gem-o1-pwm-ecap0-gpio12.dtbo k3-am67a-t3-gem-o1-pwm-ecap1-gpio16.dtbo k3-am67a-t3-gem-o1-pwm-ecap2-gpio18.dtbo k3-am67a-t3-gem-o1-pwm-epwm0-gpio5-gpio14.dtbo k3-am67a-t3-gem-o1-pwm-epwm1-gpio6-gpio13.dtbo
```

Değişikliklerin etkili olması için kartı yeniden başlatın:

```bash theme={"system"}
gemstone@t3-gem-o1:~$ sudo reboot
```

### 3.2. Systemd Servis Yönetimi

Her ArduPilot araç türünün kendi systemd servisi vardır:

* `arducopter.service` - Çok rotorlu döner kanatlılar
* `arduplane.service` - Sabit kanatlı uçaklar
* `ardurover.service` - Kara araçları
* `ardusub.service` - Su altı araçları

<Warning>
  Birbirleriyle çakıştıkları için aynı anda yalnızca bir araç servisi etkinleştirilebilir.
</Warning>

#### 3.2.1. Araç Başlatma

Araç türünüze göre ArduPilot'u çalıştırmak için ilgili servisi etkinleştirin ve başlatın:

```bash theme={"system"}
# Döner kanatlılar için
gemstone@t3-gem-o1:~$ sudo systemctl enable arducopter.service
gemstone@t3-gem-o1:~$ sudo systemctl start arducopter.service
```

#### 3.2.2. Araç Türlerini Değiştirme

Farklı bir araç türüne geçmek için önce mevcut servisi devre dışı bırakın:

```bash theme={"system"}
# Mevcut aracı devre dışı bırak
gemstone@t3-gem-o1:~$ sudo systemctl disable arducopter.service
gemstone@t3-gem-o1:~$ sudo systemctl stop arducopter.service

# Yeni aracı etkinleştir
gemstone@t3-gem-o1:~$ sudo systemctl enable arduplane.service
gemstone@t3-gem-o1:~$ sudo systemctl start arduplane.service
```

#### 3.2.3. Sistem Yapılandırma Servisi

`ardupilot-sysconfig.service`, GPIO pinlerini ve diğer çevre birimleri yapılandırarak kartı ArduPilot çalıştırmaya
hazırlayan tek seferlik bir servistir. Bu servis herhangi bir araç servisi etkinleştirildiğinde otomatik olarak çalışır
ve manuel müdahale gerektirmez.

#### 3.2.4. Servis Durumunu Kontrol Etme

ArduPilot servis durumunu ve günlüklerini izleyin:

```bash theme={"system"}
# Servis durumunu kontrol et
gemstone@t3-gem-o1:~$ sudo systemctl status arducopter.service

# Gerçek zamanlı günlükleri görüntüle
gemstone@t3-gem-o1:~$ sudo journalctl -u arducopter.service -f

# Son günlükleri görüntüle
gemstone@t3-gem-o1:~$ sudo journalctl -u arducopter.service -r
```

## 4. Yapılandırma

<Note>
  Yapılandırma dosyalarını değiştirdikten sonra, değişikliklerin etkili olması için ArduPilot servisini yeniden başlatın:

  ```bash theme={"system"}
  gemstone@t3-gem-o1:~$ sudo systemctl restart arducopter.service
  ```
</Note>

### 4.1. ArduPilot Başlangıç Ayarları

`/opt/ardupilot/etc/ardupilot.env` dosyası, seri port yapılandırması, dizin yolları ve performans seçenekleri dahil
olmak üzere ArduPilot için
[komut satırı argümanlarını](https://ardupilot.org/dev/docs/ardupilot-on-linux-starting.html) tanımlar.

**Seri Port Yapılandırması:**

```bash theme={"system"}
# USB Gadget Ethernet - MAVLink2 (Varsayılan)
SERIAL0=--serial0 udp:192.168.7.255:14550:bcast

# Telemetry UART 57600 Baud, MAVLink 1
SERIAL1=--serial1 /dev/ttyS0

# GPS UART 230400 Baud
SERIAL3=--serial3 /dev/ttyS6

# SBUS RC Girişi UART 100000 Baud
SERIAL5=--serial5 /dev/ttyS3
```

Gerektiğinde ek seri portları yorum satırından çıkarabilir ve yapılandırabilirsiniz. Seri portlar hakkında ek bilgiler
[ArduPilot'un dokümanında](https://ardupilot.org/copter/docs/common-serial-options.html) bulunabilir.

**Dizin Yolları (İsteğe Bağlı):**

```bash theme={"system"}
LOG_DIRECTORY=--log-directory /opt/ardupilot/var/log
TERRAIN_DIRECTORY=--terrain-directory /opt/ardupilot/var/terrain
STORAGE_DIRECTORY=--storage-directory /opt/ardupilot/var/storage
MODULE_DIRECTORY=--module-directory /usr/lib/ardupilot/modules
```

### 4.2. ArduPilot Parametreleri

`/opt/ardupilot/etc/ardupilot.parm` dosyası başlangıçta yüklenen varsayılan parametreleri tanımlar.

```
# SERIAL5'i SBUS RC girişi olarak ayarla
SERIAL5_PROTOCOL,23
SERIAL5_BAUD,100
```

Ek parametreler [ArduPilot'un dokümanını](https://ardupilot.org/copter/docs/parameters.html) takip ederek eklenebilir.

### 4.3. Gerçek Zamanlı Performans için CPU İzolasyonu

Linux, CPU çekirdeklerini kernel işlem zamanlayıcısından izole etmeyi destekler. Bu, ArduPilot'un gerçek zamanlı
olmayan işlemlerden etkilenmeden kendine adanmış çekirdeklerde çalışmasına izin vererek gecikme ve jitter karakteristiklerini
iyileştirir.

ArduPilot için 2 ve 3 numaralı çekirdekleri izole etmek için:

1. **Kernel önyükleme parametrelerini düzenleyin**

   `/boot/uEnv.txt` dosyasını açın ve kernel argümanlarına `isolcpus=2,3` ekleyin:

   ```
   args_mmc=setenv bootargs isolcpus=2,3 console=${console} ...
   ```

2. **CPU atamasını yapılandırın**

   `/opt/ardupilot/etc/ardupilot.env` dosyasını düzenleyin ve CPU\_AFFINITY satırını yorum satırından çıkarın:

   ```bash theme={"system"}
   CPU_AFFINITY=--cpu-affinity 2,3
   ```

3. **Kartı yeniden başlatın**

   ```bash theme={"system"}
   gemstone@t3-gem-o1:~$ sudo reboot
   ```

Yeniden başlatma sonrasında ArduPilot yalnızca 2 ve 3 numaralı çekirdeklerde çalışırken, sistem işlemleri 0 ve 1
numaralı çekirdekleri kullanır.

## 5. Kullanım

### 5.1. Kart Yönlendirmesi

Kartı aracınıza **GemStone logosu aracın önüne bakacak şekilde** monte edin. Bu, uygun sensör yönlendirmesi ve
koordinat sistemi hizalamasını sağlar.

### 5.2. Durum LED'leri

CSI/DSI portlarının yakınında bulunan yeşil-kırmızı durum LED'leri uçuş kontrolcüsünün mevcut durumunu gösterir.
Ayrıntılı LED desenleri ve anlamları için
[ArduPilot'un dokümanına](https://ardupilot.org/copter/docs/common-leds-pixhawk.html#boards-with-1-or-2-notify-leds) bakınız.

### 5.3. Uçuş Kayıtları

ArduPilot, uçuş kayıtlarını `/opt/ardupilot/var/log/` dizininde binary BIN formatında saklar.
Kayıtlar otomatik olarak döndürülür ve `LASTLOG.TXT` en son kaydın numarasını gösterir.

Bu kayıtlar [UAV Log Viewer](https://plot.ardupilot.org/) kullanılarak analiz edilebilir.

### 5.4. Çevre Birimler

40-pin GPIO başlığı çevre birimlere, PWM çıkışlarına ve iletişim arayüzlerine erişim sağlar.

#### 5.4.1. GPIO Pinout

Aşağıdaki tablo, device-tree overlay'leri uygulandıktan sonra GPIO başlığındaki her pinin işlevini gösterir. Tablo,
kartın GemStone logosunu dik görebileceğiniz şekilde yönlendirildiğini varsayar.

|                        {func_0} |    {pins_0}   |   {pins_0}   | {func_0}                      |
| ------------------------------: | :-----------: | :----------: | :---------------------------- |
|                       3v3 Power | **3v3 Power** | **5v Power** | 5v Power                      |
| I2C-MCU0 SDA **(GPS, ADS1115)** |   **GPIO-2**  | **5v Power** | 5v Power                      |
| I2C-MCU0 SCL **(GPS, ADS1115)** |   **GPIO-3**  |    **GND**   | GND                           |
|         UART-MAIN6 RX **(GPS)** |   **GPIO-4**  |  **GPIO-14** | PWM-0B **(RCOut-2)**          |
|                             GND |    **GND**    |  **GPIO-15** | UART-MAIN1 RX **(RCIn SBUS)** |
|         UART-MAIN6 TX **(GPS)** |  **GPIO-17**  |  **GPIO-18** | PWM-ECAP2 **(RCOut-7)**       |
|                                 |  **GPIO-27**  |    **GND**   | GND                           |
|                                 |  **GPIO-22**  |  **GPIO-23** |                               |
|                       3v3 Power | **3v3 Power** |  **GPIO-24** | UART-WKUP0 TX **(Telemetry)** |
|                   SPI-MCU0 MOSI |  **GPIO-10**  |    **GND**   | GND                           |
|                   SPI-MCU0 MISO |   **GPIO-9**  |  **GPIO-25** |                               |
|                   SPI-MCU0 SCLK |  **GPIO-11**  |  **GPIO-8**  | SPI-MCU0 CS0                  |
|                             GND |    **GND**    |  **GPIO-7**  | UART-WKUP0 RX **(Telemetry)** |
|        I2C-WKUP0 SDA (Reserved) |   **GPIO-0**  |  **GPIO-1**  | I2C-WKUP0 SCL (Reserved)      |
|            PWM-0A **(RCOut-1)** |   **GPIO-5**  |    **GND**   | GND                           |
|            PWM-1A **(RCOut-3)** |   **GPIO-6**  |  **GPIO-12** | PWM-ECAP0 **(RCOut-5)**       |
|            PWM-1B **(RCOut-4)** |  **GPIO-13**  |    **GND**   | GND                           |
|                                 |  **GPIO-19**  |  **GPIO-16** | PWM-ECAP1 **(RCOut-6)**       |
|                      **Buzzer** |  **GPIO-26**  |  **GPIO-20** |                               |
|                             GND |    **GND**    |  **GPIO-21** |                               |

#### 5.4.2. Cihaz Yolları

Her çevre birimi için Linux cihaz yolları:

| {dev_0}          | {path_0}                       |
| ---------------- | ------------------------------ |
| **UART-WKUP0**   | `/dev/ttyS0`                   |
| **UART-MAIN1**   | `/dev/ttyS3`                   |
| **UART-MAIN6**   | `/dev/ttyS6`                   |
|                  |                                |
| **I2C-MCU0**     | `/dev/i2c-1`                   |
|                  |                                |
| **SPI-MCU0 CS0** | `/dev/spidev0.0`               |
|                  |                                |
| **PWM-0A**       | `/sys/class/pwm/pwmchip3/pwm0` |
| **PWM-0B**       | `/sys/class/pwm/pwmchip3/pwm1` |
| **PWM-1A**       | `/sys/class/pwm/pwmchip5/pwm0` |
| **PWM-1B**       | `/sys/class/pwm/pwmchip5/pwm1` |
| **PWM-ECAP0**    | `/sys/class/pwm/pwmchip0/pwm0` |
| **PWM-ECAP1**    | `/sys/class/pwm/pwmchip1/pwm0` |
| **PWM-ECAP2**    | `/sys/class/pwm/pwmchip2/pwm0` |

#### 5.4.3. RC Girişi

Kart, **UART-MAIN1 RX (GPIO-15)** pini üzerinden SBUS protokolü aracılığıyla RC girişini destekler. SBUS, RC alıcınız
ile uçuş kontrolcüsü arasında güvenilir iletişim sağlayan yaygın olarak kullanılan dijital bir RC protokolüdür.

##### 5.4.3.1. Sinyal Tersleme Gereksinimi

SBUS protokolü ters çevrilmiş bir seri sinyal kullanır, bu da SBUS alıcınız ile UART-MAIN1 RX pini arasında **harici bir
sinyal tersleyici devresi** kullanmanız gerektiği anlamına gelir. Bu tersleyici olmadan, kart SBUS verisini doğru
şekilde okuyamayacaktır.

Sinyal tersleyici devresini oluşturmak için şunlara ihtiyacınız olacak:

* 1x NPN transistör (örn. S9014 TO-92 paket)
* 1x 10kΩ direnç
* 1x 1kΩ direnç

<Frame caption="Sinyal Tersleyici Devresi">
  <img src="https://mintcdn.com/t3gemstone-754bcb96/Y2UaL3KKp20ilk81/images/ardupilot-signal-inverter.png?fit=max&auto=format&n=Y2UaL3KKp20ilk81&q=85&s=21b89c1b72d6355697526fc1d11d7fca" width="345" height="295" data-path="images/ardupilot-signal-inverter.png" />
</Frame>

**Bağlantı Detayları:**

* SBUS alıcı çıkışı, 1kΩ direnç üzerinden transistör base'ine bağlanır
* Transistör kollektörü, UART-MAIN1 RX pinine (GPIO-15) bağlanır
* 10kΩ pull-up direnci, kollektör ile 3v3 VCC arasına bağlanır
* Transistör emitörü, GND'ye bağlanır

### 5.5. QGroundControl Bağlantısı

QGroundControl (QGC), ArduPilot için önerilen yer kontrol istasyonudur. UDP veya seri telemetri üzerinden
bağlanabilirsiniz.

#### 5.5.1. USB-Ethernet Bağlantısı (Varsayılan)

Gemstone kartını USB Type-C kablosu ile bilgisayarınıza bağlayın. Kart, otomatik IP yapılandırmasıyla USB üzerinden
Ethernet sağlamak için USB Gadget API kullanır:

* **Kart IP'si**: `192.168.7.2`
* **PC IP'si**: DHCP üzerinden atanır (genellikle `192.168.7.59`)
* **MAVLink Portu**: `192.168.7.255:14550` adresinde UDP yayını

QGC, UDP otomatik bağlantı etkinse (varsayılan ayar) araca otomatik olarak algılayacak ve bağlanacaktır.

#### 5.5.2. Seri Telemetri Bağlantısı

Radyo modülleri kullanarak kablosuz telemetri için:

1. **Telemetri radyosunu Gemstone kartına bağlayın**
   * Telemetri modülünü kartta yer alan UART-WKUP0 pinlerine bağlayın

2. **Telemetri radyosunu bilgisayara bağlayın**
   * İkinci radyo modülünü USB-to-TTL yardımıyla bilgisayarınıza takın
   * Oluşturulan TTY cihazını not edin (örn. `/dev/ttyUSB0`)

3. **QGroundControl'ü yapılandırın**
   * **Application Settings → Comm Links** açın
   * **Add** düğmesine tıklayın
   * Doğru seri portu ve **57600** baud hızını seçin
   * Yapılandırmayı kaydedin ve **Connect** butonuna tıklayın

MAVLink mesajları artık gelmeli ve QGC'de aracın durumunu görmelisiniz.

## 6. Sorun Giderme

### 6.1. ArduPilot Servisi Başlamıyor

Servis durumunu ve günlüklerini kontrol edin:

```bash theme={"system"}
gemstone@t3-gem-o1:~$ sudo systemctl status arducopter.service
gemstone@t3-gem-o1:~$ sudo journalctl -u arducopter.service -r
```

### 6.2. MAVLink Bağlantısı Yok

Bilgisayardan ağ yapılandırmasını doğrulayın:

```bash theme={"system"}
ubuntu@host:~$ ping 192.168.7.2
```

Gemstone kartından ArduPilot'un çalıştığını ve yayın yaptığını kontrol edin:

```bash theme={"system"}
gemstone@t3-gem-o1:~$ sudo netstat -u -n | grep 14550
```

Uygulama Ayarlarında QGC UDP otomatik bağlantının etkin olduğundan emin olun.

### 6.3. GPS Algılanmıyor

GPS, UART-MAIN6'ya (GPIO-4 ve GPIO-17) ve I2C-MCU0'a (GPIO-2 ve GPIO-3 pinleri) bağlı olmalıdır.
GPIO başlık pinlerinde GPS bağlantısını kontrol edin ve yapılandırmayı doğrulayın:

```bash theme={"system"}
gemstone@t3-gem-o1:~$ cat /opt/ardupilot/etc/ardupilot.env | grep SERIAL3
```

### 6.4. PWM Çıkışları veya Seri Portlar Çalışmıyor

Device-tree overlay'lerinin yüklendiğini doğrulayın:

```bash theme={"system"}
gemstone@t3-gem-o1:~$ ls /proc/device-tree/chosen/overlays
```

[Device-tree Overlay'leri](#device-tree-overlayleri) bölümünde listelenen isimleri görmelisiniz.
Eksik varsa, `/boot/uEnv.txt` yapılandırmasını kontrol edin ve kartı yeniden başlatın.
