A4の紙に松本の大学生活を表す漢字一文字を書くロボットを製作せよ
漢字は県の森の実行委員やバイトで新生活が辛かったので「辛」にしました。
書き方についてはプリンターのように動くのが合理的に思ったので書き順は上からしたにむかうようなかたちにしました。
ロボットは最初は自走する形にしたが直角に曲がることが出来なかったため、前後をタイヤ移動左右をベルトコンベアで動く構造にした。
このようにベルトコンベアが動かないようにガイドなようなものを上と下にとりつけてみた
調整をしやすいようにすべてサブルーチン化をして右に移動するなどをまとめた。
#!/usr/bin/python3 # -*- coding: utf-8 -*- import ev3dev.ev3 as ev3 import time motor_x = ev3.LargeMotor('outB') motor_z = ev3.MediumMotor('outC') motor_y = ev3.LargeMotor('outA') def pen_down(): motor_z.run_forever(duty_cycle_sp=50, speed_sp=250) time.sleep(0.3) motor_z.stop(stop_action='brake') def pen_up(): motor_z.run_forever(duty_cycle_sp=50, speed_sp=-250) time.sleep(0.3) motor_z.stop(stop_action='brake') def go_right(): motor_x.run_forever(duty_cycle_sp=50, speed_sp=250) time.sleep(0.36) motor_x.stop(stop_action='brake') def go_right_half(): motor_x.run_forever(duty_cycle_sp=50, speed_sp=250) time.sleep(0.18) motor_x.stop(stop_action='brake') def go_left(): motor_x.run_forever(duty_cycle_sp=50, speed_sp=-250) time.sleep(0.36) motor_x.stop(stop_action='brake') def go_left_half(): motor_x.run_forever(duty_cycle_sp=50, speed_sp=-250) time.sleep(0.18) motor_x.stop(stop_action='brake') def go_front(): motor_y.run_forever(duty_cycle_sp=50, speed_sp=-125) time.sleep(0.36) motor_y.stop(stop_action='brake') def go_back(): motor_y.run_forever(duty_cycle_sp=50, speed_sp=125) time.sleep(0.36) motor_y.stop(stop_action='brake') pen_down() go_front() pen_up() go_left() pen_down() go_right() go_right() pen_up() go_left_half() pen_down() go_front() pen_up() go_left() pen_down() go_back() pen_up() go_front() go_left_half() pen_down() go_right() go_front() pen_down() go_back() go_back() motor_y.run_forever(duty_cycle_sp=50, speed_sp=120) time.sleep(0.2) motor_y.stop(stop_action='brake') pen_up()
こうすることによりプログラムを簡単にすることに成功した。一番下のプログラムは最後誤差が出てしまいずれていたため微調整のために用意した。
まずこちらのできた漢字をみていただきたい
御覧の通りがたがたになってしまっている。つまり安定性に欠けているので今後の課題は安定性です。
やはり単純化しすぎてしまったと思う。これではむしろわかりずらくなっているような気がするのでもう少し単純化するべきところはして、しないところはせずにきれいにプログラミングができるようにするのが今後の課題である