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 /****************************************************************************/
7 // A BT receiver
8 /****************************************************************************/
9 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
10 // Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
11 /****************************************************************************/
12 //
13 // This file is part of SUMO.
14 // SUMO is free software: you can redistribute it and/or modify
15 // it under the terms of the GNU General Public License as published by
16 // the Free Software Foundation, either version 3 of the License, or
17 // (at your option) any later version.
18 //
19 /****************************************************************************/
20 #ifndef MSDevice_BTreceiver_h
21 #define MSDevice_BTreceiver_h
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include "MSDevice.h"
34 #include "MSDevice_BTsender.h"
35 #include <microsim/MSNet.h>
36 #include <utils/common/SUMOTime.h>
37 #include <utils/common/Command.h>
39 
40 
41 // ===========================================================================
42 // class declarations
43 // ===========================================================================
44 class SUMOVehicle;
45 
46 
47 // ===========================================================================
48 // class definitions
49 // ===========================================================================
56 class MSDevice_BTreceiver : public MSDevice {
57 public:
61  static void insertOptions(OptionsCont& oc);
62 
63 
74  static void buildVehicleDevices(SUMOVehicle& v, std::vector<MSDevice*>& into);
75 
76 
77 
78 public:
81 
82 
83 
86 
95  bool notifyEnter(SUMOVehicle& veh, Notification reason);
96 
97 
111  bool notifyMove(SUMOVehicle& veh, SUMOReal oldPos, SUMOReal newPos, SUMOReal newSpeed);
112 
113 
124  bool notifyLeave(SUMOVehicle& veh, SUMOReal lastPos, Notification reason);
126 
127 
128 
132  class MeetingPoint {
133  public:
145  MeetingPoint(SUMOReal _t, const Position& _observerPos, SUMOReal _observerSpeed,
146  const std::string& _observerLaneID, SUMOReal _observerLanePos,
147  const Position& _seenPos, SUMOReal _seenSpeed,
148  const std::string& _seenLaneID, SUMOReal _seenLanePos)
149  : t(_t), observerPos(_observerPos), observerSpeed(_observerSpeed), observerLaneID(_observerLaneID), observerLanePos(_observerLanePos),
150  seenPos(_seenPos), seenSpeed(_seenSpeed), seenLaneID(_seenLaneID), seenLanePos(_seenLanePos) {}
151 
154 
155  public:
163  std::string observerLaneID;
171  std::string seenLaneID;
174 
175  };
176 
177 
178 
182  class SeenDevice {
183  public:
187  SeenDevice(const MeetingPoint& meetingBegin_)
188  : meetingBegin(meetingBegin_), meetingEnd(meetingBegin_), lastView(meetingBegin_.t) {}
189 
192  for (std::vector<MeetingPoint*>::iterator i = recognitionPoints.begin(); i != recognitionPoints.end(); ++i) {
193  delete *i;
194  }
195  recognitionPoints.clear();
196  }
197 
198 
199  public:
207  std::vector<MeetingPoint*> recognitionPoints;
208 
209  };
210 
211 
212 
217  static void cleanUp(std::map<std::string, SeenDevice*>& c, std::map<std::string, std::vector<SeenDevice*> >& s);
218 
219 
220 
221 protected:
227  MSDevice_BTreceiver(SUMOVehicle& holder, const std::string& id, SUMOReal range);
228 
229 
230 
231 private:
234 
236  static bool myWasInitialised;
237 
238 
239 
243  class VehicleState {
244  public:
253  VehicleState(SUMOReal _time, SUMOReal _speed, SUMOReal _angle, const Position& _position, const std::string& _laneID, SUMOReal _lanePos)
254  : time(_time), speed(_speed), angle(_angle), position(_position), laneID(_laneID), lanePos(_lanePos) {}
255 
258 
268  std::string laneID;
271 
272  };
273 
274 
275 
279  class VehicleInformation : public Named {
280  public:
285  VehicleInformation(const std::string& id, const SUMOReal _range) : Named(id), range(_range), amOnNet(true), haveArrived(false) {}
286 
289 
290 
295  Boundary ret;
296  for (std::vector<VehicleState>::const_iterator i = updates.begin(); i != updates.end(); ++i) {
297  ret.add((*i).position);
298  }
299  return ret;
300  }
301 
304 
306  std::vector<VehicleState> updates;
307 
309  bool amOnNet;
310 
313 
315  std::map<std::string, SeenDevice*> currentlySeen;
316 
318  std::map<std::string, std::vector<SeenDevice*> > seen;
319 
320  private:
323 
326 
327  };
328 
329 
330 
334  class BTreceiverUpdate : public Command {
335  public:
338 
341 
346  SUMOTime execute(SUMOTime currentTime);
347 
348 
356  const Position& receiverPos, const Position& receiverD);
357 
358 
372  void enterRange(SUMOReal atOffset, const Position& thisPos, SUMOReal thisSpeed, const std::string& thisLaneID, SUMOReal thisLanePos,
373  const std::string& otherID, const Position& otherPos, SUMOReal otherSpeed, const std::string& otherLaneID, SUMOReal otherLanePos,
374  std::map<std::string, SeenDevice*>& currentlySeen);
375 
376 
392  void leaveRange(std::map<std::string, SeenDevice*>& currentlySeen, std::map<std::string, std::vector<SeenDevice*> >& seen,
393  const Position& thisPos, SUMOReal thisSpeed, const std::string& thisLaneID, SUMOReal thisLanePos,
394  const std::string& otherID, const Position& otherPos, SUMOReal otherSpeed, const std::string& otherLaneID, SUMOReal otherLanePos,
395  SUMOReal tOffset);
396 
397 
398 
399 
406  //SUMOReal recognizedAt(const std::string &otherID, SUMOReal tEnd, std::map<std::string, SeenDevice*> &currentlySeen);
407 
408 
422  void addRecognitionPoint(SUMOReal tEnd, const Position& thisPos, SUMOReal thisSpeed, const std::string& thisLaneID, SUMOReal thisLanePos,
423  const std::string& otherID, const Position& otherPos, SUMOReal otherSpeed, const std::string& otherLaneID, SUMOReal otherLanePos,
424  std::map<std::string, SeenDevice*>& currentlySeen);
425 
426 
432  void writeOutput(const std::string& id, const std::map<std::string, std::vector<SeenDevice*> >& seen,
433  bool allRecognitions);
434 
435 
436 
437 
438  };
439 
440 
443 
445  static std::map<std::string, VehicleInformation*> sVehicles;
446 
447 
448 
449 private:
452 
455 
456 
457 };
458 
459 #endif
460 
461 /****************************************************************************/
462