Sipeed社のMAix開発ボードによるロボット開発に向けた調査

人の顔や声を認識し、話しかけてくれたりおしゃべりできる、そんなロボットを作りたい。

これをスタンドアロンで、しかも安く手軽にできる!なんて可能性を秘めた、夢のようなボードが出てきたらしい。

その名もMAixシリーズ。

まず、試しに作ってみたロボットが、こちらの動画。

うちわに、松岡修造さんの顔を張り付けて色々と動かしています。

結構遅延なくしっかり顔を検知し、追尾できています。さすが、さわやか代表修造さん。

ちなみに、ロボットには「PLEN Project」様で公開されている、PLEN2 miniを3Dプリンタで印刷し、手元のサーボをくっつけたものを使いました。

この動画のPLEN君は、オリジナルにさらにサーボを3軸分追加することで、顔が色んな方向に動くようにしています。

さて、今回の主役であるMAixシリーズについて。

これはSipeed社から出ている開発ボードで、認識系の分野で最近熱い奴です。

というものも、この小ささでニューラルネットワーク演算専用のICが載っていて、今回のように顔検出もバッチリできるし、学習させれば色んなものを認識できるようになるらしいです。

そしてもっと驚くのがその値段で、なんと海外通販だと$20, 日本で購入しても3,000円ちょっとで買えてしまう、という点です。

こんなに安くて凄いんじゃ、まずは使ってみようじゃないか!

という事で、認識系の分野を全く知らないド素人の私が、ロボット開発に使えないか、ちょろっと調べてみた事をまとめてみました。

なお、勉強しながら記述しているため、この記事の内容に間違いがあったり、修正される可能性があります。なので、疑いの目を持ちながら読んで頂けると幸いです。

デバイスについて

認識系で最近よく耳にするのが「深層学習(DeepLearning)」と呼ばれるもので、機械学習の1種である「ニューラルネットワーク(Neural Network)」の階層を深めたアルゴリズムで構成されています。(※1)

その中でも、画像認識で実績のあるのが「CNN(Convolution Neural Network)」というものです。

さて、ここで最近注目されているデバイスが「Kendryte K210」というチップです。(※2)

Kendryte K210はRISC-V型のCPUが載っているのですが、冒頭でふれた通り、なんと別途CNN演算専用アクセラレータ(KPU)も載っており、画像認識を高速に実行することができます。

このKendryte K210に、カメラやマイク、LCDなどの周辺機器もそろえた開発ボードが、Sipeed社から出ている「MAixシリーズ」になります。

ちなみに、Sipeedは「しぴーど」、MAixは「まっくす」と読むっぽい?です。

開発ボードのラインナップは、現状次のような種類となっています。(※3)

MAix開発ボード比較より

上記表には載っていないDockとBitの違いとして、Dockにはファームを焼くとき便利なダウンローダ機構がついています。

また、同じKendryte K210を使った製品として「M5StickV」という製品も存在します。

スピーカーや小型の液晶もついていて、とてもコンパクトにまとまっているため「認識を手軽に試したい!」という方はこちらもオススメですよ。

「YOLO」って何?

さて、さっそくサンプルプログラムだ!と画像認識を試そうとすると、「YOLO」という単語をよく耳にします。

これは、CNNによる物体検出手法のひとつであり、他の手法と比べて以下のような利点・欠点があるようです。(※4, ※5)

利点

・シンプルなネットワーク構成で高速。
・背景と物体の区別がしやすい。
・一般化が可能。

欠点

・最先端の手法と比較して精度が低い。
・小さな物体の検出が困難。

精度が低いと言いつつ、最初の動画を見て頂くと分かる通り、結構しっかり顔を認識してくれています。

また、認識用のモデルデータを入れ替えたりすると、顔以外にも色々なものを認識できるようです。

例えば、学習済みの1000種類の物体を認識して、声で教えてくれるようなM5StickV作品が、ミクミンP様より公開されています。

さらには、動的に物体を学習させて、認識したらしゃべってくれる、なんていう物も作られたようです。

未来感が凄い!応用の可能性が色々とあって、ホントわくわくします!

ロボット開発に向けて

さて、今回はMAixシリーズをロボットの頭脳として使いたいと思っています。

そこで気になるのが、ペリフェラルの内容と、それを割り当て可能な空きポートの数です。

ロボットではボタンをつけたり、サーボ制御や各種センサと通信する必要があるため、回路設計の前に確認しておくべき内容になります。

まずは、Kendryte K210のデータシートを眺めてみます。(※6)

以下のようなアーキテクチャになっているようです。

先程登場したKPUがちゃんと載っていますね。

これに加え、UARTやPWM, I2C, SPI, I2Sなどの基本ペリフェラルもばっちりついています。

さらには、FFT専用の回路もあるので、音声をリアルタイムに周波数変換し、画像化して音声認識!みたいなこともできるのかしら。

それと、DVPはDigital Video Portの略で、カメラ画像なんかを処理するブロック、FPIOAはField Programmable IO Arrayの略で、ポートへの機能割り当てブロックです。

さて、次にMAix DockやMAix Bitの回路図を見つつ、各周辺機器との接続をまとめてみました。
(Multifuncitional IOのみ抜粋)

緑色が空きポート、赤色は使えるかも?なポート、灰色は他の周辺機器との接続で使用済みのポートです。(間違ってたらごめんね)

現在、MAix Dockを使って、PLEN2 miniの自作+改造を考えているため、PWM制御を13個独立してつなぎたいのですが、空きとしてはギリギリなんとかなる?(後述しますが、別の理由でダメぽ)

開発環境について

開発していく上で、開発環境や使用言語が気になるところです。

そこら辺の話は、Sipeed公式のこちらのWikiにまとまっています。

中国語と英語の2種類のドキュメントがありますが、英語版のドキュメントはまだ揃ってなかったりします。

なので、Google翻訳などで中国語版の情報を見ながら開発するのが吉かと思います。

また、最初の導入手順などは、「Qiita@tomitomi3」様がとても参考になりました。ありがとうございました!

おわりに

今回は、MAixシリーズの開発ボードについて、ロボット開発という観点で少し調べてみました。

いやー、使いこなせればホント色々できそうだなぁ、と感じます。

そんでね、PWMのAPIを見ていたら、なんとTimerが3つで、それぞれにチャンネルが4つしかない。つまり、12個のPWMまでしか制御できない!

今回は13個使いたいので、足りないじゃーん!となったので、I2Cの外付けサーボドライバを使うことを考えています。

【2019.9.15追記】
MAixボードを搭載したPLEN君を制作しました。こちらの記事にて、制作過程を紹介しています。

認識系の勉強もしないといかんなぁ…。

また進捗があれば、記事にしたいと思います。

では、また次回をお楽しみに。

引用元一覧

今回も、様々なサイト様で勉強させて頂きました。有用な情報、誠にありがとうございました。
※1: やさしい深層学習の原理
※2: Sipeed M1w dock suit: RISC-VのエッジAI+IoT開発ボードで顔認識を試してみた
※3: K210 development boards
※4: 【物体検出手法の歴史 : YOLOの紹介】
※5: YOLO (You Only Look Once):ディープラーニングによる一般物体検出手法
※6: Kendryte K210 Datasheet