新たな取り組み その1
自走ロボットを昔から製作したいと思っていて、何から始めたらいいのかな~と考えていました。
そこで、まずはゼロからラジコンを作ってみようと思い、ベースとなる車両(DEERC社 MN99S)を購入し、その制御にArduinoマイコン、位置センサー(加速度、ジャイロ)、ジョイスティック、RF通信モジュールなどを組み合わせることにしました。
これは別記事でアップしています。

一方でFPVドローンを趣味で飛ばしていて、その流れでフライトコントローラとして利用できるArduPilotなるフライトコードがあることを知りました。(ドローンを自作できる!!)
これは面白そうと思い調べると、Pixhawkという専用のハードウエアを使うことで構成できるようです。また、このArdupilotはドローン専用ではなくローバー(陸上探査機)にも対応していることがわかりました。
ドローンは空飛ぶので安全面とか法律面とか何かとハードル高いのですが、ローバーはもともとの目的にかなっていますし参入障壁低そうです。
*)Pixhawk2.4.8 Overview
https://ardupilot.org/copter/docs/common-pixhawk-overview.html
*)Ardupilot Rover
https://ardupilot.org/rover/
また、地上局用のPCソフト(Mission Planner)もオープンソースで提供されており、自作する環境は揃っていることがわかりました。これはなかなか面白そうです。
Mission PlannerとはPCとArduPilotをつなぐソフトウエアです。自動走行ルートなど設定できるようです。
*)Mission Planner
https://ardupilot.org/planner/docs/mission-planner-overview.html
まずPixhawk2.4.8(Aliexpressより)調達し、手始めに足回りとしてDCモータ2個使ったキットが家にあったのでそれで構成してみました。こんな感じ。

次はMissionPlannnerとpixhawkを接続するところかな。これから立ち上げます。
新たな取り組み その2
いろいろ調べていくとMissionPlannnerとPixhawkを無線通信するためのテレメトリ通信モジュールが必要だとわかりました。まあ自動運転させるのだから無線通信は必須ですね。
(立ち上げ時はUSBシリアルの有線でPCとPixhawk接続していました。)
しかし、このテレメトリモジュールを調べてみると結構なお値段が…….
Pixhawkやケーブル類を購入したので予算的には厳しく、どうしたものかとさらに調べるとラズパイとPixhawkをシリアル接続できることがわかりました。(これは朗報!!!)
Mission PlannnerはTCP接続をサポートしており、ラズパイとPC間はWifi通信とすることでテレメトリモジュールの代用にできそうです。
もちろん長距離での通信は無理ですが、まずは半径10m程度で使ってみるにはいけそうな気がします。
また、自動走行させる場合は位置情報の取得にGPSモジュールも必要とのことで、こちらもGPS/RTKに対応した精度の高いものは高くて買えないので、FPVドローン用のGPSモジュール(Betian社 BN-180)を流用することにしました。まずはこれで製作にとりかかります。
ちなみにモータESC(Itisyou社製の30A)は 2個、アマゾンで購入。

新たな取り組み その3
テレメトリ用にRaspi pico Wを当初採用しましたが、通信速度を上げられず実用に耐えられないので、Raspi3 Model B にて通信することにしました。省スペース、省電力のRaspi Pico Wに期待したのですがちょっと厳しかった。(プログラムの作りの問題とは思いますが今回は深堀は断念します。)
TCP IP通信Pythonプログラムは、ChatGPT先生のサポートのおかけで割りとサクッと作れました。
Raspiを起動し、ノートPCとVNCで接続、Raspi上でPythonプログラムを走らせてからPC上のMission PlannerとPixhawkをWiFi接続します。

だいたい雰囲気をつかめてきました。
屋外で自動運転も試してみたいので次はこの環境をラジコンに移植しようかと思います。
新たな取り組み その4
MN99ラジコンカーをベース車両として立ち上げました。

これで自動運転にチャレンジしたところ、GPSの認識精度がわるいのか、設定したway pointとは違った方向に走り出す。
Mission PlannerはGuided Modeにしてスタート、アクセルは回転し動きだすが、ステアリング操作が思うようにいっていない。蛇行運転というかまっすぐ進まない。
また、iPhoneをwifiルータとして利用しているがラジコンカーが少し遠くに行ってしまうと、すぐに切れてしまうので、こちらの改善も必要。
新たな取り組み その5
いろいろと調べているとテレメトリ用に ESP8266 wifiモジュールが使えるようです。
ESP8266 wifi telemetry — Rover documentation
専用ファームウエアも提供されているようなのでwifi通信はこれを試してみようと思います。
早速、AmazonにてFreenove ESP8266 moduleを購入。

この製品の仕様は下記参照ください。
GitHub – Freenove/Freenove_ESP8266_Board: Apply to FNK0076
次にArdupilotの手順書に従いESP8266をローバーに組み込みUDP接続を試みましたがMavlink通信できません。Raspi経由ではTCP接続できているので、UDPに起因した何かか、PC/Pixhawkの設定が悪いのか、Google検索、ChatGPT先生に聞きながらいろいろ原因を探るも判明せず。
そもそもPixhawkからMavlink信号が出ているのかわからなかったので、簡易オシロでESP8266のRX端子の波形を見たところ、Pixhawkから信号は来ていました。が、なんと信号のローレベルが1.3Vに持ち上がっていました。これでは通信できませんね。
Freenove-ESP8266(にかかわらず他社製でも同じかも)の構成として、PCからファームウエアをESP8266に書き込むためにUSBシリアル変換IC(CH340)が搭載されており、このCH340のシリアル端子がESP8266のシリアル端子に接続されています。
CH340Cは、USBシリアル変換ICとして、通常5Vで動作します。5V電源が供給されると、CH340CのTXピンが出力状態になります(未使用時でもハイインピーダンスではなくアクティブ出力)。同時にPixhawkのTX信号もアクティブで、両方がESP8266のRXピンに接続されているため、信号のコンフリクトが発生。これにより、Pixhawkの信号が正しく伝わらず、**中間レベルの電圧**が発生していたということのようです。
ソフト的にCH340Cの出力をハイインピーダンスにできなさそうなので、CH340のシリアル端子の足上げをしたところ無事UDP通信ができました。ここまで2日かかってしまった。最初から波形見ればよかったのですが。。。

↑Freenove-ESP8266を背面から見た写真(足上げした状態)
ファームの書き換えはUSB経由でできなくなりましたが、まあテレメトリ専用で今後書き換えはしないため特に問題はないと思います。これでようやく次のステップです。
また、GNSSとしして GPS(アメリカ)、 GLONASS(ロシア)、 Galileo(EU)にも対応しているM8Nを調達しました。これで位置の認識精度が上がると良いが。。。
新たな取り組み その6
組み込み終わりました。↓こんな感じになりました。

さあ、試走です。
いい感じに仕上がりました。
次は少しMavlinkについて学習しようかと思います。
せっかくラズパイと通信できるので障害物回避を組み込めないかと考えています。