44 typedef std::map<const MSLane*, std::pair<double, double> >
LaneCoverageInfo;
54 const double range,
const int domain)
77 #define LANE_RTREE_QUAL RTree<MSLane*, MSLane, float, 2, LaneStoringVisitor> 79 inline float LANE_RTREE_QUAL::RectSphericalVolume(Rect* a_rect) {
81 const float extent0 = a_rect->m_max[0] - a_rect->m_min[0];
82 const float extent1 = a_rect->m_max[1] - a_rect->m_min[1];
83 return .78539816f * (extent0 * extent0 + extent1 * extent1);
87 inline LANE_RTREE_QUAL::Rect LANE_RTREE_QUAL::CombineRect(Rect* a_rectA, Rect* a_rectB) {
88 ASSERT(a_rectA && a_rectB);
90 newRect.m_min[0] =
rtree_min(a_rectA->m_min[0], a_rectB->m_min[0]);
91 newRect.m_max[0] =
rtree_max(a_rectA->m_max[0], a_rectB->m_max[0]);
92 newRect.m_min[1] =
rtree_min(a_rectA->m_min[1], a_rectB->m_min[1]);
93 newRect.m_max[1] =
rtree_max(a_rectA->m_max[1], a_rectB->m_max[1]);
105 static void subscribe(
const int commandId,
const std::string&
id,
const std::vector<int>& variables,
106 const double beginTime,
const double endTime,
const int contextDomain = 0,
const double range = 0.);
108 static void handleSubscriptions(
const SUMOTime t);
119 static MSEdge* getEdge(
const std::string& edgeID);
120 static const MSLane* getLaneChecking(
const std::string& edgeID,
int laneIndex,
double pos);
121 static std::pair<MSLane*, double> convertCartesianToRoadMap(
Position pos);
123 static void findObjectShape(
int domain,
const std::string&
id,
PositionVector& shape);
125 static void collectObjectsInRange(
int domain,
const PositionVector& shape,
double range, std::set<std::string>& into);
133 static void applySubscriptionFilters(
const Subscription& s, std::set<std::string>& objIDs);
135 static void setRemoteControlled(
MSVehicle* v,
Position xyPos,
MSLane* l,
double pos,
double posLat,
double angle,
138 static void setRemoteControlled(
MSPerson* p,
Position xyPos,
MSLane* l,
double pos,
double posLat,
double angle,
141 static void postProcessRemoteControl();
143 static void cleanup();
145 static void registerVehicleStateListener();
147 static const std::vector<std::string>& getVehicleStateChanges(
const MSNet::VehicleState state);
149 static void clearVehicleStates();
153 static bool moveToXYMap(
const Position& pos,
double maxRouteDistance,
bool mayLeaveNetwork,
const std::string& origID,
const double angle,
154 double speed,
const ConstMSEdgeVector& currentRoute,
const int routePosition,
MSLane* currentLane,
double currentLanePos,
bool onRoad,
157 static bool moveToXYMap_matchingRoutePosition(
const Position& pos,
const std::string& origID,
159 double& bestDistance,
MSLane** lane,
double& lanePos,
int& routeOffset);
161 static bool findCloserLane(
const MSEdge* edge,
const Position& pos,
double& bestDistance,
MSLane** lane);
165 LaneUtility(
double dist_,
double perpendicularDist_,
double lanePos_,
double angleDiff_,
bool ID_,
166 bool onRoute_,
bool sameEdge_,
const MSEdge* prevEdge_,
const MSEdge* nextEdge_) :
167 dist(dist_), perpendicularDist(perpendicularDist_), lanePos(lanePos_), angleDiff(angleDiff_), ID(ID_),
168 onRoute(onRoute_), sameEdge(sameEdge_), prevEdge(prevEdge_), nextEdge(nextEdge_) {}
187 void setContext(
const std::string& refID);
188 bool wrapDouble(
const std::string& objID,
const int variable,
const double value);
189 bool wrapInt(
const std::string& objID,
const int variable,
const int value);
190 bool wrapString(
const std::string& objID,
const int variable,
const std::string& value);
191 bool wrapStringList(
const std::string& objID,
const int variable,
const std::vector<std::string>& value);
192 bool wrapPosition(
const std::string& objID,
const int variable,
const TraCIPosition& value);
193 bool wrapColor(
const std::string& objID,
const int variable,
const TraCIColor& value);
204 static void handleSingleSubscription(
const Subscription& s);
211 static void fuseLaneCoverage(std::shared_ptr<LaneCoverageInfo> aggregatedLaneCoverage,
const std::shared_ptr<LaneCoverageInfo> newLaneCoverage);
225 static std::map<int, std::shared_ptr<VariableWrapper> >
myWrapper;
std::map< std::string, TraCIResults > SubscriptionResults
{object->{variable->value}}
Representation of a vehicle in the micro simulation.
Representation of a subscription.
Interface for objects listening to vehicle state changes.
LaneUtility(double dist_, double perpendicularDist_, double lanePos_, double angleDiff_, bool ID_, bool onRoute_, bool sameEdge_, const MSEdge *prevEdge_, const MSEdge *nextEdge_)
std::map< MSNet::VehicleState, std::vector< std::string > > myVehicleStateChanges
Changes in the states of simulated vehicles.
static LANE_RTREE_QUAL * myLaneTree
A storage of lanes.
std::map< std::string, SubscriptionResults > ContextSubscriptionResults
ContextSubscriptionResults myContextResults
std::vector< const MSEdge * > ConstMSEdgeVector
SubscriptionResults & myActiveResults
static std::map< std::string, MSPerson * > myRemoteControlledPersons
static VehicleStateListener myVehicleStateListener
Changes in the states of simulated vehicles.
LaneStoringVisitor & operator=(const LaneStoringVisitor &src)
invalidated assignment operator
LaneStoringVisitor(std::set< std::string > &ids, const PositionVector &shape, const double range, const int domain)
Constructor.
A road/street connecting two junctions.
Representation of a vehicle.
static std::vector< Subscription > mySubscriptions
The list of known, still valid subscriptions.
A point in 2D or 3D with translation and scaling methods.
C++ TraCI client API implementation.
void add(const MSLane *const l) const
Adds the given object to the container.
SubscriptionResults myResults
VehicleState
Definition of a vehicle state.
std::set< std::string > & myIDs
The container.
const PositionVector & myShape
static std::map< int, std::shared_ptr< VariableWrapper > > myWrapper
Map of commandIds -> their executors; applicable if the executor applies to the method footprint...
std::map< const MSLane *, std::pair< double, double > > LaneCoverageInfo
static std::map< int, NamedRTree * > myObjects
A storage of objects.
static std::map< std::string, MSVehicle * > myRemoteControlledVehicles
~LaneStoringVisitor()
Destructor.
Representation of a lane in the micro simulation.