課題

A4の紙に松本の大学生活を表す漢字一文字を書くロボットを製作する。 詳しくはこちら⇒課題1

選んだ字

今回、新たな挑戦と今までの自分からの脱却、そして改善へ努めるということで「革新」の革を選んだ。また、XYZ型を採用したということで、直角の多い字は適格と判断したためでもある。

ロボットの説明

字を書くロボットはおそらく大まかに直接走行型とXYZ型の2タイプに分かれるが、自分たちはXYZ型を製作した。今回製作したロボットは比較的大型になった。このロボットの概要について写真等を交えながら順次説明していく。

ロボ全体

(1)走行履帯(X座標)

「なぜ履帯を採用したか?」という質問に対する答えは単純で、履帯が好きだからだ。荒地を走る戦車の走行ほど素晴らしいものはない...それはさておき、機能性の観点から言及すると、安定性の向上とタイヤだと走行の際に生じる可能性のある滑りを無くすために履帯を採用したという一面がある。「履帯走行は振動が生じるため、字を書くのに適さないのではないか?」という意見もあるかもしれない。しかし実際に採用してみた結果、そうとは限らなかった。確かに初めて履帯走行で字を書いた時は字のブレが確認された。しかし主軸の間に補助輪を付けることによって、振動を字を書くのに支障のないレベルまで軽減することに成功した。また、細かい部分であるが前の部分にも補助輪を付けることにより、アームの重さに負けて傾くリスクを軽減した。

履帯

以下の写真が対傾斜補助輪である。

対傾斜補助輪

(2)アーム駆動部分(Y座標)

補助
内部ギヤ

ここではアームに歯を付け、ギヤを本体に付けて動かしている。ここで1:3のギヤ配置により、回転速度を下げてトルクを上げた。ここでギヤ装着部分と対称に、青と白の円状の部品を付けることでアーム駆動の安定性を高めている。さらにアーム姿勢制御補助輪を2つ付けることによってアーム全体の安定性を高めた。以下の写真2枚がアーム姿勢制御補助輪である。

前足

前の部分では直進性を高めるため、車輪に首振り機構は敢えて採用していない。

後ろ足

後ろの部分は首振り機構を採用したが、ここでこれが履帯走行の妨げになっている(字を書くのには大きく支障はない)という問題が発覚した。もう少し改良の余地はあったかもしれない。この部分はなくても機能上ほとんど問題はないが、より安定性を高めるために付けた。

(3)アーム先端駆動部分(Z座標)

ウォームギヤ

ここにウォームギヤを採用することにより、アーム先端の微調整駆動が可能になっている。モーターは当初は駆動部分のすぐ傍に設置していたが、Y座標アームの駆動範囲が狭まってしまう問題が発生したため、アームの後ろに設置してシャフトでモーターと繋ぐことにより、この問題を解決した。アーム先端とはプーリーで接続することにより、微妙な箇所との動力伝達を可能にした。細かいところであるが、ダブルプーリーとすることによってペン先の安定性を高め、駆動する際に生じる可能性のある座標ズレを抑えている。

(4)その他 

補強パーツ

他に工夫した箇所を挙げると、単純なところであるが、青い棒状の部品を付けることでY座標アーム駆動の際に生じる可能性のある部品脱離のリスクを抑えている。

プログラムの説明

自分のプログラムはあまり上手いとは言えないが、自分の可能な範囲で製作をした。ここではプログラムの概要を詳しく説明していく。

字の構築方法(革)

革 順番

赤:1パーツ(革の部首パーツ) 青:2パーツ(口パーツ) 緑:3パーツ(十パーツ)

革を書き順通りにプログラミングしてもよかったが、字の美を追求するため( 書き順で書くことこそが真の美であるとも言えるが...)に書き順通りで書かずに、合理的で効率の良い書き順書き方を選んだ。

プログラム詳細

少しでも入力間違いと動きを確認しやすくする、入力時間を大幅短縮する、すなわち「いかにシンプルにするか」を追求した。ここでは履帯走行とアームに関してはそれぞれXx、Yy(+は大文字、ーは小文字)のような座標系を導入している。ここでアーム先に関してはZzを導入してもよかったが、書き始めと書き終わりの動作を把握しやすくするためにはpen_up、pen_downの方が的確と判断した。ちなみにXx_S等の停止操作のプログラムに付いているSはStopの略である。また動作と動作の間は、0.8秒と余裕を持たせている。(字は丁寧に、そして繊細に書くことを自分は第一と考えているので、ロボットをせかすようなプログラミングは避けている。)

#define pen_down OnFwd(OUT_B);Wait(40);Off(OUT_B);Wait(80);//  //アーム先下げる
#define pen_up OnRev(OUT_B);Wait(40);Off(OUT_B);Wait(80);//    //アーム先上げる
#define Y OnFwd(OUT_C);//             //アーム拡張
#define y OnRev(OUT_C);//              //アーム収縮
#define Yy_S Off(OUT_C);Wait(80);//   //アーム停止
#define X OnRev(OUT_A);//             //履帯走行前進
#define x OnFwd(OUT_A);//             //履帯走行後退
#define Xx_S Off(OUT_A);Wait(80);//   //履帯走行停止
sub one_parts()//          //革の部首パーツ
{
 Y;               Wait(25);   //書き始める場所への座標移動
 Yy_S;
 x;               Wait(14);
 Xx_S;
 pen_down;           
 Y;               Wait(60);  //1番
 Yy_S;
 pen_up;            //ペンを上げて座標移動
 y;               Wait(15); 
 Yy_S;
 X;               Wait(14);
 Xx_S;
 pen_down;      
 x;               Wait(29); //2番
 Xx_S;
 y;               Wait(26); //3番
 Yy_S;
 X;               Wait(29); //4番
 Xx_S;
 pen_up;           //ペンを上げて座標移動
 x;               Wait(33);
 Xx_S;
}

sub two_parts()//            //革の口パーツ
{
 y;               Wait(22); //座標移動続き
 Yy_S;
 pen_down;                   
 x;               Wait(20); //5番
 Xx_S;
 Y;               Wait(67);  //6番
 Yy_S;
 X;               Wait(20);  //7番
 Xx_S;
 y;               Wait(67);  //8番
 Yy_S;
 pen_up;          //ペンを上げて座標移動
}

sub three_parts()//          //革の十パーツ
{
 Y;               Wait(33); //座標移動続き
 Yy_S;
 X;               Wait(12);
 Xx_S;
 pen down;          
 x;               Wait(90);  //9番
 Xx_S;
 pen_up;          //ペンを上げて座標移動
 X;               Wait(40);
 Xx_S;
 y;               Wait(45);
 Yy_S;
 pen_down;                  
 Y;               Wait(86); //10番
 Yy_S;
 pen_up;
 y;               Wait(86); //アーム収縮して終了
 Yy_S;
}

task main()   //メインプログラム
{
 one_parts();
 two_parts();
 three_parts();
}

まとめ

革

ロボット本体に関しては、試行錯誤しながら苦労して製作した結果、文句のない完成度となったと思う。また、このロボット製作を楽しんで行えたので良かった。パートナーがとても優秀で、時々壁にぶつかった時にアドバイスを貰ったのがスムーズに製作できた大きな一因であると思う。今回の課題ではチームワークの大切さも学んだ。革新の「革」に関してはほぼ完璧で特に言及することはないが、強いて言うならば、書き順通りに書いて究極の字の美を追求するか、物凄く難しい字に挑戦するべきだったと思う。今回の製作で分かったことは直角部分の多い字はXYZ型が最適で、はらい等が多い字は直接走行型が最適であるということだ。課題の都合上、モーターは3つしか使用できなかったが、もしあと1つ使用可能ならば、現在のロボットに直接アームをさらに1つ付けて、はらいと直角の部分を使い分けて字を書くようにすれば、より複雑な字を丁寧に書くことが可能になると思う。今までプログラミングに触れたことがなく、今回初めて製作した。あまり上手いとは言えないが、今後のプログラミング製作学習において今回の反省を機に、より高度なプログラムを組めるように頑張っていきたいと思う。

余談 

実はもう一文字挑戦した。松本の冬は凍るそうなので、「寒」を選んだ。しかしうまくいかなかった。ロボ本体に問題があるわけではなく、プログラム本体に問題があると思われる。やはり移動距離等を「革」を製作するときと同じように、正確に測定するべきだったと思う。もう少し時間をかければできたかもしれない。

寒

添付ファイル: file対傾斜補助輪.JPG 102件 [詳細] file革 順番.png 100件 [詳細] file補強パーツ.JPG 91件 [詳細] file内部ギヤ.JPG 99件 [詳細] file寒.jpg 108件 [詳細] file補助.jpg 102件 [詳細] file後ろ足.jpg 104件 [詳細] fileギヤ.jpg 96件 [詳細] file革.jpg 93件 [詳細] file前足.jpg 100件 [詳細] file履帯.jpg 105件 [詳細] fileロボ全体.jpg 130件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-12 (土) 23:22:36