2019a/Member/naoki/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
*目次 [#ha636ac0]
#contents
*課題3について [#aef2e5c2]
ピンポン玉または青と赤のボールを運搬して、所定の容器の中...
#ref(./2019a-mission3.png,50%)
**フィールドの説明 [#p46f0058]
+フィールドは課題2で使用した紙を使用する。 [#u9060bc7]
+生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片...
+残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤ...
+プラ容器には色をつけたり文字や記号を書いてもよい。 [#ve0...
+プラ容器は両面テープ等でフィールドに固定してもよい。 [#i...
+2枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いても...
**基本ルール [#o668dedf]
+競技時間は審判が続行不能と判断するまで、あるいはリタイア...
+図のA地点または(および)A'地点からスタートする。ただし...
+開始の合図から5秒以内にスタートボタンを押す作業を完了す...
+競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
+途中でうまく動かなくなった場合、1回限り再スタートするこ...
+競技終了後、ロボットが、ゴールのプラ容器に触れていてはい...
+競技終了後、もともと玉が入っていたプラ容器が、ゴールのプ...
*ロボットの説明 [#c0f90928]
全体像↓
#ref(./IMG_20190807_054224.jpg,10%,)
1つのNXTは機体を動かすためのもので,もう1つのNXT...
**アームについて [#p64e7a0d]
正面から↓
#ref(./IMG_20190807_054248.jpg,10%,)
斜め横から↓
#ref(./IMG_20190807_131625.jpg,10%,)
歯車を使うことにより,モーターの縦の回転を横の回転に変換...
**光センサーについて [#s43b0a65]
光センサーを出来るだけ前につけることにより,ライントレー...
*プログラミングの説明 [#z3e0b25c]
今回の課題ではNXTを2つ使ったので片方をマスター,もう...
**定義の説明 [#fe0401c3]
光センサーで感知する色を以下のように定義する.
BL 40 //灰色に近い黒
WH 47 // 灰色に近い白
HB 32 //真っ黒
HW 55 //真っ白
また以下のように動きを定義する.
left OnFwd(OUT_B,45);OnRev(OUT_C,40); //左回り
right OnFwd(OUT_C,45);OnRev(OUT_B,40); //右回り
lefts OnFwd(OUT_B,38);OnFwd(OUT_C,25); //左曲がり
rights OnFwd(OUT_C,38);OnFwd(OUT_B,25); //右曲がり
#ref(./色の定義.png,70%,)
CONN 1 //Bluetoothの接続
**交差点の認識方法 [#b67bc650]
直角の交差点は,カーブに比べて,黒い部分に滞在する時間が...
#ref(./line2.png,70%,)
**ライントレース(マスター側) [#b6d6b773]
sub hidari()
{
SetSensorLight(S3); //光センサー起動
long t0=CurrentTick();
while(CurrentTick()-t0<=250){ //0,25秒以上経過するま...
if(SENSOR_3>HW){
right; //右回り
t0=CurrentTick(); //時間リセット
}else if(SENSOR_3>WH){
rights; //右曲がり
t0=CurrentTick(); //時間リセット
}else if(SENSOR_3>BL){
OnFwd(OUT_BC,30); //直進
t0=CurrentTick(); //時間リセット
}else if(SENSOR_3>HB){
lefts; //左曲がり
t0=CurrentTick(); //時間リセット
}else{
left; //左回り }
}
Off(OUT_BC);
}
**交差点の横断(マスター側) [#hf7a7ce2]
sub oudann()
{
right; //右回り
Wait(300);
Off(OUT_BC);
OnFwd(OUT_BC,30); //直進
Wait(500);
Off(OUT_BC);
}
**直角のライントレース(マスター側) [#c866a05b]
sub magari()
{
SetSensorLight(S3); //光センサー起動
int nOnline=0;
while(nOnline<4600){ //4,6秒以上経過するまで続ける
if(SENSOR_3>HW){
right; //右回り
nOnline++; //カウントする
}else if(SENSOR_3>WH){
rights; //右曲がり
}else if(SENSOR_3>BL){
OnFwd(OUT_BC,30); //直進
}else if(SENSOR_3>HB){
lefts; //左曲がり
}else{
left; //左回り
}
}
Off(OUT_BC);
}
**アームを上げる(マスター側) [#l351203a]
sub arm_up()
{
int msg;
until(BluetoothStatus(1)==NO_ERR); //子機の準備を待つ
RemoteStartProgram(1,"TAI(S1).rxe"); //スレーブ側にT...
while(msg !=11){
ReceiveRemoteNumber(MAILBOX1,true,msg); //MIALBO...
}
Wait(2000);
}
**アームを上げる(スレーブ側) [#rdd701ba]
sub arm_up_s()
{
OnRev(OUT_C,50);
Wait(5000);
Off(OUT_C);
SendResponseNumber(MAILBOX1,11); //MAILBOX1に11と...
**アームを下げる(マスター側) [#je6a013a]
sub arm_down()
{
int msg;
until(BluetoothStatus(1)==NO_ERR); //子機の準備を待つ
RemoteStartProgram(1,"TAI(S2).rxe"); //スレーブ側にT...
while(msg !=12){
ReceiveRemoteNumber(MAILBOX1,true,msg); //MAILBO...
}
Wait(2000);
}
**アームを下げる(スレーブ側) [#qa3f499b]
sub arm_down_s()
{
OnFwd(OUT_C,30);
Wait(3000);
Off(OUT_C);
SendResponseNumber(MAILBOX1,12); //MAILBOX1に12と...
}
**アームを開く(マスター側) [#vaa50dbf]
sub arm_open()
{
int msg;
until(BluetoothStatus(1)==NO_ERR); //子機の準備を待つ
RemoteStartProgram(1,"TAI(S3).rxe"); //スレーブ側にT...
while(msg !=13){
ReceiveRemoteNumber(MAILBOX2,true,msg); //MAILBO...
}
Wait(2000);
}
**アームを開く(スレーブ側) [#s01d2d3c]
sub open_s()
{
OnFwd(OUT_B,30);
Wait(3000);
Off(OUT_B);
SendResponseNumber(MAILBOX2,13); //MAIKBOX2に13と...
}
**アームを閉じる(マスター側) [#t4d6fe11]
sub arm_close()
{
int msg;
until(BluetoothStatus(1)==NO_ERR); //子機の準備を待つ
RemoteStartProgram(1,"TAI(S4).rxe"); //スレーブ側にT...
while(msg !=14){
ReceiveRemoteNumber(MAILBOX2,true,msg); //MAILBO...
}
Wait(2000);
}
**アームを閉じる(スレーブ側) [#wd805956]
sub close_s()
{
OnRev(OUT_B,50);
Wait(5000);
Off(OUT_B);
SendResponseNumber(MAILBOX2,14); //MAILBOX2に14と...
}
**全体のプログラミング [#i4255e8b]
task main()
{
hidari();
oudann();
magari();
arm_up();
OnFwd(OUT_BC,30);
Wait(300);
Off(OUT_BC);
arm_down();
arm_close();
left;
Wait(1500);
Off(OUT_BC);
OnFwd(OUT_BC,30);
Wait(2000);
Off(OUT_BC);
arm_up();
arm_down();
left;
Wait(2500);
Off(OUT_BC);
OnFwd(OUT_BC,40);
Wait(5000);
Off(OUT_BC);
hidari();
oudann();
hidari();
oudann();
hidari();
arm_up();
arm_open();
}
*結果 [#v09d3370]
ロボコンではボールを運ぶどころかほとんど起動しないまま終...
*まとめ・感想 [#we0fb2b7]
テスト期間に近いこともあり,あまり時間を割けなかったので...
終了行:
[[2019a/Member]]
*目次 [#ha636ac0]
#contents
*課題3について [#aef2e5c2]
ピンポン玉または青と赤のボールを運搬して、所定の容器の中...
#ref(./2019a-mission3.png,50%)
**フィールドの説明 [#p46f0058]
+フィールドは課題2で使用した紙を使用する。 [#u9060bc7]
+生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片...
+残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤ...
+プラ容器には色をつけたり文字や記号を書いてもよい。 [#ve0...
+プラ容器は両面テープ等でフィールドに固定してもよい。 [#i...
+2枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いても...
**基本ルール [#o668dedf]
+競技時間は審判が続行不能と判断するまで、あるいはリタイア...
+図のA地点または(および)A'地点からスタートする。ただし...
+開始の合図から5秒以内にスタートボタンを押す作業を完了す...
+競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
+途中でうまく動かなくなった場合、1回限り再スタートするこ...
+競技終了後、ロボットが、ゴールのプラ容器に触れていてはい...
+競技終了後、もともと玉が入っていたプラ容器が、ゴールのプ...
*ロボットの説明 [#c0f90928]
全体像↓
#ref(./IMG_20190807_054224.jpg,10%,)
1つのNXTは機体を動かすためのもので,もう1つのNXT...
**アームについて [#p64e7a0d]
正面から↓
#ref(./IMG_20190807_054248.jpg,10%,)
斜め横から↓
#ref(./IMG_20190807_131625.jpg,10%,)
歯車を使うことにより,モーターの縦の回転を横の回転に変換...
**光センサーについて [#s43b0a65]
光センサーを出来るだけ前につけることにより,ライントレー...
*プログラミングの説明 [#z3e0b25c]
今回の課題ではNXTを2つ使ったので片方をマスター,もう...
**定義の説明 [#fe0401c3]
光センサーで感知する色を以下のように定義する.
BL 40 //灰色に近い黒
WH 47 // 灰色に近い白
HB 32 //真っ黒
HW 55 //真っ白
また以下のように動きを定義する.
left OnFwd(OUT_B,45);OnRev(OUT_C,40); //左回り
right OnFwd(OUT_C,45);OnRev(OUT_B,40); //右回り
lefts OnFwd(OUT_B,38);OnFwd(OUT_C,25); //左曲がり
rights OnFwd(OUT_C,38);OnFwd(OUT_B,25); //右曲がり
#ref(./色の定義.png,70%,)
CONN 1 //Bluetoothの接続
**交差点の認識方法 [#b67bc650]
直角の交差点は,カーブに比べて,黒い部分に滞在する時間が...
#ref(./line2.png,70%,)
**ライントレース(マスター側) [#b6d6b773]
sub hidari()
{
SetSensorLight(S3); //光センサー起動
long t0=CurrentTick();
while(CurrentTick()-t0<=250){ //0,25秒以上経過するま...
if(SENSOR_3>HW){
right; //右回り
t0=CurrentTick(); //時間リセット
}else if(SENSOR_3>WH){
rights; //右曲がり
t0=CurrentTick(); //時間リセット
}else if(SENSOR_3>BL){
OnFwd(OUT_BC,30); //直進
t0=CurrentTick(); //時間リセット
}else if(SENSOR_3>HB){
lefts; //左曲がり
t0=CurrentTick(); //時間リセット
}else{
left; //左回り }
}
Off(OUT_BC);
}
**交差点の横断(マスター側) [#hf7a7ce2]
sub oudann()
{
right; //右回り
Wait(300);
Off(OUT_BC);
OnFwd(OUT_BC,30); //直進
Wait(500);
Off(OUT_BC);
}
**直角のライントレース(マスター側) [#c866a05b]
sub magari()
{
SetSensorLight(S3); //光センサー起動
int nOnline=0;
while(nOnline<4600){ //4,6秒以上経過するまで続ける
if(SENSOR_3>HW){
right; //右回り
nOnline++; //カウントする
}else if(SENSOR_3>WH){
rights; //右曲がり
}else if(SENSOR_3>BL){
OnFwd(OUT_BC,30); //直進
}else if(SENSOR_3>HB){
lefts; //左曲がり
}else{
left; //左回り
}
}
Off(OUT_BC);
}
**アームを上げる(マスター側) [#l351203a]
sub arm_up()
{
int msg;
until(BluetoothStatus(1)==NO_ERR); //子機の準備を待つ
RemoteStartProgram(1,"TAI(S1).rxe"); //スレーブ側にT...
while(msg !=11){
ReceiveRemoteNumber(MAILBOX1,true,msg); //MIALBO...
}
Wait(2000);
}
**アームを上げる(スレーブ側) [#rdd701ba]
sub arm_up_s()
{
OnRev(OUT_C,50);
Wait(5000);
Off(OUT_C);
SendResponseNumber(MAILBOX1,11); //MAILBOX1に11と...
**アームを下げる(マスター側) [#je6a013a]
sub arm_down()
{
int msg;
until(BluetoothStatus(1)==NO_ERR); //子機の準備を待つ
RemoteStartProgram(1,"TAI(S2).rxe"); //スレーブ側にT...
while(msg !=12){
ReceiveRemoteNumber(MAILBOX1,true,msg); //MAILBO...
}
Wait(2000);
}
**アームを下げる(スレーブ側) [#qa3f499b]
sub arm_down_s()
{
OnFwd(OUT_C,30);
Wait(3000);
Off(OUT_C);
SendResponseNumber(MAILBOX1,12); //MAILBOX1に12と...
}
**アームを開く(マスター側) [#vaa50dbf]
sub arm_open()
{
int msg;
until(BluetoothStatus(1)==NO_ERR); //子機の準備を待つ
RemoteStartProgram(1,"TAI(S3).rxe"); //スレーブ側にT...
while(msg !=13){
ReceiveRemoteNumber(MAILBOX2,true,msg); //MAILBO...
}
Wait(2000);
}
**アームを開く(スレーブ側) [#s01d2d3c]
sub open_s()
{
OnFwd(OUT_B,30);
Wait(3000);
Off(OUT_B);
SendResponseNumber(MAILBOX2,13); //MAIKBOX2に13と...
}
**アームを閉じる(マスター側) [#t4d6fe11]
sub arm_close()
{
int msg;
until(BluetoothStatus(1)==NO_ERR); //子機の準備を待つ
RemoteStartProgram(1,"TAI(S4).rxe"); //スレーブ側にT...
while(msg !=14){
ReceiveRemoteNumber(MAILBOX2,true,msg); //MAILBO...
}
Wait(2000);
}
**アームを閉じる(スレーブ側) [#wd805956]
sub close_s()
{
OnRev(OUT_B,50);
Wait(5000);
Off(OUT_B);
SendResponseNumber(MAILBOX2,14); //MAILBOX2に14と...
}
**全体のプログラミング [#i4255e8b]
task main()
{
hidari();
oudann();
magari();
arm_up();
OnFwd(OUT_BC,30);
Wait(300);
Off(OUT_BC);
arm_down();
arm_close();
left;
Wait(1500);
Off(OUT_BC);
OnFwd(OUT_BC,30);
Wait(2000);
Off(OUT_BC);
arm_up();
arm_down();
left;
Wait(2500);
Off(OUT_BC);
OnFwd(OUT_BC,40);
Wait(5000);
Off(OUT_BC);
hidari();
oudann();
hidari();
oudann();
hidari();
arm_up();
arm_open();
}
*結果 [#v09d3370]
ロボコンではボールを運ぶどころかほとんど起動しないまま終...
*まとめ・感想 [#we0fb2b7]
テスト期間に近いこともあり,あまり時間を割けなかったので...
ページ名: