[[2018a/Member]]


*ロボットのタイプおよび文字の選定[#m46fbc42]

車型はプログラムが大変なことが予想できたので、XY型とした。また、紙の短い辺方向に関しては、レールの上をペンを走行させることも考えたが、部品が足りるか不安であったのと、構造物が大きくなり、輸送が困難なことが予想されたので、レール上を走行するタイプは採用せず、アームを用いてペンのユニットを移動させる仕組みにした。

文字は、地元の都道府県名である「東京」とした。

*ロボット本体 [#z5569d10]
**試作機 [#n5eda9e5]

#ref(2018a/Member/Areidaaa/Mission1/imagetest.jpeg)

大まかな形にはなっているものの
-レール先端についている車輪が動力車輪と離れている上に1輪なので、動力車輪と同じように転がらない→レールがぶれる
-レールの本体側の固定が甘く、レールがぶれる
-NXT本体の重さ故、本体側の補助車輪に重さがかかっており、肝心の動力車輪が空転気味
-アームの関節部分のピンにストッパー付きのパーツを使用していたため、アームの動作が不安定

などの問題が発生した。これらの問題を解決したのが完成版である。

**完成版 [#f132ea81]

#ref(2018a/Member/Areidaaa/Mission1/imageoverall.jpeg)

紙の長い辺方向(以下Y軸方向と呼ぶ)は車輪を用いて走行、短い辺方向(以下X軸方向と呼ぶ)は前述のようにアームを用いた。また、レール先端の車輪は試作機では1輪だったものを4輪に増やしたうえ、安定性を高めるべくホイルベースを広めにとった。また、レールの本体側取り付け部を強固にした。これらの工夫により、Y軸方向に動いたときのレールのブレをかなり抑えることができた。
また、NXT本体下の補助輪も小型のものから動力車輪と同じ径の大きな車輪にすることでバランスをとり、動力車輪の空転を抑えた。

#ref(2018a/Member/Areidaaa/Mission1/imagearm.jpeg)

アームは長いテクニックリフトアームパーツを2本組み合わせたシンプルなものである。動きをスムーズにしたいので、関節にはストッパーのないピンのパーツを出来る限り使えるように工夫した。NXTのセットにはストッパーなしのシンプルなピンがなく、十字バーとプッシュでの固定は動作してる最中に外れることも考えられたので、唯一ストッパーなしピンがついているテクニック ピンコネクター(明るい灰色のパーツ)を使う必要があった。
#ref(2018a/Member/Areidaaa/Mission1/imagejoint3.jpeg)
しかしこのパーツは3ポッチ分と関節に使うには大きく、形もいびつであるため、これを用いてアームをつくるのにはのには苦労した。

*プログラム [#s5e6dc29]

**各種定義 [#ja08adb8]
 #define SPEEDX 50//X軸方向のモーターの出力(%)
 #define SPEEDY 50//Y軸方向のモーターの出力(%)
 #define SPEEDPEN 40//ペンの上げ下げに用いるモーターの出力(%)
 #define XAl 700
 #define XAsl 650
 #define XAn 500
 #define XAs 300
 #define XAss 100
 #define YBl 1000
 #define YBsl 750
 #define YBn 500
 #define YBs 300
 #define YBss 200
 #define penup OnRev(OUT_C,SPEEDPEN);Wait(120);Off(OUT_C);
 #define pendown OnFwd(OUT_C,SPEEDPEN);Wait(120);Off(OUT_C);


XYそれぞれの方向に対して長い辺(l) 中くらいの辺(n) 短い辺(s)の3種を基準に、作業をしていく中でnとlの間の長さ(sl)とsよりさらに短い長さ(ss)を追加で定義した。これら長さを表すアルファベットに軸を表す「X」「Y」及びNXT本体に表記されているコードの差し位置を示す記号「A」「B」を組み合わせたものを定義の名前とし、作業時にわかりやすいようにした。同じ長さを書こうとしてるのにも関わらず軸によって値が異なるのは、X軸はアーム、Y軸は車輪という異なる方式でロボットを動かしているためである。

ペンの上げ下げに関しては文字のどこの部分であっても動作は一緒であるので、一連の動作をあらかじめ定義しておいた。


**「東」のプログラム [#h320f515]


  int i=0;
 for(i=0; i<3; i++){
 
     OnFwd(OUT_A,SPEEDX);
     Wait(XAl);
     Off(OUT_A);
 
     penup
 
     OnRev(OUT_A,SPEEDX);
     Wait(XAl);
     Off(OUT_A);
     OnFwd(OUT_B,SPEEDY);
     Wait(YBss);
     Off(OUT_B);
 
     pendown}             //1
 
     OnFwd(OUT_A,SPEEDX);
     Wait(XAl);
     Off(OUT_A);
 
     OnRev(OUT_B,SPEEDY);
     Wait(YBs);
     Off(OUT_B);
 
     penup                //2
      
     OnRev(OUT_A,SPEEDX);
     Wait(XAl);
     Off(OUT_A);
     
     pendown
  
     OnFwd(OUT_B,SPEEDY);
     Wait(YBs);
     Off(OUT_B);
 
     penup                //3
 
     OnRev(OUT_B,SPEEDY);
     Wait(YBsl);
     Off(OUT_B);     
     OnFwd(OUT_A,SPEEDX);
     Wait(XAs);
     Off(OUT_A);     
     
     pendown
 
     OnFwd(OUT_B,SPEEDY);
     Wait(YBl);
     Off(OUT_B);
     
     penup                 //4
 
     OnRev(OUT_B,SPEEDY);
     Wait(YBss);
     Off(OUT_B);    
     
     pendown
 
     OnFwd(OUT_B,SPEEDY);
     OnFwd(OUT_A,SPEEDX);
     Wait(YBss);
     Wait(XAs);
     Off(OUT_AB);
      
     penup                //5
 
     OnRev(OUT_B,SPEEDY);
     OnRev(OUT_A,SPEEDX);
     Wait(YBss);
     Wait(XAs);
     Off(OUT_AB);
 
     pendown
     OnFwd(OUT_B,SPEEDY);
     OnRev(OUT_A,SPEEDX);
     Wait(YBss);
     Wait(XAss);
     Off(OUT_AB);          //6
      
     penup

#ref(2018a/Member/Areidaaa/Mission1/tou.jpg)


プログラム内の数字は上記画像の数字に対応させた。
4本の横棒の長さは、同一の長さのものを繰り返し書くようプログラムし、簡素化
した。


**京のプログラム [#s17a9e98]

    OnFwd(OUT_B,SPEEDY);
     Wait(YBs);
     Off(OUT_B); 
 
     pendown
 
 for(i=0; i<2; i++){
 
     OnFwd(OUT_A,SPEEDX);
     Wait(XAl);
     Off(OUT_A);
 
     penup
 
     OnRev(OUT_A,SPEEDX);
     Wait(XAl);
     Off(OUT_A);
     OnFwd(OUT_B,SPEEDY);
     Wait(YBss);
     Off(OUT_B);
 
     pendown}       //1
   
 OnFwd(OUT_A,SPEEDX);
     Wait(XAl);
     Off(OUT_A);
 
     OnRev(OUT_B,SPEEDY);
     Wait(YBss);
     Off(OUT_B);           //2
 
     penup
      
     OnRev(OUT_A,SPEEDX);
     Wait(XAl);
     Off(OUT_A);
     
     pendown
  
     OnFwd(OUT_B,SPEEDY);
     Wait(YBs);
     Off(OUT_B);     
 
     penup                 //3
 
     OnRev(OUT_B,SPEEDY);
     Wait(YBsl);
     Off(OUT_B);     
     OnFwd(OUT_A,SPEEDX);
     Wait(XAs);
     Off(OUT_A);     
     
     pendown
 
     OnFwd(OUT_B,SPEEDY);
     Wait(YBss);
     Off(OUT_B);
     
     penup               
 
     OnFwd(OUT_B,SPEEDY);
     Wait(YBn);
     Off(OUT_B);
     
     pendown
 
     OnFwd(OUT_B,SPEEDY);
     Wait(YBn);
     Off(OUT_B);
     
     penup                  //4
 
     OnRev(OUT_B,SPEEDY);
     OnFwd(OUT_A,SPEEDX);
     Wait(YBss);
     Wait(XAss);
     Off(OUT_AB);
      
     
     pendown
 
     OnFwd(OUT_B,SPEEDY);
     OnFwd(OUT_A,SPEEDX);
     Wait(YBss);
     Wait(XAss);
     Off(OUT_AB);
      
     penup                  //5
 
     OnRev(OUT_B,SPEEDX);
     Wait(YBs);
     Off(OUT_AB);
 
    
     OnRev(OUT_A,SPEEDX);
     Wait(XAsl);
     Off(OUT_AB);
 
     
     pendown
 
     OnFwd(OUT_B,SPEEDY);
     OnRev(OUT_A,SPEEDX);
     Wait(YBss);
     Wait(XAss);
     Off(OUT_AB);
  
     penup                 //6
     
     OnFwd(OUT_A,SPEEDX);
     Wait(XAn);
     Off(OUT_A);
 
     }


#ref(2018a/Member/Areidaaa/Mission1/kyo.jpg)

京を書くに当たっては、縦に貫く画像でいう�い諒佞鯏喘罎播喟擇譴気擦襪茲Δ砲垢襪覆鼻�形の近い東のプログラムを活用した。

*完成版 [#z4bd1d10]
#ref(2018a/Member/Areidaaa/Mission1/imagetokyo.jpeg)

ロボットの特性上、X軸方向に関しては動作にムラがあるのをカバーしきれなかった。そのため、縦に貫く辺と東の2つのハライをきれいに書くことができなかった。

*反省および改善点 [#i97c3f5d]

-一つ一つの辺の長さごとの動作を定義しておかなかったので、プログラムに毎回OnRev...などが続き、非常に見にくくなってしまった。動作の時間ではなく、一連の動きで定義しておくべきだった。
-動作が連続的であったので、ペンの揺れが収まる前に次の動作に移行してしまい、動きが安定しなかった。各動作間に停止時間を設けるべきだった。
-

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS