Challenge

Project 1 (Mini Project on Vehicle Direction Detection

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:

1.Development of MATLAB Simulink model as per requirement.

2.Tag the requirements to the Simulink model; tagging requirement 1 & requirement 2 to their corresponding subsystems is fine.

3.MBD compliant changes, Data Dictionary creation & code generation is added advantage, and that is not scope of this project.

4.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.

5.Choose sample time for all signals as 0.01s

6.Implimentation SIL and MIL.

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).

Block used:

  1. Constant
  2. Compare To Constant
  3. Add
  4. Switch
  5. Relational Operator
  6. Subsystem
  7. MUX
  8. DEMUX
  9. Signal Conversion
  10. Display

Procedure:

Requirement-1

From the given question requirement

  • 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).

The above fig shows the requirement-1. When input given to the system then given statement

  1. If given input greater than 0 the Right_Turn_AngularLimit.
  2. If given input equal to 0 the Straight_Drive_Steering_Angle.
  3. If given input Less than 0 or -ve values the Left_Turn_AngularLimit.
  4. The requirement output Vehicle_Turn_Status given to input of the requirement -2 block

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).

The above fig shows the requirement-2. When output of requirement -1 given to the requirement -2 that value Compare to reference value it is given in SLDD file the

  1. Requirement -2 having two input 1. Requirement -1 output (Vehicle_Turn_Status) and 2. CameraInput_RoadSign
  2. Value was 0 to 180 deg and then RightTurn_RoadSign.
  3. Value was 0 deg then Straight_RoadSign.
  4. Value was 0 to -180 deg and then LiftTurn_RoadSign.
  5. If CameraInput_RoadSign input having 1 then only output will get.
  6. CameraInput_RoadSign input having 0 then output will be 0.

Steps model design:

  • Open the blank Simulink page.
  • Open the given model in question.
  • Click on the model settings.

  • Then go to Solver settings in that following setting to do
  1. Go to solver section.
  2. Type to “fixed-step”.
  3. Solver to “Discrete (no continuous state)”.
  4. Click on solver details in the change sample time to “0.01sec”.

  • Then click on code generation.
  1. Click on system target file to “embedder coder”

  • Then click on the apply and then ok.
  • Then click in modeling tab
  1. In that click on link to data dictionary.
  2. Click on the link to data dictionary
  3. Then one popup window open then there will be two options
  4. Browse file if already having SLDD file if any change then clicks on the browse option.
  5. if create new SLDD file then choose option “NEW”.
  6. If creating new “enable model access to base workspace”.
  7. Then creating new SLDD file choose which file having model there will be saved.

  • Then click on “model explore”
  1. Click on the external data
  2. Then subfile open in the “I saved SLDD Saved file open”.
  3. Then which name SLDD file click on right click.
  4. In given in values in the question values enter in SLDD file
  5. That will save on design data.
  6. 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

-

-

After completion of model design the signal resolve and propagated signal.

  1. Click on the signal line then right click on properties.

  1. If signal first time appear the that signal, we resolved and after that next time that signal, we propagated.

  • Then we check model will do

  1. Click on model tab the click on the model advisor.

  1. Then select whole subsystem to be selected.

  1. Then unselect all the check only select the model standards for MAB.
  2. Then click on then run selected checks
  3. Then errors and warnings show that can be cleared.
  4. After that we click on generate report.

  1. Choose the directory path and file name and choose the HTML format.
  2. Then click ok
  3. Report generated in HTML type and that folder in main folder saved.

  • Embedded code generation.
  1. Click on the apps and then choose the embedded coder.
  2. Click on embedded coder

  1. Click on the build option then
  2. Embedded code generated.

Steps for SIL and MIL test:

Then whole model create subsystem

  • Then right click on subsystem then click on test harness.
  • Then click on create for subsystem.
  • Then open one popup window.

Then choose the “in port as signal builder “and outport remains same

  • Then click on advance properties.
  • Then verification mode is normal for Model in Loop (Mil) Test Environment.
  • For Software in Loop (SIL) Test Environment choose option software in the loop.

  • Then click on ok.
  • Then test Environment open.
  • In that go to signal builder block input data given.
  1. Signal builder input data will give in question that came using excel sheet we for step or ramp in put we can created.

Click on signal builder block and then go to file

  • Then click in the we saved input data import from file

  • The whole that can be converted in wave form.

Requirement tag:

The given problem requirement can be taken in word sheet.

Then that word sheet saved in main folder model file.

Then open the word file.

Then which block tag the main head line selects.

Then go to MATLAB window.

Then choose which subsystem to be tagged.

Then right click on then choose the requirement.

  1. Then click on the Link to section work.
  2. Then model will tag with word docs.

OUTPUT OF EMBEDDED CODE BELOW ATTACHED:

/*
 * File: MINIPROJECTMBD.c
 *
 * Code generated for Simulink model 'MINIPROJECTMBD'.
 *
 * Model version                  : 1.5
 * Simulink Coder version         : 9.5 (R2021a) 14-Nov-2020
 * C/C++ source code generated on : Sun May 15 22:33:28 2022
 *
 * Target selection: ert.tlc
 * Embedded hardware selection: Intel->x86-64 (Windows64)
 * Code generation objectives: Unspecified
 * Validation result: Not run
 */

#include "MINIPROJECTMBD.h"
#include "MINIPROJECTMBD_private.h"

/* Exported data definition */

/* Definition for custom storage class: ExportToFile */
boolean_T Vehicle_Direction_Indicator[3];/* '/Signal Conversion' */

/* Const memory section */
/* Definition for custom storage class: Const */
const int16_T LeftTurn_RoadSign = -120;/* Referenced by: '/Constant1' */
const int16_T Left_Turn_AngularLimit = -120;/* Referenced by: '/Constant2' */
const int16_T RightTurn_RoadSign = 30; /* Referenced by: '/Constant' */
const int16_T Right_Turn_AngularLimit = 30;/* Referenced by: '/Constant' */
const int16_T Straight_Drive_Steering_Angle = 0;/* Referenced by: '/Constant1' */
const int16_T Straight_RoadSign = 0;   /* Referenced by: '/Constant2' */

/* Real-time model */
static RT_MODEL_MINIPROJECTMBD_T MINIPROJECTMBD_M_;
RT_MODEL_MINIPROJECTMBD_T *const MINIPROJECTMBD_M = &MINIPROJECTMBD_M_;

/* Model step function */
void MINIPROJECTMBD_step(void)
{
  /* local block i/o variables */
  int16_T Vehicle_Turn_Status;

  /* Switch: '/Switch1' incorporates:
   *  Constant: '/Constant'
   *  Inport: '/SteeringWheel_YawDegreeInput'
   *  RelationalOperator: '/Compare'
   */
  if (SteeringWheel_YawDegreeInput > 0) {
    /* Switch: '/Switch' incorporates:
     *  Constant: '/Constant'
     *  Switch: '/Switch1'
     */
    Vehicle_Turn_Status = Right_Turn_AngularLimit;
  } else {
    /* Switch: '/Switch1' incorporates:
     *  Constant: '/Constant2'
     */
    Vehicle_Turn_Status = Left_Turn_AngularLimit;
  }

  /* End of Switch: '/Switch1' */

  /* SignalConversion: '/Signal Conversion' incorporates:
   *  Constant: '/Constant'
   *  Constant: '/Constant1'
   *  Constant: '/Constant2'
   *  Inport: '/CameraInput_RoadSign'
   *  Logic: '/AND'
   *  Logic: '/AND1'
   *  Logic: '/AND2'
   *  RelationalOperator: '/Relational Operator'
   *  RelationalOperator: '/Relational Operator1'
   *  RelationalOperator: '/Relational Operator2'
   */
  Vehicle_Direction_Indicator[0] = ((Vehicle_Turn_Status == RightTurn_RoadSign) &&
    CameraInput_RoadSign);
  Vehicle_Direction_Indicator[1] = ((Vehicle_Turn_Status == LeftTurn_RoadSign) &&
    CameraInput_RoadSign);
  Vehicle_Direction_Indicator[2] = ((Vehicle_Turn_Status == Straight_RoadSign) &&
    CameraInput_RoadSign);
}

/* Model initialize function */
void MINIPROJECTMBD_initialize(void)
{
  /* (no initialization code required) */
}

/* Model terminate function */
void MINIPROJECTMBD_terminate(void)
{
  /* (no terminate code required) */
}

/*
 * File trailer for generated code.
 *
 * [EOF]
 */

MIL TEST OUT PUT:

The above fig shows the MIL test and output shown in display.

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.