/// <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();
        }
示例#2
0
        /// <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);
        }
示例#3
0
 /// <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);
        }
示例#7
0
        /// <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);
            }
        }
示例#8
0
        /// <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);
示例#11
0
 /// <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);
示例#12
0
 public abstract void JumpstartArbiter(ArbiterRoadNetwork roadNetwork, ArbiterMissionDescription mission);