目次

課題

文字を書くロボ、「書道ロボット」を作り、住んだことのある地名(二文字以上、十画以上)を書かせる。

これに対し私は、実家のある地区名北条をロボに書かせる。

ロボットの仕組み

zentai+a.jpg

 筆を横に動かすためのミディアムモーター
◆筆を上げ下げするためのラージモーター
:筆を本体ごと前後させるためのラージモーター

この三つのモーターを使って、字を書いていく。
モーターの駆動には''run_to_rel_pos''というメソッドを使う。これは、モーターを決められた角度だけ回すというものだ。
時間でモーターを動かすメソッドもあるが、それは速度と時間の二つの変数があるのでメンドイと思われる。

ゝ々修寮睫

横方向の動きを作る部分。モーターに筆を取り付けた無限軌道を付け、モーターを時計、反時計回りに回して動きを作っている。

yoko.jpg

機構の説明

筆を上げ下げする部分。モーターに十字棒を取り付けることにより、隣に動きを伝えている。

age.JPG

5々修寮睫

縦方向の動きを作る部分。モーターをタイヤ二つに接続し、筆を本体ごと動かしている。これでは曲がることができないが横方向は別にあるので無問題。

tate.JPG

文字書き理論

各モーターの回転角度と長さの関係を調べ、縦180→13僉Σ360→13僂任△襪海箸分かった。そして、これをもとに図のように考えた。
(180や360は"run_to_rel_pos"メソッドの"position_sp"に入れる値のこと。)

masu.jpg

縦180と横360がほぼ同じ長さだったのでこれらで正方形のマスを作り、これを座標のように見立て、各点を結び文字を作る。下の図のように。

hou.jpg

zyou.jpg

こんな感じで文字を書いていく。プログラミング編へ。

プログラミング

定義

字を書くコードの前にまずは準備。
そのままだと呼びにくいのでモーターに名前を付けていく。

yoko = MediumMotor('outB')
tate = LargeMotor('outA')
mae = LargeMotor('outD')

英語で名前をつけた方がカッコイイが、打ちやすさを優先しローマ字にしとく。

次に、プログラミングを"def"を使って分かりやすく、かつ、簡易にする。

def orosu():
       tate.run_to_rel_pos(position_sp=-90, speed_sp=200, stop_action='brake')
def ageru():
       tate.run_to_rel_pos(position_sp=90, speed_sp=200, stop_action='brake')
def migi(a):
       yoko.run_to_rel_pos(position_sp=-a, speed_sp=200, stop_action='brake')
def hidari(b):
       yoko.run_to_rel_pos(position_sp=b, speed_sp=200, stop_action='brake')
def susumu(c):
       mae.run_to_rel_pos(position_sp=-c, speed_sp=200, stop_action='brake')
def sagaru(d):
       mae.run_to_rel_pos(position_sp=d, speed_sp=200, stop_action='brake')

position_spの値には"a"やら"b"を入れておき、後から代入できるようにする。こうすると便利である。| これにて準備完了。

まずは「北」という文字を書いていく。書き順は次の通り。

hou kaki.jpg

,離廛蹈哀薀

def hou(t):
       orosu()
       sleep(t)
       migi(120)
       sleep(t)
       ageru()
       sleep(t)
       migi(120)
       sleep(t)
       orosu()
       sleep(t)
       migi(120)
       sleep(t)
       ageru()
       sleep(t)

試験運転や微調整のことを考え、一文字ごとにdefっておく。変数tはsleepの時間で、これも微調整が必要と思い、後で決めることにする。 漢字の書き順はロボットには関係ないので、できるだけ少ないムーブで書くようにしたい。より、上の横棒はイッキに書いてしまう。

△離廛蹈哀薀

       hidari(240)
       susumu(60)
       sleep(t)
       orosu()
       sleep(t)
       sagaru(150)
       sleep(t)
       hidari(120)
       sleep(t)
       ageru()
       sleep(t)

見ての通り、下がって左。,らの初期位置への移動を忘れずに。

のプログラム  

       susumu(150)
       migi(240)
       sleep(t)
       orosu()
       sleep(t)
       sagaru(150)
       sleep(t)
       migi(120)
       sleep(t)
       susumu(30)
       sleep(t)
       ageru()

ここでは少し問題があったが、それは後で説明する。
この問題を問題Aとする。

次に「条」を書いていく。書き順は次の通り。

zyou kaki.jpg

,離廛蹈哀薀

def zyou(t):
       orosu()
       sleep(t)
       sagaru(30)
       hidari(60)
       sleep(t)
       ageru()
       sleep(t)

「北」同様、こちらもdefって書いていく。

△離廛蹈哀薀

       susumu(30)
       migi(60)
       sleep(t)
       orosu()
       sleep(t)
       migi(120)
       sleep(t)
       sagaru(90)
       hidari(240)
       sleep(t)
       ageru()
       sleep(t)

のプログラム

       susumu(90)
       migi(120)
       sleep(t)
       orosu()
       sleep(t)
       sagaru(90)
       migi(240)
       sleep(t)
       ageru()
       sleep(t)

い離廛蹈哀薀

       susumu(30)
       hidari(240)
       sleep(t)
       orosu()
       sleep(t)
       migi(120)
       sleep(t)
       ageru()
       sleep(t)

イ離廛蹈哀薀

       hidari(60)
       susumu(30)
       sleep(t)
       orosu()
       sleep(t)
       sagaru(90)
       sleep(t)
       ageru()
       sleep(t)

,Г離廛蹈哀薀

       susumu(90)
       sleep(t)
       orosu()
       sleep(t)
       hidari(100)
       sagaru(60)
       sleep(t)
       ageru()
       sleep(t)
       migi(100)
       susumu(60)
       sleep(t)
       orosu()
       sleep(t)
       migi(100)
       sagaru(60)
       sleep(t)
       ageru()

,ГVの逆みたいな書き順でまとめてやりたがったが、問題Aによりうまくできなかったので、分けた。

hou(3)
sleep(3)
sagaru(100)
hidari(240)
sleep(3)

最後に「北」と「条」を合体し、初期位置の調整をして完成。結局"t"は3秒ぐらいでちょうどよさそう。
完成した文字がこれ↓

kansei.JPG

若干アンバランスに見えるが読めるので良しとする。

問題及びその反省

問題A

保留してきた問題Aとは、下から上に書くと無限軌道がたわんじゃう問題である。
筆が固定してある無限軌道は両端しか固定されていなく、中が空になっている。なので、上から下へは形状の関係で丈夫だが、下から上へは弱い。中に固定されていない歯車をかませて、安定させようとしたが無理だった。
より、下から上へは諦めた。

反省A

筆を付ける部分はしっかりと固定しよう!

問題B

試験運転の時、ひそかに起こっていた問題が、モーターが計算通りに回ってくれない問題である。
起こっていた現象は次の通り。

  1. モーターを120°回転させる。
  2. 手動で初期位置に戻す。
  3. もう一度、120°回転させるよう入力する。
  4. と、240°程回転する。 おかしい。

反省B

原因は"run_to_rel_pos"にあった。おそらくだが、このメソッドはロボットが思う今の位置から指定した角度まで回すというものである。手動で回したとしても、ロボットは覚えている位置から任意の角度まわす、という動きをする。

修正する方法は3つある。

  • "run_to_rel_pos"の前にモーターをリセットする
  • "run_to_abs_pos"を使う
  • 手動で戻した後にロボットとつなぎなおす

以上おわり

今までの訪問者数:13人


添付ファイル: filezyou kaki.jpg 2件 [詳細] fileage.JPG 3件 [詳細] filekansei.JPG 1件 [詳細] filehou kaki.jpg 2件 [詳細] filetate.JPG 2件 [詳細] fileyoko.jpg 2件 [詳細] filezyou.jpg 3件 [詳細] filehou.jpg 2件 [詳細] filemasu.jpg 2件 [詳細] filezentai+a.jpg 5件 [詳細] filezentai.JPG [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-06-07 (金) 17:55:40 (18d)