ロボットを制御するプログラミング
このブログ記事は、朝日中高生新聞2021年1月31日号の連載「プログラミングでかわる!?私たちのミライ」第3回と合わせてお読みください。朝日中高生新聞に掲載された記事全文はこちら(転載許可取得済み)。
わたしたちPreferred Networksは、コンピュータとプログラミングの力でロボットを動かす技術を開発しています。今回は、ロボットを動かすプログラムがどのようなものかを説明します。
ロボットとは何か、はっきりとした定義はありません(定義がないまま様々な人に作られているというのは、なんだか不思議ですね)。ロボット開発者は、みんな心の中に「ロボットとはこういうもの」というイメージを抱いて、それに近いものを作ろうと技術を磨いています。
筆者の持つロボットのイメージは「なんらかの意味で生物の知性をまねた人工物」です。もちろん、ある人工物が生物の知性をまねしていると思えるかどうかは見た人の気持ちの問題です。自分の作ったものが知的で生物的と思わせられるかどうかは、開発者の腕の見せどころと言えるでしょう。

たとえば車輪や足など移動するための機構(ロコモータと言います)と、腕や手など物体操作するための機構(マニピュレータと言います)を備えた機械に荷物を運ばせることを考えましょう。荷物がどんな形をしていてどんな重さでどこに置いてあるか、それをつかむためにロコモータをどのように移動させマニピュレータの姿勢をどのように変化させればよいか、全てあらかじめ正確に分かっているならば、それができる機械を知的と言えるかどうかは少々微妙…かも知れません。
※形や重さといった情報を用い、指示通り正確に動くことは決して容易ではないので、ある程度の知性を持っていると言って差し支えないと筆者は考えます。実際、現在ロボットと名づけられている機械たちの多くが知性を持つと言えるならば、このような意味で、です。
もう少し難しいことを目指して、荷物の場所や形、置かれた環境などがあらかじめ分かっていなくても、自分の動き方を自分で決めて適切な位置にきちんと―人間のように―運べるような機械を作ることを考えましょう。このような機械をロボットと呼ぶことには、多くの人が賛成すると思います。

(イラスト・nakata bench)
ロボットと荷物、環境は、互いに接触して力を及ぼし合います。ロボットが荷物を押せば、反動でロボットも押し返されますし、ロボットが直接接触していない別の荷物も間接的に押されるかも知れません。全ての物体には接触力の他に重力もかかっているため、押し方によっては荷物が落ちたりロボットが倒れたりします。実世界では、このような様々な相互作用が連鎖します。ロボットには荷物の形や重さを確認し、他の荷物にぶつかったり自分が転倒したりすることを避けつつ、適切に力を加えながら目的地まで運ぶことが求められるでしょう。「適切」の意味によっては、荷物が具体的に何で、どのように運びどこに置くべきものであるか、などの知識も必要になるかも知れません。
直接操作できるものとそうでないもの(重力や空気の流れなども含まれます)が混ざる中で、ロボットや荷物を思い通りに動かせるか?これは、実世界でさまざまな現象を起こす物理法則を、人の意志を超えた自然のプログラムととらえ、それと一緒に働くプログラムを作れるか?という問題とも考えられます。このようなことを考える学問は「サイバネティクス」と呼ばれます。
一方、ロボットや荷物、環境のありようをコンピュータに取り込むためには、それらを電気信号に変換することが必要です。また逆にコンピュータが荷物に働きかけるには、電気信号をロボットの動作に変換しなければいけません。このように、電気信号を使って実世界と互いに作用し合うプログラムを実現する学問は「メカトロニクス」と呼ばれます。
※物理量を電気信号に変換する素子をセンサ、電気信号を力に変換する素子をモータと呼びます。
ロボットを動かすプログラムは、サイバネティクス、メカトロニクスという二つの枠組の中で組み立てることになります。いずれにしても、実世界とつながるコンピュータの中に閉じないプログラムであるという点に大きな特徴があります。実世界は人の思惑などお構いなしに、物が重力で倒れたり風で飛んだりするなど物理法則にしたがって状態を時々刻々変えていきますので、全ての処理は、それにタイミングを合わせて行わなければいけません。ロボットに行わせたい作業・行動が高度なものになるほど、様々な知識を駆使したプログラミングが求められるでしょう。
なんだか難しそうだぞ…と思いますか?だからこそ面白い世界です。