- 前回はハードウェアの構成をしました。
- 最終的には繋がっています。結論は最後にあります。ただ、マニュアルは有効な情報がたくさんあるのでチラ見して頭の片隅に入れておいてください。
MAVProxyの概要
MAVProxy は、Ground Control Station(GCS) で、MAVLink プロトコルをサポートします。MAVProxy は、強力なコマンドライン ベースのソフトウェアです。
アドオン モジュールを介して拡張したり、Mission Planner、APM Planner 2、QGroundControl などの別の地上局を補完します。
ドローンからのメッセージをネットワーク経由で UDP プロトコルで他のデバイス上のGCSに転送する機能(要するにテレメトリーにもなるし、MPとの接続もできる)など、多くの重要な機能があります。
機能
- コマンドラインのコンソール ベースのアプリです。 MAVProxy には、基本的な GUI を提供するプラグインが含まれています。
- ネットワークに接続して、任意の数のコンピューターで実行できます。
- ポータブルです。 Python、pyserial、および select() 関数呼び出しを備えた任意の POSIX OS (Linux、OS X、Windows など) で実行する必要があります。
- 軽量設計なので、小さなネットブックでも簡単に実行できます。
- ロード可能なモジュールをサポートし、コンソール、移動地図、ジョイスティック、アンテナ トラッカーなどをサポートするモジュールを備えています。
- コマンドのタブによる補完。
(以下Ardupilot MAVProxy QuickStart)
MAVProxyはひとつのardupilotとだけ接続できます。
USB経由の接続の場合
- Linux: mavproxy.py –master=/dev/ttyUSB0
- Windows: mavproxy –master=COMxx
- macOS: mavproxy.py –master=/dev/ttyusbserialXX
ネットワークを超えて接続の場合
mavlinkのデータストリームが流れてくるIPアドレスとポートを特定してください。
これは自身のipアドレスになるはずです。もし、IPアドレスがわからない場合、0.0.0.0を指定してください。MAVProxyはIPアドレスを探します。
例:
mavproxy.py --master=tcp:192.168.1.1:14550
mavproxy.py --master=udp:127.0.0.1:14550
mavproxy.py --master=tcp:0.0.0.0:14550
もし、リモートIPアドレスである場合は次のようにudpout, tcpoutを指定します。
mavproxy.py --master=udpout:10.10.1.1:14550
mavproxy.py --master=tcpout:10.10.1.1:14550
スタートアップオプション
masterパラメーターは指定しましょう。
–master
UAV(Unmanned Aerial Vehicle:ドローン)が通信しているポート (シリアル、USB、またはネットワーク アドレス/ポート) を指定します。(事実上は、フライトコントローラー)
複数の –master を使用できます。 MAVProxy は、パケットを単一のストリームに自動的に並び替えますます。 これは、独立した冗長リンクが使用されている場合に役立ちます。
IP アドレスを指定する場合は、ローカル コンピューターの IP アドレスまたはループバック アドレスである必要があります。 IP 接続タイプ (TCP または UDP) は、IP アドレスの前に付ける必要があります。
シリアル ポートが指定されている場合は、オプションでコンマ区切りのボー レートも指定できます。 そのような指定をした場合、 –baudrate で指定されたレートを上書きします。
–quadcopter
クワッドコプター(4つ以上のプロペラのあるドローン)の場合、指定します。
–baudrate
–masterと–outで使うボーレートを指定します。シリアル通信時のみ、有効です。
–out
MAVLink パケットをリモート デバイス (シリアル、USB、またはネットワーク アドレス/ポート) に転送します。 複数の地上局コンピュータを使用する場合、または中間ノードを介してストリームを中継する場合に役立ちます。
MAVlink は通常、IP ベースのパケット転送にポート 14550 を使用しますが、必要に応じて他のポートを使用することもできます。
シリアル ポートが指定されている場合 (たとえば、空中の MAVProxy を GCS に接続する無線デバイス)、リンク固有のボー レートをデバイスの後にコンマで区切って指定できます。 これは –baudrate で指定されたグローバルなデフォルトのボーレートを上書きします。
tcp または udp 経由でネットワーク アドレスに転送する場合は、IP アドレスの前にプレフィックスを付ける必要があります。
UDP ブロードキャストは、udpbcast:<ip>:<port> を介して作成できます。これは、UDP ブロードキャストとして開始され、接続する最初のクライアントにロックされます。 <ip> は、有効なクライアントのIPアドレスの範囲を指定します。 たとえば、udpbcast:192.168.2.255:14550 は、ポート 14550 で 192.168.2.0 から 192.168.2.254 の範囲の最初のクライアントに接続します。
mavproxy.py --master=/dev/ttyUSB0 --out=udp:192.168.1.1:14550
mavproxy.py --master=/dev/ttyACM0,115200 --out=/dev/ttyUSB0,57600
mavproxy.py --master=/dev/ttyACM0,115200 --out=COM17,57600
mavproxy.py --master=/dev/ttyACM0,57600 --out=udpbcast:192.168.2.255:14550
–sitl
シミュレーター(sitl)を使う場合、通常は sitl=127.0.0.1:5501
–streamrate
MAVLinkのストリームのレート
–source-system
このGCSのためのMAVLinkのソースシステム(???)
–source-component
このGCSのためのMAVLinkソースコンポーネント
–target-system
MAVLinkのターゲットマスターシステム
–target-component
MAVLinkのターゲットマスターコンポーネント
–logfile
MAVLinkのログファイル。デフォルトはmav.tlog
–append-log
新しいログファイルを作らずに、ログファイルに追記する。フライト中に再接続する時などに有効
–setup
APMのコマンドラインの仲でCLIモードでスタートする指定 (?)
–nodtr
クローズ時にDTRのドロップをしない (?)
–show-errors
MAVLinkのエラーパケットを表示する
–speech
テキストをスピーチする。Linuxでスピーチソフトウェアを入れている前提
–aircraft
飛ぶドローンの名前。指定すると
/Logs/AircraftName/Date/flightNumber/flight.tlog
となる
–cmd
MAVProxyがスタートしたときに実行するコマンドリスト
例:
mavproxy.py --master=/dev/ttyUSB0 --cmd="param load init.parm; module load map;"
–console
スタートアップ時にGUIコンソールモジュールをロードする
–map
スタートアップ時に移動マップモジュールをロードする
–load-module
任意のモジュールをロードする。このパラメータを複数書いても、コンマ区切りでモジュール名を並べてもよい
–mavversion
MAVLinkのバージョン、1.0か2.0を指定する。しかし通常、MAVProxyはMAVLinkのバージョンを自動認識する。
–auto-protocol
MAVLinkプロトコルのバージョンを自動認識する
–continue
ログを続ける
–nowait
スタートアップ時にHEARTBEATパケットを待たない
–dialect
MAVLinkの亜流?APM dialectがデフォルト
–rtscts
RTS/CTSのハードウェアフローコントロールをする
–mission
現在のミッションの名前を指定する。指定すると、ログファイル名が/Logs/aircraftname/missionname となる
デフォルトは /Logs/aircraftname/currentdatetime
–daemon
デーモンモード(バックグラウンド)でスタート。対話的なシェルはスタートしない
–state-basedir
ログが保管されるフォルダーを指定。カレントフォルダーではない。
–version
MAVProxyのバージョン情報を返す
–moddebug
コンソールに表示されるデバッグ出力のレベルを制御する。 デフォルトは 0 (デバッグ出力なし)。
3は、MAVProxy とそのモジュールのクラッシュまたはエラーのデバッグに役立つ。
–default-modules
デフォルトで起動時にロードするモジュールのコンマ区切りリスト。
このパラメータのデフォルト値はlog,signing,wp,rally,fence,param,relay,tuneopt,arm,mode,calibration,rc,auxopt,misc,cmdlong, battery,terrain,output,adsb
–non-interactive
対話型シェルをスタートしない
テレメトリーの転送
MAVProxy の重要な機能のひとつは、UDP を介してネットワーク経由でドローンから他のデバイス上の地上局ソフトウェアにメッセージを転送する機能です。
たとえば、独自のテレメトリーをつけたラップトップで地上局を実行し、Wi-Fi 経由でスマートフォン/タブレットに転送することができます。これを使用して、長時間の飛行中に数キロ離れたスポッターとして行動している友人に4G VPNを介してテレメトリ データを送信することもできます。
MAVLink データをネットワーク経由で PC に転送するには、コマンド ラインから MAVProxy を起動するときにいくつかのパラメータを追加するだけです。
ローカルでの転送
ローカルの地上局ソフトウェア (Mission Planner や QGC など) に接続するには、次のコマンドを使用して Linux で MAVProxy を起動します。
mavproxy.py --master=/dev/ttyACM0 --baudrate 115200 --out 127.0.0.1:14550
MAVProxyはLinuxPCとフライトコントローラーを接続します。
WIndowsの場合、
mavproxy --master COMx --out=127.0.0.1:14550
COMxはフライトコントローラーが接続されているポートです。
リモートへの転送
Note: MAVProxy には TCP を使用して転送する機能もありますが、ジョイスティック コントロールが使用されている場合、ネットワークの遅延により遅延が長くなる可能性があるため、推奨されません。
任意のコンピューターの IP アドレスを追加して、テレメトリ ストリームを他の地上局に転送できます。
- ローカル ネットワーク/wifi では、地上局ソフトへの着信ストリームを停止するファイアウォールがクライアント PC にないことを確認する必要があります。
- – -out 宛先 IP アドレス:14550 を MAVProxy コマンドの末尾に追加します。 実行している追加の地上局の数に応じて、個別の – -out パラメータを必要な数だけ追加できます。
- ポート 14550 で UDP パケットをリッスンするように各地上局を設定し、ファイアウォールが UDP ポート 14550 で着信トラフィックをブロックしていないことを再度確認します。
FAQの重要だと思われるQ&A
TCP 接続を別の GCS プログラムに出力するにはどうすればよいですか?
MAVProxy から GCS プログラム (つまり、Mission Planner) への TCP リンクを出力するには、 –out=tcpin:0.0.0.0:<port> コマンドライン オプションを使用します。
これにより、指定されたポートで TCP 接続を待機するように MAVProxy に指示します。
Raspiをネットワーク機器にしてPixhawkと接続するには?
まずマニュアルをざっと眺めることが大事だと思います。
Ardupilotはたいへん複座なシステムで、現象だけをQAフォーラム、Gitに投稿してもほとんど回答がありません。
別に参加者の意地が悪いわけではなく、考えられる可能性がありすぎるからだと思います。
たとえば、表記のタイトルの場合、Raspi+PixhawkとPC上のmission plannerのどちらを先に立ち上げるかは大事な考慮事項です。片方が接続を試みた時、片方はListenの状態にないとTCPだろうがUDPだろうが繋がりません。
こんな当たり前のことは、前提知識のため今更書かれていないように思います。
Mission Planner側が接続を待つのであれば
mavproxy.py --master=/dev/ttyAMA0 --baudrate 47600 --out=udp:<MPが稼働するPCのIPアドレス>:14550
になります。これは安定して繋がります。
Raspberry Piを先に立ち上げてMission Plannerの接続を待つならば、FAQにあるとおりの指定
mavproxy.py --master=/dev/ttyAMA0 --baudrate 57600 --out=tcpin:0.0.0.0:14550
ではOKです。(UDPはうまくいきませんでした)
この場合、MP側は右上でtcpを選び、RaspiのIPアドレスとポート14550を指定します。
*この接続はRaspberry PIをLTE接続しても、うまくいきました。(参照:Raspberry PIにLTE USBトングル UX302NCを接続する)
ただし、MAVLinkの1秒おきのハートビートをこのような接続で常に大丈夫かは別問題です。
また、RaspiとPixhawkをUSBで接続する場合、/dev/ttyACM0です。(USBシリアルです)
つながらない時のチェックリスト
- MIssion Plannerを動作させているPCのファイアーウォールはどうなっていますか?ポート14550を開放していますか?(私はこれにハマっていました)
- PixhawkとRaspiのピン接続、特にRX,TXはお互い逆に接続しないといけないがあっていますか?
- ケーブルが接触不良、断線していませんか?テスターで確認しましょう。
- MavProxyが正しく動いていますか? mdemmanagerをremoveすることが推奨されています(私は無視しても繋がってますが)
- Raspiのシリアルインターフェースが有効になっていますか?(raspi-configで確認)ログインシェル->No, ポートハードウェアを有効にする->YES
- bluetoothを使用不可にします(/boot/config.txt内)enable_uart=1 dtoverlay=disable-bt
- Mavproxyのパラメーターは本当に正しいですか?へんなところにブランクが入っていると正しく動作しません。
- MavproxyのボーレートがFC上(mission Controllerで設定した値)とMavproxyの起動パラメーターと一致していなければなりません。
- 通信ポートは正しいですか?