Project 1 (Mini Project on Vehicle Direction Detection
MINI PROJECT -VEHICLE DIRECTION DETERMINATION
AIM OF THE PROJECT
- To develop MATLAB Simulink model as per requirement.
- To tag the requirements to the simulink model; ie, tagging requirement 1 & requirement 2 to their corresponding subsystems.
- To make necessary MBD compliant changes to the model, Data Dictionary creation & code generation.
DESCRIPTION AND STEPS
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.
1. Requirement Analysis:
The following requirements are saved in a Word document named " vehicle_direction" to enable Requirement Tagging.
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).
2. Modelling
According to the given requirements the vehicle direction detection system is modelled. The model subsytem has two inputs, namely Steering wheel input as yaw rate 'SteeringWheel_YawDegreeInput' and 'CameraInput_RoadSign' and a single output 'Vehicle_Direction_Indicator'.
The input is compared against 3 angular values to determine the direction in which the steering wheel is turning towards.

Requirement1 subsystem:
Switch blocks are used for comparison and the output of this requirement is a local signal (Signal Name: Vehicle_Turn_Status).

Requirement2 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).Signal Vehicle_Turn_Status is compared against calibration values , if each of them is found equal, then each of the three corresponding output is compared against the camera input signal and sing a logical operator block, only one among them is finally given as output signal (Signal Name: Vehicle_Direction_Indicator).

3. Requirement tagging
For each subsystem or ports or blocks, corresponding requirement functionality from the document can be tagged for better understanding. Subsystems or components which are tagged with requirements when selected gets highlighted to yellow colour.
Here, Requirement_1 subsystem is tagged to Requirement_1 in Word document and Requirement_2 subsystem is tagged to Requirement_2 in Word document as shown here:


3. SLDD Creation
A data dictionary is a persistent repository of data that are relevant to your model. You can also use the base workspace to store design data that are used by your model during simulation.The dictionary stores design data, which define parameters and signals, and include data that define the behavior of the model. The given signal details are:
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 |
- |
- |
Select Model Settings , then "Model Properties", click on 'External Data' click "New" and add a file name and click OK to create an sldd.
Here, a simulink data dictionary is created under the name "sldd_vehicle_dir.sldd" and saved.

4.MBD Complaint changes:
According to the MAAB guidelines, there are a set of rules that should be followed while doing a model based development. These can be checked using different check options available in Model Advisor .
Under Model Advisor,from the left pane drop-down, select 'By product' select 'Simulink Checks'-'Modeling Standards'-'MAB Checks' and Click on 'Run Selected Checks'. A report will be available after all checks are carried out.

The vehicle direction determination model has passed all MAB checks.The Model Advisor Report is shown below:

5. Model and Configuration parameters update:
The Model can be updated by pressing Ctrl+E, and in Configuration parameters, the solver settings is changed to 'Fixed step' of step size 0.01.
6.Code generation:
For code generation, click on BUILD icon from C-code tray. It generates the C code for the model and MBD Traceability files. It generates a Model.c file which contains the entry point for the algorithm, Model.h file,which declares the model data structures and a Model_private.h and Model_types.h file. Before generating the code, in the Configuration parameters setting, select system target file as 'ert.tlc'. When we select a target, other configuration parameters change automatically.
Configuration parameters:

Generated code "vehicle_dir.c" file:

Code Generation Report:

The complete code in vehicle_dir.c file is shown here:
/*
* File: vehicle_dir.c
*
* Code generated for Simulink model 'vehicle_dir'.
*
* Model version : 1.13
* Simulink Coder version : 9.5 (R2021a) 14-Nov-2020
* C/C++ source code generated on : Thu Jan 13 21:56:21 2022
*
* Target selection: ert.tlc
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
*/
#include "vehicle_dir.h"
#include "vehicle_dir_private.h"
/* Exported data definition */
/* Const memory section */
/* Definition for custom storage class: Const */
const int16_T LeftTurn_RoadSign = -120;
/* Referenced by: '/LeftTurn_RoadSign' */
const int16_T Left_Turn_AngularLimit = -120;
/* Referenced by: '/Left_Turn_AngularLimit' */
const int16_T RightTurn_RoadSign = 30;
/* Referenced by: '/RightTurn_RoadSign' */
const int16_T Right_Turn_AngularLimit = 30;
/* Referenced by: '/Right_Turn_AngularLimit' */
const int16_T Straight_Drive_SteeringAngle = 0;
/* Referenced by: '/Straight_Drive_SteeringAngle' */
const int16_T Straight_RoadSign = 0;
/* Referenced by: '/Straight_RoadSign' */
/* External outputs (root outports fed by signals with default storage) */
ExtY_vehicle_dir_T vehicle_dir_Y;
/* Real-time model */
static RT_MODEL_vehicle_dir_T vehicle_dir_M_;
RT_MODEL_vehicle_dir_T *const vehicle_dir_M = &vehicle_dir_M_;
/* Model step function */
void vehicle_dir_step(void)
{
int16_T rtb_Switch;
/* Switch: '/Switch' incorporates:
* Constant: '/Right_Turn_AngularLimit'
* Constant: '/Straight_Drive_SteeringAngle'
* Inport: '/SteeringWheel_YawDegreeInput'
* Switch: '/Switch1'
*/
if (SteeringWheel_YawDegreeInput >= 30) {
rtb_Switch = Right_Turn_AngularLimit;
} else if (SteeringWheel_YawDegreeInput != 0) {
/* Switch: '/Switch1' incorporates:
* Constant: '/Left_Turn_AngularLimit'
*/
rtb_Switch = Left_Turn_AngularLimit;
} else {
rtb_Switch = Straight_Drive_SteeringAngle;
}
/* End of Switch: '/Switch' */
/* Outport: '/Vehicle_Direction_Indicator' incorporates:
* Constant: '/LeftTurn_RoadSign'
* Constant: '/RightTurn_RoadSign'
* Constant: '/Straight_RoadSign'
* Inport: '/CameraInput_RoadSign'
* Logic: '/OR1'
* Logic: '/OR2'
* Logic: '/OR3'
* RelationalOperator: '/Relational Operator'
* RelationalOperator: '/Relational Operator1'
* RelationalOperator: '/Relational Operator2'
*/
vehicle_dir_Y.Vehicle_Direction_Indicator[0] = ((rtb_Switch ==
RightTurn_RoadSign) || CameraInput_RoadSign);
vehicle_dir_Y.Vehicle_Direction_Indicator[1] = ((rtb_Switch ==
LeftTurn_RoadSign) || CameraInput_RoadSign);
vehicle_dir_Y.Vehicle_Direction_Indicator[2] = ((rtb_Switch ==
Straight_RoadSign) || CameraInput_RoadSign);
}
/* Model initialize function */
void vehicle_dir_initialize(void)
{
/* (no initialization code required) */
}
/* Model terminate function */
void vehicle_dir_terminate(void)
{
/* (no terminate code required) */
}
/*
* File trailer for generated code.
*
* [EOF]
*/
Link for all files and simulink model:
https://drive.google.com/drive/folders/1pXUlGu6EOugmpNyyuN7mIIw25WxRw8En?usp=sharing
RESULT
Developed a MATLAB Simulink model for vehicle direction determination as per requirements and tagged the requirements to the simulink model. Also, made necessary MBD compliant changes to the model, created a Data Dictionary & generated code using Embedded coder. Model Advisor checks for MAB compliance was run without any errors.