製品情報
2023.08.21
CuGo V3をELRSで動かしてみる

CuboRex思いついたことを雑にやってみる担当カワヅです。
CuboRexのメインプロダクトの一つ、CuGoシリーズ。
主に不整地用の足回りとして活用されるべくクローラー単体をベースモデルとして、
そのまますぐに走らせられるキットまでラインナップしています。
それらをどのような通信でコントロールするかについても
有線、プロポによるリモートコントロール、Wi-Fi、Bluetooth、LTEなど
さまざまな方法が考えられます。
現在CuGoシリーズでは近藤科学MC-8、MR-8のセットで気軽に
リモートコントロールできる状態でキットを構成しています。
https://kondo-robot.com/product/10710
この組み合わせでの伝送可能距離は大体実測30mくらいです。
この距離を伸ばしたいならば...?
というコンセプトで今回はドローンの世界で今ホットなExpress LRSという
仕組み(以下ELRS)でCuGo V3を制御してみました。
https://www.expresslrs.org/
LoRaを使った通信ですが、920MHz帯以外にも2.4GHz帯のものがあり、
2.4GHzでも設定や環境次第で数十キロ到達可能という規格です。
ELRSの遠距離ランキング
https://www.expresslrs.org/info/long-range/
無線通信ということで技適の話をしておくと、
技適(技術基準適合証明)は電波を発する機器が電波法に適合している
無線機であるかどうかを証明するもので、
無線送信機(今回はプロポ)には技適マークがついている必要があります。
ELRS対応で技適マークがついているプロポはいくつかありますが、
今回は既存のプロポに機能追加の形で使えるBetaFPV ELRS Nano TX Module
( https://betafpv.com/products/elrs-nano-tx-module?variant=39726352826502 )
を使用します。
日本における特定小出力無線の出力は10mWまでなので送信機側で
10mWに設定しておきましょう。
受信機で注意しなければならないのは、
テレメトリ(受信できていますよ、というお知らせ)を送信するタイプの
受信モジュールは電波を出しているため日本では技適マークが必要という点です。
ファームウェアを書き換えてテレメトリを送信させないようにするなどの対応をし、
各自の責任において適法下で利用してください。
ドローン=無線の免許が必要
というイメージを持つ方もいるかもしれませんが、免許が必要な部分は
5.8GHz帯を使用する映像伝送のモジュールなので、それを使わない限り
特定小出力無線の範囲(10mWまで)で屋外で利用することができます。
地方での条例として別に飛行することを制限している場合も
多いため、特に飛行系は各条例をよく調べるようにお願いします。
まず、送信モジュールはドローンで使うプロポを仮にそのまま使います。
ちなみに通常のプロポは片方のスティックは上下側のバネが入っていないため
レバーを離してもアクセルがニュートラルポジションに戻らず、
CuGoのようなクローラーの操作には不向きです。
必要に応じてバネなしに変更しましょう。
受信モジュールはドローン用の後付け受信モジュールとして売られている
ELRS Nano Receiver( https://betafpv.com/products/elrs-nano-receiver )を使います。
実はELRSは普通に使える状態にするまでのハードルが結構高いのですが、
今回の主題ではないので今回は無慈悲に省略します。
今回はTinyドローンで既にバインド(送信機と受信機の接続)済みのレシーバーを使いました。
各自頑張ってバインドしてください。
無事バインドできる状態にできたらいよいよ組み込んでいくことを考えます。
CuGo V3でモーターを動かす信号はいわゆるラジコンサーボのPWMです。
ELRSモジュールの通信の中身はCrossFire(CRSF)というシリアル信号の一種なので、
ELRS(CRSF)→何かでシリアル信号を受信してRC PWMへ変換→CuGo V3のESC
上の「何かでシリアル信号を受信してRC PWMへ変換」が肝となります。
今回は偶然目の前に転がっていたM5StackのAtom S3を使います。

小さいのに画面がついてるので状態表示もできそうですね。
Atom S3にはGroveポートがついており、
それをシリアルポートにアサインすることができます。
そこにELRS Nano Receiverを繋いでみましょう。

レシーバーとAtom S3から後は、こっそり作ったブレイクアウトボードを使って
Atom S3の7,8番ピンからESCに接続します。
今回使っているESCはCuGo V3の試作時に使っていたものなので
現行のESCとは違うモデルですが、使っている信号は同じなので
同じようにつなげば動きます。
次、ソフト行きましょう。
レシーバーモジュールからはシリアル信号で情報が送られてくるため、
それを解釈して数値化するところまでできればできたも同然です。
https://github.com/stepinside/Arduino-CRSF/
ありがたいことにそんな数値化する部分をArduinoライブラリ化してくれている
人がおりました。Stefanさんありがとうございます。
バインド済み送受信機とでこのライブラリを使うと一発でプロポの状態を取得できますが、
一点だけRead_Data.cppというデータを読み出すだけのシンプルな
サンプルコードに落とし穴がありました。

crsf.beginの方、bpsを指定しなければデフォルトの420000bpsに設定されますが、
サンプルコードではなぜか115200bpsが指定されており、このままでは動きません。
crsf.begin(&Serial1,420000);かcrsf.begin(&Serial1);で動くはずです。
(ところで、Arduinoのスケッチなら.cppではなく.inoな気がするのですが
それはさておき)
サンプルコードでデータが読み出せるのが確認できたらいよいよ
CuGo V3を動かすのに挑戦します。
前述の通り、CuGo V3のESCへはラジコンサーボの信号で指示を出すので、
サーボの信号を出せるライブラリを使いましょう。
ESP32ServoというライブラリがArduinoのLIBRARY MANAGERに登録されているので
それを使いました。

やることを整頓すると、
プロポ(+ELRS Nano TX Module)からELRS Nano Receiverにアクセル情報を送信
↓
ELRS Nano ReceiverからATOM S3にシリアルでアクセル情報が送られてくる
↓
ATOM S3でアクセル情報をラジコンサーボPWMに変更してESCに送る
↓
ESCがモーターを回す
です。
という内容のATOM S3のArduinoスケッチがこちらです
https://github.com/CuboRex-Development/CuGoV3-ELRS-AtomS3
そしてこちらがELRSで動くCuGo V3です。
https://twitter.com/necobut/status/1659117376837943296
実際に遠距離運用をする場合は映像の返しやセーフティなど、
さまざまな課題があると思いますが、リアルタイムと言えるレベルでの
操縦が実現できることにより可能になることもあるかと思います。
信号伝達距離は都市部のビルがあるような場所での見通しで
300m程度でしたが、条件次第で10km届いたという報告もありますので
みなさんチャレンジしてみてください。


