![見出し画像](https://assets.st-note.com/production/uploads/images/93703121/rectangle_large_type_2_84c95e0ab64fd8af19a45d0a95c0639d.png?width=1200)
ELRSの導入方法 Ardupilot
参考リソース
・Ardupilot ファームウェアが 4.1 以降ということを確認
・受信機をFCのTX/RX(UARTx)に接続する
・使ってるFCのMapping図を見て繋いだ場所はSERIALxなのか確認する。
![](https://assets.st-note.com/img/1671513105002-ZaWjsowURs.png?width=1200)
・config tab -> parameter tree のところで
今回はSERIAL7なので
SERIAL7_PROTOCOL = 23 (RCIN)
RSSI_TYPE = 3 (ReceiverProtocol)
に設定する
そのままだとミスマッチエラーメッセージ出続けるので
それを抑制するために
RC_OPTIONS
のところで
"Suppress CRSF mode/rate message for ELRS systems".
を選択してあげる。
・USBも抜いて電源入れ直して再起動
自動的にELRSを認識する。
・失敗した場合
RC_PROTOCOLS
パラメーター 9番目のビットを 1 (CRSF オプション)?
に設定し、さらに
SERIAL7_BAUDRATE = 115
と設定する。
さらに、
Ardupilotのデフォのフライトモードはチャンネル8だが。
ELRSの場合だと8CHは12CHになる(ハイブリットスイッチモード)
よってCH12を飛行モードとして指示してあげないといけない。
やり方は
FLTMODE_CH=12
とやったげる。
OSDにRSSIリンク品質を表示する方法
RSSI_TYPE = 3 (ReceiverProtocol)
すると、
RSSIとLQを表示できるようになるので
OSDタブで自由に配置するべし。
操作した時に遅延を感じた場合
一部のFCでDMAをサポートする入力ピン(TX_,Rx_とか)を使用する必要がある場合があるのでFCのmapping図を再度チェックする
(DMAとはなんじゃい?)
DMAとは?
DMAは略さずに言うと「Direct Memory Access」です。すなわちペリフェラル(UARTやSPIなどの周辺回路,周辺機器)がCPUを介さずに直接メモリにアクセスすることができます。これによりCPUの負荷に関係なく確実にデータの受け渡しが可能になります
とのこと。
今回使うFCは
MATEKSYS H743-MINIで
(遅延ありでエラーメッセージ"running on non-DMA serial port"出ちゃったので)
ここで確認
一番下のRC INPUTのところに使い方が書いてあります。
Rx6は真のUART接続を必要とするCRSFを除くすべてのプロトコルに対応しています。
SRXL2やFPortなどのテレメトリを含む双方向プロトコルはそのままだとテレメトリなしの通信になります。
SRXL2やFPort、CRSFを可能にするためにRx6ピンを
BRD_ALT_CONFIG を "1"
に設定して
SERIAL7 ポートの RX 入力ピンとし、双方向システムで使用する真の
UART RX ピンとして設定することができます。
この場合、
SERIAL7_PROTOCOLは "23 "
に設定し、PPMはサポートされない。
CRSFの場合、自動的にテレメトリが提供され、
SERIAL7_OPTIONSを "0 "
に設定します。
余談memo
・SBUS/DSM/SRXL の場合、 SERIAL7_OPTIONS を "3 "に設定する
・FPortの場合、SERIAL7_OPTIONSを "7 "に設定。
Telemetryが動作しない場合、SERIAL7_OPTIONS = 135に設定してみる
・SRXL2 の場合、自動的にテレメトリーを提供され、
SERIAL7_OPTIONSを "4 "に設定する
いろいろやってみたがダメだった。
正確には認識して動いたが、遅延が発生。
DMAでの通信ができず。
このFCではダメなのかも。何かこれ以外のところをいじる必要あるのかも。
FUTABAに戻した。。。悲しい