Challenge

Project 2-Highway Assistant-Lane Changing Assistant

Highway Assistant – Lane Changing Assistant

Introduction to the 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 has to 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. Should the driver still activate 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 Highway Assistant – Lane Changing Assistant algorithm. Please note that the whole Highway Assistant – Lane Changing Assistant is a very huge algorithm & only one small part of the logic is implemented here. Idea is to familiarize with concepts of Autosar Software Component Development in MATLAB Environment by following the Model Based Development guidelines. The Project must be done keeping in mind the following processes & steps.

  • This model must be developed in MATLAB Simulink per MBD guidelines.
  • Code Generation Profile must be Autosar Coder.
  • Simulink Data Dictionary must be created for the model & must be linked to the model.
  • All the input & output signals must be mapped into the Autosar Editor.
  • Model Advisor Report is mandatory & this will be followed by Code Generation.

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

Requirement No 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 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

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

Requirement No 3:

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”.

What is Highway Driving Assist and How Does It Work

Highway Driving Assist is a Level 2 advanced driving assistance system (ADAS) designed for limited-access highways. It combines adaptive cruise control with stop-and-go capability, leading vehicle distance maintenance technology, a lane-centering assistance system, GPS data, and route information from the navigation system to reduce driver stress and fatigue.

a next-generation version of the system is called Highway Driving Assist II. It adds a lane-change assistance function and a machine learning capability to better match the adaptive cruise control system’s behavior to your driving style.

How Does Highway Driving Assist Work?

Highway Driving Assist uses a forward-facing radar unit and camera, GPS technology, and the navigation system’s map database to provide Level 2 driving assistance on divided, restricted-access highways, such as Interstates. Unless the vehicle is traveling on an approved road,

The radar unit informs adaptive cruise control operation, maintaining a safe following distance to traffic ahead. For automatic speed governing, drivers can choose to set the adaptive cruise control for the posted speed limit. Alternatively, you can set a lower or higher speed and adjust the velocity manually.

After the driver sets the speed, the adaptive cruise control automatically adjusts the vehicle’s following distance to shrink or expand the gap between it and traffic ahead.

If another vehicle cuts into the gap, the adaptive cruise control automatically slows the Vehicle down to re-establish a safe following distance. If the vehicle ahead changes lanes or exits the road, Highway Drive Assist will automatically accelerate back up to the posted speed limit or a different pre-set speed.

Highway Drive Assist can also automatically reduce the vehicle’s speed if the posted limit changes and slow the vehicle down to more safely navigate freeway transition ramps or curves in the highway.

To keep a Vehicle centered in its intended lane of travel, a camera identifies the road’s lane markings, and the steering automatically makes minor corrections to keep the vehicle as close to the center of the lane as is possible. The driver must separately activate this technology using a button on the steering wheel or dashboard, or a menu within the infotainment system.

With Highway Drive Assist II, steering assistance can also support a lane change as long as the driver signals that intention. This next-generation version of the technology also includes machine learning capability that attempts to match adaptive cruise control operation with the driver’s typical habits.

Drivers can tell when Highway Driving Assist is working by reviewing icons in the instrument cluster or the head-up display. If the “HDA,” steering wheel, and lane-keeping assistance icons are green, the system is operational.

Highway Driving Assist is not a Level 2+ hands-free technology, like General Motors Super Cruise or Ford Active Drive Assist. You must keep your hands on the steering wheel at all times, and if you don’t, after three attempts to request that you retake control of the vehicle, Highway Driving Assist will automatically turn itself off.

Also, Highway Driving Assist does not work in certain driving conditions, such as heavy rain or snow.

First we have to create Simulink data dictionary file (sldd) as per the requirement

Next, we have to develop the model according to the input requirements

There are three requirements models they are

Requirement No 1 [Highway_DisplayUnit]

Requirement No 2 [Lane_DisplayUnit]

Requirement No 3

Requirement No 1 [Highway_DisplayUnit]

In requirement 1 there are 3 inputs and 4 outputs

Inputs:

  • Highway_Input_Signal
  • Enable_Display
  • Input_Switch

Outputs:

  • Highway_Display_Mode_1
  • Highway_Display_Mode_2
  • Highway_Display_Mode_3
  • Highway_Display_Mode_4

When this 3 inputs are assigned to particular value output signals will give specified value

Inside the requirement 1 subsystem the inputs and outputs are connected to an state flow chart as shown in below figure and named it as Highway_DisplayUnit

The chart consist of two states and each state consist four 4 Highway_Display_Mode's as shown in the below figure. the state will change from Action_1 to Action_2 when the condition is [(Highway_Input_Signal==1)&&(Enable_Display==1)&&(Input_Switch==1)] is given to the state 1. In order to change from Action_2 to Action_1 we have to give the conition [(Highway_Input_Signal==1)&&(Enable_Display==0)&&(Input_Switch==1)] to the state 2.

Requirement No 2 [Lane_DisplayUnit]

In requirement 2 there are 3 inputs and 4 outputs same as requirement 1

Inputs

  • Lane_Input_Signal
  • Enable_Display
  • Input_Switch

Where enable display and input switchs are the same inputs given to requirement 1

Outputs

  • Lane_Display_Mode_1
  • Lane_Display_Mode_2
  • Lane_Display_Mode_3
  • Lane_Display_Mode_4

Inside the requirement 2 subsystem the inputs and outputs are connected to an state flow chart as shown in below figure and named it as Lane_DisplayUnit

The chart consist of two states and each state consist four 4 Lane_Display_Mode's as shown in the below figure. the state will change from Action_1 to Action_2 when the condition is [(Lane_Input_Signal==6)&&(Enable_Display==1)&&(Input_Switch==1)] is given to the state 1.

In order to change from Action_2 to Action_1 we have to give the conition [(Lane_Input_Signal==6)&&(Enable_Display==0)&&(Input_Switch==1)] to the state 2.

Requirement_3

In requirement_3 subsystem, there are 3 inputs and 4 outputs

The inputs to this subsystem are from requirement_1 & requirement_2 & Highway_Input_Signal

i.e. they are Highway_Display_Mode 1 to 4 & Lane_Display_Mode 1 to 4

Outputs are Display_Mode 1 to 4

Inside the requirement_3 subsystem, there are 4 switches

Signals coming from both subsystems “Highway_Display_Modes” & “Lane_Display_Modes” are given as inputs to a 4 switch blocks which will have input signal “Highway_Input_Signal” given as 2nd input to the every switch block. Corresponding outputs from this particular switch blocks are output signals “Display_Mode_1 to Display_Mode_4”.as shown in below figure

After modelling the state flow logic, we have to resolve the signals in requirement 1 & 2. The below figure shows the tick mark at Resolve Signals.

Next, we have to change code generation settings and solver settings

In code generation we have to set system target file as autosar.tlc

Solver as fixed-step and discrite(no-continuous)

To open mapped view of Autosar in Simulink Environment below steps are required

In Apps option select Down Arrow

Next select Autosar Component Designer app in code generation settings then Autosar Dictionary and Mapped view of Autosar SW Component opens as shown in below fig:

Now go to Code Mapping- AUTOSAR SW Component and select AUTOSAR Dictionary the below page will open.

For S-R Interface of the model, we have to rename the port with the prefix "SRIf_" as shown below.

In S-R Interfaces, Each DataElement has to be renamed with prefix "DE_" as shown below.

Now in the ReceiverPorts of the model, the inputs will be renamed with the prefix "Rp_".

Similarly, the SenderPorts of the model, the outputs will be renamed with the prefix "Pp_" as shown below.

After port mapping, we have to check Model Advisory for MAAB guidlines,

then we have to generate C code

code was generated after succesfully after running the model.

/*

* File: highwayy.c

*

* Code generated for Simulink model 'highwayy'.

*

* Model version : 1.46

* Simulink Coder version : 9.5 (R2021a) 14-Nov-2020

* C/C++ source code generated on : Thu Jul 28 22:36:24 2022

*

* Target selection: autosar.tlc

* Embedded hardware selection: Intel->x86-64 (Windows64)

* Code generation objectives: Unspecified

* Validation result: Not run

*/

#include "highwayy.h"

#include "highwayy_private.h"

/* Named constants for Chart: '/Highway_DisplayUnit' */

#define highwayy_IN_Condition_1 ((uint8)1U)

#define highwayy_IN_Condition_2 ((uint8)2U)

/* Named constants for Chart: '/Lane_DisplayUnit' */

#define highwayy_IN_Mode_1 ((uint8)1U)

#define highwayy_IN_Mode_2 ((uint8)2U)

/* Block states (default storage) */

DW_highwayy_T highwayy_DW;

/* Model step function */

void highway_Step(void)

{

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: '/Lane_DisplayUnit' incorporates:

* Inport: '/Enable_Display'

* Inport: '/Input_Switch'

* Inport: '/Lane_Input_Signal'

*/

if (highwayy_DW.is_active_c1_highwayy == 0U) {

highwayy_DW.is_active_c1_highwayy = 1U;

highwayy_DW.is_c1_highwayy = highwayy_IN_Mode_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 (highwayy_DW.is_c1_highwayy == highwayy_IN_Mode_1) {

if ((Rte_IRead_highway_Step_Rp_Lane_Input_Signal_DE_Lane_Input_Signal() ==

6.0) && (Rte_IRead_highway_Step_Rp_Enable_Display_DE_Enable_Display() ==

1.0) &&

(Rte_IRead_highway_Step_Rp_Input_Switch_DE_Input_Switch() == 1.0)) {

highwayy_DW.is_c1_highwayy = highwayy_IN_Mode_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 {

rtb_Lane_Display_Mode_1 = 132U;

rtb_Lane_Display_Mode_2 = 185U;

rtb_Lane_Display_Mode_3 = 54U;

rtb_Lane_Display_Mode_4 = 67U;

}

/* case IN_Mode_2: */

} else if ((Rte_IRead_highway_Step_Rp_Lane_Input_Signal_DE_Lane_Input_Signal()

== 6.0) &&

(Rte_IRead_highway_Step_Rp_Enable_Display_DE_Enable_Display() ==

0.0) && (Rte_IRead_highway_Step_Rp_Input_Switch_DE_Input_Switch() ==

1.0)) {

highwayy_DW.is_c1_highwayy = highwayy_IN_Mode_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 {

rtb_Lane_Display_Mode_1 = 127U;

rtb_Lane_Display_Mode_2 = 248U;

rtb_Lane_Display_Mode_3 = 186U;

rtb_Lane_Display_Mode_4 = 84U;

}

/* End of Chart: '/Lane_DisplayUnit' */

/* Outport: '/Lane_Display_Mode_1' */

Rte_IWrite_highway_Step_Pp_Lane_Display_Mode_1_DE_Lane_Display_Mode_1

(rtb_Lane_Display_Mode_1);

/* Outport: '/Lane_Display_Mode_2' */

Rte_IWrite_highway_Step_Pp_Lane_Display_Mode_2_DE_Lane_Display_Mode_2

(rtb_Lane_Display_Mode_2);

/* Outport: '/Lane_Display_Mode_3' */

Rte_IWrite_highway_Step_Pp_Lane_Display_Mode_3_DE_Lane_Display_Mode_3

(rtb_Lane_Display_Mode_3);

/* Outport: '/Lane_Display_Mode_4' */

Rte_IWrite_highway_Step_Pp_Lane_Display_Mode_4_DE_Lane_Display_Mode_4

(rtb_Lane_Display_Mode_4);

/* Chart: '/Highway_DisplayUnit' incorporates:

* Inport: '/Enable_Display'

* Inport: '/Highway_Input_Signal'

* Inport: '/Input_Switch'

*/

if (highwayy_DW.is_active_c3_highwayy == 0U) {

highwayy_DW.is_active_c3_highwayy = 1U;

highwayy_DW.is_c3_highwayy = highwayy_IN_Condition_1;

rtb_Lane_Display_Mode_1 = 232U;

rtb_Lane_Display_Mode_2 = 41U;

} else if (highwayy_DW.is_c3_highwayy == highwayy_IN_Condition_1) {

if ((Rte_IRead_highway_Step_Rp_Highway_Input_Signal_DE_Highway_Input_Signal()

== 1.0) && (Rte_IRead_highway_Step_Rp_Enable_Display_DE_Enable_Display()

== 1.0) &&

(Rte_IRead_highway_Step_Rp_Input_Switch_DE_Input_Switch() == 1.0)) {

highwayy_DW.is_c3_highwayy = highwayy_IN_Condition_2;

rtb_Lane_Display_Mode_1 = 213U;

rtb_Lane_Display_Mode_2 = 9U;

} else {

rtb_Lane_Display_Mode_1 = 232U;

rtb_Lane_Display_Mode_2 = 41U;

}

/* case IN_Condition_2: */

} else if

((Rte_IRead_highway_Step_Rp_Highway_Input_Signal_DE_Highway_Input_Signal()

== 1.0) && (Rte_IRead_highway_Step_Rp_Enable_Display_DE_Enable_Display()

== 0.0) &&

(Rte_IRead_highway_Step_Rp_Input_Switch_DE_Input_Switch() == 1.0)) {

highwayy_DW.is_c3_highwayy = highwayy_IN_Condition_1;

rtb_Lane_Display_Mode_1 = 232U;

rtb_Lane_Display_Mode_2 = 41U;

} else {

rtb_Lane_Display_Mode_1 = 213U;

rtb_Lane_Display_Mode_2 = 9U;

}

/* End of Chart: '/Highway_DisplayUnit' */

/* Outport: '/Display_Mode_1' */

Rte_IWrite_highway_Step_Pp_Display_Mode_1_DE_Display_Mode_1(true);

/* Outport: '/Display_Mode_2' */

Rte_IWrite_highway_Step_Pp_Display_Mode_2_DE_Display_Mode_2(true);

/* Outport: '/Display_Mode_3' */

Rte_IWrite_highway_Step_Pp_Display_Mode_3_DE_Display_Mode_3(true);

/* Outport: '/Display_Mode_4' */

Rte_IWrite_highway_Step_Pp_Display_Mode_4_DE_Display_Mode_4(true);

/* Outport: '/Highway_Display_Mode_1' */

Rte_IWrite_highway_Step_Pp_Highway_Display_Mode_1_DE_Highway_Display_Mode_1

(rtb_Lane_Display_Mode_1);

/* Outport: '/Highway_Display_Mode_2' */

Rte_IWrite_highway_Step_Pp_Highway_Display_Mode_2_DE_Highway_Display_Mode_2

(183U);

/* Outport: '/Highway_Display_Mode_3' */

Rte_IWrite_highway_Step_Pp_Highway_Display_Mode_3_DE_Highway_Display_Mode_3

(rtb_Lane_Display_Mode_2);

/* Outport: '/Highway_Display_Mode_4' */

Rte_IWrite_highway_Step_Pp_Highway_Display_Mode_4_DE_Highway_Display_Mode_4

(94U);

}

/* Model initialize function */

void highway_Init(void)

{

/* (no initialization code required) */

}

/*

* File trailer for generated code.

*

* [EOF]

*/

Conclusion:

As per the requirement we developed the Simulink model High lane changing Assistant as per MBD guideline, Simulink data dictionary is created and linked to the model

Input and output runnable are mapped to the model and Code is generated by using autosar.tlc

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.