Project 2 Adaptive Cruise Control
Aim : To creat a matlab simulink model for Adaptive Cruise Control feature as per the Requirements given
Answer:
What is adpative crusise control:
- The Adaptive cruise control is an active safety system which automatically controls the acceleration and braking of a vehicle.
- And It is activated through a button on the steering wheel and cancelled by driver s braking or another button.
- How it controls..?
-
It controls by monitoring other vehicles and objects on the road adaptive cruise control enables a safe and comfortable driving experience.
-
They does so by helping the driver keep a steady vehicle speed at a given moment.
-
So The driver can set their preference regarding certain factors which is the distance to the car in front driving mode for example economica or comfortable and others.
-
By Together with information about speed limits road curvature accidents data and more these choices influence the automatically selected speed.
-
This Cruise control has come a long way from its early days in its quest to assist drivers on the road.
-
But When first introduced it was only found in luxury car models due to its high production cost.
-
So As less expensive sensors reached the market adaptive cruise control is steadily becoming a standard feature in new vehicles today.


Reference :
Created matlab simulink model for Adapative cruise control :

The above figure shows the main system of the adpative_cruise_control here we given the inpus as:
- CameraInput_LeadVehicle
- RadarInput_LeadVehicle
- CameraInput_DriveVehicle
- RadarInput_DriveVehicle
- Time_Gap
- Set_Speed
- Set_Gap
- CruiseSwitch
- SetSwitch
And the output as the acceleration mode
Here the main block is agian made into three subsystem as
1)Requirment 1 substem
2) Requiremnet 2 subsystem
3)Adapative crusie control:
1)Requirment 1 substem:

- In this subsystem we consider two inputs as camerinput_leadvehicle and radarinput_leadvehicle
- This two inputs are given to the add block wich sums up the both siginals
- An then given to the output as leadvehicle_speed
2) Requirment 2 subsystem:

In this subsystem we consider three inputs as camerinput_leadvehicle,acceleration_mode,radarinput_leadvehicle
This three inputs are given to the add block which sums up this siginal and gives as output drivevehicle_speed
And we aslo placed a siginal conversion block which is connected to the radarinput_lead vehicle this gives the leadvehicle_detected
3)Adapative crusie control:

In this subsystem we consider a chart as shown in the above figure
Inside the chart:

- Here we created a different modes which helps to operate the vehicle in prefect way
- we created a ACC_off_mode , ACC_standby_mode, And Acc_On_mode
- In the Acc_on_mode we created a leadvehicle_detected_follow, leadvehicle_detected_resume, leadvehicle_not_detected_resume, leadvehicle_speed_lessthan_set_speed, and leadvehicle_speeed_equal_set_speed
Created Sldd file:

- Here we stored the given siginal data as per the reuirements in sldd formate
- We have created a requiremnt taggings in excel sheet:

- Now steps to be follwed to generate the code:
- First we need to check the model settings by selecting the modeling option:

Select the slover option and set the simulation start time as 0.0 and stop as 10.0 slover selection must be fixed step

Then select the code generation option and select the system target file as ert.tlc
- In the next step go to the Apps section and select the generate code
- We get the option gnerate code click on it
- If there is no error then it will generate the code:

Code :
File: ADAS_curisecontrol.c
*
* Code generated for Simulink model 'ADAS_curisecontrol'.
*
* Model version : 1.20
* Simulink Coder version : 9.5 (R2021a) 14-Nov-2020
* C/C++ source code generated on : Thu Jun 22 11:13:45 2022
*
* Target selection: ert.tlc
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
*/
#include "ADAS_curisecontrol.h"
#include "ADAS_curisecontrol_private.h"
/* Named constants for Chart: '<S2>/ACC_Logic' */
#define ADAS_curise_IN_ACC_STANDBY_MODE ((uint8_T)3U)
#define ADAS_curisec_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
#define ADAS_curisecont_IN_ACC_OFF_MODE ((uint8_T)1U)
#define ADAS_curisecontr_IN_ACC_ON_MODE ((uint8_T)2U)
#define ADA_IN_LeadVehicle_Not_Detected ((uint8_T)3U)
#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)
/* Exported data definition */
/* Definition for custom storage class: ExportToFile */
uint8_T Acceleration_Mode; /* '<S1>/Unit Delay' */
/* Block states (default storage) */
DW_ADAS_curisecontrol_T ADAS_curisecontrol_DW;
/* External outputs (root outports fed by signals with default storage) */
ExtY_ADAS_curisecontrol_T ADAS_curisecontrol_Y;
/* Real-time model */
static RT_MODEL_ADAS_curisecontrol_T ADAS_curisecontrol_M_;
RT_MODEL_ADAS_curisecontrol_T *const ADAS_curisecontrol_M =
&ADAS_curisecontrol_M_;
/* Model step function */
void ADAS_curisecontrol_step(void)
{
/* local block i/o variables */
uint8_T LeadVehicle_Speed;
uint8_T DriveVehicle_Speed;
uint8_T LeadVehicle_Detected;
/* Sum: '<S4>/Add' incorporates:
* Inport: '<Root>/CameraInput_LeadVehicle'
* Inport: '<Root>/RadarInput_LeadVehicle'
*/
LeadVehicle_Speed = (uint8_T)((uint32_T)CameraInput_LeadVehicle +
RadarInput_LeadVehicle);
/* UnitDelay: '<S1>/Unit Delay' */
Acceleration_Mode = ADAS_curisecontrol_Y.Acceleration_Mode_j;
/* Sum: '<S3>/Add' incorporates:
* Inport: '<Root>/CameraInput_DriveVehicle'
* Inport: '<Root>/RadarInput_DriveVehicle'
*/
DriveVehicle_Speed = (uint8_T)((uint32_T)(uint8_T)((uint32_T)
CameraInput_DriveVehicle + Acceleration_Mode) + RadarInput_DriveVehicle);
/* SignalConversion: '<S3>/Signal Conversion' incorporates:
* Inport: '<Root>/RadarInput_DriveVehicle'
*/
LeadVehicle_Detected = RadarInput_DriveVehicle;
/* Chart: '<S2>/ACC_Logic' incorporates:
* Inport: '<Root>/CruiseSwitch'
* Inport: '<Root>/SetSwitch'
* Inport: '<Root>/Set_Gap'
* Inport: '<Root>/Set_Speed'
* Inport: '<Root>/Time_Gap'
* UnitDelay: '<S1>/Unit Delay'
*/
if (ADAS_curisecontrol_DW.is_active_c3_ADAS_curisecontrol == 0U) {
ADAS_curisecontrol_DW.is_active_c3_ADAS_curisecontrol = 1U;
ADAS_curisecontrol_DW.is_c3_ADAS_curisecontrol =
ADAS_curisecont_IN_ACC_OFF_MODE;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 0U;
} else {
switch (ADAS_curisecontrol_DW.is_c3_ADAS_curisecontrol) {
case ADAS_curisecont_IN_ACC_OFF_MODE:
ADAS_curisecontrol_Y.Acceleration_Mode_j = 0U;
if (CruiseSwitch) {
ADAS_curisecontrol_DW.is_c3_ADAS_curisecontrol =
ADAS_curise_IN_ACC_STANDBY_MODE;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 1U;
}
break;
case ADAS_curisecontr_IN_ACC_ON_MODE:
if (!SetSwitch) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE = ADAS_curisec_IN_NO_ACTIVE_CHILD;
ADAS_curisecontrol_DW.is_c3_ADAS_curisecontrol =
ADAS_curise_IN_ACC_STANDBY_MODE;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 1U;
} else if (!CruiseSwitch) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE = ADAS_curisec_IN_NO_ACTIVE_CHILD;
ADAS_curisecontrol_DW.is_c3_ADAS_curisecontrol =
ADAS_curisecont_IN_ACC_OFF_MODE;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 0U;
} else {
switch (ADAS_curisecontrol_DW.is_ACC_ON_MODE) {
case IN_LeadVehicle_Detected_Follow:
ADAS_curisecontrol_Y.Acceleration_Mode_j = 2U;
if (LeadVehicle_Detected == 0) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
ADA_IN_LeadVehicle_Not_Detected;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 1U;
} else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
Set_Speed)) || (Time_Gap < Set_Gap)) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_lessthan_S;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 4U;
}
break;
case IN_LeadVehicle_Detected_Resume:
ADAS_curisecontrol_Y.Acceleration_Mode_j = 3U;
if ((DriveVehicle_Speed == Set_Speed) && (LeadVehicle_Speed >=
Set_Speed) && (Time_Gap >= Set_Gap)) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Detected_Follow;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 2U;
} else if (LeadVehicle_Detected == 0) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Not_Detected_Res;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 1U;
} else if ((DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed >
DriveVehicle_Speed) && (Time_Gap >= Set_Gap)) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_equal_Set_;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 5U;
}
break;
case ADA_IN_LeadVehicle_Not_Detected:
ADAS_curisecontrol_Y.Acceleration_Mode_j = 1U;
/* */
if ((LeadVehicle_Detected == 1) && (DriveVehicle_Speed == Set_Speed) &&
(LeadVehicle_Speed >= Set_Speed) && (Time_Gap >= Set_Gap)) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Detected_Follow;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 2U;
} else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
Set_Speed)) || (Time_Gap < Set_Gap)) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_lessthan_S;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 4U;
}
break;
case IN_LeadVehicle_Not_Detected_Res:
ADAS_curisecontrol_Y.Acceleration_Mode_j = 1U;
break;
case IN_LeadVehicle_Speed_equal_Set_:
ADAS_curisecontrol_Y.Acceleration_Mode_j = 5U;
if (((DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed >
DriveVehicle_Speed)) || (Time_Gap >= Set_Gap)) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Detected_Resume;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 3U;
} else if ((LeadVehicle_Detected == 0) || (DriveVehicle_Speed <=
Set_Speed)) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Not_Detected_Res;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 1U;
/* */
} else if (((LeadVehicle_Speed < Set_Speed) && (LeadVehicle_Speed <
DriveVehicle_Speed)) || (0.75 * (real_T)Set_Gap ==
Time_Gap)) {
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_lessthan_S;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 4U;
}
break;
default:
/* case IN_LeadVehicle_Speed_lessthan_Set_Speed: */
ADAS_curisecontrol_Y.Acceleration_Mode_j = 4U;
if ((LeadVehicle_Detected == 0) && (DriveVehicle_Speed == Set_Speed))
{
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
ADA_IN_LeadVehicle_Not_Detected;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 1U;
} else if (((real_T)LeadVehicle_Speed * 1.25 >= DriveVehicle_Speed) &&
((real_T)LeadVehicle_Speed * 0.75 <= DriveVehicle_Speed) &&
(DriveVehicle_Speed < Set_Speed) && ((Time_Gap <= 1.25 *
(real_T)Set_Gap) && (Time_Gap >= 0.75 * (real_T)Set_Gap)))
{
ADAS_curisecontrol_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_equal_Set_;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 5U;
}
break;
}
}
break;
default:
/* case IN_ACC_STANDBY_MODE: */
ADAS_curisecontrol_Y.Acceleration_Mode_j = 1U;
if (!CruiseSwitch) {
ADAS_curisecontrol_DW.is_c3_ADAS_curisecontrol =
ADAS_curisecont_IN_ACC_OFF_MODE;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 0U;
} else if (SetSwitch) {
ADAS_curisecontrol_DW.is_c3_ADAS_curisecontrol =
ADAS_curisecontr_IN_ACC_ON_MODE;
ADAS_curisecontrol_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Follow;
ADAS_curisecontrol_Y.Acceleration_Mode_j = 2U;
}
break;
}
}
/* End of Chart: '<S2>/ACC_Logic' */
}
/* Model initialize function */
void ADAS_curisecontrol_initialize(void)
{
/* (no initialization code required) */
}
/* Model terminate function */
void ADAS_curisecontrol_terminate(void)
{
/* (no terminate code required) */
}
/*
* File trailer for generated code.
*
* [EOF]
*/
Conclusion:
We have created a matlab simulink mode for the adapative crusie control as per the given requirements
And we aslo generate code for the created simulink model