private static void CreatePlayer(int TeamNumber, int RobotNumber) { int robotId = TeamNumber + RobotNumber; var strategyManager = new StrategyManager.StrategyManager(robotId); var waypointGenerator = new WaypointGenerator(robotId); var trajectoryPlanner = new TrajectoryPlanner(robotId); var robotPilot = new RobotPilot.RobotPilot(robotId); var localWorldMapManager = new LocalWorldMapManager(robotId, TeamNumber); var lidarSimulator = new LidarSimulator.LidarSimulator(robotId); var perceptionSimulator = new PerceptionSimulator(robotId); //Liens entre modules strategyManager.OnDestinationEvent += waypointGenerator.OnDestinationReceived; strategyManager.OnHeatMapEvent += waypointGenerator.OnStrategyHeatMapReceived; waypointGenerator.OnWaypointEvent += trajectoryPlanner.OnWaypointReceived; trajectoryPlanner.OnSpeedConsigneEvent += physicalSimulator.SetRobotSpeed; physicalSimulator.OnPhysicalRobotPositionEvent += trajectoryPlanner.OnPhysicalPositionReceived; physicalSimulator.OnPhysicicalObjectListLocationEvent += perceptionSimulator.OnPhysicalObjectListLocationReceived; physicalSimulator.OnPhysicalRobotPositionEvent += perceptionSimulator.OnPhysicalRobotPositionReceived; physicalSimulator.OnPhysicalBallPositionEvent += perceptionSimulator.OnPhysicalBallPositionReceived; perceptionSimulator.OnPerceptionEvent += localWorldMapManager.OnPerceptionReceived; lidarSimulator.OnSimulatedLidarEvent += localWorldMapManager.OnRawLidarDataReceived; strategyManager.OnDestinationEvent += localWorldMapManager.OnDestinationReceived; waypointGenerator.OnWaypointEvent += localWorldMapManager.OnWaypointReceived; //strategyManager.OnHeatMapEvent += localWorldMapManager.OnHeatMapReceived; waypointGenerator.OnHeatMapEvent += localWorldMapManager.OnHeatMapReceived; if (TeamNumber == (int)TeamId.Team1) { localWorldMapManager.OnLocalWorldMapEvent += globalWorldMapManagerTeam1.OnLocalWorldMapReceived; globalWorldMapManagerTeam1.OnGlobalWorldMapEvent += strategyManager.OnGlobalWorldMapReceived; globalWorldMapManagerTeam1.OnGlobalWorldMapEvent += waypointGenerator.OnGlobalWorldMapReceived; globalWorldMapManagerTeam1.OnGlobalWorldMapEvent += perceptionSimulator.OnGlobalWorldMapReceived; } else if (TeamNumber == (int)TeamId.Team2) { localWorldMapManager.OnLocalWorldMapEvent += globalWorldMapManagerTeam2.OnLocalWorldMapReceived; globalWorldMapManagerTeam2.OnGlobalWorldMapEvent += strategyManager.OnGlobalWorldMapReceived; globalWorldMapManagerTeam2.OnGlobalWorldMapEvent += waypointGenerator.OnGlobalWorldMapReceived; globalWorldMapManagerTeam2.OnGlobalWorldMapEvent += perceptionSimulator.OnGlobalWorldMapReceived; } strategyManagerDictionary.Add(robotId, strategyManager); waypointGeneratorList.Add(waypointGenerator); trajectoryPlannerList.Add(trajectoryPlanner); robotPilotList.Add(robotPilot); localWorldMapManagerList.Add(localWorldMapManager); lidarSimulatorList.Add(lidarSimulator); perceptionSimulatorList.Add(perceptionSimulator); physicalSimulator.RegisterRobot(robotId, randomGenerator.Next(-10, 10), randomGenerator.Next(-6, 6)); }
static void Main(string[] args) { /// Enregistrement de la license SciChart en début de code SciChartSurface.SetRuntimeLicenseKey("RJWA77RbaJDdCRJpg4Iunl5Or6/FPX1xT+Gzu495Eaa0ZahxWi3jkNFDjUb/w70cHXyv7viRTjiNRrYqnqGA+Dc/yzIIzTJlf1s4DJvmQc8TCSrH7MBeQ2ON5lMs/vO0p6rBlkaG+wwnJk7cp4PbOKCfEQ4NsMb8cT9nckfdcWmaKdOQNhHsrw+y1oMR7rIH+rGes0jGGttRDhTOBxwUJK2rBA9Z9PDz2pGOkPjy9fwQ4YY2V4WPeeqM+6eYxnDZ068mnSCPbEnBxpwAldwXTyeWdXv8sn3Dikkwt3yqphQxvs0h6a8Dd6K/9UYni3o8pRkTed6SWodQwICcewfHTyGKQowz3afARj07et2h+becxowq3cRHL+76RyukbIXMfAqLYoT2UzDJNsZqcPPq/kxeXujuhT4SrNF3444MU1GaZZ205KYEMFlz7x/aEnjM6p3BuM6ZuO3Fjf0A0Ki/NBfS6n20E07CTGRtI6AsM2m59orPpI8+24GFlJ9xGTjoRA=="); /// Initialisation des modules utilisés dans le robot int robotId = 10; /// Ne pas changer cette variable ! int teamId = 0; /// Ne pas changer cette variable ! usbDriver = new USBVendor(); msgDecoder = new MsgDecoder(); msgEncoder = new MsgEncoder(); robotMsgGenerator = new MsgGenerator(); robotMsgProcessor = new MsgProcessor(robotId, competition); xBoxManette = new XBoxControllerNS.XBoxController(robotId); strategyManager = new StrategyEurobot(robotId, teamId, "224.16.32.79"); localWorldMapManager = new LocalWorldMapManager(robotId, teamId, bypassMulticast: false); positioning2Wheels = new Positioning2Wheels(robotId); trajectoryGenerator = new TrajectoryGeneratorNonHolonome(robotId); /// Création des liens entre module, sauf depuis et vers l'interface graphique usbDriver.OnUSBDataReceivedEvent += msgDecoder.DecodeMsgReceived; // Transmission des messages reçus par l'USB au Message Decoder msgDecoder.OnMessageDecodedEvent += robotMsgProcessor.ProcessRobotDecodedMessage; // Transmission les messages décodés par le Message Decoder au Message Processor //Events d'activation et configuration de l'asservissement en vitesse depuis le Strategy Manager strategyManager.On2WheelsToPolarMatrixSetupEvent += robotMsgGenerator.GenerateMessage2WheelsToPolarMatrixSet; //Transmission des messages de set-up de la matrice de transformation moteurindepeandt -> polaire en embarqué strategyManager.On2WheelsAngleSetupEvent += robotMsgGenerator.GenerateMessage2WheelsAngleSet; //Transmission des messages de set-up de la config angulaire des roues en embarqué strategyManager.OnOdometryPointToMeterSetupEvent += robotMsgGenerator.GenerateMessageOdometryPointToMeter; //Transmission des messages de set-up du coeff pointToMeter en embarqué strategyManager.On2WheelsIndependantSpeedPIDSetupEvent += robotMsgGenerator.GenerateMessage2WheelsIndependantSpeedPIDSetup; //Setup du PID independant strategyManager.OnSetAsservissementModeEvent += robotMsgGenerator.GenerateMessageSetAsservissementMode; robotMsgGenerator.OnMessageToRobotGeneratedEvent += msgEncoder.EncodeMessageToRobot; // Envoi des messages du générateur de message à l'encoder msgEncoder.OnMessageEncodedEvent += usbDriver.SendUSBMessage; // Envoi des messages en USB depuis le message encoder robotMsgProcessor.OnPolarOdometrySpeedFromRobotEvent += positioning2Wheels.OnOdometryRobotSpeedReceived; //Envoi des vitesses reçues de l'embarqué au module de calcul de positionnement positioning2Wheels.OnCalculatedLocationEvent += trajectoryGenerator.OnPhysicalPositionReceived; //Envoi du positionnement calculé au module de génération de trajectoire trajectoryGenerator.OnGhostLocationEvent += localWorldMapManager.OnGhostLocationReceived; trajectoryGenerator.OnSpeedConsigneEvent += robotMsgGenerator.GenerateMessageSetSpeedConsigneToRobot; //Transmission des commande de vitesse aux moteurs de déplacement strategyManager.OnSetSpeedConsigneToMotorEvent += robotMsgGenerator.GenerateMessageSetSpeedConsigneToMotor; //Transmission des commande de vitesse (aux moteurs annexes) positioning2Wheels.OnCalculatedLocationEvent += localWorldMapManager.OnPhysicalPositionReceived; strategyManager.InitStrategy(); //à faire après avoir abonné les events ! StartRobotInterface(); while (!exitSystem) { Thread.Sleep(500); } }
static void Main(string[] args) { // Set this code once in App.xaml.cs or application startup SciChartSurface.SetRuntimeLicenseKey("RJWA77RbaJDdCRJpg4Iunl5Or6/FPX1xT+Gzu495Eaa0ZahxWi3jkNFDjUb/w70cHXyv7viRTjiNRrYqnqGA+Dc/yzIIzTJlf1s4DJvmQc8TCSrH7MBeQ2ON5lMs/vO0p6rBlkaG+wwnJk7cp4PbOKCfEQ4NsMb8cT9nckfdcWmaKdOQNhHsrw+y1oMR7rIH+rGes0jGGttRDhTOBxwUJK2rBA9Z9PDz2pGOkPjy9fwQ4YY2V4WPeeqM+6eYxnDZ068mnSCPbEnBxpwAldwXTyeWdXv8sn3Dikkwt3yqphQxvs0h6a8Dd6K/9UYni3o8pRkTed6SWodQwICcewfHTyGKQowz3afARj07et2h+becxowq3cRHL+76RyukbIXMfAqLYoT2UzDJNsZqcPPq/kxeXujuhT4SrNF3444MU1GaZZ205KYEMFlz7x/aEnjM6p3BuM6ZuO3Fjf0A0Ki/NBfS6n20E07CTGRtI6AsM2m59orPpI8+24GFlJ9xGTjoRA=="); //On ajoute un gestionnaire d'évènement pour détecter la fermeture de l'application _handler += new EventHandler(Handler); SetConsoleCtrlHandler(_handler, true); //serialPort1 = new ReliableSerialPort(cfgSerialPort.CommName, cfgSerialPort.ComBaudrate, cfgSerialPort.Parity, cfgSerialPort.DataByte, cfgSerialPort.StopByte); //serialPort1 = new ReliableSerialPort("COM1", 115200, Parity.None, 8, StopBits.One); int teamId = (int)TeamId.Team1; int robotId = (int)RobotId.Robot1 + teamId; usbDriver = new USBVendorNS.USBVendor(); msgDecoder = new MsgDecoder(); msgEncoder = new MsgEncoder(); robotMsgGenerator = new MsgGenerator(); robotMsgProcessor = new MsgProcessor(robotId, competition); imuProcessor = new ImuProcessor.ImuProcessor(robotId); lidar_OMD60M_TCP = new LidaRxR2000(50, R2000SamplingRate._72kHz); perceptionManager = new PerceptionManager(robotId, competition); kalmanPositioning = new KalmanPositioning.KalmanPositioning(robotId, 50, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0.02); trajectoryPlanner = new TrajectoryGeneratorHolonome(robotId, competition); localWorldMapManager = new LocalWorldMapManager(robotId, teamId, bypassMulticast: false); globalWorldMapManager = new GlobalWorldMapManager(robotId, teamId); switch (competition) { case GameMode.RoboCup: strategyManager = new StrategyRoboCup(robotId, teamId, "224.16.32.79"); break; case GameMode.Eurobot: strategyManager = new StrategyEurobot2021(robotId, teamId, "224.16.32.79"); break; case GameMode.Demo: break; } //strategyManager = new StrategyManagerNS.StrategyManager(robotId, teamId, "224.16.32.79", competition); robotUdpMulticastSender = new UDPMulticastSender(robotId, "224.16.32.79"); robotUdpMulticastReceiver = new UDPMulticastReceiver(robotId, "224.16.32.79"); robotUdpMulticastInterpreter = new UDPMulticastInterpreter(robotId); herkulexManager = new HerkulexManager(); herkulexManager.AddServo(ServoId.BrasCentral, HerkulexDescription.JOG_MODE.positionControlJOG); herkulexManager.AddServo(ServoId.BrasDroit, HerkulexDescription.JOG_MODE.positionControlJOG); herkulexManager.AddServo(ServoId.BrasGauche, HerkulexDescription.JOG_MODE.positionControlJOG); herkulexManager.AddServo(ServoId.PorteDrapeau, HerkulexDescription.JOG_MODE.positionControlJOG); xBoxManette = new XBoxControllerNS.XBoxController(robotId); //Démarrage des interface de visualisation if (usingRobotInterface) { StartRobotInterface(); } //if (usingLogReplay) // StartReplayNavigatorInterface(); //Initialisation du logger logRecorder = new LogRecorder.LogRecorder(); //Démarrage du log replay si l'interface est utilisée et existe ou si elle n'est pas utilisée, sinon on bloque logReplay = new LogReplay.LogReplay(); //Liens entre modules //strategyManager.strategy.OnRefereeBoxCommandEvent += globalWorldMapManager.OnRefereeBoxCommandReceived; strategyManager.OnGameStateChangedEvent += trajectoryPlanner.OnGameStateChangeReceived; strategyManager.OnWaypointEvent += trajectoryPlanner.OnWaypointReceived; //Kalman perceptionManager.OnAbsolutePositionEvent += kalmanPositioning.OnAbsolutePositionCalculatedEvent; imuProcessor.OnGyroSpeedEvent += kalmanPositioning.OnGyroRobotSpeedReceived; robotMsgProcessor.OnPolarOdometrySpeedFromRobotEvent += kalmanPositioning.OnOdometryRobotSpeedReceived; kalmanPositioning.OnKalmanLocationEvent += trajectoryPlanner.OnPhysicalPositionReceived; kalmanPositioning.OnKalmanLocationEvent += perceptionManager.OnPhysicalRobotPositionReceived; kalmanPositioning.OnKalmanLocationEvent += strategyManager.OnPositionRobotReceived; //Update des données de la localWorldMap perceptionManager.OnPerceptionEvent += localWorldMapManager.OnPerceptionReceived; strategyManager.OnDestinationEvent += localWorldMapManager.OnDestinationReceived; strategyManager.OnRoleEvent += localWorldMapManager.OnRoleReceived; //Utile pour l'affichage strategyManager.OnMessageDisplayEvent += localWorldMapManager.OnMessageDisplayReceived; //Utile pour l'affichage strategyManager.OnHeatMapStrategyEvent += localWorldMapManager.OnHeatMapStrategyReceived; strategyManager.OnWaypointEvent += localWorldMapManager.OnWaypointReceived; strategyManager.OnHeatMapWayPointEvent += localWorldMapManager.OnHeatMapWaypointReceived; trajectoryPlanner.OnGhostLocationEvent += localWorldMapManager.OnGhostLocationReceived; //Gestion des events liés à une détection de collision soft trajectoryPlanner.OnCollisionEvent += kalmanPositioning.OnCollisionReceived; //trajectoryPlanner.OnSpeedConsigneEvent += robotMsgGenerator.GenerateMessageSetSpeedConsigneToRobot; strategyManager.OnMessageEvent += lidar_OMD60M_TCP.OnMessageReceivedEvent; strategyManager.On4WheelsPolarSpeedPIDSetupEvent += robotMsgGenerator.GenerateMessage4WheelsPolarSpeedPIDSetup; strategyManager.On4WheelsIndependantSpeedPIDSetupEvent += robotMsgGenerator.GenerateMessage4WheelsIndependantSpeedPIDSetup; strategyManager.On2WheelsPolarSpeedPIDSetupEvent += robotMsgGenerator.GenerateMessage2WheelsPolarSpeedPIDSetup; strategyManager.On2WheelsIndependantSpeedPIDSetupEvent += robotMsgGenerator.GenerateMessage2WheelsIndependantSpeedPIDSetup; strategyManager.OnSetAsservissementModeEvent += robotMsgGenerator.GenerateMessageSetAsservissementMode; strategyManager.OnSetSpeedConsigneToMotor += robotMsgGenerator.GenerateMessageSetSpeedConsigneToMotor; strategyManager.OnEnableDisableMotorCurrentDataEvent += robotMsgGenerator.GenerateMessageEnableMotorCurrentData; strategyManager.OnOdometryPointToMeterEvent += robotMsgGenerator.GenerateMessageOdometryPointToMeter; strategyManager.On4WheelsAngleSetEvent += robotMsgGenerator.GenerateMessage4WheelsAngleSet; strategyManager.On4WheelsToPolarSetEvent += robotMsgGenerator.GenerateMessage4WheelsToPolarMatrixSet; strategyManager.On2WheelsAngleSetEvent += robotMsgGenerator.GenerateMessage2WheelsAngleSet; strategyManager.On2WheelsToPolarSetEvent += robotMsgGenerator.GenerateMessage2WheelsToPolarMatrixSet; herkulexManager.OnHerkulexSendToSerialEvent += robotMsgGenerator.GenerateMessageForwardHerkulex; lidar_OMD60M_TCP.OnLidarDecodedFrameEvent += perceptionManager.OnRawLidarDataReceived; perceptionManager.OnLidarRawDataEvent += localWorldMapManager.OnRawLidarDataReceived; perceptionManager.OnLidarProcessedDataEvent += localWorldMapManager.OnLidarDataReceived; perceptionManager.OnLidarProcessedLandmarksEvent += localWorldMapManager.OnLidarDataReceived; perceptionManager.OnLidarProcessedSegmentsEvent += localWorldMapManager.OnLidarProcessedSegmentsReceived; //L'envoi des commandes dépend du fait qu'on soit en mode manette ou pas. //Il faut donc enregistrer les évènement ou pas en fonction de l'activation //C'est fait plus bas dans le code avec la fonction que l'on appelle ConfigControlEvents(usingXBoxController); //Gestion des messages envoyé par le robot robotMsgGenerator.OnMessageToRobotGeneratedEvent += msgEncoder.EncodeMessageToRobot; //msgEncoder.OnMessageEncodedEvent += serialPort1.SendMessage; msgEncoder.OnMessageEncodedEvent += usbDriver.SendUSBMessage; //Gestion des messages reçu par le robot //serialPort1.OnDataReceivedEvent += msgDecoder.DecodeMsgReceived; usbDriver.OnUSBDataReceivedEvent += msgDecoder.DecodeMsgReceived; msgDecoder.OnMessageDecodedEvent += robotMsgProcessor.ProcessRobotDecodedMessage; robotMsgProcessor.OnIMURawDataFromRobotGeneratedEvent += imuProcessor.OnIMURawDataReceived; robotMsgProcessor.OnIOValuesFromRobotGeneratedEvent += strategyManager.OnIOValuesFromRobot; robotMsgProcessor.OnIOValuesFromRobotGeneratedEvent += perceptionManager.OnIOValuesFromRobotEvent; landmarksExtractor = new LandmarksExtractor(); landmarksExtractor.OnLinesLandmarksExtractedEvent += perceptionManager.OnLandmarksReceived; perceptionManager.OnLidarRawDataEvent += landmarksExtractor.OnRobotLidarReceived; perceptionManager.OnAbsolutePositionEvent += landmarksExtractor.OnRobotPositionReceived; // robotMsgProcessor.OnMotorsCurrentsFromRobotGeneratedEvent += strategyManager.OnMotorCurrentReceive; //Le local Manager n'est là que pour assurer le stockage de ma local world map avant affichage et transmission des infos, il ne doit pas calculer quoique ce soit, //c'est le perception manager qui le fait. trajectoryPlanner.OnPidSpeedResetEvent += robotMsgGenerator.GenerateMessageResetSpeedPid; ////Event d'interprétation d'une globalWorldMap à sa réception dans le robot robotUdpMulticastInterpreter.OnRefBoxMessageEvent += strategyManager.OnRefBoxMsgReceived; /// Event de Transmission des Local World Map du robot vers le multicast /// Disparaitra quand on voudra jouer sans liaison multicast localWorldMapManager.OnMulticastSendLocalWorldMapEvent += robotUdpMulticastSender.OnMulticastMessageToSendReceived; /// Events de réception des localWorldMap /// Soit en direct si on se transmet à nous même, soit via le Multicast pour transmettre aux autres robots localWorldMapManager.OnLocalWorldMapToGlobalWorldMapGeneratorEvent += globalWorldMapManager.OnLocalWorldMapReceived; robotUdpMulticastInterpreter.OnLocalWorldMapEvent += globalWorldMapManager.OnLocalWorldMapReceived; /// Event généré lorsque la Global World Map a été calculée. /// Elle n'a pas vocation à être renvoyée à tous les robots puisqu'on la génère dans chaque robot en parallèle globalWorldMapManager.OnGlobalWorldMapEvent += strategyManager.OnGlobalWorldMapReceived; /// Event de Réception de data Multicast sur le robot robotUdpMulticastReceiver.OnDataReceivedEvent += robotUdpMulticastInterpreter.OnMulticastDataReceived; /// LOGGER related events perceptionManager.OnLidarRawDataEvent += logRecorder.OnRawLidarDataReceived; robotMsgProcessor.OnIMURawDataFromRobotGeneratedEvent += logRecorder.OnIMURawDataReceived; robotMsgProcessor.OnPolarOdometrySpeedFromRobotEvent += logRecorder.OnPolarSpeedDataReceived; //omniCamera.OpenCvMatImageEvent += logRecorder.OnOpenCVMatImageReceived; //strategyManagerDictionary.Add(robotId, strategyManager); trajectoryPlanner.InitRobotPosition(0, 0, 0); strategyManager.InitStrategy(robotId, teamId); while (!exitSystem) { Thread.Sleep(500); } }
[STAThread] //à ajouter au projet initial static void Main(string[] args) { SciChartSurface.SetRuntimeLicenseKey(@"<LicenseContract> <Customer>University of Toulon</Customer> <OrderId>EDUCATIONAL-USE-0109</OrderId> <LicenseCount>1</LicenseCount> <IsTrialLicense>false</IsTrialLicense> <SupportExpires>11/04/2019 00:00:00</SupportExpires> <ProductCode>SC-WPF-SDK-PRO-SITE</ProductCode> <KeyCode>lwABAQEAAABZVzOfQ0zVAQEAewBDdXN0b21lcj1Vbml2ZXJzaXR5IG9mICBUb3Vsb247T3JkZXJJZD1FRFVDQVRJT05BTC1VU0UtMDEwOTtTdWJzY3JpcHRpb25WYWxpZFRvPTA0LU5vdi0yMDE5O1Byb2R1Y3RDb2RlPVNDLVdQRi1TREstUFJPLVNJVEWDf0QgB8GnCQXI6yAqNM2njjnGbUt2KsujTDzeE+k69K1XYVF1s1x1Hb/i/E3GHaU=</KeyCode> </LicenseContract>"); switch (robotMode) { case RobotMode.Standard: usingLidar = true; usingLogging = false; usingLogReplay = false; break; case RobotMode.LidarAcquisition: usingLidar = true; usingLogging = true; usingLogReplay = false; break; case RobotMode.LidarReplay: usingLidar = false; usingLogging = false; usingLogReplay = true; break; case RobotMode.Nolidar: usingLidar = false; usingLogging = false; usingLogReplay = false; break; } ethernetTeamNetworkAdapter = new EthernetTeamNetworkAdapter(); serialPort1 = new ReliableSerialPort("COM1", 115200, Parity.None, 8, StopBits.One); msgDecoder = new MsgDecoder(); msgEncoder = new MsgEncoder(); robotMsgGenerator = new RobotMsgGenerator(); robotMsgProcessor = new RobotMsgProcessor(); physicalSimulator = new PhysicalSimulator.PhysicalSimulator(); int robotId = (int)TeamId.Team1 + (int)RobotId.Robot1; int teamId = (int)TeamId.Team1; physicalSimulator.RegisterRobot(robotId, 0, 0); robotPilot = new RobotPilot.RobotPilot(robotId); refBoxAdapter = new RefereeBoxAdapter.RefereeBoxAdapter(); trajectoryPlanner = new TrajectoryPlanner(robotId); waypointGenerator = new WaypointGenerator(robotId); strategyManager = new StrategyManager.StrategyManager(robotId); localWorldMapManager = new LocalWorldMapManager(robotId, teamId); lidarSimulator = new LidarSimulator.LidarSimulator(robotId); perceptionSimulator = new PerceptionSimulator(robotId); if (usingLidar) { lidar_OMD60M = new Lidar_OMD60M(robotId); lidarProcessor = new LidarProcessor.LidarProcessor(robotId); } xBoxManette = new XBoxController.XBoxController(robotId); if (!usingSimulatedCamera) { omniCamera = new BaslerCameraAdapter(); } else { omniCameraSimulator = new SimulatedCamera.SimulatedCamera(); } imageProcessingPositionFromOmniCamera = new ImageProcessingPositionFromOmniCamera(); //Démarrage des interface de visualisation StartInterfaces(); //Démarrage du logging if (usingLogging) { logRecorder = new LogRecorder.LogRecorder(); } if (usingLogReplay) { logReplay = new LogReplay.LogReplay(); lidarProcessor = new LidarProcessor.LidarProcessor(robotId); } //Liens entre modules strategyManager.OnDestinationEvent += waypointGenerator.OnDestinationReceived; strategyManager.OnHeatMapEvent += waypointGenerator.OnStrategyHeatMapReceived; waypointGenerator.OnWaypointEvent += trajectoryPlanner.OnWaypointReceived; if (!usingXBoxController) { trajectoryPlanner.OnSpeedConsigneEvent += physicalSimulator.SetRobotSpeed; robotPilot.OnSpeedConsigneEvent += robotMsgGenerator.GenerateMessageSetSpeedConsigneToRobot; } else { //Sur evenement xx -->> Action a effectuer xBoxManette.OnSpeedConsigneEvent += physicalSimulator.SetRobotSpeed; xBoxManette.OnSpeedConsigneEvent += robotMsgGenerator.GenerateMessageSetSpeedConsigneToRobot; xBoxManette.OnPriseBalleEvent += robotMsgGenerator.GenerateMessageSetSpeedConsigneToMotor; xBoxManette.OnMoveTirUpEvent += robotMsgGenerator.GenerateMessageMoveTirUp; xBoxManette.OnMoveTirDownEvent += robotMsgGenerator.GenerateMessageMoveTirDown; xBoxManette.OnTirEvent += robotMsgGenerator.GenerateMessageTir; } robotMsgGenerator.OnMessageToRobotGeneratedEvent += msgEncoder.EncodeMessageToRobot; msgEncoder.OnMessageEncodedEvent += serialPort1.SendMessage; serialPort1.OnDataReceivedEvent += msgDecoder.DecodeMsgReceived; msgDecoder.OnMessageDecodedEvent += robotMsgProcessor.ProcessRobotDecodedMessage; physicalSimulator.OnPhysicalRobotPositionEvent += trajectoryPlanner.OnPhysicalPositionReceived; physicalSimulator.OnPhysicicalObjectListLocationEvent += perceptionSimulator.OnPhysicalObjectListLocationReceived; physicalSimulator.OnPhysicalRobotPositionEvent += perceptionSimulator.OnPhysicalRobotPositionReceived; physicalSimulator.OnPhysicalBallPositionEvent += perceptionSimulator.OnPhysicalBallPositionReceived; perceptionSimulator.OnPerceptionEvent += localWorldMapManager.OnPerceptionReceived; //lidarSimulator.OnSimulatedLidarEvent += localWorldMapManager.OnRawLidarDataReceived; strategyManager.OnDestinationEvent += localWorldMapManager.OnDestinationReceived; waypointGenerator.OnWaypointEvent += localWorldMapManager.OnWaypointReceived; strategyManager.OnHeatMapEvent += localWorldMapManager.OnHeatMapReceived; //waypointGenerator.OnHeatMapEvent += localWorldMapManager.OnHeatMapReceived; if (usingLidar) { lidar_OMD60M.OnLidarEvent += lidarProcessor.OnRawLidarDataReceived; lidarProcessor.OnLidarProcessedEvent += localWorldMapManager.OnRawLidarDataReceived; } //Event de recording if (usingLogging) { lidar_OMD60M.OnLidarEvent += logRecorder.OnRawLidarDataReceived; } //Event de replay if (usingLogReplay) { logReplay.OnLidarEvent += lidarProcessor.OnRawLidarDataReceived; lidarProcessor.OnLidarProcessedEvent += localWorldMapManager.OnRawLidarDataReceived; lidarProcessor.OnLidarObjectProcessedEvent += localWorldMapManager.OnLidarObjectsReceived; } //Timer de stratégie timerStrategie = new HighFreqTimer(0.5); timerStrategie.Tick += TimerStrategie_Tick; timerStrategie.Start(); lock (ExitLock) { // Do whatever setup code you need here // once we are done wait Monitor.Wait(ExitLock); } }
[STAThread] //à ajouter au projet initial static void Main(string[] args) { SciChartSurface.SetRuntimeLicenseKey(@"<LicenseContract> <Customer>Universite De Toulon</Customer> <OrderId>EDUCATIONAL-USE-0128</OrderId> <LicenseCount>1</LicenseCount> <IsTrialLicense>false</IsTrialLicense> <SupportExpires>02/17/2020 00:00:00</SupportExpires> <ProductCode>SC-WPF-2D-PRO-SITE</ProductCode> <KeyCode>lwAAAQEAAACS9FAFUqnVAXkAQ3VzdG9tZXI9VW5pdmVyc2l0ZSBEZSBUb3Vsb247T3JkZXJJZD1FRFVDQVRJT05BTC1VU0UtMDEyODtTdWJzY3JpcHRpb25WYWxpZFRvPTE3LUZlYi0yMDIwO1Byb2R1Y3RDb2RlPVNDLVdQRi0yRC1QUk8tU0lURYcbnXYui4rna7TqbkEmUz1V7oD1EwrO3FhU179M9GNhkL/nkD/SUjwJ/46hJZ31CQ==</KeyCode> </LicenseContract>"); //TODO : Créer un projet World... ethernetTeamNetworkAdapter = new EthernetTeamNetworkAdapter(); serialPort1 = new ReliableSerialPort("FTDI", 230400 /*115200*/, Parity.None, 8, StopBits.One); msgDecoder = new MsgDecoder(); msgEncoder = new MsgEncoder(); robotMsgGenerator = new RobotMsgGenerator(); robotMsgProcessor = new RobotMsgProcessor(); physicalSimulator = new PhysicalSimulator.PhysicalSimulator(); int robotId = (int)TeamId.Team1 + (int)RobotId.Robot1; int teamId = (int)TeamId.Team1; physicalSimulator.RegisterRobot(robotId, 0, 0); robotPilot = new RobotPilot.RobotPilot(robotId); refBoxAdapter = new RefereeBoxAdapter.RefereeBoxAdapter(); trajectoryPlanner = new TrajectoryPlanner(robotId); waypointGenerator = new WaypointGenerator(robotId); strategyManager = new StrategyManager.StrategyManager(robotId); localWorldMapManager = new LocalWorldMapManager(robotId, teamId); lidarSimulator = new LidarSimulator.LidarSimulator(robotId); perceptionSimulator = new PerceptionSimulator(robotId); if (usingLidar) { lidar_OMD60M = new Lidar_OMD60M(robotId); } xBoxManette = new XBoxController.XBoxController(robotId); if (!usingSimulatedCamera) { omniCamera = new BaslerCameraAdapter(); } else { omniCameraSimulator = new SimulatedCamera.SimulatedCamera(); } imageProcessingPositionFromOmniCamera = new ImageProcessingPositionFromOmniCamera(); StartInterfaces(); //Liens entre modules strategyManager.OnDestinationEvent += waypointGenerator.OnDestinationReceived; strategyManager.OnHeatMapEvent += waypointGenerator.OnStrategyHeatMapReceived; waypointGenerator.OnWaypointEvent += trajectoryPlanner.OnWaypointReceived; if (!usingXBoxController) { trajectoryPlanner.OnSpeedConsigneEvent += physicalSimulator.SetRobotSpeed; robotPilot.OnSpeedConsigneEvent += robotMsgGenerator.GenerateMessageSetSpeedConsigneToRobot; } else { //Sur evenement xx -->> Action a effectuer xBoxManette.OnSpeedConsigneEvent += physicalSimulator.SetRobotSpeed; xBoxManette.OnSpeedConsigneEvent += robotMsgGenerator.GenerateMessageSetSpeedConsigneToRobot; xBoxManette.OnPriseBalleEvent += robotMsgGenerator.GenerateMessageSetSpeedConsigneToMotor; xBoxManette.OnMoveTirUpEvent += robotMsgGenerator.GenerateMessageMoveTirUp; xBoxManette.OnMoveTirDownEvent += robotMsgGenerator.GenerateMessageMoveTirDown; xBoxManette.OnTirEvent += robotMsgGenerator.GenerateMessageTir; } robotMsgGenerator.OnMessageToRobotGeneratedEvent += msgEncoder.EncodeMessageToRobot; msgEncoder.OnMessageEncodedEvent += serialPort1.SendMessage; serialPort1.OnDataReceivedEvent += msgDecoder.DecodeMsgReceived; msgDecoder.OnMessageDecodedEvent += robotMsgProcessor.ProcessRobotDecodedMessage; physicalSimulator.OnPhysicalRobotPositionEvent += trajectoryPlanner.OnPhysicalPositionReceived; physicalSimulator.OnPhysicicalObjectListLocationEvent += perceptionSimulator.OnPhysicalObjectListLocationReceived; physicalSimulator.OnPhysicalRobotPositionEvent += perceptionSimulator.OnPhysicalRobotPositionReceived; physicalSimulator.OnPhysicalBallPositionEvent += perceptionSimulator.OnPhysicalBallPositionReceived; perceptionSimulator.OnPerceptionEvent += localWorldMapManager.OnPerceptionReceived; //lidarSimulator.OnSimulatedLidarEvent += localWorldMapManager.OnRawLidarDataReceived; strategyManager.OnDestinationEvent += localWorldMapManager.OnDestinationReceived; waypointGenerator.OnWaypointEvent += localWorldMapManager.OnWaypointReceived; strategyManager.OnHeatMapEvent += localWorldMapManager.OnHeatMapReceived; //waypointGenerator.OnHeatMapEvent += localWorldMapManager.OnHeatMapReceived; if (usingLidar) { lidar_OMD60M.OnLidarEvent += localWorldMapManager.OnRawLidarDataReceived; } //Timer de stratégie timerStrategie = new HighFreqTimer(0.5); timerStrategie.Tick += TimerStrategie_Tick; timerStrategie.Start(); lock (ExitLock) { // Do whatever setup code you need here // once we are done wait Monitor.Wait(ExitLock); } }
private static void CreatePlayer(int TeamNumber, int RobotNumber, string Name, string multicastIpAddress) { int robotId = TeamNumber + RobotNumber; var strategyManager = new StrategyManagerNS.StrategyManager(robotId, TeamNumber, multicastIpAddress, GameMode.RoboCup); //var waypointGenerator = new WaypointGenerator(robotId, GameMode.RoboCup); var trajectoryPlanner = new TrajectoryPlanner(robotId, GameMode.RoboCup); var sensorSimulator = new SensorSimulator.SensorSimulator(robotId); var kalmanPositioning = new KalmanPositioning.KalmanPositioning(robotId, 50, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0.02); var localWorldMapManager = new LocalWorldMapManager(robotId, TeamNumber, bypassMulticast: false); //var lidarSimulator = new LidarSimulator.LidarSimulator(robotId); var perceptionSimulator = new PerceptionManager(robotId, GameMode.RoboCup); UDPMulticastSender robotUdpMulticastSender = null; UDPMulticastReceiver robotUdpMulticastReceiver = null; UDPMulticastInterpreter robotUdpMulticastInterpreter = null; if (TeamNumber == (int)TeamId.Team1) { robotUdpMulticastSender = new UDPMulticastSender(robotId, "224.16.32.79"); robotUdpMulticastReceiver = new UDPMulticastReceiver(robotId, "224.16.32.79"); robotUdpMulticastInterpreter = new UDPMulticastInterpreter(robotId); } else if (TeamNumber == (int)TeamId.Team2) { robotUdpMulticastSender = new UDPMulticastSender(robotId, "224.16.32.63"); robotUdpMulticastReceiver = new UDPMulticastReceiver(robotId, "224.16.32.63"); robotUdpMulticastInterpreter = new UDPMulticastInterpreter(robotId); } //Liens entre modules strategyManager.strategy.OnGameStateChangedEvent += trajectoryPlanner.OnGameStateChangeReceived; strategyManager.strategy.OnWaypointEvent += trajectoryPlanner.OnWaypointReceived; ((StrategyRoboCup)strategyManager.strategy).OnShootRequestEvent += physicalSimulator.OnShootOrderReceived; trajectoryPlanner.OnSpeedConsigneEvent += physicalSimulator.SetRobotSpeed; //Gestion des events liés à une détection de collision soft trajectoryPlanner.OnCollisionEvent += kalmanPositioning.OnCollisionReceived; trajectoryPlanner.OnCollisionEvent += physicalSimulator.OnCollisionReceived; ////physicalSimulator.OnPhysicalRobotLocationEvent += trajectoryPlanner.OnPhysicalPositionReceived; //replacé par les 5 lignes suivantes physicalSimulator.OnPhysicalRobotLocationEvent += sensorSimulator.OnPhysicalRobotPositionReceived; physicalSimulator.OnPhysicalBallHandlingEvent += sensorSimulator.OnPhysicalBallHandlingReceived; sensorSimulator.OnCamLidarSimulatedRobotPositionEvent += kalmanPositioning.OnCamLidarSimulatedRobotPositionReceived; sensorSimulator.OnGyroSimulatedRobotSpeedEvent += kalmanPositioning.OnGyroRobotSpeedReceived; sensorSimulator.OnOdometrySimulatedRobotSpeedEvent += kalmanPositioning.OnOdometryRobotSpeedReceived; sensorSimulator.OnBallHandlingSimulatedEvent += ((StrategyRoboCup)strategyManager.strategy).OnBallHandlingSensorInfoReceived; kalmanPositioning.OnKalmanLocationEvent += trajectoryPlanner.OnPhysicalPositionReceived; //physicalSimulator.OnPhysicalRobotLocationEvent += trajectoryPlanner.OnPhysicalPositionReceived; //ajout kalmanPositioning.OnKalmanLocationEvent += perceptionSimulator.OnPhysicalRobotPositionReceived; kalmanPositioning.OnKalmanLocationEvent += strategyManager.strategy.OnPositionRobotReceived; //physicalSimulator.OnPhysicalRobotLocationEvent += perceptionSimulator.OnPhysicalRobotPositionReceived; //ajout physicalSimulator.OnPhysicicalObjectListLocationEvent += perceptionSimulator.OnPhysicalObjectListLocationReceived; physicalSimulator.OnPhysicalBallPositionListEvent += perceptionSimulator.OnPhysicalBallPositionListReceived; //Update des données de la localWorldMap perceptionSimulator.OnPerceptionEvent += localWorldMapManager.OnPerceptionReceived; strategyManager.strategy.OnDestinationEvent += localWorldMapManager.OnDestinationReceived; strategyManager.strategy.OnRoleEvent += localWorldMapManager.OnRoleReceived; //Utile pour l'affichage strategyManager.strategy.OnBallHandlingStateEvent += localWorldMapManager.OnBallHandlingStateReceived; strategyManager.strategy.OnMessageDisplayEvent += localWorldMapManager.OnMessageDisplayReceived; //Utile pour l'affichage //strategyManager.strategy.OnPlayingSideEvent += localWorldMapManager.OnPlayingSideReceived; //inutile strategyManager.strategy.OnHeatMapStrategyEvent += localWorldMapManager.OnHeatMapStrategyReceived; strategyManager.strategy.OnWaypointEvent += localWorldMapManager.OnWaypointReceived; strategyManager.strategy.OnHeatMapWayPointEvent += localWorldMapManager.OnHeatMapWaypointReceived; //waypointGenerator.OnWaypointEvent += localWorldMapManager.OnWaypointReceived; //waypointGenerator.OnHeatMapEvent += localWorldMapManager.OnHeatMapWaypointReceived; trajectoryPlanner.OnGhostLocationEvent += localWorldMapManager.OnGhostLocationReceived; //Event de Réception de data Multicast sur le robot robotUdpMulticastReceiver.OnDataReceivedEvent += robotUdpMulticastInterpreter.OnMulticastDataReceived; //Event d'interprétation d'une globalWorldMap à sa réception dans le robot robotUdpMulticastInterpreter.OnGlobalWorldMapEvent += strategyManager.strategy.OnGlobalWorldMapReceived; robotUdpMulticastInterpreter.OnRefBoxMessageEvent += strategyManager.strategy.OnRefBoxMsgReceived; //robotUdpMulticastInterpreter.OnGlobalWorldMapEvent += waypointGenerator.OnGlobalWorldMapReceived; robotUdpMulticastInterpreter.OnGlobalWorldMapEvent += perceptionSimulator.OnGlobalWorldMapReceived; //Event de Transmission des Local World Map du robot vers le multicast localWorldMapManager.OnMulticastSendLocalWorldMapEvent += robotUdpMulticastSender.OnMulticastMessageToSendReceived; strategyManagerDictionary.Add(robotId, strategyManager); //waypointGeneratorList.Add(waypointGenerator); trajectoryPlannerList.Add(trajectoryPlanner); sensorSimulatorList.Add(sensorSimulator); kalmanPositioningList.Add(kalmanPositioning); localWorldMapManagerList.Add(localWorldMapManager); //lidarSimulatorList.Add(lidarSimulator); perceptionManagerList.Add(perceptionSimulator); robotUdpMulticastReceiverList.Add(robotUdpMulticastReceiver); robotUdpMulticastSenderList.Add(robotUdpMulticastSender); robotUdpMulticastInterpreterList.Add(robotUdpMulticastInterpreter); double xInit, yInit, thetaInit; if (TeamNumber == (int)TeamId.Team1) { xInit = 2 * RobotNumber + 2; yInit = -6.5; thetaInit = Math.PI / 2; } else { xInit = -(2 * RobotNumber + 2); yInit = +6.5; thetaInit = 0; } physicalSimulator.RegisterRobot(robotId, xInit, yInit); trajectoryPlanner.InitRobotPosition(xInit, yInit, thetaInit); }
static void Main(string[] args) { SetConsoleCtrlHandler(new HandlerRoutine(ConsoleCtrlCheck), true); // Set this code once in App.xaml.cs or application startup SciChartSurface.SetRuntimeLicenseKey("wsCOsvBlAs2dax4o8qBefxMi4Qe5BVWax7TGOMLcwzWFYRNCa/f1rA5VA1ITvLHSULvhDMKVTc+niao6URAUXmGZ9W8jv/4jtziBzFZ6Z15ek6SLU49eIqJxGoQEFWvjANJqzp0asw+zvLV0HMirjannvDRj4i/WoELfYDubEGO1O+oAToiJlgD/e2lVqg3F8JREvC0iqBbNrmfeUCQdhHt6SKS2QpdmOoGbvtCossAezGNxv92oUbog6YIhtpSyGikCEwwKSDrlKlAab6302LLyFsITqogZychLYrVXJTFvFVnDfnkQ9cDi7017vT5flesZwIzeH497lzGp3B8fKWFQyZemD2RzlQkvj5GUWBwxiKAHrYMnQjJ/PsfojF1idPEEconVsh1LoYofNk2v/Up8AzXEAvxWUEcgzANeQggaUNy+OFet8b/yACa/bgYG7QYzFQZzgdng8IK4vCPdtg4/x7g5EdovN2PI9vB76coMuKnNVPnZN60kSjtd/24N8A=="); switch (robotMode) { case RobotMode.Standard: usingLidar = true; usingCamera = true; usingLogging = false; usingLogReplay = false; break; case RobotMode.Acquisition: usingLidar = true; usingCamera = true; usingLogging = true; usingLogReplay = false; break; case RobotMode.Replay: usingLidar = false; usingCamera = false; usingLogging = false; usingLogReplay = true; break; case RobotMode.Nolidar: usingLidar = false; usingCamera = true; usingLogging = false; usingLogReplay = false; break; case RobotMode.NoCamera: usingLidar = true; usingCamera = false; usingLogging = false; usingLogReplay = false; break; } int robotId = (int)TeamId.Team1 + (int)RobotId.Robot1; int teamId = (int)TeamId.Team1; serialPort1 = new ReliableSerialPort("COM1", 115200, Parity.None, 8, StopBits.One); msgDecoder = new MsgDecoder(); msgEncoder = new MsgEncoder(); robotMsgGenerator = new MsgGenerator(); robotMsgProcessor = new MsgProcessor(robotId, GameMode.RoboCup); robotPilot = new RobotPilot.RobotPilot(robotId); strategyManager = new StrategyRoboCup(robotId, teamId, "224.16.32.79"); waypointGenerator = new WaypointGenerator(robotId, GameMode.RoboCup); trajectoryPlanner = new TrajectoryGeneratorHolonome(robotId, GameMode.RoboCup); kalmanPositioning = new KalmanPositioning.KalmanPositioning(robotId, 50, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0.02); localWorldMapManager = new LocalWorldMapManager(robotId, teamId, bypassMulticast: false); perceptionManager = new PerceptionManager(robotId, GameMode.RoboCup); imuProcessor = new ImuProcessor.ImuProcessor(robotId); if (usingYolo) { yoloDetector = new YoloObjectDetector.YoloObjectDetector(false); //Instancie un detecteur avec un Wrappeur Yolo utilisant le GPU } if (usingLidar) { lidar_OMD60M_TCP = new LidaRxR2000(); } if (usingLidar || usingLogReplay) { lidarProcessor = new LidarProcessor.LidarProcessor(robotId, GameMode.RoboCup); } xBoxManette = new XBoxControllerNS.XBoxController(robotId); if (usingCamera || usingLogReplay) { imageProcessingPositionFromOmniCamera = new ImageProcessingPositionFromOmniCamera(); absolutePositionEstimator = new AbsolutePositionEstimator(robotId); } if (usingCamera) { omniCamera = new BaslerCameraAdapter(); omniCamera.CameraInit(); //omniCamera.BitmapPanoramaImageEvent += absolutePositionEstimator.AbsolutePositionEvaluation; } if (usingImageExtractor && usingCamera) { imgSaver = new ImageSaver.ImageSaver(); omniCamera.BitmapPanoramaImageEvent += imgSaver.OnSaveBitmapImage; } //Démarrage des interface de visualisation if (usingRobotInterface) { StartRobotInterface(); } if (usingCameraInterface) { StartCameraInterface(); } //Démarrage du logger si besoin if (usingLogging) { logRecorder = new LogRecorder.LogRecorder(); } //Démarrage du log replay si l'interface est utilisée et existe ou si elle n'est pas utilisée, sinon on bloque if (usingLogReplay) { logReplay = new LogReplay.LogReplay(); } //Liens entre modules strategyManager.OnDestinationEvent += waypointGenerator.OnDestinationReceived; strategyManager.OnHeatMapStrategyEvent += waypointGenerator.OnStrategyHeatMapReceived; waypointGenerator.OnWaypointEvent += trajectoryPlanner.OnWaypointReceived; //Filtre de Kalman perceptionManager.OnAbsolutePositionEvent += kalmanPositioning.OnAbsolutePositionCalculatedEvent; robotMsgProcessor.OnPolarOdometrySpeedFromRobotEvent += kalmanPositioning.OnOdometryRobotSpeedReceived; imuProcessor.OnGyroSpeedEvent += kalmanPositioning.OnGyroRobotSpeedReceived; kalmanPositioning.OnKalmanLocationEvent += trajectoryPlanner.OnPhysicalPositionReceived; kalmanPositioning.OnKalmanLocationEvent += perceptionManager.OnPhysicalRobotPositionReceived; //kalmanPositioning.OnKalmanLocationEvent += strategyManager.OnPositionRobotReceived; //L'envoi des commandes dépend du fait qu'on soit en mode manette ou pas. //Il faut donc enregistrer les évènement ou pas en fonction de l'activation //C'est fait plus bas dans le code avec la fonction que l'on appelle ConfigControlEvents(useXBoxController: true); //Gestion des messages envoyé par le robot robotMsgGenerator.OnMessageToRobotGeneratedEvent += msgEncoder.EncodeMessageToRobot; msgEncoder.OnMessageEncodedEvent += serialPort1.SendMessage; //Gestion des messages reçu par le robot serialPort1.OnDataReceivedEvent += msgDecoder.DecodeMsgReceived; msgDecoder.OnMessageDecodedEvent += robotMsgProcessor.ProcessRobotDecodedMessage; robotMsgProcessor.OnIMURawDataFromRobotGeneratedEvent += imuProcessor.OnIMURawDataReceived; //physicalSimulator.OnPhysicalRobotLocationEvent += trajectoryPlanner.OnPhysicalPositionReceived; //physicalSimulator.OnPhysicicalObjectListLocationEvent += perceptionSimulator.OnPhysicalObjectListLocationReceived; //physicalSimulator.OnPhysicalRobotLocationEvent += perceptionSimulator.OnPhysicalRobotPositionReceived; //physicalSimulator.OnPhysicalBallPositionEvent += perceptionSimulator.OnPhysicalBallPositionReceived; perceptionManager.OnPerceptionEvent += localWorldMapManager.OnPerceptionReceived; strategyManager.OnDestinationEvent += localWorldMapManager.OnDestinationReceived; waypointGenerator.OnWaypointEvent += localWorldMapManager.OnWaypointReceived; strategyManager.OnHeatMapStrategyEvent += localWorldMapManager.OnHeatMapStrategyReceived; //if (usingLidar) //{ // lidar_OMD60M_TCP.OnLidarDecodedFrameEvent += lidarProcessor.OnRawLidarDataReceived; // //lidar_OMD60M.OnLidarDecodedFrameEvent += absolutePositionEstimator.OnRawLidarDataReceived; // lidar_OMD60M_TCP.OnLidarDecodedFrameEvent += localWorldMapManager.OnRawLidarDataReceived; // lidarProcessor.OnLidarObjectProcessedEvent += localWorldMapManager.OnLidarObjectsReceived; //} if (usingLidar) { lidar_OMD60M_TCP.OnLidarDecodedFrameEvent += perceptionManager.OnRawLidarDataReceived; //lidar_OMD60M_TCP.OnLidarDecodedFrameEvent += localWorldMapManager.OnLidarDataReceived; lidarProcessor.OnLidarProcessedEvent += localWorldMapManager.OnLidarDataReceived; } //Events de recording if (usingLogging) { //lidar_OMD60M_UDP.OnLidarDecodedFrameEvent += logRecorder.OnRawLidarDataReceived; lidar_OMD60M_TCP.OnLidarDecodedFrameEvent += logRecorder.OnRawLidarDataReceived; omniCamera.BitmapFishEyeImageEvent += logRecorder.OnBitmapImageReceived; imuProcessor.OnIMUProcessedDataGeneratedEvent += logRecorder.OnIMURawDataReceived; robotMsgProcessor.OnPolarOdometrySpeedFromRobotEvent += logRecorder.OnPolarSpeedDataReceived; //omniCamera.OpenCvMatImageEvent += logRecorder.OnOpenCVMatImageReceived; } if (usingLogReplay) { logReplay.OnLidarEvent += perceptionManager.OnRawLidarDataReceived; //logReplay.OnCameraImageEvent += imageProcessingPositionFromOmniCamera.ProcessOpenCvMatImage; //logReplay.OnCameraImageEvent += absolutePositionEstimator.AbsolutePositionEvaluation; //lidarProcessor.OnLidarObjectProcessedEvent += localWorldMapManager.OnLidarObjectsReceived; } lock (ExitLock) { // Do whatever setup code you need here // once we are done wait Monitor.Wait(ExitLock); } }