目次

課題1内容

各自の名前の中の一文字をA4用紙の中に書く。 ただし7画以上の文字を選ぶこと。もし7画以上の文字がない場合には合計7画以上になるように複数の文字を書きなさい。

マクロや関数などを使い、main関数はなるべく単純になるようにプログラムを作ること。

ロボットの設計

サンプルロボットにアームをとりつけた簡単なロボットをつくりました。 アームをサンプルロボットの正面につけ、カブトムシのような見た目にし、ビートル号と名付けました。
DSC02341.JPG

初期設計

見た目の良さを重視した結果、アームをサンプルロボットの後方部につけました。

  • メリット
    • 見た目が良い
  • デメリット
    • キャスターの真上にアームが来ることで、キャスターの動きが不安定になる。
    • 後方部が重くなり、ロボットのバランスが不安定になるため、誤差が生じやすくなる。
    • ペンを固定する箇所が若干不安定なため、補強が必要。
    • アームが床から離れた位置にあるため少しモーターを回しただけでもペンが大きく動いてしまい、ペンの上げ下げがうまくコントロールできない。
       
      とにかく不安定でうまく字が書けない!!

改良後ロボット

  • アームをサンプルロボット正面にとりつけました。
    →キャスターが動きやすくなり、ロボットの進行方向が定まりやすくなる。
     ロボットのバランスが安定し、比較的プログラミングがしやすくなる。
  • アームがなるべく地面に近くなるようにしました。
    →ペンの上げ下げがコントロールしやすくなる。
  • なるべく本体前輪部近くにアームを設置しました。
    →タイヤとタイヤの中央に近い場所にペンが来た方がタイヤの軌跡とペンで書いた軌跡の誤差が少なくなる。

アーム

  • 固定する箇所を2箇所つくり、安定性を高めました。
  • 筆の上げ下げをする動作が円を描くような動きをするようになってしまいましたが、止め・はらいがしっかり出来る構造になりました。
    DSC02347.JPG

プログラム

定義

  • スピードは遅めに指定し、コントロールしやすくしました。
  • モーターは回転角度を指定して回しました。
    →電池残量に関わらずタイヤが進むように。
  • 前輪のモーターは同期し、まっすぐ進むようにしました。
    #define SPEED 25
    #define TURN_TIME 500
    #define go_forward(t) ResetTachoCount(OUT_BC);\
    RotateMotorEx(OUT_BC,SPEED,t,0,true,true); Off(OUT_BC); Wait(TURN_TIME); //回転角tだけ前進
    #define back(t) ResetTachoCount(OUT_BC); RotateMotorEx(OUT_BC,SPEED,-t,0,true,true);\
    Off(OUT_BC); Wait(TURN_TIME); //回転角tだけ後退
    #define down_arm RotateMotor(OUT_A,10,16); Wait(TURN_TIME); //アームを下げる
    #define up_arm RotateMotor(OUT_A,10,-16); Wait(TURN_TIME); //アームを上げる
    #define turn(t,s) ResetTachoCount(OUT_B,SPEED,t); Off(OUT_B); Wait(TURN_TIME);\
    RotateMotor(OUT_C,SPEED,s); Off(OUT_C); Wait(TURN_TIME);&br;
    //モーターBを回転角tで前進させた後、モーターCを回転角sで前進させ、方向を変えたり次にペンを下す場所へ移動する
    #define backturn(t,s) ResetTachoCount(OUT_C,SPEED,t); Off(OUT_C); Wait(TURN_TIME);\
    RotateMotor(OUT_B,SPEED,s); Off(OUT_B); Wait(TURN_TIME);&br;
    //モーターCを回転角tで後退させた後、モーターBを回転角sで後退させ、方向を変えたり次にペンを下す場所へ移動する

誤差をなくすためになるべくロボットの移動を少なくすることを意識し、主に上のturnやbackturnを使って次ペンを下すところまで移動させました。

バックスラッシュが¥になってしまいました...。

プログラム

香という字を書くにあたって、書き順は無視してプログラムを書きました。
大きめに書くと誤差が大きく出たり、紙がくしゃくしゃになってしまうので、小さく字を書くように意識しました。
順序は

  • 一番上のはらい
  • 上から順に横画を4つ
  • 右から順に縦画を3つ
  • 行書風にはらいを一本
    という順に書くプログラムを作りました。
task main()
{
 down_arm; //一画目
 go_forward(100);
 up_arm;
 turn(200,250); //二画目への移動
 back(150);
 down_arm; //二画目
 back(200);
 up_arm;
 turn(200,200); //三画目への移動
 back(35);
 down_arm; //三画目
 back(100);
 up_arm;
 turn(105,100); //四画目への移動
 down_arm; //四画目
 back(100);
 up_arm;
 turn(105,100); /五画目への移動
 down_arm; //五画目
 back(100); 
 up_arm
 go_forward(265); //六画目への移動
 backturn(150,-180);
 back(270);
 down_arm; //六画目
 go_forward(70);
 up_arm;
 turn(130,130); //七画目への移動
 down_arm;七画目
 back(70);
 up_arm;
 turn(130,110); //はらいへの移動
 back(30);
 down_arm;
 turn(0,150); //はらい
 up_arm;
}

ロボットの移動を少なくしたことでtask mainの中身をなるべく短く単純にすることができました。

反省点

ロボットが接する床や机の素材によって字の出来が大きく変わってしまいました。

  • プログラムを作る際にしっかりと紙をおさえておらず、紙のずれにあわせてプログラムを作ってしまったせいだと考察。
    →テープ等でしっかり紙をおさえておくべき。
    DSC_0137.JPG
    また、写真上のところまではうまくいったので もっとはらいを調節すべきでした。

添付ファイル: fileDSC_0137.JPG 93件 [詳細] fileDSC02349.JPG 49件 [詳細] fileDSC02347.JPG 93件 [詳細] fileDSC02341.JPG 111件 [詳細]

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