Project 2 Adaptive Cruise Control
Project 2: Adaptive Cruise Control
Adaptive Cruise Control: Adaptive cruise control (ACC ) is a form of intelligent cruise control, also known as active cruise control, autonomous cruise control, smart cruise control, and radar cruise control. A radar sensor is installed on the car’s front grille, which can sense how close or far away the vehicle in front is. By sensing this distance, the car will “adapt” its cruise control speed to maintain a safe distance from the vehicle ahead.
Drivers can set the interval from the steering wheel at how close (or how far away) they want to be from the vehicle in front. ACC will apply the brakes in traffic relative to the set distance the driver specifies. Those who drive more defensively may want it on the farthest setting so the gap between cars in front is wider.
A radar sensor is usually at the core of the Adaptive Cruise Control. Installed at the front of the vehicle, the system permanently monitors the road ahead. As long as the road ahead is clear, the cruise control feature maintains the speed set by the driver. If the system spots a slower vehicle within its detection range, it gently reduces speed by releasing the accelerator or actively engaging the brake control system. If the vehicle ahead speeds up or changes lanes, the cruise control automatically accelerates to the driver’s desired speed.
Standard Adaptive Cruise Control can be activated from speeds of around 30 km/h (20 mph) upwards and supports the driver, primarily on cross-country journeys or on freeways. The cruise control stop & go variant is also active at speeds below 30 km/h (20 mph). It can maintain the set distance to the preceding vehicle even at very low speeds and can decelerate to a complete standstill. When the vehicle remains stopped longer, the driver needs only to reactivate the system, for example by briefly stepping on the gas pedal to return to cruise control mode. In this way, cruise control stop & go supports the driver even in heavy traffic and traffic jams.
Since Adaptive Cruise Control is a comfort and convenience system, brake interventions and vehicle acceleration only take place within defined limits. Even with Adaptive Cruise Control switched on, it remains the driver’s responsibility to monitor the speed and distance from the vehicle in front.
Aim: To develop an MBD-compliant Adaptive Cruise Control feature as per the provided requirement document using MATLAB Simulink
Objectives:
- Developing Adaptive Cruise Control feature as per the Requirement Document using MATLAB Simulink.
- Follow all the MBD-related processes: Requirement Tagging & Traceability, SLDD creation, Configuration Parameter changes, Model Advisor check & Code Generation.
- In Configuration Parameters: enable “Support Floating Numbers” under Code Generation settings.
- Use Embedded Coder to generate the code.
- 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
Modeling Requirements:
Requirement 1– Lead Vehicle:
- Lead Vehicle is a vehicle that 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 cameras & 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.
Requirement 2 – Drive Vehicle:
- Drive Vehicle is the vehicle driven by the user & this is the vehicle that has an ACC algorithm in it.
- Like the Lead Vehicle, the 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 the summation of three input signals mentioned above & LeadVehicle_Detected is renamed from Input Signal RadarInput_DriveVehicle by mere use of 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 the 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 the 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 the 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
Signals and calibration data:
|
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 |
- |
- |
DEVELOPMENT OF ADAPTIVE CRUISE CONTROL SIMULINK MODEL:


Adaptive_Cruise_Control_Mode subsystem consist of three requirement subsystems,
Lead vehicle subsystem(Requirement_1),Drive vehicle subsystem(Requirement_2) & Adaptive Cruise Control subsystem(Requirement_3).
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.
According to the given logic, the subsystem is created and added both the signals and is given as the subsystem output as LeadVehicle_Speed.
The input signal labels of the subsystem are propagated and output signal labels are resolve to Simulink signal object.

But it is not exactly as the original system. The actual system collects the data from the camera and radar and according to the data the algorithm works out and detects the lead vehicle speed.
By improvising and assumption the logic has been implemented. The camera produces certain value as input for vehicle detection. Similar to that the radar gives the certain value as output if the vehicle is detected. If the vehicle is detected in camera and not in radar the speed has to be decreased. If the vehicle is detected in camera and radar then vehicle to be go for braking mode.
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_Speedis summation of three input signals mentioned above & LeadVehicle_Detected is renamed from Input Signal RadarInput_DriveVehicle by mere use of Signal Conversion block.
According to the given logic, the input signals are added to get the drive vehicle speed. But according to the MAB guidelines the only two signals must be added hence two add block is used. Then the radar input is the Lead vehicle detected. But we cannot give two names to the signal according to MAB guidelines. Hence Signal Conversion block is used.

But it is not exactly as the original system. The actual system collects the data from the camera and radar and according to the data the algorithm works out and detects the drive vehicle speed.
By improvising and assumption the logic has been implemented. The camera produces certain value as input for vehicle detection. Similar to that the radar gives the certain value as output if the vehicle is detected. If the vehicle is detected in camera and not in radar the speed has to be decreased. If the vehicle is detected in camera and radar then vehicle to be go for braking mode. And according to the acceleration mode given as feedback from the ACC algorithm the speed of the vehicle is controlled.
Requirement 3c (i) – LeadVehicle_Detected_Follow (ACC ON MODE):
- This is the default sub state inside ACC ON MODE state. Output signal Acceleration_Modeis equal to 2.
- Condition to transit from LeadVehicle_Detected_Followto LeadVehicle_Not_Detected; Input signal condition LeadVehicle_Detected == 0.
- Condition to transit from LeadVehicle_Detected_Followto 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_Modeis equal to 1.
- Condition to transit from LeadVehicle_Not_Detectedto 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_Detectedto 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_Modeis 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 toLeadVehicle_Not_Detected_Resume; Input signal condition LeadVehicle_Detected==0.
- Condition to transit from LeadVehicle_Detected_Resume toLeadVehicle_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_Modeis equal to 1.
Requirement 3c (v) - LeadVehicle_Speed_lessthan_Set_Speed (ACC ON MODE):
- Output signal Acceleration_Modeis 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 toLeadVehicle_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_Modeis 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 toLeadVehicle_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 toLeadVehicle_Speed_lessthan_Set_Speed; Input signals conditions [(LeadVehicle_Speed<Set_Speed)&&(LeadVehicle_Speed<DriveVehicle_Speed)||(Time_Gap==0.75*Set_Gap)]
From the above conditions of ACC feature, the vehicle goes to acceleration with speed of Set speed 40kmph when the acceleration mode is 0,1,3,5. i.e, If the lead vehicle detected resume, lead vehicle not detected, lead vehicle not detected resume and lead vehicle speed equal to drive vehicle speed.
The vehicle goes to deceleration to 20kmph when the acceleration mode is 2 and 4. i.e., lead vehicle detected follow and lead vehicle speed less than drive vehicle speed. The output this requirement (ACC algorithm) is Acceleration mode. This is fed back as input to drive vehicle speed control algorithm. i.e., requirement 2. The time gap which is Radar output is used to calculate the distance between the vehicles.


MBD complaint changes


Data Dictionary Creation(SLDD)

Model advisor:
Go to model advisor check>by task>ony check modelling standards with MAB>Run selected checks

generate model advisor report

Report:

Code Generation:
Subsystem.c
/*
* File: Subsystem.c
*
* Code generated for Simulink model 'Subsystem'.
*
* Model version : 1.65
* Simulink Coder version : 9.7 (R2022a) 13-Nov-2021
* C/C++ source code generated on : Wed Oct 19 23:07:32 2022
*
* Target selection: ert.tlc
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
*/
#include "Subsystem.h"
#include "rtwtypes.h"
/* Named constants for Chart: '<S2>/Chart' */
#define IN_LeadVehicle_Detected_Follow ((uint8_T)1U)
#define IN_LeadVehicle_Detected_Resume ((uint8_T)2U)
#define IN_LeadVehicle_Not_Detected_Res ((uint8_T)4U)
#define IN_LeadVehicle_Speed_equal_Set_ ((uint8_T)5U)
#define IN_LeadVehicle_Speed_lessthan_S ((uint8_T)6U)
#define Sub_IN_LeadVehicle_Not_Detected ((uint8_T)3U)
#define Subsystem_IN_ACC_OFF_MODE ((uint8_T)1U)
#define Subsystem_IN_ACC_ON_MODE ((uint8_T)2U)
#define Subsystem_IN_ACC_STANDBY_MODE ((uint8_T)3U)
#define Subsystem_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
/* Block states (default storage) */
DW_Subsystem_T Subsystem_DW;
/* External inputs (root inport signals with default storage) */
ExtU_Subsystem_T Subsystem_U;
/* External outputs (root outports fed by signals with default storage) */
ExtY_Subsystem_T Subsystem_Y;
/* Real-time model */
static RT_MODEL_Subsystem_T Subsystem_M_;
RT_MODEL_Subsystem_T *const Subsystem_M = &Subsystem_M_;
/* Model step function */
void Subsystem_step(void)
{
real_T rtb_Add;
real_T rtb_Add_c;
/* Outputs for Atomic SubSystem: '<Root>/Subsystem' */
/* Sum: '<S3>/Add' incorporates:
* Inport: '<Root>/CameraInput_DriveVehicle'
* Inport: '<Root>/RadarInput_DriveVehicle'
* UnitDelay: '<S1>/Unit Delay'
*/
rtb_Add = (Subsystem_U.CameraInput_DriveVehicle +
Subsystem_Y.Acceleration_Mode) +
Subsystem_U.RadarInput_DriveVehicle;
/* Sum: '<S4>/Add' incorporates:
* Inport: '<Root>/CameraInput_LeadVehicle'
* Inport: '<Root>/RadarInput_LeadVehicle'
*/
rtb_Add_c = Subsystem_U.CameraInput_LeadVehicle +
Subsystem_U.RadarInput_LeadVehicle;
/* Chart: '<S2>/Chart' incorporates:
* Inport: '<Root>/CruiseSwitch'
* Inport: '<Root>/RadarInput_DriveVehicle'
* Inport: '<Root>/SetSwitch'
* Inport: '<Root>/Set_Gap'
* Inport: '<Root>/Set_Speed'
* Inport: '<Root>/Time_Gap'
* UnitDelay: '<S1>/Unit Delay'
*/
if (Subsystem_DW.is_active_c3_Subsystem == 0U) {
Subsystem_DW.is_active_c3_Subsystem = 1U;
Subsystem_DW.is_c3_Subsystem = Subsystem_IN_ACC_OFF_MODE;
Subsystem_Y.Acceleration_Mode = 0.0;
} else {
switch (Subsystem_DW.is_c3_Subsystem) {
case Subsystem_IN_ACC_OFF_MODE:
Subsystem_Y.Acceleration_Mode = 0.0;
if (Subsystem_U.CruiseSwitch == 1.0) {
Subsystem_DW.is_c3_Subsystem = Subsystem_IN_ACC_STANDBY_MODE;
Subsystem_Y.Acceleration_Mode = 1.0;
}
break;
case Subsystem_IN_ACC_ON_MODE:
if (Subsystem_U.CruiseSwitch == 1.0) {
Subsystem_DW.is_ACC_ON_MODE = Subsystem_IN_NO_ACTIVE_CHILD;
Subsystem_DW.is_c3_Subsystem = Subsystem_IN_ACC_OFF_MODE;
Subsystem_Y.Acceleration_Mode = 0.0;
} else if (Subsystem_U.SetSwitch == 0.0) {
Subsystem_DW.is_ACC_ON_MODE = Subsystem_IN_NO_ACTIVE_CHILD;
Subsystem_DW.is_c3_Subsystem = Subsystem_IN_ACC_STANDBY_MODE;
Subsystem_Y.Acceleration_Mode = 1.0;
} else {
switch (Subsystem_DW.is_ACC_ON_MODE) {
case IN_LeadVehicle_Detected_Follow:
Subsystem_Y.Acceleration_Mode = 2.0;
if (Subsystem_U.RadarInput_DriveVehicle == 0.0) {
Subsystem_DW.is_ACC_ON_MODE = Sub_IN_LeadVehicle_Not_Detected;
Subsystem_Y.Acceleration_Mode = 1.0;
} else if (((Subsystem_U.RadarInput_DriveVehicle == 1.0) && (rtb_Add_c
< Subsystem_U.Set_Speed)) || (Subsystem_U.Time_Gap <
Subsystem_U.Set_Gap)) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_lessthan_S;
Subsystem_Y.Acceleration_Mode = 4.0;
}
break;
case IN_LeadVehicle_Detected_Resume:
Subsystem_Y.Acceleration_Mode = 3.0;
if ((rtb_Add == Subsystem_U.Set_Speed) && (rtb_Add_c >=
Subsystem_U.Set_Speed) && (Subsystem_U.Time_Gap >=
Subsystem_U.Set_Gap)) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Follow;
Subsystem_Y.Acceleration_Mode = 2.0;
} else if (Subsystem_U.RadarInput_DriveVehicle == 0.0) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Not_Detected_Res;
Subsystem_Y.Acceleration_Mode = 1.0;
} else if ((rtb_Add < Subsystem_U.Set_Speed) && (rtb_Add_c > rtb_Add) &&
(Subsystem_U.Time_Gap >= Subsystem_U.Set_Gap)) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_equal_Set_;
Subsystem_Y.Acceleration_Mode = 5.0;
}
break;
case Sub_IN_LeadVehicle_Not_Detected:
Subsystem_Y.Acceleration_Mode = 1.0;
if ((Subsystem_U.RadarInput_DriveVehicle == 1.0) && (rtb_Add ==
Subsystem_U.Set_Speed) && (rtb_Add_c >= Subsystem_U.Set_Speed) &&
(Subsystem_U.Time_Gap >= Subsystem_U.Set_Gap)) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Follow;
Subsystem_Y.Acceleration_Mode = 2.0;
} else if (((Subsystem_U.RadarInput_DriveVehicle == 1.0) && (rtb_Add_c
< Subsystem_U.Set_Speed)) || (Subsystem_U.Time_Gap <
Subsystem_U.Set_Gap)) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_lessthan_S;
Subsystem_Y.Acceleration_Mode = 4.0;
}
break;
case IN_LeadVehicle_Not_Detected_Res:
Subsystem_Y.Acceleration_Mode = 1.0;
break;
case IN_LeadVehicle_Speed_equal_Set_:
Subsystem_Y.Acceleration_Mode = 5.0;
if ((Subsystem_U.RadarInput_DriveVehicle == 0.0) || (rtb_Add <=
Subsystem_U.Set_Speed)) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Not_Detected_Res;
Subsystem_Y.Acceleration_Mode = 1.0;
} else if (((rtb_Add < Subsystem_U.Set_Speed) && (rtb_Add_c > rtb_Add))
|| (Subsystem_U.Time_Gap >= Subsystem_U.Set_Gap)) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Resume;
Subsystem_Y.Acceleration_Mode = 3.0;
} else if (((rtb_Add_c < Subsystem_U.Set_Speed) && (rtb_Add_c <
rtb_Add)) || (0.75 * Subsystem_U.Set_Gap ==
Subsystem_U.Time_Gap)) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_lessthan_S;
Subsystem_Y.Acceleration_Mode = 4.0;
}
break;
default:
/* case IN_LeadVehicle_Speed_lessthan_Set_Speed: */
Subsystem_Y.Acceleration_Mode = 4.0;
if ((rtb_Add_c * 1.25 >= rtb_Add) && (rtb_Add_c * 0.75 <= rtb_Add) &&
(rtb_Add < Subsystem_U.Set_Speed) && (Subsystem_U.Time_Gap <= 1.25
* Subsystem_U.Set_Gap) && (Subsystem_U.Time_Gap >= 0.75 *
Subsystem_U.Set_Gap)) {
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_equal_Set_;
Subsystem_Y.Acceleration_Mode = 5.0;
} else if ((Subsystem_U.RadarInput_DriveVehicle == 0.0) && (rtb_Add ==
Subsystem_U.Set_Speed)) {
Subsystem_DW.is_ACC_ON_MODE = Sub_IN_LeadVehicle_Not_Detected;
Subsystem_Y.Acceleration_Mode = 1.0;
}
break;
}
}
break;
default:
/* case IN_ACC_STANDBY_MODE: */
Subsystem_Y.Acceleration_Mode = 1.0;
if (Subsystem_U.CruiseSwitch == 0.0) {
Subsystem_DW.is_c3_Subsystem = Subsystem_IN_ACC_OFF_MODE;
Subsystem_Y.Acceleration_Mode = 0.0;
} else if (Subsystem_U.SetSwitch == 1.0) {
Subsystem_DW.is_c3_Subsystem = Subsystem_IN_ACC_ON_MODE;
Subsystem_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Follow;
Subsystem_Y.Acceleration_Mode = 2.0;
}
break;
}
}
/* End of Chart: '<S2>/Chart' */
/* End of Outputs for SubSystem: '<Root>/Subsystem' */
}
/* Model initialize function */
void Subsystem_initialize(void)
{
/* (no initialization code required) */
}
/* Model terminate function */
void Subsystem_terminate(void)
{
/* (no terminate code required) */
}
/*
* File trailer for generated code.
*
* [EOF]
*/
D:\Subsystem_ert_rtw\Subsystem.c
Ln203Col33
has popup
Requirement tagging:
agging of the system
select Lead_Vehicle(Requirement_1) subsystem right-clicks> requirements > link to selection in word
then
word file and information will be open of that subsystem. if we click on it

THIS SHOWS TAGGING IS DONE

same do for remaining Drive vehicle subsystem(Requirement_2) & Adaptive Cruise Control subsystem(Requirement_3).
Drive vehicle subsystem(Requirement_2) Tagging:

Adaptive Cruise Control subsystem(Requirement_3) Tagging:

CONCLUSION:
Hence we Developed Adaptive Cruise Control feature as per the Requirement Document using MATLAB Simulink
Note:The model file,Requirement tagging file,SLDD file,.c and .h file,Model advisor report were attached below.