23:19:32)追加された行はこの色です。削除された行はこの色です。[#t653a1ed]詳しくは[[2019a/Mission2]]を参照してください。A地点に入る(ゴール)というコースを線に沿わせてロボット動かしながら、卓球のピンポン玉を回収し、それをゴールまで運びました。ルールは交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。[#be1016a5]・成功率を高めるために、多少のズレをカバーできる自立して判断するログラム(whileループやif文などの条件分岐による動作決定など)・プログラムに余計な負担がこないように、小回りが利き、よりコンパクトなロボット設計。(次のロボットの設計で詳しく述べる)・プログラムに余計な負担がこないように、小回りが利くロボット設計。(次のロボットの設計で詳しく述べる)・前回の課題1の反省を生かし、周りと情報を共有し、過去のレポート・前回の課題1([[2019a/Mission1]])の反省を生かし、周りと情報を共有し、過去のレポート等もしっかり参照する。ネットでも使える情報を集める。[#n1c449a6]コースにはきついコーナーなどがあり、特に今回は例年よりコースが小さくなったので、より小回りが利くことが重要視されました。我々のev3は他のRISやNXTより全体的に大型なこともあり、小回りが利く、小型化がより重要でした。#ref(./810-10-min-min.png,10%,ロボット)コースにはきついコーナーなどがあり、特に今回は例年よりコースが小さくなったので、より小回りが利くことが重要視されました。我々のev3は他のRISやNXTより全体的に大型なこともあり、小回りが利くかがより重要でした。その為に、まずタイヤをよりロボットの中央に近づけることから始めました。その為に、ev3本体の操作がしずらいロボットとなってしまいましたが、小回りの為の致し方のない犠牲です。その為に、まずタイヤをよりロボットの中央に近づけることから始めました。その為に、ev3本体の操作がしずらい巨大ロボットとなってしまいましたが、小回りの為の致し方のない犠牲です。この縦長ボディは骨格が多く、さらなる拡張性には対応しています。#ref(./810-1.PNG,50%,ロボット全体)次に、重量物のev3、長い回収アームが上面にあるというかなり不安定な構造であるので、細いプラスチックのパーツに負担がかかり、ロボットの剛性が不足しました。そこで負担を和らげるように補強をいたるところにしました。そのことにより、ボディの剛性が上がり、動作の安定にも寄与しました。これには多数のパーツを要したため、パーツ不足に悩まされました。故に、無駄にパーツを使ってないか、このパーツが使えるかも、などを考えながら限られたパーツのみで作る必要がありました。次に、ピンポン玉を回収するアームについて説明します。このアームは板と板の間にピンポン玉を挟むようになっています。ピンポン玉の下に潜り込み、球の直系より板と板の隙間が小さいことを生かして持ち上げます。下の画像の青矢印の方向にアームが上がり、ピンポン球を持ち上げます。次に、ピンポン玉を回収するアームについて説明します。このアームは板と板の間にピンポン玉を挟むようになっています。ピンポン玉の下に潜り込み、球の直系より板と板の隙間が小さいことを生かして持ち上げます。下の画像の青矢印の方向にアームが上がり、ピンポン球を持ち上げます。この先端の形状により、先っぽがちょっと引っかかっただけでも、ひょいと持ち上げてくれました。これが左右にずれても回収してくれました。回収地点にさえ着けばほぼ確実に回収に成功します。回収地点にさえ着けば....。#ref(./810-2.jpg,50%,ロボットアーム)このアームは非常に長いので、最初の移動途中にピンポン玉にぶつかったり、固定が甘いのでピンポン玉を振り落とさないように、ロボットの動作速度には配慮しました。このアームは非常に長いので、最初の移動途中にピンポン玉にぶつかったり、固定が重力と静止摩擦しかないのでピンポン玉を振り落とさないように、ロボットの動作速度には配慮しました。実際には揺れることもなく、固定はできていました。速度にはあまり配慮しませんでした。速度で攻めると、コースの走破時間が短縮できそうです。カラーセンサーの取り付け位置には気を付けました。これがタイヤから離れると、回転したときなどにカラーセンサーが大きく動いてしまい、その読み取る値まで大きく変わってしまい、以下で述べるライントレースが困難になってしまう。[#q8fc2041]今回の課題ではカラーセンサーが一つしか与えられていない。よってコースの黒線が測定エリア内にどれだけ入っているかによって動作を決定する。赤い円の中が測定範囲であり、黒の割合が多くなるほどカラーセンサの値が小さくなり、白の割合が多いほど値が大きくなる。これはカラーセンサが光の反射の度合いを測っているからである。実際の動作については、下の図の�のように、黒の割合が高いときは白が増えるように動き、�のように白の割合が高いときは黒の割合が高くなるように動きます。この�と�を交互に繰り返し、ジグザグに動きながら線の片側に沿って移動します。使用言語はPython3なので、この繰り返しはwhile文を使ってカラーセンサーの値の条件を満たせばこれらの動作を繰り返すようにする。#ref(./810-4.png,50%,ライントレースの図解)実際のライントレースのサブルーチンは以下のようになります。#カラーセンサーの値がcより小さい、つまり黒が多いと左前方に移動。このときスタート時刻は更新しないのが重要。#現在時刻−スタート時刻がtより大きくなる。黒の割合が多いコーナーだと、スタート時刻が更新されず、この差が大きくなる。これによりコーナーを検知し。モーターの動きが止まる。#カラーセンサーの値がcより小さい、つまり黒が多いと右前方に移動。このときスタート時刻は更新しないのが重要。#現在時刻−スタート時刻がtより大きくなる。黒の割合が多いコーナーだと、スタート時刻が更新されず、この差が大きくなる。これによりコーナーを検知し。モーターの動きが止まる。[#dc247ed9]基本的にはライントレースのコーナー判定時間を短くし、境界線を黒側に寄せることである。コーナーを判定する時間を短くすると、当然、道中でコーナーと誤判定する確率が上がりますが、より確実にコーナー^で止まりやすくなります。この誤検知の危険性と、停止する確実性の妥協点を探して調整しました。境界線を黒側に寄せると、コーナーについた際に、より、黒色が入る割合が増えます。同時に黒が多くないと止まらなくなるので、これも、黒を増やす割合と、コーナー判定の厳しさの妥協点を探すことになります。これら2つはt(second),c(cs.value())の2つの変数とし、コースの場所ごとに最適化することが何よりも大切です。[#ee636431]以下が実際のプログラムである。#Left,つまり左のモータがAポートに繋がっている。#Right、つまり右のモーターがDポートに繋がっている。#MediumモーターがBポートに繋がっている。これはピンポン球を上下するアームを動かす。#カラーセンサーがポート3に繋がっている。これはライントレースとコーナーの検知に利用する。#カラーセンサーが反射した光の量の値を読み取るモードに設定する。#左右のモーターの設定をリセットする。#ピンポン球を上下に移動するアームを動かす。y>0のときアームは上昇し、y<0のとき下降する。#長い距離を前進するときに利用。時間tの間だけ前進する。tの単位は秒(second)である。#長い距離を後進するときに利用。時間tの間だけ後進する。tの単位は秒(second)である。#時間t/1000秒の間だけ前進する。#時間t/1000秒の間だけ前進する。#t/1000秒の間だけ右回転する。#t秒の間だけ右回転する。#t/1000秒の間だけ左回転する。#t秒だけ左回転する。#cの値を境目に線の左側をジグザグ前進し、時間tだけ黒を感知すると動作を停止する。感知すると動作を停止する。#カラーセンサーの値を表示。この値を毎回確認し、カラーセンサーの値が正常か判断する。(以下同様に、()の中の数字の秒数だけ停止する。#コースの途中でピンポン球にアームが当たらないように上げながら移動する。#ライントレースをし、MからKまで移動し、Kでコーナーを検知して停止する。#Kで停止したままアームを下すと、アームがピンポン球にぶつかってしまうので後進する。#アームをピンポン球の下に潜らせる。#アームを上昇させ、ピンポン球を持ち上げる。