[[2018a/Member]] #contents *更新履歴 [#y7eb06be] 8月10日ープログラム上の説明を追記 *課題について [#off65039] **課題内容 [#q4b470e5] これまでに住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙に書くロボットを制作せよ。 **選んだ文字 [#te2a1eff] 群馬県出身なので「群馬」 *ロボットについて [#o72ea476] **ロボット [#pb49427b] #ref(2018a/Member/mochi/Mission1/s_DSC_0190.JPG,50%, ) 先駆者さんを参考にさせていただいた。 **横移動 [#v0d6671b] #ref(2018a/Member/mochi/Mission1/s_DSC_0194.JPG,50%, ) キャタピラを用いて平面の移動をできるようにした。 斜め移動も可。 **縦移動 [#v0546bf1] #ref(2018a/Member/mochi/Mission1/s_DSC_0191.JPG,50%, ) ミディアムモーターの回転移動を用いて上下移動をできるようにした。 *プログラム概要 [#k2762422] **モジュールのインポート及びモーターの名前付け [#af119627] #!/usr/bin/env python3 from ev3dev.ev3 import * from time import sleep mx = LargeMotor('outA') my = LargeMotor('outB') mz = MediumMotor('outC') time関数をインポート。 名前はx軸方向をmx,y軸方向をmy,z軸方向をmzとした。 **諸々の関数の定義 [#c16e08bd] def forward (i,j): #同時にx方向にi[cm],y方向にj[cm]進む if i > 0: #x方向の進行方向を判定 speed_x = -100 else: i = -i speed_x = 100 if j > 0: #y方向の進 行方向を判定 speed_y = -100 else: speed_y = 100 j = -j mx.run_timed(time_sp = i * 250, speed_sp = speed_x) my.run_timed(time_sp = j * 250, speed_sp = -speed_y) i, jを実数とし、 x軸の正の方向にi[cm], y軸の正の方向にj[cm]だけ進みたければ ベクトル(i, j)を渡すことにより実行できる。 i<0 のときはx軸は負の向きへ、j<0のときはy軸が負の向きへ移動することにより、 向きの指定が符号の違いのみで指定できる。 def up(): #ペンを上げる mz.run_timed(time_sp = 300, speed_sp = -100) ペンを上げる。 def down(): #ペンを下げる mz.run_timed(time_sp = 300, speed_sp = 100) ペンを下げる def down_forward_up(i, j): down() time.sleep(1) forward(i, j) time.sleep(1) up() down(), forwarf(i, j), up()の合成。 定義しておくことで入力が少なくできるときがあるため定義。 *実際に描写 [#c19a2a13] 前節で定義した関数を適宜用いて書いていけば良い。 **「群」 [#ic55152e] down() time.sleep(1) forward(2.4, 0) #一画目 time.sleep(1) forward(0, 2.4) time.sleep(1) forward(-2.4, 0) #二画目 time.sleep(1) up() time.sleep(1) forward(0, -1.2) #三画目に移動 time.sleep(1) down() time.sleep(1) forward(2.4, 0) #三画目 time.sleep(1) up() time.sleep(1) forward(-1.2, -1.2) #四画目に移動 time.sleep(1) down() time.sleep(1) forward(0, 2.4) #四画目 time.sleep(1) forward(-2.4, 2.4) #四画目 time.sleep(1) up() time.sleep(1) forward(1.2, -1.2) #五画目に移動 time.sleep(1) down() forward(0, 1.2) #五画目 time.sleep(1) forward(0, 2.4) time.sleep(1) forward(0, -2.4) time.sleep(1) forward(-2.4, 0) time.sleep(1) up() time.sleep(1) forward(1.2, -4.8) #6画目に移動 time.sleep(1) down_forward_up(0.4, 1.2) #6画目 time.sleep(1) forward(1.6, -1.2) #7画目に移動 time.sleep(1) down_forward_up(-0.4, 1.2) #7画目 time.sleep(1) forward(-1.6, 0.6) #8画目に移動 time.sleep(1) down_forward_up(2.4, 0) #8画目 time.sleep(1) forward(-1.6,0.8) #9画目に移動 time.sleep(1) down_forward_up(1.2, 0) #9画目 time.sleep(1) forward(-1.6,0.8) #10画目に移動 time.sleep(1) down_forward_up(2.4, 0) #10画目 time.sleep(1) forward(-1.2, -2.4) #11画目に移動 time.sleep(1) down_forward_up(0, 4) #11画目 time.sleep(1) **「馬」 [#xb28616a] forward(4, 6) #1画目に移動 time.sleep(1) down_forward_up(4, 0) #1画目 time.sleep(1) forward(-4, 0.8) #2画目に移動 time.sleep(1) down_forward_up(4, 0) #2画目 time.sleep(1) forward(-4, 0.8) #3画目に移動 time.sleep(1) down_forward_up(4, 0) #3画目 time.sleep(1) forward(-4, -1.6) #4画目に移動 time.sleep(1) down_forward_up(0, 2.4) #4画目 time.sleep(1) forward(0.8, -2.4) #5画目に移動 time.sleep(1) down_forward_up(0, 2.4) #5画目 time.sleep(1) forward(-0.8, 0) #6画目に移動 time.sleep(1) down() time.sleep(1) forward(3.0, 0) #7画目 time.sleep(1) forward(-0.2, 2.4) time.sleep(1) forward(-0.6, 0.2) time.sleep(1) up() time.sleep(1) forward(-4, -1.6) #8画目に移動 time.sleep(1) down_forward_up(0, 1.2) #8画目 time.sleep(1) forward(0.6, -1.2) #9画目に移動 time.sleep(1) down_forward_up(0, 1.2) #9画目 time.sleep(1) forward(0.6, -1.2) #10画目に移動 time.sleep(1) down_forward_up(0, 1.2) #10画目 time.sleep(1) forward(0.6, -1.2) #11画目に移動 time.sleep(1) down_forward_up(0, 1.2) #11画目 *実際に書けた文字 [#r961cfb0] 実際にはこのような文字が書けた。 #ref(2018a/Member/mochi/Mission1/s_DSC_0195.JPG,50%, ) とても文字には見えない。 *反省 [#led171a4] 私のプログラムには自身があったが、ロボット自身にいくつか欠陥があった。 致命的なのは全体の剛性の低さで、それゆえにキャタピラの回転がペンの移動に今ひとつ伝わらず、 移動自体が困難な状態であった。また、ペンも筆先がもう少し短いほうが良かったと感じている。 *改善策 [#k6ae1bcc] ロボットの補強。 筆ペンの再考。