#author("2019-11-13T23:18:51+09:00","Hayashi","Hayashi") [[2019b/Member]] #contents *課題1 [#aace72a7] 相方の似顔絵を描くロボットを作る *ロボットの説明 [#s2e22e5b] [#b23454de] #ref(004.JPG) このロボットを使う上で,最初は顔の輪郭をカクカクにしようとしましたが,丸くした方がうまく書けたため,そのように変更しました. #ref(001.JPG) このロボットは,前輪の位置でペンが上がったり下がったりできるように,ペンを固定するように,アームをとりつけました.なので,タイヤがどのように曲がるのかをしっかり関数を使って決めておくことが大事でした. 欠点としては,後ろのタイヤが(モーターの使わない部分)最初にまっすぐにしないとしっかり直進してくれないことが挙げられます.そのため,90度に曲がった後に,車体を回す角度を大きくしないと,思わぬ方向に曲がってしまいます.また,車体がかなり重くなっていたため,曲がる上で,ガクガクに動いていたので,軽量化の必要性も感じました. *プログラムの説明 [#l97137b4] **使用したプログラム [#l2d40185] #define SPEED 30 #define go6 OnFwd(OUT_BC,SPEED);Wait(1500);Off(OUT_BC); #define go2 OnFwd(OUT_BC,SPEED);Wait(500);Off(OUT_BC); #define go1 OnFwd(OUT_BC,SPEED);Wait(300);Off(OUT_BC); float GetAngle(float d) { const float diameter = 5.5; const float distance=12; float ang = (distance*d)/diameter; return ang; } task main() { go6; int angle1 = GetAngle(400); RotateMotor(OUT_B,SPEED,angle1); go6; RotateMotor(OUT_B,SPEED,angle1); RotateMotor(OUT_A,SPEED,30); int angle2 = GetAngle(90); RotateMotorEx(OUT_BC,SPEED,angle2,-100,true,true); go2; RotateMotor(OUT_A,-SPEED,30); go2; RotateMotor(OUT_A,SPEED,30); go2; int angle3 = GetAngle(120); RotateMotorEx(OUT_BC,SPEED,angle2,100,true,true); go2; RotateMotorEx(OUT_BC,SPEED,angle2,100,true,true); go2; RotateMotor(OUT_A,-SPEED,30); go2; RotateMotor(OUT_A,SPEED,30); go1; RotateMotor(OUT_A,-SPEED,30); go2; RotateMotor(OUT_A,SPEED,30); } **使ったもの [#q6b032e0] 関数; float GetAngle(float d) { const float diameter = 5.5; const float distance=12; float ang = (distance*d)/diameter; return ang; } 車体を回す角度をこの関数によって,設定しました. 定義; #define SPEED 30 #define go6 OnFwd(OUT_BC,SPEED);Wait(1500);Off(OUT_BC); #define go2 OnFwd(OUT_BC,SPEED);Wait(500);Off(OUT_BC); #define go1 OnFwd(OUT_BC,SPEED);Wait(300);Off(OUT_BC); go6,go2,go1,というふうに直進する距離や,速さを定義しました. *まとめ [#t7e4c65a] 車体をなるべく軽くすることで,曲がる負担を減らすことが大事だったと思います