2018b/Member/ndksiba/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018b/Member]]
目次
#contents
*課題3 [#q6465a8d]
今回の課題は・・・
CENTER:&size(30){&color(blue){青};と&color(red){赤};のボ...
RIGHT:・・・だ! &br;
**コース [#r05640f7]
&size(30){フィールドの説明};
&ref(3図_コース.png);
-フィールドは課題2で使用した紙を使用する。
-350ml缶(中が入っていても空でよい)は逆さまにして使い、ロ...
-その番号の次の番号のところにもダミーの缶を置くことができ...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
-赤と青のボールは、図のように所定の場所に置いておく。その...
**ルール [#qef4d143]
&size(20){基本ルール};
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図のX地点または(および)Y地点からスタートする。ただし接...
-赤いボールを図のピンクのいずれかに置いた缶に、青いボール...
-開始の合図から5秒以内にスタートボタンを押す作業を完了す...
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
-途中でうまく動かなくなった場合、1回限り再スタートするこ...
&size(20){基本得点の計算方法};
-ボールを一つ乗せればそれぞれ10点、二つとも乗せればボーナ...
-ダミーの缶を設置した上で、正しい缶に乗せれば、それぞれさ...
-ボールを目的の缶に当てることができれば、それぞれ4点。
-ボールを同じ領域内の間違った缶に乗せた場合は、それぞれ6...
-ボールを同じ領域内の間違った缶に当てた場合は、それぞれ2...
-ボールを違う領域内の缶に乗せた場合は、それぞれ2点。
-ボールを違う領域内の缶に当てた場合は、0点。
-目的の缶をもとの位置(直径7cmの円)から少し出してしまっ...
-ダミーの缶がもとの位置から移動しても減点はしない。
&size(20){技術点の計算方法};
-以下の動作の精度・スピード・確実性などを含めた技術的な工...
-ボール探し取りにいくまでの動作 (3点)
-ボール掴む動作 (3点)
-ボールを運ぶ動作 (2点)
-ボールを缶に置く動作 (2点)
-2台のNXT、EV3の連携の良さ(2点)
-自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
-その他 (3点)
RIGHT:([[ロボティクス入門ゼミ 課題3:http://yakushi.shins...
*ロボット [#v0633c34]
今回作ったロボットはこれだ!! ☞☞☞&ref...
RIGHT:・・・[[前回:http://yakushi.shinshu-u.ac.jp/robotic...
**アーム [#c2400d32]
この[[課題>#q6465a8d]]では、ボールを拾って缶に乗せる。...
私達のチームでは、電池の消耗という点からボールを掴むモ...
これが実際にできたものである。&ref(3図_アームハンド.jpe...
***ハンドパーツ [#yf829ff3]
こちらは、ボールを掴むハンドパーツだ。&ref(3図_ハンド.j...
上部にあるギアが回ることで、下の二つのギアがそれぞれ逆...
下図はハンドパーツを上から見たものである。&color(blue){...
CENTER:&ref(3図1_ハンド2.png);&size(30){&color(red){ ...
***アームパーツ [#e2208b65]
こちらは、[[ハンド>#yf829ff3]]を上下させるアームパーツ...
写真の下側のモータがアームを上下させるようになっている。
実際に動かすと、アームの動きは下の図のようになる。黒い...
CENTER:|&ref(3図1_アーム2.png);|&size(50){&color(blue){&#...
モータ一つだと負担が大きいので、二つ並べて使用し負荷を...
&br;&br;
また、[[ハンド>#yf829ff3]]へ動力を伝える為に、軸となる...
**車体 [#x9f89386]
車体はブロックでフレームを製作し、そこにモータやタイヤ...
&ref(3図_車体1.JPG);
しかし、アームが予想以上に重く、車体を支える為アームの...
&ref(3図1_車体2.png);&br;&br;&br;&br;
また、モータへの負担を軽減するため、ここにもギアを使用...
&ref(3図_車体3.jpeg);
ここのギアの配置は次にようになっている。
|CENTER:横から|CENTER:上から|
|&ref(3図1_タイヤ1.png);|&ref(3図1_タイヤ2.png);|
RIGHT:(この図はギア4とタイヤが、ギア3の左側に設置してあ...
&br;&br;&br;
モータと&color(red){ギア1};、&color(green){ギア2};と&co...
|CENTER:ギア|CENTER:歯数|
|CENTER:ギア1|CENTER:8|
|CENTER:ギア2|CENTER:16|
|CENTER:ギア3|CENTER:8|
|CENTER:ギア4|CENTER:24|
表から、ギア比は、次の式に歯数を代入することで求められ...
CENTER:&ref(3図_ギア1.png);&br;
ここで、ギア2とギア3は直結していて、回転数が等しいので...
CENTER:&ref(3図_ギア2.png);&br;
よって、ギア比は&size(20){6};となった。
つまり、モータにかかる負担が6分の1になったことになる。
**センサ [#z328fbbf]
今回は、缶だけでなくボールも探さないといけないので、[[...
| |CENTER:一つ目|CENTER:二つ目|
|場所|CENTER:アームの先端|CENTER:アームの下|
|写真|&ref(3図_センサ1.jpeg);|&ref(3図_センサ2.jpeg);|
|役割|CENTER:缶の探索|CENTER:ボールの探索|
&br;&br;&br;
また、ライントレースに使用する光センサもアームの下に付...
CENTER:&ref(3図_センサ3.jpeg);
*プログラム [#ld595702]
このロボットではハンドに一つ、アームに二つ、タイヤに二...
Bluetoothを使用する時、片方を"master"、もう片方を"slave...
ライントレース等、[[前回の課題のプログラム>http://yakus...
&br;&br;&br;&br;
通るコースは次のようにした。&br;
CENTER:&ref(3図1_コース2.png);&br;&br;&br;
+Yから出てIまで進む。
+&color(blue){ボール};を取って、円の中心まで進む。
+&color(blue){缶};を探して乗せて、戻る。
+円の中心からIまで戻る。
+IからEとLの間まで戻る。
+Eで曲がり、Fを超えて&color(red){ボール};が見つかるまで進...
+&color(red){ボール};を掴む。
+その位置のまま&color(red){缶};を探して乗せて、戻る。
**車体(master) [#ab79b5a3]
***マクロ [#j415ae0e]
Bluetoothの通信はマクロでまとめた。
&color(blue){BluetoothStatus(slave番号)};は通信ができてい...
&color(blue){RemoteStartProgram(slave番号,実行形式のプロ...
/*******************************************************...
ライントレ____@('ω' )@彡_____ス・プログラム
********************************************************...
/*マクロ*/
#define conn 1 //Bluetoothのスレーブ番号
#define fw Off(OUT_BC);OnFwd(OUT_BC,30); // 直進
#define lt Off(OUT_BC);OnFwd(OUT_B,35); // 左回
#define rt Off(OUT_BC);OnFwd(OUT_C,35); // 右回
#define rrt Off(OUT_BC);OnFwd(OUT_C,20);OnFwd(OUT_B,-60)...
#define llt Off(OUT_BC);OnFwd(OUT_B,20);OnFwd(OUT_C,-60)...
#define wait_sec Off(OUT_BC);Wait(1000); //一時停止
#define mini_go Off(OUT_BC);OnFwd(OUT_BC,30);Wait(1500);...
#define def_arm_up until(BluetoothStatus(conn)==NO_ERR);...
RemoteStartProgram(conn,"arm_up.rxe");\
Wait(4000);
#define def_arm_down until(BluetoothStatus(conn)==NO_ERR...
RemoteStartProgram(conn,"arm_down.r...
Wait(4000);
#define def_hand_open until(BluetoothStatus(conn)==NO_ER...
RemoteStartProgram(conn,"hand_open...
Wait(4000);
#define def_hand_close until(BluetoothStatus(conn)==NO_E...
RemoteStartProgram(conn,"hand_clo...
Wait(4000);
const float tire_diameter = 5.75; //タイヤの直径
const float tire_axis = 17.7; //タイヤ間の距離
const int gear_ratio = 6; //ギア比
const float pi=3.14159; //円周率
const int en=360; //円 360度
***ボール探索 [#x34c2eca]
基本は[[課題2のプログラム>http://yakushi.shinshu-u.ac.j...
void search_throw(string side_select,float rotate_angle)...
SetSensorLowspeed(S2);
int d_min=1000,d_gosa=11,side_flag=0;//side_flagは旋...
long ang_min=0,angle=0,d_angle=0;//d_angleは、缶との...
if (side_select=="right"){ //右旋回なら
side_flag=1; //1を旋回角度にかける
}else if(side_select=="left"){ //左旋回なら
side_flag=-1; //-1を旋回角度にかける
}
ResetTachoCount(OUT_BC);
OnFwdSync(OUT_BC,30,100*side_flag);
while(((tire_diameter/(tire_axis*gear_ratio))*MotorT...
if(d_min>SensorUS(S2)){
d_min=SensorUS(S2);
angle=MotorTachoCount(OUT_C);
}
}
ang_min=MotorTachoCount(OUT_C)-angle;
Off(OUT_BC);
Wait(1000);
ResetTachoCount(OUT_BC);
RotateMotorEx(OUT_BC, 40, ang_min, -100*side_flag, t...
Off(OUT_BC);
ResetTachoCount(OUT_BC);
if(7<SensorUS(S2)){ //缶との距離が7センチよ...
OnFwd(OUT_BC,40); //パワー40で進む
while(7<SensorUS(S2) || 40>(pi*tire_diameter*Mot...
d_angle=MotorTachoCount(OUT_C); //モータC...
}
Off(OUT_BC);//停止
RotateMotor(OUT_BC,30,en*2*gear_ratio/(pi*tire_d...
}
def_arm_up;//アームを上げる
RotateMotor(OUT_BC,30,en*d_gosa*gear_ratio/(pi*tire_...
Wait(700);
def_hand_open;//ボールを放す
RotateMotor(OUT_BC,-30,en*d_gosa*gear_ratio/(pi*tire...
def_arm_down;//アームを下げる
ResetTachoCount(OUT_BC);
RotateMotorEx(OUT_BC, 40, angle, -100*side_flag, tru...
Off(OUT_BC);
}
***ライントレース [#h6986ec0]
基本は[[課題2のプログラム>http://yakushi.shinshu-u.ac.j...
void blk_selection(int blk_select){
if(blk_select!=1){
wait_sec;
}
if(blk_select!=0){
mini_go;
}
}
void follow_line(int bw_time,long min_t,int blk_cnt,stri...
SetSensorLowspeed(S3);
int bb_cnt;//消し忘れた変数
int B_cnt=0;//上に同じ
long t0,t1,start_t; // t0,t1,start_t 時間変数の定義
SetSensorLight(S1); // 光センサ定義
t1=CurrentTick(); // 経過時間
t0=CurrentTick(); // カーブ初期時間
start_t=CurrentTick(); // 追尾初期時間
int right_var; // 光センサ値用変数
while(t1-start_t<min_t || min_t<0){
if(sensor_switch=="on"){//sensor_switchがonの時
if(SensorUS(S3)<16){//超音波センサ2の値が16...
break;//ループから抜ける
}
}
/*----------------↓繰り返し↓-----------------*/
right_var = SENSOR_1; // 光センサ値代入
if(invert_info=="on"){ // ラインの右か左か "off...
right_var = right_var*(-1)+91;}
if (right_var>50){
/*********右回り↓********/
if (t1-t0>bw_time){ // 右回でbw_taime[ms]以...
if (blk_cnt>=0 && blk_cnt<=2 && invert...
blk_selection(blk_cnt);
break;
}else{
rrt;}
}else{ // 右回
rt;}
/**********直進↓********/
}else if (right_var>40){
fw;
t0=CurrentTick(); // カーブ初期時間の更新
/*********左回り↓*******/
}else{
if (t1-t0>bw_time){ // 左回で bw_taime[ms...
if (blk_cnt>=0 && blk_cnt<=2 && invert...
blk_selection(blk_cnt);
break;
}else{
llt;}
}else{ // 左回
lt;}}
t1=CurrentTick(); //経過時間
/*----------------↑繰り返し↑-----------------*/
}Off(OUT_BC);
}
***メイン [#mc1d8a71]
task main(){
// -Y-
string invert_str="off";
int b_tyokusin=10,r_back=22;//b_tyokusinは円に入る時...
//blue-ball
follow_line(1200, -1,1,invert_str,"off");//Eまで進ん...
follow_line(800, -1,0,invert_str,"off");//Iまで進ん...
def_hand_close;//ボールを掴む
ResetTachoCount(OUT_BC);
RotateMotor(OUT_BC,30,en*b_tyokusin*gear_ratio/(pi*t...
Off(OUT_BC);
search_throw("right",55.0);//右旋回、55°で缶を探す
Wait(2000);
RotateMotor(OUT_BC,-30,en*b_tyokusin*gear_ratio/(pi*...
Off(OUT_BC);
//red_ball
def_arm_up;//アームを上げる
RotateMotor(OUT_BC,-30,en*r_back*gear_ratio/(pi*tire...
follow_line(600,1200000,-1,invert_str,"on");//1200秒...
RotateMotor(OUT_BC,-30,en*3*gear_ratio/(pi*tire_diam...
def_arm_down;//アームを下げる
def_hand_close;//ボールを掴む
search_throw("left",270);//左旋回、270°で缶を探す
Wait(1000);Off(OUT_BC);
}
**アーム(slave) [#l3cc1c8c]
アーム側では四つの簡単なプログラムを容易して、マスター...
モータAがハンドの操作、モータB・Cがアームの操作を担当し...
***アームを上げる("arm_up.rxe") [#n519aabf]
task main(){
RotateMotor(OUT_BC,-40,90);//モータB・Cをパワー40、...
}
***アームを下げる("arm_down.rxe") [#jc43045c]
task main(){
RotateMotor(OUT_BC,10,90);//モータB・Cをパワー10、9...
Wait(300); //300[ms]待機
Off(OUT_BC); //モータB・Cを停止
ResetTachoCount(OUT_BC);//モータB・Cの回転角をリセ...
}
***掴む("hand_close.rxe") [#yc8c03b7]
task main(){
RotateMotor(OUT_A,-30,320);//モータAをパワー30、320...
Wait(300); //300[ms]待機
RotateMotor(OUT_BC,-40,15);//モータB・Cをパワー40、...
Off(OUT_ABC); //モータA・B・Cを停止
}
***放す("hand_open.rxe") [#qd0e4d4a]
task main(){
RotateMotor(OUT_A,30,320);//モータAをパワー30、320°...
}
*結果・反省感想 [#i1c12e19]
-今回の課題は、テスト期間と重なっていたことで、製作時間が...
-本番では、一つ目のボールを掴むまではできたのだが、ハンド...
-この講義では、結果こそ奮わなかったものの多くのことを学べ...
-
-
終了行:
[[2018b/Member]]
目次
#contents
*課題3 [#q6465a8d]
今回の課題は・・・
CENTER:&size(30){&color(blue){青};と&color(red){赤};のボ...
RIGHT:・・・だ! &br;
**コース [#r05640f7]
&size(30){フィールドの説明};
&ref(3図_コース.png);
-フィールドは課題2で使用した紙を使用する。
-350ml缶(中が入っていても空でよい)は逆さまにして使い、ロ...
-その番号の次の番号のところにもダミーの缶を置くことができ...
-空き缶には色をつけたり文字や記号を書いてもよい。あるいは...
-赤と青のボールは、図のように所定の場所に置いておく。その...
**ルール [#qef4d143]
&size(20){基本ルール};
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図のX地点または(および)Y地点からスタートする。ただし接...
-赤いボールを図のピンクのいずれかに置いた缶に、青いボール...
-開始の合図から5秒以内にスタートボタンを押す作業を完了す...
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
-途中でうまく動かなくなった場合、1回限り再スタートするこ...
&size(20){基本得点の計算方法};
-ボールを一つ乗せればそれぞれ10点、二つとも乗せればボーナ...
-ダミーの缶を設置した上で、正しい缶に乗せれば、それぞれさ...
-ボールを目的の缶に当てることができれば、それぞれ4点。
-ボールを同じ領域内の間違った缶に乗せた場合は、それぞれ6...
-ボールを同じ領域内の間違った缶に当てた場合は、それぞれ2...
-ボールを違う領域内の缶に乗せた場合は、それぞれ2点。
-ボールを違う領域内の缶に当てた場合は、0点。
-目的の缶をもとの位置(直径7cmの円)から少し出してしまっ...
-ダミーの缶がもとの位置から移動しても減点はしない。
&size(20){技術点の計算方法};
-以下の動作の精度・スピード・確実性などを含めた技術的な工...
-ボール探し取りにいくまでの動作 (3点)
-ボール掴む動作 (3点)
-ボールを運ぶ動作 (2点)
-ボールを缶に置く動作 (2点)
-2台のNXT、EV3の連携の良さ(2点)
-自立型のロボットとしての形や動作の美しさ、斬新さ(2点)
-その他 (3点)
RIGHT:([[ロボティクス入門ゼミ 課題3:http://yakushi.shins...
*ロボット [#v0633c34]
今回作ったロボットはこれだ!! ☞☞☞&ref...
RIGHT:・・・[[前回:http://yakushi.shinshu-u.ac.jp/robotic...
**アーム [#c2400d32]
この[[課題>#q6465a8d]]では、ボールを拾って缶に乗せる。...
私達のチームでは、電池の消耗という点からボールを掴むモ...
これが実際にできたものである。&ref(3図_アームハンド.jpe...
***ハンドパーツ [#yf829ff3]
こちらは、ボールを掴むハンドパーツだ。&ref(3図_ハンド.j...
上部にあるギアが回ることで、下の二つのギアがそれぞれ逆...
下図はハンドパーツを上から見たものである。&color(blue){...
CENTER:&ref(3図1_ハンド2.png);&size(30){&color(red){ ...
***アームパーツ [#e2208b65]
こちらは、[[ハンド>#yf829ff3]]を上下させるアームパーツ...
写真の下側のモータがアームを上下させるようになっている。
実際に動かすと、アームの動きは下の図のようになる。黒い...
CENTER:|&ref(3図1_アーム2.png);|&size(50){&color(blue){&#...
モータ一つだと負担が大きいので、二つ並べて使用し負荷を...
&br;&br;
また、[[ハンド>#yf829ff3]]へ動力を伝える為に、軸となる...
**車体 [#x9f89386]
車体はブロックでフレームを製作し、そこにモータやタイヤ...
&ref(3図_車体1.JPG);
しかし、アームが予想以上に重く、車体を支える為アームの...
&ref(3図1_車体2.png);&br;&br;&br;&br;
また、モータへの負担を軽減するため、ここにもギアを使用...
&ref(3図_車体3.jpeg);
ここのギアの配置は次にようになっている。
|CENTER:横から|CENTER:上から|
|&ref(3図1_タイヤ1.png);|&ref(3図1_タイヤ2.png);|
RIGHT:(この図はギア4とタイヤが、ギア3の左側に設置してあ...
&br;&br;&br;
モータと&color(red){ギア1};、&color(green){ギア2};と&co...
|CENTER:ギア|CENTER:歯数|
|CENTER:ギア1|CENTER:8|
|CENTER:ギア2|CENTER:16|
|CENTER:ギア3|CENTER:8|
|CENTER:ギア4|CENTER:24|
表から、ギア比は、次の式に歯数を代入することで求められ...
CENTER:&ref(3図_ギア1.png);&br;
ここで、ギア2とギア3は直結していて、回転数が等しいので...
CENTER:&ref(3図_ギア2.png);&br;
よって、ギア比は&size(20){6};となった。
つまり、モータにかかる負担が6分の1になったことになる。
**センサ [#z328fbbf]
今回は、缶だけでなくボールも探さないといけないので、[[...
| |CENTER:一つ目|CENTER:二つ目|
|場所|CENTER:アームの先端|CENTER:アームの下|
|写真|&ref(3図_センサ1.jpeg);|&ref(3図_センサ2.jpeg);|
|役割|CENTER:缶の探索|CENTER:ボールの探索|
&br;&br;&br;
また、ライントレースに使用する光センサもアームの下に付...
CENTER:&ref(3図_センサ3.jpeg);
*プログラム [#ld595702]
このロボットではハンドに一つ、アームに二つ、タイヤに二...
Bluetoothを使用する時、片方を"master"、もう片方を"slave...
ライントレース等、[[前回の課題のプログラム>http://yakus...
&br;&br;&br;&br;
通るコースは次のようにした。&br;
CENTER:&ref(3図1_コース2.png);&br;&br;&br;
+Yから出てIまで進む。
+&color(blue){ボール};を取って、円の中心まで進む。
+&color(blue){缶};を探して乗せて、戻る。
+円の中心からIまで戻る。
+IからEとLの間まで戻る。
+Eで曲がり、Fを超えて&color(red){ボール};が見つかるまで進...
+&color(red){ボール};を掴む。
+その位置のまま&color(red){缶};を探して乗せて、戻る。
**車体(master) [#ab79b5a3]
***マクロ [#j415ae0e]
Bluetoothの通信はマクロでまとめた。
&color(blue){BluetoothStatus(slave番号)};は通信ができてい...
&color(blue){RemoteStartProgram(slave番号,実行形式のプロ...
/*******************************************************...
ライントレ____@('ω' )@彡_____ス・プログラム
********************************************************...
/*マクロ*/
#define conn 1 //Bluetoothのスレーブ番号
#define fw Off(OUT_BC);OnFwd(OUT_BC,30); // 直進
#define lt Off(OUT_BC);OnFwd(OUT_B,35); // 左回
#define rt Off(OUT_BC);OnFwd(OUT_C,35); // 右回
#define rrt Off(OUT_BC);OnFwd(OUT_C,20);OnFwd(OUT_B,-60)...
#define llt Off(OUT_BC);OnFwd(OUT_B,20);OnFwd(OUT_C,-60)...
#define wait_sec Off(OUT_BC);Wait(1000); //一時停止
#define mini_go Off(OUT_BC);OnFwd(OUT_BC,30);Wait(1500);...
#define def_arm_up until(BluetoothStatus(conn)==NO_ERR);...
RemoteStartProgram(conn,"arm_up.rxe");\
Wait(4000);
#define def_arm_down until(BluetoothStatus(conn)==NO_ERR...
RemoteStartProgram(conn,"arm_down.r...
Wait(4000);
#define def_hand_open until(BluetoothStatus(conn)==NO_ER...
RemoteStartProgram(conn,"hand_open...
Wait(4000);
#define def_hand_close until(BluetoothStatus(conn)==NO_E...
RemoteStartProgram(conn,"hand_clo...
Wait(4000);
const float tire_diameter = 5.75; //タイヤの直径
const float tire_axis = 17.7; //タイヤ間の距離
const int gear_ratio = 6; //ギア比
const float pi=3.14159; //円周率
const int en=360; //円 360度
***ボール探索 [#x34c2eca]
基本は[[課題2のプログラム>http://yakushi.shinshu-u.ac.j...
void search_throw(string side_select,float rotate_angle)...
SetSensorLowspeed(S2);
int d_min=1000,d_gosa=11,side_flag=0;//side_flagは旋...
long ang_min=0,angle=0,d_angle=0;//d_angleは、缶との...
if (side_select=="right"){ //右旋回なら
side_flag=1; //1を旋回角度にかける
}else if(side_select=="left"){ //左旋回なら
side_flag=-1; //-1を旋回角度にかける
}
ResetTachoCount(OUT_BC);
OnFwdSync(OUT_BC,30,100*side_flag);
while(((tire_diameter/(tire_axis*gear_ratio))*MotorT...
if(d_min>SensorUS(S2)){
d_min=SensorUS(S2);
angle=MotorTachoCount(OUT_C);
}
}
ang_min=MotorTachoCount(OUT_C)-angle;
Off(OUT_BC);
Wait(1000);
ResetTachoCount(OUT_BC);
RotateMotorEx(OUT_BC, 40, ang_min, -100*side_flag, t...
Off(OUT_BC);
ResetTachoCount(OUT_BC);
if(7<SensorUS(S2)){ //缶との距離が7センチよ...
OnFwd(OUT_BC,40); //パワー40で進む
while(7<SensorUS(S2) || 40>(pi*tire_diameter*Mot...
d_angle=MotorTachoCount(OUT_C); //モータC...
}
Off(OUT_BC);//停止
RotateMotor(OUT_BC,30,en*2*gear_ratio/(pi*tire_d...
}
def_arm_up;//アームを上げる
RotateMotor(OUT_BC,30,en*d_gosa*gear_ratio/(pi*tire_...
Wait(700);
def_hand_open;//ボールを放す
RotateMotor(OUT_BC,-30,en*d_gosa*gear_ratio/(pi*tire...
def_arm_down;//アームを下げる
ResetTachoCount(OUT_BC);
RotateMotorEx(OUT_BC, 40, angle, -100*side_flag, tru...
Off(OUT_BC);
}
***ライントレース [#h6986ec0]
基本は[[課題2のプログラム>http://yakushi.shinshu-u.ac.j...
void blk_selection(int blk_select){
if(blk_select!=1){
wait_sec;
}
if(blk_select!=0){
mini_go;
}
}
void follow_line(int bw_time,long min_t,int blk_cnt,stri...
SetSensorLowspeed(S3);
int bb_cnt;//消し忘れた変数
int B_cnt=0;//上に同じ
long t0,t1,start_t; // t0,t1,start_t 時間変数の定義
SetSensorLight(S1); // 光センサ定義
t1=CurrentTick(); // 経過時間
t0=CurrentTick(); // カーブ初期時間
start_t=CurrentTick(); // 追尾初期時間
int right_var; // 光センサ値用変数
while(t1-start_t<min_t || min_t<0){
if(sensor_switch=="on"){//sensor_switchがonの時
if(SensorUS(S3)<16){//超音波センサ2の値が16...
break;//ループから抜ける
}
}
/*----------------↓繰り返し↓-----------------*/
right_var = SENSOR_1; // 光センサ値代入
if(invert_info=="on"){ // ラインの右か左か "off...
right_var = right_var*(-1)+91;}
if (right_var>50){
/*********右回り↓********/
if (t1-t0>bw_time){ // 右回でbw_taime[ms]以...
if (blk_cnt>=0 && blk_cnt<=2 && invert...
blk_selection(blk_cnt);
break;
}else{
rrt;}
}else{ // 右回
rt;}
/**********直進↓********/
}else if (right_var>40){
fw;
t0=CurrentTick(); // カーブ初期時間の更新
/*********左回り↓*******/
}else{
if (t1-t0>bw_time){ // 左回で bw_taime[ms...
if (blk_cnt>=0 && blk_cnt<=2 && invert...
blk_selection(blk_cnt);
break;
}else{
llt;}
}else{ // 左回
lt;}}
t1=CurrentTick(); //経過時間
/*----------------↑繰り返し↑-----------------*/
}Off(OUT_BC);
}
***メイン [#mc1d8a71]
task main(){
// -Y-
string invert_str="off";
int b_tyokusin=10,r_back=22;//b_tyokusinは円に入る時...
//blue-ball
follow_line(1200, -1,1,invert_str,"off");//Eまで進ん...
follow_line(800, -1,0,invert_str,"off");//Iまで進ん...
def_hand_close;//ボールを掴む
ResetTachoCount(OUT_BC);
RotateMotor(OUT_BC,30,en*b_tyokusin*gear_ratio/(pi*t...
Off(OUT_BC);
search_throw("right",55.0);//右旋回、55°で缶を探す
Wait(2000);
RotateMotor(OUT_BC,-30,en*b_tyokusin*gear_ratio/(pi*...
Off(OUT_BC);
//red_ball
def_arm_up;//アームを上げる
RotateMotor(OUT_BC,-30,en*r_back*gear_ratio/(pi*tire...
follow_line(600,1200000,-1,invert_str,"on");//1200秒...
RotateMotor(OUT_BC,-30,en*3*gear_ratio/(pi*tire_diam...
def_arm_down;//アームを下げる
def_hand_close;//ボールを掴む
search_throw("left",270);//左旋回、270°で缶を探す
Wait(1000);Off(OUT_BC);
}
**アーム(slave) [#l3cc1c8c]
アーム側では四つの簡単なプログラムを容易して、マスター...
モータAがハンドの操作、モータB・Cがアームの操作を担当し...
***アームを上げる("arm_up.rxe") [#n519aabf]
task main(){
RotateMotor(OUT_BC,-40,90);//モータB・Cをパワー40、...
}
***アームを下げる("arm_down.rxe") [#jc43045c]
task main(){
RotateMotor(OUT_BC,10,90);//モータB・Cをパワー10、9...
Wait(300); //300[ms]待機
Off(OUT_BC); //モータB・Cを停止
ResetTachoCount(OUT_BC);//モータB・Cの回転角をリセ...
}
***掴む("hand_close.rxe") [#yc8c03b7]
task main(){
RotateMotor(OUT_A,-30,320);//モータAをパワー30、320...
Wait(300); //300[ms]待機
RotateMotor(OUT_BC,-40,15);//モータB・Cをパワー40、...
Off(OUT_ABC); //モータA・B・Cを停止
}
***放す("hand_open.rxe") [#qd0e4d4a]
task main(){
RotateMotor(OUT_A,30,320);//モータAをパワー30、320°...
}
*結果・反省感想 [#i1c12e19]
-今回の課題は、テスト期間と重なっていたことで、製作時間が...
-本番では、一つ目のボールを掴むまではできたのだが、ハンド...
-この講義では、結果こそ奮わなかったものの多くのことを学べ...
-
-
ページ名: