作って遊ぼ

気分でものづくり

フィリップスなりのスラロームまでの調整の仕方①

WMMCには決まったマウスの調整法がない。

よって僕なりの調整法を他の皆と比較しながらより良い方法を模索し、意見を共有したいところである。

以下僕なりのスラロームまでの調整法です。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

フィリップスの調整法

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

・turn_R_90,turn_L_90,turn_180の調整を行う。

迷路の一区画を使って、test_driveの中に同じdriveを行うプログラムを10回書く。

このとき、制御CTRLは切っておく。

制御はあくまで補助で、パルスの調整でどうしてもうまくいかないときに使う。

制御をするのは最後の手段と考えている。

1パルス分の誤差で大きなずれになるので細かい調整を行ってください。

・7区画直進走行の調整

ここではglobal内で定義されている半区画分のパルスを調整する。

走行が終了しbreakの後にPIN_H(MDR_REF);を入れる。

最初のスタートの時、テーブルカウンタをリセットする。

つまり走行前にt_cnt_r=t_cnt_l=0;にする。

初速を150[mm/s]以上にするとスタート時にずれが生じるので、初速はデフォルトの100[mm/s]にする。

目標の区画まで正しいパルスを調整する。

・左右の壁判断基準値を一区画の端と端で認識できる閾値に調整する。

・比例制御係数は速度に合わせて変える。

高速に動くほど係数を小さくする。

ーーーーー一区画走行までの壁ーーーーーー

・7区画連続直進走行の調整

上で書いたスラロームの調整を連続走行においてに変更する。

前壁の半区画前で前壁を認識するように壁判断基準値を調整する。

・連続の走行で生まれるずれをset_position();で補正するために左折右折を何回かしたら入れるようにする。ただし壁のないところはしないようにする。

ーーーーー連続走行までの壁ーーーーーーーーー

スラローム用に外輪と内輪のテーブルを用意する。

スラロームの外輪、内輪の速度決定仕方。

旋回角加速度[rad/s] 75

単位時間[s]    0.001

入りときのスラローム加速角 θ1

出るときのスラローム加速角 θ2

 

(0度<θ1<30度)または(60度<θ2<90度)の時

(旋回角速度)=(旋回角加速度)×(単位時間)

 

(外輪の速度)=(初速度)+(旋回角速度ω)×(車輪間距離)÷ 2

 

(内輪の速度)=(初速度)ー(旋回角速度ω)×(車輪間距離)÷ 2

 

これで求まった外輪と内輪の速度を使って台形加減速スラロームテーブルを作る。

 

WMMCが今使っているステッピングモータは一パルスごと1.8度回転するので、速度から回転速度を求め、それからパルス周期を求めて、レジスタ値をテーブルに代入している。

以下にレジスタ値を導出するまでの例を紹介する。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

※例

外輪

初速度 400[mm/s]

最高速 767.3[mm/s]

加速度 4360[mm/s^2]

if(速度<最高速)

(速度 v [mm/s])=(初速度)+(加速度 a [mm/s^2])×(単位時間)

else

(速度)=(最高速)

 

内輪

初速度 400[mm/s]

最高速 32.7[mm/s]

加速度 1620[mm/s^2]

if(速度<最高速)

(速度 v [mm/s])=(初速度)+(加速度 a [mm/s^2])×(単位時間)

else

(速度)=(最高速)

 

外輪と内輪のそれぞれのモータ回転速度を求める

(回転速度 rps)=(速度)÷{(円周率)×(動輪直径)}

 

次にパルス周期を求める。

(パルス周期)=1÷{(回転速度 rps)×(一回転パルス数)}×1000

一回転パルス数

1-2相励磁の場合 400

2相励磁の場合   200

 

(周期レジスタ値)=(タイマークロック)÷10^6×(パルス周期)×1000

LPC1114/302(Coretex_M0) 48MHz動作の場合

(タイマークロック)=48×10^6=48000000

H8/3067f  16MHz動作の場合

(タイマークロック)=16×10^6

デフォルトではなぜか685000 = 6.8MHzくらい

これはよくわからない。最大出力が16MHzだけどこっちのほうが安定するからかな?

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

ここまでで周期レジスタ値を生成できたのでテーブルにできた値を代入する。

外輪、内輪のスラロームの入りと円弧スラロームの出る速度変化を作ることが出来れば以下の画像のようになるはずである。

f:id:fyilips:20171105090723p:plain

f:id:fyilips:20171105090733p:plain

 

これでできるパルス数は350前後になるので

globalにパルス数を代入する。

interuptに右折左折するフラグが立つdriveを作れば終わり。

これでスラロームの出来上がり、やったね!

 

ーーーーースラローム走行までの壁ーーーーーー

 既知区間加速は一次走行で得たmapデータを流用する。

WMMCのマウスは今いる区画がどっちに進行するか決めている。

それをsearch内のswitch分にあり、caseで分かれている。

前進だった場合 0x88

左折の時は   0x11

左折の時は   0x44

来た道を戻る場合0x22

 

となっている。

 

既知区間加速をするには一区画先経路がどっちに進もうとしているかでできる。

最短経路を導出した後route配列にある次の区画が0x88の場合より加速するテーブルを使う。

このスラロームの入るときと出るときもt_cnt_rとt_cnt_lが0になるようにテーブルカウンタをリセットする。

カウンタが中途半端なところで終了すると急激なレジスタ値が変化し、ステッピングモータは脱調してしまう。

ーーーーー既知区間走行までの壁ーーーーーー

既知区間加速のrouteをいじることが出来れば斜め走行も可能である。

現在区画が右折または左折の時次の区画が左折、右折のとき斜め45度で入り、半区画の√2倍のパルス分前進する。

斜めになったあとは後の区画が右折、左折だった場合は斜めを入れずに√2パルス前進。

もし斜め走行の途中で左折もしくは右折が二回連続した場合90度超心地回転させればよい。

こんな感じで斜め走行ぽいものはできると思う。(僕はいまだにスラロームで手こずってる)

ーーーーー斜め走行までの壁ーーーーーー

 

ここまで今僕が考えている走行の調整の仕方である。

みんなで共有して安定した走行を確立し、探索アルゴリズムに手を付けられるようになりたい。