- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
*今回の課題 [#s9b3f120]
自立走行 またはその他の自動化された方法で、ロボットが持っているペンで紙の上に自分の出身地を描くプログラミングおよびロボットを作成する。
今回私は「札幌」という文字を書いた。
*今回作成したロボット [#d94af0fc]
**概要 [#laadc8d8]
縦と横の動きを別々のモーターが担う、いわゆる「XY軸型ロボ」を採用した。
モーターを3つ使用し、それぞれを「縦の動き」「横の動き」「ペンを上げ下げする動作」へと分担した。
↓実際のロボットの写真
&ref(2017b/Member/waitu/Mission1/IMG_3127.JPG,10%,aa);
**主な機構 [#wcf272b4]
***メイン車両機構 [#yd579baf]
ロボット全体を縦に動かす機構。 車輪の幅を可能な限り広くし、斜め方向へのズレを減らしている。
ロボット全体を縦の方向に動かす機構。 車輪の幅を可能な限り広くし、斜め方向へのズレを減らしている。また、タイヤ四輪を一列に設置することでさらに直進の安定性を得た。
&ref(2017b/Member/waitu/Mission1/がが.png,40%,aaa);
***サブ車両+ペン機構 [#ob2d5e00]
「車両の上のレールを横方向に動く小さな車両」と「ペンを上げ下げする装置」の二つを合体させて1つの機構としている。 メイン車両機構とは合体していないがレールからはみ出ないようにガイドがついている。 また、ペン機構には複数回のモーターの回転により発生するモーターのズレを防ぐ機構も備わっている。 また、ペン機構とペン本体は輪ゴムでのみの固定を施した。
「車両の上のレールを横の方向に動く小さな車両」と「ペンを上げ下げする装置」の二つを合体させて1つの機構としている。 メイン車両機構とは合体していないがレールからはみ出ないようにガイドがついている。 また、ペン機構には複数回のモーターの回転により発生するモーターのズレを防ぐストッパー機構も備わっている。 また、ペン機構とペン本体は輪ゴムでのみの固定を施した。
&ref(2017b/Member/waitu/Mission1/ああああ.png,40%,aaa);
↑レールの上にガイド機構がまたがっているような設計になっているのがわかる
*プログラミング概要 [#zb3e4ac0]
**書き方 [#m0bf708d]
今回は書き順にこだわり、どちらの文字も正規の書き順通りに書くようなプログラミングを作成した。
**定義 [#b55786bd]
最初に、今回のプログラミングで頻出されるプログラミングコードを定義した
#define GL(t) OnRev(OUT_A,22); Wait(50 * t); Off(OUT_A); Wait(100);
#define GR(t) OnFwd(OUT_A,22); Wait(50 * t); Off(OUT_A); Wait(100);
#define GU(t) OnRev(OUT_C,17); Wait(30 * t); Off(OUT_C); Wait(100);
#define GD(t) OnFwd(OUT_C,17); Wait(30 * t); Off(OUT_C); Wait(100);
#define GRU(t) OnFwd(OUT_A,24); OnRev(OUT_C,17); Wait(50 * t); Off(OUT_AC); Wait(100);
#define GRD(t) OnFwd(OUT_A,24); OnFwd(OUT_C,17); Wait(50 * t); Off(OUT_AC); Wait(100);
#define GLU(t) OnRev(OUT_A,24); OnRev(OUT_C,17); Wait(50 * t); Off(OUT_AC); Wait(100);
#define GLD(t) OnRev(OUT_A,24); OnFwd(OUT_C,17); Wait(50 * t); Off(OUT_AC); Wait(100);
#define PD OnRev(OUT_B,21); Wait(150); Off(OUT_B); Wait(500);
#define PU OnFwd(OUT_B,21); Wait(150); Off(OUT_B); Wait(500);
#define PDB OnRev(OUT_B,21); Wait(158); Off(OUT_B); Wait(500);
#define PUB OnFwd(OUT_B,21); Wait(150); Off(OUT_B); Wait(500);
上から順に
-Xの分だけペン機構を左へ
-Xの分だけペン機構を右へ
-Xの分だけ前進
-Xの分だけ後進
-Xの分だけペン機構を左へ
-Xの分だけペン機構を右へ
-ペンを上昇
-ペンを下降
-Xの分だけ前進しながらペン機構を右へ(右上へ)
-右下へ
-左上へ
-左下へ
-右下へ
-ペンを下降させる
-ペンを上昇させる
-ペンを大きく下降させる
-ペンを大きく上昇させる
を実行する。 (モーターにより同じ入力値でも動きが違うということがあったのでXにかけられる関数はモーターにより違う)
**札 [#ge0ba48c]
ペンの上げ下げに関する定義が二つあるのは、文字の太さを考慮した結果である
**札を書くプログラミング [#ge0ba48c]
漢字の右側の部分の微妙なカーブをできるだけ再現できるようにした。
**幌 [#t7653621]
task main ()
{
左側
PD;
GR(20);
PU;
GL(10);
GU(15);
PD;
GD(70);
PU;
GU(51);
PD;
GLD(20);
PU;
GRU(19);
GU(3);
PD;
GRD(15);
GR(5);
PU;
GLU(15);
GU(15);
GR(30);
右側
PD;
GD(50);
GRD(5);
GR(25);
GU(15);
PUB;
GD(15);
GL(65);
GD(35);
**幌を書くプログラミング [#t7653621]
はばへん(漢字の左側)のハネを再現しようと努力をした。
また、光の最後の画の形とハネにもこだわった
はばへん
PDB;
GD(40);
PUB;
GU(40);
PDB;
GR(20);
GD(40);
GLU(5);
PUB;
GRD(5);
GL(12);
GU(55);
PDB;
GD(80);
PUB;
GU(75);
GR(30);
日 の部分(右上)
PDB;
GD(30);
PUB;
GU(30);
PDB;
GR(33);
GD(30);
PUB;
GU(16);
GL(27);
PDB;
GR(30);
PUB;
GL(25);
GD(16);
PDB;
GR(35);
PUB;
GL(20);
光 の部分(右下)
PDB;
GD(20);
PUB;
GLU(10);
PDB;
GRD(9);
PUB;
GRD(3);
GRU(10);
PDB;
GD(15);
PUB;
GU(3);
GL(25);
PDB;
GR(40);
PUB;
GL(19);
PDB;
GD(5);
GLD(20);
PUB;
GRU(20);
GU(5);
GR(13);
PDB;
GD(25);
GRD(5);
GR(10);
GU(15);
PUB;
}
* 結果 [#i5c885e9]
&ref(2017b/Member/waitu/Mission1/IMG_3132.JPG,10%,zoom,画像の説明);
実際に書いた文字の写真↑
「札幌」と書いてあることは判別できるが、ロボットが書いているような不自然さが際立つ結果となった。
*自評・感想 [#o87782c1]
上に書いた通り、文字に不自然さが残る結果となった。それの主な原因が線の始点と終点のズレによるものだが、これにはどうしても環境やバッテリー残量などの細かい要因が絡むため、完璧な文字を作成するのは難しいと感じた。しかしながら、大まかな動きはほぼ完成されていたのでその点は満足できた。より時間があれば、ペンの上げ下げをする際に発生する始点と終点の余分な線や、漢字のトメ、ハネなどのディテールを追及していきたいと感じた。
上に書いた通り、文字に不自然さが残る結果となった。それの主な原因が線の始点と終点のズレによるものだが、これにはどうしても環境やバッテリー残量などの細かい要因が絡むため、完璧な文字を作成するのは難しいと感じた。しかしながら、大まかな動きはほぼ完成されていたのでその点は満足できた。より時間があれば、ペンの上げ下げをする際に発生する始点と終点の余分な線や、漢字のトメ、ハネなどのディテールを追及していきたいと感じた。 また、プログラミングの方面ではサブルーチンを駆使するともっと見やすいプログラミングコードが書けるはずなので、そこを改善していきたいと感じた。