2014b/Member/Tomo/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題3の内容 [#u2fb7e32]
紙コップに入っている赤ボール2個と青ボール2個をそれぞれ空...
フィールドは課題2で作成した紙を2枚つなぎあわせて使用する...
&ref(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&...
#br
参照:[[課題3:http://yakushi.shinshu-u.ac.jp/robotics/?2...
今回はNXTを2台分使用して、4人一組で制作する。
#br
*ロボット本体 [#t13bd40a]
今回の課題は4人一組のチームを組んで行うので、プログラム担...
**完成形 [#e5b45c86]
#br
全体像~
#ref(normal.jpg)~
#br
私達のチームのロボットの特徴はカニのような大きなハサミが...
このハサミでコップを掴み、うで全体を回すことでコップを持...
ハサミにはコップから玉が落ちないようにフタもついていて、...
#ref(normal0.jpg)~
また、このロボットでは本体(マスター)側がBluetoothで腕(...
#br
腕を上げた状態~
#ref(up.jpg)~
この状態からフタを開くことで、下にあるからのコップに玉を...
#br
#ref(pour.jpg)~
#br
本体下部に搭載した超音波センサを使ってコップを探して取り...
**試作品ver1 [#cacc142f]
#ref(ver1.0.jpg)~
一番最初に制作したロボットはこのような状態で、フタはなく...
しかし、腕を本体に接続している部分がただピンで刺している...
実際に動かしてみると注ぐときにコップのくちに全然届かなか...
#br
**試作品ver2 [#kae552a3]
そこで、腕の高さを確保するために本体上部にレールを装備し...
#ref(ver1.1_2.jpg)~
#br
#ref(ver1.1.jpg)~
#br
このように、両側からガッチリと固定している。
#ref(rel.jpg)~
**フタを装着(完成品) [#t4141f74]
これらのような改良をしたあとに実際にプログラムを走らせた...
#ref(close.jpg)~
#br
このように持ち上げてから、任意のタイミングで蓋を開く
#ref(ready.jpg)~
*プログラム [#aa5811a4]
自分は腕の部分(スレーブ)のプログラムを担当したので、主...
**本体(マスター)のプログラム [#gd47347a]
const float diameter = 5.45; //タイヤの直径(cm)
const float track = 12; //タイヤのトレッド幅(cm)
const float pi = 3.1415; //円周率
void fwdDist(float d) //距離dcm前進
{
long angle;
angle = d/(diameter*pi)*360.0; //角度を計算する
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 0, true, true);
}
void turnAng(long ang) //角度ang度の時計回りの旋回
{
long angle;
angle = track/diameter * ang;
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 100, true, tru...
}
void ReturnAng(long ang) //角度ang度の半時計回りの旋回
{
Wait(500);
long angle;
angle = track/diameter * ang;
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, -100, true, tr...
}
int searchDirection(long ang) //現在の方向を中心にang度...
{
long angle,tacho_min=0, tacho_corr;
int d_min;
d_min=600; //仮の最小値
angle = (track/diameter)*ang; //旋回角度からタイヤの回...
turnAng(ang/2); //指定された角度の半分を旋回
ResetTachoCount(OUT_BC); //角度計測をリセット
OnFwdSync(OUT_BC,SPEED_SLOW-15,-100); //半時計回りに旋回
while(MotorTachoCount(OUT_B)<=angle){
if(SensorUS(S1)<d_min){
d_min=SensorUS(S1);
tacho_min=MotorTachoCount(OUT_B);
}
}
OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1)<=...
Wait(14); //微調整
Off(OUT_BC);Wait(500);
return d_min;
}
**ハサミ(スレーブ)のプログラム [#t84401d7]
最初はbluetoothを使って、~
(マスター)→(スレーブ)→(マスター)→(スレーブ)・・・・~
と言ったように仕事をバトンタッチしていく予定でプログラム...
#br
***使用したマクロ一覧 [#h32e47ec]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
レギュレーションモードで力をハサミにかけ続け、コップを持つ
#define HOLD OnFwdReg(OUT_A,-40,OUT_REGMODE_IDLE); //コ...
ハサミを50度開きコップをはなす
#define RELEASE RotateMotor(OUT_A,50,50); //コップをは...
コップをほぼ180度腕を回転させて持ち上げ、レギュレーショ...
#define UP_MAX RotateMotor(OUT_B,-80,185);OnFwdReg(OUT_B...
コップをほぼ180度腕を回転させて床に下ろす
#define DOWN RotateMotor(OUT_B,45,185); //腕を下げる
フタを120度回してコップにかぶせる
#define OPEN RotateMotor(OUT_C,50,120); //蓋を開ける
フタを120度回してコップから外す
#define CLOSE RotateMotor(OUT_C,50,-120); //蓋を閉める
#br
#br
#br
***コップをつかむプログラム [#pcdc5b9a]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define HOLD OnFwdReg(OUT_A,-40,OUT_REGMODE_IDLE); //コ...
task main()
{
HOLD; //掴む
Wait(500); //ちょっと待つ
Off(OUT_A); //モーターAを切る(※)
Wait(500);
PlaySound(SOUND_UP);
Wait(100);
PlaySound(SOUND_UP);
Wait(100);
}
※ OnFwdRegでスピードをOUT_REGMODE_IDLEとしたところ、なぜ...
***コップを離すプログラム [#r09c11a0]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define RELEASE RotateMotor(OUT_A,50,50); //コップをは...
task main()
{
ResetTachoCount(OUT_AB); //モーターABの回転角をリセット
RELEASE; //コップを放す
Wait(300);
PlaySound(SOUND_DOWN);
Wait(100);
PlaySound(SOUND_DOWN);
Wait(100);
}
***持ち上げてボールを移すプログラム [#g7b268da]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define HOLD OnFwdReg(OUT_A,-40,OUT_REGMODE_IDLE); //コ...
#define UP_MAX RotateMotor(OUT_B,-80,185);OnFwdReg(OUT_B...
#define CLOSE RotateMotor(OUT_C,50,-120); //蓋を閉める
task main()
{
ResetTachoCount(OUT_ABC); //モーターABCの回転角をリセット
/*コップを掴んで蓋をする*/
HOLD; //掴む
Wait(1000);
CLOSE; //蓋をする
Wait(1000);
/*180度持ち上げて静止*/
UP_MAX; //もちあげる
Wait(500);
/*音で作業の終了を伝える*/
PlaySound(SOUND_FAST_UP);
Wait(300);
PlaySound(SOUND_FAST_UP);
Wait(300);
Off(OUT_A); //モーターAを切る(※)
}
***フタを開き、玉を落とすプログラム [#ibd45400]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define OPEN RotateMotor(OUT_C,50,120); //蓋を開ける
task main()
{
ResetTachoCount(OUT_ABC); //モーターABCの回転角をリセ...
/*玉を移す*/
OPEN; //蓋を開ける
PlaySound(SOUND_FAST_UP);
Wait(100);
PlaySound(SOUND_FAST_UP);
Wait(100);
}
***コップを下ろすプログラム [#j6e86885]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define DOWN RotateMotor(OUT_B,45,185); //腕を下げる
task main()
{
ResetTachoCount(OUT_ABC); //モーターABCの回転角をリセ...
/*コップをおろす*/
DOWN;
Wait(300);
/*音で作業の終了を伝える*/
PlaySound(SOUND_UP);
Wait(100);
PlaySound(SOUND_UP);
Wait(100);
}
*結果 [#g22c049d]
**一回目 [#q6ca5af0]
スタートはうまくいきコップを掴むところまではスムーズにい...
**二回目 [#l4f3b655]
一回目同様に無事にコップを掴み、今度は誤差なく2個とも玉を...
*反省・考察 [#x47d3297]
**ロボットの反省・考察 [#x52d98a4]
ハサミと腕に1つずつモーターを使う仕組みは一番最初から変わ...
**プログラムの反省・考察 [#wee9dbbf]
自分はスレーブのプログラムを担当していたが、腕の動きは単...
今回はbluetooth通信を回避することで何とか動かすことができ...
終了行:
目次
#contents
*課題3の内容 [#u2fb7e32]
紙コップに入っている赤ボール2個と青ボール2個をそれぞれ空...
フィールドは課題2で作成した紙を2枚つなぎあわせて使用する...
&ref(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&...
#br
参照:[[課題3:http://yakushi.shinshu-u.ac.jp/robotics/?2...
今回はNXTを2台分使用して、4人一組で制作する。
#br
*ロボット本体 [#t13bd40a]
今回の課題は4人一組のチームを組んで行うので、プログラム担...
**完成形 [#e5b45c86]
#br
全体像~
#ref(normal.jpg)~
#br
私達のチームのロボットの特徴はカニのような大きなハサミが...
このハサミでコップを掴み、うで全体を回すことでコップを持...
ハサミにはコップから玉が落ちないようにフタもついていて、...
#ref(normal0.jpg)~
また、このロボットでは本体(マスター)側がBluetoothで腕(...
#br
腕を上げた状態~
#ref(up.jpg)~
この状態からフタを開くことで、下にあるからのコップに玉を...
#br
#ref(pour.jpg)~
#br
本体下部に搭載した超音波センサを使ってコップを探して取り...
**試作品ver1 [#cacc142f]
#ref(ver1.0.jpg)~
一番最初に制作したロボットはこのような状態で、フタはなく...
しかし、腕を本体に接続している部分がただピンで刺している...
実際に動かしてみると注ぐときにコップのくちに全然届かなか...
#br
**試作品ver2 [#kae552a3]
そこで、腕の高さを確保するために本体上部にレールを装備し...
#ref(ver1.1_2.jpg)~
#br
#ref(ver1.1.jpg)~
#br
このように、両側からガッチリと固定している。
#ref(rel.jpg)~
**フタを装着(完成品) [#t4141f74]
これらのような改良をしたあとに実際にプログラムを走らせた...
#ref(close.jpg)~
#br
このように持ち上げてから、任意のタイミングで蓋を開く
#ref(ready.jpg)~
*プログラム [#aa5811a4]
自分は腕の部分(スレーブ)のプログラムを担当したので、主...
**本体(マスター)のプログラム [#gd47347a]
const float diameter = 5.45; //タイヤの直径(cm)
const float track = 12; //タイヤのトレッド幅(cm)
const float pi = 3.1415; //円周率
void fwdDist(float d) //距離dcm前進
{
long angle;
angle = d/(diameter*pi)*360.0; //角度を計算する
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 0, true, true);
}
void turnAng(long ang) //角度ang度の時計回りの旋回
{
long angle;
angle = track/diameter * ang;
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 100, true, tru...
}
void ReturnAng(long ang) //角度ang度の半時計回りの旋回
{
Wait(500);
long angle;
angle = track/diameter * ang;
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, -100, true, tr...
}
int searchDirection(long ang) //現在の方向を中心にang度...
{
long angle,tacho_min=0, tacho_corr;
int d_min;
d_min=600; //仮の最小値
angle = (track/diameter)*ang; //旋回角度からタイヤの回...
turnAng(ang/2); //指定された角度の半分を旋回
ResetTachoCount(OUT_BC); //角度計測をリセット
OnFwdSync(OUT_BC,SPEED_SLOW-15,-100); //半時計回りに旋回
while(MotorTachoCount(OUT_B)<=angle){
if(SensorUS(S1)<d_min){
d_min=SensorUS(S1);
tacho_min=MotorTachoCount(OUT_B);
}
}
OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1)<=...
Wait(14); //微調整
Off(OUT_BC);Wait(500);
return d_min;
}
**ハサミ(スレーブ)のプログラム [#t84401d7]
最初はbluetoothを使って、~
(マスター)→(スレーブ)→(マスター)→(スレーブ)・・・・~
と言ったように仕事をバトンタッチしていく予定でプログラム...
#br
***使用したマクロ一覧 [#h32e47ec]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
レギュレーションモードで力をハサミにかけ続け、コップを持つ
#define HOLD OnFwdReg(OUT_A,-40,OUT_REGMODE_IDLE); //コ...
ハサミを50度開きコップをはなす
#define RELEASE RotateMotor(OUT_A,50,50); //コップをは...
コップをほぼ180度腕を回転させて持ち上げ、レギュレーショ...
#define UP_MAX RotateMotor(OUT_B,-80,185);OnFwdReg(OUT_B...
コップをほぼ180度腕を回転させて床に下ろす
#define DOWN RotateMotor(OUT_B,45,185); //腕を下げる
フタを120度回してコップにかぶせる
#define OPEN RotateMotor(OUT_C,50,120); //蓋を開ける
フタを120度回してコップから外す
#define CLOSE RotateMotor(OUT_C,50,-120); //蓋を閉める
#br
#br
#br
***コップをつかむプログラム [#pcdc5b9a]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define HOLD OnFwdReg(OUT_A,-40,OUT_REGMODE_IDLE); //コ...
task main()
{
HOLD; //掴む
Wait(500); //ちょっと待つ
Off(OUT_A); //モーターAを切る(※)
Wait(500);
PlaySound(SOUND_UP);
Wait(100);
PlaySound(SOUND_UP);
Wait(100);
}
※ OnFwdRegでスピードをOUT_REGMODE_IDLEとしたところ、なぜ...
***コップを離すプログラム [#r09c11a0]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define RELEASE RotateMotor(OUT_A,50,50); //コップをは...
task main()
{
ResetTachoCount(OUT_AB); //モーターABの回転角をリセット
RELEASE; //コップを放す
Wait(300);
PlaySound(SOUND_DOWN);
Wait(100);
PlaySound(SOUND_DOWN);
Wait(100);
}
***持ち上げてボールを移すプログラム [#g7b268da]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define HOLD OnFwdReg(OUT_A,-40,OUT_REGMODE_IDLE); //コ...
#define UP_MAX RotateMotor(OUT_B,-80,185);OnFwdReg(OUT_B...
#define CLOSE RotateMotor(OUT_C,50,-120); //蓋を閉める
task main()
{
ResetTachoCount(OUT_ABC); //モーターABCの回転角をリセット
/*コップを掴んで蓋をする*/
HOLD; //掴む
Wait(1000);
CLOSE; //蓋をする
Wait(1000);
/*180度持ち上げて静止*/
UP_MAX; //もちあげる
Wait(500);
/*音で作業の終了を伝える*/
PlaySound(SOUND_FAST_UP);
Wait(300);
PlaySound(SOUND_FAST_UP);
Wait(300);
Off(OUT_A); //モーターAを切る(※)
}
***フタを開き、玉を落とすプログラム [#ibd45400]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define OPEN RotateMotor(OUT_C,50,120); //蓋を開ける
task main()
{
ResetTachoCount(OUT_ABC); //モーターABCの回転角をリセ...
/*玉を移す*/
OPEN; //蓋を開ける
PlaySound(SOUND_FAST_UP);
Wait(100);
PlaySound(SOUND_FAST_UP);
Wait(100);
}
***コップを下ろすプログラム [#j6e86885]
/* モーターAがハサミ、モーターBが腕、モーターCが蓋 */
#define DOWN RotateMotor(OUT_B,45,185); //腕を下げる
task main()
{
ResetTachoCount(OUT_ABC); //モーターABCの回転角をリセ...
/*コップをおろす*/
DOWN;
Wait(300);
/*音で作業の終了を伝える*/
PlaySound(SOUND_UP);
Wait(100);
PlaySound(SOUND_UP);
Wait(100);
}
*結果 [#g22c049d]
**一回目 [#q6ca5af0]
スタートはうまくいきコップを掴むところまではスムーズにい...
**二回目 [#l4f3b655]
一回目同様に無事にコップを掴み、今度は誤差なく2個とも玉を...
*反省・考察 [#x47d3297]
**ロボットの反省・考察 [#x52d98a4]
ハサミと腕に1つずつモーターを使う仕組みは一番最初から変わ...
**プログラムの反省・考察 [#wee9dbbf]
自分はスレーブのプログラムを担当していたが、腕の動きは単...
今回はbluetooth通信を回避することで何とか動かすことができ...
ページ名: