1)加速カーブ
加速カーブは私の好みでは無く、私の能力で選択した。つまり、計算プログラムを自分で書ける加速カーブを選択した。
結果的には、等加速度で加速させるしか選択肢は無かった。
2)私には使い勝手が良いソフト
Cで組んだプログラムはコンパイルして実行しなければならないのが面倒だ、書いたソースにバグが有ったりするとヒステリーが起きそうになる。
遥か昔、BASICという言語があったことを覚えている人は少ないだろう、使った経験の在る人は、現在も深海に生きているシーラカンスに匹敵する古い人間だ。
ある日、私はウィンドウ上で使えるBASICが存在すること知った。以下がアドレスである。
(仮称)十進BASICのホームページ
おまけに、無料で使えるのだ、公開してくれている開発者に心より感謝いたします。
3)BASICで組んだ計算プログラム
コマンドやリファレンスについては、御自分で調べて下さい。遥か昔に使った経験の有る人には簡単に使いこなせるはずです。
以下が、私が組んだプログラムです。rem ------------------------------------------------------------------------------------ rem 等加速 加速データ計算プログラム rem 2004/12/18 made by k.notoya rem ------------------------------------------------------------------------------------ rem 配列変数を宣言する dim dataG(0 to 3000) print print " 等加速度 加速データ計算プログラム " print print " 源発振周波数(CLOCK)を入力してください " input prompt "clock=": clock print " 加速度(G)を求めます。希望の加速レートを入力して下さい " input prompt "初速, 目標速度, 加速パルス数 ": v_start, v_max, stepR print rem 加速度を計算するために入力した、初速, 目標速度, 加速パルス数を退避する let v_startOLD= V_start let v_maxOLD= v_max let stepROLD= stepR rem 加速度(G)を計算する G= (v_max*v_max- v_start*v_start)/(stepR*2) let G= (v_max*v_max- v_start*v_start)/(stepR*2) print " 計算した加速度で加速する時定数を計算します " print " 走行に必要な初速とパルス数(最大3000個)を入力して下さい " input prompt "初速, 走行パルス数 ": v_start, stepR print rem 配列 dataG(i) に初期値 "0.1" を格納する for i= 0 to 3000 step 1 let dataG(i)= 0.1 next rem start時の時定数を計算する let dataG(0)= ip(clock/v_start) rem 加速data(時定数)を計算する for i= 1 to stepR step 1 v_0= sqr(v_start*v_start+ 2*G*(i- 1)) v_1= sqr(v_start*v_start+ 2*G*i) T= (v_1- v_0)/G t= T*CLOCK dataG(i)= ip(t) next rem 入力したdataを画面に表示する print print "-----------------------------------------------------------------------------------------------------" print print "; ---------- 源発振周波数 " ; print clock ; print " Hz 1−2相励磁 等加速度、加速データ ------------" print ";" print "; 加速レート " ; print v_startOLD ; print " pps --> " ; print v_maxOLD ; print " pps " ; print stepROLD ; print " パルス 加速 (1/2 区画走行のパルス数)" print "; 初速 " ; print V_start ; print " pps " ; print stepR ; print " パルス 走行の時定数 " print print "-----------------------------------------------------------------------------------------------------" print print rem dataを 10個づつ並べて、画面に出力する let j= 0 print " .DATA.W " ; do let i= j do if (dataG(i) <> 0.1) then print dataG(i) ; if ( ( mod((i+ 1),10)) <> 0) then print"," ; else print end if else print " H'FFFF" ! dataの最後に H'FFFFを付ける exit do end if if dataG(i)= 0.1 then exit do let i= i+ 1 loop while (i<(j+ 10)) if dataG(i)= 0.1 then exit do let j= j+ 10 print " .DATA.W " ; loop end私は、これで面倒な作業から抜け出せました。
4)スラロームの比率を計算するプログラム
いろいろな方法が考えられますが、私は、スラロームをするときは、内側車輪と外側車輪の比率を時定数に入れます。
電卓で計算するのが面倒なので、内側車輪と外側車輪の比率を計算するプログラムを組んでみました。現在、このプログラムが吐き出したデータで旋廻させていますが、そこそこ正確なスラロームをしてます。
以下が比率を計算するプログラムです。
rem slalomの旋回data計算 rem radius raito is calculate rem accelerated slowed down def radiusIN(x,y)= x- (y/2) ! radiusIN(半径,トレッド) def radiusOUT(x,y)= x+ (y/2) ! radiusOUT(半径,トレッド) def raito(x,y)= x/y ! raito(走行車輪の半径,仮想車輪の半径) print print "mouseの基本dat " let tread= 72.50 let step= 0.41 let R45= 154.0 let R90= 90.0 let R90V80= 80.0 let R90V70= 70.0 let R135= 79.1 print " トレッド幅 is " ; print tread print " 1stepの移動距離 is" ; print step print print print "☆☆☆ 45度旋回のdataを計算します ☆☆☆" print "仮想車輪の走行pulse数を表示します " ; let R45STEP= (((R45*2)*3.1415)/8)/step print R45STEP print "半径を表示します " ; let R45IN= radiusIN(R45,tread) let R45OUT= radiusOUT(R45,tread) print R45IN ; print R45 ; print R45OUT print "半径の比率を表示します " ; let RATIO45IN= R45IN/R45 let RATIO45= R45/R45 let RATIO45OUT= R45OUT/R45 print RATIO45IN ; print RATIO45 ; print RATIO45OUT print print print "☆☆☆ 90度旋回のdataを計算します ☆☆☆" print "仮想車輪の走行pulse数を表示します " ; let R90STEP= (((R90*2)*3.1415)/4)/step print R90STEP print "半径を表示します " ; let R90IN= radiusIN(R90,tread) let R90OUT= radiusOUT(R90,tread) print R90IN ; print R90 ; print R90OUT print "半径の比率を表示します " ; let RATIO90IN= R90IN/R90 let RATIO90= R90/R90 let RATIO90OUT= R90OUT/R90 print RATIO90IN ; print RATIO90 ; print RATIO90OUT print print "☆☆☆ 半径80mm、90度Vターンのdataを計算します ☆☆☆" print "仮想車輪の走行pulse数を表示します " ; let R90V80STEP= (((R90V80*2)*3.1415)/4)/step print R90V80STEP print "半径を表示します " ; let R90V80IN= radiusIN(R90V80,tread) let R90V80OUT= radiusOUT(R90V80,tread) print R90V80IN ; print R90V80 ; print R90V80OUT print "半径の比率を表示します " ; let RATIO90V80IN= R90V80IN/R90V80 let RATIO90V80= R90V80/R90V80 let RATIO90V80OUT= R90V80OUT/R90V80 print RATIO90V80IN ; print RATIO90V80 ; print RATIO90V80OUT print print "☆☆☆ 半径70mm、90度Vターンのdataを計算します ☆☆☆" print "仮想車輪の走行pulse数を表示します " ; let R90V70STEP= (((R90V70*2)*3.1415)/4)/step print R90V70STEP print "半径を表示します " ; let R90V70IN= radiusIN(R90V70,tread) let R90V70OUT= radiusOUT(R90V70,tread) print R90V70IN ; print R90V70 ; print R90V70OUT print "半径の比率を表示します " ; let RATIO90V70IN= R90V70IN/R90V70 let RATIO90V70= R90V70/R90V70 let RATIO90V70OUT= R90V70OUT/R90V70 print RATIO90V70IN ; print RATIO90V70 ; print RATIO90V70OUT print print print "☆☆☆ 135度旋回のdataを計算します ☆☆☆" print "仮想車輪の走行pulse数を表示します " ; let R135STEP= ((((R135*2)*3.1415)/8)*3)/step print R135STEP print "半径を表示します " ; let R135IN= radiusIN(R135,tread) let R135OUT= radiusOUT(R135,tread) print R135IN ; print R135 ; print R135OUT print "半径の比率を表示します " ; let RATIO135IN= R135IN/R135 let RATIO135= R135/R135 let RATIO135OUT= R135OUT/R135 print RATIO135IN ; print RATIO135 ; print RATIO135OUT print end私は、これでスラロームのデータ作成が楽になりました。