2007a/MemberOnly/進行状況A

メンバー紹介

●新井田 宏

●荒川 舞

以上2名です。

課題のこと

書道ロボットを作成、という課題でした。

初めてでどうなるか不安だったけど、とりあえず形になったと思います。

ロボットのこと

本体

最初に作ったロボットをそのまま使いました。
足には片側ずつに同じ丸いギアで2つの大きさの違った2つローラーをつけたロボット。


021.jpg   ←アームをつける前の状態。

  • 改善点

アームをどうするかということで頭の中がいっぱいで、本体を改造する構造までいきませんでした。
次回はもっと構想を練って、しっかりとした自分たちのロボットを作り上げたいです。

アーム

まず、ペンをどのようにするかというところから考え、上下に動くアームを作ろうということになりました。
ボックスの中にラックギアがあったので、これと歯車のギアを使い、上下に動かせるようにと構想しました。
ラックギアにはペンを持たせられるような腕を、歯車にはRCXからの命令を受けるようにし、2つをかみ合わせアームを完成させました。


↓アームを装着。

015.jpg016.JPG

  • 苦労した点

まず歯車が早く回りすぎペンが下まで行き過ぎそうだったのと、逆にペンを持った腕が重くて、上に上がり辛かったことです。
これは、プログラムのSetPowerを用いることで解決しました。

直線のギアは固定するわけにはいかないので(腕の上下のためにスライドさせるから)どのように一定の場所に動かないようにしようかということです。
これは、アームの後ろにパーツを付けて移動を制限することで解決できました。

その他

ロボットの「安定」という点に苦労しました。

アームができ、いざペンを持たせて字を書こう、となった時のことです。
このロボットは後ろ向きで字を書くようになっているのですが、字を書いていて前に進んだ時、グラグラと前後に揺れるという問題が出てしまいました。
アームで添付されている写真のように、アームだけだと前に重心が傾いていると思い、後ろに重りをつけることで真ん中に重心が来るようにしました。(下の写真)
前に動く際に少しグラつくこともありましたが、重心を調節することである程度解決できました。


 ↓尻尾を装着。

019.jpg020.jpg

  • 改善点

アームの構想が出来た時にもう少し本体とのバランスなども考えて色々と変更するべきだと最後の方に実感しました。 アームとのバランスも考えてタイヤの間隔を前後に広げてバランスを取りやすくしたり、アームの形をもう少しバランスの取れた形にするべきでした。 今回のことを生かし、次回はバランスを取ることに注意してロボットを作りたいです。

プログラムのこと

【田】という字を書きます。

#define TURN_TIME 124
#define WALK_TIME 160


sub write_walk()               //ペンを下ろして後ろ向きに歩く。
{
   SetPower(OUT_B,1)
   OnFwd(OUT_B);Wait(20);
   Off(OUT_B);
   OnRev(OUT_A+OUT_C);Wait(WALK_TIME);
   Float(OUT_A+OUT_C);
   SetPower(OUT_B,2)
   OnRev(OUT_B);Wait(20);
   Off(OUT_B);Wait(20);
}


sub half_walk()               //一画の半分を歩く。
{
   OnFwd(OUT_A+OUT_C);Wait(80);
   Off(OUT_A+OUT_C);Wait(20);
}


sub ahead_walk()              //前向きに歩く。
{
   OnFwd(OUT_A+OUT_C);Wait(WALK_TIME);
   Off(OUT_A+OUT_C);Wait(20);
}


sub turn_right()               //右側に曲がる。
{
   SetPower(OUT_A,OUT_C,3)
   OnFwd(OUT_A); OnRev(OUT_C);
   Wait(TURN_TIME);
   Off(OUT_A+OUT_C);Wait(20);
}


sub turn_left()               //左側に曲がる。
{
   SetPower(OUT_A,OUT_C,3)
   OnRev(OUT_A); OnFwd(OUT_C);
   Wait(TURN_TIME);
   Off(OUT_A+OUT_C);Wait(20);
}


sub mini_walk()               //調整するために進む。
{
   OnFwd(OUT_A+OUT_C);Wait(120);      
   Off(OUT_A+OUT_C);Wait(20);
}

task main()         //「田」を書きます。
{
  write_walk();                     //1画目。
  ahead_walk();                     //↑の頂点にペンを重ねる。
  mini_walk();
  turn_left();
  OnRev(OUT_A+OUT_C);Wait(120);      
  Off(OUT_A+OUT_C);Wait(20);
  write_walk();                     //2画目(横)。
  mini_walk();                      //↑の末端にペンを重ねる。
  turn_right();
  OnRev(OUT_A+OUT_C);Wait(120);      
  Off(OUT_A+OUT_C);Wait(20);
  write_walk();                     //2画目(縦)。
  ahead_walk();                     //元のルートを戻る。
  mini_walk();
  turn_left();
  half_walk();
  turn_right();                     //2画目(横)の中心にペンを重ねる。
  OnRev(OUT_A+OUT_C);Wait(120);      
  Off(OUT_A+OUT_C);Wait(20);
  write_walk();                     //3画目。                   
  half_walk();                      //↑の中点にロボの真ん中を重ねる。
  mini_walk();
  turn_left();                      //1画目の中点にペンを重ねる。
  OnRev(OUT_A+OUT_C);Wait(38);      
  Off(OUT_A+OUT_C);Wait(20);
  write_walk();                     //4画目。
  ahead_walk();                     //1画目の末端にペンを重ねる。
  turn_left();
  half_walk();
  turn_right();
  write_walk();                     //5画目。
  OnFwd(OUT_A);OnRev(OUT_C);        //最後に3/4周回転して正面を向く。
  Wait(372);
  Off(OUT_A+OUT_C);Wait(20);
}
・プログラムについて
  一画一画の書き始めを、他の線に重ねるようにしたかったのですが、難しかったです。
  プログラムに関数を使って短くしようと思ったのですが、長くなってしまいました。
  「田」は一画が全部同じ長さなので関数を使おうと思ったけれど、
  書き始めの調節を考えると無理に関数を使わなくても良かったな、と思いました。
   あとは、1度成功したと思っても何回か後に動かすと動きがかわってしまうことがありました。
   それの解決策は未だに解らないままです。
   これからはそこも理解できるようがんばりたいです。

【木】という字を書くプログラム

#define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);  //直進
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);         //後退
#define turn_left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);              //左回転
#define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);             //右回転
void  write(int t)       //アームを操作してt時間後退させながら文字を書かせる
{
  SetPower(OUT_B,1);        //アームを下ろす
  OnFwd(OUT_B);
  Wait(30);
  Off(OUT_B);
  Wait(50);
  OnRev(OUT_A+OUT_C);        //字を書く
  Wait(t);
  Float(OUT_A+OUT_C);
  Wait(50);
  SetPower(OUT_B,2);         //アームを上げる
  OnRev(OUT_B);
  Wait(30);
  Off(OUT_B);
}
task main()
{
  SetPower(OUT_A+OUT_C,4);
  write(150);        //1画目
  go_straight(195);
  turn_right(115);
  back(80);
  write(230);        //2画目
  go_straight(310);
  turn_right(40);
  back(120);
  write(150);        //3画目
  go_straight(275);
  turn_left(80);
  back(120);
  write(150);        //4画目
  Off(OUT_A+OUT_C);
}
・工夫した点
  アーム移動して文字を書かせる際に一時停止させることでロボットを安定させました。
  また、ペンを持たせて1回転させた際の中心の距離を調べ、ペンの位置を調整する工夫をしました。
   ※back(120);をすることで、回転する際の中心にペンを移動させました。
  マクロと関数で動きを定義させることで、式を見やすくしました。

完成した文字

「田」

070524_1.jpg
作:荒川 舞

「木」

070524_3.jpg
作:新井田 宏

感想

  ●新井田 宏

今回はアームの構想を考えるのに苦労しました。 そして、アームの構想に時間を費やしてしまったせいで、他の事にあまり手を付けられなかったのが残念です。 次回はアームも含めた全体像をしっかりと作り、もっと計画的に進めていきたいです。

今回のホームページ作成は荒川さんがメインでやってくれたので、自分ももっと勉強して、次回はよりよいホームページを作成できるようにしたいです。


  ●荒川 舞

 やっぱりアームを作って動かすのが大変でした。
 アームの構造はもちろんだけど、それ以上に微調節(ペンの上下や固定、書くときの安定)に時間がかかってしまって驚きました。

 私の方は今までプログラム作成のほとんどを新井田君に任せていたので、今回一人で全てのプログラムを作り、作成は大変だと知りました。
 コマンド(?)の使い方や、ギアの回る原理。
 そういったことをしっかり理解していきたいです。

コメントをどうぞ

  • 写真の撮り方を工夫して、閲覧者にわかやすくしていることが伺えるが、少し詰めが甘い。 -- ヒロヤ? 2007-05-24 (木) 01:05:03
  • もう少しロボットの解説が欲しい。 -- まいける(TA) 2007-05-24 (木) 08:16:49
  • 『直線になったギア』は『ラックギア』と言います。 -- 松本 2007-05-24 (木) 08:45:31
  • レポートとしてまとめる時に、「まとめ」や「感想」にプログラムやロボットに対する考察をいれるよりも、きちんとロボットはロボットの所に、プログラムならプログラムに関するものとして、議論や考察をまとめたほうが、同じ内容のことが書かれていても、後者のほうがよりよくまとまったレポートになるかと思います。 -- まいける(TA) 2007-06-01 (金) 00:49:38
  • 本題とあまり関係ありませんが、写真を添付する際にはもっとファイルサイズを小さくしましょう。640x480や480x320でも十分だと思います。 -- 松本 2007-06-05 (火) 14:49:06
  • 二人の別々の感想を書いている点、また尻尾を装着するまでの過程をきちんと書いてある点がよい。 -- ヒロヤ? 2007-06-06 (水) 22:25:00


添付ファイル: file070524_3.jpg 277件 [詳細] file070524_1.jpg 383件 [詳細] file070524_2021~02.JPG 133件 [詳細] file070524_2021~01.JPG 135件 [詳細] file021.jpg 268件 [詳細] file020.jpg 264件 [詳細] file015.jpg 256件 [詳細] file019.jpg 280件 [詳細] file016.JPG 288件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-06-06 (水) 22:25:00