Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MSDevice.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2013-2023 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
19// Abstract in-vehicle device
20/****************************************************************************/
21#include <config.h>
22
25#include <microsim/MSVehicle.h>
28#include "MSDevice.h"
29#include "MSDevice_Vehroutes.h"
30#include "MSDevice_Tripinfo.h"
31#include "MSDevice_Routing.h"
32#include "MSDevice_Emissions.h"
33#include "MSDevice_BTreceiver.h"
34#include "MSDevice_BTsender.h"
35#include "MSDevice_Example.h"
37#include "MSDevice_Battery.h"
38#include "MSDevice_SSM.h"
39#include "MSDevice_ToC.h"
41#include "MSDevice_Bluelight.h"
42#include "MSDevice_FCD.h"
43#include "MSDevice_Taxi.h"
44#include "MSDevice_GLOSA.h"
45#include "MSDevice_ElecHybrid.h"
48#include "MSRoutingEngine.h"
49#include "MSDevice_Friction.h"
50
51
52// ===========================================================================
53// static member variables
54// ===========================================================================
55std::map<std::string, std::set<std::string> > MSDevice::myExplicitIDs;
56SumoRNG MSDevice::myEquipmentRNG("deviceEquipment");
57
58// ===========================================================================
59// debug flags
60// ===========================================================================
61//#define DEBUG_DEVICE_PARAMS
62
63
64// ===========================================================================
65// method definitions
66// ===========================================================================
67// ---------------------------------------------------------------------------
68// static initialisation methods
69// ---------------------------------------------------------------------------
70void
96
97
98bool
100 bool ok = true;
102 return ok;
103}
104
105
106void
128
129
130void
137
138
139void
146
147void
148MSDevice::insertDefaultAssignmentOptions(const std::string& deviceName, const std::string& optionsTopic, OptionsCont& oc, const bool isPerson) {
149 const std::string prefix = (isPerson ? "person-device." : "device.") + deviceName;
150 const std::string object = isPerson ? "person" : "vehicle";
151 oc.doRegister(prefix + ".probability", new Option_Float(-1.0));// (default: no need to call RNG)
152 oc.addDescription(prefix + ".probability", optionsTopic, "The probability for a " + object + " to have a '" + deviceName + "' device");
153
154 oc.doRegister(prefix + ".explicit", new Option_StringVector());
155 oc.addSynonyme(prefix + ".explicit", prefix + ".knownveh", true);
156 oc.addDescription(prefix + ".explicit", optionsTopic, "Assign a '" + deviceName + "' device to named " + object + "s");
157
158 oc.doRegister(prefix + ".deterministic", new Option_Bool(false));
159 oc.addDescription(prefix + ".deterministic", optionsTopic, "The '" + deviceName + "' devices are set deterministic using a fraction of 1000");
160}
161
162
163void
165 WRITE_WARNINGF(TL("Device '%' cannot save state"), getID());
166}
167
168
169void
171}
172
173
174std::string
175MSDevice::getStringParam(const SUMOVehicle& v, const OptionsCont& oc, std::string paramName, std::string deflt, bool required) {
176 const std::string key = "device." + paramName;
177 if (v.getParameter().knowsParameter(key)) {
178 return v.getParameter().getParameter(key, "");
179 } else if (v.getVehicleType().getParameter().knowsParameter(key)) {
180 return v.getVehicleType().getParameter().getParameter(key, "");
181 } else {
182 if (oc.exists(key) && oc.isSet(key)) {
183 return oc.getValueString(key);
184 } else {
185 if (required) {
186 throw ProcessError("Missing parameter '" + key + "' for vehicle '" + v.getID());
187 } else {
188#ifdef DEBUG_DEVICE_PARAMS
189 std::cout << "vehicle '" << v.getID() << "' does not supply vehicle parameter '" + key + "'. Using default of '" << result << "'\n";
190#endif
191 return deflt;
192 }
193 }
194 }
195}
196
197
198double
199MSDevice::getFloatParam(const SUMOVehicle& v, const OptionsCont& oc, std::string paramName, double deflt, bool required) {
200 const std::string key = "device." + paramName;
201 std::string val = getStringParam(v, oc, paramName, toString(deflt), required);
202 try {
203 return StringUtils::toDouble(val);
204 } catch (...) {
205 WRITE_ERRORF(TL("Invalid float value '%'for parameter '%'"), val, key);
206 return deflt;
207 }
208}
209
210
211bool
212MSDevice::getBoolParam(const SUMOVehicle& v, const OptionsCont& oc, std::string paramName, bool deflt, bool required) {
213 const std::string key = "device." + paramName;
214 std::string val = getStringParam(v, oc, paramName, toString(deflt), required);
215 try {
216 return StringUtils::toBool(val);
217 } catch (...) {
218 WRITE_ERRORF(TL("Invalid bool value '%'for parameter '%'"), val, key);
219 return deflt;
220 }
221}
222
223
225MSDevice::getTimeParam(const SUMOVehicle& v, const OptionsCont& oc, std::string paramName, SUMOTime deflt, bool required) {
226 const std::string key = "device." + paramName;
227 std::string val = getStringParam(v, oc, paramName, toString(deflt), required);
228 try {
229 return string2time(val);
230 } catch (...) {
231 WRITE_ERRORF(TL("Invalid time value '%'for parameter '%'"), val, key);
232 return deflt;
233 }
234}
235
236
237/****************************************************************************/
long long int SUMOTime
Definition GUI.h:36
#define WRITE_WARNINGF(...)
Definition MsgHandler.h:271
#define WRITE_ERRORF(...)
Definition MsgHandler.h:280
#define TL(string)
Definition MsgHandler.h:287
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
Definition SUMOTime.cpp:46
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Example-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into, MSDevice_StationFinder *sf)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Bluelight-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_DriverState-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_ElecHybrid-options.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Emissions-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Example-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void cleanup()
resets the edge filter
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_FCD-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Friction-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_GLOSA-options.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Routing-options.
static bool checkOptions(OptionsCont &oc)
checks MSDevice_Routing-options
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_SSM-options.
A device which triggers rerouting to nearby charging stations.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_StationFinder-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void cleanup()
resets counters
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Taxi-options.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_ToC-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void cleanup()
resets counters
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_Tripinfo-options.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_FCD-options.
static MSDevice_Vehroutes * buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into, int maxRoutes=std::numeric_limits< int >::max())
Build devices for the given vehicle, if needed.
virtual void loadState(const SUMOSAXAttributes &attrs)
Loads the state of the device from the given description.
Definition MSDevice.cpp:170
virtual const std::string deviceName() const =0
return the name for this type of device
static SUMOTime getTimeParam(const SUMOVehicle &v, const OptionsCont &oc, std::string paramName, SUMOTime deflt, bool required=false)
Definition MSDevice.cpp:225
static bool getBoolParam(const SUMOVehicle &v, const OptionsCont &oc, std::string paramName, bool deflt, bool required=false)
Definition MSDevice.cpp:212
virtual void saveState(OutputDevice &out) const
Saves the state of the device.
Definition MSDevice.cpp:164
static double getFloatParam(const SUMOVehicle &v, const OptionsCont &oc, std::string paramName, double deflt, bool required=false)
Definition MSDevice.cpp:199
static void insertOptions(OptionsCont &oc)
Inserts options for building devices.
Definition MSDevice.cpp:71
static SumoRNG myEquipmentRNG
A random number generator used to choose from vtype/route distributions and computing the speed facto...
Definition MSDevice.h:188
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
Definition MSDevice.cpp:107
static void insertDefaultAssignmentOptions(const std::string &deviceName, const std::string &optionsTopic, OptionsCont &oc, const bool isPerson=false)
Adds common command options that allow to assign devices to vehicles.
Definition MSDevice.cpp:148
static std::map< std::string, std::set< std::string > > myExplicitIDs
vehicles which explicitly carry a device, sorted by device, first
Definition MSDevice.h:185
static bool checkOptions(OptionsCont &oc)
check device-specific options
Definition MSDevice.cpp:99
static void cleanupAll()
perform cleanup for all devices
Definition MSDevice.cpp:140
static std::string getStringParam(const SUMOVehicle &v, const OptionsCont &oc, std::string paramName, std::string deflt, bool required=false)
Definition MSDevice.cpp:175
static void buildTransportableDevices(MSTransportable &p, std::vector< MSTransportableDevice * > &into)
Build devices for the given person, if needed.
Definition MSDevice.cpp:131
static void cleanup()
deletes the router instance
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_BTreceiver-options.
static void buildDevices(MSTransportable &t, std::vector< MSTransportableDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_BTsender-options.
static void buildDevices(MSTransportable &t, std::vector< MSTransportableDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSTransportableDevice_FCD-options.
static void buildDevices(MSTransportable &t, std::vector< MSTransportableDevice * > &into)
Build devices for the given vehicle, if needed.
static void buildDevices(MSTransportable &p, std::vector< MSTransportableDevice * > &into)
Build devices for the given person, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSTransportableDevice_Routing-options.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_BTreceiver-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_BTsender-options.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
const SUMOVTypeParameter & getParameter() const
const std::string & getID() const
Returns the id.
Definition Named.h:74
A storage for options typed value containers)
Definition OptionsCont.h:89
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
void addSynonyme(const std::string &name1, const std::string &name2, bool isDeprecated=false)
Adds a synonyme for an options name (any order)
void doRegister(const std::string &name, Option *o)
Adds an option under the given name.
bool exists(const std::string &name) const
Returns the information whether the named option is known.
std::string getValueString(const std::string &name) const
Returns the string-value of the named option (all options)
Static storage of an output device and its base (abstract) implementation.
virtual const std::string getParameter(const std::string &key, const std::string defaultValue="") const
Returns the value for a given key.
bool knowsParameter(const std::string &key) const
Returns whether the parameter is known.
Encapsulated SAX-Attributes.
virtual const MSVehicleType & getVehicleType() const =0
Returns the object's "vehicle" type.
virtual const SUMOVehicleParameter & getParameter() const =0
Returns the vehicle's parameter (including departure definition)
Representation of a vehicle.
Definition SUMOVehicle.h:62
static double toDouble(const std::string &sData)
converts a string into the double value described by it by calling the char-type converter
static bool toBool(const std::string &sData)
converts a string into the bool value described by it by calling the char-type converter