2019b/Member

目次

概要

課題1にて作成したNXTを用いたお絵かきロボットです。
相方の似顔絵を書くというものでした。

ロボットの説明

20191121190441.jpg

これが今回私達が作ったロボットです。
二本のアームがひし形みたいになっており、左右をいい感じに回すことで
ペン先を縦横無尽に動かすことができます()
ペン先を持ち上げる場所は、当初はこのマシンの下につけるつもりでしたが、
考えなしにアームを作る機構をはしゃいで作っていたらそんな余地はありませんでした。
上に乗っかているなんかかっこいいやつがほぼ180°回転し、持ち上げるシンプルなものとなっています。
少しこの昇降機でこだわった点が、重心を後ろに乗せることでモーターへの負担を減らすようにしたことです。
NXTの本体はこの中のどのパーツよりもクッソ重くて、真ん中に乗っけるとモーターくんがとんでもない音を出してくれます。なんとかしようと思い後ろに乗っける形に落ち着きました。
見た目がごちゃついているところが一押しです。

20191121190600.jpg

アームの先端のペンを括り付けてあるところです。
ここで拘ったところはアームが合体するところを1点にすることと、ペンの取り外しやすさです。
最初は適当に固定していましたが、グニャグニャになってしまったのでなんとなく交点を1点にすることで解決しました。
ペンをつけるところは、レゴの板でひっついているためすごい簡単に取り外しができます。
地味にかなり便利でした。

プログラムの紹介

#define S 10  //speed
#define A 193 //昇降機の回転幅
task main ()
{
	RotateMotor(OUT_A,20,A);
	RotateMotor(OUT_B,S,100);
	RotateMotor(OUT_A,20,-A);
	OnFwd(OUT_B,13);
	OnFwd(OUT_C,11);
	Wait(1200);
	OnFwd(OUT_B,5);
	OnFwd(OUT_C,16);
	Wait(900);
	Off(OUT_BC);   //毎回Offしないと上手く行かなかった
	OnFwd(OUT_B,-18); //(defineに登録すればよかったのでは?)
	Wait(900);
	Off(OUT_BC);
	OnFwd(OUT_BC,-10);
	Wait(1400);
	Off(OUT_BC);
       OnFwd(OUT_B,15);
	OnFwd(OUT_C,9);
	Wait(550);
	Off(OUT_BC);
	Wait(500);
	OnFwd(OUT_C,-18);
	OnFwd(OUT_B,-14);
	Wait(400);
	Off(OUT_BC);
	Wait(500);
	OnFwd(OUT_B,15);
	OnFwd(OUT_C,8);
	Wait(530);
	Off(OUT_BC);
	Wait(500);
	RotateMotor(OUT_C,13,-80);
	Off(OUT_BC);
	Wait(500);
	OnFwd(OUT_B,S);
	OnFwd(OUT_C,-8);
	Wait(200);
	Off(OUT_BC);
       RotateMotor(OUT_A,20,A);   //ここから顔を書くためにRotateMotor地獄です
	RotateMotor(OUT_BC,S,45);
	RotateMotor(OUT_C,20,10);
	RotateMotor(OUT_A,20,-A);
	RotateMotor(OUT_B,S,-16);
	RotateMotor(OUT_C,S,15);
	RotateMotor(OUT_A,20,A);
	RotateMotor(OUT_B,S,-20);
	RotateMotor(OUT_C,S,20);
	RotateMotor(OUT_A,20,-A);
	RotateMotor(OUT_B,S,-16);
	RotateMotor(OUT_C,S,15);
	RotateMotor(OUT_A,20,A);
	RotateMotor(OUT_B,S,16);
	RotateMotor(OUT_C,S,-15);
	RotateMotor(OUT_B,S,10);
	RotateMotor(OUT_C,S,-10);
	RotateMotor(OUT_BC,S,10);
	RotateMotor(OUT_A,20,-A);
	RotateMotor(OUT_BC,S,15);
       RotateMotor(OUT_A,20,A);
	RotateMotor(OUT_C,15,30);
       RotateMotor(OUT_A,20,-A);
       RotateMotor(OUT_B,10,14);
       RotateMotor(OUT_C,10,-20);
       RotateMotor(OUT_C,10,-30);
       RotateMotor(OUT_A,20,A);
}

何という洗練されていないプログラムでしょう。

言い訳をするとなんとか顔の形になってから、整理しようと思っていたのですが、
全く顔にならずのそのそしている間に締め切りになってしまっていました。
最初は両方の角度を同時に動かして書いていくつもりだったのですが、
果たしの力量では全く叶わずついに両方動いてくれることはありませんでした。
仕方なく今の私で唯一同時に動く時間と速さのOnFwd君に過労死してもらいました。
プログラミングでこだわったことは、try and error です。
残念だったのは自分の妥協へ向かう心の強さです。
プログラミングは心を強く持ちましょう。
次回からは心を強くやりたいです。

完成したもの

20191121203710.jpg

なんか画像がどうしても縦向きになってくれないので首を左に90°傾けてください。
この様になりました、上手いこと弧を描くことができなかったのでカクカクです。
このときの口はかなり下にずれてしまっていますね。
髪型や細かい特徴を出すことは今の技術ではできませんでした。
比較対象がないので大きさをごまかせていますが、実際はかなり小さいです。
これはアームを近くまで引き寄せて絵を書いてしまうと昇降機くんがアームに衝突してしまうためです。完全に作る前にわかる欠陥でしたね。自分の愚かさを呪ってしまいます。
一応は顔にかろうじて見えるものができて私は満足です。

反省

次の課題ではロボット作成の段階から自分のプログラミング技術の程度の低さを考慮して
よりシンプルなものにしようと思いました。
先見の明を持って行きたいです。


添付ファイル: file20191121203710.jpg 2件 [詳細] file20191121190600.jpg 8件 [詳細] file20191121190441.jpg 6件 [詳細]

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