Challenge

Project 2-Highway Assistant-Lane Changing Assistant

Aim:

  • Model development of one specific requirement of Highway Assistant-Lane Changing Assistant algorithm which is an Advanced Driver Assistance System (ADAS) feature using MATLAB Simulink.

Project Objective:

  • The model is developed in MATLAB Simulink as per Model Based Design (MBD) guidelines.
  • Code generation profile is selected as AUTOSAR Coder.
  • Simulink Data Dictionary (SLDD) is created and linked to the model.
  • All the input & output signals are mapped into the AUTOSAR editor.
  • Model Advisor Report is checked, followed by AUTOSAR compliant code generation.

Introduction to the Highway Lane Change Assistant feature:

The Highway Assistant supports the driver and takes over the longitudinal and lateral guidance of the vehicle in monotonous driving situations on highways. The partially automated function can automatically start, accelerate, brake as well as steer the vehicle to a certain extent. The driver must permanently supervise the system and be ready to take over the complete control of the vehicle at any time.

Drivers are taught to assess surrounding traffic before changing lanes by checking their rearview and side mirrors and looking over each shoulder. However, even for those who follow this sequence of checks, the vehicle's blind spot – the area alongside and just behind the vehicle – is a constant source of danger and often the cause of serious accidents. Even vehicles approaching quickly from behind can pose a risk. To make changing lanes safer, this feature has been developed.

Basic Working Principle:

Highway Assistant is a partially automated driving function for a speed range of up to 180 km/h (112 mph) on highways. It combines the radar-based longitudinal guidance of Adaptive Cruise Control (ACC) with the video-based lateral guidance of lane-keeping support in one system. Highway Assistant can be supplemented by an automatic lane change initiated and monitored by the driver in a speed range of 60 – 130 km/h (35 – 80 mph).

The Lane Change Assistant works by using two mid-range radar sensors that are concealed in the rear bumper – one on the left, one on the right. These two sensors monitor the area alongside and behind the car. Powerful control software collates the sensor information to create a complete picture of all traffic in the area behind the vehicle. Whenever another vehicle approaches at speed from behind or is already present in the blind spot, a signal such as a warning light in the side mirror alerts the driver to the hazard. In case the driver still activates the turn signal with the intention of changing lanes, the system issues an additional acoustic and /or haptic warning.

Problem Statement:

To develop one specific requirement of the Highway Assistant – Lane Changing Assistant algorithm. Please note that the whole Highway Assistant – Lane Changing Assistant is a large algorithm & only one small part of the logic is implemented here. The idea of this project is to familiarize with concepts of AUTOSAR Software Component (SWC) Development in MATLAB environment by following the Model-Based Development (MBD) guidelines.

Model Development and Requirements:

Main Subsystem 'Lane_Change_Assistance':

Lane_Change_Assistance Subsystem:

The subsystem Lane_Change_Assistance consists of three inner subsystem requirements which are Requirement 1 [Highway_DisplayUnit], Requirement 2 [Lane_DisplayUnit] and Requirement 3 [Display_ModeUnit].

Requirement 1 [Highway_DisplayUnit]:

Inputs to this particular subsystem are “Highway_Input_Signal”, “Enable_Display”, “Input_Switch”. These three input signals, when assigned to a particular value will give output signals of a specific value. The output signals are “Highway_Display_Mode_1”, “Highway_Display_Mode_2”, “Highway_Display_Mode_3”, “Highway_Display_Mode_4”. The requirement must be implemented in the form of a Stateflow logic.

Condition

Action

Highway_Input_Signal = 1

Enable_Display = off

Input_Switch = on

Highway_Display_Mode_1 = 232

Highway_Display_Mode_2 = 183

Highway_Display_Mode_3 = 41

Highway_Display_Mode_4 = 94

Highway_Input_Signal = 1

Enable_Display = on

Input_Switch = on

Highway_Display_Mode_1 = 213

Highway_Display_Mode_2 = 183

Highway_Display_Mode_3 = 9

Highway_Display_Mode_4 = 94

Implementation of Requirement 1 [Highway_DisplayUnit] using Stateflow Chart:

Stateflow chart containing two states for Requirement 1:

Requirement No 2 [Lane_DisplayUnit]:

Inputs to this particular subsystem are “Enable_Display”, “Input_Switch”, “Lane_Input_Signal”. These three input signals, when assigned to a particular value will give output signals of specific value. The output signals are “Lane_Display_Mode_1”, “Lane_Display_Mode_2”, “Lane_Display_Mode_3”, “Lane_Display_Mode_4”. The requirement must be implemented in the form of Stateflow logic.

Condition

Action

Lane_Input_Signal= 6

Enable_Display = off

Input_Switch = on

Lane_Display_Mode_1 = 132

Lane_Display_Mode_2 = 185

Lane_Display_Mode_3 = 54

Lane_Display_Mode_4 = 67

Lane_Input_Signal= 6

Enable_Display = on

Input_Switch = on

Lane_Display_Mode_1 = 127

Lane_Display_Mode_2 = 248

Lane_Display_Mode_3 = 186

Lane_Display_Mode_4 = 84

Implementation of Requirement 2 [Lane_DisplayUnit] using Stateflow Chart:

Stateflow chart containing two states for Requirement 2:

Requirement 3 [Display_ModeUnit]:

Signals coming from both subsystems “Highway_Display_Mode_1” & “Lane_Display_Mode_1” are given as inputs to a switch block which will have input signal “Highway_Input_Signal” given as 2nd input to the switch block. Corresponding output from this particular switch block is output signal “Display_Mode_1”.

Signals coming from both subsystems “Highway_Display_Mode_2” & “Lane_Display_Mode_2” are given as inputs to a switch block which will have input signal “Highway_Input_Signal” given as 2nd input to the switch block. Corresponding output from this particular switch block is output signal “Display_Mode_2”.

Signals coming from both subsystems “Highway_Display_Mode_3” & “Lane_Display_Mode_3” are given as inputs to a switch block which will have input signal “Highway_Input_Signal” given as 2nd input to the switch block. Corresponding output from this particular switch block is output signal “Display_Mode_3”.

Signals coming from both subsystems “Highway_Display_Mode_4” & “Lane_Display_Mode_4” are given as inputs to a switch block which will have input signal “Highway_Input_Signal” given as 2nd input to the switch block. Corresponding output from this particular switch block is output signal “Display_Mode_4”.

Implementation of Requirement 3:

Creation of Simulink Data Dictionary (SLDD):

A Simulink Data Dictionary (SLDD) file is created and linked with the Simulink model file. The SLDD contains all the calibration and signal data used in the model.

Calibration and Signal Data List:

Input Signals:

Name of the Signal

Data Type

Range

Highway_Input_Signal

uint8

0 - 255

Enable_Display

uint8

0 – 255

Input_Switch

uint8

0 – 255

Lane_Input_Signal

uint8

0 - 255

Local Signals:

Name of the Signal

Data Type

Range

Highway_Display_Mode_1

uint8

0 - 255

Highway_Display_Mode_2

uint8

0 – 255

Highway_Display_Mode_3

uint8

0 – 255

Highway_Display_Mode_4

uint8

0 – 255

Lane_Display_Mode_1

uint8

0 – 255

Lane_Display_Mode_2

uint8

0 – 255

Lane_Display_Mode_3

uint8

0 – 255

Lane_Display_Mode_4

uint8

0 – 255

Output Signals:

Name of the Signal

Data Type

Range

Display_Mode_1

uint8

0 - 255

Display_Mode_2

uint8

0 – 255

Display_Mode_3

uint8

0 – 255

Display_Mode_4

uint8

0 - 255

Simulink Data Dictionary:

To do AUTOSAR compliant code generation, in model configuration parameters, the configuration parameter for solver is changed to ‘Fixed-step’ , ‘Discrete (no continuous states)’ and the code generation profile is set as ‘autosar.tlc’ under code generation settings.

To configure AUTOSAR components in the AUTOSAR dictionary and generate AUTOSAR compliant code, the Under App section, AUTOSAR Component Designer is selected.

The AUTOSAR dictionary can be accessed under Code Mappings - AUTOSAR SW Component section.

XML Options:

In the AUTOSAR Dictionary, XML options section is configured by specifying the package paths.

Sender Reciever Interfaces:

The Sender-Receiver Interface (SRIf) is configured next. A total of eight Sender-Receiver interfaces will be created as there are four inputs and four outputs for the main subsystem ‘Lane_Change_Assistance’. Each sender-receiver interface is prefixed with SRIf_ .

The corresponding data element of each SRIf is also renamed and prefixed with DE_ .

Runnables:

After configuring the XML options and S-R Interfaces, the runnables are configured next.

Two runnables are created, one for the initialization event and another for the timing event.

Sender Ports (Output):

Prefix Pp_ (Provider Port) is used before signal names.

Receiver Port (Input):

Prefix Rp_ (Receiver Port) is used before signal names.

After configuring the XML options, S-R Interfaces, Runnables and Sender-Receiver Ports to the AUTOSAR Dictionary, the inports and outports of the developed model are mapped to their corresponding receiver / sender ports and data element.

Mapped Inports:

Mapped Outports:

The code mappings are updated and validated as the final step to make sure all ports are correctly mapped.

A Model Advisor Check for Mathworks Automotive Advisory Board (MAAB) guidelines is done before code generation to make sure that the model is free of errors.

Model advisor report for MAAB guidelines check:

AUTOSAR compliant code generation:

Under the AUTOSAR Tab, the Quick Start option is selected to generate code. The Quick Start will automatically manage model configuration settings to generate code that is AUTOSAR compliant.

The code generation folder will contain generated .c, .h, .ARXML files.

AUTOSAR compliant generated C Code for the Model:

/*
 * File: Lane_Change_Assistance.c
 *
 * Code generated for Simulink model 'Lane_Change_Assistance'.
 *
 * Model version                  : 5.7
 * Simulink Coder version         : 9.6 (R2021b) 14-May-2021
 * C/C++ source code generated on : Fri Dec 24 23:15:23 2021
 *
 * Target selection: autosar.tlc
 * Embedded hardware selection: Intel->x86-64 (Windows64)
 * Code generation objectives:
 *    1. Execution efficiency
 *    2. RAM efficiency
 * Validation result: Not run
 */

#include "Lane_Change_Assistance.h"

/* Named constants for Chart: '<S3>/Chart' */
#define IN_Condition_1                 ((uint8)1U)
#define IN_Condition_2                 ((uint8)2U)

/* Block signals and states (default storage) */
DW rtDW;

/* Model step function */
void Lane_Change_Assistance_ms(void)
{
  sint32 tmp;
  uint8 rtb_Highway_Display_Mode_1;
  uint8 rtb_Highway_Display_Mode_3;
  uint8 rtb_Lane_Display_Mode_1;
  uint8 rtb_Lane_Display_Mode_2;
  uint8 rtb_Lane_Display_Mode_3;
  uint8 rtb_Lane_Display_Mode_4;

  /* Chart: '<S3>/Chart' incorporates:
   *  Inport: '<Root>/Enable_Display'
   *  Inport: '<Root>/Highway_Input_Signal'
   *  Inport: '<Root>/Input_Switch'
   */
  if (rtDW.is_active_c3_Lane_Change_Assist == 0U) {
    rtDW.is_active_c3_Lane_Change_Assist = 1U;
    rtDW.is_c3_Lane_Change_Assistance = IN_Condition_1;
    rtb_Highway_Display_Mode_1 = 232U;
    rtb_Highway_Display_Mode_3 = 41U;
  } else if (rtDW.is_c3_Lane_Change_Assistance == IN_Condition_1) {
    rtb_Highway_Display_Mode_1 = 232U;
    rtb_Highway_Display_Mode_3 = 41U;
    if ((Rte_IRead_Lane_Change_Assistance_ms_Rp_Highway_Input_Signal_DE_Highway_Input_Signal
         () == 1) &&
        (Rte_IRead_Lane_Change_Assistance_ms_Rp_Enable_Display_DE_Enable_Display
         () == 1) &&
        (Rte_IRead_Lane_Change_Assistance_ms_Rp_Input_Switch_DE_Input_Switch() ==
         1)) {
      rtDW.is_c3_Lane_Change_Assistance = IN_Condition_2;
      rtb_Highway_Display_Mode_1 = 213U;
      rtb_Highway_Display_Mode_3 = 9U;
    }
  } else {
    /* case IN_Condition_2: */
    rtb_Highway_Display_Mode_1 = 213U;
    rtb_Highway_Display_Mode_3 = 9U;
    if ((Rte_IRead_Lane_Change_Assistance_ms_Rp_Highway_Input_Signal_DE_Highway_Input_Signal
         () == 1) &&
        (Rte_IRead_Lane_Change_Assistance_ms_Rp_Enable_Display_DE_Enable_Display
         () == 0) &&
        (Rte_IRead_Lane_Change_Assistance_ms_Rp_Input_Switch_DE_Input_Switch() ==
         1)) {
      rtDW.is_c3_Lane_Change_Assistance = IN_Condition_1;
      rtb_Highway_Display_Mode_1 = 232U;
      rtb_Highway_Display_Mode_3 = 41U;
    }
  }

  /* End of Chart: '<S3>/Chart' */

  /* Chart: '<S4>/Chart' incorporates:
   *  Inport: '<Root>/Enable_Display'
   *  Inport: '<Root>/Input_Switch'
   *  Inport: '<Root>/Lane_Input_Signal'
   */
  if (rtDW.is_active_c1_Lane_Change_Assist == 0U) {
    rtDW.is_active_c1_Lane_Change_Assist = 1U;
    rtDW.is_c1_Lane_Change_Assistance = IN_Condition_1;
    rtb_Lane_Display_Mode_1 = 132U;
    rtb_Lane_Display_Mode_2 = 185U;
    rtb_Lane_Display_Mode_3 = 54U;
    rtb_Lane_Display_Mode_4 = 67U;
  } else if (rtDW.is_c1_Lane_Change_Assistance == IN_Condition_1) {
    rtb_Lane_Display_Mode_1 = 132U;
    rtb_Lane_Display_Mode_2 = 185U;
    rtb_Lane_Display_Mode_3 = 54U;
    rtb_Lane_Display_Mode_4 = 67U;
    if ((Rte_IRead_Lane_Change_Assistance_ms_Rp_Lane_Input_Signal_DE_Lane_Input_Signal
         () == 6) &&
        (Rte_IRead_Lane_Change_Assistance_ms_Rp_Enable_Display_DE_Enable_Display
         () == 1) &&
        (Rte_IRead_Lane_Change_Assistance_ms_Rp_Input_Switch_DE_Input_Switch() ==
         1)) {
      rtDW.is_c1_Lane_Change_Assistance = IN_Condition_2;
      rtb_Lane_Display_Mode_1 = 127U;
      rtb_Lane_Display_Mode_2 = 248U;
      rtb_Lane_Display_Mode_3 = 186U;
      rtb_Lane_Display_Mode_4 = 84U;
    }
  } else {
    /* case IN_Condition_2: */
    rtb_Lane_Display_Mode_1 = 127U;
    rtb_Lane_Display_Mode_2 = 248U;
    rtb_Lane_Display_Mode_3 = 186U;
    rtb_Lane_Display_Mode_4 = 84U;
    if ((Rte_IRead_Lane_Change_Assistance_ms_Rp_Lane_Input_Signal_DE_Lane_Input_Signal
         () == 6) &&
        (Rte_IRead_Lane_Change_Assistance_ms_Rp_Enable_Display_DE_Enable_Display
         () == 0) &&
        (Rte_IRead_Lane_Change_Assistance_ms_Rp_Input_Switch_DE_Input_Switch() ==
         1)) {
      rtDW.is_c1_Lane_Change_Assistance = IN_Condition_1;
      rtb_Lane_Display_Mode_1 = 132U;
      rtb_Lane_Display_Mode_2 = 185U;
      rtb_Lane_Display_Mode_3 = 54U;
      rtb_Lane_Display_Mode_4 = 67U;
    }
  }

  /* End of Chart: '<S4>/Chart' */

  /* Switch: '<S2>/Switch' incorporates:
   *  Inport: '<Root>/Highway_Input_Signal'
   *  Switch: '<S2>/Switch1'
   *  Switch: '<S2>/Switch2'
   */
  tmp =
    Rte_IRead_Lane_Change_Assistance_ms_Rp_Highway_Input_Signal_DE_Highway_Input_Signal
    ();
  if (tmp != 0) {
    /* Outport: '<Root>/Display_Mode_1' */
    Rte_IWrite_Lane_Change_Assistance_ms_Pp_Display_Mode_1_DE_Display_Mode_1
      (rtb_Highway_Display_Mode_1);
    rtb_Lane_Display_Mode_2 = 183U;
  } else {
    /* Outport: '<Root>/Display_Mode_1' */
    Rte_IWrite_Lane_Change_Assistance_ms_Pp_Display_Mode_1_DE_Display_Mode_1
      (rtb_Lane_Display_Mode_1);
  }

  /* End of Switch: '<S2>/Switch' */

  /* Outport: '<Root>/Display_Mode_2' */
  Rte_IWrite_Lane_Change_Assistance_ms_Pp_Display_Mode_2_DE_Display_Mode_2
    (rtb_Lane_Display_Mode_2);

  /* Switch: '<S2>/Switch2' incorporates:
   *  Switch: '<S2>/Switch3'
   */
  if (tmp != 0) {
    /* Outport: '<Root>/Display_Mode_3' */
    Rte_IWrite_Lane_Change_Assistance_ms_Pp_Display_Mode_3_DE_Display_Mode_3
      (rtb_Highway_Display_Mode_3);
    rtb_Lane_Display_Mode_4 = 94U;
  } else {
    /* Outport: '<Root>/Display_Mode_3' */
    Rte_IWrite_Lane_Change_Assistance_ms_Pp_Display_Mode_3_DE_Display_Mode_3
      (rtb_Lane_Display_Mode_3);
  }

  /* Outport: '<Root>/Display_Mode_4' */
  Rte_IWrite_Lane_Change_Assistance_ms_Pp_Display_Mode_4_DE_Display_Mode_4
    (rtb_Lane_Display_Mode_4);
}

/* Model initialize function */
void Lane_Change_Assistance_Init(void)
{
  /* (no initialization code required) */
}

/*
 * File trailer for generated code.
 *
 * [EOF]
 */

Conclusion:

  • A model is developed in MATLAB Simulink for implementing a specific portion of the 'Highway Assistant-Lane Changing Assistant' feature as per Model-Based Design (MBD) guidelines.
  • Simulink Data Dictionary (SLDD) is created and linked to the model.
  • All input & output signals used in the developed model are mapped to their corresponding S-R Interfaces in the AUTOSAR editor.
  • Model Advisor check is done for MAAB guidelines, followed by code generation using AUTOSAR coder for the developed model.
Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.