Mission3 Switch Cans Machine

目次

今回のロボットの仕組み

仕組み
大雑把に示すとこのようになる。今回の缶の配置が絶妙であったため、缶タワーと缶タワーの間に
機械を配置し、両端へアームを伸ばし、機械自体の回転で左右を入れ替える。
これを下から順に三回繰り返せば理論上だと完全成功である。

キャタピラ
ロボットの格好いい見た目の大半を占めるこのベルトコンベア部はアームを上下させる際に
肝要となる機構である。この大きな機械をラージモーター一つで動かすためにギア比には気を使った。 ~キャタピラを用いたのはEV3で一番安定する機構であったためである。 肝要となる機構である。この大きな機械をラージモーター一つで動かすためにギア比には気を使った。

キャタピラを用いたのはEV3で一番安定する機構であったためである。 アーム
アームはMission1と同様にいわゆるマジックハンドのような機構を採用した。
これで両端にまっすぐアームを伸ばし、はさみのようにして缶をつかむことが出来る。
先端部分にゴムをつけ滑りを回避したのだが、このゴムのつける場所には大変苦労させられた。

このように緻密に組まれたロボット、斬新なアイデア、優秀な班員()が揃い、理論通り上手くいくと思われたが...

このロボットの問題点

  • キャタピラの下限があり、一番下の缶にアームが届かない
  • アームが缶を持ち上げられない(アームの支柱が弱く揺れてしまう)
  • ↑より缶を積むことが出来ない
  • カラーセンサーで止まる関係上正確な位置で止まれず、缶をつかみ損ねたり、缶がわくから
    はみ出てしまう。
  • 動作中にアームが外れてしまう etc...
    様々な要因によってこのように理想どおりに動かすことはかなわなかった。

解決策

以上のような問題点を解決するため、私たちは苦悩に苦悩を重ねたが、妙案が思いつかなかった。
しかし、時間は刻一刻と迫ってくるその中で私たちは無理に目標を達成することをあきらめ、
ある方法により簡潔かつ高得点を取る方法を考え実行した。これによりプログラムを大変短く
することが出来、かつわりと高得点を狙うことが出来た。以下の通りである。
仕組み

  1. 左下からスタート直進したのち既定の位置で90度左折し、一定値進め、その後CSで黒線を感知したところで停止する。
  2. 一番下の缶(アームの位置は変更済み)をつかみ引きずって半周回す、その後アーム外し、キャタピラを回し、二つ目の缶の位置まで動かす。
  3. 二つ目の缶をつかみ持ち上げる。その際アームをしならせる(あえて)30度回転したところで停止する。
  4. キャタピラを動かし一段目の高さにする。その後150度ほど動かし枠内に入れる。その後、アームを外し缶を落とす、その際にたまたま一番上にある缶が落ちる。
    このようにして点を稼ぐことにした。勝てばよかろうなのだ。

プログラム

上記のように動作させるためこのようなプログラムを組んだ。

#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
mA = MediumMotor('outA')#マジックアームを動かすミディアムモータ。
mH = LargeMotor('outB')#キャタピラを動かしマジックアームを昇降させるラージモータ。
mR = LargeMotor('outC')#進行方向右側の移動モータを動かすラージモータ。
mL = LargeMotor('outD')#進行方向左側の移動モータを動かすラージモータ。
cs = ColorSensor('in1')#カラーセンサー
cs.mode = 'COL-REFLECT'
mA.reset()
mH.reset()
mR.reset()
mL.reset()

def move_position(R,L,s): #タイヤを動かす関数

   mR.run_to_rel_pos(position_sp=R, speed_sp=50, stop_action='brake')
   mL.run_to_rel_pos(position_sp=L, speed_sp=50, stop_action='brake')
   sleep(s)

def move_arm(x,s): #アームを動かす関数

   mA.run_to_rel_pos(position_sp=x, speed_sp=100, stop_action='brake')
   sleep(s)

def move_high(x,s): #キャタピラを動かす関数

   mH.run_to_rel_pos(position_sp=x, speed_sp=130, stop_action='brake')
   sleep(s)

def move_straight(): #カラーセンサーの関数

   t0 = time.time()
   while  time.time() - t0 < 0.3:
     mR.run_to_rel_pos(position_sp=20, speed_sp=50, stop_action='brake')
     mL.run_to_rel_pos(position_sp=20, speed_sp=50, stop_action='brake')
     if cs.value() >= 75:
        t0 = time.time()
# 
move_position(920,920,18)
move_position(180,-180,8)
move_position(360,360,10)
move_straight()
#
move_arm(700,6)
move_position(380,-380,11)
move_arm(-300,6)
move_high(1500,15)
#
move_arm(300,6)
move_high(800,10)
move_position(-200,200,8)
move_high(-2300,16)
#
move_position(-150,135,8)
move_arm(-300,6)
#リセット関数
mA.reset()
mH.reset()
mR.reset()
mL.reset()

反省と感想

  • 今回は大変時間がない上に、テスト期間中ということもあり、機械にかまけていられなかったが、結果的にロボコンでよい結果をだせてよかった。
  • 他班はライントレースや持ち上げる機構をしっかり作っていたのですごいと思った。
  • この大変だった経験を生かして行きたいと思った。

添付ファイル: filenagumo1.jpg 2件 [詳細] filenagumo2.jpg 3件 [詳細] fileウゴキ.png 1件 [詳細] file課題3.png 4件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-18 (土) 22:03:21 (64d)