色々な改造やプログラミングを模索していた結果、徹夜をするハメになったロボット。

「木」を書くロボット 完成までの道のり。

どのようにペンを上下させるか?

締め切り1週間前の授業で、ペンの上下方法が決定。タイヤでボールペンを挟み、片側のタイヤをモーターと直結することにより、ペンを上下させた。
本体の後ろ側にペンの取り付け部を作成し、重心を考えモーターは前に設置した。

初号機

曲線へのこだわり

他のチームは三画目と四画目がほとんど直線だが、このチームは何故か最初から曲線案だった。変わり者?
始めはSetPowerによる曲線を提案したが、この後寮へ持ち帰って走らせたところ、真っ直ぐ進まない事が判明。そこで修正のためにSetPowerを使ってしまったため、他の方法で曲がらせるしかなかった。
そこで片輪をWaitとOnFwdで繰り返し、遅らせることにより曲線を描かせようとした(Offだと曲がりすぎる)。が、しかし、あまり遅らせる事ができず撤回。
いっそのこと片輪をFloat状態にしてみたところ、これが意外に良い曲線を描いた。今考えてみると、このFloatのせいで誤差が生じているのかもしれない。

いかにして動力を伝えるか?

重心を考え、前にモーターを置いたはいいが、どのように動力を伝えるか問題だった。
そこで、先生方の作った「達筆ロボット」の一部を参考にさせてもらい、タイヤの軸とモーターの軸をビニールチューブで繋いだ。(先生方に感謝)
うまく空回りもするので、常にペンを地面に押し当てることが可能になった。

動力伝達部

取り付け位置の問題

ペンを本体から離れた場所に設置したため、ロボットの動きとペンの動きに差が生じてきた。
また、書くたびに形が変わるので、ここにきて改造が必要と考え始めた。
なるべくペンを本体に近づけるため、ボールペンを固定していた4つのタイヤを2つに減らし、本体に密着させた。タイヤの間が狭くなったので細いボールペンに交換し、ペンの固定が緩くなったので、小さいパーツを使うことで押さえつける事にした。
また、RCX本体を横向きにして、少しでも駆動輪に近づけ、ロボットと同じ動きで書けるように努力した。

          対策前           →→→→→         対策後

Before After After2

ひたすら微調整

ペンと本体とのリーチを変えたため、時間をまた一から調整し直すしかなかった。
寮の2Wの廊下に大量の「木」が書かれているが、このロボットのしわざである。(こまくさ寮よ、申し訳ない)
相変わらず書くたびに形は変わるが、何とか「木」の形に見えるようにした。

考察

工夫した点

  • 木の「八」の部分を何とか曲線にした。(下の完成写真を参照)
  • 行動一つ一つに間をおき、振動によるずれを緩和した。

苦労した点

  • なぜか真っ直ぐ進まなかった。
     片方のモーターの出力を落とすことにより解決。モーターの個性なのかも。~
  • 強度不足が深刻で、幾度となく崩壊を繰り返してきた。
     車体を短くし、ブロックで補強できそうな所はとにかく固定した。
  • 動力部とペンの距離が長すぎて、ロボットとの動きに差が生じた。
     これも車体を短くすることで解決。駆動輪とほぼ平行に。
  • 振動で書ける場所と書けない場所がでてきた。
     書く場所では常にモーターを回し続けることで解決。
     あまりモーターに負担がかからないように、動力伝達部分にビニールチューブを使った。
     これにより、力のかかりすぎた時は空回りするようにした。

これからの課題

  • 書くたびに形が違ってくる。
  • ペンの固定があまり出来てないので、目的にあった組み立て方を考える。

反省

今回は2人でプログラミングをした。出来れば全員集まって、皆の意見を出し合いながら製作したかった。
初めてロボットを製作した感想だが、ロボットに漢字の一文字を書かせるために、こんなに時間と根気がかかるとは思わなかった 。
それと作製後に考えたが、やはり筆ペンを持たせた方が楽だったなと思った。これからの製作にむけて、いい経験になったと思う。

プログラム

気まぐれな曲線バージョン //製作者:少年・ムーディ

#define TURN_TIME 90   //90度旋回時間  
#define TURN_TIME2 67   //微調整時間
#define PENUP 5   //ペン上げ時間
#define progress(t) OnFwd(OUT_A+OUT_C);Wait(t);Off  (OUT_A+OUT_C);  //前進
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME);Off(OUT_A+OUT_C);  //右折(90度)
#define pen_down OnFwd(OUT_B);  //ペン下げ
#define pen_up OnRev(OUT_B);Wait(PENUP);Off(OUT_B);  //ペン上げ
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);  //後進
#define turn_right2 OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME2);Off(OUT_A+OUT_C);  //右折(約45度)
#define turn_left2 OnFwd(OUT_C);OnRev(OUT_A);Wait(TURN_TIME2);Off(OUT_A+OUT_C);  //左折(約45度)
#define ma Wait(20);  //待機時間
task main()
{
SetPower(OUT_C,2);  //直進しないため、車輪の力調整。
SetPower(OUT_B,7);  //ペンの筆圧調整用
pen_down;progress(100);pen_up;   //一画目
ma;
back(95);
ma;
turn_right;           //ここでペンが二画目の近くへ
ma;
back(5);       //微調整
ma;
pen_down;progress(125);pen_up   //二画目
ma;
back(125);            //来た道を戻る
ma;
turn_right2;     //角度の調整
progress(34);     //書き始めの調整
ma;
pen_down;OnFwd(OUT_A);Float(OUT_C);Wait(100);Off(OUT_A+OUT_C);ma;pen_up;   //三画目(曲線)  
OnRev(OUT_A);Float(OUT_C);Wait(100);Off(OUT_A+OUT_C);   //曲線バック
ma;
back(30);      //位置の調整
ma;
turn_left2;     //角度の調整
turn_left2;
ma;
progress(33);    //書き始めの位置調整
pen_down;OnFwd(OUT_C);Float(OUT_A);Wait(100);   //四画目(曲線)
Off(OUT_A+OUT_B+OUT_C);   //終了
}

完成写真

三画目と四画目の書き始めをもう少し早くすれば改善できたと思う。やはり気まぐれなためか、書くたびに変わってしまう。
寮の廊下では上手くいったのだが・・・

曲線バージョン

おまけ 割と正確な直線バージョン //製作者:少年

#define TURN_TIME 90   //90度回転
#define TURN_TIME2 45     //45度回転
#define PENUP 5     //上げる時間
#define progress(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);   //前進
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME);Off(OUT_A+OUT_C);   //左折
#define pen_down OnFwd(OUT_B);   //ペン下げ
#define pen_up OnRev(OUT_B);Wait(PENUP);Off(OUT_B);   //ペン上げ
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);   //後進
#define turn_right2 OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME2);Off(OUT_A+OUT_C);   //微妙に左折
#define turn_left2 OnFwd(OUT_C);OnRev(OUT_A);Wait(TURN_TIME2);Off(OUT_A+OUT_C);   //微妙に右折
#define ma Wait(20);   //待機時間
task main()
{
SetPower(OUT_C,2);    //直進しないため、調整
SetPower(OUT_B,7);    //ペンの筆圧調整
pen_down;                 //一画目
progress(100);
pen_up;
ma;
back(95);
ma;
turn_right;
ma;
back(5);
ma;
pen_down;        //二画目
progress(125);
pen_up;
ma;
back(125);
ma;
turn_right2;
progress(34);
ma;
pen_down;        //三画目
progress(100);
ma;
pen_up;
back(100);
ma;
back(30);
ma;
turn_left2;
turn_left2;
ma;
progress(38);
pen_down;        //四画目
progress(100);
Off(OUT_A+OUT_B+OUT_C);  //終了  
}

コメント欄

よろしければアドバイスをお願いします。

  • モータにも個体差があり、多少スピードが違うかもしれません。またギアやブロックのすき間の僅かな違いで摩擦が変り、結果として左右のスピードが同じにならないこともあります。 そのあたりをSetPowerで解決できたということですね。 -- 松本(教員)? 2006-05-26 (金) 22:22:13


添付ファイル: fileSN310096改良.JPG 372件 [詳細] fileSN310095改良.JPG 305件 [詳細] fileSN310094改良.JPG 278件 [詳細] fileSN310091改良.JPG 289件 [詳細] fileSuimoku_A2R.jpg 261件 [詳細] fileSN310095.JPG 130件 [詳細] fileSN310092.JPG 273件 [詳細] fileSN310096.JPG 139件 [詳細] fileSN310094.JPG 127件 [詳細] fileSN310091.JPG 123件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-05-31 (水) 08:46:03