karto slam

输入:scan、tf(necessary:laser、base、odometry)

输出:map

How to use Karto stand-alone (tutorial1.cpp)

1. 创建一个LaserRangeFinder类对象

 // Create a laser range finder device - use SmartPointer to let karto subsystem manage memory.
  karto::Name name("laser0");
  karto::LaserRangeFinder* pLaserRangeFinder = karto::LaserRangeFinder::CreateLaserRangeFinder(karto::LaserRangeFinder_Custom, name);
  pLaserRangeFinder->SetOffsetPose(karto::Pose2(1.0, 0.0, 0.0));
  pLaserRangeFinder->SetAngularResolution(karto::math::DegreesToRadians(0.5));
  pLaserRangeFinder->SetRangeThreshold(12.0);

定义了一个自定义的激光测距仪,主要包括名字,教分辨率,视野,最大测距范围,位姿等设置

2. LocalizedRangScan

Karto有自己的激光数据结构。此数据结构带上了位置信息

// 1. localized range scan

  // Create a vector of range readings. Simple example where all the measurements are the same value.
  std::vector<kt_double> readings;
  for (int i=0; i<361; i++)
  {
    readings.push_back(3.0);
  }
  
  // create localized range scan
  pLocalizedRangeScan = new karto::LocalizedRangeScan(name, readings);
  pLocalizedRangeScan->SetOdometricPose(karto::Pose2(0.0, 0.0, 0.0));
  pLocalizedRangeScan->SetCorrectedPose(karto::Pose2(0.0, 0.0, 0.0));

刚刚正确的创建了激光测距仪装置激光测距仪的数据结构对应的对像,现在就可以call mapper 得到正确的位置了。

3. call slam

  // Get karto default mapper
  karto::Mapper* pMapper = new karto::Mapper();
.... 
// Create the localized range scan as described above
....
 // Add the localized range scan to the mapper
  pMapper->Process(pLocalizedRangeScan);
  std::cout << "Pose: " << pLocalizedRangeScan->GetOdometricPose() << " Corrected Pose: " << pLocalizedRangeScan->GetCorrectedPose() << std::endl;

4. get the map

刚刚我们已经加载了激光装置,并且把数据放在了激光的数据结构中,并且call slam mapper

对数据进行了处理Process,然后就可以调用

 karto::OccupancyGrid* pOccupancyGrid = karto::OccupancyGrid::CreateFromScans(pMapper->GetAllProcessedScans(), resolution);

得到地图了。

接下来可以可视化地图数据。

5. 创建数据集

// create an empty dataset
karto::Dataset* pDataset = new karto::Dataset();
.... 
// Create the localized range scan as described above
....
// Add the localized range scan to the dataset
pDataset->Add(pLocalizedRangeScan);

// write dataset to file
WriteDataset(pDataset, "tutorial1.kxd");

可以用来记录数据,可以Debug,可以反馈信息,没有看出和建图应用的直接关系。

6. 循环闭环求解器

// Get karto default mapper
karto::Mapper* pMapper = new karto::Mapper();

// set solver
SpaSolver* pSolver = new SpaSolver();
pMapper->SetScanSolver(pSolver);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值