前回RTK基準局を稼働させたので、いよいよ草刈りロボットを検討していきます。
まだまだ道は遠いですが。。。
第一段階としてArdupilotで動作するローバーを作って庭を走らせてみようと思います。これにはPC上で動くGCS(Missionplanner)とフライトコントローラー(PixHawk)との間を何らかの方法で無線接続する必要があります。

色々と方法はあると思いますが、比較的安価なESP32でできないかと調べたらDrone-Bridge ESP32というのに行き当たりました。
ドキュメントによるとDrone-Bridge ESP32はGCSとフライトコントローラー間をシリアルブリッジ、無線LAN、ESP-NOW等で接続できる様です。
また動作できるマイコンはESP32,ESP32-C3,ESP32-C5,ESP32-C6が使えるそうなので、手元にあるマイコンボードで直ぐに試す事が出来そうです。
インストールでハマる。
では手始めに手元にあったESP32 Devkit基板に書き込んでみましょう。
ESP32 Devkit基板はこんなのです。(いつだか3枚959円で買った微妙に怪しい基板)。

Drone-Bridge ESP32のドキュメントによるとブラウザーで動作するフラッシュツールを使うと手軽に書き込めるようです。→ https://drone-bridge.com/flasher/
PCとESP32基板間をUSBケーブルで接続してこのURLにアクセスすると下のフラシュツールが現れたので・・・

書込みを試したのですが「Not connected.」と言ってきます。

BOOT-RESETボタンを順番通り押したり、ブラウザーをChrome/Edge両方試したり、基板もPCも交換したけれど変化ありませんでした。
ならばバイナリーをダウンロードしてESPtoolで書き込みをと考えましたが、バイナリーのダウンロード先が見つからないのです。
フラッシュツールは内部でダウンロードしている筈なのでどこかにはあると思うのですが・・・
あきらめてビルドする。
という事でビルドする方が早かろうという考えに至りました。
で、やってみたのですが、こちらも下記の様に色々ありました。
- ESP-IDFv6.0(この時点の最新)でビルド
→Ninja、npm等が入っていないエラー、日本語パス名が悪さしているらしきエラーが発生。これらは順に解決していったのですが、最後にprotocomm_security1′ undeclaredというエラーが発生。。
このエラーはChat-GPTさんによると古いESP-IDFのAPIを使っているためで、ESP-IDFをVer4番代に下げろと。。。 - ESP-IDFv4.4.6でビルド
→今度はVer5.3以上でやれというメッセージを含むエラー。 - ESP-IDFv5.5でビルド
→すんなり完了。
という事で上手くいったビルド手順を整理すると・・・
https://dl.espressif.com/dl/eim/からeim-gui-windows-x64.exeをダウンロードして実行。
インストーラーが開くのでメッセージに従って進んで行き、ターゲットチップ選択ページでESP32に加えて後で試したいESP32-C3を選択。

バージョンのところでV5.5.4を選択。

あとは大体基本通りにインストール。
インストールが完了するとデスクトップにESP-IDF 5.5 PowerShellのアイコンが出来ているのでダブルクリックするとターミナルが現れ、この中で作業すれば一通りの環境が設定済になっています。
ターミナル内で適当なディレクトリ(パスに日本語が無い方が無難)に移動して、まずGithubからソース一式を取ってきます(gitはインストール済みの前提)。
> git clone https://github.com/DroneBridge/ESP32取ってきたディレクトリの下にあるDroneBridge/ESP32に移動して・・・
> cd DroneBridge/ESP32ビルドを実行!!
> idf.py buildこれでビルドが始まりますが、結構時間がかかりました(PCが古いからか・・・?)。
ビルドが完了したらPCとESP32 Devkit基板とをUSBでつないで下記コマンドで書き込みます(COM番号はそれぞれの環境での番号)。
この時、ESP32マイコンが持っているMACアドレスが表示されるので控えておくと後で役立つかもしれません。
idf.py -p COM4 flash
設定
書き込みが完了したらリブートするとWi-Fiアクセスポイントモードで立上がります。
つまりPCのWi-Fi設定を開くとDroneBridge for ESP32という名前のWi-Fiアクセスポイントができているので、ここに接続して設定を行うのです。
まず上記アクセスポイントを選択し、パスワード:dronebridgeでWi-Fi接続します(このときWindowsであればインターネットに未接続的なメッセージが出るけど気にせず先に進みます)。
そしてブラウザーでhttp://dronebridge.local又は192.168.2.1に接続すると下の設定画面が現れます。

私の場合、当面は自宅のWi-Fiに接続するので下記の設定に変更しました。
- ESP32 Mode → Wi-Fi Clinent Mode
- SSID → 自宅環境のSSIDに設定。
- Password → 自宅環境のパスワードに設定。
- UART TX GPIO → 18
- UART RX GPIO → 19
- UART RTS GPIO → 22
- UART CTS GPIO → 23
- UART baud → 115200
UART信号のGPIO番号は使っているチップ(ESP32,ESP32-C3…)によって制限があります。上記設定は動作していますが、他のGPIOピンを使う場合は公式サイトの説明を読む方が良いです。
再起動後、自宅Wi-Fiに接続するIPアドレスとか・・・
以上の設定が終わったら[SAVE SETTINGS & REBOOT]ボタンを押せばリブートします。動作モードをWi-Fi Client Modeに変更したので既に自宅のWi-Fiに接続している筈なのですが、上記の方法だとDHCPからIPアドレスを割り振ってもらうので何番になるかが分かりません。私の場合はDHCPサーバーのログを見てIPアドレスを調べましたが、書込時に表示されたMACアドレスに対するIPアドレスをDHCPサーバー側で固定する方が良いかもしれません。
もしDHCPサーバーを弄れない場合は地道にpingを投げる等して調べる必要があります。
なおDroneBridge設定画面の[Advanced Wi-Fi Settings]をクリックすると(DHCPを使わず)IPアドレス固定の設定がでてくるので、ここで設定してしまうという手もあります。
DroneBridgeのIPアドレスが分かったらブラウザーで指定して開くと先程の設定画面が(変更を反映した状態で)表示されます。
フライトコントローラーと接続する
DroneBridgeとフライトコントローラー(PixHawkのTELEM1コネクタ)との接続には下記の配線でケーブルを作りました。
| PixHawk | ESP32(Devkit) |
| 1pin(VCC) | V5 |
| 2pin(TX) | RX(GPIO19) |
| 3pin(RX) | TX(GPIO18) |
| 4pin(CTS) | RTS(GPIO22) |
| 5pin(RTS) | CTS(GPIO23) |
| 6pin(GND) | GND |
動作確認の為ブレッドボードを使って接続してみます。

ところで私の使っているPixHawkはAliexpress等で比較的安く売られているPixHawk2.4.8と書かれた物ですが、コネクタの型がPixHawkの公式マニュアルにるJST-GHと違ってMolex-PicoBladeでした。
GH買って挿せなかったのでPicoBladeを買い直したのは私です。

MissionPlannerと接続する
ここまでくるとMissonPlannerからDroneBridgeを経由してフライトコントローラーに接続できます。
下図の様にポート選択欄をUDPCIに、通信レートを115200bpsに設定して[接続]ボタンを押します。

すると接続先のIPアドレスを聞いてくるので上で調べた(又は設定した)アドレスを入力し、次にポート番号を聞いてくるので14550(これは固定)を入力して[OK]を押すと接続できます。
ESP32-C3版
Devkit基板+ブレッドボードのままだと引っ掛けて壊しそうなのでちゃんとした形で作り直したいです。
DroneBridgeはESP32-C3もサポート対象になっているので、昨年ラジコンミニ四駆を作った時の基板を流用して実装してみます。

この基板は単三電池2本で動作させるため、サーボ電圧用に一旦5Vに昇圧していましたが、このDCDCコンバータは実装せず直接5Vを供給します。またモータードライバーやピンヘッダも不要となります。
これら不要な部品を除外して実装し、電線を引き出してコネクターを取付けました。

配線は次の通りです。
| PixHawk | ESP32-C3(RCミニ四駆受信機改) |
| 1pin(VCC) | 5Vライン |
| 2pin(TX) | RX(GPIO0) |
| 3pin(RX) | TX(GPIO1) |
| 4pin(CTS) | RTS(GPIO21) |
| 5pin(RTS) | CTS(GPIO3) |
| 6pin(GND) | GND |
ハードウェアが出来たのでファームをビルドして書き込みます。
まずESP32-C3用にビルドして・・・
> idf.py set-target esp32c3 build書き込む為のPCとの接続ですが、ESP32-C3の場合はUSBを直接接続できます(USB-シリアル変換IC不要)。
このあたりの詳細は以前「ミニ四駆をラジコン化 ~その4~ 回路とプログラム」の投稿に書きました。
接続が出来たら下記コマンドで書込みます(COM番号はそれぞれの環境での番号)。
idf.py -p COM5 flashESP32-C3版の設定
ESP-32 Devkit版と同じ様にして接続し、下記設定しました。
- ESP32 Mode → Wi-Fi Clinent Mode
- SSID → 自宅の環境に設定。
- Password → 自宅の環境に設定。
- UART TX GPIO → 1
- UART RX GPIO → 0
- UART RTS GPIO → 21
- UART CTS GPIO → 3
- UART baud → 115200
という事で・・・
ESP32-C3にしてコンパクトになりました。製作費も安い(というか全て手持ち部品)ですしね。。。



