Modelling connected vehicles using Aimsun API: Cooperative Adaptive Cruise Control

 

Technical Note #22

January 2017
By Paolo Rinelli and Dimitris Triantafyllos

Did you know that you can use the Aimsun micro Advanced Programming Interface (API) to model some connected vehicle applications, such as Cooperative Adaptive Cruise Control (CACC)?

For this application, you need functions to:

  • Read the state of a vehicle and that of the preceding vehicle (to check that the two are within the maximum communication range of the system and to read the information that would be transmitted between the two, such as: position, speed, acceleration, etc.)
  • Modify the behavioral parameters of a vehicle to emulate the transition from human to machine control
  • Control the speed of a vehicle during the simulation

The API provides all of the functions to perform these tasks.

 

Cooperative Adaptive Cruise Control

Cooperative Adaptive Cruise Control relies on inter-vehicle communication to access the speed, distance and acceleration of the leader vehicle(s) to calculate the speed or acceleration that the follower vehicle should adopt.

TSS Aimsun connected vehicles Schematic representation of a vehicle string with V-V communication and object sensors

Schematic representation of a vehicle string with V-V communication and object sensors (source: TNO report, 2007-D-R0280/B, Design and evaluation of an Integrated Full-Range Speed Assistant, March 20th, 2007)

An example of CACC logic (see Bart van Arem et al., The Impact of Cooperative Adaptive Cruise Control on Traffic Flow Characteristics, 2006) is:

ad = k3a + k2ev + k1ex, k1, k2, k3 > 0

where:
ad is the acceleration that the follower should apply
a is the acceleration of the leader
ev,i is the velocity error, equal to the relative speed between leader and follower
exi is the clearance error, equal to the difference between the desired clearance xd,i and the current clearance xr,i
k1, k2, k3 are controller feedback loop gains for acceleration a, velocity vx and clearance error ex

Aimsun micro API implementation

The attached source code provides an example of implementation of the CACC logic described above. The implementation relies on the following functionality. All vehicles entering the network must be set as tracked so that you can modify their speed afterwards.

Explanation: Set a vehicle as tracked

int AKIVehSetAsTracked(int aidVeh)

Step 1

At every simulation step we get the number of vehicles in a single one-lane section* using the following function:

Explanation: Read the total number of vehicles in a section

int AKIVehStateGetNbVehiclesSection(int aidSec, bool considerAllSegments)
* In this example, finding the leader is trivial because there is only one section and one lane and the API returns the vehicles ordered from the end to the beginning of the section. You should rewrite this function if you want to deal with more complex situations that have multiple lanes and sections.

Obtain the state of each vehicle and that of its leader using the following function:

Explanation: Read the information of a vehicle in a section

infVeh = AKIVehStateGetVehicleInfSection(id, i)

Step 2

Check whether the distance between the two vehicles is within the maximum communication range of the system, in which case CACC is activated. The activation of CACC is modelled by altering some vehicle parameters that reflect human driving behavior.

To change the behavioral parameters of a vehicle, for example reactionTime, reactionTimeAtStop, reactionTimeAtTrafficLight, sensitivityFactor, minDistanceVeh, you use the following function*:

Explanation: Modify the static parameters of a tracked vehicle. Static parameters are those that are set once when the vehicle was generated

StaticInfVeh AKIVehTrackedSetStaticInf(int aidVeh)
* Don’t forget to cache the initial values of these parameters to be able to restore them when the CACC is deactivated.

Step 3

Calculate the speed using the CACC formula described above and apply the new speed using the following function:

Explanation: Modify the speed of a tracked vehicle for the next simulation step

int AKIVehTrackedModifySpeed(int aidVeh, double newSpeed)

Note that Aimsun doesn’t allow you to set a speed higher than that it calculates applying the default car-following. The vehicle parameters that we set when CACC is activated aim at making the default car-following speed less restrictive than the CACC speed.

If the leader of a CACC vehicle leaves the platoon, the following vehicle must return to manual driving conditions. This is achieved by restoring the initial values of the vehicle parameters.

Running the sample API

Download the sample files below and ensure that all files are located in the same directory:

Remember that the Aimsun AAPI file must be consistent with the Aimsun version currently in use. You can retrieve it here: C:\Program Files\TSS-Transport Simulation Systems\Aimsun\programming\Aimsun API\AAPIPython\Micro

Procedure
  1. Launch Aimsun and then open the CACC.ang file provided
  2. Execute the Replication. See Log window for detailed feedback about the operation of the CACC

License: Note that you need an API license to run this example. For more information, please contact info@aimsun.com