†A3の紙に相棒の似顔絵を書くロボットを作成する。†プログラムの作成をより簡単に、そして、移動距離が長くなるにつれて大きくなる誤差を最小限にするために、縦と横の線を組み合わせて似顔絵を描くようなロボットを作成することにした。授業の最初に作成したロボットは左右2つのモーターで動きをコントロールしていたが、今回は、前後だけなので3つしかないモーターを有効に活用するために1つのモーターで4つのタイヤを動かすことにした。†モーターを1つ使い、レールの中にアームを通して、タイヤでアームをスライドさせることで、横の線を引くことにした。最後のモーターを用いて、ペンを上げたり下ろしたりする動力へと活用することにした。当初は、ペンを垂直に持ち上げる方式を考えたが、アームの部分が重くなりすぎたので、斜めにペンを上げ下ろしすることにした。†アームやRCXなどを支える土台であるため、全体のバランスが取れるようにすることが重要になった。前後のコントロールをする1つのモーターを土台の真ん中に位置するように設置することで、バランスが安定した。†レールの中をアームが動くようにした。アームの上にモーターやペンを持つところなどが設置されるために左右のバランスが崩れてしまった。そのためアームがコントロールされるタイヤから浮き上がってしまい、動かなくなった。そこで、右図のように自由に動くことができるタイヤで支えることによって、安定してアームの伸び縮みができるようになった。伸びすぎて戻らなくなることを避けるために、下図のようにストッパーを設置することで、より安定性を増すことができた。当初、上下にペンを動かすことを中心に考えていたため、初期の段階では、右図の試作のように簡易な方法でペンを固定していた。これだと線(特に横の線)を引くときにペンが大きく動いてしまい、なかなか安定して顔を描くことができないため、右図の完成版のように改良を加えた。ペンの上げ下ろしに関しては、最初は左図の初期のようにして行っていた。コントロールがうまくできないため、左図の完成版のようにギアで速度を遅くすることで細かな調節を行えるように調節を行った。全てのパーツを組み合わせてみたが、バランスが悪く、思うように似顔絵を描くことができなかった上、後退したときにひっくり返ってしまった。†RCXを横にして本体にしっかりと固定することで、動作中に部品が外れることはなくなった。†アームの通るレールに自由に回転したり左右に動くことのできるタイヤを取り付けることで、アームをできるだけ長く使うことができた点。アームが伸び縮みできる長さを制限することで、アームが動きすぎて制御できなくなってしまうことを防ぐことができた点。ペンをしっかりと固定することで、多少ペンに加わる力が強くなっても、前後左右に稼働できるようになった点。コードにタイヤなどが引っ掛かってロボットの作業に支障が出ないようにきちんと束ねた点。RCXとアーム本体をつなげることにより、土台の上の二つが前後の移動などで外れないようにした点。ペンをうまくコントロールするために、ギアで速度を遅くすることで細かな調節を行えるようにした点。縦の線はどのくらいの長さでも引くことが可能であるが、横の線は、アームの伸び縮みの長さに制限されるため、アームが伸びることが可能な範囲より大きな似顔絵を描くことができない点。何回も似顔絵を描かせると、ペンの重さでペンの上げ下ろしの位置がだんだんと下がっていき、ペンに加わる力が強くなっていくため、ペンと紙との摩擦で横の線が引けなくなったり、縦の線が予定より短くなってしまう点。斜めの線はなんとか書くことができるが、曲線は不可能だった点。main(){repeat(2){//眉毛二本(右へアームを伸ばしながら横線を1本ずつ)RIGHT(40*ZoomLevel);REST;pen_down();RIGHT(40*ZoomLevel);pen_up();REST;}GO(10*ZoomLevel);LEFT(30*ZoomLevel);REST;pen_down();//右目(左へアームを縮めながら横線)LEFT(10*ZoomLevel);pen_up();REST;LEFT(70*ZoomLevel);REST;pen_down();//左目(右目と同様にして横線)LEFT(10*ZoomLevel);pen_up();REST;GO(30*ZoomLevel);RIGHT(45*ZoomLevel);REST;pen_down();//鼻(前進しながら縦線⇒左へアームを縮めながら横線)GO(20*ZoomLevel);REST;LEFT(10*ZoomLevel);pen_up();REST;GO(30*ZoomLevel);RIGHT(45*ZoomLevel);REST;pen_down();//口(左へアームを縮めながら横線)LEFT(60*ZoomLevel);pen_up();REST;LEFT(40*ZoomLevel);BACK(90*ZoomLevel);REST;pen_down();//輪郭(前進しながら左の線)GO(100*ZoomLevel);REST;pen_up();REST;pen_down();//輪郭(右へアームを伸ばしながら下の線)RIGHT(140*ZoomLevel);REST;pen_up();REST;pen_down();//輪郭(後退しながら右の線)BACK(160*ZoomLevel);REST;pen_up();REST;pen_down();//輪郭(左へアームを縮めながら上の線)LEFT(140*ZoomLevel);REST;GO(50*ZoomLevel);//輪郭(前進しながら左の線)pen_up();}※ただし、このプログラムでの「右」・「左」とは、頭の方を下(手元)にして見たときのものである。具体的には、下の図のロボットが描いた似顔絵に示してある通りである。†このロボットが縦と横の線を利用して似顔絵を描くため、先に描きたい顔を作成し、そのマス目に合わせてプログラムを作成した。そのため、時間の調節が容易に行うことができた。左図は、描こうとした顔の図であり、右図は、プログラムの実行順番(Start→Goal)の図である。右図ただ、ロボットのない状態でプログラムを作成したために紙の大きさに合わせて似顔絵の大きさを自由に描こうとしたが、アームの長さの制限により、似顔絵の拡大係数は1しか使うことができなかった。横の線(特に輪郭の横の線)を描くことができないことが多々生じたので輪郭の各線の引き終わりにペンを上げて、アームのゆがみを取り除くようにした。†ロボットの向きと顔の向きがあっていなかったため、プログラムの前後左右が逆になってしまった。上の顔を描いた当初のプログラム。簡略化できる部分もたくさんあるし、#defineもうまく使えていない。メガネのためだけに#defineを使ってしまっていて、ほかのパーツに応用できていない。普段、何気なくペンなどで字や絵などを描いているが、実際にこれをロボットにやらせるとなると、なかなか大変なものであった。日頃、私たちが何気なくしていることは簡単なことでも様々な調節をしながら、行っていることを改めて実感させられた。ペンを上げ下げさせる仕組み考え、作成するのに一番苦労したが最終的にはちゃんと似顔絵が描けたのでよかった。時間があれば、安定して同じ顔が描けるようにしたかった。†コメントをどうぞロボットもオリジナルですし、説明も詳しく明確でとても良いと思います。プログラムでも、拡大係数や座標(のようなもの)を利用した似顔絵等が工夫が随所で見られました。曲線を書く方法としては、(a)角度を少しずつ変えて短い直線をつなげていく(前後と左右用のモーターを同時に動かすと斜めの直線にできるはず、短くするのは難しいかもしれないが)(b)非常に細かい折れ線を、縦と横の比を変えながらつなげると、遠くから見ると曲線に見える、等があるかもしれません。実現は難しいかもしれませんが。07:54:01最初の課題でこれだけできるのは、すごい!と素直に感心しました。ロボットの説明がとてもわかりやすく、写真や図も効果的です。プログラムの方の説明に図を使っている点も良いです。欲をいうなら、プログラムその2の方の説明をもう少し足してほしいところかと思います。(あと、その1その2ではなくハンドルネーム等で誰が作ったかわかるようにしてください。)アーム式ロボットについてはこのWiki内を「達筆ロボット」で検索すると、参考になるかもしれません。14:35:04素晴らしいです。プログラムの説明をもう少し工夫していただければ、初の☆評価かと思います。「輪郭を描く」より「右に進みながら、輪郭の下側の直線」の方がわかりやすいです。それから、PuKKuさんのプログラム、拡大係数を「A」にしているのはちょっといただけません。自分はすぐ拡大係数だと分かりますが、他の人にはわからないからです。数ヶ月すると、自分でもわからなくなってしまうかもしれません。意味のある単語やその単語の頭数文字などにしておいた方がよいです。16:31:36もっと授業を進めて慣れてくれば、よりうまい工夫の方法が見えると思いますので、今後も頑張ってください。最初の課題のレポートとして、素晴らしい出来栄えです。