Lionas@スタジオマーブルの技術ブログ

Androidやドローンに関する技術的な記事やiRacingなどのシミュレータに関する記事

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

テレメトリの送信用にXBeeが1つ受信用にさらにXBeeがもう1つの、計2つのXBeeが必要になります。以下の写真は送信側の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を破損する恐れがあるので注意が必要です。

送信側のXBeeのピッチ変換基盤と配線

Pix4とXBeeの配線は以下のようになっています。

  • 赤:+5v vcc
  • 黒:GND
  • 黄:Pix4 TX(out) -- XBee RX(Din)
  • 緑:Pix4 RX(in) -- XBee TX(Dout)

結線の際、ピンヘッダはドローンに固定する際に邪魔になるので、電線を基盤に直接はんだ付けしました。

また、基盤をドローンに固定するために、自動車用の少し厚みのある強力な両面テープを使用しました。

PCとXBeeの結線

テレメトリを受信する側のPCとXBeeの結線については、写真のようなXBee-USBインタフェースボードキットを使用しました。こちらも+5V-+3.3Vの変換レギュレータが内蔵されています。

こちらはUSBケーブルをPCに接続するだけですので、簡単です。

XBeeのパラメータ設定

XBeeへのパラメータ設定は、XCTUというソフトを使用しました。設定すべき値は基本的にArdupilotのドキュメントの通りです。DH・DLを相手側の実際のアドレスに合わせることと、CE(Coordinator Enable)の設定がドキュメントの記載とは逆になっている(いそうな)ので、その点は注意が必要です。

XCTU

www.digi.com

FlightControllerのテレメトリ設定

FCのテレメトリ設定にはMission Plannerを使用します。TELEM1に接続している場合は、MissionPlannnerのConfig/TuningメニューからFull Parameter Listを選択し、以下の設定を行います。

  • SERIAL1_BAUD57(57600bps)に設定
  • SERIAL1_PROTOCOLを1(GCS Mavlink)に設定

MissionPlannerの設定(Ardupilotサイトより)
  • BRD_SER1_RTSCTSの値を0(Disabled)に設定

MissionPlannerの設定(Ardupilotサイトより)

最後に Write Paramsボタンをクリックすると、FCに反映されます。

XBeeの通信で問題がある場合

一度設定を行うとFCやXBee側で設定が永続的に保存されるため、基本的には何もしなくても接続できるはずです。

しかし、実際に何度か試してみた感じですと、特にXBeeの初回接続がうまくいかないケースが多いように見受けられました。この場合、XCTUアプリを起動してXbeeの設定内容を確認し、実際に電波が拾える状態であることを確認した後にGCSを起動すると、うまく接続できることが多いです。