fltech - 富士通研究所の技術ブログ

富士通研究所の研究員がさまざまなテーマで語る技術ブログ

「手探り」するロボット:視覚と擬似力触覚を組み合わせた模倣学習

はじめに

こんにちは、フィジカルAI研究所の井出です。

近年、AIが現実の空間を認識し、ロボットとして行動する「フィジカルAI」への期待が高まっています。人の生活や産業の現場でロボットが活躍するには、物の位置を画像で認識するだけでなく、対象に触れたときの反発や負荷を捉え、動きを調整することが重要です。

私はロボット工学の博士号を取得し、「ロボティクス×AIセーフティ」の研究開発から事業化まで幅広く携わってきました。現在はSafety by Designを軸に、安全なAI・ロボットを実現するための研究開発に注力しています。 本記事では、安全なロボットマニピュレーションの実現に向け、視覚と力触覚を組み合わせた模倣学習モデルの研究開発をご紹介します。

1. ロボットにも「手探り」はできるのか?

近年、人がロボットを操作したときのデータを使って、ロボットに作業を覚えさせる研究が進んでいます。このような方法を模倣学習と呼びます。

模倣学習では、人が作業している映像や、ロボットの手先の位置・向きなどをAIに学習させます。すると、作業の手順を一つひとつプログラムしなくても、ロボットが人の動きをまねるように動作を作れるようになります。

ただし、人が日常的に行っている作業は、目で見て動くだけではありません

たとえば、穴に部品を差し込むとき、人は目で位置を見ながら、指先に伝わる「少し引っ掛かった」「押しすぎている」といった感覚も使っています。柔らかい物を持つときには、つぶさないように力を弱めます。モニターの裏側にケーブルを差し込むときには、手元が見えなくても、周りに触れた感覚を頼りに位置を探します。

このような作業では、視覚だけでなく、物に触れたときの力や反発の情報が重要です。本記事では、この情報をまとめて力触覚と呼びます。

従来の模倣学習では、主にカメラ画像やロボットの位置・姿勢など、「見える情報」を使っていました。そのため、画像上では正しい位置に見えていても、次のような問題が起こることがあります。

  • 部品を必要以上に強く押してしまう
  • 物に触れていることに気づけず、さらに押し続けてしまう
  • わずかな反発を利用した位置合わせができない
  • 柔らかい物をちょうどよい力で扱えない

特に、部品を穴に差し込む作業では、ほんの少し位置がずれただけでも部品が引っ掛かります。人なら、指先の反発から「少し右にずれている」「押し込みすぎている」と判断できます。しかし、画像だけを見て学習したロボットにとって、この判断は簡単ではありません。

そこで私たちは、ロボットにも力加減を学習させ、人が手探りで作業するときに近い動きを再現する技術に取り組みました。

ポイントは、専用の力センサーを新しく取り付けるのではなく、ロボットのモーターを動かすときに得られる電流値を使うことです。

モーターは、重いものを動かしたり、何かにぶつかって押し返されたりすると、より大きな力を出そうとして電流の流れ方が変わります。つまり、モーターの電流値には「何かに触れたか」「どのくらい負荷がかかっているか」を知る手がかりが含まれています。

この電流値をうまく使えば、ロボットにすでに備わっている情報から、力触覚に近い情報を取り出せます。これが、今回紹介する擬似力触覚の考え方です。

2. モーターの電流から「触った感覚」を読み取る

今回開発した擬似力触覚模倣学習技術は、モーターの電流値を使って、ロボットに「触れた感覚」や「力加減」を学習させる技術です。

人が物を扱うとき、視覚と触覚は別々に働いているわけではありません。まず目でおおよその位置を確認し、対象物に近づきます。そして触れたあとは、指先の感覚を使って、押す方向や力の大きさを細かく調整します。

今回の技術では、この人の動き方に近づけるために、次の2つの工夫を組み合わせています。

  • モーターの電流値から、接触や負荷の情報を読み取る
  • 画像と電流値を、作業の場面に応じて使い分けられるように学習する

仕組み1:電流値の変化を力の手がかりにする

ロボットのモーターには、動作中の負荷に応じた電流が流れます。

たとえば、ロボットアームが空中を動いているときと、部品に当たって押しているときでは、モーターにかかる負荷が違います。その違いは、電流値の変化として現れます。

ただし、電流値をそのまま見れば、すぐに接触が分かるわけではありません。ロボットが加速・減速するとき、姿勢が変わるとき、機械の内部で摩擦が起こるときにも電流値は変化します。つまり、電流値には、接触による変化だけでなく、余計な変化も混ざっています。

そこで今回、AIのノイズを取り除きながら答えに近づける仕組みに注目しました。

生成AIの一種には、最初は少し乱れた状態から始めて、何回かの計算を通して、だんだん目的の形に近づけていくものがあります。画像生成AIで「ぼんやりした状態から、少しずつ絵をはっきりさせる」ようなイメージです。この考え方を、ロボットの動作生成にも応用します。

ロボット制御では、短い時間で次の動きを決めなければなりません。そのため、AIが長い時間をかけて何度も計算することはできません。最初の状態が実際の状況に近いほど、少ない計算回数でも適切な動作を作りやすくなります。

そこで、画像やロボットの位置だけでなく、直近のモーター電流値の変化も使って、AIが動作を考え始める初期状態を決めます。

処理の流れは次の通りです。

1. ロボットの状態とモーター電流値を取得する

ロボットの手先の位置・向き・動きに加えて、直近のモーター電流値を取得します。

2. 電流値から接触や負荷の状態を推定する

電流値の変化を手がかりに、「何かに触れているか」「押し返されているか」といった状態をAIに反映させます。

3. その状態に合った次の動きを生成する

AIは、画像・ロボットの姿勢・電流値の情報を合わせて、次にどの方向へ、どのくらい動くべきかを決めます。

この仕組みによって、ロボットは単に「穴の方向へ進む」のではなく、「部品が少し引っ掛かっているから、向きを調整しながら進む」といった動作を作れるようになります。

仕組み2:見る情報と触る情報を使い分ける

もう1つの重要な点は、画像と電流値の情報量の違いです。

カメラ画像には、部品の位置、形、色、周囲の様子など、多くの情報が含まれています。一方、モーター電流値は、画像に比べると情報の種類が少ない数値データです。

そのため、画像と電流値をそのまま一緒にAIへ入力すると、AIが情報量の多い画像ばかりを重視し、せっかく入れた電流値をあまり使わない可能性があります。

そこで今回、学習中にあえて画像の一部を使えない状態にしたり、電流値の情報を使えない状態にしたりします。こうすることで、AIは「画像が頼れないときは電流値を見る」「電流値が頼れないときは画像を見る」というように、複数の情報を補い合って使う練習ができます。

このように、異なる種類の情報を組み合わせて学習する方法をクロスモーダル学習と呼びます。ここでのモダリティとは、画像、音、力、温度のような「情報の種類」のことです。

大切なのは、視覚と力触覚のどちらか一方だけを使うのではなく、作業の場面によって使い分けることです。

たとえば部品の差し込み作業では、次のような役割分担が考えられます。

  • 部品に近づくまでは、カメラ画像で大まかな位置を合わせる
  • 部品が穴の周辺に触れてからは、電流値を使って力加減や向きを調整する

これは、人が物を扱うときの感覚にも近いものです。対象物から離れている間は目で見て、触れた瞬間から指先の感覚を強く使う。擬似力触覚模倣学習では、このような情報の使い分けをロボットにも学習させます。

3. 実験してみた:ロボットはプラグを差し込めるか

デモ風景
今回、技術の効果を確かめるため、ロボットにプラグを所定の位置へ差し込ませる実験を行いました。

プラグの差し込みは、簡単そうに見えます。しかし実際には、プラグと差し込み口の位置を細かく合わせ、触れたときの反発を手がかりに、向きや力を調整する必要があります。

今回の実験環境では、プラグの先端はカメラ画像上で数ピクセル程度にしか写りません。数ピクセルというのは、画面上ではとても小さな点のような大きさです。

また、カメラで取得する映像にはノイズが含まれるため、画像上で捉えるプラグ先端の位置は数ピクセル程度、容易に変動してしまいます。対象そのものが数ピクセルしかない状況では、このわずかな変動も無視できません。そのため、画像だけでプラグ先端の正確な位置を見つけることは難しく、わずかな位置ずれで差し込みに失敗してしまいます。

力の感覚がないと、わずかなズレで止まってしまう

力触覚を使わない場合、ロボットは主にカメラ画像からプラグと差し込み口の位置を推定して動きます。

しかし、プラグ先端が画像上で非常に小さいため、画像だけでは正確な位置関係を把握しにくくなります。その結果、プラグが差し込み口の周辺に触れても、ロボットは「どこに当たっているのか」「どちらへずらせばよいのか」を十分に判断できません。

このため、力触覚を使わない場合は、差し込み動作を安定して成功させることが難しいことを確認しました。

力の感覚があると、触れながら位置を直せる

一方、力触覚フィードバックを使う場合、ロボットは作業中に生じる接触や負荷の変化を手がかりにできます。

つまり、最初からカメラ画像だけでプラグと差し込み口を完全に一致させる必要はありません。ロボットはプラグを差し込み口付近まで移動させたあと、接触したときの情報を使って少しずつ位置を調整します。

その結果、プラグの差し込みに成功しました。

さらに、差し込み途中の接触だけでなく、差し込みが完了したときの負荷の変化も捉えられました。つまり、ロボットは「プラグを挿せた」だけでなく、「最後まで挿し終わった」ことも判断できる可能性があります。

このデモは、視覚だけでは難しかった細かな位置合わせを、触ったときの情報で補えることを示しています。人がコネクタを手探りで差し込むときに近い動きを、ロボットでも実現できる可能性があります。

4. この技術で広がるロボットの仕事

今回の技術が目指しているのは、特定のロボットや特定の作業だけで使える技術ではありません。

モーターの電流値は、多くのロボットで取得できる基本的な情報です。そのため、専用の力センサーを追加しなくても、さまざまなロボットで擬似的な力触覚を利用できる可能性があります。 これにより、これまで画像だけでは自動化が難しかった「手探りが必要な作業」への応用が期待できます。

汎用性一覧

ユースケース1:見えない場所を手探りで探し、差し込む

箱の奥や棚の中、モニターの裏側のように、カメラから対象物がよく見えない場所では、画像だけを頼りにロボットを動かすことには限界があります。

人なら、手を中に入れて周囲に軽く触れながら、物の位置や形、端子の向きを探れます。HDMIケーブルをモニター背面の端子へ差し込むときも、目だけで位置を合わせるのではなく、コネクタが周囲に当たった感覚を使って少しずつ向きを調整しています。

ロボットも電流値から接触や負荷を読み取れれば、「何かに触れた」「少し引っ掛かっている」といった情報を手がかりにできます。これにより、箱の中の部品を探して取り出す作業や、見えにくい場所へケーブルや部品を差し込む作業につながると考えています。

ユースケース2:接触の有無を手がかりに、扱い方を調整する

果物や食品のような柔らかい物を扱う場合は、「つかめること」だけでなく、「壊さずにつかめること」が重要です。人は、対象物の硬さや反発を感じながら、握る力を自然に調整しています。

また、複数のロボットで1つの重い物を運ぶ場合にも、力の情報は重要です。それぞれのロボットが勝手に動くと、片側だけに大きな負荷がかかったり、互いに違う方向へ引っ張ったりしてしまいます。

現時点では、電流値だけで対象物の硬さや細かな力加減まで正確に分かるわけではありません。それでも、「何かに触れた」「負荷が増えた」といった変化を手がかりにできれば、押し続けすぎない、動きを止める、少し戻すといった基本的な調整につながります。将来的には、こうした情報をより細かく扱えるようにすることで、柔らかい物を押しつぶさないように持ち上げたり、複数台で重い物を息を合わせて運んだりする技術へ発展させたいと考えています。

現時点での限界と、これから

擬似力触覚は、専用の力センサーを使わずに接触の情報を得られる点が大きな特徴です。一方で、現在の技術で人の指先のような細かな感覚まで再現できているわけではありません。

特に、モーターの電流値だけから分かるのは、主に「触ったか、触っていないか」「負荷が増えたか、減ったか」といった大まかな変化です。たとえば、人の指先なら分かるような、表面のざらつき、わずかな滑り、どの方向からどの程度の力がかかっているか、といった細かな情報をそのまま読み取ることはまだ難しい段階です。

また、電流値は接触以外の理由でも変化します。ロボットの加速・減速、姿勢の変化、関節部分の摩擦なども電流値に影響します。そのため、電流値の変化が本当に接触によるものなのか、それともロボット自身の動きによるものなのかを見分けることが重要です。

今後は、電流値の時間変化をより詳しく学習したり、カメラ画像やロボットの位置・姿勢の情報と組み合わせたりすることで、接触状態の推定精度を高めていきます。まずは「触れたことを確実に検出する」ことを土台にし、その上で、押しすぎ、引っ掛かり、挿入完了といった作業に必要な状態をより安定して判断できるようにすることを目指します。

このように、視覚だけでは扱いにくかった接触・反発・力加減をAIに取り込むことで、ロボットが活躍できる場所を、整った実験室から、より複雑な現実の環境へ広げていきます。

5. まとめ:見るだけでなく、触れて考えるロボットへ

今回は、人の「手探り」に近い動きをロボットで再現するための擬似力触覚模倣学習技術を紹介しました。

従来の模倣学習では、画像やロボットの位置・姿勢など、主に見える情報を使って動作を学習していました。そのため、物に触れたときの反発や、柔らかい物を扱うときの細かな力加減を捉えることが難しいという課題がありました。

今回の技術では、ロボットに搭載されているモーターの電流値を、力触覚に近い情報として活用します。電流値にはノイズも含まれますが、AIのノイズを取り除く仕組みを使いながら、接触や負荷に関する情報を取り出します。

さらに、画像と電流値をただ同時に入力するだけでなく、場面に応じて使い分けられるように学習します。

目指しているのは、次のような判断ができるロボットです。

「近づくまでは目で見る。触れたあとは力を感じて調整する。」

この考え方によって、部品の差し込み、柔らかい物のハンドリング、見えない場所での手探り作業など、これまで視覚中心の学習では難しかった作業への応用が期待できます。

今後は、特定のメーカーやハードウェアに依存せず、さまざまなロボットが擬似的な力触覚を使えるようにすることで、人が日常的に行っている手探り作業の自動化を目指します。