今回の課題の機体の構想やプログラムの書き方、発想は私の課題2の踏まえた上で作っています。この機体のライントレースのやり方についての詳しい説明は私の課題2のレポートに記載されています。そちらを読んだ後であると理解しやすいと思われます。課題2で使用した紙を用い、下図のマジェンタの円に逆さまにした紙コップを置き、その中にピンポン玉を2つずつ入れておく。割り箸を使って一辺が14cmの正方形を作り、X地点を中心とした円に接するように置き、その中にピンポン玉を入れていき、最後には紙コップを重ね、Y地点を中心とした円の中に置く。下図の黄色い円に紙コップを通常の向きに置き、障害物とする。直径6cmの円の外周をペンまたは鉛筆でマークしておく。詳しいルール説明は2017年度後期・課題3を参照してください。†N5・N6の合同メンバー。課題1・2・3とすべて下記の私を含めた三人で行いました。他の人達のレポートも分かりやすいと思うので、見てくださると幸いです。私は機体を作る作業をしていたのでプログラムについて詳しく知りたい方は他お二方のレポートを参照ください。�フィールド上を自由に動くために動き�紙コップをつかむ動き�掴んだ紙コップを持ち上げ、被せる動きの三点が挙げられる。�の機構に関しては課題2のものを今回の課題に合わせて少しだけ変えたものを使用することにした。�、�の機構は最初の構想ではクワガタのハサミのような形と動きで紙コップを掴む機構とその機構を持ち上げる機構を個々にモーターを使い、�の機構と合わせて4つのモーターで動かす予定であった。1つのモーターで�、�の動きをこなす機構(以下、「アーム機構」という)があることが松本先生の話から判明し、先生が出した例を応用、過去にこの授業を受けた偉大なる先駆者達のレポートを参考にすることで、アーム機構を作り出すことができた。これにより、フィールド上に二台のロボットを動かすことが可能となった。上記のアーム機構についてできる限り詳しく説明するが、私の説明力では全てが伝わるか怪しいため、私のレポートで理解できなかった場合は私以外の優秀な人たちのレポートを参考にしてもらいたい。初めに、紙コップをつかむ機構を作る。ウォームギアを用いることで紙コップを掴む両腕の部分の動きを同期させる。下図は両腕部分を取り外したものとなる。ウォームギアが回る仕組みとしてまず、�の黄色の矢印方向に黒い歯車を回すことで、黒い歯車の中の棒が回り、真ん中の黒い歯車も回る。次に、真ん中の黒い歯車が回ることで�の赤色の矢印方向に白い歯車が回る。最後に白い歯車の中の棒が回ることで�の緑色の矢印方向にウォームギアが回る。次にウォームギアとそれに隣接する歯車「ウォームホイール」の動き方についてこの説明においては私が図を書き、説明するよりは下記のURLに詳しい説明が記載されている。一応、下記のサイトの説明を簡単に説明させてもらうが、理解できない場合は飛ばすか、下記のサイトを読んでもらえるとわかりやすい。ウォームギアとは、ねじのような形状のウォームと、それにかみあうウォームホイールによって構成されている。ウォームギアの特徴として、直角に交差した回転軸に動力を伝えられることができる。他にはウォームギアがウォームホイールを回すことができるが、ウォームホイールがウォームギアを回すことができないことがあげられる。動力の働き方としては下記のサイトの画像がわかりやすかったため、下図に転載しておく。次に実際に組み立てた機構のウォームギアとウォームホイールの動き方について見てみる。下図は一応アーム機構としては完成形ではあるが、今は腕部分だけを見てもらいたい。上図の腕部分が回る仕組みとしてまず、�の緑色の矢印方向にウォームギアを回すことで、二つのウォームホイールが互いに逆方向に回る。その方向としては、�の青い矢印方向にそれぞれ回る。それによって、ウォームホイールに固定された腕部分が�の灰色の矢印方向にそれぞれ回り腕の中のものを掴む仕組みとなっている。†まず初めに、謝罪をさせてもらいます。本当に申し訳ありません。私の画力では絶対にアームを持ち上げる機構の説明が伝わらないため、例を用いて説明させてもらいます。理解できない場合はウォームギアの時と同様に、私以外の優秀な人のレポートを見て理解してもらうことを祈ります。私の意見ですが、機構の理解を得るための近道は実際にその機構を作ることだと思います。写真そっくりでも、簡易版でもいいので作ってみて、納得した後に改造することで新たな理解が得られると思います。†まず、かさ歯車と呼ばれるものの下図を見てもらいたい。上図の青色の矢印はそれぞれの歯車の軸を表していることがわかるだろうか。次に�、�の歯車がそれぞれその場に固定されていたと仮定する。仮定した場合、�の歯車を緑色の矢印方向に回したとすると、�の歯車はその場で灰色の矢印方向に回転を得ることができる。次に�の歯車自体の回転(灰色の矢印の回転)だけ固定された場合を考える。先ほどと同様に�の歯車を緑色の矢印方向に回したとする。した場合、�の歯車の動きとしては�自体の回転は存在せず、赤色の矢印方向に�の歯車を軸としてついていくように回転を得る。以上の二つの仕組みを利用してアームを持ち上げる機構を作っていく。上記の二つの条件の違いを作るために今回は負荷値の限界(最大値)を使っていく。下図は上図の歯車の関係の位置を表している。今回の機構の場合、歯車の負荷値が低い方から順番に回る為「アームを持ち上げる機構_1」の条件の場合が先に実行される。「掴む機構_3」に記載されている図の表の方の機構が動くということになる。下の図は、「掴む機構_3」に記載されている図の表の方を切り抜いたものである。次に上図のアームが�に動きをし続けると、両アームが互いのアームを押し合い始めることがわかるだろうか。なった場合、�の歯車の動きに対する負荷値の限界(最大値)に達したこととなり、�の動きができなくなることにつながる。なると次に負荷値が低いものの歯車が動きを行うこととなる。ここで、「アームを持ち上げる機構_2」の動きをすることになる。注意すべき点として、今回の機構の場合、この動きをするときには既に一度、負荷値の限界(最大値)に達しているため、「アームを持ち上げる機構_1-1」の図の�の灰色の矢印の動きはなくなると考えてよい。上図の青色の矢印は�、�の歯車の軸を表している。黄緑色、橙色はそれぞれ、�、�の歯車の回転を表しており、同じ方向に回る。�の歯車から繋がっている部分、要するにアーム機構全体が、※のついた青矢印を軸に回転する仕組みとなっている。上記の機構を利用することで、アーム機構が完成する。アーム機構を作成するにあたって、どちらを表(上向き)にするか、紙コップをつかみやすくするためも工夫などを考えながら作成していったものが下の写真となる。工夫については後述してあるので、読んでもらうと幸いである。※おおよそ上の写真の通りに制作されたがロボット本体に取り付ける際、アームの位置を上下を逆にしたり他にも細々としたところを改造しているので注意してもらいたい。†このアーム機構の主な工夫点としては三つ挙げられる。�紙コップを取り込む際の工夫(緑色の枠線)�紙コップを掴む際の工夫(水色の枠線)�持ち上げた紙コップを下げるための工夫(赤色の枠線)それぞれの工夫を下記に説明していく。†アームを閉じる際、紙コップを取らなければならない。紙コップが内側にはいっている場合、きれいに掴むことが実験で分かったので、細いタイヤを両腕につけるようにした。この時の最大の特徴として、タイヤが回ることである。上図はアームのタイヤ部分上から見た際の簡略図である。タイヤが黄色の矢印方向に回ることで、紙コップの位置が多少ずれていたとしても中に取り込むことが可能となる。この時のタイヤの回転は自然と起きるものである。細かな点ではあるがタイヤのゴムによって紙コップを掴む際の摩擦係数を高くすることによって掴み上げやすくなっている。紙コップを掴むとき、紙コップの状態をよりきれいに支える、紙コップの体制を確定させるための工夫である。紙コップをきれいに支える為の工夫として、三点で支えていることである。上図のように赤色の三点で支えることによって紙コップがぐらつくことなくしっかりと掴むことができる。この仕組みについては特に難しいことではないため特別詳しく説明はしない。特徴としては、二点より三点の方が安定する。することで安定性が増すくらいである。次に紙コップの体制の話である。普通であるならば、紙コップを地面と平行の体制のまま移動させるのだが、後に記載する「ピンポン玉をどうやって割りばしの中に入れるかという」過程において紙コップを斜めにしたまま安定させる必要が出てきた。その工夫として生まれたのが下図の工夫である。上図は紙コップを横から見ている図である。簡単に説明すると紙コップと当たる中心の棒の位置をタイヤの支点部分より下に下げた。することで紙コップが斜めの状態を維持できるのである。取り付け方としてはウォームギアの為の棒を短くし、その下に紙コップを支える為だけの黒棒を取り付けただけである。※現段階では中心の黒い棒が支えとなっているが機体の完成体では黒い棒ではなくなっている。詳しい説明は後述はする。今から説明する工夫はアームを締めてから持ち上げるまでは必要のない工夫である。紙コップを持ち上げた後、下したアームを広げるためには絶対に必要となっている。その工夫されてる部分とは、下図の緑色の枠線に囲まれた部分(以下、「ストッパー」という)となる。ストッパーがなかった場合どうなるか。その時の写真がないため、略図として書いたのが下図となる。見てわかる通り、ストッパーがないとアームを広げようとするとウォームギアが回転しながらどんどん前に行ってしまい機構として破綻してしまう。そのため、ストッパーをつけることでウォームギアの前進を止め、同じ位置で回転させることができるようになる。†アーム機構を制作するにあたって、実はこんなに大きなものを作らなくても良かった。言えば、もっとパーツ数を減らし、軽くすることもできると思う。この形になったかという主な理由は二つある。一つ目は、紙コップを取る際に色々と工夫して取りやすくしようと思い、それらを無計画に付け足しっていったことである。二つ目は、ロボット製作期間が短く、アーム機構の理解に時間がかかってしまったことである。終わってから改善してみたい点がでてきたので、時間に余裕があればもっと良いアームや全く違う機構ができたと思う。上記の理由という名の言い訳を述べさせてもらったが、一言付け加えさせてもらうなら「もう少し時間が欲しかった」というのが正直なところである。アーム機構にモーターを取り付け、課題2で作ったようなフィールド上を自由に動くための機体と合体させ、超音波センサーをつける。できたものの全体の写真は下のものとなる。機体の上面、側面からの写真、アーム部分の写真となる。試作品として付けただけなので欠点だらけとなっている。例として挙げるのなら、超音波センサーがもう少し前にないとならない、前のアームが邪魔で超音波センサーがちゃんとした数値を取らない、アームの支えが雑であるとかだ。因みに、この時は三点で支える発想はなかった。最終的に完成した機体の全体が下の写真となる。この機体の自体に様々な工夫が施されているがそれは後に記載する。機体の上面、側面、正面からの写真、アーム部分の写真となる。基本的な構造はβ版と変わらない。この機体は一つのNXTの箱で完成するように作った為、今回の課題で同じ機体の二台体制でフィールドを走らせることができる。二台体制にしたかというと、一台が失敗したとしてももう一台でポイントを確実に取るためである。その他の理由として完走のタイムを短くさせるというものもあったのだが、もはや最後までうまくいかないということで理由としてはかなり薄いものとなってしまった。最終的な機体の主な工夫点としては三つ挙げられる。�アーム機構の体制維持の為の工夫とその他(緑色の枠線)�スタート地点内に収まる為の工夫(水色の枠線)�機体本体の体制維持の為の工夫(赤色の枠線)それぞれの工夫を下記に説明していく。†アーム機構の仕組み上、持ち上げる際に下図の※と示された部分を軸してアームが回る。そのため何もしないとアームを床を引きずっている状態で移動しなければならない。工夫した部分は上図の水色の枠線部分となっている。超音波センサーに乗せることで基本のアームの姿勢を地面と平行にしている。この際、超音波センサーの邪魔にならないようにする必要があり、そのため、超音波センサーを前に持ってくることで解決しつつ、前に持ってくることで計測値がより正確となるので一石二鳥となった。工夫として特筆すべきというものではないが、機体を作る際に注意した点があったので一応記載しておく。下図のアーム部分がわかるだろうか、この部分が長すぎる、余計なものをつけるなどのことをしてしまうとアームを持ち上げるときに床と接触し、それ以上アームを持ち上がらなくなる。これに関してはまだまだ改良の余地があると思っている。機体を作り終え、今回の課題のルールを見直すと「床と接着している部分はスタート範囲内になければならない」というルールがあることが発覚した。下図の「ここ」の部分、つまり超音波センサーが床と接着してたのである。その対策として生まれた工夫が下図のものとなっている。自転車などのスタンドを思い浮かべてもらうと分かりやすいだろう。機体が発進するとスタンド部分が動き、機体が動くのに邪魔にならないようになる。†ここの工夫はあまりにも無計画で機体を制作してしまったおかげでできてしまった欠点を無くすための補助の工夫となっている。その欠点とは機体の重心がアームを動かすときに不安定にぶれ、シーソーのようになってしまうことである。その欠点を補う工夫は下図の赤色の枠線で囲まれた補助輪である。補助輪の分、機体のケツが持ち上がることで機体がぶれることを防いでいる。実際に下図の分、機体のケツが持ち上がっている。この工夫部分もまだまだ改良の余地があり、できることならこの補助輪などなかった方が実際は良いだろう。機体作りの計画性、改造の余地を残しておくことが大切だあると身が染みた。今回のプログラム制作に私自身はほとんど関与していないため、穴のある説明になってしまうことをご了承願いたい。初めの辺りで記載したが私と同じ班のもののレポートを見ると理解していただけると思われる。上記に数度記載したと思うが今回の私たちの班の作戦として同じ機体の二台体制で動かしていく作戦だ。理由としては、一台が失敗したとしてももう一台が保険としてポイントを確保してくれるだろうと思ったからだ。二台を動かすにあたり、スタート位置を二つに分け、作業をする紙コップを分けている。下図は「左」と「右」の機体の作業分担場所である。今回の私の仕事の役割分担によって、紙コップに関するプログラムはほとんど触れていない。そのため説明が簡易なものとなることを許してもらいたい。†どうやって紙コップの中にピンポン玉を保持したまま割りばしの上を通過するか。そこの仕組みをまず説明させてもらいたい。普通に考えると紙コップを持ち上げるだけでピンポン玉が出ていくことは誰でもわかるだろう。ピンポン玉が軽いということを利用して割りばし内にもっていく。上図のように紙コップを割りばし以上の高さから、ピンポン玉のおおよそ半分までの高さまで上げることによりピンポン玉が紙コップ内に収まったまま割りばしを通過できる。動き方としては下図のようになる。今回の機体の紙コップの上げ方は斜めに上がるのでそこらのことは考えなければならない。下図のように紙コップが上がるのが理想である。}恐らく上記のプログラムが紙コップに近づき、掴んだ紙コップを割りばしの高さ以上ピンポン玉の半分の高さ未満まであげるプログラムとなっている...はずである。初めの予定では紙コップを重ねる時は機体一台でやるつもりであった。いざやってみるとほとんどうまく紙コップが重ならなかった。そのため、紙コップを確実に重ねられるように2台の機体を連携させてやるようにした。下図は機体の動き方である。前提として左側の機体が子機、右側の機体が親機として考える。�まず、親機(右の機体)が紙コップを持ち、子機(左の機体)が紙コップから離れた状態から始まる。子機が腕を閉じ、親機の超音波センサーの邪魔にならないようにする。親機が紙コップを持ち上げ、超音波センサーの邪魔にならないようにし、紙コップの方向に向く。子機が紙コップに近づく。子機が紙コップを掴み動かないようにする。親機が子機の持っている紙コップに近づく。親機の持っている紙コップを子機の持っている紙コップにかぶせる。子機が親機に近づくことで紙コップに角度が生まれる。子機が腕を広げ、紙コップを離す。最後に親機がアームを広げ、紙コップを離すことで紙コップが重なる。上記の動きをするためのプログラムが下記の通りとなる。ここの部分のプログラムは本当にノータッチなので解説ができない。一つ言えるとしたら、ここのプログラムはBluetoothによる機体同士の通信をしているため、お互いのタイミングがずれる恐れはない。正直に言わせてもらう。私は同じ班が書いたプログラムを理解できない。私が書いた部分の説明はさせてもらおうと思う。これは右側機体も同じことがいえる。以下は左側機体の全体のプログラムとなっている。〇私以外が書いたプログラムはコメントとして「※」を書いておきます。「※」がついていてわからない箇所がある場合は私の班の人のレポートを読んでください。私が分かる部分はこちらでも()内で簡単に説明はします。〇私が課題2で使ったプログラムと同じ部分にはコメントとして「☆」を書いておきます。//※(モーターAを370度回転させる。//※}前回の私のレポート読んだ方であるなら、フィールドの移動方法が全く一緒なのを理解していただけるだろうか。SEや音が出るタイミングは課題2と同じである。紙コップ関連には私は触れることができないが、移動については触れさせてもらう。場面としてはスタート地点から紙コップを取るところまでの移動である。R_line(300,150);上記の移動の説明をする。このコースの出発時は黒線で囲まれているため、まずそこを抜け出さなければならない。その後、コースに復帰もしなくてはならないため少し特殊なサブのプログラムが用いられている。言葉だけでは分かりずらいの図で表す。上はスタート地点から始まっている。黄色の矢印はただの直進を表している。灰色の円は光センサーの位置を表しており、その中の数字はその時の明るさの数値を表している。赤い矢印はプログラムによる移動を表している。ラインを見つけた後、右側のライントレースを行い交差点認識したところで紙コップをとる動きが始まる。場面としては紙コップからピンポン玉を取り出した後、紙コップをもう一台と重ねるための連携場所に行くための移動である。Off(OUT_AB);まず上記のプログラムは紙コップを持ち上げた場面からの移動でまっすぐ後ろに下がっているだけである。黄色い矢印は秒数管理における移動を表している。Black_to_White(48,35,30);上記のプログラムは、紙コップをもう一台と重ねるための連携場所に行くための移動である。青い矢印はバック走行を表している。以下は右側機体の全体のプログラムとなっている。〇私以外が書いたプログラムはコメントとして「※」を書いておきます。「※」がついていてわからない箇所がある場合は私の班の人のレポートを読んでください。私が分かる部分はこちらでも()内で簡単に説明はします。〇私が課題2で使ったプログラムと同じ部分にはコメントとして「☆」を書いておきます。場面としてはスタート地点から紙コップを取るところまでの移動である。White_to_Black(48,20,35);}まず、初めの走行をバックから始める。そのためのプログラムが上記のものとなる。L_line(1300,110);動きとしては後ろに下がり、その後黒線を見つけ、そのまま交差点まで移動する。場面としては1個目の紙コップを重ねた後、次の紙コップを見つける動作の手前までの移動である。White_to_Black(33,0,-30);動きとしては秒管理によるバックの後、黒線を探し、ライントレースにて交差点を発見。そこから少しずれることで紙コップの方向を向く。場面としては2個目の紙コップを捕まえた後、それを割りばし内に移動させるための移動である。release_ball();動きとしてはバックにて黒線を探し、そのままライントレースで交差点を発見。前に少し進んだ後、紙コップを持ち上げることでピンポン玉を割りばし内に出す。場面としては紙コップを3つ重ねた後、それを目的地にもっていくための移動である。†1回目は、子機が1個ピンポン玉を枠内に入れたが、子機、親機も予期せぬ動作をして失敗し2点だった。2回目は子機が2個ピンポン玉を枠内に入れたが、その後左側スタート地点の障害物のコップを動かし減点。最終的に計4点となった。技術点としては平均8.8点となり、全体合計は12.8点。順位は9チーム中6位という結果になった。今回、ロボットもプログラミングも全体的に作りが甘かったと思われる。超音波センサーの仕組みは左右どちらかから超音波を発し、反対側で受け取っているものらしく、縦向きにつけると誤検知が減らせるとかんがえられる。超音波センサーの縦横関係なく、工夫して2回の検知で確実に紙コップの位置をとれるようにできたのではないかとも考えられる。アームの作りや機体全体の作りをもっと柔軟な発想で生み出すことが大切であると痛感した。今回、課題3の取り掛かりがテスト終了後でほとんど時間が足りないことが今回の機体やプログラミングの甘さを招いたと思う。トライ&エラーを繰り返しより確実なものを作るのが私の基本的なやり方であったがそれをする時間があまりにも足りず、このような結果となってしまった。正直なところそんなことはどうでもよいとも思える。このゼミを通して本当に普通では学べない様々なことを学べることができたからだ。初めはプログラムを打つことすらできず、本当にこのゼミをやり通すことができるのかと不安であったがチーム内、時にはチーム外の人達とも助け合いながらロボットもプログラムも完成させ、やり遂げることができた。終わり良ければ総て良しという言葉の実感を久しぶりに得たような気がする。このゼミに受講することができ、本当に良かったと思えました。今まで本当に、本当にありがとうございました。†ここまでいろいろとレポートに書いたが改善したい点やほかの形の機体など、まだまだ試してみたいことが山ほどある。それらもレポートに書きたかったが予定が色々重なり、時間が足りず断念する羽目になった。このレポートを読んでいる人がこのゼミを受けているのなら、私のものやほかの人の作品から様々なヒントを得てより良いロボット、プログラムを作ることを願っている。最後まであきらめず頑張ってほしい。