[[2015b/Member]]
*課題:書道ロボット 〜島〜 [#zfbf9441]
**課題目的 [#p85aacfd]
マインドストーム(RIS)を用いて書道ロボットを制作することを通し、ロボット製作の基礎を学ぶ。
**課題条件 [#u04473dd]
�� 出身地の地名、もしくは姓名から文字を選択すべし
�� 総画数7画以上の文字にすべし
以上
*目次 [#gf656063]
#contents
*ロボット紹介 [#z3583038]
我々のロボット車型である。前後移動を行う車輪と、左右に動くアーム(
&color(#0000FF){青枠};
)が存在する。この2つによりペンは移動し線を引く。ロボットの形状は、強いて言うならば、モーターグレーダに似ているのではないだろうか?百聞は一見に如かず。下図は件のロボットである。
#ref(2015b/Member/S_Toya/Mission1/ALL_left_front2.png)
またペンの上げ下げは
&color(#FF0000){赤枠};
で括られているアームで行うことができる。
以上がR3班によるロボットの基本形となる。ロボットの詳しい機構や創意工夫を凝らした点については次の章で紹介していく。
以上がR3班によるロボットの全体像となる。ロボットの詳しい機構や創意工夫を凝らした点については次の章で紹介していく。
*ロボット製作 [#w168171d]
**足回り [#q5e47fc4]
今回使用可能のモータは3つ。ペンの上げ下げで1つ。左右の移動で1つ。
したがって、駆動輪に用いることのできるモータは必然的に一つのみとなるのだ。
そこで我々は以下のような機構を考えた。
#ref(2015b/Member/S_Toya/Mission1/back_motor.jpg)
中央左側歯車:モータとつながる
中央右側歯車(タイヤ横のギザギザ):車軸とつながる
まず、タイヤが2つついた車軸を用意する。車軸の任意の中間地点にギアを入れる。別でモータにギアをつけておく。車軸のギアとモータのギアを噛ます。
したがって、我々はひとつのモータで2つのタイヤを回転させることに成功しロボット製作の第一歩を踏み出したのであった。
**左右になめらかに動く腕 [#o48e4837]
横の画を書くために必要となるのがここの機構である。要となるのは下図である。
#ref(2015b/Member/S_Toya/Mission1/gia.jpg)
説明しよう。まず、洗濯板の様な部品用意する。これを、ギアと噛みあわせると洗濯板が移動するという仕組みだ。言うなれば、この洗濯板は"板型歯車"であろう。
&size(24){しかし};
こいつらは、レゴブロックなのである。すなわち、洗濯板を下手に固定してしまうと全くもって動かなくなってしまうのである。洗濯板の下部は滑らかなナニカが必要となる。
しかし、RISに付属するパーツに凹凸のない平らなパーツ、そんなものは存在しない。万事休すか。肩を落としたその時、相方が思いついたのだ。
&size(20){「接合しないパーツを使えば良いのではないか?」};
RISには様々なパーツが存在する。その中で謎の管が存在した。どうやって連結させるのかよくわからない
&color(#00CED1){細長い管};
がある。
#ref(2015b/Member/S_Toya/Mission1/tube.jpg);
上図かその管である。この管の上に板状のパーツをつけた部品の下で支えとして置く。その左右を固定することにより、安定性を図る。
#ref(2015b/Member/S_Toya/Mission1/left_front.png);
当初、「絶対無理だ」と2人で笑いながら組み立てていたのを覚えている。しかし、[RUN]のスイッチを押したときその目を疑った。動いたのだ。
管の上に接合部(レゴの凹凸)は存在しないため固定されたり、無駄な抵抗を受けるわけでもないため、動いたのだ。
相方は何故か「私は馬鹿だ」と卑下していたが、私は「さすが
&color(#006400){独創性大学};
。ユニークだ」と感じざるを得なかった。
その後、更に補強を加え、より滑らかにペンが左右に移動する機構が出来上がった。
**筆置き [#ef5ad371]
ロボットの動きはすべてプログラムで制御される。それは動いているときにかかわらず、止まる時も同様だ。
今回のロボットはペンを持つ。筆を下げることにより紙に線を引き、上げることで引くのをやめる。
つまり、普通に組み立てたらプログラム時に(ペンを下げる)(ペンを上げる)(ペンを上げたあと静止させる)の3つのプログラミングが必要となる。正直非常に
&color(#ff0000){面倒};
であり、
&color(#ff0000){複雑};
となる。これでは人間もロボットも非常に効率が悪くなり、エラーが発生しやすくなるため、どうにか単純化できないかと考えた。
その結果、下図のようなものが生まれた。
#ref(2015b/Member/S_Toya/Mission1/lefr_side.png);
各部分について先に説明をする。
&size(22){ペンに沿った&color(#ffA500){黄色い部品};。};
これがペンを上げ下げするアームだ。ペンの端(画面左側)がモータとつながっている。そこを支点とし回転(左回り)させることにより、ペンが紙に接する仕組みとなる。
&size(22){ノートの切れ端};
これが我々の工夫のポイントとなる、
&size(20){筆置き};
である。
線を書き終わり、ペン先が最頂部を超えたらプログラムの命令を止める。そうすることにより、ペンは重力に従って回転を続ける。ここで筆置きがあることにより、わざわざ回転を停止させる命令を送らなくても、ペンが支えられるため、紙を汚さずに済むのだ。また、元々筆置きは単なるレゴのパーツであり凹凸が激しかった。したがって、ペンを左右に移動させる際にガタガタと本体全体に振動を与え安定性にかけていた。ここで、その凹凸をなくすために我々は
&size(22){紙を巻いた};
。紙を巻くことにより、激しい凹凸は消え、安定性が向上したのだ。
**補強用車輪 [#c82b5eb5]
このロボットの全長は比較的長い。したがって補強が重要となる。
ゆえに、中間部に車輪を一つつけた。このことにより、真ん中でRISの重さに耐えられずシャーシが折れることはなくなる。
#ref(2015b/Member/S_Toya/Mission1/right_side_tube2.jpg)
*プログラミング [#j702fce5]
プログラミングは主に下に示す定義文により構成をすることで、作業の簡素化を図った。
#define FRONT_M(a) OnFwd(OUT_A);Wait(a);Off(OUT_A);Wait(100); //前進
#define BACK_M(b) OnRev(OUT_A);Wait(b);Off(OUT_A);Wait(100); //後退
#define RIGHT_M(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);Wait(100); //腕を右に
#define LEFT_M(s) OnRev(OUT_B);Wait(s);Off(OUT_B);Wait(100); //腕を左に
#define ARM_ON OnRev(OUT_C);Wait(10);Off(OUT_C);Wait(150); //ペンを下げる
#define ARM_OFF OnFwd(OUT_C);Wait(10);Off(OUT_C);Wait(150); //ペンを上げる
ポイントとしてはすべての作業の後に1〜1.5秒間の待ち時間を作ったところだろう。本来この待ち時間はなくても良い。しかし、無い場合、動作が俊敏になり、まもなく20歳を迎えようとしているRISに多大な衝撃を与えることにつながる。それは、正確に文字を記述できないことにつながるのは自明だ。
よって、最後に停止時間を設け、ゆっくりと字を書かせるようにした。
以下プログラム全文(定義分文を除く)である。
task main()
{
LEFT_M(12);// ��
ARM_ON;
OnRev(OUT_AB);
Wait(2);
Off(OUT_AB);
Wait(100);
RIGHT_M(16);// ��
BACK_M(10);
LEFT_M(15);
ARM_OFF;
FRONT_M(8);// ��
ARM_ON;
RIGHT_M(15);
ARM_OFF;
LEFT_M(15);
FRONT_M(8);// ��
ARM_ON;
BACK_M(13);
ARM_OFF;
FRONT_M(4);// ��
ARM_ON;
RIGHT_M(15);
ARM_OFF;
LEFT_M(15);
BACK_M(3);// ��
ARM_ON;
RIGHT_M(18);
BACK_M(10);
OnFwd(OUT_A);
OnRev(OUT_B);
Wait(5);
Off(OUT_AB);
ARM_OFF;
LEFT_M(9);// ��
FRONT_M(6);
ARM_ON;
BACK_M(6);
ARM_OFF;
LEFT_M(10);// ��
FRONT_M(6);
ARM_ON;
BACK_M(4);
RIGHT_M(10);
ARM_OFF;
FRONT_M(4);// ��
ARM_ON;
BACK_M(5);
ARM_OFF;
}
� 銑�は書き順を示したものである。
任意の画の書き始めは下図の数字と対応している。
#ref(2015b/Member/S_Toya/Mission1/shima2.jpg);
プログラム内部で苦戦したのがパーツの出力との兼ね合いである。よく読むと移動している長さが計算上合わない場所が多々存在する。それは、モータの出力能力が影響しているからだ。
衝撃的なことにRISにおける、0.01~0.02の0.01秒間と、0.07~0.08の0.01秒間は同じ時間でも、モーターの回転が異なるのだ。したがって、計算上数値があっているように見えても、実際動かすと時のバランスがガタガタになってしまうのだ。
よって我々は泥臭い微調整を行い、なんとか文字にするに至ったのだ。
*考察 [#ye0e1028]
一つ一つの機構に対し、創意工夫を盛り込みつつ、ロボット製作の基礎を学ぶという課題目標は果たすことができたと思う。
時間があれば、モータにつける歯車を小さくし、動作をよりゆっくり行うことにより、安定した字を書くことができればよかったという後悔がのこる。現段階だと同じプログラムでも、ロボットを動かすと完成した字は、まったくの別物となることが多く、安定しているとはとても言いがたいシロモノであった。
プログラムは定義分を効果的に使うことにより、見やすく且つ訂正のしやすい、扱いやすいプログラムが書けたと思う。
*作品 [#q1d2485e]
このような字にしあがった。正直、練習の方が上手くいったが、仕方あるまい。
#ref(2015b/Member/S_Toya/Mission1/ji.jpg)
*感想 [#td7eb182]
正直、一週間で書道ロボットを作ることになるとは思ってもいなかった。しかし、ハードであるからこそ全力でロボット製作に打ち込むことができたのだと思う。
書道ロボ製作を通し基礎的な制作方法とプログラミングを習得することは出来たと思う。一部悔いの残るところはあるものの、次回への糧としたい。
また他の班のロボットを見て、「その発想はなかった」と思うことだらけだったため、参考にしていきたい。