2005/9/16

目指せ完全自動運転(8)−距離指定減速メソッド  VRMスクリプト禅問答
難易度:☆☆☆☆

唐突ですが。

t = 2s / ( v0 + vt )
  t・・・時間
  s・・・走行距離
  v0・・・初期速度
  vt・・・t秒後の速度

です。
詳しくは等加速度運動あたりをキーワードにしてぐぐってみてください。何と言いますか、実はボクは数学が苦手なので、きっと原理についてはうまく説明できません。グラフを描いてみて、実はこれは台形の面積からその高さを計算しているだけなのだ、ということに気付けば、なんとなく納得できるはずです、っつーか、オイラがそう。
閑話休題。とりあえず使い方に限って説明しますが、要するに、停車位置までの距離 s と現在の速度 v0、そして停車位置に到達した際の速度 vt を上の式に代入すると、減速度が一定である前提(SetTimerVoltage命令がこれに当たる)で、所要時間 t がわかる、ということです。もっと噛み砕けば「停車位置までの距離を倍にして、これを現在速度と到達速度の和で割れば、この間を走るのにかかる時間がわかる」という意味になります。
つまり、速度 v0 で走行中の編成に対して SetTimerVoltage vt t を実行すると、距離 s だけ走って列車の速度が vt に達するワケです。これが「列車がセンサーを踏んだ時点から任意の距離で任意の速度まで加減速する」ために使えることはご理解いただけましたでしょうか。あとは、これをスクリプトにすれば良いことになります。
[編成スクリプト]
//公開プロパティ
//減速到達距離
Var StdVarSlowDownDistance
//減速到達速度
Var StdVarSlowDownSpeed
//
//距離指定加減速メソッド
//
BeginFunc MtdSlowDown
//演算用変数
Var TmpSpeed
Var TmpVoltage
Var TmpTime
//公開プロパティに整数が指定された場合に備えた措置
cnvfloat StdVarSlowDownSpeed
cnvfloat StdVarSlowDownDistance
//現在速度が到達速度を超えていれば実行
GetCurrentSpeed TmpSpeed
if> TmpSpeed StdVarSlowDownSpeed
//電圧算出
mov TmpVoltage StdVarSlowDownSpeed
GetTopSpeed TmpSpeed
div TmpVoltage TmpSpeed
//時間算出
mov TmpTime StdVarSlowDownDistance
add TmpTime TmpTime
GetCurrentSpeed TmpSpeed
add TmpSpeed StdVarSlowDownSpeed
mul TmpSpeed 1000.0
div TmpSpeed 3600.0
div TmpTime TmpSpeed
mul TmpTime 1000.0
cnvint TmpTime
//加減速実施
SetTimerVoltage TmpVoltage TmpTime
endif
EndFunc
本連載の最初に例示した汎用速度制御メソッドと見比べていただくと面白いかも知れません。基本的にはよく似た構造になっていますが、SetTimerVoltage命令に与える時間の算出方法が冒頭に示した方程式になっています。使い方も同様で、公開プロパティに任意の数値を set してからこのメソッドを call する、というパターンになります。
たとえば、現在80Km/hで走行中の編成があるとして、この編成の StdVarSlowDownSpeed に 10(Km/h)、StdVarSlowDownDistance に 200 (m) を set して StdMtdSlowDown を call すると、TmpTime は 16,000(ミリ秒) となり、編成は16秒間減速します。そして、200mほど走ったところで目標速度 10Km/h に達します。

これをレイアウトの中でどう使うか、センサーの配置やそのスクリプトについては次回に。その中で、なぜ 0Km/h = 停止に向かって減速せずに敢えて公開プロパティ StdVarSlowDownSpeed を設けているのかについても説明します。

質問やご要望があれば気軽にコメント欄に書き込んでください。特に「ここの意味がよくわからないのでもっと詳しく」という指摘は大歓迎です、なぜわかりにくいのかの理由が添えられていると特に。
0

2007/11/9  12:25

投稿者:ghost
残念ながらお分かりではありません。

2007/11/9  3:20

投稿者:大田邦郎
距離のSは、何の略なのか、もしお分かりでしたら教えていただけないでしょうか。

コメントを書く

この記事にはコメントを投稿できません




teacup.ブログ “AutoPage”
AutoPage最新お知らせ