目次 #contents *課題1 ~書道ロボット~[#i09d7ddf] 7画以上の文字を選ぶこと、今年の大学生活を表す漢字一文字ということで、大学生として自主的な行動を起こせるようになりたいと思っていることから「自」の文字を選びました。 #ref(./スキャン2.jpg,15%,書き順) **選んだ文字の特徴 [#c91a64ea] -文字のほとんどが直線であり、そのほとんどの線が垂直に交わっている -どの線も離れていない -同じ動作で書ける部分がある *プログラムの解説 [#b7a69df7] 書き順 #ref(./スキャン.jpg,15%,書き順) NXCではうまくEV3が動作しなかったため今回はpython2.7でプログラミングをしました #!/usr/bin/python # -*- coding: utf-8 -*- EV3は純正のものではなく、ev3devで動作させています import ev3dev.ev3 as ev3 time という関数を導入し、時間によってロボットを制御させることができるようになります import time 各モーターをロボットに認識させています mw = ev3.MediumMotor('outA') #MediumMotor をペンの上げ下げのために使用しており、このモーターを「mw」と名付けました。 mr = ev3.LargeMotor('outB') #ロボット右側のタイヤをmrとする。motor rightの略 ml = ev3.LargeMotor('outC') #ロボット左側のタイヤをmlとする。 今回の課題では誤差が生じやすいため、のちに定義する動作の調整が行いやすいようにしています H = 0.5 #縦線 Q = 0.25 #横線 行き R = 0.2 #横線 帰り T = 173 #角度 プログラムの可読性を高めるため、ロボットの動作をそれぞれ定義しています def st(x,y): # 前進 mr.reset() # xの値が右輪 ml.reset() # yの値が左輪 mr.run_forever(duty_cycle_sp=x) ml.run_forever(duty_cycle_sp=x) time.sleep(y) mr.stop(stop_command='brake') ml.stop(stop_command='brake') time.sleep(0.5) def wri(x): #ペンの上げ下げ(xの値が正の時はペンが上昇、負の時は下降する) mw.reset() mw.run_forever(duty_cycle_sp=x) time.sleep(0.5) mw.stop() time.sleep(0.5) def turn(x): mr.reset() ml.reset() mr.run_to_rel_pos(position_sp=x, duty_cycle_sp=30) #sp=720 : 360度 ml.run_to_rel_pos(position_sp=-x, duty_cycle_sp=30) time.sleep(3) mr.stop(stop_command='brake') ml.stop(stop_command='brake') time.sleep(0.5) ここからがロボットの動作に関するプラグラムになります turn(-20) #start wri(90) #過程1 st(30,0.3) turn(20) turn(T) #過程2 st(50,Q) st(-50,R) turn(-T) 同じ動作で対処できるものは繰り返しの構文を使用しています for i in range(2): #過程3 ~ 過程4 st(50,H/3) turn(T) st(50,Q) st(-50,R) turn(-T) st(50,H/3) #過程5 turn(T) st(50,0.25) turn(T) st(50,H) wri(-90) #end ***工夫[#yaa6ba82] -極力誤差を減らすために、ペンの上げ下げの回数やロボットの移動の回数を減らすように心がけた -プログラムの量を減らし、調整の行いやすく可読性の高いプログラムになるように作った *ロボット本体の解説 [#b2e4ca16] **駆動部分 [#ea256c1a] #ref(./上.JPG,15%) EV3 Lモーター ×2 (税込4,644円/個) -特徴:重いものをゆっくり 動かすのが得意 -このモーターでロボットの直進、回転を行っています **ペン操作部分 [#nd8715e4] #ref(./横.JPG,15%) EV3 Mモーター ×1(税込3,780円) -特徴:軽いものを素早く 動かすのが得意 -今回はワームギアに接続し、高精度なペンの上げ下げが行えるようになっています 本体 ×1(税込36,720円) -進行方向に取り付けています 補助パーツ ーロボットが転倒しないための球体のパーツ #ref(./後ろ1.JPG,15%) ***工夫 [#ec5bc534] 今回のロボットは分解や組み立て、調整が行いやすいように設計されているため、使用するペンの形状や問題が発生した時にも対応しやすくなっています。そのため今回の課題だけでなく、これからの課題にも再利用できます。 #ref(./分解.JPG,15%,分解) *課題点 [#vee23c41] **プログラム [#vc8a9867] -ロボットの動作が早すぎてロボットが傾いたりしたため、確実に動作ができるような早さを研究すること **ロボット本体 [#y41c496b] -本体を支えるパーツが紙を巻き込むことがあったため、対策を講ずる必要があること -ペン先の位置はロボットの回転の中心にあったが、線を描いている時にペンの位置がずれてしまい文字の形が崩れてしまったので、ペンをしっかりと固定できるようにすること -本体の重心が進行方向側へずれており、ロボットが停止した際に転倒しそうになったため、次からはロボットの重心のことを考慮して設計すること *感想 [#y1055d45] 今回の課題はロボット本体の制作はペアの beingさん が行っています。beingさん の「信」の文字のプログラムは途中までは2人で行い、そのあとはbeingさん が完成させました。「自」の文字は1人1文字という課題なので、自分も後日書き上げました。偶然ですが、ペアの文字と合わせると「自信」という熟語になることにレポート作成時に気がつきました。これからは大学生としての自信を持って物事に取り組めたらと思います。 &color(#ffffff){[余談]普段はあまりターミナルの操作はしなかったのですが、今回の講座をきっかけに今ではターミナルでファイルの操作などを行うようになってきました。確かに早く操作ができ、さらにパソコンの動作を自動化できるため、これからはターミナルを活用していこうと思います。本来はNXCでプログラミングをする予定だったのですが、クロスコンパイラの環境構築がうまくいかなかったため断念しました。時間があり、余力が残っている時にでも勉強し、再挑戦できたらと思います。};