XBee(S2C)でArdupilotからのテレメトリデータを受け取るようにする
今回は開発中のドローンにおいて、ドローンーGCS間のテレメトリの受信でXBee(S2C/Programmable)を使って実装したことをご紹介します。
開発中のドローンはプラットフォームにはArduPilot、グラウンドコントロールシステム(GCS)にはMissionPlannerやQGroundControlを使用しています。GCSに飛行速度や高度、バッテリー電圧などを表示したい場合、ドローンからテレメトリを受信する必要があります。
テレメトリ送受信機としてXBeeを選択した理由
ドローンからのテレメトリの受信手段として、写真のようなXBeeを使用しました。XBeeを採用した理由として、下記が挙げられます。
- 技適を取得しているモジュールが販売されている
- 通信モジュールとしての実績が豊富
- Ardupilotの開発者サイトにXbeeの記載がある(Ardupilotにも実績がある)
- 安価(秋月電子通商で1つ2,900円)
- 見通しの通信距離が1,200mとドローンを飛ばす上で十分な距離
XBee以外にもWiFiを利用したものやBluetoothを利用したものがあります。特にBluetoothは実装が比較的容易に行えるのですが、技適を取得していないモジュールが多く販売されており、購入には法的なリスクを伴うため採用を断念しました。
テレメトリ送信側のXBee
テレメトリの送信用にXBeeが1つ受信用にさらにXBeeがもう1つの、計2つのXBeeが必要になります。以下の写真は送信側のXBeeです。
ドキュメントの落とし穴?
Ardupilotのドキュメントでは、送信側(ドローン)のXBeeをRouter([CE]=0)、受信側(PC)のXBeeをCoordinator([CE=1])に設定するように記載されていますが、私が試した範囲ですと送信側をCoordinator、受信側をRouterにしないと、正しく送受信できませんでした。
FCとXBeeの結線
開発中のドローンではフライトコントローラにPixhawk4(以下Pix4)を採用していますが、XBeeはPix4のTELEM1ポートに接続しています。
XBee側は直接接続せずに、XBee用の2.54mmピッチ変換基盤を使用しています。このピッチ変換基盤には電圧レギュレータが内蔵されており、Pix4から供給される+5Vの電圧をXBeeの動作電圧である+3.3Vに変換しています。Pix4から直接接続するとXBeeを破損する恐れがあるので注意が必要です。
Pix4とXBeeの配線は以下のようになっています。
結線の際、ピンヘッダはドローンに固定する際に邪魔になるので、電線を基盤に直接はんだ付けしました。
また、基盤をドローンに固定するために、自動車用の少し厚みのある強力な両面テープを使用しました。
PCとXBeeの結線
テレメトリを受信する側のPCとXBeeの結線については、写真のようなXBee-USBインタフェースボードキットを使用しました。こちらも+5V-+3.3Vの変換レギュレータが内蔵されています。
こちらはUSBケーブルをPCに接続するだけですので、簡単です。
XBeeのパラメータ設定
XBeeへのパラメータ設定は、XCTUというソフトを使用しました。設定すべき値は基本的にArdupilotのドキュメントの通りです。DH・DLを相手側の実際のアドレスに合わせることと、CE(Coordinator Enable)の設定がドキュメントの記載とは逆になっている(いそうな)ので、その点は注意が必要です。
FlightControllerのテレメトリ設定
FCのテレメトリ設定にはMission Plannerを使用します。TELEM1に接続している場合は、MissionPlannnerのConfig/TuningメニューからFull Parameter Listを選択し、以下の設定を行います。
- SERIAL1_BAUDを57(57600bps)に設定
- SERIAL1_PROTOCOLを1(GCS Mavlink)に設定
- BRD_SER1_RTSCTSの値を0(Disabled)に設定
最後に Write Paramsボタンをクリックすると、FCに反映されます。
XBeeの通信で問題がある場合
一度設定を行うとFCやXBee側で設定が永続的に保存されるため、基本的には何もしなくても接続できるはずです。
しかし、実際に何度か試してみた感じですと、特にXBeeの初回接続がうまくいかないケースが多いように見受けられました。この場合、XCTUアプリを起動してXbeeの設定内容を確認し、実際に電波が拾える状態であることを確認した後にGCSを起動すると、うまく接続できることが多いです。