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>
52 bool unknownSpaceFilled =
false,
53 float scanMaxRange = 0.0f);
58 const cv::Point3f & viewpoint,
62 bool unknownSpaceFilled =
false,
63 float scanMaxRange = 0.0f);
93 const cv::Mat & scanHit,
94 const cv::Mat & scanNoHit,
95 const cv::Point3f & viewpoint,
99 bool unknownSpaceFilled =
false,
100 float scanMaxRange = 0.0f);
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);
312cv::Mat RTABMAP_CORE_EXPORT
erodeMap(
const cv::Mat & map);
327template<
typename Po
intT>
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>
414 const typename pcl::PointCloud<PointT>::Ptr & groundCloud,
415 const typename pcl::PointCloud<PointT>::Ptr & obstaclesCloud,
423template<
typename Po
intT>
425 const typename pcl::PointCloud<PointT>::Ptr & cloud,
426 const pcl::IndicesPtr & groundIndices,
427 const pcl::IndicesPtr & obstaclesIndices,
458template<
typename Po
intT>
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>
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"
void RTABMAP_CORE_EXPORT rayTrace(const cv::Point2i &start, const cv::Point2i &end, cv::Mat &grid, bool stopOnObstacle)
Performs a 2D ray tracing operation between two points on a grid map.
pcl::PointCloud< PointT >::Ptr projectCloudOnXYPlane(const typename pcl::PointCloud< PointT > &cloud)
Projects a point cloud onto the XY plane by setting all Z coordinates to zero.
RTABMAP_DEPRECATED void RTABMAP_CORE_EXPORT occupancy2DFromLaserScan(const cv::Mat &scan, cv::Mat &empty, cv::Mat &occupied, float cellSize, bool unknownSpaceFilled=false, float scanMaxRange=0.0f)
void occupancy2DFromCloud3D(const typename pcl::PointCloud< PointT >::Ptr &cloud, const pcl::IndicesPtr &indices, cv::Mat &ground, cv::Mat &obstacles, float cellSize, float groundNormalAngle, int minClusterSize, bool segmentFlatObstacles, float maxGroundHeight)
Generates 2D ground and obstacle occupancy data from a 3D point cloud.
cv::Mat RTABMAP_CORE_EXPORT create2DMapFromOccupancyLocalMaps(const std::map< int, Transform > &poses, const std::map< int, std::pair< cv::Mat, cv::Mat > > &occupancy, float cellSize, float &xMin, float &yMin, float minMapSize=0.0f, bool erode=false, float footprintRadius=0.0f)
Creates a 2D occupancy grid map from local occupancy data.
cv::Mat RTABMAP_CORE_EXPORT erodeMap(const cv::Mat &map)
Performs erosion on an occupancy grid map to reduce small noisy obstacles.
void occupancy2DFromGroundObstacles(const typename pcl::PointCloud< PointT >::Ptr &cloud, const pcl::IndicesPtr &groundIndices, const pcl::IndicesPtr &obstaclesIndices, cv::Mat &ground, cv::Mat &obstacles, float cellSize)
Projects 3D ground and obstacle point clouds onto the 2D XY plane and voxelizes them into 2D occupanc...
cv::Mat RTABMAP_CORE_EXPORT convertImage8U2Map(const cv::Mat &map8U, bool pgmFormat=false)
Converts a grayscale occupancy image (CV_8U) to an occupancy grid map (CV_8S).
cv::Mat RTABMAP_CORE_EXPORT convertMap2Image8U(const cv::Mat &map8S, bool pgmFormat=false)
Converts an occupancy grid map (CV_8S) to a grayscale image (CV_8U).
RTABMAP_DEPRECATED cv::Mat RTABMAP_CORE_EXPORT create2DMap(const std::map< int, Transform > &poses, const std::map< int, pcl::PointCloud< pcl::PointXYZ >::Ptr > &scans, float cellSize, bool unknownSpaceFilled, float &xMin, float &yMin, float minMapSize=0.0f, float scanMaxRange=0.0f)