試作1号機の構成
ルンバコントローラ(PC)とルンバに載せたラズパイ4で、ルンバのリモート制御を実現しました。ラズパイを使うメリットは、Web通信だとかカメラを簡単に使えるとかいったリソース利用がかなり便利ですね。ただ、ラズパイの消費電流が1A以上になるのが普通なので、ルンバのリチウムイオン電源を利用できなく別電源を搭載する必要があります
試作2号機の構成
試作1号の電源問題を解決しようと、ルンバからの電源供給回路を採用したものです。消費電流を抑えるために、ルンバコントローラ(PC)とルンバ間の通信にESP32を採用し、実際の細かな制御はRL-78が担ってます。ESP32にRL-78の制御を担わせて1ケで制御できるとは思いますが、ESP32のハードウエアを自在に使いこなすことは、現在オープンにされているデータシートでは相当試行錯誤するでしょうね。私は無理と判断して、通信部に特化させて利用しています
この構成で囲まれた走行経路内で複数台のルンバを衝突することなく走行させることまではできました
ルンバ側からのエラーや状態をリアルタイムでルンバコントローラ(PC)へ上げようと考えてWebsocketで双方向通信としています。PC側ではRatchetのWebsocketと、ESP32側ではArduinoのライブラリをいくつか検討し「WebSockets2_Generic」を利用させて頂きました
ただ、ルンバからのエラーなどリアルタイム取得を目指して双方向通信を行いましたが、複数台のルンバを1台のPCでコントロールする場合、ルンバの各状態によって他のルンバの状態をPCから問い合わせる必要が頻繁に起きました。そういった状況では、双方向通信とせずPCから数10ms間隔で問い合わせすればよさそうな感じはしています(エラーならルンバ自身で停止するなりすればOK)
試作2号機の備忘録
記憶が定かでないので、以下は戯言で受け取ってください(今後、再確認して対応する検討課題です)
・私の間違いもあるので断言できませんが、Websocketに関してバイナリ通信にキチンと対応しているものは無かったように感じます
・Ratchetでバイナリデータを送信する関数はない。バイナリデータを送信するにはソースの関数に引数追加すれば可能
・Ratchetでテキスト送信関数を使いバイナリデータの送受信は可能(仕様的に緩いのかな)
試作3号機の検討
よく ROS(2)、LiDAR、IMU をつかって走行制御させる事例があります。ただ、LiDARのコストがまだ高いこともあって、試作機1号ではカメラ、2号では赤外線センサ( or 距離センサ)を使った走行制御を行っています。試作3号は ROS(2)、LiDAR、IMUを使ったものを考えています