
Scilab/Xcosのデモを端から動かしてます。今回は自動車のサスペンションの挙動のシミュレーションです。2輪づつ前後のサスペンションにかかる力とピッチ方向の角度とZ方向の位置をシミュレートしてます。いつものフローよりはコメントなどもあってわかりやすいデス。雰囲気は分かるのだけれども、コマケーところに疑問もあり。
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはWindows 11の パソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。
Scilab 2024.0.0
「自動車のサスペンション」デモ
「機械系」唯一のデモがこれです。結構フローはデカイですが、大きく3部分にわかれます。
青色マーカで印をつけたあたりが、前後のサスペンションの「入力」となる、車体の角度と車体高さ(路面から測った重心位置みたい)から、サスペンションの「出力応答」となる力とモーメントを計算する部分です。
それに対して黄色がピッチ(車体の前後方向)の傾きを表す角度 θ を計算する部分、緑色が車体高さ z を計算する部分です。
シミュレーションに使われるサスペンションの諸元はコンテキスト設定中で指定されてます。
車体重量のM_bとか、重心回りの前後方向の回転モーメントI_yyなどは一つで宜しいのですが、以下については前後のサスペンション毎に別の値を指定できるよう2個ずつ定義されるようです。
-
- L:重心からサスペンションまでの距離
- K:サスペンションの硬さ(バネ定数)
- C:サスペンションのダンパ定数
ここで1個疑問あり。後でサスペンション内部の「モデル」も登場するのですが、その内部では前後の種別あるL_fなどの定数でなく、単なるLとして記されてます。設定しようとすると以下のようなエラーが発生します。当然。
しかし、L、K、Cのままでもシミュレーションはエラーも吐かず「ちゃんと」動いている感じ。どうなんだろ、何かコンテキストで定義された定数とサスペンションのモデル内の「仮引数」とつなぐためのメカニズムがあるのか?Scilab素人老人には知る能わず。。。今後の課題やな。
さて、フロント・サスペンションのモデルが以下に。左から入力されるベクトル値(変位量)を、バネとダンパの2つにわけて計算し、サスペンションの出力となるモーメントと力を出力しているみたい。各定数を2倍しているのは、左右両輪あるので2輪分ということかい?
リアのサスペンションモデルもおなじ。
一方、シミュレーションの入力となるのは、道路の凸凹と車の加速に伴ってかかるサスペンションへのモーメントです。
まずは道路の凸凹。時刻7で、10mmの段差に遭遇するってか。
この様子は、Road height(m)なるグラフ(フロー右側にならんでいるうちの一つ)に出力されてます。こんな感じ。
一方、車の加速にともなうモーメントの設定が以下に。後輪駆動であれば、駆動輪の回転に伴って車体が持ち上がる(バイクならウイリー?)する方向のモーメントです。どうも時刻3から、100[N*m]であるみたい。
その様子は、Moment due to acceleration(Nm)なるグラフにあらわれてます。
シミュレーション結果
まずはフロント・サスペンションにかかる力(N)のグラフ。当然、車体重量分がかかりつづけつつ、まず時刻3付近で、前進加速にともなうピッチ方向へのモーメントから生じる力が小山をつくってます。力がかかり続けるということは後輪駆動(FR)ではなく、前輪駆動(FF)なの? ほんとか? その後時刻7にて、10mmの段差を乗り越えてます。10mmといいつつ、結構キツイね。
一方、ピッチ方向の重心回りの角度θの微分(角速度)のグラフが以下に。時刻3で加速にともなう変化があり。まず+方向に出ているので、FF駆動ならθは時計回りに測っていることになるがいいのか?時刻7の上下動を見るとθは反時計回りに見えるんだが。するとFR?どっちなんだい。
さて高さ方向の位置 z のシミュレーションが以下に。車の加速には無関係(重心位置変わらず)、時刻7の段差で重心と路面の距離がまず短縮、その後サスが伸びてちょいと持ち上がってまた安定すると。
それらしい、挙動を示しているみたいなんだが、イマイチ釈然とせんなあ。