2014b/Member/ys0718/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*課題内容 [#hfc72d64]
紙コップに入っている赤ボール2個と青ボール2個を入れ替える
#ref(robotics-2014b-3.png)
**攻略にあたって [#s8c3b294]
#ref(手順.png)
私たちのグループでは空きコップは使用せず、一度全てのボ...
?まず正面のコップまで直進する。~
?赤ボールを保持し、ロボットの向きを変え対角のコップまで...
?青ボールを保持し、ロボットを反転させる。~
?赤ボールを空いたコップに入れ、対角のコップに戻る。~
?空いたコップに青ボールを入れる、終了。~
なお、ロボットの向きを変えるのはロボット前面がコップを...
*ロボットの説明 [#mfba6bf3]
#ref(ロボット1.jpg)
#ref(ロボット2.jpg)
#ref(ロボット3.jpg)
#ref(ロボット4.jpg)
#ref(ロボット5.jpg)
本体前面にコップを掴みそのまま持ち上げるためのアームが...
以下に自分が作成した部位を中心に細かく解説する。
**土台部分 [#ma0d487b]
NXTの基本形をもとにしている。コンピュータ部を二つ並列に...
**コンテナ兼レール部 [#g1a1ac22]
レールの長さはボールがちょうど4つ収まる長さにしている。...
#ref(ストッパー.jpg)
#ref(ストッパー.gif)
#ref(ボール投下.gif)
複数のギアを組み合わせることで、一つのモーターで二つの...
これによってモーター等のパーツの削減や重量負荷の低減だ...
~
また、大きく張り出している部分があるが、これはボールが...
**コップを誘導するガイドパーツ [#u1ee9eb6]
#ref(ガイドパーツ.png)
プログラムによる調整だけでコップを最適な位置に合わせる...
*プログラムの説明 [#hf73a76c]
今回の課題ではNXTを二つ連携させる必要があり、それぞれに...
マスター側で移動用の二つのモーターとストッパーの開閉、...
~
なお、自分はプログラムにはあまり関わらなかったので詳し...
**スレーブ側 [#jef2e8b0]
#define SIGNALON 1
#define ARM_TIME1 1000 //アームの開閉時間1
#define ARM_TIME2 2000 //アームの開閉時間2
#define ARM_SPEED1 10 //アームの開閉スピード1
#define ARM_SPEED2 50 //アームの開閉スピード2
#define UP_TIME 2000 //アームを上げる時間
#define UP_SPEED 50 //アームを上げるスピード
#define DOWN_TIME 1800 //アームを下げる時間
#define DOWN_SPEED 20 //アームを下げるスピード
task main()
{
int msg; //受け取った値を格納する変数
while(true){
ReceiveRemoteNumber(MAILBOX1, true, msg); //MAILBOX...
if(msg==SIGNALON){
OnFwd(OUT_C,DOWN_SPEED);Wait(DOWN_TIME);Off(OUT_C); ...
OnRev(OUT_B,ARM_SPEED2);Wait(ARM_TIME2);Off(OUT_B); ...
OnRev(OUT_C,UP_SPEED);OnRev(OUT_B,ARM_SPEED2);Wait(UP_T...
OnFwd(OUT_C,DOWN_SPEED);Wait(DOWN_TIME);Off(OUT_C); ...
OnFwd(OUT_B,ARM_SPEED1);Wait(ARM_TIME1);Off(OUT_B); ...
ARM_UP2 OnRev(OUT_C,UP_SPEED);Wait(450);Off(OUT_C); ...
}else{
Off(OUT_BC);
}
}
}
二つのモーターによってそれぞれコップを掴む動作とアーム...
**マスター側 [#m2be86f1]
#define CONN 1
#define SIGNALON 1
#define OPEN_SPEED 15
#define OPEN OnFwd(OUT_A,OPEN_SPEED);Wait(800);Off(OUT_A);
#define CLOSE OnRev(OUT_A,OPEN_SPEED);Wait(1300);Off(OUT...
#define SPEED_H 70
#define SPEED_L 50
const float diameter = 5.6; //タイヤの直径(?)
const float track = 10.5; //タイヤのトレッド幅(?)
const float pi = 3.1415; //円周率
float GetAngle_turn(float a) //求める本体の回転角から...
{
float ang = (a*track)/diameter;
return ang;
}
float GetAngle_go(float a) //求める移動距離からタイヤ...
{
float ang = a/(diameter*pi)*360.0;
return ang;
}
sub angle_turn_L(float t) //左にt度回転
{
int angle_turn_L = GetAngle_turn(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_turn_L,-100,true,true...
Off(OUT_BC);
}
sub angle_turn_R(float t) //右にt度回転
{
int angle_turn_R = GetAngle_turn(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_turn_R,100,true,true)...
Off(OUT_BC);
}
sub dist_go_F(float t) //前にtセンチ進む
{
int angle_go_F = GetAngle_go(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_go_F,0,true,true);
Off(OUT_BC);
}
sub dist_go_R(float t) //後ろにtセンチ進む
{
int angle_go_R = GetAngle_go(t);
RotateMotorEx(OUT_BC,-SPEED_H,angle_go_R,0,true,true);
Off(OUT_BC);
}
task main(){
dist_go_F(57.0);
//コップを取るボール搭載の信号を送る
SendRemoteNumber(CONN, MAILBOX1, SIGNALON);
Wait(9000);
angle_turn_R(150.0);
dist_go_F(40.0);
//コップを取るボール搭載の信号を送る
SendRemoteNumber(CONN, MAILBOX1, SIGNALON);
Wait(9000);
//反転して
dist_go_R(5.0);
angle_turn_R(190.0);
dist_go_R(20.0);
//ボールを置く
OPEN;
Wait(1000);
CLOSE;
dist_go_F(50.0);
//反転して
dist_go_R(20.0);
angle_turn_R(220.0);
//コップまで近づく
dist_go_R(33.0);
//ボールを置く信号を送る
OPEN;
Wait(1000);
CLOSE;
//離れる
dist_go_F(20.0);
}
本来は超音波センサーによって自動的にコップの位置を補足...
変更後のプログラムは事前にロボットの進む距離と旋回する...
なお、OPENとCLOSEがストッパーの開閉を制御する命令である。
*感想・反省 [#t47fea05]
今回の課題では自分は主にロボット本体の設計を担当した。...
また、今回は今までと違ってメンバーと協力する活動が増え...
終了行:
#contents
*課題内容 [#hfc72d64]
紙コップに入っている赤ボール2個と青ボール2個を入れ替える
#ref(robotics-2014b-3.png)
**攻略にあたって [#s8c3b294]
#ref(手順.png)
私たちのグループでは空きコップは使用せず、一度全てのボ...
?まず正面のコップまで直進する。~
?赤ボールを保持し、ロボットの向きを変え対角のコップまで...
?青ボールを保持し、ロボットを反転させる。~
?赤ボールを空いたコップに入れ、対角のコップに戻る。~
?空いたコップに青ボールを入れる、終了。~
なお、ロボットの向きを変えるのはロボット前面がコップを...
*ロボットの説明 [#mfba6bf3]
#ref(ロボット1.jpg)
#ref(ロボット2.jpg)
#ref(ロボット3.jpg)
#ref(ロボット4.jpg)
#ref(ロボット5.jpg)
本体前面にコップを掴みそのまま持ち上げるためのアームが...
以下に自分が作成した部位を中心に細かく解説する。
**土台部分 [#ma0d487b]
NXTの基本形をもとにしている。コンピュータ部を二つ並列に...
**コンテナ兼レール部 [#g1a1ac22]
レールの長さはボールがちょうど4つ収まる長さにしている。...
#ref(ストッパー.jpg)
#ref(ストッパー.gif)
#ref(ボール投下.gif)
複数のギアを組み合わせることで、一つのモーターで二つの...
これによってモーター等のパーツの削減や重量負荷の低減だ...
~
また、大きく張り出している部分があるが、これはボールが...
**コップを誘導するガイドパーツ [#u1ee9eb6]
#ref(ガイドパーツ.png)
プログラムによる調整だけでコップを最適な位置に合わせる...
*プログラムの説明 [#hf73a76c]
今回の課題ではNXTを二つ連携させる必要があり、それぞれに...
マスター側で移動用の二つのモーターとストッパーの開閉、...
~
なお、自分はプログラムにはあまり関わらなかったので詳し...
**スレーブ側 [#jef2e8b0]
#define SIGNALON 1
#define ARM_TIME1 1000 //アームの開閉時間1
#define ARM_TIME2 2000 //アームの開閉時間2
#define ARM_SPEED1 10 //アームの開閉スピード1
#define ARM_SPEED2 50 //アームの開閉スピード2
#define UP_TIME 2000 //アームを上げる時間
#define UP_SPEED 50 //アームを上げるスピード
#define DOWN_TIME 1800 //アームを下げる時間
#define DOWN_SPEED 20 //アームを下げるスピード
task main()
{
int msg; //受け取った値を格納する変数
while(true){
ReceiveRemoteNumber(MAILBOX1, true, msg); //MAILBOX...
if(msg==SIGNALON){
OnFwd(OUT_C,DOWN_SPEED);Wait(DOWN_TIME);Off(OUT_C); ...
OnRev(OUT_B,ARM_SPEED2);Wait(ARM_TIME2);Off(OUT_B); ...
OnRev(OUT_C,UP_SPEED);OnRev(OUT_B,ARM_SPEED2);Wait(UP_T...
OnFwd(OUT_C,DOWN_SPEED);Wait(DOWN_TIME);Off(OUT_C); ...
OnFwd(OUT_B,ARM_SPEED1);Wait(ARM_TIME1);Off(OUT_B); ...
ARM_UP2 OnRev(OUT_C,UP_SPEED);Wait(450);Off(OUT_C); ...
}else{
Off(OUT_BC);
}
}
}
二つのモーターによってそれぞれコップを掴む動作とアーム...
**マスター側 [#m2be86f1]
#define CONN 1
#define SIGNALON 1
#define OPEN_SPEED 15
#define OPEN OnFwd(OUT_A,OPEN_SPEED);Wait(800);Off(OUT_A);
#define CLOSE OnRev(OUT_A,OPEN_SPEED);Wait(1300);Off(OUT...
#define SPEED_H 70
#define SPEED_L 50
const float diameter = 5.6; //タイヤの直径(?)
const float track = 10.5; //タイヤのトレッド幅(?)
const float pi = 3.1415; //円周率
float GetAngle_turn(float a) //求める本体の回転角から...
{
float ang = (a*track)/diameter;
return ang;
}
float GetAngle_go(float a) //求める移動距離からタイヤ...
{
float ang = a/(diameter*pi)*360.0;
return ang;
}
sub angle_turn_L(float t) //左にt度回転
{
int angle_turn_L = GetAngle_turn(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_turn_L,-100,true,true...
Off(OUT_BC);
}
sub angle_turn_R(float t) //右にt度回転
{
int angle_turn_R = GetAngle_turn(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_turn_R,100,true,true)...
Off(OUT_BC);
}
sub dist_go_F(float t) //前にtセンチ進む
{
int angle_go_F = GetAngle_go(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_go_F,0,true,true);
Off(OUT_BC);
}
sub dist_go_R(float t) //後ろにtセンチ進む
{
int angle_go_R = GetAngle_go(t);
RotateMotorEx(OUT_BC,-SPEED_H,angle_go_R,0,true,true);
Off(OUT_BC);
}
task main(){
dist_go_F(57.0);
//コップを取るボール搭載の信号を送る
SendRemoteNumber(CONN, MAILBOX1, SIGNALON);
Wait(9000);
angle_turn_R(150.0);
dist_go_F(40.0);
//コップを取るボール搭載の信号を送る
SendRemoteNumber(CONN, MAILBOX1, SIGNALON);
Wait(9000);
//反転して
dist_go_R(5.0);
angle_turn_R(190.0);
dist_go_R(20.0);
//ボールを置く
OPEN;
Wait(1000);
CLOSE;
dist_go_F(50.0);
//反転して
dist_go_R(20.0);
angle_turn_R(220.0);
//コップまで近づく
dist_go_R(33.0);
//ボールを置く信号を送る
OPEN;
Wait(1000);
CLOSE;
//離れる
dist_go_F(20.0);
}
本来は超音波センサーによって自動的にコップの位置を補足...
変更後のプログラムは事前にロボットの進む距離と旋回する...
なお、OPENとCLOSEがストッパーの開閉を制御する命令である。
*感想・反省 [#t47fea05]
今回の課題では自分は主にロボット本体の設計を担当した。...
また、今回は今までと違ってメンバーと協力する活動が増え...
ページ名: