English

第65回コラム
まっすぐ走らないロボットの話

情報アーキテクチャ専攻 上田 隆一助教

図1: まっすぐからずれていく人(あるいはロボット)の画像
図1: まっすぐからずれていく人(あるいはロボット)

最近、ロボット工学以外の世界でも ロボットを使った研究がちょっとしたブームになっているようで、 情報系の研究者の集まりでロボットの話になることがあります。 5年間の空白期間があるものの、 筆者としては何でも聞いてくれというところですが、 残念ながら無名の身。誰も何も聞いてくれません。 ということで、こっちからいつも、 次のような意地の悪い質問をしています。

「ロボット、まっすぐ走らないでしょ?」

この質問に対しては十中八九 「そう!そうなんですよ!」と返事が来ます。 そして、まっすぐ走らせるために結構時間を割いたり、 悩んだりしている人も少なくはありません。

これはいけません。 有能な研究者がそんなことで時間を割くのは国家の損失です。 そこで、本コラムをお借りして「ロボットはまっすぐ走らない」 という理由を書き付けておきます。 ロボットを触らない人であっても、学問というものが いかに無駄な試みを減らすかという良い例になるかと。

■まっすぐ走らない理由(算数編)

まず、ちゃんと算数を使ってまっすぐ走らない理由を書きます。 そもそも、ロボットも人間もそうなのですが、 身体というのは完全に対称なものではありません。 重心はどちらかに偏っています。 筆者の通っている整体の先生によると、 人間の脚の長さも左右でずれている人が多いそうです。

そのため人間は、地面にまっすぐな線を引っ張ってから 目隠しして歩くと必ず線の右か左にずれていきます。 これは、何のセンサもついていないロボットでも同じです。 ここまではよいでしょうか。

それで、これはあまり気づく人がいないのですが、 単に右か左かにずれているだけでなく、 「体の向き」も変わります。 この様子を絵にすると図1のようになります。

目隠しされた人間は自分の体の向きが変わっても分かりません。 そのため、もともとの「まっすぐ」でなく、 変わってしまった自分の向きを「まっすぐ」 の方向だと思うより他ありません。

こうなってしまうと、もともとの「まっすぐな線」 からのずれは増幅していきます。 そして、体の向きがずれていくと、 さらにその増幅度は増していきます。

一つ例を考えてみましょう。 1m歩いて、平均1度体の向きが 同じ方向にずれるとどうなるでしょうか。
•90m歩くと、90度ずれる
•360m歩くと、360度ずれる
となります。

シェルのワンライナーを使って確認してみましょう。 (なんのことか訳が分からない。あるいはなんでワンライナーなんだ? という方は飛ばし読みするか筆者を検索してみてください。) これで0ステップ目から361ステップ目までの(x,y,θ) を求めることができます。座標は平面上にとり、 初期位置は(0,0,0)とします。
uedambp:~ ueda$ yes |
awk 'BEGIN{x=0;y=0;t=0}{print int(x),int(y),int(t);
x += cos(t*3.141592/180);
y += sin(t*3.141592/180);t++;if(t==360){t=0}}' |
head -n 361
0 0 0
1 0 1
1 0 2
2 0 3
(中略)
-5 0 354
-4 0 355
-3 0 356
-2 0 357
-1 0 358
0 0 359
0 0 0

というように、360ステップ目にもとの位置、向きに戻ってきます。

つまり、 目隠しされ、 少しずつ体の向きが同じ方向にずれていく人は、 まっすぐ歩いているつもりが円を描いて 元の場所に戻ってしまうという結論が導かれます。

「砂漠を脱出しようとして元の場所に戻ってきてしまった話」 というものを聞いたことがある方は多いと思いますが、 実は、これは物理的には極めて当たり前の現象と言えます。

■まっすぐ走らない理由(哲学編)

そもそも我々の言う「まっすぐ」とは何なのでしょう? 「道路をまっすぐ走る」 「(ゴルフ場かどこかで)旗が立っているところまでまっすぐ歩く」 などと言う言葉は日常では正しいのですが、 前者の場合、道路は曲線を描いていてもまっすぐ走ると表現しますし、 後者の場合、目標が見えているから言えることです。 また、どちらの場合でも地面が真っ平らでない場合もあります。

ロボットの動きをプログラミングするときは、 このような人間の「普通の考え」は一切通用しません。 カメラ画像やレーザーで目標物を認識できる場合は、 それを使ってロボットを目標点まで誘導してやることになります。 そして、ロボットの動きには「まっすぐ」はないので、 センサの情報から向きを補正する作業が必ず入ります。 ロボットをプログラミングするときは、 このような「当たり前」が必ずしも当たり前でないことを 突きつけられて、かえって人間の 脳や常識について思いを馳せることも少なくありません。

ところで筆者は若い頃、 まっすぐ生きてみたいものだと思っておりました。 しかし、まっすぐって結局、 どこにも無かったよなあ・・・。 せめて円を描いて元に戻ることは避けたいのですが、 輪廻という言葉もある通り、何かから逃れられないのが 人間の業というものでありましょう。

おしまい。

PAGE TOP