ワイヤレス接続(と回線の遅延)

ペリフェラル

ドローンの世界ではフライトコントロールのために無線通信機器をつなぐことを「テレメトリー」といいます。以下、テレメトリーで。

概要

フライトコントローラーとグランドコントロールステーション(GCS)をつなぐ機器は様々なものが売られています。
次の図を見てください。

 

基本形はC.シリアルです。表題の写真のような”専用のテレメトリー”もしくは”ESP8266″を使うことがポピュラーです。

B. シリアル通信は理論的にはありえますが、せっかくのコンパニオンコンピューターなのでもったいです。事実上はないと思います。

A.インターネット経由はTCP/IP接続だと解してください。
長距離でTCP/IPを使いたいのであれば、”携帯電話会社のサービス”を利用したものがメインとなるでしょう。もっとも強力、汎用性が高く、安価です。
さくらインターネット、ソラコム、ドコモなどが提供しています。いずれも閉域です。
本当のインターネット経由となると、グローバルIPを提供してくれるSIMカードを使うと可能です。(OCN旧契約で試したことがあります)

ローカルでのTCP/IP接続についてはコンパニオンコンピューターに直接接続できる”WIFI”を使います。
WiFiについては後述します。

専用のテレメトリー機器

販売されているものはあまりありません。日本の電波法で使用可能周波数が海外と違うためです。
ただ、電波法と総務省は「微弱な電波」は届け出の必要がないとしています。ラジコンなどがよい例です。(ただし、ラジコンで使っていい周波数は27MHz/40MHz/72MHz/2.4GHzの4種類)昔の法律は結構、いろいろなことが配慮されています。
電界強度計というものが販売されていますから、測定してみればいいと思います。
微弱でたまーにやってるなら取り締まりにはひっかかりにくいとは思いますけどね。
なお、電波の取り締まりについてはこちらを参考に。多くは告発です。

タイトル画像にあるようなpixhawkを製造しているholybro純正のテレメトリーはセットアップしなくても繋がります。(参照:ここ)(Amazonで15000円くらい、Aliexpressで9000円くらい)
パソコン側もUSBポートに挿すだけでCOMポート(シリアル)となり、簡単にミッション・プランナーに繋がります。
100mWで300mくらい届くと書いてあります。

純正でないものでV5と書かれたテレメトリーがあります。2.4GHz 500mWらしいです。

これはWindowsに繋いでもそのままでは動作しません。CP210Xドライバーが必要です。

915MHz帯のものも販売されていますが、433MHzでのデータ通信(ここは音声のみ)、915MHz帯の通信、どちらにしても電波法にひっかかります。

2.4GHz帯を利用したものもあります。多くはZigbeeを利用したもので、250Kbps程度と遅いです。到達距離は30メートル程度と言われています。
また、販売台数がそれほど見込まれないためでしょうか、高価です。

TWE-LITE製品は購入してみましたが、TCP/IPを処理できません。シリアル通信が主体となりますが、それも自分で購入した製品のプログラムを書き換えないと使い物になりません。実験機であって実用のシリアル通信アダプターにはならないようです。この記事を読んだ方が同じ間違いをしないように祈ります。

ということで、あきらめましょう。なぜならばWiFiのほうが便利だからです。

WIFIによるテレメトリー

WIFIで2.4GHz帯で通信するモジュールは結構安く出回っています。(5GHz帯を使うものはあまりないので避けるべき)
当サイトでも自作してみたことがあります。WIFIの出力は限られますが、アンテナについて電波法(空中線)に規制はないので、アンテナ付きのもので距離を伸ばす試みは有効です。

自作したモジュールのようなESP8266を利用したモジュールは多数あります。

このモジュールはアンテナがついているので輸入してみました。(450円くらい)
しかしUSBシリアルアダプターを介して、ファームのプログラムをインストールできていません。
どうやってつかうのか現時点で不明です。中国の業者にマニュアルをお願いしています。

ミッションプランナーにも、ESP8266のメニューがあるのですが。。。
ただ、ESP8266を利用してフライトコントローラーに取り付けるものは、フライトコントローラーがテレメトリーとしてはシリアル通信なので、すべてシリアル通信となります。
WIFI使うならTCP/IPを使いたいものです。

Raspberry Piにつないでテレメトリー

コンパニオンコンピューターへの接続は、いろいろ試みられています。
この記事にあるようにRPanion-ServerなどはRaspiをアクセスポイントにします。

基本的にWIFIを使ってコンパニオンコンピューターに接続する場合、WIFIルーターを別途用意することは面倒なので、Raspberry Piをアクセスポイントにすることが多いです。

またRaspiにはイーサーネットのインターフェースがあります。IPアドレスを固定しておけば、PCと接続可能です。ここではワイヤレス接続のみ検討します。

Raspberry Pi付属のWiFiは電波が非常に弱く、数メートルしか届かないことはよく知られています。

そこで世の中によくあるUSB接続のWiFiデバイスを利用します。
このあたりはドローン専用ではないので、性能もいろいろあり安価です。
ここではIOデータのWN-G3000UAを使ってみました。(1200円前後)
安価で情報が多いため助かります。Raspiへの接続、応用例も多数ネットに記事を書いてくださっている方がいます。

ここではWN-G3000UAをRaspberry piに接続しアクセスポイントにします。
PCにもWN-G3000UAを取り付け、ミッション・プランナーに接続できればかなりの長距離を期待できます。

 

Raspberry Piにとりあえず取り付ける

以下の設定をする時、ミスをするとWiFiが繋がらなくなります。
リアルのHDMIディスプレイとキーボードのセットか、有線LANでPCに接続するかが必要です。

なんと何もしないで、USBソケットに差し込むだけでWIFI子機として稼働します。(2023/5現在)
デバイスドライバーのインストールは必要ないようです。(ここを参照)
Windows11にも挿すだけで、WIFI子機として稼働します。

Raspi上ではwlan1として接続されているはずです。しばらくこのままにします。
WN-G3000UAの内部のWIFIチップはRTL8192CUというものらしいです。
Raspiがサポートしているwifiチップはここにリストされるらしいのですが、まったくアテにならず驚きました。RTL8812AUのチップセットを使ったWIFI USBドングルもあるのですが、さしてもまったく反応しません。

“lsusb”コマンドでなにが刺さっているか確認でき、ifconfigコマンドや”ip a”コマンドで論理的な認識を確認できます。

RTL8192CUの情報をあさると、アクセスポイントモードをサポートしているようですし、この製品の箱にはWindows7までは親機として使えると書いてあります。つまり理論上はSSIDをもち、アクセスポイントになれるのです。
あとはLinux上でがんばる。

以下、すべてRaspi内で行うことです。

dnsmasqサーバーをインストール

wlan1のIPアドレスを固定します。
/etc/dhcpcd.confの末尾に以下を追加。(wlan0のIPアドレス体系とかぶらないように)

interface wlan1
static ip_address=192.168.10.1/24
nohook wpa_supplicant

AP用DHCPサーバーをインストールします。dnsmasqはいろいろかねています。
nohookがないとwpa_supplicantの影響を受けてしまうようです。

sudo apt install dnsmasq 

設定ファイルは/etc/dnsmasq.confです。
長いコメントですが、が~っとスクロールして最後に以下を追加します。

interface=wlan1
dhcp-range=192.168.10.10,192.168.10.20,255.255.255.0,24h

これでwlan1へアクセスすると、独自のIPアドレスが割り振られます。
たいていご家庭のLANは192.168.0.xか192.168.1.xをお使いでなのでかぶらないはずです。
他をお使いの方はネットワーク知識をお持ちでしょうから、自分で決めてください。

hostapdのインストール

これがタイヘンでした。Raspberry Piのドキュメントが参考になりました。

hostpad.confの設定がうまくいきません。
とくにdriverパラメーターが重要で、デバイスドライバーとは別にhostapd固有のドライバーが正しくないといけません。このあたり、情報がなかなか見つからず。

hostapdのインストール

sudo apt install hostapd

スタートするにはunmaskが必要です。

sudo systemctl unmask hostapd
sudo systemctl enable hostapd

設定ファイルは/etc/hostapd/hostapd.confです。

interface=wlan1
country_code=JP
ssid=xxxxxxxx
hw_mode=g
macaddr_acl=0
wmm_enabled=1
auth_algs=1
ieee80211n=1
require_ht=1
channel=6 
ignore_broadcast_ssid=0
wpa_passphrase=yyyyyyy
wpa_key_mgmt=WPA-PSK
wpa=2
rsn_pairwise=CCMP
driver=nl80211

xxxxxxxxはAP名です。お好みで。yyyyyyyyはパスワードです。やはりお好みで。
driverはRTL8192Cの場合はこれでOK.(他に rtl871xdrv というものもあるようです)
どのUSBドングルでもこれが正しいとは限りません。

ieee80211n=パラメーターなどは、USBドングルがどのWIFI規格をサポートしているかで設定します。たしかieee80211acなんてのもあったと思います。

設定が正しいと

sudo hostapd /etc/hostpad/hostapd.conf

でエラーがなければ、サービス開始されます。
自動開始したい場合はsystemctl enable hosapd.serviceをしておきましょう。

ルーターにせず、後はMAVProxyでフライトコントローラーと接続するのでインストレーション作業は以上です。

開始と停止

リブートすると自動的にhostapdもdnsmasqも起動します。

これでクライアントPCとTCP/IPでドローンと接続できます!ふう (2023年6月時点ではこれでOK!)

Raspiのボードのwifiはクライアントモードでつながるはずです。
IOデータのWN-G3000UAはAPモードでアクセスポイントがパソコンやスマホから見られるはずです。
もし、192.168.10.1にMission Plannerから接続できなかったら、一度、sshで繋いでみてください。
なぜかそれからMission Plannerから接続できるようになったりします。ナゾや。

現状のWiFiの到達距離は100メートル程度と言われています。

今後、802.11ahという規格が日本でもOKだと発表され、1キロメートルくらいまで届くそうなのでWiFi接続は期待ができます。
シリアル通信でチマチマやっていた製品は一掃されることでしょう。たとえば、RC(プロポ)自体が不要になる時代がすぐそこまで来ています。

コンパニオンコンピューターがPCとTCP/IPで接続できるといろいろな期待ができます。

PC側

PC側もそれなりのWIFIアダプターが必要であることは言うまでもありません。
内蔵でも性能がよければいいし、USBドングルでもいいでしょう。私は上記のUSBドングルをPC側も使っています。

デバイスマネージャで内蔵デバイスを「無効にする」作業が必要です。なんかユーティリティがほしいものです。

MAVLink 高遅延モード(MAVLinkHL)

通信の帯域が非常に限られてしまうことがあります。

日本語で見たことがないのですが、Ardupilot/MAVLinkにはHigh Latency Modeというものがあります。(https://ardupilot.org/copter/docs/common-MAVLink-high-latency.html)

これは衛星通信などの低い帯域や高コストのリンク用に設計されています。

というのも、RoverですらArmした後、およそ秒あたり3.9Kbyteのデータが海鮮を流れます。
これは57600ボーだと60%以上の回線使用率となります。
この上に画像を送っていると、さらに使用率ははねあがります。

そこでHIGH_LATENCY2というMAVLink メッセージのみが 5 秒に 1 回送信されるプロロコルが考えられました。現実にはこれで1kbyte/sec程度に落ちるそうです。
MAVLinkコマンドまたは要求 (コマンド確認応答またはパラメーター要求など) への応答も送信されます。

MAVLink High Latency は、任意のテレメトリ ポートでオプションとして利用できます。つまりメインのPath1の接続(たとえばCOMポート接続)を確立しておいて、サブのPath2の接続(LTEなど)を用意しろということです。(もちろん同時接続はできません)

MAVLinkのページではMAVLinkHLでパラメーター、ミッション、ウェイポイント、ジオフェンスなどをアップロードしてはならない、とあります。
つまり、航行の最初は低遅延ラインを使い、Autoなどで動き出してから高遅延ラインに切り替えろということのようです。

構成の仕方

以下、情報収集中です。

  • 使うテレメトリポートプロトコルがMAVLink High Latency に設定されていることを確認します (SERIALn_PROTOCOL=43)
    (設定するとMission Plannerと接続できません。)
  • MAVProxy では高遅延ポートを有効または無効にします。(link hl on|off)
    (これがなんなのかドキュメントがありません。コマンドだとして発行すると、繋がりません)
  • QGroundControlでは、High Latencyポートでのテレメトリの送信を有効にするオプションを使用します(High Latency)
  • Mission Plannerはサポートされていないという情報もありますが、1.3.80の変更記録にはAdd action for MAV_CMD_CONTROL_HIGH_LATENCYの記載があり、GCS_common.cpp内にはサポートが見られます。

 

 

タイトルとURLをコピーしました