- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
*課題1:似顔絵ロボットの作成 [#u7ac9691]
ペアになった相手の似顔絵を書くプログラムを作る。
**メンバー紹介 [#t22ae3b2]
小次郎 ロボット担当 頼りになります!
コリン ホムペ担当 ロボットには全く関与せず・・・せめてホムペくらいは作れるかと・・・
コリン ホムペ担当 ロボットには全く関与せず。ホムペ作りは頑張ってます。
プログラムは二人で考えて、Sが書き込む感じ。仲良く協力してやってます!
プログラムは二人で考えて、コリンが書き込む感じ。協力してやってます!
**使用するロボットについて [#cf08e12a]
ローラーを使ったロボット。
#ref(2008a/A4/課題1左/borotto_ue.jpg,100%,上から見た図)
↑ 上から見た図
#ref(2008a/A4/課題1左/borotto-mae.jpg,100%,前から見た図)
↑ 前から見た図
ペンを持つ部分は、B出力のモータを利用。
どこかにある機動兵器みたいです!ごついです。
*プログラムについて [#c066720d]
**その1 (小次郎の似顔絵)[#z954d1aa]
void go(int t) // 前に進む動作を go と設定
void go(int t) // 前に進む動作を go と設定
{
OnFwd(OUT_A+OUT_C); // AとC出力のモータを正回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // AとC出力のモータを止める
OnFwd(OUT_A+OUT_C); // AとC出力のモータを正回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // AとC出力のモータを止める
}
void back(int t) // 後ろに下がる動作を back と設定
void back(int t) // 後ろに下がる動作を back と設定
{
OnRev(OUT_A+OUT_C); // AとC出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // AとC出力のモータを止める
OnRev(OUT_A+OUT_C); // AとC出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // AとC出力のモータを止める
}
void go_right(int t) // 右に曲がる動作を go_right と設定
void go_right(int t) // 右に曲がる動作を go_right と設定
{
OnFwd(OUT_A); // A出力のモータを正回転させる
Wait(t); // t秒間実行
Off(OUT_A); // A出力のモータを止める
OnFwd(OUT_A); // A出力のモータを正回転させる
Wait(t); // t秒間実行
Off(OUT_A); // A出力のモータを止める
}
void back_left(int t) // 左に下がる動作を back_left と設定
void back_left(int t) // 左に下がる動作を back_left と設定
{
OnRev(OUT_C); // C出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_C); // C出力のモータを止める
OnRev(OUT_C); // C出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_C); // C出力のモータを止める
}
void turn_left(int t) // 反時計回りに回転する動作を turn_left と設定
void turn_left(int t) // 反時計回りに回転する動作を turn_left と設定
{
OnFwd(OUT_C); // C出力のモータを正回転させる
OnRev(OUT_A); // A出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // AとC出力のモータをとめる
OnFwd(OUT_C); // C出力のモータを正回転させる
OnRev(OUT_A); // A出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // AとC出力のモータをとめる
}
void turn_right(int t) // 時計回りに回転する動作を turn_right と設定
void turn_right(int t) // 時計回りに回転する動作を turn_right と設定
{
OnFwd(OUT_A); // A出力のモータを正回転させる
OnRev(OUT_C); // C出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // AとC出力のモータをとめる
OnFwd(OUT_A); // A出力のモータを正回転させる
OnRev(OUT_C); // C出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // AとC出力のモータをとめる
}
void pen_sage(int t) //ペンを下げる動作を pen_sage と設定
void pen_sage(int t) // ペンを下げる動作を pen_sage と設定
{
OnFwd(OUT_B); //B出力のモータを正回転させる
Wait(t); //t秒間実行
Off(OUT_B); //B出力のモータをとめる
OnFwd(OUT_B); // B出力のモータを正回転させる
Wait(t); // t秒間実行
Off(OUT_B); // B出力のモータをとめる
}
void pen_age(int t) //ペンを上げる動作を pen_age と設定
void pen_age(int t) // ペンを上げる動作を pen_age と設定
{
OnRev(OUT_B); //B出力のモータを負回転させる
Wait(t); //t秒間実行
Off(OUT_B); //B出力のモータをとめる
OnRev(OUT_B); // B出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_B); // B出力のモータをとめる
}
↓上記で定義した関数を用いてロボットの動きを作る。
task main()
{
pen_sage(150); //ペンを下げる。
go(140); //まずは向かって右側の輪郭の線から書き始める。
pen_sage(150); // ペンを下げる。
go(140); // まずは向かって右側の輪郭の線から書き始める。
go_right(180); //あごの部分を書く。すこし丸く。
go_right(180); // あごの部分を書く。すこし丸く。
pen_age(200);
go_right(310);
back_left(170);
back(120); //ペンを上げて向きを変える。
back(120); // ペンを上げて向きを変える。
pen_sage(150); //ペンを下げる。
go(210); //まっすぐ進む。向かって左側の輪郭を書く。
pen_sage(150); // ペンを下げる。
go(210); // まっすぐ進む。向かって左側の輪郭を書く。
go_right(270);
pen_age(200);
go_right(250);
back_left(300);
back(70);
pen_sage(150);
go(50);
pen_age(200);
go(150);
back_left(380);
back(50);
pen_sage(150);
go(120); //頭&髪を書く。
go(120); // 頭&髪を書く。
pen_age(200);
go(200);
turn_left(160);
go(100);
turn_left(160); //目をかくために方向を変えて移動。
turn_left(160); // 目をかくために方向を変えて移動。
pen_sage(150);
go(30);
pen_age(200);
go(25);
pen_sage(150);
go(30); //目を書く。
go(30); // 目を書く。
}
**その2(コリンの似顔絵) [#u74c7137]
/* nigaoe2*/
void go(int t)
void go(int t) // 前に進む動作を go と設定
{
OnFwd(OUT_A+OUT_C);
Wait(t);
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C); // A出力とC出力のモータを正回転させる
Wait(t); // t 秒間実行
Off(OUT_A+OUT_C); // A出力とC出力のモータを止める
}
void back(int t)
void back(int t) // 後ろに下がる動作を back と設定
{
OnRev(OUT_A+OUT_C);
Wait(t);
Off(OUT_A+OUT_C);
OnRev(OUT_A+OUT_C); // A出力とC出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // A出力とC出力のモータを止める
}
void go_right(int t)
void go_right(int t) //右に曲がる動作を go_right と設定
{
OnFwd(OUT_A);
Wait(t);
Off(OUT_A);
OnFwd(OUT_A); // A出力のモータを正回転させる
Wait(t); // t秒間実行
Off(OUT_A); // A出力のモータを止める
}
void back_left(int t)
void back_left(int t) // 左に下がる動作を back_left と設定
{
OnRev(OUT_C);
Wait(t);
Off(OUT_C);
OnRev(OUT_C); // C出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_C); // C出力のモータを止める
}
void turn_left(int t)
void turn_left(int t) // 反時計回りに回転する動作を turn_left と設定
{
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(t);
Off(OUT_A+OUT_C);
OnFwd(OUT_C); // C出力のモータを正回転させる
OnRev(OUT_A); // A出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // A出力とC出力のモータを止める
}
void turn_right(int t)
void turn_right(int t) // 時計回りに回転する動作を turn_right と設定
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(t);
Off(OUT_A+OUT_C);
OnFwd(OUT_A); // A出力のモータを正回転させる
OnRev(OUT_C); // C出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_A+OUT_C); // A出力とC出力のモータを止める
}
void pen_sage(int t)
void pen_sage(int t) // ペンを下げる動作を pen_sage と設定
{
OnFwd(OUT_B);
Wait(t);
Off(OUT_B);
OnFwd(OUT_B); // B出力のモータを正回転させる
Wait(t); // t秒間実行
Off(OUT_B); // B出力のモータを止める
}
void pen_age(int t)
void pen_age(int t) // ペンを上げる動作を pen_age と設定
{
OnRev(OUT_B);
Wait(t);
Off(OUT_B);
OnRev(OUT_B); // B出力のモータを負回転させる
Wait(t); // t秒間実行
Off(OUT_B); // B出力のモータをとめる
}
↓上記で定義した関数を用いてロボットの動きを作る。
task main()
{
pen_sage(150);
go(140);
go_right(180);
pen_age(200);
go_right(310);
back_left(170);
back(120);
pen_sage(150);
go(210);
go_right(270);
pen_age(200);
go_right(270);
back_left(150);
back(120);
pen_sage(150);
go(210);
turn_right(70);
pen_age(200);
turn_right(110);
pen_sage(150);
go(50);
pen_age(200);
turn_right(180);
pen_sage(150);
back(30);
}
**制作してみての感想 [#y9cee856]
電池の消耗が早く、プログラムを作って実行するたびに結果が違うので、微調整ができず、とても苦労しました。
<苦労した点>
二人で協力して作ったので、プログラムだけでなく信頼感も生まれた!!はず!!
電池の消耗が早く、プログラムを作って実行するたびに結果が違うので、微調整ができず、とても苦労しました。本当に大変でした。特に、輪郭や頭の部分で一度ペンを持ち上げてからロボットの向きを変えて同じところにペンを下げさせる作業は微調整なくしてはできない作業だったのでとても大変でした。
キャタピタラは小回りが利くと思いきやスムーズな動きができませんでした。
ロボットの動きを考慮してロボットに描かせる絵を考えることが難しかったです。
その2はその1をベースにして作る予定・・・。(まだ、その1が途中です。)
<工夫した点>
ロボットの片方のキャタピラを回転させて描く円を輪郭と頭に使ったこと。
ペンを着ける位置によって描く線がかわってしまうので、ペンをつける位置や角度に注意した。