- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
*今回の課題について [#x6d93ae7]
-マクロや関数、サブルーチンなどを使い、main関数がなるべく単純になるようにプログラムを作ること。
-定数名やマクロなどは分かりやすい名前を用いること
-余裕をもってA4の紙の中に収まる大きさにすること。いくら小さくてもよい。
-ペン以外はキットの部品を使うこと
-輪ゴムは切れやすく高価なので慎重に扱い、張力がかかりすぎないようにすること。
([[課題1:http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission1]]より)
*ロボット本体について [#mb53aecd]
*プログラムについて [#kb7c8c9e]
今回は下図のような絵を書くようにプログラミングした。(始点は左上の点)
**プログラムの定義 [#o4782149]
#define tyokkaku 111
ロボット本体を直角に旋回させるために定義した数値だが、床の滑り具合や電池の残量によって変化したので毎回数値を変える必要があった。
#define kaiten1(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC);
ロボット本体を時計回りに直角に回転させる。
#define kaiten2(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_AC);
ロボット本体を反時計回りに直角に回転させる。
#define zensin(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);
ロボット本体をt秒間前進させる。
#define pen_up OnRev(OUT_B);Wait(20);Off(OUT_B);
ペンを上げる。
#define pen_down OnFwd(OUT_B);Wait(20);Off(OUT_B);
ペンを下げる。
#define soroeru(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);
ロボット本体を旋回させた後ペン先の始点と終点を揃えるために定義した。
#define write(t) pen_down;zensin(t);pen_up;
t秒間線を書く動作を定義した。
#define magarisusumu1(t) kaiten1(tyokkaku);soroeru(58);write(t);
ロボット本体を直角に旋回させてt秒間線を書く動作を定義した。
**プログラム [#qf5a20da]
task main()
{
write(81);//頭のてっぺん
zensin(52);
kaiten1(75);
soroeru(59);
write(42);//髪の毛右斜め上
zensin(62);
kaiten1(40);
soroeru(60);
write(132);//髪の毛右側
zensin(63);
magarisusumu1(20);
zensin(62);
magarisusumu1(117);
zensin(61);
kaiten2(67);//前髪の角度
soroeru(70);
write(47);//前髪右側を書く
zensin(62);
kaiten2(70);//前髪の角度
soroeru(65);
write(37);//前髪左側を書く
zensin(62);
kaiten2(47);
soroeru(70);
write(117);
zensin(62);
magarisusumu1(20);
zensin(62);
magarisusumu1(130);//髪の毛左側
zensin(62);
kaiten1(65);
soroeru(63);
write(39);//髪の毛完成
ここまでで髪の毛の部分を書き上げる。髪の毛右側とか左側というのは髪パーツの一番外側のタテ線のことである。
zensin(77);
kaiten1(160);
zensin(148);//本来の輪郭よりちょっと長めに
kaiten2(tyokkaku);
soroeru(65);
write(65);//輪郭を書く
輪郭を書く。一本線だが始点と終点が髪の毛の部分と合わないと顔のパーツもずれていくので細かく調整した。
kaiten2(100);
zensin(20);//口の高さまで
kaiten2(100);
soroeru(100);//口の端まで
write(36);//口を書く
口を書く。顔の中心に書けるように時間を調整した。
kaiten1(tyokkaku);
soroeru(30);
write(20);//左目を書く
soroeru(20);
kaiten2(tyokkaku);
zensin(40);//中心が右目になるように仮の数字
kaiten1(tyokkaku);
write(20);//右目を書く
}
目を書いて完成。
*反省 [#y110fd27]
-プログラムが汚い&br;
プログラミングにとりかかるのが遅れてしまい、何度も同じ命令をしているので行数が多く終わってからもっと綺麗にまとめられるのに気づいた。次にプログラミングするときは余裕を持ち、スマートにできるようにしたい。
-ロボット本体のアクシデント&br;
ある時から、ロボットが前進する際にまっすぐ進まず軽く曲がってしまうようになった。また、前述したように床との相性や電池残量による回転する速度の変化もあった。私のプログラムは長時間前進したり細かく回転する命令が多く、これらのアクシデントの影響を大きく受けた。素早く対処できるようなプログラミングを心がけたい。