画像処理マイコンカー製作




最小二乗制御法(理論編)

 カメラから得られた画像から車体がラインかのどれぐらい「ずれ」ているかを知る必要があります。現在のマイコンカーラリーはセンサーでこの「ずれ」を読みとってラインから「ずれ」ないようにハンドルを制御しています。画像処理でも同じようにラインとの「ずれ」を読みとる必要があります。
 また、カメラから読みとったデータは2次元の広がりを持っていますので車体とラインとの「傾き」を知ることが出来ます。マイコンカーでは、センサーの配置が1次元のためこの情報を得ることが出来ません。先読みセンサーはこの情報を得ようとしていますが、傾きを知ることが出来ますが、どちらに「傾き」かを知ることが出来ません。
 カメラから読み取った画像より、「ずれ」「傾き」を知るために数値計算法で使われる「最小二乗法」で演算しました。ただし、カーブを正確に処理しようとすれば、多項式を扱わなければなりませんが、計算が複雑になりますので、処理が簡単な1次式で処理しました。この数値計算法を用いてマイコンカーを制御しますので「最小二乗制御法」と勝手に命名しました。
 将来的には、処理能力の高いマイコンで多項式を処理を行い違いを検証したいと思います。

○ 最小二乗法とは

 たとえば、抵抗に印加する電圧と、流れる電流を測定し、グラフにプロットすると1次元の比例関係になります。しかし、測定誤差などの影響で綺麗にまっすぐに並ぶことはありません。

グラフ

この時、プロットした点を結んだ折れ線グラフを書いてしまいますと、実習レポートではやり直しになってしまいます。

グラフ

普通は、「エイヤ!」と一直線を引きます。この一直線を「1次関数」と言います。今回、カメラから得た画像の中から、ラインの重心をプロットした点として、「エイヤ!」と線を引き、傾きaをマシンとラインの「傾き」とします。定数bをマシンの「ずれ」とします。

グラフ

 人はちょうど良いところに「エイヤ!」と線を線を引くことが出来るのですが、コンピュータは適当に線を引いてくれません。そこで数値計算法で使われる「最小二乗法」で線を引きました。  最小二乗法とは、「エイヤ!」と引いた線と実際のプロット全てとの距離がもっとも小さい値になるように計算します。理論的なことは、かなり難しいのでページ数が必要ですし、他のページにわかりやすいページがありますので、そちらをご覧ください。検索ページで「最小二乗法」とでも入力してもらえれば、たくさんヒットします。ぜひ、理論の方も一読ください。

グラフ

 この制御ではどのように計算しているのかは、ライン幅を求めたときに合わせて、ラインの重心を求めていますので、この重心をy点とし、マシンから近い方からx点としてA、B、C、D、Eを求め、最小5点以上の重心を観測できたときに傾きaaと定数bbを求めています。

最小二乗法

次回は「最小二乗制御法(実践編)」です

<< ラインの検出   目次  最小二乗制御法(実践編) >>