- 追加された行はこの色です。
- 削除された行はこの色です。
*ロボット本体 [#d41d76e8]
ロボットの全体像~
~
EV3ガイドに乗っている基本ロボットにペンを上げ下げする機構を追加してある。~
~
ペン先はプログラムを作りやすいようにロボットの中心になるようにした。~
~
また、EV3は小型のモーターがあるので、ペンを上げ下げする構造にしても比較的小さく作れるメリットがあったので、~
~
比較的簡単にモーターに直接アームをつけて、そこにペンをテープで止めるだけの構造にした。~
*ロボット本体 [#mdb01f06]
EV3ガイドに乗っている基本ロボットにペンを上げ下げする機構を追加してある。~
~
ペン先はプログラムを作りやすいようにロボットの中心になるように機構を作った。~
また、この機構は横についているピン4本を抜くだけで取り外せるので改造するのも簡単というメリットがある。~
~
~
*ロボットの動作の説明 [#z81cd8b1]
*ロボットの動作のための代数の定義 [#z81cd8b1]
ロボットに顔を描かせるために必要な動作をまとめると~
~
・ペンを上げ下げする~
・ロボット本体が前後する~
・ロボット本体が回転する~
~
などの動作の組み合わせによって顔を描かせる。~
~
これからのプログラムを簡単にするためにモーターなどを定義する。~
~
今回のプログラムでは~
~
モーターA(左タイヤ)=ml~
モーターB(右タイヤ)=mr~
モーターC(ペンの上げ下げ)=mf~
~
として以下の文を用いて定義した。~
ml = ev3.LargeMotor('outA') //左タイヤ
mr = ev3.LargeMotor('outB') //右タイヤ
mf = ev3.MediumMotor('outC') //ペンの上げ下げ~
~
また、簡単にロボットを動かすために以下の文によって「ロボットの前後」、「ペンの上げ下げ」を簡単に呼び出せるようにする。~
~
def go(t,dl,dr):
ml.run_forever(duty_cycle_sp=dl)
mr.run_forever(duty_cycle_sp=dr)
time.sleep(t/1000)
ml.stop()
mr.stop()
def pen(t,df):
mf.run_forever(duty_cycle_sp=df)
time.sleep(t/1000)
mf.stop()
~
~
・ロボットの前後 =「go」~
・ペンの上げ下げ =「pen」~
~で定義している。
~
*回転の角度の計測 [#bb7988f1]
テスト用のプログラムを書いて、何回かの試行を経て、左右の車輪にどのような回転をさせればどの程度ロボットが回転するのかを調べた。~
~
用いたプログラムは以下のとおりである。~
~
#!/usr/bin/python
import ev3dev.ev3 as ev3
import time
ml = ev3.LargeMotor('outA')
mr = ev3.LargeMotor('outB')
mf = ev3.MediumMotor('outC')
def go(t,dl,dr):
ml.run_forever(duty_cycle_sp=dl)
mr.run_forever(duty_cycle_sp=dr)
time.sleep(t/1000)
ml.stop()
mr.stop()
・30度回転させたいとき~
go(1000,15,-15)~
go(1000,-15,15)~
~
・45度回転させたいとき~
go(1000,20,-20)~
go(1000,-20,20)~
~
・60度回転させたいとき~
go(1000,24,-24)~
go(1000,-24,24)~
~
であることを調べた。この値を用いることで描写が前よりは簡単に行えるようになる。~
~
ちなみにこの時のバッテリー状態はほぼ充電完了状態である。~
~
よって、この値を適応させるにはできるだけ充電を完了した状態で試行するのが好ましい。~
~
*顔を描く本プログラムの作成 [#w4685301]
今までで、顔を描くための代数と、回転させるための値を計測してきたので、~
~
顔を描く本番のプログラムを書き始める。~
~
プログラムの流れとしては~
~
1.線の最初の点に移動する~
2.筆をつける~
3.ロボット本体を動かして描く~
4.筆を離す~
~
これらの繰り返しで顔を描写していく。~
~