A lightweight microsimulation free-flow acceleration model(MFC) or co2mpas_driver is a model that is able to capture the vehicle acceleration dynamics accurately and consistently
Project description
Com2pas_driver: Try it live
Access this Binder at the following URL:
https://mybinder.org/v2/gh/JRCSTU/co2mpas_driver/master
Click the binder badge to try it live without installing anything. This will take you directly to JupyterLab where we used Jupyter notebook to present examples on how to use co2mpas_driver model (i.e., MFC) to simulate the driver behaviour of a vehicle.
co2mpas_driver
Python package used to implement a lightweight microsimulation free-flow acceleration model (MFC) that is able to capture the vehicle acceleration dynamics accurately and consistently, it provides a link between the model and the driver. The proposed model has been developed by the Joint Research Centre of the European Commission for more details https://journals.sagepub.com/doi/10.1177/0361198119838515
Installation
Install co2mpas_driver This package can be installed from source easily on any machine that has git and pip. You can install co2mpas_driver's most recent commit.
pip install git+https://github.com/JRCSTU/co2mpas_driver.git@75e619a
or from @master branch.
pip install git+https://github.com/JRCSTU/co2mpas_driver.git@master
Uninstall your package
pip uninstall co2mpas_driver
Usage
In this example we will use co2mpas_driver model in order to extract the drivers acceleration behavior as approaching the desired speed.
a. Setup
-
First, set up python, numpy, matplotlib.
set up python environment: numpy for numerical routines, and matplotlib for plotting
>>> import numpy as np >>> import matplotlib.pyplot as plt
-
Import dispatcher(dsp) from co2mpas_driver that contains functions and simulation model to process vehicle data and Import also schedula for selecting and executing functions. for more information on how to use schedula https://pypi.org/project/schedula/
>>> from co2mpas_driver import dsp >>> import schedula as sh
b. Load data
-
Load vehicle data for a specific vehicle from vehicles database
>>> db_path = 'EuroSegmentCar.csv'
-
Load user input parameters from an excel file
>>> input_path = 'sample.xlsx'
-
Sample time series
>>> sim_step = 0.1 #The simulation step in seconds >>> duration = 100 #Duration of the simulation in seconds >>> times = np.arange(0, duration + sim_step, sim_step)
-
Load user input parameters directly writing in your sample script
>>> inputs = { 'vehicle_id': 35135, # A sample car id from the database 'inputs': {'gear_shifting_style': 0.7, #The gear shifting style as described in the TRR paper 'starting_speed': 0, 'desired_velocity': 40, 'driver_style': 1}, # gear shifting can take value # from 0(timid driver) to 1(aggressive driver) 'time_series': {'times': times} }
c. Dispatcher
-
Dispatcher will select and execute the proper functions for the given inputs and the requested outputs
>>> core = dsp(dict(db_path=db_path, input_path=input_path, inputs=inputs), outputs=['outputs'], shrink=True)
-
Plot workflow of the core model from the dispatcher
>>> core.plot()
This will automatically open an internet browser and show the work flow of the core model as below. you can click all the rectangular boxes to see in detail sub models like load, model, write and plot.
The Load module
merged vehicle data for the vehicle_id used above
-
Load outputs of dispatcher Select the chosen dictionary key (outputs) from the given dictionary.
>>> outputs = sh.selector(['outputs'], sh.selector(['outputs'], core))
-
select the desired output
>>> output = sh.selector(['Curves', 'poly_spline', 'Start', 'Stop', 'gs', 'discrete_acceleration_curves', 'velocities', 'accelerations', 'transmission'], outputs['outputs'])
The final acceleration curves, the engine acceleration potential curves (poly_spline), before the calculation of the resistances and the limitation due to max possible acceleration (friction).
>>> curves, poly_spline, start, stop, gs, discrete_acceleration_curves, \ velocities, accelerations, transmission = \ output['Curves'], output['poly_spline'], output['Start'], output['Stop'], output['gs'], \ output['discrete_acceleration_curves'], output['velocities'], \ output['accelerations'], output['transmission'], \
curves: Final acceleration curves poly_spline: start and stop: Start and stop speed for each gear gs: discrete_acceleration_curves velocities: accelerations:
d. Plot
>>> plt.figure('Time-Speed')
>>> plt.plot(times, velocities)
>>> plt.grid()
>>> plt.figure('Speed-Acceleration')
>>> plt.plot(velocities, accelerations)
>>> plt.grid()
>>> plt.figure('Acceleration-Time')
>>> plt.plot(times, accelerations)
>>> plt.grid()
>>> plt.figure('Speed-Acceleration')
>>> for curve in discrete_acceleration_curves:
sp_bins = list(curve['x'])
acceleration = list(curve['y'])
plt.plot(sp_bins, acceleration, 'k')
>>> plt.show()
e. Results
Figure 1. Speed(m/s) versus time(s) graph over the desired speed range.
Acceleration(m/s*2) versus speed(m/s) graph
Figure 2. Acceleration per gear, the gear-shifting points and final acceleration potential of our selected vehicle over the desired speed range
Acceleration(m/s*2) versus speed graph(m/s)
Figure 3. The final acceleration potential of our selected vehicle over the desired speed range
Contributing
Pull requests and stars are very welcome.
For bugs and feature requests, please create an issue.
Release
1.0.2
Release date
2020-06-26
Repository
https://github.com/JRCSTU/co2mpas_driver
copyright
2015-2019 European Commission JRC https://ec.europa.eu/jrc/
pypi-repo
https://pypi.org/project/co2mpas_driver/
License
EUPL 1.1+ https://joinup.ec.europa.eu/software/page/eupl
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for co2mpas_driver-1.2.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e2b201b9960bf514f680871c12fb97fb9a74ec9bc974515a6220a5d180005c85 |
|
MD5 | fe698361a8712b356f55bb1f39c3ec2b |
|
BLAKE2b-256 | f5b4b79ea1b42f265355c39251b39a48e0926a14acc3790e96e5357145657bfa |