FPGA×ROSでFPGAをプラットフォームとしたロボットを実現するプロジェクトOpenReroc

はじめに

自律ロボットの発展

最近はロボットに対する注目がかなり高まっているように思います。 特に、産業用ロボットのようなものではなく、ロボット自身が周囲の状況を把握し動作するような「自律ロボット」の発展が目覚しいように思えます。(完全に主観的笑) 流行りのロボットといえば、おそらく皆さんご存知のお掃除ロボットのルンバがあると思います。また、教育用の自律走行ロボットとしてはこのルンバを応用した、Turtlebotというものがあります(下の写真)。
実はこのロボットはバッテリ駆動ですが、PC1台を搭載していて電力もそれなりに消費するため、連続駆動時間はそれほどありません。PCを搭載するのにもいろいろ理由がありますが、一番はロボットの性能の問題です。ロボットが自律的に行動するためにはさまざまな知的情報処理(おもに画像処理)が必要で、たいていその処理のどれもが非常に膨大な処理量です。つまりPCほど高性能なCPUを搭載しないと、処理しきれないというわけですね。

画像引用:http://www.nihonbinary.co.jp/Products/Robot/TurtleBot.html

低い電力のなかでも高い処理性能のためにFPGAを・・・!

電力性能比が一般的に高いといわれているFPGAであれば、バッテリ駆動で限られた電力制約のなかでも性能を発揮しうるプラットフォームです。
ただ、このFPGAは開発がとても大変。ロボットを開発するということは、ロボットを動かすための物理的な原理だとか、電気的な知識のほかに、自律行動させるためのアルゴリズムや制御構造を考慮しなければなりません。とてもではありませんが、FPGAを導入する余裕がないというのが現状であると思います。せっかくFPGAを使えばいいことがあるのに使わないのはもったいない。

OpenRerocとは

OpenReroc (Open source Reconfigurable Robot Component)はFPGAの回路をロボットのためのコンポーネントとして開発するための研究プロジェクトです(ちなみに筆者も開発メンバー)。もう少し具体的にすると、ロボット向けのソフトウェアプラットフォームであるROSで使用できるFPGAの回路を含めたパッケージをリリースします。ROSを用いてFPGAの回路をコンポーネント化をすることで、ロボットシステムへのFPGA導入を容易にするというモチベーションです。図に示しているのはSoC(FPGA+CPU)上に構築したシステム例です。破線で囲まれた四角1つ1つがFPGAの回路を含むコンポーネントで、CPUサイドではROSとUbuntuが動作します。FPGAの回路を含むコンポーネントは他のROSノードと同等に通信ができますのでユーザはFPGAを意識することなくFPGAを導入できます。

今回はこのプロジェクトのROSパッケージであるopenreroc_pwmを紹介します。

openreroc_pwmの導入

openreroc_pwmとは

openreroc_pwmはモータのPWM制御を行うためのコンポーネントです。 openreroc_pwmは以下のサイトから入手可能です。

  • ROSのwiki:http://www.ros.org/browse/details.php?distro=indigo&name=openreroc_pwm
  • Github:https://github.com/Kumikomi/openreroc_pwm

openreroc_pwmのシステム構成

openreroc_pwmではopenreroc_pwmというトピックにモータへのパラメータを入力することによってモータの回転方向と回転速度を設定することができます。 このコンポーネントはROSにおいてsample_inputopenreroc_pwmの2つのノードを起動することで動作検証が可能です。 また、コンポーネントのより詳細な要素は以下のとおりです。

  • mortor_ctl.v : CPUとFPGAのデータ通信を行なうためのインターフェイス
  • pwm_ctl.v : PWMのアルゴリズムの実装
  • openreroc_pwm.cpp : 他のノードと通信するためのROSノードを記述したcpp

準備するもの

openreroc_pwmを導入する際の要求環境です。なお、ここから説明することは、下記に示した要求環境が整っていることを前提とします。

ハードウェア