2017b/Member/ibu/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
//image 640*480 or 320*240
課題説明ページ:[[2017b/Mission3]]
*設計について [#i01274e7]
使用機:LEGO MINDSTORMS EV3
**設計思想 [#ef4da535]
当初は先の設計の自由度を上げるため、ミディアムモータ1つ...
この機構の設計は非常に難航し、多くの時間を費やしてしまっ...
しかし最終的にはアーム機構の設計に成功し、部品数にも余裕...
2台体制により時間短縮も狙えると思われたが、実際どうなっ...
勿論今回も紙を動かすのは困難であった。
**アーム開発 [#ce983a4f]
//試作アーム写真
***試作A型 [#fc20299a]
#ref(./proto_armA-1.jpg,80%,試作アームA)
先生に教えていただいた機構を参考に、歯車の組み合わせによ...
運動の方向を変換する箇所にはベージュ色のベベルギア同士を...
歴代の機構の中でも抜群の格好良さを誇るが、いくつか問題が...
-ベージュ色のベベルギア同士の噛み合わせが悪い。~
-部品点数が多く、重量が重くなり、整備性も悪い。~
-噛み合わせの悪さと重量問題が重なり、信頼性が低い。
ビジュアルを重視しすぎたのかもしれない。
これらの点から、再設計を試みた。
***試作B型 [#zd0dec86]
#ref(./proto_armB-2.jpg,50%,試作アームB)
A型の失敗からモータ1つによるキャッチ・昇降機能の実現に挫...
時間的猶予に迫られて生まれた急造品である。~
根元で支えるミディアムモータは辛そうだが、ホールド状態に...
単純な分安定した動作が期待できた。~
この型の問題点は、
-モータがホールド状態でなければ支えられないのは不便であり...
-そもそも目標であったモータ1つによる設計が実現できていな...
-格好悪い。~
-技術点も望めそうに無い。~
A型アームの挫折から立ち直れていなかった。
これらの点から気を取り直して再設計を行った。
***試作C型 [#k939f45b]
#ref(./proto_armC.jpg,70%,試作アームC)
ターンテーブル型ギアとベベルギアを活用し、ごくシンプルな...
中心を通る軸を回すと、ベベルギアからターンテーブル型ギア...
ターンテーブル型ギア上部が回ると、伸びた白ビームが開閉し...
狭い可動域を超えてモータを回してしまうと、すぐにあちこち...
そのため、扱いには苦労させられた。~
しかしそれ以外には問題無く、これを基に実戦機の開発に取り...
モータから軸にどうやって運動を伝えるかでまた苦悩するが、...
**車輌開発 [#f9767635]
***試作?型 [#z10f4a63]
#ref(./chassis_proto1.jpg,50%,試作シャーシ1)
試作アームA/B型に対応する車輌。~
デフォルトの車体から前部を拡張し、モータや超音波センサを...
アームの不良から廃案。~
実はカラーセンサの取り付け位置にも不備がある。
***試作?型 [#q9a2c1cc]
#ref(./machine_proto4.jpg,100%,試作機)
試作アームC型に対応し、完成機の元になる車輌である。~
写真の通り、ミディアムモータを横置きし、ギアをいくつか中...
最初はモータを縦置きし、軸の中心に運動を伝える方針だった...
アームの軸には繊細な運動を伝える必要があるのと、動作する...
アームの軸の直下にはカラーセンサもあり、この狭いスペース...
重心も低く抑えられたのはよかったが、繊細なC型アームと相ま...
また、超音波センサの取り付け位置に致命的なミスがあった。~
アームの昇降に合わせて超音波センサも上下してしまうのであ...
紙コップを掴んだら目隠し状態になるこの機体には、もう少し...
**完成機 [#af776022]
#ref(./fin_machines.jpg,100%,完成機)
試作?型から、超音波センサの取り付け位置とアームの形状を変...
超音波センサはアームの下部にシャーシと繋げて、アームと一...
今まで超音波センサがコップを内側から支える役割を担ってた...
また、アームは何度ものコップキャッチ実験を行い、安定して...
アームや各種センサによって重心が前部寄りになったが、EV3を...
整備性は悪いままだが、コンパクトに格好よくまとまったこの...
写真は、完成機を2台揃えて撮ったものである。~
見分けやすいようにEV3の両端のパーツの色を変えてある。~
急ピッチ作業でEV3との固定方法に違いが見られるが、気にする...
*戦略方針 [#w4c6e2cf]
#ref(./tactics.jpg,around,100%,戦略図)
それぞれの車輌はA、D地点を同時にスタートする。~
LEFT:
|LEFT:250 |RIGHT:250 ...
|COLOR(green):~1号車 |LEFT:COLOR(re...
|COLOR(green):Dをスタート |LEFT:COLOR(re...
|COLOR(green):?コップ回収(1個目) |LEFT:COLOR(red...
|COLOR(green):? ピンポン玉投入(1回目) |LEFT:COLOR(red...
|COLOR(green):?コップ重ねて回収(2個目) |LEFT:COLOR(red...
|COLOR(green):?ピンポン玉投入(2回目) |LEFT:COLOR(red...
|COLOR(green):?コップをY地点に2個重ね置く|LEFT:COLOR(red...
|COLOR(green):?Dへ退避し、信号送信 |LEFT:COLOR(red...
|COLOR(green):待機 |LEFT:COLOR(re...
|COLOR(green):待機 |LEFT:COLOR(re...
&size(7){(表組み自体を寄せる方法がわからず、画像の回り込...
#clear
どちらかになにかしらのトラブルがあっても、もう一方が成し...
しかし、2台体制によるデメリットもあった。~
EV3にとっての”動く障害物”を増やしてしまったのである。~
2台の衝突、超音波センサによるコップ検知のミスを避けるた...
もう少し2台である利点を活かした戦略を採りたかったが、如...
また、この通信戦略もロボコンまでに間に合わなかった。~
通信プログラムのみのコーディングは一応終え、車輌に搭載せ...
しかし実行プログラムに組み込んでのテストは間に合わず、一...
結果、ロボコン直前に急遽予定を変更し、2号車はピンポン玉投...
&size(7){退避後、1号車が頑張る間にアームの上下を繰り返し...
後述の実行プログラムには通信プログラムを組み込んであるが...
*プログラム [#xebec167]
言語:python3
**関数群 [#e212318a]
ライントレースも行うが、細かな定数を調整した他は課題2の...
詳しくは[[Tracer_ver.1.7.3>2017b/Member/ibu/Mission2#ibdb...
import ev3dev.ev3 as ev3
import time
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 sens...
cs.mode = 'COL-REFLECT'
us = ev3.UltrasonicSensor()
assert us.connected, "Connect a color sensor to any sens...
us.mode = 'US-DIST-CM'
position_sp_to_angle = 1.55 #position_spによる移動時、角...
target_val = 50 #ライントレース時のカラーセ...
std_speed = 22 #標準の走行速度
kp = std_speed*0.04 #ラインの境界へ戻る強さ
position_sp_to_cm = 20.05 #position_spによる移動時、値...
intersection_time = 0.23/1.8 #線上走行時、交差...
angle_stabilization_time = 0.3*1.8 #走行する境界を変...
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 arm_open(): #アームを開く、init_armの後に使用しな...
arm.run_to_abs_pos(position_sp=200,
speed_sp=std_speed*5,
stop_action="hold")
arm.wait_while("running")
def cup_catch(): #コップをキャッチする
mr.run_forever(speed_sp=std_speed*5)
ml.run_forever(speed_sp=std_speed*5)
while us.value() > 50:
pass
for motor in mr, ml:
motor.stop(stop_action='brake')
move(5)
arm.run_to_abs_pos(position_sp=0,
speed_sp=std_speed*5,
stop_action="hold")
arm.wait_while("running")
move(-5)
def cup_a_little_lift(): #アームをわずかに持ち上げる...
arm.run_to_abs_pos(position_sp=-42,
speed_sp=std_speed*5,
stop_action="hold")
arm.wait_while("running")
def cup_lift(): #アームを完全に持ち上げる。コップ重...
arm.run_to_abs_pos(position_sp=-230,
speed_sp=std_speed*5,
stop_action="hold")
arm.wait_while("running")
def search_min_d(search_time=4.5, i=1): #超音波...
if i == 1: ##引数s...
sign = [1, -1] #i=1で...
elif i == -1: #与えら...
sign = [-1, 1]
min_d = 500 #コップ...
start_time = time.time()
mr.run_forever(speed_sp=sign[0]*std_speed*5) #1巡目...
ml.run_forever(speed_sp=sign[1]*std_speed*5)
while time.time()-start_time < search_time:
if min_d > us.value():
min_d = us.value()
for motor in mr, ml:
motor.stop(stop_action='brake')
start_time = time.time()
mr.run_forever(speed_sp=sign[1]*std_speed*5) #2巡目...
ml.run_forever(speed_sp=sign[0]*std_speed*5)
while time.time()-start_time < search_time:
if us.value() <= min_d:
for motor in mr, ml:
motor.stop(stop_action='brake')
return
for motor in mr, ml:
motor.stop(stop_action='brake')
search_min_d(search_time) #2巡目で...
def line_adjust_by_edge(edge): #交...
for motor in mr, ml:
motor.run_direct()
while abs(cs.value()-target_val) > 10:
line_following(edge) #li...
for motor in mr, ml:
motor.stop(stop_action='brake')
def line_adjust_by_time(edge, stab_time=angle_stabilizat...
for motor in mr, ml: ...
motor.run_direct()
start_time = time.time()
while time.time()-start_time < stab_time:
line_following(edge)
for motor in mr, ml:
motor.stop(stop_action='brake')
def run_until_line(): #線を見つけるまで走行する
for motor in mr, ml:
motor.run_forever(speed_sp=std_speed*5)
while abs(cs.value()-target_val) > 10:
pass
for motor in mr, ml:
motor.stop(stop_action='brake')
***1号車実行プログラム [#c8e7611b]
D地点をスタートする車輌のプログラム。~
前述の通り、通信部分はコメントアウトしている。
#!/usr/bin/env python3
from def_red_v016 import *
#import paho.mqtt.client as mqtt # pahoのライブラリをイ...
#client = mqtt.Client() # MQTTのクライ...
def arm_set(): #アーム位置を調整するための機能
a = input('w, s')
while a in {'w', 's'}:
if a == 'w':
arm.run_timed(time_sp=0.1*1000, speed_sp=200,...
arm.wait_while('running')
elif a == 's':
arm.run_timed(time_sp=0.1*1000, speed_sp=-200...
arm.wait_while('running')
a = input('w, s')
'''
def mqtt_send(x): #値を送信
position = x #位置情報をアルファベットで送信
client.publish("position", position) # "position"と...
print("send_position_"+x)
'''
def main():
#client.connect("10.60.2.156",1883, 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() # 切断
if __name__ == '__main__':
arm_set()
init_arm()
main()
***2号車実行プログラム [#yf6609ff]
A地点をスタートする車輌のプログラム。~
通信プログラムが間に合わなかったため、ピンポン玉を投入し...
#!/usr/bin/env python3
from def_green_v016 import *
'''
import paho.mqtt.client as mqtt
client = mqtt.Client() # MQTTのクライアントを...
position = 0
def on_connect(client, userdata, flags, rc): # ブローカ...
print("Connected with result code "+str(rc))
client.subscribe("position") # "positi...
def on_message(client, userdata, msg): # メッセー...
position = int(msg.payload) # payloadと...
print(position)
'''
def arm_set(): #アーム位置を調整するための...
a = input('w, s')
while a in {'w', 's'}:
if a == 'w':
arm.run_timed(time_sp=0.25*1000, speed_sp=200...
arm.wait_while('running')
elif a == 's':
arm.run_timed(time_sp=0.25*1000, speed_sp=-20...
arm.wait_while('running')
a = input('w, s')
def main():
'''
client.on_connect = on_connect # 上で定義したコー...
client.on_message = on_message # 上で定義したコー...
client.connect("localhost",1883, 60) # ブローカ(自分...
client.loop_start() # メッセージ受信ル...
'''
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() # 接続を切断
'''
if __name__ == '__main__':
arm_set()
init_arm()
main()
*結果・感想 [#j271ecf1]
プログラムがギリギリで間に合わず、方針通りに実行させるこ...
しかし、丹念な調整のおかげでポイントはある程度稼ぐ事がで...
もしあと1日余裕があり、方針通りのプログラムを実行できて...
この原因はロボット設計、特にアーム開発で時間をかけ過ぎた...
事前に見通しを立て、ロボ制作自体の計画を立てておけばよい...
これを設計し直して時間をかけた判断は間違っていないと信じ...
結果はどうであれ、ロボティクス入門ゼミを通じて多くの経験...
特にプログラミング経験、チームプロジェクトでの共同作業経...
&br;
来客数カウンター &color(white,black){&counter;};
&br;
終了行:
目次
#contents
//image 640*480 or 320*240
課題説明ページ:[[2017b/Mission3]]
*設計について [#i01274e7]
使用機:LEGO MINDSTORMS EV3
**設計思想 [#ef4da535]
当初は先の設計の自由度を上げるため、ミディアムモータ1つ...
この機構の設計は非常に難航し、多くの時間を費やしてしまっ...
しかし最終的にはアーム機構の設計に成功し、部品数にも余裕...
2台体制により時間短縮も狙えると思われたが、実際どうなっ...
勿論今回も紙を動かすのは困難であった。
**アーム開発 [#ce983a4f]
//試作アーム写真
***試作A型 [#fc20299a]
#ref(./proto_armA-1.jpg,80%,試作アームA)
先生に教えていただいた機構を参考に、歯車の組み合わせによ...
運動の方向を変換する箇所にはベージュ色のベベルギア同士を...
歴代の機構の中でも抜群の格好良さを誇るが、いくつか問題が...
-ベージュ色のベベルギア同士の噛み合わせが悪い。~
-部品点数が多く、重量が重くなり、整備性も悪い。~
-噛み合わせの悪さと重量問題が重なり、信頼性が低い。
ビジュアルを重視しすぎたのかもしれない。
これらの点から、再設計を試みた。
***試作B型 [#zd0dec86]
#ref(./proto_armB-2.jpg,50%,試作アームB)
A型の失敗からモータ1つによるキャッチ・昇降機能の実現に挫...
時間的猶予に迫られて生まれた急造品である。~
根元で支えるミディアムモータは辛そうだが、ホールド状態に...
単純な分安定した動作が期待できた。~
この型の問題点は、
-モータがホールド状態でなければ支えられないのは不便であり...
-そもそも目標であったモータ1つによる設計が実現できていな...
-格好悪い。~
-技術点も望めそうに無い。~
A型アームの挫折から立ち直れていなかった。
これらの点から気を取り直して再設計を行った。
***試作C型 [#k939f45b]
#ref(./proto_armC.jpg,70%,試作アームC)
ターンテーブル型ギアとベベルギアを活用し、ごくシンプルな...
中心を通る軸を回すと、ベベルギアからターンテーブル型ギア...
ターンテーブル型ギア上部が回ると、伸びた白ビームが開閉し...
狭い可動域を超えてモータを回してしまうと、すぐにあちこち...
そのため、扱いには苦労させられた。~
しかしそれ以外には問題無く、これを基に実戦機の開発に取り...
モータから軸にどうやって運動を伝えるかでまた苦悩するが、...
**車輌開発 [#f9767635]
***試作?型 [#z10f4a63]
#ref(./chassis_proto1.jpg,50%,試作シャーシ1)
試作アームA/B型に対応する車輌。~
デフォルトの車体から前部を拡張し、モータや超音波センサを...
アームの不良から廃案。~
実はカラーセンサの取り付け位置にも不備がある。
***試作?型 [#q9a2c1cc]
#ref(./machine_proto4.jpg,100%,試作機)
試作アームC型に対応し、完成機の元になる車輌である。~
写真の通り、ミディアムモータを横置きし、ギアをいくつか中...
最初はモータを縦置きし、軸の中心に運動を伝える方針だった...
アームの軸には繊細な運動を伝える必要があるのと、動作する...
アームの軸の直下にはカラーセンサもあり、この狭いスペース...
重心も低く抑えられたのはよかったが、繊細なC型アームと相ま...
また、超音波センサの取り付け位置に致命的なミスがあった。~
アームの昇降に合わせて超音波センサも上下してしまうのであ...
紙コップを掴んだら目隠し状態になるこの機体には、もう少し...
**完成機 [#af776022]
#ref(./fin_machines.jpg,100%,完成機)
試作?型から、超音波センサの取り付け位置とアームの形状を変...
超音波センサはアームの下部にシャーシと繋げて、アームと一...
今まで超音波センサがコップを内側から支える役割を担ってた...
また、アームは何度ものコップキャッチ実験を行い、安定して...
アームや各種センサによって重心が前部寄りになったが、EV3を...
整備性は悪いままだが、コンパクトに格好よくまとまったこの...
写真は、完成機を2台揃えて撮ったものである。~
見分けやすいようにEV3の両端のパーツの色を変えてある。~
急ピッチ作業でEV3との固定方法に違いが見られるが、気にする...
*戦略方針 [#w4c6e2cf]
#ref(./tactics.jpg,around,100%,戦略図)
それぞれの車輌はA、D地点を同時にスタートする。~
LEFT:
|LEFT:250 |RIGHT:250 ...
|COLOR(green):~1号車 |LEFT:COLOR(re...
|COLOR(green):Dをスタート |LEFT:COLOR(re...
|COLOR(green):?コップ回収(1個目) |LEFT:COLOR(red...
|COLOR(green):? ピンポン玉投入(1回目) |LEFT:COLOR(red...
|COLOR(green):?コップ重ねて回収(2個目) |LEFT:COLOR(red...
|COLOR(green):?ピンポン玉投入(2回目) |LEFT:COLOR(red...
|COLOR(green):?コップをY地点に2個重ね置く|LEFT:COLOR(red...
|COLOR(green):?Dへ退避し、信号送信 |LEFT:COLOR(red...
|COLOR(green):待機 |LEFT:COLOR(re...
|COLOR(green):待機 |LEFT:COLOR(re...
&size(7){(表組み自体を寄せる方法がわからず、画像の回り込...
#clear
どちらかになにかしらのトラブルがあっても、もう一方が成し...
しかし、2台体制によるデメリットもあった。~
EV3にとっての”動く障害物”を増やしてしまったのである。~
2台の衝突、超音波センサによるコップ検知のミスを避けるた...
もう少し2台である利点を活かした戦略を採りたかったが、如...
また、この通信戦略もロボコンまでに間に合わなかった。~
通信プログラムのみのコーディングは一応終え、車輌に搭載せ...
しかし実行プログラムに組み込んでのテストは間に合わず、一...
結果、ロボコン直前に急遽予定を変更し、2号車はピンポン玉投...
&size(7){退避後、1号車が頑張る間にアームの上下を繰り返し...
後述の実行プログラムには通信プログラムを組み込んであるが...
*プログラム [#xebec167]
言語:python3
**関数群 [#e212318a]
ライントレースも行うが、細かな定数を調整した他は課題2の...
詳しくは[[Tracer_ver.1.7.3>2017b/Member/ibu/Mission2#ibdb...
import ev3dev.ev3 as ev3
import time
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 sens...
cs.mode = 'COL-REFLECT'
us = ev3.UltrasonicSensor()
assert us.connected, "Connect a color sensor to any sens...
us.mode = 'US-DIST-CM'
position_sp_to_angle = 1.55 #position_spによる移動時、角...
target_val = 50 #ライントレース時のカラーセ...
std_speed = 22 #標準の走行速度
kp = std_speed*0.04 #ラインの境界へ戻る強さ
position_sp_to_cm = 20.05 #position_spによる移動時、値...
intersection_time = 0.23/1.8 #線上走行時、交差...
angle_stabilization_time = 0.3*1.8 #走行する境界を変...
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 arm_open(): #アームを開く、init_armの後に使用しな...
arm.run_to_abs_pos(position_sp=200,
speed_sp=std_speed*5,
stop_action="hold")
arm.wait_while("running")
def cup_catch(): #コップをキャッチする
mr.run_forever(speed_sp=std_speed*5)
ml.run_forever(speed_sp=std_speed*5)
while us.value() > 50:
pass
for motor in mr, ml:
motor.stop(stop_action='brake')
move(5)
arm.run_to_abs_pos(position_sp=0,
speed_sp=std_speed*5,
stop_action="hold")
arm.wait_while("running")
move(-5)
def cup_a_little_lift(): #アームをわずかに持ち上げる...
arm.run_to_abs_pos(position_sp=-42,
speed_sp=std_speed*5,
stop_action="hold")
arm.wait_while("running")
def cup_lift(): #アームを完全に持ち上げる。コップ重...
arm.run_to_abs_pos(position_sp=-230,
speed_sp=std_speed*5,
stop_action="hold")
arm.wait_while("running")
def search_min_d(search_time=4.5, i=1): #超音波...
if i == 1: ##引数s...
sign = [1, -1] #i=1で...
elif i == -1: #与えら...
sign = [-1, 1]
min_d = 500 #コップ...
start_time = time.time()
mr.run_forever(speed_sp=sign[0]*std_speed*5) #1巡目...
ml.run_forever(speed_sp=sign[1]*std_speed*5)
while time.time()-start_time < search_time:
if min_d > us.value():
min_d = us.value()
for motor in mr, ml:
motor.stop(stop_action='brake')
start_time = time.time()
mr.run_forever(speed_sp=sign[1]*std_speed*5) #2巡目...
ml.run_forever(speed_sp=sign[0]*std_speed*5)
while time.time()-start_time < search_time:
if us.value() <= min_d:
for motor in mr, ml:
motor.stop(stop_action='brake')
return
for motor in mr, ml:
motor.stop(stop_action='brake')
search_min_d(search_time) #2巡目で...
def line_adjust_by_edge(edge): #交...
for motor in mr, ml:
motor.run_direct()
while abs(cs.value()-target_val) > 10:
line_following(edge) #li...
for motor in mr, ml:
motor.stop(stop_action='brake')
def line_adjust_by_time(edge, stab_time=angle_stabilizat...
for motor in mr, ml: ...
motor.run_direct()
start_time = time.time()
while time.time()-start_time < stab_time:
line_following(edge)
for motor in mr, ml:
motor.stop(stop_action='brake')
def run_until_line(): #線を見つけるまで走行する
for motor in mr, ml:
motor.run_forever(speed_sp=std_speed*5)
while abs(cs.value()-target_val) > 10:
pass
for motor in mr, ml:
motor.stop(stop_action='brake')
***1号車実行プログラム [#c8e7611b]
D地点をスタートする車輌のプログラム。~
前述の通り、通信部分はコメントアウトしている。
#!/usr/bin/env python3
from def_red_v016 import *
#import paho.mqtt.client as mqtt # pahoのライブラリをイ...
#client = mqtt.Client() # MQTTのクライ...
def arm_set(): #アーム位置を調整するための機能
a = input('w, s')
while a in {'w', 's'}:
if a == 'w':
arm.run_timed(time_sp=0.1*1000, speed_sp=200,...
arm.wait_while('running')
elif a == 's':
arm.run_timed(time_sp=0.1*1000, speed_sp=-200...
arm.wait_while('running')
a = input('w, s')
'''
def mqtt_send(x): #値を送信
position = x #位置情報をアルファベットで送信
client.publish("position", position) # "position"と...
print("send_position_"+x)
'''
def main():
#client.connect("10.60.2.156",1883, 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() # 切断
if __name__ == '__main__':
arm_set()
init_arm()
main()
***2号車実行プログラム [#yf6609ff]
A地点をスタートする車輌のプログラム。~
通信プログラムが間に合わなかったため、ピンポン玉を投入し...
#!/usr/bin/env python3
from def_green_v016 import *
'''
import paho.mqtt.client as mqtt
client = mqtt.Client() # MQTTのクライアントを...
position = 0
def on_connect(client, userdata, flags, rc): # ブローカ...
print("Connected with result code "+str(rc))
client.subscribe("position") # "positi...
def on_message(client, userdata, msg): # メッセー...
position = int(msg.payload) # payloadと...
print(position)
'''
def arm_set(): #アーム位置を調整するための...
a = input('w, s')
while a in {'w', 's'}:
if a == 'w':
arm.run_timed(time_sp=0.25*1000, speed_sp=200...
arm.wait_while('running')
elif a == 's':
arm.run_timed(time_sp=0.25*1000, speed_sp=-20...
arm.wait_while('running')
a = input('w, s')
def main():
'''
client.on_connect = on_connect # 上で定義したコー...
client.on_message = on_message # 上で定義したコー...
client.connect("localhost",1883, 60) # ブローカ(自分...
client.loop_start() # メッセージ受信ル...
'''
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() # 接続を切断
'''
if __name__ == '__main__':
arm_set()
init_arm()
main()
*結果・感想 [#j271ecf1]
プログラムがギリギリで間に合わず、方針通りに実行させるこ...
しかし、丹念な調整のおかげでポイントはある程度稼ぐ事がで...
もしあと1日余裕があり、方針通りのプログラムを実行できて...
この原因はロボット設計、特にアーム開発で時間をかけ過ぎた...
事前に見通しを立て、ロボ制作自体の計画を立てておけばよい...
これを設計し直して時間をかけた判断は間違っていないと信じ...
結果はどうであれ、ロボティクス入門ゼミを通じて多くの経験...
特にプログラミング経験、チームプロジェクトでの共同作業経...
&br;
来客数カウンター &color(white,black){&counter;};
&br;
ページ名: