/// <summary>
 ///
 /// </summary>
 /// <param name="df"></param>
 /// <param name="sr"></param>
 /// <param name="sps"></param>
 /// <param name="msf"></param>
 private SamplingRateSetting(R2000DeviceFamily df, R2000SamplingRate sr, uint sps, double msf)
 {
     this.MaximumSampleRate    = sr;
     this.SamplesPerScan       = sps;
     this.DeviceFamily         = df;
     this.MaximumScanFrequency = msf;
 }
Exemple #2
0
        //async Task LidarSetApplicationBitmapMode()
        //{
        //    string request = @"http://" + LidarIpAddress + "/cmd/set_parameter?hmi_display_mode=application_bitmap";
        //    var content = await HttpClient.GetStringAsync(request);
        //    //Console.WriteLine(content);
        //}

        //async Task LidarSetImage(int horizontalShift)
        //{
        //    Image image = DrawText("Merci Pepperl+Fuchs", new Font("Verdana", 12.0f, FontStyle.Bold), -horizontalShift);

        //    var array = ConvertBitmapToArray(new Bitmap(image));
        //    var bitmapString = ConvertToBase64StringForLidar(array);

        //    string request = @"http://" + LidarIpAddress + "/cmd/set_parameter?hmi_application_bitmap="+ bitmapString;
        //    var content = await HttpClient.GetStringAsync(request);
        //}

        /// <summary>
        /// Set the sampling rate
        /// </summary>
        /// <param name="targetSamplingRate">Target rate or AutoMaximum</param>
        public void SetSamplingRate(R2000SamplingRate targetSamplingRate)
        {
            try
            {
                SetSamplingRateAsync(targetSamplingRate).Wait();
            }
            catch
            {
                ;
            }
        }
        //double angleIncrement;
        private void LidarStartAndAcquire(double freq, R2000SamplingRate samplingRate)
        {
            using (r2000 = new R2000Scanner(IPAddress.Parse("169.254.235.44"), R2000ConnectionType.TCPConnection))
            {
                r2000.Connect();
                r2000.SetSamplingRate(R2000SamplingRate._8kHz);
                r2000.SetScanFrequency(freq);
                r2000.SetSamplingRate(samplingRate);
                r2000.DisplayMessage(1, "Points :");
                r2000.DisplayMessage(2, "50 points");

                //angleIncrement = 2 * Math.PI/((double)R2000SamplingRate._252kHz / 20);

                r2000.OnlyStatusEvents().Subscribe(ev =>
                {
                    var oldColor            = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Blue;
                    Console.WriteLine($"Event: {ev.Level.ToString()} / {ev.Message}");
                    Console.ForegroundColor = oldColor;
                });


                r2000.OnlyLidarPoints()
                .BufferByScan()
                .Subscribe(x =>
                {
                    //lastLidarPtList = new List<PolarPoint>();

                    //lastLidarPtList.Add(new PolarPoint(x.Points[0].Distance / 1000, Utilities.Toolbox.DegToRad(x.Points[0].Azimuth)));
                    //for (int i=1; i< x.Points.Count; i++ )
                    //{
                    //    if()
                    //}
                    lastLidarPtList       = new List <PolarPointRssi>(x.Points.Select(pt => new PolarPointRssi(Utilities.Toolbox.DegToRad(pt.Azimuth), pt.Distance / 1000, pt.Amplitude)));
                    lastScanNumber        = (int)x.Scan;
                    newLidarDataAvailable = true;
                    //Console.WriteLine($"Got {x.Count} points for scan {x.Scan} / Min {x.Points.Min(pt => pt.Azimuth)} :: Max {x.Points.Max(pt => pt.Azimuth)}");
                });


                r2000.StartScan();

                while (true)
                {
                    Thread.Sleep(5);
                }
            }
        }
Exemple #4
0
        public LidaRxR2000(double freq = 20, R2000SamplingRate samplingRate = R2000SamplingRate._252kHz)
        {
            var threadStartLidar = new Thread(() => LidarStartAndAcquire(freq, samplingRate));

            threadStartLidar.IsBackground = true;
            threadStartLidar.SetApartmentState(ApartmentState.STA);
            threadStartLidar.Start();
            var threadSendEventLidar = new Thread(LidarSendEvent);

            threadSendEventLidar.IsBackground = true;
            threadSendEventLidar.SetApartmentState(ApartmentState.STA);
            threadSendEventLidar.Start();

            timerDisplayBitmap.Elapsed += TimerDisplayBitmap_Elapsed;
            timerDisplayBitmap.Start();
        }
Exemple #5
0
        /// <summary>
        /// Set the sampling rate
        /// </summary>
        /// <param name="targetSamplingRate">Target rate or AutoMaximum</param>
        public async Task SetSamplingRateAsync(R2000SamplingRate targetSamplingRate)
        {
            if (!Connected)
            {
                throw new LidaRxStateException("This instance is not yet connected to the R2000 scanner.");
            }

            // on recent devices we can check the configurable sample rate range!
            if (this.instanceProtocolVersion >= R2000ProtocolVersion.v101 &&
                targetSamplingRate != R2000SamplingRate.AutomaticMaximum)
            {
                var targetAsInt = (uint)targetSamplingRate;

                if (targetAsInt < SensorCapabilities.SamplingRateMin || targetAsInt > SensorCapabilities.SamplingRateMax)
                {
                    throw new ArgumentOutOfRangeException(
                              "targetSamplingRate",
                              $"Acceptable range is [{SensorCapabilities.SamplingRateMin}, {SensorCapabilities.SamplingRateMax}]");
                }
            }

            uint targetSamplesPerScan = 0;

            // select the max sr automatically if the user asks for it ;)
            if (targetSamplingRate == R2000SamplingRate.AutomaticMaximum)
            {
                var currentDeviceFamily  = this.SensorInformation.DeviceFamilly;
                var currentScanFrequency = this.MeasurementConfiguration.ScanFrequency;

                targetSamplesPerScan = SamplingRateSetting.Table
                                       .Where(x => x.DeviceFamily == currentDeviceFamily)
                                       .Where(x => x.MaximumScanFrequency <= currentScanFrequency)
                                       .Select(x => x.SamplesPerScan)
                                       .Max();
            }
            // if the user specified a sample rate, then check if it's in range
            // given the current scan frequency configuration
            else
            {
                var currentDeviceFamily  = this.SensorInformation.DeviceFamilly;
                var currentScanFrequency = this.MeasurementConfiguration.ScanFrequency;

                targetSamplesPerScan = SamplingRateSetting.Table
                                       .Where(x => x.DeviceFamily == currentDeviceFamily)
                                       .Where(x => x.MaximumScanFrequency >= currentScanFrequency)
                                       .Where(x => x.MaximumSampleRate == targetSamplingRate)
                                       .Select(x => x.SamplesPerScan)
                                       .Max();
            }

            if (targetSamplesPerScan == 0)
            {
                throw new ArgumentException("targetSamplingRate",
                                            "There's no valid configuration for your device and the chosen target sample rate. "
                                            + "Please check for valid configurations in the R2000 manual");
            }

            // write the config to the R2000
            await SetConfigParameter <MeasuringConfigurationInformation, uint>(x => x.SamplesPerScan, targetSamplesPerScan);

            // reflect the value in the local config
            this.MeasurementConfiguration.SamplesPerScan = targetSamplesPerScan;
        }
Exemple #6
0
 /// <summary>
 /// Set the sampling rate
 /// </summary>
 /// <param name="targetSamplingRate">Target rate or AutoMaximum</param>
 public void SetSamplingRate(R2000SamplingRate targetSamplingRate)
 {
     SetSamplingRateAsync(targetSamplingRate).Wait();
 }
Exemple #7
0
        private void LidarStartAndAcquire(double freq, R2000SamplingRate samplingRate)
        {
            while (true)
            {
                /// Si le lidar n'est pas connecté, on tente de le connecter
                if (!isLidarConnected)
                {
                    Console.WriteLine("Trying to connect Lidar R2000");
                    try
                    {
                        var r2000 = new R2000Scanner(IPAddress.Parse("169.254.235.44"), R2000ConnectionType.TCPConnection);
                        //using (r2000 = new R2000Scanner(IPAddress.Parse("169.254.235.44"), R2000ConnectionType.TCPConnection))
                        {
                            var isLidarReachable = r2000.Connect();
                            if (isLidarReachable)
                            {
                                r2000.SetSamplingRate(R2000SamplingRate._8kHz);
                                r2000.SetScanFrequency(freq);
                                r2000.SetSamplingRate(samplingRate);

                                //angleIncrement = 2 * Math.PI/((double)R2000SamplingRate._252kHz / 20);

                                r2000.OnlyStatusEvents().Subscribe(ev =>
                                {
                                    var oldColor            = Console.ForegroundColor;
                                    Console.ForegroundColor = ConsoleColor.Blue;
                                    Console.WriteLine($"Event: {ev.Level.ToString()} / {ev.Message}");
                                    Console.ForegroundColor = oldColor;
                                });


                                r2000.OnlyLidarPoints()
                                .BufferByScan()
                                .Subscribe(x =>
                                {
                                    lastLidarPtList       = new List <PolarPointRssi>(x.Points.Select(pt => new PolarPointRssi(Utilities.Toolbox.DegToRad(pt.Azimuth), pt.Distance / 1000, pt.Amplitude)));
                                    lastScanNumber        = (int)x.Scan;
                                    newLidarDataAvailable = true;
                                });

                                r2000.StartScan();
                                Console.WriteLine("Lidar R2000 Connected");
                                isLidarConnected = true;
                            }
                        }
                    }
                    catch (IOException e)
                    {
                        Console.WriteLine(e);
                        isLidarConnected = false;
                    }


                    //using (r2000 = new R2000Scanner(IPAddress.Parse("169.254.235.44"), R2000ConnectionType.TCPConnection))
                    //{
                    //    r2000.Connect();
                    //    r2000.SetSamplingRate(R2000SamplingRate._8kHz);
                    //    r2000.SetScanFrequency(freq);
                    //    r2000.SetSamplingRate(samplingRate);
                    //    r2000.DisplayMessage(1, "Points :");
                    //    r2000.DisplayMessage(2, "50 points");

                    //    r2000.OnlyStatusEvents().Subscribe(ev =>
                    //    {
                    //        var oldColor = Console.ForegroundColor;
                    //        Console.ForegroundColor = ConsoleColor.Blue;
                    //        Console.WriteLine($"Event: {ev.Level.ToString()} / {ev.Message}");
                    //        Console.ForegroundColor = oldColor;
                    //    });


                    //    r2000.OnlyLidarPoints()
                    //        .BufferByScan()
                    //        .Subscribe(x =>
                    //        {
                    //            lastLidarPtList = new List<PolarPointRssi>(x.Points.Select(pt => new PolarPointRssi(Utilities.Toolbox.DegToRad(pt.Azimuth), pt.Distance / 1000, pt.Amplitude)));
                    //            lastScanNumber = (int)x.Scan;
                    //            newLidarDataAvailable = true;
                    //        });

                    //    r2000.StartScan();
                    //    while (true)
                    //    {
                    //        Thread.Sleep(5);
                    //    }

                    //}
                }
                Thread.Sleep(2000);
            }
        }