2014a/Member/kowhich/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2014a/Member]]
*目次 [#nf1ce3c8]
#contents
*メンバー紹介 [#q3b25128]
[[suiden>http://yakushi.shinshu-u.ac.jp/robotics/?2014a%2...
[[kiyomizu>http://yakushi.shinshu-u.ac.jp/robotics/?2014a...
kowhich
[[ryu-abe>http://yakushi.shinshu-u.ac.jp/robotics/?2014a%...
※席順
*要求・リスク分析 [#pd9009e4]
まず、要求・リスク分析の結果を図に示す。ユースケース図を...
それに加えて、ミスユースケースというものも記述した。これ...
※UML2.0・・・Unified Modeling Languageの略称。大雑把に言...
表現方法である。2.0はそのバージョン。
#ref(uc1.PNG)
まず、第一に提供する機能として、課題をクリアする という...
課題をクリアするユースケースは、「光センサ・ライン閾値キ...
「紙コップを運ぶ」という3つのユースケースから成り立ってい...
まず、「走行する」ユースケースから見ていきたい。「走行す...
第一に「ライントレース走行」これはラインに沿って走行する...
次に、「ライン無視走行」これは、NXCで提供されているOnFwd(...
次に紙コップを運ぶことについて見ていく。「紙コップを置く...
時間帯によって、窓から差し込む光が時間によって変化してい...
図に、番号が振ってあるのは後の説明とユースケースと実現方...
*紙コップのデザインについて [#m850ba72]
光センサで判断するために、紙コップにデザインを施した。光...
#ref(cop.PNG)
**?真っ黒 [#k1ae08ed]
光センサで測定したところ、値は約37。
**?真っ白 [#cfe18d71]
光センサで測定したところ、値は約65。
**?縞々 [#idb27ee5]
3個目に一番迷ったが、結局この形になった。本来は灰色でやろ...
なので、黒線と白を混ぜれば灰色として認識するのではないか...
光センサで測定したところ、値は約47。
この値の差ならば、どの紙コップかを判断するかもスムーズに...
*機体の紹介 [#e9fd4c76]
まず、モータで歯車を動かす(1)。これにより、アームが閉じる...
#ref(robo1.PNG)
続いて、更にモータに力を加え、紙コップをつかむ。
#ref(./IMG_0946.JPG,30%,aaa)
そして、さらに力を加えると、閉じる方向に力は行かず、真上...
そして、これがコップの位置ずれを防ぐために設置されたバン...
#ref(robo2.PNG)
機体は一度ダイエットをし、非常に軽量化された。なぜダイエ...
(残念ながら、その時の写真はないですごめんなさい)
*プログラムについて [#r71a1af9]
今回私は独自にプログラムの作成を行っていた。関数を作り、...
なので、他のメンバーのページを見ていただければ、実際に使...
[#q3b25128]
**変数名について [#cbc77a37]
m_がついてるものはグローバル変数とした。それ以外はローカ...
そうすることにより、値の代入ミスなどを防ぐことが出来ると...
**定義 [#we70a57f]
/*変数宣言*/
int m_black=0;
int m_white=0;
int m_border=0;
int m_cop_A = 0;
int m_cop_B = 0;
int m_gap=0;
int m_kP =0;
int m_kD =0;
int m_old_value =0;
int m_current_value =0;
SetSensorLight(S3);
SetSensorTouch(S1);
SetSensorLight(S2);
**キャリブレーション 関数名:lightCalibration() 型:void [...
int nb=0;
int nw=0;
////↓黒値取得/////
while(!SENSOR_1){//押している間光センサの値を取得する...
m_black += SENSOR_3;//押された間の値を蓄積して記録し...
Wait(1);
nb++; //何度取得したかをカウントしておく
}
m_black = m_black/nb;//蓄積した値を何度取得したかの回...
Wait(500);
////↑黒値取得//////↓白値取得//////
while(!SENSOR_1){
m_white += SENSOR_3;
Wait(1);
nw++;
}
m_white = m_white/nw;
Wait(500);
////↑白値取得/////↓境界値算出//////
m_border =(m_white+m_black)/2 //境界値(閾値)は黒値と...
まず、タッチセンサが押されてる間,その場所の光センサの値を...
**ライントレース? [#p8f48759]
***直線用 関数名:forwardLineTrace(スピード:int) 型:void [...
int d;
int speedL;
int speedR;
int speed;
speed = スピード;
m_current_value = m_old_value;
m_old_value = SENSOR_3;
d=(m_old_value - m_current_value)*m_kD;
m_gap = (m_border - SENSOR_3)*m_kP + d
if(m_gap >= 0){
speedL = speed;
speedR = speed - m_gap;
}
else{
speedL = speed + m_gap;
speedR = speed;
}
OnFwd(OUT_B,speedL);
OnFwd(OUT_C,speedR);
まず、この関数はPD制御によって動いている。I制御を入れると...
まず、簡単に説明をすると、P制御とは、目標の値に近づけるた...
そして、D制御とは、その操作を行う反応速度のことである。
***カーブ用ライントレース 関数名:curveLineTrace(スピード:...
int speed;
speed = スピード;
if(m_border < SENSOR_3){
OnFwd(OUT_B,speed);
Off(OUT_C);
}
else{
OnFwd(OUT_C,speed);
Off(OUT_B);
}
Wait(2);
ON/OFF制御によって実現されている。センサの値のほうが閾値...
**??ライン無視走行 [#i6e1c56d]
OnFwd(port,speed);
OnRev(port.speed);
OnFwdSync(port,speed,0~100);//?左右モータを同期させる
などの元から提供されているAPIを利用して走行をする。つまり...
**?コップを置く 関数名:removeCop() 型:void [#lea8c0bb]
OnRev(OUT_A,75);
Wait(1000);
モータ逆回転で一定の時間回す必要がある。この値は適宜調整...
**?コップをつかむ 関数名 catchCop() 型:void [#aa13e149]
OnFwd(OUT_A,75);
Wait(1000);
置くのと同様である。置くのとは逆回転で実装されている。
**?紙コップを検知する 関数名:detectCop(検知したいコップの...
if(SENSOR_2 < 検知したいコップの明るさ数値){
return true;
}
検知したいコップの明るさ数値を関数に渡して、それが検知さ...
わざわざ値を入力して渡す必要があるので、使用する際非常に...
**?どの紙コップか判断する 関数名:judgeCop() 型:int [#ldf9...
if(SENSOR_3 < 37){
return 3;
}
if(SENSOR_3 < 65){
return 1;
}
if(SENSOR_3 < 40){
return 2;
}
それぞれの値に応じて1,2,3の値を返して判断を行う。これも先...
*感想・反省 [#z750df4d]
今回、私はプログラムをより組みやすいように心がけた。しか...
今回、期末試験と時間がかぶり、集まれる時間が取れなかっ...
終了行:
[[2014a/Member]]
*目次 [#nf1ce3c8]
#contents
*メンバー紹介 [#q3b25128]
[[suiden>http://yakushi.shinshu-u.ac.jp/robotics/?2014a%2...
[[kiyomizu>http://yakushi.shinshu-u.ac.jp/robotics/?2014a...
kowhich
[[ryu-abe>http://yakushi.shinshu-u.ac.jp/robotics/?2014a%...
※席順
*要求・リスク分析 [#pd9009e4]
まず、要求・リスク分析の結果を図に示す。ユースケース図を...
それに加えて、ミスユースケースというものも記述した。これ...
※UML2.0・・・Unified Modeling Languageの略称。大雑把に言...
表現方法である。2.0はそのバージョン。
#ref(uc1.PNG)
まず、第一に提供する機能として、課題をクリアする という...
課題をクリアするユースケースは、「光センサ・ライン閾値キ...
「紙コップを運ぶ」という3つのユースケースから成り立ってい...
まず、「走行する」ユースケースから見ていきたい。「走行す...
第一に「ライントレース走行」これはラインに沿って走行する...
次に、「ライン無視走行」これは、NXCで提供されているOnFwd(...
次に紙コップを運ぶことについて見ていく。「紙コップを置く...
時間帯によって、窓から差し込む光が時間によって変化してい...
図に、番号が振ってあるのは後の説明とユースケースと実現方...
*紙コップのデザインについて [#m850ba72]
光センサで判断するために、紙コップにデザインを施した。光...
#ref(cop.PNG)
**?真っ黒 [#k1ae08ed]
光センサで測定したところ、値は約37。
**?真っ白 [#cfe18d71]
光センサで測定したところ、値は約65。
**?縞々 [#idb27ee5]
3個目に一番迷ったが、結局この形になった。本来は灰色でやろ...
なので、黒線と白を混ぜれば灰色として認識するのではないか...
光センサで測定したところ、値は約47。
この値の差ならば、どの紙コップかを判断するかもスムーズに...
*機体の紹介 [#e9fd4c76]
まず、モータで歯車を動かす(1)。これにより、アームが閉じる...
#ref(robo1.PNG)
続いて、更にモータに力を加え、紙コップをつかむ。
#ref(./IMG_0946.JPG,30%,aaa)
そして、さらに力を加えると、閉じる方向に力は行かず、真上...
そして、これがコップの位置ずれを防ぐために設置されたバン...
#ref(robo2.PNG)
機体は一度ダイエットをし、非常に軽量化された。なぜダイエ...
(残念ながら、その時の写真はないですごめんなさい)
*プログラムについて [#r71a1af9]
今回私は独自にプログラムの作成を行っていた。関数を作り、...
なので、他のメンバーのページを見ていただければ、実際に使...
[#q3b25128]
**変数名について [#cbc77a37]
m_がついてるものはグローバル変数とした。それ以外はローカ...
そうすることにより、値の代入ミスなどを防ぐことが出来ると...
**定義 [#we70a57f]
/*変数宣言*/
int m_black=0;
int m_white=0;
int m_border=0;
int m_cop_A = 0;
int m_cop_B = 0;
int m_gap=0;
int m_kP =0;
int m_kD =0;
int m_old_value =0;
int m_current_value =0;
SetSensorLight(S3);
SetSensorTouch(S1);
SetSensorLight(S2);
**キャリブレーション 関数名:lightCalibration() 型:void [...
int nb=0;
int nw=0;
////↓黒値取得/////
while(!SENSOR_1){//押している間光センサの値を取得する...
m_black += SENSOR_3;//押された間の値を蓄積して記録し...
Wait(1);
nb++; //何度取得したかをカウントしておく
}
m_black = m_black/nb;//蓄積した値を何度取得したかの回...
Wait(500);
////↑黒値取得//////↓白値取得//////
while(!SENSOR_1){
m_white += SENSOR_3;
Wait(1);
nw++;
}
m_white = m_white/nw;
Wait(500);
////↑白値取得/////↓境界値算出//////
m_border =(m_white+m_black)/2 //境界値(閾値)は黒値と...
まず、タッチセンサが押されてる間,その場所の光センサの値を...
**ライントレース? [#p8f48759]
***直線用 関数名:forwardLineTrace(スピード:int) 型:void [...
int d;
int speedL;
int speedR;
int speed;
speed = スピード;
m_current_value = m_old_value;
m_old_value = SENSOR_3;
d=(m_old_value - m_current_value)*m_kD;
m_gap = (m_border - SENSOR_3)*m_kP + d
if(m_gap >= 0){
speedL = speed;
speedR = speed - m_gap;
}
else{
speedL = speed + m_gap;
speedR = speed;
}
OnFwd(OUT_B,speedL);
OnFwd(OUT_C,speedR);
まず、この関数はPD制御によって動いている。I制御を入れると...
まず、簡単に説明をすると、P制御とは、目標の値に近づけるた...
そして、D制御とは、その操作を行う反応速度のことである。
***カーブ用ライントレース 関数名:curveLineTrace(スピード:...
int speed;
speed = スピード;
if(m_border < SENSOR_3){
OnFwd(OUT_B,speed);
Off(OUT_C);
}
else{
OnFwd(OUT_C,speed);
Off(OUT_B);
}
Wait(2);
ON/OFF制御によって実現されている。センサの値のほうが閾値...
**??ライン無視走行 [#i6e1c56d]
OnFwd(port,speed);
OnRev(port.speed);
OnFwdSync(port,speed,0~100);//?左右モータを同期させる
などの元から提供されているAPIを利用して走行をする。つまり...
**?コップを置く 関数名:removeCop() 型:void [#lea8c0bb]
OnRev(OUT_A,75);
Wait(1000);
モータ逆回転で一定の時間回す必要がある。この値は適宜調整...
**?コップをつかむ 関数名 catchCop() 型:void [#aa13e149]
OnFwd(OUT_A,75);
Wait(1000);
置くのと同様である。置くのとは逆回転で実装されている。
**?紙コップを検知する 関数名:detectCop(検知したいコップの...
if(SENSOR_2 < 検知したいコップの明るさ数値){
return true;
}
検知したいコップの明るさ数値を関数に渡して、それが検知さ...
わざわざ値を入力して渡す必要があるので、使用する際非常に...
**?どの紙コップか判断する 関数名:judgeCop() 型:int [#ldf9...
if(SENSOR_3 < 37){
return 3;
}
if(SENSOR_3 < 65){
return 1;
}
if(SENSOR_3 < 40){
return 2;
}
それぞれの値に応じて1,2,3の値を返して判断を行う。これも先...
*感想・反省 [#z750df4d]
今回、私はプログラムをより組みやすいように心がけた。しか...
今回、期末試験と時間がかぶり、集まれる時間が取れなかっ...
ページ名: