コード例 #1
0
        private void btnStep_Click(object sender, EventArgs e)
        {
            ScanObservation m1 = new ScanObservation(m3DScaleFactor, mPrevLaser);
            ScanObservation m2 = new ScanObservation(m3DScaleFactor, mCurrLaser);

            MatchResult mR = null;

            mSM        = new MbIcpScanMatcher();
            mEstimated = new Pose2D();

            if (chkSeed.Checked)
            {
                mR = mSM.Match(m1, m2, mSeed);
            }
            else
            {
                mR = mSM.Match(m1, m2, new Pose2D());
            }

            if (mR.Converged)
            {
                Pose2D es = mR.EstimatedOdometry;
                mEstimated = compound(mEstimated, es);

                mCurrLaser.posRobot = new Pose2D(mEstimated.Position, mEstimated.Rotation);

                mMapPoints.Clear();
                ComputeMapPoints(mPrevLaser, 0);
                ComputeMapPoints(mCurrLaser, 1);

                rwDrawer.Invalidate();
            }
        }
コード例 #2
0
        private void Run()
        {
            string[] lines      = File.ReadAllLines(llLogFile.Text);
            int      startIndex = int.Parse(txtPrevLaserIndex.Text);

            mSeed      = new Pose2D();
            mPrevPose  = null;
            mCurrPose  = null;
            mEstimated = new Pose2D();

            //mSM = new MbIcpScanMatcher();
            mSM = new WeightedScanMatcher();

            bool Completed = false;

            while (mRun.ThreadState != ThreadState.AbortRequested)
            {
                if (startIndex >= lines.Length)
                {
                    break;
                }

                string l = lines[startIndex++];
                CarmenLogParser(l, ref Completed);
                //USARSimLogParser(l, ref Completed);

                if (Completed)
                {
                    Completed = false;

                    ScanObservation m1 = new ScanObservation(m3DScaleFactor, mPrevLaser);
                    ScanObservation m2 = new ScanObservation(m3DScaleFactor, mCurrLaser);

                    MatchResult mR = null;

                    if (chkSeed.Checked)
                    {
                        //mSeed.Position *= 0.003f;
                        //mSeed.Rotation *= 0.9f;
                        mR = mSM.Match(m1, m2, mSeed);
                    }
                    else
                    {
                        //Pose2D initQ = new Pose2D(0.1, 0.1, 0.1);
                        mR = mSM.Match(m1, m2, new Pose2D());
                    }

                    if (mR.Converged)
                    {
                        Pose2D es = mR.EstimatedOdometry;

                        mEstimated = compound(mEstimated, es);

                        mCurrLaser.posRobot = new Pose2D(mEstimated.Position, mEstimated.Rotation);

                        lock (mMapPoints)
                        {
                            ComputeMapPoints(mCurrLaser, 0);
                        }

                        rwDrawer.Invalidate();
                    }

                    //if (max(abs(mSeed)) > 0.01f)
                    {
                        mPrevLaser = mCurrLaser;
                        mSeed      = new Pose2D();
                    }
                }

                Thread.Sleep(10);
            }
        }