2019a/Member/yuta/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題3 [#y99f8e94]
ピンポン玉または青と赤のボールを運搬して、所定の容器の中...
#ref(mission3.png,,50%)
フィールドの説明
フィールドは課題2で使用した紙を使用する。
生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片方...
残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤ...
プラ容器には色をつけたり文字や記号を書いてもよい。
プラ容器は両面テープ等でフィールドに固定してもよい。
2枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いてもよ...
**ルール [#n50f30af]
基本ルール
~競技時間は審判が続行不能と判断するまで、あるいはリタイア...
~図のA地点または(および)A'地点からスタートする。ただし...
~開始の合図から5秒以内にスタートボタンを押す作業を完了す...
~競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
~途中でうまく動かなくなった場合、1回限り再スタートするこ...
~競技終了後、ロボットが、ゴールのプラ容器に触れていてはい...
~競技終了後、もともと玉が入っていたプラ容器が、ゴールのプ...
~基本得点の計算方法
~プラ容器内の玉を1個運べば8点。二つとも運べば20点。
~L地点とL'地点の玉をどちらか1個運べば4点、2個とも運べば12...
~競技終了後、ゴールのプラ容器が完全に円から出しまった場合...
~競技終了後、ゴールのプラ容器の半分以上が円から出ていれば...
~競技終了後、ゴールのプラ容器にもとのプラ容器が触れていれ...
~競技終了後、ゴールのプラ容器にもとのプラ容器が触れていれ...
~競技終了後、ゴールのプラ容器にロボットが触れていれば、も...
~技術点の計算方法
~以下の動作の精度・スピード・確実性などを含めた技術的な工...
~玉を掴む動作 (3点)
~玉をを運ぶ動作 (2点)
~玉を容器の中に入れる動作 (2点)
~2台のRIS、NXT、EV3の連携の良さ(2点)
~自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
~その他 (3点)
*ロボットの説明 [#z9abf1d7]
今回作ったロボットはこちらです。
#ref(image1.jpeg,,80%)
私たちのグループは二つのロボットに分けるのではなく、一体...
**アームの機構 [#c71ef7eb]
アームの機構はこのようになっている。
#ref(image2 - コピー.jpeg,,35%)
**ボールをつかむ機構 [#afb546e3]
ボールをとるために、輪ゴムを利用した。ボールを上から二本...
#ref(ボール上げ.png,,35%)
このようにしてボールをつかんでいき、ボールがお互いに押し...
#ref(close.png,,35%)
溜まっていったボールは、黒い棒の開け閉めによって、ボール...
**光センサー [#e5d234b9]
センサーの位置は下のようになった
#ref(センサー.png,,50%)
光センサーはタイヤよりも前の位置につけた。当初、光センサ...
*プログラムの説明 [#vf204729]
今回はNXTを二つ使っているので、片方をマスター、もう一方を...
**スレーブ側のプログラム [#b0e868cf]
***アームを上げる [#o2654d2e]
プログラム名はTAI(S1)
task main()
{
OnRev(OUT_C,50);
Wait(5000);
Off(OUT_C);
SendResponseNumber(MAILBOX1,11); //マスター側にアー...
}
***アームを下げる [#hc9d17c4]
プログラム名はTAI(S2)
task main()
{
OnFwd(OUT_C,30);
Wait(3000);
Off(OUT_C);
SendResponseNumber(MAILBOX1,12); //マスター側にアー...
}
***扉を開ける [#f96fe191]
プログラム名はTAI(S3)
task main()
{
OnFwd(OUT_B,30);
Wait(3000);
Off(OUT_B);
SendResponseNumber(MAILBOX2,13); //マスター側に扉を開...
}
***扉を閉める [#bc4422b4]
プログラム名はTAI(S4)
task main()
{
OnRev(OUT_B,50);
Wait(5000);
Off(OUT_B);
SendResponseNumber(MAILBOX2,14); //マスター側に扉を閉...
}
**マスター側のプログラム [#h83c6e5b]
***定義したマクロ [#m84ac443]
#define BL 40
#define WH 47
#define HB 32
#define HW 55
#define left OnFwd(OUT_B,45);OnRev(OUT_C,40); //左旋回
#define right OnFwd(OUT_C,45);OnRev(OUT_B,40); //右旋回
#define lefts OnFwd(OUT_B,38);OnFwd(OUT_C,25); //左に...
#define rights OnFwd(OUT_C,38);OnFwd(OUT_B,25); //右に...
#define CONN 1 //Bluet...
***ライントレース [#y01440fa]
ライントレースのプログラムは以下のようになる。
sub hidari()
{
SetSensorLight(S3);
long t0=CurrentTick();
while(CurrentTick()-t0<=250){
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);
}
***交差点横断 [#gb1d3340]
交差点横断のプログラムは次のようになる。
sub oudann()
{
right;
Wait(300);
Off(OUT_BC);
OnFwd(OUT_BC,30);
Wait(500);
Off(OUT_BC);
}
***直角のライントレース [#tacf7b5c]
直角のところのライントレースは次のようになる。なお、この...
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);
}
***アームを上げる [#a75642a9]
sub arm_up()
{
int msg;
until(BluetoothStatus(1)==NO_ERR);
RemoteStartProgram(1,"TAI(S1).rxe"); //TAI(...
while(msg !=11){
ReceiveRemoteNumber(MAILBOX1,true,msg);
}
Wait(2000); //スレ...
}
***アームを下げる [#y567662f]
sub arm_down()
{
int msg;
until(BluetoothStatus(1)==NO_ERR);
RemoteStartProgram(1,"TAI(S2).rxe"); //TAI(...
while(msg !=12){
ReceiveRemoteNumber(MAILBOX1,true,msg);
}
Wait(2000);
}
***扉を開ける [#r0585964]
sub arm_open()
{
int msg;
until(BluetoothStatus(1)==NO_ERR);
RemoteStartProgram(1,"TAI(S3).rxe"); //TAI(...
while(msg !=13){
ReceiveRemoteNumber(MAILBOX2,true,msg);
}
Wait(2000);
}
***扉を閉める [#r2ea2bbb]
sub arm_close()
{
int msg;
until(BluetoothStatus(1)==NO_ERR);
RemoteStartProgram(1,"TAI(S4).rxe"); //TAI(...
while(msg !=14){
ReceiveRemoteNumber(MAILBOX2,true,msg);
}
Wait(2000);
}
***全体のプログラム [#id98e096]
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();
}
**まとめ [#b71fc230]
発表ではボールを一個もとることができず、悔しい結果となっ...
終了行:
目次
#contents
*課題3 [#y99f8e94]
ピンポン玉または青と赤のボールを運搬して、所定の容器の中...
#ref(mission3.png,,50%)
フィールドの説明
フィールドは課題2で使用した紙を使用する。
生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片方...
残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤ...
プラ容器には色をつけたり文字や記号を書いてもよい。
プラ容器は両面テープ等でフィールドに固定してもよい。
2枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いてもよ...
**ルール [#n50f30af]
基本ルール
~競技時間は審判が続行不能と判断するまで、あるいはリタイア...
~図のA地点または(および)A'地点からスタートする。ただし...
~開始の合図から5秒以内にスタートボタンを押す作業を完了す...
~競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
~途中でうまく動かなくなった場合、1回限り再スタートするこ...
~競技終了後、ロボットが、ゴールのプラ容器に触れていてはい...
~競技終了後、もともと玉が入っていたプラ容器が、ゴールのプ...
~基本得点の計算方法
~プラ容器内の玉を1個運べば8点。二つとも運べば20点。
~L地点とL'地点の玉をどちらか1個運べば4点、2個とも運べば12...
~競技終了後、ゴールのプラ容器が完全に円から出しまった場合...
~競技終了後、ゴールのプラ容器の半分以上が円から出ていれば...
~競技終了後、ゴールのプラ容器にもとのプラ容器が触れていれ...
~競技終了後、ゴールのプラ容器にもとのプラ容器が触れていれ...
~競技終了後、ゴールのプラ容器にロボットが触れていれば、も...
~技術点の計算方法
~以下の動作の精度・スピード・確実性などを含めた技術的な工...
~玉を掴む動作 (3点)
~玉をを運ぶ動作 (2点)
~玉を容器の中に入れる動作 (2点)
~2台のRIS、NXT、EV3の連携の良さ(2点)
~自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
~その他 (3点)
*ロボットの説明 [#z9abf1d7]
今回作ったロボットはこちらです。
#ref(image1.jpeg,,80%)
私たちのグループは二つのロボットに分けるのではなく、一体...
**アームの機構 [#c71ef7eb]
アームの機構はこのようになっている。
#ref(image2 - コピー.jpeg,,35%)
**ボールをつかむ機構 [#afb546e3]
ボールをとるために、輪ゴムを利用した。ボールを上から二本...
#ref(ボール上げ.png,,35%)
このようにしてボールをつかんでいき、ボールがお互いに押し...
#ref(close.png,,35%)
溜まっていったボールは、黒い棒の開け閉めによって、ボール...
**光センサー [#e5d234b9]
センサーの位置は下のようになった
#ref(センサー.png,,50%)
光センサーはタイヤよりも前の位置につけた。当初、光センサ...
*プログラムの説明 [#vf204729]
今回はNXTを二つ使っているので、片方をマスター、もう一方を...
**スレーブ側のプログラム [#b0e868cf]
***アームを上げる [#o2654d2e]
プログラム名はTAI(S1)
task main()
{
OnRev(OUT_C,50);
Wait(5000);
Off(OUT_C);
SendResponseNumber(MAILBOX1,11); //マスター側にアー...
}
***アームを下げる [#hc9d17c4]
プログラム名はTAI(S2)
task main()
{
OnFwd(OUT_C,30);
Wait(3000);
Off(OUT_C);
SendResponseNumber(MAILBOX1,12); //マスター側にアー...
}
***扉を開ける [#f96fe191]
プログラム名はTAI(S3)
task main()
{
OnFwd(OUT_B,30);
Wait(3000);
Off(OUT_B);
SendResponseNumber(MAILBOX2,13); //マスター側に扉を開...
}
***扉を閉める [#bc4422b4]
プログラム名はTAI(S4)
task main()
{
OnRev(OUT_B,50);
Wait(5000);
Off(OUT_B);
SendResponseNumber(MAILBOX2,14); //マスター側に扉を閉...
}
**マスター側のプログラム [#h83c6e5b]
***定義したマクロ [#m84ac443]
#define BL 40
#define WH 47
#define HB 32
#define HW 55
#define left OnFwd(OUT_B,45);OnRev(OUT_C,40); //左旋回
#define right OnFwd(OUT_C,45);OnRev(OUT_B,40); //右旋回
#define lefts OnFwd(OUT_B,38);OnFwd(OUT_C,25); //左に...
#define rights OnFwd(OUT_C,38);OnFwd(OUT_B,25); //右に...
#define CONN 1 //Bluet...
***ライントレース [#y01440fa]
ライントレースのプログラムは以下のようになる。
sub hidari()
{
SetSensorLight(S3);
long t0=CurrentTick();
while(CurrentTick()-t0<=250){
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);
}
***交差点横断 [#gb1d3340]
交差点横断のプログラムは次のようになる。
sub oudann()
{
right;
Wait(300);
Off(OUT_BC);
OnFwd(OUT_BC,30);
Wait(500);
Off(OUT_BC);
}
***直角のライントレース [#tacf7b5c]
直角のところのライントレースは次のようになる。なお、この...
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);
}
***アームを上げる [#a75642a9]
sub arm_up()
{
int msg;
until(BluetoothStatus(1)==NO_ERR);
RemoteStartProgram(1,"TAI(S1).rxe"); //TAI(...
while(msg !=11){
ReceiveRemoteNumber(MAILBOX1,true,msg);
}
Wait(2000); //スレ...
}
***アームを下げる [#y567662f]
sub arm_down()
{
int msg;
until(BluetoothStatus(1)==NO_ERR);
RemoteStartProgram(1,"TAI(S2).rxe"); //TAI(...
while(msg !=12){
ReceiveRemoteNumber(MAILBOX1,true,msg);
}
Wait(2000);
}
***扉を開ける [#r0585964]
sub arm_open()
{
int msg;
until(BluetoothStatus(1)==NO_ERR);
RemoteStartProgram(1,"TAI(S3).rxe"); //TAI(...
while(msg !=13){
ReceiveRemoteNumber(MAILBOX2,true,msg);
}
Wait(2000);
}
***扉を閉める [#r2ea2bbb]
sub arm_close()
{
int msg;
until(BluetoothStatus(1)==NO_ERR);
RemoteStartProgram(1,"TAI(S4).rxe"); //TAI(...
while(msg !=14){
ReceiveRemoteNumber(MAILBOX2,true,msg);
}
Wait(2000);
}
***全体のプログラム [#id98e096]
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();
}
**まとめ [#b71fc230]
発表ではボールを一個もとることができず、悔しい結果となっ...
ページ名: