目次

課題

今回の課題は書道ロボット。

これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙を書くロボットを製作する。ただし、以下の注意点に気を付ける。

・ひとりにつき一つ以上のプログラムを作成すること。

・ペン以外はキットに含まれる部品を使うこと。

・キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。

・ 改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。

以上のことから、「松本」を選んだ。

ロボットの説明

今回は説明書にあったロボットを用いた。走る時間をプログラムに入れることによって、タイヤの回転する時間を決めて進む距離や、回転する角度を調整できる。

完成

アームは少し変えた。形が象の鼻のように見えたので、画像のような形にした。アームのところにペンを固定し、動かす角度をプログラムに入れることによって、上下に動かして文字を書くというかなりシンプルなロボットである。

完成

実際に作業してみて

文字について

まずは、松を書くことにした。書き順としては、最初画像のようにして書く予定だった。黒の線はペンを上げているときのロボットの線である。

完成

しかし、このロボットはペンが先についているので回転すると元の位置にペンが来ない。なので画像のような書き順にすることにした。こうすれば回転しても、前後に動かすだけで調整できる。

完成

ペンについて

文字の書き方を決めて実際にロボットで書いてみた。最初はマッキーペンにしようとしたが、このペンだと地面との摩擦が大きく途中で止まってしまうことがある。そのため筆ペンを使うことにした。そもそも書道ロボットなのだから筆ペンにするべきであった。こうして、プログラムを書き、実際に作業して調整をし、できたのが以下のプログラムである。

プログラムの説明

プログラムの導入

今回はpythonを用いてプログラムを作る

#!/usr/bin/env python3
from ev3dev.ev3 import *
from time import sleep
ml=LargeMotor('outA') #装置Aのモーターをmlとおく
mr=LargeMotor('outB') #装置Bのモーターをmrとおく
mm=MediumMotor('outC')} #アームのモーターをmmとおく

定義の導入

前に移動・後ろに移動・ペンを下げる・ペンを上げる・回転する、の5つの定義を導入した。

def fd(t):
  ml.run_timed(time_sp=t,speed_sp=100,stop_action='coast')
  mr.run_timed(time_sp=t,speed_sp=100,stop_action='coast')
  sleep(3)
def back(t):
   ml.run_timed(time_sp=t,speed_sp=-100,stop_action='coast')
   mr.run_timed(time_sp=t,speed_sp=-100,stop_action='coast')
   sleep(3)
def pd():
  mm.run_to_rel_pos(position_sp=-15,speed_sp=25,stop_action='coast')
  sleep(3)
def pu():
  mm.run_to_rel_pos(position_sp=15,speed_sp=25,stop_action='coast')
  sleep(3)
def turn(x):
  mr.run_to_rel_pos(position_sp=x,duty_cycle_sp=50)
  ml.run_to_rel_pos(position_sp=-x,duty_cycle_sp=50)
  time.sleep(3)

fdはforward、pd・puはpen down・pen upである。文字を省略することで、作業を早くすることができた。

stop_actionをholdにすると、作業の始めにアームを動かせないのでcoastにした。

pdやpfのposition_spは最初45度にしていたが、これだとアームが大きく動いてペンの最初の位置を毎回調整するのが大変なので15度にして調整しやすいようにした。

turnのposition_spは、実際の動かしてみた結果から、自分が曲げたい角度の約2倍の値を入れることによって(90度なら180度を入れる)うまくいく事が分かった。

「松本」のプログラム

ml.reset()
mr.reset()
mm.reset()
pd() #1画目から2画目
fd(1000)
pu()
fd(1500)
turn(-170)
back(2500)
pd() #2画目から3画目
fd(2000)
pu()
fd(900)
turn(-90)
back(2200)
pd() #3画目から4画目
fd(800)
pu()
fd(1200)
turn(180)
back(2200)
pd() #4画目から5画目
fd(800)
pu()
fd(2300)
turn(210)
back(1800)
pd() #5画目から6画目
fd(800)
pu()
fd(2000)
turn(-120)
fd(600)
turn(-120)
back(2300)
pd() #6画目から7画目
fd(800)
pu()
fd(2000)
turn(-200)
fd(500)
turn(90)
back(2000)
pd() #7画目から8画目
fd(800)
pu()
fd(2000)
turn(260)
back(2000)
pd() #8画目から9画目
fd(900)
pu()
fd(2200)
turn(-120)
back(2500)
pd() #9画目から10画目
fd(800)
pu()
fd(5000)
turn(-260)
back(1000)
pd() #10画目から11画目
fd(2000)
pu()
fd(1000)
turn(150)
back(2500)
pd() #11画目から12画目
fd(2000)
pu()
fd(800)
turn(-90)
back(2100)
pd() #12画目から13画目
fd(1000)
pu()
fd(1000)
turn(180)
back(2300)
pd() #13画目から14画目
fd(1000)
pu()
fd(2200)
turn(-260)
back(1900)
pd() #14画目
fd(800)
pu()

結果

完成

いまいち。。。

感想

今回初めてロボットを作ってみて、正直良くできた点よりも反省するべき点のほうが多くあったように思う。 まずロボットについては、ほかのグループは色々と工夫をしているにもかかわらず自分たちのグループは説明書にあったロボットを用いただけで何も工夫していない。そのせいで、回転の際にいちいち場所を元に戻す手間がかかり、時間がかかってしまった。もっと人間のように手だけを動かすようなロボットを作れれば回転する必要がなくスムーズに作業が行えたと思う。このように、ロボットを作る際は、物事を手際よく行うようにプログラミングされている自然の生き物(今回は「書く」という作業なので人間、ほかには、例えば「速く飛ぶ」鳥のようなロボットを作りたいのであれば隼)に注目することでヒントが得られることがあることが分かった。

次にプログラミングについてである。先述のように、ロボットが回転するためペンが元の位置に戻らない。このため、場所を調整する手間がかかるので余計に時間がかかってしまった。だが、前に進むなどのプログラムの定義を簡略化したことで、少しは時間短縮になったのは良かったと思う。ほかに苦労したことは、プログラムが消えてしまったことである。同じような作業なので、慣れてくると効率を上げようと作業を早くしようと思って、間違えてデータを削除してしまった。これの対策としてはほかのファイルにプログラムを保存しておくなどする必要があった。

最後にそのほかの問題についいてである。まず、ペンはマッキーだと摩擦が大きくうまく進まない時があるので筆ペンにしたほうが良いということ、ほかには、電池の関係で進む距離や回転する大きさが異なってしまうので、プログラムの値を変えていないにもかかわらず同じように字が書けないということがあった。これは支点からの距離を短くするなどして誤差を少なくする努力が必要だと思った。

今回、初めてロボットを作って、実際に動かしてみて、様々な課題が見つかった。次回の課題では ロボット作りからしっかりと考えて、よくできたと思えるものを作りたいと思った。


添付ファイル: file008.jpg [詳細] file007.jpg [詳細] file006.jpg [詳細] file005.jpg [詳細] file002.JPG [詳細] file001.JPG [詳細] file004.JPG [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-11-16 (金) 19:13:24 (29d)