MV-8001: Path and Velocity Following
In this tutorial, you will learn how to define a path and velocity or acceleration profile, set up a feedforward steering controller to follow a path, and set up a feedforward traction controller to follow a velocity or acceleration profile.
- Feedforward Controllers
- In a feed-forward system, the control variable adjustment is not error-based. Instead it is based on knowledge about the process in the form of a mathematical model of the process and knowledge about or measurements of the process disturbances.
- Defining a path for the driver
- Multiple methods can be used to provide the desired path:
- Table of centerline points
- Path is provided as a table of equally spaced cartesian
coordinates of centerline points. These points are provided
in a separate file, DDF or 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
- Sequence of straights and arcs
- Path is provided as a table of straights and circular section.
- Predefined path
- Path is one of the predefined paths visualization (Constant Radius, Single lane change, Double lane change, and Slalom).
- Defining a velocity or acceleration profile for the driver
- Demand velocity or acceleration profile is similar to open loop signal explained in tutorial 1. All methods – constant, expression and curve are valid for demand signal definition as well.
Assemble the Vehicle
In this step, you will assemble the vehicle using the Assembly Wizard.
- Start a new MotionView session.
-
Ensure the MBD-Vehicle Dynamics Tools preference file loaded is for all of the
MotionView functionality of the Advanced Driver
to work properly.
-
From the menu bar, select .
In Script an Open Loop Acceleration Event, a linear torque map powertrain will be used to avoid the complexity of adding controllers for gear and clutch.
-
Select the Full vehicle with advanced driver
option.
This takes care of all the dependencies of the advanced driver.
- Click Next.
-
Choose the default selections in the following Assembly Wizard pages.
Page Label Selection Default (Yes/No) 1 Model type Full vehicle with driver No 2 Driveline configuration Front wheel drive Yes 3 Vehicle body 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
Add Driver Analysis
In this step, you will use the Task Wizard to load the driver analysis.
-
From the menu bar, select .
-
Select AltairDriverFile from the Type drop-down
menu.
Tip:
Selecting (Altair Driver icon) will open up the Altair Driver panel. This automatically resolves all of the vehicle attachments for the Altair Driver.
Selecting the AltairDriverFile 0 will open up the driver event panel. Selecting the Event Editor button will open the Altair Driver File dialog.
Specify Vehicle Parameters
In this step, you will specify parameters for the vehicle.
Write an Altair Driver File Driving Event
In this step, you will create a constant radius with constant velocity event, a straight line acceleration event, and a path as a table of cartesian coordinates of centerline points event.
Constant Radius with Constant Velocity Event
-
Open any text editor and copy and paste the following text into it.
Important: All blank lines must be removed prior to saving the file.Tip: Read through the comments for a better understanding of what is written in the 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
- Save the ADF.
- Click to run the simulation.
- Observe the results.
-
Complete the same path using a sequence of straight and arcs method.
This is simply a change in the method of providing the same path and should not affect the results.The new results should match the initial results.
Straight Line Acceleration Event
In this step, you will create an event to follow a straight line while accelerating the vehicle constantly with 2 m/s2.
-
Open any text editor and copy and paste the following text into it.
Important: All blank lines must be removed prior to saving the file.
$-----------------------------------------------------------------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
- Click to run the simulation.
- Observe the results.
Path as a Table of Cartesian Coordinates of Centerline Points Event
In this step, you will give a path as a table of Cartesian coordinated of centerline points and define the velocity profile along the path.
-
Open text editor and copy and paste the following text into it.
Important: All blank lines must be removed prior to saving the file.
$-----------------------------------------------------------------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'
- Place snet.adf in the same folder as the ADF.
- Run the simulation and study the results.
-
Replace the DEMAND_SPEED block in the ADF with the following text.
[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
The DEMAND_SPEED block is edited to be a curve as a function of distance traveled along the centerline.