Project 2 Adaptive Cruise Control
Aim:
>To build a simulink model as per tghe requirements given and also to show requirment tagging in the model.
>To check the model undefr standard guidline(MAB Guidelines) with help of model advisor.
>To build an embedded C-Code for the model.
Objective:
>Developing Adaptive Cruise Control feature as per the given requirement using MATLAB Simulink.
>Follow all the model based development realted proceses:
Requirement Tagging & Tracebility;
Simulink Data Dictionary(SLDD) file creation;
>In configuration parameters enable support floating numbers under code genration settings.
>Use embedded code to develop the code.
>Choose sample time for all signals as 0.01 seconds.
Basics Of Adaptive Cruise Control System:
>Adaptive cruise control(ACC) is an available cruise control advanced driver-asssitance system for road vehicles that automatically adjusts the vehicle speed to mantain a safe disctance from vehicles ahead.
>As of 2019, it is also called by 20 unique names that describe that basic functionality.
>This is also known as Dynamic cruise control.
>Control is based on sensor informayion from onboard sensors.
>Such systems may use a radar or laser sensor or a camera setup allowing the vehilce ahead, then accelarate when traffic allows it to.
>Nowadays it's also used in highways so that the driver can relaxly drive during long routes and don't have to apply sudden brakes which may cause accidents.

Main Model:
>The simulnk model is made as per given requirments for the Adaptive Cruise Control.
>In this model there mainly 3 subsytems, which are interconnected with each other in order to carry out the operations.
>These 3 subsytems represents the requirements asked in the project.
- Requirement 1: Lead Vehicle Subsystem.
- Requirement 2: Drive Vehicle Subsytem.
- Requirement 3: Adaptive Cruise Control Subsytem.

Requirement 1– Lead Vehicle:
- Lead Vehicle is a vehicle which is driving in the road ahead of our drive vehicle. Two input signals (Signal Name: CameraInput_LeadVehicle & RadarInput_LeadVehicle).
- Ideally sensor fusion techniques will be deployed to process & analyze data from camera & radar. For complexity reasons, let’s not adapt to any such algorithms.
- We can simply add both the radar & camera inputs & the corresponding output is read as Speed profile output (Signal Name: LeadVehicle_Speed).
- Speed data of the lead vehicle is critical in implementing the Adaptive Cruise Control algorithm.
> As to find out the lead vehicle spped is quite complicated, for simplify this as per requirement 1, the input from CameraInput_LeadVehicle signal and RadarInput_LeadVehicle signal are summed(by using add block) up to get the LeadVehicle_Speed Output.

Requirement 2 – Drive Vehicle:
- Drive Vehicle is the vehicle driven by the user & this is the vehicle which has ACC algorithm in it.
- Like the Lead Vehicle, Drive Vehicle algorithm also has 2 input signals (Signal Name: CameraInput_DriveVehicle, RadarInput_DriveVehicle) & one signal coming as an Input to this subsystem (Signal Name: Acceleration_Mode) – three inputs into this requirement in total.
- Like the above requirement, sensor fusion techniques will also be deployed here, for complexity reasons we are ignoring them.
- Two output signals come from this subsystem (Signal Name: DriveVehicle_Speed & LeadVehicle_Detected).
- Signal DriveVehicle_Speed is summation of three input signals mentioned above & LeadVehicle_Detected is renamed from Input Signal RadarInput_DriveVehicle by mere use of Signal Conversion block.
>For DriveVehicle_Speed calculation we are adding CameraInput_DriveVehicle, RadarInput_DriveVehicle and Accelaration_Mode feedback from Cruise Control algorithm.
>The outputs from this subsytem as DriveVehicle_Speed and Lead_Vehicle_Detected by propaggating PadarInput_DriveVehicle in to signal conversion block.

Requirement 3 – Adaptive Cruise Control Algorithm:
- Adaptive Cruise Control feature has 3 major modes of operation: OFF Mode, STANDBY Mode & ON Mode. This particular requirement has to be implemented as state machine logic in Simulink.
- The input signals to this state machine system are (Signal Name: Time_Gap, Set_Speed, Set_Gap, CruiseSwitch, SetSwitch).
- Also, the output signals (Signal Name: DriveVehicle_Speed & LeadVehicle_Detected) from requirement-2 is fed back as an input signal into this state machine block.
- Additionally, output signal (Signal Name: LeadVehicle_Speed) from requirement-1 is given as an input signal to this state machine block as well.
- Output from this subsystem is a signal (Signal Name: Acceleration_Mode) which governs the vehicular speed of the drive vehicle which automatically adjusts its speed & velocity to match the lead vehicle.
Requirement 3a – ACC OFF MODE state logic:
- This is the default state inside state machine logic. Output signal Acceleration_Mode is at value 0 in this state.
- This state is governed by input signal CruiseSwitch.
- If CruiseSwitch is equal to 1, state ACC STANDBY mode will get activated. If CruiseSwitch is equal to 0, state ACC OFF mode will get activated, from either ACC ON mode or ACC STANDBY mode
Requirement 3b – ACC STANDBY MODE state logic:
- This is the second activated state inside state machine logic. Output signal Acceleration_Mode is at value 1 in this state.
- This state is governed by both input signals CruiseSwitch & SetSwitch.
- If CruiseSwitch is equal to 1, state ACC STANDBY mode will get activated. If CruiseSwitch is equal to 0, state ACC OFF mode will get activated, from either ACC ON mode or ACC STANDBY mode
- If SetSwitch is equal to 1, state ACC ON mode will get activated. If SetSwitch is equal to 0, state ACC STANDBY mode will get activated.
Requirement 3c – ACC ON MODE state logic:
This state will be activated when input signal SetSwitch is equal to 1. There are 6 sub states to this state logic: They are:
- LeadVehicle_Detected_Follow (Default)
- LeadVehicle_Not_Detected
- LeadVehicle_Detected_Resume
- LeadVehicle_Not_Detected_Resume
- LeadVehicle_Speed_lessthan_Set_Speed
- LeadVehicle_Speed_equal_Set_Speed
Requirement 3c (i) – LeadVehicle_Detected_Follow (ACC ON MODE):
- This is the default sub state inside ACC ON MODE state. Output signal Acceleration_Mode is equal to 2.
- Condition to transit from LeadVehicle_Detected_Follow to LeadVehicle_Not_Detected; Input signal condition LeadVehicle_Detected == 0.
- Condition to transit from LeadVehicle_Detected_Follow to LeadVehicle_Speed_lessthan_Set_Speed; Input Signals condition (LeadVehicle_Detected == 1) && (LeadVehicle_Speed < Set_Speed) || (Time_Gap < Set_Gap).
Requirement 3c (ii) – LeadVehicle_Not_Detected (ACC ON MODE):
- Output signal Acceleration_Mode is equal to 1.
- Condition to transit from LeadVehicle_Not_Detected to LeadVehicle_Detected_Follow; Input signals condition [(LeadVehicle_Detected==1) && (DriveVehicle_Speed == Set_Speed) && (LeadVehicle_Speed >= Set_Speed) && (Time_Gap >= Set_Gap)]
- Condition to transit from LeadVehicle_Not_Detected to LeadVehicle_Speed_lessthan_Set_Speed; Input signals condition [(LeadVehicle_Detected == 1) && (LeadVehicle_Speed < Set_Speed) || (Time_Gap < Set_Gap)]
Requirement 3c (iii) – LeadVehicle_Detected_Resume (ACC ON MODE):
- Output signal Acceleration_Mode is equal to 3.
- Condition to transit from LeadVehicle_Detected_Resume to LeadVehicle_Detected_Follow; Input signals condition [(DriveVehicle_Speed == Set_Speed) && (LeadVehicle_Speed >= Set_Speed) && (Time_Gap >= Set_Gap)]
- Condition to transit from LeadVehicle_Detected_Resume to LeadVehicle_Not_Detected_Resume; Input signal condition LeadVehicle_Detected==0.
- Condition to transit from LeadVehicle_Detected_Resume to LeadVehicle_Speed_equal_Set_Speed; Input Signal condition [(DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed > DriveVehicle_Speed) && (Time_Gap >= Set_Gap)]
Requirement 3c (iv) - LeadVehicle_Not_Detected_Resume (ACC ON MODE):
- Output signal Acceleration_Mode is equal to 1.
Requirement 3c (v) - LeadVehicle_Speed_lessthan_Set_Speed (ACC ON MODE):
- Output signal Acceleration_Mode is equal to 4.
- Condition to transit from LeadVehicle_Speed_lessthan_Set_Speed to LeadVehicle_Not_Detected; Input signal condition [(LeadVehicle_Detected == 0) && (DriveVehicle_Speed == Set_Speed)]
- Condition to transit from LeadVehicle_Speed_lessthan_Set_Speed to LeadVehicle_Speed_equal_Set_Speed; Input signals condition [((LeadVehicle_Speed*1.25>=DriveVehicle_Speed) && (LeadVehicle_Speed * 0.75<=DriveVehicle_Speed)) && (DriveVehicle_Speed < Set_Speed) && ((Time_Gap<=1.25*Set_Gap) && (Time_Gap >=0.75*Set_Gap))]
Requirement 3c (vi) - LeadVehicle_Speed_equal_Set_Speed (ACC ON MODE):
- Output signal Acceleration_Mode is equal to 5.
- Condition to transit from LeadVehicle_Speed_equal_Set_Speed to LeadVehicle_Not_Detected_Resume; Input signal conditions is [(LeadVehicle_Detected == 0) || (DriveVehicle_Speed <= Set_Speed)]
- Condition to transit from LeadVehicle_Speed_equal_Set_Speed to LeadVehicle_Detected_Resume; Input signal conditions [(DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed > DriveVehicle_Speed) || (Time_Gap >= Set_Gap)]
- Condition to transit from LeadVehicle_Speed_equal_Set_Speed to LeadVehicle_Speed_lessthan_Set_Speed; Input signals conditions [(LeadVehicle_Speed<set_speed) &&="" (leadvehicle_speed<drivevehicle_speed)="" ||="" (time_gap="=" 0.75*set_gap)]<="" em=""></set_speed)>
>In this subsytem we are using a state flow logics implement the requirements 3a, 3b, 3c, 3c(i), 3c(ii), 3c(iii), 3c(iv), 3c(v), 3c(vi).
>The inputs for the state flow are,
- Time_gap.
- Set_Speed.
- Set_Gap.
- CruiseSwitch.
- SetSwitch.
- DriveVehicle_Speed from Requirement 2 subsytem.
- LeadVehicle_Speed from Requirement 1 subsytem.
- LeadVehicle_Detected from Requirement 2 subsytem.
The output from this susbsytem is,
>Accelaration_Mode-Based on the LeadVehicle_Speed the Accelaration_Modeadjust it's controlling accelaration gievn to maintain constant speed.

State Flow Logic(ACC):

>In this logic we had created three modes of operation as,
1. ACC_OFF mode.
2.ACC_STANDBY mode.
3.ACC_ON mode.
>In ACC_ON mode we have further 6 modes of operations as,
LeadVehicle_Detected_Follow(Default).
LeadVehicle_Not_Detected.
LeadVehicle_Detcted_Resume.
LeadVehicle_Not_Dected_Resume.
LeadVehicle_Speed_lesstha_Set_Speed.
LeadVehicle_Speed_equal_Set_Speed.
>All these modes of operations are modelled as per the given as mentioned in requirements section.
SLDD File Creation:
Signals & Calibration Data List:
|
Signal / Calibration Name |
Signal Type |
Data Type |
Dimension |
Min |
Max |
Initial Value |
Units |
|
CameraInput_LeadVehicle |
Input |
Uint8 |
1 |
0 |
255 |
- |
- |
|
RadarInput_LeadVehicle |
Input |
Uint8 |
1 |
0 |
255 |
- |
- |
|
CameraInput_DriveVehicle |
Input |
Uint8 |
1 |
0 |
255 |
- |
- |
|
RadarInput_DriveVehicle |
Input |
Uint8 |
1 |
0 |
255 |
- |
- |
|
Time_Gap |
Input |
Uint8 |
1 |
0 |
255 |
- |
- |
|
Set_Speed |
Input |
Uint8 |
1 |
0 |
255 |
- |
- |
|
Set_Gap |
Input |
Uint8 |
1 |
0 |
255 |
- |
- |
|
CruiseSwitch |
Input |
Boolean |
1 |
0 |
1 |
- |
- |
|
SetSwitch |
Input |
Boolean |
1 |
0 |
1 |
- |
- |
|
Acceleration_Mode |
Output |
Uint8 |
1 |
0 |
255 |
- |
- |
|
LeadVehicle_Speed |
Output |
Uint8 |
1 |
0 |
255 |
- |
- |
|
DriveVehicle_Speed |
Output |
Uint8 |
1 |
0 |
255 |
- |
- |
|
LeadVehicle_Detected |
Output |
Uint8 |
1 |
0 |
255 |
- |
- |
>For all the input and output signals resolved and propagated in this model are declared in the SLDD file created as shown below,

>The signal parameters are declares as per the SLDD datatype requirements mentioned earlier.
>The code generated from the output signals are stored in ADAS_CruiseContorl and ADAS_CruiseControl.c files.
Results:
>After compiling the model we are getting nil errors on model creation justifies our logic on modelling for requirements are correct.
Model Advisor Check:
>For the moel advisor check for MAB guidelines we are getting the report which is shown below,

>The report for model advisor check is attached with this project.
Requirement Tagging:
>The tagging is done for the three subsystem and these are done from the word file which is atttached in the project.
>It's done by right clicking on the subsytems and then clicking on requirments and then on tagging.
>In that we have selcted the word file.
>The word file from which the tagging is done is needed to be kept open while tagging the system.



Code Generation:
>By going to APP and then clicking on build the code is genertaed.

>The whole code can seen in the model attached.