- 追加された行はこの色です。
- 削除された行はこの色です。
[[2008b/A2/課題1/メンバーページへ:http://yakushi.shinshu-u.ac.jp/robotics/?2008b%2FA2]]
*目次 [#q7c2244f]
#contents
*課題1/似顔絵を作成する [#c3d27323]
**1課題の概要 [#aaf96f25]
A3の用紙に相棒の似顔絵を作成するロボットの作成。
**2ロボット本体の制作過程 [#cfc33310]
***土台構成について [#n884bd06]
~土台となる部分は作成用の本に書いてあった四輪のタイプを使用しました。
~土台の部分には特に手を加えず、そのままの形で製作。
***ペンを持たせる部分について [#l7012eb2]
~ここの部分には過去の作品のアイディアを一部使用しながら工夫し、完成。予定よりもかなり少ない部品でつくることの成功しました。&br;主な工夫点については後に記載します。
**3ロボット本体の完成 [#hb2eb680]
完成したロボットがこちら
~正面~
~真上から~
まだ写真はありません。
***主な工夫点 [#x742bc48]
~ペンを動かすにはタイヤを使って上下に移動する方法を採用。&br;
三つタイヤを使うことによりペンの上下を安定させることが出来たと思います。&br;
また、なるべく少ない部品で組み立てることで、小型化、軽量化することができました。
***ロボットの欠点と改善に向けて [#c8c5aa72]
~このロボットの弱点、つまり改良点は、非常に衝撃に弱いことです。&br;ブロックばかりでの構成なので、外れやすく、組み込みが複雑なので取り外しも簡単に出来ません。
&br;前のほうにパーツが多い所為か前に重心がかかっているらしく、アームの部分だけが外れることもよくあります。
&br;なので改良すべき点はパーツが外れないよう補強すること、ブロック以外の部品の活用です。
&br;だからといってパーツを多く使いすぎれば小型、軽量の意味がなくなってしまうので難しいところです。
**4ロボットのプログラム [#g0004a6b]
***その1 [#n119425f]
int turn_time;
#define FF OUT_A+OUT_C//for go
#define FL OUT_A//turn left
#define FR OUT_C//turn right
#define FA OUT_B//pen
#define FF OUT_A+OUT_C
#define FL OUT_A
#define FR OUT_C
#define FA OUT_B
void up()// ペンを上げる
sub up() //ペンを上げるsub
{SetPower(FA,5);
OnFwd(FA_B);
Wait(t);
Off(FA);}
{ OnRev(FA); Wait(10); Off(FA); }
sub down() //ペンを下げるsub
{SetPower(FA,5);
OnRev(FA);
Wait(t);
Off(FA);}
void down() // ペンを下げる
sub fore() //本体を前に動かすsub
{SetPower(FF,5);
OnRev(FF);}
sub back() //本体を後ろに動かすsub
{SetPower(FF,5);
OnFwd(FF);}
{ OnFwd(FA); Wait(10); Off(FA);}
sub right() //右に旋回するsub
{SetPower(FR,5);
OnRev(FF);}
void fore(int t) // t秒間直進
sub left() //左に旋回するsub
{SetPower(FL,5);
OnRev(FF);}
sub turn_left_025() // 90度左旋回
{turn_time = WHOLETIME ;
turn_time /= 4 ;
OnFwd(FL); Rev(FF); Wait(turn_time);
Off(FF); }
{ OnRev(FF); Wait(10); Off(FF);}
void back(int t)// t秒間後退
{ OnFwd(FF); Wait(10); Off(FF);}
sub right()
{SetPower(FR,5);
OnRev(FR);}
sub left()
{SetPower(FL,5);
OnRev(FL);}
sub turn_left_025() // TURN LEFT - 0.25 左に90°回転
{ turn_time /= 4 ; OnFwd(FL); Rev(FF); Wait(turn_time); Off(FF); }
sub turn_left_0125() // 45度左旋回
{turn_time = WHOLETIME ;
turn_time /= 8 ;
OnFwd(FL); Rev(FF); Wait(turn_time);
Off(FF); }
sub turn_left_0125() // TURN LEFT - 0.125 左に45°回転
{ turn_time /= 8 ; OnFwd(FL); Rev(FF); Wait(turn_time); Off(FF); }
sub turn_right_025() // 90度右旋回
{turn_time = WHOLETIME ;
turn_time /= 4 ;
OnFwd(FR); Rev(FF); Wait(turn_time);
Off(FF); }
sub turn_right_025() // TURN LEFT - 0.25 rightに90°回転
{ turn_time /= 4 ; OnFwd(FR); Rev(FF); Wait(turn_time); Off(FF); }
sub turn_right_0125() // 45度右旋回
{ turn_time = WHOLETIME ;
turn_time /= 8 ;
OnFwd(FR); Rev(FF); Wait(turn_time);
Off(FF); }
sub turn_right_0125() // TURN LEFT - 0.125 rightに45°回転
{ turn_time /= 8 ; OnFwd(FR); Rev(FF); Wait(turn_time); Off(FF); }
main task()
{ down(); //筆先を下ろします
repeat(2){ //まずは輪郭です
task main()
{ down(); //ready OK
repeat(2){
fore();
Wait(t);
Off(FF);
Wait(10);
Off(FF); //start
left();
Wait(t);
Off(FL);} //輪郭描けました
Wait(10);
Off(FL);} //rinkaku OK
up();
turn_left_025();
repeat(2){
fore();
Wait(t);
Wait(10);
Off(FF);
down();
fore();
Off(FF);
up();}
fore(); //目を描きました
fore(); //eyes OK
back();
Wait(t);
Wait(10);
Off(FF);
turn_ right_025();
turn_right_025();
fore();
Wait(t);
Wait(10);
Off(FF);
down();
fore();
Wait(t);
Wait(10);
Off(FF);
up(); //鼻を描きました
up(); //nose OK
turn_left_025();
fore();
Wait(t);
Wait(10);
Off(FF);
turn_right_025();
Wait(t);
Wait(10);
Off(FF);
turn_right_025();
Wait(t);
Wait(10);
Off(FF);
down();
fore();
Wait(t);
Wait(10);
Off(FF);
up();
fore();
Wait(t);
Off(FF); //口が描けました
Wait(10);
Off(FF); //mouse OK
turn_right_025();
fore();
Wait(t);
Wait(10);
Off(FF);
repeat(3){
turn_right_0125();
fore();
Wait(t);
Wait(10);
Off(FF);
turn_left_0125();} //髪まで描きます!
//サブルーチンは上限八個であることが判明
turn_left_0125();} //hair OK
} //finish
//subを減らしました Waitの時間は適当です
//これから試行錯誤します
***その2 サブルーチンなどは、その1とほとんど同じです。 [#sbdf315f]
int turn_time;
#define FF OUT_A+OUT_C
#define FL OUT_A
#define FR OUT_C
#define FA OUT_B
sub up() ペンを上げる
{SetPower(FA,5);
OnFwd(FA);
Wait(5);
Off(FA);}
sub down() ペンを下げる
{SetPower(FA,5);
OnRev(FA);}
sub fore() 直進
{SetPower(FF,5);
Off(FA);
OnRev(FF);}
sub back() 後退
{SetPower(FF,5);
OnFwd(FF);}
Wait(t);
Off(FA);}
sub right() 右に曲がる
{SetPower(FR,5);
OnRev(FF);}
sub left() 左に曲がる
{SetPower(FL,5);
OnRev(FF);}
task main()
#ref(輪郭.jpg)
{
down(); //輪郭(左頬からスタート)
fore();
Wait(130);
up();
repeat(2){ //アゴの辺り
left();
Wait();
down();
fore();
Wait();
up();
left();
Wait();
down();
fore();
Wait();
up();
left();
Wait();
down();
fore();
Wait();
up();
}
down(); //右頬の辺り
fore();
Wait();
up();
back();
Wait();
left();
Wait();
#ref(メガネ.jpg)
repeat(2);{ //メガネ
down();
fore();
Wait();
up();
right();
Wait();
down();
fore();
Wait();
up();
left();
Wait();
down();
fore();
Wait();
up();
left();
Wait();
down();
fore();
Wait();
up();
left();
Wait();
down();
fore();
Wait();
up();
left();
Wait();
fore();
Wait();
}
down();
fore();
Wait();
#ref(鼻.jpg)
up(); //鼻までの移動
back();
Wait();
left();
Wait();
fore();
Wait();
down(); //鼻
fore();
Wait();
up();
#ref(口.jpg)
up(); //鼻から口
right();
Wait();
fore();
Wait();
left();
Wait();
fore();
Wait();
down(); //最後に口を書きます
repeat(2){
left();
Wait();
down();
fore();
Wait();
up();
left();
Wait();
down();
fore();
Wait();
up();
left();
Wait();
down();
fore();
Wait();
up();
}
} //口を書き終わって終了です。
/図は後で足します。
*コメント [#zc823165]
コメントがあればどうぞ
- 相方への連絡です。ロボットの動きを知りたいので、CD含めた一式を5コマ目の後パソコン室(十番教室)に持ってきて下さい。六時から七時まで、一時間ほど待機しています。 -- [[ハマダ]] &new{2008-11-10 (月) 09:06:55};
- ロボットを動かさないことにはプログラムの改良のしようがありません。明日のお昼にパソコン室に持ってきてくださるか、そちらでロボットの改良及び動きの時間の計測をお願いします。 -- [[ハマダ]] &new{2008-11-10 (月) 18:23:22};
#comment