- 山科 和史
- 株式会社 日立製作所 研究開発グループ
機械イノベーションセンタ
- 伊藤 洋
- 株式会社 日立製作所 研究開発グループ
機械イノベーションセンタ
研究員
※所属、役職は公開当時のものです。
工場等での定型業務では
広く使われるようになっているロボット。
だが、ひとつひとつの動作を
プログラミングする必要があるうえ、
“予想外”の動きには素早く反応できないため、
ロボットの用途は限られた領域に留まっている。
深層学習とFPGA(Field-Programmable Gate Array)を
組み合わせた技術を進化させることで、
この課題を解決し、
人とロボットが共生する社会を作ろうとしている
若き研究者たちがいる。
機械イノベーションセンタロボティクス研究部の
伊藤 洋研究員と山科 和史の二人に、
その取り組みを聞いた。
(2020年6月23日 公開)
ロボットをより柔軟に、
より高速に動かす
- 伊藤
- 深層学習、いわゆるAIを使ってロボットに何らかの動作をさせる研究をしています。たとえば「ペットボトルを取る」動作をさせたいとすると、従来のロボットは、カメラでペットボトルの位置を認識して、それがどこにあるのか、そこに向かってロボットの手をどう伸ばすのかなどを、ひとつひとつ人がプログラミングして動かしています。これをリモコンで操作したり、子どもの手を取って教えるように手取り足取りロボットに教えてあげたりと、ロボットが自分の状態(カメラや、モータの情報)から動作を学習して同じ動きをできるようにする技術の開発をしています。少し状況が変わっても対応可能な、たとえばペットボトルのつかみ方を教えれば水筒やお菓子など、ほかのモノも取れるようになる知能化の研究をしています。
- 山科
- 伊藤さんは深層学習を使って原理検証や、その動きの基本的な部分を作っているんですが、僕はそれを実装するための技術開発を行っています。深層学習を用いた演算は、普通の演算より時間がかかります。そこを高速化するためのシステム作り、組込みコンピュータ作りが僕の担当です。
僕が知る限りでは、ロボットの研究では、アルゴリズムの開発と実用化との間にかなり差があります。1回動作するのに計算時間や実行時間が十数秒かかる例も珍しくありません。僕はロボット自体が専門ではなく組込みシステムやコンピュータアーキテクチャが専門なので、そういう視点で見ると、計算時間をどうやって短縮すればよいかを考えたくなります。実用化を踏まえた性能向上、システム統合が、僕らがやるべき仕事かなと思っています。
深層学習で
動作のプログラミングを不要に
- 伊藤
- 深層学習を用いて、プログラミング不要でロボットの全身を制御して複雑な動作をさせる研究として、まず、ドアを開けるロボットを開発しました*1。ドアを認識すると、ドアを開けられるポジションに移動して、腕を伸ばしてドアノブをつかんで回して、ドアを開けて通過するロボットです。リモコン操作や手取り足取り動かすことで動作を学習させて、ロボットが自律的にドアを開けられるようにしました。
- 伊藤
- ロボットでAIを利用する場合、これまではカメラで物体認識をして位置を検出するなど、1つのセンサの処理で閉じていましたが、ドア開けロボットでは、カメラからの画像とロボットの関節角と、モータの負荷状態を表す電流値を全部入力して学習させることで、少し状態が違っていても対応できるようになりました。
ドア開けロボットは、まずはスモールスケールから始めました。最初は右腕だけのロボットアームと、簡単なUSBカメラだけで機能試験をしました。それがうまくいったので、次は、大人と同じくらいの身長の人型ロボットを作って、それでドア開けをさせる研究をしました。それができると、現在の小さなロボットにしました。
一番大変だったのは、システムのつなぎ合わせです。ロボットを動かすには、マイコン、機構、制御ソフトウェアが必要で、その上にAIがあります。そのどれか1つでも間違っているとロボットは動かないんです。たとえば、いくらAIが指令を出してもモータの制御がおかしかったらロボットはカクカク動いて望んだ動作になりません。全体の統合が一番難しく、最初は、AIはちゃんとした結果を出しているのにロボットがちゃんと動かず、どこが悪いんだろうと、ひたすら一つ一つのシステムのつなぎ合わせを調べていました。
深層学習を高速化して
落ちるモノをつかむロボットを実現
- 山科
- 僕は学生時代から組込みシステムの中でもFPGAというデバイスの使いこなしや設計手法を専門に研究していたんですが、当時の部長に僕の専門分野に興味を持っていただいたようでした。また、自分自身もFPGAとロボットの技術を組み合わせることで何か面白いことができないかと考えていたので、この研究プロジェクトに加わりました。
- 伊藤
- 僕がドア開けロボットを作った後、ロボティクス研究部の当時の部長が、次は何が必要なんだろうと考えて、AIは動作させるのに時間がかかる点を克服したい、リアルタイム性をもっと追求したいと考えて、2人で組んでやってみたら? と言われたのが始まりですね。
- 山科
- まず、FPGAを用いて深層学習で得た結果を実行する推論演算を高速化しました。これは、通常ならソフトウェアで実行していた部分を専用の演算ハードウェアに置き換えますので、高速に処理できるようになります。ただ、こういった研究は多く事例があり、あまり特異性のあるものではないのですが、このFPGA上の推論演算機能を使ってリアルタイム性のあるロボット制御をするときには何に気をつけないといけないか、どんな学習方法とすればよいかという点に着目しました。
リアルタイムなロボット制御をするときは、遅延が重要になります。電気的に信号が伝わる時間や計算してから結果が返ってくるまでの時間に現象が進んでしまう点をケアしないといけません。モノをつかむ動作では、つかみすぎるとつぶしてしまいます。たとえば、現象をカメラで撮像して、その画像データをもとに演算して「あ、つぶれそう」って判断するまでに相当時間がかかります。たぶん普通にやると数百ミリ秒くらい。これは、人間の反射神経の100倍くらい遅い。人間は、つかんだ卵をつぶしそうになったらすぐにわかります。そんな感覚で、これからのロボットを安全に動かしたい、よりキビキビ動かしたいという思いで技術開発しています。
- 伊藤
- この研究の最初のプロトタイプは、山科さんが提案してくれて、2人で相談して作りました。自由落下するモノを目で見てパッとつかむロボットです。まず僕が簡易実験として、ニューラルネットワーク(神経細胞(ニューロン)とそのつながり、ネットワークを数理モデルで示したもの)を使って落ちてきたモノをつかむロボットを作りましたが、従来のニューラルネットワークとPCでは、処理が間に合わなくてつかみ損ねてしまう。そこで作ったロボットを山科さんに渡して高速化してもらいました。そうしたら、ニューラルネットワークなどの中枢機能をFPGA上に実装するほか、カメラの高速化や、指先にセンサをつけてつぶさないようにするとか、固さが違うモノを持ってもつぶさないように握るとかいったところまで作ってくれました。その結果、自由落下したモノをパッとつかんで、固さの違うものでもつぶさず持てるようになったのが、2人で最初にやった仕事ですね。
- 山科
- モノを落としてつかむのは、人間でも結構、大変じゃないですか。それを人間以上に正確にできたら、インパクトがあるなと考えていました。まだ簡単な動きですけど、認識してから判断をフィードバックするまで1ミリ秒くらいでできるようにしています。ただ、コンパクトにして、必要最低限の機能でフィードバックしているので、これからは、もっと複雑な制御に対応していきたいと思っています。
独自のロボット内ネットワークで
反射的動作が可能に
- 山科
- 自由落下のときは推論演算を高速化する点に重点を置いていたんですが、次にシステムの最適化を狙った開発を行いました。FPGAは特殊なデバイスで、専門の技術者がいないと使えないんです。そこを解決するような仕組みを作りました。ソフトウェアからFPGAの処理を生成する技術もありますので、そういうものを活用して、まずは推論演算を高速化できる仕組みを、ほかの人にも作りやすい形にしています。さらに、ソフトウェア・ハードウェア協調設計というのですが、高速化したハードウェアをソフトウェアで包み込んで、ハードウェアのことを考えなくてもアプリで操作できるような仕組みを押し込めたコントローラを開発しました。ロボットの腕や手にも搭載できるような手のひらサイズのもので、エッジコントローラと呼んでいます。
エッジコントローラの写真:
40mm×60mmサイズの基板上にFPGAとCPUの混合チップと各種インターフェイス(USB3.0など)を搭載している
- 伊藤
- 僕のニューラルネットワークで学習した結果をFPGAに流し込むだけでロボットが動くようになります。非常に使い勝手がいいものとなっています。
- 山科
- もうひとつ、システムの設計では、ロボットは、センサやアクチュエータ(駆動装置)を減らしたり増やしたりと、構成を組み替えることがあります。その度に入出力経路を増減するのでは非効率で、柔軟に対応できたほうがいい。そこで、私たちのチームでずっと開発してきたネットワーク型のシステムを採用しようとしています。このネットワークでは、独自の通信プロトコルを開発してハードウェアに実装しています。ネットワークにすると、部品をどんどんつないでいって、その間はデジタルの通信が通るので、入出力の数をスケーラブルに変更できます。
全体のシステムのコンセプトは、モータやセンサにつないで入出力制御を行うI/Oコントローラと、深層学習処理をするエッジコントローラをリアルタイムネットワークで結び、高速に応答できるようにしました。さらにその上位に、マスタコントローラがあって、ロボット全体を制御するような仕組みです。
マスタコントローラとエッジコントローラを分けたのは、人間の神経系の仕組みにヒントを得ています。私たちにも大脳と末梢神経とがあるように、マスタコントローラが大脳で、エッジコントローラは大脳が意図しないところで動く末梢神経というイメージでシステムの階層を区切っています。どうして区切っているかというと、処理するスピードが全然違うからです。マスタコントローラで実行する画像処理は、30ミリ秒とか100ミリ秒くらいで処理するのが一般的です。一方、反射的な動作制御はもっと速いスピードで処理しなければいけなくて、たとえば産業装置の制御では100マイクロ秒(0.1ミリ秒)で制御しているものあります。
- 伊藤
- システム的には、僕のシステムは予測系のシステムになっていて、現在の時刻のロボットが見たカメラと自分の姿勢から、次の時刻、どれくらい手を伸ばせばいいのかを逐次予測してドア開けをやっているんです。予測はできるんですけど、反射動作ができない。たとえば人がぶつかってきたり、あるいはモノを渡すときに急に渡されたり、そういったモノとのインタラクションや急な外乱には対応できないんです。予測系と反射系を組み合わせて、もっと人らしい動きをしたい。そこで、僕が予測系を、彼(山科)が反射系を作って行動生成しています。人のように、水が入ったコップを手渡すときに急に押されてもこぼれないといった動きを実現するには、予測系と反射系の組み合わせが必要かなと思っています。
- 山科
- ロボットがリアルタイムに反応しないといけないことってそんなにあるのか、と思われがちですが、それはまだ模索できていないだけで、これからもっと拡大できるニーズが隠れていると思うんです。たとえば、人間とロボットが握手しようとするとき、人間が思う普通の速度で手を出してもロボットが同様の速度で手を出すことは難しいと思います。でも本当に人間とロボットが共生するようになったら、こういったことがストレスになるはずです。そういう意識し得ないところを、FPGAという入出力が得意なデバイスで解決できるんじゃないかなと思っています。
- 伊藤
- 現在は、ロボットがやっているということで、多少の違和感があっても許されている部分がありますが、マンガや映画の世界では、ドラえもんやアトムが人間と同じように普通に生活していますよね。ああいう世界を作りたいですね。
理論と実践の
両方が必須なロボット開発
- 伊藤
- 私は高専で電子制御工学科という、機械も電気も両方やる学科にいましたが、メインはほとんど機械で、製図とか旋盤回したりして最初にメカを作って、たまに電気もやるといった勉強を5年間やっていました。NHK高専ロボコン(アイデア対決・全国高等専門学校ロボットコンテスト)にも出場していたので、そこでもロボットの作り方を勉強しました。大学に進学するときにロボットの知能化が必要だと考えて、パソコンやプログラミングが好きだったこともあって、思い切って情報学科に切り替えました。小さい頃からロボットを作るのが好きだったので、毎日、会社で遊んでいる気持ちで仕事をしています。
- 山科
- 僕は専攻したのは情報工学です。研究室に入ってから組込みシステムの分野に入り、FPGAを研究しました。ロボットが専門ではなかったんですが、大学生のときからGitHub(ソフトウエア開発のプラットフォーム)でコードを公開していて、入社選考ではそれを見られたらしくて、実際に手を動かしてコードを書いているギークな感じが評価されたと聞いています(笑)。
- 伊藤
- 手を動かす点については、高専出身者は早いと思いますね。でも、理論を詰めるのは大学でしっかりやってきた方のほうが得意だったりしますね。
- 山科
- こういった研究では、理論と実践のどちらも必要だと思っています。理論だけやっていてもコーディング(実装)ができませんというのではこういった開発はできません。伊藤さんもそうだと思いますが、僕や僕の所属するチーム員はずっとコードを書いているし、そういう泥臭いことのほうが多いです(もちろん社外発表とか学会参加もしますが)。基板の設計、FPGAの論理設計と実装、その上のソフトウェアの設計と実装まで全部、自分たちでやっています。
- 伊藤
- ロボットを作るには、それなりにいろんな分野を知っている人が何人かいるチームが一番強いと思っています。共通のベースを持ったうえで、各分野のスペシャリストがいると一番やりやすいですね。
人間とロボットの
共生に向けて
- 伊藤
- 今後の展開に関しては、いろんなところとお話をしていて、どういう製品に載せるかを検討しています。一番の課題は品質保証をどうするかです。AIはブラックボックスと言われている中で、動作精度や安全性の保証が一番難しいかなと思っているところです。
- 山科
- 人間とロボットが仲良くなるためには、ロボット自身が安全であることももちろん必要ですが、ほかには人間の感覚やロボット自身の情報をどのようにデジタル化して共有するかが重要だと思っています。人の感覚とか五感に近いとこを組込みシステムやFPGAの技術を使ってデジタル化してロボットに実装できたらいいなと思います。
- 伊藤
- ロボットを作るのは人間を作るのと同じようなものかなと思っています。大学時代にお世話になった共同研究先の所長さんが「脳を創って脳を知る」とおっしゃっていたのですが、深層学習を使ってロボットに何かさせるには、人の脳がどうなっているかを考えながら作る必要があると思います。いつか人のようなロボットを作りたいと思っています。