首页 > 解决方案 > 使用 PCL 调整粒子滤波的参数

问题描述

我正在使用 PCL(点云库)中的粒子过滤器进行 3D 点云对象跟踪(圆柱形对象)。该文档没有安静地解释有关它如何影响结果的参数。我已经对粒子滤波器做了一些研究,但是大多数参数粒子滤波器和相干性(我认为这里的相干性对应于似然函数)是特定于点云对象跟踪而不是机器人定位的。

std::vector<double> default_step_covariance = std::vector<double> (6, 0.015 * 0.015);
  default_step_covariance[3] *= 40.0;
  default_step_covariance[4] *= 40.0;
  default_step_covariance[5] *= 40.0;

  std::vector<double> initial_noise_covariance = std::vector<double> (6, 0.00001);
  std::vector<double> default_initial_mean = std::vector<double> (6, 0.0);

  KLDAdaptiveParticleFilterOMPTracker<RefPointType, ParticleT>::Ptr tracker
    (new KLDAdaptiveParticleFilterOMPTracker<RefPointType, ParticleT> (8));

  ParticleT bin_size;
  bin_size.x = 0.1f;
  bin_size.y = 0.1f;
  bin_size.z = 0.1f;
  bin_size.roll = 0.1f;
  bin_size.pitch = 0.1f;
  bin_size.yaw = 0.1f;


  //Set all parameters for  KLDAdaptiveParticleFilterOMPTracker
  tracker->setMaximumParticleNum (1000);
  tracker->setDelta (0.99);
  tracker->setEpsilon (0.2);
  tracker->setBinSize (bin_size);

  //Set all parameters for  ParticleFilter
  tracker_ = tracker;
  tracker_->setTrans (Eigen::Affine3f::Identity ());
  tracker_->setStepNoiseCovariance (default_step_covariance);
  tracker_->setInitialNoiseCovariance (initial_noise_covariance);
  tracker_->setInitialNoiseMean (default_initial_mean);
  tracker_->setIterationNum (1);
  tracker_->setParticleNum (600);
  tracker_->setResampleLikelihoodThr(0.00);
  tracker_->setUseNormal (false);


  //Setup coherence object for tracking
  ApproxNearestPairPointCloudCoherence<RefPointType>::Ptr coherence
    (new ApproxNearestPairPointCloudCoherence<RefPointType>);

  DistanceCoherence<RefPointType>::Ptr distance_coherence
    (new DistanceCoherence<RefPointType>);
  coherence->addPointCoherence (distance_coherence);

  pcl::search::Octree<RefPointType>::Ptr search (new pcl::search::Octree<RefPointType> (0.01));
  coherence->setSearchMethod (search);
  coherence->setMaximumDistance (0.01);

  tracker_->setCloudCoherence (coherence);

此代码取自PCL 粒子过滤器示例。在 KLD Adaptive Particle Filter OMP Tracker 和 Particle filter(setMaximumParticleNum 和 setParticleNum)中有两次定义的粒子数参数。bin 大小、协方差、delta、epsilon 和所有其他关于它做什么或它如何影响结果的参数。任何解释、研究论文或任何类型的资源都会非常有帮助。谢谢 !!!!

PS:PCL问答论坛没有上线。

标签: c++rospoint-cloud-librarypoint-cloudspcl

解决方案


推荐阅读