ペアの似顔絵を描く。
ロボットに直接鉛筆を縛り付け、ロボットに車輪をつけて走らせ、ロボットの重心の動きで表現する。
目標は下図の通り。基本的にロボットの前進と回転のみで絵を描くために、このロボットが何%のモータの働きで何秒進めばどれくらい進むか。さらにプログラムでの回転角と実際の回転角の誤差を測定・修正し、その情報から素となる絵を描いた。
ロボットに直接鉛筆を縛りつけている構造上、鉛筆が回転の中心についていなければ反転する際に弧を描いてしまうため本体の回転の中心となるところに棒を通し、複数の輪ゴムの張力の拮抗を利用して鉛筆を垂直に立てた。
プログラムは以下の通り。
#!/usr/bin/envpython3 fromev3dev2.motorimportMoveTank,OUTPUT_B,OUTPUT_C tank_drive=MoveTank(OUTPUT_B,OUTPUT_C) tank_drive.on_for_seconds(25,25,0.75) tank_drive.on_for_degrees(25,-25,330) tank_drive.on_for_seconds(25,25,0.7) tank_drive.on_for_degrees(25,-25,-100) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,-100) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,-350) tank_drive.on_for_seconds(25,25,0.4) tank_drive.on_for_degrees(25,-25,245) tank_drive.on_for_seconds(70,70,0.1) tank_drive.on_for_degrees(25,-25,245) tank_drive.on_for_seconds(25,25,0.4) tank_drive.on_for_degrees(25,-25,-200) tank_drive.on_for_seconds(25,25,0.4) tank_drive.on_for_degrees(25,-25,-120) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,-150) tank_drive.on_for_seconds(70,70,0.1) tank_drive.on_for_degrees(25,-25,-245) tank_drive.on_for_seconds(70,70,0.1) tank_drive.on_for_degrees(25,-25,245) foriinrange(4): tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,245) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,245) tank_drive.on_for_seconds(70,70,0.1) tank_drive.on_for_degrees(25,-25,-245) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,-245) tank_drive.on_for_seconds(70,70,0.1) foriinrange(4): tank_drive.on_for_seconds(25,25,0.25) foriinrange(4): tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,245) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,330) tank_drive.on_for_seconds(25,25,0.5) tank_drive.on_for_degrees(25,-25,100) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,100) tank_drive.on_for_seconds(25,25,0.5) tank_drive.on_for_degrees(25,-25,150) tank_drive.on_for_seconds(25,25,0.5) tank_drive.on_for_degrees(25,-25,-230) tank_drive.on_for_degrees(25,-25,245) foriinrange(4): tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,245) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,245) tank_drive.on_for_seconds(70,70,0.1) tank_drive.on_for_degrees(25,-25,-245) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,-245) tank_drive.on_for_seconds(70,70,0.1) foriinrange(4): tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,245) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,330) tank_drive.on_for_seconds(25,25,0.5) tank_drive.on_for_degrees(25,-25,100) tank_drive.on_for_seconds(25,25,0.25) tank_drive.on_for_degrees(25,-25,100) tank_drive.on_for_seconds(25,25,0.5) tank_drive.on_for_degrees(25,-25,150) tank_drive.on_for_seconds(25,25,0.5) tank_drive.on_for_degrees(25,-25,-230) tank_drive.on_for_seconds(25,25,0.5) tank_drive.on_for_degrees(25,-25,-200) tank_drive.on_for_seconds(25,25,1)
うまく書くことができなかった。
原因はモータの充電が不十分な時に基本値を測定したため、充電の具合によって基本値が変わってしまったこと。さらに回転角や秒数が一つ一つは誤差でも、全体で大きなズレを生んでしまった。
本体自体を車輪で動かして表現するとどうしても大きな絵を描かざるをえないし、前述の通り少しの誤差が積もって大きなズレとなってしまう。これから、次に作成するロボットは動かす部品を最小限にする機構を用いて作りたい。