2012a/A5/Liwon7/M2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題1 ライントレースロボット [#s707245a]
**ルール・設定条件など [#p2be9e68]
図の黒い線をなぞって周回するロボットを製作する
主な条件
・交差点が2箇所以上必要
・急なヘアピンカーブが1箇所以上必要
・直角カーブが1箇所以上必要
・黒い線の幅は15〜20mm程度であること
#ref(2012a/A5/Liwon7/M2/ライントレース コース.png,コース...
**ロボット本体 [#eeb70493]
ここでは自分たちの作成したロボットについて紹介していきま...
#ref(2012a/A5/Liwon7/M2/ライントレース ロボット 本体.pn...
ロボットのコンピュータ部分を取り除いた全体図です。
なるべくシンプルな構造を目指しました。
更に、重心がなるべく低い位置にくるように高さを調整しまし...
**ライントレースの仕組み [#n2e8f1db]
では、まずロボットがどのようにライントレースするのかにつ...
次の図を見てください。
#ref(2012a/A5/Liwon7/M2/ロボットの視点.png,ロボットの視点)
黒い線を見たとき、皆さんは左側のように見えるはずです。で...
ロボットが黒い線をどのように認識しているかは分かったかと...
#ref(2012a/A5/Liwon7/M2/ライントレース 仕組み.png,ライン...
図のように閾値が白の値になると右に旋回し、黒の値になると...
**滑らかに動かすための工夫 [#o3a24026]
今回は、ロボットを滑らかに動かすために黒と白の二種類の閾...
#ref(2012a/A5/Liwon7/M2/閾値説明.png,閾値について)
実際は中間は灰色ではないのですが、図の中ではわかりやすい...
#ref(2012a/A5/Liwon7/M2/出力説明.png,出力について)
**難所解決の方法 [#l830a62a]
コースの難所とその解決方法を紹介します
#ref(2012a/A5/Liwon7/M2/難所.png,難所)
難所は赤丸と青丸でそれぞれ囲まれている場所です。解決法が...
では、まず赤丸のほうから説明します。赤丸で囲んだ部分は直...
次の図を見てください。
#ref(2012a/A5/Liwon7/M2/直角カーブ.png,直角カーブ&急カー...
先ほど説明した滑らかに動かす方法を使った場合が図の左です...
次に青丸の部分ですが、交差点に差し掛かるとコースを間違え...
**定義 [#h801fcbe]
今回のライントレースの要ともいえる閾値の定義など、ここで...
#define Black 27 //黒の閾値1
#define White 57 //白の閾値1
#define Black2 35 //黒の閾値2
#define White2 49 //白の閾値2
#define gray 42 //中間の閾値
#define P_gain 0.38 //定数p
#define D_gain 0.040 //定数d
#define speed 32 //走行時の基本速度
**プログラム [#e53691ff]
中間の閾値から離れるほどモーターの出力を上げるプログラム...
while( CurrentTick()-t0 <= 6500 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
上のプログラムが今回のライントレースの中核となる中間の閾...
以下がライントレースの本プログラムです。
task main()
{
SetSensorLight(IN_4);
SetSensorTouch(IN_2);
int light,light0;
float turn;
long t0;
t0=CurrentTick();
OnFwd(OUT_A,60);
Wait(500);
while( CurrentTick()-t0 <= 6500 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
OnFwd(OUT_AC,speed);
Wait(500);
while( CurrentTick()-t0 <= 21000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White2-Black2)+D_ga...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
while( CurrentTick()-t0 <= 26000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White3-Black3)+D_ga...
OnFwd(OUT_C,15-turn);
OnFwd(OUT_A,15+turn);
}
while( CurrentTick()-t0 <= 26500 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
OnFwd(OUT_AC,speed);
Wait(1500);
while( CurrentTick()-t0 <= 33100 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White2-Black2)+D_ga...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
OnFwd(OUT_AC,speed);
Wait(500);
while( CurrentTick()-t0 <= 37000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
while( CurrentTick()-t0 <= 42000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White2-Black2)+D_ga...
OnFwd(OUT_C,15-turn);
OnFwd(OUT_A,15+turn);
}
while( CurrentTick()-t0 <= 44000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
}
**結果 [#l07b94f7]
結果ですが、難所を解決するためのプログラムをタイマーを使...
**感想 [#raa8a8ba]
最初ライントレースの仕組みを説明してもらったとき理解でき...
これからの課題としては、先ほどの結果の項でも話しましたが...
終了行:
目次
#contents
*課題1 ライントレースロボット [#s707245a]
**ルール・設定条件など [#p2be9e68]
図の黒い線をなぞって周回するロボットを製作する
主な条件
・交差点が2箇所以上必要
・急なヘアピンカーブが1箇所以上必要
・直角カーブが1箇所以上必要
・黒い線の幅は15〜20mm程度であること
#ref(2012a/A5/Liwon7/M2/ライントレース コース.png,コース...
**ロボット本体 [#eeb70493]
ここでは自分たちの作成したロボットについて紹介していきま...
#ref(2012a/A5/Liwon7/M2/ライントレース ロボット 本体.pn...
ロボットのコンピュータ部分を取り除いた全体図です。
なるべくシンプルな構造を目指しました。
更に、重心がなるべく低い位置にくるように高さを調整しまし...
**ライントレースの仕組み [#n2e8f1db]
では、まずロボットがどのようにライントレースするのかにつ...
次の図を見てください。
#ref(2012a/A5/Liwon7/M2/ロボットの視点.png,ロボットの視点)
黒い線を見たとき、皆さんは左側のように見えるはずです。で...
ロボットが黒い線をどのように認識しているかは分かったかと...
#ref(2012a/A5/Liwon7/M2/ライントレース 仕組み.png,ライン...
図のように閾値が白の値になると右に旋回し、黒の値になると...
**滑らかに動かすための工夫 [#o3a24026]
今回は、ロボットを滑らかに動かすために黒と白の二種類の閾...
#ref(2012a/A5/Liwon7/M2/閾値説明.png,閾値について)
実際は中間は灰色ではないのですが、図の中ではわかりやすい...
#ref(2012a/A5/Liwon7/M2/出力説明.png,出力について)
**難所解決の方法 [#l830a62a]
コースの難所とその解決方法を紹介します
#ref(2012a/A5/Liwon7/M2/難所.png,難所)
難所は赤丸と青丸でそれぞれ囲まれている場所です。解決法が...
では、まず赤丸のほうから説明します。赤丸で囲んだ部分は直...
次の図を見てください。
#ref(2012a/A5/Liwon7/M2/直角カーブ.png,直角カーブ&急カー...
先ほど説明した滑らかに動かす方法を使った場合が図の左です...
次に青丸の部分ですが、交差点に差し掛かるとコースを間違え...
**定義 [#h801fcbe]
今回のライントレースの要ともいえる閾値の定義など、ここで...
#define Black 27 //黒の閾値1
#define White 57 //白の閾値1
#define Black2 35 //黒の閾値2
#define White2 49 //白の閾値2
#define gray 42 //中間の閾値
#define P_gain 0.38 //定数p
#define D_gain 0.040 //定数d
#define speed 32 //走行時の基本速度
**プログラム [#e53691ff]
中間の閾値から離れるほどモーターの出力を上げるプログラム...
while( CurrentTick()-t0 <= 6500 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
上のプログラムが今回のライントレースの中核となる中間の閾...
以下がライントレースの本プログラムです。
task main()
{
SetSensorLight(IN_4);
SetSensorTouch(IN_2);
int light,light0;
float turn;
long t0;
t0=CurrentTick();
OnFwd(OUT_A,60);
Wait(500);
while( CurrentTick()-t0 <= 6500 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
OnFwd(OUT_AC,speed);
Wait(500);
while( CurrentTick()-t0 <= 21000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White2-Black2)+D_ga...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
while( CurrentTick()-t0 <= 26000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White3-Black3)+D_ga...
OnFwd(OUT_C,15-turn);
OnFwd(OUT_A,15+turn);
}
while( CurrentTick()-t0 <= 26500 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
OnFwd(OUT_AC,speed);
Wait(1500);
while( CurrentTick()-t0 <= 33100 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White2-Black2)+D_ga...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
OnFwd(OUT_AC,speed);
Wait(500);
while( CurrentTick()-t0 <= 37000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
while( CurrentTick()-t0 <= 42000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White2-Black2)+D_ga...
OnFwd(OUT_C,15-turn);
OnFwd(OUT_A,15+turn);
}
while( CurrentTick()-t0 <= 44000 ){
light0=light;
light=Sensor(IN_4);
NumOut(30,40,Sensor(IN_4),0);
turn=P_gain*(light-gray)*100/(White-Black)+D_gain...
OnFwd(OUT_C,speed-turn);
OnFwd(OUT_A,speed+turn);
}
}
**結果 [#l07b94f7]
結果ですが、難所を解決するためのプログラムをタイマーを使...
**感想 [#raa8a8ba]
最初ライントレースの仕組みを説明してもらったとき理解でき...
これからの課題としては、先ほどの結果の項でも話しましたが...
ページ名: