2016a/Member/ryo/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題 [#b3dac50c]
自分の似顔絵を描く、お絵かきロボットを製作すること。~
条件としては~
・ペン以外はキットの部品を使うこと。~
・プログラムはなるべく簡単に作ること。~
・A4サイズの紙に収まる大きさにすること。~
である。~
[[(2016年前期/課題1より):http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission1]]
*ロボットの説明 [#s126c317]
#ref(2016a/Member/ryo/Mission1/image1.JPG,120%,ロボット本体)
これがロボットの全体像。
#ref(2016a/Member/ryo/Mission1/image5.JPG,100%.タイヤ)
ペンを持たせるため、タイヤを二個取り付け挟んだ。~
また、タイヤの片側をモータとつなげ、もう片方は空回りさせ、上下運動をできるようにした。
#ref(2016a/Member/ryo/Mission1/image3.JPG,120%,ロボット本体)
タイヤだけではペンが安定しなかったため、タイヤ下に補助を取り付けた。~
ペンはタイヤ間の距離を考慮し、太さが合うペンを取り付けた。
*下書き [#fa9bc848]
#ref(2016a/Member/ryo/Mission1/image1 (5).JPG,80%.下書き)
できるだけロボットの移動距離が短くなるように順路を考えた。~
また、プログラミングのしやすさを考え、直角を多用できるように下書きした。~
髪以外左右対称にしたため、移動距離などがプログラミングしやすかった。
*プログラムの説明 [#x04133ba]
**定義の説明 [#v552995a]
#define go_fwd(t)
t秒間直進。
#define Turn_L
#define Turn_R
これらは直角に回転するよう定義したもの。~
ペンを上げ直角回転し、位置の修正、ペンを下げるまでを一つとした。~
Turn_Lが左回転、Turn_Rが右回転。
#define Turn_L_i
#define Turn_L_ii
#define Turn_L_iii
これらは髪の毛を描くときに使った定義。~
それぞれ左回転をするが、回転時間を変え、角度を変えた。~
ペンを上げ直角回転し、位置の修正、ペンを下げるまでを一つとした。~
#define pen_up
#define pen_down
これらはペンの上下に関する定義。~
pen_upでペンを上げpen_downでペンを下げる。
**プログラム [#z44098e9]
(行変更の際の記号が¥となっている)
#define go_fwd(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC) //t秒直進
#define Turn_L pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_C);OnRev(OUT_A);Wait(93);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(62);Off(OUT_AC);\ //90度左回転
pen_down;
#define pen_up OnFwd(OUT_B);Wait(15);Off(OUT_B);
#define pen_down OnRev(OUT_B);Wait(15);Off(OUT_B);
#define Turn_L_i pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_C);OnRev(OUT_A);Wait(55);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(65);Off(OUT_AC);\
pen_down;
#define Turn_L_ii pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_C);OnRev(OUT_A);Wait(68);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(65);Off(OUT_AC);\
pen_down;
#define Turn_L_iii pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_C);OnRev(OUT_A);Wait(160);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(72);Off(OUT_AC);\
pen_down;
#define Turn_R pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_A);OnRev(OUT_C);Wait(93);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(62);Off(OUT_AC);\ //90度右回転
pen_down;
task main()
{
repeat(2) {
go_fwd(90);
Turn_L;
go_fwd(80);
Turn_L;
} //輪郭
pen_up;
go_fwd(50);
pen_down;
Turn_L_i;
go_fwd(29);
Turn_L_ii;
go_fwd(58); //髪の毛
Turn_L_iii;
pen_up;
go_fwd(24);
pen_down;
Turn_R;
go_fwd(24); //右目
pen_up;
go_fwd(10);
pen_down;
Turn_L;
go_fwd(34); //口
Turn_L;
pen_up;
go_fwd(10);
pen_down;
go_fwd(24); //左目
}
輪郭部分でrepeatを使って簡略化することができた。~
回転した後、位置のずれが起こるため、回転する際に後退、回転、前進の順に動かし、位置の修正を行った。~
ペンの上下、回転、位置の修正までを一つの定義にまとめ、プログラムを短くすることを心がけた。
*感想 [#w8b136a8]
#ref(2016a/Member/ryo/Mission1/kao.JPG,100%.タイヤ)
これが完成品。下書きに近い顔を描くことができたと思う。定義やrepeatを使い、簡略化できた。~
回転の後、位置ずれが起こるため、後退・前進を使って修正したが、その時間を調節することが一番大変だった。~
電池の減り具合でロボットのスピードも変わってしまうため、そこも苦戦した。~
何度も繰り返し試験運転をしなければいけなかったため、大変ではあったが、その分、成功した時の達成感は大きかった。~
次の課題も頑張りたい。
終了行:
目次
#contents
*課題 [#b3dac50c]
自分の似顔絵を描く、お絵かきロボットを製作すること。~
条件としては~
・ペン以外はキットの部品を使うこと。~
・プログラムはなるべく簡単に作ること。~
・A4サイズの紙に収まる大きさにすること。~
である。~
[[(2016年前期/課題1より):http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission1]]
*ロボットの説明 [#s126c317]
#ref(2016a/Member/ryo/Mission1/image1.JPG,120%,ロボット本体)
これがロボットの全体像。
#ref(2016a/Member/ryo/Mission1/image5.JPG,100%.タイヤ)
ペンを持たせるため、タイヤを二個取り付け挟んだ。~
また、タイヤの片側をモータとつなげ、もう片方は空回りさせ、上下運動をできるようにした。
#ref(2016a/Member/ryo/Mission1/image3.JPG,120%,ロボット本体)
タイヤだけではペンが安定しなかったため、タイヤ下に補助を取り付けた。~
ペンはタイヤ間の距離を考慮し、太さが合うペンを取り付けた。
*下書き [#fa9bc848]
#ref(2016a/Member/ryo/Mission1/image1 (5).JPG,80%.下書き)
できるだけロボットの移動距離が短くなるように順路を考えた。~
また、プログラミングのしやすさを考え、直角を多用できるように下書きした。~
髪以外左右対称にしたため、移動距離などがプログラミングしやすかった。
*プログラムの説明 [#x04133ba]
**定義の説明 [#v552995a]
#define go_fwd(t)
t秒間直進。
#define Turn_L
#define Turn_R
これらは直角に回転するよう定義したもの。~
ペンを上げ直角回転し、位置の修正、ペンを下げるまでを一つとした。~
Turn_Lが左回転、Turn_Rが右回転。
#define Turn_L_i
#define Turn_L_ii
#define Turn_L_iii
これらは髪の毛を描くときに使った定義。~
それぞれ左回転をするが、回転時間を変え、角度を変えた。~
ペンを上げ直角回転し、位置の修正、ペンを下げるまでを一つとした。~
#define pen_up
#define pen_down
これらはペンの上下に関する定義。~
pen_upでペンを上げpen_downでペンを下げる。
**プログラム [#z44098e9]
(行変更の際の記号が¥となっている)
#define go_fwd(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC) //t秒直進
#define Turn_L pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_C);OnRev(OUT_A);Wait(93);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(62);Off(OUT_AC);\ //90度左回転
pen_down;
#define pen_up OnFwd(OUT_B);Wait(15);Off(OUT_B);
#define pen_down OnRev(OUT_B);Wait(15);Off(OUT_B);
#define Turn_L_i pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_C);OnRev(OUT_A);Wait(55);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(65);Off(OUT_AC);\
pen_down;
#define Turn_L_ii pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_C);OnRev(OUT_A);Wait(68);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(65);Off(OUT_AC);\
pen_down;
#define Turn_L_iii pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_C);OnRev(OUT_A);Wait(160);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(72);Off(OUT_AC);\
pen_down;
#define Turn_R pen_up;\
OnRev(OUT_AC);Wait(65);Off(OUT_AC);\
OnFwd(OUT_A);OnRev(OUT_C);Wait(93);Off(OUT_AC);\
OnFwd(OUT_AC);Wait(62);Off(OUT_AC);\ //90度右回転
pen_down;
task main()
{
repeat(2) {
go_fwd(90);
Turn_L;
go_fwd(80);
Turn_L;
} //輪郭
pen_up;
go_fwd(50);
pen_down;
Turn_L_i;
go_fwd(29);
Turn_L_ii;
go_fwd(58); //髪の毛
Turn_L_iii;
pen_up;
go_fwd(24);
pen_down;
Turn_R;
go_fwd(24); //右目
pen_up;
go_fwd(10);
pen_down;
Turn_L;
go_fwd(34); //口
Turn_L;
pen_up;
go_fwd(10);
pen_down;
go_fwd(24); //左目
}
輪郭部分でrepeatを使って簡略化することができた。~
回転した後、位置のずれが起こるため、回転する際に後退、回転、前進の順に動かし、位置の修正を行った。~
ペンの上下、回転、位置の修正までを一つの定義にまとめ、プログラムを短くすることを心がけた。
*感想 [#w8b136a8]
#ref(2016a/Member/ryo/Mission1/kao.JPG,100%.タイヤ)
これが完成品。下書きに近い顔を描くことができたと思う。定義やrepeatを使い、簡略化できた。~
回転の後、位置ずれが起こるため、後退・前進を使って修正したが、その時間を調節することが一番大変だった。~
電池の減り具合でロボットのスピードも変わってしまうため、そこも苦戦した。~
何度も繰り返し試験運転をしなければいけなかったため、大変ではあったが、その分、成功した時の達成感は大きかった。~
次の課題も頑張りたい。
ページ名: