Project 1 (Mini Project on Vehicle Direction Detection
MBD LIVE BATCH-2 :
Mini Project - Vehicle Direction Determination
General Overview:
Identifying the direction of the vehicle is one of the important & diverse features in Autonomous driving & Advanced Driver Assistance Features. This particular sub-feature of identifying the direction of vehicle is basically identifying the direction the vehicle is taking based on the camera input.
Camera reads the road signs & stores into its memory with unique values for left turn, right turn & straight drive. Depending on the direction it is taking, final indication is given to the driver – as an indication if he is driving in the recommended direction or not.
Vehicle Direction Determination can also be coupled along - side features like GPS systems to identify whether the vehicle is reaching its destination in an optimized manner. This sub feature can also be used along with Lane Detection, Highway Warning, Ramp Entry / Exit in Wrong Way Detection etc.
Objective of Mini Project:
- Development of MATLAB Simulink model as per requirement.
- Tag the requirements to the simulink model; tagging requirement 1 & requirement 2 to their corresponding subsystems is fine.
- MBD compliant changes, Data Dictionary creation & code generation is added advantage, and that is not scope of this project.
- If choosing code generation, Storage class for Input signals: ImportedExtern; Storage class for Output signal: Export to File; Storage class for local signals: localizable; Storage class for calibration signals: Const.
- Choose sample time for all signals as 0.01s
Requirement - 1:
- Steering wheel input as yaw rate (Signal name: SteeringWheel_YawDegreeInput) is the input for this system.
- This is compared against 3 angular values, one each for left turn, right turn & straight drive (Calibration Values: Right_Turn_AngularLimit, Left_Turn_AngularLimit, Straight_Drive_Steering_Angle) to say which specific direction the steering wheel is turning towards.
- Use switch blocks to compare & develop this requirement. Keep this requirement in a subsystem & output of this requirement is a local signal (Signal Name: Vehicle_Turn_Status).
Requirement – 2:
- Keep this requirement as a separate subsystem. Inputs to this requirement are local signal from requirement 1 (Signal Name: Vehicle_Turn_Status) & an input signal from camera (Signal Name: CameraInput_RoadSign), which confirms the occurrence of a road sign.
- Signal Vehicle_Turn_Status is compared against calibration values (Calibration Values: RightTurn_RoadSign, LeftTurn_RoadSign, Straight_RoadSign), if each of them is found equal, then each of the three corresponding output is compared against the camera input signal,
- Using a logical operator block, only one among them is finally given as output signal (Signal Name: Vehicle_Direction_Indicator).
Signals & Calibration Data List:
|
Signal / Calibration Name |
Signal Type |
Data Type |
Dimension |
Min |
Max |
Initial Value |
Units |
|
SteeringWheel_YawDegreeInput |
Input |
Int16 |
1 |
-180 |
180 |
- |
Deg |
|
CameraInput_RoadSign |
Input |
Boolean |
1 |
0 |
1 |
- |
- |
|
Vehicle_Turn_Status |
Local |
Int16 |
1 |
-180 |
180 |
- |
Deg |
|
Right_Turn_AngularLimit |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
30 |
Deg |
|
Left_Turn_AngularLimit |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
-120 |
Deg |
|
Straight_Drive_Steering_Angle |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
0 |
Deg |
|
RightTurn_RoadSign |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
30 |
|
|
LeftTurn_RoadSign |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
-120 |
|
|
Straight_RoadSign |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
0 |
|
|
Vehicle_Direction_Indicator |
Output |
Boolean |
1 |
0 |
1 |
- |
- |
ANSWER :
AIM :
To develop a simulink model for vehicle direction determination that satisfies the following requirements.
Requirement - 1 :
- Steering wheel input as yaw rate (Signal name: SteeringWheel_YawDegreeInput) is the input for this system.
- This is compared against 3 angular values, one each for left turn, right turn & straight drive (Calibration Values: Right_Turn_AngularLimit, Left_Turn_AngularLimit, Straight_Drive_Steering_Angle) to say which specific direction the steering wheel is turning towards.
- Use switch blocks to compare & develop this requirement. Keep this requirement in a subsystem & output of this requirement is a local signal (Signal Name: Vehicle_Turn_Status).
Requirement – 2 :
- Keep this requirement as a separate subsystem. Inputs to this requirement are local signal from requirement 1 (Signal Name: Vehicle_Turn_Status) & an input signal from camera (Signal Name: CameraInput_RoadSign), which confirms the occurrence of a road sign.
- Signal Vehicle_Turn_Status is compared against calibration values (Calibration Values: RightTurn_RoadSign, LeftTurn_RoadSign, Straight_RoadSign), if each of them is found equal, then each of the three corresponding output is compared against the camera input signal,
- Using a logical operator block, only one among them is finally given as output signal (Signal Name: Vehicle_Direction_Indicator).
THEORY :
Identifying the direction of the vehicle is one of the important & diverse features in Autonomous driving & Advanced Driver Assistance Features. This particular sub-feature of identifying the direction of vehicle is basically identifyies the direction the vehicle is taking based on the camera input. Camera reads the road signs & stores into its memory with unique values for left turn, right turn & straight drive. Depending on the direction it is taking, final indication is given to the driver – as an indication if he is driving in the recommended direction or not. Vehicle Direction Determination can also be coupled along - side features like GPS systems to identify whether the vehicle is reaching its destination in an optimized manner. This sub feature can also be used along with Lane Detection, Highway Warning, Ramp Entry / Exit in Wrong Way Detection etc.
SIMULATION PROCESS :
The different steps to be followed for developing Simulink model for vehicle direction detections are;
Step-1 - Develop the Simulink model :
Based on the given requirements separate subsystems are made for requirement 1 and requirement 2.


Requirement 1 Subsystem :
- Steering wheel input as yaw rate (Signal name: SteeringWheel_YawDegreeInput) is the input for this system.
- This is compared against 3 angular values, one each for left turn, right turn & straight drive (Calibration Values: Right_Turn_AngularLimit, Left_Turn_AngularLimit, Straight_Drive_Steering_Angle) to say which specific direction the steering wheel is turning towards.
- Use switch blocks to compare & develop this requirement. Keep this requirement in a subsystem & output of this requirement is a local signal (Signal Name: Vehicle_Turn_Status).

Here, the inport along with its propagated signal SteeringWheel_YawDegreeInput is given to two switch blocks; switch 1 having the threshold value 0 and the switch 2 having 30. So, the switch condition of switch 1 is given as >= threshold(0) and the condition of switch 2 is given as >= threshold(30). If the condition of switch 1 holds true, then the Straight_Drive_Steering_Angle constant block is activated, if the condition is false, then Left_Turn_AngularLimit constant block is activated. If the condition of switch 2 holds true, then the Right_Turn_AngularLimit constant block is activated, if the condition is false, then the output of the switch 1 gets activated which is sent as the output Vehicle_Turn_Status signal.
It indicates that when the steering wheel input direction is 0°, the vehicle is in a straight drive angle and if it is less than 0°, then the vehicle is in a left turn angle. If the steering wheel input direction is greater than 30°, then the vehicle is in a right turn angle.
Requirement 2 Subsystem :
- Keep this requirement as a separate subsystem. Inputs to this requirement are local signal from requirement 1 (Signal Name: Vehicle_Turn_Status) & an input signal from camera (Signal Name: CameraInput_RoadSign), which confirms the occurrence of a road sign.
- Signal Vehicle_Turn_Status is compared against calibration values (Calibration Values: RightTurn_RoadSign, LeftTurn_RoadSign, Straight_RoadSign), if each of them is found equal, then each of the three corresponding output is compared against the camera input signal,
- Using a logical operator block, only one among them is finally given as output signal (Signal Name: Vehicle_Direction_Indicator).

Here, the inport along with its propagated signal Vehicle_Turn_Status which is the output signal from the first subsystem is given to three relational operators whose parameters are set as '=='. The input signal is then compared with three constant blocks namely RightTurn_RoadSign, LeftTurn_RoadSign, Straight_RoadSign. The output signal from the relational operators are given to the respective AND blocks (logical operators). Then, the respective AND blocks compares the output signal from the equal to blocks and the input signal CameraInput_RoadSign. The output signals of the respective AND blocks is then given to a mux, where the multiplexed signal is given to a signal conversion block that converts a signal to a new type without altering signal values. So, the multiplexed signal gets converted to a new type and is given as the output signal Vehicle_Direction_Indicator to the outport.
This is done so that with respect to the camera input, only one decision can be made by the vehicle, whic is whether to take a right/left turn or go straight.
Step-2 - Change the model settings to MBD compliance changes :
This includes the solver settings, code generation target file and sample time for solver.

Step-3 - Develop the Simulink data library for the model from the given data :
|
Signal / Calibration Name |
Signal Type |
Data Type |
Dimension |
Min |
Max |
Initial Value |
Units |
|
SteeringWheel_YawDegreeInput |
Input |
Int16 |
1 |
-180 |
180 |
- |
Deg |
|
CameraInput_RoadSign |
Input |
Boolean |
1 |
0 |
1 |
- |
- |
|
Vehicle_Turn_Status |
Local |
Int16 |
1 |
-180 |
180 |
- |
Deg |
|
Right_Turn_AngularLimit |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
30 |
Deg |
|
Left_Turn_AngularLimit |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
-120 |
Deg |
|
Straight_Drive_Steering_Angle |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
0 |
Deg |
|
RightTurn_RoadSign |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
30 |
|
|
LeftTurn_RoadSign |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
-120 |
|
|
Straight_RoadSign |
Calibration |
Int16 |
[1 1] |
-180 |
180 |
0 |
|
|
Vehicle_Direction_Indicator |
Output |
Boolean |
1 |
0 |
1 |
- |
- |
Set up the signals and parameters under design data used in the developed model.

Determine resolved signals and propagate signals in the model :

Step-4 - Model Advisory Check for MAB standards :
Under Model Advisor window, choose by task and select modeling standards for MAB and select run selected checks option on the right.

After the checks a report will be developed showing the pass, fail and warnings for the model. The report shown below indicates that 130 passed, o failed and there are 14 warnings present in the model.

Step-5 - Code generation :
The code for the entire vehicle direction determination model is developed by Generating S-function.


The code developed is given as a C file and an H file.
Step-6 - Requirement tagging :
The subsystems are tagged to the respective requirements provided in a word file.

Requirement 1 subsystem is tagged to the heading requirement 1 using the link to selection in word option.

Similarly Requirement 2 subsystem is tagged to the heading requirement 2 using the link to selection in word option.

CONCLUSION :
A Simulink model for the vehicle direction detection was developed with the given requirements and the model advisory check for the model was done and the results showed zero failed conditions and less than 15 warnings for MAB standards. The model advisory report and code generated for the model are attached with this report.