課題概要については→課題2E地点を右折するプログラムを作成した。†ロボットの長さは16.9cm、幅は14.0cm、高さは15.5cmである。本体を直立させ、タイヤを幅いっぱいに広げることでより小回りがきくようになっている。本体の背面には支えるためのアームが取り付けてある。タイヤなどではなく、接地面の少ない棒にすることで摩擦が少なく動作を妨げない。1つ問題は光センサーがやや高い位置にあるため、明暗を判別する値の範囲が狭くなってしまったこと。これはプログラムで上手く調整すれば影響はなかった。Off(OUT_AC);Wait(100);まずは閾値(明暗を判別する際の境界の値)を計測の結果から39と設定し、THRESHOLDで定義した。スムーズな動作を実現するためset_powerにより二種類の回転速度を設定。直進するときはハイパワーで、曲がるときはローパワーで回転するようにした。turn_right1とturn_left1は両輪を互いに逆回転させその場で回転するような急旋回、turn_right0とturn_left0は片方の車輪のみを回転させやや前進しながらの緩やかな旋回を定義している。Breakは交差点での停止動作をまとめて定義したものである。当然ながら、turn_right1やturn_left1ばかり使っているとその場で左右に振れるばかりで前に進みにくい。よってすべてを組み合わせて直進性を増すことができる。}まず黒い線の左側をトレースするプログラムと右側をトレースするプログラムの2つをサブルーチンで表した。(Lが左、Rが右)1回の動作は0.01秒で、黒い部分が6回続いたと判断した場合(交差点または直角な曲がり角と判断したとき)にこの動作から抜け出すようになっている。Black_Timeで変数を定義、閾値より光センサーの値が小さい(暗い)時にこの変数に1足して、逆に閾値より光センサーの値が大きい(明るい)時に変数を0に戻す(0を代入する)ようにしている。この動作から抜け出したとき(交差点や直角な曲がり角)の後の動作については、それぞれこのサブルーチンを呼び出した直後に入れられる。}初めにC_TIMEを定義して、何回交差点と判断したかを数え上げる構造にした。差し掛かると1に上がる。それぞれの値と位置の関係はプログラムについている説明を参照。E等の直角な曲がり角の場合、交差点と判断させた上でサウンドを鳴らしそのままトレースを再開させれば曲がれるのだが、ここで最大の難所があった。そこでEでC_TIMEに1足した後、タイマーを起動しその後1秒以内はBlack_Timeを考えないただのライントレースプログラムを行うことで解決した。もとからあるライントレースの一部を移植したのでBlack_Timeを数えるようにはなっているが、whileの範囲が時間なので関係ない。(この1秒というのは曲がり角を確実に抜けており、かつ次の交差点に差し掛からない範囲で適当に設定しただけである。)そしてもう1つ、HとGの間にあるヘアピンであるが、この区間は線の右側をトレースしているため、1つ目のヘアピンは外側を問題なく曲がれる。内側を曲がる2つ目のヘアピンは暗い部分が続くため交差点と判断してしまう。これを防ぐのは面倒なのであえて交差点と判断させてしまい、その部分を脱出するプログラムを追加することで解決した。最初はかなり苦労したし挫折しかけた。なにより何が原因で上手くいかないのかを考えるのに苦労した。最後まで走らせることができたときの達成感は格別であった。最初の課題でも使った旋回方法の使い分けが上手くできたと思う。今回は、いや今回もかなりの時間をかけてしまった。基本的なことはスムーズにできるように努力したい。