2019b/Member

課題

ペアの似顔絵を描く。

書き方と目標値

ロボットに直接鉛筆を縛り付け、ロボットに車輪をつけて走らせ、ロボットの重心の動きで表現する。

本体写真 (1).png

目標は下図の通り。基本的にロボットの前進と回転のみで絵を描くために、このロボットが何%のモータの働きで何秒進めばどれくらい進むか。さらにプログラムでの回転角と実際の回転角の誤差を測定・修正し、その情報から素となる絵を描いた。

似sinn顔絵理想.jpg

ロボットの機構と工夫

ロボットに直接鉛筆を縛りつけている構造上、鉛筆が回転の中心についていなければ反転する際に弧を描いてしまうため本体の回転の中心となるところに棒を通し、複数の輪ゴムの張力の拮抗を利用して鉛筆を垂直に立てた。

鉛筆&輪ゴムsinn.png

プログラム

プログラムは以下の通り。

#!/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)                                                                                                                                                                                            

結果と反省

うまく書くことができなかった。

似sinn顔絵結果.jpg

原因はモータの充電が不十分な時に基本値を測定したため、充電の具合によって基本値が変わってしまったこと。さらに回転角や秒数が一つ一つは誤差でも、全体で大きなズレを生んでしまった。

反省から

本体自体を車輪で動かして表現するとどうしても大きな絵を描かざるをえないし、前述の通り少しの誤差が積もって大きなズレとなってしまう。これから、次に作成するロボットは動かす部品を最小限にする機構を用いて作りたい。


添付ファイル: file似sinn顔絵結果.jpg 2件 [詳細] file鉛筆&輪ゴムsinn.png 3件 [詳細] file似sinn顔絵理想.jpg 3件 [詳細] file本体写真 (1).png 2件 [詳細] file鉛筆&輪ゴム.PNG [詳細] file似顔絵結果.jpg [詳細] file似顔絵理想.jpg 2件 [詳細] file本体写真.PNG 3件 [詳細]

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