/// <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; }
//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); } } }
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(); }
/// <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; }
/// <summary> /// Set the sampling rate /// </summary> /// <param name="targetSamplingRate">Target rate or AutoMaximum</param> public void SetSamplingRate(R2000SamplingRate targetSamplingRate) { SetSamplingRateAsync(targetSamplingRate).Wait(); }
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); } }