2015a/Member/o-shima/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2015a/Member]]
#contents
*課題 [#xe7a3619]
半径1m以内にある空き缶を探し出し、25cmの距離からボールを...
*ロボット [#acc6b667]
**全体 [#h1f43ef8]
全体はこうなっている。
#ref(image2 (2).JPG)
#ref(image1 (3).JPG)
**構造 [#l9019e71]
ボールはアームを上下させてつかむ。
#ref(image4.JPG)
#ref(image3 (2).JPG)
空き缶にボールを当てるときはアームを上に上げた状態から、...
*プログラム [#w773cdd8]
**プログラムの説明 [#c05c62d1]
空き缶に対してロボットの角度を計測することで空き缶を探し...
**プログラム [#u3e1a820]
#define speed1 45
#define speed2 30
#define shoot OnRev(OUT_BC,40);Wait(1000);OnRev(OUT_A,30...
const float diameter =5.45; //タイヤの直径
const float track= 10.35; //タイヤの幅
const float pi =3.1415; //円周率
void fwdDist(float d) //d ?前進
{
long angle;
angle = d/(diameter*pi)*360.0; //角度を計算
RotateMotorEx(OUT_BC,speed2,angle,0,true,true); //モータ...
}
void turnAng(long ang) //角度ang度時計回りに旋回
{
long angle;
angle=track/diameter*ang;
RotateMotorEx(OUT_BC,speed2,angle,100,true,true);
}
int searchDirection(long ang) //今の方向を中心にang度の...
{
long angle,tacho_min=0,tacho_corr;
int d_min;
d_min=300; 仮の最小値
angle=(track/diameter)*ang; //旋回角度からタイヤの回転を...
turnAng(ang/2); //指定した角度の半分を旋回
ResetTachoCount(OUT_BC); //角度計測をリセット
OnFwdSync(OUT_BC,speed2,-100); //30%のスピードで反時計...
while(MotorTachoCount(OUT_B)<=angle)
{
if(SensorUS(S1)<d_min){
d_min=SensorUS(S1);
tacho_min=MotorTachoCount(OUT_B); //最小値を更新
}
}
OnFwdSyncEx(OUT_BC,speed2,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1)<=d...
Wait(14);
Off(OUT_BC);Wait(500);
return d_min;
}
task main() //缶を探し出して25?で停止、ボールを転がす
{
SetSensorLowspeed(S1);
int d =searchDirection(500);
if (d>25.0){
fwdDist(d-25.0);
shoot;
}
}
*感想 [#zb0fcff1]
**感想 [#u30fa096]
サンプルプログラムを参考にして角度使った。理解するのが難...
終了行:
[[2015a/Member]]
#contents
*課題 [#xe7a3619]
半径1m以内にある空き缶を探し出し、25cmの距離からボールを...
*ロボット [#acc6b667]
**全体 [#h1f43ef8]
全体はこうなっている。
#ref(image2 (2).JPG)
#ref(image1 (3).JPG)
**構造 [#l9019e71]
ボールはアームを上下させてつかむ。
#ref(image4.JPG)
#ref(image3 (2).JPG)
空き缶にボールを当てるときはアームを上に上げた状態から、...
*プログラム [#w773cdd8]
**プログラムの説明 [#c05c62d1]
空き缶に対してロボットの角度を計測することで空き缶を探し...
**プログラム [#u3e1a820]
#define speed1 45
#define speed2 30
#define shoot OnRev(OUT_BC,40);Wait(1000);OnRev(OUT_A,30...
const float diameter =5.45; //タイヤの直径
const float track= 10.35; //タイヤの幅
const float pi =3.1415; //円周率
void fwdDist(float d) //d ?前進
{
long angle;
angle = d/(diameter*pi)*360.0; //角度を計算
RotateMotorEx(OUT_BC,speed2,angle,0,true,true); //モータ...
}
void turnAng(long ang) //角度ang度時計回りに旋回
{
long angle;
angle=track/diameter*ang;
RotateMotorEx(OUT_BC,speed2,angle,100,true,true);
}
int searchDirection(long ang) //今の方向を中心にang度の...
{
long angle,tacho_min=0,tacho_corr;
int d_min;
d_min=300; 仮の最小値
angle=(track/diameter)*ang; //旋回角度からタイヤの回転を...
turnAng(ang/2); //指定した角度の半分を旋回
ResetTachoCount(OUT_BC); //角度計測をリセット
OnFwdSync(OUT_BC,speed2,-100); //30%のスピードで反時計...
while(MotorTachoCount(OUT_B)<=angle)
{
if(SensorUS(S1)<d_min){
d_min=SensorUS(S1);
tacho_min=MotorTachoCount(OUT_B); //最小値を更新
}
}
OnFwdSyncEx(OUT_BC,speed2,100,RESET_NONE);
until(MotorTachoCount(OUT_B)<=tacho_min||SensorUS(S1)<=d...
Wait(14);
Off(OUT_BC);Wait(500);
return d_min;
}
task main() //缶を探し出して25?で停止、ボールを転がす
{
SetSensorLowspeed(S1);
int d =searchDirection(500);
if (d>25.0){
fwdDist(d-25.0);
shoot;
}
}
*感想 [#zb0fcff1]
**感想 [#u30fa096]
サンプルプログラムを参考にして角度使った。理解するのが難...
ページ名: