35;それぞれ後で解説します。機体前20cm以内に何もない時はライントレースします。機体前20cm以内に缶がある場合は缶の処理をします。色い領域に出たら黒線を探します。白線領域に大きくはみ出して黒線を検出できなくなった時の対処です。ターンし始める方向を決定します。turn()で決定した方向に回転します。回転時間はTurnTime間ですが、黒線を検出するとdecide()を抜けて再び直進します。どの方向に黒線を検出したかを記録。機体の方向をもとへ戻します。最初とは反対の方向に回転します。黒線を検出した方向を記録。TurnLevelを引き上げて、decide()の先頭から繰り返し。}}}}このサブルーチンは黒線を探すプログラムです。最初に片側にTurnTimeに代入した時間だけ回転します。回転中に黒線を検出したらそこでdecideプログラムの先頭へジャンプし、またまっすぐ走行します。回転中に黒線を検出できなかったらロボットの方向をまた元に戻し、今度は逆の方向へTurnTime分を回転します。ここでも同様に回転中に黒線を検出したらdecideの先頭に戻ります。検出できなかったらまたロボットの方向を元に戻しTurnLevelの値を増やして再度黒線の検出を再開します。ここではいくつかの変数が出てきます。TurnLevelこれはTurnTimeの値を決定するのに使われます。黒線の検出に失敗したら値が増え,それに応じてTurnTimeの値が増えていきます。黒線の検出に成功したら0にリセットされます。TurnTime回転する時間を決めます。時間に応じてロボットの回転角が変化します。turntime()で値を計算します。cdこれは次にロボットが黒線を探すときに、どの方向から回転し始めるかを決める値として使われます。この値はOnFwdSync,OnRevSync関数の旋回パーセントです。ここでは100が右回転、−100が左回転です。pcdこれにはどの方向に黒線を検出したかを記録します。この値を利用してcurve()を発動させます。1500;}}見ての通り、TurnLevelの値に応じてTurnTimeを代入しています。defaultではTurnLevelが0でも1でもない時の値を設定しています。-cd;}ここではロボットがdecide動作に入った時にどの方向から回転し始めるかを設定しています。毎回cdの値を反転させることでジグザグ走行を実現しています。連続で右側に黒線を検出したときに値が増加。連続で左側に黒線を検出したときに値が増加。35;}これによって連続で同じ方向へ曲がる動作をさせています。2回同じ方向に黒線を検出したらcdの値の書き換えとモータの出力の増強とを行っています。pはモータの出力です。0;}}コースから外れすぎた時のための処置です。バックしてまた黒線を探し始めます。10.ct()缶をどかします。†ライントレースに関しては、自分の構想がうまく実現できたので満足している。普通のコースはだいたい上手く走れると思う。交差点処理が無いという点で面白いものが出来たと自分の中では思っている。交差点を検出することが出来ないので、課題によっては難しかったり不利になったりするかもしれない。コードに関しては少なくて見やすい様に心掛けた。変数の使いまわしなどが多くて自分以外の人には理解しづらいかもしれない。・コード書くのは楽しいけど修正作業がつらい・自分の頭の中の構想と自分が書いたコードが一致してないのでうまく動かなくて作業がはかどらなかった。最後には一応思った通りのものができた。