2019b/Member/atsu/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
* 課題1 [#h2d44e23]
[[2019b/Mission1]]を参照。
* ロボットの説明 [#sd32535f]
x軸とy軸、ペンの上げ下げにそれぞれ1つずつモーターを配置...
#ref(2019b/Member/atsu/Mission1/robot_all.jpg,100%,ロボッ...
** x軸 , y軸 [#ifd53ce0]
タイヤがあると誤差が大きくなると考えたので、物理的にモー...
#ref(2019b/Member/atsu/Mission1/crank_1.jpg,100%,クランク...
x軸 , y軸はこのようになった。2つの軸には鏡で映しただけで...
#ref(2019b/Member/atsu/Mission1/crank_2.jpg,100%,クランク...
** ペンの動かし方 [#i5c13e01]
ペンの取付部のパーツはこのようにした。
&ref(2019b/Member/atsu/Mission1/pen_1.jpg,100%,ペンの取り...
&ref(2019b/Member/atsu/Mission1/pen_01.jpg,100%,ペンの取...
ペンの取り付けパーツはそれぞれの軸の上に乗っかっているだ...
#ref(2019b/Member/atsu/Mission1/pen_2.jpg,100%,ペンの取り...
** ペンの上げ下げ [#pfbd974a]
ペンの上げ下げは、以下の写真のモーターでペン取り付けパー...
#ref(2019b/Member/atsu/Mission1/pen_up_down.jpg,100%,ペン...
* プログラムの説明 [#bb2a0232]
今回は、サーボモーターの機能を使用した。
** 今回使用したプログラム [#hf6d5968]
#define SPEED 10
#define P 40
#define I 40
#define D 90
#define gf(x,y,z) gt(x-log_x,y-log_y,z);log_x=x;log_y=y;
#define pu OnFwd(OUT_A,20);Wait(500);Off(OUT_A); ...
#define pd OnFwd(OUT_A,-SPEED);Wait(300);Off(OUT_A);Wait...
#define gh gf(0,0,1); //ホームポジション( 0 , 0 )に戻る
sub gt(float x,float y,float z) //(行き先の座標 , 繰り返...
{
const float axis = 100.0; //軸
const int rep = z; //繰り返し回数
const float rotation = 180.0; //軸を端から端まで動か...
const float correction = 0.5; //補正
float angle_x = ((rotation/axis)*x)/rep + sign(x)*co...
float angle_y = ((rotation/axis)*y)/rep + sign(y)*co...
repeat(rep)
{
//RotateMotor(OUT_B,SPEED,angle_x);
RotateMotorPID(OUT_B,SPEED,angle_x,P,I,D);
//RotateMotor(OUT_C,SPEED,angle_y);
RotateMotorPID(OUT_C,SPEED,angle_y,P,I,D);
}
Wait(400);
}
task main()
{
ResetTachoCount(OUT_BC);
float log_x = 0;
float log_y = 0;
//輪郭
pu;
gf(0.0,100.0,2);
pd;
gf(0.0,35.0,1);
gf(35.0,0.0,30);
gf(45.0,0.0,1);
gf(100.0,35.0,30);
gf(100.0,100.0,1);
gf(0.0,100.0,1);
pu;
//メガネ
gf(30.0,50.0,2);
pd;
gf(50.0,50.0,1);
gf(50.0,40.0,1);
gf(25.0,40.0,1);
gf(25.0,60.0,1);
pu;
gf(50.0,45.0,1);
pd;
gf(60.0,45.0,1);
pu;
gf(60.0,55.0,2);
pd;
gf(80.0,55.0,1);
gf(80.0,40.0,1);
gf(52.0,40.0,1);
gf(52.0,55.0,1);
pu;
//鼻
gf(45.0,35.0,2);
pd;
gf(40.0,25.0,10);
gf(50.0,28.0,1);
pu;
//口
gf(30.0,15.0,2);
pd;
gf(60.0,15.0,2);
pu;
gh;
}
** ペンの上げ下げ [#vfec7ef2]
マクロを使用して、pu = pen up , pd = pen down として指定...
#define SPEED 10
#define pu OnFwd(OUT_A,20);Wait(500);Off(OUT_A);
#define pd OnFwd(OUT_A,-SPEED);Wait(300);Off(OUT_A);Wait...
** ペンの移動 [#m910dc60]
指定した座標と今いる座標を直線で結んでくれるような関数を ...
#define SPEED 10
#define P 40
#define I 40
#define D 90
#define gf(x,y,z) gt(x-log_x,y-log_y,z);log_x=x;log_y=y;
sub gt(float x,float y,float z) //(行き先の座標 , 繰り返...
{
const float axis = 100.0; //軸
const int rep = z; //繰り返し回数
const float rotation = 180.0; //軸を端から端まで動か...
const float correction = 0.5; //補正
float angle_x = ((rotation/axis)*x)/rep + sign(x)*co...
float angle_y = ((rotation/axis)*y)/rep + sign(y)*co...
repeat(rep)
{
//RotateMotor(OUT_B,SPEED,angle_x);
RotateMotorPID(OUT_B,SPEED,angle_x,P,I,D);
//RotateMotor(OUT_C,SPEED,angle_y);
RotateMotorPID(OUT_C,SPEED,angle_y,P,I,D);
}
Wait(400);
}
task main()
{
float log_x = 0;
float log_y = 0;
}
これにより、以下のように書くことで、指定した座標まで動か...
gf(移動先の x座標 , 移動先の y座標 , 繰り返し回数)
NXTでは、2つのモーターを同時に違う出力で動かすことができ...
今回は、"RotateMotor"よりも精度がいいらしい "RotateMotorP...
また、今回制作したロボットは関節部分にぐらつきがあったの...
** メインのプログラム [#qa83fb22]
通ってほしい座標を指定しているだけなのでスッキリしている...
3番目の引数は x軸 , y軸 に平行な場合は"1 or 2"で、その他...
task main()
{
ResetTachoCount(OUT_BC);
float log_x = 0;
float log_y = 0;
//輪郭
pu;
gf(0.0,100.0,2);
pd;
gf(0.0,35.0,1);
gf(35.0,0.0,30);
gf(45.0,0.0,1);
gf(100.0,35.0,30);
gf(100.0,100.0,1);
gf(0.0,100.0,1);
pu;
//メガネ
gf(30.0,50.0,2);
pd;
gf(50.0,50.0,1);
gf(50.0,40.0,1);
gf(25.0,40.0,1);
gf(25.0,60.0,1);
pu;
gf(50.0,45.0,1);
pd;
gf(60.0,45.0,1);
pu;
gf(60.0,55.0,2);
pd;
gf(80.0,55.0,1);
gf(80.0,40.0,1);
gf(52.0,40.0,1);
gf(52.0,55.0,1);
pu;
//鼻
gf(45.0,35.0,2);
pd;
gf(40.0,25.0,10);
gf(50.0,28.0,1);
pu;
//口
gf(30.0,15.0,2);
pd;
gf(60.0,15.0,2);
pu;
gh;
}
* 描いた似顔絵 [#qba5a302]
メガネのフレームがうまくかけた。しかし、髪の毛は難しくて...
#ref(2019b/Member/atsu/Mission1/face.jpg,100%,似顔絵)
* 反省点 [#f9d05a5c]
今回作った関数の中に、モーターの回転角を計算する式を組み...
実際には、
#ref(2019b/Member/atsu/Mission1/crank_calculation.jpg,100...
であり、関数は、
sub gt(float x,float y,float z) //(行き先の座標 , 繰り返...
{
const float axis = 100.0; //軸
const float arm_1 = r; //アーム1の長さ
const float arm_2 = R; //アーム2の長さ
const int rep = z; //繰り返し回数
const float length = l; //アームの動く距離
const float correction = 0.5; //補正
float X = l/axis*x;
float Y = l/axis*y;
float angle_x = (acos(((arm_1^2+arm_2^2-X)^2-(arm_2-...
float angle_y = (acos(((arm_1^2+arm_2^2-Y)^2-(arm_2-...
repeat(rep)
{
//RotateMotor(OUT_B,SPEED,angle_x);
RotateMotorPID(OUT_B,SPEED,angle_x,P,I,D);
//RotateMotor(OUT_C,SPEED,angle_y);
RotateMotorPID(OUT_C,SPEED,angle_y,P,I,D);
}
Wait(400);
}
とすべきであった。
終了行:
目次
#contents
* 課題1 [#h2d44e23]
[[2019b/Mission1]]を参照。
* ロボットの説明 [#sd32535f]
x軸とy軸、ペンの上げ下げにそれぞれ1つずつモーターを配置...
#ref(2019b/Member/atsu/Mission1/robot_all.jpg,100%,ロボッ...
** x軸 , y軸 [#ifd53ce0]
タイヤがあると誤差が大きくなると考えたので、物理的にモー...
#ref(2019b/Member/atsu/Mission1/crank_1.jpg,100%,クランク...
x軸 , y軸はこのようになった。2つの軸には鏡で映しただけで...
#ref(2019b/Member/atsu/Mission1/crank_2.jpg,100%,クランク...
** ペンの動かし方 [#i5c13e01]
ペンの取付部のパーツはこのようにした。
&ref(2019b/Member/atsu/Mission1/pen_1.jpg,100%,ペンの取り...
&ref(2019b/Member/atsu/Mission1/pen_01.jpg,100%,ペンの取...
ペンの取り付けパーツはそれぞれの軸の上に乗っかっているだ...
#ref(2019b/Member/atsu/Mission1/pen_2.jpg,100%,ペンの取り...
** ペンの上げ下げ [#pfbd974a]
ペンの上げ下げは、以下の写真のモーターでペン取り付けパー...
#ref(2019b/Member/atsu/Mission1/pen_up_down.jpg,100%,ペン...
* プログラムの説明 [#bb2a0232]
今回は、サーボモーターの機能を使用した。
** 今回使用したプログラム [#hf6d5968]
#define SPEED 10
#define P 40
#define I 40
#define D 90
#define gf(x,y,z) gt(x-log_x,y-log_y,z);log_x=x;log_y=y;
#define pu OnFwd(OUT_A,20);Wait(500);Off(OUT_A); ...
#define pd OnFwd(OUT_A,-SPEED);Wait(300);Off(OUT_A);Wait...
#define gh gf(0,0,1); //ホームポジション( 0 , 0 )に戻る
sub gt(float x,float y,float z) //(行き先の座標 , 繰り返...
{
const float axis = 100.0; //軸
const int rep = z; //繰り返し回数
const float rotation = 180.0; //軸を端から端まで動か...
const float correction = 0.5; //補正
float angle_x = ((rotation/axis)*x)/rep + sign(x)*co...
float angle_y = ((rotation/axis)*y)/rep + sign(y)*co...
repeat(rep)
{
//RotateMotor(OUT_B,SPEED,angle_x);
RotateMotorPID(OUT_B,SPEED,angle_x,P,I,D);
//RotateMotor(OUT_C,SPEED,angle_y);
RotateMotorPID(OUT_C,SPEED,angle_y,P,I,D);
}
Wait(400);
}
task main()
{
ResetTachoCount(OUT_BC);
float log_x = 0;
float log_y = 0;
//輪郭
pu;
gf(0.0,100.0,2);
pd;
gf(0.0,35.0,1);
gf(35.0,0.0,30);
gf(45.0,0.0,1);
gf(100.0,35.0,30);
gf(100.0,100.0,1);
gf(0.0,100.0,1);
pu;
//メガネ
gf(30.0,50.0,2);
pd;
gf(50.0,50.0,1);
gf(50.0,40.0,1);
gf(25.0,40.0,1);
gf(25.0,60.0,1);
pu;
gf(50.0,45.0,1);
pd;
gf(60.0,45.0,1);
pu;
gf(60.0,55.0,2);
pd;
gf(80.0,55.0,1);
gf(80.0,40.0,1);
gf(52.0,40.0,1);
gf(52.0,55.0,1);
pu;
//鼻
gf(45.0,35.0,2);
pd;
gf(40.0,25.0,10);
gf(50.0,28.0,1);
pu;
//口
gf(30.0,15.0,2);
pd;
gf(60.0,15.0,2);
pu;
gh;
}
** ペンの上げ下げ [#vfec7ef2]
マクロを使用して、pu = pen up , pd = pen down として指定...
#define SPEED 10
#define pu OnFwd(OUT_A,20);Wait(500);Off(OUT_A);
#define pd OnFwd(OUT_A,-SPEED);Wait(300);Off(OUT_A);Wait...
** ペンの移動 [#m910dc60]
指定した座標と今いる座標を直線で結んでくれるような関数を ...
#define SPEED 10
#define P 40
#define I 40
#define D 90
#define gf(x,y,z) gt(x-log_x,y-log_y,z);log_x=x;log_y=y;
sub gt(float x,float y,float z) //(行き先の座標 , 繰り返...
{
const float axis = 100.0; //軸
const int rep = z; //繰り返し回数
const float rotation = 180.0; //軸を端から端まで動か...
const float correction = 0.5; //補正
float angle_x = ((rotation/axis)*x)/rep + sign(x)*co...
float angle_y = ((rotation/axis)*y)/rep + sign(y)*co...
repeat(rep)
{
//RotateMotor(OUT_B,SPEED,angle_x);
RotateMotorPID(OUT_B,SPEED,angle_x,P,I,D);
//RotateMotor(OUT_C,SPEED,angle_y);
RotateMotorPID(OUT_C,SPEED,angle_y,P,I,D);
}
Wait(400);
}
task main()
{
float log_x = 0;
float log_y = 0;
}
これにより、以下のように書くことで、指定した座標まで動か...
gf(移動先の x座標 , 移動先の y座標 , 繰り返し回数)
NXTでは、2つのモーターを同時に違う出力で動かすことができ...
今回は、"RotateMotor"よりも精度がいいらしい "RotateMotorP...
また、今回制作したロボットは関節部分にぐらつきがあったの...
** メインのプログラム [#qa83fb22]
通ってほしい座標を指定しているだけなのでスッキリしている...
3番目の引数は x軸 , y軸 に平行な場合は"1 or 2"で、その他...
task main()
{
ResetTachoCount(OUT_BC);
float log_x = 0;
float log_y = 0;
//輪郭
pu;
gf(0.0,100.0,2);
pd;
gf(0.0,35.0,1);
gf(35.0,0.0,30);
gf(45.0,0.0,1);
gf(100.0,35.0,30);
gf(100.0,100.0,1);
gf(0.0,100.0,1);
pu;
//メガネ
gf(30.0,50.0,2);
pd;
gf(50.0,50.0,1);
gf(50.0,40.0,1);
gf(25.0,40.0,1);
gf(25.0,60.0,1);
pu;
gf(50.0,45.0,1);
pd;
gf(60.0,45.0,1);
pu;
gf(60.0,55.0,2);
pd;
gf(80.0,55.0,1);
gf(80.0,40.0,1);
gf(52.0,40.0,1);
gf(52.0,55.0,1);
pu;
//鼻
gf(45.0,35.0,2);
pd;
gf(40.0,25.0,10);
gf(50.0,28.0,1);
pu;
//口
gf(30.0,15.0,2);
pd;
gf(60.0,15.0,2);
pu;
gh;
}
* 描いた似顔絵 [#qba5a302]
メガネのフレームがうまくかけた。しかし、髪の毛は難しくて...
#ref(2019b/Member/atsu/Mission1/face.jpg,100%,似顔絵)
* 反省点 [#f9d05a5c]
今回作った関数の中に、モーターの回転角を計算する式を組み...
実際には、
#ref(2019b/Member/atsu/Mission1/crank_calculation.jpg,100...
であり、関数は、
sub gt(float x,float y,float z) //(行き先の座標 , 繰り返...
{
const float axis = 100.0; //軸
const float arm_1 = r; //アーム1の長さ
const float arm_2 = R; //アーム2の長さ
const int rep = z; //繰り返し回数
const float length = l; //アームの動く距離
const float correction = 0.5; //補正
float X = l/axis*x;
float Y = l/axis*y;
float angle_x = (acos(((arm_1^2+arm_2^2-X)^2-(arm_2-...
float angle_y = (acos(((arm_1^2+arm_2^2-Y)^2-(arm_2-...
repeat(rep)
{
//RotateMotor(OUT_B,SPEED,angle_x);
RotateMotorPID(OUT_B,SPEED,angle_x,P,I,D);
//RotateMotor(OUT_C,SPEED,angle_y);
RotateMotorPID(OUT_C,SPEED,angle_y,P,I,D);
}
Wait(400);
}
とすべきであった。
ページ名: