gombeのブログ

マイコンの電子工作系PIC32/KiCad/C/C++/3D/

RISC-Vのk210というマイコンでQuakeやDOOM, MMDを動かす

本題は後半です。

k210とは

AIマイコンで、画像処理特に認識動作が高速なのが特徴です。

人の顔検出がヌルヌルにかつリアルタイムに動きます。

これ結構すごくて、RaspberryPi用にうまく書いても、普通は性能不足で数fpsくらい、滑らかに見せるためには別に動体検出などを組み合わせることも多いようですが、k210だと検出機能だけでヌルヌルに検出できます。

これは、KPUという画像のCNNに特化したプロセッサが搭載されているためで、これにより学習済みの顔検出のモデルを用いて高速に行うことができるという原理です。

CNNとは

畳み込みニューラルネットワークとよばれていて、かんたんに言えば、様々な畳み込みのフィルタをかけながらニューラルネットワークで画像を処理することを指します。

畳み込みのフィルタは例えばエッジ検出や縦線検出、横線検出などを行うことができます。それらの画像の特徴をニューラルに入力し、識別や検知など様々な仕事を行います(最後説明雑ですすみません。)

ニューラルネットワークとは、かんたんに言えば人間の脳の仕組みを真似した組織をコンピュータに行わせます。誤差逆伝搬法により、すべての画像に対し、誤差が最小になるようにウェイトを調整することで、目的の出力を得られるようにします。

Convolutional neural network - Wikipedia

CNNによる画像認識は応用幅が広いことで知られています。顔検知以外にも、ポーズ推定、オブジェクト検出、識別などです。

その他k210の特徴

なんと言ってもその価格でしょうか、$8からSoCが、評価ボードが$18です。nvideaのやつは評価ボードで$99なんで、安いですね。評価ボードにはカメラとLCDがつきます。8MBのSRAMによる限界があるものの、多くのモデルが動かせるようです。

SoCはesp32などと同じく単体で動くように設計されています。

あとCPUはRISC-Vを使っている点も面白いです。このチップは最近話題となっていて、MIPSなどと同じくシンプルな命令セットで、オープンなISRであることが特徴です。

k210はRISC-VのMMUのSV39にも対応しており、UNIXベースのOSのサポートも理論上可能です。まだないけど(オイ

本題、QuakeDOOMを動かしてみる

DOOMマイコンのメモリに余裕がある場合、多くポートされるゲームの一種です。

メモリが4MB以上必要と、かなり大食いですが、k210には6MBのGPメモリ(一般用途のメモリ)があるので余裕です。

また、これらのメモリがSRAMで構成されていることにより、アクセスが非常に高速です。esp32のポートでは、このアクセスのせいでフレームレートが振るわず、プレイには耐え難いものでした。

Quakeは、最低8MBのメモリを必要とします。そのためGP以外にもAI用のメモリを使うことで8MB確保しています。そのためKPUは使えません。(Quakeで使うつもりもなかった)。あともう一つ、完全な3DなのでソフトウェアレンダリングのためのCPUリソースもDOOMより厳しい制約があります。ただ、これも400MHzのRISC-Vでは余裕でした。フレームレートも安定してプレイ可能でした。おそらくメモリ周りが早い恩恵も受けたのだと思います。

QuakeだけDualShock2のコントローラに対応させ、プレイできるようにしたので良かったらプレイしてみてください。DOOMはデモ専用です。プレイもソースコード追加すればきっといけます。

github.com

DOOMです。こちらはかなり余裕があるようです。

GitHub - elect-gombe/k210-doom: DOOM for k210

MMDも移植しました。ランタイムローダが入っているので、SDにMMDモデル突っ込むと表示されます。あとモーション読み込んで踊ります。

GitHub - elect-gombe/k210_mmd: 3D rendering test