[[2009a]] *目次 [#f4e29bb1] #contents **課題・ロボコン [#lc482827] 紙パックを収集して色ごとに所定の場所に運ぶ。 途中に超えなければいけない壁があり、またラインの判定、色の識別、障害物の認識など今までに学んだことを応用する必要がある。 **メンバー [#qca2151a] おくりびと制作委員会~ ・スガ~ ・はやぶさ~ プロジェクトI~ ・かおりん~ ・ハる~ ・松~ **ロボットの特徴、工夫 [#u3e83e8a] 課題の特性上2つのロボットで役割を分担するのが最良と考えたので以下の2機を制作しました。~ まず中央の壁の向こう側までもう1機のロボットを運ぶ役割をする「おくりびと」byハる。~ 次に壁の向こうで紙パックを所定の位置まで運ぶ「愛ちゃん」byハる。 ***おくりびと [#ca1c8503] ・愛ちゃんを壁の向こう側まで送りとどけるため、壁の前まで運び、足場を作って壁を越えさせます。 ・ロボットを上に載せるので必然的に大きくなってしました。そのため、曲がるときに周りに引っかかってしまいうまく曲がれませんでした。 ・上のロボットを支えないといけないので強度を強くし、なるべく高さを低くしました。 ・車体を低くしたところ、本体を入れるスペースがなくなったので、足場とのバランスを取るのも兼ねて後ろに取り付けました。 ・はじめ前後輪をつなげて四輪駆動で馬力を出そうと思ったが、タイヤとホイールが空回りしてしまったりしてうまくいかなかった。 三輪にしても曲がる時にバランスを崩し、前輪が変な方向を向き安定しなかった。 前輪はモーターとはつながずに、横にすべりやすいものにしたところうまくいきました。その際、スピードが出過ぎだったのでギアの組み合わせで遅くしました。 ・移動中に勝手に足場がおりてしまうことがあったので、ストッパーを付けてモーターで外せるようにした。 ***愛ちゃん [#df22dd37] 作業の途中で、致命的な不具合を発見しましたので、ここにアップしておきます。 1.四輪駆動の取扱説明書のロボットが動かない 二輪駆動にし、前輪を一輪にすることで対処しました。 原因は、モータの出力が不足している、重量過多であるなど、さまざまな原因が考えられましたが、結局、前段階の課題では正しく動作していた、取扱説明書の正規のデザインのロボットであることから、部品などの摩耗が原因だと思われます。 2.スロットCの回線が断線している これは、端子を拭き取ることで対処しようと試みましたが、復旧できませんでした。 原因は、ワセリンを使用していないことであると推測されます。 **プログラム [#e3e3741b] ***おくりびと [#ra79abe2] スタート地点から黒線で曲がる位置を判断し、方向転換して壁の真ん中まで進みます。 ***愛ちゃん [#k78cf1c6] 愛ちゃんは動作確認ができないので、プログラムのみを記載します。二人でそれぞれひとつのプログラムを制作し、愛ちゃん復旧時にまた改めて変数調整を行う方針でいきます。 これつけて #define GO_SIGN 22 たすくめいん until (Message() == GO_SIGN); OnFwd(OUT_A+OUT_C); Wait(100); チェック #define THRESHOLD 50 #define GO_SIGN 22 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetPower(OUT_B,7); ClearMessage(); until (Message() == GO_SIGN); OnFwd(OUT_A+OUT_C); Wait(100); Off(OUT_A+OUT_C); Wait(100); OnRev(OUT_A); OnFwd(OUT_C); Wait(60); Off(OUT_A+OUT_C); Wait(100); OnFwd(OUT_A+OUT_C); while(true){ if(SENSOR_1<THRESHOLD) { if(SENSOR_3<THRESHOLD){ OnFwd(OUT_A+OUT_C); Wait(40); Off(OUT_A+OUT_C); Wait(100); OnRev(OUT_A); OnFwd(OUT_C); Wait(55); Off(OUT_A+OUT_C); Wait(200); OnFwd(OUT_A+OUT_C); Wait(60); Off(OUT_A+OUT_C); Wait(100); OnFwd(OUT_B); Wait(80); OnRev(OUT_A+OUT_C); Wait(65); Off(OUT_A+OUT_C); Wait(100); OnFwd(OUT_A); OnRev(OUT_C); Wait(130); OnFwd(OUT_A+OUT_C); Wait(150); OnRev(OUT_B); OnRev(OUT_A+OUT_C); Wait(110); Off(OUT_A+OUT_C); Wait(70); OnRev(OUT_A); OnFwd(OUT_C); Wait(60); Off(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_C); Wait(150); }} } } task main() { OnFwd(OUT_A+OUT_C); Wait(400); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); ラインを両方とらえたとき・・ until ((SENSOR_1 < 45) && (SENSOR_3 < 45)); Off(OUT_A+OUT_C); OnFwd(OUT_A); 旋回します。 OnRev(OUT_C); Wait(50); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); パックまで接近 Wait(150); Off(OUT_A+OUT_C); OnFwd(OUT_B); アームを作動させます。 OnRev(OUT_A+OUT_C); 少し下がる。旋回のためのスペースを得るためです。 Wait(10); Off(OUT_A+OUT_C); OnFwd(OUT_A); 180度旋回。 OnRev(OUT_C); Wait(100); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C);ゴールまでは変数を調整します。 Wait(550); Off(OUT_A+OUT_C); OnRev(OUT_B); アームを解除します。 } void cross_right(int t) { OnFwd(OUT_A+OUT_C); until ((SENSOR_1 < 45) && (SENSOR_3 < 45)); Off(OUT_A+OUT_C); OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C); } void cross_left(int t) { OnFwd(OUT_A+OUT_C); until ((SENSOR_1 < 45) && (SENSOR_3 < 45)); Off(OUT_A+OUT_C); OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_A+OUT_C); } **感想 [#nd2b43c3] **コメント欄 [#r45d621d] コメントお願いします。 - てすと -- [[はやぶさ]] &new{2009-08-05 (水) 01:48:19}; #comment