Пример #1
0
        public List <SimulatedVehicle> getList(String filePath)
        {
            CSVReader reader = new CSVReader(filePath);

            if (reader != null)
            {
                reader.readHeader();

                while (reader.readRecord())
                {
                    SimulatedVehicle s = new SimulatedVehicle();
                    s.SimulationTime = Convert.ToSingle(reader.get(CSVCloumnName.SimulationTime));
                    s.PositionX      = Convert.ToSingle(reader.get(CSVCloumnName.PositionX));
                    s.PositionY      = Convert.ToSingle(reader.get(CSVCloumnName.PositionY));
                    s.Speed          = Convert.ToSingle(reader.get(CSVCloumnName.Speed));
                    s.Acceleration   = Convert.ToSingle(reader.get(CSVCloumnName.Acceleration));
                    s.SteeringWheel  = Convert.ToSingle(reader.get(CSVCloumnName.SteeringWheel));
                    s.Offset         = Convert.ToSingle(reader.get(CSVCloumnName.Offset));
                    s.BrakePedal     = Convert.ToSingle(reader.get(CSVCloumnName.BrakePedal));
                    s.TotalDistance  = Convert.ToSingle(reader.get(CSVCloumnName.TotalDistance));
                    s.Braking        = Convert.ToSingle(reader.get(CSVCloumnName.Braking));
                    s.Reacting       = Convert.ToSingle(reader.get(CSVCloumnName.Reacting));
                    s.Area           = Convert.ToSingle(reader.get(CSVCloumnName.Area));

                    dataList.Add(s);
                    s = null;
                }

                return(dataList);
            }
            return(null);
        }
Пример #2
0
        private void skipUselessData()
        {
            SimulatedVehicle vehicleFirst = udp.getData();

            while (true)
            {
                if (udp == null)
                {
                    break;
                }
                SimulatedVehicle vehicleNext = udp.getData();
                if (vehicleNext == null || vehicleNext.SimulationTime == vehicleFirst.SimulationTime)
                {
                    continue;
                }
                else
                {
                    play(vehicleNext);
                    PageList.Experience.refreshTextBlocks();

                    if (vissim != null)
                    {
                        vissim.set(currentVehicle);
                    }
                    break;
                }
            }
        }
Пример #3
0
        private void reset()
        {
            user = PageList.Main.User;

            mode  = PageList.Main.Selection.ModeSelect;
            scene = PageList.Main.Selection.SceneSelect;

            currentVehicle = null;
            vehicles       = new List <SimulatedVehicle>();

            brakeActivity = new BrakeActivity();
            reactActivity = new ReactActivity();
        }
Пример #4
0
        public void play(SimulatedVehicle vehicle)
        {
            if (vehicle != null && vehicle.SimulationTime > 0.000001)
            {
                preProcess(vehicle);

                currentVehicle = vehicle;
                vehicles.Add(vehicle);

                speed.addRealTimePoint(mode, new Point(vehicle.SimulationTime, vehicle.Speed));
                offset.addRealTimePoint(mode, new Point(vehicle.SimulationTime, vehicle.Offset));
                accelerate.addRealTimePoint(mode, new Point(vehicle.SimulationTime, vehicle.Acceleration));
                brake.addRealTimePoint(mode, new Point(vehicle.SimulationTime, vehicle.BrakePedal));
                follow.addRealTimePoint(mode, new Point(vehicle.SimulationTime, vehicle.DistanceToNext));

                setBrake(vehicle);
                setReact(vehicle);
            }
        }
Пример #5
0
        private void setTopAndBottom()
        {
            top    = new SimulatedVehicle();
            bottom = new SimulatedVehicle();
            foreach (SimulatedVehicle vehicle in vehicles)
            {
                foreach (PropertyInfo p in vehicle.GetType().GetProperties())
                {
                    if ((float)p.GetValue(vehicle) > (float)p.GetValue(top))
                    {
                        p.SetValue(top, p.GetValue(vehicle));
                    }

                    if ((float)p.GetValue(vehicle) < (float)p.GetValue(bottom))
                    {
                        p.SetValue(bottom, p.GetValue(vehicle));
                    }
                }
            }
        }
Пример #6
0
 private void setReact(SimulatedVehicle vehicle)
 {
     if (vehicle.Reacting > 0.000001)
     {
         if (!reacting)
         {
             reacting = true;
             reactActivity.TimeStart = vehicle.SimulationTime;
         }
         reactActivity.ReactTime = (vehicle.SimulationTime - reactActivity.TimeStart) * 1000;
     }
     else
     {
         if (reacting)
         {
             reacting = false;
             reactActivity.TimeEnd   = vehicle.SimulationTime;
             reactActivity.ReactTime = vehicle.SimulationTime - reactActivity.TimeStart;
         }
     }
 }
Пример #7
0
 private void setBrake(SimulatedVehicle vehicle)
 {
     if (vehicle.Braking > 0.000001)
     {
         if (!braking)
         {
             braking = true;
             brakeActivity.BrakeStart = vehicle.TotalDistance;
         }
         brakeActivity.BrakeDistance = vehicle.TotalDistance - brakeActivity.BrakeStart;
     }
     else
     {
         if (braking)
         {
             braking = false;
             brakeActivity.BrakeEnd      = vehicle.TotalDistance;
             brakeActivity.BrakeDistance = vehicle.TotalDistance - brakeActivity.BrakeStart;
         }
     }
 }
Пример #8
0
        private void setMarks()
        {
            marks = new List <DistractMark>();

            float normalMark = 0;
            float equal      = 0.00001f;

            for (int i = 0; i < vehicles.Count; i++)
            {
                if (Math.Abs(vehicles[i].Area - normalMark) >= equal)
                {
                    DistractMark mark = new DistractMark();
                    mark.Start = vehicles[i];

                    mark.Top    = new SimulatedVehicle();
                    mark.Bottom = new SimulatedVehicle();
                    while (++i < vehicles.Count - 1 && Math.Abs(vehicles[i].Area - normalMark) >= equal)
                    {
                        SimulatedVehicle vehicle = vehicles[i];
                        foreach (PropertyInfo p in vehicle.GetType().GetProperties())
                        {
                            if ((float)p.GetValue(vehicle) > (float)p.GetValue(mark.Top))
                            {
                                p.SetValue(mark.Top, p.GetValue(vehicle));
                            }

                            if ((float)p.GetValue(vehicle) < (float)p.GetValue(mark.Bottom))
                            {
                                p.SetValue(mark.Bottom, p.GetValue(vehicle));
                            }
                        }
                    }

                    mark.End = vehicles[i];

                    marks.Add(mark);
                }
            }
        }
Пример #9
0
        public void preProcess(SimulatedVehicle vehicle)
        {
            if (vehicle.Area < 0)
            {
                accident = 1;
            }

            if (PageList.Main.Selection.SceneSelect == UserSelections.SceneBrake ||
                PageList.Main.Selection.SceneSelect == UserSelections.SceneLaneChange)
            {
                float initLane = 4;
                vehicle.Offset += (vehicle.Lane - initLane) * 4;
            }

            if (vehicle.DistanceToNext > 2000)
            {
                float frontVehicleSpeed = (float)(70 / 3.6);
                vehicle.DistanceToNext = currentVehicle.DistanceToNext
                                         + vehicle.TotalDistance - currentVehicle.TotalDistance
                                         - frontVehicleSpeed * (vehicle.SimulationTime - currentVehicle.SimulationTime);
            }
        }
Пример #10
0
        public void set(SimulatedVehicle vehicle)
        {
            if (vehicle != null)
            {
                if (!dataIn)
                {
                    lastLane = (int)vehicle.Lane;
                }
                else
                {
                    int laneToChange = (int)vehicle.Lane - lastLane + lane;
                    lane     = laneToChange <= laneInVissim && laneToChange > 0 ? laneToChange : lane;
                    lastLane = (int)vehicle.Lane;
                }

                dataIn = true;
                speed  = vehicle.Speed;
                if (vehicle.PositionX > 1206.141 && vehicle.PositionX <= 1736.125)
                {
                    link  = 1;
                    coord = 529.984 - (vehicle.PositionX - 1206.720);
                }
                if (vehicle.PositionX > 1190.628 && vehicle.PositionX <= 1206.141)
                {
                    link  = 10001;
                    coord = 15.00 - Math.Abs(vehicle.PositionX - 1190.628);
                }
                if (vehicle.PositionX > 1151.405 && vehicle.PositionX <= 1190.628)
                {
                    link  = 3;
                    coord = 39.323 - Math.Abs(vehicle.PositionX - 1151.405);
                }
                if (vehicle.PositionX < 1151.405)
                {
                    link = 2;
                }
                signalState = (int)vehicle.TrafficLight;
            }
        }
Пример #11
0
        /// <summary>
        /// 传入一个字节数组,传出一个SimulatedVehicle对象
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        SimulatedVehicle byteToSimulatedVehicle(byte[] buffer)
        {
            SimulatedVehicle s = new SimulatedVehicle();

            s.SimulationTime = getFloat(buffer, UDPOffset.SimulationTime);
            s.PositionX      = getFloat(buffer, UDPOffset.PositionX);
            s.PositionY      = getFloat(buffer, UDPOffset.PositionY);
            s.Speed          = getFloat(buffer, UDPOffset.Speed);
            s.Acceleration   = getFloat(buffer, UDPOffset.Acceleration);
            s.SteeringWheel  = getFloat(buffer, UDPOffset.SteeringWheel);
            s.Offset         = getFloat(buffer, UDPOffset.Offset);
            s.BrakePedal     = getFloat(buffer, UDPOffset.BrakePedal);
            s.TotalDistance  = getFloat(buffer, UDPOffset.TotalDistance);
            s.Braking        = getFloat(buffer, UDPOffset.Braking);
            s.Reacting       = getFloat(buffer, UDPOffset.Reacting);
            s.Area           = getFloat(buffer, UDPOffset.Area);
            s.DistanceToNext = getFloat(buffer, UDPOffset.DistanceToNext);
            s.Lane           = getFloat(buffer, UDPOffset.Lane);
            s.TrafficLight   = getFloat(buffer, UDPOffset.TrafficLight);

            return(s);
        }
Пример #12
0
        // distance oriented
        private void plotMarks()
        {
            if (currentScene == UserSelections.ScenePractice)
            {
                return;
            }

            SimulatedVehicle top    = new SimulatedVehicle();
            SimulatedVehicle bottom = new SimulatedVehicle();

            int            count = 0;
            int            index;
            ExperienceUnit unit = null;

            foreach (int mode in UserSelections.ModeList)
            {
                index = user.Index[UserSelections.getIndex(currentScene, mode)];
                if (index != -1)
                {
                    unit = user.Experiences[index];
                    foreach (PropertyInfo p in top.GetType().GetProperties())
                    {
                        if ((float)p.GetValue(unit.Top) > (float)p.GetValue(top))
                        {
                            p.SetValue(top, (float)p.GetValue(unit.Top));
                        }

                        if ((float)p.GetValue(unit.Bottom) < (float)p.GetValue(bottom))
                        {
                            p.SetValue(bottom, (float)p.GetValue(unit.Bottom));
                        }
                    }
                    ++count;
                }
            }


            if (count != 0)
            {
                foreach (DistractMark mark in unit.Marks)
                {
                    float start = mark.Start.TotalDistance;
                    float end   = mark.End.TotalDistance;

                    SpeedChart.AddAMarker(new List <Point>()
                    {
                        new Point(start, top.Speed),
                        new Point(start, bottom.Speed), new Point(end, bottom.Speed), new Point(end, top.Speed), new Point(start, top.Speed)
                    });
                    OffsetChart.AddAMarker(new List <Point>()
                    {
                        new Point(start, top.Offset),
                        new Point(start, bottom.Offset), new Point(end, bottom.Offset), new Point(end, top.Offset), new Point(start, top.Offset)
                    });
                    AccelerationChart.AddAMarker(new List <Point>()
                    {
                        new Point(start, top.Acceleration),
                        new Point(start, bottom.Acceleration), new Point(end, bottom.Acceleration), new Point(end, top.Acceleration), new Point(start, top.Acceleration)
                    });
                    BrakeChart.AddAMarker(new List <Point>()
                    {
                        new Point(start, top.BrakePedal),
                        new Point(start, bottom.BrakePedal), new Point(end, bottom.BrakePedal), new Point(end, top.BrakePedal), new Point(start, top.BrakePedal)
                    });
                    FollowChart.AddAMarker(new List <Point>()
                    {
                        new Point(start, top.DistanceToNext),
                        new Point(start, bottom.DistanceToNext), new Point(end, bottom.DistanceToNext), new Point(end, top.DistanceToNext), new Point(start, top.DistanceToNext)
                    });
                }
            }

            if (showMark && axis == 1)
            {
                showMarkers();
            }
            else
            {
                hideMarkers();
            }
        }
Пример #13
0
        FromFiles(string datafile, HistMode histmode,
                  double c, double p, double reftime)
        {
            string tmpdir  = Util.TemporaryDir();
            string datadir = Path.Combine(tmpdir, "data");

            ZipFile.ExtractToDirectory(datafile, datadir);

            string scenefile    = Path.Combine(datadir, "scene.world");
            string vehiclefile  = Path.Combine(datadir, "trajectory.out");
            string estimatefile = Path.Combine(datadir, "estimate.out");
            string mapfile      = Path.Combine(datadir, "maps.out");
            string vismapfile   = Path.Combine(datadir, "vismaps.out");
            string tagfile      = Path.Combine(datadir, "tags.out");


            if (!File.Exists(scenefile))
            {
                scenefile = "";
            }

            if (!File.Exists(vismapfile))
            {
                vismapfile = "";
            }

            if (!File.Exists(tagfile))
            {
                tagfile = "";
            }

            TimedState      trajectory;
            TimedTrajectory estimate;
            TimedMapModel   map;
            TimedMapModel   vislandmarks;
            Map             landmarks = new Map(3);
            TimedMessage    tags;

            PoseT dummyP = new PoseT();

            trajectory = FP.TimedArrayFromDescriptor(File.ReadAllLines(vehiclefile), dummyP.StateSize);
            estimate   = FP.TrajectoryHistoryFromDescriptor(File.ReadAllText(estimatefile), dummyP.StateSize);
            map        = FP.MapHistoryFromDescriptor(File.ReadAllText(mapfile), 3);

            if (!string.IsNullOrEmpty(vismapfile))
            {
                vislandmarks = FP.MapHistoryFromDescriptor(File.ReadAllText(vismapfile), 3);

                for (int i = vislandmarks.Count; i < map.Count; i++)
                {
                    vislandmarks.Add(Tuple.Create(map[i].Item1, new Map(3)));
                }
            }
            else
            {
                vislandmarks = new TimedMapModel();

                foreach (var entry in map)
                {
                    vislandmarks.Add(Tuple.Create(entry.Item1, new Map(3)));
                }
            }

            double[][] did = { new double[3] {
                                   1e-3, 0, 0
                               },
                               new double[3] {
                                   0, 1e-3, 0
                               },
                               new double[3] {
                                   0, 0, 1e-3
                               } };

            if (!string.IsNullOrEmpty(scenefile))
            {
                var explorer = SimulatedVehicle <MeasurerT, PoseT, MeasurementT> .
                               FromFile(File.ReadAllText(scenefile));

                foreach (var landmark in explorer.Landmarks)
                {
                    landmarks.Add(new Gaussian(landmark, did, 1.0));
                }
            }

            if (!string.IsNullOrEmpty(tagfile))
            {
                tags = FP.TimedMessageFromDescriptor(File.ReadAllLines(tagfile));
            }
            else
            {
                tags = new TimedMessage();
            }

            bool online = (estimate[0].Item2.Count < estimate[estimate.Count - 1].Item2.Count &&
                           estimate.Count == trajectory.Count);

            if (!online && histmode != HistMode.Timed)
            {
                Console.WriteLine("Warning: Offline mode is not compatible with the selected history mode. " +
                                  "Switching to time-average.");

                histmode = HistMode.Timed;
            }

            return(new Plot <MeasurerT, PoseT, MeasurementT>(trajectory, estimate, map, vislandmarks,
                                                             landmarks, c, p, reftime, histmode, tags, online));
        }