MV-8001:経路と速度の追従

本チュートリアルでは、経路と速度または加速度プロファイルを定義、経路を追従するようフィードフォワードステアリングコントローラーをセットアップ、速度または加速度プロファイルを追従するようフィードフォワードトラクションコントローラーをセットアップする方法について学びます。

フィードフォワードコントローラー
フィードフォワードシステムでは、制御変数の調整はエラーベースではありません。代わりに、数学モデル、または、外乱の計測情報に基づきます。
すなわち、コントローラーは車両についての情報を用いて信号を計算します。
ドライバーが、重量1000 Kgの車両がスロットル30%で前方への1000 Nの推進力を生じると判っていると仮定します。そうすると、1 m/s2の加速度を発生させたい場合には、単に30%のスロットルを与えます。
ドライバー用の経路の定義
以下のいくつかの方法を使って、希望する経路を与えることができます:
Table of centerline points
経路は、中心線ポイントの等間隔な座標のテーブルとして与えられます。これらのポイントは、別のファイルDDF(Driver Demand File)で与えられます。
$Example DDF
[ALTAIR_HEADER]
FILE_TYPE 		= 'DDF'
FILE_VERSION 	= 1.0
FILE_FORMAT 	= 'ASCII'
$---------------------------------------------------UNITS
[UNITS]
(BASE)
{length  force      angle       mass    time}
'm'   'newton'   'degrees'   'kg'    'sec'
$---------------------------------DEMAND_VECTORS
[DEMAND_VECTORS]
{X		Y	Z}
 0		0	 0
 -4		0	 0
 -1		0	 0
 -2		0	 0
 -5		0	 0
 -3   	0	 0
図 1.
Sequence of straights and arcs
経路は、直線と円弧のテーブルとして与えられます。
KEY PAR0 PAR1
ST 直線部の長さ 不使用
ARC 曲率半径 弧の角度
  • 正の角度は反時計回りの弧
  • 負の角度は時計回りの弧
[PATH]
{KEY	PAR0	PAR1} 
'ST'	100.0	0
'ARC'	50.0	1.57079
'ST'	100.0	0
'ARC'	50.0	3.14159
'ST'	200.0	0
'ARC'	50.0	-2.35619
図 2.
Predefined path
予め定義された経路(定常円旋回、シングルレーンチェンジ、ダブルレーンチェンジ、およびスラローム)から1つ選択できます。
$Example block for constant radius path
[PATH] 
TYPE 			= 'CONSTANT_RADIUS'
RADIUS 		    = 30
INITIAL_STRAIGHT 	= 45
TURN 			= 'LEFT‘
図 3.
ドライバー用の速度または加速度プロファイルの定義
要求速度または加速度のプロファイルは、チュートリアルMV-8000で説明されている開ループ信号と同様です。全手法 – 定数、式およびカーブが、要求信号定義にも有効です。

車両の組み立て

このステップでは、Assembly Wizardを使って車両を組み立てます。

  1. 新しいMotionViewセッションを開始します。
  2. Advanced DriverのすべてのMotionView機能が正しく動作するようMBD-Vehicle Dynamics Toolsプリファレンスファイルが読み込まれていることを確認してください。
    図 4.
    図 5.
  3. メニューバーからModel > Assembly Wizardを選択します。
    開ループの加速イベントスクリプトの記述では、線形トルクマップパワートレインを使用して、ギアとクランチ用のコントローラーを使用しない単純なモデルとします。
    図 6.
  4. Full vehicle with advanced driverオプションを選択します。
    これで、Advanced Driverのすべての関連付けが管理されます。
    図 7.
  5. Nextをクリックします。
  6. 下に示すAssembly Wizardページで、デフォルトの選択肢を選びます。
    ページ ラベル 選択 デフォルト(Yes/No)
    1 Model type Full vehicle with driver No
    2 Driveline configuration Front wheel drive Yes
    3 車体 Body Yes
    3 Instrumentation Instrumentation Yes
    3 Front subframe None Yes
    3 Front suspension Frnt macpherson susp (1 pc. LCA) Yes
    3 Steering linkages Rackpin steering Yes
    3 Rear subframe None Yes
    3 Rear suspension Rear quadlink susp Yes
    3 Powertrain Linear torque map powertrain Yes
    3 Signal generator Driver signal generator Yes
    4 Tires Auto Tires Yes
    4 Steering column Steering column 1 (not for Abaqus) Yes
    4 Steering boost None Yes
    5 Front struts Frnt strut (with inline jts) Yes
    5 Front stabilizer bars None Yes
    5 Rear struts Rear strut (with inline jts) Yes
    5 Rear stabilizer bars None Yes
    6 Front jounce bumpers None Yes
    6 Front rebound bumpers None Yes
    6 Rear jounce bumpers None Yes
    6 Rear rebound bumpers None Yes
    7 Disk brakes Disk brakes Yes
    7 Front driveline Independent fwd Yes
    8 Driver System Altair Driver Yes
    8   Next No
    9   Finish No

ドライバー解析の追加

このステップでは、Task Wizardを使って、ドライバー解析を読み込みます。

  1. メニューバーからAnalysis > Task Wizardを選択します。
    図 8.
  2. TypeドロップダウンメニューからAltairDriverFileを選択します。


    図 9.
    ヒント:

    Altair Driverアイコン)を選択すると、Altair Driverパネルが開きます。これで自動的に、Altair Driverのための車両のアタッチメントがすべて関連付けされます。

    図 10.

    AltairDriverFile 0を選択すると、ドライバーイベントのパネルが開きます。Event Editorボタンを選択し、Altair Driver Fileダイアログを開きます。

Altair Advanced Driverがブラウザツリーに追加されます。

車両パラメータの指定

このステップでは、車両のパラメータを指定します。

フィードフォワードコントローラーは車両をモデル化するため、車両パラメータを必要とします。車両パラメータが精確である必要はありません。Altair Driverが必要とする車両パラメータのほとんどは、車両モデルから自動的に計算されます。
車両のパラメータを指定します。

Altair Driver File運転イベントの書き出し

このステップでは、等速、定常円旋回イベント、 直線加速イベント、およびCartesian Coordinates of Centerline Pointsテーブルイベントとしての経路を作成します。

Driverは運転イベントの実行に、イベントのスクリプトまたはAltair Driver File(ADF)を必要とします。ADFは、任意のテキストエディターを使用、もしくはDriverパネル上のEdit Driver Fileボタンをクリックすることで、編集が可能です。

等速、定常円旋回イベント

  1. 任意のテキストエディターを開き、以下のテキストをコピーペーストします。
    重要: ファイルを保存する前に、すべての空白行を削除する必要があります。
    ヒント: ADFに何が書かれているかをしっかり理解するために、コメントをよく読んでください。
    $-----------------------------------------------------------------ALTAIR_HEADER
    $ This block is required for version control             	
    [ALTAIR_HEADER]                                                                             
    FILE_TYPE 		= 'ADF'                                                                  
    FILE_VERSION 	= 1.0                                                                
    FILE_FORMAT 	= 'ASCII'                                                            
    $--------------------------------------------------------------------------UNITS 
    $In this block we specify the units in which this file should be read
    [UNITS]                                                                                     
    (BASE)                                                                                      
    {length  force      	angle       mass   time}                                               
    'meter'   'newton'   	'radians'  'kg'      'sec'                                              
    $--------------------------------------------------------------------VEHICLE_IC
    $In this block we specify the initial conditions specifically initial speed of the 
    $vehicle with respect to the vehicle IC marker in the driver attachments                     
    [VEHICLE_INITIAL_CONDITIONS]                                                                 
    VX0 = -15.0                                                                                     
    VY0 = 0.0                                                                                    
    VZ0 = 0.0                                                                                    
    $--------------------------------------------------------------STEERING_STANDARD
    $This block specifies the saturation and cutoff frequency for the low pass filter for
    $steering output signal. These signals are global and are active for the entire event            
    [STEER_STANDARD]                                                                            
    MAX_VALUE 			= 3.141593                                                         
    MIN_VALUE 			= -3.141593                                                         
    SMOOTHING_FREQUENCY 	= 10.0
    INITIAL_VALUE 		= 0.0
    $--------------------------------------------------------------THROTTLE_STANDARD
    $This block specifies the saturation and cutoff frequency for the low pass filter for
    $throttle output signal            
    [THROTTLE_STANDARD]                                                                         
    MAX_VALUE 			= 1.0                                                      
    MIN_VALUE 			= 0.00                                                      
    SMOOTHING_FREQUENCY 	= 10.0
    INITIAL_VALUE 		= 0.5                                        
    $---------------------------------------------------------------BRAKING_STANDARD            
    $This block specifies the saturation and cutoff frequency for the low pass filter for
    $brake output signal            
    [BRAKE_STANDARD]                                                                            
    MAX_VALUE 			= 1.0                                                         
    MIN_VALUE 			= 0.0                            
    SMOOTHING_FREQUENCY 	= 10.0                             
    INITIAL_VALUE 		= 0.0 
    $-----------------------------------------------------------------MANEUVERS_LIST 
    $This block provides the list of all the maneuvers, simulation time for each maneuver
    $maximum solver step size (hmax) and print interval           
    [MANEUVERS_LIST]                                                                            
    { name       		simulation_time  h_max  print_interval}                         
    'MANEUVER_1'	15.0                   0.005    0.01                        
    $---------------------------------------------------------------------MANEUVER_1            
    [MANEUVER_1]
    $This block provides the ties controllers to each driver output                                                                                 
    TASK = 'STANDARD'                                                                           
    (CONTROLLERS)                                                                               
    {DRIVER_SIGNAL  	PRIMARY_CONTROLLER 	ADDITIONAL_CONTROLLER}      
     STEER                   	FEEDFORWARD_STEER	  		NONE                                
     THROTTLE             	FEEDFORWARD_TRACTION	  		NONE                            
     BRAKE                   	FEEDFORWARD_TRACTION 			NONE                                
    $---------------------------------------------------------STEER
    $This is controller block containing all the information required by
    $the driver to construct the controller. Different controllers have
    $different requirements. Here we are using feedforward steering 
    $controller.                                                                                              
    [FEEDFORWARD_STEER]                                                                      
    TAG 			= 'FEEDFORWARD'
    LOOK_AHEAD_TIME 	= 0.5
    PATH 			= 'PREDEFINED' 
    BLOCK 		= 'PATH'
    $---------------------------------------------------------PATH
    $Block containing the information about the path to be followed
    [PATH]                                                                      
    TYPE 			= 'CONSTANT_RADIUS'
    RADIUS 		= 40
    INITIAL_STRAIGHT 	= 20
    TURN 			= 'LEFT'
    $--------------------------------------------------THROTTLE & BRAKE             
    [FEEDFORWARD_TRACTION]                                                                      
    TAG 			= 'FEEDFORWARD'
    TYPE 			= 'FOLLOW_VELOCITY'
    LOOK_AHEAD_TIME 	= 0.5
    DEMAND_SIGNAL 	= 'DEMAND_SPEED'
    $---------------------------------------------------------DEMAND_SPEED
    $Block containing all the information about the velocity profile to be followed             
    [DEMAND_SPEED]                                                                      
    TYPE 			= 'CONSTANT'
    VALUE			= 15.0
  2. ADFを保存します。
  3. をクリックし、シミュレーションを開始します。
  4. 結果を検証します。
  5. 同じ経路を別の手法(Sequence of straight and arcs)を用いて行います。
    これは、同じ経路を与え、単に手法を変更しているだけなので、結果に影響はないはずです。
    1. ADFのFEEDFORWARD_STEERブロックのPATH属性をSEQUENCE_OF_ST_CRVに変更します。
      [FEEDFORWARD_STEER]                                                                      
      TAG 			= 'FEEDFORWARD'
      LOOK_AHEAD_TIME 	= 0.5
      PATH 			= 'SEQUENCE_OF_ST_CRV ' 
      BLOCK 		= 'PATH'
    2. ADFのpathブロックを下記のテキストで置き換えます。
      [PATH]
      {KEY	PAR0	PAR1}                           
      'ST'	20	0
      'ARC'	40	6.28318
    3. シミュレーションを再実行します。
    新しい結果は最初の結果と一致するはずです。

直線加速イベント

このステップでは、直線に追従しながら、車両を2 m/s2で加速し続けるイベントを作成します。

  1. 任意のテキストエディターを開き、以下のテキストをコピーペーストします。
    重要: ファイルを保存する前に、すべての空白行を削除する必要があります。
    $-----------------------------------------------------------------ALTAIR_HEADER
    [ALTAIR_HEADER]                                                                             
    FILE_TYPE 		= 'ADF'                                                                  
    FILE_VERSION 	= 1.0                                                                
    FILE_FORMAT 	= 'ASCII'                                                            
    $--------------------------------------------------------------------------UNITS
    [UNITS]                                                                                     
    (BASE)                                                                                      
    {length  force      	angle       mass   time}                                               
    'meter'   'newton'   	'radians'  'kg'      'sec'                                              
    $--------------------------------------------------------------------VEHICLE_IC
    [VEHICLE_INITIAL_CONDITIONS]                                                                 
    VX0 = -20.0                                                                                     
    VY0 = 0.0                                                                                    
    VZ0 = 0.0                                                                                    
    $--------------------------------------------------------------STEERING_STANDARD
    [STEER_STANDARD]                                                                            
    MAX_VALUE 			= 3.141593                                                         
    MIN_VALUE 			= -3.141593                                                         
    SMOOTHING_FREQUENCY 	= 10.0
    INITIAL_VALUE 		= 0.0
    $--------------------------------------------------------------THROTTLE_STANDARD
    [THROTTLE_STANDARD]                                                                         
    MAX_VALUE 			= 1.0                                                      
    MIN_VALUE 			= 0.00                                                      
    SMOOTHING_FREQUENCY 	= 10.0
    INITIAL_VALUE 			= 0.2                                        
    $---------------------------------------------------------------BRAKING_STANDARD            
     [BRAKE_STANDARD]                                                                            
    MAX_VALUE 			= 1.0                                                         
    MIN_VALUE 			= 0.0                            
    SMOOTHING_FREQUENCY 	= 10.0                             
    INITIAL_VALUE 			= 0.0 
    $-----------------------------------------------------------------MANEUVERS_LIST 
    [MANEUVERS_LIST]                                                                            
    { name       		simulation_time  h_max  print_interval}                         
    'MANEUVER_1'		10.0                     0.01     0.01                                    
    $---------------------------------------------------------------------MANEUVER_1            
    [MANEUVER_1]
    $This block provides the ties controllers to each driver output                                                                                 
    TASK = 'STANDARD'                                                                           
    (CONTROLLERS)                                                                               
    {DRIVER_SIGNAL  	PRIMARY_CONTROLLER 	ADDITIONAL_CONTROLLER}      
     STEER                   	FEEDFORWARD_STEER	  		NONE                                
     THROTTLE             	FEEDFORWARD_TRACTION	  		NONE                            
     BRAKE                   	FEEDFORWARD_TRACTION 			NONE                                
    $---------------------------------------------------------STEER
    $This is controller block containing all the information required by
    $the driver to construct the controller. Different controllers have
    $different requirements. Here we are using feedforward steering 
    $controller.                                                                                              
    [FEEDFORWARD_STEER]                                                                      
    TAG 			= 'FEEDFORWARD'
    LOOK_AHEAD_TIME 	= 0.5
    PATH 			= 'PREDEFINED' 
    BLOCK 		= 'PATH'
    $---------------------------------------------------------PATH
    $Block containing the information about the path to be followed
    [PATH]                                                                      
    TYPE 			= 'CONSTANT_RADIUS'
    RADIUS 		= 40
    INITIAL_STRAIGHT 	= 20
    TURN 			= 'LEFT'
    $--------------------------------------------------THROTTLE & BRAKE             
    [FEEDFORWARD_TRACTION]                                                                      
    TAG 			= 'FEEDFORWARD'
    TYPE 			= 'FOLLOW_ACCELERATION'
    LOOK_AHEAD_TIME 	= 0.5
    DEMAND_SIGNAL 	= 'DEMAND_ACC'
    $---------------------------------------------------------DEMAND_ACC
    $Block containing all the information about the acceleration profile to be followed             
    [DEMAND_SPEED]                                                                      
    TYPE 			= 'CONSTANT'
    VALUE			= 2.0
  2. をクリックし、シミュレーションを開始します。
  3. 結果を検証します。

Cartesian Coordinates of Centerline Pointsテーブルイベントとしての経路

このステップでは、経路をCartesian coordinated of centerline pointsとして与え、速度プロファイルと経路を定義します。

  1. 任意のテキストエディターを開き、以下のテキストをコピーペーストします。
    重要: ファイルを保存する前に、すべての空白行を削除する必要があります。
    $-----------------------------------------------------------------ALTAIR_HEADER
    [ALTAIR_HEADER]                                                                             
    FILE_TYPE 		= 'ADF'                                                                  
    FILE_VERSION 	= 1.0                                                                
    FILE_FORMAT 	= 'ASCII'                                                            
    $--------------------------------------------------------------------------UNITS
    [UNITS]                                                                                     
    (BASE)                                                                                      
    {length  force      	angle       mass   time}                                               
    'meter'   'newton'   	'radians'  'kg'      'sec'                                              
    $--------------------------------------------------------------------VEHICLE_IC
    [VEHICLE_INITIAL_CONDITIONS]                                                                 
    VX0 = -20.0                                                                                     
    VY0 = 0.0                                                                                    
    VZ0 = 0.0                                                                                    
    $--------------------------------------------------------------STEERING_STANDARD
    [STEER_STANDARD]                                                                            
    MAX_VALUE 			= 3.141593                                                         
    MIN_VALUE 			= -3.141593                                                         
    SMOOTHING_FREQUENCY 	= 10.0
    INITIAL_VALUE 		= 0.0
    $--------------------------------------------------------------THROTTLE_STANDARD
    [THROTTLE_STANDARD]                                                                         
    MAX_VALUE 			= 1.0                                                      
    MIN_VALUE 			= 0.00                                                      
    SMOOTHING_FREQUENCY 	= 10.0
    INITIAL_VALUE 			= 0.2                                        
    $---------------------------------------------------------------BRAKING_STANDARD            
     [BRAKE_STANDARD]                                                                            
    MAX_VALUE 			= 1.0                                                         
    MIN_VALUE 			= 0.0                            
    SMOOTHING_FREQUENCY 	= 10.0                             
    INITIAL_VALUE 			= 0.0 
    $-----------------------------------------------------------------MANEUVERS_LIST 
    [MANEUVERS_LIST]                                                                            
    { name       		simulation_time  h_max  print_interval}                         
    'MANEUVER_1'		10.0                     0.01     0.01                                    
    $---------------------------------------------------------------------MANEUVER_1            
    [MANEUVER_1]
    TASK = 'STANDARD'                                                                           
    (CONTROLLERS)                                                                               
    {DRIVER_SIGNAL  	PRIMARY_CONTROLLER 	ADDITIONAL_CONTROLLER}      
     STEER                   	FEEDFORWARD_STEER	  		NONE                                
     THROTTLE             	FEEDFORWARD_TRACTION	  		NONE                            
     BRAKE                   	FEEDFORWARD_TRACTION 			NONE                                
    $---------------------------------------------------------STEER
     [FEEDFORWARD_STEER]                                                                      
    TAG 			= 'FEEDFORWARD'
    LOOK_AHEAD_TIME 	= 0.5
    $Instruction to the driver that the path is of type DDF 
    PATH 			= 'DDF' 
    $Path of the ddf file, data lies in same folder in file named snet.ddf
    FILE 			= 'snet.ddf'
    $--------------------------------------------------THROTTLE & BRAKE             
    [FEEDFORWARD_TRACTION]                                                                      
    TAG 			= 'FEEDFORWARD'
    TYPE 			= 'FOLLOW_VELOCITY'
    LOOK_AHEAD_TIME 	= 0.5
    DEMAND_SIGNAL 	= 'DEMAND_SPEED'
    $---------------------------------------------------------DEMAND_SPEED
    $Block containing all the information about the acceleration profile to be followed             
    [DEMAND_SPEED]                                                                      
    TYPE 			= 'CURVE'
    $Velocity profile information is in the file snet.ddf in the same folder
    $Velocity profile is defined under the column name DV in the DDF
    ${X 	Y 	Z 	DV}
    FILE			= 'snet.ddf'
    DEMAND_VECTOR	= 'DV'
  2. snet.adfをADFとして同じフォルダーに置きます。
  3. シミュレーションを実行し、結果を検証します。
  4. ADF内のDEMAND_SPEEDブロックを、以下のテキストに書き換えます。
    [DEMAND_SPEED]
    TYPE = 'CURVE'
    BLOCK = 'DEMAND_CURVE'
    $-------------------------DEMAND_CURVE
    [DEMAND_CURVE]
    INDEPENDENT_VARIABLE = 'PATH_S'
    DEPENDENT_VARIABLE = SIGNAL
    INTERPOLATION = 'LINEAR'
    {PATH_S	SIGNAL}
    0   30
    250 35
    400 10
    584 10
    680 25
    780 10
    942 10
    1300    40
    1695    10
    1868    10
    1958    10
    2040    15
    2109    15
    2173    15
    2300    20
    2409    15
    2524    15
    2647    10
    2811    10
    3500    50 
    DEMAND_SPEEDブロックを編集し、中心線に沿って動く距離の関数としてのカーブになるようにします。