私は,プログラミングの経験がほぼない状態でこのロボティクス入門ゼミを受講し,今回の課題1に挑戦した.先生から配られるプリントのほとんどを理解できることなく,次々と講義は終了していった.
授業での成果は,機械の先端にペンを固定する機構を,ゴムを用いてうまくできたこと.
発表会前日.for文で,両方の車輪を同時に動かそうとしたところで最初のスタック.あれやこれやと改良しては失敗.もう先は見えないとメンバー全員が思っていたところ,,,
Tank使ってみない?
そんな一言で状況は一転.見事同時に動かすことができ,また回転も自在に操れるようになった.そして,これは自分の成果だと主張したいのが,ペンの先端を前輪の中心に持ってこれるような機構にしたおかげで,プログラミングコードを大幅に単純化できたことである.
あとは,動作を順を追ってコードに起こしてゆけばよい.と思いきや,方向転換の角度を理論的に計算し,代入しても理想の動きにはならなかった.理論に間違いはないはずという意見で一致したため,残りは気合.ここさえクリアしてしまえば,万事解決であるからだ.数値をこんなもんか?と試しては修正の繰り返し.そしてやっと...
成功!!!これにはメンバー全員がかなり興奮した.これほどの達成感を味わったのは,前期の剣道の発表会以来である.その成果がこちら.
ここからは、コードの説明をしていく。
まずはどの出力を使うのかを指定
from ev3dev2.motor import MoveTank, OUTPUT_B, OUTPUT_C from ev3dev2.motor import MediumMotor, OUTPUT_D tank_drive = MoveTank(OUTPUT_B,OUTPUT_C) このtank_driveは、両輪を同時に動かす命令 motor_center = MediumMotor(OUTPUT_D) このmotor_centerで、ペンを上げ下げするのをコントロールして、線を書くときは下ろして、書かないときはあげる機構にした
以下は、tank_drive(タイヤの回転)とmotor_center(ペンの上げ下げ)を用いてev3を動かしていく
基本となっている、tank_drive.on_for_degrees()は、カッコ内が、(左のタイヤのスピード、右のタイヤのスピード、動かす量Deg)を指定するようになっている。スピードが正の値なら前方向に進む回転、負の値なら後ろ方向に進む回転である。両方負で後ろに進む。
tank_drive.on_for_degrees(5,5,124.8) 前に進む tank_drive.on_for_degrees(-5,5,87) 左に向く(以下それぞれ同じ) tank_drive.on_for_degrees(5,5,145.6) 前に進む(以下それぞれ同じ) tank_drive.on_for_degrees(-5,5,175) tank_drive.on_for_degrees(5,5,145.6) tank_drive.on_for_degrees(-5,5,87) tank_drive.on_for_degrees(5,5,124.8) tank_drive.on_for_degrees(-5,5,87) tank_drive.on_for_degrees(5,5,145.6) tank_drive.on_for_degrees(-5,5,175) tank_drive.on_for_degrees(5,5,145.6) tank_drive.on_for_degrees(-5,5,255) tank_drive.on_for_degrees(5,5,212) motor_center.on_for_degrees(-15,45) ペンを下げる
ここまでで、顔の周りの線を描けた
ここから、目と鼻と口を描いていく
tank_drive.on_for_degrees(5,-5,175) 右に向く(以下それぞれ同じ) tank_drive.on_for_degrees(5,5,62.4) tank_drive.on_for_degrees(5,-5,175) tank_drive.on_for_degrees(5,5,42) motor_center.on_for_degrees(15,45) ペンをあげる(以下それぞれ同じ) tank_drive.on_for_degrees(5,5,42) motor_center.on_for_degrees(-15,45) tank_drive.on_for_degrees(5,5,42) motor_center.on_for_degrees(15,45) tank_drive.on_for_degrees(5,5,42) motor_center.on_for_degrees(-15,45) tank_drive.on_for_degrees(-5,5,175) tank_drive.on_for_degrees(5,5,42) tank_drive.on_for_degrees(-5,5,175) tank_drive.on_for_degrees(5,5,62.4) tank_drive.on_for_degrees(-5,5,175) motor_center.on_for_degrees(15,45) tank_drive.on_for_degrees(5,5,62.4) motor_center.on_for_degrees(-15,45) tank_drive.on_for_degrees(-5,-5,83.2) tank_drive.on_for_degrees(-5,5,175) tank_drive.on_for_degrees(-5,-5,20.8) motor_center.on_for_degrees(15,45) tank_drive.on_for_degrees(5,5,41.6)
大変だったのは、指定した値と実際に動く角度などの値に誤差が生じたことである。急に動かしすぎると誤差は大きかった。
課題1を通じて,松本先生が授業中におっしゃっていた,とりあえずやってみて,わからんかったらプリントを参照すればいい,という意味を実感できた.何事もまずはやってみないと.その気持ちを忘れずに次の課題では,センサーをうまく使ってライン上を沿うマシーンを作りたい.
また、今回Tankを多用して羅列したので、次ではそれももっと単純化できるのではと思う.