2016a/Member/ayano/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*目次 [#od529227]
#contents
*課題3について [#b1f55a3c]
課題2で作成したコースを用いてタイムレースを行う。ルール等...
*ロボットについて [#ab8211c1]
**ロボット全体 [#f5a88054]
&ref(課題3全体.jpg);&ref(課題3裏面.jpg);&br;マイコンは1...
**2つの光センサー [#m6f328ef]
&ref(光センサー.jpg);&br;ライントレース用の底面の光センサ...
**アーム [#s1a7ea3c]
今回のロボットは2本のアームがついており、これで紙コップを...
*プログラムについて [#sfc6a3d2]
今回のプログラムは同じ班の黒河内君がほとんどを作成した。
**定義 [#c510a511]
***定数 [#a5321332]
#define CROSS_TIME 40
#define BALANCE_TIME 40
CROSS_TIME:交差点判別時間 黒部分がCROSS_TIMEより続いたら...
***マクロ [#l3618fb5]
#define roll_left OnRev(OUT_A); OnFwd(OUT_C); //左回転
#define turn_left OnFwd(OUT_C); Off(OUT_A); //左旋回
#define go OnFwd(OUT_A); OnFwd(OUT_C); //前進
#define turn_right OnFwd(OUT_A); Off(OUT_C); //右旋回
#define roll_right OnFwd(OUT_A); OnRev(OUT_C); //右回転
#define back OnRev(OUT_A); OnRev(OUT_C); Wait(100); Off(...
#define top OnRev(OUT_C); OnFwd(OUT_A); Wait(CROSS_TIME)...
#define left OnRev(OUT_A); OnFwd(OUT_C); Wait(20);//角度...
#define right OnRev(OUT_C); OnFwd(OUT_A); Wait(80); OnFw...
下3つは交差点認識後の動作である。
**ライントレース [#pfc2ad9c]
***光センサーの判別する値 [#v080246f]
白部分・・・・・光センサーの値:53以降&br;
弱白部分・・・光センサーの値:52以降〜53以下&br;
境界部分・・・光センサーの値:44以降〜52以下&br;
弱黒部分・・・光センサーの値:41以降〜44以下&br;
黒部分・・・・・光センサーの値:41未満
***タイマーについて [#z7ed8e6a]
FastTimer(0):交差点判別用のタイマー &br;
光センサーが黒部分の判定をしている時にカウントをして、0.4...
FastTimer(1):交差点誤判別防止用のタイマー&br;
小さなカーブを交差点として誤判別しないために指定秒数間交...
***ライントレース [#y81d1c1f]
今回はラインの左側をトレースした。
sub line_l(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //交差点判別用のタイマー初期化
ClearTimer(1); //交差点誤判別防止用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
if(SENSOR_2 > 53) //白部分 右回転
{
ClearTimer(0); //黒部分ではないので交差点...
roll_right;
}
else if(SENSOR_2 > 52) //弱白部分 右旋回
{
ClearTimer(0); //黒部分ではないので交差点...
turn_right;
}
else if(SENSOR_2 > 44) //境界部分 直進
{
ClearTimer(0); //黒部分ではないので交差点...
go;
}
else if(SENSOR_2 > 41) //弱黒部分 左旋回
{
ClearTimer(0); //黒部分ではないので交差点...
turn_left;
}
else{ //黒部分 左回転
roll_left;
}
if(FastTimer(0)>CROSS_TIME&&FastTimer(1)>l_time...
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
}
黒線上にいる時間をタイマーで計測し、一定時間(CROSS_TIME...
**紙コップを取る [#caf52fd2]
下図のようにアームを上げ下ろしすることで、紙コップを持ち...
&ref(紙コップを取る.jpg);&size(65){→};&ref(紙コップ.jpg);...
紙コップを取得する一連の動作のプログラムはこのようになっ...
sub cup(){
OnRev(OUT_B); //アームを下す
Wait(50);
Off(OUT_B);
OnFwd(OUT_AC); //前進
while(SENSOR_1<42); //光センサーが紙コップを認識す...
Off(OUT_AC); //停止
OnFwd(OUT_B); //アームを上げる
Wait(50);
Off(OUT_B);
}
**姿勢制御 [#f99c083f]
***タイマーについて [#r6b924f4]
FastTimer(0):姿勢判別用のタイマー&br;
光センサーが境界部分の判定をしている時にカウントをして、...
FastTimer(1):ライントレース時間判別用のタイマー
ライントレースをする時間を指定しなければ、姿勢がまっすぐ...
***姿勢制御の方法 [#z3366ea9]
姿勢制御のプログラムは交差点判別プログラムを応用している...
-左境界部分での姿勢制御
sub balance_l(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //姿勢判別用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
ClearTimer(1); //ライントレース時間判別用のタ...
while(FastTimer(1)<200&&ch==0) //FastTimer(1)が...
{
if(SENSOR_2 > 53) //白部分 右回転
{
ClearTimer(0); //境界部分ではないので...
roll_right;
}
else if(SENSOR_2 > 52) //弱白部分 右旋回
{
ClearTimer(0); //境界部分ではないので...
turn_right;
}
else if(SENSOR_2 > 44) //境界部分 直進
{
go;
}
else if(SENSOR_2 > 41) //弱黒部分 左旋回
{
ClearTimer(0); //境界部分ではないので...
turn_left;
}
else{ //黒部分 左回転
ClearTimer(0); //境界部分ではないので...
roll_left;
}
if(FastTimer(0)>BALANCE_TIME) //姿勢判別
{
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
if(ch==0)
{
back; //約2秒分の後退
back;
}
}
}
-右境界部分での姿勢制御
sub balance_r(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //姿勢判別用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
ClearTimer(1); //ライントレース時間判別用のタ...
while(FastTimer(1)<200&&ch==0)//FastTimer(1)が2...
{
if(SENSOR_2 > 53) //白部分 左回転
{
ClearTimer(0); //境界部分ではないので...
roll_left;
}
else if(SENSOR_2 > 52) //弱白部分 左旋回
{
ClearTimer(0); //境界部分ではないので...
turn_left;
}
else if(SENSOR_2 > 44) //境界部分 直進
{
go;
}
else if(SENSOR_2 > 41) //弱黒部分 右旋回
{
ClearTimer(0); //境界部分ではないので...
turn_right;
}
else{ //黒部分 右回転
ClearTimer(0); //境界部分ではないので...
roll_right;
}
if(FastTimer(0)>BALANCE_TIME) //姿勢判別
{
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
if(ch==0)
{
back; //約2秒分の後退
back;
}
}
}
境界部分が長く続いた時に機体がまっすぐであると判別するよ...
**CD点間の移動 [#me94609f]
***C地点からD地点への移動 [#vc4db929]
C地点の紙コップを取得後、左回転し右境界部分で姿勢制御を開...
***D地点からC地点への移動 [#s2afd46b]
D地点の紙コップを取得後、後退をし交差点を超えてから左回転...
-左回転プログラム
sub turn(){
OnFwd(OUT_C); //左回転
OnRev(OUT_A);
Wait(100); //黒部分から白部分に出るための時間(D地...
while(SENSOR_2>41); //白部分である場合は回転し続ける
Off(OUT_AC); //停止
}
光センサーで判別して回転するので、電池の消費による回転不...
*結果・反省 [#n83e8fba]
**基本点 [#p84b3a8d]
-1回目&br;
アーム先の光センサーの不具合によってうまく作動せずに紙コ...
-2回目&br;
4つの紙コップを積んで運ぶことができ、30点を獲得。
**技術点 [#f6974519]
技術点は1回目の評価が採用されるので、5.2点とあまり高くな...
**反省と感想 [#g7ce37bc]
今回の課題は今までと違って6人で作業をするので、短い時間で...
終了行:
*目次 [#od529227]
#contents
*課題3について [#b1f55a3c]
課題2で作成したコースを用いてタイムレースを行う。ルール等...
*ロボットについて [#ab8211c1]
**ロボット全体 [#f5a88054]
&ref(課題3全体.jpg);&ref(課題3裏面.jpg);&br;マイコンは1...
**2つの光センサー [#m6f328ef]
&ref(光センサー.jpg);&br;ライントレース用の底面の光センサ...
**アーム [#s1a7ea3c]
今回のロボットは2本のアームがついており、これで紙コップを...
*プログラムについて [#sfc6a3d2]
今回のプログラムは同じ班の黒河内君がほとんどを作成した。
**定義 [#c510a511]
***定数 [#a5321332]
#define CROSS_TIME 40
#define BALANCE_TIME 40
CROSS_TIME:交差点判別時間 黒部分がCROSS_TIMEより続いたら...
***マクロ [#l3618fb5]
#define roll_left OnRev(OUT_A); OnFwd(OUT_C); //左回転
#define turn_left OnFwd(OUT_C); Off(OUT_A); //左旋回
#define go OnFwd(OUT_A); OnFwd(OUT_C); //前進
#define turn_right OnFwd(OUT_A); Off(OUT_C); //右旋回
#define roll_right OnFwd(OUT_A); OnRev(OUT_C); //右回転
#define back OnRev(OUT_A); OnRev(OUT_C); Wait(100); Off(...
#define top OnRev(OUT_C); OnFwd(OUT_A); Wait(CROSS_TIME)...
#define left OnRev(OUT_A); OnFwd(OUT_C); Wait(20);//角度...
#define right OnRev(OUT_C); OnFwd(OUT_A); Wait(80); OnFw...
下3つは交差点認識後の動作である。
**ライントレース [#pfc2ad9c]
***光センサーの判別する値 [#v080246f]
白部分・・・・・光センサーの値:53以降&br;
弱白部分・・・光センサーの値:52以降〜53以下&br;
境界部分・・・光センサーの値:44以降〜52以下&br;
弱黒部分・・・光センサーの値:41以降〜44以下&br;
黒部分・・・・・光センサーの値:41未満
***タイマーについて [#z7ed8e6a]
FastTimer(0):交差点判別用のタイマー &br;
光センサーが黒部分の判定をしている時にカウントをして、0.4...
FastTimer(1):交差点誤判別防止用のタイマー&br;
小さなカーブを交差点として誤判別しないために指定秒数間交...
***ライントレース [#y81d1c1f]
今回はラインの左側をトレースした。
sub line_l(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //交差点判別用のタイマー初期化
ClearTimer(1); //交差点誤判別防止用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
if(SENSOR_2 > 53) //白部分 右回転
{
ClearTimer(0); //黒部分ではないので交差点...
roll_right;
}
else if(SENSOR_2 > 52) //弱白部分 右旋回
{
ClearTimer(0); //黒部分ではないので交差点...
turn_right;
}
else if(SENSOR_2 > 44) //境界部分 直進
{
ClearTimer(0); //黒部分ではないので交差点...
go;
}
else if(SENSOR_2 > 41) //弱黒部分 左旋回
{
ClearTimer(0); //黒部分ではないので交差点...
turn_left;
}
else{ //黒部分 左回転
roll_left;
}
if(FastTimer(0)>CROSS_TIME&&FastTimer(1)>l_time...
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
}
黒線上にいる時間をタイマーで計測し、一定時間(CROSS_TIME...
**紙コップを取る [#caf52fd2]
下図のようにアームを上げ下ろしすることで、紙コップを持ち...
&ref(紙コップを取る.jpg);&size(65){→};&ref(紙コップ.jpg);...
紙コップを取得する一連の動作のプログラムはこのようになっ...
sub cup(){
OnRev(OUT_B); //アームを下す
Wait(50);
Off(OUT_B);
OnFwd(OUT_AC); //前進
while(SENSOR_1<42); //光センサーが紙コップを認識す...
Off(OUT_AC); //停止
OnFwd(OUT_B); //アームを上げる
Wait(50);
Off(OUT_B);
}
**姿勢制御 [#f99c083f]
***タイマーについて [#r6b924f4]
FastTimer(0):姿勢判別用のタイマー&br;
光センサーが境界部分の判定をしている時にカウントをして、...
FastTimer(1):ライントレース時間判別用のタイマー
ライントレースをする時間を指定しなければ、姿勢がまっすぐ...
***姿勢制御の方法 [#z3366ea9]
姿勢制御のプログラムは交差点判別プログラムを応用している...
-左境界部分での姿勢制御
sub balance_l(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //姿勢判別用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
ClearTimer(1); //ライントレース時間判別用のタ...
while(FastTimer(1)<200&&ch==0) //FastTimer(1)が...
{
if(SENSOR_2 > 53) //白部分 右回転
{
ClearTimer(0); //境界部分ではないので...
roll_right;
}
else if(SENSOR_2 > 52) //弱白部分 右旋回
{
ClearTimer(0); //境界部分ではないので...
turn_right;
}
else if(SENSOR_2 > 44) //境界部分 直進
{
go;
}
else if(SENSOR_2 > 41) //弱黒部分 左旋回
{
ClearTimer(0); //境界部分ではないので...
turn_left;
}
else{ //黒部分 左回転
ClearTimer(0); //境界部分ではないので...
roll_left;
}
if(FastTimer(0)>BALANCE_TIME) //姿勢判別
{
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
if(ch==0)
{
back; //約2秒分の後退
back;
}
}
}
-右境界部分での姿勢制御
sub balance_r(){
int ch=0; //ループ脱出用変数
ClearTimer(0); //姿勢判別用のタイマー初期化
while(ch==0) //chが0の時はループを続ける
{
ClearTimer(1); //ライントレース時間判別用のタ...
while(FastTimer(1)<200&&ch==0)//FastTimer(1)が2...
{
if(SENSOR_2 > 53) //白部分 左回転
{
ClearTimer(0); //境界部分ではないので...
roll_left;
}
else if(SENSOR_2 > 52) //弱白部分 左旋回
{
ClearTimer(0); //境界部分ではないので...
turn_left;
}
else if(SENSOR_2 > 44) //境界部分 直進
{
go;
}
else if(SENSOR_2 > 41) //弱黒部分 右旋回
{
ClearTimer(0); //境界部分ではないので...
turn_right;
}
else{ //黒部分 右回転
ClearTimer(0); //境界部分ではないので...
roll_right;
}
if(FastTimer(0)>BALANCE_TIME) //姿勢判別
{
Off(OUT_AC); //車輪を止める
PlaySound(SOUND_UP); //音を鳴らす
Wait(100); //1秒待つ
ch=1; //ループ脱出の為にchを1にする
}
Wait(1); //0.01秒待つ
}
if(ch==0)
{
back; //約2秒分の後退
back;
}
}
}
境界部分が長く続いた時に機体がまっすぐであると判別するよ...
**CD点間の移動 [#me94609f]
***C地点からD地点への移動 [#vc4db929]
C地点の紙コップを取得後、左回転し右境界部分で姿勢制御を開...
***D地点からC地点への移動 [#s2afd46b]
D地点の紙コップを取得後、後退をし交差点を超えてから左回転...
-左回転プログラム
sub turn(){
OnFwd(OUT_C); //左回転
OnRev(OUT_A);
Wait(100); //黒部分から白部分に出るための時間(D地...
while(SENSOR_2>41); //白部分である場合は回転し続ける
Off(OUT_AC); //停止
}
光センサーで判別して回転するので、電池の消費による回転不...
*結果・反省 [#n83e8fba]
**基本点 [#p84b3a8d]
-1回目&br;
アーム先の光センサーの不具合によってうまく作動せずに紙コ...
-2回目&br;
4つの紙コップを積んで運ぶことができ、30点を獲得。
**技術点 [#f6974519]
技術点は1回目の評価が採用されるので、5.2点とあまり高くな...
**反省と感想 [#g7ce37bc]
今回の課題は今までと違って6人で作業をするので、短い時間で...
ページ名: