2017b/Member/yuu/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017b/Member]]
目次
#contents
*概要 [#xb3bd784]
今回の課題3は課題2で使用した紙を使用し、コップの中にある...
#ref(./2017b-mission3.png,320x240,コースの全体)
*機体 [#vc83f382]
**試作1号機 [#yf03ac6c]
1号機は本体を横に並べて取り付けその下にタイヤを動かすため...
#ref(./DSC_0416.JPG,320x240,試作1号機)
**試作2号機 [#l6ccfb91]
2号機は1号機とはコップを掴む機構を改良したロボットにした...
&ref(2017b/Member/yuu/Mission3/DSC_0420.JPG,320x240,2号機...
&ref(2017b/Member/yuu/Mission3/1518422316830.jpg,320x240,...
また、後ろのタイヤはタイヤのままでは摩擦があり、場合によ...
&ref(2017b/Member/yuu/Mission3/DSC_0425.JPG,320x240,2号機...
**改善点 [#w0104ff7]
試作1号機と2号機を比べるとはるかに2号機の方が完成形として...
*プログラム [#lb617286]
**マスター側 [#w9efb64c]
***define [#r3096f7a]
#define SPEED 55
#define SPEED_SLOW 45
#define SPEED_CURVE 45
#define SPEED_FAST 55
#define THRESHOLD 38
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_FAST,SPEED_FAST);
#define turn_right_high OnRL(-30,SPEED_CURVE);
#define turn_right_low OnRL (0,SPEED_CURVE);
#define turn_left_high OnRL(SPEED_CURVE,-30);
#define turn_left_low OnRL (SPEED_CURVE,0);
#define CONN 1
#define SIGNAL_CATCH 11
#define SIGNAL_RELEASE 12
#define SIGNAL_UP 13
#define SIGNAL_UP1 14
#define SIGNAL_DOWN 15
***コップ回収のためのプログラム [#vbc63e7c]
const float diameter = 5.45; //タイヤの直径。NXTのタ...
const float track = 10.35; //タイヤのトレッド幅。...
const float pi = 3.1415; //円周率。
void fwdDist(float d) //距離dcm進ためのプロ...
{
long angle = d/(diameter*pi)*360.0; //進むのに...
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 0, true, tru...
}
void turnAng(long ang) //角度ang度の時計回りの...
{
long angle = track/diameter * ang; //進む...
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 100, true,tr...
}
int searchDirection(long ang) //現地点を...
{
long tacho_min;
int d_min = 300;
long angle = (track/diameter)*ang;
turnAng(ang/2);
ResetTachoCount(OUT_BC);
OnFwdSync(OUT_BC,SPEED_SLOW,-100);
while(MotorTachoCount(OUT_B)<=angle){
if(SensorUS(S3)<d_min){
d_min = SensorUS(S3);
tacho_min = MotorTachoCount(OUT_B);
}
}
OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min || SensorUS(S...
Wait(14);
Off(OUT_BC);
Wait(500);
return d_min;
}
***メインプログラム [#pca44767]
task main()
{
SetSensorLight(S2);
RotateMotor(OUT_BC,35,315);
Wait(1000);
RotateMotor(OUT_BC,35,320);
Wait(1000);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_CATCH); //ス...
Wait(2000); //何秒か待たないとそのままプログラ...
Wait(1000);
RotateMotor(OUT_C,55,180);
RotateMotor(OUT_B,-55,310);
Wait(1000);
RotateMotor(OUT_BC,35,260);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_UP); //ス...
Wait(2000);
RotateMotor(OUT_C,-55,360);
RotateMotor(OUT_BC,55,600);
RotateMotor(OUT_B,-55,330);
RotateMotor(OUT_C,55,50);
RotateMotor(OUT_BC,55,900);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_DOWN); //...
Wait(1500);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_RELEASE); ...
Wait(2000);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_UP);
Wait(2000);
RotateMotor(OUT_BC,-55,100);
OnFwd(OUT_B,55);
OnFwd(OUT_C,55);
Wait(1000);
Off(OUT_BC);
SetSensorLowspeed(S3);
int d = searchDirection(60);
if (d > 5){ //コップの手前...
fwdDist(d-5.0);
}
}
**スレーブ側 [#cf3d35f2]
***define [#ec27d41e]
#define SIGNAL_CATCH 11
#define SIGNAL_RELEASE 12
#define SIGNAL_UP 13
#define SIGNAL_UP1 14
#define SIGNAL_DOWN 15
***メインプログラム [#v3995d22]
task main()
{
int msg;
while(true){
ReceiveRemoteNumber(MAILBOX1,true,msg);
if (msg == SIGNAL_CATCH) {
OnFwd(OUT_C,40); //RotateMotorで...
Wait(800);
Off(OUT_C);
}else{
if (msg == SIGNAL_RELEASE) {
RotateMotor(OUT_C,-20,38);
}else if
(msg == SIGNAL_UP) {
RotateMotor(OUT_B,-45,120);
}else if
(msg == SIGNAL_DOWN) {
RotateMotor(OUT_B,45,94);
}else if
(msg == SIGNAL_UP1) {
OnFwd(OUT_B,-50);
Wait(1000);
Off(OUT_B);
}
}
}
}
*感想 [#a4ce1cb9]
今回は制作時間が短いかかったためいろいろと問題点が多かっ...
終了行:
[[2017b/Member]]
目次
#contents
*概要 [#xb3bd784]
今回の課題3は課題2で使用した紙を使用し、コップの中にある...
#ref(./2017b-mission3.png,320x240,コースの全体)
*機体 [#vc83f382]
**試作1号機 [#yf03ac6c]
1号機は本体を横に並べて取り付けその下にタイヤを動かすため...
#ref(./DSC_0416.JPG,320x240,試作1号機)
**試作2号機 [#l6ccfb91]
2号機は1号機とはコップを掴む機構を改良したロボットにした...
&ref(2017b/Member/yuu/Mission3/DSC_0420.JPG,320x240,2号機...
&ref(2017b/Member/yuu/Mission3/1518422316830.jpg,320x240,...
また、後ろのタイヤはタイヤのままでは摩擦があり、場合によ...
&ref(2017b/Member/yuu/Mission3/DSC_0425.JPG,320x240,2号機...
**改善点 [#w0104ff7]
試作1号機と2号機を比べるとはるかに2号機の方が完成形として...
*プログラム [#lb617286]
**マスター側 [#w9efb64c]
***define [#r3096f7a]
#define SPEED 55
#define SPEED_SLOW 45
#define SPEED_CURVE 45
#define SPEED_FAST 55
#define THRESHOLD 38
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_FAST,SPEED_FAST);
#define turn_right_high OnRL(-30,SPEED_CURVE);
#define turn_right_low OnRL (0,SPEED_CURVE);
#define turn_left_high OnRL(SPEED_CURVE,-30);
#define turn_left_low OnRL (SPEED_CURVE,0);
#define CONN 1
#define SIGNAL_CATCH 11
#define SIGNAL_RELEASE 12
#define SIGNAL_UP 13
#define SIGNAL_UP1 14
#define SIGNAL_DOWN 15
***コップ回収のためのプログラム [#vbc63e7c]
const float diameter = 5.45; //タイヤの直径。NXTのタ...
const float track = 10.35; //タイヤのトレッド幅。...
const float pi = 3.1415; //円周率。
void fwdDist(float d) //距離dcm進ためのプロ...
{
long angle = d/(diameter*pi)*360.0; //進むのに...
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 0, true, tru...
}
void turnAng(long ang) //角度ang度の時計回りの...
{
long angle = track/diameter * ang; //進む...
RotateMotorEx(OUT_BC, SPEED_SLOW, angle, 100, true,tr...
}
int searchDirection(long ang) //現地点を...
{
long tacho_min;
int d_min = 300;
long angle = (track/diameter)*ang;
turnAng(ang/2);
ResetTachoCount(OUT_BC);
OnFwdSync(OUT_BC,SPEED_SLOW,-100);
while(MotorTachoCount(OUT_B)<=angle){
if(SensorUS(S3)<d_min){
d_min = SensorUS(S3);
tacho_min = MotorTachoCount(OUT_B);
}
}
OnFwdSyncEx(OUT_BC,SPEED_SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min || SensorUS(S...
Wait(14);
Off(OUT_BC);
Wait(500);
return d_min;
}
***メインプログラム [#pca44767]
task main()
{
SetSensorLight(S2);
RotateMotor(OUT_BC,35,315);
Wait(1000);
RotateMotor(OUT_BC,35,320);
Wait(1000);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_CATCH); //ス...
Wait(2000); //何秒か待たないとそのままプログラ...
Wait(1000);
RotateMotor(OUT_C,55,180);
RotateMotor(OUT_B,-55,310);
Wait(1000);
RotateMotor(OUT_BC,35,260);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_UP); //ス...
Wait(2000);
RotateMotor(OUT_C,-55,360);
RotateMotor(OUT_BC,55,600);
RotateMotor(OUT_B,-55,330);
RotateMotor(OUT_C,55,50);
RotateMotor(OUT_BC,55,900);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_DOWN); //...
Wait(1500);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_RELEASE); ...
Wait(2000);
SendRemoteNumber(CONN,MAILBOX1,SIGNAL_UP);
Wait(2000);
RotateMotor(OUT_BC,-55,100);
OnFwd(OUT_B,55);
OnFwd(OUT_C,55);
Wait(1000);
Off(OUT_BC);
SetSensorLowspeed(S3);
int d = searchDirection(60);
if (d > 5){ //コップの手前...
fwdDist(d-5.0);
}
}
**スレーブ側 [#cf3d35f2]
***define [#ec27d41e]
#define SIGNAL_CATCH 11
#define SIGNAL_RELEASE 12
#define SIGNAL_UP 13
#define SIGNAL_UP1 14
#define SIGNAL_DOWN 15
***メインプログラム [#v3995d22]
task main()
{
int msg;
while(true){
ReceiveRemoteNumber(MAILBOX1,true,msg);
if (msg == SIGNAL_CATCH) {
OnFwd(OUT_C,40); //RotateMotorで...
Wait(800);
Off(OUT_C);
}else{
if (msg == SIGNAL_RELEASE) {
RotateMotor(OUT_C,-20,38);
}else if
(msg == SIGNAL_UP) {
RotateMotor(OUT_B,-45,120);
}else if
(msg == SIGNAL_DOWN) {
RotateMotor(OUT_B,45,94);
}else if
(msg == SIGNAL_UP1) {
OnFwd(OUT_B,-50);
Wait(1000);
Off(OUT_B);
}
}
}
}
*感想 [#a4ce1cb9]
今回は制作時間が短いかかったためいろいろと問題点が多かっ...
ページ名: