Next: ポールをかわす(結局採用になったのは…)
Up: 走行アルゴリズム
Previous: まずは、ポールを追跡する
Subsections
カメラにポールが写っていると仮定する。カメラの画像より次の
ポールが赤なのか青なのかを判断し、赤であれば廊下の左側の壁からdr
離れたところに平行移動や、左右の超音波センサによるフィードバック制御
など適当な方法で移動する。青であれば、逆の壁に同じ制御方法で近づく。
左壁からdrの距離に近づいたら、その距離をdrに保ったまま
直進する。この制御はdrを目標値としたPD制御で行う。この時、カメラは
常にポールの方向をむき、ポールまでの距離を把握しておく。
ロボットがポールに近づいたら、1に戻る。
ここで、近づいたという事を具体的に考えると、
- カメラの角度
がある値
を超えた。
- カメラからポールまでの距離dtがある値より小さくなった。
などが考えられる。
問題点
始めは、わりと簡単にできるのではないかと思われていたのだが、実際には
なかなかうまく行かない。
- 1.
- すばやく壁の近くへ移動することができない
YosaQがステアリング機構を採用したことから、その場での回転など
というような小回りが利かないために、こうしたことが起きる。テストの結
果、もっともポールとポールの間が狭い部分(およそ2m)ではおそらく通
過は不可能という見込みだった。
- 2.
- 仮にすばやく壁の近くへ移動しても、態勢を廊下に対して平行に
立て直せない
前の問題に付随して、すばやく移動できたときはできたときで、今度は
廊下に対して真っ直ぐ走れずに壁に激突する。
ここでの「ポールを見ない」とは「首(カメラ)を振らない」という意味
である。「目標をずらす」とは、koikoiプログラムのように単純にポール
を追跡するのではなく、その間の少し横を目標値とするということである。
次に、図を用いて説明する。
図のような状況を考える。まず変数、定数の説明をする。図にはないが、
一番手前のポールまでの距離をd0とする。次に手前のポールと奥のポール
の距離をdとする。画面上でのポールの中心から目標のラインまでの距離を
r0,rとし、ポールを構成するドットの数をS0,Sとする。ここで、S0,
r0は基準の定数として、カメラから1mのところにポールをおいてあらかじ
め測定しておく。
また、前提条件として、カメラからの距離がn倍の位置にあるものは、
辺の長さが
、面積は
に見えるものとする。
以上の変数を用いて目標値の算出を行う。
まず、前提条件から、
|  |
(1) |
より、
|  |
(2) |
となる。
再び前提条件より、
|  |
(3) |
上の式を代入すると、
|  |
(4) |
となる。
結局、rはSの関数になるので、Sをカウントすればkoikoiプログラムの
ような目標値ではなく、画面の中心からrだけずれた点線のところを目標と
することができる。
問題点
- 1.
- 目標値の揺らぎ
図では、さもポールがきっちりと画面内から切り出せているように見えるが
本当はそんなことはない。画像処理のところでも触れるが、なぜか色が揺ら
ぐためにロボットの目にはポールはゆらゆらと揺れているように見える(ら
しい)。画素の数にも揺らぎがあるためにポールの大きさが一定でなくなる。
目標値の算出にポールの大きさを用いるため、制御に支障をきたすようにな
ってしまう。これは、色フィルタの性能を良くすれば直るのでは、とも思わ
れたが結局、本質的解決には到らなかった。
- 2.
- ポールの横を通りすぎる際の制御
ポールの横に近づいてくると、右図のようにポールが画面からはみ出してし
まう。目標値は毎回ポールの画素数から算出しているので、画素数が
大幅に減少することにより目標値が非常にポールに近いところに設定されて
しまう。つまり、ポールに向かって走ってしまうわけである。直前まではい
いかんじで走って行っているにも関わらず、急にポールに向かって突っ込む
事になるわけだ。この問題は後々まで尾を引くことになる。
Takao NAKAI
1999年1月18日