2017b/Member

課題説明

今回の課題は4人で一チームとなって行うものになる(3人の班もある)。

基本ルール

コース全体図,課題ページから引用

点数計算

基本点と技術点の総合で評価する。

基本点

技術点

各チーム(全9チーム+先生の計10人)ごとに以下の項目を20点満点で採点し、その平均点で評価する。

方針

今回の課題で必要な動作は

に大分されると考えた。

ピンポン玉をバラバラに取り扱うのは、センサの感度や保持方法の点から難しい。よって、伏せた紙コップを少し浮かせたまま移動させることで、枠を乗り越えさせ、その後コップを移動させる方針となった。また2班での共同作業ということで、1つの機体を作るのか、2つ運用するのかで方針が迷走したが、とりあえず1班分の部品で組み立ててみる形になった。行き当たりばったり。

機体説明

アーム試作機

授業中に歯車を使った持ち上げ機構についての話があったので、試しに作ってみようとしたもの。重すぎて歯車のかみ合わせがズレやすい欠陥有。特にベージュの歯車が頻繁に外れたため、改良する必要があった。

アーム完成形

その後チームメイトと改良したもの。 機構は複雑になったが、EV3一台でコップのホールド・持ち上げ・移動が出来る。発表会では、この機体を二台用いて課題に臨んだ。

機体に組み込んだら。EV3はこの上に設置

アーム部分について補足。両側にフレームや歯車を置くことでアーム自身の重さで傾くことはなくなる。ギアをMモータから徐々に大きくしていくことで安定して動作できるようになったと思う。ただ歯車の噛み合わせは依然として不安定で、モータの回転数通りが直接アームの動きに連動するわけではない。決められた歯車の位置で開始する必要があるのだ。そこで制作途中で何度もコップに「噛ませて」調節する必要があった。改善点が思いつかなかったので、そのまま押し通したが何か上手い方法はなかったのかと考えている。

奥がred機、手前がgreen機

前述の問題点は残るが、時間もないので 同じ機体を2つ用意した。搭載するEV3の区別の為に赤と緑の部品で適当な角?を付けたが、意外に便利だったのでそのまま置いておく方針になった。最終的にはプログラム本体の名前もred/greenがつく形になる。

プログラム説明

先ず2台を同時に動かす場合に注意しなければならないことがある。

互いの機体が干渉しあう可能性 が常にあるということだ。超音波センサを使ってコップの方向を確認したいのにもう一台が横切りました☆なんてことや、お互い衝突して転倒・続行不可で終了なんてことが起きる可能性は十分予想できる。

これを防ぐという目的もあって、二台が干渉しないようにルートを設定した。

割り当て

上図の通り、赤と緑に分けている箇所をそれぞれの色の機体で担当する。分担することでアクシデントが起きても一定の点数を稼ごうという狙いもある。おおまかな方針としては、緑側2つのコップを移動・回収したのちに、信号を送信する。一方の赤側は、コップを掴んだところで待機、信号を受信して再び行動する。都合によりこれ以降のプログラミングは担当できていない。私が本来書くべきではないと思うのだが、一応の説明だけ述べることにする。

詳細は2017b/Member/ibu/Mission3 2017b/Member/Koyo/Mission3 2017b/Member/hakuwa/Mission3 を参考にしてほしい

共通設定

先ずは設定。特に書くことなし。

mr = ev3.LargeMotor('outC')
assert mr.connected, "Connect right large motor to port C"
ml = ev3.LargeMotor('outD')
assert ml.connected, "Connect left large motor to port A"
arm = ev3.MediumMotor('outB')
assert arm.connected, "Connect arm medium motor to port B"
cs = ev3.ColorSensor()
assert cs.connected, "Connect a color sensor to any sensor port"
cs.mode = 'COL-REFLECT'
us = ev3.UltrasonicSensor()
assert us.connected, "Connect a color sensor to any sensor port"
us.mode = 'US-DIST-CM'

上述した歯車調整用の関数。コップを安定して掴む為に必要。

def init_arm():    
  'pos_positive: to inside, pos_negative: to outside'
  arm.reset()  # del stop_action='hold'
  input('Press Enter to initialize closed arm position')
  arm.reset()

アームを開ける動作

アームを閉じ、コップを掴む

コップを掴んだまま、ちょっとだけ浮かせるための関数

コップを大きく上げる動作。ピンポン玉を離したり、コップを重ねるときに。

他にライントレース用の関数等細々あるが、省略する。

緑側機体

def main():
  #client.connect("10.60.2.156",1883, 60) # ブローカに接続、(60秒以上接続がないと切断)
  line_adjust_by_time('left_edge', 1.3)
  run_until_intersection('left_edge')
  intersection_turn_left()
  change_following_edge()
  run_until_intersection('right_edge')
  intersection_turn_right()
  line_adjust_by_time('right_edge', 1)
  run_until_intersection('right_edge')
  circle(145) # intersection,change direction
  arm_open()
  move(-4)
  search_min_d(1)
  cup_catch()
  circle(-105)
  move(1)
  line_adjust_by_time('left_edge', 1)
  circle(-20)
  run_until_intersection('left_edge')
  cup_a_little_lift()
  move(4)
  circle(35)
  move(5)
  cup_a_little_lift()
  move(10)
  cup_lift()
  circle(-30)
  move(-5)
  search_min_d(1, -1)
  cup_catch()
  arm_open()
  cup_a_little_lift()
  circle(60)
  cup_lift()
  circle(-140)
  arm_open()
  move(-4)
  circle(-90)
  #mqtt_send(1)
  move(50)
  #client.disconnect() # 切断

赤側機体

run_until_line()
  move(4)
  line_adjust_by_edge('right_edge')
  run_until_intersection('right_edge')
  circle(33)
  arm_open()
  search_min_d(0.8)
  cup_catch()
  circle(-160)
  line_adjust_by_edge('left_edge')
  run_until_intersection('left_edge')
  intersection_turn_left()
  line_adjust_by_time('left_edge', 1.3)
  cup_a_little_lift()
  move(5)
  cup_lift()
  move(-50)
  line_adjust_by_time('left_edge', 5)
  run_until_intersection('left_edge')
  while position != 1:
  pass
  move(15)
  circle(35*1.2)
  line_adjust_by_edge('left_edge')
  line_adjust_by_time('left_edge', 3)
  run_until_intersection('left_edge')
  intersection_turn_left()
  run_until_intersection('left_edge')
  circle(-27)
  arm_open()
  client.loop_stop()        # 受信ループを停止
  client.disconnect()       # 接続を切断

全般的に説明がないのは関われなかったからである。時間の都合を付けれなくて申し訳ない。

結果等

今回審判を担当したのでその結果を踏まえた考察を少しして、この課題を終わりとしたいと思う。

仮得点表

各チーム名は伏せたうえで得点結果をあげると、上のようになる。なお、再挑戦の加点(基礎点のみ)は加算してないので実際の順位と差はあることに注意されたい。私達のチームは9番目、一番下の欄になる。最終的に僅差で2位になったのは大健闘だと思っている。1位がほぼ満点なのほんとすごい…すごい以外の感想が出てこない…。

全チームの傾向を考えると、基本点が0点だと技術点も釣られて低くなるようだ。サウンドや機体構造で工夫していたチームでも、基本点が取れないと印象が釣られて悪く響く。逆に基本点が1点でも入っていれば技術点は大分甘口になっている印象がある。技術点は各チームの評価なので、どうしても印象に左右されるのだろう。

再挑戦後に変更されうるのは基本点のみなので、先ずは1点分でもピンポン玉やカップを設置することがよりよい順位を取るセオリーなのかな、と考えた。満点狙いは余裕のある人がすればいいんじゃないですかね…

非常に志が低い分析で申し訳ないが、それはそれとして、『2台で分担することによる点数確保』という作戦は一定の成果を上げれたのではないだろうか。


添付ファイル: file007.png 83件 [詳細] file006.png 186件 [詳細] file005.jpg 170件 [詳細] file004.jpg 190件 [詳細] file003.jpg 180件 [詳細] file002.jpg 186件 [詳細] file001.png 171件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-18 (日) 03:19:04