Package: plafosim
PlaFoSim - A simple and scalable simulator for platoon formation"Platoon Formation Simulator", or "PlaFoSim" for short, is an open source simulator for platoon formation, aiming for simplicity, flexibility, and scalability.
PlaFoSim aims to facilitate and accelerate the research of platoon maneuvers and formation for individually driven vehicles.
While the main focus of the simulator is on the assignment process, simulation of advertisements and maneuvers is implemented in a more abstract way.PlaFoSim has been published atIEEE VNC 2021:Julian Heinovski, Dominik S. Buse and Falko Dressler, "Scalable Simulation of Platoon Formation Maneuvers with PlaFoSim," Proceedings of 13th IEEE Vehicular Networking Conference (VNC 2021), Poster Session, Virtual Conference, November 2021, pp. 137–138.NOTE: This project is under active development.InstallationInstall Python (>=3.7,<=3.9)Install PlaFoSim frompypi:pip install plafosimNOTE: The project is developed and tested only on Linux.Running a SimulationNOTE: Since PlaFoSim is a command-line interface (CLI) application, running PlaFoSim requires using a shell.QuickstartRun PlaFoSim with:plafosimYou can use PlaFoSim's help to get a list of available parameters:plafosim -h, --helpOr, run a simulation with the default configuration (-d):plafosim -dLive GUIYou can visualize the simulation via a simple live GUI based onsumo-gui, using the argumentgui:plafosim --guiA screenshot of PlaFoSim's live GUI showing 2 platoons and various individual vehicles. Copyright © 2021 IEEE.More options for the live GUI can be found within theGUI propertiessection of the help.NOTE: This requires installation ofSUMO(>=1.6.0) and declaration of theSUMO_HOMEvariable (seedocumentation).Advanced Simulation ControlYou can use a variety of different parameters to customize the scenario and the simulation itself.
E.g., use the parametervehiclesto configure the number of vehicles in the simulation:plafosim --vehicles 1000The available parameters are grouped into different categories:- road network properties
- vehicle properties
- trip properties
- communication properties
- platoon properties
- formation properties
- infrastructure properties
- simulation properties
- GUI properties
- result recording propertiesYou can find a list of available parameters for each category in the help:plafosim -h, --helpExamples# Configure a 100km freeway with ramps at every 10km
plafosim --road-length 100 --ramp-interval 10

# Configure random (normally distributed) desired driving speed of 130km/h
plafosim --random-desired-speed true --desired-speed 36

# Configure random trips for 500 vehicles
plafosim --vehicles 500 --random-depart-position true --random-arrival-position true --depart-desired true

# Pre fill the freeway with 1000 vehicles
plafosim --vehicles 1000 --pre-fill true

# Configure 50% of the vehicles with Advanced Cruise Control (ACC) and a headway time of 1.5s
plafosim --penetration 0.5 --acc-headway-time 1.5

# Enable a simple, distributed platoon formation algorithm [1] in order to form platoons every 30s
plafosim --formation-algorithm SpeedPosition --formation-strategy distributed --execution-interval 30Faster SimulationYou can speed up the simulation performance by enabling Python's optimizationPYTHONOPTIMIZE, e.g., in order to disable assertions:PYTHONOPTIMIZE=1 plafosimSee the Pythondocumentionfor more details.Re-Playing a SimulationThe simulation can write a trace file including the mobility details of every simulated vehicle (defaultresults_vehicle_traces.csv).
You can replay the simulation in the GUI (see above) based on the trace file by using the corresponding binary:plafosim-replay results_vehicle_traces.csvTo see all options of this script, run:plafosim-replay -h, --helpNOTE: This requires installation of SUMO (>=1.6.0) and declaration of theSUMO_HOMEvariable.Recording of Screenshots and Video from a SimulationPlaFoSim offers functionality to automatically record a screenshot of the GUI in every simulation step withplafosim --gui --screenshot-file screenshotThese screenshots can be used to create a video by using an integrated script based onffmpeg:plafosim-img2video 'screenshot_*.png' video.mp4NOTE: This requires installation of ffmpeg.DocumentationDocumentation is available via this README and via theofficial documentation.Extending PlaFoSimYou can extend and customize PlaFoSim flexibly by modifying its source code.
For this, you first need ot install it from source.Installing from SourceInstallpoetry:pip install poetryClone this repository:git clone https://github.com/heinovski/plafosim.gitNavigate to newly created directory of the cloned repository in the command-lineInstall PlaFoSim from source in editable mode:poetry installRun PlaFoSim in the virtual environment:poetry run plafosimYou can also activate the virtual enviroment first withpoetry shelland run the commands as usual (see above).Adding a new Formation AlgorithmIn order to add a new formation algorithm, you need to follow these steps:Create a new sub-class ofFormationAlgorithm(seeformation_algorithm.py) within the sub-directoryalgorithms.
You can use theDummyalgorithm (seealgorithms/dummy.py) as an example.Add specific arguments for your algorithm to the argument parser group within the new sub-class if necessary.You should now be able to use your new algorithm withplafosim --formation-algorithm dummy_algorithm_nameContributing to the ProjectIn order to contribute, please follow these steps:Install PlaFoSim from source (seeExtending PlaFoSim)Make desired changes and adjust the documentation if requiredRun the tests located intestsas well as the validation scripts located inscripts(see.drone.ymlfor details)Submit a Pull Request (PR)DocumentingWhen making changes to the code, make sure to add or adjust corresponding documentation in form of python docstrings.
Those should use the Numpy docstring format for Sphinx and follow thestyle guideby numpydoc to ensure consistency and compatibility.
See also thestyle guideby pandas.
You can build the documentation using Sphinxmake -C docs.TestingWhen adding methods and functions, make sure to add corresponding unit tests forpy.test.
The tests are located undertestsand can be executed with./scripts/run-pytest.sh.
This will also generate a test coverage report.ValidationTo validate the behavior of PlaFoSim, it is compared to SUMO 1.6.0 by means of simulation results (e.g., vehicle traces).
The corresponding scripts are located underscriptsand executed withn CI/CD pipelines.
You can have a look at.drone.ymlfor details regarding the execution.ProfilingYou can profile the runtime of PlaFoSim's code by usingcProfile:poetry run python -m cProfile -o profile.out -m plafosim.cli.plafosimYou can visualize the results of the profiling run by usingSnakeViz:snakeviz profile.outContributors & CitingPlaFoSim was originally designed and built byJulian Heinovskiwith the help ofDominik S. Buse.
It is currently maintained byJulian Heinovski.
The list of all authors can be foundhere.If you are working withPlaFoSim, we would appreciate a citation ofour paper:Julian Heinovski, Dominik S. Buse and Falko Dressler, "Scalable Simulation of Platoon Formation Maneuvers with PlaFoSim," Proceedings of 13th IEEE Vehicular Networking Conference (VNC 2021), Poster Session, Virtual Conference, November 2021, pp. 137–138.@inproceedings{heinovski2021scalable,author={Heinovski, Julian and Buse, Dominik S. and Dressler, Falko},doi={10.1109/VNC52810.2021.9644678},title={{Scalable Simulation of Platoon Formation Maneuvers with PlaFoSim}},pages={137--138},publisher={IEEE},issn={2157-9865},isbn={978-1-66544-450-7},address={Virtual Conference},booktitle={13th IEEE Vehicular Networking Conference (VNC 2021), Poster Session},month={11},year={2021},}LicensePlaFoSim is licensed under the terms of the GNU General Public License 3.0 or later.# Copyright (c) 2020-2024 Julian Heinovski <heinovski@ccs-labs.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.