ししかわです。
社員研修の一環で二足歩行ロボットを作って、競技会「Humanoid Autonomous Challenge(HAC)」に参加します。
前回はロボットキット「ROBOTIS ENGINEER KIT1」を組み立てました。
ハードウェアを選定する
MAX-E1だけではフィールドを認識してルートを計算したり、ボールを触りに行ったりといった自律的な制御ができません。HACを攻略するためには自律制御のためのハードウェアをまずは選定しなくてはいけません。具体的にはマイコンやシングルボードコンピュータ、追加のセンサなどですね。
普段の開発ではHACのルールから要求事項を読み解き、システムが満たすべき要件を洗い出して…と進めますが、shotaさんが既にシステム構成について整理されていますのでありがたく便乗します!

HACのシステムは「制御」「認識」「プランニング」の3つのモジュールで構成できます。各モジュールの機能要件(入力、処理、出力)はそれぞれ次のとおりです。
- 制御モジュール
- 入力:ロボットの行動目標
- 処理:ロボットを動かす(MAX-E1の歩行モーション再生)
- 出力:ロボットの行動結果(どれだけ進んだか)
- 認識モジュール
- 入力: カメラ画像、ロボットの行動結果
- 処理:画像認識(ボールの位置、パネルの縁の位置)、自己位置推定
- 出力:認識結果(ロボットの位置と姿勢、ボールの位置)
- プランニングモジュール
- 入力:認識結果
- 処理:フィールドの管理(パネルの並び方、探索済みかどうか)、ボールの管理(触れたかどうか)
- 出力:ロボットの行動目標
これらの要件を満たせるハードウェアはどんなものでしょうか。制御と認識の仕事をこなすために、少なくとも次の条件を満たす必要があるでしょう。
- MAX-E1に指令を出せること
- シリアル通信でMAX-E1の制御ボード(CM-550)と接続します。
- 画像を取得できること
- カメラを搭載します。奥行きも取れるとなお良いです。
また、競技を行う上で非機能要件(耐久性、重さ、使いやすさ、etc.)も重要になってきます。今回は上記に加えて次の条件でハードウェアを探しました。
- MAX-E1の大幅な改造を必要としないこと
- このブログを見た方が再現しやすくするため、フレームを切ったり穴を開けたりはせずに済むようにします。
- カメラはロボットの頭を換装して取り付けたいです。そのほかのボード等はロボットの胸部フレーム内に収まるサイズが理想です。
- 軽いこと
- 既存の歩行モーションに手を加えずに済ませたいため、追加のハードはなるべく軽くして、ロボットの歩行への影響を少なくします。
- 競技はロボット単体で完結して行えること
- HACのルール上、センシング以外の処理は外部マシンでもしてよいことになっていますが、競技中に必要な計算はロボット単体で完結してできるようにします。半分は構成要素を単純にすることで可用性を上げる狙い、半分はロマンです。
- 特に画像認識のためにそれなりのスペックが必要です。
- 入手性がよいこと
- このブログを見た方が再現しやすくするため、入手性のよいものを選定します。
さて、ハードウェアを探しますがなかなか大変です。
軽くて、カメラやシリアル通信ポートがついてて、画像認識もできて、取り回しもよいモジュールが必要です。そんな便利なモジュール…いったいどこにあるんだ…??
ん…?
ありました。
M5Stack UnitV2とは

M5Stack UnitV2はM5Stack社が販売する画像認識モジュールです。次のような特徴を持ちます。
- 画像認識機能が最初から組み込まれていて、すぐに使える
- ディープラーニング(CNN)による顔認識
- 特定の色や形の認識
- 認識結果をWiFiアクセスポイント経由やシリアル接続で送信できる
- PCとUSBケーブルで接続するだけで使える
- 小型(48*24*19mm)
- 軽量(18g)
まさに…HACの要件にぴったりです!画像認識やシリアル通信など機能面は申し分無いし、何よりロボットに簡単に組み込めるサイズ感が魅力ですね。
そしてこのM5Stack UnitV2、「すぐに使える!お手軽!」という点が強調されていますが、実は小型ながらArmプロセッサ(ARM Cortex-A7デュアルコア 1.2 GHz)を搭載していて、Linuxが動いています。つまりRaspberry Piなどと同類のArmアーキテクチャのシングルボードコンピュータです。
M5Stack UnitV2は本来はM5StackのコアモジュールやPCと連携させるための「ユニット」ですが、C++などでプログラムを書いてArm向けにビルドすれば、単独でも画像認識以外の様々な計算をさせられるはずです。もちろん、迷路の探索やロボットの制御プログラムも。公式が推奨する使い方からは外れますが、ハックしがいがありそうだと思いませんか?
ということで、今回はM5Stack UnitV2を使うことに決めました!
M5Stack UnitV2を組込みLinuxの開発ボードとして使い倒す
つまりはこうです #二足ロボ研修 pic.twitter.com/6IrnM7MYlY
— ししかわ/Shinya Ishikawa (@meganetaaan) July 13, 2021
次回以降の記事では「M5Stack UnitV2を(M5Stackのモジュールとしてではなく)スタンドアロンな組込みLinuxの開発ボードとして使い倒す」という、ニッチな解説を書いていきます。次のような内容になる予定です。
- 環境構築(下準備)…M5Stack UnitV2のビルトイン機能をオフにして、純粋なLinuxボードとして使えるようにします
- 環境構築(クロスコンパイル)…開発用Linux PCに、Arm向けのクロスコンパイル環境を構築します
- 最初のプログラム…DynamixelSDKなどの依存ライブラリを含めて最低限のプログラムをビルドし、動かしてみます
- ロボットの制御…DynamixelSDKを介してMAX-E1を動かします
- 画像認識…OpenCVを使って簡単な画像認識プログラムを動かします
以上です。二足ロボ研修のブログ更新情報は、アールティのマスコットキャラクター「ネコ店長」のツイッターアカウントで配信中です。ぜひフォローしてみてください!
→次の記事
