Project 2 Adaptive Cruise Control
AIM
Building a model of Adaptive Cruise Control .(ACC) by using Simulink blocks in the MATLAB and suitable input and output signals are stored in data dictonary .
OBJECTIVE:
1. Developing Adaptive Cruise Control feature as per the Requirement Document using MATLAB Simulink.
2. Follow all the MBD-related processes: Requirement Tagging & Traceability, SLDD creation, Configuration Parameter changes, Model Advisor check & Code Generation.
3. In Configuration Parameters: enable "Support Floating Numbers" under Code Generation settings.
4. Use Embedded Coder to generate the code.
5. 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.
6. Choose sample time for all signals as 0.01s
METHODOLOGY:

As per requirement the sample time is


Lead Vehicle:
- Two input signals CameraInput_LeadVehicle & RadarInput_LeadVehicle are provided to the subsystem.
- Data from camera & radar is simply added both & the corresponding output is read as speed of lead vehicle.
According to the requirement the subsystem is created with the needed input values


Drive Vehicle
- Implementing Drive Vehicle subsystem
- it has 2 input signals camera & Radar input of drive vehicle & one other signal coming as an input to this subsystem as a feedback signal from the other subsystem which is the adaptive system
- Drive vehicle 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.


The third input accerelation mode is fed as input after passing from a delay block
Requirement 3 –
- Adaptive Cruise Control feature has 3 major modes of operation: OFF Mode, STANDBY Mode & ON Mode.
- This particular requirement is to be implemented as state machine logic in Simulink.
- Apart from the input signals like time gap, set speed, set gap, cruiseSwitch, set switch, the output from the lead vehicle 7 drive vehicle is also fed as input to the state flow diagram.
- Output from this subsystem is acceleration mode which governs the vehicular speed of the drive vehicle which automatically adjusts its speed & velocity to match the lead vehicle.
- the state flow is implemented as per the given instruction


The datalist are

The document for requirement tagging is being created
Model advisor tool implementation

Code generation
the configuration parameter is


#include "Adaptive_cruise_control.h"
#include "Adaptive_cruise_control_private.h"
#define Ada_IN_LeadVehicle_Not_Detected ((uint8_T)3U)
#define Adaptive_cr_IN_ACC_STANDBY_mode ((uint8_T)3U)
#define Adaptive_cru_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
#define Adaptive_cruise_IN_ACC_OFF_mode ((uint8_T)1U)
#define Adaptive_cruise__IN_ACC_ON_mode ((uint8_T)2U)
#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)
DW_Adaptive_cruise_control_T Adaptive_cruise_control_DW;
ExtU_Adaptive_cruise_control_T Adaptive_cruise_control_U;
ExtY_Adaptive_cruise_control_T Adaptive_cruise_control_Y;
static RT_MODEL_Adaptive_cruise_cont_T Adaptive_cruise_control_M_;
RT_MODEL_Adaptive_cruise_cont_T *const Adaptive_cruise_control_M =
&Adaptive_cruise_control_M_;
void Adaptive_cruise_control_step(void)
{
Adaptive_cruise_control_Y.LeadVehicle_Speed = (uint8_T)((uint32_T)
Adaptive_cruise_control_U.CameraInput_LeadVehicle +
Adaptive_cruise_control_U.RadarInput_LeadVehicle);
Adaptive_cruise_control_Y.DriveVehicle_Speed = (uint8_T)((uint32_T)(uint8_T)
((uint32_T)Adaptive_cruise_control_U.Input_DriveVehicle1 +
Adaptive_cruise_control_Y.Accerelation_Mode) +
Adaptive_cruise_control_U.CameraInput_DriveVehicle);
if (Adaptive_cruise_control_DW.is_active_c3_Adaptive_cruise_co == 0U) {
Adaptive_cruise_control_DW.is_active_c3_Adaptive_cruise_co = 1U;
Adaptive_cruise_control_DW.is_c3_Adaptive_cruise_control =
Adaptive_cruise_IN_ACC_OFF_mode;
Adaptive_cruise_control_Y.Accerelation_Mode = 0U;
} else {
switch (Adaptive_cruise_control_DW.is_c3_Adaptive_cruise_control) {
case Adaptive_cruise_IN_ACC_OFF_mode:
if (Adaptive_cruise_control_U.CruiseSwitch) {
Adaptive_cruise_control_DW.is_c3_Adaptive_cruise_control =
Adaptive_cr_IN_ACC_STANDBY_mode;
Adaptive_cruise_control_Y.Accerelation_Mode = 1U;
}
break;
case Adaptive_cruise__IN_ACC_ON_mode:
if (!Adaptive_cruise_control_U.SetSwitch) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
Adaptive_cru_IN_NO_ACTIVE_CHILD;
Adaptive_cruise_control_DW.is_c3_Adaptive_cruise_control =
Adaptive_cr_IN_ACC_STANDBY_mode;
Adaptive_cruise_control_Y.Accerelation_Mode = 1U;
} else if (!Adaptive_cruise_control_U.SetSwitch) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
Adaptive_cru_IN_NO_ACTIVE_CHILD;
Adaptive_cruise_control_DW.is_c3_Adaptive_cruise_control =
Adaptive_cruise_IN_ACC_OFF_mode;
Adaptive_cruise_control_Y.Accerelation_Mode = 0U;
} else {
switch (Adaptive_cruise_control_DW.is_ACC_ON_mode) {
case IN_LeadVehicle_Detected_Follow:
if (Adaptive_cruise_control_U.CameraInput_DriveVehicle == 0) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
Ada_IN_LeadVehicle_Not_Detected;
Adaptive_cruise_control_Y.Accerelation_Mode = 1U;
} else if (((Adaptive_cruise_control_U.CameraInput_DriveVehicle == 1) &&
(Adaptive_cruise_control_Y.LeadVehicle_Speed <
Adaptive_cruise_control_U.Set_Speed)) ||
(Adaptive_cruise_control_U.Time_Gap <
Adaptive_cruise_control_U.Set_Gap)) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Speed_lessthan_S;
Adaptive_cruise_control_Y.Accerelation_Mode = 4U;
} else {
Adaptive_cruise_control_Y.Accerelation_Mode = 2U;
}
break;
case IN_LeadVehicle_Detected_Resume:
if ((Adaptive_cruise_control_Y.DriveVehicle_Speed ==
Adaptive_cruise_control_U.Set_Speed) &&
(Adaptive_cruise_control_Y.LeadVehicle_Speed >=
Adaptive_cruise_control_U.Set_Speed) &&
(Adaptive_cruise_control_U.Time_Gap >=
Adaptive_cruise_control_U.Set_Gap)) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Detected_Follow;
Adaptive_cruise_control_Y.Accerelation_Mode = 2U;
} else if (Adaptive_cruise_control_U.CameraInput_DriveVehicle == 0) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Not_Detected_Res;
Adaptive_cruise_control_Y.Accerelation_Mode = 1U;
} else if ((Adaptive_cruise_control_Y.DriveVehicle_Speed <
Adaptive_cruise_control_U.Set_Speed) &&
(Adaptive_cruise_control_Y.LeadVehicle_Speed >
Adaptive_cruise_control_Y.DriveVehicle_Speed) &&
(Adaptive_cruise_control_U.Time_Gap >=
Adaptive_cruise_control_U.Set_Gap)) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Speed_equal_Set_;
Adaptive_cruise_control_Y.Accerelation_Mode = 5U;
} else {
Adaptive_cruise_control_Y.Accerelation_Mode = 3U;
}
break;
case Ada_IN_LeadVehicle_Not_Detected:
if ((Adaptive_cruise_control_U.CameraInput_DriveVehicle == 1) &&
(Adaptive_cruise_control_Y.DriveVehicle_Speed ==
Adaptive_cruise_control_U.Set_Speed) &&
(Adaptive_cruise_control_Y.LeadVehicle_Speed >=
Adaptive_cruise_control_U.Set_Speed) &&
(Adaptive_cruise_control_U.Time_Gap >=
Adaptive_cruise_control_U.Set_Gap)) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Detected_Follow;
Adaptive_cruise_control_Y.Accerelation_Mode = 2U;
} else if (((Adaptive_cruise_control_U.CameraInput_DriveVehicle == 1) &&
(Adaptive_cruise_control_Y.LeadVehicle_Speed <
Adaptive_cruise_control_U.Set_Speed)) ||
(Adaptive_cruise_control_U.Time_Gap <
Adaptive_cruise_control_U.Set_Gap)) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Speed_lessthan_S;
Adaptive_cruise_control_Y.Accerelation_Mode = 4U;
} else {
Adaptive_cruise_control_Y.Accerelation_Mode = 1U;
}
break;
case IN_LeadVehicle_Not_Detected_Res:
Adaptive_cruise_control_Y.Accerelation_Mode = 1U;
break;
case IN_LeadVehicle_Speed_equal_Set_:
if ((Adaptive_cruise_control_U.CameraInput_DriveVehicle == 0) ||
(Adaptive_cruise_control_Y.DriveVehicle_Speed <=
Adaptive_cruise_control_U.Set_Speed)) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Not_Detected_Res;
Adaptive_cruise_control_Y.Accerelation_Mode = 1U;
} else if (((Adaptive_cruise_control_Y.DriveVehicle_Speed <
Adaptive_cruise_control_U.Set_Speed) &&
(Adaptive_cruise_control_Y.LeadVehicle_Speed >
Adaptive_cruise_control_Y.DriveVehicle_Speed)) ||
(Adaptive_cruise_control_U.Time_Gap >=
Adaptive_cruise_control_U.Set_Gap)) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Detected_Resume;
Adaptive_cruise_control_Y.Accerelation_Mode = 3U;
} else if (((Adaptive_cruise_control_Y.LeadVehicle_Speed <=
Adaptive_cruise_control_U.Set_Speed) &&
(Adaptive_cruise_control_Y.LeadVehicle_Speed <
Adaptive_cruise_control_Y.DriveVehicle_Speed)) || (0.75 *
(real_T)Adaptive_cruise_control_U.Set_Gap ==
Adaptive_cruise_control_U.Time_Gap)) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Speed_lessthan_S;
Adaptive_cruise_control_Y.Accerelation_Mode = 4U;
} else {
Adaptive_cruise_control_Y.Accerelation_Mode = 5U;
}
break;
default:
if ((Adaptive_cruise_control_U.CameraInput_DriveVehicle == 0) &&
(Adaptive_cruise_control_Y.DriveVehicle_Speed ==
Adaptive_cruise_control_U.Set_Speed)) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
Ada_IN_LeadVehicle_Not_Detected;
Adaptive_cruise_control_Y.Accerelation_Mode = 1U;
} else if (((real_T)Adaptive_cruise_control_Y.LeadVehicle_Speed * 1.25
>= Adaptive_cruise_control_Y.DriveVehicle_Speed) &&
((real_T)Adaptive_cruise_control_Y.LeadVehicle_Speed * 0.75
<= Adaptive_cruise_control_Y.DriveVehicle_Speed) &&
(Adaptive_cruise_control_Y.DriveVehicle_Speed <
Adaptive_cruise_control_U.Set_Speed) &&
((Adaptive_cruise_control_U.Time_Gap <= 1.25 * (real_T)
Adaptive_cruise_control_U.Set_Gap) &&
(Adaptive_cruise_control_U.Time_Gap >= 0.75 * (real_T)
Adaptive_cruise_control_U.Set_Gap))) {
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Speed_equal_Set_;
Adaptive_cruise_control_Y.Accerelation_Mode = 5U;
} else {
Adaptive_cruise_control_Y.Accerelation_Mode = 4U;
}
break;
}
}
break;
default:
if (!Adaptive_cruise_control_U.CruiseSwitch) {
Adaptive_cruise_control_DW.is_c3_Adaptive_cruise_control =
Adaptive_cruise_IN_ACC_OFF_mode;
Adaptive_cruise_control_Y.Accerelation_Mode = 0U;
} else if (Adaptive_cruise_control_U.SetSwitch) {
Adaptive_cruise_control_DW.is_c3_Adaptive_cruise_control =
Adaptive_cruise__IN_ACC_ON_mode;
Adaptive_cruise_control_DW.is_ACC_ON_mode =
IN_LeadVehicle_Detected_Follow;
Adaptive_cruise_control_Y.Accerelation_Mode = 2U;
}
break;
}
}
Adaptive_cruise_control_Y.LeadVehicle_Detected =
Adaptive_cruise_control_U.CameraInput_DriveVehicle;
}
void Adaptive_cruise_control_initialize(void)
{
}
void Adaptive_cruise_control_terminate(void)
{
}