]追加された行はこの色です。削除された行はこの色です。[#x23a59f6]第二回目の課題は、ライントレース(&ボール運び)ロボット作成。課題内容は[[こちら:http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMission2]]を参照。[#jf1949a7]今回選択したコースはC→A。いうルートになっている。下の画像は、ルートを簡略に説明したgif画像。[#f1479046]下はロボットの全体写真。真横から撮影したものである。#ref(./mission2_001.jpg,50%)前輪にモーター2つ、後輪にはキャスターを用いた。ボールの移動にアームを用いた。以下、詳細に説明する。[#kf654dea]前輪のタイヤの間隔を出来る限り狭くするよう心掛けた。そのようにしたことで、私のコースではないがC直前のような急カーブでもスムーズに対応できるようになった。モーターの間隔を狭くするにあたって、前後に余分な空間ができてしまったが、前方は光センサーの取り付け部分、後方はキャスターの補強部分となり、小型化する上で有用なものとなった。#ref(./mission2_006.jpg,50%)光センサーは、床から高さ5mm程度に設定している。距離が出来てしまうと、周囲から光の影響を受け易くなり、至近距離では明暗の差が減少してしまうと考えたからである。#ref(./mission2_005.jpg,50%)また、前回同様、キャスターの高さ調節には苦労した。垂直にならなければキャスターとして機能しないからである。班の中で意見を出し合えたおかげで比較的時間は掛からずに制作することが出来た。本体とキャスターの取り付け部分に余裕をもたせているのは、方向転換の際の回転を滑らかに行わせる為である。[#efccc724]今回作成したアームは、モーターの回転によって上下するというシンプルな構造にしてある。アームには、前にボールが転がらないようにするという役割を担わせる一方、進行を左右されないようにボールを持ち上げるようにした。#ref(./mission2_003.jpg,50%)ピンポン玉のような軽いものでは大差はないかもしれないが、ボールで前に突っ張ってしまうような心配はなくなった。[#h462160c]アームが早く上下してしまうと、こちらの意図しない負荷が部品にかかってしまう恐れ(アームの上下動による部品の故障)があった。それを無くすためにもギア比調節による減速は不可欠であった。#ref(./mission2_007.jpg,50%)今回用いたギア比は、+モーター(1)に歯数8の歯車をつけ、2本目の棒(2)の歯数40の歯車に噛ませる。(ギア比8:40なので速度1/5)+2本目の棒には歯数40の歯車と歯数24の歯車がついている。(ギア比は40:24なので速度3/5)+歯数24の歯車と、3本目の棒(3)の歯数40の歯車に噛ませる。(ギア比は24:40なので速度3/5)3本目の棒にアームがついている。よって、ギア比は(1/5)*(3/5)*(3/5)=(9/125)となる。モーターが14回転すると、アームのついている棒が1回転する。モーターが4回転するとアームが約100°(アームが上下する幅)回転することになる。[#n62cfe2b]プログラム全体を記載する。[#mf1882b0]今回のプログラミングでは、3段階に分けてプログラムを組み立てていった。+スムーズなトレースが出来るようにすること。+交差点判断を明確にし、判断後の動作を調節すること。+アームを使用し、今回の課題に添わせる内容にすること。最初に上記のプログラムにあるライントレースの部分だけを完成させた。ラインをトレースさせることだけで試走させ、形になったところで、交差点動作をループの中に追加させた。スタートからゴール手前の交差点まで一連のトレースが可能になったとき、ボール確保とシュートのプログラムを実行するように組み込んだ。[#cc01eadd]連続で黒と判断された回数をカウントすることによって、交差点を判断させた。7回連続で黒となった場合は、カーブではなく交差点であるという指示である。交差点横断だけでは不十分な部分を、交差点に差し掛かった回数をカウントすることによって、その交差点に見合った条件を付け加えるようにした。その交差点時動作に付随する形でアームの挙動を設定し、今回の課題(ボールをゴールへシュート)を遂行した。内側に入りすぎ(黒)の時、または外側に出過ぎ(白)の時は、右左折する(直角に曲がる)ようにした。共に光度差4を範囲としてあるが、灰色は光度差8を範囲としてある。直進(go_forward)の判定幅を多めにとることによって、速度の向上に繋げた。setpowerを用いているのは、直進時とカーブ時に緩急をつけるためである。カーブ時のトレースがより正確になり、交差点付近等でのタイヤによる滑りが軽減される。ギア比での速度調整では、必然的に速度の遅い方に合わせる必要が出てくる。それでは直線時の移動速度に無駄が出来てしまう為、setpowerを用いる必要があった。前回の課題でsetpower3以下は好ましくないとわかっているため、低速時のsetpowerを4にしている。[#e3729495]上記のプログラムを用いて実際に動作させた時の動画。[#e01af27f]今回は、前回の書道ロボットに比べ、かなりスムーズに完成したと思う。ロボットのイメージがより具体的になってきたということと、パーツを覚え始めたということが時間短縮に繋がっていったのだと考える。プログラミングの理解力をもっと高める必要があると感じる場面があった。ifの入れ子構造の繋がりを理解することに時間がかかった上、確認作業にも手間取った。作り始める、というスタンスではなく、プログラムのイメージを一度書き起こしてから、プログラミングに取り掛かっていくべきだったと感じた。最終課題では、課題1、課題2で得た知識や反省を活かしながら取り組めるよう心掛けたい。[#fb517c2d]※課題2のページに追加更新という形をとる。[#v4fb8b34]ロボティクス入門ゼミ最終週(2015年7月31日)にロボティクス入門ゼミの集大成となるロボットコンテストが行われた。以後文中表記の際はロボットコンテストをロボコンと略称を用いる。ロボットコンテストの詳細は[[こちら:http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2F%A5%ED%A5%DC%A5%B3%A5%F3]]を参照。ロボコンの詳細は[[こちら:http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2F%A5%ED%A5%DC%A5%B3%A5%F3]]を参照。[#kcadc6b7]#ref(./robokon.jpg,65%)ロボコンのロボット本体の基本構造は上記の課題2で説明した構造同様である。ロボコン用のロボットは、AB共にアームと光センサーの位置を除くほぼ全てのパーツ配置を同じにしてある(不足パーツは他のものを代用している)。プログラムの際に同じような数値を入れるためである。そのような構造にすることで、プログラミングの時間短縮を図った。課題2のロボットは上下に動くアームでボール持ち上げ移動させていたが、ロボコンでは、ボールの受け渡し動作があるため、タイムロスが大きい上にパスの安定性に欠ける。今回のロボコン内容に沿わせるため、アームの部分だけを変更し、左右に開くアームを用いることにした。アームが左右に開く場合、同じ高さでは互いにぶつかり合うため、上手くパスが通らない。そこで、アームの位置を上下にずらすことによって、アーム同士の干渉自体を避けることにした。2台ともボールを左右から同時に挟むようになっているため、パスの際生じる多少の位置ずれを補えるようになっている。AとBのロボットのアームパーツ(黄色のボールを挟んでいるパーツ)のつけ方を逆にした。Aは本体から少し遠めの位置にボールを、Bは本体から近い位置にボールを固定することによって、ABのアームが双方の本体に接触せずにボールの受け渡しが可能になった。[#l47b9281]プログラムのライントレース部分に関しては、課題2とほとんど変わらないため、コメント文を省略してある。必要な部分のみの記述となっている。ロボコンに向けてのプログラミングを行うにあたって、AB共に8Vを切ってしまうような低電圧時にプログラミングを行った。ロボコン直前で電池を交換したため、90°回転など秒数で制御、調整していたものが全て無駄になるというアクシデントがあった。ライントレース精度にも支障をきたし、スムーズなトレースが出来なくなった。モーターの回転速度が格段に上昇したため、黒の連続回数カウントが上手くいかなくなったのである。自分たちの班のロボコンがスタートするまでに、何とか改善しようと、焦りに焦り、今までにないスピードで必要最低限のプログラミング変更を施した。故に、ロボットAに入れるプログラムをBに記述したりと冷静さを欠いていたのは目に見えてわかった。その時のプログラムの主な変更、追加点として、速度調節のためにギア比調節は無謀だと考えたため、急遽setpowerを組み込んだ。カーブ時に用い、直進動作では用いていない。カーブ動作時はモーターの出力誤差はあまり関係ないからである。直進動作はライントレース速度向上のため、不問にした。始動命令(signal_go)を受け取った際に、受け取りましたという信号(SendMessage(signal_ok))を作り、最初は送っていたのだが、作業の遅延に繋がっていると感じたため、省くように変更した。Off(OUT_AC);上記のプログラムは、ロボットAのプログラムを一部抜粋したものである。BゾーンからCゾーンへロボットAが向かう際に、ライントレースによって向かった方が、Cゾーンに入ったときにより確実な方向調節が可能になる。そのためにも、どこかでライン上に乗らなければならない。元来た道を辿ってしまうと、途中でBゾーンから出てきたロボットBと接触してしまう場所が出てくる。それを避けるために、Bゾーンから下へ直進し、Cゾーン付近のラインに乗るようプログラミングを行った。以下が上記のプログラム動作を可視化した説明用gif画像である。[#z748479c]今回のロボコンでは、無事タイムを残すことができ、結果1位を獲得できた。テスト期間に行った作業が報われる形になり喜ばしく、また安堵した。時間に追われて作業した結果、プログラムにはまだ改善の余地が見受けられる。速さと正確さ、簡略化を兼ね備えたプログラミングが出来るよう努力していきたい。大学高年次なるにつれ、ロボット、プログラミングはますます複雑なものになっていく。RISは青少年向けキットであるが、それでもかなり翻弄された。私はこの講座で初めてプログラミングに触れたが、専門分野に入る前に少しでも触れることが出来たことは、大きな収穫であったと感じる。これからも自分なりの考え、方針をもってプログラミングが出来るよう精進したい。