1. Introduction¶
The calculator accepts as input the vehicle-specifications and parameters for modifying the execution of the WLTC cycle and spits-out the it gear-shifts of the vehicle, the attained speed-profile, and any warnings. It certainly does not calculate any CO2 emissions or other metrics.
An “execution” or a “run” of an experiment is depicted in the following diagram:
.-------------------. ______________ .-------------------.
/ Model / | Experiment | / Model(augmented) /
/-------------------/ |--------------| /-------------------/
/ +--vehicle / ==> | .----------.| ==> / +... /
/ +--params / | / WLTC-data/ | / +--cycle_run /
/ / |'----------' | / /
'------------------' |______________| '-------------------'
1.1. Install¶
Requires Python 3.3+.
You can install the project directly from the PyPI repository with pip. Notice that --pre is required, since all realeased packages so far were pre-release (-alpha) versions:
$ pip3 install wltp
Or you can build it from the latest sources (assuming you have a working installation of git):
$ git clone https://github.com/ankostis/wltp.git wltp
$ cd wltp
$ python3 setup.py install .
That way you get the complete source-tree of the project:
+--wltp/ ## (package) The python-code of the calculator
| +--cycles/ ## (package) The python-code for the WLTC data
| +--test/ ## (package) Test-cases and the wltp_db
| +--model ## (module) Describes the data for the calculation
| +--experiment ## (module) The calculator
+--docs/ ## Documentation folder
+--util/ ## Scripts for preprocessing WLTC data and the wltp_db
+--wltp.py ## (script) The cmd-line entry-point script for the calculator
+--README.rst
+--CHANGES.rst
+--LICENSE.txt
1.2. Python usage¶
Here is a quick-start example:
>>> from wltp import model
>>> from wltp.experiment import Experiment
>>> import json ## Just for pretty-printing model
>>> mdl = {
"vehicle": {
"mass": 1500,
"v_max": 195,
"p_rated": 100,
"n_rated": 5450,
"n_idle": 950,
"n_min": None, # Can be overriden by manufacturer.
"gear_ratios": [120.5, 75, 50, 43, 37, 32],
"resistance_coeffs":[100, 0.5, 0.04],
}
}
>>> processor = Experiment(mdl)
>>> mdl = processor.run()
>>> print(json.dumps(mdl['params'], indent=2))
{
"f_n_min_gear2": 0.9,
"v_stopped_threshold": 1,
"wltc_class": "class3b",
"f_n_min": 0.125,
"f_n_max": 1.2,
"f_downscale": 0,
"f_inertial": 1.1,
"f_n_clutch_gear2": [
1.15,
0.03
],
"f_safety_margin": 0.9
}
To access the time-based cycle-results it is better to use a pandas.DataFrame:
>>> import pandas as pd
>>> df = pd.DataFrame(mdl['cycle_run'])
>>> df.columns
Index(['clutch', 'driveability', 'gears', 'gears_orig', 'p_available', 'p_required', 'rpm', 'rpm_norm', 'v_class', 'v_real', 'v_target'], dtype='object')
>>> df.index.name = 't'
>>> print('Mean engine_speed: ', df.rpm.mean())
Mean engine_speed: 1917.0407829
>>> print(df.head())
clutch driveability gears gears_orig p_available p_required rpm \
t
0 False 0 0 9 0 950
1 False 0 0 9 0 950
2 False 0 0 9 0 950
3 False 0 0 9 0 950
4 False 0 0 9 0 950
rpm_norm v_class v_real v_target
t
0 0 0 29.6875 0
1 0 0 29.6875 0
2 0 0 29.6875 0
3 0 0 29.6875 0
4 0 0 29.6875 0
[5 rows x 11 columns]
>>> print(processor.driveability_report())
...
12: (a: X-->0)
13: g1: Revolutions too low!
14: g1: Revolutions too low!
...
30: (b2(2): 5-->4)
...
38: (c1: 4-->3)
39: (c1: 4-->3)
40: Rule e or g missed downshift(40: 4-->3) in acceleration?
...
42: Rule e or g missed downshift(42: 3-->2) in acceleration?
...
For information on the model-data, check the schema:
>>> print(json.dumps(model.model_schema(), indent=2))
{
"properties": {
"params": {
"properties": {
"f_n_min_gear2": {
"description": "Gear-2 is invalid when N :< f_n_min_gear2 * n_idle.",
"type": [
"number",
"null"
],
"default": 0.9
},
"v_stopped_threshold": {
"description": "Velocity (Km/h) under which (<=) to idle gear-shift (Annex 2-3.3, p71).",
"type": [
...
For more examples, download the sources and check the test-cases found at /wltp/test.
1.3. Cmd-line usage¶
Note
Not implemented in yet.
To get help:
$ python wltp --help ## to get generic help for cmd-line syntax
$ python wltp -M /vehicle ## to get help for specific model-paths
and then, assuming vehicle.csv is a CSV file with the vehicle parameters for which you want to override the n_idle only, run the following:
$ python wltp -v \
-I vehicle.csv file_frmt=SERIES model_path=/params header@=None \
-m /vehicle/n_idle:=850 \
-O cycle.csv model_path=/cycle_run
1.4. IPython usage¶
Note
Not implemented in yet.