private static void Main(string[] args) { var serialPort = new SerialPort("COM3", 9600, Parity.None); serialPort.Open(); var protocol = new Protocol(serialPort); var weightPublisher = new ChannelReader(protocol); var observer = weightPublisher.ObserveWeights(TimeSpan.FromMilliseconds(1)).Publish(); var disposable = observer.Connect(); var stdout = observer.Subscribe(weights => Console.WriteLine(String.Join(", ", weights))); var channels = new List<IObservable<float>>(8); for (var index = 0; index < 8; index++) { var chIndex = index; var channel = observer.Select(values => values[chIndex]) .Buffer(TimeSpan.FromSeconds(1)) .Select(buf => { if (buf.Count != 0) return buf.Average(f => f); return 0; }); channels.Add(channel); } var common = channels.Zip(); common.Subscribe( weights => Console.WriteLine(string.Join(", ", weights.Select(f => f.ToString("0.00"))))); var interpolators = _conf.Sensors.Select(s => new Interpolator.ChannelInterpolator(s.Interpolation)).ToList(); var interpolator = new Interpolator(interpolators); var platformSize = _conf.Platform.Size; var leftPlatform = new PlatformDiagnostic(platformSize, _conf.Sensors.Take(4).ToList(), _conf.Platform.LeftCorrection); var rightPlatform = new PlatformDiagnostic(platformSize, _conf.Sensors.Skip(4).ToList(), _conf.Platform.RightCorrection); var filtered = SortSkipTakeAvgFilter.Filter(observer, 8, 2, 4); var weightObserver = interpolator.Interpolate(filtered); var leftWeightObserver = weightObserver.Select(list => list.Take(4).ToList()); var rightWeightObserver = weightObserver.Select(list => list.Skip(4).ToList()); var leftCenterObserver = leftPlatform.Center(leftWeightObserver); var rightCenterObserver = rightPlatform.Center(rightWeightObserver); var plotDataObserver = leftCenterObserver.Zip(rightCenterObserver, Tuple.Create); plotDataObserver.Subscribe(data => Console.WriteLine("Left: {0}, Right: {1}", data.Item1, data.Item2)); Console.ReadKey(false); stdout.Dispose(); disposable.Dispose(); Console.ReadKey(); }
public void InterpolatorFromConfigurationTest() { var scope = ParseConfigurationFromResources(); Assert.IsInstanceOf<ConfigObject>(scope); Assert.IsInstanceOf<ConfigObject[]>(scope.Sensors); var interpolation = scope.Sensors as ICollection<dynamic>; Assert.IsNotNull(interpolation); var channelInterpolations = interpolation .Select(entry => ((ICollection<dynamic>)entry.Points).Select(p => new PointF(p.Value, p.Weight)).ToList()).ToList(); channelInterpolations.Count.Should().Be(8); channelInterpolations[0][0].ShouldBeEquivalentTo(new PointF(265f, 0)); channelInterpolations[4][1].ShouldBeEquivalentTo(new PointF(-823, 6)); var interpolator = new Interpolator(channelInterpolations.Select(_ => new Interpolator.ChannelInterpolator(_)).ToArray()); Assert.IsNotNull(interpolator); }
private void InitializeProcessing(IConnectableObservable<List<float>> channelObserver) { var interpolators = _config.Sensors.Select(s => new Interpolator.ChannelInterpolator(s.Interpolation)).ToList(); var interpolator = new Interpolator(interpolators); var platformSize = _config.Platform.Size; var leftPlatform = new PlatformDiagnostic(platformSize, _config.Sensors.Take(4).ToList(), _config.Platform.LeftCorrection); var rightPlatform = new PlatformDiagnostic(platformSize, _config.Sensors.Skip(4).ToList(), _config.Platform.RightCorrection); var filtered = CurrentAvfFilter.Filter(channelObserver, 10); var weightObserver = interpolator.Interpolate(filtered); var leftWeightObserver = weightObserver.Select(list => list.Take(4).ToList()); var rightWeightObserver = weightObserver.Select(list => list.Skip(4).ToList()); var leftCenterObserver = leftPlatform.Center(leftWeightObserver); var rightCenterObserver = rightPlatform.Center(rightWeightObserver); _indicatorsForm.Prepare(leftPlatform, leftCenterObserver, rightPlatform, rightCenterObserver); var plotDataObserver = leftCenterObserver.ObserveOn(Scheduler.Default).Zip(rightCenterObserver, (l, r) => new PlotData() {LeftPoint = l, RightPoint = r}); StartTracking(plotDataObserver); }