28#ifndef UTIL3D_MAPPING_H_
29#define UTIL3D_MAPPING_H_
31#include "rtabmap/core/rtabmap_core_export.h"
33#include <opencv2/core/core.hpp>
35#include <rtabmap/core/Transform.h>
36#include <pcl/pcl_base.h>
37#include <pcl/point_cloud.h>
38#include <pcl/point_types.h>
47RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT occupancy2DFromLaserScan(
52 bool unknownSpaceFilled =
false,
53 float scanMaxRange = 0.0f);
56RTABMAP_DEPRECATED
void RTABMAP_CORE_EXPORT occupancy2DFromLaserScan(
58 const cv::Point3f & viewpoint,
62 bool unknownSpaceFilled =
false,
63 float scanMaxRange = 0.0f);
92void RTABMAP_CORE_EXPORT occupancy2DFromLaserScan(
93 const cv::Mat & scanHit,
94 const cv::Mat & scanNoHit,
95 const cv::Point3f & viewpoint,
99 bool unknownSpaceFilled =
false,
100 float scanMaxRange = 0.0f);
138cv::Mat RTABMAP_CORE_EXPORT create2DMapFromOccupancyLocalMaps(
139 const std::map<int, Transform> & poses,
140 const std::map<
int, std::pair<cv::Mat, cv::Mat> > & occupancy,
144 float minMapSize = 0.0f,
146 float footprintRadius = 0.0f);
149RTABMAP_DEPRECATED cv::Mat RTABMAP_CORE_EXPORT create2DMap(
const std::map<int, Transform> & poses,
150 const std::map<
int, pcl::PointCloud<pcl::PointXYZ>::Ptr > & scans,
152 bool unknownSpaceFilled,
155 float minMapSize = 0.0f,
156 float scanMaxRange = 0.0f);
159RTABMAP_DEPRECATED cv::Mat RTABMAP_CORE_EXPORT create2DMap(
const std::map<int, Transform> & poses,
160 const std::map<
int, pcl::PointCloud<pcl::PointXYZ>::Ptr > & scans,
161 const std::map<int, cv::Point3f > & viewpoints,
163 bool unknownSpaceFilled,
166 float minMapSize = 0.0f,
167 float scanMaxRange = 0.0f);
204cv::Mat RTABMAP_CORE_EXPORT create2DMap(
const std::map<int, Transform> & poses,
205 const std::map<
int, std::pair<cv::Mat, cv::Mat> > & scans,
206 const std::map<int, cv::Point3f > & viewpoints,
208 bool unknownSpaceFilled,
211 float minMapSize = 0.0f,
212 float scanMaxRange = 0.0f);
235void RTABMAP_CORE_EXPORT rayTrace(
const cv::Point2i & start,
236 const cv::Point2i & end,
238 bool stopOnObstacle);
263cv::Mat RTABMAP_CORE_EXPORT convertMap2Image8U(
const cv::Mat & map8S,
bool pgmFormat =
false);
293cv::Mat RTABMAP_CORE_EXPORT convertImage8U2Map(
const cv::Mat & map8U,
bool pgmFormat =
false);
312cv::Mat RTABMAP_CORE_EXPORT erodeMap(
const cv::Mat & map);
327template<
typename Po
intT>
328typename pcl::PointCloud<PointT>::Ptr projectCloudOnXYPlane(
329 const typename pcl::PointCloud<PointT> & cloud);
362template<
typename Po
intT>
363void segmentObstaclesFromGround(
364 const typename pcl::PointCloud<PointT>::Ptr & cloud,
365 const pcl::IndicesPtr & indices,
366 pcl::IndicesPtr & ground,
367 pcl::IndicesPtr & obstacles,
369 float groundNormalAngle,
372 bool segmentFlatObstacles =
false,
373 float maxGroundHeight = 0.0f,
374 pcl::IndicesPtr * flatObstacles = 0,
375 const Eigen::Vector4f & viewPoint = Eigen::Vector4f(0,0,100,0),
376 float groundNormalsUp = 0);
381template<
typename Po
intT>
382void segmentObstaclesFromGround(
383 const typename pcl::PointCloud<PointT>::Ptr & cloud,
384 pcl::IndicesPtr & ground,
385 pcl::IndicesPtr & obstacles,
387 float groundNormalAngle,
390 bool segmentFlatObstacles =
false,
391 float maxGroundHeight = 0.0f,
392 pcl::IndicesPtr * flatObstacles = 0,
393 const Eigen::Vector4f & viewPoint = Eigen::Vector4f(0,0,100,0),
394 float groundNormalsUp = 0);
412template<
typename Po
intT>
413void occupancy2DFromGroundObstacles(
414 const typename pcl::PointCloud<PointT>::Ptr & groundCloud,
415 const typename pcl::PointCloud<PointT>::Ptr & obstaclesCloud,
423template<
typename Po
intT>
424void occupancy2DFromGroundObstacles(
425 const typename pcl::PointCloud<PointT>::Ptr & cloud,
426 const pcl::IndicesPtr & groundIndices,
427 const pcl::IndicesPtr & obstaclesIndices,
458template<
typename Po
intT>
459void occupancy2DFromCloud3D(
460 const typename pcl::PointCloud<PointT>::Ptr & cloud,
461 const pcl::IndicesPtr & indices,
464 float cellSize = 0.05f,
465 float groundNormalAngle = M_PI_4,
466 int minClusterSize = 20,
467 bool segmentFlatObstacles =
false,
468 float maxGroundHeight = 0.0f);
473template<
typename Po
intT>
474void occupancy2DFromCloud3D(
475 const typename pcl::PointCloud<PointT>::Ptr & cloud,
478 float cellSize = 0.05f,
479 float groundNormalAngle = M_PI_4,
480 int minClusterSize = 20,
481 bool segmentFlatObstacles =
false,
482 float maxGroundHeight = 0.0f);
487#include "rtabmap/core/impl/util3d_mapping.hpp"