美文网首页
cartographer雷达数据转为概率网格

cartographer雷达数据转为概率网格

作者: 送分童子笑嘻嘻 | 来源:发表于2019-11-12 12:03 被阅读0次
    void CastRays(const sensor::RangeData& range_data,
                  const std::vector<uint16>& hit_table,
                  const std::vector<uint16>& miss_table,
                  const bool insert_free_space,
                  ProbabilityGrid* const probability_grid) {
      GrowAsNeeded(range_data, probability_grid);
    
      const MapLimits& limits = probability_grid->limits();
      const double superscaled_resolution = limits.resolution() / kSubpixelScale;
      const MapLimits superscaled_limits(
          superscaled_resolution, limits.max(),
          CellLimits(limits.cell_limits().num_x_cells * kSubpixelScale,
                     limits.cell_limits().num_y_cells * kSubpixelScale));
      const Eigen::Array2i begin =
          superscaled_limits.GetCellIndex(range_data.origin.head<2>());
      // Compute and add the end points.
      std::vector<Eigen::Array2i> ends;
      ends.reserve(range_data.returns.size());
      for (const Eigen::Vector3f& hit : range_data.returns) {
        ends.push_back(superscaled_limits.GetCellIndex(hit.head<2>()));
        probability_grid->ApplyLookupTable(ends.back() / kSubpixelScale, hit_table);
      }
    
      if (!insert_free_space) {
        return;
      }
    
      // Now add the misses.
      for (const Eigen::Array2i& end : ends) {
        CastRay(begin, end, miss_table, probability_grid);
      }
    
      // Finally, compute and add empty rays based on misses in the range data.
      for (const Eigen::Vector3f& missing_echo : range_data.misses) {
        CastRay(begin, superscaled_limits.GetCellIndex(missing_echo.head<2>()),
                miss_table, probability_grid);
      }
    }
    

    相关文章

      网友评论

          本文标题:cartographer雷达数据转为概率网格

          本文链接:https://www.haomeiwen.com/subject/ozjfictx.html