SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00010 // Definitions of SUMO vehicle classes and helper functions 00011 /****************************************************************************/ 00012 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/ 00013 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors 00014 /****************************************************************************/ 00015 // 00016 // This file is part of SUMO. 00017 // SUMO is free software: you can redistribute it and/or modify 00018 // it under the terms of the GNU General Public License as published by 00019 // the Free Software Foundation, either version 3 of the License, or 00020 // (at your option) any later version. 00021 // 00022 /****************************************************************************/ 00023 #ifndef SUMOVehicleClass_h 00024 #define SUMOVehicleClass_h 00025 00026 00027 // =========================================================================== 00028 // included modules 00029 // =========================================================================== 00030 #ifdef _MSC_VER 00031 #include <windows_config.h> 00032 #else 00033 #include <config.h> 00034 #endif 00035 00036 #include <string> 00037 #include <set> 00038 #include <limits> 00039 #include <utils/common/UtilExceptions.h> 00040 #include <utils/common/StringBijection.h> 00041 #include <utils/xml/SUMOXMLDefinitions.h> 00042 00043 // =========================================================================== 00044 // enum definitions 00045 // =========================================================================== 00050 enum SUMOVehicleShape { 00052 SVS_UNKNOWN, 00054 SVS_PEDESTRIAN, 00056 SVS_BICYCLE, 00058 SVS_MOTORCYCLE, 00060 SVS_PASSENGER, 00062 SVS_PASSENGER_SEDAN, 00064 SVS_PASSENGER_HATCHBACK, 00066 SVS_PASSENGER_WAGON, 00068 SVS_PASSENGER_VAN, 00070 SVS_DELIVERY, 00072 SVS_TRANSPORT, 00074 SVS_TRANSPORT_SEMITRAILER, 00076 SVS_TRANSPORT_1TRAILER, 00078 SVS_BUS, 00080 SVS_BUS_CITY, 00082 SVS_BUS_CITY_FLEXIBLE, 00084 SVS_BUS_OVERLAND, 00086 SVS_BUS_TROLLEY, 00088 SVS_RAIL, 00090 SVS_RAIL_LIGHT, 00092 SVS_RAIL_CITY, 00094 SVS_RAIL_SLOW, 00096 SVS_RAIL_FAST, 00098 SVS_RAIL_CARGO, 00100 SVS_E_VEHICLE, 00102 SVS_ANT 00103 }; 00104 00105 00106 00127 enum SUMOVehicleClass { 00128 SVC_UNKNOWN = 0, 00129 00131 00132 00134 SVC_PRIVATE = 1, 00136 SVC_PUBLIC_TRANSPORT = 2, 00138 SVC_PUBLIC_EMERGENCY = 4, 00140 SVC_PUBLIC_AUTHORITY = 8, 00142 SVC_PUBLIC_ARMY = 16, 00144 SVC_VIP = 32, 00146 SVC_IGNORING = 64, 00148 00149 00151 00152 00154 SVC_PASSENGER = 256, 00156 SVC_HOV = 512, 00158 SVC_TAXI = 1024, 00160 SVC_BUS = 2048, 00162 SVC_DELIVERY = 4096, 00164 SVC_TRANSPORT = 8192, 00166 SVC_LIGHTRAIL = 16384, 00168 SVC_CITYRAIL = 32768, 00170 SVC_RAIL_SLOW = 65536, 00172 SVC_RAIL_FAST = 131072, 00173 00175 SVC_MOTORCYCLE = 262144, 00177 SVC_BICYCLE = 524288, 00179 SVC_PEDESTRIAN = 1048576 00181 }; 00182 00183 extern const int SUMOVehicleClass_MAX; 00184 extern StringBijection<SUMOVehicleClass> SumoVehicleClassStrings; 00185 extern StringBijection<SUMOVehicleShape> SumoVehicleShapeStrings; 00186 00187 /* @brief bitset where each bit declares whether a certain SVC may use this edge/lane 00188 */ 00189 typedef int SVCPermissions; 00190 extern const SVCPermissions SVCFreeForAll; 00191 00192 00200 enum SUMOEmissionClass { 00201 SVE_UNKNOWN = -1, 00202 // heavy duty vehicles; 3 clusters 00203 SVE_HDV_3_1 = 0, 00204 SVE_HDV_3_2, 00205 SVE_HDV_3_3, 00206 // heavy duty vehicles; 6 clusters 00207 SVE_HDV_6_1, 00208 SVE_HDV_6_2, 00209 SVE_HDV_6_3, 00210 SVE_HDV_6_4, 00211 SVE_HDV_6_5, 00212 SVE_HDV_6_6, 00213 // heavy duty vehicles; 12 clusters 00214 SVE_HDV_12_1, 00215 SVE_HDV_12_2, 00216 SVE_HDV_12_3, 00217 SVE_HDV_12_4, 00218 SVE_HDV_12_5, 00219 SVE_HDV_12_6, 00220 SVE_HDV_12_7, 00221 SVE_HDV_12_8, 00222 SVE_HDV_12_9, 00223 SVE_HDV_12_10, 00224 SVE_HDV_12_11, 00225 SVE_HDV_12_12, 00226 // passenger & light duty vehicles; 7 clusters 00227 SVE_P_LDV_7_1, 00228 SVE_P_LDV_7_2, 00229 SVE_P_LDV_7_3, 00230 SVE_P_LDV_7_4, 00231 SVE_P_LDV_7_5, 00232 SVE_P_LDV_7_6, 00233 SVE_P_LDV_7_7, 00234 // passenger & light duty vehicles; 14 clusters 00235 SVE_P_LDV_14_1, 00236 SVE_P_LDV_14_2, 00237 SVE_P_LDV_14_3, 00238 SVE_P_LDV_14_4, 00239 SVE_P_LDV_14_5, 00240 SVE_P_LDV_14_6, 00241 SVE_P_LDV_14_7, 00242 SVE_P_LDV_14_8, 00243 SVE_P_LDV_14_9, 00244 SVE_P_LDV_14_10, 00245 SVE_P_LDV_14_11, 00246 SVE_P_LDV_14_12, 00247 SVE_P_LDV_14_13, 00248 SVE_P_LDV_14_14, 00249 // no emissions 00250 SVE_ZERO_EMISSIONS, 00251 // heavy duty vehicles, no accel; 3 clusters 00252 SVE_HDV_A0_3_1, 00253 SVE_HDV_A0_3_2, 00254 SVE_HDV_A0_3_3, 00255 // heavy duty vehicles, no accel; 6 clusters 00256 SVE_HDV_A0_6_1, 00257 SVE_HDV_A0_6_2, 00258 SVE_HDV_A0_6_3, 00259 SVE_HDV_A0_6_4, 00260 SVE_HDV_A0_6_5, 00261 SVE_HDV_A0_6_6, 00262 // heavy duty vehicles, no accel; 12 clusters 00263 SVE_HDV_A0_12_1, 00264 SVE_HDV_A0_12_2, 00265 SVE_HDV_A0_12_3, 00266 SVE_HDV_A0_12_4, 00267 SVE_HDV_A0_12_5, 00268 SVE_HDV_A0_12_6, 00269 SVE_HDV_A0_12_7, 00270 SVE_HDV_A0_12_8, 00271 SVE_HDV_A0_12_9, 00272 SVE_HDV_A0_12_10, 00273 SVE_HDV_A0_12_11, 00274 SVE_HDV_A0_12_12, 00275 // passenger & light duty vehicles, no accel; 7 clusters 00276 SVE_P_LDV_A0_7_1, 00277 SVE_P_LDV_A0_7_2, 00278 SVE_P_LDV_A0_7_3, 00279 SVE_P_LDV_A0_7_4, 00280 SVE_P_LDV_A0_7_5, 00281 SVE_P_LDV_A0_7_6, 00282 SVE_P_LDV_A0_7_7, 00283 // passenger & light duty vehicles, no accel; 14 clusters 00284 SVE_P_LDV_A0_14_1, 00285 SVE_P_LDV_A0_14_2, 00286 SVE_P_LDV_A0_14_3, 00287 SVE_P_LDV_A0_14_4, 00288 SVE_P_LDV_A0_14_5, 00289 SVE_P_LDV_A0_14_6, 00290 SVE_P_LDV_A0_14_7, 00291 SVE_P_LDV_A0_14_8, 00292 SVE_P_LDV_A0_14_9, 00293 SVE_P_LDV_A0_14_10, 00294 SVE_P_LDV_A0_14_11, 00295 SVE_P_LDV_A0_14_12, 00296 SVE_P_LDV_A0_14_13, 00297 SVE_P_LDV_A0_14_14 00298 }; 00299 00300 00301 00302 // =========================================================================== 00303 // method declarations 00304 // =========================================================================== 00305 00306 // --------------------------------------------------------------------------- 00307 // abstract vehicle class / purpose 00308 // --------------------------------------------------------------------------- 00309 /* @brief SUMOVehicleClass is meant to be OR'ed to combine information about vehicle 00310 * ownership and vehicle "size" into one int. 00311 * These OR'ed values cannot be translated directly into strings with toString(). 00312 * The names of all base values are concatenated with '|' as a separator. 00313 */ 00314 extern std::string getVehicleClassCompoundName(int id); 00315 00316 00321 extern std::string getAllowedVehicleClassNames(SVCPermissions permissions); 00322 00323 00328 extern std::vector<std::string> getAllowedVehicleClassNamesList(SVCPermissions permissions); 00329 00334 extern std::pair<std::string, bool> getPermissionEncoding(SVCPermissions permissions); 00335 00336 00342 extern SUMOVehicleClass getVehicleClassID(const std::string& name); 00343 00348 extern int getVehicleClassCompoundID(const std::string& name); 00349 00356 extern SVCPermissions parseVehicleClasses(const std::string& allowedS); 00357 00358 00361 extern bool canParseVehicleClasses(const std::string& classes); 00362 00372 extern SVCPermissions parseVehicleClasses(const std::string& allowedS, const std::string& disallowedS); 00373 00374 00378 extern SVCPermissions parseVehicleClasses(const std::vector<std::string> &allowedS); 00379 00380 00381 // --------------------------------------------------------------------------- 00382 // vehicle shape class 00383 // --------------------------------------------------------------------------- 00388 extern std::string getVehicleShapeName(SUMOVehicleShape id); 00389 00390 00395 extern SUMOVehicleShape getVehicleShapeID(const std::string& name); 00396 00397 00398 // --------------------------------------------------------------------------- 00399 // emission class 00400 // --------------------------------------------------------------------------- 00405 extern std::string getVehicleEmissionTypeName(SUMOEmissionClass id); 00406 00407 00412 extern SUMOEmissionClass getVehicleEmissionTypeID(const std::string& name) ; 00413 00414 00415 // --------------------------------------------------------------------------- 00416 // default vehicle type parameter 00417 // --------------------------------------------------------------------------- 00418 extern const std::string DEFAULT_VTYPE_ID; 00419 extern const SUMOReal DEFAULT_VEH_MAXSPEED; 00420 extern const SUMOReal DEFAULT_VEH_ACCEL; 00421 extern const SUMOReal DEFAULT_VEH_DECEL; 00422 extern const SUMOReal DEFAULT_VEH_SIGMA; 00423 extern const SUMOReal DEFAULT_VEH_LENGTH; 00424 extern const SUMOReal DEFAULT_VEH_MINGAP; 00425 extern const SUMOReal DEFAULT_VEH_TAU; 00426 extern const SUMOVehicleClass DEFAULT_VEH_CLASS; 00427 extern const SUMOReal DEFAULT_VEH_PROB; 00428 extern const SUMOReal DEFAULT_VEH_SPEEDFACTOR; 00429 extern const SUMOReal DEFAULT_VEH_SPEEDDEV; 00430 extern const SUMOReal DEFAULT_VEH_WIDTH; 00431 extern const SUMOReal DEFAULT_VEH_HEIGHT; 00432 extern const SumoXMLTag DEFAULT_VEH_FOLLOW_MODEL; 00433 extern const std::string DEFAULT_VEH_LANE_CHANGE_MODEL; 00434 extern const SUMOVehicleShape DEFAULT_VEH_SHAPE; 00435 00436 #endif 00437 00438 /****************************************************************************/ 00439