- 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の方が安定して使えそう?だった。
- INAV Configuratorをインストールする
- INAVを起動して、フライトコントローラを接続する
- 「ファームフラッシャー」をクリックして、以下の設定でファームウェアを書き込む
- ターゲット:MATEKF405SE
- バージョン:8.0.1
- 「接続」をクリックする
- フライトコントローラの姿勢情報が表示される
2. テレメトリの取得(動画)
以下の設定を行うことで、UART2からLTMというフォーマットでテレメトリが出力される。
- INAVのメニューから「ポート」を開く
- 「UART2」を以下の通りに設定する
- テレメトリ出力:LTM、9600
- 「保存して再起動」をクリックする
LTMをパースできる以下のプログラムを利用した。
OLEDディスプレイは使用しないので、コードから削除する。
roll
とpitch
のデータ型が異なっているため、変数の型を変更して、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. サーボモータの制御(動画)
以下の設定を行う。
- INAVのメニューから「ミキサー」を開く
- 「プラットフォーム設定」のプラットフォームタイプを「Airplane」にする
- 「サーボミキサー」のサーボ1の入力を「Stabilized Yaw」にする
- 「保存して再起動」をクリックする
- メニューから「出力」を開く
- 「モーターとサーボ出力を有効」を有効にする
- 「保存して再起動」をクリックする
- メニューから「ポート」を開く
- UART2のシリアル受信を有効にする
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- | - | - | 電源- |
- INAVのメニューから「受信機」を開く
- Arduinoからの入力に応じて、Yawの値が変化することが確認できる
- Yawの値の変化に対応して、サーボモータが動作することが確認できる
LTMとS.BUSはいずれも一方向のみの通信しかできない。
双方向の通信にはINAVの場合、MSPというプロトコルを使用するらしい。
INAVのポート設定でMSPを有効にして実験してみたが、今のところうまくいってない。
旧100kinSATでは以下のGPSセンサを使用している。
このGPSセンサの出力フォーマットは「NMEA」である。
以下の議論によると、INAVではバージョン7以降でNMEAに対応しなくなったらしい。
INAVにGPSセンサを接続するには「UBX」というプロトコルに対応したGPSセンサを使用する必要がある。
U-bloxという会社の製品が上記のフォーマットで出力するGPSセンサを販売しているっぽい。
NMEAはテキストデータで、UBXはバイナリデータという違いがある。
- 6.1をダウンロード
- フライトコントローラ用の6.0のファームウェア(A)をダウンロード
- (A)を書き込む
- INAV Configuratorで以下を設定する
- Ports:
- UART3:
- GPS
- 9600
- UART3:
- GPS:
- GPS for navigation and telemetry: Enabled
- Protcol: NMEA
- Ports:
INAVに安定化電源で9Vを供給して、GPSセンサがFIXしているときに、Arduinoからサーボモータを左右に制御するSBUS信号を送っている状態でサーボモータを接続すると、GPSのFIXが途切れる。
供給する電圧を12Vに上げると上記の現象は発生しなかったので、9V電源だと電力が不足しているのかも。