こんにちわ、青木です。
HM-StarterKit初級者の第4回は、迷路の場所によって目標値や閾値が変わってしまう時の対処方法についてです。4×4区画の動作確認用の迷路では迷路の真ん中を走るための車体姿勢制御で使用する目標値や壁の有無を判断するための閾値をマニュアル通りに設定するとおそらく問題なくスタートからゴールまでたどりついていることでしょう。そんな方からするとこの掲題は何を言っているのか疑問になると思います。このブログを読んでいくとそんな現象があるんだということに気づいてもらい実行すると大会で完走率が上がること間違いなしです。きっと・・・
動作確認用の迷路と大会の迷路の違いは?
HM-StarterKitを始めたばかりの時は、アールティから販売している4×4区画の迷路で動作確認をしていると思います。実際の大会の迷路は、全国大会の決勝では32×32区画(2.88×2.88m)、そのほかの大会では16×16区画(1.44×1.44m)の迷路となっています。大会の迷路に使用している壁、柱は、アールティから同じものを販売しています。その為壁の反射に関しては、事前に調査することができます。事前に壁の反射を調査したにもかかわらず、大会の会場で走らせるとゴールにつかないことが多々あります。
迷路の素材は同じなのにどうして大会ではゴールにつくことができないのかという謎とその解決方法を解説します。
謎の正体
動作確認の迷路は、4×4区画(0.36×0.36m)のサイズであり、一般的な蛍光灯などの室内環境での、面積の狭い迷路に当たる光はほぼ均一とみなして良いでしょう。しかし、16×16区画(1.44×1.44m)や32×32区画(2.88×2.88m)である大会の面積の広い迷路だと、室内環境であっても全体に当たる光を均一にすることは難しいです。
HM-StarterKitの距離センサは、光を使っています。対象物に光を反射させ、反射した光の明るさを測定することで対象物との距離を知る仕組みになっています。
HM-StarterKitが受光する光の明るさには、壁に反射した光のほかに、会場の光の明るさも含まれています。壁に反射した光のみを測定できるように、HM-StarterKitは、発光する前に会場の明るさを測定し、その後、発光した時の明るさを測定しています。その後、差分を取ることで、壁に反射した光のみとなるようにしてあります。下記のコードは、interrupt.c内にある右センサの内容を表示しています。
//差分フィルタ S12AD.ADANS0.BIT.ANS0=0x0004; //AN002 S12AD.ADCSR.BIT.ADST=1; //AD変換開始 while(S12AD.ADCSR.BIT.ADST); //AD変換終了まで待つ sen_r.d_value = S12AD.ADDR2; //環境値を保存 SLED_R = 1; //LED点灯 for(i = 0; i < WAITLOOP_SLED; i++); //フォトトランジスタの応答待ちループ S12AD.ADANS0.BIT.ANS0=0x0004; //AN002 S12AD.ADCSR.BIT.ADST=1; //AD変換開始 while(S12AD.ADCSR.BIT.ADST); //AD変換終了まで待つ SLED_R = 0; //LED消灯 sen_r.value = (S12AD.ADDR2 - sen_r.d_value);//値を保存
この差分を取ることでかなり会場の明るさのばらつきを取り除くことができますが、それでも大会のサイズの迷路では、ゴールに達することが難しいです。
会場の明るさ以外に何が影響している?
光の明るさによって比例している理想的な受光素子ならばおそらく差分だけで問題にならないでしょう。しかし、理想的な受光素子ではない為、暗いところでの反応と明るところでの反応が違ってしまいます。全体的に明るい会場であれば、誤差範囲になると思いますが、暗い会場では少しでも明るいところがあるとセンサの値が大きくなってしまいます。
試しに4×4区画の迷路で極端に明るさが違う環境を作ってみました。
左側が明るく右側が暗い環境です。この時、センサの値を確認してみます。
左側の明るいところ
右側の暗いところ
柱と柱の間に車軸があるこの位置で、HM-StarterKitの走行の目標値と、前壁の有無の閾値を取得している場所になります。目標値に関しては、300ぐらい違っていますが、目標値がある程度ばらついても迷路の真ん中を走らないだけでさほど気にする必要はありません。問題なのは、前壁の閾値に使う値です。明るいとろでは、500-600ぐらいだったのに対し、暗いところでは、300ぐらいしかありません。明るいところでパラメータ設定していたら、暗いところでは壁なしと判断されてしまいます。
閾値の設定
会場内で一番暗いところに合わせて閾値を取得し、そのパラメータで試走してみて問題なさそうならそれで良いのですが、それでも壁の認識を間違えてしまう時があります。
HM-StarterKitの壁の有無の判断は、先程の位置で行っています。その手前、奥では壁の有無の判断をしていないため、試しにHM-StarterKitを手間に持ってきて値を確認してみます。
この位置なら前壁のセンサの値が153,182であり、先程の暗いところより小さいためこの値なら壁の有無の判断が正確にできます。あまり下げすぎると一区画の前の壁と判断してしまうためこのぐらいしてしておくと良いです。同様に左右の有無の判断も隣の壁を判断しないように下図の位置で確認し、+5ぐらい加算した値を閾値にすると良いでしょう。
次回は、袋小路での物理的な車体位置補正の方法です。
お知らせ
手のひらサイズのマイクロマウスキット「HM-StarterKit」
33%OFFの特別価格で販売中!
製品ページはこちら

アールティロボットショップで購入する