2016a/Member

課題3

今回もEV3を使用
今回の課題は下図のA,B,Cに3つずつ紙コップを設置し、それを重ねていく課題です
http://imgur.com/a/3unVN

詳しいルールは下のリンクに書いてあります
http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission3

ロボットについて

今回、わたしたちの班では「紙コップを運ぶロボット」と「重ねるロボット」に分けて制作しました
というのもEV3はRIS,NXTに比べ、パーツ数が少なく、また一つ一つのパーツが比較的多めなので
ギアなどを組み合わせるのが難しく、ロボット本体が大型化してしまう事が考えられたからです
それでもかなりインパクトがあるでかいのができてしまったんですけどね

http://imgur.com/a/vshPM
「紙コップを運ぶロボット」
その形状から通称「クワガタ」

http://imgur.com/a/VqjsE
そしてこちらが「重ねるロボット」
形状から通称「タワー」と呼ぶことにします

クワガタの説明から
課題2での動きを流用して「目的地に移動→掴む→移動→離す」を繰り返すのがこいつの仕事です

http://imgur.com/a/djWSJ
2つのLargeMotorで走行、アームを動かすMediumMotorは後ろについています

http://imgur.com/a/1D1iK
後ろのモーターの動きを長い棒で伝えて
歯車を利用して紙コップをつかむためのアームを2つ同時に動かします

http://imgur.com/a/84gZK
アームにはつかみやすいようにローラーを付けてあります
目のようなものは赤外線センサー、光が出ている筒はカラーセンサーです

次にタワーの説明

こいつはなかなか特徴的です
おそらくは「ロボティクス入門ゼミ」が開講されて以来、このような方法で物を積むロボットを作ったのは今回が初めてではないでしょうか
こいつの仕事は「前進する→紙コップを持ち上げる→前進する紙コップを重ねる→後退する」を繰り返すことです

http://imgur.com/a/wra3T
上部にMediumMotorを2つ、これでキャタピラを動かし、紙コップを上げ下げします

http://imgur.com/a/AtxPt
ロボット左側(写真右側)のスイングアームは紙コップをキャタピラ中心に寄せたり、紙コップを落とすときに稼働させます
このアームがなければ下ろすことも上げることもできません
いわゆる、他の班のロボットで言う「掴む」「離す」という動作に当たります

キャタピラに突起が付いているのは紙コップを引っかかりやすくするためです

正面の目のようなものは超音波センサーです、紙コップとの距離を測れますが、信頼性に欠けます

http://imgur.com/a/iR8lY
足回りです
最初はLargeMotorを2つ使用する予定でしたが、「EV3を通信させる手段が分からない」ということで1つのモーターで前後移動します

http://imgur.com/a/h1XSS
側面から、通信方法が確立しないので片方のEV3本体(コンピューター)はただの重りになってしまいました

動作とプログラム

クワガタ
こっちはハードもプログラムもわたしはあまり関わりませんでしたが、[naho]氏の課題2のプログラムを流用してライントレースし、超音波センサーで紙コップとの距離を測り、掴んで目的地まで運ぶという動きをします
詳しくは[naho]氏のページを見たほうがいいかもしれません

タワー
目の前(n性丹米)に物体(コップ)がm秒間置かれる
↓コップが置かれたと判定
前進し、紙コップとの距離を測り、近づいて持ち上げる

更に前進し重ねる紙コップを見つけ、近づく

紙コップを下げ、重ねる

元の場所まで後退

という動きを繰り返すのが最初の予定でした
下のURLはロボコン2日前に取った動画ですのでかなり未完成です(9月11日に削除されてしまいます)
http://fast-uploader.com/file/7026461113429/

この動きは「アームで掴む→持ち上げる→軽く動く→下ろす→離す」という動きをテストしたもので

#!/usr/bin/python
import ev3dev.ev3 as  ev3
import time
m1 = ev3.LargeMotor('outD')
m2 = ev3.MediumMotor('outB')
m3 = ev3.MediumMotor('outC')
m4 = ev3.LargeMotor('outA')
m1stop = m1.stop(stop_command='brake')
m2stop = m2.stop(stop_command='brake')
m3stop = m3.stop(stop_command='brake')
m4stop = m4.stop(stop_command='brake')
m4.run_forever(duty_cycle_sp=-20)
time.sleep(0.57)
m4.stop(stop_command='brake')
time.sleep(1)
m2.run_forever(duty_cycle_sp=50)
m3.run_forever(duty_cycle_sp=-50)
time.sleep(1.7)
m2.stop(stop_command='brake')
m3.stop(stop_command='brake')
time.sleep(1)
m1.run_forever(duty_cycle_sp=-50)
time.sleep(2)
m1.stop(stop_command='brake')
time.sleep(1)
m1.run_forever(duty_cycle_sp=50)
time.sleep(2)
m1.stop(stop_command='brake')
time.sleep(1)
m2.run_forever(duty_cycle_sp=-50)
m3.run_forever(duty_cycle_sp=50)
time.sleep(1)
m2.stop(stop_command='brake')
m3.stop(stop_command='brake')
time.sleep(1)
m4.run_forever(duty_cycle_sp=20)
time.sleep(0.57)

上のプログラムで動作します
最後にコップを落としてしまっていますが、重ねる際、下にはコップが置いてあるはずなので綺麗に重なります

実際に、上の理想の動作自体はロボコン前日にはほぼ完璧にこなせるようになっていました

わたしはタワーのハード面をメインに制作したので細かなプログラム貼りません

クワガタのプログラム説明

#!/usr/bin/python 
import ev3dev.ev3 as ev3
import time
ml = ev3.LargeMotor('outB')
mr = ev3.LargeMotor('outA')
mm = ev3.MediumMotor('outC')
cs = ev3.ColorSensor('in1')
de = ev3.InfraredSensor('in2')

↑定義

def catch():
       while de.value() < 50:
               if de.value() < 10:
                       ml.run_forever(duty_cycle_sp=0)
                       mr.run_forever(duty_cycle_sp=0)
                       mm.run_forever(duty_cycle_sp=50)
                       time.sleep(4)
                       mm.run_forever(duty_cycle_sp=0)
                       ml.run_forever(duty_cycle_sp=-20)
                       mr.run_forever(duty_cycle_sp=-20)
                       time.sleep(1.5)
                       ml.run_forever(duty_cycle_sp=0)
                       mr.run_forever(duty_cycle_sp=0)
                       ml.run_forever(duty_cycle_sp=-50)
                       mr.run_forever(duty_cycle_sp=50)
                       time.sleep(1.6)
                       ml.run_forever(duty_cycle_sp=0)
                       mr.run_forever(duty_cycle_sp=0)
               else:
                       ml.run_forever(duty_cycle_sp=15)
                       mr.run_forever(duty_cycle_sp=15) 

↑センサーと紙コップの距離が5cm以下になったとき、距離が1cm以下になるまではEV3は直進し、1cm以下になったときEV3は停止して紙コップをつかむようになっている

def lineright():
       t0 = time.time()
       while time.time() - t0 < 0.35:
               if cs.value () > 50 :
                       mr.run_forever(duty_cycle_sp=60)
                       ml.run_forever(duty_cycle_sp=-30)
                       t0 = time.time()
               else:
                       mr.run_forever(duty_cycle_sp=-30)
                       ml.run_forever(duty_cycle_sp=60)

↑ライントレースの定義文
これらを組み合わせてマップのあっちこっちからコップを集めてきます
詳しくは[naho]氏のページ(↓リンク先)を参照ください
http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2Fnaho%2FMission3

タワーのプログラム説明
これもタワーのプログラムをメインに行なった[KAIYMB]氏のページ(↓リンク先)にかなり詳しく載っています
http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMember%2FKAIYMB%2FMission3

前日まではプログラムの制作も手伝っていたのですが、当日に大きく書き換えてしまったそうなのでこちらもあまり詳しいことはこのページには書きません

#!/usr/bin/python
import ev3dev.ev3 as ev3
import time
m1 = ev3.LargeMotor('outA')
m2 = ev3.MediumMotor('outB')
m3 = ev3.MediumMotor('outC')
m4 = ev3.LargeMotor('outD')
us = ev3.UltrasonicSensor('in1')

↑定義

def search(p):
         t0 = time.time()
         while time.time() - t0 < 0.001:
                 if us.value() > p:
                         m4.run_forever(duty_cycle_sp=50)
                         t0 = time.time()
                 else:
                         m4.stop()

↑コップを探すプログラム

def close():
        m1.run_forever(duty_cycle_sp=-37.5)
        time.sleep(0.32)
        m1.stop()

↑スイングアーム開閉

def bring(x,y):
        m4.run_forever(duty_cycle_sp=x)
        time.sleep(y)
        m4.stop()

↑前後移動

def up():
        m3.run_forever(duty_cycle_sp=-50)
        m2.run_forever(duty_cycle_sp=50)
        time.sleep(2.25)
        m2.stop()
        m3.stop()
def down():
        m3.run_forever(duty_cycle_sp=50)
        m2.run_forever(duty_cycle_sp=-50)
        time.sleep(1.5)
        m2.stop()
        m3.stop()

↑コップ持ち上げと下げ

ロボコン

ビジュアル点は多く貰えましたが、クワガタが一つも紙コップを運べずに0点でした

問題点、反省点

今回、最も大きな問題は「理想的な状況を想定しすぎていた」ことです
実際、タワー側は前日にはかなり高い精度で動けるようになっていました
しかし
・タワーは前後移動しかできないため、紙コップを探せない(クワガタにほぼ正確にタワーの正面にコップを置いてもらう必要がある)
・しかしクワガタはそんなに高い精度で紙コップを置くことができない(naho氏のプログラムではライントレースするとき黒と白しか識別しないので大きくずれることがある)
・タワーも大型化しすぎたせいか、繰り返し動作すると若干、右や左に動いてしまう
・動きが変わってきてしまう(バッテリーのせいか?)
・超音波センサーがかなり不正確
・LargeMotorの回転角度が指定できない
・同じパワーで同じ時間回してもタワー上部のMediumMotorの回転数が違う(これにより時々紙コップが斜めにハマってしまう)
・場所によってライントレースの交差点判別がうまくいかない時がある(部屋の明るさのせいか?)

と、上げきれないほどの問題点がありました

半年間のロボティクス入門ゼミの授業で、チャレンジすること、とにかく手を動かしてみること等、多くのことを学びました
これからのご時世、機械システム屋にとっても電子制御はつきものです。バイクにも車にも大半の新車はABSがついてます
これらを踏まえて、この夏休み中、高専の電子制御科に行った妹にラズベリー味のパイでの遊び方を教わりながら様々なことにチャレンジしていきたいと思います


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-11 (木) 19:08:18