こんにちは。 本記事は、1ヶ月間ブログ連投チャレンジの2日目の記事です。
以前、小型擬似オムニホイールロボットと称して、5x5 cmサイズのxy方向に自由移動できるロボットを作成していました。 実はこのロボットは移動のテスト用で、最終的には「群ロボット」を目指したプロトタイプだったのです。
今回は、その「群ロボット」の勉強を目的とした基板を開発中だという話です。
目的
群ロボットを勉強するために、基礎的な機能を持ったロボットを試作することが今回の目的です。それにあたり、すでに開発済みの「IoT開発基板を拡張して実装する」こと、足回りを単体でも動かせるように「モジュール化する」こと、今後の他の開発用に「初使用のICをテストする」ことを考慮して設計しました。
仕様
必須機能
群ロボットでは「移動」でき、「近距離通信」でき、「個々を判別」できる必要があると私は考えました。そのうち移動手段については、ほとんどの既存の群ロボットでは2輪駆動が採用されておます。それに対し私のでは、小型でもxy方向自由に動ける特性を備えられたらなと考えています。
それ以外に考慮が必要そうなことは、ユニット数が増えるにつれてプログラムの書き込みが面倒になったり、各個体の状態を直感的に理解できるUIで無いと開発が困難になることですかね。
したがって要件を実現するために、下記の5つの機能を必須としたいと思います。
- 高自由度の移動が実現できる
- ユニット同士で近距離通信が可能
- まとめて書き込みできる → ESP32のOTA + Arduino IDEのconsole + shell script組む
- 視覚的に状態を理解できる
- HW的に、基板側でもDIPスイッチで個体番号を設定可能
十分機能
十分機能としては、後々の拡張性を考慮することです。群ロボットの表現の幅を広げることと、移動精度が悪いときに対処できるようにしたいと考えています。
- 追加実装用に、ちょっとしたアクチュエータ(サーボ2つ)を動作させられる
- エンコーダでの移動距離読み取りに対応する
検証機能
その他に機能検証を目的に、下記のICについて回路を構築してみます。
- BNO085の動作確認(ちょい高めの9軸センサ)
- Type-CとCP2104でのプログラム書き込み実験
- 外部電源からMCP73855T-Iを用いたLiPoの充電
実現方法
上記の仕様で、回路+基板を適当に作ってみました。まだ動作確認をしていないものばかりなので、正確な回路ではない可能性が高いです!
ちなみに、これから紹介する基板は、順に一番下から重ねていくイメージです。またバッテリーの保存場所を考慮し忘れたのだ。
1. GroveコネクタでI2C通信するだけで動作できる足回り
必須機能を達成するため、移動関連機能をメインとするモジュールを作成しました。他の用途にも応用できるモジュールにするために、別回路からI2Cで制御 + 別電源で動作するようにします。そのために、モジュール内にマイコン(ATMEGA382)を搭載させます。一応SPI通信にも対応。
またモータ動作部では、ノイズを軽減するために電源分離を行うようにします。自由度の高い移動を実現するために4つの小型モータを使用し、小型擬似オムニホイール的に移動します。その他には、2個の2相エンコーダを読み込めるようにしました。
ちょっとしたこだわりとしては、モータの取付箇所はケーブルが短くても済むように四隅にコネクタを用意したことです。
2. 群ロボット用のモジュールを作成
これは既存のIoT開発基板の拡張として使用可能にします。IoT開発基板はESP32を搭載しているので、OTAでの書き込みができます。実装機能は、隣接する4方向に対する赤外線送受信器と、個体番号指定用のDIPスイッチ、状態確認用のフルカラーLED(WS2812B)、サーボ接続用ピンです。
3. ベース基板の更新に挑戦
既存のIoT開発基板のベース部分を用いる話をしていましたが、初使用のICについて動作確認をするために更新を試みます。今までと同様、ESP32を用いて制御します。
新バージョンのベース基板では、Type-CとCP2104による書き込み機能の内蔵化、MCP73855によるLiPoバッテリー(3.7v)の充電機能の検証、9軸センサであるBMO085の動作チェックを行います。そしてほぼ確実に動かないと予想しています。
まあ、BNO085さえ動作してくれれば、普段の移動体開発の精度向上のために役立ってくれそうです。
おわりに
一応、inventHubのリンクを貼っておきます。 inventhub.io
この基板については別のやつを開発できてから、発注しようと考えてます。部品は先に購入していたのですが、間違って京都の実家に送ってしまう失態。。。緊急事態宣言で取りに行けへんやん。。。
まだまだ実装でやり残しているところは沢山あり、今後は下記のことについて記事にしていくかと思います。
- モータ取り付け用の3Dモデルの生成
- 赤外線通信のテストしてない
- shellで自動的に全ユニットへプログラムを書き込み
- 実際に群ロボットとして動作
- 最終目標の実装(内緒)
それではまた。