As per requirement given we have design a simulink model

here 3 requirement mentioned
1.Requirement 1– Lead Vehicle:
2.Requirement 2 – Drive Vehicle:
3.Requirement 3 – Adaptive Cruise Control Algorithm:
requirement 1
here we get lead vehicle output by sum of result given by camera output+radarinput of lead vehicle

Requirement 2:
For DriveVehicle_Speed calculation we are adding CameraInput_DriveVehicle+RadarInput_DriveVehicle + Acceleration_Mode feedback from Cruise control algorithm.
The outputs from this subsystem as DriveVehicle_Speed and Lead_Vehicle_Detected by propagating RadarInput_DriveVehicle in to signal conversion block.

Requirement 3:
In this subsystem we are using a state flow logics to 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,
- CruiseSwitch.
- SetSwitch.
- Set_Gap.
- Set_Speed.
- Time_Gap.
- LeadVehicle_Speed from Requirement 1 subsystem.
- DriveVehicle_Speed from Requirement 2 subsystem.
- LeadVehicle_Detected from Requirement 2 subsystem.
The output from this subsystem is,
- Acceleration_Mode-Based on the LeadVehicle_Speed the Acceleration_Mode adjust its controlling accaleration given output to maintain constant speed

state flow logic

In this logic we had created three modes of operation as,
- ACC_OFF mode.
- ACC_STANDBY mode.
- ACC_ON mode.
In ACC_ON mode we have further 6 modes of operations as,
- LeadVehicle_Detected_Follow (Default).
- LeadVehicle_Not_Detected.
- LeadVehicle_Detected_Resume.
- LeadVehicle_Not_Detected_Resume.
- LeadVehicle_Speed_lessthan_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:

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:


Code generation:










* Code generated for Simulink model 'Cruise_control'.
* Simulink Coder version : 9.5 (R2021a) 14-Nov-2020
* C/C++ source code generated on : Fri Sep 2 17:07:00 2022
* Target selection: ert.tlc
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
#include "Cruise_control.h"
#include "Cruise_control_private.h"
/* Named constants for Chart: '<S3>/Requirement 3a – ACC OFF MODE state logic' */
#define Cru_IN_LeadVehicle_Not_Detected ((uint8_T)3U)
#define Cruise_cont_IN_ACC_STANDBY_MODE ((uint8_T)3U)
#define Cruise_contr_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
#define Cruise_control_IN_ACC_OFF_MODE ((uint8_T)1U)
#define Cruise_control_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)
/* Block states (default storage) */
DW_Cruise_control_T Cruise_control_DW;
static RT_MODEL_Cruise_control_T Cruise_control_M_;
RT_MODEL_Cruise_control_T *const Cruise_control_M = &Cruise_control_M_;
real_T rt_roundd_snf(real_T u)
if (fabs(u) < 4.503599627370496E+15) {
/* Model step function */
void Cruise_control_step(void)
/* local block i/o variables */
real_T DriveVehicle_Speed;
uint8_T LeadVehicle_Speed;
uint8_T LeadVehicle_Detected;
/* Sum: '<S2>/Add' incorporates:
* Inport: '<Root>/CameraInput_DriveVehicle'
* Inport: '<Root>/RadarInput_DriveVehicle'
DriveVehicle_Speed = (real_T)(CameraInput_DriveVehicle +
RadarInput_DriveVehicle) + Cruise_control_DW.Delay_DSTATE;
/* Sum: '<S1>/Add' incorporates:
* Inport: '<Root>/CameraInput_LeadVehicle '
* Inport: '<Root>/RadarInput_LeadVehicle'
LeadVehicle_Speed = (uint8_T)((uint32_T)Camerainput_LeadVehicle +
/* SignalConversion: '<S2>/Signal Conversion' incorporates:
* Inport: '<Root>/RadarInput_DriveVehicle'
LeadVehicle_Detected = RadarInput_DriveVehicle;
/* Chart: '<S3>/Requirement 3a – ACC OFF MODE state logic' incorporates:
* Inport: '<Root>/CruiseSwitch'
* Inport: '<Root>/SetSwitch'
* Inport: '<Root>/Set_Gap'
* Inport: '<Root>/Set_Speed'
* Inport: '<Root>/Time_Gap'
if (Cruise_control_DW.is_active_c3_Cruise_control == 0U) {
Cruise_control_DW.is_active_c3_Cruise_control = 1U;
Cruise_control_DW.is_c3_Cruise_control = Cruise_control_IN_ACC_OFF_MODE;
Cruise_control_DW.Delay_DSTATE = 0.0;
switch (Cruise_control_DW.is_c3_Cruise_control) {
case Cruise_control_IN_ACC_OFF_MODE:
Cruise_control_DW.Delay_DSTATE = 0.0;
Cruise_control_DW.is_c3_Cruise_control = Cruise_cont_IN_ACC_STANDBY_MODE;
Cruise_control_DW.Delay_DSTATE = 1.0;
case Cruise_control_IN_ACC_ON_MODE:
Cruise_control_DW.is_ACC_ON_MODE = Cruise_contr_IN_NO_ACTIVE_CHILD;
Cruise_control_DW.is_c3_Cruise_control = Cruise_control_IN_ACC_OFF_MODE;
Cruise_control_DW.Delay_DSTATE = 0.0;
Cruise_control_DW.is_ACC_ON_MODE = Cruise_contr_IN_NO_ACTIVE_CHILD;
Cruise_control_DW.is_c3_Cruise_control = Cruise_cont_IN_ACC_STANDBY_MODE;
Cruise_control_DW.Delay_DSTATE = 1.0;
switch (Cruise_control_DW.is_ACC_ON_MODE) {
case IN_LeadVehicle_Detected_Follow:
Cruise_control_DW.Delay_DSTATE = 2.0;
if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed < Set_speed)) ||
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_lessthan_S;
Cruise_control_DW.Delay_DSTATE = 4.0;
} else if (LeadVehicle_Detected == 0) {
Cruise_control_DW.is_ACC_ON_MODE = Cru_IN_LeadVehicle_Not_Detected;
Cruise_control_DW.Delay_DSTATE = 1.0;
case IN_LeadVehicle_Detected_Resume:
Cruise_control_DW.Delay_DSTATE = 3.0;
if ((DriveVehicle_Speed == Set_speed) && (LeadVehicle_Speed >=
Set_speed) && (Time_Gap >= Set_Gap)) {
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Follow;
Cruise_control_DW.Delay_DSTATE = 2.0;
} else if (LeadVehicle_Detected == 0) {
Cruise_control_DW.is_ACC_ON_MODE = Cru_IN_LeadVehicle_Not_Detected;
Cruise_control_DW.Delay_DSTATE = 1.0;
} else if ((DriveVehicle_Speed < Set_speed) && (LeadVehicle_Speed >
DriveVehicle_Speed) && (Time_Gap >= Set_Gap)) {
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_equal_Set_;
Cruise_control_DW.Delay_DSTATE = 5.0;
} else if (LeadVehicle_Detected == 0) {
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Not_Detected_Res;
Cruise_control_DW.Delay_DSTATE = 1.0;
case Cru_IN_LeadVehicle_Not_Detected:
Cruise_control_DW.Delay_DSTATE = 1.0;
if ((DriveVehicle_Speed == Set_speed) && (LeadVehicle_Speed >=
Set_speed) && (Time_Gap >= Set_Gap)) {
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Follow;
Cruise_control_DW.Delay_DSTATE = 2.0;
} else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
Set_speed)) || (Time_Gap < Set_Gap)) {
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_lessthan_S;
Cruise_control_DW.Delay_DSTATE = 4.0;
case IN_LeadVehicle_Not_Detected_Res:
Cruise_control_DW.Delay_DSTATE = 1.0;
case IN_LeadVehicle_Speed_equal_Set_:
Cruise_control_DW.Delay_DSTATE = 5.0;
if ((LeadVehicle_Detected == 0) || (DriveVehicle_Speed <= Set_speed))
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Not_Detected_Res;
Cruise_control_DW.Delay_DSTATE = 1.0;
} else if (((DriveVehicle_Speed < Set_speed) && (LeadVehicle_Speed >
DriveVehicle_Speed)) || (Time_Gap >= Set_Gap)) {
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Resume;
Cruise_control_DW.Delay_DSTATE = 3.0;
} else if (((LeadVehicle_Speed < Set_speed) && (LeadVehicle_Speed <
DriveVehicle_Speed)) || ((int32_T)rt_roundd_snf(0.75 *
(real_T)Set_Gap) == Time_Gap)) {
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_lessthan_S;
Cruise_control_DW.Delay_DSTATE = 4.0;
/* case IN_LeadVehicle_Speed_lessthan_Set_Speed: */
Cruise_control_DW.Delay_DSTATE = 4.0;
if ((LeadVehicle_Detected == 0) && (DriveVehicle_Speed == Set_speed))
Cruise_control_DW.is_ACC_ON_MODE = Cru_IN_LeadVehicle_Not_Detected;
Cruise_control_DW.Delay_DSTATE = 1.0;
tmp = (int32_T)rt_roundd_snf((real_T)LeadVehicle_Speed * 1.25);
tmp_0 = (int32_T)rt_roundd_snf(1.25 * (real_T)Set_Gap);
if ((tmp_1 >= DriveVehicle_Speed) && (rt_roundd_snf((real_T)
LeadVehicle_Speed * 0.75) <= DriveVehicle_Speed) &&
(DriveVehicle_Speed < Set_speed) && (Time_Gap <= tmp_2) &&
(Time_Gap >= (int32_T)rt_roundd_snf(0.75 * (real_T)Set_Gap))) {
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Speed_equal_Set_;
Cruise_control_DW.Delay_DSTATE = 5.0;
/* case IN_ACC_STANDBY_MODE: */
Cruise_control_DW.Delay_DSTATE = 1.0;
Cruise_control_DW.is_c3_Cruise_control = Cruise_control_IN_ACC_OFF_MODE;
Cruise_control_DW.Delay_DSTATE = 0.0;
Cruise_control_DW.is_c3_Cruise_control = Cruise_control_IN_ACC_ON_MODE;
Cruise_control_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Follow;
Cruise_control_DW.Delay_DSTATE = 2.0;
/* End of Chart: '<S3>/Requirement 3a – ACC OFF MODE state logic' */
/* Model initialize function */
void Cruise_control_initialize(void)
/* (no initialization code required) */
/* Model terminate function */
void Cruise_control_terminate(void)
/* (no terminate code required) */
* File trailer for generated code.