2013b/Member/Redcicudu/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2013b/Member]]
#contents
*コースと攻略方法 [#y2bdf8ae]
**コースについて [#a95be814]
&ref(2013b/Member/Redcicudu/Mission1/らいん1.jpg,39.9KB,...
コースは写真の通りである。今回は空き缶をコース上に配置し...
+交差点は合計4回通過しなくてはならない。
+急なカーブや直角なカーブがあり、プログラムによっては交差...
+輪っか状になっている部分が二つあり、こちらもプログラムに...
+空き缶は交差点から10センチ以上離して設置しなくてはなら...
以上が主な特徴である。
**攻略方法 [#xf054f62]
まず、私のプログラムはテキストの例を参考に作られているた...
*ロボットについて [#vb01f325]
&ref(2013b/Member/Redcicudu/Mission1/ろぼ4.jpg,36.4KB,い...
ロボットは写真の通り少し背高ノッポになってしまった。それ...
&ref(2013b/Member/Redcicudu/Mission1/ろぼ3.jpg,70.8KB,み...
アームは両側からはさむ形にした。広げきっているときはでき...
*プログラムについて [#q17d2328]
このプログラムはテキストのプログラムを参考にしている。私...
**定義 [#k9562d8d]
主にモーター関係のものが多い、ついでなのでカウンターの設...
#define BB 30 //黒線の上なのかを識別するための閾値(しき...
#define BW 38
#define WB 52
#define WW 45
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define FWD OnRL(25,25); //前進をFWDとして定義
#define T_LEFT1 OnRL(30,0); //左折 サブルーチンCROSS_1,...
#define T_RIGHT1 OnRL(-10,20); //右折
#define Q_LEFT1 OnRL(25,-15); //左旋回
#define Q_RIGHT1 OnRL(-15,15); //右旋回
#define T_LEFT2 OnRL(20,0); //左折 サブルーチンCROSS_3...
#define T_RIGHT2 OnRL(8,25); //右折
#define Q_LEFT2 OnRL(20,-20); //左旋回
#define Q_RIGHT2 OnRL(0,25); //右旋回
#define STEP 5 //一回判断で行う動作の長さ
#define nMAX 30 //交差点識別用カウンターの最大値、ある動...
#define cross_line RotateMotorEx(OUT_AB,speed_ab,75,0,tr...
#define RMC(speed_c,-rad_c) RotateMotor(OUT_C,speed_c,ra...
#define speed_c 25 //アームの出力
#define rad_c 140 //アームの動作範囲
#define ARM1 RMC(speed_c,rad_c); //アームが空き缶をつか...
#define ARM2 RMC(speed_c,-rad_c); //アームが空き缶をはな...
#define speed_ab 30 //サブルーチンCATCH_CANの時のモータ...
int Online1=0; //交差点識別用カウンター、ある動作を数え...
int Online2=0; //交差点を渡った回数を数えるカウンター、...
int Online3=0; //
int Online4=0; //
int Online5=0; //
int Online6=0; //
int Online7=0; //
int OnRightangle=0; //ゴール付近のT字路を通過した回数を...
int OnRightangle2=0; //
このプログラムは交差点の識別やサブルーチンの切り替えタイ...
**空き缶を掴むサブルーチン [#r3b5894d]
sub CATCH_CAN() //空き缶をつかむ一連の動作のサブルーチン
{
RotateMotorEx(OUT_AB,speed_ab,70,0,true,true); //掴む...
ARM1; //缶を掴む
Off(OUT_C); //小休止、すぐに回頭すると微妙に位置がズレ...
Wait(500);
RotateMotorEx(OUT_AB,speed_ab,240,0,true,true); //回頭...
RotateMotorEx(OUT_AB,speed_ab,145,-100,true,true); //9...
Off(OUT_AB); //小休止
Wait(500);
RotateMotorEx(OUT_AB,speed_ab,330,0,true,true); //回頭...
Off(OUT_AB); //小休止
Wait(500);
RotateMotorEx(OUT_AB,speed_ab,360,100,true,true); //1...
ARM2; //缶を離す
Off(OUT_C); //小休止
Wait(500);
RotateMotorEx(OUT_AB,-speed_ab,200,0,true,true); //缶か...
RotateMotorEx(OUT_AB,speed_ab,410,100,true,true); //回...
}
私の場合は空き缶を直角カーブ上においたので空き缶をもとに...
**CROSS_1 [#r0d304e9]
sub CROSS_1() //はじめのT字路を通過するためのサブルーチン
{
while(OnRightangle<1){ //T字路を通過したらサブルーチンC...
while(Online1<nMAX){ //右旋回(Q_RIGHT1)をnMAX回以上...
if(SENSOR_1<BB){ //黒線上では右旋回を行う
Q_RIGHT1;
Online1++; //右旋回の回数をカウント
} else {
if(SENSOR_1<BW){ //黒線よりのところでは右折を行う
T_RIGHT1;
} else if(SENSOR_1<WB){ //黒線と紙面の中間ではまっすぐ...
FWD;
} else if(SENSOR_1<WW){ //紙面よりのところでは左折を行う
T_LEFT1;
} else { //紙面上では左旋回を行う
Q_LEFT1;
}
Online1=0; //カウンターをリセット
}
Wait(STEP); //左折や右折などを一回行うごとの長さ
}
RotateMotorEx(OUT_AB,speed_ab,50,0,true,true); //T字路...
RotateMotorEx(OUT_AB,speed_ab,180,100,true,true); //T字...
OnRightangle++; //T字路を通過した回数をカウント
Online1=0; //カウンタをリセット
}
}
普通にライントレースさせたのではT字路を上手く曲がること...
**CROSS_2 [#w228b187]
sub CROSS_2() //一回目の交差点を渡るまでのサブルーチン
{
while(Online2<1){ //交差点を一回渡ったらサブルーチンCRO...
while(Online1<nMAX){
if(SENSOR_1<BB){
Q_RIGHT1;
Online1++; //カウントするのは右旋回
} else {
if(SENSOR_1<BW){
T_RIGHT1;
} else if(SENSOR_1<WB){
FWD;
} else if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online1=0;
}
Wait(STEP);
}
cross_line; //交差点を渡る
Online2++; //交差点を渡った回数をカウント
Online1=0; //カウンタをリセット
}
}
基本的にCROSS_1と変わりがない、カウンターの数値が上限を越...
**CROSS_3 [#ibd9b9f3]
sub CROSS_3() //輪っかになっているところを動くサブルーチ...
{
while(Online3<1){ //交差点を一回渡ったらサブルーチンCRO...
while(Online1<nMAX){
if(SENSOR_1<BB){ //黒線上では左旋回を行う
Q_LEFT2;
Online1++; //今回は動きが逆になるので左旋回の回数をカ...
} else {
if(SENSOR_1<BW){ //黒線よりのところでは左折を行う
T_LEFT2;
} else if(SENSOR_1<WB){ //黒線と紙面の中間ではまっすぐ...
FWD;
} else if(SENSOR_1<WW){ //紙面よりのところでは右折を行う
T_RIGHT2;
} else { //紙面上では右旋回を行う
Q_RIGHT2;
}
Online1=0;
}
Wait(STEP);
}
cross_line;
Online3++;
Online1=0;
}
}
輪っかを動くサブルーチン。輪っかの内側をトレースしてしま...
**CROSS_4 [#y3dfe5b8]
sub CROSS_4()
{
while(Online4<1){ //交差点を1回渡ったら、CROSS_5へ移行...
while(Online1<nMAX){
if(SENSOR_1<BB){
Q_RIGHT1;
Online1++;
} else {
if(SENSOR_1<BW){
T_RIGHT1;
} else if(SENSOR_1<WB){
FWD;
} else if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online1=0;
}
Wait(STEP);
}
cross_line;
Online4++;
Online1=0;
}
}
こちらはCROSS_2とほとんど同じなので説明は割愛。
**CROSS_5 [#h97ef058]
sub CROSS_5() //このサブルーチンで交差点を識別するために...
{
while(Online5<1){ //交差点を渡ったらCROSS_6へ移行するよ...
while(Online1<nMAX){
if(SENSOR_1<BB){
Q_RIGHT1;
} else if(SENSOR_1<BW){
T_RIGHT1;
Online1++; //右折の回数をカウントする
} else {
if(SENSOR_1<WB){
FWD;
} else if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online1=0;
}
Wait(STEP);
}
cross_line;
Online5++;
Online1=0;
}
}
このサブルーチンもほとんどはCROSS_2と同じなのだが一つ違う...
**CROSS_6 [#m37fa7b3]
sub CROSS_6() //空き缶をつかむ直前のライントレース、前進...
{
while(Online6<1){ //空き缶を動かした後はCROSS_7へ移行す...
while(Online7<180){ //前進を180回行ったら超音波センサ...
if(SENSOR_1<BB){
Q_RIGHT1;
} else if(SENSOR_1<BW){
T_RIGHT1;
} else if(SENSOR_1<WB){
FWD;
Online7++; //前進した回数をカウントする
} else {
if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online7=0;
}
Wait(STEP);
}
OnFwdSync(OUT_AB,20,0); //空き缶を感知するまで前進
until(SensorUS(S2)<=15); //空き缶を15cm手前以内に感知し...
CATCH_CAN(); //空き缶をつかむ一連の動作のサブルーチン
Online6++;
Online1=0;
}
}
空き缶を掴む直前のライントレース、あるいは掴む動作とライ...
**CROSS_7 [#vf7e9cc1]
sub CROSS_7() //ゴール手前のT字路を通過するためのサブル...
{
while(OnRightangle2<1){ //直角を通過
while(Online1<nMAX){
if(SENSOR_1<BB){
Q_RIGHT1;
Online1++;
} else {
if(SENSOR_1<BW){
T_RIGHT1;
} else if(SENSOR_1<WB){
FWD;
} else if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online1=0;
}
Wait(STEP);
}
RotateMotorEx(OUT_AB,speed_ab,40,0,true,true); //T字路...
RotateMotorEx(OUT_AB,speed_ab,180,100,true,true); //T字...
OnRightangle2++; //T字路を通過した回数をカウント
Online1=0; //カウンタをリセット
}
}
こちらは基本的にCROSS_1と同じサブルーチンなので説明を割愛...
**メインタスク [#qf4e8c29]
ここで今までのサブルーチンを利用して一連の動作をすべてつ...
task main()
{
SetSensorLight(S1); //光センサーを設定
SetSensorLowspeed(S2); //超音波センサーを設定
CROSS_1(); //T字路まで
CROSS_2(); //輪っかの直前
OnFwd(OUT_A,50); //反対の縁をトレースするので反対側へ移動
Wait(500);
CROSS_3(); //輪っかを進む
OnFwd(OUT_B,50); //またトレースする縁が変わるので反対側...
Wait(600);
CROSS_4(); //短い直線を進む
CROSS_5(); //2つ目の輪っかを進む
CROSS_6(); //空き缶の直前までトレース
CROSS_7(); //ゴールのT字路まで
CROSS_2(); //ゴールを目指す
}
これがメインタスクである。多分文字ばかり読んでいても分か...
&ref(2013b/Member/Redcicudu/Mission1/らいん3.jpg,48.9KB,...
上の図において赤い線はCROSS_1、オレンジの線はCROSS_2、黄...
*まとめ [#m2fc770a]
**制作した感想 [#ia7f26e3]
プログラムに関しては考え方自体はシンプルで、自分なりに「...
また、超音波センサーが思った以上の曲者で、視野が狭いうえ...
ロボットの製作はほとんど自分が自由勝手にやらせてもらった...
**実際に動かしてみて [#v0e10f43]
皆の前で発表する前に何回も調整を施したにもかかわらず、は...
**改善点 [#oa9f0040]
改善点を挙げるとするならば、
+プログラムを見やすくシンプルにする。
+超音波センサーによる検知の精度を向上させる、もしくはそれ...
+ロボットをよりコンパクトに、低重心に、かつ部品点数を少な...
+もっと愛情を込めて作る
以上の三つを改善すればよりよいロボットに生まれ変わると思...
終了行:
[[2013b/Member]]
#contents
*コースと攻略方法 [#y2bdf8ae]
**コースについて [#a95be814]
&ref(2013b/Member/Redcicudu/Mission1/らいん1.jpg,39.9KB,...
コースは写真の通りである。今回は空き缶をコース上に配置し...
+交差点は合計4回通過しなくてはならない。
+急なカーブや直角なカーブがあり、プログラムによっては交差...
+輪っか状になっている部分が二つあり、こちらもプログラムに...
+空き缶は交差点から10センチ以上離して設置しなくてはなら...
以上が主な特徴である。
**攻略方法 [#xf054f62]
まず、私のプログラムはテキストの例を参考に作られているた...
*ロボットについて [#vb01f325]
&ref(2013b/Member/Redcicudu/Mission1/ろぼ4.jpg,36.4KB,い...
ロボットは写真の通り少し背高ノッポになってしまった。それ...
&ref(2013b/Member/Redcicudu/Mission1/ろぼ3.jpg,70.8KB,み...
アームは両側からはさむ形にした。広げきっているときはでき...
*プログラムについて [#q17d2328]
このプログラムはテキストのプログラムを参考にしている。私...
**定義 [#k9562d8d]
主にモーター関係のものが多い、ついでなのでカウンターの設...
#define BB 30 //黒線の上なのかを識別するための閾値(しき...
#define BW 38
#define WB 52
#define WW 45
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define FWD OnRL(25,25); //前進をFWDとして定義
#define T_LEFT1 OnRL(30,0); //左折 サブルーチンCROSS_1,...
#define T_RIGHT1 OnRL(-10,20); //右折
#define Q_LEFT1 OnRL(25,-15); //左旋回
#define Q_RIGHT1 OnRL(-15,15); //右旋回
#define T_LEFT2 OnRL(20,0); //左折 サブルーチンCROSS_3...
#define T_RIGHT2 OnRL(8,25); //右折
#define Q_LEFT2 OnRL(20,-20); //左旋回
#define Q_RIGHT2 OnRL(0,25); //右旋回
#define STEP 5 //一回判断で行う動作の長さ
#define nMAX 30 //交差点識別用カウンターの最大値、ある動...
#define cross_line RotateMotorEx(OUT_AB,speed_ab,75,0,tr...
#define RMC(speed_c,-rad_c) RotateMotor(OUT_C,speed_c,ra...
#define speed_c 25 //アームの出力
#define rad_c 140 //アームの動作範囲
#define ARM1 RMC(speed_c,rad_c); //アームが空き缶をつか...
#define ARM2 RMC(speed_c,-rad_c); //アームが空き缶をはな...
#define speed_ab 30 //サブルーチンCATCH_CANの時のモータ...
int Online1=0; //交差点識別用カウンター、ある動作を数え...
int Online2=0; //交差点を渡った回数を数えるカウンター、...
int Online3=0; //
int Online4=0; //
int Online5=0; //
int Online6=0; //
int Online7=0; //
int OnRightangle=0; //ゴール付近のT字路を通過した回数を...
int OnRightangle2=0; //
このプログラムは交差点の識別やサブルーチンの切り替えタイ...
**空き缶を掴むサブルーチン [#r3b5894d]
sub CATCH_CAN() //空き缶をつかむ一連の動作のサブルーチン
{
RotateMotorEx(OUT_AB,speed_ab,70,0,true,true); //掴む...
ARM1; //缶を掴む
Off(OUT_C); //小休止、すぐに回頭すると微妙に位置がズレ...
Wait(500);
RotateMotorEx(OUT_AB,speed_ab,240,0,true,true); //回頭...
RotateMotorEx(OUT_AB,speed_ab,145,-100,true,true); //9...
Off(OUT_AB); //小休止
Wait(500);
RotateMotorEx(OUT_AB,speed_ab,330,0,true,true); //回頭...
Off(OUT_AB); //小休止
Wait(500);
RotateMotorEx(OUT_AB,speed_ab,360,100,true,true); //1...
ARM2; //缶を離す
Off(OUT_C); //小休止
Wait(500);
RotateMotorEx(OUT_AB,-speed_ab,200,0,true,true); //缶か...
RotateMotorEx(OUT_AB,speed_ab,410,100,true,true); //回...
}
私の場合は空き缶を直角カーブ上においたので空き缶をもとに...
**CROSS_1 [#r0d304e9]
sub CROSS_1() //はじめのT字路を通過するためのサブルーチン
{
while(OnRightangle<1){ //T字路を通過したらサブルーチンC...
while(Online1<nMAX){ //右旋回(Q_RIGHT1)をnMAX回以上...
if(SENSOR_1<BB){ //黒線上では右旋回を行う
Q_RIGHT1;
Online1++; //右旋回の回数をカウント
} else {
if(SENSOR_1<BW){ //黒線よりのところでは右折を行う
T_RIGHT1;
} else if(SENSOR_1<WB){ //黒線と紙面の中間ではまっすぐ...
FWD;
} else if(SENSOR_1<WW){ //紙面よりのところでは左折を行う
T_LEFT1;
} else { //紙面上では左旋回を行う
Q_LEFT1;
}
Online1=0; //カウンターをリセット
}
Wait(STEP); //左折や右折などを一回行うごとの長さ
}
RotateMotorEx(OUT_AB,speed_ab,50,0,true,true); //T字路...
RotateMotorEx(OUT_AB,speed_ab,180,100,true,true); //T字...
OnRightangle++; //T字路を通過した回数をカウント
Online1=0; //カウンタをリセット
}
}
普通にライントレースさせたのではT字路を上手く曲がること...
**CROSS_2 [#w228b187]
sub CROSS_2() //一回目の交差点を渡るまでのサブルーチン
{
while(Online2<1){ //交差点を一回渡ったらサブルーチンCRO...
while(Online1<nMAX){
if(SENSOR_1<BB){
Q_RIGHT1;
Online1++; //カウントするのは右旋回
} else {
if(SENSOR_1<BW){
T_RIGHT1;
} else if(SENSOR_1<WB){
FWD;
} else if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online1=0;
}
Wait(STEP);
}
cross_line; //交差点を渡る
Online2++; //交差点を渡った回数をカウント
Online1=0; //カウンタをリセット
}
}
基本的にCROSS_1と変わりがない、カウンターの数値が上限を越...
**CROSS_3 [#ibd9b9f3]
sub CROSS_3() //輪っかになっているところを動くサブルーチ...
{
while(Online3<1){ //交差点を一回渡ったらサブルーチンCRO...
while(Online1<nMAX){
if(SENSOR_1<BB){ //黒線上では左旋回を行う
Q_LEFT2;
Online1++; //今回は動きが逆になるので左旋回の回数をカ...
} else {
if(SENSOR_1<BW){ //黒線よりのところでは左折を行う
T_LEFT2;
} else if(SENSOR_1<WB){ //黒線と紙面の中間ではまっすぐ...
FWD;
} else if(SENSOR_1<WW){ //紙面よりのところでは右折を行う
T_RIGHT2;
} else { //紙面上では右旋回を行う
Q_RIGHT2;
}
Online1=0;
}
Wait(STEP);
}
cross_line;
Online3++;
Online1=0;
}
}
輪っかを動くサブルーチン。輪っかの内側をトレースしてしま...
**CROSS_4 [#y3dfe5b8]
sub CROSS_4()
{
while(Online4<1){ //交差点を1回渡ったら、CROSS_5へ移行...
while(Online1<nMAX){
if(SENSOR_1<BB){
Q_RIGHT1;
Online1++;
} else {
if(SENSOR_1<BW){
T_RIGHT1;
} else if(SENSOR_1<WB){
FWD;
} else if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online1=0;
}
Wait(STEP);
}
cross_line;
Online4++;
Online1=0;
}
}
こちらはCROSS_2とほとんど同じなので説明は割愛。
**CROSS_5 [#h97ef058]
sub CROSS_5() //このサブルーチンで交差点を識別するために...
{
while(Online5<1){ //交差点を渡ったらCROSS_6へ移行するよ...
while(Online1<nMAX){
if(SENSOR_1<BB){
Q_RIGHT1;
} else if(SENSOR_1<BW){
T_RIGHT1;
Online1++; //右折の回数をカウントする
} else {
if(SENSOR_1<WB){
FWD;
} else if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online1=0;
}
Wait(STEP);
}
cross_line;
Online5++;
Online1=0;
}
}
このサブルーチンもほとんどはCROSS_2と同じなのだが一つ違う...
**CROSS_6 [#m37fa7b3]
sub CROSS_6() //空き缶をつかむ直前のライントレース、前進...
{
while(Online6<1){ //空き缶を動かした後はCROSS_7へ移行す...
while(Online7<180){ //前進を180回行ったら超音波センサ...
if(SENSOR_1<BB){
Q_RIGHT1;
} else if(SENSOR_1<BW){
T_RIGHT1;
} else if(SENSOR_1<WB){
FWD;
Online7++; //前進した回数をカウントする
} else {
if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online7=0;
}
Wait(STEP);
}
OnFwdSync(OUT_AB,20,0); //空き缶を感知するまで前進
until(SensorUS(S2)<=15); //空き缶を15cm手前以内に感知し...
CATCH_CAN(); //空き缶をつかむ一連の動作のサブルーチン
Online6++;
Online1=0;
}
}
空き缶を掴む直前のライントレース、あるいは掴む動作とライ...
**CROSS_7 [#vf7e9cc1]
sub CROSS_7() //ゴール手前のT字路を通過するためのサブル...
{
while(OnRightangle2<1){ //直角を通過
while(Online1<nMAX){
if(SENSOR_1<BB){
Q_RIGHT1;
Online1++;
} else {
if(SENSOR_1<BW){
T_RIGHT1;
} else if(SENSOR_1<WB){
FWD;
} else if(SENSOR_1<WW){
T_LEFT1;
} else {
Q_LEFT1;
}
Online1=0;
}
Wait(STEP);
}
RotateMotorEx(OUT_AB,speed_ab,40,0,true,true); //T字路...
RotateMotorEx(OUT_AB,speed_ab,180,100,true,true); //T字...
OnRightangle2++; //T字路を通過した回数をカウント
Online1=0; //カウンタをリセット
}
}
こちらは基本的にCROSS_1と同じサブルーチンなので説明を割愛...
**メインタスク [#qf4e8c29]
ここで今までのサブルーチンを利用して一連の動作をすべてつ...
task main()
{
SetSensorLight(S1); //光センサーを設定
SetSensorLowspeed(S2); //超音波センサーを設定
CROSS_1(); //T字路まで
CROSS_2(); //輪っかの直前
OnFwd(OUT_A,50); //反対の縁をトレースするので反対側へ移動
Wait(500);
CROSS_3(); //輪っかを進む
OnFwd(OUT_B,50); //またトレースする縁が変わるので反対側...
Wait(600);
CROSS_4(); //短い直線を進む
CROSS_5(); //2つ目の輪っかを進む
CROSS_6(); //空き缶の直前までトレース
CROSS_7(); //ゴールのT字路まで
CROSS_2(); //ゴールを目指す
}
これがメインタスクである。多分文字ばかり読んでいても分か...
&ref(2013b/Member/Redcicudu/Mission1/らいん3.jpg,48.9KB,...
上の図において赤い線はCROSS_1、オレンジの線はCROSS_2、黄...
*まとめ [#m2fc770a]
**制作した感想 [#ia7f26e3]
プログラムに関しては考え方自体はシンプルで、自分なりに「...
また、超音波センサーが思った以上の曲者で、視野が狭いうえ...
ロボットの製作はほとんど自分が自由勝手にやらせてもらった...
**実際に動かしてみて [#v0e10f43]
皆の前で発表する前に何回も調整を施したにもかかわらず、は...
**改善点 [#oa9f0040]
改善点を挙げるとするならば、
+プログラムを見やすくシンプルにする。
+超音波センサーによる検知の精度を向上させる、もしくはそれ...
+ロボットをよりコンパクトに、低重心に、かつ部品点数を少な...
+もっと愛情を込めて作る
以上の三つを改善すればよりよいロボットに生まれ変わると思...
ページ名: