Project 1 (Mini Project on Vehicle Direction Detection
Mini Project :-
Aim:- Creating Simulink model of Vehicle Direction Determination as per the given specifications.
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 |
- |
- |
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.
1. Developing of MATLAB Simulink model of Vehicle Direction Detection:-
Simulink Blocks used in the Model:
Blocks Which are used to create a model are
Input Blocks: To provides the basic input signals
Output Blocks: To deliver the output signals
Constant & Compare to Constant Blocks: To define the calibration values
Logical operator Blocks: OR blocks are used to compare and the road signs with camera input and to get the boolean output.
Switch Blocks: To compare the input values with the calibration values.
Display Block: To display the Output results
Mux Block: To combine the multiple signals to a single signal.

2.Tagging the requirements to the simulink model
vehicle direction detection is a major subsystem inside this model Requirement 1 & Requirement 2 are created which is as shown in the figure below.

Requirement - 1:
- Steering wheel input is given as yaw rate input for this system.
- This is compared against 3 angular values, one each for left turn, right turn & straight drive to say which specific direction the steering wheel is turning towards.
- Using the switch blocks to compare signals. Keep this requirement in a subsystem & output of this requirement is a local signal (Signal Name: Vehicle_Turn_Status) is shown in the below figure.

Requirement – 2:
- Keeping 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, which confirms the occurrence of a road sign.
- 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,
- Using a logical operator block, only one among them is finally given as output signal (Signal Name: Vehicle_Direction_Indicator).

3. MBD compliant changes, Data Dictionary creation & code generation .
In the model setting we are changing the solver selection type from variable to Fixed step as shown in the below figure.

simulink data dictionary (SLDD) is created with given calibration list is shown in the below figure.

after that we have to click on the APPS which is located in the top toolbar where we selecting the Embedded C Coder. Here we have to click on the Build for the Code generation. The generated code is shown in the below figure.

generated code:-
/*
* File: vehicle_direction_detection.c
*
* Code generated for Simulink model 'vehicle_direction_detection'.
*
* Model version : 1.5
* Simulink Coder version : 9.5 (R2021a) 14-Nov-2020
* C/C++ source code generated on : Mon Oct 18 02:34:20 2021
*
* Target selection: ert.tlc
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
*/
#include "vehicle_direction_detection.h"
#include "vehicle_direction_detection_private.h"
/* Exported data definition */
/* Const memory section */
/* Definition for custom storage class: Const */
const int16_T LeftTurn_RoadSign = -120;/* Referenced by: '<S5>/Constant' */
const int16_T Left_Turn_AngularLimit = -120;/* Referenced by: '<S2>/Constant1' */
const int16_T RightTurn_RoadSign = 30; /* Referenced by: '<S4>/Constant' */
const int16_T Right_Turn_AngularLimit = 30;/* Referenced by: '<S2>/Constant' */
const int16_T Straight_Drive_Steering_Angle = 0;/* Referenced by:
* '<S2>/Constant2'
* '<S6>/Constant'
*/
/* External inputs (root inport signals with default storage) */
ExtU_vehicle_direction_detect_T vehicle_direction_detection_U;
/* External outputs (root outports fed by signals with default storage) */
ExtY_vehicle_direction_detect_T vehicle_direction_detection_Y;
/* Real-time model */
static RT_MODEL_vehicle_direction_de_T vehicle_direction_detection_M_;
RT_MODEL_vehicle_direction_de_T *const vehicle_direction_detection_M =
&vehicle_direction_detection_M_;
/* Model step function */
void vehicle_direction_detection_step(void)
{
int16_T rtb_Switch;
/* Switch: '<S2>/Switch' incorporates:
* Constant: '<S2>/Constant'
* Constant: '<S2>/Constant2'
* Inport: '<Root>/SteeringWheel_YawDegreeInput'
* Switch: '<S2>/Switch1'
*/
if (vehicle_direction_detection_U.SteeringWheel_YawDegreeInput >= 30.0) {
rtb_Switch = Right_Turn_AngularLimit;
} else if (vehicle_direction_detection_U.SteeringWheel_YawDegreeInput != 0.0)
{
/* Switch: '<S2>/Switch1' incorporates:
* Constant: '<S2>/Constant1'
*/
rtb_Switch = Left_Turn_AngularLimit;
} else {
rtb_Switch = Straight_Drive_Steering_Angle;
}
/* End of Switch: '<S2>/Switch' */
/* Outport: '<Root>/Vehicle_Direction_Indicator' incorporates:
* Constant: '<S4>/Constant'
* Constant: '<S5>/Constant'
* Constant: '<S6>/Constant'
* Inport: '<Root>/SteeringWheel_YawDegreeInput'
* Logic: '<S3>/Logical Operator'
* Logic: '<S3>/Logical Operator1'
* Logic: '<S3>/Logical Operator2'
* RelationalOperator: '<S4>/Compare'
* RelationalOperator: '<S5>/Compare'
* RelationalOperator: '<S6>/Compare'
*/
vehicle_direction_detection_Y.Vehicle_Direction_Indicator[0] = ((rtb_Switch ==
RightTurn_RoadSign) ||
(vehicle_direction_detection_U.SteeringWheel_YawDegreeInput != 0.0));
vehicle_direction_detection_Y.Vehicle_Direction_Indicator[1] = ((rtb_Switch ==
LeftTurn_RoadSign) ||
(vehicle_direction_detection_U.SteeringWheel_YawDegreeInput != 0.0));
vehicle_direction_detection_Y.Vehicle_Direction_Indicator[2] = ((rtb_Switch ==
Straight_Drive_Steering_Angle) ||
(vehicle_direction_detection_U.SteeringWheel_YawDegreeInput != 0.0));
}
/* Model initialize function */
void vehicle_direction_detection_initialize(void)
{
/* (no initialization code required) */
}
/* Model terminate function */
void vehicle_direction_detection_terminate(void)
{
/* (no terminate code required) */
}
/*
* File trailer for generated code.
*
* [EOF]
*/
5. setting thesample time for all signals as 0.01s :-
The below figure shows the sample time given while generating SLDD

Results:-
- The signs provided are in three directions which are Right, Left and Straight respectively.
- As the output are provide in the boolean function, If we getting the output as (0,0,1), Then the vehicle is considered to be moving in the straight drive. Similarly If the output as (1,0,0), Then the vehicle is taking in the Right turn and If the output is (1,0,1), Then the vehicle is taking the Left turn.
- After running the simulation, we can clearly see that the vehicle is moving the straight direction.

Conclusion:-
Autonomous vehicles consists of various Advance Driver-Assistance System (ADAS) features where Vehicle Driection Detection is considered to be one of the features of vehicles. here the vehicle direction detection Simulink model was created properly with all the figures.