ロボットでも注目される FPGA ⼊⾨ (1)

みなさんはロボットと聞いて何をイメージするでしょうか?
人型ロボットや動物型ロボット、もしかしたら空飛ぶロボットでしょうか。工場で働く産業用ロボット・災害救助ロボットや、お料理ロボット・お掃除ロボットをイメージするかもしれません。

色々なロボットがありますが、みなさんもご存じの通り、現在のロボットは「特定の作業は人間より得意(高精度・高速)だけど、人間の作業の代わりをやるのは難しい」という状況です。

近い将来、ロボットがもっと知的になってもらい社会で活躍するためには、どうしたらよいのでしょうか。これに対して、FPGA を使うことで解決できないでしょうか?

ACRi ブログの2番目のコースでは、「なぜロボットに FPGA を導入するのか?」を考えるところから始め、FPGA をロボットシステムに活用する事例を通じて FPGA の有効な活用法を紹介し、更に将来のロボットの発展に貢献する道を探っていきたいと思います。

なぜロボットで FPGA か?

現在、ロボットの知能に当たる部分が急速に進化しています。特に AI・画像認識によってロボットの知性が向上しています。 ロボットの知能はコンピュータによって実現されますが、実際は、コンピュータで動くソフトウェアがロボットの知能を実現しています。

一方 FPGA の強みを簡単に言うと、普通のソフトウェアでは時間がかかる処理をハードウェアで並列処理して高速化することです。そのため、例えば、ロボットの知能を実現するソフトウェアを高速化することで、今までのロボットでは不可能だった高速な応答速度を実現できるかもしれません。

今回は、FPGA を用いることでロボットの知性を向上させる2つのアプローチを考えてみます。

アプローチ (1) ロボット全体を眺めて FPGA を導入する(マクロな視点)

最初のアプローチは、現状のロボットシステムの全体を見て、どこに FPGA を活用できるか考える方針です。マクロな視点、トップダウンといっても良いでしょう。

ロボットの知能は、いくつかのソフトウェア部品の集合体で構成されます。こうしたソフトウェアの開発に使われるプラットフォーム (基盤) として、広く普及しているのが、ROS (Robot Operating System) です。ROS はいくつかのソフトウェア部品がお互いに通信しながら、全体としてロボットの知能を実現します。一つ一つのソフトウェア部品が交換可能になっているのが ROS の良いところです。

ROS におけるロボット用のソフトウェア部品の例としては、加速度・ジャイロセンサのセンサ値入力、USB カメラからの画像入力、画像処理や画像認識、センサ値からの姿勢推定・位置推定、3次元座標の変換、地図作成と自己位置推定 (SLAM)、 行動計画、 クラウド・データベースとの連携、モータ出力制御、開発のためのモニタ表示、テストデータ入力、ログデータ記録・・・などなど、多くがあります。

しかしこれらの部品を組み合わせてロボットシステムを構築する際、あるソフトウェア部品の処理に時間がかかると、そこが性能のボトルネックになってしまいます。 そして現状、時間がかかる部品としては、画像認識処理や SLAM 処理が挙げられます。そして、こうした部品がロボットシステム全体の性能向上の妨げとなってしまいます。

こうした処理を速くするにはどうしたらよいのでしょうか?速いマイクロプロセッサ (CPU) をたくさん使えばよい。確かにそうなのですが、消費電力が上がってしまうのが問題です。消費電力が上がると、バッテリーの持ちが悪くなるため、ロボットに大きな重いバッテリーを搭載しないといけなくなります。

どうやって電力を下げればよいのでしょうか? ここで FPGA の活用を考えたいと思います。

FPGA は、ハードウェアの並列処理によって、ソフトウェアでは実現できない、高性能な処理を、低い消費電力で実現できる可能性があります。アプリケーションの種類によりますが、特に並列化が容易な画像処理では数10倍から数100倍程度の性能電力比の向上が可能です。

アプローチ (1) の課題

こんな素晴らしい FPGA なのだから、すぐにロボットに導入したらよいじゃないか。と思うかもしれません。

しかし課題があります。 通常、 ロボットシステム はソフトウェアで開発されています。それらのソフトウェアに相当する FPGA で動作可能な高性能回路を開発するのは、開発環境が近年充実してきたとはいえ、かなりの経験が必要です。

また、FPGA で全てのロボットソフトウェアをハードウェア化することは規模の面から現実的ではありません。FPGA で効率よくハードウェア処理して高速化できる部分は、膨大なロボットソフトウェアの一部ですから、FPGA とソフトウェアとを組み合わせて使う必要があります。そのため、ハードウェアとソフトウェアの間の接続 (データ通信と処理制御) が必要になります。

そのため、ロボットに FPGA を導入し、更にソフトウェアの処理を加速する、ことは多くの知識と経験を基にした開発ステップを踏む必要があり、一般的には困難です。

アプローチ(2) FPGA の強みを活用する方法を考える (ミクロな視点)

もう一つのアプローチは、現状の枠組みからスタートするのではなく、FPGA の強みを活用する方法を考えていく、という方針です。 ミクロな視点、ボトムアップです。

FPGAそのものの強みとは何でしょうか?

3つの観点から考えたいと思います。
1)電気信号レベルの入出力
2)多数の入出力
3)自由なメモリ階層・処理アーキテクチャ

まず第1の観点としては、電気信号の入出力と処理が、非常に近い場所にあることです。FPGA の構造を見ると、入出力 (I/O) ブロックは、ロジックブロックとプログラマブル配線を通じて直結可能です。

すなわち FPGA の入力ピンの電圧が変化してから、最短だと1クロック程度で出力ピンの信号に反映することができるわけです。例えば 100MHz クロックで動作する回路であれば、10ns (10ナノ秒:1ナノ秒は1秒の10億分の1) 程度の応答時間です。更に、組み合わせ回路だけで組めば1クロックを下回ることも可能です。これは通常のマイコン等では実現できない応答時間ですから、まさに FPGA の強みを活用できるポイントであるといえます。

第2の観点は、非常の多くの入出力 (I/O) ピンやロジックブロックがあるため、独立した入出力処理を並列に行うことができることです。例えば ZedboardZybo-Z7, PYNQ-Z1, Z2 といった多くの FPGA 基板に搭載されている Zynq Z7020 というデバイスでは、FPGA のロジックブロックに直結し自由に接続が変えられる I/O ピンが200本 (CLG484パッケージの場合) あります。更に大型の FPGA だと数千本の I/O ピンがあります。

通常のマイコンでは役割を固定されたピンがほとんど、汎用の入出力 (GPIO, General Purpose I/O) が多くあるわけではありません。しかも、汎用の入出力はソフトウェアからのポーリング、もしくは割り込みを契機としたソフトウェア起動で用いるために、応答時間は速くてもマイクロ秒程度になります。また他の割り込み処理中などの事情で、 割り込み不可能なソフトウェアが走っている場合は更に応答時間が遅れることとなり、リアルタイム応答(注1)が不可能になります。

つまり、FPGA の第1の利点と第2の利点を組み合わせると、 ロボットの制御システムを構築するために必要な 「 厳密なハードリアルタイム性 (注1) を保証しつつ、多くの独立した入出力処理を並列に行う」ことが容易に行えることがわかります。これをソフトウェアで実現するのは、ちょっと考えてみるとわかりますが結構厄介です。

例として、 カメラとセンサの入力に応じて、何らかのモータの出力を制御するアプリケーションを考えます。

上図の左に示すように、マイコンとソフトウェアで複数の入出力を簡単に扱うためには、OS 等を用いて CPU で仮想的に複数のソフトウェア (カメラ入力制御処理・センサ入力制御処理・モータ出力制御処理) を実行する必要があります。この例では単純ですが、実際のシステムははるかに複雑であり、数多くのセンサや通信インターフェイス等の入出力デバイスにおいて入力が同時に発生した場合はどうするか、などを考える必要があります。

一方、図の右に示すように、FPGA はそれぞれの入出力に対して複数の処理回路を独立して動かすことが可能なので、お互いの処理が干渉しないシステムを作ることが容易なのです。

第3の観点は、自由なメモリ階層と処理アーキテクチャです。ACRi が対象とする、Adaptive なComputing を可能とするアーキテクチャと言っても良いでしょう。

先ほどのアプリケーションの例で、左側の図 (マイコン+ソフト) では CPU はバスを介して各入出力デバイスにアクセスする構成となっています。これは、ハードウェアが固定であることが前提なので、共通信号線 (バス) を用意して、それ (バス) を経由して各入出力デバイスにアクセスするアーキテクチャを決めたわけです。図でメモリは省略されていますが、CPU コアがメモリにどのようにアクセスするか、キャッシュメモリをどう配置するか、という観点のメモリ階層も固定されています。

一方、右側の図では、各処理の間の接続はバスではなく専用線で接続しています。このアプリケーション例では、カメラとセンサの入力に応じて、何らかのモータ出力制御をするということですから、余計なバス・アーキテクチャは不要なわけです。また FPGA には小規模ですが SRAM も搭載されており、回路と直結することができます。すなわち、アプリケーションに特化したメモリ階層と、最適な回路を構成して処理できるわけです。

注1:なお、ここでいう「リアルタイム」とは、あらかじめ設定した時刻までに確実に処理・応答を完了するという意味の厳密なハードリアルタイムであり、ロボットの制御システムを構築するために必要な性質です。

アプローチ (2) の課題

こちらのアプローチにおいても、マイコン+ソフトによるシステムと比べて FPGA は良いことばかりなのだから、使えばいいじゃん、なんで使わないの?と思うかもしれませんが、やはり課題があります。

まず各種センサなどのデバイスと FPGA との電気信号レベルでの接続というのは回路の設計実装に非常に時間がかかります。FPGA 回路の部品として流通していれば良いのですが、現状ではほとんど期待できません。

また処理回路の間の接続にも標準があるわけではないので、何らかの接続規格を当該ロボットシステムの開発プロジェクトのために決めて、それに合わせた部品を作っていく必要があります。

以上をまとめると、ともかく FPGA の回路の開発に時間がかかるし、部品も流通していない。誰かの作った部品は動くかもしれないけど、動く保証はない、というのが課題です。

まとめ

今回は、ロボットシステムにおいてFPGAを導入することのメリットと、そのための2つのアプローチを紹介しました。

FPGA を導入すると「今までのロボットでは不可能だった高速な応答速度を実現 」できる可能性があります。

その一方、現状のロボットシステムのソフトウェア (ROS) システムの中に FPGA を入れるためには 多くの知識と経験を基にした開発ステップを踏む必要があり、一般的には困難です。 また、FPGA の利点を活かすと 「 厳密なハードリアルタイム性 を保証しつつ、多くの独立した入出力処理を並列に行う」 ことが可能なのですが、開発設計の環境が整備されているわけではないという問題があります。

次回以降は、これらの問題への対策について、まずは小さなロボットシステムのサブシステムを開発する事例を紹介しながら具体的に考えていきたいと思います。お楽しみに!

東海大学情報通信学部組込みソフトウェア工学科
大川猛

タイトルとURLをコピーしました