2019b/Member/minami/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*課題2 [#j9c6ac10]
#ref(./S__17530895.jpg,600x400,コース);
1. A地点から出発~
2. B~
3. C (直進)~
4. D (一時停止の後、直進)~
5. E, F 通過~
6. G (一時停止の後、左折)~
7. H (一時停止の後、左折)~
8. I (ボール or キューボイドをつかんでUターン)~
9. H(直進)~
10.J (一時停止)~
11.A地点に入る(ゴール)~
*ロボットの説明 [#o297fb89]
基本形は説明書と同じで、センサとアームを考えて付け加えた。
**センサ [#n93287a7]
#ref(./S__17530898.jpg,500x300,センサー);
光センサーはできるだけ地面に近づけ、周りの環境の影響を受...
~
超音波センサーは上から地面の方向につけた。~
初めは、前向きにつけていたがそれだと上手くボールを見つけ...
**アーム [#cf3930d2]
#ref(./S__17629191.jpg,500x300,コース);
スタート時はアームを上にしてボールが近くに来たら下がる仕...
見た目よりも、確実性を増すために大きな囲いにした。
*プログラミングの説明 [#nab36970]
**閾値と進行方向の設定 [#a65a5ec6]
&ref(2019b/Member/minami/Mission2/S__17547277.jpg,450x250...
&ref(2019b/Member/minami/Mission2/S__17547275.jpg,550x250...
#define average 50 ...
#define go1 OnFwd(OUT_B,30);OnFwd(OUT_C,-20); ...
#define go2 OnFwd(OUT_B,20);OnFwd(OUT_C,-10); ...
#define go3 OnFwd(OUT_BC,30); ...
#define go4 OnFwd(OUT_B,-10);OnFwd(OUT_C,30); ...
#define go5 OnFwd(OUT_B,-20);OnFwd(OUT_C,30); ...
基準の値との差で進行方向を考えるプログラムを作ったので、...
5段階に分けることでスムーズにライントレース出来るようにし...
**右左折と直進の設定 [#ga091e3b]
●左折~
当初、変数を用いなかったが左折する場面が数回ありそれぞれ...
#define left(s,t) OnFwd(OUT_B,s);Wait(t);Off(OUT_B); ...
右折も作ったが今回使うことはなかった。
#define right(s,t) OnFwd(OUT_C,s);Wait(t);Off(OUT_C); ...
●直進~
左折と同様の理由で変数を用いた。
#define straight(s_b,s_c,t) OnFwd(OUT_B,s_b);OnFwd(OUT_C...
直進プログラムの変数を変えることで右左折することが出来る...
。
**Uターンとボールをとる動作の設定 [#d3e07315]
#define uturn OnFwd(OUT_B,-75);OnFwd(OUT_C,70);Wait(700)...
#define ball OnFwd(OUT_A,-30);Wait(300);Off(OUT_A); ...
この2つを用いてロボットを動かすと、ボールをとりUターンす...
**ライントレース [#q63fb666]
交差点を認識するライントレースのプログラムを作った。 交差...
また右側の場合はgo5の動作で考える。
~
~
それなりにスムーズにライントレースすることが出来たが、よ...
~
&ref(2019b/Member/minami/Mission2/S__17637390.jpg,300x300...
&ref(2019b/Member/minami/Mission2/S__17637388.jpg,300x300...
~
●左側のライントレース
sub LeftSide(int Stop_time)
{
long tL = CurrentTick();
while (CurrentTick() -tL < Stop_time{ //Sto...
if (SENSOR_1 < average-11){
go1;
}else if (SENSOR_1 < average-7){
go2;
tL = CurrentTick(); //go2...
}else if (SENSOR_1 < average+7){
go3;
tL = CurrentTick(); //go3...
}else if (SENSOR_1 < average+11){
go4;
tL = CurrentTick(); //go4...
}else{
go5;
tL = CurrentTick(); //go5...
}
}
Off(OUT_BC);
}
●右側のライントレース
sub RightSide(int Stop_time)
{
long tR = CurrentTick();
while (CurrentTick() -tR < Stop_time{ //Sto...
if (SENSOR_1 < average-11){
go5;
}else if (SENSOR_1 < average-7){
go4;
tR = CurrentTick(); //go4...
}else if (SENSOR_1 < average+7){
go3;
tR = CurrentTick(); //go3...
}else if (SENSOR_1 < average+11){
go2;
tR = CurrentTick(); //go2...
}else{
go1;
tR = CurrentTick(); //go1...
}
}
Off(OUT_BC);
}
右側を使うつもりはなかったが、コース終盤の小回りが左側だ...
**超音波センサーでボールを見つける [#abc76d08]
まず、このプログラムは成功しなかった。~
今回の課題でwhileの使い方が身についていないことが分かった。
#ref(./S__17547278.jpg,500x400,センサー);
sub Ball_Stop()
{
while (true) {
LeftSide(1000); //10秒以上go1...
if (SensorUS(S2)<4){ //もし超音波セ...
ball; //ballの動作を...
}
}
Off(OUT_BC);
}
これだとtrueの間、つまり永久にLeftSide(1000)が実行されて...
なのでwhileを使わず以下のようなプログラムを考えた。~
しかし時間の都合でこのプログラムを実行することは出来なか...
sub Ball_Stop2()
{
if (SensorUS(S2)>4) { //もし超音波セ...
LeftSide(1000); //10秒以上go1...
}else{ //そうでないなら
ball; //ballの動作を...
}
Off(OUT_BC);
}
**メインプログラム [#k63c86de]
#define average 50 ...
#define go1 OnFwd(OUT_B,30);OnFwd(OUT_C,-20); ...
#define go2 OnFwd(OUT_B,20);OnFwd(OUT_C,-10); ...
#define go3 OnFwd(OUT_BC,30); ...
#define go4 OnFwd(OUT_B,-10);OnFwd(OUT_C,30); ...
#define go5 OnFwd(OUT_B,-20);OnFwd(OUT_C,30); ...
#define left(s,t) OnFwd(OUT_B,s);Wait(t);Off(OUT_B); ...
#define right(s,t) OnFwd(OUT_C,s);Wait(t);Off(OUT_C); ...
#define straight(s_b,s_c,t) OnFwd(OUT_B,s_b);OnFwd(OUT_C...
#define uturn OnFwd(OUT_B,-75);OnFwd(OUT_C,70);Wait(700)...
#define ball OnFwd(OUT_A,-30);Wait(300);Off(OUT_A); ...
sub LeftSide(int Stop_time) ...
{
long tL = CurrentTick();
while (CurrentTick() -tL < Stop_time{ ...
if (SENSOR_1 < average-11){
go1;
}else if (SENSOR_1 < average-7){
go2;
tL = CurrentTick(); ...
}else if (SENSOR_1 < average+7){
go3;
tL = CurrentTick(); ...
}else if (SENSOR_1 < average+11){
go4;
tL = CurrentTick(); ...
}else{
go5;
tL = CurrentTick(); ...
}
}
Off(OUT_BC);
}
sub RightSide(int Stop_time) ...
{
long tR = CurrentTick();
while (CurrentTick() -tR < Stop_time{ ...
if (SENSOR_1 < average-11){
go5;
}else if (SENSOR_1 < average-7){
go4;
tR = CurrentTick(); ...
}else if (SENSOR_1 < average+7){
go3;
tR = CurrentTick(); ...
}else if (SENSOR_1 < average+11){
go2;
tR = CurrentTick(); ...
}else{
go1;
tR = CurrentTick(); ...
}
}
Off(OUT_BC);
}
sub Ball_Stop() ...
{
while (true) {
LeftSide(1000); ...
if (SensorUS(S2)<4){ ...
ball; ...
}
}
Off(OUT_BC);
}
task main()
{
SetSensorLight(S1); ...
SetSensorLowspeed(S2); ...
LeftSide(150); ...
Wait(1000); ...
straight(20,30,500); ...
LeftSide(180); ...
Wait(1000); ...
left(70,600); ...
Ball_Stop(); ...
uturn; ...
RightSide(100); ...
straight(20,30,500); ...
}
*まとめ [#y99ee845]
結果として課題を成功させることが出来なかった。~
主な反省点は、「急カーブと交差点の見分け」「交差点を横断...
改善策として、tmaxやtminを含んだプログラミングを作ること...
また、交差点認識後の右左折直進に関して、今回のプログラミ...
黒を見つけるまで左折するようなプログラミングなら残量など...
~
今回は、成功出来なかった分、学ぶことがたくさんあった課題...
ロボットに関してもプログラミングに関しても途中で臨機応変...
次回が最終課題となるが、今回の失敗を活かし成功させたいと...
終了行:
#contents
*課題2 [#j9c6ac10]
#ref(./S__17530895.jpg,600x400,コース);
1. A地点から出発~
2. B~
3. C (直進)~
4. D (一時停止の後、直進)~
5. E, F 通過~
6. G (一時停止の後、左折)~
7. H (一時停止の後、左折)~
8. I (ボール or キューボイドをつかんでUターン)~
9. H(直進)~
10.J (一時停止)~
11.A地点に入る(ゴール)~
*ロボットの説明 [#o297fb89]
基本形は説明書と同じで、センサとアームを考えて付け加えた。
**センサ [#n93287a7]
#ref(./S__17530898.jpg,500x300,センサー);
光センサーはできるだけ地面に近づけ、周りの環境の影響を受...
~
超音波センサーは上から地面の方向につけた。~
初めは、前向きにつけていたがそれだと上手くボールを見つけ...
**アーム [#cf3930d2]
#ref(./S__17629191.jpg,500x300,コース);
スタート時はアームを上にしてボールが近くに来たら下がる仕...
見た目よりも、確実性を増すために大きな囲いにした。
*プログラミングの説明 [#nab36970]
**閾値と進行方向の設定 [#a65a5ec6]
&ref(2019b/Member/minami/Mission2/S__17547277.jpg,450x250...
&ref(2019b/Member/minami/Mission2/S__17547275.jpg,550x250...
#define average 50 ...
#define go1 OnFwd(OUT_B,30);OnFwd(OUT_C,-20); ...
#define go2 OnFwd(OUT_B,20);OnFwd(OUT_C,-10); ...
#define go3 OnFwd(OUT_BC,30); ...
#define go4 OnFwd(OUT_B,-10);OnFwd(OUT_C,30); ...
#define go5 OnFwd(OUT_B,-20);OnFwd(OUT_C,30); ...
基準の値との差で進行方向を考えるプログラムを作ったので、...
5段階に分けることでスムーズにライントレース出来るようにし...
**右左折と直進の設定 [#ga091e3b]
●左折~
当初、変数を用いなかったが左折する場面が数回ありそれぞれ...
#define left(s,t) OnFwd(OUT_B,s);Wait(t);Off(OUT_B); ...
右折も作ったが今回使うことはなかった。
#define right(s,t) OnFwd(OUT_C,s);Wait(t);Off(OUT_C); ...
●直進~
左折と同様の理由で変数を用いた。
#define straight(s_b,s_c,t) OnFwd(OUT_B,s_b);OnFwd(OUT_C...
直進プログラムの変数を変えることで右左折することが出来る...
。
**Uターンとボールをとる動作の設定 [#d3e07315]
#define uturn OnFwd(OUT_B,-75);OnFwd(OUT_C,70);Wait(700)...
#define ball OnFwd(OUT_A,-30);Wait(300);Off(OUT_A); ...
この2つを用いてロボットを動かすと、ボールをとりUターンす...
**ライントレース [#q63fb666]
交差点を認識するライントレースのプログラムを作った。 交差...
また右側の場合はgo5の動作で考える。
~
~
それなりにスムーズにライントレースすることが出来たが、よ...
~
&ref(2019b/Member/minami/Mission2/S__17637390.jpg,300x300...
&ref(2019b/Member/minami/Mission2/S__17637388.jpg,300x300...
~
●左側のライントレース
sub LeftSide(int Stop_time)
{
long tL = CurrentTick();
while (CurrentTick() -tL < Stop_time{ //Sto...
if (SENSOR_1 < average-11){
go1;
}else if (SENSOR_1 < average-7){
go2;
tL = CurrentTick(); //go2...
}else if (SENSOR_1 < average+7){
go3;
tL = CurrentTick(); //go3...
}else if (SENSOR_1 < average+11){
go4;
tL = CurrentTick(); //go4...
}else{
go5;
tL = CurrentTick(); //go5...
}
}
Off(OUT_BC);
}
●右側のライントレース
sub RightSide(int Stop_time)
{
long tR = CurrentTick();
while (CurrentTick() -tR < Stop_time{ //Sto...
if (SENSOR_1 < average-11){
go5;
}else if (SENSOR_1 < average-7){
go4;
tR = CurrentTick(); //go4...
}else if (SENSOR_1 < average+7){
go3;
tR = CurrentTick(); //go3...
}else if (SENSOR_1 < average+11){
go2;
tR = CurrentTick(); //go2...
}else{
go1;
tR = CurrentTick(); //go1...
}
}
Off(OUT_BC);
}
右側を使うつもりはなかったが、コース終盤の小回りが左側だ...
**超音波センサーでボールを見つける [#abc76d08]
まず、このプログラムは成功しなかった。~
今回の課題でwhileの使い方が身についていないことが分かった。
#ref(./S__17547278.jpg,500x400,センサー);
sub Ball_Stop()
{
while (true) {
LeftSide(1000); //10秒以上go1...
if (SensorUS(S2)<4){ //もし超音波セ...
ball; //ballの動作を...
}
}
Off(OUT_BC);
}
これだとtrueの間、つまり永久にLeftSide(1000)が実行されて...
なのでwhileを使わず以下のようなプログラムを考えた。~
しかし時間の都合でこのプログラムを実行することは出来なか...
sub Ball_Stop2()
{
if (SensorUS(S2)>4) { //もし超音波セ...
LeftSide(1000); //10秒以上go1...
}else{ //そうでないなら
ball; //ballの動作を...
}
Off(OUT_BC);
}
**メインプログラム [#k63c86de]
#define average 50 ...
#define go1 OnFwd(OUT_B,30);OnFwd(OUT_C,-20); ...
#define go2 OnFwd(OUT_B,20);OnFwd(OUT_C,-10); ...
#define go3 OnFwd(OUT_BC,30); ...
#define go4 OnFwd(OUT_B,-10);OnFwd(OUT_C,30); ...
#define go5 OnFwd(OUT_B,-20);OnFwd(OUT_C,30); ...
#define left(s,t) OnFwd(OUT_B,s);Wait(t);Off(OUT_B); ...
#define right(s,t) OnFwd(OUT_C,s);Wait(t);Off(OUT_C); ...
#define straight(s_b,s_c,t) OnFwd(OUT_B,s_b);OnFwd(OUT_C...
#define uturn OnFwd(OUT_B,-75);OnFwd(OUT_C,70);Wait(700)...
#define ball OnFwd(OUT_A,-30);Wait(300);Off(OUT_A); ...
sub LeftSide(int Stop_time) ...
{
long tL = CurrentTick();
while (CurrentTick() -tL < Stop_time{ ...
if (SENSOR_1 < average-11){
go1;
}else if (SENSOR_1 < average-7){
go2;
tL = CurrentTick(); ...
}else if (SENSOR_1 < average+7){
go3;
tL = CurrentTick(); ...
}else if (SENSOR_1 < average+11){
go4;
tL = CurrentTick(); ...
}else{
go5;
tL = CurrentTick(); ...
}
}
Off(OUT_BC);
}
sub RightSide(int Stop_time) ...
{
long tR = CurrentTick();
while (CurrentTick() -tR < Stop_time{ ...
if (SENSOR_1 < average-11){
go5;
}else if (SENSOR_1 < average-7){
go4;
tR = CurrentTick(); ...
}else if (SENSOR_1 < average+7){
go3;
tR = CurrentTick(); ...
}else if (SENSOR_1 < average+11){
go2;
tR = CurrentTick(); ...
}else{
go1;
tR = CurrentTick(); ...
}
}
Off(OUT_BC);
}
sub Ball_Stop() ...
{
while (true) {
LeftSide(1000); ...
if (SensorUS(S2)<4){ ...
ball; ...
}
}
Off(OUT_BC);
}
task main()
{
SetSensorLight(S1); ...
SetSensorLowspeed(S2); ...
LeftSide(150); ...
Wait(1000); ...
straight(20,30,500); ...
LeftSide(180); ...
Wait(1000); ...
left(70,600); ...
Ball_Stop(); ...
uturn; ...
RightSide(100); ...
straight(20,30,500); ...
}
*まとめ [#y99ee845]
結果として課題を成功させることが出来なかった。~
主な反省点は、「急カーブと交差点の見分け」「交差点を横断...
改善策として、tmaxやtminを含んだプログラミングを作ること...
また、交差点認識後の右左折直進に関して、今回のプログラミ...
黒を見つけるまで左折するようなプログラミングなら残量など...
~
今回は、成功出来なかった分、学ぶことがたくさんあった課題...
ロボットに関してもプログラミングに関しても途中で臨機応変...
次回が最終課題となるが、今回の失敗を活かし成功させたいと...
ページ名: