目次

課題3 ~野球~

アプローチ

今回は移動方法と打撃方法について考える必要がある

移動方法

  1. R付近まで移動する(黒線の数を計測し、規定の本数を計測した時R付近にいると認識させる) →ライントレースでB地点へ
     
    メリット:正確にB地点まで移動できる。課題2でのプログラムを利用できる。
    デメリット:カラーセンサが必要になる。プログラムが複雑になる。
    ライントレース.png
     
  2. 半円を描くように直接B地点へ行く(角度制御 or 時間制御)
     
    メリット:プログラムの記述が楽、簡潔になる。センサーを使わない。
    デメリット:調整が困難であり、確実性がない。
    直.png
     
    

打撃方法

  1. キャッチ&リリース打(?)法
  1. リアル野球打法

プログラム(python)の説明

 

今回はMQTTを行うためのライブラリを追加している
(pahoというライブラリは最新のev3devのputhon3ではうまく動作しなかった模様)

#!/usr/bin/env python

import paho.mqtt.client as mqtt
import ev3dev.ev3 as ev3
import time

今回は主に1つのLargeMotorで移動する

lm = ev3.LargeMotor('outB')
mm = ev3.MediumMotor('outC')

MQTTに関する記述

host = '〇.〇.〇.〇'   #brokerのIPアドレス
port = 1883              #通信に使う場所(デフォルトでは1883番を使うらしい)
topic = 'pi/st'          #今回の通信の題名(どんな名前でも良い)
def on_connect(client, userdata, flags, respons_code):
    print('status {0}'.format(respons_code))     #正常に繋がった時に0とコンソールに表示する
    client.subscribe(topic)                      #指定された題名の通信を受け取る  ←大事

def on_message(client, userdata, msg):      #相手からの通信を受け取った時に行う動作(ここに通信時に行う動作を書く)
    t = 0.4
    time.sleep(t)
    swing()

今回は今までとは異なり、変形に挑戦した。

def transformation():    #変形プログラム
    mm.reset()
    lm.reset()       #位置調整
    turn_R(60)
    lm.run_to_rel_pos(position_sp=100, duty_cycle_sp=100, speed_sp=100, stop_action='hold')
    time.sleep(2)

    lm.reset()      #変形
    lm.run_to_rel_pos(position_sp=80, duty_cycle_sp=100, speed_sp=200, stop_action='hold')
    time.sleep(3)

    mm.reset()      #打撃姿勢をとるプログラム
    mm.run_to_rel_pos(position_sp=110,duty_cycle_sp=100,speed_sp=100, stop_action='hold')
    time.sleep(2)
    lm.reset()
    mm.reset()

今回は後輪を駆動輪とし、前輪は移動方向を変えるために使用した。(バイクと同じ構造である。)
また、前輪の操作と打撃の操作は全てMediumMotorのみで行った。

def turn_L(degree):  #左に曲がるためのプログラム
    mm.reset()   #tuen_left_MAX:degree=85
    mm.run_to_rel_pos(position_sp=degree, duty_cycle_sp=70, speed_sp=80, stop_action='hold')
    time.sleep(3)

def turn_R(degree):   #右に曲がるためのプログラム
    mm.reset()
    mm.run_to_rel_pos(position_sp=-degree, duty_cycle_sp=70, speed_sp=75, stop_action='hold')
    time.sleep(3)
 
def swing():   #打撃用プログラム
    mm.reset()    #バットを振る
    mm.run_to_rel_pos(position_sp=-110,duty_cycle_sp=100,speed_sp=800, stop_action='hold')
    time.sleep(1)
    mm.reset()    #構え直し
    mm.run_to_rel_pos(position_sp=110,duty_cycle_sp=100,speed_sp=500, stop_action='hold')
    time.sleep(1.5)

今回はあまり細かく移動できるロボットではなかったため、最も単純な移動ルートにした。

 def move():   #移動のプログラム(C → B)
    lm.reset()
    mm.reset()
    lm.run_forever(duty_cycle_sp=80,speed_sp=100)
    time.sleep(2.5)
    turn_L(50)
    lm.run_forever(duty_cycle_sp=80,speed_sp=100)
    time.sleep(9)
    lm.stop()

実行した動作

move   #移動(C → B)

transformation() #変形

###通信を行うための準備#############################
client = mqtt.Client(protocol=mqtt.MQTTv311)   #通信をするため、client(subscriber)を生成する

client.on_connect = on_connect       #通信ができた時に行う動作を指定
client.on_message = on_message    #通信を受け取った時に行う動作を指定

################################################


client.connect(host, port=port, keepalive=60)   #通信を行う(60秒間応答があるまで待機し、応答がなかった場合通信を終了する)


client.loop_forever()  #通信を続ける
 

MQTT(通信プロトコル)の説明

主な説明はこちら
ペアの説明はこちら

 

変形についてはこちら
移動方向の変更についてはこちら

 

ロボット本体の解説

今回バッターロボットの設計は主にbickyが行った(実質の初作品)
いかに少ない部品でカッコよく、他の班にはないインパクトを与えられるかということに拘った。打球については、野球らしさを出すため、ボールを転がすとボールがそれてしまうことを恐れたため空中に投げられたボールをそのまま打つことにした。今回は安定して得点するという考えをを敢えて捨て、思うがままにロボットを作成した。(ネタに走った。)

 

全体図(写真は設計途中の段階のものであり、本番ではセンサーを全て取り外している)
all.png top1.png front.png

 

使用した部品

large.png

EV3 Lモーター ×1 (税込4,644円/個)

ブレーキ・変形機構(最重要)

brake2.png brake.png

 

brake3.png brake6.png

前輪の機構(ステアリング機構)

stearing.png

ロボットの仕組みの解説

ロボットの駆動について

前後の移動は後輪のLモーターが行い、移動向きの変更は前輪のMモーターが行った。

移動向きの変更(ステアリング機構)

stear.gif

Mモーターが動くことによって前輪の向きが変わり、二輪車と同様に移動方向が変わる

変形について

Lモーターからの動力を変形に利用する

 

1 meta.png 2meta1.png 3meta2.png

 

4meta3.png 別視点meta4.png

 

6

tran.gif
 

Mモーターを動かすことにより、Lモーターから後輪へ動力を伝えるギアに小さなギアを噛ませ、後輪が動かなくする。
後輪が動かない状態でLモーターを動かすことでLモーター自身が持ち上がり、変形する。

打つ動作について

batter.png

変形後にバットを構え、MQTTにより合図が送られた時にバットを振る
この時、角度制御をしているためバットの振り過ぎによりロボットが痛むといったことは起こらない。

まとめ

こだわりポイント

反省点

感想

今回は初めてロボット本体の設計をほぼ一人で行いました。今までLegoを触ってこなかったためかうまく組み上げられなかったため、ロボットが組みあがったのは本番の前日でした。まあ、動作中の不具合により解体しましたが。そのため、徹夜でロボットを再設計し、プログラムを書き換えました(笑)。通信のプログラムに関してはbeingさんに丸投げし、使い方を教えてもらいました。また本番直前で通信がうまくいかなくOSを移植するという事態となり、beingさん、penさんに助けてもらいました。beingさん、penさんに感謝。
時間がなかったことや、ゼミをうけている当初から変形ロボットやステアリング機構を持つロボットを作ってみたかったこともあり、最後まで拘ってロボットの製作をしたため徹夜&練習なしのぶっつけ本番となってしまいました。本番中に練習時間が取れたこともあり、移動や変形がある程度うまく行ったのですが、やはりこういったものはスケジュール管理が大切で特に徹夜は1日までと感じました。余談ですが今回徹夜をしてる際、pep◯i strong なるものを飲んでいたのですが、眠気が全く来ずに徹夜できました。コーラに感謝。


添付ファイル: file直.png 116件 [詳細] file進む.png 128件 [詳細] fileライントレース.png 125件 [詳細] filetop.png 150件 [詳細] filesupport.png 166件 [詳細] filestearing.png 146件 [詳細] filemqtt.png 134件 [詳細] filemidi_dual.png 121件 [詳細] filemeta4.png 108件 [詳細] filemeta3.png 103件 [詳細] filemeta2.png 130件 [詳細] filemeta1.png 129件 [詳細] filemeta.png 135件 [詳細] filelarge2.png 118件 [詳細] filefront.png 116件 [詳細] filebrake6.png 88件 [詳細] filebrake5.png 89件 [詳細] filebrake3.png 122件 [詳細] filebatter.png 97件 [詳細] fileall.png 161件 [詳細]

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