05_3 タイトル


 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   
 私は、これでスラロームのデータ作成が楽になりました。





Mouse2005の部屋へ
MicroMouseの部屋へ
ホーム