31#include <rtabmap/core/rtabmap_core_export.h>
32#include <rtabmap/core/Transform.h>
33#include <rtabmap/core/CameraModel.h>
34#include <rtabmap/core/StereoCameraModel.h>
35#include <opencv2/core/core.hpp>
36#if CV_MAJOR_VERSION < 5
37#include <opencv2/features2d/features2d.hpp>
39#include <opencv2/features.hpp>
41#include <rtabmap/core/LaserScan.h>
42#include <rtabmap/core/IMU.h>
43#include <rtabmap/core/GPS.h>
44#include <rtabmap/core/EnvSensor.h>
45#include <rtabmap/core/Landmark.h>
46#include <rtabmap/core/GlobalDescriptor.h>
120 const cv::Mat & image,
123 const cv::Mat & userData = cv::Mat());
138 const cv::Mat & image,
142 const cv::Mat & userData = cv::Mat());
158 const cv::Mat & depth,
162 const cv::Mat & userData = cv::Mat());
179 const cv::Mat & depth,
180 const cv::Mat & depth_confidence,
184 const cv::Mat & userData = cv::Mat());
202 const cv::Mat & depth,
206 const cv::Mat & userData = cv::Mat());
225 const cv::Mat & depth,
226 const cv::Mat & depthConfidence,
230 const cv::Mat & userData = cv::Mat());
283 const cv::Mat & depth,
284 const std::vector<CameraModel> & cameraModels,
287 const cv::Mat & userData = cv::Mat());
306 const cv::Mat & depth,
307 const cv::Mat & depthConfidence,
308 const std::vector<CameraModel> & cameraModels,
311 const cv::Mat & userData = cv::Mat());
331 const cv::Mat & depth,
332 const std::vector<CameraModel> & cameraModels,
335 const cv::Mat & userData = cv::Mat());
356 const cv::Mat & depth,
357 const cv::Mat & depthConfidence,
358 const std::vector<CameraModel> & cameraModels,
361 const cv::Mat & userData = cv::Mat());
376 const cv::Mat & left,
377 const cv::Mat & right,
381 const cv::Mat & userData = cv::Mat());
398 const cv::Mat & left,
399 const cv::Mat & right,
403 const cv::Mat & userData = cv::Mat());
421 const cv::Mat & depth,
422 const std::vector<StereoCameraModel> & cameraModels,
425 const cv::Mat & userData = cv::Mat());
443 const cv::Mat & depth,
444 const std::vector<StereoCameraModel> & cameraModels,
447 const cv::Mat & userData = cv::Mat());
489 _imageCompressed.empty() &&
490 _depthOrRightRaw.empty() &&
491 _depthOrRightCompressed.empty() &&
492 _depthConfidenceRaw.empty() &&
493 _depthConfidenceCompressed.empty() &&
494 _laserScanRaw.isEmpty() &&
495 _laserScanCompressed.isEmpty() &&
496 _cameraModels.empty() &&
497 _stereoCameraModels.empty() &&
498 _userDataRaw.empty() &&
499 _userDataCompressed.empty() &&
500 _keypoints.size() == 0 &&
501 _descriptors.empty() &&
502 _groundCellsRaw.empty() &&
503 _groundCellsCompressed.empty() &&
504 _obstacleCellsRaw.empty() &&
505 _obstacleCellsCompressed.empty() &&
506 _emptyCellsRaw.empty() &&
507 _emptyCellsCompressed.empty() &&
515 int id()
const {
return _id;}
527 double stamp()
const {
return _stamp;}
566 const cv::Mat &
imageRaw()
const {
return _imageRaw;}
593 void setRGBDImage(
const cv::Mat & rgb,
const cv::Mat & depth,
const cv::Mat & depth_confidence,
const CameraModel & model,
bool clearPreviousData =
true);
594 void setRGBDImage(
const cv::Mat & rgb,
const cv::Mat & depth,
const std::vector<CameraModel> & models,
bool clearPreviousData =
true);
595 void setRGBDImage(
const cv::Mat & rgb,
const cv::Mat & depth,
const cv::Mat & depth_confidence,
const std::vector<CameraModel> & models,
bool clearPreviousData =
true);
596 void setStereoImage(
const cv::Mat & left,
const cv::Mat & right,
const StereoCameraModel & stereoCameraModel,
bool clearPreviousData =
true);
597 void setStereoImage(
const cv::Mat & left,
const cv::Mat & right,
const std::vector<StereoCameraModel> & stereoCameraModels,
bool clearPreviousData =
true);
616 void setCameraModels(
const std::vector<CameraModel> & models) {_cameraModels = models;}
628 void setStereoCameraModels(
const std::vector<StereoCameraModel> & stereoCameraModels) {_stereoCameraModels = stereoCameraModels;}
639 cv::Mat
depthRaw()
const {
return !(_depthOrRightRaw.type()==CV_8UC1 || _depthOrRightRaw.type()==CV_8UC3) ? _depthOrRightRaw : cv::Mat();}
650 cv::Mat
rightRaw()
const {
return _depthOrRightRaw.type()==CV_8UC1 || _depthOrRightRaw.type()==CV_8UC3 ? _depthOrRightRaw : cv::Mat();}
653 RTABMAP_DEPRECATED
void setImageRaw(
const cv::Mat & image);
655 RTABMAP_DEPRECATED
void setDepthOrRightRaw(
const cv::Mat & image);
657 RTABMAP_DEPRECATED
void setLaserScanRaw(
const LaserScan & scan);
659 RTABMAP_DEPRECATED
void setUserDataRaw(
const cv::Mat & data);
688 cv::Mat * depthOrRightRaw,
690 cv::Mat * userDataRaw = 0,
691 cv::Mat * groundCellsRaw = 0,
692 cv::Mat * obstacleCellsRaw = 0,
693 cv::Mat * emptyCellsRaw = 0,
694 cv::Mat * depthConfidenceRaw = 0);
712 cv::Mat * depthOrRightRaw,
714 cv::Mat * userDataRaw = 0,
715 cv::Mat * groundCellsRaw = 0,
716 cv::Mat * obstacleCellsRaw = 0,
717 cv::Mat * emptyCellsRaw = 0,
718 cv::Mat * depthConfidenceRaw = 0)
const;
724 const std::vector<CameraModel> &
cameraModels()
const {
return _cameraModels;}
740 void setUserData(
const cv::Mat & userData,
bool clearPreviousData =
true);
741 const cv::Mat & userDataRaw()
const {
return _userDataRaw;}
742 const cv::Mat & userDataCompressed()
const {
return _userDataCompressed;}
758 const cv::Mat & ground,
759 const cv::Mat & obstacles,
760 const cv::Mat & empty,
762 const cv::Point3f & viewPoint);
824 void setFeatures(
const std::vector<cv::KeyPoint> & keypoints,
const std::vector<cv::Point3f> & keypoints3D,
const cv::Mat & descriptors);
830 const std::vector<cv::KeyPoint> &
keypoints()
const {
return _keypoints;}
836 const std::vector<cv::Point3f> &
keypoints3D()
const {
return _keypoints3D;}
854 void setGlobalDescriptors(
const std::vector<GlobalDescriptor> & descriptors) {_globalDescriptors = descriptors;}
884 void setGlobalPose(
const Transform & pose,
const cv::Mat & covariance) {globalPose_ = pose; globalPoseCovariance_ = covariance;}
968 void clearCompressedData(
bool images =
true,
bool scan =
true,
bool userData =
true,
bool occupancyGrid =
true);
973 void clearRawData(
bool images =
true,
bool scan =
true,
bool userData =
true,
bool occupancyGrid =
true);
986#ifdef HAVE_OPENCV_CUDEV
991 const cv::cuda::GpuMat & imageRawGpu()
const {
return _imageRawGpu;}
997 void setImageRawGpu(
const cv::cuda::GpuMat & image) {_imageRawGpu = image;}
1003 const cv::cuda::GpuMat & depthOrRightRawGpu()
const {
return _depthOrRightRawGpu;}
1009 void setDepthOrRightRawGpu(
const cv::cuda::GpuMat & image) {_depthOrRightRawGpu = image;}
1017 cv::Mat _imageCompressed;
1018 cv::Mat _depthOrRightCompressed;
1019 cv::Mat _depthConfidenceCompressed;
1020 LaserScan _laserScanCompressed;
1024 cv::Mat _depthOrRightRaw;
1025 cv::Mat _depthConfidenceRaw;
1026 LaserScan _laserScanRaw;
1029 std::vector<CameraModel> _cameraModels;
1030 std::vector<StereoCameraModel> _stereoCameraModels;
1033 cv::Mat _userDataCompressed;
1034 cv::Mat _userDataRaw;
1037 cv::Mat _groundCellsCompressed;
1038 cv::Mat _obstacleCellsCompressed;
1039 cv::Mat _emptyCellsCompressed;
1040 cv::Mat _groundCellsRaw;
1041 cv::Mat _obstacleCellsRaw;
1042 cv::Mat _emptyCellsRaw;
1044 cv::Point3f _viewPoint;
1053 std::vector<cv::KeyPoint> _keypoints;
1054 std::vector<cv::Point3f> _keypoints3D;
1055 cv::Mat _descriptors;
1058 std::vector<GlobalDescriptor> _globalDescriptors;
1061 Transform groundTruth_;
1062 Transform globalPose_;
1063 cv::Mat globalPoseCovariance_;
1069#ifdef HAVE_OPENCV_CUDEV
1076 cv::cuda::GpuMat _imageRawGpu;
1077 cv::cuda::GpuMat _depthOrRightRawGpu;
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Single environmental measurement (type, value, timestamp).
const Type & type() const
WGS84 GPS fix attached to a sensor sample or graph node.
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Represents 2D or 3D laser scan data with support for multiple point data formats.
Container class for all sensor data captured at a specific time.
const IMU & imu() const
Returns IMU data.
const cv::Mat & depthConfidenceRaw() const
Returns the raw depth confidence map.
const cv::Mat & gridObstacleCellsRaw() const
Returns raw obstacle cells.
void addEnvSensor(const EnvSensor &sensor)
Adds a single environmental sensor.
SensorData(const cv::Mat &image, const CameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Mono camera constructor.
const LaserScan & laserScanCompressed() const
Returns the compressed laser scan.
SensorData(const cv::Mat &left, const cv::Mat &right, const StereoCameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Stereo camera constructor.
const GPS & gps() const
Returns GPS data.
cv::Mat depthRaw() const
Returns the depth image (convenience method)
void setRGBDImage(const cv::Mat &rgb, const cv::Mat &depth, const CameraModel &model, bool clearPreviousData=true)
void setIMU(const IMU &imu)
Sets IMU data.
const cv::Mat & depthOrRightRaw() const
Returns the raw depth or right stereo image.
SensorData(const IMU &imu, int id=0, double stamp=0.0)
IMU-only constructor.
const cv::Mat & gridGroundCellsRaw() const
Returns raw ground cells.
void uncompressDataConst(cv::Mat *imageRaw, cv::Mat *depthOrRightRaw, LaserScan *laserScanRaw=0, cv::Mat *userDataRaw=0, cv::Mat *groundCellsRaw=0, cv::Mat *obstacleCellsRaw=0, cv::Mat *emptyCellsRaw=0, cv::Mat *depthConfidenceRaw=0) const
Uncompresses compressed data into provided output buffers (const version)
int isPointVisibleFromCameras(const cv::Point3f &pt) const
Checks if a 3D point is visible from any camera.
void clearCompressedData(bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true)
void clearGlobalDescriptors()
Clears all global descriptors.
const cv::Mat & gridEmptyCellsRaw() const
Returns raw empty cells.
const EnvSensors & envSensors() const
Returns all environmental sensors.
void setId(int id)
Sets the sensor data ID.
const cv::Mat & gridObstacleCellsCompressed() const
Returns compressed obstacle cells.
const cv::Point3f & gridViewPoint() const
Returns the occupancy grid viewpoint.
SensorData(const LaserScan &laserScan, const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &depthConfidence, const CameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
RGB-D constructor with depth confidence and laser scan.
void clearRawData(bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true)
const Transform & globalPose() const
Returns the global pose.
double stamp() const
Returns the timestamp.
const cv::Mat & globalPoseCovariance() const
Returns the global pose covariance.
void setStamp(double stamp)
Sets the timestamp.
void setOccupancyGrid(const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint)
Sets occupancy grid data.
const cv::Mat & descriptors() const
Returns the feature descriptors.
unsigned long getMemoryUsed() const
Computes the memory usage of this sensor data.
const std::vector< CameraModel > & cameraModels() const
Returns the camera models.
SensorData(const cv::Mat &rgb, const cv::Mat &depth, const std::vector< StereoCameraModel > &cameraModels, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Multi-camera stereo constructor.
void setGroundTruth(const Transform &pose)
Sets the ground truth pose.
SensorData(const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &depthConfidence, const std::vector< CameraModel > &cameraModels, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Multi-camera RGB-D constructor with depth confidence.
void setGlobalPose(const Transform &pose, const cv::Mat &covariance)
Sets the global pose with covariance.
const Landmarks & landmarks() const
Returns landmarks.
int id() const
Returns the sensor data ID.
const cv::Mat & depthOrRightCompressed() const
Returns the compressed depth or right stereo image.
SensorData(const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &depth_confidence, const CameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
RGB-D constructor with depth confidence.
void uncompressData(cv::Mat *imageRaw, cv::Mat *depthOrRightRaw, LaserScan *laserScanRaw=0, cv::Mat *userDataRaw=0, cv::Mat *groundCellsRaw=0, cv::Mat *obstacleCellsRaw=0, cv::Mat *emptyCellsRaw=0, cv::Mat *depthConfidenceRaw=0)
Uncompresses compressed data into provided output buffers.
void setLaserScan(const LaserScan &laserScan, bool clearPreviousData=true)
SensorData()
Default constructor.
virtual ~SensorData()
Virtual destructor.
float gridCellSize() const
Returns the occupancy grid cell size.
void uncompressData()
Uncompresses all compressed data in-place.
cv::Mat rightRaw() const
Returns the right stereo image (convenience method)
const cv::Mat & imageCompressed() const
Returns the compressed RGB/grayscale image.
const std::vector< StereoCameraModel > & stereoCameraModels() const
Returns the stereo camera models.
const std::vector< cv::Point3f > & keypoints3D() const
Returns the 3D keypoints.
void setStereoCameraModel(const StereoCameraModel &stereoCameraModel)
Sets a single stereo camera model (clears previous models)
void setEnvSensors(const EnvSensors &sensors)
Sets all environmental sensors.
const cv::Mat & gridGroundCellsCompressed() const
Returns compressed ground cells.
void setStereoCameraModels(const std::vector< StereoCameraModel > &stereoCameraModels)
Sets multiple stereo camera models.
SensorData(const cv::Mat &image, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Appearance-only constructor.
void setGlobalDescriptors(const std::vector< GlobalDescriptor > &descriptors)
Sets all global descriptors.
SensorData(const LaserScan &laserScan, const cv::Mat &left, const cv::Mat &right, const StereoCameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Stereo camera constructor with laser scan.
SensorData(const LaserScan &laserScan, const cv::Mat &rgb, const cv::Mat &depth, const CameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
RGB-D constructor with laser scan.
const cv::Mat & gridEmptyCellsCompressed() const
Returns compressed empty cells.
void addGlobalDescriptor(const GlobalDescriptor &descriptor)
Adds a global descriptor.
void setUserData(const cv::Mat &userData, bool clearPreviousData=true)
const std::vector< GlobalDescriptor > & globalDescriptors() const
Returns all global descriptors.
void setFeatures(const std::vector< cv::KeyPoint > &keypoints, const std::vector< cv::Point3f > &keypoints3D, const cv::Mat &descriptors)
Sets visual features (keypoints, 3D points, descriptors)
void setGPS(const GPS &gps)
Sets GPS data.
SensorData(const LaserScan &laserScan, const cv::Mat &rgb, const cv::Mat &depth, const std::vector< StereoCameraModel > &cameraModels, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Multi-camera stereo constructor with laser scan.
bool isValid() const
Checks if the sensor data is valid.
void setCameraModel(const CameraModel &model)
Sets a single camera model (clears previous models)
SensorData(const LaserScan &laserScan, const cv::Mat &rgb, const cv::Mat &depth, const std::vector< CameraModel > &cameraModels, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Multi-camera RGB-D constructor with laser scan.
SensorData(const LaserScan &laserScan, const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &depthConfidence, const std::vector< CameraModel > &cameraModels, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Multi-camera RGB-D constructor with depth confidence and laser scan.
SensorData(const cv::Mat &rgb, const cv::Mat &depth, const std::vector< CameraModel > &cameraModels, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
Multi-camera RGB-D constructor.
const cv::Mat & imageRaw() const
Returns the raw RGB/grayscale image.
SensorData(const cv::Mat &rgb, const cv::Mat &depth, const CameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
RGB-D constructor.
const cv::Mat & depthConfidenceCompressed() const
Returns the compressed depth confidence map.
const LaserScan & laserScanRaw() const
Returns the raw laser scan.
const Transform & groundTruth() const
Returns the ground truth pose.
void setLandmarks(const Landmarks &landmarks)
Sets landmarks.
void setCameraModels(const std::vector< CameraModel > &models)
Sets multiple camera models.
const std::vector< cv::KeyPoint > & keypoints() const
Returns the 2D keypoints.
A class representing a calibrated stereo camera system.
std::map< int, Landmark > Landmarks
Map of landmark id → Landmark (typically positive keys).
std::map< EnvSensor::Type, EnvSensor > EnvSensors
Map of environmental readings keyed by EnvSensor::Type (at most one per type).