Skip to content

Instantly share code, notes, and snippets.

@ymt117
Last active June 14, 2025 12:50
Show Gist options
  • Save ymt117/e1070eaa9a9108e04ad8006e57e98795 to your computer and use it in GitHub Desktop.
Save ymt117/e1070eaa9a9108e04ad8006e57e98795 to your computer and use it in GitHub Desktop.
フライトコントローラの使い方(INAV Configurator)

フライトコントローラの使い方

環境

  • Mac Mini Apple M4 (Sequoia 15.4.1)
  • INAV Configurator 8.0.1 (for Mac M series)
  • Arduino IDE 2.3.6

「“INAV Configurator”は壊れているため開けません。 ゴミ箱に入れる必要があります。」がでるとき

xattr -cr /Applications/INAV\ Configurator.app/

機材

INAV Configuratorは、フライトコントローラの設定を行うことができるツール。

Ardupilotと同じようなやつ。MacだとINAVの方が安定して使えそう?だった。

1. ファームウェアの書き込み

  1. INAV Configuratorをインストールする
  2. INAVを起動して、フライトコントローラを接続する
  3. 「ファームフラッシャー」をクリックして、以下の設定でファームウェアを書き込む
    • ターゲット:MATEKF405SE
    • バージョン:8.0.1
  4. 「接続」をクリックする
  5. フライトコントローラの姿勢情報が表示される

2. テレメトリの取得(動画

フライトコントローラの設定

以下の設定を行うことで、UART2からLTMというフォーマットでテレメトリが出力される。

  1. INAVのメニューから「ポート」を開く
  2. 「UART2」を以下の通りに設定する
    • テレメトリ出力:LTM、9600
  3. 「保存して再起動」をクリックする

Arduinoのプログラム

LTMをパースできる以下のプログラムを利用した。

OLEDディスプレイは使用しないので、コードから削除する。

rollpitchのデータ型が異なっているため、変数の型を変更して、readInt16関数を追加する。

typedef struct remoteData_s {
  int16_t pitch;
  int16_t roll;
  int heading;
  // ...
} remoteData_t;

int16_t readInt16(uint8_t offset) {
  return (int16_t) serialBuffer[offset] + ((int16_t) serialBuffer[offset + 1] << 8);
}

XIAO ESP32C3のハードウェアシリアルを使用するように修正する。

#include <HardwareSerial.h>

HardwareSerial ltmSerial(0);

Arduinoのプログラム全体↓

3. サーボモータの制御(動画

フライトコントローラの設定

以下の設定を行う。

  1. INAVのメニューから「ミキサー」を開く
    1. 「プラットフォーム設定」のプラットフォームタイプを「Airplane」にする
    2. 「サーボミキサー」のサーボ1の入力を「Stabilized Yaw」にする
    3. 「保存して再起動」をクリックする
  2. メニューから「出力」を開く
    1. 「モーターとサーボ出力を有効」を有効にする
    2. 「保存して再起動」をクリックする
  3. メニューから「ポート」を開く
    1. UART2のシリアル受信を有効にする

Arduinoのプログラム

S.BUSというプロトコルを使用する。 S.BUSは一本の信号線で複数のチャンネル(コントローラの各ボタンのこと?)の値を送信できるプロトコルらしい。

Arduinoのライブラリは以下を使用した。

Arduinoのプログラム↓

接続

MATEKSYS F405-WING V2 XIAO ESP32C3 サーボ MG995 安定化電源(9V出力)
Rx2 D6 (TX, GPIO21) - -
GND GND GND(茶) -
Vx - 電源(赤) -
S3 - 信号線(黄) -
BAT+ - - 電源+
BAT- - - 電源-

動作確認

  1. INAVのメニューから「受信機」を開く
  2. Arduinoからの入力に応じて、Yawの値が変化することが確認できる
  3. Yawの値の変化に対応して、サーボモータが動作することが確認できる

[WIP] 4. 高度な制御

LTMとS.BUSはいずれも一方向のみの通信しかできない。

双方向の通信にはINAVの場合、MSPというプロトコルを使用するらしい。

INAVのポート設定でMSPを有効にして実験してみたが、今のところうまくいってない。

GPSセンサの接続

旧100kinSATでは以下のGPSセンサを使用している。

このGPSセンサの出力フォーマットは「NMEA」である。

以下の議論によると、INAVではバージョン7以降でNMEAに対応しなくなったらしい。

INAVにGPSセンサを接続するには「UBX」というプロトコルに対応したGPSセンサを使用する必要がある。

U-bloxという会社の製品が上記のフォーマットで出力するGPSセンサを販売しているっぽい。

NMEAはテキストデータで、UBXはバイナリデータという違いがある。

バージョン6でNMEAのGPSセンサを試す

  1. 6.1をダウンロード
  2. フライトコントローラ用の6.0のファームウェア(A)をダウンロード
  3. (A)を書き込む
  4. INAV Configuratorで以下を設定する
    • Ports:
      • UART3:
        • GPS
        • 9600
    • GPS:
      • GPS for navigation and telemetry: Enabled
      • Protcol: NMEA

INAVに安定化電源で9Vを供給して、GPSセンサがFIXしているときに、Arduinoからサーボモータを左右に制御するSBUS信号を送っている状態でサーボモータを接続すると、GPSのFIXが途切れる。

供給する電圧を12Vに上げると上記の現象は発生しなかったので、9V電源だと電力が不足しているのかも。

TODO: GPSを使った誘導をどうするか

TODO: 自作のミキサーをロードできるか

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment