/// <summary> /// Sets the road network /// </summary> /// <param name="roads"></param> private void SetRoadNetwork(ArbiterRoadNetwork roads) { // set network RemoraCommon.RoadNetwork = roads; // clean out display this.roadDisplay1.RemoveDisplayObjectType(this.roadDisplay1.RoadNetworkFilter); // add to display this.roadDisplay1.AddDisplayObjectRange(roads.DisplayObjects); // notify RemoraOutput.WriteLine("Set Road Network", OutputType.Remora); // test mission if (RemoraCommon.Mission != null) { RemoraOutput.WriteLine("Testing Previously Loaded Mission aginst new Road Network, Removing and Reloading", OutputType.Remora); ArbiterMissionDescription tmp = RemoraCommon.Mission; RemoraCommon.Mission = null; this.SetMission(tmp); } // redraw this.roadDisplay1.Invalidate(); }
/// <summary> /// Updates the ai with a new mission if can /// </summary> /// <param name="mission"></param> /// <returns></returns> public override bool UpdateMission(ArbiterMissionDescription mission) { try { ArbiterOutput.Output("Setting new mission"); CarMode carMode = CoreCommon.Communications.GetCarMode(); if (carMode == CarMode.Pause || carMode == CarMode.Human) { if (mission != null) { // create roads and mission CoreCommon.RoadNetwork.SetSpeedLimits(mission.SpeedLimits); this.arbiterMissionDescription = mission; CoreCommon.Mission = mission; return(true); } else { ArbiterOutput.Output("Mission must have value"); } } else { ArbiterOutput.Output("Cannot set mission when car is in CarMode: " + carMode.ToString()); } } catch (Exception ex) { ArbiterOutput.Output("UpdateMission(ArbiterMissionDescription mission) Failed", ex); } return(false); }
/// <summary> /// Sets the road network and mission for the car /// </summary> /// <param name="roadNetwork"></param> /// <param name="mission"></param> public override void SetRoadNetworkAndMission(ArbiterRoadNetwork roadNetwork, ArbiterMissionDescription mission) { this.roadNetwork = roadNetwork; this.mission = mission; this.roadNetwork.SetSpeedLimits(mission.SpeedLimits); this.world = new WorldService(this.roadNetwork); }
/// <summary> /// Begin simulation /// </summary> public void BeginSimulation(ArbiterRoadNetwork roadNetwork, ArbiterMissionDescription mission) { try { // startup clients foreach (KeyValuePair <SimVehicleId, SimVehicle> vhcs in this.Vehicles) { // set road and mission SimulatorClientFacade scf = this.simulationMain.clientHandler.AvailableClients[this.simulationMain.clientHandler.VehicleToClientMap[vhcs.Key]]; // check if we need to randomize mission if (vhcs.Value.RandomMission) { // create random mission Queue <ArbiterCheckpoint> checks = new Queue <ArbiterCheckpoint>(60); int num = mission.MissionCheckpoints.Count - 1; ArbiterCheckpoint[] checkPointArray = mission.MissionCheckpoints.ToArray(); Random r = new Random(); for (int i = 0; i < 60; i++) { checks.Enqueue(checkPointArray[r.Next(num)]); } ArbiterMissionDescription amd = new ArbiterMissionDescription(checks, mission.SpeedLimits); // set road , mission scf.SetRoadNetworkAndMission(roadNetwork, amd); } // otherwise no random mission else { // set road , mission scf.SetRoadNetworkAndMission(roadNetwork, mission); } // startup ai bool b = scf.StartupVehicle(); // check for false if (!b) { Console.WriteLine("Error starting simulation for vehicle id: " + vhcs.Key.ToString()); return; } } } catch (Exception e) { Console.WriteLine("Error starting simulation: \n" + e.ToString()); return; } // run sim this.RunSimulation(); }
/// <summary> /// Constructor /// </summary> /// <param name="arn"></param> /// <param name="mission"></param> /// <param name="currentCenter"></param> public MissionToolbox(ArbiterRoadNetwork arn, ArbiterMissionDescription mission, Coordinates currentCenter) { InitializeComponent(); this.RoadNetwork = arn; this.Mission = mission; this.roadDisplay1.Center(currentCenter); this.CreateMissionCheckpoints = new List <object>(); this.currentMissionComboBox.Click += new EventHandler(currentMissionComboBox_Click); this.selectMissionCheckpointComboBox.Click += new EventHandler(selectMissionCheckpointComboBox_Click); this.CreateMissionNonDefaultSpeeds = new Dictionary <string, ArbiterSpeedLimit>(); }
/// <summary> /// Open a mission from a file /// </summary> /// <param name="p"></param> private ArbiterMissionDescription OpenMissionFromFile(string p) { // create file FileStream fs = new FileStream(p, FileMode.Open); // serializer BinaryFormatter bf = new BinaryFormatter(); // serialize ArbiterMissionDescription amd = (ArbiterMissionDescription)bf.Deserialize(fs); // release holds fs.Dispose(); return(amd); }
/// <summary> /// Starts the vehicle /// </summary> /// <param name="arbiterRoadNetwork"></param> /// <param name="arbiterMissionDescription"></param> /// <returns></returns> public bool StartupVehicle(ArbiterRoadNetwork arbiterRoadNetwork, ArbiterMissionDescription arbiterMissionDescription) { try { // get arbiter this.client.ClientArbiter = (ArbiterAdvancedRemote)this.objectDirectory.Resolve("ArbiterAdvancedRemote_" + SimulatorClient.MachineName); // set road and mission and spool up ai to wait for initial data stream this.client.ClientArbiter.JumpstartArbiter(arbiterRoadNetwork, arbiterMissionDescription); // success! return(true); } catch (Exception e) { Console.WriteLine("Error spooling up ai: \n" + e.ToString()); return(false); } }
/// <summary> /// Jumpstarts the ai with a new road network and mission if we can /// </summary> /// <param name="roadNetwork"></param> /// <param name="mission"></param> public override void JumpstartArbiter(ArbiterRoadNetwork roadNetwork, ArbiterMissionDescription mission) { try { ArbiterOutput.Output("Jumpstarting Arbiter"); // warn if carmode not correct CarMode carMode = CoreCommon.Communications.GetCarMode(); if (carMode != CarMode.Pause && carMode != CarMode.Human) { ArbiterOutput.Output("Warning: Vehicle is in CarMode: " + carMode.ToString()); } if (roadNetwork != null && mission != null) { // destroy intelligence if exists this.intelligenceCore.DestroyIntelligence(); // create roads and mission roadNetwork.SetSpeedLimits(mission.SpeedLimits); roadNetwork.GenerateVehicleAreas(); this.arbiterRoadNetwork = roadNetwork; this.arbiterMissionDescription = mission; CoreCommon.RoadNetwork = roadNetwork; CoreCommon.Mission = mission; // startup ai this.intelligenceCore.Jumpstart(); } else { ArbiterOutput.Output("RoadNetwork and Mission must both have value"); } } catch (Exception ex) { ArbiterOutput.Output("JumpstartArbiter(ArbiterRoadNetwork roadNetwork, ArbiterMissionDescription mission) Failed", ex); } }
/// <summary> /// Sets mission /// </summary> /// <param name="mission"></param> private void SetMission(ArbiterMissionDescription mission) { // set mission RemoraCommon.Mission = mission; // set speeds if can if (RemoraCommon.RoadNetwork != null) { try { RemoraCommon.RoadNetwork.SetSpeedLimits(mission.SpeedLimits); } catch (Exception e) { RemoraOutput.WriteLine("Error setting road network speed limits from inputted mission: " + e.ToString(), OutputType.Remora); } RemoraOutput.WriteLine("Successfully loaded mission, passed speed limit set check", OutputType.Remora); int numAreas = RemoraCommon.RoadNetwork.ArbiterSegments.Count + RemoraCommon.RoadNetwork.ArbiterZones.Count; int numSpeeds = RemoraCommon.Mission.SpeedLimits.Count; if (numAreas != numSpeeds) { RemoraOutput.WriteLine("Warning: Number of Speed Limits: " + numSpeeds.ToString() + " not equal to number of network Areas: " + numAreas.ToString(), OutputType.Remora); } else { RemoraOutput.WriteLine("Number of Speed Limits: " + numSpeeds.ToString() + " equal to number of network Areas: " + numAreas.ToString(), OutputType.Remora); } } else { RemoraOutput.WriteLine("Cannot load Mission before Road Network", OutputType.Remora); } }
/// <summary> /// Sets the road network and mission for the car /// </summary> /// <param name="roadNetwork"></param> /// <param name="mission"></param> public abstract void SetRoadNetworkAndMission(ArbiterRoadNetwork roadNetwork, ArbiterMissionDescription mission);
/// <summary> /// Udpates teh ai's mission /// </summary> /// <param name="mission"></param> /// <returns></returns> /// <remarks>Vehicle needs to be in pause</remarks> public abstract bool UpdateMission(ArbiterMissionDescription mission);
public abstract void JumpstartArbiter(ArbiterRoadNetwork roadNetwork, ArbiterMissionDescription mission);