2017a/Member/ryoga/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017a/Member]]
目次
#contents
*1,課題について [#l925a7ee]
**課題2 概要 [#i0138537]
黒い線に沿って動くロボットの作成。詳しくは[[課題2>2017a/M...
**走行コース [#lbc49625]
今回の課題ではコースが二種類あり、パートナーとは別のコー...
*2,本体について [#i2f6deac]
本体制作では、過去の先輩のものを参考に三輪車タイプなどを...
&ref(./kadai2zenntai.jpg,80%,ロボ全体); &ref(./kadai2ura....
*3,プログラムについて [#o3a9b4c4]
今回のプログラムは演算子についての理解が不十分だったため...
**マクロ [#n4d4e06f]
メインタスクで使われるものをあらかじめ定義した。
#define ikiti 42 //閾値
#define distinction 28 //交差判別のための時間
#define nasi PlaySound (SOUND_UP); ...
#define ari PlaySound (SOUND_DOWN); Off(OUT_AC); until(F...
#define susumu OnFwd(OUT_AC); ...
#define susumu_a OnFwd(OUT_AC); ClearTimer(0); ...
#define susumu_b(t) OnFwd(OUT_AC); until(FastTimer(0) >=...
#define sennkai_right OnFwd(OUT_A); OnRev(OUT_C); ...
#define sennkai_right_a OnFwd(OUT_A); OnRev(OUT_C); Clea...
#define sennkai_right_b(t) OnFwd(OUT_A); OnRev(OUT_C); u...
#define turn_right OnFwd(OUT_A); Off(OUT_C); ...
#define turn_right_a OnFwd(OUT_A); Off(OUT_C); ClearTime...
#define turn_right_b(t) OnFwd(OUT_A); Off(OUT_C); until(...
#define sennkai_left OnFwd(OUT_C); OnRev(OUT_A); ...
#define sennkai_left_a OnFwd(OUT_C); OnRev(OUT_A); Clear...
#define sennkai_left_b(t) OnFwd(OUT_C); OnRev(OUT_A); un...
#define turn_left OnFwd(OUT_C); Off(OUT_A); ...
#define turn_left_a OnFwd(OUT_C); Off(OUT_A); ClearTimer...
#define turn_left_b(t) OnFwd(OUT_C); Off(OUT_A); until(F...
**メインタスク [#l20ad699]
task main()
{
int n=0; //何回目の交差点か判別
SetSensor (SENSOR_2, SENSOR_LIGHT);
SetPower(OUT_AC,2); //トレースできる速度に調整
while (n<=15){ //15回目でプログラムが終了
if (n==0||n==1||n==5||n==10||n==13){
susumu;
} else if (n==2||n==4||n==11){
turn_left;
} else if (n==3||n==7||n==12||n==14){
turn_right;
} else if (n==6){
sennkai_left;
}
until(SENSOR_2 > ikiti+6); //端を見つけるまで回...
ClearTimer (0); //交差点判別に用いるタイマー
if (n==7){ //急カーブゾーン前半で線を横断するタ...
ClearTimer(1);
}
else if (n==8) { //急カーブゾーン後半で線を横断す...
ClearTimer(2); susumu; until(SENSOR_2 > ik...
}
else if (n==9){ //急カーブゾーンでの補正
susumu; until(SENSOR_2 > ikiti+6);//完全に...
}
while (FastTimer(0) <= distinction) {//交差点判別の...
if (SENSOR_2 > ikiti+8) { //白
if (n==0||n==5||n==6||n==9||n==13||n==14) {//...
sennkai_left_a;
} else if (n==7&&FastTimer(1) <= 580) {
sennkai_left_a;
} else if (n==8&&FastTimer(2) > 850) {
sennkai_left_a;
} else if ( n==1||n==2||n==3||n==4||n==10||n=...
sennkai_right_a;
} else if (n==7&&FastTimer(1) > 600 ){
sennkai_right_a;
} else if (n==8&&FastTimer(2) <= 830){
sennkai_right_a;
}
} else if (SENSOR_2 > ikiti+5) { //少し白
if (n==0||n==5||n==6||n==9||n==13||n==14) {//...
turn_left_a;
} else if (n==7&&FastTimer(1) <= 580 ) {
turn_left_a;
} else if (n==8&&FastTimer(2) > 850) {
turn_left_a;
} else if ( n==1||n==2||n==3||n==4||n==10||n=...
turn_right_a;
} else if (n==7&&FastTimer(1) > 600 ){
turn_right_a;
} else if (n==8&&FastTimer(2) <= 830) {
turn_right_a;
}
} else if (SENSOR_2 > ikiti) { //中間
susumu_a;
} else if (SENSOR_2 > ikiti-3) { //少し黒
if (n==0||n==5||n==6||n==9||n==13||n==14) {//...
turn_right_a;
} else if (n==7&&FastTimer(1) <= 580 ) {
turn_right_a;
} else if (n==8&&FastTimer(2) > 850) {
turn_right_a;
} else if ( n==1||n==2||n==3||n==4||n==10||n=...
turn_left_a;
} else if (n==7&&FastTimer(1) > 600 ){
turn_left_a;
} else if (n==8&&FastTimer(2) <= 830) {
turn_left_a;
}
} else { //黒
if (n==0||n==5||n==6||n==9||n==13||n==14) {//...
sennkai_right;
} else if (n==7&&FastTimer(1) <= 580 ) {
sennkai_right;
} else if (n==8&&FastTimer(2) > 850) {
sennkai_right;
} else if ( n==1||n==2||n==3||n==4||n==10||n=...
sennkai_left;
} else if (n==7&&FastTimer(1) > 600 ) {
sennkai_left;
} else if (n==8&&FastTimer(2) <= 830) {
sennkai_left;
}
}
Wait(1);
if (n==7&&FastTimer(1) > 580){ //線を横断する(タ...
turn_left; until(FastTimer(1)>= 600);...
}else if (n==8&&FastTimer(2) > 830){//線を横断する...
turn_right; until(FastTimer(2) >= 850...
}
}
n++;//交差点のカウント
if (n==1||n==3||n==4||n==7||n==10||n==12||n==13||n==...
nasi; //停止なし
if (n==3||n==12){ //ロボの向きを整...
turn_right_b(60);
} else if (n==4) {
turn_left_b(70);sennkai_right_b(90);
} else if (n==7||n==13||n==14){
turn_right_b(90);sennkai_left_b(100);
} else if (n==1||n==10){
susumu_b(60);
}
} else if (n==2||n==5||n==6||n==11||n==15){
ari; //停止あり
if (n==2){ //ロボの向きを整え...
sennkai_left_b(145);
} else if (n==5){
turn_right_b(245);
} else if (n==6){
susumu_b(145);
} else if (n==15){
Off(OUT_AC); //停止する
}
}
}
}
*説明 [#d0428d60]
#ref(./ライントレース図.jpg,80%,ライントレースの図)
**ライントレースについて [#bbeee5cf]
センサの読み取る値を白、少し白、中間、少し黒、黒の5段階...
**交差点判別について [#ea77c374]
変数nで何番目の交差点なのかを認識させている。nの値と場所...
**急カーブについて [#rd58a7c0]
今回最大の難関は連続の急カーブ地点であったと思う。ここを...
*4,遭遇した問題と解決策 [#b284beea]
タイマーとwaitを同時に用いると制御が難しくなるということ...
*5,まとめ [#dd20913c]
**反省点 [#n49fc7f9]
正確性がやや怪しかった。原因としては書いた線が薄かったこ...
**感想 [#l9ad0ae2]
勉強した上でプログラムの製作に取りかったが、うまくいかな...
終了行:
[[2017a/Member]]
目次
#contents
*1,課題について [#l925a7ee]
**課題2 概要 [#i0138537]
黒い線に沿って動くロボットの作成。詳しくは[[課題2>2017a/M...
**走行コース [#lbc49625]
今回の課題ではコースが二種類あり、パートナーとは別のコー...
*2,本体について [#i2f6deac]
本体制作では、過去の先輩のものを参考に三輪車タイプなどを...
&ref(./kadai2zenntai.jpg,80%,ロボ全体); &ref(./kadai2ura....
*3,プログラムについて [#o3a9b4c4]
今回のプログラムは演算子についての理解が不十分だったため...
**マクロ [#n4d4e06f]
メインタスクで使われるものをあらかじめ定義した。
#define ikiti 42 //閾値
#define distinction 28 //交差判別のための時間
#define nasi PlaySound (SOUND_UP); ...
#define ari PlaySound (SOUND_DOWN); Off(OUT_AC); until(F...
#define susumu OnFwd(OUT_AC); ...
#define susumu_a OnFwd(OUT_AC); ClearTimer(0); ...
#define susumu_b(t) OnFwd(OUT_AC); until(FastTimer(0) >=...
#define sennkai_right OnFwd(OUT_A); OnRev(OUT_C); ...
#define sennkai_right_a OnFwd(OUT_A); OnRev(OUT_C); Clea...
#define sennkai_right_b(t) OnFwd(OUT_A); OnRev(OUT_C); u...
#define turn_right OnFwd(OUT_A); Off(OUT_C); ...
#define turn_right_a OnFwd(OUT_A); Off(OUT_C); ClearTime...
#define turn_right_b(t) OnFwd(OUT_A); Off(OUT_C); until(...
#define sennkai_left OnFwd(OUT_C); OnRev(OUT_A); ...
#define sennkai_left_a OnFwd(OUT_C); OnRev(OUT_A); Clear...
#define sennkai_left_b(t) OnFwd(OUT_C); OnRev(OUT_A); un...
#define turn_left OnFwd(OUT_C); Off(OUT_A); ...
#define turn_left_a OnFwd(OUT_C); Off(OUT_A); ClearTimer...
#define turn_left_b(t) OnFwd(OUT_C); Off(OUT_A); until(F...
**メインタスク [#l20ad699]
task main()
{
int n=0; //何回目の交差点か判別
SetSensor (SENSOR_2, SENSOR_LIGHT);
SetPower(OUT_AC,2); //トレースできる速度に調整
while (n<=15){ //15回目でプログラムが終了
if (n==0||n==1||n==5||n==10||n==13){
susumu;
} else if (n==2||n==4||n==11){
turn_left;
} else if (n==3||n==7||n==12||n==14){
turn_right;
} else if (n==6){
sennkai_left;
}
until(SENSOR_2 > ikiti+6); //端を見つけるまで回...
ClearTimer (0); //交差点判別に用いるタイマー
if (n==7){ //急カーブゾーン前半で線を横断するタ...
ClearTimer(1);
}
else if (n==8) { //急カーブゾーン後半で線を横断す...
ClearTimer(2); susumu; until(SENSOR_2 > ik...
}
else if (n==9){ //急カーブゾーンでの補正
susumu; until(SENSOR_2 > ikiti+6);//完全に...
}
while (FastTimer(0) <= distinction) {//交差点判別の...
if (SENSOR_2 > ikiti+8) { //白
if (n==0||n==5||n==6||n==9||n==13||n==14) {//...
sennkai_left_a;
} else if (n==7&&FastTimer(1) <= 580) {
sennkai_left_a;
} else if (n==8&&FastTimer(2) > 850) {
sennkai_left_a;
} else if ( n==1||n==2||n==3||n==4||n==10||n=...
sennkai_right_a;
} else if (n==7&&FastTimer(1) > 600 ){
sennkai_right_a;
} else if (n==8&&FastTimer(2) <= 830){
sennkai_right_a;
}
} else if (SENSOR_2 > ikiti+5) { //少し白
if (n==0||n==5||n==6||n==9||n==13||n==14) {//...
turn_left_a;
} else if (n==7&&FastTimer(1) <= 580 ) {
turn_left_a;
} else if (n==8&&FastTimer(2) > 850) {
turn_left_a;
} else if ( n==1||n==2||n==3||n==4||n==10||n=...
turn_right_a;
} else if (n==7&&FastTimer(1) > 600 ){
turn_right_a;
} else if (n==8&&FastTimer(2) <= 830) {
turn_right_a;
}
} else if (SENSOR_2 > ikiti) { //中間
susumu_a;
} else if (SENSOR_2 > ikiti-3) { //少し黒
if (n==0||n==5||n==6||n==9||n==13||n==14) {//...
turn_right_a;
} else if (n==7&&FastTimer(1) <= 580 ) {
turn_right_a;
} else if (n==8&&FastTimer(2) > 850) {
turn_right_a;
} else if ( n==1||n==2||n==3||n==4||n==10||n=...
turn_left_a;
} else if (n==7&&FastTimer(1) > 600 ){
turn_left_a;
} else if (n==8&&FastTimer(2) <= 830) {
turn_left_a;
}
} else { //黒
if (n==0||n==5||n==6||n==9||n==13||n==14) {//...
sennkai_right;
} else if (n==7&&FastTimer(1) <= 580 ) {
sennkai_right;
} else if (n==8&&FastTimer(2) > 850) {
sennkai_right;
} else if ( n==1||n==2||n==3||n==4||n==10||n=...
sennkai_left;
} else if (n==7&&FastTimer(1) > 600 ) {
sennkai_left;
} else if (n==8&&FastTimer(2) <= 830) {
sennkai_left;
}
}
Wait(1);
if (n==7&&FastTimer(1) > 580){ //線を横断する(タ...
turn_left; until(FastTimer(1)>= 600);...
}else if (n==8&&FastTimer(2) > 830){//線を横断する...
turn_right; until(FastTimer(2) >= 850...
}
}
n++;//交差点のカウント
if (n==1||n==3||n==4||n==7||n==10||n==12||n==13||n==...
nasi; //停止なし
if (n==3||n==12){ //ロボの向きを整...
turn_right_b(60);
} else if (n==4) {
turn_left_b(70);sennkai_right_b(90);
} else if (n==7||n==13||n==14){
turn_right_b(90);sennkai_left_b(100);
} else if (n==1||n==10){
susumu_b(60);
}
} else if (n==2||n==5||n==6||n==11||n==15){
ari; //停止あり
if (n==2){ //ロボの向きを整え...
sennkai_left_b(145);
} else if (n==5){
turn_right_b(245);
} else if (n==6){
susumu_b(145);
} else if (n==15){
Off(OUT_AC); //停止する
}
}
}
}
*説明 [#d0428d60]
#ref(./ライントレース図.jpg,80%,ライントレースの図)
**ライントレースについて [#bbeee5cf]
センサの読み取る値を白、少し白、中間、少し黒、黒の5段階...
**交差点判別について [#ea77c374]
変数nで何番目の交差点なのかを認識させている。nの値と場所...
**急カーブについて [#rd58a7c0]
今回最大の難関は連続の急カーブ地点であったと思う。ここを...
*4,遭遇した問題と解決策 [#b284beea]
タイマーとwaitを同時に用いると制御が難しくなるということ...
*5,まとめ [#dd20913c]
**反省点 [#n49fc7f9]
正確性がやや怪しかった。原因としては書いた線が薄かったこ...
**感想 [#l9ad0ae2]
勉強した上でプログラムの製作に取りかったが、うまくいかな...
ページ名: