SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MSDevice_BTreceiver.h
Go to the documentation of this file.
1 /****************************************************************************/
8 // A BT receiver
9 /****************************************************************************/
10 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
11 // Copyright (C) 2013-2014 DLR (http://www.dlr.de/) and contributors
12 /****************************************************************************/
13 //
14 // This file is part of SUMO.
15 // SUMO is free software: you can redistribute it and/or modify
16 // it under the terms of the GNU General Public License as published by
17 // the Free Software Foundation, either version 3 of the License, or
18 // (at your option) any later version.
19 //
20 /****************************************************************************/
21 #ifndef MSDevice_BTreceiver_h
22 #define MSDevice_BTreceiver_h
23 
24 
25 // ===========================================================================
26 // included modules
27 // ===========================================================================
28 #ifdef _MSC_VER
29 #include <windows_config.h>
30 #else
31 #include <config.h>
32 #endif
33 
34 #include "MSDevice.h"
35 #include "MSDevice_BTsender.h"
36 #include <microsim/MSNet.h>
37 #include <utils/common/SUMOTime.h>
38 #include <utils/common/Command.h>
40 
41 
42 // ===========================================================================
43 // class declarations
44 // ===========================================================================
45 class SUMOVehicle;
46 
47 
48 // ===========================================================================
49 // class definitions
50 // ===========================================================================
57 class MSDevice_BTreceiver : public MSDevice {
58 public:
62  static void insertOptions(OptionsCont& oc);
63 
64 
75  static void buildVehicleDevices(SUMOVehicle& v, std::vector<MSDevice*>& into);
76 
77 
78 
79 public:
82 
83 
84 
87 
96  bool notifyEnter(SUMOVehicle& veh, Notification reason);
97 
98 
112  bool notifyMove(SUMOVehicle& veh, SUMOReal oldPos, SUMOReal newPos, SUMOReal newSpeed);
113 
114 
125  bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos, Notification reason);
127 
128 
129 
133  class MeetingPoint {
134  public:
146  MeetingPoint(SUMOReal _t, const Position& _observerPos, SUMOReal _observerSpeed,
147  const std::string& _observerLaneID, SUMOReal _observerLanePos,
148  const Position& _seenPos, SUMOReal _seenSpeed,
149  const std::string& _seenLaneID, SUMOReal _seenLanePos)
150  : t(_t), observerPos(_observerPos), observerSpeed(_observerSpeed), observerLaneID(_observerLaneID), observerLanePos(_observerLanePos),
151  seenPos(_seenPos), seenSpeed(_seenSpeed), seenLaneID(_seenLaneID), seenLanePos(_seenLanePos) {}
152 
155 
156  public:
164  std::string observerLaneID;
172  std::string seenLaneID;
175 
176  };
177 
178 
179 
183  class SeenDevice {
184  public:
188  SeenDevice(const MeetingPoint& meetingBegin_)
189  : meetingBegin(meetingBegin_), meetingEnd(meetingBegin_), lastView(meetingBegin_.t) {}
190 
193  for (std::vector<MeetingPoint*>::iterator i = recognitionPoints.begin(); i != recognitionPoints.end(); ++i) {
194  delete *i;
195  }
196  recognitionPoints.clear();
197  }
198 
199 
200  public:
208  std::vector<MeetingPoint*> recognitionPoints;
209 
210  };
211 
212 
213 
218  static void cleanUp(std::map<std::string, SeenDevice*>& c, std::map<std::string, std::vector<SeenDevice*> >& s);
219 
220 
221 
222 protected:
228  MSDevice_BTreceiver(SUMOVehicle& holder, const std::string& id, SUMOReal range);
229 
230 
231 
232 private:
235 
237  static bool myWasInitialised;
238 
239 
240 
244  class VehicleState {
245  public:
254  VehicleState(SUMOReal _time, SUMOReal _speed, SUMOReal _angle, const Position& _position, const std::string& _laneID, SUMOReal _lanePos)
255  : time(_time), speed(_speed), angle(_angle), position(_position), laneID(_laneID), lanePos(_lanePos) {}
256 
259 
269  std::string laneID;
272 
273  };
274 
275 
276 
280  class VehicleInformation : public Named {
281  public:
286  VehicleInformation(const std::string& id, const SUMOReal _range) : Named(id), range(_range), amOnNet(true), haveArrived(false) {}
287 
290 
291 
296  Boundary ret;
297  for (std::vector<VehicleState>::const_iterator i = updates.begin(); i != updates.end(); ++i) {
298  ret.add((*i).position);
299  }
300  return ret;
301  }
302 
305 
307  std::vector<VehicleState> updates;
308 
310  bool amOnNet;
311 
314 
316  std::map<std::string, SeenDevice*> currentlySeen;
317 
319  std::map<std::string, std::vector<SeenDevice*> > seen;
320 
321  private:
324 
327 
328  };
329 
330 
331 
335  class BTreceiverUpdate : public Command {
336  public:
339 
342 
347  SUMOTime execute(SUMOTime currentTime);
348 
349 
357  const Position& receiverPos, const Position& receiverD);
358 
359 
373  void enterRange(SUMOReal atOffset, const Position& thisPos, SUMOReal thisSpeed, const std::string& thisLaneID, SUMOReal thisLanePos,
374  const std::string& otherID, const Position& otherPos, SUMOReal otherSpeed, const std::string& otherLaneID, SUMOReal otherLanePos,
375  std::map<std::string, SeenDevice*>& currentlySeen);
376 
377 
393  void leaveRange(std::map<std::string, SeenDevice*>& currentlySeen, std::map<std::string, std::vector<SeenDevice*> >& seen,
394  const Position& thisPos, SUMOReal thisSpeed, const std::string& thisLaneID, SUMOReal thisLanePos,
395  const std::string& otherID, const Position& otherPos, SUMOReal otherSpeed, const std::string& otherLaneID, SUMOReal otherLanePos,
396  SUMOReal tOffset);
397 
398 
399 
400 
413  void addRecognitionPoint(const SUMOReal tEnd, const Position& thisPos, const SUMOReal thisSpeed, const std::string& thisLaneID, const SUMOReal thisLanePos,
414  const Position& otherPos, const SUMOReal otherSpeed, const std::string& otherLaneID, const SUMOReal otherLanePos,
415  SeenDevice* otherDevice) const;
416 
417 
423  void writeOutput(const std::string& id, const std::map<std::string, std::vector<SeenDevice*> >& seen,
424  bool allRecognitions);
425 
426 
427 
428 
429  };
430 
431 
434 
436  static std::map<std::string, VehicleInformation*> sVehicles;
437 
438 
439 
440 private:
443 
446 
447 
448 };
449 
450 #endif
451 
452 /****************************************************************************/
453 
Position observerPos
The position the observer had at the time.
void updateVisibility(VehicleInformation &receiver, MSDevice_BTsender::VehicleInformation &sender, const Position &receiverPos, const Position &receiverD)
Rechecks the visibility for a given receiver/sender pair.
VehicleInformation(const std::string &id, const SUMOReal _range)
Constructor.
std::string seenLaneID
The lane the vehicle was at.
bool haveArrived
Whether the vehicle was removed from the simulation.
VehicleState(SUMOReal _time, SUMOReal _speed, SUMOReal _angle, const Position &_position, const std::string &_laneID, SUMOReal _lanePos)
Constructor.
SUMOReal seenSpeed
The speed the vehicle had at the time.
SeenDevice(const MeetingPoint &meetingBegin_)
Constructor.
Notification
Definition of a vehicle state.
std::vector< MeetingPoint * > recognitionPoints
List of recognition points.
static MTRand sRecognitionRNG
A random number generator used to determine whether the opposite was recognized.
SUMOReal observerLanePos
The position at the lane of the observer.
VehicleInformation & operator=(const VehicleInformation &)
Invalidated assignment operator.
MSDevice_BTreceiver & operator=(const MSDevice_BTreceiver &)
Invalidated assignment operator.
bool notifyLeave(SUMOVehicle &veh, SUMOReal lastPos, Notification reason)
Moves (the known) vehicle from running to arrived vehicles' list.
SUMOReal lastView
Last recognition point.
MeetingPoint meetingEnd
Description of the meeting's end.
Base (microsim) event class.
Definition: Command.h:61
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
std::map< std::string, std::vector< SeenDevice * > > seen
The past episodes of removed vehicle.
SUMOReal t
The time of the meeting.
std::string observerLaneID
The lane the observer was at.
Position seenPos
The position the seen vehicle had at the time.
SUMOReal myRange
The range of the device.
Class representing a single seen device.
Representation of a vehicle.
Definition: SUMOVehicle.h:64
static bool myWasInitialised
Whether the bt-system was already initialised.
SUMOReal lanePos
The position at the lane of the vehicle.
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
SUMOReal time
The current time.
void writeOutput(const std::string &id, const std::map< std::string, std::vector< SeenDevice * > > &seen, bool allRecognitions)
Writes the output.
Position position
The position of the vehicle.
static void cleanUp(std::map< std::string, SeenDevice * > &c, std::map< std::string, std::vector< SeenDevice * > > &s)
Clears the given containers deleting the stored items.
bool notifyEnter(SUMOVehicle &veh, Notification reason)
Adds the vehicle to running vehicles if it (re-) enters the network.
~MSDevice_BTreceiver()
Destructor.
SUMOTime execute(SUMOTime currentTime)
Performs the update.
static std::map< std::string, VehicleInformation * > sVehicles
The list of arrived receivers.
Base class for objects which have an id.
Definition: Named.h:45
Stores the information of a vehicle.
Abstract in-vehicle device.
Definition: MSDevice.h:69
Holds the information about exact positions/speeds/time of the begin/end of a meeting.
void add(SUMOReal x, SUMOReal y)
Makes the boundary include the given coordinate.
Definition: Boundary.cpp:76
Boundary getBoxBoundary() const
Returns the boundary of passed positions.
void addRecognitionPoint(const SUMOReal tEnd, const Position &thisPos, const SUMOReal thisSpeed, const std::string &thisLaneID, const SUMOReal thisLanePos, const Position &otherPos, const SUMOReal otherSpeed, const std::string &otherLaneID, const SUMOReal otherLanePos, SeenDevice *otherDevice) const
Adds a point of recognition.
void enterRange(SUMOReal atOffset, const Position &thisPos, SUMOReal thisSpeed, const std::string &thisLaneID, SUMOReal thisLanePos, const std::string &otherID, const Position &otherPos, SUMOReal otherSpeed, const std::string &otherLaneID, SUMOReal otherLanePos, std::map< std::string, SeenDevice * > &currentlySeen)
Informs the receiver about a sender entering it's radius.
std::map< std::string, SeenDevice * > currentlySeen
The map of devices seen by the vehicle at removal time.
std::vector< VehicleState > updates
List of position updates during last step.
A storage for options typed value containers)
Definition: OptionsCont.h:108
const SUMOReal range
Recognition range of the vehicle.
SUMOReal seenLanePos
The position at the lane of the vehicle.
MSDevice_BTreceiver(SUMOVehicle &holder, const std::string &id, SUMOReal range)
Constructor.
MeetingPoint meetingBegin
Description of the meeting's begin.
#define SUMOReal
Definition: config.h:215
Stores the information of a vehicle.
SUMOReal speed
The speed of the vehicle.
bool amOnNet
Whether the vehicle is within the simulated network.
MeetingPoint(SUMOReal _t, const Position &_observerPos, SUMOReal _observerSpeed, const std::string &_observerLaneID, SUMOReal _observerLanePos, const Position &_seenPos, SUMOReal _seenSpeed, const std::string &_seenLaneID, SUMOReal _seenLanePos)
Constructor.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSDevice * > &into)
Build devices for the given vehicle, if needed.
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_BTreceiver-options.
bool notifyMove(SUMOVehicle &veh, SUMOReal oldPos, SUMOReal newPos, SUMOReal newSpeed)
Checks whether the reminder still has to be notified about the vehicle moves.
void leaveRange(std::map< std::string, SeenDevice * > &currentlySeen, std::map< std::string, std::vector< SeenDevice * > > &seen, const Position &thisPos, SUMOReal thisSpeed, const std::string &thisLaneID, SUMOReal thisLanePos, const std::string &otherID, const Position &otherPos, SUMOReal otherSpeed, const std::string &otherLaneID, SUMOReal otherLanePos, SUMOReal tOffset)
Removes the sender from the currently seen devices to past episodes.
SUMOReal observerSpeed
The speed the observer had at the time.
SUMOReal angle
The angle of the vehicle.
std::string laneID
The lane the vehicle was at.