2015a/Member/ko-rusuro-/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
今回のロボティクス入門の課題はライントレースです。具体的...
&ref(2015a/Member/ko-rusuro-/Mission2/コース2.png,50%);
今回は地点Cから十字路をまっすぐ進み、道中で玉を拾いながら...
&size(25){※最新のレポートは"結果2"以降です。お急ぎの方は...
#Contents
*結果 [#zf4df7b5]
**ロボットの画像 [#mbc0bafa]
&ref(2015a/Member/ko-rusuro-/Mission2/WIN_20150717_053511...
&ref(2015a/Member/ko-rusuro-/Mission2/WIN_20150717_053528...
モーターCでアームを動かし、モーターA,Bで左タイヤ、右タイ...
**所要時間 [#s3e62b9f]
ロボット組立:三時間
プログラミング:八時間
レポート:二時間
**目標達成度 [#xbe7e64a]
&ref(2015a/Member/ko-rusuro-/Mission2/WIN_20150717_053629...
タイヤのある位置まで制御することが出来ました。
その過程を説明すると次のようになります。「交差点で一時停...
***この状態で課題を出した理由 [#p20d2857]
+プログラムの直すべき点が何度見返しても見つからない
+朝を迎えたから
*プログラム [#rc828eef]
**定義 [#raa67db7]
#define Threshold 55 //閾値
今回は定義をあまり必要としなかったので閾値のみ定義するこ...
**サブルーチン [#oa0be254]
***交差点の対処 [#rbba37e3]
sub aida(){ //交差点と丁字路の間を制御する
ResetTachoCount(OUT_AB);
RotateMotor(OUT_AB,30,240);
Off(OUT_AB);
Wait(2000);
ResetTachoCount(OUT_B);
RotateMotor(OUT_B,30,190);
}
これは交差点と丁字路の間を機械の判断に任せるには大変高度...
***ボールの回収 [#d61a2b4c]
sub tsukamu(){ //ボールを掴む
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,20,100);
}
これも角度を指定することにより安定して同じ距離動かすこと...
***ボールのシュート [#s9048b81]
sub shot(){ //ボールを相手のゴールにシュウウウン!
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,40,-100);
OnFwdSync(OUT_AB,40,0);
Wait(200);
Off(OUT_ABC);
}
一瞬だけ動かしてボールを前に押し出しました。
**メインプログラム [#wd3f5e3d]
ここからはコメント文を用いて説明させていただきます。
task main(){
SetSensorLight(S3);//光センサーの使用
int kousatenn=0;//交差点を判断するための値
int last=0;//二回目の交差点に行くための値
int syuuryou=0;//終わるための値
while(kousatenn < 400 && syuuryou == 0){ //交差点カ...
OnFwdSync(OUT_AB,30,(SENSOR_3-Threshold)*23/10);...
if(40>SENSOR_3){ //交差点カウンターを貯める
kousatenn++;
}else {
kousatenn = 0;
}
Wait(1);//検知の間隔
}
while(kousatenn >= 400 && last == 0){ //交差点カウン...
Off(OUT_ABC);
Wait(2000);
tsukamu();
aida();
last = 1; //2つの交差点終了
kousatenn = 0;//交差点カウンターのリセット
}
while(kousatenn >= 400 && last == 1){ //交差点カウン...
Off(OUT_ABC);
Wait(2000);
shot();
kousatenn = 0;//交差点カウンターのリセット
syuuryou = 1;//終了の合図
}
}
*反省 [#uc2100dd]
今回は悩むことが少なかった。その代わりにとても越えられな...
**初め [#g00b19ce]
ロボット作りでは光センサーの位置を決めるのに時間がかかっ...
**中盤 [#t255bb7a]
ロボティクス入門のホームページにある「サーボ・モータの機...
**終盤 [#r58dbad8]
所々プログラムにミスが見つかるようになったが直すことが出...
*感想 [#t7374085]
一度詰まってしまうと新しい解決策を見つけるには大変な労力...
#br
*結果2 [#aa1a6d97]
CENTER:&size(25){もう一度チャレンジしてみました};
ルートはそのままC〜Aに、マシン、プログラム、情熱、その他...
説明を始める前に前回の反省点を考えていきたいと思います。
**前回の反省点とその解説 [#x1121e3b]
-プログラムがループしないこと
前回、"while"で囲まれた三つのプログラムが二つ目の"while"...
-後輪の挙動が不安定であること
説明書に書かれていた方法で作られた360度どの方向にも回る便...
-タイヤの動きがなめらかにならなかったこと
これはライントレース中のプログラムが原因だと考えられます...
OnFwdSync(OUT_AB,30,(SENSOR_3-Threshold)*23/10);//ライン...
この三つめの値を複雑に書いてしまったため分かりにくいプロ...
-不要なプログラムが多々あったこと
全くスマートじゃないと思います。
**二回目の課題達成度 [#y9c9cd6b]
無事走り切りました。
**ロボットの画像 [#u5529147]
&ref(2015a/Member/ko-rusuro-/Mission2/kadai2-1.jpg,17%);
&ref(2015a/Member/ko-rusuro-/Mission2/kadai2-2.jpg,17%);
&ref(2015a/Member/ko-rusuro-/Mission2/kadai2-3.jpg,17%);
先ほど問題点の解説で説明した後輪についてです。左の画像を...
中央の画像はアームとライトセンサーの位置関係を示すもので...
右の画像はロボット全体が分かりやすく見えるように撮ったも...
**プログラム [#yb61cdde]
***定義 [#pe6b1850]
#define max 61
#define min 31
#define LEVEL (max-min)/8 //9段階に分けるための値
ライトセンサーの最大の値と最小の値を調べて定義しました。L...
***変数値 [#r2751bcb]
int kousatenn=0; //交差点を判断するための値
int keizoku=0; //プログラムをどの段階まで進んだか認識さ...
int syuuryou=0; //プログラムを終わらせるための値
int goukaku=0; //交差点であるか確かめるための値
int hanntenn=0; //プログラムを反転させるための値
コメント文で説明している通りです。
***サブルーチン [#if5930ce]
-ボールを掴む
void tsukamu(){ //ボールを掴む
RotateMotor(OUT_C,50,-100);
}
回転角度を指定することで毎回同じ動作を続けることが出来る...
-十字路での動作
void juujiro(){ //十字路突入時の動作
if(goukaku==1){
Off(OUT_AB);
Wait(2000);
tsukamu();
RotateMotor(OUT_AB,50,180);
RotateMotor(OUT_B,50,200);
RotateMotor(OUT_A,50,-90);
Off(OUT_AB);
Wait(2000);
keizoku++;
hanntenn++;
}else {
Off(OUT_AB);
}
}
"goukaku"という変数値は次の「交差点であるかの確認」という...
-交差点であるかの確認
void kakuninn(){ //交差点であるかの確認
Off(OUT_AB);
Wait(500);
RotateMotor(OUT_B,50,60);
Off(OUT_B);
if(SENSOR_3 <= min+LEVEL*2){
goukaku++;
RotateMotor(OUT_B,50,-60);
Off(OUT_B);
}else {
RotateMotor(OUT_B,50,-60);
}
}
マシーンの左のタイヤだけ前進させることで、C〜十字路を移動...
-ボールの射出
void shot(){ //ボールを相手のゴールにシュート
RotateMotor(OUT_C,50,100);
OnFwdSync(OUT_AB,70,0);
Wait(300);
Off(OUT_ABC);
syuuryou++;
}
ボールを相手のゴールにシュートします。"syuuryou"という変...
-ライントレースをするプログラム
inline void sennjou(int douki){ //線の上に来た時のプログ...
OnFwdSync(OUT_AB,40,douki/5);
}
inline void turn_left(){ //左に曲がるプログラム
OnFwdSync(OUT_AB,30+hanntenn*10,-40);
}
inline void turn_right(){ //右に曲がるプログラム
OnFwdSync(OUT_AB,40-hanntenn*10,40);
}
inline void Line_Trace(){ //ライントレースをするプログラム
if(hanntenn==0){ //C〜十字路を移動中のライントレース
if(SENSOR_3<=min+10){
turn_left();
if(SENSOR_3<=min+7){
kousatenn+=1;
}
}else if (SENSOR_3>=max-10){
turn_right();
kousatenn=0;
}else {
sennjou(SENSOR_3-(max+min)/2); //滑らかに動...
}
}
if(hanntenn==1){ //丁字路〜Aを移動中のライントレース
if(SENSOR_3>=max-10){
turn_left();
kousatenn=0;
}else if (SENSOR_3<=min+10){
turn_right();
if(SENSOR_3<=min+7){
kousatenn++;
}
}else {
sennjou(SENSOR_3-(max+min)/2);
}
}
Wait(1);
Float(OUT_AB);
}
"kousatenn"という変数値でマシーンが曲がりきる前に交差点だ...
***メインプログラム [#he2cd850]
task main(){
SetSensorLight(S3);
RotateMotor(OUT_C,50,100); //閉じた状態からスタート...
while(syuuryou==0){
Line_Trace();
if(kousatenn>=200 && keizoku==0){
kakuninn();
juujiro();
kousatenn=0;
}
if(kousatenn>=100 && keizoku==1){
shot();
kousatenn=0;
}
}
}
**二回目の製作時間 [#i0e80cd0]
+ロボットの組み立て・・・3時間
+プログラムの作成・・・5時間
+レポートの作成・・・5時間
**二回目の考察と感想 [#k028c416]
二回目ということもありプログラムの作成にはあまり時間が掛...
また、マシーンが縦に長くなってしまったことにより左右に振...
終了行:
今回のロボティクス入門の課題はライントレースです。具体的...
&ref(2015a/Member/ko-rusuro-/Mission2/コース2.png,50%);
今回は地点Cから十字路をまっすぐ進み、道中で玉を拾いながら...
&size(25){※最新のレポートは"結果2"以降です。お急ぎの方は...
#Contents
*結果 [#zf4df7b5]
**ロボットの画像 [#mbc0bafa]
&ref(2015a/Member/ko-rusuro-/Mission2/WIN_20150717_053511...
&ref(2015a/Member/ko-rusuro-/Mission2/WIN_20150717_053528...
モーターCでアームを動かし、モーターA,Bで左タイヤ、右タイ...
**所要時間 [#s3e62b9f]
ロボット組立:三時間
プログラミング:八時間
レポート:二時間
**目標達成度 [#xbe7e64a]
&ref(2015a/Member/ko-rusuro-/Mission2/WIN_20150717_053629...
タイヤのある位置まで制御することが出来ました。
その過程を説明すると次のようになります。「交差点で一時停...
***この状態で課題を出した理由 [#p20d2857]
+プログラムの直すべき点が何度見返しても見つからない
+朝を迎えたから
*プログラム [#rc828eef]
**定義 [#raa67db7]
#define Threshold 55 //閾値
今回は定義をあまり必要としなかったので閾値のみ定義するこ...
**サブルーチン [#oa0be254]
***交差点の対処 [#rbba37e3]
sub aida(){ //交差点と丁字路の間を制御する
ResetTachoCount(OUT_AB);
RotateMotor(OUT_AB,30,240);
Off(OUT_AB);
Wait(2000);
ResetTachoCount(OUT_B);
RotateMotor(OUT_B,30,190);
}
これは交差点と丁字路の間を機械の判断に任せるには大変高度...
***ボールの回収 [#d61a2b4c]
sub tsukamu(){ //ボールを掴む
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,20,100);
}
これも角度を指定することにより安定して同じ距離動かすこと...
***ボールのシュート [#s9048b81]
sub shot(){ //ボールを相手のゴールにシュウウウン!
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,40,-100);
OnFwdSync(OUT_AB,40,0);
Wait(200);
Off(OUT_ABC);
}
一瞬だけ動かしてボールを前に押し出しました。
**メインプログラム [#wd3f5e3d]
ここからはコメント文を用いて説明させていただきます。
task main(){
SetSensorLight(S3);//光センサーの使用
int kousatenn=0;//交差点を判断するための値
int last=0;//二回目の交差点に行くための値
int syuuryou=0;//終わるための値
while(kousatenn < 400 && syuuryou == 0){ //交差点カ...
OnFwdSync(OUT_AB,30,(SENSOR_3-Threshold)*23/10);...
if(40>SENSOR_3){ //交差点カウンターを貯める
kousatenn++;
}else {
kousatenn = 0;
}
Wait(1);//検知の間隔
}
while(kousatenn >= 400 && last == 0){ //交差点カウン...
Off(OUT_ABC);
Wait(2000);
tsukamu();
aida();
last = 1; //2つの交差点終了
kousatenn = 0;//交差点カウンターのリセット
}
while(kousatenn >= 400 && last == 1){ //交差点カウン...
Off(OUT_ABC);
Wait(2000);
shot();
kousatenn = 0;//交差点カウンターのリセット
syuuryou = 1;//終了の合図
}
}
*反省 [#uc2100dd]
今回は悩むことが少なかった。その代わりにとても越えられな...
**初め [#g00b19ce]
ロボット作りでは光センサーの位置を決めるのに時間がかかっ...
**中盤 [#t255bb7a]
ロボティクス入門のホームページにある「サーボ・モータの機...
**終盤 [#r58dbad8]
所々プログラムにミスが見つかるようになったが直すことが出...
*感想 [#t7374085]
一度詰まってしまうと新しい解決策を見つけるには大変な労力...
#br
*結果2 [#aa1a6d97]
CENTER:&size(25){もう一度チャレンジしてみました};
ルートはそのままC〜Aに、マシン、プログラム、情熱、その他...
説明を始める前に前回の反省点を考えていきたいと思います。
**前回の反省点とその解説 [#x1121e3b]
-プログラムがループしないこと
前回、"while"で囲まれた三つのプログラムが二つ目の"while"...
-後輪の挙動が不安定であること
説明書に書かれていた方法で作られた360度どの方向にも回る便...
-タイヤの動きがなめらかにならなかったこと
これはライントレース中のプログラムが原因だと考えられます...
OnFwdSync(OUT_AB,30,(SENSOR_3-Threshold)*23/10);//ライン...
この三つめの値を複雑に書いてしまったため分かりにくいプロ...
-不要なプログラムが多々あったこと
全くスマートじゃないと思います。
**二回目の課題達成度 [#y9c9cd6b]
無事走り切りました。
**ロボットの画像 [#u5529147]
&ref(2015a/Member/ko-rusuro-/Mission2/kadai2-1.jpg,17%);
&ref(2015a/Member/ko-rusuro-/Mission2/kadai2-2.jpg,17%);
&ref(2015a/Member/ko-rusuro-/Mission2/kadai2-3.jpg,17%);
先ほど問題点の解説で説明した後輪についてです。左の画像を...
中央の画像はアームとライトセンサーの位置関係を示すもので...
右の画像はロボット全体が分かりやすく見えるように撮ったも...
**プログラム [#yb61cdde]
***定義 [#pe6b1850]
#define max 61
#define min 31
#define LEVEL (max-min)/8 //9段階に分けるための値
ライトセンサーの最大の値と最小の値を調べて定義しました。L...
***変数値 [#r2751bcb]
int kousatenn=0; //交差点を判断するための値
int keizoku=0; //プログラムをどの段階まで進んだか認識さ...
int syuuryou=0; //プログラムを終わらせるための値
int goukaku=0; //交差点であるか確かめるための値
int hanntenn=0; //プログラムを反転させるための値
コメント文で説明している通りです。
***サブルーチン [#if5930ce]
-ボールを掴む
void tsukamu(){ //ボールを掴む
RotateMotor(OUT_C,50,-100);
}
回転角度を指定することで毎回同じ動作を続けることが出来る...
-十字路での動作
void juujiro(){ //十字路突入時の動作
if(goukaku==1){
Off(OUT_AB);
Wait(2000);
tsukamu();
RotateMotor(OUT_AB,50,180);
RotateMotor(OUT_B,50,200);
RotateMotor(OUT_A,50,-90);
Off(OUT_AB);
Wait(2000);
keizoku++;
hanntenn++;
}else {
Off(OUT_AB);
}
}
"goukaku"という変数値は次の「交差点であるかの確認」という...
-交差点であるかの確認
void kakuninn(){ //交差点であるかの確認
Off(OUT_AB);
Wait(500);
RotateMotor(OUT_B,50,60);
Off(OUT_B);
if(SENSOR_3 <= min+LEVEL*2){
goukaku++;
RotateMotor(OUT_B,50,-60);
Off(OUT_B);
}else {
RotateMotor(OUT_B,50,-60);
}
}
マシーンの左のタイヤだけ前進させることで、C〜十字路を移動...
-ボールの射出
void shot(){ //ボールを相手のゴールにシュート
RotateMotor(OUT_C,50,100);
OnFwdSync(OUT_AB,70,0);
Wait(300);
Off(OUT_ABC);
syuuryou++;
}
ボールを相手のゴールにシュートします。"syuuryou"という変...
-ライントレースをするプログラム
inline void sennjou(int douki){ //線の上に来た時のプログ...
OnFwdSync(OUT_AB,40,douki/5);
}
inline void turn_left(){ //左に曲がるプログラム
OnFwdSync(OUT_AB,30+hanntenn*10,-40);
}
inline void turn_right(){ //右に曲がるプログラム
OnFwdSync(OUT_AB,40-hanntenn*10,40);
}
inline void Line_Trace(){ //ライントレースをするプログラム
if(hanntenn==0){ //C〜十字路を移動中のライントレース
if(SENSOR_3<=min+10){
turn_left();
if(SENSOR_3<=min+7){
kousatenn+=1;
}
}else if (SENSOR_3>=max-10){
turn_right();
kousatenn=0;
}else {
sennjou(SENSOR_3-(max+min)/2); //滑らかに動...
}
}
if(hanntenn==1){ //丁字路〜Aを移動中のライントレース
if(SENSOR_3>=max-10){
turn_left();
kousatenn=0;
}else if (SENSOR_3<=min+10){
turn_right();
if(SENSOR_3<=min+7){
kousatenn++;
}
}else {
sennjou(SENSOR_3-(max+min)/2);
}
}
Wait(1);
Float(OUT_AB);
}
"kousatenn"という変数値でマシーンが曲がりきる前に交差点だ...
***メインプログラム [#he2cd850]
task main(){
SetSensorLight(S3);
RotateMotor(OUT_C,50,100); //閉じた状態からスタート...
while(syuuryou==0){
Line_Trace();
if(kousatenn>=200 && keizoku==0){
kakuninn();
juujiro();
kousatenn=0;
}
if(kousatenn>=100 && keizoku==1){
shot();
kousatenn=0;
}
}
}
**二回目の製作時間 [#i0e80cd0]
+ロボットの組み立て・・・3時間
+プログラムの作成・・・5時間
+レポートの作成・・・5時間
**二回目の考察と感想 [#k028c416]
二回目ということもありプログラムの作成にはあまり時間が掛...
また、マシーンが縦に長くなってしまったことにより左右に振...
ページ名: