暇なのでロボットの研究をしたことがない人にロボットの研究を説明するような勢いで、ロボットの研究分野とか研究について列挙したり説明してみたりしようと思った.
まずパッと20分ほどで書いてみたロボットの研究分野.なんか分類とかごちゃまぜでとりあえず書き出してみました.本当はもっともーーーーと研究分野は分かれます。もしロボットの研究をするなら細かいどれかをテーマにして研究することになるはず.(特に修士で卒業する人とかは特にそう)
なんでこんなにロボットの研究分野っていっぱいあって、大変なことになっているか今回は説明を試みようと思います.ややロボットの知能よりです.制御や構造についても話しますが、メインは知能です.
コーヒーを入れる例でロボットの難しさを実感してもらえるように頑張ります.
状況 : 人間に「コーヒーを入れてきてくれ」とロボットが言われて、ロボットはそれを実行する
さて、早速難しい。「コーヒーを持ってきてくれ」というのを聞いても、まずこれが正しく聞こえて理解することが必要です.実際の環境では環境の雑音も多く、生の音のデータはとても人間の言葉だけを抽出するのは難しいです.他の人も話をしているかもしれないので、そこから自分に(ロボットに)話しかけられている言葉だけを抽出しなくてはいけません.音が聞き取れるセンサがまず必要.人間の言葉を理解するのに十分なセンサが必要.
音が聞き取れたとして、先にあげたような内容の理解が次に必要です.「自分に言われている」ということがわかったとして、すべての人間の命令を聞くわけにもいかないでしょうから、相手が自分に指示する人間と判断する必要があります。その日その日の状況に限らず声と顔を認識して自分に命令するのが正しい人間か判断する必要がありますね.自分に指示するべき人間だったとしましょう.やっと指示内容の理解です.さぁ、かなり雑な「コーヒーを持ってきてくれ」という命令.だいぶやるべきタスクの情報が削ぎおとされてますよね.コーヒを持ってきてくれって言われてもこの中でやるべきことは、「キッチンに移動」「コーヒーを作る」「人間のところに持ってくる」「人間にコーヒーを渡す」などが大雑把にあげられます.どこにとも誰にとも書かれていませんが言外を補完する必要があります.例えば命令した人間とは別に飲ませたいお客さんがいた場合には客用のコーヒーを用意することになります.これも言われていませんが、わからないといけないことです.またコーヒーを作る時に様々な量が考えられますが、もっとも普通な量を注がなくてはならないのも言外の意味です.またコーヒーを作ると言われた時におそらく作り方も想定しなくてはいけません.コーヒーをインスタントで作るのか、沸かすだけなのか等々まで考えます.いつものというのは難しいです.本当に全く同じコーヒーしか作らないのなら簡単ですが、もしそうではなくてある程度ブレがある場合はそれも考慮して作らなくてはいけません.もしいろいろな作る手段があるなら、言われた段階では具体的な作り方はまだわかりませんが、自分でその情報を環境から認識しなくてはいけないと計画に積まなくてはいけません.もしコーヒーではなくて「獺祭」と言われてロボットが知らない場合、どのように取得すればいいのかどのように作ればいいのかを指示者に仰ぐ必要があります.とまぁ、先の命令から考えることが多すぎるため、知能やそのタスク計画の部類は研究することが多いです.
さて言われていることがわかったらいよいよ行動です!
まず自分がどこにいるかわからないとわかりません.今は家のなか?ソファの前?自分は今正確にどこにいるかわからないとどんくらいの距離移動すればよいかわかりません.ロボットでは実際に行動をするときにすべて数値に変換できるようにしておかなくてはなりません.自分の場所がどこかわかっているには、環境を認識できていなくてはなりません.カメラの画像からどこにいてどこに行くべきかを今までのデータから抽出して認識しておく必要があります.環境のマップを持っておかないとどこを通っていけばいいのかの計画が立てられません.環境のマップがない場合はまずコーヒーを撮る前にキッチンがどこかを探す必要があって、環境のマップを作れる能力も必要です.環境の認識と位置の把握ができたら移動をします.
移動するにあたってロボットが二足歩行なら当然歩くための体が必要ですね.二足歩行になったとしてまず足の踏み場を認識します.どこを通って歩くかどうやって足を置いていくか、どうやったらバランスを取りながら歩けるかとかが意識すべきことになります.人間のように何も考えずに(考えているかもしれないけど)移動するのは難しいので.足場が汚い場合、何を踏んでもよいかも考えるために物体の認識、材質の把握、転倒の予測が必要です.もしロボットが転倒しそうになった場合その瞬時にどこに足をついて、ふみ耐えるかの認識も必要です.仮に倒れた場合はどのような順序で立ち上がるか、どのような力を入れて生きながら体を起き上がらせるかも考える必要があります.倒れる時に周りへの被害も最小にします.人間がいた場合には、その被害をもっとも最小にする倒れ方をする必要があります.もし二足歩行ではなく台車型のロボットなら倒れる等の心配は入りません.その代わりあまり汚いところは移動できないですが、バランスも意識しなくていいので、主にきにすることは移動経路だけです.
さてキッチンまでこれました.まずはコップを取り出しましょう.まず家具に備わっている構造を理解しなくてはいけません.人間の場合見ただけで物体に備わっているアフォーダンスを理解して、ここがドアノブ(戸棚の取っ手)でここをこっち方向に引けばいいはずってのがわかります.もし仮にわからない場合も、いろいろな方向に動かしてみてどういう構造かを探索する行動を行います.こういった柔軟な判断も難しいですね...構造をロボットにどうやって理解させるかはもちろんそもそもどういった試行錯誤をすることによって構造を理解できるかロボットがわかっていないといけません.ドアノブを引っ張るときに力いっぱいに引っ張ったら壊れます.また様々なドアノブの種類があるのでロボットの手先がそのドアノブをつかめる構造でないとダメです.ドアノブを適切につかむためには人間と同等の手があればよいはずです.しかし、人間の手の模造品を完全に作るのは材料やケーブルの配置、頑丈さ、把持力、熱の問題等を考慮しなくてはならずできていません.そのためなんとか人間が行えるのと同等な手(ハンド)の設計がいろいろと行われていますが、まだまだ決着していません.人間の手はかなりよくできています.さてつかめたとしてどれくらいの力で引っ張りますか?弱い力から上げていきますか?どうやって力を強くしていきますか?どこまで強い力を出しても壊れないですか?ドアノブの使い方間違っていたら際限なく力を発揮してしまい、家具を壊してしまいます.先ほども書きましたがロボットには数値で命令を当てる必要があるため、「ちょうどいいくらい」とか「普通くらい」といった指示はできません.それも今までの統計を撮るなり一般的な家具の力入れ具合を認識して実行する必要があります.
さて戸棚の開き方も力の入れ具合もわかったとしましょう(さっきから仮定が山積みでもはや何が仮定かわかりませんが…)。人間の腕というのはかなり柔軟にできていますが、背中の後方とかはどうやっても手が届かない部分がありますよね?ロボットの腕の作りも同様の問題があります.よく設計しなくてはロボットのできることが制限されてしまいます.また、ロボットの関節には大方モーターが入っており、これが重たいです.しかし、しっかりとものもをつかむためには大きなモーターが必要で各関節ではそれより先の腕を支えるためにもっと強力なモーターが必要です.構造上人間よりもいろいろな形を取れますが、どれもメリットデメリットがあります.腕が長すぎても短すぎても大変です.他には、もし力を入れて壊れてしまったら修理が大変なのであたかも柔らかい腕のように振る舞えた方が良いので制御で受けている力に馴染むような制御ができるとなお良いですね.(インピーダンス制御).もしどうやっても今の体でダメな場合は自分の体全体を動かしながら扉を開けます.人間も大きな扉を開ける時に手だけ動かして開けることはせずにドアと一緒に動くと思います.それもロボットがすべて計算して動かなくてはなりません.
ロボットが腕を動かすことを考える時には、「ここからここまで動かそう」ってかんがえても動きません.ものすごい短い時間感覚で0.01秒後にはロボットの腕の角度を肩はこれくらい、肘はこれくらい、手首はこれくらいになるようにって決めながら動かしています.そのためにたくさんの計算をします.また手先を直線で動かしながら他の関節を動かすも簡単にできることではなく多くの計算を行って実現しています.その上でさらに力の制御も行っているのです.
さて戸棚の扉が開きました.(やっとコップを取り出します.)。ここから後半戦です.上で説明したことはもう以下では説明しませんが、それでもまだまだロボットが考えるべきことはたくさんあります.
ここで取りたいコーヒーカップが他のものの後ろに隠れているとします.ロボットは自分が見ているカメラの画像からどこにコーヒーカップが写っているかを探します.もし見つからない場合は別の場所を探すか何かに隠れているのでは?って考えるべきです.(難しいですが)仮に写っていた場合に、ものの一部が写っているだけで物体を認識するのは高度な技術です.どこにあるかはわかったとします.
どうやって取り出すかです.手前のコップをどける?どこに置いていい?上から手を伸ばして目的のコーヒーカップだけ取る?その小さな計画をする上でも仮に邪魔なコップをおく場合、どこに置いていい?どこに置いたら壊れない?ってのも難しいです.またものをつかむ時にどこをつかむべきかってのもこれまた難しい…どこを把持するかって問題ですね.これもよくある研究テーマです.だってどこ持てばいいかなんてわからないですもの…じゃものを把持すると決まったらどうやって腕を動かすかです.ドアノブの問題のときもそうでしたが、今度はどういう方向から手を伸ばしてつかむかも大事です.例えばとってのついているコップなら取っ手の穴の空いている方向に手を動かす必要があるからです.また、手前にはドア、近くには他のコップ、戸棚の中のしきり、これらを避けながら手を動かしていきます.人間はよくもこんな難しいことがひょいひょいできたものです.こういった手の動かし方を決める方法は様々ありますが近年やっといろいろとできるようになってきたところです.しかしこれらも適切にどこに物体があるかを完全に把握していることが大前提です.コップの見えていない部分にも気をかけながら動かせないといけないのでそのためにはコップの全体がわかっていないといけません.ロボットが軌道を決める時にも曖昧は許されないので、すべての大きさがわかっていることが前提です.すべての大きさが立体的に分かるには当然センサが必要です.カメラの画像から立体的な情報にしたりKinectのような深さの分かる深度センサを使ってロボットが処理できるデータにします.センサの情報ではただの数字の羅列しか得られませんがそこから平面や物体、何の物体、境界を認識して自身の知能処理に利用できる形に整形していきます.データに自分の必要なものが写っていない場合自分で新しい情報を得られるように動くことが必要です.どうやって首を動かすべきか、もうみたところはどこか、次に見るべきところはどこか、どこを探すべきか. 首を動かす時にもどこらへんに頭が向くようにどれだけ動かしますか?どれだけ首を動かすか角度を決めないと動かせません.情報の取得というのは動作を行う上でまずしなくてはならないもっとも大事な要素の一つです.
何も工夫しないとロボットは常に一度に一つのことしか意識していませんので、意識的に確認しないと何も確認しない状態で動作を進めてしまいます.つまり、ロボットがものを見つけて動作を決めた後、何もしないと目をつぶったまま動作を行うことになってしまいます.もしも他のコップを倒したりしていながら動作を続けたら二次災害がどんどん起こってしまします.いち早く異常に気づくことが大事ですが、異常って何でしょう?コップが横向いているのが異常?コップがいつもあったところから2mm動きいたら異常?コップにヒビがあったら異常?変な音がしたら異常?異常が何か決まっていないのといけません.また、これらを俊敏に把握するには、常に環境を監視し続けるプログラムを走らせないといけません.異常と気づくのは人間にとっては簡単ですが、ロボットにとっては非常に難しいです.なぜなら常識がありません.決まったことしか認識できないです.何かものが壊れているときはその正常な形を知らないとそもそも壊れているなんてわからないのです.
やっとコップを取り出しました!!(つかむところもわかって他の物体の避け方もわかって、センサの情報も綺麗に扱えて、他の物体の状況もわかって、腕も適切に動かせて、適切な力を入れられていることを仮定しています)
ドアを閉めました!!
あれ?ドアが「閉まった」ってどうやってわかったんでしょうか?ドアがしまったってみなさんならどうやって説明しますか?ロボットに曖昧は許されません.世の中にある数多のドアが「しまっている」というのを数字を使って表現してください.となるとこれもまた難しいのです.画像から?深度を考慮して?なんとなく?隙間がないから?でも表現できないとロボットには難しいです.あらかじめ人間がプログラムして何百回やっても必ず閉められる腕の動きをさせるなど行うことや最新の機械学習などでうまく認識させてやるか、この点の周りに注目してもし平面になってたら閉まっているとする、と決めてやらなくてはならないのです.
はぁ、やっと「自分の場所を」「キッチンにきて」「ドアを開けて」「コップを取り出して」やっとやっとやっとコーヒーを作れる環境が整ってまいりました!!!
しかし、もうここでやめておきましょう.この先ももっと疲れます.指示した人間のところまで戻るのにこの倍以上書かないと説明が終わりません… 想像されている通り、この先は今までと同様に難しいです.めちゃくちゃ考えることがいっぱいあります.いかにこの後考えなきゃいけないことを書いておくのでいつか研究をするときのネタにでも考えてください.
- 水を入れる量を決定
- コップが汚かったら水で注ぐことも必要って判断
- 洗って綺麗になったことを認識
- 他の必要なものを探す
- なければ買うという選択肢を思いつく
- そもそも買っていいいのかどうか判断
- コーヒーをすべてこなにできたかを判断
- こぼさないようなコップへの注ぎ方の決定
- どこに置いてコーヒーを作るべきか
- お湯が湧いたことはどうやってわかる?
- やかんを見つけるには
- コーヒーを十分な味になっているかの確認
- ものをしまう
- しまった状態って?
- 溢れたものを認識して”綺麗に”する
- 綺麗にしている状態とは何かを認識
- 綺麗にする方法はどのようなものがあるか
- 綺麗にする道具はどこにあるか
- どうやったら綺麗になる軌道を描けるか
- 綺麗にする間コーヒーどっちにおくか
- コーヒーを持っていくのと綺麗にするのどっちが優先事項か
- そもそも掃除をする必要があるレベルの汚れか
- 汚れのレベルはどうやって数値化するか
- こぼさないように手先だけは空間に固定して移動
- コーヒーがこぼれた状態って…
- 他の言いつけを作っているときに出されたら?
- 牛乳が切れているってわかる?
- 十分に混ざった?
- 砂糖は十分にとけたってスプーンの感触で分かる?
- 命令者に困る成分入っていない?
- 袋の文字を読める?
- 袋の文字を読めばわかるってことがわかる?
- どうやってスプーンを持つべき
- どのスプーンを使うべき
- スプーンをどうやって動かすことで実環境がどう変わるの?副作用は?
- 何が目的でスプーンを動かすの?
- 重なったスプーンからスプーンとり出せる?そんなセンサ?そんな腕?そんな手?
- どうやったらもっと早く作業できる?
- 右手で混ぜながら左手で片付けできる?
- そのときに頭はどの方向を向かせる必要がある?
- トレイにコーヒーを載せるって理解できる?
- トレイにコーヒーを乗せてから持ち上げることを認識できる?タスクの順番わかる?
- トレイに乗ったコーヒーがすべらないように溢れないように腕二つをうまく制御できる?
- トレイの下見えないけど足元大丈夫?
- トレイをみながら周りも見るように制御できる?
- 溢れそうになったら瞬時に対応できる?
- 命令者がいなかったら探せる?
- どこにいる可能性が高い?
- トイレにいるとわかったら持って入る?
- 他のロボットにもたせて持って帰ってもらう?
- どうやって他のロボットに指示する?
- 待っててもよい場所は?
まだまだ考えるべきことはたくさんあります…
またタスクに遂行に直接的にかかわらないけど実用的な問題として以下の問題もあります.
- うるさくないか(モーター音やファンの音)
- 臭くないか
- 振動しないか
- バッテリーは十分長く持つか
- 邪魔じゃないか
- 熱くなりすぎないか
- 子供を傷つけないか
- 倒れないか
- 危ない物質はないか
- 何かを挟まないか
- たとえ壊れても致命的にはならないようになっているか
以上のように考えることが数多あるため、ロボットの研究分野は様々です.
ロボットの学問は多くの分野を統合していてほとんどの工学に関わっているため知らなくてはならないこともたくさんです.
ロボットのパーツも多いため、手だけ研究している研究者や足だけとかもいらっしゃいます.チータ型蛇型ハエ型とロボットの形を研究している人、ロボットと人間の研究している人、ロボットの歩き方だけを研究している人、一口にロボットの研究者と言っても種類が多いため何一つかぶっていないことなんてざらにあります.ロボット系の学会に行っても本当にバラバラです.ドローンの発表とか災害救助よう、ホームアシスタント等々、様々です.
ロボットの研究やる方、目指している方、頑張ってください.いろいろなロボットが今世の中に出ていますが、多くの分野は完全に解決されていません.