Rover製作06 Ardupirotでプロポの初期設定をする

# 環境
この記事は以下の環境で動いています。

| 項目 | 値 |
|:-:|:-:|
| CPU | Core i5-8250U |
| OS | Windows10 |
| MissionPlanner | v1.3.80 |

| 項目 | 値 |
|:-:|:-:|
| Board| Pixhawk(v2.4.8) |
| Ardupilot | Rover V4.2.3 |

# 概要
いわゆる「コントローラー」であるプロポの初期設定をします。

![06_rc.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/47345a85-a4db-6708-08d1-7ad230ecdfa1.jpeg)

# 予備知識

## RC送信機/受信機
ラジコン用の無線コントローラーのことをRC(Radio Controller)といいます。送信機やプロポとも呼ばれます（プロポは和製英語だそうですが）。
色々な製品がありますが、ここではFutabaのT6Kを使用します。

* Futabaのプロポでは空用と車用のシリーズがあります。今回は空用のシリーズを使います。
* 空用シリーズはT6L~32MZの種類があり、数字が大きい方がカスタマイズ機能が多く値段が高くなります。ほとんどの機能はミキサーという複数の軸や出力のカスタマイズ機能で、今回はこのような機能はardupilot側が担うため高級な機種は必要ありません。T6Kは液晶表示器がついている中で一番安い機種です。
* T6Kには以下の3つ仕様があって、それぞれでスロットル軸(右スティック上下)の仕様が以下の表のように異なります。**マルチコプター/ロボット用**を今回は使います。

| 仕様 | センタースプリング | クリック感 |
|:-:|:-:|:-:|
| 飛行機用 | なし | あり |
| ヘリ用 | なし | なし |
| マルチコプター/ロボット用 | あり | なし |

* 通常Futabaのプロポを買うと送信機（プロポ）とセットで受信機がついてきます。T6Kには「R3006SB」が同梱しています。こちらはSBUS2のインターフェイスがついています。

## T6Kの構成
ハードウェアとしては以下を搭載しています。

* 2つの2軸スティック(左右)
* ボリューム1軸
* 3ポジションスイッチx3
* 2ポジションスイッチx1

## T6Kの機能

* フェイルセーフ機能
送信機の電源が切れた時に受信機が出す値の設定をします。初期状態ではTHR軸のみ20%(0~100%のうち)、他は中立となります。このままの設定だと、プロポの電源が切れた瞬間にバックしてしまいます。
* 複合スイッチ（フライトモード）機能
複数のスイッチを使って多ポジションスイッチのようにふるまう機能です。

## Ardupilotのnudge機能の影響
Ardupilotで最終的に使うGUIDEDモードではROSからmavlink経由で速度指令値を送ることが出来ます。しかしArdupilotではGUIDEDモード中にThrottleに設定された軸を動かすと速度を上書きするnudge機能があり、これをOFFにすることが出来ません。
今回はArdupilotのthrottle軸を、操作には使わないボリュームに割り当てることで回避します。

# 前提条件
以下の機器が必要です。

* WindowsPC
    * MissionPlanner導入済み
* Pixhawk
    * ardupilot roverインストール済み
    * MissionPlanerで接続可能
    * 電源供給可能
    * モーターなどの駆動部品は切断しておくこと
* RC送信機(T6K)
    * マルチコプター・ロボット用モデル
* RC受信機(R3006SB)
* サーボケーブル(爪付きの物を推奨)

# 手順

## T6Kのチャンネル設定

* T6Kの電源を入れる
* リバース設定
    * 「+」ボタンを長押しして設定メニューに入る。
    * ジョグキーで「リバース」を選択
    * 2「ELE」と3「THR」だけが「REV」で残りの項目は「NOR」になるように設定する。

        * 左右キーで選択対象を変更をする
        * 上下キーで「NOR」「REV」の選択をする
        * 選択ボタンを押して確定する。
    * ENDボタンを押して戻る。
* アクセサリーチャンネル設定
    * 「+」ボタンを長押しして設定メニューに入る。
    * 「AUX CH」を選択する。
    * 以下のように選択する
        * ジョグキーの上下で項目の選択
        * 「+」「-」ボタンで値の変更
    * ENDボタンを押して戻る。

| 項目 | 値 |
|:-:|:-:|
| CH5 | SwD |
| CH6 | --- |
| CH7 | VR |
| CH8 | SwC |

## T6Kのフェイルセーフ機能の設定

* 「+」ボタンを長押しして設定メニューに入る。
* 「F/S」を選択
* 上下キーで「THR」を選択
* 「+」「-」ボタンで「F/S」を「NOR」に変更
* ENDボタンを押して戻る。

## 複合スイッチ（フライトモード）の設定 

* 「+」ボタンを長押しして設定メニューに入る。
* ジョグキーで「フライトMD」を選択
* 3ページ目で以下の内容を選択

| 項目 | 内容 |
|:-:|:-:|
| TYPE | MATRIX |
| CH5 | INH |
| CH6 | ACT |
| CH7 | INH |
| CH8 | INH |
| SW1 | SwA |
| SW2 | SwB |


* 1ページ/2ページ目で以下の内容を選択

| SW1/2 | CH6 |
|:-:|:-:|
| U/U | -100 |
| U/C | -75 |
| U/D | -50 |
| C/U | -25 |
| C/C | 0 |
| C/D | 25 |
| D/U | 50 |
| D/C | 75 |
| D/D | 100 |

* ENDボタンを押して戻る。

## T6Kのチャンネル割り当ての確認

* 「-」ボタン長押しでサーボメニューを表示する。
* 以下の割り当てになっていることを確認
    * 「正方向」に操作すると、画面上のバーが下方向に伸びる

|CH|割り当てHW|正方向|
|:--|:--|:--|
|1|右軸左右|右|
|2|左軸上下|上|
|3|右軸上下|上|
|4|左軸左右|右|
|5|SwD(右肩)|手前|
|6|SwA(左正面)&SwB(右正面)|(手前)|
|7|VR(つまみ)|時計回り|
|8|SwC(左肩)|手前|

## T6KとR3006SBのリンク

* R3006SBのSB2/B端子とPixhawkのサーボレールのRCINをサーボケーブルで接続する。
* 送信機をリンクモードにする
    * 送信機で設定メニューに入る（＋ボタンを長押し）。
    * モデルセレクト(Mセレクト)を選択する。
    * LINKの横(NO LINKか9桁の数字が入っている)を選んで、選択ボタンを長押しする。
    * 送信機からリンクモードに入った音（ピッピッ）が出ることを確認する。
* Pixhawkに給電する（同時にR3006SBに給電される）。
* リンクされて受信機のLEDが緑に点灯することを確認する。 

## RCパラメーターの設定

* WindowsPCでMissionPlannerを立ち上げて接続を行う
* 以下のパラメーターの設定をする。

|パラメーター名|値|説明|
|:--|:--|:--|
|MODE_CH|8(default)|モード変更に6chを使う|

* 「初期設定」->「必須ハードウェア」->「フライトモード」を選択する。
* 以下のようにモードを設定する。

| 項目 | 内容 |
|:-:|:-:|
| Flightモード1 | Hold |
| Flightモード2 | Manual(デフォルト) |
| Flightモード3 | Manual(デフォルト) |
| Flightモード4 | Manual(デフォルト) |
| Flightモード5 | Manual(デフォルト) |
| Flightモード6 | Acro |

## ラジオキャリブレーションを行う

* WindowsPCでMissionPlannerを立ち上げて接続を行う
* 「初期設定」->「必須ハードウェア」->「ラジオキャリブレーション」を選択して、キャリブレーション画面に遷移する。

![radio_cal1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254442/84faa2d9-d474-e032-4b1b-40c747dc8290.png)

* 画面右下の「ラジオキャリブレーション」のボタンを押す。
    * 4つのスティック、ボリューム、スイッチをを両側の限界まで動かす。
    * 動かした後に「完了」を押す。

# Throttle軸のリマップ

* WindowsPCでMissionPlannerを立ち上げて接続を行う
* 以下のパラメーターの設定をする。

|パラメーター名|値|説明|
|:--|:--|:--|
|RCMAP_THROTTLE|7|channel7をThrottle軸として使う|

# 参考
[ardupilot RC](https://ardupilot.org/copter/docs/common-rc-systems.html)

# 目次ページへのリンク
[ROS講座の目次へのリンク](https://qiita.com/srs/items/5f44440afea0eb616b4a)
[ROS2講座の目次へのリンク](https://qiita.com/srs/items/5f0d765343ca78f524ed)