From d094efe550c4b3ed9080341fcd92e0b51bb76d72 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 2 Aug 2026 01:36:11 +0000 Subject: [PATCH] Preview for PR #1492 25b41788677116f6905c26584214a5e014292ec9 --- .nojekyll | 0 preview/pr-1492/.nojekyll | 0 .../api/latest/BayesFilter_8h_source.html | 206 + .../api/latest/CameraDepthAI_8h_source.html | 222 + .../api/latest/CameraEvent_8h_source.html | 124 + .../api/latest/CameraFreenect2_8h_source.html | 206 + .../api/latest/CameraFreenect_8h_source.html | 182 + .../api/latest/CameraImages_8h_source.html | 339 ++ .../api/latest/CameraInfo_8h_source.html | 124 + .../api/latest/CameraK4A_8h_source.html | 204 + .../api/latest/CameraK4W2_8h_source.html | 200 + .../api/latest/CameraModel_8h_source.html | 317 ++ .../api/latest/CameraMyntEye_8h_source.html | 213 + .../api/latest/CameraOpenNI2_8h_source.html | 198 + .../api/latest/CameraOpenNICV_8h_source.html | 166 + .../api/latest/CameraOpenni_8h_source.html | 204 + .../api/latest/CameraOrbbecSDK_8h_source.html | 211 + .../latest/CameraRGBDImages_8h_source.html | 163 + .../api/latest/CameraRGBD_8h_source.html | 135 + .../api/latest/CameraRGB_8h_source.html | 125 + .../latest/CameraRealSense2_8h_source.html | 263 ++ .../api/latest/CameraRealSense_8h_source.html | 209 + .../api/latest/CameraSeerSense_8h_source.html | 161 + .../latest/CameraStereoDC1394_8h_source.html | 169 + .../CameraStereoFlyCapture2_8h_source.html | 170 + .../latest/CameraStereoImages_8h_source.html | 205 + .../latest/CameraStereoTara_8h_source.html | 173 + .../latest/CameraStereoVideo_8h_source.html | 197 + .../latest/CameraStereoZedOC_8h_source.html | 189 + .../api/latest/CameraStereoZed_8h_source.html | 221 + .../api/latest/CameraStereo_8h_source.html | 132 + .../api/latest/CameraThread_8h_source.html | 124 + .../api/latest/CameraVideo_8h_source.html | 187 + .../pr-1492/api/latest/Camera_8h_source.html | 175 + .../api/latest/CloudMap_8h_source.html | 167 + .../api/latest/Compression_8h_source.html | 190 + .../api/latest/DBDriverSqlite3_8h_source.html | 343 ++ .../api/latest/DBDriver_8h_source.html | 456 ++ .../api/latest/DBReader_8h_source.html | 240 ++ .../api/latest/EnvSensor_8h_source.html | 204 + .../latest/EpipolarGeometry_8h_source.html | 351 ++ .../api/latest/Features2d_8h_source.html | 896 ++++ .../api/latest/FlannIndex_8h_source.html | 228 + preview/pr-1492/api/latest/GPS_8h_source.html | 190 + .../api/latest/GainCompensator_8h_source.html | 204 + .../api/latest/GeodeticCoords_8h_source.html | 198 + .../GlobalDescriptorExtractor_8h_source.html | 173 + .../latest/GlobalDescriptor_8h_source.html | 157 + .../api/latest/GlobalMap_8h_source.html | 227 + .../pr-1492/api/latest/Graph_8h_source.html | 374 ++ .../pr-1492/api/latest/GridMap_8h_source.html | 174 + .../api/latest/IMUFilter_8h_source.html | 184 + .../api/latest/IMUThread_8h_source.html | 183 + preview/pr-1492/api/latest/IMU_8h_source.html | 256 ++ .../pr-1492/api/latest/Image_8h_source.html | 133 + .../api/latest/LASWriter_8h_source.html | 153 + .../api/latest/Landmark_8h_source.html | 220 + .../api/latest/LaserScan_8h_source.html | 301 ++ .../api/latest/LidarVLP16_8h_source.html | 251 ++ .../pr-1492/api/latest/Lidar_8h_source.html | 150 + .../pr-1492/api/latest/Link_8h_source.html | 231 ++ .../api/latest/LocalGridMaker_8h_source.html | 224 + .../api/latest/LocalGrid_8h_source.html | 205 + .../api/latest/LocalMapMaker_8hpp_source.html | 370 ++ .../api/latest/MarkerDetector_8h_source.html | 208 + .../pr-1492/api/latest/Memory_8h_source.html | 620 +++ .../api/latest/OccupancyGrid_8h_source.html | 132 + .../pr-1492/api/latest/OctoMap_8h_source.html | 132 + .../api/latest/OdometryCuVSLAM_8h_source.html | 206 + .../api/latest/OdometryDVO_8h_source.html | 174 + .../api/latest/OdometryEvent_8h_source.html | 225 + .../api/latest/OdometryF2F_8h_source.html | 174 + .../api/latest/OdometryF2M_8h_source.html | 208 + .../api/latest/OdometryFLOAM_8h_source.html | 169 + .../api/latest/OdometryFovis_8h_source.html | 175 + .../api/latest/OdometryInfo_8h_source.html | 198 + .../api/latest/OdometryLIOSAM_8h_source.html | 188 + .../api/latest/OdometryLOAM_8h_source.html | 180 + .../api/latest/OdometryMSCKF_8h_source.html | 174 + .../api/latest/OdometryMono_8h_source.html | 190 + .../latest/OdometryORBSLAM2_8h_source.html | 167 + .../latest/OdometryORBSLAM3_8h_source.html | 178 + .../api/latest/OdometryOkvis_8h_source.html | 177 + .../api/latest/OdometryOpen3D_8h_source.html | 164 + .../latest/OdometryOpenVINS_8h_source.html | 173 + .../api/latest/OdometryThread_8h_source.html | 186 + .../latest/OdometryVINSFusion_8h_source.html | 172 + .../api/latest/OdometryVINS_8h_source.html | 125 + .../api/latest/OdometryViso2_8h_source.html | 170 + .../api/latest/Odometry_8h_source.html | 254 ++ .../api/latest/OptimizerCVSBA_8h_source.html | 165 + .../api/latest/OptimizerCeres_8h_source.html | 188 + .../api/latest/OptimizerG2O_8h_source.html | 195 + .../api/latest/OptimizerGTSAM_8h_source.html | 202 + .../api/latest/OptimizerTORO_8h_source.html | 177 + .../api/latest/Optimizer_8h_source.html | 348 ++ .../api/latest/PDALWriter_8h_source.html | 142 + .../api/latest/ParamEvent_8h_source.html | 157 + .../api/latest/Parameters_8h_source.html | 1072 +++++ .../api/latest/ParticleFilter_8h_source.html | 280 ++ .../api/latest/Posix_2UThreadC_8h_source.html | 505 +++ .../api/latest/ProgressState_8h_source.html | 162 + .../api/latest/PythonInterface_8h_source.html | 143 + .../api/latest/Recovery_8h_source.html | 145 + .../api/latest/RegistrationIcp_8h_source.html | 220 + .../latest/RegistrationInfo_8h_source.html | 232 ++ .../api/latest/RegistrationVis_8h_source.html | 234 ++ .../api/latest/Registration_8h_source.html | 239 ++ .../api/latest/RtabmapEvent_8h_source.html | 392 ++ .../api/latest/RtabmapThread_8h_source.html | 224 + .../pr-1492/api/latest/Rtabmap_8h_source.html | 554 +++ .../latest/SensorCaptureInfo_8h_source.html | 207 + .../latest/SensorCaptureThread_8h_source.html | 358 ++ .../api/latest/SensorCapture_8h_source.html | 206 + .../api/latest/SensorData_8h_source.html | 630 +++ .../api/latest/SensorEvent_8h_source.html | 224 + .../api/latest/Signature_8h_source.html | 365 ++ .../api/latest/Statistics_8h_source.html | 569 +++ .../api/latest/StereoBM_8h_source.html | 170 + .../latest/StereoCameraModel_8h_source.html | 306 ++ .../api/latest/StereoDense_8h_source.html | 171 + .../api/latest/StereoSGBM_8h_source.html | 168 + .../pr-1492/api/latest/Stereo_8h_source.html | 252 ++ .../api/latest/Transform_8h_source.html | 358 ++ .../pr-1492/api/latest/UConversion_8h.html | 1050 +++++ .../api/latest/UConversion_8h__dep__incl.map | 122 + .../api/latest/UConversion_8h__dep__incl.md5 | 1 + .../api/latest/UConversion_8h__dep__incl.png | Bin 0 -> 310712 bytes .../api/latest/UConversion_8h__incl.map | 11 + .../api/latest/UConversion_8h__incl.md5 | 1 + .../api/latest/UConversion_8h__incl.png | Bin 0 -> 13703 bytes .../api/latest/UConversion_8h_source.html | 192 + .../api/latest/UDestroyer_8h_source.html | 159 + .../api/latest/UDirectory_8h_source.html | 185 + .../pr-1492/api/latest/UEvent_8h_source.html | 145 + .../api/latest/UEventsHandler_8h_source.html | 152 + .../api/latest/UEventsManager_8h_source.html | 310 ++ .../api/latest/UEventsSender_8h_source.html | 126 + .../api/latest/UException_8h_source.html | 130 + .../pr-1492/api/latest/UFile_8h_source.html | 195 + preview/pr-1492/api/latest/ULogger_8h.html | 600 +++ .../api/latest/ULogger_8h__dep__incl.map | 111 + .../api/latest/ULogger_8h__dep__incl.md5 | 1 + .../api/latest/ULogger_8h__dep__incl.png | Bin 0 -> 290590 bytes .../pr-1492/api/latest/ULogger_8h__incl.map | 35 + .../pr-1492/api/latest/ULogger_8h__incl.md5 | 1 + .../pr-1492/api/latest/ULogger_8h__incl.png | Bin 0 -> 51207 bytes .../pr-1492/api/latest/ULogger_8h_source.html | 442 ++ preview/pr-1492/api/latest/UMath_8h.html | 2574 ++++++++++++ .../api/latest/UMath_8h__dep__incl.map | 111 + .../api/latest/UMath_8h__dep__incl.md5 | 1 + .../api/latest/UMath_8h__dep__incl.png | Bin 0 -> 273128 bytes preview/pr-1492/api/latest/UMath_8h__incl.map | 9 + preview/pr-1492/api/latest/UMath_8h__incl.md5 | 1 + preview/pr-1492/api/latest/UMath_8h__incl.png | Bin 0 -> 8108 bytes .../pr-1492/api/latest/UMath_8h_source.html | 874 ++++ .../pr-1492/api/latest/UMutex_8h_source.html | 235 ++ .../latest/UObjDeletionThread_8h_source.html | 208 + .../pr-1492/api/latest/UProcessInfo_8h.html | 129 + .../api/latest/UProcessInfo_8h__dep__incl.map | 5 + .../api/latest/UProcessInfo_8h__dep__incl.md5 | 1 + .../api/latest/UProcessInfo_8h__dep__incl.png | Bin 0 -> 7095 bytes .../api/latest/UProcessInfo_8h__incl.map | 5 + .../api/latest/UProcessInfo_8h__incl.md5 | 1 + .../api/latest/UProcessInfo_8h__incl.png | Bin 0 -> 6856 bytes .../api/latest/UProcessInfo_8h_source.html | 134 + .../api/latest/USemaphore_8h_source.html | 328 ++ preview/pr-1492/api/latest/UStl_8h.html | 2073 +++++++++ .../pr-1492/api/latest/UStl_8h__dep__incl.map | 21 + .../pr-1492/api/latest/UStl_8h__dep__incl.md5 | 1 + .../pr-1492/api/latest/UStl_8h__dep__incl.png | Bin 0 -> 34503 bytes preview/pr-1492/api/latest/UStl_8h__incl.map | 17 + preview/pr-1492/api/latest/UStl_8h__incl.md5 | 1 + preview/pr-1492/api/latest/UStl_8h__incl.png | Bin 0 -> 15554 bytes .../pr-1492/api/latest/UStl_8h_source.html | 766 ++++ .../api/latest/UThreadC_8h_source.html | 130 + .../api/latest/UThreadNode_8h_source.html | 124 + .../pr-1492/api/latest/UThread_8h_source.html | 241 ++ .../pr-1492/api/latest/UTimer_8h_source.html | 164 + preview/pr-1492/api/latest/UVariant_8h.html | 145 + .../api/latest/UVariant_8h__dep__incl.map | 9 + .../api/latest/UVariant_8h__dep__incl.md5 | 1 + .../api/latest/UVariant_8h__dep__incl.png | Bin 0 -> 15445 bytes .../pr-1492/api/latest/UVariant_8h__incl.map | 9 + .../pr-1492/api/latest/UVariant_8h__incl.md5 | 1 + .../pr-1492/api/latest/UVariant_8h__incl.png | Bin 0 -> 10406 bytes .../api/latest/UVariant_8h_source.html | 352 ++ .../pr-1492/api/latest/UWin32_8h_source.html | 155 + .../api/latest/UserDataEvent_8h_source.html | 156 + .../pr-1492/api/latest/UtiLite_8h_source.html | 139 + .../api/latest/VWDictionary_8h_source.html | 373 ++ .../pr-1492/api/latest/Version_8h_source.html | 206 + .../api/latest/VisualWord_8h_source.html | 181 + .../api/latest/Win32_2UThreadC_8h_source.html | 480 +++ ...re_2util3d_correspondences_8h-example.html | 212 + preview/pr-1492/api/latest/_formulas.tex | 59 + preview/pr-1492/api/latest/_formulas_dark.tex | 61 + preview/pr-1492/api/latest/annotated.html | 267 ++ preview/pr-1492/api/latest/bc_s.png | Bin 0 -> 676 bytes preview/pr-1492/api/latest/bc_sd.png | Bin 0 -> 635 bytes .../api/latest/classUDestroyer-members.html | 91 + .../pr-1492/api/latest/classUDestroyer.html | 205 + .../api/latest/classUDirectory-members.html | 106 + .../pr-1492/api/latest/classUDirectory.html | 549 +++ .../api/latest/classUEvent-members.html | 92 + preview/pr-1492/api/latest/classUEvent.html | 289 ++ .../latest/classUEventDispatcher-members.html | 131 + .../api/latest/classUEventDispatcher.html | 279 ++ .../classUEventDispatcher__coll__graph.map | 7 + .../classUEventDispatcher__coll__graph.md5 | 1 + .../classUEventDispatcher__coll__graph.png | Bin 0 -> 6156 bytes .../classUEventDispatcher__inherit__graph.map | 7 + .../classUEventDispatcher__inherit__graph.md5 | 1 + .../classUEventDispatcher__inherit__graph.png | Bin 0 -> 6156 bytes .../latest/classUEvent__inherit__graph.map | 33 + .../latest/classUEvent__inherit__graph.md5 | 1 + .../latest/classUEvent__inherit__graph.png | Bin 0 -> 67504 bytes .../latest/classUEventsHandler-members.html | 97 + .../api/latest/classUEventsHandler.html | 351 ++ .../classUEventsHandler__coll__graph.map | 5 + .../classUEventsHandler__coll__graph.md5 | 1 + .../classUEventsHandler__coll__graph.png | Bin 0 -> 4186 bytes .../classUEventsHandler__inherit__graph.map | 9 + .../classUEventsHandler__inherit__graph.md5 | 1 + .../classUEventsHandler__inherit__graph.png | Bin 0 -> 10138 bytes .../latest/classUEventsManager-members.html | 139 + .../api/latest/classUEventsManager.html | 440 ++ .../classUEventsManager__coll__graph.map | 7 + .../classUEventsManager__coll__graph.md5 | 1 + .../classUEventsManager__coll__graph.png | Bin 0 -> 6027 bytes .../classUEventsManager__inherit__graph.map | 7 + .../classUEventsManager__inherit__graph.md5 | 1 + .../classUEventsManager__inherit__graph.png | Bin 0 -> 6027 bytes .../latest/classUEventsSender-members.html | 91 + .../api/latest/classUEventsSender.html | 184 + .../classUEventsSender__inherit__graph.map | 13 + .../classUEventsSender__inherit__graph.md5 | 1 + .../classUEventsSender__inherit__graph.png | Bin 0 -> 16427 bytes .../api/latest/classUException-members.html | 89 + .../pr-1492/api/latest/classUException.html | 149 + .../latest/classUException__coll__graph.map | 5 + .../latest/classUException__coll__graph.md5 | 1 + .../latest/classUException__coll__graph.png | Bin 0 -> 4024 bytes .../classUException__inherit__graph.map | 5 + .../classUException__inherit__graph.md5 | 1 + .../classUException__inherit__graph.png | Bin 0 -> 4024 bytes .../api/latest/classUFile-members.html | 104 + preview/pr-1492/api/latest/classUFile.html | 653 +++ .../api/latest/classULogEvent-members.html | 95 + .../pr-1492/api/latest/classULogEvent.html | 269 ++ .../latest/classULogEvent__coll__graph.map | 5 + .../latest/classULogEvent__coll__graph.md5 | 1 + .../latest/classULogEvent__coll__graph.png | Bin 0 -> 3109 bytes .../latest/classULogEvent__inherit__graph.map | 5 + .../latest/classULogEvent__inherit__graph.md5 | 1 + .../latest/classULogEvent__inherit__graph.png | Bin 0 -> 3109 bytes .../api/latest/classULogger-members.html | 138 + preview/pr-1492/api/latest/classULogger.html | 1307 ++++++ .../api/latest/classUMutex-members.html | 93 + preview/pr-1492/api/latest/classUMutex.html | 262 ++ .../latest/classUObjDeletedEvent-members.html | 94 + .../api/latest/classUObjDeletedEvent.html | 221 + .../classUObjDeletedEvent__coll__graph.map | 5 + .../classUObjDeletedEvent__coll__graph.md5 | 1 + .../classUObjDeletedEvent__coll__graph.png | Bin 0 -> 3870 bytes .../classUObjDeletedEvent__inherit__graph.map | 5 + .../classUObjDeletedEvent__inherit__graph.md5 | 1 + .../classUObjDeletedEvent__inherit__graph.png | Bin 0 -> 3870 bytes .../classUObjDeletionThread-members.html | 132 + .../api/latest/classUObjDeletionThread.html | 415 ++ .../classUObjDeletionThread__coll__graph.map | 7 + .../classUObjDeletionThread__coll__graph.md5 | 1 + .../classUObjDeletionThread__coll__graph.png | Bin 0 -> 6769 bytes ...lassUObjDeletionThread__inherit__graph.map | 7 + ...lassUObjDeletionThread__inherit__graph.md5 | 1 + ...lassUObjDeletionThread__inherit__graph.png | Bin 0 -> 6769 bytes .../api/latest/classUProcessInfo-members.html | 91 + .../pr-1492/api/latest/classUProcessInfo.html | 153 + .../api/latest/classUScopeMutex-members.html | 91 + .../pr-1492/api/latest/classUScopeMutex.html | 207 + .../api/latest/classUSemaphore-members.html | 94 + .../pr-1492/api/latest/classUSemaphore.html | 324 ++ .../api/latest/classUThread-members.html | 127 + preview/pr-1492/api/latest/classUThread.html | 615 +++ .../api/latest/classUThreadC-members.html | 117 + preview/pr-1492/api/latest/classUThreadC.html | 1027 +++++ .../classUThreadC_3_01void_01_4-members.html | 116 + .../latest/classUThreadC_3_01void_01_4.html | 1061 +++++ ...UThreadC_3_01void_01_4__inherit__graph.map | 25 + ...UThreadC_3_01void_01_4__inherit__graph.md5 | 1 + ...UThreadC_3_01void_01_4__inherit__graph.png | Bin 0 -> 43335 bytes .../api/latest/classUThread__coll__graph.map | 5 + .../api/latest/classUThread__coll__graph.md5 | 1 + .../api/latest/classUThread__coll__graph.png | Bin 0 -> 3851 bytes .../latest/classUThread__inherit__graph.map | 25 + .../latest/classUThread__inherit__graph.md5 | 1 + .../latest/classUThread__inherit__graph.png | Bin 0 -> 43080 bytes .../api/latest/classUTimer-members.html | 97 + preview/pr-1492/api/latest/classUTimer.html | 248 ++ .../api/latest/classUVariant-members.html | 167 + preview/pr-1492/api/latest/classUVariant.html | 1978 +++++++++ ...1DiscreteDepthDistortionModel-members.html | 125 + ...clams_1_1DiscreteDepthDistortionModel.html | 627 +++ ...creteDepthDistortionModel__coll__graph.map | 5 + ...creteDepthDistortionModel__coll__graph.md5 | 1 + ...creteDepthDistortionModel__coll__graph.png | Bin 0 -> 6020 bytes ...classclams_1_1DiscreteFrustum-members.html | 107 + .../latest/classclams_1_1DiscreteFrustum.html | 370 ++ .../classclams_1_1FrameProjector-members.html | 99 + .../latest/classclams_1_1FrameProjector.html | 197 + ...classclams_1_1ProjectivePoint-members.html | 96 + .../latest/classclams_1_1ProjectivePoint.html | 188 + preview/pr-1492/api/latest/classes.html | 139 + .../latest/classrtabmap_1_1BRISK-members.html | 145 + .../api/latest/classrtabmap_1_1BRISK.html | 314 ++ .../classrtabmap_1_1BRISK__coll__graph.map | 5 + .../classrtabmap_1_1BRISK__coll__graph.md5 | 1 + .../classrtabmap_1_1BRISK__coll__graph.png | Bin 0 -> 4418 bytes .../classrtabmap_1_1BRISK__inherit__graph.map | 5 + .../classrtabmap_1_1BRISK__inherit__graph.md5 | 1 + .../classrtabmap_1_1BRISK__inherit__graph.png | Bin 0 -> 4418 bytes .../classrtabmap_1_1BayesFilter-members.html | 104 + .../latest/classrtabmap_1_1BayesFilter.html | 448 ++ .../classrtabmap_1_1Camera-members.html | 116 + .../api/latest/classrtabmap_1_1Camera.html | 427 ++ ...classrtabmap_1_1CameraDepthAI-members.html | 130 + .../latest/classrtabmap_1_1CameraDepthAI.html | 381 ++ ...srtabmap_1_1CameraDepthAI__coll__graph.map | 7 + ...srtabmap_1_1CameraDepthAI__coll__graph.md5 | 1 + ...srtabmap_1_1CameraDepthAI__coll__graph.png | Bin 0 -> 6839 bytes ...abmap_1_1CameraDepthAI__inherit__graph.map | 7 + ...abmap_1_1CameraDepthAI__inherit__graph.md5 | 1 + ...abmap_1_1CameraDepthAI__inherit__graph.png | Bin 0 -> 6839 bytes ...lassrtabmap_1_1CameraFreenect-members.html | 122 + .../classrtabmap_1_1CameraFreenect.html | 373 ++ ...assrtabmap_1_1CameraFreenect2-members.html | 126 + .../classrtabmap_1_1CameraFreenect2.html | 380 ++ ...tabmap_1_1CameraFreenect2__coll__graph.map | 7 + ...tabmap_1_1CameraFreenect2__coll__graph.md5 | 1 + ...tabmap_1_1CameraFreenect2__coll__graph.png | Bin 0 -> 6872 bytes ...map_1_1CameraFreenect2__inherit__graph.map | 7 + ...map_1_1CameraFreenect2__inherit__graph.md5 | 1 + ...map_1_1CameraFreenect2__inherit__graph.png | Bin 0 -> 6872 bytes ...rtabmap_1_1CameraFreenect__coll__graph.map | 7 + ...rtabmap_1_1CameraFreenect__coll__graph.md5 | 1 + ...rtabmap_1_1CameraFreenect__coll__graph.png | Bin 0 -> 6690 bytes ...bmap_1_1CameraFreenect__inherit__graph.map | 7 + ...bmap_1_1CameraFreenect__inherit__graph.md5 | 1 + ...bmap_1_1CameraFreenect__inherit__graph.png | Bin 0 -> 6690 bytes .../classrtabmap_1_1CameraImages-members.html | 146 + .../latest/classrtabmap_1_1CameraImages.html | 1210 ++++++ ...ssrtabmap_1_1CameraImages__coll__graph.map | 7 + ...ssrtabmap_1_1CameraImages__coll__graph.md5 | 1 + ...ssrtabmap_1_1CameraImages__coll__graph.png | Bin 0 -> 6739 bytes ...tabmap_1_1CameraImages__inherit__graph.map | 11 + ...tabmap_1_1CameraImages__inherit__graph.md5 | 1 + ...tabmap_1_1CameraImages__inherit__graph.png | Bin 0 -> 14840 bytes .../classrtabmap_1_1CameraK4A-members.html | 122 + .../api/latest/classrtabmap_1_1CameraK4A.html | 357 ++ ...classrtabmap_1_1CameraK4A__coll__graph.map | 7 + ...classrtabmap_1_1CameraK4A__coll__graph.md5 | 1 + ...classrtabmap_1_1CameraK4A__coll__graph.png | Bin 0 -> 6753 bytes ...ssrtabmap_1_1CameraK4A__inherit__graph.map | 7 + ...ssrtabmap_1_1CameraK4A__inherit__graph.md5 | 1 + ...ssrtabmap_1_1CameraK4A__inherit__graph.png | Bin 0 -> 6753 bytes .../classrtabmap_1_1CameraK4W2-members.html | 127 + .../latest/classrtabmap_1_1CameraK4W2.html | 483 +++ ...lassrtabmap_1_1CameraK4W2__coll__graph.map | 7 + ...lassrtabmap_1_1CameraK4W2__coll__graph.md5 | 1 + ...lassrtabmap_1_1CameraK4W2__coll__graph.png | Bin 0 -> 7075 bytes ...srtabmap_1_1CameraK4W2__inherit__graph.map | 7 + ...srtabmap_1_1CameraK4W2__inherit__graph.md5 | 1 + ...srtabmap_1_1CameraK4W2__inherit__graph.png | Bin 0 -> 7075 bytes .../classrtabmap_1_1CameraModel-members.html | 141 + .../latest/classrtabmap_1_1CameraModel.html | 1905 +++++++++ ...classrtabmap_1_1CameraMyntEye-members.html | 123 + .../latest/classrtabmap_1_1CameraMyntEye.html | 399 ++ ...srtabmap_1_1CameraMyntEye__coll__graph.map | 7 + ...srtabmap_1_1CameraMyntEye__coll__graph.md5 | 1 + ...srtabmap_1_1CameraMyntEye__coll__graph.png | Bin 0 -> 6983 bytes ...abmap_1_1CameraMyntEye__inherit__graph.map | 7 + ...abmap_1_1CameraMyntEye__inherit__graph.md5 | 1 + ...abmap_1_1CameraMyntEye__inherit__graph.png | Bin 0 -> 6983 bytes ...classrtabmap_1_1CameraOpenNI2-members.html | 132 + .../latest/classrtabmap_1_1CameraOpenNI2.html | 401 ++ ...srtabmap_1_1CameraOpenNI2__coll__graph.map | 7 + ...srtabmap_1_1CameraOpenNI2__coll__graph.md5 | 1 + ...srtabmap_1_1CameraOpenNI2__coll__graph.png | Bin 0 -> 6987 bytes ...abmap_1_1CameraOpenNI2__inherit__graph.map | 7 + ...abmap_1_1CameraOpenNI2__inherit__graph.md5 | 1 + ...abmap_1_1CameraOpenNI2__inherit__graph.png | Bin 0 -> 6987 bytes ...lassrtabmap_1_1CameraOpenNICV-members.html | 119 + .../classrtabmap_1_1CameraOpenNICV.html | 350 ++ ...rtabmap_1_1CameraOpenNICV__coll__graph.map | 7 + ...rtabmap_1_1CameraOpenNICV__coll__graph.md5 | 1 + ...rtabmap_1_1CameraOpenNICV__coll__graph.png | Bin 0 -> 7128 bytes ...bmap_1_1CameraOpenNICV__inherit__graph.map | 7 + ...bmap_1_1CameraOpenNICV__inherit__graph.md5 | 1 + ...bmap_1_1CameraOpenNICV__inherit__graph.png | Bin 0 -> 7128 bytes .../classrtabmap_1_1CameraOpenni-members.html | 119 + .../latest/classrtabmap_1_1CameraOpenni.html | 354 ++ ...ssrtabmap_1_1CameraOpenni__coll__graph.map | 7 + ...ssrtabmap_1_1CameraOpenni__coll__graph.md5 | 1 + ...ssrtabmap_1_1CameraOpenni__coll__graph.png | Bin 0 -> 6707 bytes ...tabmap_1_1CameraOpenni__inherit__graph.map | 7 + ...tabmap_1_1CameraOpenni__inherit__graph.md5 | 1 + ...tabmap_1_1CameraOpenni__inherit__graph.png | Bin 0 -> 6707 bytes ...assrtabmap_1_1CameraOrbbecSDK-members.html | 123 + .../classrtabmap_1_1CameraOrbbecSDK.html | 360 ++ ...tabmap_1_1CameraOrbbecSDK__coll__graph.map | 7 + ...tabmap_1_1CameraOrbbecSDK__coll__graph.md5 | 1 + ...tabmap_1_1CameraOrbbecSDK__coll__graph.png | Bin 0 -> 7440 bytes ...map_1_1CameraOrbbecSDK__inherit__graph.map | 7 + ...map_1_1CameraOrbbecSDK__inherit__graph.md5 | 1 + ...map_1_1CameraOrbbecSDK__inherit__graph.png | Bin 0 -> 7440 bytes ...ssrtabmap_1_1CameraRGBDImages-members.html | 149 + .../classrtabmap_1_1CameraRGBDImages.html | 419 ++ ...abmap_1_1CameraRGBDImages__coll__graph.map | 9 + ...abmap_1_1CameraRGBDImages__coll__graph.md5 | 1 + ...abmap_1_1CameraRGBDImages__coll__graph.png | Bin 0 -> 10041 bytes ...ap_1_1CameraRGBDImages__inherit__graph.map | 9 + ...ap_1_1CameraRGBDImages__inherit__graph.md5 | 1 + ...ap_1_1CameraRGBDImages__inherit__graph.png | Bin 0 -> 10041 bytes ...assrtabmap_1_1CameraRealSense-members.html | 125 + .../classrtabmap_1_1CameraRealSense.html | 413 ++ ...ssrtabmap_1_1CameraRealSense2-members.html | 128 + .../classrtabmap_1_1CameraRealSense2.html | 507 +++ ...abmap_1_1CameraRealSense2__coll__graph.map | 7 + ...abmap_1_1CameraRealSense2__coll__graph.md5 | 1 + ...abmap_1_1CameraRealSense2__coll__graph.png | Bin 0 -> 7207 bytes ...ap_1_1CameraRealSense2__inherit__graph.map | 7 + ...ap_1_1CameraRealSense2__inherit__graph.md5 | 1 + ...ap_1_1CameraRealSense2__inherit__graph.png | Bin 0 -> 7207 bytes ...tabmap_1_1CameraRealSense__coll__graph.map | 7 + ...tabmap_1_1CameraRealSense__coll__graph.md5 | 1 + ...tabmap_1_1CameraRealSense__coll__graph.png | Bin 0 -> 7047 bytes ...map_1_1CameraRealSense__inherit__graph.map | 7 + ...map_1_1CameraRealSense__inherit__graph.md5 | 1 + ...map_1_1CameraRealSense__inherit__graph.png | Bin 0 -> 7047 bytes ...assrtabmap_1_1CameraSeerSense-members.html | 119 + .../classrtabmap_1_1CameraSeerSense.html | 446 ++ ...tabmap_1_1CameraSeerSense__coll__graph.map | 7 + ...tabmap_1_1CameraSeerSense__coll__graph.md5 | 1 + ...tabmap_1_1CameraSeerSense__coll__graph.png | Bin 0 -> 6899 bytes ...map_1_1CameraSeerSense__inherit__graph.map | 7 + ...map_1_1CameraSeerSense__inherit__graph.md5 | 1 + ...map_1_1CameraSeerSense__inherit__graph.png | Bin 0 -> 6899 bytes ...rtabmap_1_1CameraStereoDC1394-members.html | 119 + .../classrtabmap_1_1CameraStereoDC1394.html | 348 ++ ...map_1_1CameraStereoDC1394__coll__graph.map | 7 + ...map_1_1CameraStereoDC1394__coll__graph.md5 | 1 + ...map_1_1CameraStereoDC1394__coll__graph.png | Bin 0 -> 7682 bytes ..._1_1CameraStereoDC1394__inherit__graph.map | 7 + ..._1_1CameraStereoDC1394__inherit__graph.md5 | 1 + ..._1_1CameraStereoDC1394__inherit__graph.png | Bin 0 -> 7682 bytes ...ap_1_1CameraStereoFlyCapture2-members.html | 119 + ...assrtabmap_1_1CameraStereoFlyCapture2.html | 348 ++ ..._1CameraStereoFlyCapture2__coll__graph.map | 7 + ..._1CameraStereoFlyCapture2__coll__graph.md5 | 1 + ..._1CameraStereoFlyCapture2__coll__graph.png | Bin 0 -> 8485 bytes ...ameraStereoFlyCapture2__inherit__graph.map | 7 + ...ameraStereoFlyCapture2__inherit__graph.md5 | 1 + ...ameraStereoFlyCapture2__inherit__graph.png | Bin 0 -> 8485 bytes ...rtabmap_1_1CameraStereoImages-members.html | 151 + .../classrtabmap_1_1CameraStereoImages.html | 540 +++ ...map_1_1CameraStereoImages__coll__graph.map | 9 + ...map_1_1CameraStereoImages__coll__graph.md5 | 1 + ...map_1_1CameraStereoImages__coll__graph.png | Bin 0 -> 9940 bytes ..._1_1CameraStereoImages__inherit__graph.map | 9 + ..._1_1CameraStereoImages__inherit__graph.md5 | 1 + ..._1_1CameraStereoImages__inherit__graph.png | Bin 0 -> 9940 bytes ...ssrtabmap_1_1CameraStereoTara-members.html | 119 + .../classrtabmap_1_1CameraStereoTara.html | 348 ++ ...abmap_1_1CameraStereoTara__coll__graph.map | 7 + ...abmap_1_1CameraStereoTara__coll__graph.md5 | 1 + ...abmap_1_1CameraStereoTara__coll__graph.png | Bin 0 -> 6967 bytes ...ap_1_1CameraStereoTara__inherit__graph.map | 7 + ...ap_1_1CameraStereoTara__inherit__graph.md5 | 1 + ...ap_1_1CameraStereoTara__inherit__graph.png | Bin 0 -> 6967 bytes ...srtabmap_1_1CameraStereoVideo-members.html | 125 + .../classrtabmap_1_1CameraStereoVideo.html | 457 ++ ...bmap_1_1CameraStereoVideo__coll__graph.map | 7 + ...bmap_1_1CameraStereoVideo__coll__graph.md5 | 1 + ...bmap_1_1CameraStereoVideo__coll__graph.png | Bin 0 -> 7266 bytes ...p_1_1CameraStereoVideo__inherit__graph.map | 7 + ...p_1_1CameraStereoVideo__inherit__graph.md5 | 1 + ...p_1_1CameraStereoVideo__inherit__graph.png | Bin 0 -> 7266 bytes ...assrtabmap_1_1CameraStereoZed-members.html | 124 + .../classrtabmap_1_1CameraStereoZed.html | 487 +++ ...srtabmap_1_1CameraStereoZedOC-members.html | 120 + .../classrtabmap_1_1CameraStereoZedOC.html | 351 ++ ...bmap_1_1CameraStereoZedOC__coll__graph.map | 7 + ...bmap_1_1CameraStereoZedOC__coll__graph.md5 | 1 + ...bmap_1_1CameraStereoZedOC__coll__graph.png | Bin 0 -> 7467 bytes ...p_1_1CameraStereoZedOC__inherit__graph.map | 7 + ...p_1_1CameraStereoZedOC__inherit__graph.md5 | 1 + ...p_1_1CameraStereoZedOC__inherit__graph.png | Bin 0 -> 7467 bytes ...tabmap_1_1CameraStereoZed__coll__graph.map | 7 + ...tabmap_1_1CameraStereoZed__coll__graph.md5 | 1 + ...tabmap_1_1CameraStereoZed__coll__graph.png | Bin 0 -> 7192 bytes ...map_1_1CameraStereoZed__inherit__graph.map | 7 + ...map_1_1CameraStereoZed__inherit__graph.md5 | 1 + ...map_1_1CameraStereoZed__inherit__graph.png | Bin 0 -> 7192 bytes .../classrtabmap_1_1CameraVideo-members.html | 126 + .../latest/classrtabmap_1_1CameraVideo.html | 498 +++ ...assrtabmap_1_1CameraVideo__coll__graph.map | 7 + ...assrtabmap_1_1CameraVideo__coll__graph.md5 | 1 + ...assrtabmap_1_1CameraVideo__coll__graph.png | Bin 0 -> 6814 bytes ...rtabmap_1_1CameraVideo__inherit__graph.map | 7 + ...rtabmap_1_1CameraVideo__inherit__graph.md5 | 1 + ...rtabmap_1_1CameraVideo__inherit__graph.png | Bin 0 -> 6814 bytes .../classrtabmap_1_1Camera__coll__graph.map | 5 + .../classrtabmap_1_1Camera__coll__graph.md5 | 1 + .../classrtabmap_1_1Camera__coll__graph.png | Bin 0 -> 4526 bytes ...classrtabmap_1_1Camera__inherit__graph.map | 53 + ...classrtabmap_1_1Camera__inherit__graph.md5 | 1 + ...classrtabmap_1_1Camera__inherit__graph.png | Bin 0 -> 131753 bytes .../classrtabmap_1_1CloudMap-members.html | 125 + .../api/latest/classrtabmap_1_1CloudMap.html | 382 ++ .../classrtabmap_1_1CloudMap__coll__graph.map | 5 + .../classrtabmap_1_1CloudMap__coll__graph.md5 | 1 + .../classrtabmap_1_1CloudMap__coll__graph.png | Bin 0 -> 4411 bytes ...assrtabmap_1_1CloudMap__inherit__graph.map | 5 + ...assrtabmap_1_1CloudMap__inherit__graph.md5 | 1 + ...assrtabmap_1_1CloudMap__inherit__graph.png | Bin 0 -> 4411 bytes ...srtabmap_1_1CompressionThread-members.html | 136 + .../classrtabmap_1_1CompressionThread.html | 415 ++ ...bmap_1_1CompressionThread__coll__graph.map | 7 + ...bmap_1_1CompressionThread__coll__graph.md5 | 1 + ...bmap_1_1CompressionThread__coll__graph.png | Bin 0 -> 6405 bytes ...p_1_1CompressionThread__inherit__graph.map | 7 + ...p_1_1CompressionThread__inherit__graph.md5 | 1 + ...p_1_1CompressionThread__inherit__graph.png | Bin 0 -> 6405 bytes .../classrtabmap_1_1DBDriver-members.html | 277 ++ .../api/latest/classrtabmap_1_1DBDriver.html | 1321 ++++++ ...assrtabmap_1_1DBDriverSqlite3-members.html | 286 ++ .../classrtabmap_1_1DBDriverSqlite3.html | 3278 +++++++++++++++ ...tabmap_1_1DBDriverSqlite3__coll__graph.map | 9 + ...tabmap_1_1DBDriverSqlite3__coll__graph.md5 | 1 + ...tabmap_1_1DBDriverSqlite3__coll__graph.png | Bin 0 -> 9517 bytes ...map_1_1DBDriverSqlite3__inherit__graph.map | 9 + ...map_1_1DBDriverSqlite3__inherit__graph.md5 | 1 + ...map_1_1DBDriverSqlite3__inherit__graph.png | Bin 0 -> 9517 bytes .../classrtabmap_1_1DBDriver__coll__graph.map | 7 + .../classrtabmap_1_1DBDriver__coll__graph.md5 | 1 + .../classrtabmap_1_1DBDriver__coll__graph.png | Bin 0 -> 6375 bytes ...assrtabmap_1_1DBDriver__inherit__graph.map | 9 + ...assrtabmap_1_1DBDriver__inherit__graph.md5 | 1 + ...assrtabmap_1_1DBDriver__inherit__graph.png | Bin 0 -> 9596 bytes .../classrtabmap_1_1DBReader-members.html | 120 + .../api/latest/classrtabmap_1_1DBReader.html | 473 +++ .../classrtabmap_1_1DBReader__coll__graph.map | 7 + .../classrtabmap_1_1DBReader__coll__graph.md5 | 1 + .../classrtabmap_1_1DBReader__coll__graph.png | Bin 0 -> 6698 bytes ...assrtabmap_1_1DBReader__inherit__graph.map | 7 + ...assrtabmap_1_1DBReader__inherit__graph.md5 | 1 + ...assrtabmap_1_1DBReader__inherit__graph.png | Bin 0 -> 6698 bytes .../classrtabmap_1_1EnvSensor-members.html | 114 + .../api/latest/classrtabmap_1_1EnvSensor.html | 386 ++ ...ssrtabmap_1_1EpipolarGeometry-members.html | 114 + .../classrtabmap_1_1EpipolarGeometry.html | 541 +++ .../latest/classrtabmap_1_1FAST-members.html | 145 + .../api/latest/classrtabmap_1_1FAST.html | 347 ++ .../classrtabmap_1_1FAST__BRIEF-members.html | 147 + .../latest/classrtabmap_1_1FAST__BRIEF.html | 322 ++ ...assrtabmap_1_1FAST__BRIEF__coll__graph.map | 7 + ...assrtabmap_1_1FAST__BRIEF__coll__graph.md5 | 1 + ...assrtabmap_1_1FAST__BRIEF__coll__graph.png | Bin 0 -> 6510 bytes ...rtabmap_1_1FAST__BRIEF__inherit__graph.map | 7 + ...rtabmap_1_1FAST__BRIEF__inherit__graph.md5 | 1 + ...rtabmap_1_1FAST__BRIEF__inherit__graph.png | Bin 0 -> 6510 bytes .../classrtabmap_1_1FAST__FREAK-members.html | 147 + .../latest/classrtabmap_1_1FAST__FREAK.html | 322 ++ ...assrtabmap_1_1FAST__FREAK__coll__graph.map | 7 + ...assrtabmap_1_1FAST__FREAK__coll__graph.md5 | 1 + ...assrtabmap_1_1FAST__FREAK__coll__graph.png | Bin 0 -> 6534 bytes ...rtabmap_1_1FAST__FREAK__inherit__graph.map | 7 + ...rtabmap_1_1FAST__FREAK__inherit__graph.md5 | 1 + ...rtabmap_1_1FAST__FREAK__inherit__graph.png | Bin 0 -> 6534 bytes .../classrtabmap_1_1FAST__coll__graph.map | 5 + .../classrtabmap_1_1FAST__coll__graph.md5 | 1 + .../classrtabmap_1_1FAST__coll__graph.png | Bin 0 -> 4158 bytes .../classrtabmap_1_1FAST__inherit__graph.map | 9 + .../classrtabmap_1_1FAST__inherit__graph.md5 | 1 + .../classrtabmap_1_1FAST__inherit__graph.png | Bin 0 -> 10022 bytes .../classrtabmap_1_1Feature2D-members.html | 143 + .../api/latest/classrtabmap_1_1Feature2D.html | 558 +++ ...ssrtabmap_1_1Feature2D__inherit__graph.map | 39 + ...ssrtabmap_1_1Feature2D__inherit__graph.md5 | 1 + ...ssrtabmap_1_1Feature2D__inherit__graph.png | Bin 0 -> 66093 bytes .../classrtabmap_1_1FeatureBA-members.html | 97 + .../api/latest/classrtabmap_1_1FeatureBA.html | 251 ++ .../classrtabmap_1_1FlannIndex-members.html | 113 + .../latest/classrtabmap_1_1FlannIndex.html | 224 + .../latest/classrtabmap_1_1GFTT-members.html | 145 + .../api/latest/classrtabmap_1_1GFTT.html | 323 ++ .../classrtabmap_1_1GFTT__BRIEF-members.html | 147 + .../latest/classrtabmap_1_1GFTT__BRIEF.html | 322 ++ ...assrtabmap_1_1GFTT__BRIEF__coll__graph.map | 7 + ...assrtabmap_1_1GFTT__BRIEF__coll__graph.md5 | 1 + ...assrtabmap_1_1GFTT__BRIEF__coll__graph.png | Bin 0 -> 6091 bytes ...rtabmap_1_1GFTT__BRIEF__inherit__graph.map | 7 + ...rtabmap_1_1GFTT__BRIEF__inherit__graph.md5 | 1 + ...rtabmap_1_1GFTT__BRIEF__inherit__graph.png | Bin 0 -> 6091 bytes .../classrtabmap_1_1GFTT__DAISY-members.html | 147 + .../latest/classrtabmap_1_1GFTT__DAISY.html | 322 ++ ...assrtabmap_1_1GFTT__DAISY__coll__graph.map | 7 + ...assrtabmap_1_1GFTT__DAISY__coll__graph.md5 | 1 + ...assrtabmap_1_1GFTT__DAISY__coll__graph.png | Bin 0 -> 6525 bytes ...rtabmap_1_1GFTT__DAISY__inherit__graph.map | 7 + ...rtabmap_1_1GFTT__DAISY__inherit__graph.md5 | 1 + ...rtabmap_1_1GFTT__DAISY__inherit__graph.png | Bin 0 -> 6525 bytes .../classrtabmap_1_1GFTT__FREAK-members.html | 147 + .../latest/classrtabmap_1_1GFTT__FREAK.html | 322 ++ ...assrtabmap_1_1GFTT__FREAK__coll__graph.map | 7 + ...assrtabmap_1_1GFTT__FREAK__coll__graph.md5 | 1 + ...assrtabmap_1_1GFTT__FREAK__coll__graph.png | Bin 0 -> 6376 bytes ...rtabmap_1_1GFTT__FREAK__inherit__graph.map | 7 + ...rtabmap_1_1GFTT__FREAK__inherit__graph.md5 | 1 + ...rtabmap_1_1GFTT__FREAK__inherit__graph.png | Bin 0 -> 6376 bytes .../classrtabmap_1_1GFTT__ORB-members.html | 147 + .../api/latest/classrtabmap_1_1GFTT__ORB.html | 322 ++ ...classrtabmap_1_1GFTT__ORB__coll__graph.map | 7 + ...classrtabmap_1_1GFTT__ORB__coll__graph.md5 | 1 + ...classrtabmap_1_1GFTT__ORB__coll__graph.png | Bin 0 -> 6209 bytes ...ssrtabmap_1_1GFTT__ORB__inherit__graph.map | 7 + ...ssrtabmap_1_1GFTT__ORB__inherit__graph.md5 | 1 + ...ssrtabmap_1_1GFTT__ORB__inherit__graph.png | Bin 0 -> 6209 bytes .../classrtabmap_1_1GFTT__coll__graph.map | 5 + .../classrtabmap_1_1GFTT__coll__graph.md5 | 1 + .../classrtabmap_1_1GFTT__coll__graph.png | Bin 0 -> 4014 bytes .../classrtabmap_1_1GFTT__inherit__graph.map | 13 + .../classrtabmap_1_1GFTT__inherit__graph.md5 | 1 + .../classrtabmap_1_1GFTT__inherit__graph.png | Bin 0 -> 13971 bytes .../latest/classrtabmap_1_1GPS-members.html | 101 + .../api/latest/classrtabmap_1_1GPS.html | 434 ++ ...assrtabmap_1_1GainCompensator-members.html | 106 + .../classrtabmap_1_1GainCompensator.html | 144 + ...lassrtabmap_1_1GeodeticCoords-members.html | 106 + .../classrtabmap_1_1GeodeticCoords.html | 495 +++ ...ssrtabmap_1_1GlobalDescriptor-members.html | 98 + .../classrtabmap_1_1GlobalDescriptor.html | 291 ++ ..._1_1GlobalDescriptorExtractor-members.html | 103 + ...srtabmap_1_1GlobalDescriptorExtractor.html | 211 + .../classrtabmap_1_1GlobalMap-members.html | 121 + .../api/latest/classrtabmap_1_1GlobalMap.html | 1016 +++++ ...ssrtabmap_1_1GlobalMap__inherit__graph.map | 11 + ...ssrtabmap_1_1GlobalMap__inherit__graph.md5 | 1 + ...ssrtabmap_1_1GlobalMap__inherit__graph.png | Bin 0 -> 13175 bytes .../classrtabmap_1_1GridMap-members.html | 128 + .../api/latest/classrtabmap_1_1GridMap.html | 307 ++ .../classrtabmap_1_1GridMap__coll__graph.map | 5 + .../classrtabmap_1_1GridMap__coll__graph.md5 | 1 + .../classrtabmap_1_1GridMap__coll__graph.png | Bin 0 -> 4291 bytes ...lassrtabmap_1_1GridMap__inherit__graph.map | 5 + ...lassrtabmap_1_1GridMap__inherit__graph.md5 | 1 + ...lassrtabmap_1_1GridMap__inherit__graph.png | Bin 0 -> 4291 bytes .../latest/classrtabmap_1_1IMU-members.html | 104 + .../api/latest/classrtabmap_1_1IMU.html | 569 +++ .../classrtabmap_1_1IMUEvent-members.html | 100 + .../api/latest/classrtabmap_1_1IMUEvent.html | 313 ++ .../classrtabmap_1_1IMUEvent__coll__graph.map | 5 + .../classrtabmap_1_1IMUEvent__coll__graph.md5 | 1 + .../classrtabmap_1_1IMUEvent__coll__graph.png | Bin 0 -> 3775 bytes ...assrtabmap_1_1IMUEvent__inherit__graph.map | 5 + ...assrtabmap_1_1IMUEvent__inherit__graph.md5 | 1 + ...assrtabmap_1_1IMUEvent__inherit__graph.png | Bin 0 -> 3775 bytes .../classrtabmap_1_1IMUFilter-members.html | 104 + .../api/latest/classrtabmap_1_1IMUFilter.html | 567 +++ .../classrtabmap_1_1IMUThread-members.html | 140 + .../api/latest/classrtabmap_1_1IMUThread.html | 369 ++ ...classrtabmap_1_1IMUThread__coll__graph.map | 9 + ...classrtabmap_1_1IMUThread__coll__graph.md5 | 1 + ...classrtabmap_1_1IMUThread__coll__graph.png | Bin 0 -> 8912 bytes ...ssrtabmap_1_1IMUThread__inherit__graph.map | 9 + ...ssrtabmap_1_1IMUThread__inherit__graph.md5 | 1 + ...ssrtabmap_1_1IMUThread__inherit__graph.png | Bin 0 -> 8912 bytes .../latest/classrtabmap_1_1KAZE-members.html | 145 + .../api/latest/classrtabmap_1_1KAZE.html | 314 ++ .../classrtabmap_1_1KAZE__coll__graph.map | 5 + .../classrtabmap_1_1KAZE__coll__graph.md5 | 1 + .../classrtabmap_1_1KAZE__coll__graph.png | Bin 0 -> 4329 bytes .../classrtabmap_1_1KAZE__inherit__graph.map | 5 + .../classrtabmap_1_1KAZE__inherit__graph.md5 | 1 + .../classrtabmap_1_1KAZE__inherit__graph.png | Bin 0 -> 4329 bytes .../classrtabmap_1_1Landmark-members.html | 100 + .../api/latest/classrtabmap_1_1Landmark.html | 408 ++ .../classrtabmap_1_1LaserScan-members.html | 160 + .../api/latest/classrtabmap_1_1LaserScan.html | 1287 ++++++ .../latest/classrtabmap_1_1Lidar-members.html | 108 + .../api/latest/classrtabmap_1_1Lidar.html | 251 ++ .../classrtabmap_1_1LidarVLP16-members.html | 113 + .../latest/classrtabmap_1_1LidarVLP16.html | 356 ++ ...lassrtabmap_1_1LidarVLP16__coll__graph.map | 9 + ...lassrtabmap_1_1LidarVLP16__coll__graph.md5 | 1 + ...lassrtabmap_1_1LidarVLP16__coll__graph.png | Bin 0 -> 10242 bytes ...srtabmap_1_1LidarVLP16__inherit__graph.map | 9 + ...srtabmap_1_1LidarVLP16__inherit__graph.md5 | 1 + ...srtabmap_1_1LidarVLP16__inherit__graph.png | Bin 0 -> 10242 bytes .../classrtabmap_1_1Lidar__coll__graph.map | 5 + .../classrtabmap_1_1Lidar__coll__graph.md5 | 1 + .../classrtabmap_1_1Lidar__coll__graph.png | Bin 0 -> 4411 bytes .../classrtabmap_1_1Lidar__inherit__graph.map | 7 + .../classrtabmap_1_1Lidar__inherit__graph.md5 | 1 + .../classrtabmap_1_1Lidar__inherit__graph.png | Bin 0 -> 6572 bytes .../latest/classrtabmap_1_1Link-members.html | 131 + .../api/latest/classrtabmap_1_1Link.html | 828 ++++ .../classrtabmap_1_1LocalGrid-members.html | 100 + .../api/latest/classrtabmap_1_1LocalGrid.html | 344 ++ ...lassrtabmap_1_1LocalGridCache-members.html | 105 + .../classrtabmap_1_1LocalGridCache.html | 415 ++ ...lassrtabmap_1_1LocalGridMaker-members.html | 130 + .../classrtabmap_1_1LocalGridMaker.html | 1193 ++++++ ...lassrtabmap_1_1MarkerDetector-members.html | 100 + .../classrtabmap_1_1MarkerDetector.html | 139 + .../classrtabmap_1_1MarkerInfo-members.html | 96 + .../latest/classrtabmap_1_1MarkerInfo.html | 237 ++ .../classrtabmap_1_1Memory-members.html | 198 + .../api/latest/classrtabmap_1_1Memory.html | 3109 ++++++++++++++ .../classrtabmap_1_1Memory__coll__graph.map | 9 + .../classrtabmap_1_1Memory__coll__graph.md5 | 1 + .../classrtabmap_1_1Memory__coll__graph.png | Bin 0 -> 9984 bytes .../latest/classrtabmap_1_1ORB-members.html | 145 + .../api/latest/classrtabmap_1_1ORB.html | 343 ++ .../classrtabmap_1_1ORBOctree-members.html | 145 + .../api/latest/classrtabmap_1_1ORBOctree.html | 314 ++ ...classrtabmap_1_1ORBOctree__coll__graph.map | 5 + ...classrtabmap_1_1ORBOctree__coll__graph.md5 | 1 + ...classrtabmap_1_1ORBOctree__coll__graph.png | Bin 0 -> 4702 bytes ...ssrtabmap_1_1ORBOctree__inherit__graph.map | 5 + ...ssrtabmap_1_1ORBOctree__inherit__graph.md5 | 1 + ...ssrtabmap_1_1ORBOctree__inherit__graph.png | Bin 0 -> 4702 bytes .../classrtabmap_1_1ORB__coll__graph.map | 5 + .../classrtabmap_1_1ORB__coll__graph.md5 | 1 + .../classrtabmap_1_1ORB__coll__graph.png | Bin 0 -> 4267 bytes .../classrtabmap_1_1ORB__inherit__graph.map | 5 + .../classrtabmap_1_1ORB__inherit__graph.md5 | 1 + .../classrtabmap_1_1ORB__inherit__graph.png | Bin 0 -> 4267 bytes ...classrtabmap_1_1OccupancyGrid-members.html | 126 + .../latest/classrtabmap_1_1OccupancyGrid.html | 333 ++ ...srtabmap_1_1OccupancyGrid__coll__graph.map | 5 + ...srtabmap_1_1OccupancyGrid__coll__graph.md5 | 1 + ...srtabmap_1_1OccupancyGrid__coll__graph.png | Bin 0 -> 4912 bytes ...abmap_1_1OccupancyGrid__inherit__graph.map | 5 + ...abmap_1_1OccupancyGrid__inherit__graph.md5 | 1 + ...abmap_1_1OccupancyGrid__inherit__graph.png | Bin 0 -> 4912 bytes .../classrtabmap_1_1OctoMap-members.html | 133 + .../api/latest/classrtabmap_1_1OctoMap.html | 381 ++ .../classrtabmap_1_1OctoMap__coll__graph.map | 5 + .../classrtabmap_1_1OctoMap__coll__graph.md5 | 1 + .../classrtabmap_1_1OctoMap__coll__graph.png | Bin 0 -> 4378 bytes ...lassrtabmap_1_1OctoMap__inherit__graph.map | 5 + ...lassrtabmap_1_1OctoMap__inherit__graph.md5 | 1 + ...lassrtabmap_1_1OctoMap__inherit__graph.png | Bin 0 -> 4378 bytes .../classrtabmap_1_1Odometry-members.html | 127 + .../api/latest/classrtabmap_1_1Odometry.html | 786 ++++ ...assrtabmap_1_1OdometryCuVSLAM-members.html | 129 + .../classrtabmap_1_1OdometryCuVSLAM.html | 264 ++ ...tabmap_1_1OdometryCuVSLAM__coll__graph.map | 5 + ...tabmap_1_1OdometryCuVSLAM__coll__graph.md5 | 1 + ...tabmap_1_1OdometryCuVSLAM__coll__graph.png | Bin 0 -> 6014 bytes ...map_1_1OdometryCuVSLAM__inherit__graph.map | 5 + ...map_1_1OdometryCuVSLAM__inherit__graph.md5 | 1 + ...map_1_1OdometryCuVSLAM__inherit__graph.png | Bin 0 -> 6014 bytes .../classrtabmap_1_1OdometryDVO-members.html | 129 + .../latest/classrtabmap_1_1OdometryDVO.html | 264 ++ ...assrtabmap_1_1OdometryDVO__coll__graph.map | 5 + ...assrtabmap_1_1OdometryDVO__coll__graph.md5 | 1 + ...assrtabmap_1_1OdometryDVO__coll__graph.png | Bin 0 -> 5318 bytes ...rtabmap_1_1OdometryDVO__inherit__graph.map | 5 + ...rtabmap_1_1OdometryDVO__inherit__graph.md5 | 1 + ...rtabmap_1_1OdometryDVO__inherit__graph.png | Bin 0 -> 5318 bytes ...classrtabmap_1_1OdometryEvent-members.html | 105 + .../latest/classrtabmap_1_1OdometryEvent.html | 439 ++ ...srtabmap_1_1OdometryEvent__coll__graph.map | 5 + ...srtabmap_1_1OdometryEvent__coll__graph.md5 | 1 + ...srtabmap_1_1OdometryEvent__coll__graph.png | Bin 0 -> 4339 bytes ...abmap_1_1OdometryEvent__inherit__graph.map | 5 + ...abmap_1_1OdometryEvent__inherit__graph.md5 | 1 + ...abmap_1_1OdometryEvent__inherit__graph.png | Bin 0 -> 4339 bytes .../classrtabmap_1_1OdometryF2F-members.html | 130 + .../latest/classrtabmap_1_1OdometryF2F.html | 293 ++ ...assrtabmap_1_1OdometryF2F__coll__graph.map | 5 + ...assrtabmap_1_1OdometryF2F__coll__graph.md5 | 1 + ...assrtabmap_1_1OdometryF2F__coll__graph.png | Bin 0 -> 5204 bytes ...rtabmap_1_1OdometryF2F__inherit__graph.map | 5 + ...rtabmap_1_1OdometryF2F__inherit__graph.md5 | 1 + ...rtabmap_1_1OdometryF2F__inherit__graph.png | Bin 0 -> 5204 bytes .../classrtabmap_1_1OdometryF2M-members.html | 131 + .../latest/classrtabmap_1_1OdometryF2M.html | 322 ++ ...assrtabmap_1_1OdometryF2M__coll__graph.map | 5 + ...assrtabmap_1_1OdometryF2M__coll__graph.md5 | 1 + ...assrtabmap_1_1OdometryF2M__coll__graph.png | Bin 0 -> 5380 bytes ...rtabmap_1_1OdometryF2M__inherit__graph.map | 5 + ...rtabmap_1_1OdometryF2M__inherit__graph.md5 | 1 + ...rtabmap_1_1OdometryF2M__inherit__graph.png | Bin 0 -> 5380 bytes ...classrtabmap_1_1OdometryFLOAM-members.html | 129 + .../latest/classrtabmap_1_1OdometryFLOAM.html | 264 ++ ...srtabmap_1_1OdometryFLOAM__coll__graph.map | 5 + ...srtabmap_1_1OdometryFLOAM__coll__graph.md5 | 1 + ...srtabmap_1_1OdometryFLOAM__coll__graph.png | Bin 0 -> 5482 bytes ...abmap_1_1OdometryFLOAM__inherit__graph.map | 5 + ...abmap_1_1OdometryFLOAM__inherit__graph.md5 | 1 + ...abmap_1_1OdometryFLOAM__inherit__graph.png | Bin 0 -> 5482 bytes ...classrtabmap_1_1OdometryFovis-members.html | 129 + .../latest/classrtabmap_1_1OdometryFovis.html | 264 ++ ...srtabmap_1_1OdometryFovis__coll__graph.map | 5 + ...srtabmap_1_1OdometryFovis__coll__graph.md5 | 1 + ...srtabmap_1_1OdometryFovis__coll__graph.png | Bin 0 -> 5369 bytes ...abmap_1_1OdometryFovis__inherit__graph.map | 5 + ...abmap_1_1OdometryFovis__inherit__graph.md5 | 1 + ...abmap_1_1OdometryFovis__inherit__graph.png | Bin 0 -> 5369 bytes .../classrtabmap_1_1OdometryInfo-members.html | 131 + .../latest/classrtabmap_1_1OdometryInfo.html | 775 ++++ ...ssrtabmap_1_1OdometryInfo__coll__graph.map | 9 + ...ssrtabmap_1_1OdometryInfo__coll__graph.md5 | 1 + ...ssrtabmap_1_1OdometryInfo__coll__graph.png | Bin 0 -> 19487 bytes ...lassrtabmap_1_1OdometryLIOSAM-members.html | 129 + .../classrtabmap_1_1OdometryLIOSAM.html | 294 ++ ...rtabmap_1_1OdometryLIOSAM__coll__graph.map | 5 + ...rtabmap_1_1OdometryLIOSAM__coll__graph.md5 | 1 + ...rtabmap_1_1OdometryLIOSAM__coll__graph.png | Bin 0 -> 5590 bytes ...bmap_1_1OdometryLIOSAM__inherit__graph.map | 5 + ...bmap_1_1OdometryLIOSAM__inherit__graph.md5 | 1 + ...bmap_1_1OdometryLIOSAM__inherit__graph.png | Bin 0 -> 5590 bytes .../classrtabmap_1_1OdometryLOAM-members.html | 129 + .../latest/classrtabmap_1_1OdometryLOAM.html | 264 ++ ...ssrtabmap_1_1OdometryLOAM__coll__graph.map | 5 + ...ssrtabmap_1_1OdometryLOAM__coll__graph.md5 | 1 + ...ssrtabmap_1_1OdometryLOAM__coll__graph.png | Bin 0 -> 5383 bytes ...tabmap_1_1OdometryLOAM__inherit__graph.map | 5 + ...tabmap_1_1OdometryLOAM__inherit__graph.md5 | 1 + ...tabmap_1_1OdometryLOAM__inherit__graph.png | Bin 0 -> 5383 bytes ...classrtabmap_1_1OdometryMSCKF-members.html | 129 + .../latest/classrtabmap_1_1OdometryMSCKF.html | 324 ++ ...srtabmap_1_1OdometryMSCKF__coll__graph.map | 5 + ...srtabmap_1_1OdometryMSCKF__coll__graph.md5 | 1 + ...srtabmap_1_1OdometryMSCKF__coll__graph.png | Bin 0 -> 5752 bytes ...abmap_1_1OdometryMSCKF__inherit__graph.map | 5 + ...abmap_1_1OdometryMSCKF__inherit__graph.md5 | 1 + ...abmap_1_1OdometryMSCKF__inherit__graph.png | Bin 0 -> 5752 bytes .../classrtabmap_1_1OdometryMono-members.html | 129 + .../latest/classrtabmap_1_1OdometryMono.html | 264 ++ ...ssrtabmap_1_1OdometryMono__coll__graph.map | 5 + ...ssrtabmap_1_1OdometryMono__coll__graph.md5 | 1 + ...ssrtabmap_1_1OdometryMono__coll__graph.png | Bin 0 -> 5256 bytes ...tabmap_1_1OdometryMono__inherit__graph.map | 5 + ...tabmap_1_1OdometryMono__inherit__graph.md5 | 1 + ...tabmap_1_1OdometryMono__inherit__graph.png | Bin 0 -> 5256 bytes ...ssrtabmap_1_1OdometryORBSLAM2-members.html | 129 + .../classrtabmap_1_1OdometryORBSLAM2.html | 264 ++ ...abmap_1_1OdometryORBSLAM2__coll__graph.map | 5 + ...abmap_1_1OdometryORBSLAM2__coll__graph.md5 | 1 + ...abmap_1_1OdometryORBSLAM2__coll__graph.png | Bin 0 -> 6191 bytes ...ap_1_1OdometryORBSLAM2__inherit__graph.map | 5 + ...ap_1_1OdometryORBSLAM2__inherit__graph.md5 | 1 + ...ap_1_1OdometryORBSLAM2__inherit__graph.png | Bin 0 -> 6191 bytes ...ssrtabmap_1_1OdometryORBSLAM3-members.html | 129 + .../classrtabmap_1_1OdometryORBSLAM3.html | 292 ++ ...abmap_1_1OdometryORBSLAM3__coll__graph.map | 5 + ...abmap_1_1OdometryORBSLAM3__coll__graph.md5 | 1 + ...abmap_1_1OdometryORBSLAM3__coll__graph.png | Bin 0 -> 6213 bytes ...ap_1_1OdometryORBSLAM3__inherit__graph.map | 5 + ...ap_1_1OdometryORBSLAM3__inherit__graph.md5 | 1 + ...ap_1_1OdometryORBSLAM3__inherit__graph.png | Bin 0 -> 6213 bytes ...classrtabmap_1_1OdometryOkvis-members.html | 129 + .../latest/classrtabmap_1_1OdometryOkvis.html | 324 ++ ...srtabmap_1_1OdometryOkvis__coll__graph.map | 5 + ...srtabmap_1_1OdometryOkvis__coll__graph.md5 | 1 + ...srtabmap_1_1OdometryOkvis__coll__graph.png | Bin 0 -> 5452 bytes ...abmap_1_1OdometryOkvis__inherit__graph.map | 5 + ...abmap_1_1OdometryOkvis__inherit__graph.md5 | 1 + ...abmap_1_1OdometryOkvis__inherit__graph.png | Bin 0 -> 5452 bytes ...lassrtabmap_1_1OdometryOpen3D-members.html | 129 + .../classrtabmap_1_1OdometryOpen3D.html | 264 ++ ...rtabmap_1_1OdometryOpen3D__coll__graph.map | 5 + ...rtabmap_1_1OdometryOpen3D__coll__graph.md5 | 1 + ...rtabmap_1_1OdometryOpen3D__coll__graph.png | Bin 0 -> 5545 bytes ...bmap_1_1OdometryOpen3D__inherit__graph.map | 5 + ...bmap_1_1OdometryOpen3D__inherit__graph.md5 | 1 + ...bmap_1_1OdometryOpen3D__inherit__graph.png | Bin 0 -> 5545 bytes ...ssrtabmap_1_1OdometryOpenVINS-members.html | 128 + .../classrtabmap_1_1OdometryOpenVINS.html | 324 ++ ...abmap_1_1OdometryOpenVINS__coll__graph.map | 5 + ...abmap_1_1OdometryOpenVINS__coll__graph.md5 | 1 + ...abmap_1_1OdometryOpenVINS__coll__graph.png | Bin 0 -> 5791 bytes ...ap_1_1OdometryOpenVINS__inherit__graph.map | 5 + ...ap_1_1OdometryOpenVINS__inherit__graph.md5 | 1 + ...ap_1_1OdometryOpenVINS__inherit__graph.png | Bin 0 -> 5791 bytes ...rtabmap_1_1OdometryResetEvent-members.html | 99 + .../classrtabmap_1_1OdometryResetEvent.html | 251 ++ ...map_1_1OdometryResetEvent__coll__graph.map | 5 + ...map_1_1OdometryResetEvent__coll__graph.md5 | 1 + ...map_1_1OdometryResetEvent__coll__graph.png | Bin 0 -> 4713 bytes ..._1_1OdometryResetEvent__inherit__graph.map | 5 + ..._1_1OdometryResetEvent__inherit__graph.md5 | 1 + ..._1_1OdometryResetEvent__inherit__graph.png | Bin 0 -> 4713 bytes ...lassrtabmap_1_1OdometryThread-members.html | 141 + .../classrtabmap_1_1OdometryThread.html | 282 ++ ...rtabmap_1_1OdometryThread__coll__graph.map | 11 + ...rtabmap_1_1OdometryThread__coll__graph.md5 | 1 + ...rtabmap_1_1OdometryThread__coll__graph.png | Bin 0 -> 11891 bytes ...bmap_1_1OdometryThread__inherit__graph.map | 11 + ...bmap_1_1OdometryThread__inherit__graph.md5 | 1 + ...bmap_1_1OdometryThread__inherit__graph.png | Bin 0 -> 11891 bytes ...rtabmap_1_1OdometryVINSFusion-members.html | 129 + .../classrtabmap_1_1OdometryVINSFusion.html | 324 ++ ...map_1_1OdometryVINSFusion__coll__graph.map | 5 + ...map_1_1OdometryVINSFusion__coll__graph.md5 | 1 + ...map_1_1OdometryVINSFusion__coll__graph.png | Bin 0 -> 6121 bytes ..._1_1OdometryVINSFusion__inherit__graph.map | 5 + ..._1_1OdometryVINSFusion__inherit__graph.md5 | 1 + ..._1_1OdometryVINSFusion__inherit__graph.png | Bin 0 -> 6121 bytes ...classrtabmap_1_1OdometryViso2-members.html | 129 + .../latest/classrtabmap_1_1OdometryViso2.html | 264 ++ ...srtabmap_1_1OdometryViso2__coll__graph.map | 5 + ...srtabmap_1_1OdometryViso2__coll__graph.md5 | 1 + ...srtabmap_1_1OdometryViso2__coll__graph.png | Bin 0 -> 5548 bytes ...abmap_1_1OdometryViso2__inherit__graph.map | 5 + ...abmap_1_1OdometryViso2__inherit__graph.md5 | 1 + ...abmap_1_1OdometryViso2__inherit__graph.png | Bin 0 -> 5548 bytes ...assrtabmap_1_1Odometry__inherit__graph.map | 37 + ...assrtabmap_1_1Odometry__inherit__graph.md5 | 1 + ...assrtabmap_1_1Odometry__inherit__graph.png | Bin 0 -> 94878 bytes .../classrtabmap_1_1Optimizer-members.html | 132 + .../api/latest/classrtabmap_1_1Optimizer.html | 1421 +++++++ ...lassrtabmap_1_1OptimizerCVSBA-members.html | 136 + .../classrtabmap_1_1OptimizerCVSBA.html | 458 ++ ...rtabmap_1_1OptimizerCVSBA__coll__graph.map | 5 + ...rtabmap_1_1OptimizerCVSBA__coll__graph.md5 | 1 + ...rtabmap_1_1OptimizerCVSBA__coll__graph.png | Bin 0 -> 5265 bytes ...bmap_1_1OptimizerCVSBA__inherit__graph.map | 5 + ...bmap_1_1OptimizerCVSBA__inherit__graph.md5 | 1 + ...bmap_1_1OptimizerCVSBA__inherit__graph.png | Bin 0 -> 5265 bytes ...lassrtabmap_1_1OptimizerCeres-members.html | 136 + .../classrtabmap_1_1OptimizerCeres.html | 552 +++ ...rtabmap_1_1OptimizerCeres__coll__graph.map | 5 + ...rtabmap_1_1OptimizerCeres__coll__graph.md5 | 1 + ...rtabmap_1_1OptimizerCeres__coll__graph.png | Bin 0 -> 4677 bytes ...bmap_1_1OptimizerCeres__inherit__graph.map | 5 + ...bmap_1_1OptimizerCeres__inherit__graph.md5 | 1 + ...bmap_1_1OptimizerCeres__inherit__graph.png | Bin 0 -> 4677 bytes .../classrtabmap_1_1OptimizerG2O-members.html | 139 + .../latest/classrtabmap_1_1OptimizerG2O.html | 512 +++ ...ssrtabmap_1_1OptimizerG2O__coll__graph.map | 5 + ...ssrtabmap_1_1OptimizerG2O__coll__graph.md5 | 1 + ...ssrtabmap_1_1OptimizerG2O__coll__graph.png | Bin 0 -> 4674 bytes ...tabmap_1_1OptimizerG2O__inherit__graph.map | 5 + ...tabmap_1_1OptimizerG2O__inherit__graph.md5 | 1 + ...tabmap_1_1OptimizerG2O__inherit__graph.png | Bin 0 -> 4674 bytes ...lassrtabmap_1_1OptimizerGTSAM-members.html | 135 + .../classrtabmap_1_1OptimizerGTSAM.html | 473 +++ ...rtabmap_1_1OptimizerGTSAM__coll__graph.map | 5 + ...rtabmap_1_1OptimizerGTSAM__coll__graph.md5 | 1 + ...rtabmap_1_1OptimizerGTSAM__coll__graph.png | Bin 0 -> 5228 bytes ...bmap_1_1OptimizerGTSAM__inherit__graph.map | 5 + ...bmap_1_1OptimizerGTSAM__inherit__graph.md5 | 1 + ...bmap_1_1OptimizerGTSAM__inherit__graph.png | Bin 0 -> 5228 bytes ...classrtabmap_1_1OptimizerTORO-members.html | 138 + .../latest/classrtabmap_1_1OptimizerTORO.html | 470 +++ ...srtabmap_1_1OptimizerTORO__coll__graph.map | 5 + ...srtabmap_1_1OptimizerTORO__coll__graph.md5 | 1 + ...srtabmap_1_1OptimizerTORO__coll__graph.png | Bin 0 -> 4589 bytes ...abmap_1_1OptimizerTORO__inherit__graph.map | 5 + ...abmap_1_1OptimizerTORO__inherit__graph.md5 | 1 + ...abmap_1_1OptimizerTORO__inherit__graph.png | Bin 0 -> 4589 bytes ...ssrtabmap_1_1Optimizer__inherit__graph.map | 13 + ...ssrtabmap_1_1Optimizer__inherit__graph.md5 | 1 + ...ssrtabmap_1_1Optimizer__inherit__graph.png | Bin 0 -> 20157 bytes .../classrtabmap_1_1ParamEvent-members.html | 100 + .../latest/classrtabmap_1_1ParamEvent.html | 294 ++ ...lassrtabmap_1_1ParamEvent__coll__graph.map | 5 + ...lassrtabmap_1_1ParamEvent__coll__graph.md5 | 1 + ...lassrtabmap_1_1ParamEvent__coll__graph.png | Bin 0 -> 3690 bytes ...srtabmap_1_1ParamEvent__inherit__graph.map | 5 + ...srtabmap_1_1ParamEvent__inherit__graph.md5 | 1 + ...srtabmap_1_1ParamEvent__inherit__graph.png | Bin 0 -> 3690 bytes .../classrtabmap_1_1Parameters-members.html | 119 + .../latest/classrtabmap_1_1Parameters.html | 363 ++ ...lassrtabmap_1_1ParticleFilter-members.html | 95 + .../classrtabmap_1_1ParticleFilter.html | 216 + ...classrtabmap_1_1ProgressState-members.html | 97 + .../latest/classrtabmap_1_1ProgressState.html | 247 ++ ...assrtabmap_1_1PythonInterface-members.html | 95 + .../classrtabmap_1_1PythonInterface.html | 118 + .../classrtabmap_1_1Registration-members.html | 123 + .../latest/classrtabmap_1_1Registration.html | 605 +++ ...assrtabmap_1_1RegistrationIcp-members.html | 134 + .../classrtabmap_1_1RegistrationIcp.html | 481 +++ ...tabmap_1_1RegistrationIcp__coll__graph.map | 5 + ...tabmap_1_1RegistrationIcp__coll__graph.md5 | 1 + ...tabmap_1_1RegistrationIcp__coll__graph.png | Bin 0 -> 5431 bytes ...map_1_1RegistrationIcp__inherit__graph.map | 5 + ...map_1_1RegistrationIcp__inherit__graph.md5 | 1 + ...map_1_1RegistrationIcp__inherit__graph.png | Bin 0 -> 5431 bytes ...ssrtabmap_1_1RegistrationInfo-members.html | 116 + .../classrtabmap_1_1RegistrationInfo.html | 594 +++ ...assrtabmap_1_1RegistrationVis-members.html | 132 + .../classrtabmap_1_1RegistrationVis.html | 617 +++ ...tabmap_1_1RegistrationVis__coll__graph.map | 5 + ...tabmap_1_1RegistrationVis__coll__graph.md5 | 1 + ...tabmap_1_1RegistrationVis__coll__graph.png | Bin 0 -> 5449 bytes ...map_1_1RegistrationVis__inherit__graph.map | 5 + ...map_1_1RegistrationVis__inherit__graph.md5 | 1 + ...map_1_1RegistrationVis__inherit__graph.png | Bin 0 -> 5449 bytes ...tabmap_1_1Registration__inherit__graph.map | 7 + ...tabmap_1_1Registration__inherit__graph.md5 | 1 + ...tabmap_1_1Registration__inherit__graph.png | Bin 0 -> 9537 bytes .../classrtabmap_1_1Rtabmap-members.html | 175 + .../api/latest/classrtabmap_1_1Rtabmap.html | 2755 ++++++++++++ ...rtabmap_1_1RtabmapColorOcTree-members.html | 107 + .../classrtabmap_1_1RtabmapColorOcTree.html | 499 +++ ...map_1_1RtabmapColorOcTreeNode-members.html | 112 + ...lassrtabmap_1_1RtabmapColorOcTreeNode.html | 434 ++ ...1_1RtabmapColorOcTreeNode__coll__graph.map | 5 + ...1_1RtabmapColorOcTreeNode__coll__graph.md5 | 1 + ...1_1RtabmapColorOcTreeNode__coll__graph.png | Bin 0 -> 6138 bytes ...RtabmapColorOcTreeNode__inherit__graph.map | 5 + ...RtabmapColorOcTreeNode__inherit__graph.md5 | 1 + ...RtabmapColorOcTreeNode__inherit__graph.png | Bin 0 -> 6138 bytes ...ee_1_1StaticMemberInitializer-members.html | 94 + ...olorOcTree_1_1StaticMemberInitializer.html | 136 + ...map_1_1RtabmapColorOcTree__coll__graph.map | 7 + ...map_1_1RtabmapColorOcTree__coll__graph.md5 | 1 + ...map_1_1RtabmapColorOcTree__coll__graph.png | Bin 0 -> 18242 bytes ..._1_1RtabmapColorOcTree__inherit__graph.map | 5 + ..._1_1RtabmapColorOcTree__inherit__graph.md5 | 1 + ..._1_1RtabmapColorOcTree__inherit__graph.png | Bin 0 -> 8280 bytes .../classrtabmap_1_1RtabmapEvent-members.html | 99 + .../latest/classrtabmap_1_1RtabmapEvent.html | 251 ++ ...srtabmap_1_1RtabmapEvent3DMap-members.html | 102 + .../classrtabmap_1_1RtabmapEvent3DMap.html | 355 ++ ...bmap_1_1RtabmapEvent3DMap__coll__graph.map | 5 + ...bmap_1_1RtabmapEvent3DMap__coll__graph.md5 | 1 + ...bmap_1_1RtabmapEvent3DMap__coll__graph.png | Bin 0 -> 4353 bytes ...p_1_1RtabmapEvent3DMap__inherit__graph.map | 5 + ...p_1_1RtabmapEvent3DMap__inherit__graph.md5 | 1 + ...p_1_1RtabmapEvent3DMap__inherit__graph.png | Bin 0 -> 4353 bytes ...assrtabmap_1_1RtabmapEventCmd-members.html | 130 + .../classrtabmap_1_1RtabmapEventCmd.html | 693 ++++ ...tabmap_1_1RtabmapEventCmd__coll__graph.map | 5 + ...tabmap_1_1RtabmapEventCmd__coll__graph.md5 | 1 + ...tabmap_1_1RtabmapEventCmd__coll__graph.png | Bin 0 -> 4128 bytes ...map_1_1RtabmapEventCmd__inherit__graph.map | 5 + ...map_1_1RtabmapEventCmd__inherit__graph.md5 | 1 + ...map_1_1RtabmapEventCmd__inherit__graph.png | Bin 0 -> 4128 bytes ...ssrtabmap_1_1RtabmapEventInit-members.html | 110 + .../classrtabmap_1_1RtabmapEventInit.html | 371 ++ ...abmap_1_1RtabmapEventInit__coll__graph.map | 5 + ...abmap_1_1RtabmapEventInit__coll__graph.md5 | 1 + ...abmap_1_1RtabmapEventInit__coll__graph.png | Bin 0 -> 3863 bytes ...ap_1_1RtabmapEventInit__inherit__graph.map | 5 + ...ap_1_1RtabmapEventInit__inherit__graph.md5 | 1 + ...ap_1_1RtabmapEventInit__inherit__graph.png | Bin 0 -> 3863 bytes ...ssrtabmap_1_1RtabmapEvent__coll__graph.map | 5 + ...ssrtabmap_1_1RtabmapEvent__coll__graph.md5 | 1 + ...ssrtabmap_1_1RtabmapEvent__coll__graph.png | Bin 0 -> 3614 bytes ...tabmap_1_1RtabmapEvent__inherit__graph.map | 5 + ...tabmap_1_1RtabmapEvent__inherit__graph.md5 | 1 + ...tabmap_1_1RtabmapEvent__inherit__graph.png | Bin 0 -> 3614 bytes ...map_1_1RtabmapGlobalPathEvent-members.html | 104 + ...lassrtabmap_1_1RtabmapGlobalPathEvent.html | 433 ++ ...1_1RtabmapGlobalPathEvent__coll__graph.map | 5 + ...1_1RtabmapGlobalPathEvent__coll__graph.md5 | 1 + ...1_1RtabmapGlobalPathEvent__coll__graph.png | Bin 0 -> 4687 bytes ...RtabmapGlobalPathEvent__inherit__graph.map | 5 + ...RtabmapGlobalPathEvent__inherit__graph.md5 | 1 + ...RtabmapGlobalPathEvent__inherit__graph.png | Bin 0 -> 4687 bytes ...map_1_1RtabmapGoalStatusEvent-members.html | 98 + ...lassrtabmap_1_1RtabmapGoalStatusEvent.html | 222 + ...1_1RtabmapGoalStatusEvent__coll__graph.map | 5 + ...1_1RtabmapGoalStatusEvent__coll__graph.md5 | 1 + ...1_1RtabmapGoalStatusEvent__coll__graph.png | Bin 0 -> 4920 bytes ...RtabmapGoalStatusEvent__inherit__graph.map | 5 + ...RtabmapGoalStatusEvent__inherit__graph.md5 | 1 + ...RtabmapGoalStatusEvent__inherit__graph.png | Bin 0 -> 4920 bytes ...map_1_1RtabmapLabelErrorEvent-members.html | 100 + ...lassrtabmap_1_1RtabmapLabelErrorEvent.html | 290 ++ ...1_1RtabmapLabelErrorEvent__coll__graph.map | 5 + ...1_1RtabmapLabelErrorEvent__coll__graph.md5 | 1 + ...1_1RtabmapLabelErrorEvent__coll__graph.png | Bin 0 -> 4519 bytes ...RtabmapLabelErrorEvent__inherit__graph.map | 5 + ...RtabmapLabelErrorEvent__inherit__graph.md5 | 1 + ...RtabmapLabelErrorEvent__inherit__graph.png | Bin 0 -> 4519 bytes ...classrtabmap_1_1RtabmapThread-members.html | 152 + .../latest/classrtabmap_1_1RtabmapThread.html | 443 ++ ...srtabmap_1_1RtabmapThread__coll__graph.map | 11 + ...srtabmap_1_1RtabmapThread__coll__graph.md5 | 1 + ...srtabmap_1_1RtabmapThread__coll__graph.png | Bin 0 -> 11958 bytes ...abmap_1_1RtabmapThread__inherit__graph.map | 11 + ...abmap_1_1RtabmapThread__inherit__graph.md5 | 1 + ...abmap_1_1RtabmapThread__inherit__graph.png | Bin 0 -> 11958 bytes .../classrtabmap_1_1RvlCodec-members.html | 95 + .../api/latest/classrtabmap_1_1RvlCodec.html | 108 + .../latest/classrtabmap_1_1SIFT-members.html | 145 + .../api/latest/classrtabmap_1_1SIFT.html | 343 ++ .../classrtabmap_1_1SIFT__coll__graph.map | 5 + .../classrtabmap_1_1SIFT__coll__graph.md5 | 1 + .../classrtabmap_1_1SIFT__coll__graph.png | Bin 0 -> 3963 bytes .../classrtabmap_1_1SIFT__inherit__graph.map | 5 + .../classrtabmap_1_1SIFT__inherit__graph.md5 | 1 + .../classrtabmap_1_1SIFT__inherit__graph.png | Bin 0 -> 3963 bytes .../latest/classrtabmap_1_1SURF-members.html | 145 + .../api/latest/classrtabmap_1_1SURF.html | 347 ++ .../classrtabmap_1_1SURF__DAISY-members.html | 147 + .../latest/classrtabmap_1_1SURF__DAISY.html | 322 ++ ...assrtabmap_1_1SURF__DAISY__coll__graph.map | 7 + ...assrtabmap_1_1SURF__DAISY__coll__graph.md5 | 1 + ...assrtabmap_1_1SURF__DAISY__coll__graph.png | Bin 0 -> 6732 bytes ...rtabmap_1_1SURF__DAISY__inherit__graph.map | 7 + ...rtabmap_1_1SURF__DAISY__inherit__graph.md5 | 1 + ...rtabmap_1_1SURF__DAISY__inherit__graph.png | Bin 0 -> 6732 bytes .../classrtabmap_1_1SURF__FREAK-members.html | 147 + .../latest/classrtabmap_1_1SURF__FREAK.html | 322 ++ ...assrtabmap_1_1SURF__FREAK__coll__graph.map | 7 + ...assrtabmap_1_1SURF__FREAK__coll__graph.md5 | 1 + ...assrtabmap_1_1SURF__FREAK__coll__graph.png | Bin 0 -> 6620 bytes ...rtabmap_1_1SURF__FREAK__inherit__graph.map | 7 + ...rtabmap_1_1SURF__FREAK__inherit__graph.md5 | 1 + ...rtabmap_1_1SURF__FREAK__inherit__graph.png | Bin 0 -> 6620 bytes .../classrtabmap_1_1SURF__coll__graph.map | 5 + .../classrtabmap_1_1SURF__coll__graph.md5 | 1 + .../classrtabmap_1_1SURF__coll__graph.png | Bin 0 -> 4255 bytes .../classrtabmap_1_1SURF__inherit__graph.map | 9 + .../classrtabmap_1_1SURF__inherit__graph.md5 | 1 + .../classrtabmap_1_1SURF__inherit__graph.png | Bin 0 -> 10424 bytes ...classrtabmap_1_1SensorCapture-members.html | 106 + .../latest/classrtabmap_1_1SensorCapture.html | 748 ++++ ...srtabmap_1_1SensorCaptureInfo-members.html | 111 + .../classrtabmap_1_1SensorCaptureInfo.html | 572 +++ ...bmap_1_1SensorCaptureInfo__coll__graph.map | 5 + ...bmap_1_1SensorCaptureInfo__coll__graph.md5 | 1 + ...bmap_1_1SensorCaptureInfo__coll__graph.png | Bin 0 -> 6246 bytes ...tabmap_1_1SensorCaptureThread-members.html | 166 + .../classrtabmap_1_1SensorCaptureThread.html | 1617 ++++++++ ...ap_1_1SensorCaptureThread__coll__graph.map | 9 + ...ap_1_1SensorCaptureThread__coll__graph.md5 | 1 + ...ap_1_1SensorCaptureThread__coll__graph.png | Bin 0 -> 9602 bytes ...1_1SensorCaptureThread__inherit__graph.map | 9 + ...1_1SensorCaptureThread__inherit__graph.md5 | 1 + ...1_1SensorCaptureThread__inherit__graph.png | Bin 0 -> 9602 bytes ...abmap_1_1SensorCapture__inherit__graph.map | 57 + ...abmap_1_1SensorCapture__inherit__graph.md5 | 1 + ...abmap_1_1SensorCapture__inherit__graph.png | Bin 0 -> 139601 bytes .../classrtabmap_1_1SensorData-members.html | 182 + .../latest/classrtabmap_1_1SensorData.html | 3691 +++++++++++++++++ .../classrtabmap_1_1SensorEvent-members.html | 108 + .../latest/classrtabmap_1_1SensorEvent.html | 603 +++ ...assrtabmap_1_1SensorEvent__coll__graph.map | 5 + ...assrtabmap_1_1SensorEvent__coll__graph.md5 | 1 + ...assrtabmap_1_1SensorEvent__coll__graph.png | Bin 0 -> 4084 bytes ...rtabmap_1_1SensorEvent__inherit__graph.map | 5 + ...rtabmap_1_1SensorEvent__inherit__graph.md5 | 1 + ...rtabmap_1_1SensorEvent__inherit__graph.png | Bin 0 -> 4084 bytes .../classrtabmap_1_1Signature-members.html | 145 + .../api/latest/classrtabmap_1_1Signature.html | 1980 +++++++++ .../classrtabmap_1_1Statistics-members.html | 152 + .../latest/classrtabmap_1_1Statistics.html | 2266 ++++++++++ .../classrtabmap_1_1Stereo-members.html | 104 + .../api/latest/classrtabmap_1_1Stereo.html | 581 +++ .../classrtabmap_1_1StereoBM-members.html | 104 + .../api/latest/classrtabmap_1_1StereoBM.html | 363 ++ .../classrtabmap_1_1StereoBM__coll__graph.map | 5 + .../classrtabmap_1_1StereoBM__coll__graph.md5 | 1 + .../classrtabmap_1_1StereoBM__coll__graph.png | Bin 0 -> 4967 bytes ...assrtabmap_1_1StereoBM__inherit__graph.map | 5 + ...assrtabmap_1_1StereoBM__inherit__graph.md5 | 1 + ...assrtabmap_1_1StereoBM__inherit__graph.png | Bin 0 -> 4967 bytes ...srtabmap_1_1StereoCameraModel-members.html | 129 + .../classrtabmap_1_1StereoCameraModel.html | 1679 ++++++++ .../classrtabmap_1_1StereoDense-members.html | 101 + .../latest/classrtabmap_1_1StereoDense.html | 426 ++ ...rtabmap_1_1StereoDense__inherit__graph.map | 7 + ...rtabmap_1_1StereoDense__inherit__graph.md5 | 1 + ...rtabmap_1_1StereoDense__inherit__graph.png | Bin 0 -> 7453 bytes ...srtabmap_1_1StereoOpticalFlow-members.html | 110 + .../classrtabmap_1_1StereoOpticalFlow.html | 497 +++ ...bmap_1_1StereoOpticalFlow__coll__graph.map | 5 + ...bmap_1_1StereoOpticalFlow__coll__graph.md5 | 1 + ...bmap_1_1StereoOpticalFlow__coll__graph.png | Bin 0 -> 5164 bytes ...p_1_1StereoOpticalFlow__inherit__graph.map | 5 + ...p_1_1StereoOpticalFlow__inherit__graph.md5 | 1 + ...p_1_1StereoOpticalFlow__inherit__graph.png | Bin 0 -> 5164 bytes .../classrtabmap_1_1StereoSGBM-members.html | 103 + .../latest/classrtabmap_1_1StereoSGBM.html | 325 ++ ...lassrtabmap_1_1StereoSGBM__coll__graph.map | 5 + ...lassrtabmap_1_1StereoSGBM__coll__graph.md5 | 1 + ...lassrtabmap_1_1StereoSGBM__coll__graph.png | Bin 0 -> 5265 bytes ...srtabmap_1_1StereoSGBM__inherit__graph.map | 5 + ...srtabmap_1_1StereoSGBM__inherit__graph.md5 | 1 + ...srtabmap_1_1StereoSGBM__inherit__graph.png | Bin 0 -> 5265 bytes ...classrtabmap_1_1Stereo__inherit__graph.map | 5 + ...classrtabmap_1_1Stereo__inherit__graph.md5 | 1 + ...classrtabmap_1_1Stereo__inherit__graph.png | Bin 0 -> 5200 bytes ...rtabmap_1_1SuperPointRpautrat-members.html | 145 + .../classrtabmap_1_1SuperPointRpautrat.html | 343 ++ ...map_1_1SuperPointRpautrat__coll__graph.map | 5 + ...map_1_1SuperPointRpautrat__coll__graph.md5 | 1 + ...map_1_1SuperPointRpautrat__coll__graph.png | Bin 0 -> 5178 bytes ..._1_1SuperPointRpautrat__inherit__graph.map | 5 + ..._1_1SuperPointRpautrat__inherit__graph.md5 | 1 + ..._1_1SuperPointRpautrat__inherit__graph.png | Bin 0 -> 5178 bytes ...assrtabmap_1_1SuperPointTorch-members.html | 145 + .../classrtabmap_1_1SuperPointTorch.html | 343 ++ ...tabmap_1_1SuperPointTorch__coll__graph.map | 5 + ...tabmap_1_1SuperPointTorch__coll__graph.md5 | 1 + ...tabmap_1_1SuperPointTorch__coll__graph.png | Bin 0 -> 5094 bytes ...map_1_1SuperPointTorch__inherit__graph.map | 5 + ...map_1_1SuperPointTorch__inherit__graph.md5 | 1 + ...map_1_1SuperPointTorch__inherit__graph.png | Bin 0 -> 5094 bytes .../classrtabmap_1_1Transform-members.html | 176 + .../api/latest/classrtabmap_1_1Transform.html | 1610 +++++++ ...ssrtabmap_1_1TransformStamped-members.html | 95 + .../classrtabmap_1_1TransformStamped.html | 208 + ...classrtabmap_1_1UserDataEvent-members.html | 99 + .../latest/classrtabmap_1_1UserDataEvent.html | 254 ++ ...srtabmap_1_1UserDataEvent__coll__graph.map | 5 + ...srtabmap_1_1UserDataEvent__coll__graph.md5 | 1 + ...srtabmap_1_1UserDataEvent__coll__graph.png | Bin 0 -> 4033 bytes ...abmap_1_1UserDataEvent__inherit__graph.map | 5 + ...abmap_1_1UserDataEvent__inherit__graph.md5 | 1 + ...abmap_1_1UserDataEvent__inherit__graph.png | Bin 0 -> 4033 bytes .../classrtabmap_1_1VWDictionary-members.html | 145 + .../latest/classrtabmap_1_1VWDictionary.html | 1671 ++++++++ .../classrtabmap_1_1VisualWord-members.html | 103 + .../latest/classrtabmap_1_1VisualWord.html | 449 ++ preview/pr-1492/api/latest/closed.png | Bin 0 -> 132 bytes preview/pr-1492/api/latest/deprecated.html | 108 + .../pr-1492/api/latest/dir_000004_000021.html | 86 + .../pr-1492/api/latest/dir_000008_000021.html | 86 + .../pr-1492/api/latest/dir_000010_000021.html | 86 + .../pr-1492/api/latest/dir_000017_000021.html | 86 + .../dir_04d49acea3c42cab2afcd35cb2f2a48f.html | 101 + ...r_04d49acea3c42cab2afcd35cb2f2a48f_dep.map | 7 + ...r_04d49acea3c42cab2afcd35cb2f2a48f_dep.md5 | 1 + ...r_04d49acea3c42cab2afcd35cb2f2a48f_dep.png | Bin 0 -> 3708 bytes .../dir_0ba908baca6d808b21359711c92b5f16.html | 106 + ...r_0ba908baca6d808b21359711c92b5f16_dep.map | 4 + ...r_0ba908baca6d808b21359711c92b5f16_dep.md5 | 1 + ...r_0ba908baca6d808b21359711c92b5f16_dep.png | Bin 0 -> 2000 bytes .../dir_21f2edb779785a2efd6396476d03a0e2.html | 99 + ...r_21f2edb779785a2efd6396476d03a0e2_dep.map | 5 + ...r_21f2edb779785a2efd6396476d03a0e2_dep.md5 | 1 + ...r_21f2edb779785a2efd6396476d03a0e2_dep.png | Bin 0 -> 3343 bytes .../dir_249903c078ca6be5fe8a43d73ba57f0e.html | 148 + ...r_249903c078ca6be5fe8a43d73ba57f0e_dep.map | 4 + ...r_249903c078ca6be5fe8a43d73ba57f0e_dep.md5 | 1 + ...r_249903c078ca6be5fe8a43d73ba57f0e_dep.png | Bin 0 -> 1842 bytes .../dir_3587399b7774227770d0fd39c2d22121.html | 112 + ...r_3587399b7774227770d0fd39c2d22121_dep.map | 4 + ...r_3587399b7774227770d0fd39c2d22121_dep.md5 | 1 + ...r_3587399b7774227770d0fd39c2d22121_dep.png | Bin 0 -> 2369 bytes .../dir_449b2e54cbad5b668a24993c3878cc51.html | 105 + ...r_449b2e54cbad5b668a24993c3878cc51_dep.map | 5 + ...r_449b2e54cbad5b668a24993c3878cc51_dep.md5 | 1 + ...r_449b2e54cbad5b668a24993c3878cc51_dep.png | Bin 0 -> 3226 bytes .../dir_55226059184c2c5c345e42665cf98aec.html | 99 + ...r_55226059184c2c5c345e42665cf98aec_dep.map | 5 + ...r_55226059184c2c5c345e42665cf98aec_dep.md5 | 1 + ...r_55226059184c2c5c345e42665cf98aec_dep.png | Bin 0 -> 3223 bytes .../dir_5807fd1f37f21884b665e4f5337b2441.html | 99 + ...r_5807fd1f37f21884b665e4f5337b2441_dep.map | 5 + ...r_5807fd1f37f21884b665e4f5337b2441_dep.md5 | 1 + ...r_5807fd1f37f21884b665e4f5337b2441_dep.png | Bin 0 -> 3327 bytes .../dir_623bdbaac6fe9b3f6f5de21b17f93501.html | 106 + ...r_623bdbaac6fe9b3f6f5de21b17f93501_dep.map | 4 + ...r_623bdbaac6fe9b3f6f5de21b17f93501_dep.md5 | 1 + ...r_623bdbaac6fe9b3f6f5de21b17f93501_dep.png | Bin 0 -> 2010 bytes .../dir_65d456be8cef94751a4d1b4df815a100.html | 104 + ...r_65d456be8cef94751a4d1b4df815a100_dep.map | 4 + ...r_65d456be8cef94751a4d1b4df815a100_dep.md5 | 1 + ...r_65d456be8cef94751a4d1b4df815a100_dep.png | Bin 0 -> 1692 bytes .../dir_67ee77bab1d00e5527b3ba66cff8b822.html | 113 + ...r_67ee77bab1d00e5527b3ba66cff8b822_dep.map | 7 + ...r_67ee77bab1d00e5527b3ba66cff8b822_dep.md5 | 1 + ...r_67ee77bab1d00e5527b3ba66cff8b822_dep.png | Bin 0 -> 3066 bytes .../dir_6fc574af21c01044bbfc485d931ba1b6.html | 104 + ...r_6fc574af21c01044bbfc485d931ba1b6_dep.map | 4 + ...r_6fc574af21c01044bbfc485d931ba1b6_dep.md5 | 1 + ...r_6fc574af21c01044bbfc485d931ba1b6_dep.png | Bin 0 -> 1824 bytes .../dir_7b07a0fe62d0fac6129c48e2cb6c7633.html | 108 + ...r_7b07a0fe62d0fac6129c48e2cb6c7633_dep.map | 4 + ...r_7b07a0fe62d0fac6129c48e2cb6c7633_dep.md5 | 1 + ...r_7b07a0fe62d0fac6129c48e2cb6c7633_dep.png | Bin 0 -> 1761 bytes .../dir_7c77c469ef71e5893c1567cf621a9d83.html | 89 + .../dir_85e098119c0e838040cd00f42e29c3c2.html | 161 + ...r_85e098119c0e838040cd00f42e29c3c2_dep.map | 6 + ...r_85e098119c0e838040cd00f42e29c3c2_dep.md5 | 1 + ...r_85e098119c0e838040cd00f42e29c3c2_dep.png | Bin 0 -> 4337 bytes .../dir_884419f21456e80aa47bc1d0c2ab0140.html | 300 ++ ...r_884419f21456e80aa47bc1d0c2ab0140_dep.map | 17 + ...r_884419f21456e80aa47bc1d0c2ab0140_dep.md5 | 1 + ...r_884419f21456e80aa47bc1d0c2ab0140_dep.png | Bin 0 -> 13895 bytes .../dir_8c6d2b7fb0f1009468191a56b06a1387.html | 89 + .../dir_b3c8af46e4c1aa88d96b6d1863f8ab51.html | 108 + ...r_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.map | 4 + ...r_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.md5 | 1 + ...r_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.png | Bin 0 -> 1967 bytes .../dir_ca74fa0ef74cdae9a74fcd374d99516a.html | 99 + ...r_ca74fa0ef74cdae9a74fcd374d99516a_dep.map | 5 + ...r_ca74fa0ef74cdae9a74fcd374d99516a_dep.md5 | 1 + ...r_ca74fa0ef74cdae9a74fcd374d99516a_dep.png | Bin 0 -> 3114 bytes .../dir_d5b9494e18cb3ada3ef427a965bb34ab.html | 105 + ...r_d5b9494e18cb3ada3ef427a965bb34ab_dep.map | 5 + ...r_d5b9494e18cb3ada3ef427a965bb34ab_dep.md5 | 1 + ...r_d5b9494e18cb3ada3ef427a965bb34ab_dep.png | Bin 0 -> 3267 bytes .../dir_e996b11fd4b3a747423759b16a8ba4a6.html | 102 + ...r_e996b11fd4b3a747423759b16a8ba4a6_dep.map | 8 + ...r_e996b11fd4b3a747423759b16a8ba4a6_dep.md5 | 1 + ...r_e996b11fd4b3a747423759b16a8ba4a6_dep.png | Bin 0 -> 4936 bytes .../dir_ee30f6c257683889c7b4a28a79d90ef3.html | 110 + ...r_ee30f6c257683889c7b4a28a79d90ef3_dep.map | 4 + ...r_ee30f6c257683889c7b4a28a79d90ef3_dep.md5 | 1 + ...r_ee30f6c257683889c7b4a28a79d90ef3_dep.png | Bin 0 -> 2216 bytes .../dir_fbc3350978c71aef49f2eeb1c9d88691.html | 138 + ...r_fbc3350978c71aef49f2eeb1c9d88691_dep.map | 4 + ...r_fbc3350978c71aef49f2eeb1c9d88691_dep.md5 | 1 + ...r_fbc3350978c71aef49f2eeb1c9d88691_dep.png | Bin 0 -> 2403 bytes .../dir_ff01f7bc5399ccf9ff1cc91d1f45726a.html | 108 + ...r_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.map | 8 + ...r_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.md5 | 1 + ...r_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.png | Bin 0 -> 4531 bytes ...e__depth__distortion__model_8h_source.html | 240 ++ preview/pr-1492/api/latest/doc.svg | 12 + preview/pr-1492/api/latest/docd.svg | 12 + preview/pr-1492/api/latest/doxygen.css | 2045 +++++++++ preview/pr-1492/api/latest/doxygen.svg | 28 + preview/pr-1492/api/latest/dynsections.js | 199 + preview/pr-1492/api/latest/examples.html | 88 + preview/pr-1492/api/latest/files.html | 284 ++ preview/pr-1492/api/latest/folderclosed.svg | 11 + preview/pr-1492/api/latest/folderclosedd.svg | 11 + preview/pr-1492/api/latest/folderopen.svg | 17 + preview/pr-1492/api/latest/folderopend.svg | 12 + .../latest/frame__projector_8h_source.html | 190 + preview/pr-1492/api/latest/functions.html | 91 + preview/pr-1492/api/latest/functions_a.html | 119 + preview/pr-1492/api/latest/functions_b.html | 93 + preview/pr-1492/api/latest/functions_c.html | 145 + preview/pr-1492/api/latest/functions_d.html | 117 + preview/pr-1492/api/latest/functions_e.html | 108 + .../pr-1492/api/latest/functions_enum.html | 92 + .../pr-1492/api/latest/functions_eval.html | 178 + preview/pr-1492/api/latest/functions_f.html | 110 + .../pr-1492/api/latest/functions_func.html | 116 + .../pr-1492/api/latest/functions_func_b.html | 90 + .../pr-1492/api/latest/functions_func_c.html | 140 + .../pr-1492/api/latest/functions_func_d.html | 115 + .../pr-1492/api/latest/functions_func_e.html | 107 + .../pr-1492/api/latest/functions_func_f.html | 108 + .../pr-1492/api/latest/functions_func_g.html | 282 ++ .../pr-1492/api/latest/functions_func_h.html | 90 + .../pr-1492/api/latest/functions_func_i.html | 173 + .../pr-1492/api/latest/functions_func_j.html | 88 + .../pr-1492/api/latest/functions_func_k.html | 91 + .../pr-1492/api/latest/functions_func_l.html | 124 + .../pr-1492/api/latest/functions_func_m.html | 96 + .../pr-1492/api/latest/functions_func_n.html | 90 + .../pr-1492/api/latest/functions_func_o.html | 105 + .../pr-1492/api/latest/functions_func_p.html | 103 + .../pr-1492/api/latest/functions_func_r.html | 131 + .../pr-1492/api/latest/functions_func_s.html | 235 ++ .../pr-1492/api/latest/functions_func_t.html | 120 + .../pr-1492/api/latest/functions_func_u.html | 110 + .../pr-1492/api/latest/functions_func_v.html | 90 + .../pr-1492/api/latest/functions_func_w.html | 90 + .../pr-1492/api/latest/functions_func_x.html | 87 + .../pr-1492/api/latest/functions_func_y.html | 87 + .../pr-1492/api/latest/functions_func_z.html | 87 + .../pr-1492/api/latest/functions_func_~.html | 107 + preview/pr-1492/api/latest/functions_g.html | 283 ++ preview/pr-1492/api/latest/functions_h.html | 91 + preview/pr-1492/api/latest/functions_i.html | 190 + preview/pr-1492/api/latest/functions_j.html | 88 + preview/pr-1492/api/latest/functions_k.html | 188 + preview/pr-1492/api/latest/functions_l.html | 128 + preview/pr-1492/api/latest/functions_m.html | 99 + preview/pr-1492/api/latest/functions_n.html | 91 + preview/pr-1492/api/latest/functions_o.html | 109 + preview/pr-1492/api/latest/functions_p.html | 105 + preview/pr-1492/api/latest/functions_r.html | 133 + .../pr-1492/api/latest/functions_rela.html | 85 + preview/pr-1492/api/latest/functions_s.html | 235 ++ preview/pr-1492/api/latest/functions_t.html | 139 + preview/pr-1492/api/latest/functions_u.html | 111 + preview/pr-1492/api/latest/functions_v.html | 93 + .../pr-1492/api/latest/functions_vars.html | 236 ++ preview/pr-1492/api/latest/functions_w.html | 91 + preview/pr-1492/api/latest/functions_x.html | 87 + preview/pr-1492/api/latest/functions_y.html | 87 + preview/pr-1492/api/latest/functions_z.html | 87 + preview/pr-1492/api/latest/functions_~.html | 107 + .../global__map_2OccupancyGrid_8h_source.html | 171 + .../global__map_2OctoMap_8h_source.html | 322 ++ preview/pr-1492/api/latest/globals.html | 156 + preview/pr-1492/api/latest/globals_defs.html | 90 + preview/pr-1492/api/latest/globals_enum.html | 85 + preview/pr-1492/api/latest/globals_func.html | 149 + preview/pr-1492/api/latest/graph_legend.html | 145 + preview/pr-1492/api/latest/graph_legend.md5 | 1 + preview/pr-1492/api/latest/graph_legend.png | Bin 0 -> 23370 bytes .../group__ComputeNormalsComplexity.html | 131 + ...up__ComputeVarianceAndCorrespondences.html | 132 + .../pr-1492/api/latest/group__CropBox.html | 167 + .../api/latest/group__ExtractClusters.html | 147 + .../api/latest/group__ExtractIndices.html | 154 + .../api/latest/group__FrustumFiltering.html | 135 + .../group__LaserScan2dFromPointCloud.html | 140 + .../group__LaserScanFromPointCloud.html | 239 ++ .../latest/group__LaserScanToPointCloud.html | 138 + .../api/latest/group__PassThrough.html | 163 + .../latest/group__PointCloudDownSampling.html | 145 + .../group__PointCloudRangeFiltering.html | 130 + .../group__PointCloudSplitRangeFiltering.html | 124 + .../latest/group__PointNormalFiltering.html | 146 + .../group__ProportionalRadiusFiltering.html | 166 + .../api/latest/group__RadiusFiltering.html | 157 + .../api/latest/group__RandomSampling.html | 135 + .../group__RemoveNaNFromPointCloud.html | 121 + ...group__RemoveNaNNormalsFromPointCloud.html | 116 + .../api/latest/group__RoiComputation.html | 273 ++ .../api/latest/group__SubtractFiltering.html | 149 + .../api/latest/group__TransformPoint.html | 139 + .../latest/group__TransformPointcloud.html | 157 + .../pr-1492/api/latest/group__UtiLite.html | 233 ++ .../api/latest/group__VoxelFiltering.html | 164 + preview/pr-1492/api/latest/hierarchy.html | 277 ++ preview/pr-1492/api/latest/index.html | 85 + .../pr-1492/api/latest/inherit_graph_0.map | 3 + .../pr-1492/api/latest/inherit_graph_0.md5 | 1 + .../pr-1492/api/latest/inherit_graph_0.png | Bin 0 -> 3234 bytes .../pr-1492/api/latest/inherit_graph_1.map | 3 + .../pr-1492/api/latest/inherit_graph_1.md5 | 1 + .../pr-1492/api/latest/inherit_graph_1.png | Bin 0 -> 1833 bytes .../pr-1492/api/latest/inherit_graph_10.map | 39 + .../pr-1492/api/latest/inherit_graph_10.md5 | 1 + .../pr-1492/api/latest/inherit_graph_10.png | Bin 0 -> 65937 bytes .../pr-1492/api/latest/inherit_graph_11.map | 3 + .../pr-1492/api/latest/inherit_graph_11.md5 | 1 + .../pr-1492/api/latest/inherit_graph_11.png | Bin 0 -> 1966 bytes .../pr-1492/api/latest/inherit_graph_12.map | 3 + .../pr-1492/api/latest/inherit_graph_12.md5 | 1 + .../pr-1492/api/latest/inherit_graph_12.png | Bin 0 -> 1965 bytes .../pr-1492/api/latest/inherit_graph_13.map | 3 + .../pr-1492/api/latest/inherit_graph_13.md5 | 1 + .../pr-1492/api/latest/inherit_graph_13.png | Bin 0 -> 2427 bytes .../pr-1492/api/latest/inherit_graph_14.map | 3 + .../pr-1492/api/latest/inherit_graph_14.md5 | 1 + .../pr-1492/api/latest/inherit_graph_14.png | Bin 0 -> 2652 bytes .../pr-1492/api/latest/inherit_graph_15.map | 3 + .../pr-1492/api/latest/inherit_graph_15.md5 | 1 + .../pr-1492/api/latest/inherit_graph_15.png | Bin 0 -> 2544 bytes .../pr-1492/api/latest/inherit_graph_16.map | 3 + .../pr-1492/api/latest/inherit_graph_16.md5 | 1 + .../pr-1492/api/latest/inherit_graph_16.png | Bin 0 -> 3419 bytes .../pr-1492/api/latest/inherit_graph_17.map | 11 + .../pr-1492/api/latest/inherit_graph_17.md5 | 1 + .../pr-1492/api/latest/inherit_graph_17.png | Bin 0 -> 14158 bytes .../pr-1492/api/latest/inherit_graph_18.map | 3 + .../pr-1492/api/latest/inherit_graph_18.md5 | 1 + .../pr-1492/api/latest/inherit_graph_18.png | Bin 0 -> 1763 bytes .../pr-1492/api/latest/inherit_graph_19.map | 3 + .../pr-1492/api/latest/inherit_graph_19.md5 | 1 + .../pr-1492/api/latest/inherit_graph_19.png | Bin 0 -> 2779 bytes .../pr-1492/api/latest/inherit_graph_2.map | 3 + .../pr-1492/api/latest/inherit_graph_2.md5 | 1 + .../pr-1492/api/latest/inherit_graph_2.png | Bin 0 -> 2056 bytes .../pr-1492/api/latest/inherit_graph_20.map | 3 + .../pr-1492/api/latest/inherit_graph_20.md5 | 1 + .../pr-1492/api/latest/inherit_graph_20.png | Bin 0 -> 1461 bytes .../pr-1492/api/latest/inherit_graph_21.map | 3 + .../pr-1492/api/latest/inherit_graph_21.md5 | 1 + .../pr-1492/api/latest/inherit_graph_21.png | Bin 0 -> 1875 bytes .../pr-1492/api/latest/inherit_graph_22.map | 3 + .../pr-1492/api/latest/inherit_graph_22.md5 | 1 + .../pr-1492/api/latest/inherit_graph_22.png | Bin 0 -> 1657 bytes .../pr-1492/api/latest/inherit_graph_23.map | 3 + .../pr-1492/api/latest/inherit_graph_23.md5 | 1 + .../pr-1492/api/latest/inherit_graph_23.png | Bin 0 -> 2056 bytes .../pr-1492/api/latest/inherit_graph_24.map | 3 + .../pr-1492/api/latest/inherit_graph_24.md5 | 1 + .../pr-1492/api/latest/inherit_graph_24.png | Bin 0 -> 1455 bytes .../pr-1492/api/latest/inherit_graph_25.map | 3 + .../pr-1492/api/latest/inherit_graph_25.md5 | 1 + .../pr-1492/api/latest/inherit_graph_25.png | Bin 0 -> 2054 bytes .../pr-1492/api/latest/inherit_graph_26.map | 3 + .../pr-1492/api/latest/inherit_graph_26.md5 | 1 + .../pr-1492/api/latest/inherit_graph_26.png | Bin 0 -> 2609 bytes .../pr-1492/api/latest/inherit_graph_27.map | 3 + .../pr-1492/api/latest/inherit_graph_27.md5 | 1 + .../pr-1492/api/latest/inherit_graph_27.png | Bin 0 -> 2654 bytes .../pr-1492/api/latest/inherit_graph_28.map | 3 + .../pr-1492/api/latest/inherit_graph_28.md5 | 1 + .../pr-1492/api/latest/inherit_graph_28.png | Bin 0 -> 2387 bytes .../pr-1492/api/latest/inherit_graph_29.map | 3 + .../pr-1492/api/latest/inherit_graph_29.md5 | 1 + .../pr-1492/api/latest/inherit_graph_29.png | Bin 0 -> 2126 bytes .../pr-1492/api/latest/inherit_graph_3.map | 3 + .../pr-1492/api/latest/inherit_graph_3.md5 | 1 + .../pr-1492/api/latest/inherit_graph_3.png | Bin 0 -> 2245 bytes .../pr-1492/api/latest/inherit_graph_30.map | 3 + .../pr-1492/api/latest/inherit_graph_30.md5 | 1 + .../pr-1492/api/latest/inherit_graph_30.png | Bin 0 -> 1920 bytes .../pr-1492/api/latest/inherit_graph_31.map | 37 + .../pr-1492/api/latest/inherit_graph_31.md5 | 1 + .../pr-1492/api/latest/inherit_graph_31.png | Bin 0 -> 93180 bytes .../pr-1492/api/latest/inherit_graph_32.map | 3 + .../pr-1492/api/latest/inherit_graph_32.md5 | 1 + .../pr-1492/api/latest/inherit_graph_32.png | Bin 0 -> 2451 bytes .../pr-1492/api/latest/inherit_graph_33.map | 13 + .../pr-1492/api/latest/inherit_graph_33.md5 | 1 + .../pr-1492/api/latest/inherit_graph_33.png | Bin 0 -> 20161 bytes .../pr-1492/api/latest/inherit_graph_34.map | 3 + .../pr-1492/api/latest/inherit_graph_34.md5 | 1 + .../pr-1492/api/latest/inherit_graph_34.png | Bin 0 -> 1802 bytes .../pr-1492/api/latest/inherit_graph_35.map | 3 + .../pr-1492/api/latest/inherit_graph_35.md5 | 1 + .../pr-1492/api/latest/inherit_graph_35.png | Bin 0 -> 1913 bytes .../pr-1492/api/latest/inherit_graph_36.map | 3 + .../pr-1492/api/latest/inherit_graph_36.md5 | 1 + .../pr-1492/api/latest/inherit_graph_36.png | Bin 0 -> 2518 bytes .../pr-1492/api/latest/inherit_graph_37.map | 3 + .../pr-1492/api/latest/inherit_graph_37.md5 | 1 + .../pr-1492/api/latest/inherit_graph_37.png | Bin 0 -> 2351 bytes .../pr-1492/api/latest/inherit_graph_38.map | 3 + .../pr-1492/api/latest/inherit_graph_38.md5 | 1 + .../pr-1492/api/latest/inherit_graph_38.png | Bin 0 -> 2420 bytes .../pr-1492/api/latest/inherit_graph_39.map | 3 + .../pr-1492/api/latest/inherit_graph_39.md5 | 1 + .../pr-1492/api/latest/inherit_graph_39.png | Bin 0 -> 2375 bytes .../pr-1492/api/latest/inherit_graph_4.map | 5 + .../pr-1492/api/latest/inherit_graph_4.md5 | 1 + .../pr-1492/api/latest/inherit_graph_4.png | Bin 0 -> 5924 bytes .../pr-1492/api/latest/inherit_graph_40.map | 7 + .../pr-1492/api/latest/inherit_graph_40.md5 | 1 + .../pr-1492/api/latest/inherit_graph_40.png | Bin 0 -> 8644 bytes .../pr-1492/api/latest/inherit_graph_41.map | 3 + .../pr-1492/api/latest/inherit_graph_41.md5 | 1 + .../pr-1492/api/latest/inherit_graph_41.png | Bin 0 -> 2555 bytes .../pr-1492/api/latest/inherit_graph_42.map | 3 + .../pr-1492/api/latest/inherit_graph_42.md5 | 1 + .../pr-1492/api/latest/inherit_graph_42.png | Bin 0 -> 1355 bytes .../pr-1492/api/latest/inherit_graph_43.map | 3 + .../pr-1492/api/latest/inherit_graph_43.md5 | 1 + .../pr-1492/api/latest/inherit_graph_43.png | Bin 0 -> 4261 bytes .../pr-1492/api/latest/inherit_graph_44.map | 3 + .../pr-1492/api/latest/inherit_graph_44.md5 | 1 + .../pr-1492/api/latest/inherit_graph_44.png | Bin 0 -> 2423 bytes .../pr-1492/api/latest/inherit_graph_45.map | 59 + .../pr-1492/api/latest/inherit_graph_45.md5 | 1 + .../pr-1492/api/latest/inherit_graph_45.png | Bin 0 -> 140734 bytes .../pr-1492/api/latest/inherit_graph_46.map | 3 + .../pr-1492/api/latest/inherit_graph_46.md5 | 1 + .../pr-1492/api/latest/inherit_graph_46.png | Bin 0 -> 2630 bytes .../pr-1492/api/latest/inherit_graph_47.map | 3 + .../pr-1492/api/latest/inherit_graph_47.md5 | 1 + .../pr-1492/api/latest/inherit_graph_47.png | Bin 0 -> 2240 bytes .../pr-1492/api/latest/inherit_graph_48.map | 3 + .../pr-1492/api/latest/inherit_graph_48.md5 | 1 + .../pr-1492/api/latest/inherit_graph_48.png | Bin 0 -> 2054 bytes .../pr-1492/api/latest/inherit_graph_49.map | 3 + .../pr-1492/api/latest/inherit_graph_49.md5 | 1 + .../pr-1492/api/latest/inherit_graph_49.png | Bin 0 -> 1791 bytes .../pr-1492/api/latest/inherit_graph_5.map | 5 + .../pr-1492/api/latest/inherit_graph_5.md5 | 1 + .../pr-1492/api/latest/inherit_graph_5.png | Bin 0 -> 5726 bytes .../pr-1492/api/latest/inherit_graph_50.map | 5 + .../pr-1492/api/latest/inherit_graph_50.md5 | 1 + .../pr-1492/api/latest/inherit_graph_50.png | Bin 0 -> 4678 bytes .../pr-1492/api/latest/inherit_graph_51.map | 3 + .../pr-1492/api/latest/inherit_graph_51.md5 | 1 + .../pr-1492/api/latest/inherit_graph_51.png | Bin 0 -> 2605 bytes .../pr-1492/api/latest/inherit_graph_52.map | 7 + .../pr-1492/api/latest/inherit_graph_52.md5 | 1 + .../pr-1492/api/latest/inherit_graph_52.png | Bin 0 -> 8155 bytes .../pr-1492/api/latest/inherit_graph_53.map | 3 + .../pr-1492/api/latest/inherit_graph_53.md5 | 1 + .../pr-1492/api/latest/inherit_graph_53.png | Bin 0 -> 1844 bytes .../pr-1492/api/latest/inherit_graph_54.map | 3 + .../pr-1492/api/latest/inherit_graph_54.md5 | 1 + .../pr-1492/api/latest/inherit_graph_54.png | Bin 0 -> 2527 bytes .../pr-1492/api/latest/inherit_graph_55.map | 3 + .../pr-1492/api/latest/inherit_graph_55.md5 | 1 + .../pr-1492/api/latest/inherit_graph_55.png | Bin 0 -> 2385 bytes .../pr-1492/api/latest/inherit_graph_56.map | 3 + .../pr-1492/api/latest/inherit_graph_56.md5 | 1 + .../pr-1492/api/latest/inherit_graph_56.png | Bin 0 -> 2576 bytes .../pr-1492/api/latest/inherit_graph_57.map | 5 + .../pr-1492/api/latest/inherit_graph_57.md5 | 1 + .../pr-1492/api/latest/inherit_graph_57.png | Bin 0 -> 3722 bytes .../pr-1492/api/latest/inherit_graph_58.map | 3 + .../pr-1492/api/latest/inherit_graph_58.md5 | 1 + .../pr-1492/api/latest/inherit_graph_58.png | Bin 0 -> 2196 bytes .../pr-1492/api/latest/inherit_graph_59.map | 3 + .../pr-1492/api/latest/inherit_graph_59.md5 | 1 + .../pr-1492/api/latest/inherit_graph_59.png | Bin 0 -> 3128 bytes .../pr-1492/api/latest/inherit_graph_6.map | 3 + .../pr-1492/api/latest/inherit_graph_6.md5 | 1 + .../pr-1492/api/latest/inherit_graph_6.png | Bin 0 -> 2107 bytes .../pr-1492/api/latest/inherit_graph_60.map | 3 + .../pr-1492/api/latest/inherit_graph_60.md5 | 1 + .../pr-1492/api/latest/inherit_graph_60.png | Bin 0 -> 2397 bytes .../pr-1492/api/latest/inherit_graph_61.map | 3 + .../pr-1492/api/latest/inherit_graph_61.md5 | 1 + .../pr-1492/api/latest/inherit_graph_61.png | Bin 0 -> 1616 bytes .../pr-1492/api/latest/inherit_graph_62.map | 33 + .../pr-1492/api/latest/inherit_graph_62.md5 | 1 + .../pr-1492/api/latest/inherit_graph_62.png | Bin 0 -> 67576 bytes .../pr-1492/api/latest/inherit_graph_63.map | 32 + .../pr-1492/api/latest/inherit_graph_63.md5 | 1 + .../pr-1492/api/latest/inherit_graph_63.png | Bin 0 -> 51271 bytes .../pr-1492/api/latest/inherit_graph_64.map | 3 + .../pr-1492/api/latest/inherit_graph_64.md5 | 1 + .../pr-1492/api/latest/inherit_graph_64.png | Bin 0 -> 786 bytes .../pr-1492/api/latest/inherit_graph_65.map | 3 + .../pr-1492/api/latest/inherit_graph_65.md5 | 1 + .../pr-1492/api/latest/inherit_graph_65.png | Bin 0 -> 1228 bytes .../pr-1492/api/latest/inherit_graph_66.map | 3 + .../pr-1492/api/latest/inherit_graph_66.md5 | 1 + .../pr-1492/api/latest/inherit_graph_66.png | Bin 0 -> 1245 bytes .../pr-1492/api/latest/inherit_graph_67.map | 3 + .../pr-1492/api/latest/inherit_graph_67.md5 | 1 + .../pr-1492/api/latest/inherit_graph_67.png | Bin 0 -> 1593 bytes .../pr-1492/api/latest/inherit_graph_68.map | 3 + .../pr-1492/api/latest/inherit_graph_68.md5 | 1 + .../pr-1492/api/latest/inherit_graph_68.png | Bin 0 -> 1995 bytes .../pr-1492/api/latest/inherit_graph_69.map | 3 + .../pr-1492/api/latest/inherit_graph_69.md5 | 1 + .../pr-1492/api/latest/inherit_graph_69.png | Bin 0 -> 1851 bytes .../pr-1492/api/latest/inherit_graph_7.map | 3 + .../pr-1492/api/latest/inherit_graph_7.md5 | 1 + .../pr-1492/api/latest/inherit_graph_7.png | Bin 0 -> 2200 bytes .../pr-1492/api/latest/inherit_graph_70.map | 3 + .../pr-1492/api/latest/inherit_graph_70.md5 | 1 + .../pr-1492/api/latest/inherit_graph_70.png | Bin 0 -> 2004 bytes .../pr-1492/api/latest/inherit_graph_71.map | 3 + .../pr-1492/api/latest/inherit_graph_71.md5 | 1 + .../pr-1492/api/latest/inherit_graph_71.png | Bin 0 -> 1042 bytes .../pr-1492/api/latest/inherit_graph_72.map | 3 + .../pr-1492/api/latest/inherit_graph_72.md5 | 1 + .../pr-1492/api/latest/inherit_graph_72.png | Bin 0 -> 1083 bytes .../pr-1492/api/latest/inherit_graph_8.map | 3 + .../pr-1492/api/latest/inherit_graph_8.md5 | 1 + .../pr-1492/api/latest/inherit_graph_8.png | Bin 0 -> 2296 bytes .../pr-1492/api/latest/inherit_graph_9.map | 3 + .../pr-1492/api/latest/inherit_graph_9.md5 | 1 + .../pr-1492/api/latest/inherit_graph_9.png | Bin 0 -> 2346 bytes preview/pr-1492/api/latest/inherits.html | 673 +++ preview/pr-1492/api/latest/jquery.js | 34 + preview/pr-1492/api/latest/menu.js | 136 + preview/pr-1492/api/latest/menudata.js | 157 + preview/pr-1492/api/latest/minus.svg | 8 + preview/pr-1492/api/latest/minusd.svg | 8 + .../pr-1492/api/latest/namespacegraph.html | 98 + .../pr-1492/api/latest/namespacemembers.html | 181 + .../api/latest/namespacemembers_func.html | 172 + .../api/latest/namespacemembers_type.html | 86 + .../api/latest/namespacemembers_vars.html | 87 + .../pr-1492/api/latest/namespacertabmap.html | 1412 +++++++ .../latest/namespacertabmap_1_1util2d.html | 1724 ++++++++ preview/pr-1492/api/latest/namespaces.html | 240 ++ preview/pr-1492/api/latest/nav_f.png | Bin 0 -> 153 bytes preview/pr-1492/api/latest/nav_fd.png | Bin 0 -> 169 bytes preview/pr-1492/api/latest/nav_g.png | Bin 0 -> 95 bytes preview/pr-1492/api/latest/nav_h.png | Bin 0 -> 98 bytes preview/pr-1492/api/latest/nav_hd.png | Bin 0 -> 114 bytes preview/pr-1492/api/latest/open.png | Bin 0 -> 123 bytes preview/pr-1492/api/latest/pages.html | 91 + preview/pr-1492/api/latest/plus.svg | 9 + preview/pr-1492/api/latest/plusd.svg | 9 + .../rtabmap__core__export_8h_source.html | 137 + .../api/latest/rvl__codec_8h_source.html | 135 + preview/pr-1492/api/latest/search/all_0.js | 4 + preview/pr-1492/api/latest/search/all_1.js | 4 + preview/pr-1492/api/latest/search/all_10.js | 20 + preview/pr-1492/api/latest/search/all_11.js | 13 + preview/pr-1492/api/latest/search/all_12.js | 68 + preview/pr-1492/api/latest/search/all_13.js | 47 + preview/pr-1492/api/latest/search/all_14.js | 4 + preview/pr-1492/api/latest/search/all_15.js | 78 + preview/pr-1492/api/latest/search/all_16.js | 174 + preview/pr-1492/api/latest/search/all_17.js | 60 + preview/pr-1492/api/latest/search/all_18.js | 126 + preview/pr-1492/api/latest/search/all_19.js | 13 + preview/pr-1492/api/latest/search/all_1a.js | 10 + preview/pr-1492/api/latest/search/all_1b.js | 4 + preview/pr-1492/api/latest/search/all_1c.js | 4 + preview/pr-1492/api/latest/search/all_1d.js | 4 + preview/pr-1492/api/latest/search/all_1e.js | 24 + preview/pr-1492/api/latest/search/all_2.js | 4 + preview/pr-1492/api/latest/search/all_3.js | 8 + preview/pr-1492/api/latest/search/all_4.js | 42 + preview/pr-1492/api/latest/search/all_5.js | 15 + preview/pr-1492/api/latest/search/all_6.js | 117 + preview/pr-1492/api/latest/search/all_7.js | 49 + preview/pr-1492/api/latest/search/all_8.js | 30 + preview/pr-1492/api/latest/search/all_9.js | 43 + preview/pr-1492/api/latest/search/all_a.js | 210 + preview/pr-1492/api/latest/search/all_b.js | 9 + preview/pr-1492/api/latest/search/all_c.js | 111 + preview/pr-1492/api/latest/search/all_d.js | 5 + preview/pr-1492/api/latest/search/all_e.js | 106 + preview/pr-1492/api/latest/search/all_f.js | 54 + .../pr-1492/api/latest/search/classes_0.js | 5 + .../pr-1492/api/latest/search/classes_1.js | 30 + .../pr-1492/api/latest/search/classes_10.js | 5 + .../pr-1492/api/latest/search/classes_2.js | 8 + .../pr-1492/api/latest/search/classes_3.js | 5 + .../pr-1492/api/latest/search/classes_4.js | 10 + .../pr-1492/api/latest/search/classes_5.js | 15 + .../pr-1492/api/latest/search/classes_6.js | 7 + .../pr-1492/api/latest/search/classes_7.js | 4 + .../pr-1492/api/latest/search/classes_8.js | 11 + .../pr-1492/api/latest/search/classes_9.js | 7 + .../pr-1492/api/latest/search/classes_a.js | 35 + .../pr-1492/api/latest/search/classes_b.js | 11 + .../pr-1492/api/latest/search/classes_c.js | 19 + .../pr-1492/api/latest/search/classes_d.js | 23 + .../pr-1492/api/latest/search/classes_e.js | 5 + .../pr-1492/api/latest/search/classes_f.js | 28 + preview/pr-1492/api/latest/search/close.svg | 18 + .../pr-1492/api/latest/search/defines_0.js | 9 + preview/pr-1492/api/latest/search/enums_0.js | 4 + preview/pr-1492/api/latest/search/enums_1.js | 4 + preview/pr-1492/api/latest/search/enums_2.js | 4 + preview/pr-1492/api/latest/search/enums_3.js | 4 + preview/pr-1492/api/latest/search/enums_4.js | 4 + preview/pr-1492/api/latest/search/enums_5.js | 4 + preview/pr-1492/api/latest/search/enums_6.js | 4 + preview/pr-1492/api/latest/search/enums_7.js | 4 + preview/pr-1492/api/latest/search/enums_8.js | 4 + .../pr-1492/api/latest/search/enumvalues_0.js | 95 + preview/pr-1492/api/latest/search/files_0.js | 9 + .../pr-1492/api/latest/search/functions_0.js | 33 + .../pr-1492/api/latest/search/functions_1.js | 8 + .../pr-1492/api/latest/search/functions_10.js | 56 + .../pr-1492/api/latest/search/functions_11.js | 156 + .../pr-1492/api/latest/search/functions_12.js | 39 + .../pr-1492/api/latest/search/functions_13.js | 92 + .../pr-1492/api/latest/search/functions_14.js | 8 + .../pr-1492/api/latest/search/functions_15.js | 7 + .../pr-1492/api/latest/search/functions_16.js | 4 + .../pr-1492/api/latest/search/functions_17.js | 4 + .../pr-1492/api/latest/search/functions_18.js | 4 + .../pr-1492/api/latest/search/functions_19.js | 24 + .../pr-1492/api/latest/search/functions_2.js | 69 + .../pr-1492/api/latest/search/functions_3.js | 41 + .../pr-1492/api/latest/search/functions_4.js | 27 + .../pr-1492/api/latest/search/functions_5.js | 29 + .../pr-1492/api/latest/search/functions_6.js | 199 + .../pr-1492/api/latest/search/functions_7.js | 8 + .../pr-1492/api/latest/search/functions_8.js | 89 + .../pr-1492/api/latest/search/functions_9.js | 5 + .../pr-1492/api/latest/search/functions_a.js | 8 + .../pr-1492/api/latest/search/functions_b.js | 43 + .../pr-1492/api/latest/search/functions_c.js | 13 + .../pr-1492/api/latest/search/functions_d.js | 9 + .../pr-1492/api/latest/search/functions_e.js | 23 + .../pr-1492/api/latest/search/functions_f.js | 22 + preview/pr-1492/api/latest/search/groups_0.js | 4 + preview/pr-1492/api/latest/search/groups_1.js | 4 + .../pr-1492/api/latest/search/groups_10.js | 4 + .../pr-1492/api/latest/search/groups_11.js | 5 + .../pr-1492/api/latest/search/groups_12.js | 4 + preview/pr-1492/api/latest/search/groups_2.js | 7 + preview/pr-1492/api/latest/search/groups_3.js | 4 + preview/pr-1492/api/latest/search/groups_4.js | 16 + preview/pr-1492/api/latest/search/groups_5.js | 4 + preview/pr-1492/api/latest/search/groups_6.js | 4 + preview/pr-1492/api/latest/search/groups_7.js | 7 + preview/pr-1492/api/latest/search/groups_8.js | 5 + preview/pr-1492/api/latest/search/groups_9.js | 5 + preview/pr-1492/api/latest/search/groups_a.js | 6 + preview/pr-1492/api/latest/search/groups_b.js | 7 + preview/pr-1492/api/latest/search/groups_c.js | 18 + preview/pr-1492/api/latest/search/groups_d.js | 9 + preview/pr-1492/api/latest/search/groups_e.js | 8 + preview/pr-1492/api/latest/search/groups_f.js | 10 + preview/pr-1492/api/latest/search/mag.svg | 24 + preview/pr-1492/api/latest/search/mag_d.svg | 24 + preview/pr-1492/api/latest/search/mag_sel.svg | 31 + .../pr-1492/api/latest/search/mag_seld.svg | 31 + .../pr-1492/api/latest/search/namespaces_0.js | 4 + .../pr-1492/api/latest/search/namespaces_1.js | 5 + preview/pr-1492/api/latest/search/pages_0.js | 4 + preview/pr-1492/api/latest/search/pages_1.js | 4 + preview/pr-1492/api/latest/search/pages_2.js | 4 + .../pr-1492/api/latest/search/related_0.js | 4 + preview/pr-1492/api/latest/search/search.css | 291 ++ preview/pr-1492/api/latest/search/search.js | 840 ++++ .../pr-1492/api/latest/search/searchdata.js | 51 + .../pr-1492/api/latest/search/typedefs_0.js | 4 + .../pr-1492/api/latest/search/typedefs_1.js | 4 + .../pr-1492/api/latest/search/variables_0.js | 8 + .../pr-1492/api/latest/search/variables_1.js | 6 + .../pr-1492/api/latest/search/variables_10.js | 4 + .../pr-1492/api/latest/search/variables_11.js | 15 + .../pr-1492/api/latest/search/variables_12.js | 5 + .../pr-1492/api/latest/search/variables_13.js | 4 + .../pr-1492/api/latest/search/variables_2.js | 6 + .../pr-1492/api/latest/search/variables_3.js | 12 + .../pr-1492/api/latest/search/variables_4.js | 5 + .../pr-1492/api/latest/search/variables_5.js | 4 + .../pr-1492/api/latest/search/variables_6.js | 4 + .../pr-1492/api/latest/search/variables_7.js | 4 + .../pr-1492/api/latest/search/variables_8.js | 4 + .../pr-1492/api/latest/search/variables_9.js | 20 + .../pr-1492/api/latest/search/variables_a.js | 8 + .../pr-1492/api/latest/search/variables_b.js | 6 + .../pr-1492/api/latest/search/variables_c.js | 6 + .../pr-1492/api/latest/search/variables_d.js | 7 + .../pr-1492/api/latest/search/variables_e.js | 4 + .../pr-1492/api/latest/search/variables_f.js | 5 + .../latest/slam__calibrator_8h_source.html | 144 + preview/pr-1492/api/latest/splitbar.png | Bin 0 -> 314 bytes preview/pr-1492/api/latest/splitbard.png | Bin 0 -> 282 bytes .../stereoRectifyFisheye_8h_source.html | 1348 ++++++ .../structrtabmap_1_1PointXYZIRT-members.html | 96 + .../latest/structrtabmap_1_1PointXYZIRT.html | 181 + .../structrtabmap_1_1PointXYZIT-members.html | 97 + .../latest/structrtabmap_1_1PointXYZIT.html | 193 + ...ap_1_1graph_1_1MaxGraphErrors-members.html | 98 + ...uctrtabmap_1_1graph_1_1MaxGraphErrors.html | 246 ++ ..._1graph_1_1MaxGraphErrors__coll__graph.map | 5 + ..._1graph_1_1MaxGraphErrors__coll__graph.md5 | 1 + ..._1graph_1_1MaxGraphErrors__coll__graph.png | Bin 0 -> 6450 bytes preview/pr-1492/api/latest/sync_off.png | Bin 0 -> 853 bytes preview/pr-1492/api/latest/sync_on.png | Bin 0 -> 845 bytes preview/pr-1492/api/latest/tab_a.png | Bin 0 -> 142 bytes preview/pr-1492/api/latest/tab_ad.png | Bin 0 -> 135 bytes preview/pr-1492/api/latest/tab_b.png | Bin 0 -> 169 bytes preview/pr-1492/api/latest/tab_bd.png | Bin 0 -> 173 bytes preview/pr-1492/api/latest/tab_h.png | Bin 0 -> 177 bytes preview/pr-1492/api/latest/tab_hd.png | Bin 0 -> 180 bytes preview/pr-1492/api/latest/tab_s.png | Bin 0 -> 184 bytes preview/pr-1492/api/latest/tab_sd.png | Bin 0 -> 188 bytes preview/pr-1492/api/latest/tabs.css | 1 + preview/pr-1492/api/latest/topics.html | 114 + .../api/latest/uResourceGeneratorPage.html | 108 + .../pr-1492/api/latest/util2d_8h_source.html | 322 ++ .../pr-1492/api/latest/util3d_8h_source.html | 503 +++ .../api/latest/util3d_8hpp_source.html | 526 +++ .../util3d__correspondences_8h_source.html | 209 + .../latest/util3d__features_8h_source.html | 193 + .../latest/util3d__filtering_8h_source.html | 945 +++++ .../api/latest/util3d__mapping_8h_source.html | 302 ++ .../latest/util3d__mapping_8hpp_source.html | 465 +++ .../util3d__motion__estimation_8h_source.html | 227 + .../util3d__registration_8h_source.html | 239 ++ .../api/latest/util3d__surface_8h_source.html | 647 +++ .../latest/util3d__surface_8hpp_source.html | 453 ++ .../latest/util3d__transforms_8h_source.html | 219 + .../pr-1492/api/latest/version-switcher.js | 74 + preview/pr-1492/api/versions.js | 17 + preview/pr-1492/assets/css/style.css | 1 + preview/pr-1492/assets/images/bg_hr.png | Bin 0 -> 78 bytes preview/pr-1492/assets/images/blacktocat.png | Bin 0 -> 463 bytes .../pr-1492/assets/images/icon_download.png | Bin 0 -> 216 bytes .../pr-1492/assets/images/sprite_download.png | Bin 0 -> 14832 bytes preview/pr-1492/index.html | 439 ++ preview/pr-1492/index.md | 239 ++ preview/pr-1492/oauth2_redirect.html | 9 + preview/pr-1492/stylesheets/github-light.css | 124 + preview/pr-1492/stylesheets/pygment_trac.css | 70 + preview/pr-1492/stylesheets/stylesheet.css | 425 ++ 1865 files changed, 200386 insertions(+) create mode 100644 .nojekyll create mode 100644 preview/pr-1492/.nojekyll create mode 100644 preview/pr-1492/api/latest/BayesFilter_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraDepthAI_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraEvent_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraFreenect2_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraFreenect_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraImages_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraInfo_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraK4A_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraK4W2_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraModel_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraMyntEye_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraOpenNI2_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraOpenNICV_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraOpenni_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraOrbbecSDK_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraRGBDImages_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraRGBD_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraRGB_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraRealSense2_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraRealSense_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraSeerSense_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraStereoDC1394_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraStereoFlyCapture2_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraStereoImages_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraStereoTara_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraStereoVideo_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraStereoZedOC_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraStereoZed_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraStereo_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraThread_8h_source.html create mode 100644 preview/pr-1492/api/latest/CameraVideo_8h_source.html create mode 100644 preview/pr-1492/api/latest/Camera_8h_source.html create mode 100644 preview/pr-1492/api/latest/CloudMap_8h_source.html create mode 100644 preview/pr-1492/api/latest/Compression_8h_source.html create mode 100644 preview/pr-1492/api/latest/DBDriverSqlite3_8h_source.html create mode 100644 preview/pr-1492/api/latest/DBDriver_8h_source.html create mode 100644 preview/pr-1492/api/latest/DBReader_8h_source.html create mode 100644 preview/pr-1492/api/latest/EnvSensor_8h_source.html create mode 100644 preview/pr-1492/api/latest/EpipolarGeometry_8h_source.html create mode 100644 preview/pr-1492/api/latest/Features2d_8h_source.html create mode 100644 preview/pr-1492/api/latest/FlannIndex_8h_source.html create mode 100644 preview/pr-1492/api/latest/GPS_8h_source.html create mode 100644 preview/pr-1492/api/latest/GainCompensator_8h_source.html create mode 100644 preview/pr-1492/api/latest/GeodeticCoords_8h_source.html create mode 100644 preview/pr-1492/api/latest/GlobalDescriptorExtractor_8h_source.html create mode 100644 preview/pr-1492/api/latest/GlobalDescriptor_8h_source.html create mode 100644 preview/pr-1492/api/latest/GlobalMap_8h_source.html create mode 100644 preview/pr-1492/api/latest/Graph_8h_source.html create mode 100644 preview/pr-1492/api/latest/GridMap_8h_source.html create mode 100644 preview/pr-1492/api/latest/IMUFilter_8h_source.html create mode 100644 preview/pr-1492/api/latest/IMUThread_8h_source.html create mode 100644 preview/pr-1492/api/latest/IMU_8h_source.html create mode 100644 preview/pr-1492/api/latest/Image_8h_source.html create mode 100644 preview/pr-1492/api/latest/LASWriter_8h_source.html create mode 100644 preview/pr-1492/api/latest/Landmark_8h_source.html create mode 100644 preview/pr-1492/api/latest/LaserScan_8h_source.html create mode 100644 preview/pr-1492/api/latest/LidarVLP16_8h_source.html create mode 100644 preview/pr-1492/api/latest/Lidar_8h_source.html create mode 100644 preview/pr-1492/api/latest/Link_8h_source.html create mode 100644 preview/pr-1492/api/latest/LocalGridMaker_8h_source.html create mode 100644 preview/pr-1492/api/latest/LocalGrid_8h_source.html create mode 100644 preview/pr-1492/api/latest/LocalMapMaker_8hpp_source.html create mode 100644 preview/pr-1492/api/latest/MarkerDetector_8h_source.html create mode 100644 preview/pr-1492/api/latest/Memory_8h_source.html create mode 100644 preview/pr-1492/api/latest/OccupancyGrid_8h_source.html create mode 100644 preview/pr-1492/api/latest/OctoMap_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryCuVSLAM_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryDVO_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryEvent_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryF2F_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryF2M_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryFLOAM_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryFovis_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryInfo_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryLIOSAM_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryLOAM_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryMSCKF_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryMono_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryORBSLAM2_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryORBSLAM3_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryOkvis_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryOpen3D_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryOpenVINS_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryThread_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryVINSFusion_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryVINS_8h_source.html create mode 100644 preview/pr-1492/api/latest/OdometryViso2_8h_source.html create mode 100644 preview/pr-1492/api/latest/Odometry_8h_source.html create mode 100644 preview/pr-1492/api/latest/OptimizerCVSBA_8h_source.html create mode 100644 preview/pr-1492/api/latest/OptimizerCeres_8h_source.html create mode 100644 preview/pr-1492/api/latest/OptimizerG2O_8h_source.html create mode 100644 preview/pr-1492/api/latest/OptimizerGTSAM_8h_source.html create mode 100644 preview/pr-1492/api/latest/OptimizerTORO_8h_source.html create mode 100644 preview/pr-1492/api/latest/Optimizer_8h_source.html create mode 100644 preview/pr-1492/api/latest/PDALWriter_8h_source.html create mode 100644 preview/pr-1492/api/latest/ParamEvent_8h_source.html create mode 100644 preview/pr-1492/api/latest/Parameters_8h_source.html create mode 100644 preview/pr-1492/api/latest/ParticleFilter_8h_source.html create mode 100644 preview/pr-1492/api/latest/Posix_2UThreadC_8h_source.html create mode 100644 preview/pr-1492/api/latest/ProgressState_8h_source.html create mode 100644 preview/pr-1492/api/latest/PythonInterface_8h_source.html create mode 100644 preview/pr-1492/api/latest/Recovery_8h_source.html create mode 100644 preview/pr-1492/api/latest/RegistrationIcp_8h_source.html create mode 100644 preview/pr-1492/api/latest/RegistrationInfo_8h_source.html create mode 100644 preview/pr-1492/api/latest/RegistrationVis_8h_source.html create mode 100644 preview/pr-1492/api/latest/Registration_8h_source.html create mode 100644 preview/pr-1492/api/latest/RtabmapEvent_8h_source.html create mode 100644 preview/pr-1492/api/latest/RtabmapThread_8h_source.html create mode 100644 preview/pr-1492/api/latest/Rtabmap_8h_source.html create mode 100644 preview/pr-1492/api/latest/SensorCaptureInfo_8h_source.html create mode 100644 preview/pr-1492/api/latest/SensorCaptureThread_8h_source.html create mode 100644 preview/pr-1492/api/latest/SensorCapture_8h_source.html create mode 100644 preview/pr-1492/api/latest/SensorData_8h_source.html create mode 100644 preview/pr-1492/api/latest/SensorEvent_8h_source.html create mode 100644 preview/pr-1492/api/latest/Signature_8h_source.html create mode 100644 preview/pr-1492/api/latest/Statistics_8h_source.html create mode 100644 preview/pr-1492/api/latest/StereoBM_8h_source.html create mode 100644 preview/pr-1492/api/latest/StereoCameraModel_8h_source.html create mode 100644 preview/pr-1492/api/latest/StereoDense_8h_source.html create mode 100644 preview/pr-1492/api/latest/StereoSGBM_8h_source.html create mode 100644 preview/pr-1492/api/latest/Stereo_8h_source.html create mode 100644 preview/pr-1492/api/latest/Transform_8h_source.html create mode 100644 preview/pr-1492/api/latest/UConversion_8h.html create mode 100644 preview/pr-1492/api/latest/UConversion_8h__dep__incl.map create mode 100644 preview/pr-1492/api/latest/UConversion_8h__dep__incl.md5 create mode 100644 preview/pr-1492/api/latest/UConversion_8h__dep__incl.png create mode 100644 preview/pr-1492/api/latest/UConversion_8h__incl.map create mode 100644 preview/pr-1492/api/latest/UConversion_8h__incl.md5 create mode 100644 preview/pr-1492/api/latest/UConversion_8h__incl.png create mode 100644 preview/pr-1492/api/latest/UConversion_8h_source.html create mode 100644 preview/pr-1492/api/latest/UDestroyer_8h_source.html create mode 100644 preview/pr-1492/api/latest/UDirectory_8h_source.html create mode 100644 preview/pr-1492/api/latest/UEvent_8h_source.html create mode 100644 preview/pr-1492/api/latest/UEventsHandler_8h_source.html create mode 100644 preview/pr-1492/api/latest/UEventsManager_8h_source.html create mode 100644 preview/pr-1492/api/latest/UEventsSender_8h_source.html create mode 100644 preview/pr-1492/api/latest/UException_8h_source.html create mode 100644 preview/pr-1492/api/latest/UFile_8h_source.html create mode 100644 preview/pr-1492/api/latest/ULogger_8h.html create mode 100644 preview/pr-1492/api/latest/ULogger_8h__dep__incl.map create mode 100644 preview/pr-1492/api/latest/ULogger_8h__dep__incl.md5 create mode 100644 preview/pr-1492/api/latest/ULogger_8h__dep__incl.png create mode 100644 preview/pr-1492/api/latest/ULogger_8h__incl.map create mode 100644 preview/pr-1492/api/latest/ULogger_8h__incl.md5 create mode 100644 preview/pr-1492/api/latest/ULogger_8h__incl.png create mode 100644 preview/pr-1492/api/latest/ULogger_8h_source.html create mode 100644 preview/pr-1492/api/latest/UMath_8h.html create mode 100644 preview/pr-1492/api/latest/UMath_8h__dep__incl.map create mode 100644 preview/pr-1492/api/latest/UMath_8h__dep__incl.md5 create mode 100644 preview/pr-1492/api/latest/UMath_8h__dep__incl.png create mode 100644 preview/pr-1492/api/latest/UMath_8h__incl.map create mode 100644 preview/pr-1492/api/latest/UMath_8h__incl.md5 create mode 100644 preview/pr-1492/api/latest/UMath_8h__incl.png create mode 100644 preview/pr-1492/api/latest/UMath_8h_source.html create mode 100644 preview/pr-1492/api/latest/UMutex_8h_source.html create mode 100644 preview/pr-1492/api/latest/UObjDeletionThread_8h_source.html create mode 100644 preview/pr-1492/api/latest/UProcessInfo_8h.html create mode 100644 preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.map create mode 100644 preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.md5 create mode 100644 preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.png create mode 100644 preview/pr-1492/api/latest/UProcessInfo_8h__incl.map create mode 100644 preview/pr-1492/api/latest/UProcessInfo_8h__incl.md5 create mode 100644 preview/pr-1492/api/latest/UProcessInfo_8h__incl.png create mode 100644 preview/pr-1492/api/latest/UProcessInfo_8h_source.html create mode 100644 preview/pr-1492/api/latest/USemaphore_8h_source.html create mode 100644 preview/pr-1492/api/latest/UStl_8h.html create mode 100644 preview/pr-1492/api/latest/UStl_8h__dep__incl.map create mode 100644 preview/pr-1492/api/latest/UStl_8h__dep__incl.md5 create mode 100644 preview/pr-1492/api/latest/UStl_8h__dep__incl.png create mode 100644 preview/pr-1492/api/latest/UStl_8h__incl.map create mode 100644 preview/pr-1492/api/latest/UStl_8h__incl.md5 create mode 100644 preview/pr-1492/api/latest/UStl_8h__incl.png create mode 100644 preview/pr-1492/api/latest/UStl_8h_source.html create mode 100644 preview/pr-1492/api/latest/UThreadC_8h_source.html create mode 100644 preview/pr-1492/api/latest/UThreadNode_8h_source.html create mode 100644 preview/pr-1492/api/latest/UThread_8h_source.html create mode 100644 preview/pr-1492/api/latest/UTimer_8h_source.html create mode 100644 preview/pr-1492/api/latest/UVariant_8h.html create mode 100644 preview/pr-1492/api/latest/UVariant_8h__dep__incl.map create mode 100644 preview/pr-1492/api/latest/UVariant_8h__dep__incl.md5 create mode 100644 preview/pr-1492/api/latest/UVariant_8h__dep__incl.png create mode 100644 preview/pr-1492/api/latest/UVariant_8h__incl.map create mode 100644 preview/pr-1492/api/latest/UVariant_8h__incl.md5 create mode 100644 preview/pr-1492/api/latest/UVariant_8h__incl.png create mode 100644 preview/pr-1492/api/latest/UVariant_8h_source.html create mode 100644 preview/pr-1492/api/latest/UWin32_8h_source.html create mode 100644 preview/pr-1492/api/latest/UserDataEvent_8h_source.html create mode 100644 preview/pr-1492/api/latest/UtiLite_8h_source.html create mode 100644 preview/pr-1492/api/latest/VWDictionary_8h_source.html create mode 100644 preview/pr-1492/api/latest/Version_8h_source.html create mode 100644 preview/pr-1492/api/latest/VisualWord_8h_source.html create mode 100644 preview/pr-1492/api/latest/Win32_2UThreadC_8h_source.html create mode 100644 preview/pr-1492/api/latest/_2home_2runner_2work_2rtabmap_2rtabmap_2corelib_2include_2rtabmap_2core_2util3d_correspondences_8h-example.html create mode 100644 preview/pr-1492/api/latest/_formulas.tex create mode 100644 preview/pr-1492/api/latest/_formulas_dark.tex create mode 100644 preview/pr-1492/api/latest/annotated.html create mode 100644 preview/pr-1492/api/latest/bc_s.png create mode 100644 preview/pr-1492/api/latest/bc_sd.png create mode 100644 preview/pr-1492/api/latest/classUDestroyer-members.html create mode 100644 preview/pr-1492/api/latest/classUDestroyer.html create mode 100644 preview/pr-1492/api/latest/classUDirectory-members.html create mode 100644 preview/pr-1492/api/latest/classUDirectory.html create mode 100644 preview/pr-1492/api/latest/classUEvent-members.html create mode 100644 preview/pr-1492/api/latest/classUEvent.html create mode 100644 preview/pr-1492/api/latest/classUEventDispatcher-members.html create mode 100644 preview/pr-1492/api/latest/classUEventDispatcher.html create mode 100644 preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUEventsHandler-members.html create mode 100644 preview/pr-1492/api/latest/classUEventsHandler.html create mode 100644 preview/pr-1492/api/latest/classUEventsHandler__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classUEventsHandler__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUEventsHandler__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUEventsManager-members.html create mode 100644 preview/pr-1492/api/latest/classUEventsManager.html create mode 100644 preview/pr-1492/api/latest/classUEventsManager__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classUEventsManager__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUEventsManager__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classUEventsManager__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUEventsManager__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUEventsManager__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUEventsSender-members.html create mode 100644 preview/pr-1492/api/latest/classUEventsSender.html create mode 100644 preview/pr-1492/api/latest/classUEventsSender__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUEventsSender__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUEventsSender__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUException-members.html create mode 100644 preview/pr-1492/api/latest/classUException.html create mode 100644 preview/pr-1492/api/latest/classUException__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classUException__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUException__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classUException__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUException__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUException__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUFile-members.html create mode 100644 preview/pr-1492/api/latest/classUFile.html create mode 100644 preview/pr-1492/api/latest/classULogEvent-members.html create mode 100644 preview/pr-1492/api/latest/classULogEvent.html create mode 100644 preview/pr-1492/api/latest/classULogEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classULogEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classULogEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classULogEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classULogEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classULogEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classULogger-members.html create mode 100644 preview/pr-1492/api/latest/classULogger.html create mode 100644 preview/pr-1492/api/latest/classUMutex-members.html create mode 100644 preview/pr-1492/api/latest/classUMutex.html create mode 100644 preview/pr-1492/api/latest/classUObjDeletedEvent-members.html create mode 100644 preview/pr-1492/api/latest/classUObjDeletedEvent.html create mode 100644 preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUObjDeletionThread-members.html create mode 100644 preview/pr-1492/api/latest/classUObjDeletionThread.html create mode 100644 preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUProcessInfo-members.html create mode 100644 preview/pr-1492/api/latest/classUProcessInfo.html create mode 100644 preview/pr-1492/api/latest/classUScopeMutex-members.html create mode 100644 preview/pr-1492/api/latest/classUScopeMutex.html create mode 100644 preview/pr-1492/api/latest/classUSemaphore-members.html create mode 100644 preview/pr-1492/api/latest/classUSemaphore.html create mode 100644 preview/pr-1492/api/latest/classUThread-members.html create mode 100644 preview/pr-1492/api/latest/classUThread.html create mode 100644 preview/pr-1492/api/latest/classUThreadC-members.html create mode 100644 preview/pr-1492/api/latest/classUThreadC.html create mode 100644 preview/pr-1492/api/latest/classUThreadC_3_01void_01_4-members.html create mode 100644 preview/pr-1492/api/latest/classUThreadC_3_01void_01_4.html create mode 100644 preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUThread__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classUThread__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUThread__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classUThread__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classUThread__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classUThread__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classUTimer-members.html create mode 100644 preview/pr-1492/api/latest/classUTimer.html create mode 100644 preview/pr-1492/api/latest/classUVariant-members.html create mode 100644 preview/pr-1492/api/latest/classUVariant.html create mode 100644 preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel-members.html create mode 100644 preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel.html create mode 100644 preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classclams_1_1DiscreteFrustum-members.html create mode 100644 preview/pr-1492/api/latest/classclams_1_1DiscreteFrustum.html create mode 100644 preview/pr-1492/api/latest/classclams_1_1FrameProjector-members.html create mode 100644 preview/pr-1492/api/latest/classclams_1_1FrameProjector.html create mode 100644 preview/pr-1492/api/latest/classclams_1_1ProjectivePoint-members.html create mode 100644 preview/pr-1492/api/latest/classclams_1_1ProjectivePoint.html create mode 100644 preview/pr-1492/api/latest/classes.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BRISK-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BRISK.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BayesFilter-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1BayesFilter.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Camera-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Camera.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraImages-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraImages.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraModel-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraModel.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CloudMap-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CloudMap.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriver-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriver.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBReader-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBReader.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBReader__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBReader__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1DBReader__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1EnvSensor-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1EnvSensor.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1EpipolarGeometry-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1EpipolarGeometry.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Feature2D-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Feature2D.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FeatureBA-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FeatureBA.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FlannIndex-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1FlannIndex.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GFTT__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GPS-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GPS.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GainCompensator-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GainCompensator.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GeodeticCoords-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GeodeticCoords.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptor-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptor.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptorExtractor-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptorExtractor.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GridMap-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GridMap.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMU-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMU.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUFilter-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUFilter.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUThread-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUThread.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1KAZE-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1KAZE.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1KAZE__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1KAZE__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1KAZE__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Landmark-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Landmark.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LaserScan-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LaserScan.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Lidar-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Lidar.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Lidar__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Lidar__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Lidar__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Link-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Link.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LocalGrid-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LocalGrid.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LocalGridCache-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LocalGridCache.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LocalGridMaker-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1LocalGridMaker.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1MarkerDetector-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1MarkerDetector.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1MarkerInfo-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1MarkerInfo.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Memory-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Memory.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORB-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORB.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORB__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORB__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ORB__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OctoMap-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OctoMap.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Odometry-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Odometry.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Odometry__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Odometry__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Odometry__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Optimizer-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Optimizer.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Optimizer__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Optimizer__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Optimizer__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Parameters-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Parameters.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParticleFilter-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ParticleFilter.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ProgressState-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1ProgressState.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1PythonInterface-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1PythonInterface.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Registration-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Registration.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationInfo-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationInfo.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Rtabmap-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Rtabmap.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree_1_1StaticMemberInitializer-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree_1_1StaticMemberInitializer.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RvlCodec-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1RvlCodec.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SIFT-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SIFT.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SIFT__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SIFT__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SIFT__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorData-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorData.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Signature-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Signature.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Statistics-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Statistics.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Stereo-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Stereo.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoBM-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoBM.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoCameraModel-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoCameraModel.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoDense-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoDense.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Transform-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1Transform.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1TransformStamped-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1TransformStamped.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__inherit__graph.map create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__inherit__graph.md5 create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__inherit__graph.png create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1VWDictionary-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1VWDictionary.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1VisualWord-members.html create mode 100644 preview/pr-1492/api/latest/classrtabmap_1_1VisualWord.html create mode 100644 preview/pr-1492/api/latest/closed.png create mode 100644 preview/pr-1492/api/latest/deprecated.html create mode 100644 preview/pr-1492/api/latest/dir_000004_000021.html create mode 100644 preview/pr-1492/api/latest/dir_000008_000021.html create mode 100644 preview/pr-1492/api/latest/dir_000010_000021.html create mode 100644 preview/pr-1492/api/latest/dir_000017_000021.html create mode 100644 preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f.html create mode 100644 preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.map create mode 100644 preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.png create mode 100644 preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16.html create mode 100644 preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.map create mode 100644 preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.png create mode 100644 preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2.html create mode 100644 preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.map create mode 100644 preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.png create mode 100644 preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e.html create mode 100644 preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.map create mode 100644 preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.png create mode 100644 preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121.html create mode 100644 preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.map create mode 100644 preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.png create mode 100644 preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51.html create mode 100644 preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.map create mode 100644 preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.png create mode 100644 preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec.html create mode 100644 preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.map create mode 100644 preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.png create mode 100644 preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441.html create mode 100644 preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.map create mode 100644 preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.png create mode 100644 preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501.html create mode 100644 preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.map create mode 100644 preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.png create mode 100644 preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100.html create mode 100644 preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.map create mode 100644 preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.png create mode 100644 preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822.html create mode 100644 preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.map create mode 100644 preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.png create mode 100644 preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6.html create mode 100644 preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.map create mode 100644 preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.png create mode 100644 preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633.html create mode 100644 preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.map create mode 100644 preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.png create mode 100644 preview/pr-1492/api/latest/dir_7c77c469ef71e5893c1567cf621a9d83.html create mode 100644 preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2.html create mode 100644 preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.map create mode 100644 preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.png create mode 100644 preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140.html create mode 100644 preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.map create mode 100644 preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.png create mode 100644 preview/pr-1492/api/latest/dir_8c6d2b7fb0f1009468191a56b06a1387.html create mode 100644 preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51.html create mode 100644 preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.map create mode 100644 preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.png create mode 100644 preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a.html create mode 100644 preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.map create mode 100644 preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.png create mode 100644 preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab.html create mode 100644 preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.map create mode 100644 preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.png create mode 100644 preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6.html create mode 100644 preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.map create mode 100644 preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.png create mode 100644 preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3.html create mode 100644 preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.map create mode 100644 preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.png create mode 100644 preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691.html create mode 100644 preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.map create mode 100644 preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.png create mode 100644 preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a.html create mode 100644 preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.map create mode 100644 preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.md5 create mode 100644 preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.png create mode 100644 preview/pr-1492/api/latest/discrete__depth__distortion__model_8h_source.html create mode 100644 preview/pr-1492/api/latest/doc.svg create mode 100644 preview/pr-1492/api/latest/docd.svg create mode 100644 preview/pr-1492/api/latest/doxygen.css create mode 100644 preview/pr-1492/api/latest/doxygen.svg create mode 100644 preview/pr-1492/api/latest/dynsections.js create mode 100644 preview/pr-1492/api/latest/examples.html create mode 100644 preview/pr-1492/api/latest/files.html create mode 100644 preview/pr-1492/api/latest/folderclosed.svg create mode 100644 preview/pr-1492/api/latest/folderclosedd.svg create mode 100644 preview/pr-1492/api/latest/folderopen.svg create mode 100644 preview/pr-1492/api/latest/folderopend.svg create mode 100644 preview/pr-1492/api/latest/frame__projector_8h_source.html create mode 100644 preview/pr-1492/api/latest/functions.html create mode 100644 preview/pr-1492/api/latest/functions_a.html create mode 100644 preview/pr-1492/api/latest/functions_b.html create mode 100644 preview/pr-1492/api/latest/functions_c.html create mode 100644 preview/pr-1492/api/latest/functions_d.html create mode 100644 preview/pr-1492/api/latest/functions_e.html create mode 100644 preview/pr-1492/api/latest/functions_enum.html create mode 100644 preview/pr-1492/api/latest/functions_eval.html create mode 100644 preview/pr-1492/api/latest/functions_f.html create mode 100644 preview/pr-1492/api/latest/functions_func.html create mode 100644 preview/pr-1492/api/latest/functions_func_b.html create mode 100644 preview/pr-1492/api/latest/functions_func_c.html create mode 100644 preview/pr-1492/api/latest/functions_func_d.html create mode 100644 preview/pr-1492/api/latest/functions_func_e.html create mode 100644 preview/pr-1492/api/latest/functions_func_f.html create mode 100644 preview/pr-1492/api/latest/functions_func_g.html create mode 100644 preview/pr-1492/api/latest/functions_func_h.html create mode 100644 preview/pr-1492/api/latest/functions_func_i.html create mode 100644 preview/pr-1492/api/latest/functions_func_j.html create mode 100644 preview/pr-1492/api/latest/functions_func_k.html create mode 100644 preview/pr-1492/api/latest/functions_func_l.html create mode 100644 preview/pr-1492/api/latest/functions_func_m.html create mode 100644 preview/pr-1492/api/latest/functions_func_n.html create mode 100644 preview/pr-1492/api/latest/functions_func_o.html create mode 100644 preview/pr-1492/api/latest/functions_func_p.html create mode 100644 preview/pr-1492/api/latest/functions_func_r.html create mode 100644 preview/pr-1492/api/latest/functions_func_s.html create mode 100644 preview/pr-1492/api/latest/functions_func_t.html create mode 100644 preview/pr-1492/api/latest/functions_func_u.html create mode 100644 preview/pr-1492/api/latest/functions_func_v.html create mode 100644 preview/pr-1492/api/latest/functions_func_w.html create mode 100644 preview/pr-1492/api/latest/functions_func_x.html create mode 100644 preview/pr-1492/api/latest/functions_func_y.html create mode 100644 preview/pr-1492/api/latest/functions_func_z.html create mode 100644 preview/pr-1492/api/latest/functions_func_~.html create mode 100644 preview/pr-1492/api/latest/functions_g.html create mode 100644 preview/pr-1492/api/latest/functions_h.html create mode 100644 preview/pr-1492/api/latest/functions_i.html create mode 100644 preview/pr-1492/api/latest/functions_j.html create mode 100644 preview/pr-1492/api/latest/functions_k.html create mode 100644 preview/pr-1492/api/latest/functions_l.html create mode 100644 preview/pr-1492/api/latest/functions_m.html create mode 100644 preview/pr-1492/api/latest/functions_n.html create mode 100644 preview/pr-1492/api/latest/functions_o.html create mode 100644 preview/pr-1492/api/latest/functions_p.html create mode 100644 preview/pr-1492/api/latest/functions_r.html create mode 100644 preview/pr-1492/api/latest/functions_rela.html create mode 100644 preview/pr-1492/api/latest/functions_s.html create mode 100644 preview/pr-1492/api/latest/functions_t.html create mode 100644 preview/pr-1492/api/latest/functions_u.html create mode 100644 preview/pr-1492/api/latest/functions_v.html create mode 100644 preview/pr-1492/api/latest/functions_vars.html create mode 100644 preview/pr-1492/api/latest/functions_w.html create mode 100644 preview/pr-1492/api/latest/functions_x.html create mode 100644 preview/pr-1492/api/latest/functions_y.html create mode 100644 preview/pr-1492/api/latest/functions_z.html create mode 100644 preview/pr-1492/api/latest/functions_~.html create mode 100644 preview/pr-1492/api/latest/global__map_2OccupancyGrid_8h_source.html create mode 100644 preview/pr-1492/api/latest/global__map_2OctoMap_8h_source.html create mode 100644 preview/pr-1492/api/latest/globals.html create mode 100644 preview/pr-1492/api/latest/globals_defs.html create mode 100644 preview/pr-1492/api/latest/globals_enum.html create mode 100644 preview/pr-1492/api/latest/globals_func.html create mode 100644 preview/pr-1492/api/latest/graph_legend.html create mode 100644 preview/pr-1492/api/latest/graph_legend.md5 create mode 100644 preview/pr-1492/api/latest/graph_legend.png create mode 100644 preview/pr-1492/api/latest/group__ComputeNormalsComplexity.html create mode 100644 preview/pr-1492/api/latest/group__ComputeVarianceAndCorrespondences.html create mode 100644 preview/pr-1492/api/latest/group__CropBox.html create mode 100644 preview/pr-1492/api/latest/group__ExtractClusters.html create mode 100644 preview/pr-1492/api/latest/group__ExtractIndices.html create mode 100644 preview/pr-1492/api/latest/group__FrustumFiltering.html create mode 100644 preview/pr-1492/api/latest/group__LaserScan2dFromPointCloud.html create mode 100644 preview/pr-1492/api/latest/group__LaserScanFromPointCloud.html create mode 100644 preview/pr-1492/api/latest/group__LaserScanToPointCloud.html create mode 100644 preview/pr-1492/api/latest/group__PassThrough.html create mode 100644 preview/pr-1492/api/latest/group__PointCloudDownSampling.html create mode 100644 preview/pr-1492/api/latest/group__PointCloudRangeFiltering.html create mode 100644 preview/pr-1492/api/latest/group__PointCloudSplitRangeFiltering.html create mode 100644 preview/pr-1492/api/latest/group__PointNormalFiltering.html create mode 100644 preview/pr-1492/api/latest/group__ProportionalRadiusFiltering.html create mode 100644 preview/pr-1492/api/latest/group__RadiusFiltering.html create mode 100644 preview/pr-1492/api/latest/group__RandomSampling.html create mode 100644 preview/pr-1492/api/latest/group__RemoveNaNFromPointCloud.html create mode 100644 preview/pr-1492/api/latest/group__RemoveNaNNormalsFromPointCloud.html create mode 100644 preview/pr-1492/api/latest/group__RoiComputation.html create mode 100644 preview/pr-1492/api/latest/group__SubtractFiltering.html create mode 100644 preview/pr-1492/api/latest/group__TransformPoint.html create mode 100644 preview/pr-1492/api/latest/group__TransformPointcloud.html create mode 100644 preview/pr-1492/api/latest/group__UtiLite.html create mode 100644 preview/pr-1492/api/latest/group__VoxelFiltering.html create mode 100644 preview/pr-1492/api/latest/hierarchy.html create mode 100644 preview/pr-1492/api/latest/index.html create mode 100644 preview/pr-1492/api/latest/inherit_graph_0.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_0.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_0.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_1.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_1.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_1.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_10.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_10.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_10.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_11.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_11.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_11.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_12.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_12.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_12.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_13.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_13.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_13.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_14.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_14.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_14.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_15.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_15.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_15.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_16.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_16.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_16.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_17.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_17.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_17.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_18.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_18.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_18.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_19.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_19.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_19.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_2.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_2.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_2.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_20.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_20.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_20.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_21.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_21.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_21.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_22.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_22.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_22.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_23.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_23.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_23.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_24.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_24.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_24.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_25.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_25.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_25.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_26.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_26.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_26.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_27.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_27.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_27.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_28.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_28.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_28.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_29.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_29.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_29.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_3.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_3.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_3.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_30.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_30.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_30.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_31.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_31.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_31.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_32.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_32.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_32.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_33.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_33.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_33.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_34.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_34.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_34.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_35.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_35.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_35.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_36.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_36.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_36.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_37.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_37.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_37.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_38.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_38.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_38.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_39.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_39.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_39.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_4.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_4.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_4.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_40.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_40.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_40.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_41.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_41.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_41.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_42.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_42.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_42.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_43.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_43.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_43.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_44.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_44.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_44.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_45.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_45.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_45.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_46.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_46.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_46.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_47.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_47.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_47.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_48.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_48.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_48.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_49.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_49.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_49.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_5.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_5.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_5.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_50.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_50.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_50.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_51.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_51.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_51.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_52.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_52.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_52.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_53.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_53.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_53.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_54.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_54.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_54.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_55.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_55.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_55.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_56.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_56.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_56.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_57.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_57.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_57.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_58.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_58.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_58.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_59.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_59.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_59.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_6.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_6.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_6.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_60.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_60.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_60.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_61.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_61.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_61.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_62.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_62.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_62.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_63.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_63.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_63.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_64.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_64.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_64.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_65.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_65.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_65.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_66.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_66.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_66.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_67.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_67.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_67.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_68.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_68.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_68.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_69.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_69.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_69.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_7.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_7.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_7.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_70.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_70.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_70.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_71.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_71.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_71.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_72.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_72.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_72.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_8.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_8.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_8.png create mode 100644 preview/pr-1492/api/latest/inherit_graph_9.map create mode 100644 preview/pr-1492/api/latest/inherit_graph_9.md5 create mode 100644 preview/pr-1492/api/latest/inherit_graph_9.png create mode 100644 preview/pr-1492/api/latest/inherits.html create mode 100644 preview/pr-1492/api/latest/jquery.js create mode 100644 preview/pr-1492/api/latest/menu.js create mode 100644 preview/pr-1492/api/latest/menudata.js create mode 100644 preview/pr-1492/api/latest/minus.svg create mode 100644 preview/pr-1492/api/latest/minusd.svg create mode 100644 preview/pr-1492/api/latest/namespacegraph.html create mode 100644 preview/pr-1492/api/latest/namespacemembers.html create mode 100644 preview/pr-1492/api/latest/namespacemembers_func.html create mode 100644 preview/pr-1492/api/latest/namespacemembers_type.html create mode 100644 preview/pr-1492/api/latest/namespacemembers_vars.html create mode 100644 preview/pr-1492/api/latest/namespacertabmap.html create mode 100644 preview/pr-1492/api/latest/namespacertabmap_1_1util2d.html create mode 100644 preview/pr-1492/api/latest/namespaces.html create mode 100644 preview/pr-1492/api/latest/nav_f.png create mode 100644 preview/pr-1492/api/latest/nav_fd.png create mode 100644 preview/pr-1492/api/latest/nav_g.png create mode 100644 preview/pr-1492/api/latest/nav_h.png create mode 100644 preview/pr-1492/api/latest/nav_hd.png create mode 100644 preview/pr-1492/api/latest/open.png create mode 100644 preview/pr-1492/api/latest/pages.html create mode 100644 preview/pr-1492/api/latest/plus.svg create mode 100644 preview/pr-1492/api/latest/plusd.svg create mode 100644 preview/pr-1492/api/latest/rtabmap__core__export_8h_source.html create mode 100644 preview/pr-1492/api/latest/rvl__codec_8h_source.html create mode 100644 preview/pr-1492/api/latest/search/all_0.js create mode 100644 preview/pr-1492/api/latest/search/all_1.js create mode 100644 preview/pr-1492/api/latest/search/all_10.js create mode 100644 preview/pr-1492/api/latest/search/all_11.js create mode 100644 preview/pr-1492/api/latest/search/all_12.js create mode 100644 preview/pr-1492/api/latest/search/all_13.js create mode 100644 preview/pr-1492/api/latest/search/all_14.js create mode 100644 preview/pr-1492/api/latest/search/all_15.js create mode 100644 preview/pr-1492/api/latest/search/all_16.js create mode 100644 preview/pr-1492/api/latest/search/all_17.js create mode 100644 preview/pr-1492/api/latest/search/all_18.js create mode 100644 preview/pr-1492/api/latest/search/all_19.js create mode 100644 preview/pr-1492/api/latest/search/all_1a.js create mode 100644 preview/pr-1492/api/latest/search/all_1b.js create mode 100644 preview/pr-1492/api/latest/search/all_1c.js create mode 100644 preview/pr-1492/api/latest/search/all_1d.js create mode 100644 preview/pr-1492/api/latest/search/all_1e.js create mode 100644 preview/pr-1492/api/latest/search/all_2.js create mode 100644 preview/pr-1492/api/latest/search/all_3.js create mode 100644 preview/pr-1492/api/latest/search/all_4.js create mode 100644 preview/pr-1492/api/latest/search/all_5.js create mode 100644 preview/pr-1492/api/latest/search/all_6.js create mode 100644 preview/pr-1492/api/latest/search/all_7.js create mode 100644 preview/pr-1492/api/latest/search/all_8.js create mode 100644 preview/pr-1492/api/latest/search/all_9.js create mode 100644 preview/pr-1492/api/latest/search/all_a.js create mode 100644 preview/pr-1492/api/latest/search/all_b.js create mode 100644 preview/pr-1492/api/latest/search/all_c.js create mode 100644 preview/pr-1492/api/latest/search/all_d.js create mode 100644 preview/pr-1492/api/latest/search/all_e.js create mode 100644 preview/pr-1492/api/latest/search/all_f.js create mode 100644 preview/pr-1492/api/latest/search/classes_0.js create mode 100644 preview/pr-1492/api/latest/search/classes_1.js create mode 100644 preview/pr-1492/api/latest/search/classes_10.js create mode 100644 preview/pr-1492/api/latest/search/classes_2.js create mode 100644 preview/pr-1492/api/latest/search/classes_3.js create mode 100644 preview/pr-1492/api/latest/search/classes_4.js create mode 100644 preview/pr-1492/api/latest/search/classes_5.js create mode 100644 preview/pr-1492/api/latest/search/classes_6.js create mode 100644 preview/pr-1492/api/latest/search/classes_7.js create mode 100644 preview/pr-1492/api/latest/search/classes_8.js create mode 100644 preview/pr-1492/api/latest/search/classes_9.js create mode 100644 preview/pr-1492/api/latest/search/classes_a.js create mode 100644 preview/pr-1492/api/latest/search/classes_b.js create mode 100644 preview/pr-1492/api/latest/search/classes_c.js create mode 100644 preview/pr-1492/api/latest/search/classes_d.js create mode 100644 preview/pr-1492/api/latest/search/classes_e.js create mode 100644 preview/pr-1492/api/latest/search/classes_f.js create mode 100644 preview/pr-1492/api/latest/search/close.svg create mode 100644 preview/pr-1492/api/latest/search/defines_0.js create mode 100644 preview/pr-1492/api/latest/search/enums_0.js create mode 100644 preview/pr-1492/api/latest/search/enums_1.js create mode 100644 preview/pr-1492/api/latest/search/enums_2.js create mode 100644 preview/pr-1492/api/latest/search/enums_3.js create mode 100644 preview/pr-1492/api/latest/search/enums_4.js create mode 100644 preview/pr-1492/api/latest/search/enums_5.js create mode 100644 preview/pr-1492/api/latest/search/enums_6.js create mode 100644 preview/pr-1492/api/latest/search/enums_7.js create mode 100644 preview/pr-1492/api/latest/search/enums_8.js create mode 100644 preview/pr-1492/api/latest/search/enumvalues_0.js create mode 100644 preview/pr-1492/api/latest/search/files_0.js create mode 100644 preview/pr-1492/api/latest/search/functions_0.js create mode 100644 preview/pr-1492/api/latest/search/functions_1.js create mode 100644 preview/pr-1492/api/latest/search/functions_10.js create mode 100644 preview/pr-1492/api/latest/search/functions_11.js create mode 100644 preview/pr-1492/api/latest/search/functions_12.js create mode 100644 preview/pr-1492/api/latest/search/functions_13.js create mode 100644 preview/pr-1492/api/latest/search/functions_14.js create mode 100644 preview/pr-1492/api/latest/search/functions_15.js create mode 100644 preview/pr-1492/api/latest/search/functions_16.js create mode 100644 preview/pr-1492/api/latest/search/functions_17.js create mode 100644 preview/pr-1492/api/latest/search/functions_18.js create mode 100644 preview/pr-1492/api/latest/search/functions_19.js create mode 100644 preview/pr-1492/api/latest/search/functions_2.js create mode 100644 preview/pr-1492/api/latest/search/functions_3.js create mode 100644 preview/pr-1492/api/latest/search/functions_4.js create mode 100644 preview/pr-1492/api/latest/search/functions_5.js create mode 100644 preview/pr-1492/api/latest/search/functions_6.js create mode 100644 preview/pr-1492/api/latest/search/functions_7.js create mode 100644 preview/pr-1492/api/latest/search/functions_8.js create mode 100644 preview/pr-1492/api/latest/search/functions_9.js create mode 100644 preview/pr-1492/api/latest/search/functions_a.js create mode 100644 preview/pr-1492/api/latest/search/functions_b.js create mode 100644 preview/pr-1492/api/latest/search/functions_c.js create mode 100644 preview/pr-1492/api/latest/search/functions_d.js create mode 100644 preview/pr-1492/api/latest/search/functions_e.js create mode 100644 preview/pr-1492/api/latest/search/functions_f.js create mode 100644 preview/pr-1492/api/latest/search/groups_0.js create mode 100644 preview/pr-1492/api/latest/search/groups_1.js create mode 100644 preview/pr-1492/api/latest/search/groups_10.js create mode 100644 preview/pr-1492/api/latest/search/groups_11.js create mode 100644 preview/pr-1492/api/latest/search/groups_12.js create mode 100644 preview/pr-1492/api/latest/search/groups_2.js create mode 100644 preview/pr-1492/api/latest/search/groups_3.js create mode 100644 preview/pr-1492/api/latest/search/groups_4.js create mode 100644 preview/pr-1492/api/latest/search/groups_5.js create mode 100644 preview/pr-1492/api/latest/search/groups_6.js create mode 100644 preview/pr-1492/api/latest/search/groups_7.js create mode 100644 preview/pr-1492/api/latest/search/groups_8.js create mode 100644 preview/pr-1492/api/latest/search/groups_9.js create mode 100644 preview/pr-1492/api/latest/search/groups_a.js create mode 100644 preview/pr-1492/api/latest/search/groups_b.js create mode 100644 preview/pr-1492/api/latest/search/groups_c.js create mode 100644 preview/pr-1492/api/latest/search/groups_d.js create mode 100644 preview/pr-1492/api/latest/search/groups_e.js create mode 100644 preview/pr-1492/api/latest/search/groups_f.js create mode 100644 preview/pr-1492/api/latest/search/mag.svg create mode 100644 preview/pr-1492/api/latest/search/mag_d.svg create mode 100644 preview/pr-1492/api/latest/search/mag_sel.svg create mode 100644 preview/pr-1492/api/latest/search/mag_seld.svg create mode 100644 preview/pr-1492/api/latest/search/namespaces_0.js create mode 100644 preview/pr-1492/api/latest/search/namespaces_1.js create mode 100644 preview/pr-1492/api/latest/search/pages_0.js create mode 100644 preview/pr-1492/api/latest/search/pages_1.js create mode 100644 preview/pr-1492/api/latest/search/pages_2.js create mode 100644 preview/pr-1492/api/latest/search/related_0.js create mode 100644 preview/pr-1492/api/latest/search/search.css create mode 100644 preview/pr-1492/api/latest/search/search.js create mode 100644 preview/pr-1492/api/latest/search/searchdata.js create mode 100644 preview/pr-1492/api/latest/search/typedefs_0.js create mode 100644 preview/pr-1492/api/latest/search/typedefs_1.js create mode 100644 preview/pr-1492/api/latest/search/variables_0.js create mode 100644 preview/pr-1492/api/latest/search/variables_1.js create mode 100644 preview/pr-1492/api/latest/search/variables_10.js create mode 100644 preview/pr-1492/api/latest/search/variables_11.js create mode 100644 preview/pr-1492/api/latest/search/variables_12.js create mode 100644 preview/pr-1492/api/latest/search/variables_13.js create mode 100644 preview/pr-1492/api/latest/search/variables_2.js create mode 100644 preview/pr-1492/api/latest/search/variables_3.js create mode 100644 preview/pr-1492/api/latest/search/variables_4.js create mode 100644 preview/pr-1492/api/latest/search/variables_5.js create mode 100644 preview/pr-1492/api/latest/search/variables_6.js create mode 100644 preview/pr-1492/api/latest/search/variables_7.js create mode 100644 preview/pr-1492/api/latest/search/variables_8.js create mode 100644 preview/pr-1492/api/latest/search/variables_9.js create mode 100644 preview/pr-1492/api/latest/search/variables_a.js create mode 100644 preview/pr-1492/api/latest/search/variables_b.js create mode 100644 preview/pr-1492/api/latest/search/variables_c.js create mode 100644 preview/pr-1492/api/latest/search/variables_d.js create mode 100644 preview/pr-1492/api/latest/search/variables_e.js create mode 100644 preview/pr-1492/api/latest/search/variables_f.js create mode 100644 preview/pr-1492/api/latest/slam__calibrator_8h_source.html create mode 100644 preview/pr-1492/api/latest/splitbar.png create mode 100644 preview/pr-1492/api/latest/splitbard.png create mode 100644 preview/pr-1492/api/latest/stereoRectifyFisheye_8h_source.html create mode 100644 preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIRT-members.html create mode 100644 preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIRT.html create mode 100644 preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIT-members.html create mode 100644 preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIT.html create mode 100644 preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors-members.html create mode 100644 preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors.html create mode 100644 preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.map create mode 100644 preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.md5 create mode 100644 preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.png create mode 100644 preview/pr-1492/api/latest/sync_off.png create mode 100644 preview/pr-1492/api/latest/sync_on.png create mode 100644 preview/pr-1492/api/latest/tab_a.png create mode 100644 preview/pr-1492/api/latest/tab_ad.png create mode 100644 preview/pr-1492/api/latest/tab_b.png create mode 100644 preview/pr-1492/api/latest/tab_bd.png create mode 100644 preview/pr-1492/api/latest/tab_h.png create mode 100644 preview/pr-1492/api/latest/tab_hd.png create mode 100644 preview/pr-1492/api/latest/tab_s.png create mode 100644 preview/pr-1492/api/latest/tab_sd.png create mode 100644 preview/pr-1492/api/latest/tabs.css create mode 100644 preview/pr-1492/api/latest/topics.html create mode 100644 preview/pr-1492/api/latest/uResourceGeneratorPage.html create mode 100644 preview/pr-1492/api/latest/util2d_8h_source.html create mode 100644 preview/pr-1492/api/latest/util3d_8h_source.html create mode 100644 preview/pr-1492/api/latest/util3d_8hpp_source.html create mode 100644 preview/pr-1492/api/latest/util3d__correspondences_8h_source.html create mode 100644 preview/pr-1492/api/latest/util3d__features_8h_source.html create mode 100644 preview/pr-1492/api/latest/util3d__filtering_8h_source.html create mode 100644 preview/pr-1492/api/latest/util3d__mapping_8h_source.html create mode 100644 preview/pr-1492/api/latest/util3d__mapping_8hpp_source.html create mode 100644 preview/pr-1492/api/latest/util3d__motion__estimation_8h_source.html create mode 100644 preview/pr-1492/api/latest/util3d__registration_8h_source.html create mode 100644 preview/pr-1492/api/latest/util3d__surface_8h_source.html create mode 100644 preview/pr-1492/api/latest/util3d__surface_8hpp_source.html create mode 100644 preview/pr-1492/api/latest/util3d__transforms_8h_source.html create mode 100644 preview/pr-1492/api/latest/version-switcher.js create mode 100644 preview/pr-1492/api/versions.js create mode 100644 preview/pr-1492/assets/css/style.css create mode 100644 preview/pr-1492/assets/images/bg_hr.png create mode 100644 preview/pr-1492/assets/images/blacktocat.png create mode 100644 preview/pr-1492/assets/images/icon_download.png create mode 100644 preview/pr-1492/assets/images/sprite_download.png create mode 100644 preview/pr-1492/index.html create mode 100644 preview/pr-1492/index.md create mode 100644 preview/pr-1492/oauth2_redirect.html create mode 100644 preview/pr-1492/stylesheets/github-light.css create mode 100644 preview/pr-1492/stylesheets/pygment_trac.css create mode 100644 preview/pr-1492/stylesheets/stylesheet.css diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/preview/pr-1492/.nojekyll b/preview/pr-1492/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/preview/pr-1492/api/latest/BayesFilter_8h_source.html b/preview/pr-1492/api/latest/BayesFilter_8h_source.html new file mode 100644 index 00000000..b67fc283 --- /dev/null +++ b/preview/pr-1492/api/latest/BayesFilter_8h_source.html @@ -0,0 +1,206 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/BayesFilter.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
BayesFilter.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef BAYESFILTER_H_
+
29#define BAYESFILTER_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <opencv2/core/core.hpp>
+
34#include <list>
+
35#include <set>
+
36#include "rtabmap/utilite/UEventsHandler.h"
+
37#include "rtabmap/core/Parameters.h"
+
38
+
+
39namespace rtabmap {
+
40
+
41class Memory;
+
42class Signature;
+
43
+
+
71class RTABMAP_CORE_EXPORT BayesFilter
+
72{
+
73public:
+
78 BayesFilter(const ParametersMap & parameters = ParametersMap());
+
79 virtual ~BayesFilter();
+
80
+
85 virtual void parseParameters(const ParametersMap & parameters);
+
86
+
99 const std::map<int, float> & computePosterior(const Memory * memory, const std::map<int, float> & likelihood);
+
100
+
104 void reset();
+
105
+
119 void setPredictionLC(const std::string & prediction);
+
120
+
125 const std::map<int, float> & getPosterior() const {return _posterior;}
+
126
+
131 float getVirtualPlacePrior() const {return _virtualPlacePrior;}
+
132
+
137 const std::vector<double> & getPredictionLC() const;
+
138
+
143 std::string getPredictionLCStr() const;
+
144
+
156 cv::Mat generatePrediction(const Memory * memory, const std::vector<int> & ids);
+
157
+
162 unsigned long getMemoryUsed() const;
+
163
+
164private:
+
168 cv::Mat updatePrediction(const cv::Mat & oldPrediction,
+
169 const Memory * memory,
+
170 const std::vector<int> & oldIds,
+
171 const std::vector<int> & newIds);
+
172
+
176 void updatePosterior(const Memory * memory, const std::vector<int> & likelihoodIds);
+
177
+
181 void normalize(cv::Mat & prediction, unsigned int index, float addedProbabilitiesSum, bool virtualPlaceUsed) const;
+
182
+
183private:
+
184 std::map<int, float> _posterior;
+
185 cv::Mat _prediction;
+
186 float _virtualPlacePrior;
+
187 std::vector<double> _predictionLC;
+
188 bool _fullPredictionUpdate;
+
189 float _totalPredictionLCValues;
+
190 float _predictionEpsilon;
+
191 std::map<int, std::map<int, int> > _neighborsIndex;
+
192};
+
+
193
+
194} // namespace rtabmap
+
+
195
+
196#endif /* BAYESFILTER_H_ */
+
Recursive Bayesian filter for loop-closure hypothesis estimation in RTAB-Map.
Definition BayesFilter.h:72
+
std::string getPredictionLCStr() const
Returns the loop-closure prediction model as a space-separated string.
+
float getVirtualPlacePrior() const
Returns the virtual place prior threshold.
+
BayesFilter(const ParametersMap &parameters=ParametersMap())
Constructs a Bayes filter with default or custom parameters.
+
void setPredictionLC(const std::string &prediction)
Sets the loop-closure prediction model from a space-separated string.
+
cv::Mat generatePrediction(const Memory *memory, const std::vector< int > &ids)
Builds or updates the prediction (transition) matrix for the given signature ids.
+
unsigned long getMemoryUsed() const
Estimates memory usage of this object and its internal containers.
+
virtual void parseParameters(const ParametersMap &parameters)
Updates internal settings from the parameter map.
+
const std::map< int, float > & computePosterior(const Memory *memory, const std::map< int, float > &likelihood)
Runs one Bayes filter iteration (prediction + update).
+
const std::vector< double > & getPredictionLC() const
Returns the loop-closure prediction model as a vector of values.
+
const std::map< int, float > & getPosterior() const
Returns the current posterior probability map.
+
void reset()
Clears posterior, prediction matrix and cached neighbor indices.
+
Three-tiered memory management (STM, WM, LTM) for RTAB-Map.
Definition Memory.h:102
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraDepthAI_8h_source.html b/preview/pr-1492/api/latest/CameraDepthAI_8h_source.html new file mode 100644 index 00000000..7084ee8e --- /dev/null +++ b/preview/pr-1492/api/latest/CameraDepthAI_8h_source.html @@ -0,0 +1,222 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraDepthAI.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraDepthAI.h
+
+
+
1/*
+
2Copyright (c) 2010-2021, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/StereoCameraModel.h"
+
31#include "rtabmap/core/Camera.h"
+
32#include "rtabmap/core/Version.h"
+
33
+
34#ifdef RTABMAP_DEPTHAI
+
35#ifndef DEPTHAI_OPENCV_SUPPORT
+
36#define DEPTHAI_OPENCV_SUPPORT
+
37#endif
+
38#include <depthai/depthai.hpp>
+
39#endif
+
40
+
41namespace rtabmap
+
42{
+
43
+
+
44class RTABMAP_CORE_EXPORT CameraDepthAI :
+
45 public Camera
+
46{
+
47public:
+
48 static bool available();
+
49
+
50public:
+ +
52 const std::string & mxidOrName = "",
+
53 int imageWidth = 1280, // 640 or 1280
+
54 float imageRate = 0.0f,
+
55 const Transform & localTransform = Transform::getIdentity());
+
56 virtual ~CameraDepthAI();
+
57
+
58 void setOutputMode(int outputMode = 0);
+
59 void setDepthProfile(int confThreshold = 200, int lrcThreshold = 5);
+
60 void setExtendedDisparity(bool extendedDisparity = false, bool enableCompanding = false);
+
61 void setSubpixelMode(bool enabled = false, int fractionalBits = 3);
+
62 void setDisparityWidthAndFilter(int disparityWidth = 96, int medianFilter = 5);
+
63 void setRectification(bool useSpecTranslation = false, float alphaScaling = 0.0f, bool enabled = true);
+
64 void setIMU(bool imuPublished, bool publishInterIMU);
+
65 void setIrIntensity(float dotIntensity = 0.0f, float floodIntensity = 0.0f);
+
66 void setDetectFeatures(int detectFeatures = 0, const std::string & blobPath = "");
+
67 void setGFTTDetector(bool useHarrisDetector = false, float minDistance = 7.0f, int numTargetFeatures = 1000);
+
68 void setSuperPointDetector(float threshold = 0.01f, bool nms = true, int nmsRadius = 4);
+
69
+
70 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
71 virtual bool isCalibrated() const;
+
72 virtual std::string getSerial() const;
+
73
+
74protected:
+
75 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
76
+
77private:
+
78#ifdef RTABMAP_DEPTHAI
+
79 StereoCameraModel stereoModel_;
+
80 cv::Size targetSize_;
+
81 Transform imuLocalTransform_;
+
82 std::string mxidOrName_;
+
83 int outputMode_;
+
84 int confThreshold_;
+
85 int lrcThreshold_;
+
86 int imageWidth_;
+
87 bool extendedDisparity_;
+
88 bool enableCompanding_;
+
89 int subpixelFractionalBits_;
+
90 int disparityWidth_;
+
91 int medianFilter_;
+
92 bool useSpecTranslation_;
+
93 float alphaScaling_;
+
94 bool imagesRectified_;
+
95 bool imuPublished_;
+
96 bool publishInterIMU_;
+
97 float dotIntensity_;
+
98 float floodIntensity_;
+
99 int detectFeatures_;
+
100 bool useHarrisDetector_;
+
101 float minDistance_;
+
102 int numTargetFeatures_;
+
103 float threshold_;
+
104 bool nms_;
+
105 int nmsRadius_;
+
106 std::string blobPath_;
+
107 std::unique_ptr<dai::Device> device_;
+
108 std::shared_ptr<dai::DataOutputQueue> cameraQueue_;
+
109 std::map<double, cv::Vec3f> accBuffer_;
+
110 std::map<double, cv::Vec3f> gyroBuffer_;
+
111 UMutex imuMutex_;
+
112#endif
+
113};
+
+
114
+
115
+
116} // namespace rtabmap
+ + +
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraEvent_8h_source.html b/preview/pr-1492/api/latest/CameraEvent_8h_source.html new file mode 100644 index 00000000..2f267829 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraEvent_8h_source.html @@ -0,0 +1,124 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/CameraEvent.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraEvent.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/SensorEvent.h"
+
+ + + + diff --git a/preview/pr-1492/api/latest/CameraFreenect2_8h_source.html b/preview/pr-1492/api/latest/CameraFreenect2_8h_source.html new file mode 100644 index 00000000..206a2fee --- /dev/null +++ b/preview/pr-1492/api/latest/CameraFreenect2_8h_source.html @@ -0,0 +1,206 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraFreenect2.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraFreenect2.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/StereoCameraModel.h"
+
31#include "rtabmap/core/Camera.h"
+
32#include "rtabmap/core/Version.h"
+
33
+
34namespace libfreenect2
+
35{
+
36class Freenect2;
+
37class Freenect2Device;
+
38class SyncMultiFrameListener;
+
39class Registration;
+
40class PacketPipeline;
+
41}
+
42
+
43namespace rtabmap
+
44{
+
45
+
+
46class RTABMAP_CORE_EXPORT CameraFreenect2 :
+
47 public Camera
+
48{
+
49public:
+
50 static bool available();
+
51
+
52 enum Type{
+
53 kTypeColor2DepthSD,
+
54 kTypeDepth2ColorSD,
+
55 kTypeDepth2ColorHD,
+
56 kTypeDepth2ColorHD2,
+
57 kTypeIRDepth,
+
58 kTypeColorIR
+
59 };
+
60
+
61public:
+
62 // default local transform z in, x right, y down));
+
63 CameraFreenect2(int deviceId= 0,
+
64 Type type = kTypeDepth2ColorSD,
+
65 float imageRate=0.0f,
+
66 const Transform & localTransform = Transform::getIdentity(),
+
67 float minDepth = 0.3f,
+
68 float maxDepth = 12.0f,
+
69 bool bilateralFiltering = true,
+
70 bool edgeAwareFiltering = true,
+
71 bool noiseFiltering = true,
+
72 const std::string & pipelineName = "");
+
73 virtual ~CameraFreenect2();
+
74
+
75 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
76 virtual bool isCalibrated() const;
+
77 virtual std::string getSerial() const;
+
78
+
79protected:
+
80 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
81
+
82private:
+
83#ifdef RTABMAP_FREENECT2
+
84 int deviceId_;
+
85 Type type_;
+
86 StereoCameraModel stereoModel_;
+
87 libfreenect2::Freenect2 * freenect2_;
+
88 libfreenect2::Freenect2Device *dev_;
+
89 libfreenect2::SyncMultiFrameListener * listener_;
+
90 libfreenect2::Registration * reg_;
+
91 float minKinect2Depth_;
+
92 float maxKinect2Depth_;
+
93 bool bilateralFiltering_;
+
94 bool edgeAwareFiltering_;
+
95 bool noiseFiltering_;
+
96 std::string pipelineName_;
+
97#endif
+
98};
+
+
99
+
100
+
101} // namespace rtabmap
+ +
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraFreenect_8h_source.html b/preview/pr-1492/api/latest/CameraFreenect_8h_source.html new file mode 100644 index 00000000..3e2b434e --- /dev/null +++ b/preview/pr-1492/api/latest/CameraFreenect_8h_source.html @@ -0,0 +1,182 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraFreenect.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraFreenect.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
31
+
32#include "rtabmap/core/StereoCameraModel.h"
+
33#include "rtabmap/core/Camera.h"
+
34#include "rtabmap/core/Version.h"
+
35
+
36typedef struct _freenect_context freenect_context;
+
37typedef struct _freenect_device freenect_device;
+
38
+
39namespace rtabmap
+
40{
+
41
+
42class FreenectDevice;
+
43
+
+
44class RTABMAP_CORE_EXPORT CameraFreenect :
+
45 public Camera
+
46{
+
47public:
+
48 static bool available();
+
49 enum Type {kTypeColorDepth, kTypeIRDepth};
+
50
+
51public:
+
52 // default local transform z in, x right, y down));
+
53 CameraFreenect(int deviceId= 0,
+
54 Type type = kTypeColorDepth,
+
55 float imageRate=0.0f,
+
56 const Transform & localTransform = Transform::getIdentity());
+
57 virtual ~CameraFreenect();
+
58
+
59 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
60 virtual bool isCalibrated() const;
+
61 virtual std::string getSerial() const;
+
62
+
63protected:
+
64 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
65
+
66private:
+
67#ifdef RTABMAP_FREENECT
+
68 int deviceId_;
+
69 Type type_;
+
70 freenect_context * ctx_;
+
71 FreenectDevice * freenectDevice_;
+
72 StereoCameraModel stereoModel_;
+
73#endif
+
74};
+
+
75
+
76
+
77} // namespace rtabmap
+ +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraImages_8h_source.html b/preview/pr-1492/api/latest/CameraImages_8h_source.html new file mode 100644 index 00000000..ac4a5766 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraImages_8h_source.html @@ -0,0 +1,339 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraImages.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraImages.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/Camera.h"
+
31#include "rtabmap/utilite/UTimer.h"
+
32#include <list>
+
33
+
34class UDirectory;
+
35
+
36namespace rtabmap
+
37{
+
38
+
+
39class RTABMAP_CORE_EXPORT CameraImages :
+
40 public Camera
+
41{
+
42public:
+ + +
45 const std::string & path,
+
46 float imageRate = 0,
+
47 const Transform & localTransform = Transform::getIdentity());
+
48 virtual ~CameraImages();
+
49
+
50 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
51 virtual bool isCalibrated() const;
+
52 virtual std::string getSerial() const;
+
53 virtual bool odomProvided() const { return odometry_.size() > 0; }
+
54 std::string getPath() const {return _path;}
+
55 unsigned int imagesCount() const;
+
56 std::vector<std::string> filenames() const;
+
57 bool isImagesRectified() const {return _rectifyImages;}
+
58 int getBayerMode() const {return _bayerMode;}
+
59 const CameraModel & cameraModel() const {return _model;}
+
60
+
61 void setPath(const std::string & dir) {_path=dir;}
+
62 virtual void setStartIndex(int index) {_startAt = index;} // negative means last
+
63 virtual void setMaxFrames(int value) {_maxFrames = value;}
+
64 void setDirRefreshed(bool enabled) {_refreshDir = enabled;}
+
65 void setImagesRectified(bool enabled) {_rectifyImages = enabled;}
+
66 void setBayerMode(int mode) {_bayerMode = mode;} // -1=disabled (default) 0=BayerBG, 1=BayerGB, 2=BayerRG, 3=BayerGR
+
67
+
68 void setTimestamps(bool fileNamesAreStamps, const std::string & filePath = "", bool syncImageRateWithStamps=true)
+
69 {
+
70 _filenamesAreTimestamps = fileNamesAreStamps;
+
71 _timestampsPath=filePath;
+
72 _syncImageRateWithStamps = syncImageRateWithStamps;
+
73 }
+
74
+
75 void setConfigForEachFrame(bool value)
+
76 {
+
77 _hasConfigForEachFrame = value;
+
78 }
+
79 bool isConfigForEachFrame() const {return _hasConfigForEachFrame;}
+
80
+
81 // Enable multi-camera mode. Each image in the folder is expected to be the
+
82 // horizontal concatenation of N sub-camera images of a rig, sharing the same
+
83 // base name (timestamp or node id), e.g. "1780687370.031791.jpg" or "1.jpg".
+
84 // One calibration file per sub-camera must exist in the calibrationFolder
+
85 // passed to init(), named "<prefix>_<index>.yaml" with index starting at 0
+
86 // (e.g. "1_0.yaml", "1_1.yaml", ...). The number of cameras is auto-detected.
+
87 // Each sub-image width is taken from the corresponding model's calibrated image
+
88 // size; if a model has no size, a uniform split (stackedWidth / N) is assumed.
+
89 // If setConfigForEachFrame() is enabled, one calibration set is loaded per frame
+
90 // using each image's base name as prefix. Otherwise a single calibration set is
+
91 // loaded and reused for all frames, using the cameraName passed to init() as
+
92 // prefix (it may differ from any image name), falling back to the first image's
+
93 // base name when cameraName is empty.
+
94 // Note that it is not recommended to use setConfigForEachFrame() if images have
+
95 // to be rectified, a rectification matrix would need to be re-initilaized for
+
96 // each frame.
+
97 void setMultiCameraCalibration(bool enabled)
+
98 {
+
99 _multiCameraCalib = enabled;
+
100 }
+
101
+
102 void setScanPath(
+
103 const std::string & dir,
+
104 int maxScanPts = 0,
+
105 const Transform & localTransform=Transform::getIdentity())
+
106 {
+
107 _scanPath = dir;
+
108 _scanLocalTransform = localTransform;
+
109 _scanMaxPts = maxScanPts;
+
110 }
+
111
+
112 void setDepthFromScan(bool enabled, int fillHoles = 1, bool fillHolesFromBorder = false)
+
113 {
+
114 _depthFromScan = enabled;
+
115 _depthFromScanFillHoles = fillHoles;
+
116 _depthFromScanFillHolesFromBorder = fillHolesFromBorder;
+
117 }
+
118
+
119 // 0=Raw, 1=RGBD-SLAM motion capture (10=without change of coordinate frame, 11=10+ID), 2=KITTI, 3=TORO, 4=g2o, 5=NewCollege(t,x,y), 6=Malaga Urban GPS, 7=St Lucia INS, 8=Karlsruhe, 9=EuRoC MAV, 12=rgbd_bonn
+
120 void setOdometryPath(const std::string & filePath, int format = 0)
+
121 {
+
122 _odometryPath = filePath;
+
123 _odometryFormat = format;
+
124 }
+
125
+
126 // 0=Raw, 1=RGBD-SLAM motion capture (10=without change of coordinate frame, 11=10+ID), 2=KITTI, 3=TORO, 4=g2o, 5=NewCollege(t,x,y), 6=Malaga Urban GPS, 7=St Lucia INS, 8=Karlsruhe, 9=EuRoC MAV, 12=rgbd_bonn
+
127 void setGroundTruthPath(const std::string & filePath, int format = 0, const Transform & localTransform = Transform::getIdentity())
+
128 {
+
129 _groundTruthPath = filePath;
+
130 _groundTruthFormat = format;
+
131 _groundTruthLocalTransform = localTransform;
+
132 }
+
133
+
134 void setMaxPoseTimeDiff(double diff) {_maxPoseTimeDiff = diff;}
+
135 double getMaxPoseTimeDiff() const {return _maxPoseTimeDiff;}
+
136
+
137 void setDepth(bool isDepth, float depthScaleFactor = 1.0f)
+
138 {
+
139 _isDepth = isDepth;
+
140 _depthScaleFactor=depthScaleFactor;
+
141 }
+
142
+
143protected:
+
144 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
145
+
146 // File name (with extension, no directory) of the image returned by the last
+
147 // captureImage() call. Used by subclasses (e.g. stereo) to key per-frame
+
148 // calibration loaded on demand. Empty if no image was read.
+
149 const std::string & lastImageFileName() const {return _lastImageFileName;}
+
150
+
151 // Calibration folder passed to init(), kept to load per-frame calibration on
+
152 // demand. Shared with subclasses (e.g. stereo) that load calibration themselves.
+
153 std::string _calibrationFolder;
+
154
+
155 // Multi-camera mode state, shared with subclasses (e.g. stereo) that layer their
+
156 // own multi-camera handling over the base reader. Such subclasses temporarily set
+
157 // _multiCameraCalib to false while delegating to base init()/captureImage() so the
+
158 // base returns the raw stacked image instead of doing its own split, then restore it.
+
159 bool _multiCameraCalib;
+
160 int _multiCameraCount; // number of sub-cameras detected in multi-camera mode
+
161
+
162private:
+
163 bool readPoses(
+
164 std::list<Transform> & outputPoses,
+
165 std::list<double> & stamps,
+
166 const std::string & filePath,
+
167 int format,
+
168 double maxTimeDiff) const;
+
169
+
170 // Load the sub-camera models of a multi-camera rig from calibration files named
+
171 // "<baseName>_<index>.yaml" (index 0.._multiCameraCount-1) in _calibrationFolder.
+
172 // Returns an empty vector (and logs an error) if any model is missing or invalid.
+
173 std::vector<CameraModel> loadMultiCameraModels(const std::string & baseName) const;
+
174
+
175 // Load the single-camera model for one frame from a per-frame config file (RTAB-Map
+
176 // calibration or 3DScannerApp format). Returns an invalid model (and logs an error)
+
177 // on failure.
+
178 CameraModel loadConfigModel(const std::string & filePath);
+
179
+
180private:
+
181 std::string _path;
+
182 int _startAt;
+
183 int _maxFrames;
+
184 // If the list of files in the directory is refreshed
+
185 // on each call of takeImage()
+
186 bool _refreshDir;
+
187 bool _rectifyImages;
+
188 int _bayerMode;
+
189 bool _isDepth;
+
190 float _depthScaleFactor;
+
191 int _count;
+
192 int _framesPublished;
+
193 UDirectory * _dir;
+
194 std::string _lastFileName;
+
195 std::string _lastImageFileName; // file name of the image returned by the last captureImage()
+
196
+
197 int _countScan;
+
198 UDirectory * _scanDir;
+
199 std::string _lastScanFileName;
+
200 std::string _scanPath;
+
201 Transform _scanLocalTransform;
+
202 int _scanMaxPts;
+
203
+
204 bool _depthFromScan;
+
205 int _depthFromScanFillHoles; // <0:horizontal 0:disabled >0:vertical
+
206 bool _depthFromScanFillHolesFromBorder;
+
207
+
208 bool _filenamesAreTimestamps;
+
209 bool _hasConfigForEachFrame;
+
210 std::string _timestampsPath;
+
211 bool _syncImageRateWithStamps;
+
212
+
213 std::string _odometryPath;
+
214 int _odometryFormat;
+
215 std::string _groundTruthPath;
+
216 int _groundTruthFormat;
+
217 Transform _groundTruthLocalTransform;
+
218 double _maxPoseTimeDiff;
+
219
+
220 std::list<double> _stamps;
+
221 std::list<Transform> odometry_;
+
222 std::list<cv::Mat> covariances_;
+
223 std::list<Transform> groundTruth_;
+
224 CameraModel _model;
+
225 std::list<std::string> _modelFileNames; // per-frame single-camera config file paths (config-for-each-frame)
+
226 bool _configLocalTransformWarned; // warn only once when a per-frame config has no local_transform
+
227 std::vector<CameraModel> _multiModels; // sub-camera models, shared by all frames (multi-camera mode); empty when loaded per-frame
+
228
+
229 UTimer _captureTimer;
+
230 double _captureDelay;
+
231};
+
+
232
+
233
+
234} // namespace rtabmap
+ + + +
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual bool odomProvided() const
Checks if the sensor provides odometry poses.
+ +
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraInfo_8h_source.html b/preview/pr-1492/api/latest/CameraInfo_8h_source.html new file mode 100644 index 00000000..e60f543c --- /dev/null +++ b/preview/pr-1492/api/latest/CameraInfo_8h_source.html @@ -0,0 +1,124 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/CameraInfo.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraInfo.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/SensorCaptureInfo.h"
+
+ + + + diff --git a/preview/pr-1492/api/latest/CameraK4A_8h_source.html b/preview/pr-1492/api/latest/CameraK4A_8h_source.html new file mode 100644 index 00000000..f613aeea --- /dev/null +++ b/preview/pr-1492/api/latest/CameraK4A_8h_source.html @@ -0,0 +1,204 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraK4A.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraK4A.h
+
+
+
1/*
+
2Copyright (c) 2010-2019, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/CameraModel.h"
+
31#include "rtabmap/core/Camera.h"
+
32#include "rtabmap/core/Version.h"
+
33#include "rtabmap/utilite/UTimer.h"
+
34
+
35#ifdef RTABMAP_K4A
+
36#include <k4a/k4atypes.h>
+
37#include <k4arecord/playback.h>
+
38#endif
+
39
+
40namespace rtabmap
+
41{
+
42
+
+
43class RTABMAP_CORE_EXPORT CameraK4A :
+
44 public Camera
+
45{
+
46public:
+
47 static bool available();
+
48
+
49public:
+
50 CameraK4A(int deviceId = 0,
+
51 float imageRate = 0.0f,
+
52 const Transform & localTransform = Transform::getIdentity());
+
53 CameraK4A(const std::string & fileName,
+
54 float imageRate = 0.0f,
+
55 const Transform & localTransform = Transform::getIdentity());
+
56 virtual ~CameraK4A();
+
57
+
58 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
59 virtual bool isCalibrated() const;
+
60 virtual std::string getSerial() const;
+
61
+
62 void setIRDepthFormat(bool enabled);
+
63 void setPreferences(int rgb_resolution, int framerate, int depth_resolution);
+
64
+
65protected:
+
66 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
67
+
68private:
+
69 void close();
+
70
+
71private:
+
72
+
73#ifdef RTABMAP_K4A
+
74 k4a_device_t deviceHandle_;
+
75 k4a_device_configuration_t config_;
+
76 k4a_calibration_t calibration_;
+
77 k4a_transformation_t transformationHandle_;
+
78 k4a_capture_t captureHandle_;
+
79 k4a_playback_t playbackHandle_;
+
80 std::string serial_number_;
+
81
+
82 CameraModel model_;
+
83 int deviceId_;
+
84 std::string fileName_;
+
85 int rgb_resolution_;
+
86 int framerate_;
+
87 int depth_resolution_;
+
88 bool ir_;
+
89 double previousStamp_;
+
90 double timestampOffset_;
+
91 UTimer timer_;
+
92 Transform imuLocalTransform_;
+
93#endif
+
94
+
95};
+
+
96
+
97
+
98} // namespace rtabmap
+ + +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraK4W2_8h_source.html b/preview/pr-1492/api/latest/CameraK4W2_8h_source.html new file mode 100644 index 00000000..5d9539a1 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraK4W2_8h_source.html @@ -0,0 +1,200 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraK4W2.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraK4W2.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/CameraModel.h"
+
31#include "rtabmap/core/Camera.h"
+
32#include "rtabmap/core/Version.h"
+
33
+
34typedef struct IKinectSensor IKinectSensor;
+
35typedef struct ICoordinateMapper ICoordinateMapper;
+
36typedef struct _DepthSpacePoint DepthSpacePoint;
+
37typedef struct _ColorSpacePoint ColorSpacePoint;
+
38typedef struct tagRGBQUAD RGBQUAD;
+
39typedef struct IMultiSourceFrameReader IMultiSourceFrameReader;
+
40
+
41namespace rtabmap
+
42{
+
43
+
+
44class RTABMAP_CORE_EXPORT CameraK4W2 :
+
45 public Camera
+
46{
+
47public:
+
48 static bool available();
+
49
+
50 enum Type {
+
51 kTypeColor2DepthSD,
+
52 kTypeDepth2ColorSD,
+
53 kTypeDepth2ColorHD
+
54 };
+
55
+
56public:
+
57 static const int cDepthWidth = 512;
+
58 static const int cDepthHeight = 424;
+
59 static const int cColorWidth = 1920;
+
60 static const int cColorHeight = 1080;
+
61
+
62public:
+
63 // default local transform z in, x right, y down));
+
64 CameraK4W2(int deviceId = 0, // not used
+
65 Type type = kTypeDepth2ColorSD,
+
66 float imageRate = 0.0f,
+
67 const Transform & localTransform = Transform::getIdentity());
+
68 virtual ~CameraK4W2();
+
69
+
70 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
71 virtual bool isCalibrated() const;
+
72 virtual std::string getSerial() const;
+
73
+
74protected:
+
75 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
76
+
77private:
+
78 void close();
+
79
+
80private:
+
81#ifdef RTABMAP_K4W2
+
82 Type type_;
+
83 IKinectSensor* pKinectSensor_;
+
84 ICoordinateMapper* pCoordinateMapper_;
+
85 DepthSpacePoint* pDepthCoordinates_;
+
86 ColorSpacePoint* pColorCoordinates_;
+
87 IMultiSourceFrameReader* pMultiSourceFrameReader_;
+
88 RGBQUAD * pColorRGBX_;
+
89 INT_PTR hMSEvent;
+
90 CameraModel colorCameraModel_;
+
91#endif
+
92};
+
+
93
+
94
+
95} // namespace rtabmap
+ +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraModel_8h_source.html b/preview/pr-1492/api/latest/CameraModel_8h_source.html new file mode 100644 index 00000000..e97fdedb --- /dev/null +++ b/preview/pr-1492/api/latest/CameraModel_8h_source.html @@ -0,0 +1,317 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/CameraModel.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraModel.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CAMERAMODEL_H_
+
29#define CAMERAMODEL_H_
+
30
+
31#include <opencv2/opencv.hpp>
+
32
+
33#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
34#include "rtabmap/core/Transform.h"
+
35
+
36namespace rtabmap {
+
37
+
+
52class RTABMAP_CORE_EXPORT CameraModel
+
53{
+
54public:
+
63 static Transform opticalRotation() {return Transform(0,0,1,0, -1,0,0,0, 0,-1,0,0);}
+
64
+
65public:
+
66
+ +
69
+ +
86 const std::string & name,
+
87 const cv::Size & imageSize,
+
88 const cv::Mat & K,
+
89 const cv::Mat & D,
+
90 const cv::Mat & R,
+
91 const cv::Mat & P,
+
92 const Transform & localTransform = opticalRotation());
+
93
+ +
106 double fx,
+
107 double fy,
+
108 double cx,
+
109 double cy,
+
110 const Transform & localTransform = opticalRotation(),
+
111 double Tx = 0.0f,
+
112 const cv::Size & imageSize = cv::Size(0,0));
+
113
+ +
118 const std::string & name,
+
119 double fx,
+
120 double fy,
+
121 double cx,
+
122 double cy,
+
123 const Transform & localTransform = opticalRotation(),
+
124 double Tx = 0.0f,
+
125 const cv::Size & imageSize = cv::Size(0,0));
+
126
+
128 virtual ~CameraModel() {}
+
129
+ +
154
+
159 bool isRectificationMapInitialized() const {return !mapX_.empty() && !mapY_.empty();}
+
160
+
164 bool isValidForProjection() const {return fx()>0.0 && fy()>0.0 && cx()>0.0 && cy()>0.0;}
+
168 bool isValidForReprojection() const {return fx()>0.0 && fy()>0.0 && cx()>0.0 && cy()>0.0 && imageWidth()>0 && imageHeight()>0;}
+
+ +
173 {
+
174 return imageSize_.width>0 &&
+
175 imageSize_.height>0 &&
+
176 !K_.empty() &&
+
177 !D_.empty() &&
+
178 !R_.empty() &&
+
179 !P_.empty();
+
180 }
+
+
181
+
183 void setName(const std::string & name) {name_=name;}
+
185 const std::string & name() const {return name_;}
+
186
+
188 double fx() const {return P_.empty()?K_.empty()?0.0:K_.at<double>(0,0):P_.at<double>(0,0);}
+
190 double fy() const {return P_.empty()?K_.empty()?0.0:K_.at<double>(1,1):P_.at<double>(1,1);}
+
192 double cx() const {return P_.empty()?K_.empty()?0.0:K_.at<double>(0,2):P_.at<double>(0,2);}
+
194 double cy() const {return P_.empty()?K_.empty()?0.0:K_.at<double>(1,2):P_.at<double>(1,2);}
+
196 double Tx() const {return P_.empty()?0.0:P_.at<double>(0,3);}
+
197
+
199 cv::Mat K_raw() const {return K_;}
+
201 cv::Mat D_raw() const {return D_;}
+
203 cv::Mat K() const {return !P_.empty()?P_.colRange(0,3):K_;}
+
205 cv::Mat D() const {return P_.empty()&&!D_.empty()?D_:cv::Mat::zeros(1,5,CV_64FC1);} // if P exists, return rectified version
+
207 cv::Mat R() const {return R_;}
+
209 cv::Mat P() const {return P_;}
+
210
+
212 void setLocalTransform(const Transform & transform) {localTransform_ = transform;}
+
214 const Transform & localTransform() const {return localTransform_;}
+
215
+
235 void setImageSize(const cv::Size & size);
+
236 const cv::Size & imageSize() const {return imageSize_;}
+
237 int imageWidth() const {return imageSize_.width;}
+
238 int imageHeight() const {return imageSize_.height;}
+
239
+
250 double fovX() const;
+
251
+
262 double fovY() const;
+
263
+
271 double horizontalFOV() const;
+
272
+
280 double verticalFOV() const;
+
281
+
283 bool isFisheye() const {return D_.cols == 6;}
+
284
+
315 bool load(const std::string & filePath, bool initRectificationMaps = true);
+
316
+
329 bool load(const std::string & directory, const std::string & cameraName, bool initRectificationMaps = true);
+
330
+
354 bool save(const std::string & directory) const;
+
355
+
377 std::vector<unsigned char> serialize() const;
+
389 unsigned int deserialize(const std::vector<unsigned char>& data);
+
390
+
410 unsigned int deserialize(const unsigned char * data, unsigned int dataSize);
+
411
+
426 CameraModel scaled(double scale) const;
+
427
+
442 CameraModel roi(const cv::Rect & roi) const;
+
443
+
463 cv::Mat rectifyImage(const cv::Mat & raw, int interpolation = cv::INTER_LINEAR) const;
+
464
+
488 cv::Mat rectifyDepth(const cv::Mat & raw) const;
+
489
+
507 void project(float u, float v, float depth, float & x, float & y, float & z) const;
+
508
+
525 void reproject(float x, float y, float z, float & u, float & v) const;
+
526
+
542 void reproject(float x, float y, float z, int & u, int & v) const;
+
543
+
553 bool inFrame(int u, int v) const;
+
554
+
555private:
+
556 std::string name_;
+
557 cv::Size imageSize_;
+
558 cv::Mat K_;
+
559 cv::Mat D_;
+
560 cv::Mat R_;
+
561 cv::Mat P_;
+
562 cv::Mat mapX_;
+
563 cv::Mat mapY_;
+
564 Transform localTransform_;
+
565};
+
+
566
+
590RTABMAP_CORE_EXPORT std::ostream& operator<<(std::ostream& os, const CameraModel& model);
+
591
+
592} /* namespace rtabmap */
+
593#endif /* CAMERAMODEL_H_ */
+
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+
void project(float u, float v, float depth, float &x, float &y, float &z) const
Projects a 2D pixel and depth value into a 3D point in the camera coordinate frame (/camera_link).
+
static Transform opticalRotation()
Returns the default optical rotation to convert image coordinates to robot coordinates.
Definition CameraModel.h:63
+
double horizontalFOV() const
Returns the horizontal field of view in degrees.
+
cv::Mat rectifyImage(const cv::Mat &raw, int interpolation=cv::INTER_LINEAR) const
Rectifies a raw image using the precomputed rectification maps.
+
unsigned int deserialize(const unsigned char *data, unsigned int dataSize)
Deserializes a camera model from a raw byte buffer.
+
cv::Mat rectifyDepth(const cv::Mat &raw) const
Rectifies a raw depth image using the precomputed rectification maps.
+
bool load(const std::string &filePath, bool initRectificationMaps=true)
Loads the camera model parameters from a YAML calibration file.
+
CameraModel roi(const cv::Rect &roi) const
Returns a new camera model adjusted for a given region of interest (ROI).
+
bool isFisheye() const
Checks if the distortion model is fisheye (6 coefficients: k1,k2,0,0,k3,k4).
+
void setName(const std::string &name)
Sets the camera name, used to set a camera name when saving to a file.
+
void setImageSize(const cv::Size &size)
Sets the image size of the camera model and updates the principal point if undefined.
+
bool isValidForRectification() const
Checks if the model has sufficient data for image rectification.
+
CameraModel(const std::string &name, const cv::Size &imageSize, const cv::Mat &K, const cv::Mat &D, const cv::Mat &R, const cv::Mat &P, const Transform &localTransform=opticalRotation())
Constructor using full camera parameters.
+
unsigned int deserialize(const std::vector< unsigned char > &data)
Deserializes a camera model from a byte vector.
+
cv::Mat D() const
Returns the rectified distortion coefficients (1x5 filled with zeros) if the projection matrix P exis...
+
bool initRectificationMap()
Initializes the rectification maps used to undistort and rectify images.
+
std::vector< unsigned char > serialize() const
Serializes the camera model to a binary format.
+
cv::Mat K() const
Returns the rectified camera intrinsic matrix if the projection matrix P exists, otherwise returns th...
+
void reproject(float x, float y, float z, float &u, float &v) const
Reprojects a 3D point in the camera frame (/camera_link) into 2D image coordinates (floating-point).
+
double Tx() const
Returns the x translation (usually fx * baseline in case of stereo, otherwise would be 0).
+
CameraModel(const std::string &name, double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))
Minimal constructor with name for saving.
+
bool isValidForProjection() const
Checks if the model is valid for 2D->3D projection.
+
bool isRectificationMapInitialized() const
Checks if the rectification map has been initialized.
+
cv::Mat D_raw() const
Returns the raw distortion coefficients (before rectification).
+
const Transform & localTransform() const
Returns the local transform (base frame to optical frame).
+
void reproject(float x, float y, float z, int &u, int &v) const
Reprojects a 3D point in the camera frame (/camera_link) into 2D image coordinates (rounded to int).
+
bool inFrame(int u, int v) const
Checks if a given pixel coordinate lies within the image bounds.
+
void setLocalTransform(const Transform &transform)
Sets the local transform of the camera (base frame to optical frame).
+
const std::string & name() const
Returns the camera name.
+
double cy() const
Returns principal point y.
+
CameraModel(double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))
Minimal constructor using intrinsic parameters. This assumes the images are already rectified.
+
bool save(const std::string &directory) const
Saves the camera model parameters to a YAML calibration file in ROS format.
+
bool isValidForReprojection() const
Checks if the model is valid for 3D->2D reprojection.
+
bool load(const std::string &directory, const std::string &cameraName, bool initRectificationMaps=true)
Loads the camera model by constructing a file path from a directory and camera name.
+
double fovX() const
Returns the horizontal field of view (FoV) in radians.
+
double fy() const
Returns focal length in y.
+
cv::Mat P() const
Returns the projection matrix.
+
double fx() const
Returns focal length in x.
+
cv::Mat R() const
Returns the rectification matrix.
+
cv::Mat K_raw() const
Returns the raw intrinsic matrix (before rectification).
+
CameraModel()
Default constructor.
+
CameraModel scaled(double scale) const
Returns a new camera model with all intrinsic parameters scaled by a given factor.
+
double fovY() const
Returns the vertical field of view (FoV) in radians.
+
double verticalFOV() const
Returns the vertical field of view in degrees.
+
virtual ~CameraModel()
Destructor.
+
double cx() const
Returns principal point x.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
RTABMAP_CORE_EXPORT std::ostream & operator<<(std::ostream &os, const CameraModel &model)
Stream operator for printing a camera model to an output stream.
+
+ + + + diff --git a/preview/pr-1492/api/latest/CameraMyntEye_8h_source.html b/preview/pr-1492/api/latest/CameraMyntEye_8h_source.html new file mode 100644 index 00000000..a8e083da --- /dev/null +++ b/preview/pr-1492/api/latest/CameraMyntEye_8h_source.html @@ -0,0 +1,213 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraMyntEye.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraMyntEye.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/Camera.h"
+
31#include "rtabmap/core/Version.h"
+
32#include "rtabmap/utilite/USemaphore.h"
+
33#include <memory>
+
34
+
35namespace mynteye {
+
36class Device;
+
37class API;
+
38}
+
39
+
40namespace rtabmap
+
41{
+
42
+
+
47class RTABMAP_CORE_EXPORT CameraMyntEye : public Camera
+
48{
+
49public:
+
50 static bool available();
+
51
+
52public:
+
53 CameraMyntEye(const std::string & device = "", bool apiRectification = false, bool apiDepth = false, float imageRate = 0, const Transform & localTransform = Transform::getIdentity());
+
54 virtual ~CameraMyntEye();
+
55
+
56 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
57 virtual bool isCalibrated() const;
+
58 virtual std::string getSerial() const;
+
59 virtual bool odomProvided() const { return false; }
+
60
+
61 void publishInterIMU(bool enabled);
+
62 void setAutoExposure();
+
63 void setManualExposure(int gain=24, int brightness=120, int constrast=116);
+
64 void setIrControl(int value);
+
65
+
66protected:
+ +
71
+
72private:
+
73#ifdef RTABMAP_MYNTEYE
+
74 double hardTimeToSoftTime(std::uint64_t hardTime);
+
75 void getPoseAndIMU(const double & stamp, IMU & imu, int maxWaitTimeMs = 35) const;
+
76 double checkUpTimeStamp(std::uint64_t _hard_time, std::uint8_t stream);
+
77
+
78 std::shared_ptr<mynteye::Device> device_;
+
79 std::shared_ptr<mynteye::API> api_;
+
80 StereoCameraModel stereoModel_;
+
81 std::string deviceName_;
+
82 bool apiRectification_;
+
83 bool apiDepth_;
+
84 bool autoExposure_;
+
85 int gain_;
+
86 int brightness_;
+
87 int contrast_;
+
88 int irControl_;
+
89 USemaphore dataReady_;
+
90 UMutex dataMutex_;
+
91 cv::Mat leftFrameBuffer_;
+
92 cv::Mat rightFrameBuffer_;
+
93 std::pair<cv::Mat, cv::Mat> lastFrames_;
+
94 double lastFramesStamp_;
+
95 std::uint64_t stamp_;
+
96 bool publishInterIMU_;
+
97 Transform imuLocalTransform_;
+
98 std::map<double, std::pair<cv::Vec3f, cv::Vec3f> > imuBuffer_;
+
99 UMutex imuMutex_;
+
100
+
101 double softTimeBegin_;
+
102 std::uint64_t hardTimeBegin_;
+
103 std::uint64_t unitHardTime_;
+
104 std::vector<std::uint64_t> lastHardTimes_;
+
105 std::vector<std::uint64_t> acc_;
+
106#endif
+
107};
+
+
108
+
109
+
110} // namespace rtabmap
+ + + +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual bool odomProvided() const
Checks if the sensor provides odometry poses.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual SensorData captureImage(SensorCaptureInfo *info=0)
+ +
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
+
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraOpenNI2_8h_source.html b/preview/pr-1492/api/latest/CameraOpenNI2_8h_source.html new file mode 100644 index 00000000..1fa2f4cc --- /dev/null +++ b/preview/pr-1492/api/latest/CameraOpenNI2_8h_source.html @@ -0,0 +1,198 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraOpenNI2.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraOpenNI2.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/StereoCameraModel.h"
+
31#include "rtabmap/core/Camera.h"
+
32#include "rtabmap/core/Version.h"
+
33
+
34namespace openni
+
35{
+
36class Device;
+
37class VideoStream;
+
38}
+
39
+
40namespace rtabmap
+
41{
+
+
42class RTABMAP_CORE_EXPORT CameraOpenNI2 :
+
43 public Camera
+
44{
+
45
+
46public:
+
47 static bool available();
+
48 static bool exposureGainAvailable();
+
49 enum Type {kTypeColorDepth, kTypeIRDepth, kTypeIR};
+
50
+
51public:
+
52 CameraOpenNI2(const std::string & deviceId = "",
+
53 Type type = kTypeColorDepth,
+
54 float imageRate = 0,
+
55 const Transform & localTransform = Transform::getIdentity());
+
56 virtual ~CameraOpenNI2();
+
57
+
58 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
59 virtual bool isCalibrated() const;
+
60 virtual std::string getSerial() const;
+
61
+
62 bool setAutoWhiteBalance(bool enabled);
+
63 bool setAutoExposure(bool enabled);
+
64 bool setExposure(int value);
+
65 bool setGain(int value);
+
66 bool setMirroring(bool enabled);
+
67 void setOpenNI2StampsAndIDsUsed(bool used);
+
68 void setIRDepthShift(int horizontal, int vertical);
+
69 void setDepthDecimation(int decimation);
+
70
+
71protected:
+
72 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
73
+
74private:
+
75#ifdef RTABMAP_OPENNI2
+
76 Type _type;
+
77 openni::Device * _device;
+
78 openni::VideoStream * _color;
+
79 openni::VideoStream * _depth;
+
80 float _depthFx;
+
81 float _depthFy;
+
82 std::string _deviceId;
+
83 bool _openNI2StampsAndIDsUsed;
+
84 StereoCameraModel _stereoModel;
+
85 int _depthHShift;
+
86 int _depthVShift;
+
87 int _depthDecimation;
+
88#endif
+
89};
+
+
90
+
91
+
92
+
93} // namespace rtabmap
+ +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraOpenNICV_8h_source.html b/preview/pr-1492/api/latest/CameraOpenNICV_8h_source.html new file mode 100644 index 00000000..d5fdb3ec --- /dev/null +++ b/preview/pr-1492/api/latest/CameraOpenNICV_8h_source.html @@ -0,0 +1,166 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraOpenNICV.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraOpenNICV.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/Camera.h"
+
31#include "rtabmap/core/Version.h"
+
32
+
33namespace rtabmap
+
34{
+
35
+
+
36class RTABMAP_CORE_EXPORT CameraOpenNICV :
+
37 public Camera
+
38{
+
39
+
40public:
+
41 static bool available();
+
42
+
43public:
+
44 CameraOpenNICV(bool asus = false,
+
45 float imageRate = 0,
+
46 const Transform & localTransform = Transform::getIdentity());
+
47 virtual ~CameraOpenNICV();
+
48
+
49 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
50 virtual bool isCalibrated() const;
+
51 virtual std::string getSerial() const {return "";} // unknown with OpenCV
+
52
+
53protected:
+
54 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
55
+
56private:
+
57 bool _asus;
+
58 cv::VideoCapture _capture;
+
59 float _depthFocal;
+
60};
+
+
61
+
62} // namespace rtabmap
+ +
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraOpenni_8h_source.html b/preview/pr-1492/api/latest/CameraOpenni_8h_source.html new file mode 100644 index 00000000..f8fa3c4e --- /dev/null +++ b/preview/pr-1492/api/latest/CameraOpenni_8h_source.html @@ -0,0 +1,204 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraOpenni.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraOpenni.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/utilite/UMutex.h"
+
31#include "rtabmap/utilite/USemaphore.h"
+
32#include "rtabmap/core/Camera.h"
+
33#include "rtabmap/core/Version.h"
+
34
+
35#include <pcl/pcl_config.h>
+
36
+
37#ifdef RTABMAP_OPENNI
+
38#if __linux__ && __i386__ && __cplusplus >= 201103L
+
39#warning "Openni driver is not available on i386 when building with c++11 support"
+
40#endif
+
41#include <pcl/io/openni_camera/openni_depth_image.h>
+
42#include <pcl/io/openni_camera/openni_image.h>
+
43#endif
+
44
+
45#include <boost/signals2/connection.hpp>
+
46
+
47namespace pcl
+
48{
+
49class Grabber;
+
50}
+
51
+
52namespace rtabmap
+
53{
+
+
57class RTABMAP_CORE_EXPORT CameraOpenni :
+
58 public Camera
+
59{
+
60public:
+
61 static bool available();
+
62
+
63public:
+
64 // default local transform z in, x right, y down));
+
65 CameraOpenni(const std::string & deviceId="",
+
66 float imageRate = 0,
+
67 const Transform & localTransform = Transform::getIdentity());
+
68 virtual ~CameraOpenni();
+
69#ifdef RTABMAP_OPENNI
+
70#if PCL_VERSION_COMPARE(>=, 1, 10, 0)
+
71 void image_cb (
+
72 const std::shared_ptr<openni_wrapper::Image>& rgb,
+
73 const std::shared_ptr<openni_wrapper::DepthImage>& depth,
+
74 float constant);
+
75#else
+
76 void image_cb (
+
77 const boost::shared_ptr<openni_wrapper::Image>& rgb,
+
78 const boost::shared_ptr<openni_wrapper::DepthImage>& depth,
+
79 float constant);
+
80#endif
+
81#endif
+
82
+
83 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
84 virtual bool isCalibrated() const;
+
85 virtual std::string getSerial() const;
+
86
+
87protected:
+
88 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
89
+
90private:
+
91 pcl::Grabber* interface_;
+
92 std::string deviceId_;
+
93 boost::signals2::connection connection_;
+
94 cv::Mat depth_;
+
95 cv::Mat rgb_;
+
96 float depthConstant_;
+
97 UMutex dataMutex_;
+
98 USemaphore dataReady_;
+
99};
+
+
100
+
101} // namespace rtabmap
+ + +
OpenNI driver for cameras like Kinect for Xbox 360.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraOrbbecSDK_8h_source.html b/preview/pr-1492/api/latest/CameraOrbbecSDK_8h_source.html new file mode 100644 index 00000000..f8075156 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraOrbbecSDK_8h_source.html @@ -0,0 +1,211 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraOrbbecSDK.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraOrbbecSDK.h
+
+
+
1/*
+
2Copyright (c) 2010-2025, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/CameraModel.h"
+
31#include "rtabmap/core/Camera.h"
+
32#include "rtabmap/core/Version.h"
+
33
+
34#ifdef RTABMAP_ORBBEC_SDK
+
35namespace ob
+
36{
+
37 class Pipeline;
+
38 class Align;
+
39}
+
40#endif
+
41
+
42namespace rtabmap
+
43{
+
44
+
+
45class RTABMAP_CORE_EXPORT CameraOrbbecSDK :
+
46 public Camera
+
47{
+
48public:
+
49 static bool available();
+
50
+
51public:
+
52 // deviceId can be either an index (e.g., "0"), an UID (e.g, "2-1-2" or "gmsl-1") or a serial ("AAA6454S")
+ +
54 std::string deviceId = "",
+
55 unsigned int colorWidth = 800,
+
56 unsigned int colorHeight = 600,
+
57 unsigned int depthWidth = 800,
+
58 unsigned int depthHeight = 600,
+
59 float imageRate = 0.0f,
+
60 const Transform & localTransform = Transform::getIdentity());
+
61 virtual ~CameraOrbbecSDK();
+
62
+
63 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
64 virtual bool isCalibrated() const;
+
65 virtual std::string getSerial() const;
+
66
+
67 void close();
+
68
+
69 // Should be set before initializing
+
70 void enableColorRectification(bool enabled);
+
71 void enableImu(bool enabled);
+
72
+
73 void enableDepthMM(bool enabled);
+
74
+
75protected:
+
76 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
77
+
78private:
+
79
+
80#ifdef RTABMAP_ORBBEC_SDK
+
81 std::string deviceId_;
+
82 unsigned int colorWidth_;
+
83 unsigned int colorHeight_;
+
84 unsigned int depthWidth_;
+
85 unsigned int depthHeight_;
+
86 ob::Pipeline * pipeline_;
+
87 ob::Pipeline * imuPipeline_;
+
88 ob::Align * alignFilter_;
+
89 CameraModel model_;
+
90 Transform imuLocalTransform_;
+
91 bool imuLocalTransformInitialized_;
+
92 uint64_t lastAccStamp_;
+
93 uint64_t lastImageStamp_;
+
94 bool globalTimestampAvailable_;
+
95 bool rectifyColor_;
+
96 bool convertDepthToMM_;
+
97 bool imuPublished_;
+
98 std::map<double, cv::Vec6f> imuBuffer_;
+
99 UMutex imuMutex_;
+
100#endif
+
101
+
102};
+
+
103
+
104
+
105} // namespace rtabmap
+ +
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+ +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraRGBDImages_8h_source.html b/preview/pr-1492/api/latest/CameraRGBDImages_8h_source.html new file mode 100644 index 00000000..40a21da2 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraRGBDImages_8h_source.html @@ -0,0 +1,163 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraRGBDImages.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraRGBDImages.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include <rtabmap/core/camera/CameraImages.h>
+
31
+
32namespace rtabmap
+
33{
+
34
+
+
35class RTABMAP_CORE_EXPORT CameraRGBDImages :
+
36 public CameraImages
+
37{
+
38public:
+
39 static bool available();
+
40
+
41public:
+ +
43 const std::string & pathRGBImages,
+
44 const std::string & pathDepthImages,
+
45 float depthScaleFactor = 1.0f,
+
46 float imageRate=0.0f,
+
47 const Transform & localTransform = Transform::getIdentity());
+
48 virtual ~CameraRGBDImages();
+
49
+
50 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
51
+
52 virtual void setStartIndex(int index) {CameraImages::setStartIndex(index);cameraDepth_.setStartIndex(index);} // negative means last
+
53 virtual void setMaxFrames(int value) {CameraImages::setMaxFrames(value);cameraDepth_.setMaxFrames(value);}
+
54
+
55protected:
+
56 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
57
+
58private:
+
59 CameraImages cameraDepth_;
+
60};
+
+
61
+
62} // namespace rtabmap
+ + +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraRGBD_8h_source.html b/preview/pr-1492/api/latest/CameraRGBD_8h_source.html new file mode 100644 index 00000000..d2afbc8d --- /dev/null +++ b/preview/pr-1492/api/latest/CameraRGBD_8h_source.html @@ -0,0 +1,135 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/CameraRGBD.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraRGBD.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include <rtabmap/core/camera/CameraFreenect.h>
+
31#include <rtabmap/core/camera/CameraFreenect2.h>
+
32#include <rtabmap/core/camera/CameraK4W2.h>
+
33#include <rtabmap/core/camera/CameraOpenni.h>
+
34#include <rtabmap/core/camera/CameraOpenNI2.h>
+
35#include <rtabmap/core/camera/CameraOpenNICV.h>
+
36#include <rtabmap/core/camera/CameraRealSense.h>
+
37#include <rtabmap/core/camera/CameraRealSense2.h>
+
38#include <rtabmap/core/camera/CameraRGBDImages.h>
+
39#include <rtabmap/core/camera/CameraK4A.h>
+
40#include <rtabmap/core/camera/CameraSeerSense.h>
+
41#include <rtabmap/core/camera/CameraOrbbecSDK.h>
+
+ + + + diff --git a/preview/pr-1492/api/latest/CameraRGB_8h_source.html b/preview/pr-1492/api/latest/CameraRGB_8h_source.html new file mode 100644 index 00000000..988a69ab --- /dev/null +++ b/preview/pr-1492/api/latest/CameraRGB_8h_source.html @@ -0,0 +1,125 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/CameraRGB.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraRGB.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include <rtabmap/core/camera/CameraImages.h>
+
31#include <rtabmap/core/camera/CameraVideo.h>
+
+ + + + diff --git a/preview/pr-1492/api/latest/CameraRealSense2_8h_source.html b/preview/pr-1492/api/latest/CameraRealSense2_8h_source.html new file mode 100644 index 00000000..b048b825 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraRealSense2_8h_source.html @@ -0,0 +1,263 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraRealSense2.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraRealSense2.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/CameraModel.h"
+
31#include "rtabmap/core/Camera.h"
+
32#include "rtabmap/core/Version.h"
+
33
+
34#include <pcl/pcl_config.h>
+
35
+
36#ifdef RTABMAP_REALSENSE2
+
37#include <librealsense2/rs.hpp>
+
38#include <librealsense2/hpp/rs_frame.hpp>
+
39#endif
+
40
+
41
+
42namespace rs2
+
43{
+
44 class context;
+
45 class device;
+
46 class syncer;
+
47}
+
48struct rs2_intrinsics;
+
49struct rs2_extrinsics;
+
50
+
51namespace rtabmap
+
52{
+
53
+
+
54class RTABMAP_CORE_EXPORT CameraRealSense2 :
+
55 public Camera
+
56{
+
57public:
+
58 static bool available();
+
59
+
60public:
+ +
62 const std::string & deviceId = "",
+
63 float imageRate = 0,
+
64 const Transform & localTransform = Transform::getIdentity());
+
65 virtual ~CameraRealSense2();
+
66
+
67 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
68 virtual bool isCalibrated() const;
+
69 virtual std::string getSerial() const;
+
70 virtual bool odomProvided() const;
+
71 virtual bool getPose(double stamp, Transform & pose, cv::Mat & covariance, double maxWaitTime = 0.06);
+
72
+
73 // parameters are set during initialization
+
74 // D400 series
+
75 void setEmitterEnabled(bool enabled);
+
76 void setIRFormat(bool enabled, bool useDepthInsteadOfRightImage);
+
77 void setResolution(int width, int height, int fps = 30);
+
78 void setDepthResolution(int width, int height, int fps = 30);
+
79 void setGlobalTimeSync(bool enabled);
+
80
+
86 void setDualMode(bool enabled, const Transform & extrinsics);
+
87 void setJsonConfig(const std::string & json);
+
88 // T265 related parameters
+
89 void setImagesRectified(bool enabled);
+
90 void setOdomProvided(bool enabled, bool imageStreamsDisabled=false, bool onlyLeftStream = false);
+
91
+
92#ifdef RTABMAP_REALSENSE2
+
93private:
+
94 void close();
+
95 void imu_callback(rs2::frame frame);
+
96 void pose_callback(rs2::frame frame);
+
97 void frame_callback(rs2::frame frame);
+
98 void multiple_message_callback(rs2::frame frame);
+
99 void getPoseAndIMU(
+
100 const double & stamp,
+
101 Transform & pose,
+
102 unsigned int & poseConfidence,
+
103 IMU & imu,
+
104 int maxWaitTimeMs = 35);
+
105#endif
+
106
+
107protected:
+
108 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
109
+
110private:
+
111#ifdef RTABMAP_REALSENSE2
+
112 rs2::context ctx_;
+
113 std::vector<rs2::device> dev_;
+
114 std::string deviceId_;
+
115 rs2::syncer syncer_;
+
116 float depth_scale_meters_;
+
117 cv::Mat depthBuffer_;
+
118 cv::Mat rgbBuffer_;
+
119 CameraModel model_;
+
120 StereoCameraModel stereoModel_;
+
121 Transform imuLocalTransform_;
+
122 std::map<double, cv::Vec3f> accBuffer_;
+
123 std::map<double, cv::Vec3f> gyroBuffer_;
+
124 std::map<double, std::pair<Transform, unsigned int> > poseBuffer_; // <stamp, <Pose, confidence: 1=lost, 2=low, 3=high> >
+
125 UMutex poseMutex_;
+
126 UMutex imuMutex_;
+
127 double lastImuStamp_;
+
128 bool clockSyncWarningShown_;
+
129 bool imuGlobalSyncWarningShown_;
+
130
+
131 bool emitterEnabled_;
+
132 bool ir_;
+
133 bool irDepth_;
+
134 bool rectifyImages_;
+
135 bool odometryProvided_;
+
136 bool odometryImagesDisabled_;
+
137 bool odometryOnlyLeftStream_;
+
138 int cameraWidth_;
+
139 int cameraHeight_;
+
140 int cameraFps_;
+
141 int cameraDepthWidth_;
+
142 int cameraDepthHeight_;
+
143 int cameraDepthFps_;
+
144 bool globalTimeSync_;
+
145 bool dualMode_;
+
146 Transform dualExtrinsics_;
+
147 std::string jsonConfig_;
+
148 bool closing_;
+
149 bool playback_;
+
150
+
151 static Transform realsense2PoseRotation_;
+
152 static Transform realsense2PoseRotationInv_;
+
153#endif
+
154};
+
+
155
+
156
+
157} // namespace rtabmap
+ +
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+ +
virtual bool getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
Gets the sensor's pose estimate at a specific timestamp.
+
virtual bool odomProvided() const
Checks if the sensor provides odometry poses.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
void setDualMode(bool enabled, const Transform &extrinsics)
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+ +
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
+
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraRealSense_8h_source.html b/preview/pr-1492/api/latest/CameraRealSense_8h_source.html new file mode 100644 index 00000000..808dd8a7 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraRealSense_8h_source.html @@ -0,0 +1,209 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraRealSense.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraRealSense.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/utilite/UMutex.h"
+
31#include "rtabmap/utilite/USemaphore.h"
+
32#include "rtabmap/core/CameraModel.h"
+
33#include "rtabmap/core/Camera.h"
+
34#include "rtabmap/core/Version.h"
+
35
+
36namespace rs
+
37{
+
38 class context;
+
39 class device;
+
40 namespace slam {
+
41 class slam;
+
42 }
+
43}
+
44
+
45namespace rtabmap
+
46{
+
47
+
48class slam_event_handler;
+
+
49class RTABMAP_CORE_EXPORT CameraRealSense :
+
50 public Camera
+
51{
+
52public:
+
53 static bool available();
+
54 enum RGBSource {kColor, kInfrared, kFishEye};
+
55
+
56public:
+
57 // default local transform z in, x right, y down));
+ +
59 int deviceId = 0,
+
60 int presetRGB = 0, // 0=best quality, 1=largest image, 2=highest framerate
+
61 int presetDepth = 0, // 0=best quality, 1=largest image, 2=highest framerate
+
62 bool computeOdometry = false,
+
63 float imageRate = 0,
+
64 const Transform & localTransform = Transform::getIdentity());
+
65 virtual ~CameraRealSense();
+
66
+
67 void setDepthScaledToRGBSize(bool enabled);
+
68 void setRGBSource(RGBSource source);
+
69 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
70 virtual bool isCalibrated() const;
+
71 virtual std::string getSerial() const;
+
72 virtual bool odomProvided() const;
+
73
+
74protected:
+
75 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
76
+
77private:
+
78#ifdef RTABMAP_REALSENSE
+
79 rs::context * ctx_;
+
80 rs::device * dev_;
+
81 int deviceId_;
+
82 int presetRGB_;
+
83 int presetDepth_;
+
84 bool computeOdometry_;
+
85 bool depthScaledToRGBSize_;
+
86 RGBSource rgbSource_;
+
87 CameraModel cameraModel_;
+
88 std::vector<int> rsRectificationTable_;
+
89
+
90 int motionSeq_[2];
+
91 rs::slam::slam * slam_;
+
92 UMutex slamLock_;
+
93
+
94 std::map<double, std::pair<cv::Mat, cv::Mat> > bufferedFrames_;
+
95 std::pair<cv::Mat, cv::Mat> lastSyncFrames_;
+
96 UMutex dataMutex_;
+
97 USemaphore dataReady_;
+
98#endif
+
99};
+
+
100
+
101} // namespace rtabmap
+ + +
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+ +
virtual bool odomProvided() const
Checks if the sensor provides odometry poses.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraSeerSense_8h_source.html b/preview/pr-1492/api/latest/CameraSeerSense_8h_source.html new file mode 100644 index 00000000..09af63f0 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraSeerSense_8h_source.html @@ -0,0 +1,161 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraSeerSense.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraSeerSense.h
+
+
+
1#pragma once
+
2
+
3#include "rtabmap/core/Camera.h"
+
4#include "rtabmap/core/Version.h"
+
5#include "rtabmap/utilite/USemaphore.h"
+
6
+
7#ifdef RTABMAP_XVSDK
+
8#include <xv-sdk.h>
+
9#endif
+
10
+
11namespace rtabmap
+
12{
+
13
+
+
14class RTABMAP_CORE_EXPORT CameraSeerSense :
+
15 public Camera
+
16{
+
17public:
+
18 static bool available();
+
19
+
20public:
+ +
22 bool computeOdometry = false,
+
23 float imageRate = 0.0f,
+
24 const Transform & localTransform = Transform::getIdentity()
+
25 );
+
26 virtual ~CameraSeerSense();
+
27
+
28 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
29 virtual bool isCalibrated() const;
+
30 virtual std::string getSerial() const;
+
31 virtual bool odomProvided() const;
+
32 virtual bool getPose(double stamp, Transform & pose, cv::Mat & covariance, double maxWaitTime = 0.0);
+
33
+
34protected:
+
35 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
36
+
37private:
+
38#ifdef RTABMAP_XVSDK
+
39 CameraModel cameraModel_;
+
40 bool computeOdometry_;
+
41 int imuId_;
+
42 int tofId_;
+
43 std::shared_ptr<xv::Device> device_;
+
44 std::map<double, std::pair<cv::Vec3d, cv::Vec3d>> imuBuffer_;
+
45 std::pair<double, std::pair<cv::Mat, cv::Mat>> lastData_;
+
46 UMutex imuMutex_;
+
47 UMutex dataMutex_;
+
48 USemaphore dataReady_;
+
49#endif
+
50};
+
+
51
+
52} // namespace rtabmap
+ + +
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+ +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual bool getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.0)
Gets the sensor's pose estimate at a specific timestamp.
+
virtual bool odomProvided() const
Checks if the sensor provides odometry poses.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraStereoDC1394_8h_source.html b/preview/pr-1492/api/latest/CameraStereoDC1394_8h_source.html new file mode 100644 index 00000000..7a0b3f1a --- /dev/null +++ b/preview/pr-1492/api/latest/CameraStereoDC1394_8h_source.html @@ -0,0 +1,169 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraStereoDC1394.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraStereoDC1394.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/StereoCameraModel.h"
+
31#include "rtabmap/core/Camera.h"
+
32#include "rtabmap/core/Version.h"
+
33
+
34namespace rtabmap
+
35{
+
36
+
37class DC1394Device;
+
38
+
+
39class RTABMAP_CORE_EXPORT CameraStereoDC1394 :
+
40 public Camera
+
41{
+
42public:
+
43 static bool available();
+
44
+
45public:
+
46 CameraStereoDC1394( float imageRate=0.0f, const Transform & localTransform = Transform::getIdentity());
+
47 virtual ~CameraStereoDC1394();
+
48
+
49 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
50 virtual bool isCalibrated() const;
+
51 virtual std::string getSerial() const;
+
52
+
53protected:
+
54 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
55
+
56private:
+
57#ifdef RTABMAP_DC1394
+
58 DC1394Device *device_;
+
59 StereoCameraModel stereoModel_;
+
60#endif
+
61};
+
+
62
+
63
+
64} // namespace rtabmap
+ +
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraStereoFlyCapture2_8h_source.html b/preview/pr-1492/api/latest/CameraStereoFlyCapture2_8h_source.html new file mode 100644 index 00000000..d566ec65 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraStereoFlyCapture2_8h_source.html @@ -0,0 +1,170 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraStereoFlyCapture2.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraStereoFlyCapture2.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/Camera.h"
+
31#include "rtabmap/core/Version.h"
+
32
+
33namespace FlyCapture2
+
34{
+
35class Camera;
+
36}
+
37
+
38namespace rtabmap
+
39{
+
40
+
+
41class RTABMAP_CORE_EXPORT CameraStereoFlyCapture2 :
+
42 public Camera
+
43{
+
44public:
+
45 static bool available();
+
46
+
47public:
+
48 CameraStereoFlyCapture2( float imageRate=0.0f, const Transform & localTransform = Transform::getIdentity());
+ +
50
+
51 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
52 virtual bool isCalibrated() const;
+
53 virtual std::string getSerial() const;
+
54
+
55protected:
+
56 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
57
+
58private:
+
59#ifdef RTABMAP_FLYCAPTURE2
+
60 FlyCapture2::Camera * camera_;
+
61 void * triclopsCtx_; // TriclopsContext
+
62#endif
+
63};
+
+
64
+
65
+
66} // namespace rtabmap
+ +
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraStereoImages_8h_source.html b/preview/pr-1492/api/latest/CameraStereoImages_8h_source.html new file mode 100644 index 00000000..5b7b65ca --- /dev/null +++ b/preview/pr-1492/api/latest/CameraStereoImages_8h_source.html @@ -0,0 +1,205 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraStereoImages.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraStereoImages.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include <rtabmap/core/camera/CameraImages.h>
+
31
+
32#include "rtabmap/core/StereoCameraModel.h"
+
33#include "rtabmap/core/Version.h"
+
34
+
35namespace rtabmap
+
36{
+
37
+
38class CameraImages;
+
+
39class RTABMAP_CORE_EXPORT CameraStereoImages :
+
40 public CameraImages
+
41{
+
42public:
+
43 static bool available();
+
44
+
45public:
+ +
47 const std::string & pathLeftImages,
+
48 const std::string & pathRightImages,
+
49 bool rectifyImages = false,
+
50 float imageRate=0.0f,
+
51 const Transform & localTransform = Transform::getIdentity());
+ +
53 const std::string & pathLeftRightImages,
+
54 bool rectifyImages = false,
+
55 float imageRate=0.0f,
+
56 const Transform & localTransform = Transform::getIdentity());
+
57 virtual ~CameraStereoImages();
+
58
+
59 void setRightGrayScale(bool enabled = true) {rightGrayScale_ = enabled;}
+
60
+
61 // Enable multi-camera stereo mode. Each left/right image in the folders is
+
62 // expected to be the horizontal concatenation of N sub-camera images of a
+
63 // stereo rig, all sharing the same base name (timestamp or node id), e.g.
+
64 // "1779318290.502227.jpg". Two calibration files per sub-camera must exist in
+
65 // the calibrationFolder passed to init(), named "<prefix>_<index>_left.yaml"
+
66 // and "<prefix>_<index>_right.yaml" with index starting at 0. The number of
+
67 // cameras is auto-detected. Sub-images are split using a uniform width
+
68 // (stackedWidth / N).
+
69 // If setConfigForEachFrame() is enabled, one calibration set is loaded per frame
+
70 // using each image's base name as prefix. Otherwise a single calibration set is
+
71 // loaded and reused for all frames, using the cameraName passed to init() as
+
72 // prefix (it may differ from any image name), falling back to the first image's
+
73 // base name when cameraName is empty.
+
74 // Note that it is not recommended to use setConfigForEachFrame() if images have
+
75 // to be rectified, a rectification matrix would need to be re-initilaized for each
+
76 // frame.
+
77 void setMultiCameraCalibration(bool enabled) {CameraImages::setMultiCameraCalibration(enabled);}
+
78
+
79 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
80 virtual bool isCalibrated() const;
+
81 virtual std::string getSerial() const;
+
82
+
83 virtual void setStartIndex(int index) {CameraImages::setStartIndex(index);camera2_->setStartIndex(index);} // negative means last
+
84 virtual void setMaxFrames(int value) {CameraImages::setMaxFrames(value);camera2_->setMaxFrames(value);}
+
85
+
86protected:
+
87 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
88
+
89private:
+
90 // Load the sub-camera stereo models of a frame from calibration files named
+
91 // "<baseName>_<index>_{left,right}.yaml" (index 0.._multiCameraCount-1) in
+
92 // _calibrationFolder. Returns an empty vector (and logs an error) on failure.
+
93 std::vector<StereoCameraModel> loadStereoCameraModels(const std::string & baseName, bool rectify) const;
+
94
+
95private:
+
96 CameraImages * camera2_;
+
97 StereoCameraModel stereoModel_;
+
98 bool rightGrayScale_;
+
99 std::vector<StereoCameraModel> multiStereoModels_; // sub-camera stereo models shared by all frames (multi-camera mode); empty when loaded per-frame
+
100};
+
+
101
+
102
+
103} // namespace rtabmap
+ + +
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraStereoTara_8h_source.html b/preview/pr-1492/api/latest/CameraStereoTara_8h_source.html new file mode 100644 index 00000000..a8db9347 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraStereoTara_8h_source.html @@ -0,0 +1,173 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraStereoTara.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraStereoTara.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
33#pragma once
+
34
+
35#include "rtabmap/core/StereoCameraModel.h"
+
36#include "rtabmap/core/camera/CameraVideo.h"
+
37#include "rtabmap/core/Version.h"
+
38
+
39
+
40namespace rtabmap
+
41{
+
42
+
+
43class RTABMAP_CORE_EXPORT CameraStereoTara :
+
44public Camera
+
45{
+
46public:
+
47 static bool available();
+
48public:
+
49
+ +
51 int device,
+
52 bool rectifyImages = false,
+
53 float imageRate = 0.0f,
+
54 const Transform & localTransform = Transform::getIdentity());
+
55
+
56 virtual ~CameraStereoTara();
+
57
+
58 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
59 virtual bool isCalibrated() const;
+
60 virtual std::string getSerial() const;
+
61
+
62protected:
+
63 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
64
+
65private:
+
66 cv::VideoCapture capture_;
+
67 bool rectifyImages_;
+
68 StereoCameraModel stereoModel_;
+
69 std::string cameraName_;
+
70 int usbDevice_;
+
71};
+
+
72
+
73} // namespace rtabmap
+ +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraStereoVideo_8h_source.html b/preview/pr-1492/api/latest/CameraStereoVideo_8h_source.html new file mode 100644 index 00000000..19673513 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraStereoVideo_8h_source.html @@ -0,0 +1,197 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraStereoVideo.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraStereoVideo.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/StereoCameraModel.h"
+
31#include "rtabmap/core/camera/CameraVideo.h"
+
32
+
33namespace rtabmap
+
34{
+
35
+
+
36class RTABMAP_CORE_EXPORT CameraStereoVideo :
+
37 public Camera
+
38{
+
39public:
+
40 static bool available();
+
41
+
42public:
+ +
44 const std::string & pathSideBySide,
+
45 bool rectifyImages = false,
+
46 float imageRate=0.0f,
+
47 const Transform & localTransform = Transform::getIdentity());
+ +
49 const std::string & pathLeft,
+
50 const std::string & pathRight,
+
51 bool rectifyImages = false,
+
52 float imageRate=0.0f,
+
53 const Transform & localTransform = Transform::getIdentity());
+ +
55 int device,
+
56 bool rectifyImages = false,
+
57 float imageRate = 0.0f,
+
58 const Transform & localTransform = Transform::getIdentity());
+ +
60 int deviceLeft,
+
61 int deviceRight,
+
62 bool rectifyImages = false,
+
63 float imageRate = 0.0f,
+
64 const Transform & localTransform = Transform::getIdentity());
+
65 virtual ~CameraStereoVideo();
+
66
+
67 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
68 virtual bool isCalibrated() const;
+
69 virtual std::string getSerial() const;
+
70
+
71 void setResolution(int width, int height) {_width=width, _height=height;}
+
72 void setFOURCC(const std::string & fourcc) { _fourcc = fourcc; }
+
73 void setRightGrayScale(bool enabled = true) {rightGrayScale_ = enabled;}
+
74
+
75protected:
+
76 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
77
+
78private:
+
79 cv::VideoCapture capture_;
+
80 cv::VideoCapture capture2_;
+
81 std::string path_;
+
82 std::string path2_;
+
83 bool rectifyImages_;
+
84 StereoCameraModel stereoModel_;
+
85 std::string cameraName_;
+
86 CameraVideo::Source src_;
+
87 int usbDevice_;
+
88 int usbDevice2_;
+
89 int _width;
+
90 int _height;
+
91 std::string _fourcc;
+
92 bool rightGrayScale_;
+
93};
+
+
94
+
95} // namespace rtabmap
+ +
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+ +
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraStereoZedOC_8h_source.html b/preview/pr-1492/api/latest/CameraStereoZedOC_8h_source.html new file mode 100644 index 00000000..9b772eac --- /dev/null +++ b/preview/pr-1492/api/latest/CameraStereoZedOC_8h_source.html @@ -0,0 +1,189 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraStereoZedOC.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraStereoZedOC.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/StereoCameraModel.h"
+
31#include "rtabmap/core/Camera.h"
+
32#include "rtabmap/core/Version.h"
+
33
+
34namespace sl_oc {
+
35namespace video {
+
36class VideoCapture;
+
37}
+
38namespace sensors {
+
39class SensorCapture;
+
40}
+
41}
+
42
+
43namespace rtabmap
+
44{
+
45class ZedOCThread;
+
46
+
+
47class RTABMAP_CORE_EXPORT CameraStereoZedOC :
+
48 public Camera
+
49{
+
50public:
+
51 static bool available();
+
52
+
53public:
+ +
55 int deviceId,
+
56 int resolution = 3, // 0=HD2K, 1=HD1080, 2=HD720, 3=VGA
+
57 float imageRate=0.0f,
+
58 const Transform & localTransform = Transform::getIdentity());
+
59 virtual ~CameraStereoZedOC();
+
60
+
61 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
62 virtual bool isCalibrated() const;
+
63 virtual std::string getSerial() const;
+
64
+
65 void setRightGrayScale(bool enabled = true);
+
66
+
67protected:
+
68 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
69
+
70private:
+
71#ifdef RTABMAP_ZEDOC
+
72 sl_oc::video::VideoCapture * zed_;
+
73 sl_oc::sensors::SensorCapture * sensors_;
+
74 ZedOCThread * imuThread_;
+
75 StereoCameraModel stereoModel_;
+
76 int usbDevice_;
+
77 int resolution_;
+
78 uint64_t lastStamp_;
+
79 bool rightGrayScale_;
+
80#endif
+
81};
+
+
82
+
83
+
84} // namespace rtabmap
+ +
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraStereoZed_8h_source.html b/preview/pr-1492/api/latest/CameraStereoZed_8h_source.html new file mode 100644 index 00000000..1f050d94 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraStereoZed_8h_source.html @@ -0,0 +1,221 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraStereoZed.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraStereoZed.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/StereoCameraModel.h"
+
31#include "rtabmap/core/camera/CameraVideo.h"
+
32#include "rtabmap/core/Version.h"
+
33
+
34namespace sl
+
35{
+
36class Camera;
+
37}
+
38
+
39namespace rtabmap
+
40{
+
41class ZedIMUThread;
+
42
+
+
43class RTABMAP_CORE_EXPORT CameraStereoZed :
+
44 public Camera
+
45{
+
46public:
+
47 static bool available();
+
48 static int sdkVersion();
+
49public:
+ +
51 int deviceId,
+
52 int resolution = -1, // -1 = AUTO, 0=HD4K 1=QHDPLUS 2=HD2K 3=HD1536 4=HD1080 5=HD1200 6=HD720 7=SVGA 8=VGA 9=XVGA 10=TXVGA
+
53 int quality = 1, // 0=NONE, 1=PERFORMANCE, 2=QUALITY, 3=ULTRA, 4=NEURAL_LIGHT, 5=NEURAL, 6=NEURAL_ULTRA
+
54 int sensingMode = 0,// 0=STANDARD, 1=FILL
+
55 int confidenceThr = 100,
+
56 bool computeOdometry = false,
+
57 float imageRate=0.0f,
+
58 const Transform & localTransform = Transform::getIdentity(),
+
59 bool selfCalibration = true,
+
60 bool odomForce3DoF = false,
+
61 int texturenessConfidenceThr = 90); // introduced with ZED SDK 3
+ +
63 const std::string & svoFilePath,
+
64 int quality = 1, // 0=NONE, 1=PERFORMANCE, 2=QUALITY, 3=ULTRA, 4=NEURAL_LIGHT, 5=NEURAL, 6=NEURAL_ULTRA
+
65 int sensingMode = 0,// 0=STANDARD, 1=FILL
+
66 int confidenceThr = 100,
+
67 bool computeOdometry = false,
+
68 float imageRate=0.0f,
+
69 const Transform & localTransform = Transform::getIdentity(),
+
70 bool selfCalibration = true,
+
71 bool odomForce3DoF = false,
+
72 int texturenessConfidenceThr = 90); // introduced with ZED SDK 3
+
73 virtual ~CameraStereoZed();
+
74
+
75 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
76 virtual bool isCalibrated() const;
+
77 virtual std::string getSerial() const;
+
78 virtual bool odomProvided() const;
+
79 virtual bool getPose(double stamp, Transform & pose, cv::Mat & covariance, double maxWaitTime = 0.0);
+
80
+
81 void postInterIMUPublic(const IMU & imu, double stamp);
+
82 void setRightGrayScale(bool enabled = true);
+
83
+
91 static std::string getNeuralModelWarning(int quality);
+
92
+
93protected:
+
94 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
95
+
96private:
+
97#ifdef RTABMAP_ZED
+
98 sl::Camera * zed_;
+
99 StereoCameraModel stereoModel_;
+
100 Transform imuLocalTransform_;
+
101 CameraVideo::Source src_;
+
102 int usbDevice_;
+
103 std::string svoFilePath_;
+
104 int resolution_;
+
105 int quality_;
+
106 bool selfCalibration_;
+
107 int sensingMode_;
+
108 int confidenceThr_;
+
109 int texturenessConfidenceThr_; // introduced with ZED SDK 3
+
110 bool computeOdometry_;
+
111 bool lost_;
+
112 bool force3DoF_;
+
113 bool rightGrayScale_;
+
114 ZedIMUThread * imuPublishingThread_;
+
115#endif
+
116};
+
+
117
+
118
+
119} // namespace rtabmap
+ +
virtual bool getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.0)
Gets the sensor's pose estimate at a specific timestamp.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
static std::string getNeuralModelWarning(int quality)
+
virtual bool odomProvided() const
Checks if the sensor provides odometry poses.
+ +
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
+
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CameraStereo_8h_source.html b/preview/pr-1492/api/latest/CameraStereo_8h_source.html new file mode 100644 index 00000000..8c9303e0 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraStereo_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/CameraStereo.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraStereo.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include <rtabmap/core/camera/CameraStereoDC1394.h>
+
31#include <rtabmap/core/camera/CameraStereoFlyCapture2.h>
+
32#include <rtabmap/core/camera/CameraStereoImages.h>
+
33#include <rtabmap/core/camera/CameraStereoVideo.h>
+
34#include <rtabmap/core/camera/CameraStereoZed.h>
+
35#include <rtabmap/core/camera/CameraStereoZedOC.h>
+
36#include <rtabmap/core/camera/CameraStereoTara.h>
+
37#include <rtabmap/core/camera/CameraMyntEye.h>
+
38#include <rtabmap/core/camera/CameraDepthAI.h>
+
+ + + + diff --git a/preview/pr-1492/api/latest/CameraThread_8h_source.html b/preview/pr-1492/api/latest/CameraThread_8h_source.html new file mode 100644 index 00000000..b8c43200 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraThread_8h_source.html @@ -0,0 +1,124 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/CameraThread.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraThread.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/SensorCaptureThread.h"
+
+ + + + diff --git a/preview/pr-1492/api/latest/CameraVideo_8h_source.html b/preview/pr-1492/api/latest/CameraVideo_8h_source.html new file mode 100644 index 00000000..75372697 --- /dev/null +++ b/preview/pr-1492/api/latest/CameraVideo_8h_source.html @@ -0,0 +1,187 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera/CameraVideo.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CameraVideo.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include <opencv2/highgui/highgui.hpp>
+
31#include "rtabmap/core/Camera.h"
+
32
+
33namespace rtabmap
+
34{
+
35
+
+
36class RTABMAP_CORE_EXPORT CameraVideo :
+
37 public Camera
+
38{
+
39public:
+
40 enum Source{kVideoFile, kUsbDevice};
+
41
+
42public:
+
43 CameraVideo(int usbDevice = 0,
+
44 bool rectifyImages = false,
+
45 float imageRate = 0,
+
46 const Transform & localTransform = Transform::getIdentity());
+
47 CameraVideo(const std::string & filePath,
+
48 bool rectifyImages = false,
+
49 float imageRate = 0,
+
50 const Transform & localTransform = Transform::getIdentity());
+
51 virtual ~CameraVideo();
+
52
+
53 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
+
54 virtual bool isCalibrated() const;
+
55 virtual std::string getSerial() const;
+
56 int getUsbDevice() const {return _usbDevice;}
+
57 const std::string & getFilePath() const {return _filePath;}
+
58
+
64 void setResolution(int width, int height) {_width=width, _height=height;}
+
65 void setFOURCC(const std::string & fourcc) { _fourcc = fourcc; }
+
66
+
67protected:
+
68 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
69
+
70private:
+
71 // File type
+
72 std::string _filePath;
+
73 bool _rectifyImages;
+
74
+
75 cv::VideoCapture _capture;
+
76 Source _src;
+
77
+
78 // Usb camera
+
79 int _usbDevice;
+
80 std::string _guid;
+
81 int _width;
+
82 int _height;
+
83 std::string _fourcc;
+
84
+
85 CameraModel _model;
+
86};
+
+
87
+
88
+
89} // namespace rtabmap
+ +
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
void setResolution(int width, int height)
Definition CameraVideo.h:64
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+ +
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Camera_8h_source.html b/preview/pr-1492/api/latest/Camera_8h_source.html new file mode 100644 index 00000000..03fbcb1d --- /dev/null +++ b/preview/pr-1492/api/latest/Camera_8h_source.html @@ -0,0 +1,175 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Camera.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Camera.h
+
+
+
1/*
+
2Copyright (c) 2010-2022, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
31#include <rtabmap/core/SensorCapture.h>
+
32#include <rtabmap/core/IMU.h>
+
33
+
34namespace rtabmap
+
35{
+
36
+
37class IMUFilter;
+
38
+
+
43class RTABMAP_CORE_EXPORT Camera : public SensorCapture
+
44{
+
45public:
+
46 virtual ~Camera();
+
47
+
48 SensorData takeImage(SensorCaptureInfo * info = 0) {return takeData(info);}
+
49 float getImageRate() const {return getFrameRate();}
+
50 void setImageRate(float imageRate) {setFrameRate(imageRate);}
+
51 void setInterIMUPublishing(bool enabled, IMUFilter * filter = 0, bool baseFrameConversion = false); // Take ownership of filter
+
52 bool isInterIMUPublishing() const {return publishInterIMU_;}
+
53
+
54 bool initFromFile(const std::string & calibrationPath);
+
55 virtual bool isCalibrated() const = 0;
+
56
+
57protected:
+
64 Camera(float imageRate = 0, const Transform & localTransform = Transform::getIdentity());
+
65
+
66 virtual SensorData captureImage(SensorCaptureInfo * info = 0) = 0;
+
67
+
68 void postInterIMU(const IMU & imu, double stamp);
+
69
+
70private:
+
71 virtual SensorData captureData(SensorCaptureInfo * info = 0) {return captureImage(info);}
+
72
+
73private:
+
74 IMUFilter * imuFilter_;
+
75 bool publishInterIMU_;
+
76 bool imuBaseFrameConversion_;
+
77};
+
+
78
+
79
+
80} // namespace rtabmap
+ +
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())
+
Fuses gyroscope and accelerometer samples into an orientation quaternion.
Definition IMUFilter.h:59
+
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
+
Metadata structure for sensor data capture and processing.
+
Abstract base class for sensor data capture (cameras, lidars, etc.)
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/CloudMap_8h_source.html b/preview/pr-1492/api/latest/CloudMap_8h_source.html new file mode 100644 index 00000000..dac1d0e1 --- /dev/null +++ b/preview/pr-1492/api/latest/CloudMap_8h_source.html @@ -0,0 +1,167 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/global_map/CloudMap.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CloudMap.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_SRC_CLOUDMAP_H_
+
29#define CORELIB_SRC_CLOUDMAP_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/GlobalMap.h>
+
34
+
35#include <pcl/point_cloud.h>
+
36#include <pcl/point_types.h>
+
37
+
38namespace rtabmap {
+
39
+
+
40class RTABMAP_CORE_EXPORT CloudMap : public GlobalMap
+
41{
+
42public:
+
43 CloudMap(const LocalGridCache * cache, const ParametersMap & parameters = ParametersMap());
+
44
+
45 virtual void clear();
+
46
+
47 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & getMapGround() const {return assembledGround_;}
+
48 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & getMapObstacles() const {return assembledObstacles_;}
+
49 const pcl::PointCloud<pcl::PointXYZ>::Ptr & getMapEmptyCells() const {return assembledEmptyCells_;}
+
50
+
51 unsigned long getMemoryUsed() const;
+
52
+
53protected:
+
54 virtual void assemble(const std::list<std::pair<int, Transform> > & newPoses);
+
55
+
56private:
+
57 pcl::PointCloud<pcl::PointXYZRGB>::Ptr assembledGround_;
+
58 pcl::PointCloud<pcl::PointXYZRGB>::Ptr assembledObstacles_;
+
59 pcl::PointCloud<pcl::PointXYZ>::Ptr assembledEmptyCells_;
+
60};
+
+
61
+
62}
+
63
+
64#endif /* CORELIB_SRC_CLOUDMAP_H_ */
+ +
unsigned long getMemoryUsed() const
Approximate memory used by assembled-node bookkeeping (bytes).
+
virtual void clear()
Clears assembled nodes and grid bounds; does not clear LocalGridCache.
+
virtual void assemble(const std::list< std::pair< int, Transform > > &newPoses)
Subclass hook: merge newPoses into the global map; call addAssembledNode().
+
Abstract base for assembling per-node LocalGrid data into a global map.
Definition GlobalMap.h:56
+
Cache of LocalGrid entries keyed by map node id.
Definition LocalGrid.h:98
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Compression_8h_source.html b/preview/pr-1492/api/latest/Compression_8h_source.html new file mode 100644 index 00000000..30da129b --- /dev/null +++ b/preview/pr-1492/api/latest/Compression_8h_source.html @@ -0,0 +1,190 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Compression.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Compression.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef COMPRESSION_H_
+
29#define COMPRESSION_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/rvl_codec.h>
+
34#include <rtabmap/utilite/UThread.h>
+
35#include <opencv2/opencv.hpp>
+
36
+
37namespace rtabmap {
+
38
+
+
67class RTABMAP_CORE_EXPORT CompressionThread : public UThread
+
68{
+
69public:
+
75 CompressionThread(const cv::Mat & mat, const std::string & format = "");
+
81 CompressionThread(const cv::Mat & bytes, bool isImage);
+
83 const cv::Mat & getCompressedData() const {return compressedData_;}
+
85 cv::Mat & getUncompressedData() {return uncompressedData_;}
+
86protected:
+
87 virtual void mainLoop();
+
88private:
+
89 cv::Mat compressedData_;
+
90 cv::Mat uncompressedData_;
+
91 std::string format_;
+
92 bool image_;
+
93 bool compressMode_;
+
94};
+
+
95
+
97std::vector<unsigned char> RTABMAP_CORE_EXPORT compressImage(const cv::Mat & image, const std::string & format = ".png");
+
99cv::Mat RTABMAP_CORE_EXPORT compressImage2(const cv::Mat & image, const std::string & format = ".png");
+
100
+
102cv::Mat RTABMAP_CORE_EXPORT uncompressImage(const cv::Mat & bytes);
+
104cv::Mat RTABMAP_CORE_EXPORT uncompressImage(const std::vector<unsigned char> & bytes);
+
105
+
107std::vector<unsigned char> RTABMAP_CORE_EXPORT compressData(const cv::Mat & data);
+
109cv::Mat RTABMAP_CORE_EXPORT compressData2(const cv::Mat & data);
+
110
+
112cv::Mat RTABMAP_CORE_EXPORT uncompressData(const cv::Mat & bytes);
+
114cv::Mat RTABMAP_CORE_EXPORT uncompressData(const std::vector<unsigned char> & bytes);
+
116cv::Mat RTABMAP_CORE_EXPORT uncompressData(const unsigned char * bytes, unsigned long size);
+
117
+
119cv::Mat RTABMAP_CORE_EXPORT compressString(const std::string & str);
+
121std::string RTABMAP_CORE_EXPORT uncompressString(const cv::Mat & bytes);
+
122
+
127std::string RTABMAP_CORE_EXPORT compressedDepthFormat(const cv::Mat & bytes);
+
129std::string RTABMAP_CORE_EXPORT compressedDepthFormat(const std::vector<unsigned char> & bytes);
+
131std::string RTABMAP_CORE_EXPORT compressedDepthFormat(const unsigned char * bytes, size_t size);
+
132
+
133} /* namespace rtabmap */
+
134#endif /* COMPRESSION_H_ */
+ +
Background thread to compress or uncompress images and generic matrices.
Definition Compression.h:68
+ +
const cv::Mat & getCompressedData() const
Definition Compression.h:83
+
CompressionThread(const cv::Mat &mat, const std::string &format="")
Constructs a thread in compress mode.
+
CompressionThread(const cv::Mat &bytes, bool isImage)
Constructs a thread in uncompress mode.
+
cv::Mat & getUncompressedData()
Definition Compression.h:85
+ +
cv::Mat RTABMAP_CORE_EXPORT uncompressImage(const cv::Mat &bytes)
Decodes compressed image bytes to a @cv::Mat.
+
cv::Mat RTABMAP_CORE_EXPORT compressString(const std::string &str)
Compresses a null-terminated string using compressData2().
+
std::vector< unsigned char > RTABMAP_CORE_EXPORT compressImage(const cv::Mat &image, const std::string &format=".png")
Encodes image to a byte buffer (OpenCV imencode or RVL for depth).
+
std::string RTABMAP_CORE_EXPORT compressedDepthFormat(const cv::Mat &bytes)
Detects the compression format of depth image bytes.
+
cv::Mat RTABMAP_CORE_EXPORT uncompressData(const cv::Mat &bytes)
Restores a matrix compressed with compressData() or compressData2().
+
std::vector< unsigned char > RTABMAP_CORE_EXPORT compressData(const cv::Mat &data)
Compresses a matrix with zlib; appends rows, cols and type at the end.
+
std::string RTABMAP_CORE_EXPORT uncompressString(const cv::Mat &bytes)
Decompresses a string produced by compressString().
+
cv::Mat RTABMAP_CORE_EXPORT compressImage2(const cv::Mat &image, const std::string &format=".png")
Same as compressImage() but returns a CV_8UC1 row matrix.
+
cv::Mat RTABMAP_CORE_EXPORT compressData2(const cv::Mat &data)
Same as compressData() but returns a CV_8UC1 row matrix.
+
+ + + + diff --git a/preview/pr-1492/api/latest/DBDriverSqlite3_8h_source.html b/preview/pr-1492/api/latest/DBDriverSqlite3_8h_source.html new file mode 100644 index 00000000..b6febb50 --- /dev/null +++ b/preview/pr-1492/api/latest/DBDriverSqlite3_8h_source.html @@ -0,0 +1,343 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/DBDriverSqlite3.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
DBDriverSqlite3.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef DBDRIVERSQLITE3_H_
+
29#define DBDRIVERSQLITE3_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32#include "rtabmap/core/DBDriver.h"
+
33#if CV_MAJOR_VERSION < 5
+
34#include <opencv2/features2d/features2d.hpp>
+
35#else
+
36#include <opencv2/features.hpp>
+
37#endif
+
38
+
39typedef struct sqlite3_stmt sqlite3_stmt;
+
40typedef struct sqlite3 sqlite3;
+
41
+
42namespace rtabmap {
+
43
+
+
70class RTABMAP_CORE_EXPORT DBDriverSqlite3: public DBDriver {
+
71public:
+
76 DBDriverSqlite3(const ParametersMap & parameters = ParametersMap());
+
77 virtual ~DBDriverSqlite3();
+
78
+
80 virtual void parseParameters(const ParametersMap & parameters);
+
85 virtual bool isInMemory() const {return getUrl().empty() || _dbInMemory;}
+
90 void setDbInMemory(bool dbInMemory);
+
110 void setJournalMode(int journalMode);
+
111
+
123 void setCacheSize(unsigned int cacheSize);
+
124
+
140 void setSynchronous(int synchronous);
+
141
+
156 void setTempStore(int tempStore);
+
157
+
158protected:
+
159 virtual bool connectDatabaseQuery(const std::string & url, bool overwritten = false, bool readOnly = false);
+
160 virtual void disconnectDatabaseQuery(bool save = true, const std::string & outputUrl = "");
+
161 virtual bool isConnectedQuery() const;
+
162 virtual unsigned long getMemoryUsedQuery() const; // In bytes
+
163 virtual bool getDatabaseVersionQuery(std::string & version) const;
+
164 virtual long getNodesMemoryUsedQuery() const;
+
165 virtual long getLinksMemoryUsedQuery() const;
+
166 virtual long getImagesMemoryUsedQuery() const;
+
167 virtual long getDepthImagesMemoryUsedQuery() const;
+
168 virtual long getCalibrationsMemoryUsedQuery() const;
+
169 virtual long getGridsMemoryUsedQuery() const;
+
170 virtual long getLaserScansMemoryUsedQuery() const;
+
171 virtual long getUserDataMemoryUsedQuery() const;
+
172 virtual long getWordsMemoryUsedQuery() const;
+
173 virtual long getFeaturesMemoryUsedQuery() const;
+
174 virtual long getStatisticsMemoryUsedQuery() const;
+
175 virtual int getLastNodesSizeQuery() const;
+
176 virtual int getLastDictionarySizeQuery() const;
+
177 virtual int getTotalNodesSizeQuery() const;
+
178 virtual int getTotalDictionarySizeQuery() const;
+
179 virtual ParametersMap getLastParametersQuery() const;
+
180 virtual std::map<std::string, float> getStatisticsQuery(int nodeId, double & stamp, std::vector<int> * wmState) const;
+
181 virtual std::map<int, std::pair<std::map<std::string, float>, double> > getAllStatisticsQuery() const;
+
182 virtual std::map<int, std::vector<int> > getAllStatisticsWmStatesQuery() const;
+
183
+
184 virtual void executeNoResultQuery(const std::string & sql) const;
+
185
+
186 virtual void getWeightQuery(int signatureId, int & weight) const;
+
187
+
188 virtual void saveQuery(const std::list<Signature *> & signatures);
+
189 virtual void saveQuery(const std::list<VisualWord *> & words) const;
+
190 virtual void updateQuery(const std::list<Signature *> & signatures, bool updateTimestamp) const;
+
191 virtual void updateQuery(const std::list<VisualWord *> & words, bool updateTimestamp) const;
+
192
+
193 virtual void addLinkQuery(const Link & link) const;
+
194 virtual void updateLinkQuery(const Link & link) const;
+
195
+
196 virtual void updateOccupancyGridQuery(
+
197 int nodeId,
+
198 const cv::Mat & ground,
+
199 const cv::Mat & obstacles,
+
200 const cv::Mat & empty,
+
201 float cellSize,
+
202 const cv::Point3f & viewpoint) const;
+
203
+
204 virtual void updateCalibrationQuery(
+
205 int nodeId,
+
206 const std::vector<CameraModel> & models,
+
207 const std::vector<StereoCameraModel> & stereoModels) const;
+
208
+
209 virtual void updateDepthImageQuery(
+
210 int nodeId,
+
211 const cv::Mat & image,
+
212 const std::string & format) const;
+
213
+
214 void updateLaserScanQuery(
+
215 int nodeId,
+
216 const LaserScan & scan) const;
+
217
+
218 virtual void addStatisticsQuery(const Statistics & statistics, bool saveWmState) const;
+
219 virtual void savePreviewImageQuery(const cv::Mat & image) const;
+
220 virtual cv::Mat loadPreviewImageQuery() const;
+
221 virtual void saveOptimizedPosesQuery(const std::map<int, Transform> & optimizedPoses, const Transform & lastlocalizationPose) const;
+
222 virtual std::map<int, Transform> loadOptimizedPosesQuery(Transform * lastlocalizationPose = 0) const;
+
223 virtual void save2DMapQuery(const cv::Mat & map, float xMin, float yMin, float cellSize) const;
+
224 virtual cv::Mat load2DMapQuery(float & xMin, float & yMin, float & cellSize) const;
+
225 virtual void saveOptimizedMeshQuery(
+
226 const cv::Mat & cloud,
+
227 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & polygons,
+
228#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
+
229 const std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > & texCoords,
+
230#else
+
231 const std::vector<std::vector<Eigen::Vector2f> > & texCoords,
+
232#endif
+
233 const cv::Mat & textures) const;
+
234 virtual cv::Mat loadOptimizedMeshQuery(
+
235 std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > * polygons,
+
236#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
+
237 std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > * texCoords,
+
238#else
+
239 std::vector<std::vector<Eigen::Vector2f> > * texCoords,
+
240#endif
+
241 cv::Mat * textures) const;
+
242
+
243 virtual void saveFlannIndexQuery(const std::vector<unsigned char> & indexData) const;
+
244
+
245 // Load objects
+
246 virtual void loadQuery(VWDictionary & dictionary, bool lastStateOnly = true, bool idsOnly = false) const;
+
247 virtual void loadLastNodesQuery(std::list<Signature *> & signatures, bool loadWordIdsOnly) const;
+
248 virtual void loadSignaturesQuery(const std::list<int> & ids, std::list<Signature *> & signatures, bool loadWordIdsOnly) const;
+
249 virtual void loadWordsQuery(const std::set<int> & wordIds, std::list<VisualWord *> & vws) const;
+
250 virtual void loadLinksQuery(int signatureId, std::multimap<int, Link> & links, Link::Type type = Link::kUndef) const;
+
251
+
252 virtual void loadNodeDataQuery(std::list<Signature *> & signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const;
+
253 virtual bool getCalibrationQuery(int signatureId, std::vector<CameraModel> & models, std::vector<StereoCameraModel> & stereoModels) const;
+
254 virtual bool getLaserScanInfoQuery(int signatureId, LaserScan & info) const;
+
255 virtual bool getNodeInfoQuery(int signatureId, Transform & pose, int & mapId, int & weight, std::string & label, double & stamp, Transform & groundTruthPose, std::vector<float> & velocity, GPS & gps, EnvSensors & sensors) const;
+
256 virtual void getLocalFeaturesQuery(int signatureId, std::multimap<int, int> & words, std::vector<cv::KeyPoint> & keypoints, std::vector<cv::Point3f> & points, cv::Mat & descriptors) const;
+
257 virtual void getLastNodeIdsQuery(std::set<int> & ids) const;
+
258 virtual void getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildren, bool ignoreBadSignatures, bool ignoreIntermediateNodes) const;
+
259 virtual void getAllOdomPosesQuery(std::map<int, Transform> & poses, bool ignoreChildren, bool ignoreIntermediateNodes) const;
+
260 virtual void getAllLinksQuery(std::multimap<int, Link> & links, bool ignoreNullLinks, bool withLandmarks) const;
+
261 virtual void getLastIdQuery(const std::string & tableName, int & id, const std::string & fieldName="id") const;
+
262 virtual void getInvertedIndexNiQuery(int signatureId, int & ni) const;
+
263 virtual void getNodesObservingLandmarkQuery(int landmarkId, std::map<int, Link> & nodes) const;
+
264 virtual void getNodeIdByLabelQuery(const std::string & label, int & id) const;
+
265 virtual void getAllLabelsQuery(std::map<int, std::string> & labels) const;
+
266
+
267private:
+
268 std::string queryStepNode() const;
+
269 std::string queryStepImage() const;
+
270 std::string queryStepDepth() const;
+
271 std::string queryStepCalibrationUpdate() const;
+
272 std::string queryStepDepthUpdate() const;
+
273 std::string queryStepScanUpdate() const;
+
274 std::string queryStepSensorData() const;
+
275 std::string queryStepLinkUpdate() const;
+
276 std::string queryStepLink() const;
+
277 std::string queryStepWordsChanged() const;
+
278 std::string queryStepKeypoint() const;
+
279 std::string queryStepGlobalDescriptor() const;
+
280 std::string queryStepOccupancyGridUpdate() const;
+
281 void stepNode(sqlite3_stmt * ppStmt, const Signature * s) const;
+
282 void stepImage(sqlite3_stmt * ppStmt, int id, const cv::Mat & imageBytes) const;
+
283 void stepDepth(sqlite3_stmt * ppStmt, const SensorData & sensorData) const;
+
284 void stepCalibrationUpdate(sqlite3_stmt * ppStmt, int nodeId, const std::vector<CameraModel> & models, const std::vector<StereoCameraModel> & stereoModels) const;
+
285 void stepDepthUpdate(sqlite3_stmt * ppStmt, int nodeId, const cv::Mat & image, const std::string & format) const;
+
286 void stepScanUpdate(sqlite3_stmt * ppStmt, int nodeId, const LaserScan & image) const;
+
287 void stepSensorData(sqlite3_stmt * ppStmt, const SensorData & sensorData) const;
+
288 void stepLink(sqlite3_stmt * ppStmt, const Link & link) const;
+
289 void stepWordsChanged(sqlite3_stmt * ppStmt, int signatureId, int oldWordId, int newWordId) const;
+
290 void stepKeypoint(sqlite3_stmt * ppStmt, int nodeID, int wordId, const cv::KeyPoint & kp, const cv::Point3f & pt, const cv::Mat & descriptor) const;
+
291 void stepGlobalDescriptor(sqlite3_stmt * ppStmt, int nodeId, const GlobalDescriptor & descriptor) const;
+
292 void stepOccupancyGridUpdate(sqlite3_stmt * ppStmt,
+
293 int nodeId,
+
294 const cv::Mat & ground,
+
295 const cv::Mat & obstacles,
+
296 const cv::Mat & empty,
+
297 float cellSize,
+
298 const cv::Point3f & viewpoint) const;
+
299
+
300private:
+
301 void loadWordsQuery(std::list<Signature *> & signatures) const;
+
302 void loadWordIdsQuery(std::list<Signature *> & signatures) const;
+
303 void loadLinksQuery(std::list<Signature *> & signatures) const;
+
304 int loadOrSaveDb(sqlite3 *pInMemory, const std::string & fileName, int isSave) const;
+
305
+
306protected:
+
307 sqlite3 * _ppDb;
+
308 std::string _version;
+
309
+
310private:
+
311 unsigned long _memoryUsedEstimate;
+
312 bool _dbInMemory;
+
313 unsigned int _cacheSize;
+
314 int _journalMode;
+
315 int _synchronous;
+
316 int _tempStore;
+
317};
+
+
318
+
319}
+
320
+
321#endif /* DBDRIVERSQLITE3_H_ */
+
SQLite3 implementation of DBDriver for RTAB-Map map databases.
+
void setDbInMemory(bool dbInMemory)
Enable or disable in-memory mode. If connected, the connection is closed and reopened with the new mo...
+
sqlite3 * _ppDb
Open SQLite connection (null when disconnected)
+
std::string _version
Schema version read from the database.
+
void setSynchronous(int synchronous)
Set how aggressively SQLite syncs the database file to disk (PRAGMA synchronous).
+
DBDriverSqlite3(const ParametersMap &parameters=ParametersMap())
Construct driver with optional SQLite-specific parameters.
+
void setTempStore(int tempStore)
Set where SQLite stores temporary tables and indices (PRAGMA temp_store).
+
virtual void parseParameters(const ParametersMap &parameters)
Apply SQLite parameters from the map; forwards to DBDriver::parseParameters().
+
void setJournalMode(int journalMode)
Set SQLite rollback journal mode (PRAGMA journal_mode).
+
virtual bool isInMemory() const
True when the database runs in RAM instead of on disk.
+
void setCacheSize(unsigned int cacheSize)
Set the number of database pages kept in SQLite's page cache (PRAGMA cache_size).
+
Abstract database driver for RTAB-Map maps (signatures, links, words, statistics).
Definition DBDriver.h:72
+
WGS84 GPS fix attached to a sensor sample or graph node.
Definition GPS.h:47
+ +
Represents 2D or 3D laser scan data with support for multiple point data formats.
Definition LaserScan.h:46
+ + +
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Collects and manages runtime statistics for RTAB-Map.
Definition Statistics.h:108
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
Manages a dictionary of visual words for visual place recognition and loop closure detection.
+ +
std::map< EnvSensor::Type, EnvSensor > EnvSensors
Map of environmental readings keyed by EnvSensor::Type (at most one per type).
Definition EnvSensor.h:114
+
+ + + + diff --git a/preview/pr-1492/api/latest/DBDriver_8h_source.html b/preview/pr-1492/api/latest/DBDriver_8h_source.html new file mode 100644 index 00000000..35330116 --- /dev/null +++ b/preview/pr-1492/api/latest/DBDriver_8h_source.html @@ -0,0 +1,456 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/DBDriver.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
DBDriver.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef DBDRIVER_H_
+
29#define DBDRIVER_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <string>
+
34#include <list>
+
35#include <map>
+
36#include <set>
+
37#include <opencv2/core/core.hpp>
+
38#include "rtabmap/utilite/UMutex.h"
+
39#include "rtabmap/utilite/UThreadNode.h"
+
40#include "rtabmap/core/Parameters.h"
+
41#include "rtabmap/core/SensorData.h"
+
42#include <rtabmap/core/Statistics.h>
+
43
+
44#include <rtabmap/core/Transform.h>
+
45#include <rtabmap/core/Link.h>
+
46
+
47namespace rtabmap {
+
48
+
49class Signature;
+
50class VWDictionary;
+
51class VisualWord;
+
52
+
+
71class RTABMAP_CORE_EXPORT DBDriver : public UThreadNode
+
72{
+
73public:
+
79 static DBDriver * create(const ParametersMap & parameters = ParametersMap());
+
80
+
81public:
+
82 virtual ~DBDriver();
+
83
+
85 virtual void parseParameters(const ParametersMap & parameters);
+
90 virtual bool isInMemory() const {return _url.empty();}
+
92 const std::string & getUrl() const {return _url;}
+
94 const std::string & getTargetVersion() const {return _targetVersion;}
+
95
+ + +
104 void emptyTrashes(bool async = false);
+
105 double getEmptyTrashesTime() const {return _emptyTrashesTime;}
+
106 void setTimestampUpdateEnabled(bool enabled) {_timestampUpdate = enabled;} // used on Update Signature and Word queries
+
107
+ +
116 const std::string & fileName,
+
117 const std::set<int> & ids = std::set<int>(),
+
118 const std::map<int, Signature *> & otherSignatures = std::map<int, Signature *>());
+
119
+
126 void addLink(const Link & link);
+
128 void removeLink(int from, int to);
+
130 void updateLink(const Link & link);
+ +
139 int nodeId,
+
140 const cv::Mat & ground,
+
141 const cv::Mat & obstacles,
+
142 const cv::Mat & empty,
+
143 float cellSize,
+
144 const cv::Point3f & viewpoint);
+ +
147 int nodeId,
+
148 const std::vector<CameraModel> & models,
+
149 const std::vector<StereoCameraModel> & stereoModels);
+
156 void updateDepthImage(int nodeId, const cv::Mat & image, const std::string & format);
+
162 void updateLaserScan(int nodeId, const LaserScan & scan);
+
165public:
+
170 void addInfoAfterRun(int stMemSize, int lastSignAdded, int processMemUsed, int databaseMemUsed, int dictionarySize, const ParametersMap & parameters) const;
+
176 void addStatistics(const Statistics & statistics, bool saveWmState) const;
+
182 void savePreviewImage(const cv::Mat & image) const;
+
184 cv::Mat loadPreviewImage() const;
+
186 void saveOptimizedPoses(const std::map<int, Transform> & optimizedPoses, const Transform & lastlocalizationPose) const;
+
188 std::map<int, Transform> loadOptimizedPoses(Transform * lastlocalizationPose = 0) const;
+
190 void save2DMap(const cv::Mat & map, float xMin, float yMin, float cellSize) const;
+
192 cv::Mat load2DMap(float & xMin, float & yMin, float & cellSize) const;
+ +
201 const cv::Mat & cloud,
+
202 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & polygons = std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > >(), // Textures -> polygons -> vertices
+
203#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
+
204 const std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > & texCoords = std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > >(), // Textures -> uv coords for each vertex of the polygons
+
205#else
+
206 const std::vector<std::vector<Eigen::Vector2f> > & texCoords = std::vector<std::vector<Eigen::Vector2f> >(), // Textures -> uv coords for each vertex of the polygons
+
207#endif
+
208 const cv::Mat & textures = cv::Mat()) const; // concatenated textures (assuming square textures with all same size);
+
209 cv::Mat loadOptimizedMesh(
+
210 std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > * polygons = 0,
+
211#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
+
212 std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > * texCoords = 0,
+
213#else
+
214 std::vector<std::vector<Eigen::Vector2f> > * texCoords = 0,
+
215#endif
+
216 cv::Mat * textures = 0) const;
+
222 void saveFlannIndex(const std::vector<unsigned char> & indexData) const;
+
225public:
+
231 bool openConnection(const std::string & url, bool overwritten = false, bool readOnly = false);
+
233 void closeConnection(bool save = true, const std::string & outputUrl = "");
+
235 bool isConnected() const;
+
236 unsigned long getMemoryUsed() const; // In bytes
+
238 std::string getDatabaseVersion() const;
+
239 long getNodesMemoryUsed() const;
+
240 long getLinksMemoryUsed() const;
+
241 long getImagesMemoryUsed() const;
+
242 long getDepthImagesMemoryUsed() const;
+
243 long getCalibrationsMemoryUsed() const;
+
244 long getGridsMemoryUsed() const;
+
245 long getLaserScansMemoryUsed() const;
+
246 long getUserDataMemoryUsed() const;
+
247 long getWordsMemoryUsed() const;
+
248 long getFeaturesMemoryUsed() const;
+
249 long getStatisticsMemoryUsed() const;
+
250 int getLastNodesSize() const; // working memory
+
251 int getLastDictionarySize() const; // working memory
+
252 int getTotalNodesSize() const;
+
253 int getTotalDictionarySize() const;
+
254 ParametersMap getLastParameters() const;
+
255 std::map<std::string, float> getStatistics(int nodeId, double & stamp, std::vector<int> * wmState=0) const;
+
256 std::map<int, std::pair<std::map<std::string, float>, double> > getAllStatistics() const;
+
257 std::map<int, std::vector<int> > getAllStatisticsWmStates() const;
+
258
+
275 void executeNoResult(const std::string & sql) const;
+
276
+
282 // Load objects
+
283 void load(VWDictionary & dictionary, bool lastStateOnly = true, bool idsOnly = false) const;
+
284 void loadLastNodes(std::list<Signature *> & signatures, bool loadWordIdsOnly = false) const; // returned signatures must be freed after usage
+
286 Signature * loadSignature(int id, bool * loadedFromTrash = 0); // returned signature must be freed after usage, call loadSignatures() instead if more than one signature should be loaded
+
287 void loadSignatures(const std::list<int> & ids, std::list<Signature *> & signatures, std::set<int> * loadedFromTrash = 0, bool loadWordIdsOnly = false); // returned signatures must be freed after usage
+
288 void loadWords(const std::set<int> & wordIds, std::list<VisualWord *> & vws); // returned words must be freed after usage
+
289
+
290 // Specific queries...
+
291 void loadNodeData(Signature & signature, bool images = true, bool scan = true, bool userData = true, bool occupancyGrid = true) const;
+
292 void loadNodeData(std::list<Signature *> & signatures, bool images = true, bool scan = true, bool userData = true, bool occupancyGrid = true) const;
+
293 void getNodeData(int signatureId, SensorData & data, bool images = true, bool scan = true, bool userData = true, bool occupancyGrid = true) const;
+
294 bool getCalibration(int signatureId, std::vector<CameraModel> & models, std::vector<StereoCameraModel> & stereoModels) const;
+
295 bool getLaserScanInfo(int signatureId, LaserScan & info) const;
+
296 bool getNodeInfo(int signatureId, Transform & pose, int & mapId, int & weight, std::string & label, double & stamp, Transform & groundTruthPose, std::vector<float> & velocity, GPS & gps, EnvSensors & sensors) const;
+
297 void getLocalFeatures(int signatureId, std::multimap<int, int> & words, std::vector<cv::KeyPoint> & keypoints, std::vector<cv::Point3f> & points, cv::Mat & descriptors) const;
+
299 void loadLinks(int signatureId, std::multimap<int, Link> & links, Link::Type type = Link::kUndef) const;
+
300 void getWeight(int signatureId, int & weight) const;
+
301 void getLastNodeIds(std::set<int> & ids) const;
+
302 void getAllNodeIds(std::set<int> & ids, bool ignoreChildren = false, bool ignoreBadSignatures = false, bool ignoreIntermediateNodes = false) const;
+
303 void getAllOdomPoses(std::map<int, Transform> & poses, bool ignoreChildren = false, bool ignoreIntermediateNodes = false) const;
+
304 void getAllLinks(std::multimap<int, Link> & links, bool ignoreNullLinks = true, bool withLandmarks = false) const;
+
305 void getLastNodeId(int & id) const;
+
306 void getLastMapId(int & mapId) const;
+
307 void getLastWordId(int & id) const;
+
308 void getInvertedIndexNi(int signatureId, int & ni) const;
+
309 void getNodesObservingLandmark(int landmarkId, std::map<int, Link> & nodes) const;
+
310 void getNodeIdByLabel(const std::string & label, int & id) const;
+
311 void getAllLabels(std::map<int, std::string> & labels) const;
+
314protected:
+
318 DBDriver(const ParametersMap & parameters = ParametersMap());
+
319
+
324 virtual bool connectDatabaseQuery(const std::string & url, bool overwritten = false, bool readOnly = false) = 0;
+
325 virtual void disconnectDatabaseQuery(bool save = true, const std::string & outputUrl = "") = 0;
+
326 virtual bool isConnectedQuery() const = 0;
+
327 virtual unsigned long getMemoryUsedQuery() const = 0; // In bytes
+
328 virtual bool getDatabaseVersionQuery(std::string & version) const = 0;
+
329 virtual long getNodesMemoryUsedQuery() const = 0;
+
330 virtual long getLinksMemoryUsedQuery() const = 0;
+
331 virtual long getImagesMemoryUsedQuery() const = 0;
+
332 virtual long getDepthImagesMemoryUsedQuery() const = 0;
+
333 virtual long getCalibrationsMemoryUsedQuery() const = 0;
+
334 virtual long getGridsMemoryUsedQuery() const = 0;
+
335 virtual long getLaserScansMemoryUsedQuery() const = 0;
+
336 virtual long getUserDataMemoryUsedQuery() const = 0;
+
337 virtual long getWordsMemoryUsedQuery() const = 0;
+
338 virtual long getFeaturesMemoryUsedQuery() const = 0;
+
339 virtual long getStatisticsMemoryUsedQuery() const = 0;
+
340 virtual int getLastNodesSizeQuery() const = 0;
+
341 virtual int getLastDictionarySizeQuery() const = 0;
+
342 virtual int getTotalNodesSizeQuery() const = 0;
+
343 virtual int getTotalDictionarySizeQuery() const = 0;
+
344 virtual ParametersMap getLastParametersQuery() const = 0;
+
345 virtual std::map<std::string, float> getStatisticsQuery(int nodeId, double & stamp, std::vector<int> * wmState) const = 0;
+
346 virtual std::map<int, std::pair<std::map<std::string, float>, double> > getAllStatisticsQuery() const = 0;
+
347 virtual std::map<int, std::vector<int> > getAllStatisticsWmStatesQuery() const = 0;
+
348
+
349 virtual void executeNoResultQuery(const std::string & sql) const = 0;
+
350
+
351 virtual void getWeightQuery(int signatureId, int & weight) const = 0;
+
352
+
353 virtual void saveQuery(const std::list<Signature *> & signatures) = 0;
+
354 virtual void saveQuery(const std::list<VisualWord *> & words) const = 0;
+
355 virtual void updateQuery(const std::list<Signature *> & signatures, bool updateTimestamp) const = 0;
+
356 virtual void updateQuery(const std::list<VisualWord *> & words, bool updateTimestamp) const = 0;
+
357
+
358 virtual void addLinkQuery(const Link & link) const = 0;
+
359 virtual void updateLinkQuery(const Link & link) const = 0;
+
360
+
361 virtual void updateOccupancyGridQuery(
+
362 int nodeId,
+
363 const cv::Mat & ground,
+
364 const cv::Mat & obstacles,
+
365 const cv::Mat & empty,
+
366 float cellSize,
+
367 const cv::Point3f & viewpoint) const = 0;
+
368
+
369 virtual void updateCalibrationQuery(
+
370 int nodeId,
+
371 const std::vector<CameraModel> & models,
+
372 const std::vector<StereoCameraModel> & stereoModels) const = 0;
+
373
+
374 virtual void updateDepthImageQuery(
+
375 int nodeId,
+
376 const cv::Mat & image,
+
377 const std::string & format) const = 0;
+
378
+
379 virtual void updateLaserScanQuery(
+
380 int nodeId,
+
381 const LaserScan & scan) const = 0;
+
382
+
383 virtual void addStatisticsQuery(const Statistics & statistics, bool saveWmState) const = 0;
+
384 virtual void savePreviewImageQuery(const cv::Mat & image) const = 0;
+
385 virtual cv::Mat loadPreviewImageQuery() const = 0;
+
386 virtual void saveOptimizedPosesQuery(const std::map<int, Transform> & optimizedPoses, const Transform & lastlocalizationPose) const = 0;
+
387 virtual std::map<int, Transform> loadOptimizedPosesQuery(Transform * lastlocalizationPose = 0) const = 0;
+
388 virtual void save2DMapQuery(const cv::Mat & map, float xMin, float yMin, float cellSize) const = 0;
+
389 virtual cv::Mat load2DMapQuery(float & xMin, float & yMin, float & cellSize) const = 0;
+
390 virtual void saveOptimizedMeshQuery(
+
391 const cv::Mat & cloud,
+
392 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & polygons,
+
393#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
+
394 const std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > & texCoords,
+
395#else
+
396 const std::vector<std::vector<Eigen::Vector2f> > & texCoords,
+
397#endif
+
398 const cv::Mat & textures) const = 0;
+
399 virtual cv::Mat loadOptimizedMeshQuery(
+
400 std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > * polygons,
+
401#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
+
402 std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > * texCoords,
+
403#else
+
404 std::vector<std::vector<Eigen::Vector2f> > * texCoords,
+
405#endif
+
406 cv::Mat * textures) const = 0;
+
407 virtual void saveFlannIndexQuery(const std::vector<unsigned char> & indexData) const = 0;
+
408
+
409 // Load objects
+
410 virtual void loadQuery(VWDictionary & dictionary, bool lastStateOnly = true, bool idsOnly = false) const = 0;
+
411 virtual void loadLastNodesQuery(std::list<Signature *> & signatures, bool loadWordIdsOnly) const = 0;
+
412 virtual void loadSignaturesQuery(const std::list<int> & ids, std::list<Signature *> & signatures, bool loadWordIdsOnly) const = 0;
+
413 virtual void loadWordsQuery(const std::set<int> & wordIds, std::list<VisualWord *> & vws) const = 0;
+
414 virtual void loadLinksQuery(int signatureId, std::multimap<int, Link> & links, Link::Type type = Link::kUndef) const = 0;
+
415
+
416 virtual void loadNodeDataQuery(std::list<Signature *> & signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const = 0;
+
417 virtual bool getCalibrationQuery(int signatureId, std::vector<CameraModel> & models, std::vector<StereoCameraModel> & stereoModels) const = 0;
+
418 virtual bool getLaserScanInfoQuery(int signatureId, LaserScan & info) const = 0;
+
419 virtual bool getNodeInfoQuery(int signatureId, Transform & pose, int & mapId, int & weight, std::string & label, double & stamp, Transform & groundTruthPose, std::vector<float> & velocity, GPS & gps, EnvSensors & sensors) const = 0;
+
420 virtual void getLocalFeaturesQuery(int signatureId, std::multimap<int, int> & words, std::vector<cv::KeyPoint> & keypoints, std::vector<cv::Point3f> & points, cv::Mat & descriptors) const = 0;
+
421 virtual void getLastNodeIdsQuery(std::set<int> & ids) const = 0;
+
422 virtual void getAllNodeIdsQuery(std::set<int> & ids, bool ignoreChildren, bool ignoreBadSignatures, bool ignoreIntermediateNodes) const = 0;
+
423 virtual void getAllOdomPosesQuery(std::map<int, Transform> & poses, bool ignoreChildren, bool ignoreIntermediateNodes) const = 0;
+
424 virtual void getAllLinksQuery(std::multimap<int, Link> & links, bool ignoreNullLinks, bool withLandmarks) const = 0;
+
425 virtual void getLastIdQuery(const std::string & tableName, int & id, const std::string & fieldName="id") const = 0;
+
426 virtual void getInvertedIndexNiQuery(int signatureId, int & ni) const = 0;
+
427 virtual void getNodesObservingLandmarkQuery(int landmarkId, std::map<int, Link> & nodes) const = 0;
+
428 virtual void getNodeIdByLabelQuery(const std::string & label, int & id) const = 0;
+
429 virtual void getAllLabelsQuery(std::map<int, std::string> & labels) const = 0;
+
432private:
+
434 void beginTransaction() const;
+
436 void commit() const;
+
437
+
438 //non-abstract methods
+
439 void saveOrUpdate(const std::vector<Signature *> & signatures);
+
440 void saveOrUpdate(const std::vector<VisualWord *> & words) const;
+
441
+
442 //thread stuff
+
443 virtual void mainLoop();
+
444
+
445private:
+
446 UMutex _transactionMutex;
+
447 std::map<int, Signature *> _trashSignatures;//<id, Signature*>
+
448 std::map<int, VisualWord *> _trashVisualWords; //<id, VisualWord*>
+
449 UMutex _trashesMutex;
+
450 UMutex _dbSafeAccessMutex;
+
451 USemaphore _addSem;
+
452 double _emptyTrashesTime;
+
453 std::string _url;
+
454 std::string _targetVersion;
+
455 bool _timestampUpdate;
+
456};
+
+
457
+
458}
+
459
+
460#endif /* DBDRIVER_H_ */
+ + + +
Abstract database driver for RTAB-Map maps (signatures, links, words, statistics).
Definition DBDriver.h:72
+
Signature * loadSignature(int id, bool *loadedFromTrash=0)
Load one signature by id; caller must delete the returned pointer.
+
virtual bool isInMemory() const
True when no database file URL was set at open time.
Definition DBDriver.h:90
+
static DBDriver * create(const ParametersMap &parameters=ParametersMap())
Factory: returns a SQLite database driver (DBDriverSqlite3).
+
void saveOptimizedMesh(const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) const
Persist the global optimized 3D mesh to the database.
+
void updateOccupancyGrid(int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewpoint)
Update occupancy grid cells for a node.
+
void saveFlannIndex(const std::vector< unsigned char > &indexData) const
Persist the visual word dictionary FLANN index (serialized blob).
+
void updateDepthImage(int nodeId, const cv::Mat &image, const std::string &format)
Update the depth image stored for a node.
+
virtual void parseParameters(const ParametersMap &parameters)
Parse driver parameters from the map (e.g. target schema version).
+
const std::string & getTargetVersion() const
Definition DBDriver.h:94
+
void addStatistics(const Statistics &statistics, bool saveWmState) const
Append a Statistics record for a processed node.
+
void save2DMap(const cv::Mat &map, float xMin, float yMin, float cellSize) const
Save the assembled 2D occupancy grid and its origin metadata.
+
DBDriver(const ParametersMap &parameters=ParametersMap())
Protected constructor for subclasses.
+
void updateCalibration(int nodeId, const std::vector< CameraModel > &models, const std::vector< StereoCameraModel > &stereoModels)
Update camera calibration stored for a node.
+
std::map< int, Transform > loadOptimizedPoses(Transform *lastlocalizationPose=0) const
Load optimized poses; optional last localization pose output.
+
const std::string & getUrl() const
Definition DBDriver.h:92
+
bool isConnected() const
+
void removeLink(int from, int to)
Remove a link between two nodes.
+
void updateLaserScan(int nodeId, const LaserScan &scan)
Update the laser scan stored for a node.
+
void savePreviewImage(const cv::Mat &image) const
Save the map preview thumbnail in the Admin table.
+
void executeNoResult(const std::string &sql) const
Run a SQL statement that does not return result rows.
+
void asyncSave(VisualWord *vw)
Queue a visual word for deferred save; ownership is transferred.
+
void updateLink(const Link &link)
Update an existing link in the database.
+
std::string getDatabaseVersion() const
+
cv::Mat loadPreviewImage() const
Load and uncompress the map preview thumbnail from the Admin table.
+
cv::Mat load2DMap(float &xMin, float &yMin, float &cellSize) const
Load the 2D map and fill origin/cell size outputs.
+
void loadLinks(int signatureId, std::multimap< int, Link > &links, Link::Type type=Link::kUndef) const
Load outgoing links from signatureId, optionally filtered by type.
+
void emptyTrashes(bool async=false)
Flush queued signatures and visual words to the database.
+
void saveOptimizedPoses(const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) const
Persist graph-optimized poses and last localization pose.
+
void closeConnection(bool save=true, const std::string &outputUrl="")
Close the connection; optionally flush trashes and save in-memory DB to outputUrl.
+
void generateGraph(const std::string &fileName, const std::set< int > &ids=std::set< int >(), const std::map< int, Signature * > &otherSignatures=std::map< int, Signature * >())
Export the pose graph to a Graphviz DOT file for visualization.
+
bool openConnection(const std::string &url, bool overwritten=false, bool readOnly=false)
Open or create the database at url (empty url uses an in-memory database).
+
void addLink(const Link &link)
Insert or replace a link in the database.
+
void asyncSave(Signature *s)
Queue a signature for deferred save; ownership is transferred.
+
WGS84 GPS fix attached to a sensor sample or graph node.
Definition GPS.h:47
+
Represents 2D or 3D laser scan data with support for multiple point data formats.
Definition LaserScan.h:46
+ + +
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Collects and manages runtime statistics for RTAB-Map.
Definition Statistics.h:108
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
Manages a dictionary of visual words for visual place recognition and loop closure detection.
+
Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.
Definition VisualWord.h:50
+ +
std::map< EnvSensor::Type, EnvSensor > EnvSensors
Map of environmental readings keyed by EnvSensor::Type (at most one per type).
Definition EnvSensor.h:114
+
+ + + + diff --git a/preview/pr-1492/api/latest/DBReader_8h_source.html b/preview/pr-1492/api/latest/DBReader_8h_source.html new file mode 100644 index 00000000..c82cddbc --- /dev/null +++ b/preview/pr-1492/api/latest/DBReader_8h_source.html @@ -0,0 +1,240 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/DBReader.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
DBReader.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef DBREADER_H_
+
29#define DBREADER_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/utilite/UTimer.h>
+
34#include <rtabmap/core/Transform.h>
+
35#include <rtabmap/core/Camera.h>
+
36
+
37#include <opencv2/core/core.hpp>
+
38
+
39#include <set>
+
40#include <list>
+
41
+
42namespace rtabmap {
+
43
+
44class DBDriver;
+
45
+
+
46class RTABMAP_CORE_EXPORT DBReader : public Camera {
+
47public:
+
48 DBReader(const std::string & databasePath,
+
49 float frameRate = 0.0f, // -1 = use Database stamps, 0 = inf
+
50 bool odometryIgnored = false,
+
51 bool ignoreGoalDelay = false,
+
52 bool goalsIgnored = false,
+
53 int startId = 0,
+
54 const std::vector<unsigned int> & cameraIndices = std::vector<unsigned int>(),
+
55 int stopId = 0,
+
56 bool intermediateNodesIgnored = false,
+
57 bool landmarksIgnored = false,
+
58 bool featuresIgnored = false,
+
59 int startMapId = 0,
+
60 int stopMapId = -1,
+
61 bool priorsIgnored = false,
+
62 bool imuIgnored = false,
+
63 bool intermediateNodesAreNormalNodes = false,
+
64 const std::vector<Transform> & cameraLocalTransformOverrides = std::vector<Transform>());
+
65 DBReader(const std::list<std::string> & databasePaths,
+
66 float frameRate = 0.0f, // -1 = use Database stamps, 0 = inf
+
67 bool odometryIgnored = false,
+
68 bool ignoreGoalDelay = false,
+
69 bool goalsIgnored = false,
+
70 int startId = 0,
+
71 const std::vector<unsigned int> & cameraIndices = std::vector<unsigned int>(),
+
72 int stopId = 0,
+
73 bool intermediateNodesIgnored = false,
+
74 bool landmarksIgnored = false,
+
75 bool featuresIgnored = false,
+
76 int startMapId = 0,
+
77 int stopMapId = -1,
+
78 bool priorsIgnored = false,
+
79 bool imuIgnored = false,
+
80 bool intermediateNodesAreNormalNodes = false,
+
81 const std::vector<Transform> & cameraLocalTransformOverrides = std::vector<Transform>());
+
82 virtual ~DBReader();
+
83
+
84 virtual bool init(
+
85 const std::string & calibrationFolder = ".",
+
86 const std::string & cameraName = "");
+
87
+
88 virtual bool isCalibrated() const;
+
89 virtual std::string getSerial() const;
+
90 virtual bool odomProvided() const {return !_odometryIgnored;}
+
91 virtual bool getPose(double stamp, Transform & pose, cv::Mat & covariance, double maxWaitTime = 0.06);
+
92
+
93 const DBDriver * driver() const {return _dbDriver;}
+
94
+
95protected:
+
96 virtual SensorData captureImage(SensorCaptureInfo * info = 0);
+
97
+
98private:
+
99 SensorData getNextData(SensorCaptureInfo * info = 0);
+
100 void checkArguments();
+
101
+
102private:
+
103 std::list<std::string> _paths;
+
104 bool _odometryIgnored;
+
105 bool _ignoreGoalDelay;
+
106 bool _goalsIgnored;
+
107 int _startId;
+
108 int _stopId;
+
109 std::vector<unsigned int> _cameraIndices;
+
110 bool _intermediateNodesIgnored;
+
111 bool _intermediateNodesAreNormalNodes;
+
112 bool _landmarksIgnored;
+
113 bool _featuresIgnored;
+
114 bool _priorsIgnored;
+
115 bool _imuIgnored;
+
116 int _startMapId;
+
117 int _stopMapId;
+
118 std::vector<Transform> _cameraLocalTransformOverrides;
+
119
+
120 DBDriver * _dbDriver;
+
121 UTimer _timer;
+
122 std::set<int> _ids;
+
123 std::set<int>::iterator _currentId;
+
124 int _previousMapId;
+
125 cv::Mat _previousInfMatrix;
+
126 double _previousStamp;
+
127 int _previousMapID;
+
128 bool _calibrated;
+
129};
+
+
130
+
131} /* namespace rtabmap */
+
132#endif /* DBREADER_H_ */
+ + +
Abstract database driver for RTAB-Map maps (signatures, links, words, statistics).
Definition DBDriver.h:72
+ +
virtual bool odomProvided() const
Checks if the sensor provides odometry poses.
Definition DBReader.h:90
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")
Initializes the sensor.
+
virtual bool getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
Gets the sensor's pose estimate at a specific timestamp.
+
virtual std::string getSerial() const
Returns the sensor's serial number or unique identifier.
+
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/EnvSensor_8h_source.html b/preview/pr-1492/api/latest/EnvSensor_8h_source.html new file mode 100644 index 00000000..2631a5a1 --- /dev/null +++ b/preview/pr-1492/api/latest/EnvSensor_8h_source.html @@ -0,0 +1,204 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/EnvSensor.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
EnvSensor.h
+
+
+
1/*
+
2Copyright (c) 2010-2018, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_ENVSENSOR_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_ENVSENSOR_H_
+
30
+
31#include <map>
+
32
+
33namespace rtabmap {
+
34
+
+ +
51{
+
52public:
+
+
59 enum Type {
+ + + + + + +
66
+ +
68 kCustomSensor2,
+
69 kCustomSensor3,
+
70 kCustomSensor4,
+
71 kCustomSensor5,
+
72 kCustomSensor6,
+
73 kCustomSensor7,
+
74 kCustomSensor8,
+
75 kCustomSensor9
+
76 };
+
+
77
+
78public:
+
+ +
81 type_(kUndefined),
+
82 value_(0.0),
+
83 stamp_(0.0)
+
84 {}
+
+
85
+
+
92 EnvSensor(const Type & type, const double & value,const double & stamp = 0) :
+
93 type_(type),
+
94 value_(value),
+
95 stamp_(stamp)
+
96 {}
+
+
97
+
98 virtual ~EnvSensor() {}
+
99
+
101 const Type & type() const {return type_;}
+
103 const double & value() const {return value_;}
+
105 const double & stamp() const {return stamp_;}
+
106
+
107private:
+
108 Type type_;
+
109 double value_;
+
110 double stamp_;
+
111};
+
+
112
+
114typedef std::map<EnvSensor::Type, EnvSensor> EnvSensors;
+
115
+
116}
+
117
+
118#endif /* CORELIB_INCLUDE_RTABMAP_CORE_ENVSENSOR_H_ */
+
Single environmental measurement (type, value, timestamp).
Definition EnvSensor.h:51
+
const double & stamp() const
Definition EnvSensor.h:105
+
Type
Environmental sensor channel identifier.
Definition EnvSensor.h:59
+
@ kWifiSignalStrength
Wi‑Fi signal strength (dBm).
Definition EnvSensor.h:61
+
@ kAmbientAirPressure
Ambient air pressure (hPa).
Definition EnvSensor.h:63
+
@ kAmbientRelativeHumidity
Relative humidity (%).
Definition EnvSensor.h:65
+
@ kCustomSensor1
User-defined sensor slot 1.
Definition EnvSensor.h:67
+
@ kAmbientLight
Ambient illuminance (lx).
Definition EnvSensor.h:64
+
@ kAmbientTemperature
Ambient temperature (°C).
Definition EnvSensor.h:62
+
@ kUndefined
Uninitialized / unknown channel.
Definition EnvSensor.h:60
+
const double & value() const
Definition EnvSensor.h:103
+
EnvSensor()
Default constructor: kUndefined type, zero value and stamp.
Definition EnvSensor.h:80
+
EnvSensor(const Type &type, const double &value, const double &stamp=0)
Constructs a reading with the given type, value, and optional stamp.
Definition EnvSensor.h:92
+
const Type & type() const
Definition EnvSensor.h:101
+ +
std::map< EnvSensor::Type, EnvSensor > EnvSensors
Map of environmental readings keyed by EnvSensor::Type (at most one per type).
Definition EnvSensor.h:114
+
+ + + + diff --git a/preview/pr-1492/api/latest/EpipolarGeometry_8h_source.html b/preview/pr-1492/api/latest/EpipolarGeometry_8h_source.html new file mode 100644 index 00000000..81419796 --- /dev/null +++ b/preview/pr-1492/api/latest/EpipolarGeometry_8h_source.html @@ -0,0 +1,351 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/EpipolarGeometry.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
EpipolarGeometry.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
31#include "rtabmap/core/Parameters.h"
+ +
33#include <opencv2/core/core.hpp>
+
34#if CV_MAJOR_VERSION < 5
+
35#include <opencv2/features2d/features2d.hpp>
+
36#else
+
37#include <opencv2/features.hpp>
+
38#endif
+
39#include <pcl/point_cloud.h>
+
40#include <pcl/point_types.h>
+
41#include <list>
+
42#include <vector>
+
43
+
44namespace rtabmap
+
45{
+
46
+
47class Signature;
+
48
+
+
49class RTABMAP_CORE_EXPORT EpipolarGeometry
+
50{
+
51public:
+
52 EpipolarGeometry(const ParametersMap & parameters = ParametersMap());
+
53 virtual ~EpipolarGeometry();
+
54 bool check(const Signature * ssA, const Signature * ssB);
+
55 void parseParameters(const ParametersMap & parameters);
+
56
+
57 int getMatchCountMinAccepted() const {return _matchCountMinAccepted;}
+
58 double getRansacParam1() const {return _ransacParam1;}
+
59 double getRansacParam2() const {return _ransacParam2;}
+
60
+
61 void setMatchCountMinAccepted(int matchCountMinAccepted) {_matchCountMinAccepted = matchCountMinAccepted;}
+
62 void setRansacParam1(double ransacParam1) {_ransacParam1 = ransacParam1;}
+
63 void setRansacParam2(double ransacParam2) {_ransacParam2 = ransacParam2;}
+
64
+
65
+
66 // STATIC STUFF
+
67 //epipolar geometry
+
68 static void findEpipolesFromF(
+
69 const cv::Mat & fundamentalMatrix,
+
70 cv::Vec3d & e1,
+
71 cv::Vec3d & e2);
+
72
+
73 static cv::Mat findPFromE(
+
74 const cv::Mat & E,
+
75 const cv::Mat & x,
+
76 const cv::Mat & xp);
+
77
+
78 // return fundamental matrix
+
79 // status -> inliers = 1, outliers = 0
+
80 static cv::Mat findFFromWords(
+
81 const std::list<std::pair<int, std::pair<cv::KeyPoint, cv::KeyPoint> > > & pairs, // id, kpt1, kpt2
+
82 std::vector<uchar> & status,
+
83 double ransacReprojThreshold = 3.0,
+
84 double ransacConfidence = 0.99);
+
85
+
86 // assume a canonical camera (without K)
+
87 static void findRTFromP(
+
88 const cv::Mat & p,
+
89 cv::Mat & r,
+
90 cv::Mat & t);
+
91
+
92 static cv::Mat findFFromCalibratedStereoCameras(double fx, double fy, double cx, double cy, double Tx, double Ty);
+
93
+
94
+
99 template<typename T>
+
+
100 static int findPairs(
+
101 const std::map<int, T> & wordsA,
+
102 const std::map<int, T> & wordsB,
+
103 std::list<std::pair<int, std::pair<T, T> > > & pairs,
+
104 bool ignoreNegativeIds = true)
+
105 {
+
106 int realPairsCount = 0;
+
107 pairs.clear();
+
108 for(typename std::map<int, T>::const_iterator i=wordsA.begin(); i!=wordsA.end(); ++i)
+
109 {
+
110 if(!ignoreNegativeIds || (ignoreNegativeIds && i->first>=0))
+
111 {
+
112 std::map<int, cv::KeyPoint>::const_iterator ptB = wordsB.find(i->first);
+
113 if(ptB != wordsB.end())
+
114 {
+
115 pairs.push_back(std::pair<int, std::pair<T, T> >(i->first, std::make_pair(i->second, ptB->second)));
+
116 ++realPairsCount;
+
117 }
+
118 }
+
119 }
+
120 return realPairsCount;
+
121 }
+
+
122
+
127 template<typename T>
+
+
128 static int findPairs(
+
129 const std::multimap<int, T> & wordsA,
+
130 const std::multimap<int, T> & wordsB,
+
131 std::list<std::pair<int, std::pair<T, T> > > & pairs,
+
132 bool ignoreNegativeIds = true)
+
133 {
+
134 const std::list<int> & ids = uUniqueKeys(wordsA);
+
135 typename std::multimap<int, T>::const_iterator iterA;
+
136 typename std::multimap<int, T>::const_iterator iterB;
+
137 pairs.clear();
+
138 int realPairsCount = 0;
+
139 for(std::list<int>::const_iterator i=ids.begin(); i!=ids.end(); ++i)
+
140 {
+
141 if(!ignoreNegativeIds || (ignoreNegativeIds && *i >= 0))
+
142 {
+
143 iterA = wordsA.find(*i);
+
144 iterB = wordsB.find(*i);
+
145 while(iterA != wordsA.end() && iterB != wordsB.end() && (*iterA).first == (*iterB).first && (*iterA).first == *i)
+
146 {
+
147 pairs.push_back(std::pair<int, std::pair<T, T> >(*i, std::make_pair((*iterA).second, (*iterB).second)));
+
148 ++iterA;
+
149 ++iterB;
+
150 ++realPairsCount;
+
151 }
+
152 }
+
153 }
+
154 return realPairsCount;
+
155 }
+
+
156
+
161 template<typename T>
+
+
162 static int findPairsUnique(
+
163 const std::multimap<int, T> & wordsA,
+
164 const std::multimap<int, T> & wordsB,
+
165 std::list<std::pair<int, std::pair<T, T> > > & pairs,
+
166 bool ignoreNegativeIds = true)
+
167 {
+
168 const std::list<int> & ids = uUniqueKeys(wordsA);
+
169 int realPairsCount = 0;
+
170 pairs.clear();
+
171 for(std::list<int>::const_iterator i=ids.begin(); i!=ids.end(); ++i)
+
172 {
+
173 if(!ignoreNegativeIds || (ignoreNegativeIds && *i>=0))
+
174 {
+
175 std::list<T> ptsA = uValues(wordsA, *i);
+
176 std::list<T> ptsB = uValues(wordsB, *i);
+
177 if(ptsA.size() == 1 && ptsB.size() == 1)
+
178 {
+
179 pairs.push_back(std::pair<int, std::pair<T, T> >(*i, std::pair<T, T>(ptsA.front(), ptsB.front())));
+
180 ++realPairsCount;
+
181 }
+
182 else if(ptsA.size()>1 && ptsB.size()>1)
+
183 {
+
184 // just update the count
+
185 realPairsCount += ptsA.size() > ptsB.size() ? ptsB.size() : ptsA.size();
+
186 }
+
187 }
+
188 }
+
189 return realPairsCount;
+
190 }
+
+
191
+
196 template<typename T>
+
+
197 static int findPairsAll(
+
198 const std::multimap<int, T> & wordsA,
+
199 const std::multimap<int, T> & wordsB,
+
200 std::list<std::pair<int, std::pair<T, T> > > & pairs,
+
201 bool ignoreNegativeIds = true)
+
202 {
+
203 const std::list<int> & ids = uUniqueKeys(wordsA);
+
204 pairs.clear();
+
205 int realPairsCount = 0;;
+
206 for(std::list<int>::const_iterator iter=ids.begin(); iter!=ids.end(); ++iter)
+
207 {
+
208 if(!ignoreNegativeIds || (ignoreNegativeIds && *iter>=0))
+
209 {
+
210 std::list<T> ptsA = uValues(wordsA, *iter);
+
211 std::list<T> ptsB = uValues(wordsB, *iter);
+
212
+
213 realPairsCount += ptsA.size() > ptsB.size() ? ptsB.size() : ptsA.size();
+
214
+
215 for(typename std::list<T>::iterator jter=ptsA.begin(); jter!=ptsA.end(); ++jter)
+
216 {
+
217 for(typename std::list<T>::iterator kter=ptsB.begin(); kter!=ptsB.end(); ++kter)
+
218 {
+
219 pairs.push_back(std::pair<int, std::pair<T, T> >(*iter, std::pair<T, T>(*jter, *kter)));
+
220 }
+
221 }
+
222 }
+
223 }
+
224 return realPairsCount;
+
225 }
+
+
226
+
227 static cv::Mat linearLSTriangulation(
+
228 cv::Point3d u, //homogenous image point (u,v,1)
+
229 cv::Matx34d P, //camera 1 matrix 3x4 double
+
230 cv::Point3d u1, //homogenous image point in 2nd camera
+
231 cv::Matx34d P1); //camera 2 matrix 3x4 double
+
232
+
233 static cv::Mat iterativeLinearLSTriangulation(
+
234 cv::Point3d u, //homogenous image point (u,v,1)
+
235 const cv::Matx34d & P, //camera 1 matrix 3x4 double
+
236 cv::Point3d u1, //homogenous image point in 2nd camera
+
237 const cv::Matx34d & P1); //camera 2 matrix 3x4 double
+
238
+
239 static double triangulatePoints(
+
240 const cv::Mat& pt_set1, //2xN double
+
241 const cv::Mat& pt_set2, //2xN double
+
242 const cv::Mat& P, // 3x4 double
+
243 const cv::Mat& P1, // 3x4 double
+
244 pcl::PointCloud<pcl::PointXYZ>::Ptr & pointcloud,
+
245 std::vector<double> & reproj_errors);
+
246
+
247private:
+
248 int _matchCountMinAccepted;
+
249 double _ransacParam1;
+
250 double _ransacParam2;
+
251};
+
+
252
+
253} // namespace rtabmap
+
Wrappers of STL for convenient functions.
+
std::list< K > uUniqueKeys(const std::multimap< K, V > &mm)
Definition UStl.h:46
+
std::vector< V > uValues(const std::multimap< K, V > &mm)
Definition UStl.h:100
+ +
static int findPairsUnique(const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)
+
static int findPairs(const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)
+
static int findPairs(const std::map< int, T > &wordsA, const std::map< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)
+
static int findPairsAll(const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Features2d_8h_source.html b/preview/pr-1492/api/latest/Features2d_8h_source.html new file mode 100644 index 00000000..1d65a96d --- /dev/null +++ b/preview/pr-1492/api/latest/Features2d_8h_source.html @@ -0,0 +1,896 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Features2d.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Features2d.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef FEATURES2D_H_
+
29#define FEATURES2D_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <opencv2/highgui/highgui.hpp>
+
34#include <opencv2/core/core.hpp>
+
35#if CV_MAJOR_VERSION < 5
+
36#include <opencv2/features2d/features2d.hpp>
+
37#else
+
38#include <opencv2/features.hpp>
+
39#endif
+
40#include <list>
+
41#include <numeric>
+
42#include "rtabmap/core/Parameters.h"
+
43#include "rtabmap/core/SensorData.h"
+
44
+
45#if CV_MAJOR_VERSION < 3
+
46namespace cv{
+
47class SURF;
+
48class SIFT;
+
49namespace gpu {
+
50 class SURF_GPU;
+
51 class ORB_GPU;
+
52 class FAST_GPU;
+
53 class GoodFeaturesToTrackDetector_GPU;
+
54}
+
55}
+
56typedef cv::SIFT CV_SIFT;
+
57typedef cv::SURF CV_SURF;
+
58typedef cv::FastFeatureDetector CV_FAST;
+
59typedef cv::FREAK CV_FREAK;
+
60typedef cv::GFTTDetector CV_GFTT;
+
61typedef cv::BriefDescriptorExtractor CV_BRIEF;
+
62typedef cv::BRISK CV_BRISK;
+
63typedef cv::gpu::SURF_GPU CV_SURF_GPU;
+
64typedef cv::gpu::ORB_GPU CV_ORB_GPU;
+
65typedef cv::gpu::FAST_GPU CV_FAST_GPU;
+
66typedef cv::gpu::GoodFeaturesToTrackDetector_GPU CV_GFTT_GPU;
+
67#else
+
68namespace cv{
+
69namespace xfeatures2d {
+
70class FREAK;
+
71class DAISY;
+
72class BriefDescriptorExtractor;
+
73#if (CV_MAJOR_VERSION == 4 && CV_MINOR_VERSION <= 3) || (CV_MAJOR_VERSION == 3 && (CV_MINOR_VERSION < 4 || (CV_MINOR_VERSION==4 && CV_SUBMINOR_VERSION<11)))
+
74class SIFT;
+
75#endif
+
76class SURF;
+
77#if (CV_MAJOR_VERSION == 5)
+
78class BRISK;
+
79class KAZE;
+
80#endif
+
81}
+
82namespace cuda {
+
83class FastFeatureDetector;
+
84class ORB;
+
85class SURF_CUDA;
+
86class CornersDetector;
+
87}
+
88}
+
89#if (CV_MAJOR_VERSION == 4 && CV_MINOR_VERSION <= 3) || (CV_MAJOR_VERSION == 3 && (CV_MINOR_VERSION < 4 || (CV_MINOR_VERSION==4 && CV_SUBMINOR_VERSION<11)))
+
90typedef cv::xfeatures2d::SIFT CV_SIFT;
+
91#else
+
92typedef cv::SIFT CV_SIFT; // SIFT is back in features2d since 4.4.0 / 3.4.11
+
93#endif
+
94typedef cv::xfeatures2d::SURF CV_SURF;
+
95typedef cv::FastFeatureDetector CV_FAST;
+
96typedef cv::xfeatures2d::FREAK CV_FREAK;
+
97typedef cv::xfeatures2d::DAISY CV_DAISY;
+
98typedef cv::GFTTDetector CV_GFTT;
+
99typedef cv::xfeatures2d::BriefDescriptorExtractor CV_BRIEF;
+
100#if (CV_MAJOR_VERSION < 5)
+
101typedef cv::BRISK CV_BRISK;
+
102typedef cv::KAZE CV_KAZE;
+
103#else
+
104typedef cv::xfeatures2d::BRISK CV_BRISK;
+
105typedef cv::xfeatures2d::KAZE CV_KAZE;
+
106#endif
+
107typedef cv::ORB CV_ORB;
+
108typedef cv::cuda::SURF_CUDA CV_SURF_GPU;
+
109typedef cv::cuda::ORB CV_ORB_GPU;
+
110typedef cv::cuda::FastFeatureDetector CV_FAST_GPU;
+
111typedef cv::cuda::CornersDetector CV_GFTT_GPU;
+
112#endif
+
113
+
114// CudaSift fork: https://github.com/matlabbe/CudaSift
+
115class SiftData;
+
116
+
117namespace rtabmap {
+
118
+
119class ORBextractor;
+
120class SPDetector;
+
121class SPDetectorRpautrat;
+
122
+
123class Stereo;
+
124#if CV_MAJOR_VERSION < 3
+
125class CV_ORB;
+
126#endif
+
127
+
+
145class RTABMAP_CORE_EXPORT Feature2D {
+
146public:
+
+
148 enum Type {kFeatureUndef=-1,
+
149 kFeatureSurf=0,
+
150 kFeatureSift=1,
+
151 kFeatureOrb=2,
+
152 kFeatureFastFreak=3,
+
153 kFeatureFastBrief=4,
+
154 kFeatureGfttFreak=5,
+
155 kFeatureGfttBrief=6,
+
156 kFeatureBrisk=7,
+
157 kFeatureGfttOrb=8, //new 0.10.11
+
158 kFeatureKaze=9, //new 0.13.2
+
159 kFeatureOrbOctree=10, //new 0.19.2
+
160 kFeatureSuperPointTorch=11, //new 0.19.7
+
161 kFeatureSurfFreak=12, //new 0.20.4
+
162 kFeatureGfttDaisy=13, //new 0.20.6
+
163 kFeatureSurfDaisy=14, //new 0.20.6
+
164 kFeaturePyDetector=15, //new 0.20.8
+
165 kFeatureSuperPointRpautrat=16, // new 0.23.3
+
166 kFeatureEnd}; // Sentinel: always keep last. Used to iterate through types.
+
+
167
+
+
169 static std::string typeName(Type type)
+
170 {
+
171 switch(type){
+
172 case kFeatureSurf:
+
173 return "SURF";
+
174 case kFeatureSift:
+
175 return "SIFT";
+
176 case kFeatureOrb:
+
177 return "ORB";
+
178 case kFeatureFastFreak:
+
179 return "FAST+FREAK";
+
180 case kFeatureFastBrief:
+
181 return "FAST+BRIEF";
+
182 case kFeatureGfttFreak:
+
183 return "GFTT+Freak";
+
184 case kFeatureGfttBrief:
+
185 return "GFTT+Brief";
+
186 case kFeatureBrisk:
+
187 return "BRISK";
+
188 case kFeatureGfttOrb:
+
189 return "GFTT+ORB";
+
190 case kFeatureKaze:
+
191 return "KAZE";
+
192 case kFeatureOrbOctree:
+
193 return "ORB-OCTREE";
+
194 case kFeatureSuperPointTorch:
+
195 return "SUPERPOINT";
+
196 case kFeatureSurfFreak:
+
197 return "SURF+Freak";
+
198 case kFeatureGfttDaisy:
+
199 return "GFTT+Daisy";
+
200 case kFeatureSurfDaisy:
+
201 return "SURF+Daisy";
+
202 case kFeaturePyDetector:
+
203 return "PyDetector";
+
204 case kFeatureSuperPointRpautrat:
+
205 return "SUPERPOINT-RPAUTRAT";
+
206 default:
+
207 return "Unknown";
+
208 }
+
209 }
+
+
210
+
212 static Feature2D * create(const ParametersMap & parameters = ParametersMap());
+
214 static Feature2D * create(Feature2D::Type type, const ParametersMap & parameters = ParametersMap());
+
215
+
217 static bool isAvailable(Feature2D::Type type);
+
218
+ +
221 std::vector<cv::KeyPoint> & keypoints,
+
222 const cv::Mat & depth,
+
223 float minDepth,
+
224 float maxDepth);
+
225 static void filterKeypointsByDepth(
+
226 std::vector<cv::KeyPoint> & keypoints,
+
227 cv::Mat & descriptors,
+
228 const cv::Mat & depth,
+
229 float minDepth,
+
230 float maxDepth);
+
231 static void filterKeypointsByDepth(
+
232 std::vector<cv::KeyPoint> & keypoints,
+
233 cv::Mat & descriptors,
+
234 std::vector<cv::Point3f> & keypoints3D,
+
235 float minDepth,
+
236 float maxDepth);
+
237
+ +
240 std::vector<cv::KeyPoint> & keypoints,
+
241 const cv::Mat & disparity,
+
242 float minDisparity);
+
243 static void filterKeypointsByDisparity(
+
244 std::vector<cv::KeyPoint> & keypoints,
+
245 cv::Mat & descriptors,
+
246 const cv::Mat & disparity,
+
247 float minDisparity);
+
248
+
250 static void limitKeypoints(std::vector<cv::KeyPoint> & keypoints, int maxKeypoints, const cv::Size & imageSize = cv::Size(), bool ssc = false);
+
251 static void limitKeypoints(std::vector<cv::KeyPoint> & keypoints, cv::Mat & descriptors, int maxKeypoints, const cv::Size & imageSize = cv::Size(), bool ssc = false);
+
252 static void limitKeypoints(std::vector<cv::KeyPoint> & keypoints, std::vector<cv::Point3f> & keypoints3D, cv::Mat & descriptors, int maxKeypoints, const cv::Size & imageSize = cv::Size(), bool ssc = false);
+
253 static void limitKeypoints(const std::vector<cv::KeyPoint> & keypoints, std::vector<bool> & inliers, int maxKeypoints, const cv::Size & imageSize = cv::Size(), bool ssc = false);
+
254 static void limitKeypoints(const std::vector<cv::KeyPoint> & keypoints, std::vector<bool> & inliers, int maxKeypoints, const cv::Size & imageSize, int gridRows, int gridCols, bool ssc = false);
+
255
+
257 static cv::Rect computeRoi(const cv::Mat & image, const std::string & roiRatios);
+
258 static cv::Rect computeRoi(const cv::Mat & image, const std::vector<float> & roiRatios);
+
259
+
260 int getMaxFeatures() const {return maxFeatures_;}
+
261 bool getSSC() const {return SSC_;}
+
262 float getMinDepth() const {return _minDepth;}
+
263 float getMaxDepth() const {return _maxDepth;}
+
264 int getGridRows() const {return gridRows_;}
+
265 int getGridCols() const {return gridCols_;}
+
266
+
267public:
+
268 virtual ~Feature2D();
+
269
+
271 std::vector<cv::KeyPoint> generateKeypoints(
+
272 const cv::Mat & image,
+
273 const cv::Mat & mask = cv::Mat());
+ +
276 const cv::Mat & image,
+
277 std::vector<cv::KeyPoint> & keypoints) const;
+
279 std::vector<cv::Point3f> generateKeypoints3D(
+
280 const SensorData & data,
+
281 const std::vector<cv::KeyPoint> & keypoints) const;
+
282
+
283 virtual void parseParameters(const ParametersMap & parameters);
+
284 virtual const ParametersMap & getParameters() const {return parameters_;}
+
285 virtual Feature2D::Type getType() const = 0;
+
286
+
294 virtual bool isGpuAvailable() const {return false;}
+
295
+
296protected:
+
297 Feature2D(const ParametersMap & parameters = ParametersMap());
+
298
+
299private:
+
300 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) = 0;
+
301 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const = 0;
+
302
+
303private:
+
304 ParametersMap parameters_;
+
305 int maxFeatures_;
+
306 bool SSC_;
+
307 float _maxDepth; // 0=inf
+
308 float _minDepth;
+
309 std::vector<float> _roiRatios; // size 4
+
310 int _subPixWinSize;
+
311 int _subPixIterations;
+
312 double _subPixEps;
+
313 int gridRows_;
+
314 int gridCols_;
+
315 // Stereo stuff
+
316 Stereo * _stereo;
+
317};
+
+
318
+
+
320class RTABMAP_CORE_EXPORT SURF : public Feature2D
+
321{
+
322public:
+
323 SURF(const ParametersMap & parameters = ParametersMap());
+
324 virtual ~SURF();
+
325
+
326 virtual void parseParameters(const ParametersMap & parameters) override;
+
327 virtual Feature2D::Type getType() const override {return kFeatureSurf;}
+
328 virtual bool isGpuAvailable() const override;
+
329
+
330private:
+
331 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
332 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
333
+
334private:
+
335 double hessianThreshold_;
+
336 int nOctaves_;
+
337 int nOctaveLayers_;
+
338 bool extended_;
+
339 bool upright_;
+
340 float gpuKeypointsRatio_;
+
341 bool gpuVersion_;
+
342
+
343 cv::Ptr<CV_SURF> _surf;
+
344 cv::Ptr<CV_SURF_GPU> _gpuSurf;
+
345};
+
+
346
+
+
348class RTABMAP_CORE_EXPORT SIFT : public Feature2D
+
349{
+
350public:
+
351 SIFT(const ParametersMap & parameters = ParametersMap());
+
352 virtual ~SIFT();
+
353
+
354 virtual void parseParameters(const ParametersMap & parameters) override;
+
355 virtual Feature2D::Type getType() const override {return kFeatureSift;}
+
356 virtual bool isGpuAvailable() const override;
+
357
+
358private:
+
359 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
360 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
361
+
362private:
+
363 int nOctaveLayers_;
+
364 double contrastThreshold_;
+
365 double edgeThreshold_;
+
366 double sigma_;
+
367 bool preciseUpscale_;
+
368 bool rootSIFT_;
+
369 bool gpu_;
+
370 float gaussianThreshold_;
+
371 float maxGaussianThreshold_;
+
372 bool upscale_;
+
373
+
374 cv::Ptr<CV_SIFT> sift_;
+
375 SiftData * cudaSiftData_;
+
376 float * cudaSiftMemory_;
+
377 cv::Size cudaSiftMemorySize_;
+
378 cv::Mat cudaSiftDescriptors_;
+
379 bool cudaSiftUpscaling_;
+
380};
+
+
381
+
+
383class RTABMAP_CORE_EXPORT ORB : public Feature2D
+
384{
+
385public:
+
386 ORB(const ParametersMap & parameters = ParametersMap());
+
387 virtual ~ORB();
+
388
+
389 virtual void parseParameters(const ParametersMap & parameters) override;
+
390 virtual Feature2D::Type getType() const override {return kFeatureOrb;}
+
391 virtual bool isGpuAvailable() const override;
+
392
+
393private:
+
394 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
395 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
396
+
397private:
+
398 float scaleFactor_;
+
399 int nLevels_;
+
400 int edgeThreshold_;
+
401 int firstLevel_;
+
402 int WTA_K_;
+
403 int scoreType_;
+
404 int patchSize_;
+
405 bool gpu_;
+
406
+
407 int fastThreshold_;
+
408 bool nonmaxSuppresion_;
+
409
+
410 cv::Ptr<CV_ORB> _orb;
+
411 cv::Ptr<CV_ORB_GPU> _gpuOrb;
+
412};
+
+
413
+
+
415class RTABMAP_CORE_EXPORT FAST : public Feature2D
+
416{
+
417public:
+
418 FAST(const ParametersMap & parameters = ParametersMap());
+
419 virtual ~FAST();
+
420
+
421 virtual void parseParameters(const ParametersMap & parameters) override;
+
422 virtual Feature2D::Type getType() const override {return kFeatureUndef;}
+
423 virtual bool isGpuAvailable() const override;
+
424
+
425private:
+
426 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
427 virtual cv::Mat generateDescriptorsImpl(const cv::Mat &, std::vector<cv::KeyPoint> &) const override {return cv::Mat();}
+
428
+
429private:
+
430 int threshold_;
+
431 bool nonmaxSuppression_;
+
432 bool gpu_;
+
433 double gpuKeypointsRatio_;
+
434 int minThreshold_;
+
435 int maxThreshold_;
+
436 int gridRows_;
+
437 int gridCols_;
+
438 int fastCV_;
+
439
+
440 bool fastCVinit_;
+
441 int fastCVMaxFeatures_;
+
442 int fastCVLastImageHeight_;
+
443 uint32_t* fastCVCorners_= NULL;
+
444 uint32_t* fastCVCornerScores_ = NULL;
+
445 void* fastCVTempBuf_ = NULL;
+
446
+
447 cv::Ptr<cv::FeatureDetector> _fast;
+
448 cv::Ptr<CV_FAST_GPU> _gpuFast;
+
449};
+
+
450
+
+
452class RTABMAP_CORE_EXPORT FAST_BRIEF : public FAST
+
453{
+
454public:
+
455 FAST_BRIEF(const ParametersMap & parameters = ParametersMap());
+
456 virtual ~FAST_BRIEF();
+
457
+
458 virtual void parseParameters(const ParametersMap & parameters) override;
+
459 virtual Feature2D::Type getType() const override {return kFeatureFastBrief;}
+
460
+
461private:
+
462 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
463
+
464private:
+
465 int bytes_;
+
466
+
467 cv::Ptr<CV_BRIEF> _brief;
+
468};
+
+
469
+
+
471class RTABMAP_CORE_EXPORT FAST_FREAK : public FAST
+
472{
+
473public:
+
474 FAST_FREAK(const ParametersMap & parameters = ParametersMap());
+
475 virtual ~FAST_FREAK();
+
476
+
477 virtual void parseParameters(const ParametersMap & parameters) override;
+
478 virtual Feature2D::Type getType() const override {return kFeatureFastFreak;}
+
479
+
480private:
+
481 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
482
+
483private:
+
484 bool orientationNormalized_;
+
485 bool scaleNormalized_;
+
486 float patternScale_;
+
487 int nOctaves_;
+
488
+
489 cv::Ptr<CV_FREAK> _freak;
+
490};
+
+
491
+
+
493class RTABMAP_CORE_EXPORT GFTT : public Feature2D
+
494{
+
495public:
+
496 GFTT(const ParametersMap & parameters = ParametersMap());
+
497 virtual ~GFTT();
+
498
+
499 virtual void parseParameters(const ParametersMap & parameters) override;
+
500 virtual bool isGpuAvailable() const override;
+
501
+
502private:
+
503 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
504
+
505private:
+
506 double _qualityLevel;
+
507 double _minDistance;
+
508 int _blockSize;
+
509 bool _useHarrisDetector;
+
510 double _k;
+
511 bool _gpu;
+
512
+
513 cv::Ptr<CV_GFTT> _gftt;
+
514 cv::Ptr<CV_GFTT_GPU> _gpuGftt;
+
515};
+
+
516
+
+
518class RTABMAP_CORE_EXPORT GFTT_BRIEF : public GFTT
+
519{
+
520public:
+
521 GFTT_BRIEF(const ParametersMap & parameters = ParametersMap());
+
522 virtual ~GFTT_BRIEF();
+
523
+
524 virtual void parseParameters(const ParametersMap & parameters) override;
+
525 virtual Feature2D::Type getType() const override {return kFeatureGfttBrief;}
+
526
+
527private:
+
528 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
529
+
530private:
+
531 int bytes_;
+
532
+
533 cv::Ptr<CV_BRIEF> _brief;
+
534};
+
+
535
+
+
537class RTABMAP_CORE_EXPORT GFTT_FREAK : public GFTT
+
538{
+
539public:
+
540 GFTT_FREAK(const ParametersMap & parameters = ParametersMap());
+
541 virtual ~GFTT_FREAK();
+
542
+
543 virtual void parseParameters(const ParametersMap & parameters) override;
+
544 virtual Feature2D::Type getType() const override {return kFeatureGfttFreak;}
+
545
+
546private:
+
547 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
548
+
549private:
+
550 bool orientationNormalized_;
+
551 bool scaleNormalized_;
+
552 float patternScale_;
+
553 int nOctaves_;
+
554
+
555 cv::Ptr<CV_FREAK> _freak;
+
556};
+
+
557
+
+
559class RTABMAP_CORE_EXPORT SURF_FREAK : public SURF
+
560{
+
561public:
+
562 SURF_FREAK(const ParametersMap & parameters = ParametersMap());
+
563 virtual ~SURF_FREAK();
+
564
+
565 virtual void parseParameters(const ParametersMap & parameters) override;
+
566 virtual Feature2D::Type getType() const override {return kFeatureSurfFreak;}
+
567
+
568private:
+
569 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
570
+
571private:
+
572 bool orientationNormalized_;
+
573 bool scaleNormalized_;
+
574 float patternScale_;
+
575 int nOctaves_;
+
576
+
577 cv::Ptr<CV_FREAK> _freak;
+
578};
+
+
579
+
+
581class RTABMAP_CORE_EXPORT GFTT_ORB : public GFTT
+
582{
+
583public:
+
584 GFTT_ORB(const ParametersMap & parameters = ParametersMap());
+
585 virtual ~GFTT_ORB();
+
586
+
587 virtual void parseParameters(const ParametersMap & parameters) override;
+
588 virtual Feature2D::Type getType() const override {return kFeatureGfttOrb;}
+
589
+
590private:
+
591 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
592
+
593private:
+
594 ORB _orb;
+
595};
+
+
596
+
+
598class RTABMAP_CORE_EXPORT BRISK : public Feature2D
+
599{
+
600public:
+
601 BRISK(const ParametersMap & parameters = ParametersMap());
+
602 virtual ~BRISK();
+
603
+
604 virtual void parseParameters(const ParametersMap & parameters) override;
+
605 virtual Feature2D::Type getType() const override {return kFeatureBrisk;}
+
606
+
607private:
+
608 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
609 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
610
+
611private:
+
612 int thresh_;
+
613 int octaves_;
+
614 float patternScale_;
+
615
+
616 cv::Ptr<CV_BRISK> brisk_;
+
617};
+
+
618
+
+
620class RTABMAP_CORE_EXPORT KAZE : public Feature2D
+
621{
+
622public:
+
623 KAZE(const ParametersMap & parameters = ParametersMap());
+
624 virtual ~KAZE();
+
625
+
626 virtual void parseParameters(const ParametersMap & parameters) override;
+
627 virtual Feature2D::Type getType() const override { return kFeatureKaze; }
+
628
+
629private:
+
630 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
631 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
632
+
633private:
+
634 bool extended_;
+
635 bool upright_;
+
636 float threshold_;
+
637 int nOctaves_;
+
638 int nOctaveLayers_;
+
639 int diffusivity_;
+
640
+
641#if CV_MAJOR_VERSION > 2
+
642 cv::Ptr<CV_KAZE> kaze_;
+
643#endif
+
644};
+
+
645
+
+
647class RTABMAP_CORE_EXPORT ORBOctree : public Feature2D
+
648{
+
649public:
+
650 ORBOctree(const ParametersMap & parameters = ParametersMap());
+
651 virtual ~ORBOctree();
+
652
+
653 virtual void parseParameters(const ParametersMap & parameters) override;
+
654 virtual Feature2D::Type getType() const override {return kFeatureOrbOctree;}
+
655
+
656private:
+
657 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
658 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
659
+
660private:
+
661 float scaleFactor_;
+
662 int nLevels_;
+
663 int patchSize_;
+
664 int edgeThreshold_;
+
665 int fastThreshold_;
+
666 int fastMinThreshold_;
+
667
+
668 cv::Ptr<ORBextractor> _orb;
+
669 cv::Mat descriptors_;
+
670};
+
+
671
+
+
673class RTABMAP_CORE_EXPORT SuperPointTorch : public Feature2D
+
674{
+
675public:
+
676 SuperPointTorch(const ParametersMap & parameters = ParametersMap());
+
677 virtual ~SuperPointTorch();
+
678
+
679 virtual void parseParameters(const ParametersMap & parameters) override;
+
680 virtual Feature2D::Type getType() const override { return kFeatureSuperPointTorch; }
+
681 virtual bool isGpuAvailable() const override;
+
682
+
683private:
+
684 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
685 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
686
+
687 cv::Ptr<SPDetector> superPoint_;
+
688
+
689 std::string path_;
+
690 float threshold_;
+
691 bool nms_;
+
692 int minDistance_;
+
693 bool cuda_;
+
694};
+
+
695
+
+
697class RTABMAP_CORE_EXPORT SuperPointRpautrat : public Feature2D
+
698{
+
699public:
+
700 SuperPointRpautrat(const ParametersMap & parameters = ParametersMap());
+
701 virtual ~SuperPointRpautrat();
+
702
+
703 virtual void parseParameters(const ParametersMap & parameters) override;
+
704 virtual Feature2D::Type getType() const override { return kFeatureSuperPointRpautrat; }
+
705 virtual bool isGpuAvailable() const override;
+
706
+
707private:
+
708 virtual std::vector<cv::KeyPoint> generateKeypointsImpl(const cv::Mat & image, const cv::Rect & roi, const cv::Mat & mask = cv::Mat()) override;
+
709 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
710
+
711 cv::Ptr<SPDetectorRpautrat> superPoint_;
+
712
+
713 std::string superpointWeightsPath_;
+
714 std::string superpointModelPath_;
+
715 std::string outputDir_;
+
716 float threshold_;
+
717 bool nms_;
+
718 int minDistance_;
+
719 bool cuda_;
+
720};
+
+
721
+
+
723class RTABMAP_CORE_EXPORT GFTT_DAISY : public GFTT
+
724{
+
725public:
+
726 GFTT_DAISY(const ParametersMap & parameters = ParametersMap());
+
727 virtual ~GFTT_DAISY();
+
728
+
729 virtual void parseParameters(const ParametersMap & parameters) override;
+
730 virtual Feature2D::Type getType() const override {return kFeatureGfttDaisy;}
+
731
+
732private:
+
733 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
734
+
735private:
+
736 bool orientationNormalized_;
+
737 bool scaleNormalized_;
+
738 float patternScale_;
+
739 int nOctaves_;
+
740
+
741#if CV_MAJOR_VERSION > 2
+
742 cv::Ptr<CV_DAISY> _daisy;
+
743#endif
+
744};
+
+
745
+
+
747class RTABMAP_CORE_EXPORT SURF_DAISY : public SURF
+
748{
+
749public:
+
750 SURF_DAISY(const ParametersMap & parameters = ParametersMap());
+
751 virtual ~SURF_DAISY();
+
752
+
753 virtual void parseParameters(const ParametersMap & parameters) override;
+
754 virtual Feature2D::Type getType() const override {return kFeatureSurfDaisy;}
+
755
+
756private:
+
757 virtual cv::Mat generateDescriptorsImpl(const cv::Mat & image, std::vector<cv::KeyPoint> & keypoints) const override;
+
758
+
759private:
+
760 bool orientationNormalized_;
+
761 bool scaleNormalized_;
+
762 float patternScale_;
+
763 int nOctaves_;
+
764
+
765#if CV_MAJOR_VERSION > 2
+
766 cv::Ptr<CV_DAISY> _daisy;
+
767#endif
+
768};
+
+
769
+
770}
+
771
+
772#endif /* FEATURES2D_H_ */
+
BRISK detector and descriptor.
Definition Features2d.h:599
+
FAST corners + BRIEF descriptors.
Definition Features2d.h:453
+
FAST corners + FREAK descriptors.
Definition Features2d.h:472
+
FAST corner detector only (no descriptor).
Definition Features2d.h:416
+
virtual bool isGpuAvailable() const override
Returns true when a GPU/CUDA code path could be used by this detector on this host: i....
+
Abstract 2D feature detector and descriptor extractor for visual SLAM.
Definition Features2d.h:145
+
static void filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
Keeps keypoints with stereo disparity ≥ minDisparity.
+
static Feature2D * create(const ParametersMap &parameters=ParametersMap())
Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
+
static bool isAvailable(Feature2D::Type type)
Returns true if type is available (RTAB-Map is built with it).
+
Type
Built-in detector/descriptor strategy (Kp/DetectorStrategy).
Definition Features2d.h:148
+
std::vector< cv::KeyPoint > generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())
Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
+
static cv::Rect computeRoi(const cv::Mat &image, const std::string &roiRatios)
ROI from Kp/RoiRatios string ("left top right bottom" fractions).
+
virtual bool isGpuAvailable() const
Returns true when a GPU/CUDA code path could be used by this detector on this host: i....
Definition Features2d.h:294
+
static std::string typeName(Type type)
Definition Features2d.h:169
+
static void limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
Reduces keypoint count (by response or SSC spatial distribution).
+
static void filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
+
static Feature2D * create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
Creates a detector of the given type. Caller owns the pointer.
+
cv::Mat generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
Computes descriptors for keypoints (may shrink the list in some detectors).
+
std::vector< cv::Point3f > generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
Back-projects keypoints to 3D using depth or stereo in data.
+
GFTT corners + BRIEF descriptors.
Definition Features2d.h:519
+
GFTT corners + DAISY descriptors (OpenCV 3+ xfeatures2d).
Definition Features2d.h:724
+
GFTT corners + FREAK descriptors.
Definition Features2d.h:538
+
GFTT corners + ORB descriptors (common default when SURF is unavailable).
Definition Features2d.h:582
+
Good-features-to-track detector (Shi–Tomasi / Harris).
Definition Features2d.h:494
+
virtual bool isGpuAvailable() const override
Returns true when a GPU/CUDA code path could be used by this detector on this host: i....
+
KAZE detector and descriptor (OpenCV 3+).
Definition Features2d.h:621
+
ORB with octree spatial distribution (RTAB-Map must be built with OCTREE enabled).
Definition Features2d.h:648
+
ORB detector and descriptor (optional GPU).
Definition Features2d.h:384
+
virtual bool isGpuAvailable() const override
Returns true when a GPU/CUDA code path could be used by this detector on this host: i....
+
SIFT detector and descriptor (optional GPU / CudaSift).
Definition Features2d.h:349
+
virtual bool isGpuAvailable() const override
Returns true when a GPU/CUDA code path could be used by this detector on this host: i....
+
SURF detector + DAISY descriptors (OpenCV 3+ xfeatures2d).
Definition Features2d.h:748
+
SURF detector + FREAK descriptors.
Definition Features2d.h:560
+
SURF detector and descriptor (non-free / xfeatures2d depending on OpenCV build).
Definition Features2d.h:321
+
virtual bool isGpuAvailable() const override
Returns true when a GPU/CUDA code path could be used by this detector on this host: i....
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Sparse stereo matching using block matching.
Definition Stereo.h:55
+
SuperPoint (rpautrat) via Torch + Python (RTAB-Map must be built with libtorch and Python support).
Definition Features2d.h:698
+
virtual bool isGpuAvailable() const override
Returns true when a GPU/CUDA code path could be used by this detector on this host: i....
+
SuperPoint via LibTorch (RTAB-Map must be built with libtorch support).
Definition Features2d.h:674
+
virtual bool isGpuAvailable() const override
Returns true when a GPU/CUDA code path could be used by this detector on this host: i....
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/FlannIndex_8h_source.html b/preview/pr-1492/api/latest/FlannIndex_8h_source.html new file mode 100644 index 00000000..540fa877 --- /dev/null +++ b/preview/pr-1492/api/latest/FlannIndex_8h_source.html @@ -0,0 +1,228 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/FlannIndex.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
FlannIndex.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_SRC_FLANNINDEX_H_
+
29#define CORELIB_SRC_FLANNINDEX_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32#include <list>
+
33#include <opencv2/opencv.hpp>
+
34
+
35namespace rtabmap {
+
36
+
+
37class RTABMAP_CORE_EXPORT FlannIndex
+
38{
+
39public:
+
40 // A forward of the internal enum, indexes should match. See src/rtflann/defines.h
+
41 enum flann_algorithm_t
+
42 {
+
43 FLANN_INDEX_LINEAR = 0,
+
44 FLANN_INDEX_KDTREE = 1,
+
45 FLANN_INDEX_KDTREE_SINGLE = 4,
+
46 FLANN_INDEX_LSH = 6,
+
47 };
+
48
+
49 FlannIndex();
+
50 virtual ~FlannIndex();
+
51
+
52 void release();
+
53 std::vector<unsigned char> serializeIndex(bool computeChecksum = true) const;
+
54
+
55 size_t indexedFeatures() const;
+
56
+
57 // return Bytes
+
58 size_t memoryUsed() const;
+
59
+
60 // Note that useDistanceL1 doesn't have any effect if LSH is used
+
61 void buildIndex(
+
62 flann_algorithm_t algorithm,
+
63 const cv::Mat & features,
+
64 bool useDistanceL1 = false,
+
65 float rebalancingFactor = 2.0f);
+
66 // Return false if the indexData doesn't correspond to expected features used and parameters.
+
67 bool loadIndex(
+
68 const std::vector<unsigned char> & indexData,
+
69 flann_algorithm_t algorithm,
+
70 const cv::Mat & features,
+
71 bool useDistanceL1 = false,
+
72 float rebalancingFactor = 2.0f,
+
73 std::string * errorMsg = NULL);
+
74 bool loadIndex(
+
75 const unsigned char * indexData,
+
76 size_t indexDataSize,
+
77 flann_algorithm_t algorithm,
+
78 const cv::Mat & features,
+
79 bool useDistanceL1 = false,
+
80 float rebalancingFactor = 2.0f,
+
81 std::string * errorMsg = NULL);
+
82
+
83 bool isBuilt();
+
84
+
85 int featuresType() const {return featuresType_;}
+
86 int featuresDim() const {return featuresDim_;}
+
87
+
88 std::vector<unsigned int> addPoints(const cv::Mat & features);
+
89
+
90 void removePoint(unsigned int index);
+
91
+
92 // return squared distances (indices should be casted in size_t)
+
93 void knnSearch(
+
94 const cv::Mat & query,
+
95 cv::Mat & indices,
+
96 cv::Mat & dists,
+
97 int knn,
+
98 int checks = 32,
+
99 float eps = 0.0,
+
100 bool sorted = true) const;
+
101
+
102 // return squared distances
+
103 void radiusSearch(
+
104 const cv::Mat & query,
+
105 std::vector<std::vector<size_t> > & indices,
+
106 std::vector<std::vector<float> > & dists,
+
107 float radius,
+
108 int maxNeighbors = 0,
+
109 int checks = 32,
+
110 float eps = 0.0,
+
111 bool sorted = true) const;
+
112
+
113private:
+
114 void * index_;
+
115 unsigned int nextIndex_;
+
116 int featuresType_;
+
117 int featuresDim_;
+
118 bool useDistanceL1_; // true=EUCLEDIAN_L2 false=MANHATTAN_L1
+
119 float rebalancingFactor_;
+
120 flann_algorithm_t algorithm_;
+
121
+
122 // keep feature in memory until the tree is rebuilt
+
123 // (in case the word is deleted when removed from the VWDictionary)
+
124 std::map<int, cv::Mat> addedDescriptors_;
+
125 std::list<int> removedIndexes_;
+
126};
+
+
127
+
128} /* namespace rtabmap */
+
129
+
130#endif /* CORELIB_SRC_FLANNINDEX_H_ */
+ + +
+ + + + diff --git a/preview/pr-1492/api/latest/GPS_8h_source.html b/preview/pr-1492/api/latest/GPS_8h_source.html new file mode 100644 index 00000000..43aa7284 --- /dev/null +++ b/preview/pr-1492/api/latest/GPS_8h_source.html @@ -0,0 +1,190 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/GPS.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
GPS.h
+
+
+
1/*
+
2Copyright (c) 2010-2018, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_GPS_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_GPS_H_
+
30
+
31#include <rtabmap/core/GeodeticCoords.h>
+
32
+
33namespace rtabmap {
+
34
+
+
46class GPS
+
47{
+
48public:
+
+
50 GPS():
+
51 stamp_(0.0),
+
52 longitude_(0.0),
+
53 latitude_(0.0),
+
54 altitude_(0.0),
+
55 error_(0.0),
+
56 bearing_(0.0)
+
57 {}
+
+
+
67 GPS(const double & stamp,
+
68 const double & longitude,
+
69 const double & latitude,
+
70 const double & altitude,
+
71 const double & error,
+
72 const double & bearing):
+
73 stamp_(stamp),
+
74 longitude_(longitude),
+
75 latitude_(latitude),
+
76 altitude_(altitude),
+
77 error_(error),
+
78 bearing_(bearing)
+
79 {}
+
+
81 const double & stamp() const {return stamp_;}
+
83 const double & longitude() const {return longitude_;}
+
85 const double & latitude() const {return latitude_;}
+
87 const double & altitude() const {return altitude_;}
+
89 const double & error() const {return error_;}
+
91 const double & bearing() const {return bearing_;}
+
92
+
96 GeodeticCoords toGeodeticCoords() const {return GeodeticCoords(latitude_, longitude_, altitude_);}
+
97private:
+
98 double stamp_; // in sec
+
99 double longitude_; // DD
+
100 double latitude_; // DD
+
101 double altitude_; // m
+
102 double error_; // m
+
103 double bearing_; // deg (North 0->360 clockwise)
+
104};
+
+
105
+
106}
+
107
+
108#endif /* CORELIB_INCLUDE_RTABMAP_CORE_GPS_H_ */
+
WGS84 GPS fix attached to a sensor sample or graph node.
Definition GPS.h:47
+
GeodeticCoords toGeodeticCoords() const
Definition GPS.h:96
+
GPS(const double &stamp, const double &longitude, const double &latitude, const double &altitude, const double &error, const double &bearing)
Constructs a GPS fix.
Definition GPS.h:67
+
GPS()
Default-constructs a fix at the origin with zero stamp and error.
Definition GPS.h:50
+
const double & altitude() const
Definition GPS.h:87
+
const double & stamp() const
Definition GPS.h:81
+
const double & bearing() const
Definition GPS.h:91
+
const double & latitude() const
Definition GPS.h:85
+
const double & longitude() const
Definition GPS.h:83
+
const double & error() const
Definition GPS.h:89
+
WGS84 geodetic latitude, longitude and altitude with coordinate conversions.
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/GainCompensator_8h_source.html b/preview/pr-1492/api/latest/GainCompensator_8h_source.html new file mode 100644 index 00000000..d1a095e7 --- /dev/null +++ b/preview/pr-1492/api/latest/GainCompensator_8h_source.html @@ -0,0 +1,204 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/GainCompensator.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
GainCompensator.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_SRC_GAINCOMPENSATOR_H_
+
29#define CORELIB_SRC_GAINCOMPENSATOR_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <pcl/point_cloud.h>
+
34#include <pcl/point_types.h>
+
35#include <pcl/pcl_base.h>
+
36#include <opencv2/opencv.hpp>
+
37#include <rtabmap/core/Link.h>
+
38
+
39namespace rtabmap {
+
40
+
+
44class RTABMAP_CORE_EXPORT GainCompensator {
+
45public:
+
46 GainCompensator(double maxCorrespondenceDistance = 0.02, double minOverlap = 0.0, double alpha = 0.01, double beta = 10);
+
47 virtual ~GainCompensator();
+
48
+
49 void feed(
+
50 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloudA, // should not contain NaNs
+
51 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloudB, // should not contain NaNs
+
52 const Transform & transformB);
+
53 void feed(
+
54 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloudA,
+
55 const pcl::IndicesPtr & indicesA,
+
56 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloudB,
+
57 const pcl::IndicesPtr & indicesB,
+
58 const Transform & transformB);
+
59 void feed(
+
60 const std::map<int, pcl::PointCloud<pcl::PointXYZRGB>::Ptr> & clouds, // should not contain NaNs
+
61 const std::multimap<int, Link> & links);
+
62 void feed(
+
63 const std::map<int, pcl::PointCloud<pcl::PointXYZRGB>::Ptr> & clouds,
+
64 const std::map<int, pcl::IndicesPtr> & indices,
+
65 const std::multimap<int, Link> & links);
+
66 void feed(
+
67 const std::map<int, pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr> & clouds,
+
68 const std::map<int, pcl::IndicesPtr> & indices,
+
69 const std::multimap<int, Link> & links);
+
70 void feed(
+
71 const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr, pcl::IndicesPtr> > & clouds,
+
72 const std::multimap<int, Link> & links);
+
73
+
74 void apply(
+
75 int id,
+
76 pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
+
77 bool rgb = true) const;
+
78 void apply(
+
79 int id,
+
80 pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
+
81 const pcl::IndicesPtr & indices,
+
82 bool rgb = true) const;
+
83 void apply(
+
84 int id,
+
85 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
+
86 const pcl::IndicesPtr & indices,
+
87 bool rgb = true) const;
+
88 void apply(
+
89 int id,
+
90 cv::Mat & image,
+
91 bool rgb = true) const;
+
92
+
93 double getGain(int id, double * r=0, double * g=0, double * b=0) const;
+
94 int getIndex(int id) const;
+
95
+
96private:
+
97 cv::Mat_<double> gains_;
+
98 std::map<int, int> idToIndex_;
+
99 double maxCorrespondenceDistance_;
+
100 double minOverlap_;
+
101 double alpha_;
+
102 double beta_;
+
103
+
104};
+
+
105
+
106} /* namespace rtabmap */
+
107
+
108#endif /* CORELIB_SRC_GAINCOMPENSATOR_H_ */
+ +
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/GeodeticCoords_8h_source.html b/preview/pr-1492/api/latest/GeodeticCoords_8h_source.html new file mode 100644 index 00000000..aebe6091 --- /dev/null +++ b/preview/pr-1492/api/latest/GeodeticCoords_8h_source.html @@ -0,0 +1,198 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/GeodeticCoords.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
GeodeticCoords.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28/*
+
29 * The methods in this file were modified from the originals of the MRPT toolkit (see notice below):
+
30 * https://github.com/MRPT/mrpt/blob/master/libs/topography/src/conversions.cpp
+
31 */
+
32
+
33/* +---------------------------------------------------------------------------+
+
34 | Mobile Robot Programming Toolkit (MRPT) |
+
35 | http://www.mrpt.org/ |
+
36 | |
+
37 | Copyright (c) 2005-2016, Individual contributors, see AUTHORS file |
+
38 | See: http://www.mrpt.org/Authors - All rights reserved. |
+
39 | Released under BSD License. See details in http://www.mrpt.org/License |
+
40 +---------------------------------------------------------------------------+ */
+
41
+
42
+
43#ifndef GEODETICCOORDS_H_
+
44#define GEODETICCOORDS_H_
+
45
+
46#include <rtabmap/core/rtabmap_core_export.h>
+
47
+
48#include <opencv2/core/core.hpp>
+
49
+
50namespace rtabmap {
+
51
+
+
61class RTABMAP_CORE_EXPORT GeodeticCoords
+
62{
+
63public:
+ +
72 GeodeticCoords(double latitude, double longitude, double altitude);
+
73
+
75 const double & latitude() const {return latitude_;}
+
77 const double & longitude() const {return longitude_;}
+
79 const double & altitude() const {return altitude_;}
+
80
+
82 void setLatitude(const double & value) {latitude_ = value;}
+
84 void setLongitude(const double & value) {longitude_ = value;}
+
86 void setAltitude(const double & value) {altitude_ = value;}
+
87
+
89 cv::Point3d toGeocentric_WGS84() const;
+
94 cv::Point3d toENU_WGS84(const GeodeticCoords & origin) const; // East=X, North=Y
+
95
+
97 void fromGeocentric_WGS84(const cv::Point3d& geocentric);
+
99 void fromENU_WGS84(const cv::Point3d & enu, const GeodeticCoords & origin);
+
100
+
102 static cv::Point3d ENU_WGS84ToGeocentric_WGS84(const cv::Point3d & enu, const GeodeticCoords & origin);
+
107 static cv::Point3d Geocentric_WGS84ToENU_WGS84(
+
108 const cv::Point3d & geocentric_WGS84,
+
109 const cv::Point3d & origin_geocentric_WGS84,
+
110 const GeodeticCoords & origin);
+
111
+
112private:
+
113 double latitude_; // deg
+
114 double longitude_; // deg
+
115 double altitude_; // m
+
116};
+
+
117
+
118}
+
119
+
120#endif /* GEODETICCOORDS_H_ */
+
WGS84 geodetic latitude, longitude and altitude with coordinate conversions.
+
GeodeticCoords(double latitude, double longitude, double altitude)
Constructs geodetic coordinates.
+
const double & altitude() const
+
GeodeticCoords()
Default-constructs coordinates at (0°, 0°, 0 m).
+
const double & longitude() const
+
static cv::Point3d Geocentric_WGS84ToENU_WGS84(const cv::Point3d &geocentric_WGS84, const cv::Point3d &origin_geocentric_WGS84, const GeodeticCoords &origin)
+
static cv::Point3d ENU_WGS84ToGeocentric_WGS84(const cv::Point3d &enu, const GeodeticCoords &origin)
+
void setLatitude(const double &value)
Sets latitude in decimal degrees.
+
void setLongitude(const double &value)
Sets longitude in decimal degrees.
+
void fromENU_WGS84(const cv::Point3d &enu, const GeodeticCoords &origin)
Sets this point from an ENU offset relative to origin.
+
const double & latitude() const
+
void fromGeocentric_WGS84(const cv::Point3d &geocentric)
Sets this point from ECEF geocentric geocentric coordinates.
+
cv::Point3d toGeocentric_WGS84() const
+
cv::Point3d toENU_WGS84(const GeodeticCoords &origin) const
+
void setAltitude(const double &value)
Sets altitude in meters.
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/GlobalDescriptorExtractor_8h_source.html b/preview/pr-1492/api/latest/GlobalDescriptorExtractor_8h_source.html new file mode 100644 index 00000000..a259be50 --- /dev/null +++ b/preview/pr-1492/api/latest/GlobalDescriptorExtractor_8h_source.html @@ -0,0 +1,173 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/GlobalDescriptorExtractor.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
GlobalDescriptorExtractor.h
+
+
+
1/*
+
2Copyright (c) 2010-2024, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef GLOBAL_DESCRIPTOR_EXTRACTOR_H_
+
29#define GLOBAL_DESCRIPTOR_EXTRACTOR_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include "rtabmap/core/Parameters.h"
+
34#include "rtabmap/core/SensorData.h"
+
35
+
36
+
37namespace rtabmap {
+
38
+
39// Feature2D
+
+
40class RTABMAP_CORE_EXPORT GlobalDescriptorExtractor {
+
41public:
+
42 enum Type {
+
43 kUndef=0,
+
44 kPyDescriptor=1};
+
45
+
46 static std::string typeName(Type type)
+
47 {
+
48 switch(type){
+
49 case kPyDescriptor:
+
50 return "PyDescriptor";
+
51 default:
+
52 return "Unknown";
+
53 }
+
54 }
+
55
+
56 static GlobalDescriptorExtractor * create(const ParametersMap & parameters = ParametersMap());
+
57 static GlobalDescriptorExtractor * create(GlobalDescriptorExtractor::Type type, const ParametersMap & parameters = ParametersMap()); // for convenience
+
58
+
59public:
+ +
61
+
62 virtual GlobalDescriptor extract(const SensorData & data) const = 0;
+
63
+
64 virtual void parseParameters(const ParametersMap & parameters) {}
+
65 virtual GlobalDescriptorExtractor::Type getType() const = 0;
+
66
+
67protected:
+
68 GlobalDescriptorExtractor(const ParametersMap & parameters = ParametersMap());
+
69};
+
+
70
+
71}
+
72
+
73#endif /* GLOBAL_DESCRIPTOR_EXTRACTOR_H_ */
+ + +
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/GlobalDescriptor_8h_source.html b/preview/pr-1492/api/latest/GlobalDescriptor_8h_source.html new file mode 100644 index 00000000..ddc0e303 --- /dev/null +++ b/preview/pr-1492/api/latest/GlobalDescriptor_8h_source.html @@ -0,0 +1,157 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/GlobalDescriptor.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
GlobalDescriptor.h
+
+
+
1/*
+
2Copyright (c) 2010-2024, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include <opencv2/core/core.hpp>
+
31
+
32namespace rtabmap
+
33{
+
34
+
+ +
36{
+
37
+
38public:
+
39 GlobalDescriptor(int type, const cv::Mat & data, const cv::Mat & info = cv::Mat()) :
+
40 type_(type),
+
41 info_(info),
+
42 data_(data)
+
43 {}
+ +
45 type_(-1) // Not set
+
46 {}
+
47 virtual ~GlobalDescriptor() {}
+
48
+
49 int type() const {return type_;}
+
50 const cv::Mat info() const {return info_;}
+
51 const cv::Mat data() const {return data_;}
+
52
+
53private:
+
54 int type_;
+
55 cv::Mat info_;
+
56 cv::Mat data_;
+
57};
+
+
58
+
59} // namespace rtabmap
+ + +
+ + + + diff --git a/preview/pr-1492/api/latest/GlobalMap_8h_source.html b/preview/pr-1492/api/latest/GlobalMap_8h_source.html new file mode 100644 index 00000000..79e262b8 --- /dev/null +++ b/preview/pr-1492/api/latest/GlobalMap_8h_source.html @@ -0,0 +1,227 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/GlobalMap.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
GlobalMap.h
+
+
+
1/*
+
2Copyright (c) 2010-2023, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef SRC_MAP_H_
+
29#define SRC_MAP_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/LocalGrid.h>
+
34#include <rtabmap/core/Parameters.h>
+
35#include <rtabmap/core/Transform.h>
+
36#include <list>
+
37
+
38namespace rtabmap {
+
39
+
+
55class RTABMAP_CORE_EXPORT GlobalMap
+
56{
+
57public:
+
+
59 inline static float logodds(double probability)
+
60 {
+
61 return (float) log(probability/(1-probability));
+
62 }
+
+
63
+
+
65 inline static double probability(double logodds)
+
66 {
+
67 return 1. - ( 1. / (1. + exp(logodds)));
+
68 }
+
+
69
+
70public:
+
71 virtual ~GlobalMap();
+
72
+
83 bool fullUpdateNeeded(const std::map<int, Transform> & poses) const;
+
84
+
90 bool update(const std::map<int, Transform> & poses);
+
91
+
93 virtual void clear();
+
94
+
96 float getCellSize() const {return cellSize_;}
+
98 float getUpdateError() const {return updateError_;}
+
100 const std::map<int, Transform> & addedNodes() const {return addedNodes_;}
+
101
+
103 void getGridMin(double & x, double & y) const {x=minValues_[0];y=minValues_[1];}
+
105 void getGridMax(double & x, double & y) const {x=maxValues_[0];y=maxValues_[1];}
+
107 void getGridMin(double & x, double & y, double & z) const {x=minValues_[0];y=minValues_[1];z=minValues_[2];}
+
109 void getGridMax(double & x, double & y, double & z) const {x=maxValues_[0];y=maxValues_[1];z=maxValues_[2];}
+
110
+
112 virtual unsigned long getMemoryUsed() const;
+
113
+
114protected:
+
120 GlobalMap(const LocalGridCache * cache, const ParametersMap & parameters = ParametersMap());
+
121
+
123 virtual void assemble(const std::list<std::pair<int, Transform> > & newPoses) = 0;
+
124
+
126 const std::map<int, LocalGrid> & cache() const {return cache_->localGrids();}
+
127
+
129 const std::map<int, Transform> & assembledNodes() const {return addedNodes_;}
+
131 bool isNodeAssembled(int id) {return addedNodes_.find(id) != addedNodes_.end();}
+
133 void addAssembledNode(int id, const Transform & pose);
+
134
+
135protected:
+
136 float cellSize_;
+
137 float updateError_;
+
138
+
139 float occupancyThr_;
+
140 float logOddsHit_;
+
141 float logOddsMiss_;
+
142 float logOddsClampingMin_;
+
143 float logOddsClampingMax_;
+
144
+
145 double minValues_[3];
+
146 double maxValues_[3];
+
147
+
148private:
+
149 const LocalGridCache * cache_;
+
150 std::map<int, Transform> addedNodes_;
+
151};
+
+
152
+
153} /* namespace rtabmap */
+
154
+
155#endif /* SRC_MAP_H_ */
+
Abstract base for assembling per-node LocalGrid data into a global map.
Definition GlobalMap.h:56
+
GlobalMap(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
Constructs the base map; subclasses call from their constructor.
+
void getGridMax(double &x, double &y, double &z) const
3D grid maximum (x, y, z) in meters.
Definition GlobalMap.h:109
+
void addAssembledNode(int id, const Transform &pose)
Records a successfully assembled node (ids <= 0 are ignored).
+
bool fullUpdateNeeded(const std::map< int, Transform > &poses) const
True if the map should be rebuilt from cache (loop closure or disjoint graph).
+
virtual unsigned long getMemoryUsed() const
Approximate memory used by assembled-node bookkeeping (bytes).
+
void getGridMin(double &x, double &y, double &z) const
3D grid minimum (x, y, z) in meters.
Definition GlobalMap.h:107
+
float getCellSize() const
Definition GlobalMap.h:96
+
static double probability(double logodds)
Converts log-odds back to probability in (0, 1).
Definition GlobalMap.h:65
+
const std::map< int, LocalGrid > & cache() const
Definition GlobalMap.h:126
+
const std::map< int, Transform > & assembledNodes() const
Definition GlobalMap.h:129
+
const std::map< int, Transform > & addedNodes() const
Definition GlobalMap.h:100
+
float getUpdateError() const
Definition GlobalMap.h:98
+
bool isNodeAssembled(int id)
Definition GlobalMap.h:131
+
bool update(const std::map< int, Transform > &poses)
Incrementally assemble new nodes from poses.
+
virtual void clear()
Clears assembled nodes and grid bounds; does not clear LocalGridCache.
+
void getGridMax(double &x, double &y) const
2D grid maximum (x, y) in meters.
Definition GlobalMap.h:105
+
void getGridMin(double &x, double &y) const
2D grid minimum (x, y) in meters.
Definition GlobalMap.h:103
+
virtual void assemble(const std::list< std::pair< int, Transform > > &newPoses)=0
Subclass hook: merge newPoses into the global map; call addAssembledNode().
+
static float logodds(double probability)
Converts probability in (0, 1) to log-odds.
Definition GlobalMap.h:59
+
Cache of LocalGrid entries keyed by map node id.
Definition LocalGrid.h:98
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Graph_8h_source.html b/preview/pr-1492/api/latest/Graph_8h_source.html new file mode 100644 index 00000000..29cab14e --- /dev/null +++ b/preview/pr-1492/api/latest/Graph_8h_source.html @@ -0,0 +1,374 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Graph.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Graph.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef GRAPH_H_
+
29#define GRAPH_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <map>
+
34#include <list>
+
35#include <rtabmap/core/Parameters.h>
+
36#include <rtabmap/core/Link.h>
+
37#include <rtabmap/core/GPS.h>
+
38#include <rtabmap/core/CameraModel.h>
+
39
+
40namespace rtabmap {
+
41class Memory;
+
42
+
61namespace graph {
+
62
+
80bool RTABMAP_CORE_EXPORT exportPoses(
+
81 const std::string & filePath,
+
82 int format,
+
83 const std::map<int, Transform> & poses,
+
84 const std::multimap<int, Link> & constraints = std::multimap<int, Link>(),
+
85 const std::map<int, double> & stamps = std::map<int, double>(),
+
86 const ParametersMap & parameters = ParametersMap());
+
87
+
110bool RTABMAP_CORE_EXPORT importPoses(
+
111 const std::string & filePath,
+
112 int format,
+
113 std::map<int, Transform> & poses,
+
114 std::multimap<int, Link> * constraints = 0,
+
115 std::map<int, double> * stamps = 0);
+
116
+
123bool RTABMAP_CORE_EXPORT exportGPS(
+
124 const std::string & filePath,
+
125 const std::map<int, GPS> & gpsValues,
+
126 unsigned int rgba = 0xFFFFFFFF);
+
127
+
144void RTABMAP_CORE_EXPORT calcKittiSequenceErrors(
+
145 const std::vector<Transform> &poses_gt,
+
146 const std::vector<Transform> &poses_result,
+
147 float & t_err,
+
148 float & r_err);
+
149
+
167void RTABMAP_CORE_EXPORT calcRelativeErrors (
+
168 const std::vector<Transform> &poses_gt,
+
169 const std::vector<Transform> &poses_result,
+
170 float & t_err,
+
171 float & r_err);
+
172
+
208Transform RTABMAP_CORE_EXPORT calcRMSE(
+
209 const std::map<int, Transform> &groundTruth,
+
210 const std::map<int, Transform> &poses,
+
211 float & translational_rmse,
+
212 float & translational_mean,
+
213 float & translational_median,
+
214 float & translational_std,
+
215 float & translational_min,
+
216 float & translational_max,
+
217 float & rotational_rmse,
+
218 float & rotational_mean,
+
219 float & rotational_median,
+
220 float & rotational_std,
+
221 float & rotational_min,
+
222 float & rotational_max,
+
223 bool align2D = false);
+
224
+
+ +
232{
+
233 float linear=-1.0f;
+
234 float angular=-1.0f;
+
235 float linearRatio=-1.0f;
+
236 float angularRatio=-1.0f;
+ + +
239};
+
+
240
+
265MaxGraphErrors RTABMAP_CORE_EXPORT computeMaxGraphErrors(
+
266 const std::map<int, Transform> & poses,
+
267 const std::multimap<int, Link> & links,
+
268 bool for3DoF = false);
+
269
+
280std::vector<double> RTABMAP_CORE_EXPORT getMaxOdomInf(const std::multimap<int, Link> & links);
+
281
+
296std::multimap<int, Link>::iterator RTABMAP_CORE_EXPORT findLink(
+
297 std::multimap<int, Link> & links,
+
298 int from,
+
299 int to,
+
300 bool checkBothWays = true,
+
301 Link::Type type = Link::kUndef);
+
303std::multimap<int, std::pair<int, Link::Type> >::iterator RTABMAP_CORE_EXPORT findLink(
+
304 std::multimap<int, std::pair<int, Link::Type> > & links,
+
305 int from,
+
306 int to,
+
307 bool checkBothWays = true,
+
308 Link::Type type = Link::kUndef);
+
310std::multimap<int, int>::iterator RTABMAP_CORE_EXPORT findLink(
+
311 std::multimap<int, int> & links,
+
312 int from,
+
313 int to,
+
314 bool checkBothWays = true);
+
316std::multimap<int, Link>::const_iterator RTABMAP_CORE_EXPORT findLink(
+
317 const std::multimap<int, Link> & links,
+
318 int from,
+
319 int to,
+
320 bool checkBothWays = true,
+
321 Link::Type type = Link::kUndef);
+
323std::multimap<int, std::pair<int, Link::Type> >::const_iterator RTABMAP_CORE_EXPORT findLink(
+
324 const std::multimap<int, std::pair<int, Link::Type> > & links,
+
325 int from,
+
326 int to,
+
327 bool checkBothWays = true,
+
328 Link::Type type = Link::kUndef);
+
330std::multimap<int, int>::const_iterator RTABMAP_CORE_EXPORT findLink(
+
331 const std::multimap<int, int> & links,
+
332 int from,
+
333 int to,
+
334 bool checkBothWays = true);
+
335
+
347std::list<Link> RTABMAP_CORE_EXPORT findLinks(
+
348 const std::multimap<int, Link> & links,
+
349 int from);
+
350
+
360std::multimap<int, Link> RTABMAP_CORE_EXPORT filterDuplicateLinks(
+
361 const std::multimap<int, Link> & links);
+
362
+
375std::multimap<int, Link> RTABMAP_CORE_EXPORT filterLinks(
+
376 const std::multimap<int, Link> & links,
+
377 Link::Type filteredType,
+
378 bool inverted = false);
+
380std::map<int, Link> RTABMAP_CORE_EXPORT filterLinks(
+
381 const std::map<int, Link> & links,
+
382 Link::Type filteredType,
+
383 bool inverted = false);
+
384
+
400std::map<int, Transform> RTABMAP_CORE_EXPORT frustumPosesFiltering(
+
401 const std::map<int, Transform> & poses,
+
402 const Transform & cameraPose,
+
403 float horizontalFOV = 45.0f,
+
404 float verticalFOV = 45.0f,
+
405 float nearClipPlaneDistance = 0.1f,
+
406 float farClipPlaneDistance = 100.0f,
+
407 bool negative = false);
+
408
+
423std::map<int, Transform> RTABMAP_CORE_EXPORT radiusPosesFiltering(
+
424 const std::map<int, Transform> & poses,
+
425 float radius,
+
426 float angle,
+
427 bool keepLatest = true);
+
428
+
440std::multimap<int, int> RTABMAP_CORE_EXPORT radiusPosesClustering(
+
441 const std::map<int, Transform> & poses,
+
442 float radius,
+
443 float angle);
+
444
+
461void reduceGraph(
+
462 const std::map<int, Transform> & poses,
+
463 const std::multimap<int, Link> & links,
+
464 std::multimap<int, int> & hyperNodes,
+
465 std::multimap<int, Link> & hyperLinks);
+
466
+
480std::list<std::pair<int, Transform> > RTABMAP_CORE_EXPORT computePath(
+
481 const std::map<int, rtabmap::Transform> & poses,
+
482 const std::multimap<int, int> & links,
+
483 int from,
+
484 int to,
+
485 bool updateNewCosts = false);
+
486
+
500std::list<int> RTABMAP_CORE_EXPORT computePath(
+
501 const std::multimap<int, Link> & links,
+
502 int from,
+
503 int to,
+
504 bool updateNewCosts = false,
+
505 bool useSameCostForAllLinks = false);
+
506
+
539std::list<std::pair<int, Transform> > RTABMAP_CORE_EXPORT computePath(
+
540 int fromId,
+
541 int toId,
+
542 const Memory * memory,
+
543 bool lookInDatabase = true,
+
544 bool updateNewCosts = false,
+
545 float linearVelocity = 0.0f,
+
546 float angularVelocity = 0.0f,
+
547 bool ignoreDirectLinks = false);
+
548
+
559int RTABMAP_CORE_EXPORT findNearestNode(
+
560 const std::map<int, rtabmap::Transform> & poses,
+
561 const rtabmap::Transform & targetPose,
+
562 float * distance = 0);
+
563
+
578std::map<int, float> RTABMAP_CORE_EXPORT findNearestNodes(
+
579 int nodeId,
+
580 const std::map<int, Transform> & poses,
+
581 float radius,
+
582 float angle = 0.0f,
+
583 int k=0);
+
593std::map<int, float> RTABMAP_CORE_EXPORT findNearestNodes(
+
594 const Transform & targetPose,
+
595 const std::map<int, Transform> & poses,
+
596 float radius,
+
597 float angle = 0.0f,
+
598 int k=0);
+
603std::map<int, Transform> RTABMAP_CORE_EXPORT findNearestPoses(
+
604 int nodeId,
+
605 const std::map<int, Transform> & poses,
+
606 float radius,
+
607 float angle = 0.0f,
+
608 int k=0);
+
610std::map<int, Transform> RTABMAP_CORE_EXPORT findNearestPoses(
+
611 const Transform & targetPose,
+
612 const std::map<int, Transform> & poses,
+
613 float radius,
+
614 float angle = 0.0f,
+
615 int k=0);
+
616
+
618RTABMAP_DEPRECATED std::map<int, float> RTABMAP_CORE_EXPORT findNearestNodes(const std::map<int, rtabmap::Transform> & nodes, const rtabmap::Transform & targetPose, int k);
+
620RTABMAP_DEPRECATED std::map<int, float> RTABMAP_CORE_EXPORT getNodesInRadius(int nodeId, const std::map<int, Transform> & nodes, float radius);
+
622RTABMAP_DEPRECATED std::map<int, float> RTABMAP_CORE_EXPORT getNodesInRadius(const Transform & targetPose, const std::map<int, Transform> & nodes, float radius);
+
624RTABMAP_DEPRECATED std::map<int, Transform> RTABMAP_CORE_EXPORT getPosesInRadius(int nodeId, const std::map<int, Transform> & nodes, float radius, float angle = 0.0f);
+
626RTABMAP_DEPRECATED std::map<int, Transform> RTABMAP_CORE_EXPORT getPosesInRadius(const Transform & targetPose, const std::map<int, Transform> & nodes, float radius, float angle = 0.0f);
+
627
+
636float RTABMAP_CORE_EXPORT computePathLength(
+
637 const std::vector<std::pair<int, Transform> > & path);
+
638
+
648float RTABMAP_CORE_EXPORT computePathLength(
+
649 const std::map<int, Transform> & path);
+
650
+
663std::list<std::map<int, Transform> > RTABMAP_CORE_EXPORT getPaths(
+
664 std::map<int, Transform> poses,
+
665 const std::multimap<int, Link> & links);
+
666
+
674void RTABMAP_CORE_EXPORT computeMinMax(const std::map<int, Transform> & poses,
+
675 cv::Vec3f & min,
+
676 cv::Vec3f & max);
+
677
+
678} /* namespace graph */
+
679
+
680} /* namespace rtabmap */
+
681#endif /* GRAPH_H_ */
+ + +
Three-tiered memory management (STM, WM, LTM) for RTAB-Map.
Definition Memory.h:102
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
Pose-graph I/O, trajectory metrics, link utilities, and path planning.
+ +
Largest pose-graph constraint violations after optimization.
Definition Graph.h:232
+
float angular
Absolute angular error (rad) of the worst link.
Definition Graph.h:234
+
float linearRatio
linear / sqrt(trans variance) of the worst link.
Definition Graph.h:235
+
float linear
Absolute linear error (m) of the worst link.
Definition Graph.h:233
+
Link angularLink
Link with largest angularRatio.
Definition Graph.h:238
+
float angularRatio
angular / sqrt(rot variance) of the worst link.
Definition Graph.h:236
+
Link linearLink
Link with largest linearRatio.
Definition Graph.h:237
+
+ + + + diff --git a/preview/pr-1492/api/latest/GridMap_8h_source.html b/preview/pr-1492/api/latest/GridMap_8h_source.html new file mode 100644 index 00000000..d27bf086 --- /dev/null +++ b/preview/pr-1492/api/latest/GridMap_8h_source.html @@ -0,0 +1,174 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/global_map/GridMap.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
GridMap.h
+
+
+
1/*
+
2Copyright (c) 2010-2023, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_SRC_GRIDMAP_H_
+
29#define CORELIB_SRC_GRIDMAP_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/GlobalMap.h>
+
34#include <pcl/point_cloud.h>
+
35#include <pcl/point_types.h>
+
36#include <pcl/PolygonMesh.h>
+
37
+
38namespace grid_map {
+
39 class GridMap;
+
40}
+
41
+
42namespace rtabmap {
+
43
+
+
44class RTABMAP_CORE_EXPORT GridMap : public GlobalMap
+
45{
+
46public:
+
47 GridMap(const LocalGridCache * cache, const ParametersMap & parameters = ParametersMap());
+
48
+
49 virtual ~GridMap();
+
50 virtual void clear();
+
51
+
52 const grid_map::GridMap * gridMap() const {return gridMap_;}
+
53
+
54 cv::Mat createHeightMap(float & xMin, float & yMin, float & cellSize) const;
+
55 cv::Mat createColorMap(float & xMin, float & yMin, float & cellSize) const;
+
56 pcl::PointCloud<pcl::PointXYZRGB>::Ptr createTerrainCloud() const;
+
57 pcl::PolygonMesh::Ptr createTerrainMesh() const;
+
58
+
59protected:
+
60 virtual void assemble(const std::list<std::pair<int, Transform> > & newPoses);
+
61
+
62private:
+
63 cv::Mat toImage(const std::string & layer, float & xMin, float & yMin, float & cellSize) const;
+
64
+
65private:
+
66 grid_map::GridMap * gridMap_;
+
67 float minMapSize_;
+
68};
+
+
69
+
70}
+
71
+
72#endif /* CORELIB_SRC_OCCUPANCYGRID_H_ */
+
Abstract base for assembling per-node LocalGrid data into a global map.
Definition GlobalMap.h:56
+ +
virtual void clear()
Clears assembled nodes and grid bounds; does not clear LocalGridCache.
+
virtual void assemble(const std::list< std::pair< int, Transform > > &newPoses)
Subclass hook: merge newPoses into the global map; call addAssembledNode().
+
Cache of LocalGrid entries keyed by map node id.
Definition LocalGrid.h:98
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/IMUFilter_8h_source.html b/preview/pr-1492/api/latest/IMUFilter_8h_source.html new file mode 100644 index 00000000..87a88ea7 --- /dev/null +++ b/preview/pr-1492/api/latest/IMUFilter_8h_source.html @@ -0,0 +1,184 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/IMUFilter.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
IMUFilter.h
+
+
+
1/*
+
2Copyright (c) 2010-2019, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_IMUFILTER_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_IMUFILTER_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32#include <rtabmap/core/Parameters.h>
+
33#include <Eigen/Geometry>
+
34
+
35namespace rtabmap {
+
36
+
+
58class RTABMAP_CORE_EXPORT IMUFilter
+
59{
+
60public:
+
+
64 enum Type {
+
65 kMadgwick = 0,
+
66 kComplementaryFilter = 1};
+
+
73 static IMUFilter * create(const ParametersMap & parameters = ParametersMap());
+
74
+
82 static IMUFilter * create(IMUFilter::Type type, const ParametersMap & parameters = ParametersMap());
+
83
+
84 virtual ~IMUFilter() {}
+
85
+
90 virtual void parseParameters(const ParametersMap & parameters) {}
+
91
+
102 void update(
+
103 double gx, double gy, double gz,
+
104 double ax, double ay, double az,
+
105 double stamp);
+
106
+
108 virtual IMUFilter::Type type() const = 0;
+
109
+
117 virtual void getOrientation(double & qx, double & qy, double & qz, double & qw) const = 0;
+
118
+
126 virtual void reset(double qx = 0.0, double qy = 0.0, double qz = 0.0, double qw = 1.0) = 0;
+
127
+
128protected:
+
129 IMUFilter(const ParametersMap & parameters = ParametersMap()) : previousStamp_(0) {}
+
130
+
131private:
+
132 virtual void updateImpl(
+
133 double gx, double gy, double gz,
+
134 double ax, double ay, double az,
+
135 double dt) = 0;
+
136
+
137 double previousStamp_;
+
138};
+
+
139
+
140} // namespace rtabmap
+
141
+
142#endif /* CORELIB_INCLUDE_RTABMAP_CORE_IMUFILTER_H_ */
+
Fuses gyroscope and accelerometer samples into an orientation quaternion.
Definition IMUFilter.h:59
+
Type
Orientation fusion algorithm.
Definition IMUFilter.h:64
+
static IMUFilter * create(const ParametersMap &parameters=ParametersMap())
Creates a filter using type parsed from parameters.
+
virtual void parseParameters(const ParametersMap &parameters)
Re-reads filter parameters from parameters.
Definition IMUFilter.h:90
+
virtual void reset(double qx=0.0, double qy=0.0, double qz=0.0, double qw=1.0)=0
Resets internal state to the given orientation.
+
static IMUFilter * create(IMUFilter::Type type, const ParametersMap &parameters=ParametersMap())
Creates a filter of the given type.
+
void update(double gx, double gy, double gz, double ax, double ay, double az, double stamp)
Integrates one IMU sample and updates the internal orientation estimate.
+
virtual IMUFilter::Type type() const =0
+
virtual void getOrientation(double &qx, double &qy, double &qz, double &qw) const =0
Current orientation estimate.
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/IMUThread_8h_source.html b/preview/pr-1492/api/latest/IMUThread_8h_source.html new file mode 100644 index 00000000..00529e5c --- /dev/null +++ b/preview/pr-1492/api/latest/IMUThread_8h_source.html @@ -0,0 +1,183 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/IMUThread.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
IMUThread.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
31
+
32#include <rtabmap/core/Transform.h>
+
33#include <rtabmap/core/Parameters.h>
+
34#include <rtabmap/utilite/UThread.h>
+
35#include <rtabmap/utilite/UEventsSender.h>
+
36#include <rtabmap/utilite/UTimer.h>
+
37
+
38#include <fstream>
+
39
+
40namespace rtabmap {
+
41
+
42class IMUFilter;
+
43
+
+
65class RTABMAP_CORE_EXPORT IMUThread :
+
66 public UThread,
+
67 public UEventsSender
+
68{
+
69public:
+
75 IMUThread(int rate, const Transform & localTransform);
+
76 virtual ~IMUThread();
+
77
+
83 bool init(const std::string & path);
+
84
+
86 void setRate(int rate);
+
87
+
94 void enableIMUFiltering(int filteringStrategy = 1, const ParametersMap & parameters = ParametersMap(), bool baseFrameConversion = false);
+
95
+ +
98
+
99private:
+
100 virtual void mainLoopBegin();
+
101 virtual void mainLoop();
+
102
+
103private:
+
104 int rate_;
+
105 Transform localTransform_;
+
106 std::ifstream imuFile_;
+
107 UTimer frameRateTimer_;
+
108 double captureDelay_;
+
109 double previousStamp_;
+
110 IMUFilter * _imuFilter;
+
111 bool _imuBaseFrameConversion;
+
112};
+
+
113
+
114} // namespace rtabmap
+ + + +
Fuses gyroscope and accelerometer samples into an orientation quaternion.
Definition IMUFilter.h:59
+
Background thread that replays IMU measurements from a CSV file.
Definition IMUThread.h:68
+
void setRate(int rate)
Sets the target playback rate in Hz.
+
void disableIMUFiltering()
Disables fusion and deletes the internal IMUFilter.
+
IMUThread(int rate, const Transform &localTransform)
Constructs the replay thread.
+
void enableIMUFiltering(int filteringStrategy=1, const ParametersMap &parameters=ParametersMap(), bool baseFrameConversion=false)
Enables orientation fusion on replayed samples.
+
bool init(const std::string &path)
Opens and validates an IMU CSV file.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/IMU_8h_source.html b/preview/pr-1492/api/latest/IMU_8h_source.html new file mode 100644 index 00000000..d5cc4bfd --- /dev/null +++ b/preview/pr-1492/api/latest/IMU_8h_source.html @@ -0,0 +1,256 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/IMU.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
IMU.h
+
+
+
1/*
+
2Copyright (c) 2010-2026, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef IMU_H_
+
29#define IMU_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32#include <opencv2/core/core.hpp>
+
33#include <rtabmap/utilite/UEvent.h>
+
34#include <rtabmap/core/Transform.h>
+
35
+
36namespace rtabmap {
+
37
+
+
56class RTABMAP_CORE_EXPORT IMU
+
57{
+
58public:
+
60 IMU() {}
+
61
+
+
72 IMU(const cv::Vec4d & orientation, // qx qy qz qw
+
73 const cv::Mat & orientationCovariance,
+
74 const cv::Vec3d & angularVelocity,
+
75 const cv::Mat & angularVelocityCovariance,
+
76 const cv::Vec3d & linearAcceleration,
+
77 const cv::Mat & linearAccelerationCovariance,
+
78 const Transform & localTransform = Transform::getIdentity()) :
+
79 orientation_(orientation),
+
80 orientationCovariance_(orientationCovariance),
+
81 angularVelocity_(angularVelocity),
+
82 angularVelocityCovariance_(angularVelocityCovariance),
+
83 linearAcceleration_(linearAcceleration),
+
84 linearAccelerationCovariance_(linearAccelerationCovariance),
+
85 localTransform_(localTransform)
+
86 {
+
87 }
+
+
88
+
+
97 IMU(const cv::Vec3d & angularVelocity,
+
98 const cv::Mat & angularVelocityCovariance,
+
99 const cv::Vec3d & linearAcceleration,
+
100 const cv::Mat & linearAccelerationCovariance,
+
101 const Transform & localTransform = Transform::getIdentity()) :
+
102 angularVelocity_(angularVelocity),
+
103 angularVelocityCovariance_(angularVelocityCovariance),
+
104 linearAcceleration_(linearAcceleration),
+
105 linearAccelerationCovariance_(linearAccelerationCovariance),
+
106 localTransform_(localTransform)
+
107 {
+
108 }
+
+
109
+
111 const cv::Vec4d & orientation() const {return orientation_;}
+
113 const cv::Mat & orientationCovariance() const {return orientationCovariance_;}
+
114
+
116 const cv::Vec3d & angularVelocity() const {return angularVelocity_;}
+
118 const cv::Mat & angularVelocityCovariance() const {return angularVelocityCovariance_;}
+
119
+
121 const cv::Vec3d & linearAcceleration() const {return linearAcceleration_;}
+
123 const cv::Mat & linearAccelerationCovariance() const {return linearAccelerationCovariance_;}
+
124
+
126 const Transform & localTransform() const {return localTransform_;}
+
127
+ +
137
+
+
141 bool empty() const
+
142 {
+
143 return localTransform_.isNull();
+
144 }
+
+
145
+
146private:
+
147 cv::Vec4d orientation_;
+
148 cv::Mat orientationCovariance_;
+
149
+
150 cv::Vec3d angularVelocity_;
+
151 cv::Mat angularVelocityCovariance_;
+
152
+
153 cv::Vec3d linearAcceleration_;
+
154 cv::Mat linearAccelerationCovariance_;
+
155
+
156 Transform localTransform_;
+
157};
+
+
158
+
+
163class IMUEvent : public UEvent
+
164{
+
165public:
+
+ +
168 stamp_(0.0)
+
169 {}
+
+
+
175 IMUEvent(const IMU & data, double stamp) :
+
176 data_(data),
+
177 stamp_(stamp)
+
178 {
+
179 }
+
+
181 virtual std::string getClassName() const {return "IMUEvent";}
+
183 const IMU & getData() const {return data_;}
+
185 double getStamp() const {return stamp_;}
+
186
+
187private:
+
188 IMU data_;
+
189 double stamp_;
+
190};
+
+
191
+
192}
+
193
+
194#endif /* IMU_H_ */
+ +
UEvent carrying an IMU sample and timestamp.
Definition IMU.h:164
+
IMUEvent()
Default-constructs an event with zero stamp.
Definition IMU.h:167
+
const IMU & getData() const
Definition IMU.h:183
+
double getStamp() const
Definition IMU.h:185
+
virtual std::string getClassName() const
Definition IMU.h:181
+
IMUEvent(const IMU &data, double stamp)
Constructs an event with IMU data and stamp.
Definition IMU.h:175
+
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
+
const Transform & localTransform() const
Definition IMU.h:126
+
void convertToBaseFrame()
Rotate motion (and optionally orientation) into the base frame.
+
const cv::Vec4d & orientation() const
Definition IMU.h:111
+
const cv::Mat & linearAccelerationCovariance() const
Definition IMU.h:123
+
IMU(const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())
Constructs a sample without orientation (e.g. no magnetometer / no attitude).
Definition IMU.h:97
+
const cv::Mat & angularVelocityCovariance() const
Definition IMU.h:118
+
IMU()
Default-constructs an empty sample (null localTransform()).
Definition IMU.h:60
+
IMU(const cv::Vec4d &orientation, const cv::Mat &orientationCovariance, const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())
Constructs a sample with orientation and motion data.
Definition IMU.h:72
+
const cv::Vec3d & linearAcceleration() const
Definition IMU.h:121
+
const cv::Mat & orientationCovariance() const
Definition IMU.h:113
+
bool empty() const
True when localTransform() is null (placeholder / unset sample).
Definition IMU.h:141
+
const cv::Vec3d & angularVelocity() const
Definition IMU.h:116
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Image_8h_source.html b/preview/pr-1492/api/latest/Image_8h_source.html new file mode 100644 index 00000000..141db235 --- /dev/null +++ b/preview/pr-1492/api/latest/Image_8h_source.html @@ -0,0 +1,133 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Image.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Image.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef IMAGE_H_
+
29#define IMAGE_H_
+
30
+
31#include <rtabmap/core/SensorData.h>
+
32
+
33namespace rtabmap {
+
34RTABMAP_DEPRECATED(typedef SensorData Image, "rtabmap::Image class is renamed to rtabmap::SensorData, use the last one instead.");
+
35}
+
36
+
37
+
38#endif /* IMAGE_H_ */
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/LASWriter_8h_source.html b/preview/pr-1492/api/latest/LASWriter_8h_source.html new file mode 100644 index 00000000..366b42b3 --- /dev/null +++ b/preview/pr-1492/api/latest/LASWriter_8h_source.html @@ -0,0 +1,153 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/LASWriter.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LASWriter.h
+
+
+
1/*
+
2Copyright (c) 2010-2024, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_LASWRITER_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_LASWRITER_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32#include <pcl/point_cloud.h>
+
33#include <pcl/point_types.h>
+
34#include <string>
+
35#include <vector>
+
36
+
37namespace rtabmap {
+
38
+
51int RTABMAP_CORE_EXPORT saveLASFile(
+
52 const std::string & filePath,
+
53 const pcl::PointCloud<pcl::PointXYZ> & cloud,
+
54 const std::vector<int> & cameraIds = std::vector<int>());
+
55
+
64int RTABMAP_CORE_EXPORT saveLASFile(
+
65 const std::string & filePath,
+
66 const pcl::PointCloud<pcl::PointXYZRGB> & cloud,
+
67 const std::vector<int> & cameraIds = std::vector<int>(),
+
68 const std::vector<float> & intensities = std::vector<float>());
+
69
+
77int RTABMAP_CORE_EXPORT saveLASFile(
+
78 const std::string & filePath,
+
79 const pcl::PointCloud<pcl::PointXYZI> & cloud,
+
80 const std::vector<int> & cameraIds = std::vector<int>());
+
81
+
82} // namespace rtabmap
+
83
+
84#endif /* CORELIB_INCLUDE_RTABMAP_CORE_LASWRITER_H_ */
+ +
int RTABMAP_CORE_EXPORT saveLASFile(const std::string &filePath, const pcl::PointCloud< pcl::PointXYZ > &cloud, const std::vector< int > &cameraIds=std::vector< int >())
Writes a PCL point cloud to a LAS/LAZ file (requires RTAB-Map built with libLAS).
+
+ + + + diff --git a/preview/pr-1492/api/latest/Landmark_8h_source.html b/preview/pr-1492/api/latest/Landmark_8h_source.html new file mode 100644 index 00000000..bc155c5d --- /dev/null +++ b/preview/pr-1492/api/latest/Landmark_8h_source.html @@ -0,0 +1,220 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Landmark.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Landmark.h
+
+
+
1/*
+
2Copyright (c) 2010-2018, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_LANDMARK_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_LANDMARK_H_
+
30
+
31#include <rtabmap/core/rtabmap_core_export.h>
+
32#include <rtabmap/core/Transform.h>
+ + + +
36
+
37namespace rtabmap {
+
38
+
+
56class RTABMAP_CORE_EXPORT Landmark
+
57{
+
58public:
+
+ +
61 id_(0),
+
62 size_(0.0f)
+
63 {}
+
+
64
+
+
72 Landmark(const int & id, const float & size, const Transform & pose, const cv::Mat & covariance) :
+
73 id_(id),
+
74 size_(size),
+
75 pose_(pose),
+
76 covariance_(covariance)
+
77 {
+
78 UASSERT(id_>0);
+
79 UASSERT(!pose_.isNull());
+
80 UASSERT(covariance_.cols == 6 && covariance_.rows == 6 && covariance_.type() == CV_64FC1);
+
81 UASSERT_MSG(uIsFinite(covariance_.at<double>(0,0)) && covariance_.at<double>(0,0)>0, uFormat("Linear covariance should not be null! Value=%f.", covariance_.at<double>(0,0)).c_str());
+
82 UASSERT_MSG(uIsFinite(covariance_.at<double>(1,1)) && covariance_.at<double>(1,1)>0, uFormat("Linear covariance should not be null! Value=%f.", covariance_.at<double>(1,1)).c_str());
+
83 UASSERT_MSG(uIsFinite(covariance_.at<double>(2,2)) && covariance_.at<double>(2,2)>0, uFormat("Linear covariance should not be null! Value=%f.", covariance_.at<double>(2,2)).c_str());
+
84 UASSERT_MSG(uIsFinite(covariance_.at<double>(3,3)) && covariance_.at<double>(3,3)>0, uFormat("Angular covariance should not be null! Value=%f (set to 9999 if unknown).", covariance_.at<double>(3,3)).c_str());
+
85 UASSERT_MSG(uIsFinite(covariance_.at<double>(4,4)) && covariance_.at<double>(4,4)>0, uFormat("Angular covariance should not be null! Value=%f (set to 9999 if unknown).", covariance_.at<double>(4,4)).c_str());
+
86 UASSERT_MSG(uIsFinite(covariance_.at<double>(5,5)) && covariance_.at<double>(5,5)>0, uFormat("Angular covariance should not be null! Value=%f (set to 9999 if unknown).", covariance_.at<double>(5,5)).c_str());
+
87 }
+
+
88
+
92 RTABMAP_DEPRECATED Landmark(const int & id, const Transform & pose, const cv::Mat & covariance);
+
93
+
94 virtual ~Landmark() {}
+
95
+
97 const int & id() const {return id_;}
+
99 const float & size() const {return size_;}
+
101 const Transform & pose() const {return pose_;}
+
103 const cv::Mat & covariance() const {return covariance_;}
+
104
+
105private:
+
106 int id_;
+
107 float size_;
+
108 Transform pose_;
+
109 cv::Mat covariance_;
+
110};
+
+
111
+
113typedef std::map<int, Landmark> Landmarks;
+
114
+
+
115inline Landmark::Landmark(const int & id, const Transform & pose, const cv::Mat & covariance) :
+
116 id_(id),
+
117 size_(0.0f),
+
118 pose_(pose),
+
119 covariance_(covariance)
+
120{
+
121 UASSERT(id_>0);
+
122 UASSERT(!pose_.isNull());
+
123 UASSERT(covariance_.cols == 6 && covariance_.rows == 6 && covariance_.type() == CV_64FC1);
+
124 UASSERT_MSG(uIsFinite(covariance_.at<double>(0,0)) && covariance_.at<double>(0,0)>0, uFormat("Linear covariance should not be null! Value=%f.", covariance_.at<double>(0,0)).c_str());
+
125 UASSERT_MSG(uIsFinite(covariance_.at<double>(1,1)) && covariance_.at<double>(1,1)>0, uFormat("Linear covariance should not be null! Value=%f.", covariance_.at<double>(1,1)).c_str());
+
126 UASSERT_MSG(uIsFinite(covariance_.at<double>(2,2)) && covariance_.at<double>(2,2)>0, uFormat("Linear covariance should not be null! Value=%f.", covariance_.at<double>(2,2)).c_str());
+
127 UASSERT_MSG(uIsFinite(covariance_.at<double>(3,3)) && covariance_.at<double>(3,3)>0, uFormat("Angular covariance should not be null! Value=%f (set to 9999 if unknown).", covariance_.at<double>(3,3)).c_str());
+
128 UASSERT_MSG(uIsFinite(covariance_.at<double>(4,4)) && covariance_.at<double>(4,4)>0, uFormat("Angular covariance should not be null! Value=%f (set to 9999 if unknown).", covariance_.at<double>(4,4)).c_str());
+
129 UASSERT_MSG(uIsFinite(covariance_.at<double>(5,5)) && covariance_.at<double>(5,5)>0, uFormat("Angular covariance should not be null! Value=%f (set to 9999 if unknown).", covariance_.at<double>(5,5)).c_str());
+
130}
+
+
131
+
132} // namespace rtabmap
+
133
+
134#endif /* CORELIB_INCLUDE_RTABMAP_CORE_LANDMARK_H_ */
+
Some conversion functions.
+
std::string UTILITE_EXPORT uFormat(const char *fmt,...)
+
ULogger class and convenient macros.
+
#define UASSERT(condition)
Definition ULogger.h:66
+
Basic mathematics functions.
+
bool uIsFinite(const T &value)
Definition UMath.h:53
+
Optimized pose of a visual landmark (e.g. ArUco/AprilTag) in the map.
Definition Landmark.h:57
+
const cv::Mat & covariance() const
Definition Landmark.h:103
+
Landmark(const int &id, const float &size, const Transform &pose, const cv::Mat &covariance)
Constructs a landmark with size, pose, and covariance.
Definition Landmark.h:72
+
const int & id() const
Definition Landmark.h:97
+
Landmark()
Default-constructs an invalid landmark (id == 0).
Definition Landmark.h:60
+
const Transform & pose() const
Definition Landmark.h:101
+
const float & size() const
Definition Landmark.h:99
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
bool isNull() const
Checks whether the transform is null (all zeros).
+ +
std::map< int, Landmark > Landmarks
Map of landmark id → Landmark (typically positive keys).
Definition Landmark.h:113
+
+ + + + diff --git a/preview/pr-1492/api/latest/LaserScan_8h_source.html b/preview/pr-1492/api/latest/LaserScan_8h_source.html new file mode 100644 index 00000000..7406e901 --- /dev/null +++ b/preview/pr-1492/api/latest/LaserScan_8h_source.html @@ -0,0 +1,301 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/LaserScan.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LaserScan.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_LASERSCAN_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_LASERSCAN_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/Transform.h>
+
34
+
35namespace rtabmap {
+
36
+
+
45class RTABMAP_CORE_EXPORT LaserScan
+
46{
+
47public:
+
+
55 enum Format{
+
56 kUnknown=0,
+
57 kXY=1,
+
58 kXYI=2,
+
59 kXYNormal=3,
+
60 kXYINormal=4,
+
61 kXYZ=5,
+
62 kXYZI=6,
+
63 kXYZRGB=7,
+
64 kXYZNormal=8,
+
65 kXYZINormal=9,
+
66 kXYZRGBNormal=10,
+
67 kXYZIT=11,
+
68 kXYZIRT=12
+
69 };
+
+
70
+
73 static std::string formatName(const Format & format);
+
74 static int channels(const Format & format);
+
75 static bool isScan2d(const Format & format);
+
76 static bool isScanHasNormals(const Format & format);
+
77 static bool isScanHasRGB(const Format & format);
+
78 static bool isScanHasIntensity(const Format & format);
+
79 static bool isScanHasTime(const Format & format);
+
80 static bool isScanHasRing(const Format & format);
+
81 static float packRGB(unsigned char r, unsigned char g, unsigned char b);
+
82 static void unpackRGB(float rgb, unsigned char & r, unsigned char & g, unsigned char & b);
+
83
+ +
88 const cv::Mat & oldScanFormat,
+
89 int maxPoints = 0,
+
90 int maxRange = 0,
+
91 const Transform & localTransform = Transform::getIdentity());
+
92
+ +
97 const cv::Mat & oldScanFormat,
+
98 float minRange,
+
99 float maxRange,
+
100 float angleMin,
+
101 float angleMax,
+
102 float angleInc,
+
103 const Transform & localTransform = Transform::getIdentity());
+
105
+
106public:
+
107
+
110 LaserScan();
+
111 LaserScan(const LaserScan & data,
+
112 int maxPoints,
+
113 float maxRange,
+
114 const Transform & localTransform = Transform::getIdentity());
+
115
+
117 RTABMAP_DEPRECATED LaserScan(const LaserScan & data,
+
118 int maxPoints,
+
119 float maxRange,
+
120 Format format,
+
121 const Transform & localTransform = Transform::getIdentity());
+
122 LaserScan(const cv::Mat & data,
+
123 int maxPoints,
+
124 float maxRange,
+
125 Format format,
+
126 const Transform & localTransform = Transform::getIdentity());
+
127
+
129 RTABMAP_DEPRECATED LaserScan(const LaserScan & data,
+
130 Format format,
+
131 float minRange,
+
132 float maxRange,
+
133 float angleMin,
+
134 float angleMax,
+
135 float angleIncrement,
+
136 const Transform & localTransform = Transform::getIdentity());
+
137 LaserScan(const LaserScan & data,
+
138 float minRange,
+
139 float maxRange,
+
140 float angleMin,
+
141 float angleMax,
+
142 float angleIncrement,
+
143 const Transform & localTransform = Transform::getIdentity());
+
144 LaserScan(const cv::Mat & data,
+
145 Format format,
+
146 float minRange,
+
147 float maxRange,
+
148 float angleMin,
+
149 float angleMax,
+
150 float angleIncrement,
+
151 const Transform & localTransform = Transform::getIdentity());
+
153
+
156 const cv::Mat & data() const {return data_;}
+
157 Format format() const {return format_;}
+
158 std::string formatName() const {return formatName(format_);}
+
159 int channels() const {return data_.channels();}
+
160 int maxPoints() const {return maxPoints_;}
+
161 float rangeMin() const {return rangeMin_;}
+
162 float rangeMax() const {return rangeMax_;}
+
163 float angleMin() const {return angleMin_;}
+
164 float angleMax() const {return angleMax_;}
+
165 float angleIncrement() const {return angleIncrement_;}
+
166 void setLocalTransform(const Transform & t) {localTransform_ = t;}
+
167 Transform localTransform() const {return localTransform_;}
+
169
+
172 bool empty() const {return data_.empty();}
+
173 bool isEmpty() const {return data_.empty();}
+
174 int size() const {return data_.total();}
+
175 int dataType() const {return data_.type();}
+
176 bool is2d() const {return isScan2d(format_);}
+
177 bool hasNormals() const {return isScanHasNormals(format_);}
+
178 bool hasRGB() const {return isScanHasRGB(format_);}
+
179 bool hasIntensity() const {return isScanHasIntensity(format_);}
+
180 bool hasTime() const {return isScanHasTime(format_);}
+
181 bool hasRing() const {return isScanHasRing(format_);}
+
182 bool isCompressed() const {return !data_.empty() && data_.type()==CV_8UC1;}
+
183 bool isOrganized() const {return data_.rows > 1;}
+
184 LaserScan clone() const;
+
185 LaserScan densify() const;
+
187
+
190 int getIntensityOffset() const {return hasIntensity()?(is2d()?2:3):-1;}
+
191 int getRGBOffset() const {return hasRGB()?(is2d()?2:3):-1;}
+
192 int getNormalsOffset() const {return hasNormals()?(2 + (is2d()?0:1) + ((hasRGB() || hasIntensity())?1:0)):-1;}
+
193 int getRingOffset() const {return format_==kXYZIRT?4:-1;}
+
194 int getTimeOffset() const {return format_==kXYZIT?4:(format_==kXYZIRT?5:-1);}
+
195
+
203 float & field(unsigned int pointIndex, unsigned int channelOffset);
+
204
+
208 void clear() {data_ = cv::Mat();}
+
209
+ + +
219
+
220private:
+
221 void init(const cv::Mat & data,
+
222 Format format,
+
223 float minRange,
+
224 float maxRange,
+
225 float angleMin,
+
226 float angleMax,
+
227 float angleIncrement,
+
228 int maxPoints,
+
229 const Transform & localTransform = Transform::getIdentity());
+
230
+
231private:
+
232 cv::Mat data_;
+
233 Format format_;
+
234 int maxPoints_;
+
235 float rangeMin_;
+
236 float rangeMax_;
+
237 float angleMin_;
+
238 float angleMax_;
+
239 float angleIncrement_;
+
240 Transform localTransform_;
+
241};
+
+
242
+
243} // namespace rtabmap
+
244
+
245#endif /* CORELIB_INCLUDE_RTABMAP_CORE_LASERSCAN_H_ */
+
Represents 2D or 3D laser scan data with support for multiple point data formats.
Definition LaserScan.h:46
+
RTABMAP_DEPRECATED LaserScan(const LaserScan &data, int maxPoints, float maxRange, Format format, const Transform &localTransform=Transform::getIdentity())
+
Format
Enumeration of possible formats for laser scan data.
Definition LaserScan.h:55
+
float & field(unsigned int pointIndex, unsigned int channelOffset)
Access a specific field value of a point.
+
static LaserScan backwardCompatibility(const cv::Mat &oldScanFormat, float minRange, float maxRange, float angleMin, float angleMax, float angleInc, const Transform &localTransform=Transform::getIdentity())
Converts legacy scan format with additional metadata to a LaserScan.
+
RTABMAP_DEPRECATED LaserScan(const LaserScan &data, Format format, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity())
+
static LaserScan backwardCompatibility(const cv::Mat &oldScanFormat, int maxPoints=0, int maxRange=0, const Transform &localTransform=Transform::getIdentity())
Converts legacy scan format to a LaserScan object.
+
LaserScan operator+(const LaserScan &)
Concatenate scan's data (localTransform is ignored).
+
void clear()
Clear the scan data.
Definition LaserScan.h:208
+
LaserScan & operator+=(const LaserScan &)
Concatenate scan's data (localTransform is ignored).
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/LidarVLP16_8h_source.html b/preview/pr-1492/api/latest/LidarVLP16_8h_source.html new file mode 100644 index 00000000..ba0f0644 --- /dev/null +++ b/preview/pr-1492/api/latest/LidarVLP16_8h_source.html @@ -0,0 +1,251 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/lidar/LidarVLP16.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LidarVLP16.h
+
+
+
1/*
+
2Copyright (c) 2010-2022, Mathieu Labbe
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the names of its contributors may be used to endorse or promote products
+
13 derived from this software without specific prior written permission.
+
14
+
15THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
16ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
17WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
18DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
19DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
20(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
21LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
22ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
23(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
24SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
25*/
+
26#ifndef CORELIB_INCLUDE_RTABMAP_CORE_LIDAR_LIDARVLP16_H_
+
27#define CORELIB_INCLUDE_RTABMAP_CORE_LIDAR_LIDARVLP16_H_
+
28
+
29// Should be first on windows to avoid "WinSock.h has already been included" error
+
30#include <pcl/io/vlp_grabber.h>
+
31#include <boost/version.hpp>
+
32#include <boost/asio.hpp>
+
33
+
34#include <rtabmap/core/Lidar.h>
+
35#include <rtabmap/utilite/USemaphore.h>
+
36
+
37#include <thread>
+
38#include <atomic>
+
39
+
40// On Apple, closing pcl::HDLGrabber's UDP socket while its read thread is blocked
+
41// in receive_from returns EBADF, which pcl::HDLGrabber::readPacketsFromSocket()
+
42// rethrows uncaught in its own thread, aborting the process on shutdown. There we
+
43// run our own single-threaded UDP receive loop and own the socket lifecycle.
+
44// Other platforms use the base pcl::VLPGrabber path (which also avoids needing
+
45// boost::asio::io_context, absent from the Boost 1.65 on e.g. Ubuntu Bionic).
+
46// Comment this out to force the base path everywhere (e.g. A/B testing on macOS).
+
47#if defined(__APPLE__)
+
48#define RTABMAP_VLP16_USE_CUSTOM_SOCKET
+
49#endif
+
50
+
51namespace rtabmap {
+
52
+
+
53struct PointXYZIT {
+
54 float x;
+
55 float y;
+
56 float z;
+
57 float i;
+
58 float t;
+
59};
+
+
60
+
+
61class RTABMAP_CORE_EXPORT LidarVLP16 :public Lidar, public pcl::VLPGrabber {
+
62public:
+ +
64 const std::string& pcapFile,
+
65 bool organized = false,
+
66 bool stampLast = true,
+
67 float frameRate = 0.0f,
+
68 Transform localTransform = Transform::getIdentity());
+ +
70 const boost::asio::ip::address& ipAddress,
+
71 const std::uint16_t port = 2368,
+
72 bool organized = false,
+
73 bool useHostTime = true,
+
74 bool stampLast = true,
+
75 float frameRate = 0.0f,
+
76 Transform localTransform = Transform::getIdentity());
+
77 virtual ~LidarVLP16();
+
78
+
79 SensorData takeScan(SensorCaptureInfo * info = 0) {return takeData(info);}
+
80
+
81 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "") override;
+
82 virtual std::string getSerial() const override {return getName();}
+
83
+
84 void setOrganized(bool enable);
+
85
+
86#ifdef RTABMAP_VLP16_USE_CUSTOM_SOCKET
+
87 // Overridden only on Apple: in network mode we run our own UDP receive loop
+
88 // instead of pcl::HDLGrabber's, because on macOS/BSD closing the grabber's
+
89 // socket while its read thread is blocked in receive_from returns EBADF, a
+
90 // code that pcl::HDLGrabber::readPacketsFromSocket() rethrows uncaught (in
+
91 // its own thread), aborting the process on shutdown. Owning the socket lets
+
92 // us tear it down with the non-throwing receive_from overload. Like
+
93 // pcl::HDLGrabber, we bind to the given LOCAL interface address (to scope
+
94 // reception on a multi-homed host) and fall back to all interfaces (0.0.0.0)
+
95 // when it is unspecified or not a local address. In PCAP mode we delegate to
+
96 // the base grabber. On other platforms we inherit pcl::VLPGrabber directly.
+
97 virtual void start() override;
+
98 virtual void stop() override;
+
99 virtual bool isRunning() const override;
+
100#endif
+
101
+
102private:
+
103 void buildTimings(bool dualMode);
+
104 virtual void toPointClouds (HDLDataPacket *dataPacket) override;
+
105#ifdef RTABMAP_VLP16_USE_CUSTOM_SOCKET
+
106 void readPackets();
+
107#endif
+
108
+
109protected:
+
110 virtual SensorData captureData(SensorCaptureInfo * info = 0) override;
+
111
+
112private:
+
113 // timing offset lookup table
+
114 std::vector< std::vector<float> > timingOffsets_;
+
115 bool timingOffsetsDualMode_;
+
116 double startSweepTime_;
+
117 double startSweepTimeHost_;
+
118 bool organized_;
+
119 bool useHostTime_;
+
120 bool stampLast_;
+
121 SensorData lastScan_;
+
122 std::vector<std::vector<PointXYZIT> > accumulatedScans_;
+
123 USemaphore scanReady_;
+
124 UMutex lastScanMutex_;
+
125
+
126 // Own UDP receive path (network mode only).
+
127 bool networkMode_;
+
128 boost::asio::ip::address ipAddress_;
+
129 std::uint16_t port_;
+
130 bool receivedScan_; // set once the first scan is received
+
131#ifdef RTABMAP_VLP16_USE_CUSTOM_SOCKET
+
132 boost::asio::io_context ioContext_;
+
133 boost::asio::ip::udp::socket * socket_;
+
134 std::thread * readThread_;
+
135 std::atomic<bool> terminate_;
+
136#endif
+
137};
+
+
138
+
139} /* namespace rtabmap */
+
140
+
141#endif /* CORELIB_INCLUDE_RTABMAP_CORE_LIDAR_LIDARVLP16_H_ */
+ + + +
virtual SensorData captureData(SensorCaptureInfo *info=0) override
Pure virtual method to capture sensor data.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="") override
Initializes the sensor.
+
virtual std::string getSerial() const override
Returns the sensor's serial number or unique identifier.
Definition LidarVLP16.h:82
+ +
Metadata structure for sensor data capture and processing.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ + +
+ + + + diff --git a/preview/pr-1492/api/latest/Lidar_8h_source.html b/preview/pr-1492/api/latest/Lidar_8h_source.html new file mode 100644 index 00000000..e07d2ce2 --- /dev/null +++ b/preview/pr-1492/api/latest/Lidar_8h_source.html @@ -0,0 +1,150 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Lidar.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Lidar.h
+
+
+
1/*
+
2Copyright (c) 2010-2022, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
31#include <rtabmap/core/SensorCapture.h>
+
32
+
33namespace rtabmap
+
34{
+
35
+
+
40class RTABMAP_CORE_EXPORT Lidar : public SensorCapture
+
41{
+
42public:
+
43 virtual ~Lidar() {}
+
44
+
45protected:
+
+
52 Lidar(float lidarRate = 0, const Transform & localTransform = Transform::getIdentity()) :
+
53 SensorCapture(lidarRate, localTransform) {}
+
+
54};
+
+
55
+
56
+
57} // namespace rtabmap
+ +
Lidar(float lidarRate=0, const Transform &localTransform=Transform::getIdentity())
Definition Lidar.h:52
+
Abstract base class for sensor data capture (cameras, lidars, etc.)
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Link_8h_source.html b/preview/pr-1492/api/latest/Link_8h_source.html new file mode 100644 index 00000000..2ac772db --- /dev/null +++ b/preview/pr-1492/api/latest/Link_8h_source.html @@ -0,0 +1,231 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Link.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Link.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef LINK_H_
+
29#define LINK_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/Transform.h>
+
34#include <opencv2/core/core.hpp>
+
35
+
36namespace rtabmap {
+
37
+
+
54class RTABMAP_CORE_EXPORT Link
+
55{
+
56public:
+
+
64 enum Type {
+ + + + + + + + + + +
75 kEnd,
+
76 kSelfRefLink = 97,
+
77 kAllWithLandmarks = 98,
+
78 kAllWithoutLandmarks = 99,
+
79 kUndef = 99};
+
+
82 static std::string typeName(Type type);
+
83
+ +
95 Link(int from,
+
96 int to,
+
97 Type type,
+
98 const Transform & transform,
+
99 const cv::Mat & infMatrix = cv::Mat::eye(6,6,CV_64FC1),
+
100 const cv::Mat & userData = cv::Mat());
+
101
+
103 bool isValid() const {return from_ != 0 && to_ != 0 && !transform_.isNull() && type_!=kUndef;}
+
104
+
105 int from() const {return from_;}
+
106 int to() const {return to_;}
+
107 const Transform & transform() const {return transform_;}
+
108 Type type() const {return type_;}
+
109 std::string typeName() const {return typeName(type_);}
+
110 const cv::Mat & infMatrix() const {return infMatrix_;}
+
111
+
117 double rotVariance(bool minimum = true) const;
+
122 double transVariance(bool minimum = true) const;
+
123
+
124 void setFrom(int from) {from_ = from;}
+
125 void setTo(int to) {to_ = to;}
+
126 void setTransform(const Transform & transform) {transform_ = transform;}
+
127 void setType(Type type) {type_ = type;}
+
129 void setInfMatrix(const cv::Mat & infMatrix);
+
130
+
131 const cv::Mat & userDataRaw() const {return _userDataRaw;}
+
132 const cv::Mat & userDataCompressed() const {return _userDataCompressed;}
+ +
136 cv::Mat uncompressUserDataConst() const;
+
137
+
150 Link merge(const Link & link, Type outputType) const;
+
152 Link inverse() const;
+
153
+
154private:
+
155 int from_;
+
156 int to_;
+
157 Transform transform_;
+
158 Type type_;
+
159 cv::Mat infMatrix_; // Information matrix = covariance matrix ^ -1
+
160
+
161 // user data
+
162 cv::Mat _userDataCompressed; // compressed data
+
163 cv::Mat _userDataRaw;
+
164};
+
+
165
+
166}
+
167
+
168
+
169#endif /* LINK_H_ */
+ + + + + + + + + + + + + + + + + + + + + + + +
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/LocalGridMaker_8h_source.html b/preview/pr-1492/api/latest/LocalGridMaker_8h_source.html new file mode 100644 index 00000000..18712abe --- /dev/null +++ b/preview/pr-1492/api/latest/LocalGridMaker_8h_source.html @@ -0,0 +1,224 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/LocalGridMaker.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LocalGridMaker.h
+
+
+
1/*
+
2Copyright (c) 2010-2023, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef SRC_LOCAL_MAP_H_
+
29#define SRC_LOCAL_MAP_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <pcl/pcl_base.h>
+
34#include <pcl/point_types.h>
+
35
+
36#include <rtabmap/core/Transform.h>
+
37#include <rtabmap/core/Parameters.h>
+
38#include <rtabmap/core/Signature.h>
+
39
+
40namespace rtabmap {
+
41
+
+
64class RTABMAP_CORE_EXPORT LocalGridMaker
+
65{
+
66public:
+
68 LocalGridMaker(const ParametersMap & parameters = ParametersMap());
+
69 virtual ~LocalGridMaker();
+
70
+
72 virtual void parseParameters(const ParametersMap & parameters);
+
73
+
75 float getCellSize() const {return cellSize_;}
+
77 bool isGridFromDepth() const {return occupancySensor_;}
+
79 bool isMapFrameProjection() const {return projMapFrame_;}
+
80
+
97 template<typename PointT>
+
98 typename pcl::PointCloud<PointT>::Ptr segmentCloud(
+
99 const typename pcl::PointCloud<PointT>::Ptr & cloud,
+
100 const pcl::IndicesPtr & indices,
+
101 const Transform & pose,
+
102 const cv::Point3f & viewPoint,
+
103 pcl::IndicesPtr & groundIndices, // output cloud indices
+
104 pcl::IndicesPtr & obstaclesIndices, // output cloud indices
+
105 pcl::IndicesPtr * flatObstacles = 0) const; // output cloud indices
+
106
+ +
124 const Signature & node,
+
125 cv::Mat & groundCells,
+
126 cv::Mat & obstacleCells,
+
127 cv::Mat & emptyCells,
+
128 cv::Point3f & viewPoint);
+
129
+ +
144 const LaserScan & cloud,
+
145 const Transform & pose,
+
146 cv::Mat & groundCells,
+
147 cv::Mat & obstacleCells,
+
148 cv::Mat & emptyCells,
+
149 cv::Point3f & viewPointInOut) const;
+
150
+
151protected:
+
152 ParametersMap parameters_;
+
153
+
154 unsigned int cloudDecimation_;
+
155 float rangeMax_;
+
156 float rangeMin_;
+
157 std::vector<float> roiRatios_;
+
158 float footprintLength_;
+
159 float footprintWidth_;
+
160 float footprintHeight_;
+
161 int scanDecimation_;
+
162 float cellSize_;
+
163 bool preVoxelFiltering_;
+
164 int occupancySensor_;
+
165 bool projMapFrame_;
+
166 float maxObstacleHeight_;
+
167 int normalKSearch_;
+
168 float groundNormalsUp_;
+
169 float maxGroundAngle_;
+
170 float clusterRadius_;
+
171 int minClusterSize_;
+
172 bool flatObstaclesDetected_;
+
173 float minGroundHeight_;
+
174 float maxGroundHeight_;
+
175 bool normalsSegmentation_;
+
176 bool grid3D_;
+
177 bool groundIsObstacle_;
+
178 float noiseFilteringRadius_;
+
179 int noiseFilteringMinNeighbors_;
+
180 bool scan2dUnknownSpaceFilled_;
+
181 bool rayTracing_;
+
182};
+
+
183
+
184} /* namespace rtabmap */
+
185
+
186#include <rtabmap/core/impl/LocalMapMaker.hpp>
+
187
+
188#endif /* SRC_LOCAL_MAP_H_ */
+
Represents 2D or 3D laser scan data with support for multiple point data formats.
Definition LaserScan.h:46
+
Builds per-node local occupancy grids from laser scans or depth clouds.
+ +
void createLocalMap(const LaserScan &cloud, const Transform &pose, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPointInOut) const
Creates a local grid from a 3D (or organized) LaserScan.
+ +
virtual void parseParameters(const ParametersMap &parameters)
Updates grid settings from Grid/ entries in parameters.
+
LocalGridMaker(const ParametersMap &parameters=ParametersMap())
Constructs with parseParameters() on parameters (or defaults).
+
void createLocalMap(const Signature &node, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPoint)
Creates a local grid from a Signature's laser scan or depth data.
+
bool isMapFrameProjection() const
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/LocalGrid_8h_source.html b/preview/pr-1492/api/latest/LocalGrid_8h_source.html new file mode 100644 index 00000000..b2fe3bc5 --- /dev/null +++ b/preview/pr-1492/api/latest/LocalGrid_8h_source.html @@ -0,0 +1,205 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/LocalGrid.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LocalGrid.h
+
+
+
1/*
+
2Copyright (c) 2010-2023, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef SRC_LOCALGRID_H_
+
29#define SRC_LOCALGRID_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <opencv2/core.hpp>
+
34#include <map>
+
35
+
36namespace rtabmap {
+
37
+
+
61class RTABMAP_CORE_EXPORT LocalGrid
+
62{
+
63public:
+
72 LocalGrid(const cv::Mat & ground,
+
73 const cv::Mat & obstacles,
+
74 const cv::Mat & empty,
+
75 float cellSize,
+
76 const cv::Point3f & viewPoint = cv::Point3f(0,0,0));
+
77 virtual ~LocalGrid() {}
+
78
+
80 bool is3D() const;
+
81
+
82 cv::Mat groundCells;
+
83 cv::Mat obstacleCells;
+
84 cv::Mat emptyCells;
+
85 float cellSize;
+
86 cv::Point3f viewPoint;
+
87};
+
+
88
+
+
97class RTABMAP_CORE_EXPORT LocalGridCache
+
98{
+
99public:
+
100 LocalGridCache() {}
+
101 virtual ~LocalGridCache() {}
+
102
+
104 void add(int nodeId,
+
105 const cv::Mat & ground,
+
106 const cv::Mat & obstacles,
+
107 const cv::Mat & empty,
+
108 float cellSize,
+
109 const cv::Point3f & viewPoint = cv::Point3f(0,0,0));
+
110
+
112 void add(int nodeId, const LocalGrid & localGrid);
+
113
+
118 bool shareTo(int nodeId, LocalGridCache & anotherCache) const;
+
119
+
121 unsigned long getMemoryUsed() const;
+
122
+
127 void clear(bool temporaryOnly = false);
+
128
+
129 size_t size() const {return localGrids_.size();}
+
130 bool empty() const {return localGrids_.empty();}
+
131 const std::map<int, LocalGrid> & localGrids() const {return localGrids_;}
+
132
+
133 std::map<int, LocalGrid>::const_iterator find(int nodeId) const {return localGrids_.find(nodeId);}
+
134 std::map<int, LocalGrid>::const_iterator begin() const {return localGrids_.begin();}
+
135 std::map<int, LocalGrid>::const_iterator end() const {return localGrids_.end();}
+
136
+
137private:
+
138 std::map<int, LocalGrid> localGrids_;
+
139};
+
+
140
+
141} /* namespace rtabmap */
+
142
+
143#endif /* SRC_LOCALGRID_H_ */
+
Cache of LocalGrid entries keyed by map node id.
Definition LocalGrid.h:98
+
void add(int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint=cv::Point3f(0, 0, 0))
Inserts or replaces the grid for nodeId (from separate cell mats).
+
void clear(bool temporaryOnly=false)
Removes cached grids.
+
bool shareTo(int nodeId, LocalGridCache &anotherCache) const
Copies a grid to anotherCache if present here and absent there.
+
void add(int nodeId, const LocalGrid &localGrid)
Inserts or replaces the grid for nodeId.
+
unsigned long getMemoryUsed() const
Approximate memory used by cached grids (bytes).
+
Local occupancy grid cells for one map node (ground, obstacles, empty).
Definition LocalGrid.h:62
+
float cellSize
Cell size in meters.
Definition LocalGrid.h:85
+
cv::Mat groundCells
Ground cells (1×N, CV_32FC2–CV_32FC7, see class doc).
Definition LocalGrid.h:82
+
LocalGrid(const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint=cv::Point3f(0, 0, 0))
Builds a local grid from cell matrices.
+
cv::Mat emptyCells
Empty/free cells (same layout as groundCells).
Definition LocalGrid.h:84
+
cv::Point3f viewPoint
View point used to build the grid.
Definition LocalGrid.h:86
+
cv::Mat obstacleCells
Obstacle cells (same layout as groundCells).
Definition LocalGrid.h:83
+
bool is3D() const
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/LocalMapMaker_8hpp_source.html b/preview/pr-1492/api/latest/LocalMapMaker_8hpp_source.html new file mode 100644 index 00000000..641b5a1f --- /dev/null +++ b/preview/pr-1492/api/latest/LocalMapMaker_8hpp_source.html @@ -0,0 +1,370 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/impl/LocalMapMaker.hpp Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LocalMapMaker.hpp
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_IMPL_LOCALMAP_HPP_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_IMPL_LOCALMAP_HPP_
+
30
+
31#include <rtabmap/core/util3d_mapping.h>
+
32#include <rtabmap/core/util3d_transforms.h>
+ +
34
+
35namespace rtabmap {
+
36
+
37template<typename PointT>
+
+
38typename pcl::PointCloud<PointT>::Ptr LocalGridMaker::segmentCloud(
+
39 const typename pcl::PointCloud<PointT>::Ptr & cloudIn,
+
40 const pcl::IndicesPtr & indicesIn,
+
41 const Transform & pose,
+
42 const cv::Point3f & viewPoint,
+
43 pcl::IndicesPtr & groundIndices,
+
44 pcl::IndicesPtr & obstaclesIndices,
+
45 pcl::IndicesPtr * flatObstacles) const
+
46{
+
47 groundIndices.reset(new std::vector<int>);
+
48 obstaclesIndices.reset(new std::vector<int>);
+
49 if(flatObstacles)
+
50 {
+
51 flatObstacles->reset(new std::vector<int>);
+
52 }
+
53
+
54 UASSERT(cloudIn.get());
+
55 UASSERT(indicesIn.get());
+
56 if(cloudIn->empty())
+
57 {
+
58 return cloudIn;
+
59 }
+
60
+
61 typename pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
+
62 pcl::IndicesPtr indices(new std::vector<int>);
+
63
+
64 if(preVoxelFiltering_)
+
65 {
+
66 // voxelize to grid cell size
+
67 cloud = util3d::voxelize(cloudIn, indicesIn, cellSize_);
+
68
+
69 indices->resize(cloud->size());
+
70 for(unsigned int i=0; i<indices->size(); ++i)
+
71 {
+
72 indices->at(i) = i;
+
73 }
+
74 }
+
75 else
+
76 {
+
77 cloud = cloudIn;
+
78 if(indicesIn->empty() && cloud->is_dense)
+
79 {
+
80 indices->resize(cloud->size());
+
81 for(unsigned int i=0; i<indices->size(); ++i)
+
82 {
+
83 indices->at(i) = i;
+
84 }
+
85 }
+
86 else
+
87 {
+
88 indices = indicesIn;
+
89 }
+
90 }
+
91
+
92 if(cloud->empty())
+
93 {
+
94 return cloud;
+
95 }
+
96
+
97 // add pose rotation without yaw
+
98 float roll, pitch, yaw;
+
99 pose.getEulerAngles(roll, pitch, yaw);
+
100 UDEBUG("node.getPose()=%s projMapFrame_=%d", pose.prettyPrint().c_str(), projMapFrame_?1:0);
+
101 cloud = util3d::transformPointCloud(cloud, Transform(0,0, projMapFrame_?pose.z():0, roll, pitch, 0));
+
102
+
103 // filter footprint
+
104 if(footprintLength_ > 0.0f || footprintWidth_ > 0.0f || footprintHeight_ > 0.0f)
+
105 {
+
106 indices = util3d::cropBox(
+
107 cloud,
+
108 indices,
+
109 Eigen::Vector4f(
+
110 footprintLength_>0.0f?-footprintLength_/2.0f:std::numeric_limits<int>::min(),
+
111 footprintWidth_>0.0f&&footprintLength_>0.0f?-footprintWidth_/2.0f:std::numeric_limits<int>::min(),
+
112 0,
+
113 1),
+
114 Eigen::Vector4f(
+
115 footprintLength_>0.0f?footprintLength_/2.0f:std::numeric_limits<int>::max(),
+
116 footprintWidth_>0.0f&&footprintLength_>0.0f?footprintWidth_/2.0f:std::numeric_limits<int>::max(),
+
117 footprintHeight_>0.0f&&footprintLength_>0.0f&&footprintWidth_>0.0f?footprintHeight_:std::numeric_limits<int>::max(),
+
118 1),
+ +
120 true);
+
121 }
+
122
+
123 // filter ground/obstacles zone
+
124 if(minGroundHeight_ != 0.0f || maxObstacleHeight_ != 0.0f)
+
125 {
+
126 indices = util3d::passThrough(cloud, indices, "z",
+
127 minGroundHeight_!=0.0f?minGroundHeight_:std::numeric_limits<int>::min(),
+
128 maxObstacleHeight_>0.0f?maxObstacleHeight_:std::numeric_limits<int>::max());
+
129 UDEBUG("indices after max obstacles height filtering = %d", (int)indices->size());
+
130 }
+
131
+
132 if(indices->size())
+
133 {
+
134 if(normalsSegmentation_ && !groundIsObstacle_)
+
135 {
+
136 UDEBUG("normalKSearch=%d", normalKSearch_);
+
137 UDEBUG("maxGroundAngle=%f", maxGroundAngle_);
+
138 UDEBUG("Cluster radius=%f", clusterRadius_);
+
139 UDEBUG("flatObstaclesDetected=%d", flatObstaclesDetected_?1:0);
+
140 UDEBUG("maxGroundHeight=%f", maxGroundHeight_);
+
141 UDEBUG("groundNormalsUp=%f", groundNormalsUp_);
+
142 util3d::segmentObstaclesFromGround<PointT>(
+
143 cloud,
+
144 indices,
+
145 groundIndices,
+
146 obstaclesIndices,
+
147 normalKSearch_,
+
148 maxGroundAngle_,
+
149 clusterRadius_,
+
150 minClusterSize_,
+
151 flatObstaclesDetected_,
+
152 maxGroundHeight_,
+
153 flatObstacles,
+
154 Eigen::Vector4f(viewPoint.x, viewPoint.y, viewPoint.z+(projMapFrame_?pose.z():0), 1),
+
155 groundNormalsUp_);
+
156 UDEBUG("viewPoint=%f,%f,%f", viewPoint.x, viewPoint.y, viewPoint.z+(projMapFrame_?pose.z():0));
+
157 //UWARN("Saving ground.pcd and obstacles.pcd");
+
158 //pcl::io::savePCDFile("ground.pcd", *cloud, *groundIndices);
+
159 //pcl::io::savePCDFile("obstacles.pcd", *cloud, *obstaclesIndices);
+
160 }
+
161 else
+
162 {
+
163 UDEBUG("");
+
164 // passthrough filter
+
165 groundIndices = rtabmap::util3d::passThrough(cloud, indices, "z",
+
166 minGroundHeight_!=0.0f?minGroundHeight_:std::numeric_limits<int>::min(),
+
167 maxGroundHeight_!=0.0f?maxGroundHeight_:std::numeric_limits<int>::max());
+
168
+
169 pcl::IndicesPtr notObstacles = groundIndices;
+
170 if(indices->size())
+
171 {
+
172 notObstacles = util3d::extractIndices(cloud, indices, true);
+
173 notObstacles = util3d::concatenate(notObstacles, groundIndices);
+
174 }
+
175 obstaclesIndices = rtabmap::util3d::extractIndices(cloud, notObstacles, true);
+
176 }
+
177
+
178 UDEBUG("groundIndices=%d obstaclesIndices=%d", (int)groundIndices->size(), (int)obstaclesIndices->size());
+
179
+
180 // Do radius filtering after voxel filtering ( a lot faster)
+
181 if(noiseFilteringRadius_ > 0.0 && noiseFilteringMinNeighbors_ > 0)
+
182 {
+
183 UDEBUG("Radius filtering (%ld ground %ld obstacles, radius=%f k=%d)",
+
184 groundIndices->size(),
+
185 obstaclesIndices->size()+(flatObstacles?(*flatObstacles)->size():0),
+
186 noiseFilteringRadius_,
+
187 noiseFilteringMinNeighbors_);
+
188 if(groundIndices->size())
+
189 {
+
190 pcl::IndicesPtr farIndices;
+
191 if(rangeMax_!=0)
+
192 {
+
193 // Don't filter points farther than maximum range, in case we want to ray trace empty space
+
194 pcl::IndicesPtr closeIndices;
+
195 rtabmap::util3d::rangeSplitFiltering(cloud, groundIndices, rangeMax_, closeIndices, farIndices);
+
196 groundIndices = closeIndices;
+
197 }
+
198 groundIndices = rtabmap::util3d::radiusFiltering(cloud, groundIndices, noiseFilteringRadius_, noiseFilteringMinNeighbors_);
+
199 if(farIndices.get())
+
200 {
+
201 groundIndices = rtabmap::util3d::concatenate(groundIndices, farIndices);
+
202 }
+
203 }
+
204 if(obstaclesIndices->size())
+
205 {
+
206 pcl::IndicesPtr farIndices;
+
207 if(rangeMax_!=0)
+
208 {
+
209 // Don't filter points farther than maximum range, in case we want to ray trace empty space
+
210 pcl::IndicesPtr closeIndices;
+
211 rtabmap::util3d::rangeSplitFiltering(cloud, obstaclesIndices, rangeMax_, closeIndices, farIndices);
+
212 obstaclesIndices = closeIndices;
+
213 }
+
214 obstaclesIndices = rtabmap::util3d::radiusFiltering(cloud, obstaclesIndices, noiseFilteringRadius_, noiseFilteringMinNeighbors_);
+
215 if(farIndices.get())
+
216 {
+
217 obstaclesIndices = rtabmap::util3d::concatenate(obstaclesIndices, farIndices);
+
218 }
+
219 }
+
220 if(flatObstacles && (*flatObstacles)->size())
+
221 {
+
222 pcl::IndicesPtr farIndices;
+
223 if(rangeMax_!=0)
+
224 {
+
225 // Don't filter points farther than maximum range, in case we want to ray trace empty space
+
226 pcl::IndicesPtr closeIndices;
+
227 rtabmap::util3d::rangeSplitFiltering(cloud, *flatObstacles, rangeMax_, closeIndices, farIndices);
+
228 *flatObstacles = closeIndices;
+
229 }
+
230 *flatObstacles = rtabmap::util3d::radiusFiltering(cloud, *flatObstacles, noiseFilteringRadius_, noiseFilteringMinNeighbors_);
+
231 if(farIndices.get())
+
232 {
+
233 *flatObstacles = rtabmap::util3d::concatenate(*flatObstacles, farIndices);
+
234 }
+
235 }
+
236 UDEBUG("Radius filtering end (%ld ground %ld obstacles)",
+
237 groundIndices->size(),
+
238 obstaclesIndices->size()+(flatObstacles?(*flatObstacles)->size():0));
+
239
+
240 if(groundIndices->empty() && obstaclesIndices->empty())
+
241 {
+
242 UWARN("Cloud (with %d points) is empty after noise "
+
243 "filtering. Occupancy grid cannot be "
+
244 "created.",
+
245 (int)cloud->size());
+
246
+
247 }
+
248 }
+
249 }
+
250 return cloud;
+
251}
+
+
252
+
253}
+
254
+
255
+
256#endif /* CORELIB_INCLUDE_RTABMAP_CORE_IMPL_LOCALMAP_HPP_ */
+
ULogger class and convenient macros.
+
#define UDEBUG(...)
Definition ULogger.h:59
+
#define UASSERT(condition)
Definition ULogger.h:66
+
#define UWARN(...)
Definition ULogger.h:61
+
pcl::PointCloud< PointT >::Ptr segmentCloud(const typename pcl::PointCloud< PointT >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &pose, const cv::Point3f &viewPoint, pcl::IndicesPtr &groundIndices, pcl::IndicesPtr &obstaclesIndices, pcl::IndicesPtr *flatObstacles=0) const
Segments a point cloud into ground and obstacle indices.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
std::string prettyPrint() const
Returns a string representation of the transform.
+
static Transform getIdentity()
Returns identity transform.
+
void getEulerAngles(float &roll, float &pitch, float &yaw) const
Extracts Euler angles (roll, pitch, yaw).
+
float & z()
Translation z.
Definition Transform.h:151
+
pcl::IndicesPtr RTABMAP_CORE_EXPORT cropBox(const pcl::PCLPointCloud2::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
Performs crop box filtering on a point cloud of type pcl::PCLPointCloud2 and returns filtered indices...
+
pcl::IndicesPtr RTABMAP_CORE_EXPORT extractIndices(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)
Extract indices from point cloud of type pcl::PointXYZ.
+
pcl::IndicesPtr RTABMAP_CORE_EXPORT passThrough(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)
Performs pass-through filtering on a point cloud of type pcl::PointXYZ and returns filtered indices.
+
void RTABMAP_CORE_EXPORT rangeSplitFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)
Splits a point cloud of type pcl::PointXYZ.
+
pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)
Radius filtering for point cloud of type pcl::PointXYZ.
+
pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT transformPointCloud(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Transform &transform)
Transforms pcl::PointXYZ point cloud type.
+
pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT voxelize(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)
Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/MarkerDetector_8h_source.html b/preview/pr-1492/api/latest/MarkerDetector_8h_source.html new file mode 100644 index 00000000..fe168942 --- /dev/null +++ b/preview/pr-1492/api/latest/MarkerDetector_8h_source.html @@ -0,0 +1,208 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/MarkerDetector.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MarkerDetector.h
+
+
+
1/*
+
2Copyright (c) 2010-2019, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_MARKERDETECTOR_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_MARKERDETECTOR_H_
+
30
+
31#include <rtabmap/core/Parameters.h>
+
32#include <rtabmap/core/CameraModel.h>
+
33#include <opencv2/opencv_modules.hpp>
+
34
+
35#if (CV_MAJOR_VERSION > 4 || (CV_MAJOR_VERSION==4 && CV_MINOR_VERSION >=7)) && defined(HAVE_OPENCV_OBJDETECT)
+
36#include <opencv2/objdetect.hpp>
+
37#elif defined(HAVE_OPENCV_ARUCO)
+
38#include <opencv2/aruco.hpp>
+
39#endif
+
40
+
41namespace rtabmap {
+
42
+
+ +
44public:
+
45 MarkerInfo(int id, float length, Transform pose) :
+
46 id_(id),
+
47 length_(length),
+
48 pose_(pose)
+
49 {}
+
50 int id() const {return id_;}
+
51 float length() const {return length_;}
+
52 const Transform & pose() const {return pose_;}
+
53private:
+
54 int id_;
+
55 float length_;
+
56 Transform pose_;
+
57};
+
+
58
+
+
59class RTABMAP_CORE_EXPORT MarkerDetector {
+
60
+
61public:
+
62 enum Strategy {
+
63 kStrategyOpencv,
+
64 kStrategyApriltag
+
65 };
+
66
+
67public:
+
68 MarkerDetector(const ParametersMap & parameters = ParametersMap());
+
69 virtual ~MarkerDetector();
+
70 void parseParameters(const ParametersMap & parameters);
+
71
+
72 std::map<int, MarkerInfo> detect(const cv::Mat & image,
+
73 const std::vector<CameraModel> & models,
+
74 const cv::Mat & depth = cv::Mat(),
+
75 const std::map<int, float> & markerLengths = std::map<int, float>(),
+
76 cv::Mat * imageWithDetections = 0);
+
77
+
78 std::map<int, MarkerInfo> detect(const cv::Mat & image,
+
79 const CameraModel & model,
+
80 const cv::Mat & depth = cv::Mat(),
+
81 const std::map<int, float> & markerLengths = std::map<int, float>(),
+
82 cv::Mat * imageWithDetections = 0);
+
83
+
84private:
+
85 Strategy strategy_;
+
86 float markerLength_;
+
87 std::map<int, float> markerLengths_;
+
88 float maxDepthError_;
+
89 float maxRange_;
+
90 float minRange_;
+
91 int dictionaryId_;
+
92#if ((CV_MAJOR_VERSION > 4 || (CV_MAJOR_VERSION==4 && CV_MINOR_VERSION >=7)) && defined(HAVE_OPENCV_OBJDETECT)) || defined(HAVE_OPENCV_ARUCO)
+
93#if CV_MAJOR_VERSION > 4 || (CV_MAJOR_VERSION==4 && CV_MINOR_VERSION >=7)
+
94 cv::Ptr<cv::aruco::ArucoDetector> arucoDetector_;
+
95#endif
+
96 cv::Ptr<cv::aruco::DetectorParameters> detectorParams_;
+
97 cv::Ptr<cv::aruco::Dictionary> dictionary_;
+
98#endif
+
99 void * apriltagLibDetector_;
+
100 void * apriltagLibFamily_;
+
101};
+
+
102
+
103} /* namespace rtabmap */
+
104
+
105#endif /* CORELIB_INCLUDE_RTABMAP_CORE_MARKERDETECTOR_H_ */
+
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+ + +
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Memory_8h_source.html b/preview/pr-1492/api/latest/Memory_8h_source.html new file mode 100644 index 00000000..9274a248 --- /dev/null +++ b/preview/pr-1492/api/latest/Memory_8h_source.html @@ -0,0 +1,620 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Memory.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Memory.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef MEMORY_H_
+
29#define MEMORY_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include "rtabmap/utilite/UEventsHandler.h"
+
34#include "rtabmap/core/Parameters.h"
+
35#include "rtabmap/core/SensorData.h"
+
36#include "rtabmap/core/Link.h"
+
37#include "rtabmap/core/Features2d.h"
+
38#include <typeinfo>
+
39#include <list>
+
40#include <map>
+
41#include <set>
+ +
43#include <opencv2/core/core.hpp>
+
44#if CV_MAJOR_VERSION < 5
+
45#include <opencv2/features2d/features2d.hpp>
+
46#else
+
47#include <opencv2/features.hpp>
+
48#endif
+
49#include <pcl/pcl_config.h>
+
50
+
51namespace rtabmap {
+
52
+
53class Signature;
+
54class DBDriver;
+
55class VWDictionary;
+
56class VisualWord;
+
57class Feature2D;
+
58class Statistics;
+
59class Registration;
+
60class RegistrationInfo;
+
61class RegistrationIcp;
+
62class RegistrationVis;
+
63class Stereo;
+
64class LocalGridMaker;
+
65class MarkerDetector;
+
66class GlobalDescriptorExtractor;
+
67
+
+
101class RTABMAP_CORE_EXPORT Memory
+
102{
+
103public:
+
105 static const int kIdStart;
+
107 static const int kIdVirtual;
+
109 static const int kIdInvalid;
+
110
+
111public:
+
119 Memory(const ParametersMap & parameters = ParametersMap());
+
120 virtual ~Memory();
+
121
+
128 virtual void parseParameters(const ParametersMap & parameters);
+
130 virtual const ParametersMap & getParameters() const {return parameters_;}
+
141 bool update(const SensorData & data,
+
142 Statistics * stats = 0);
+
157 bool update(const SensorData & data,
+
158 const Transform & pose,
+
159 const cv::Mat & covariance,
+
160 const std::vector<float> & velocity = std::vector<float>(), // vx,vy,vz,vroll,vpitch,vyaw
+
161 Statistics * stats = 0);
+
172 bool init(const std::string & dbUrl,
+
173 bool dbOverwritten = false,
+
174 const ParametersMap & parameters = ParametersMap(),
+
175 bool postInitClosingEvents = false);
+
186 void close(bool databaseSaved = true, bool postInitClosingEvents = false, const std::string & ouputDatabasePath = "");
+
197 std::map<int, float> computeLikelihood(const Signature * signature,
+
198 const std::list<int> & ids);
+
206 int incrementMapId(std::map<int, int> * reducedIds = 0);
+
213 void updateAge(int signatureId);
+
214
+
238 std::list<int> forget(const std::set<int> & ignoredIds = std::set<int>());
+
247 std::set<int> reactivateSignatures(const std::list<int> & ids, unsigned int maxLoaded, double & timeDbAccess);
+
248
+
253 int cleanup();
+
255 void saveStatistics(const Statistics & statistics, bool saveWMState);
+
257 void savePreviewImage(const cv::Mat & image) const;
+
259 cv::Mat loadPreviewImage() const;
+
261 void saveOptimizedPoses(const std::map<int, Transform> & optimizedPoses, const Transform & lastlocalizationPose) const;
+
263 std::map<int, Transform> loadOptimizedPoses(Transform * lastlocalizationPose) const;
+
265 void save2DMap(const cv::Mat & map, float xMin, float yMin, float cellSize) const;
+
267 cv::Mat load2DMap(float & xMin, float & yMin, float & cellSize) const;
+ +
276 const cv::Mat & cloud,
+
277 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & polygons = std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > >(), // Textures -> polygons -> vertices
+
278#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
+
279 const std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > & texCoords = std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > >(), // Textures -> uv coords for each vertex of the polygons
+
280#else
+
281 const std::vector<std::vector<Eigen::Vector2f> > & texCoords = std::vector<std::vector<Eigen::Vector2f> >(), // Textures -> uv coords for each vertex of the polygons
+
282#endif
+
283 const cv::Mat & textures = cv::Mat()) const; // concatenated textures (assuming square textures with all same size)
+ +
286 std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > * polygons = 0,
+
287#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
+
288 std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > * texCoords = 0,
+
289#else
+
290 std::vector<std::vector<Eigen::Vector2f> > * texCoords = 0,
+
291#endif
+
292 cv::Mat * textures = 0) const;
+ + +
303 bool addLink(const Link & link, bool addInDatabase = false);
+
305 void updateLink(const Link & link, bool updateInDatabase = false);
+ +
309 void removeVirtualLinks(int signatureId);
+
326 std::map<int, int> getNeighborsId(
+
327 int signatureId,
+
328 int maxGraphDepth,
+
329 int maxCheckedInDatabase = -1,
+
330 bool incrementMarginOnLoop = false,
+
331 bool ignoreLoopIds = false,
+
332 bool ignoreIntermediateNodes = false,
+
333 bool ignoreLocalSpaceLoopIds = false,
+
334 const std::set<int> & nodesSet = std::set<int>(),
+
335 double * dbAccessTime = 0) const;
+
344 std::map<int, float> getNeighborsIdRadius(
+
345 int signatureId,
+
346 float radius,
+
347 const std::map<int, Transform> & optimizedPoses,
+
348 int maxGraphDepth) const;
+
350 void convertToIntermediate(int locationId);
+
365 void deleteLocation(int locationId, std::list<int> * deletedWords = 0, bool keepLinkedInDb = false);
+
367 void saveLocationData(int locationId);
+
369 void removeLink(int idA, int idB);
+
371 void removeRawData(int id, bool image = true, bool scan = true, bool userData = true, bool occupancyGrid = true);
+
388 int reduceNode(int id, float maxDistance = 0.0f, bool keepLinkedInDb = false, int direction = 0);
+
397 void setDummyDictionary(bool enabled);
+
398
+
400 const std::map<int, double> & getWorkingMem() const {return _workingMem;}
+
405 size_t getWorkingMemSize(bool ignoreIntermediateNodes = false) const;
+
407 int getWorkingMemIntermediateNodesCount() const {return _workingMemIntermediateNodesCount;}
+
409 int getStMemIntermediateNodesCount() const {return _stMemIntermediateNodesCount;}
+
411 const std::set<int> & getStMem() const {return _stMem;}
+
413 int getMaxStMemSize() const {return _maxStMemSize;}
+
415 std::multimap<int, Link> getNeighborLinks(int signatureId,
+
416 bool lookInDatabase = false) const;
+
418 std::multimap<int, Link> getLoopClosureLinks(int signatureId,
+
419 bool lookInDatabase = false) const;
+
426 std::multimap<int, Link> getLinks(int signatureId,
+
427 bool lookInDatabase = false,
+
428 bool withLandmarks = false) const;
+
430 std::multimap<int, Link> getAllLinks(bool lookInDatabase, bool ignoreNullLinks = true, bool withLandmarks = false) const;
+
432 bool isBinDataKept() const {return _binDataKept;}
+
434 float getSimilarityThreshold() const {return _similarityThreshold;}
+
436 std::map<int, int> getWeights() const;
+ +
443 const Signature * getLastWorkingSignature(bool ignoreIntermediateNodes) const;
+
445 std::map<int, Link> getNodesObservingLandmark(int landmarkId, bool lookInDatabase) const;
+
447 int getSignatureIdByLabel(const std::string & label, bool lookInDatabase = true) const;
+
454 bool labelSignature(int id, const std::string & label);
+
456 const std::map<int, std::string> & getAllLabels() const {return _labels;}
+
458 const std::map<int, std::set<int> > & getLandmarksIndex() const {return _landmarksIndex;}
+
460 bool allNodesInWM() const {return _allNodesInWM;}
+
461
+
477 bool setUserData(int id, const cv::Mat & data);
+ +
481 std::string getDatabaseVersion() const;
+
483 std::string getDatabaseUrl() const;
+
485 double getDbSavingTime() const;
+
487 int getMapId(int id, bool lookInDatabase = false) const;
+
489 Transform getOdomPose(int signatureId, bool lookInDatabase = false) const;
+
491 Transform getGroundTruthPose(int signatureId, bool lookInDatabase = false) const;
+
493 const std::map<int, Transform> & getGroundTruths() const {return _groundTruths;}
+
519 void getGPS(int id, GPS & gps, Transform & offsetENU, bool lookInDatabase, int maxGraphDepth = 0) const;
+
536 bool getNodeInfo(int signatureId,
+
537 Transform & odomPose,
+
538 int & mapId,
+
539 int & weight,
+
540 std::string & label,
+
541 double & stamp,
+
542 Transform & groundTruth,
+
543 std::vector<float> & velocity,
+
544 GPS & gps,
+
545 EnvSensors & sensors,
+
546 bool lookInDatabase = false) const;
+
548 cv::Mat getImageCompressed(int signatureId) const;
+
556 SensorData getNodeData(int locationId, bool images, bool scan, bool userData, bool occupancyGrid) const;
+ +
559 std::multimap<int, int> & words,
+
560 std::vector<cv::KeyPoint> & wordsKpts,
+
561 std::vector<cv::Point3f> & words3,
+
562 cv::Mat & wordsDescriptors,
+
563 std::vector<GlobalDescriptor> & globalDescriptors) const;
+
565 void getNodeCalibration(int nodeId,
+
566 std::vector<CameraModel> & models,
+
567 std::vector<StereoCameraModel> & stereoModels) const;
+
572 std::set<int> getAllSignatureIds(bool ignoreChildren = true) const;
+
602 bool memoryChanged() const {return _memoryChanged;}
+
607 bool isIncremental() const {return _incrementalMemory;}
+
614 bool isReadOnly() const {return !_incrementalMemory && _localizationReadOnly;}
+
619 bool isLocalizationDataSaved() const {return _localizationDataSaved;}
+
621 const Signature * getSignature(int id) const;
+
623 bool isInSTM(int signatureId) const {return _stMem.find(signatureId) != _stMem.end();}
+
625 bool isInWM(int signatureId) const {return _workingMem.find(signatureId) != _workingMem.end();}
+
627 bool isInLTM(int signatureId) const {return !this->isInSTM(signatureId) && !this->isInWM(signatureId);}
+
629 bool isIDsGenerated() const {return _generateIds;}
+
631 int getLastGlobalLoopClosureId() const {return _lastGlobalLoopClosureId;}
+
633 const Feature2D * getFeature2D() const {return _feature2D;}
+
635 bool isGraphReduced() const {return _reduceGraph;}
+
653 const std::vector<double> & getOdomMaxInf() const {return _odomMaxInf;}
+
669 bool isOdomGravityUsed() const {return _useOdometryGravity;}
+
670
+
672 void dumpMemoryTree(const char * fileNameTree) const;
+
674 virtual void dumpMemory(std::string directory) const;
+
676 virtual void dumpSignatures(const char * fileNameSign, bool words3D) const;
+
678 void dumpDictionary(const char * fileNameRef, const char * fileNameDesc) const;
+
680 unsigned long getMemoryUsed() const; //Bytes
+
681
+
687 void generateGraph(const std::string & fileName, const std::set<int> & ids = std::set<int>());
+ +
725 const std::map<int, Transform> & poses,
+
726 const cv::Mat & map,
+
727 float xMin,
+
728 float yMin,
+
729 float cellSize,
+
730 int cropRadius = 1,
+
731 bool filterScans = false);
+
732
+ +
735
+ +
748 const std::set<int> & ids,
+
749 std::map<int, Transform> & poses,
+
750 std::multimap<int, Link> & links,
+
751 bool lookInDatabase = false,
+
752 bool landmarksAdded = false);
+
753
+
763 Transform computeTransform(Signature & fromS, Signature & toS, Transform guess, RegistrationInfo * info = 0, bool useKnownCorrespondencesIfPossible = false) const;
+
765 Transform computeTransform(int fromId, int toId, Transform guess, RegistrationInfo * info = 0, bool useKnownCorrespondencesIfPossible = false);
+
770 Transform computeIcpTransform(const Signature & fromS, const Signature & toS, Transform guess, RegistrationInfo * info = 0) const;
+ +
780 int newId,
+
781 int oldId,
+
782 const std::map<int, Transform> & poses,
+
783 RegistrationInfo * info = 0);
+
784
+
785private:
+
786 void preUpdate();
+
787 void addSignatureToStm(Signature * signature, const cv::Mat & covariance);
+
788 void clear();
+
789 void loadDataFromDb(bool postInitClosingEvents);
+
790 void saveFlannIndex(bool postInitClosingEvents);
+
791 void moveToTrash(Signature * s, bool keepLinkedToGraph = true, std::list<int> * deletedWords = 0);
+
792
+
793 void moveSignatureToWMFromSTM(int id, int * reducedTo = 0);
+
794 void addSignatureToWmFromLTM(Signature * signature);
+
795 Signature * _getSignature(int id) const;
+
796 std::list<Signature *> getRemovableSignatures(int count,
+
797 const std::set<int> & ignoredIds = std::set<int>());
+
798 int getNextId();
+
799 void rehearsal(Signature * signature, Statistics * stats = 0);
+
800 bool rehearsalMerge(int oldId, int newId);
+
801 bool canBeReduced(const Link & link, float maxDistance, int direction);
+
802
+
803 const std::map<int, Signature*> & getSignatures() const {return _signatures;}
+
804
+
805 void copyData(const Signature * from, Signature * to);
+
806 Signature * createSignature(
+
807 const SensorData & data,
+
808 const Transform & pose,
+
809 Statistics * stats = 0);
+
810
+
811 //keypoint stuff
+
812 void disableWordsRef(int signatureId);
+
813 void enableWordsRef(const std::list<int> & signatureIds);
+
814 void cleanUnusedWords();
+
815 int getNi(int signatureId) const;
+
816
+
817protected:
+ +
820
+
821private:
+
822 // parameters
+
823 ParametersMap parameters_;
+
824 float _similarityThreshold;
+
825 bool _binDataKept;
+
826 bool _rawDescriptorsKept;
+
827 bool _loadVisualLocalFeaturesOnInit;
+
828 bool _saveDepth16Format;
+
829 bool _notLinkedNodesKeptInDb;
+
830 bool _saveIntermediateNodeData;
+
831 std::string _rgbCompressionFormat;
+
832 std::string _depthCompressionFormat;
+
833 bool _incrementalMemory;
+
834 bool _localizationReadOnly;
+
835 bool _localizationDataSaved;
+
836 bool _flannIndexSaved;
+
837 bool _reduceGraph;
+
838 int _maxStMemSize;
+
839 float _recentWmRatio;
+
840 bool _transferSortingByWeightId;
+
841 bool _idUpdatedToNewOneRehearsal;
+
842 bool _generateIds;
+
843 bool _badSignaturesIgnored;
+
844 bool _mapLabelsAdded;
+
845 bool _depthAsMask;
+
846 float _maskFloorThreshold;
+
847 bool _stereoFromMotion;
+
848 unsigned int _imagePreDecimation;
+
849 unsigned int _imagePostDecimation;
+
850 bool _compressionParallelized;
+
851 float _laserScanDownsampleStepSize;
+
852 float _laserScanVoxelSize;
+
853 int _laserScanNormalK;
+
854 float _laserScanNormalRadius;
+
855 float _laserScanGroundNormalsUp;
+
856 bool _reextractLoopClosureFeatures;
+
857 bool _localBundleOnLoopClosure;
+
858 bool _invertedReg;
+
859 float _rehearsalMaxDistance;
+
860 float _rehearsalMaxAngle;
+
861 bool _rehearsalWeightIgnoredWhileMoving;
+
862 bool _useOdometryFeatures;
+
863 bool _useOdometryGravity;
+
864 bool _rotateImagesUpsideUp;
+
865 bool _createOccupancyGrid;
+
866 int _visMaxFeatures;
+
867 bool _visSSC;
+
868 bool _imagesAlreadyRectified;
+
869 bool _rectifyOnlyFeatures;
+
870 bool _covOffDiagonalIgnored;
+
871 bool _detectMarkers;
+
872 float _markerLinVariance;
+
873 float _markerAngVariance;
+
874 bool _markerOrientationIgnored;
+
875
+
876 int _idCount;
+
877 int _idMapCount;
+
878 Signature * _lastSignature;
+
879 int _lastGlobalLoopClosureId;
+
880 bool _memoryChanged; // False by default, become true only when Memory::update() is called.
+
881 bool _linksChanged; // False by default, become true when links are modified.
+
882 int _signaturesAdded;
+
883 int _workingMemIntermediateNodesCount; // number of nodes with weight==-1 currently in _workingMem
+
884 int _stMemIntermediateNodesCount; // number of nodes with weight==-1 currently in _stMem
+
885 bool _allNodesInWM;
+
886 bool _receivingOdometryFeatures;
+
887 GPS _gpsOrigin;
+
888 std::vector<CameraModel> _rectCameraModels;
+
889 std::vector<StereoCameraModel> _rectStereoCameraModels;
+
890 std::vector<double> _odomMaxInf;
+
891
+
892 std::map<int, Signature *> _signatures; // TODO : check if a signature is already added? although it is not supposed to occur...
+
893 std::set<int> _stMem; // id
+
894 std::map<int, double> _workingMem; // id,age
+
895 std::map<int, Transform> _groundTruths;
+
896 std::map<int, std::string> _labels;
+
897 std::map<int, std::set<int> > _landmarksIndex; // < -landmarkId, nodeIds >
+
898 std::map<int, float> _landmarksSize; // +landmarkId
+
899
+
900 //Keypoint stuff
+
901 VWDictionary * _vwd;
+
902 Feature2D * _feature2D;
+
903 float _badSignRatio;
+
904 bool _tfIdfLikelihoodUsed;
+
905 bool _parallelized;
+
906
+
907 Registration * _registrationPipeline;
+
908 RegistrationIcp * _registrationIcpMulti;
+
909 RegistrationVis * _registrationVis;
+
910
+
911 LocalGridMaker * _localMapMaker;
+
912
+
913 MarkerDetector * _markerDetector;
+
914
+
915 GlobalDescriptorExtractor * _globalDescriptorExtractor;
+
916
+
917 bool _dummyDictionary;
+
918};
+
+
919
+
920} // namespace rtabmap
+
921
+
922#endif /* MEMORY_H_ */
+
Wrappers of STL for convenient functions.
+
Abstract database driver for RTAB-Map maps (signatures, links, words, statistics).
Definition DBDriver.h:72
+
Abstract 2D feature detector and descriptor extractor for visual SLAM.
Definition Features2d.h:145
+
WGS84 GPS fix attached to a sensor sample or graph node.
Definition GPS.h:47
+ + +
Builds per-node local occupancy grids from laser scans or depth clouds.
+ +
Three-tiered memory management (STM, WM, LTM) for RTAB-Map.
Definition Memory.h:102
+
const std::set< int > & getStMem() const
Definition Memory.h:411
+
const std::map< int, std::string > & getAllLabels() const
Definition Memory.h:456
+
void emptyTrash()
Forces the database driver to flush any queued signature/word saves.
+
cv::Mat loadOptimizedMesh(std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons=0, std::vector< std::vector< Eigen::Vector2f > > *texCoords=0, cv::Mat *textures=0) const
Loads the optimized mesh previously written by saveOptimizedMesh().
+
std::map< int, float > getNeighborsIdRadius(int signatureId, float radius, const std::map< int, Transform > &optimizedPoses, int maxGraphDepth) const
Returns neighbor ids within a Euclidean radius using optimized poses.
+
static const int kIdStart
First valid signature id assigned by getNextId() (positive integer).
Definition Memory.h:105
+
const Signature * getSignature(int id) const
+
std::multimap< int, Link > getNeighborLinks(int signatureId, bool lookInDatabase=false) const
Returns neighbor (sequential) links of signatureId; lookInDatabase also checks LTM.
+
bool isBinDataKept() const
Definition Memory.h:432
+
bool isInSTM(int signatureId) const
Definition Memory.h:623
+
virtual void dumpSignatures(const char *fileNameSign, bool words3D) const
Dumps signatures' word ids (and 3D positions if words3D) to fileNameSign.
+
bool allNodesInWM() const
Definition Memory.h:460
+
SensorData getNodeData(int locationId, bool images, bool scan, bool userData, bool occupancyGrid) const
Loads sensor data of locationId from WM or LTM.
+
int getMapId(int id, bool lookInDatabase=false) const
+
bool isInLTM(int signatureId) const
Definition Memory.h:627
+
Memory(const ParametersMap &parameters=ParametersMap())
Constructs a Memory instance with the given parameters.
+
Transform computeTransform(int fromId, int toId, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false)
Convenience overload: loads signatures by id and forwards to the Signature variant.
+
void deleteLocation(int locationId, std::list< int > *deletedWords=0, bool keepLinkedInDb=false)
Removes locationId from WM/STM and the database.
+
void joinTrashThread()
Blocks until the asynchronous database write thread has finished pending work.
+
bool isLocalizationDataSaved() const
Definition Memory.h:619
+
Transform computeIcpTransformMulti(int newId, int oldId, const std::map< int, Transform > &poses, RegistrationInfo *info=0)
ICP registration of one node against an assembled cloud from multiple neighbors.
+
bool update(const SensorData &data, Statistics *stats=0)
Adds a sensor observation to the map (overload without odometry pose).
+
int getStMemIntermediateNodesCount() const
Definition Memory.h:409
+
void removeLink(int idA, int idB)
Removes any link between idA and idB (both directions).
+
double getDbSavingTime() const
+
bool addLink(const Link &link, bool addInDatabase=false)
Adds a graph link between two signatures.
+
int getMaxStMemSize() const
Definition Memory.h:413
+
bool isIncremental() const
Definition Memory.h:607
+
void close(bool databaseSaved=true, bool postInitClosingEvents=false, const std::string &ouputDatabasePath="")
Flushes pending data and closes the database connection.
+
int getSignatureIdByLabel(const std::string &label, bool lookInDatabase=true) const
+
Transform computeTransform(Signature &fromS, Signature &toS, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false) const
Computes the relative transform from fromS to toS using the registration pipeline.
+
void dumpMemoryTree(const char *fileNameTree) const
Writes a human-readable dump of WM/STM, links and weights to fileNameTree.
+
Transform getOdomPose(int signatureId, bool lookInDatabase=false) const
+
void getNodeWordsAndGlobalDescriptors(int nodeId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &wordsKpts, std::vector< cv::Point3f > &words3, cv::Mat &wordsDescriptors, std::vector< GlobalDescriptor > &globalDescriptors) const
Loads the visual words, 3D points and global descriptors stored with nodeId.
+
std::set< int > getAllSignatureIds(bool ignoreChildren=true) const
Returns all signature ids in WM, STM and LTM.
+
std::map< int, int > getWeights() const
+
bool isInWM(int signatureId) const
Definition Memory.h:625
+
std::list< int > forget(const std::set< int > &ignoredIds=std::set< int >())
Transfers oldest signatures from WM to LTM to respect memory and/or time limits.
+
std::map< int, int > getNeighborsId(int signatureId, int maxGraphDepth, int maxCheckedInDatabase=-1, bool incrementMarginOnLoop=false, bool ignoreLoopIds=false, bool ignoreIntermediateNodes=false, bool ignoreLocalSpaceLoopIds=false, const std::set< int > &nodesSet=std::set< int >(), double *dbAccessTime=0) const
Breadth-first walk of the pose graph from signatureId.
+
static const int kIdVirtual
Reserved id for the "virtual place" used by the Bayes filter (negative).
Definition Memory.h:107
+
size_t getWorkingMemSize(bool ignoreIntermediateNodes=false) const
Returns the number of signatures in working memory, excluding the virtual place.
+
DBDriver * _dbDriver
Database driver owning the persistent storage (created by init()).
Definition Memory.h:819
+
const VWDictionary * getVWDictionary() const
+
virtual void dumpMemory(std::string directory) const
Dumps every internal map (signatures, words, dictionary) to text files in directory.
+
int getLastSignatureId() const
+
void setDummyDictionary(bool enabled)
Enables a dummy visual word dictionary (no descriptors kept, word ids only).
+
bool isIDsGenerated() const
Definition Memory.h:629
+
int cleanupLocalGrids(const std::map< int, Transform > &poses, const cv::Mat &map, float xMin, float yMin, float cellSize, int cropRadius=1, bool filterScans=false)
Removes spurious obstacle points from each node's local grid using a reference 2D map.
+
void updateAge(int signatureId)
Refreshes the age of signatureId in working memory, marking it as recent.
+
bool isGraphReduced() const
Definition Memory.h:635
+
void updateLink(const Link &link, bool updateInDatabase=false)
Replaces an existing link with link (same endpoints and type).
+
std::multimap< int, Link > getLinks(int signatureId, bool lookInDatabase=false, bool withLandmarks=false) const
Returns all links of signatureId (neighbor, loop, prior, gravity, ...).
+
void saveOptimizedMesh(const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) const
Persists an optimized textured/colored mesh to the database.
+
void removeAllVirtualLinks()
Removes every virtual link in WM.
+
int getDatabaseMemoryUsed() const
+
bool memoryChanged() const
Reports whether the in-memory map has been modified since the database was last loaded or reset....
Definition Memory.h:602
+
std::multimap< int, Link > getLoopClosureLinks(int signatureId, bool lookInDatabase=false) const
Returns loop-closure links of signatureId; lookInDatabase also checks LTM.
+
Transform getGroundTruthPose(int signatureId, bool lookInDatabase=false) const
+
void saveLocationData(int locationId)
Forces locationId to be flushed to the database.
+
std::map< int, float > computeLikelihood(const Signature *signature, const std::list< int > &ids)
Computes loop-closure likelihood of signature against a set of WM ids.
+
cv::Mat load2DMap(float &xMin, float &yMin, float &cellSize) const
Loads the 2D occupancy grid previously written by save2DMap().
+
std::map< int, Transform > loadOptimizedPoses(Transform *lastlocalizationPose) const
Loads optimized poses previously written by saveOptimizedPoses().
+
std::set< int > reactivateSignatures(const std::list< int > &ids, unsigned int maxLoaded, double &timeDbAccess)
Reloads signatures from LTM into WM.
+
void removeVirtualLinks(int signatureId)
Removes virtual links attached to signatureId.
+
bool update(const SensorData &data, const Transform &pose, const cv::Mat &covariance, const std::vector< float > &velocity=std::vector< float >(), Statistics *stats=0)
Adds a sensor observation with odometry pose and velocity to the map.
+
const Feature2D * getFeature2D() const
Definition Memory.h:633
+
bool isOdomGravityUsed() const
Definition Memory.h:669
+
std::string getDatabaseUrl() const
+
void getMetricConstraints(const std::set< int > &ids, std::map< int, Transform > &poses, std::multimap< int, Link > &links, bool lookInDatabase=false, bool landmarksAdded=false)
Extracts a sub-graph (poses + links) for a set of node ids.
+
const std::map< int, double > & getWorkingMem() const
Definition Memory.h:400
+
void saveOptimizedPoses(const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) const
Persists an optimized pose graph and the last localization pose for next session.
+
bool labelSignature(int id, const std::string &label)
Assigns or removes a label on id.
+
virtual void parseParameters(const ParametersMap &parameters)
Re-parses parameters and propagates them to owned sub-objects.
+
cv::Mat getImageCompressed(int signatureId) const
+
cv::Mat loadPreviewImage() const
Loads the preview image previously written by savePreviewImage().
+
const std::map< int, Transform > & getGroundTruths() const
Definition Memory.h:493
+
static const int kIdInvalid
Sentinel value indicating an invalid signature id (zero).
Definition Memory.h:109
+
void save2DMap(const cv::Mat &map, float xMin, float yMin, float cellSize) const
Persists a 2D occupancy grid (origin xMin, yMin and resolution cellSize).
+
int reduceNode(int id, float maxDistance=0.0f, bool keepLinkedInDb=false, int direction=0)
Merges id with a close neighbor (graph reduction).
+
void getGPS(int id, GPS &gps, Transform &offsetENU, bool lookInDatabase, int maxGraphDepth=0) const
Returns a GPS fix for id, falling back to the nearest GPS-tagged neighbor.
+
Transform computeIcpTransform(const Signature &fromS, const Signature &toS, Transform guess, RegistrationInfo *info=0) const
Refines a transform using ICP alignment of laser scans only.
+
void removeRawData(int id, bool image=true, bool scan=true, bool userData=true, bool occupancyGrid=true)
Strips raw images, scan, user data and/or occupancy grid from id to save memory (RAM)....
+
std::multimap< int, Link > getAllLinks(bool lookInDatabase, bool ignoreNullLinks=true, bool withLandmarks=false) const
Returns links of every signature; ignoreNullLinks drops empty placeholders.
+
const std::map< int, std::set< int > > & getLandmarksIndex() const
Definition Memory.h:458
+
const Signature * getLastWorkingSignature(bool ignoreIntermediateNodes) const
Returns the most recent WM signature.
+
unsigned long getMemoryUsed() const
+
bool isReadOnly() const
Definition Memory.h:614
+
int getLastGlobalLoopClosureId() const
Definition Memory.h:631
+
int getWorkingMemIntermediateNodesCount() const
Definition Memory.h:407
+
float getSimilarityThreshold() const
Definition Memory.h:434
+
const std::vector< double > & getOdomMaxInf() const
Definition Memory.h:653
+
bool getNodeInfo(int signatureId, Transform &odomPose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruth, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors, bool lookInDatabase=false) const
Reads metadata of signatureId (no images/scan/words).
+
void convertToIntermediate(int locationId)
Marks locationId as intermediate (weight = -1); excludes it from loop closure.
+
std::string getDatabaseVersion() const
+
void generateGraph(const std::string &fileName, const std::set< int > &ids=std::set< int >())
Writes a Graphviz DOT file of the pose graph.
+
bool init(const std::string &dbUrl, bool dbOverwritten=false, const ParametersMap &parameters=ParametersMap(), bool postInitClosingEvents=false)
Opens or creates a database and loads existing state into WM.
+
void getNodeCalibration(int nodeId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const
Loads mono and/or stereo camera calibration stored with nodeId.
+
virtual const ParametersMap & getParameters() const
Definition Memory.h:130
+
int cleanup()
Drops the last signature if flagged as bad, or any signature in localization mode.
+
void saveStatistics(const Statistics &statistics, bool saveWMState)
Persists statistics to the database; saveWMState records the WM id list.
+
void dumpDictionary(const char *fileNameRef, const char *fileNameDesc) const
Dumps the visual word dictionary: references to fileNameRef, descriptors to fileNameDesc.
+
int incrementMapId(std::map< int, int > *reducedIds=0)
Starts a new map id, breaking session continuity (e.g. after localization loss).
+
std::map< int, Link > getNodesObservingLandmark(int landmarkId, bool lookInDatabase) const
Returns all nodes observing landmark landmarkId, mapped to the observation link.
+
bool setUserData(int id, const cv::Mat &data)
Attaches user data to signature id, compressing it on the fly if needed.
+
void savePreviewImage(const cv::Mat &image) const
Stores a preview image (typically a thumbnail of the last frame) in the database.
+ +
Statistics and diagnostics returned by Registration.
+
Visual registration between two signatures using features and geometry.
+
Abstract base for registering two observations (visual, ICP, or both).
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Collects and manages runtime statistics for RTAB-Map.
Definition Statistics.h:108
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
Manages a dictionary of visual words for visual place recognition and loop closure detection.
+ +
std::map< EnvSensor::Type, EnvSensor > EnvSensors
Map of environmental readings keyed by EnvSensor::Type (at most one per type).
Definition EnvSensor.h:114
+
+ + + + diff --git a/preview/pr-1492/api/latest/OccupancyGrid_8h_source.html b/preview/pr-1492/api/latest/OccupancyGrid_8h_source.html new file mode 100644 index 00000000..f016cd67 --- /dev/null +++ b/preview/pr-1492/api/latest/OccupancyGrid_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/OccupancyGrid.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OccupancyGrid.h
+
+
+
1/*
+
2Copyright (c) 2010-2023, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_OCCUPANCYGRID_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_OCCUPANCYGRID_H_
+
30
+
31/*
+
32 * Deprecated header, use the one below directly!
+
33 */
+
34
+
35#include <rtabmap/core/global_map/OccupancyGrid.h>
+
36
+
37
+
38#endif /* CORELIB_INCLUDE_RTABMAP_CORE_OCCUPANCYGRID_H_ */
+
+ + + + diff --git a/preview/pr-1492/api/latest/OctoMap_8h_source.html b/preview/pr-1492/api/latest/OctoMap_8h_source.html new file mode 100644 index 00000000..ada8f0fb --- /dev/null +++ b/preview/pr-1492/api/latest/OctoMap_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/OctoMap.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OctoMap.h
+
+
+
1/*
+
2Copyright (c) 2010-2023, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_OCTOMAP_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_OCTOMAP_H_
+
30
+
31/*
+
32 * Deprecated header, use the one below directly!
+
33 */
+
34
+
35#include <rtabmap/core/global_map/OctoMap.h>
+
36
+
37
+
38#endif /* CORELIB_INCLUDE_RTABMAP_CORE_OCTOMAP_H_ */
+
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryCuVSLAM_8h_source.html b/preview/pr-1492/api/latest/OdometryCuVSLAM_8h_source.html new file mode 100644 index 00000000..23f1c593 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryCuVSLAM_8h_source.html @@ -0,0 +1,206 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryCuVSLAM.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryCuVSLAM.h
+
+
+
1/*
+
2Copyright (c) 2025 Felix Toft
+
3Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
4All rights reserved.
+
5
+
6Redistribution and use in source and binary forms, with or without
+
7modification, are permitted provided that the following conditions are met:
+
8 * Redistributions of source code must retain the above copyright
+
9 notice, this list of conditions and the following disclaimer.
+
10 * Redistributions in binary form must reproduce the above copyright
+
11 notice, this list of conditions and the following disclaimer in the
+
12 documentation and/or other materials provided with the distribution.
+
13 * Neither the name of the Universite de Sherbrooke nor the
+
14 names of its contributors may be used to endorse or promote products
+
15 derived from this software without specific prior written permission.
+
16
+
17THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
18ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
19WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
20DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
21DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
22(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
23LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
24ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
26SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27*/
+
28
+
29#ifndef ODOMETRYCUVSLAM_H_
+
30#define ODOMETRYCUVSLAM_H_
+
31
+
32#include <rtabmap/core/Odometry.h>
+
33#include <memory>
+
34#include <deque>
+
35#include <array>
+
36
+
37#ifdef RTABMAP_CUVSLAM
+
38#include <cuvslam.h>
+
39#include <ground_constraint.h>
+
40#include <cuda_runtime.h>
+
41#endif
+
42
+
43namespace rtabmap {
+
44
+
+
45class RTABMAP_CORE_EXPORT OdometryCuVSLAM : public Odometry
+
46{
+
47public:
+
48 OdometryCuVSLAM(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
49 virtual ~OdometryCuVSLAM();
+
50
+
51 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
52 virtual Odometry::Type getType() {return Odometry::kTypeCuVSLAM;}
+
53
+
54private:
+
55 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
56 virtual void cleanupCuVSLAMResources();
+
57
+
58private:
+
59#ifdef RTABMAP_CUVSLAM
+
60 CUVSLAM_TrackerHandle cuvslam_handle_;
+
61 CUVSLAM_GroundConstraintHandle ground_constraint_handle_;
+
62
+
63 std::vector<CUVSLAM_Camera> cuvslam_cameras_;
+
64 std::vector<std::array<float, 12>> intrinsics_;
+
65
+
66 // State tracking
+
67 bool initialized_;
+
68 bool lost_;
+
69 bool tracking_;
+
70 bool planar_constraints_;
+
71 int multicam_mode_;
+
72 Transform previous_pose_;
+
73 double last_timestamp_;
+
74
+
75 // Configuration Thresholds
+
76 double velocity_ratio_threshold_high_ = 1.5; // The maximum velocity ratio of guess / estimated velocity needed to detect lost state.
+
77 double velocity_ratio_threshold_low_ = 0.5; // The minimum velocity ratio of guess / estimated velocity needed to detect lost state.
+
78 double velocity_difference_threshold_ = 0.1; // The maximum velocity difference between the guess and the estimated velocity needed to detect lost state.
+
79 double zero_estimated_velocity_threshold_ = 0.00001; // The minimum cuVSLAM estimated velocity needed to detect lost state.
+
80 double min_landmarks_threshold_ = 30; // The minimum number of landmarks needed to start tracking after an initialization.
+
81
+
82 // Forward cuVLSAM covariance directly to RTAB-Map.
+
83 // When true this disables covariance based lost detection.
+
84 bool use_raw_covariance_ = false;
+
85
+
86 //visualization
+
87 std::vector<CUVSLAM_Observation> observations_;
+
88 std::vector<CUVSLAM_Landmark> landmarks_;
+
89
+
90 // GPU memory management
+
91 std::vector<uint8_t *> gpu_left_image_data_; // pointers to all gpu images
+
92 std::vector<uint8_t *> gpu_right_image_data_;
+
93 std::vector<size_t> gpu_left_image_sizes_; // size of one image
+
94 std::vector<size_t> gpu_right_image_sizes_;
+
95 cudaStream_t cuda_stream_;
+
96#endif
+
97};
+
+
98
+
99}
+
100
+
101#endif /* ODOMETRYCUVSLAM_H_ */
+ +
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
+ +
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryDVO_8h_source.html b/preview/pr-1492/api/latest/OdometryDVO_8h_source.html new file mode 100644 index 00000000..50c47bec --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryDVO_8h_source.html @@ -0,0 +1,174 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryDVO.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryDVO.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYDVO_H_
+
29#define ODOMETRYDVO_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33namespace dvo {
+
34class DenseTracker;
+
35namespace core {
+
36class RgbdImagePyramid;
+
37class RgbdCameraPyramid;
+
38}
+
39}
+
40
+
41namespace rtabmap {
+
42
+
+
43class RTABMAP_CORE_EXPORT OdometryDVO : public Odometry
+
44{
+
45public:
+
46 OdometryDVO(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
47 virtual ~OdometryDVO();
+
48
+
49 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
50 virtual Odometry::Type getType() {return Odometry::kTypeDVO;}
+
51
+
52private:
+
53 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
54
+
55private:
+
56#ifdef RTABMAP_DVO
+
57 dvo::DenseTracker * dvo_;
+
58 dvo::core::RgbdImagePyramid * reference_;
+
59 dvo::core::RgbdCameraPyramid * camera_;
+
60 bool lost_;
+
61#endif
+
62 Transform motionFromKeyFrame_;
+
63 Transform previousLocalTransform_;
+
64
+
65};
+
+
66
+
67}
+
68
+
69#endif /* ODOMETRYDVO_H_ */
+ +
virtual Odometry::Type getType()
Definition OdometryDVO.h:50
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+ +
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryEvent_8h_source.html b/preview/pr-1492/api/latest/OdometryEvent_8h_source.html new file mode 100644 index 00000000..4ca1f262 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryEvent_8h_source.html @@ -0,0 +1,225 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/OdometryEvent.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryEvent.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYEVENT_H_
+
29#define ODOMETRYEVENT_H_
+
30
+
31#include "rtabmap/utilite/UEvent.h"
+ + +
34#include "rtabmap/core/SensorData.h"
+
35#include "rtabmap/core/OdometryInfo.h"
+
36
+
37namespace rtabmap {
+
38
+
+
39class OdometryEvent : public UEvent
+
40{
+
41public:
+ +
43 {
+
44 _info.reg.covariance = cv::Mat::eye(6,6,CV_64FC1);
+
45 }
+ +
47 const SensorData & data,
+
48 const Transform & pose,
+
49 const OdometryInfo & info = OdometryInfo()) :
+
50 _data(data),
+
51 _pose(pose),
+
52 _info(info)
+
53 {
+
54 if(_info.reg.covariance.empty())
+
55 {
+
56 _info.reg.covariance = cv::Mat::eye(6,6,CV_64FC1);
+
57 }
+
58 UASSERT(_info.reg.covariance.cols == 6 && _info.reg.covariance.rows == 6 && _info.reg.covariance.type() == CV_64FC1);
+
59 UASSERT_MSG(uIsFinite(_info.reg.covariance.at<double>(0,0)) && _info.reg.covariance.at<double>(0,0)>0, "Transitional variance should not be null! (set to 1 if unknown)");
+
60 UASSERT_MSG(uIsFinite(_info.reg.covariance.at<double>(1,1)) && _info.reg.covariance.at<double>(1,1)>0, "Transitional variance should not be null! (set to 1 if unknown)");
+
61 UASSERT_MSG(uIsFinite(_info.reg.covariance.at<double>(2,2)) && _info.reg.covariance.at<double>(2,2)>0, "Transitional variance should not be null! (set to 1 if unknown)");
+
62 UASSERT_MSG(uIsFinite(_info.reg.covariance.at<double>(3,3)) && _info.reg.covariance.at<double>(3,3)>0, "Rotational variance should not be null! (set to 1 if unknown)");
+
63 UASSERT_MSG(uIsFinite(_info.reg.covariance.at<double>(4,4)) && _info.reg.covariance.at<double>(4,4)>0, "Rotational variance should not be null! (set to 1 if unknown)");
+
64 UASSERT_MSG(uIsFinite(_info.reg.covariance.at<double>(5,5)) && _info.reg.covariance.at<double>(5,5)>0, "Rotational variance should not be null! (set to 1 if unknown)");
+
65 }
+
66 virtual ~OdometryEvent() {}
+
67 virtual std::string getClassName() const {return "OdometryEvent";}
+
68
+
69 SensorData & data() {return _data;}
+
70 const SensorData & data() const {return _data;}
+
71 const Transform & pose() const {return _pose;}
+
72 const cv::Mat & covariance() const {return _info.reg.covariance;}
+
73 std::vector<float> velocity() const {
+
74 if(_info.interval>0.0)
+
75 {
+
76 std::vector<float> velocity(6,0);
+
77 float x,y,z,roll,pitch,yaw;
+
78 _info.transform.getTranslationAndEulerAngles(x,y,z,roll,pitch,yaw);
+
79 velocity[0] = x/_info.interval;
+
80 velocity[1] = y/_info.interval;
+
81 velocity[2] = z/_info.interval;
+
82 velocity[3] = roll/_info.interval;
+
83 velocity[4] = pitch/_info.interval;
+
84 velocity[5] = yaw/_info.interval;
+
85 return velocity;
+
86 }
+
87 return std::vector<float>();
+
88 }
+
89 const OdometryInfo & info() const {return _info;}
+
90
+
91private:
+
92 SensorData _data;
+
93 Transform _pose;
+
94 OdometryInfo _info;
+
95};
+
+
96
+
+ +
98{
+
99public:
+
100 OdometryResetEvent(const Transform & pose = Transform::getIdentity()){_pose = pose;}
+
101 virtual ~OdometryResetEvent() {}
+
102 virtual std::string getClassName() const {return "OdometryResetEvent";}
+
103 const Transform & getPose() const {return _pose;}
+
104private:
+
105 Transform _pose;
+
106};
+
+
107
+
108}
+
109
+
110
+
111#endif /* ODOMETRYEVENT_H_ */
+
ULogger class and convenient macros.
+
#define UASSERT(condition)
Definition ULogger.h:66
+
Basic mathematics functions.
+
bool uIsFinite(const T &value)
Definition UMath.h:53
+ + +
virtual std::string getClassName() const
+ + +
virtual std::string getClassName() const
+ +
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
static Transform getIdentity()
Returns identity transform.
+
void getTranslationAndEulerAngles(float &x, float &y, float &z, float &roll, float &pitch, float &yaw) const
Extracts translation and Euler angles (radians).
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryF2F_8h_source.html b/preview/pr-1492/api/latest/OdometryF2F_8h_source.html new file mode 100644 index 00000000..e544dc62 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryF2F_8h_source.html @@ -0,0 +1,174 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryF2F.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryF2F.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYF2F_H_
+
29#define ODOMETRYF2F_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32#include <rtabmap/core/Signature.h>
+
33
+
34namespace rtabmap {
+
35
+
36class Registration;
+
37
+
+
38class RTABMAP_CORE_EXPORT OdometryF2F : public Odometry
+
39{
+
40public:
+
41 OdometryF2F(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
42 virtual ~OdometryF2F();
+
43
+
44 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
45
+
46 const Signature & getRefFrame() const {return refFrame_;}
+
47
+
48 virtual Odometry::Type getType() {return Odometry::kTypeF2F;}
+
49
+
50private:
+
51 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
52
+
53private:
+
54 //Parameters:
+
55 float keyFrameThr_;
+
56 int visKeyFrameThr_;
+
57 float scanKeyFrameThr_;
+
58
+
59 Registration * registrationPipeline_;
+
60 Signature refFrame_;
+
61 Transform lastKeyFramePose_;
+
62 ParametersMap parameters_;
+
63};
+
+
64
+
65}
+
66
+
67#endif /* ODOMETRYF2F_H_ */
+ +
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
Definition OdometryF2F.h:48
+ +
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Abstract base for registering two observations (visual, ICP, or both).
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryF2M_8h_source.html b/preview/pr-1492/api/latest/OdometryF2M_8h_source.html new file mode 100644 index 00000000..b75c7212 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryF2M_8h_source.html @@ -0,0 +1,208 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryF2M.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryF2M.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYF2M_H_
+
29#define ODOMETRYF2M_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32#include <rtabmap/core/Optimizer.h>
+
33#include <pcl/point_cloud.h>
+
34#include <pcl/point_types.h>
+
35#include <pcl/pcl_base.h>
+
36#include <rtabmap/core/Link.h>
+
37
+
38namespace rtabmap {
+
39
+
40class Signature;
+
41class Registration;
+
42class Optimizer;
+
43
+
+
44class RTABMAP_CORE_EXPORT OdometryF2M : public Odometry
+
45{
+
46public:
+
47 OdometryF2M(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
48 virtual ~OdometryF2M();
+
49
+
50 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
51 const Signature & getMap() const {return *map_;}
+
52 const Signature & getLastFrame() const {return *lastFrame_;}
+
53
+
54 virtual Odometry::Type getType() {return Odometry::kTypeF2M;}
+
55
+
56private:
+
57 virtual Transform computeTransform(SensorData & data, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
58
+
59private:
+
60 //Parameters
+
61 int maximumMapSize_;
+
62 float keyFrameThr_;
+
63 int visKeyFrameThr_;
+
64 int maxNewFeatures_;
+
65 float initDepthFactor_;
+
66 float floorThreshold_;
+
67 float scanKeyFrameThr_;
+
68 int scanMaximumMapSize_;
+
69 float scanSubtractRadius_;
+
70 float scanSubtractAngle_;
+
71 float scanMapMaxRange_;
+
72 int bundleAdjustment_;
+
73 int bundleMaxFrames_;
+
74 float bundleMinMotion_;
+
75 int bundleMaxKeyFramesPerFeature_;
+
76 bool bundleUpdateFeatureMapOnAllFrames_;
+
77 float validDepthRatio_;
+
78 int pointToPlaneK_;
+
79 float pointToPlaneRadius_;
+
80
+
81 Registration * regPipeline_;
+
82 Signature * map_;
+
83 Signature * lastFrame_;
+
84 int lastFrameOldestNewId_;
+
85 std::vector<std::pair<pcl::PointCloud<pcl::PointXYZINormal>::Ptr, pcl::IndicesPtr> > scansBuffer_;
+
86
+
87 std::map<int, std::map<int, FeatureBA> > bundleWordReferences_; //<WordId, <FrameId, pt2D+depth>>
+
88 std::map<int, Transform> bundlePoses_;
+
89 std::multimap<int, Link> bundleLinks_;
+
90 std::multimap<int, Link> bundleIMUOrientations_;
+
91 std::map<int, std::vector<CameraModel> > bundleModels_;
+
92 std::map<int, int> bundlePoseReferences_;
+
93 int bundleSeq_;
+
94 Optimizer * sba_;
+
95 ParametersMap parameters_;
+
96};
+
+
97
+
98}
+
99
+
100#endif /* ODOMETRYF2M_H_ */
+ +
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
Definition OdometryF2M.h:54
+ +
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:88
+
Abstract base for registering two observations (visual, ICP, or both).
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryFLOAM_8h_source.html b/preview/pr-1492/api/latest/OdometryFLOAM_8h_source.html new file mode 100644 index 00000000..59a4ba72 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryFLOAM_8h_source.html @@ -0,0 +1,169 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryFLOAM.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryFLOAM.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYFLOAM_H_
+
29#define ODOMETRYFLOAM_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33class LaserProcessingClass;
+
34class OdomEstimationClass;
+
35
+
36namespace rtabmap {
+
37
+
+
38class RTABMAP_CORE_EXPORT OdometryFLOAM : public Odometry
+
39{
+
40public:
+
41 OdometryFLOAM(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
42 virtual ~OdometryFLOAM();
+
43
+
44 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
45 virtual Odometry::Type getType() {return Odometry::kTypeFLOAM;}
+
46
+
47private:
+
48 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
49
+
50private:
+
51#ifdef RTABMAP_FLOAM
+
52 LaserProcessingClass * laserProcessing_;
+
53 OdomEstimationClass * odomEstimation_;
+
54
+
55 Transform lastPose_;
+
56 bool lost_;
+
57 float linVar_;
+
58 float angVar_;
+
59#endif
+
60};
+
+
61
+
62}
+
63
+
64#endif /* ODOMETRYFLOAM_H_ */
+ +
virtual Odometry::Type getType()
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+ +
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryFovis_8h_source.html b/preview/pr-1492/api/latest/OdometryFovis_8h_source.html new file mode 100644 index 00000000..8156592e --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryFovis_8h_source.html @@ -0,0 +1,175 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryFovis.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryFovis.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYFOVIS_H_
+
29#define ODOMETRYFOVIS_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33namespace fovis {
+
34class VisualOdometry;
+
35class Rectification;
+
36class StereoCalibration;
+
37class DepthImage;
+
38class StereoDepth;
+
39}
+
40
+
41namespace rtabmap {
+
42
+
+
43class RTABMAP_CORE_EXPORT OdometryFovis : public Odometry
+
44{
+
45public:
+
46 OdometryFovis(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
47 virtual ~OdometryFovis();
+
48
+
49 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
50 virtual Odometry::Type getType() {return Odometry::kTypeFovis;}
+
51
+
52private:
+
53 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
54
+
55private:
+
56#ifdef RTABMAP_FOVIS
+
57 fovis::VisualOdometry * fovis_;
+
58 fovis::Rectification * rect_;
+
59 fovis::StereoCalibration * stereoCalib_;
+
60 fovis::DepthImage * depthImage_;
+
61 fovis::StereoDepth * stereoDepth_;
+
62 bool lost_;
+
63#endif
+
64 ParametersMap fovisParameters_;
+
65 Transform previousLocalTransform_;
+
66};
+
+
67
+
68}
+
69
+
70#endif /* ODOMETRYFOVIS_H_ */
+ +
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
+ +
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryInfo_8h_source.html b/preview/pr-1492/api/latest/OdometryInfo_8h_source.html new file mode 100644 index 00000000..d9193a4d --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryInfo_8h_source.html @@ -0,0 +1,198 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/OdometryInfo.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryInfo.h
+
+
+
1/*
+
2Copyright (c) 2010-2025, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYINFO_H_
+
29#define ODOMETRYINFO_H_
+
30
+
31#include <rtabmap/core/rtabmap_core_export.h>
+
32#include <map>
+
33#include "rtabmap/core/Transform.h"
+
34#include "rtabmap/core/RegistrationInfo.h"
+
35#include "rtabmap/core/CameraModel.h"
+
36#include "rtabmap/core/LaserScan.h"
+
37#if CV_MAJOR_VERSION < 5
+
38#include <opencv2/features2d/features2d.hpp>
+
39#else
+
40#include <opencv2/features.hpp>
+
41#endif
+
42
+
43namespace rtabmap {
+
44
+
+
45class RTABMAP_CORE_EXPORT OdometryInfo
+
46{
+
47public:
+ +
49 OdometryInfo copyWithoutData() const;
+
50 std::map<std::string, float> statistics(const Transform & pose = Transform());
+
51
+
52 bool lost;
+ +
54 int features;
+
55 int localMapSize;
+
56 int localScanMapSize;
+
57 int localKeyFrames;
+
58 int localBundleOutliers;
+
59 int localBundleConstraints;
+
60 float localBundleTime;
+
61 std::map<int, Transform> localBundlePoses;
+
62 std::map<int, std::vector<CameraModel> > localBundleModels;
+
63 float localBundleAvgInlierDistance;
+
64 int localBundleMaxKeyFramesForInlier;
+
65 std::vector<int> localBundleOutliersPerCam;
+
66 bool keyFrameAdded;
+
67 float timeDeskewing;
+
68 float timeEstimation;
+
69 float timeParticleFiltering;
+
70 double stamp;
+
71 double interval;
+
72 Transform transform;
+
73 Transform transformFiltered;
+
74 Transform transformGroundTruth;
+
75 Transform guessVelocity; // deprecated, will be removed. Use guess and interval instead.
+
76 Transform guess;
+
77 float distanceTravelled;
+
78 int memoryUsage; //MB
+
79 double gravityRollError;
+
80 double gravityPitchError;
+
81
+
82 int type;
+
83
+
84 // F2M
+
85 std::multimap<int, cv::KeyPoint> words;
+
86 std::map<int, cv::Point3f> localMap;
+
87 LaserScan localScanMap;
+
88
+
89 // F2F
+
90 std::vector<cv::Point2f> refCorners;
+
91 std::vector<cv::Point2f> newCorners;
+
92 std::vector<int> cornerInliers;
+
93};
+
+
94
+
95}
+
96
+
97#endif /* ODOMETRYINFO_H_ */
+
Represents 2D or 3D laser scan data with support for multiple point data formats.
Definition LaserScan.h:46
+ +
Statistics and diagnostics returned by Registration.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryLIOSAM_8h_source.html b/preview/pr-1492/api/latest/OdometryLIOSAM_8h_source.html new file mode 100644 index 00000000..8a70747a --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryLIOSAM_8h_source.html @@ -0,0 +1,188 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryLIOSAM.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryLIOSAM.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYLIOSAM_H_
+
29#define ODOMETRYLIOSAM_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33#ifdef RTABMAP_LIOSAM
+
34#include <Eigen/Core>
+
35#include <Eigen/Geometry>
+
36#include <vector>
+
37namespace lio_sam { class LioSamCore; }
+
38#endif
+
39
+
40namespace rtabmap {
+
41
+
+
42class RTABMAP_CORE_EXPORT OdometryLIOSAM : public Odometry
+
43{
+
44public:
+
45 OdometryLIOSAM(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
46 virtual ~OdometryLIOSAM();
+
47
+
48 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
49 virtual Odometry::Type getType() {return Odometry::kTypeLIOSAM;}
+
50 virtual bool canProcessAsyncIMU() const {return true;}
+
51
+
52private:
+
53 virtual Transform computeTransform(SensorData & data, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
54
+
55#ifdef RTABMAP_LIOSAM
+
56 bool init(const Transform & imuLocalTransform, const Transform & lidarLocalTransform);
+
57#endif
+
58
+
59private:
+
60#ifdef RTABMAP_LIOSAM
+
61 lio_sam::LioSamCore * lioSam_;
+
62 Transform lastPose_;
+
63 bool lost_;
+
64 float linVar_;
+
65 float angVar_;
+
66 ParametersMap parameters_;
+
67 Transform imuLocalTransform_; // base_link -> imu_link (cached for deferred init)
+
68
+
69 // Buffered IMU samples received before initialization
+
70 struct ImuSample {
+
71 double stamp;
+
72 Eigen::Vector3d acc;
+
73 Eigen::Vector3d gyro;
+
74 Eigen::Quaterniond orientation;
+
75 };
+
76 std::vector<ImuSample> imuBuffer_;
+
77#endif
+
78};
+
+
79
+
80}
+
81
+
82#endif /* ODOMETRYLIOSAM_H_ */
+ + +
virtual bool canProcessAsyncIMU() const
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryLOAM_8h_source.html b/preview/pr-1492/api/latest/OdometryLOAM_8h_source.html new file mode 100644 index 00000000..54fcef4f --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryLOAM_8h_source.html @@ -0,0 +1,180 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryLOAM.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryLOAM.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYLOAM_H_
+
29#define ODOMETRYLOAM_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33#ifdef RTABMAP_LOAM
+
34#include <loam_velodyne/BasicScanRegistration.h>
+
35#include <loam_velodyne/BasicLaserOdometry.h>
+
36#include <loam_velodyne/BasicLaserMapping.h>
+
37#include <loam_velodyne/BasicTransformMaintenance.h>
+
38#include <loam_velodyne/MultiScanRegistration.h>
+
39#endif
+
40
+
41namespace rtabmap {
+
42
+
+
43class RTABMAP_CORE_EXPORT OdometryLOAM : public Odometry
+
44{
+
45public:
+
46 OdometryLOAM(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
47 virtual ~OdometryLOAM();
+
48
+
49 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
50 virtual Odometry::Type getType() {return Odometry::kTypeLOAM;}
+
51
+
52private:
+
53 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
54
+
55private:
+
56#ifdef RTABMAP_LOAM
+
57 std::vector<pcl::PointCloud<pcl::PointXYZI> > segmentScanRings(const pcl::PointCloud<pcl::PointXYZ> & laserCloudIn);
+
58
+
59 loam::BasicScanRegistration scanRegistration_;
+
60 loam::MultiScanMapper scanMapper_;
+
61 loam::BasicLaserOdometry * laserOdometry_;
+
62 loam::BasicLaserMapping * laserMapping_;
+
63 loam::BasicTransformMaintenance transformMaintenance_;
+
64 Transform lastPose_;
+
65 float scanPeriod_;
+
66 float linVar_;
+
67 float angVar_;
+
68 bool localMapping_;
+
69 bool lost_;
+
70#endif
+
71};
+
+
72
+
73}
+
74
+
75#endif /* ODOMETRYLOAM_H_ */
+ + +
virtual Odometry::Type getType()
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryMSCKF_8h_source.html b/preview/pr-1492/api/latest/OdometryMSCKF_8h_source.html new file mode 100644 index 00000000..489427c9 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryMSCKF_8h_source.html @@ -0,0 +1,174 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryMSCKF.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryMSCKF.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYMSCKF_H_
+
29#define ODOMETRYMSCKF_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33namespace rtabmap {
+
34
+
35class ImageProcessorNoROS;
+
36class MsckfVioNoROS;
+
37
+
+
38class RTABMAP_CORE_EXPORT OdometryMSCKF : public Odometry
+
39{
+
40public:
+
41 OdometryMSCKF(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
42 virtual ~OdometryMSCKF();
+
43
+
44 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
45 virtual Odometry::Type getType() {return Odometry::kTypeMSCKF;}
+
46 virtual bool canProcessRawImages() const {return true;}
+
47 virtual bool canProcessAsyncIMU() const {return true;}
+
48
+
49private:
+
50 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
51
+
52private:
+
53#ifdef RTABMAP_MSCKF_VIO
+
54 ImageProcessorNoROS * imageProcessor_;
+
55 MsckfVioNoROS * msckf_;
+
56 IMU lastImu_;
+
57 ParametersMap parameters_;
+
58 Transform fixPoseRotation_;
+
59 Transform previousPose_;
+
60 bool initGravity_;
+
61#endif
+
62};
+
+
63
+
64}
+
65
+
66#endif /* ODOMETRYMSCKF_H_ */
+
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
+ + +
virtual bool canProcessRawImages() const
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual bool canProcessAsyncIMU() const
+
virtual Odometry::Type getType()
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryMono_8h_source.html b/preview/pr-1492/api/latest/OdometryMono_8h_source.html new file mode 100644 index 00000000..f8c8d13e --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryMono_8h_source.html @@ -0,0 +1,190 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryMono.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryMono.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYMONO_H_
+
29#define ODOMETRYMONO_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32#include <rtabmap/core/Link.h>
+
33
+
34namespace rtabmap {
+
35
+
36class Memory;
+
37class Feature2D;
+
38
+
+
39class RTABMAP_CORE_EXPORT OdometryMono : public Odometry
+
40{
+
41public:
+
42 OdometryMono(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
43 virtual ~OdometryMono();
+
44 virtual void reset(const Transform & initialPose);
+
45 virtual Odometry::Type getType() {return kTypeUndef;}
+
46
+
47private:
+
48 virtual Transform computeTransform(SensorData & data, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
49private:
+
50 //Parameters:
+
51 int flowWinSize_;
+
52 int flowIterations_;
+
53 double flowEps_;
+
54 int flowMaxLevel_;
+
55 int minInliers_;
+
56 int iterations_;
+
57 double pnpReprojError_;
+
58 int pnpFlags_;
+
59 int pnpRefineIterations_;
+
60
+
61 Feature2D * feature2D_;
+
62
+
63 Memory * memory_;
+
64 int localHistoryMaxSize_;
+
65 float initMinFlow_;
+
66 float initMinTranslation_;
+
67 float minTranslation_;
+
68 float fundMatrixReprojError_;
+
69 float fundMatrixConfidence_;
+
70
+
71 std::map<int, cv::Point2f> firstFrameGuessCorners_;
+
72 std::map<int, cv::Point3f> localMap_;
+
73 std::map<int, std::map<int, cv::Point3f> > keyFrameWords3D_;
+
74 std::map<int, Transform> keyFramePoses_;
+
75 std::multimap<int, Link> keyFrameLinks_;
+
76 std::map<int, std::vector<CameraModel> > keyFrameModels_;
+
77 float maxVariance_;
+
78 float keyFrameThr_;
+
79};
+
+
80
+
81}
+
82
+
83#endif /* ODOMETRYMONO_H_ */
+
Abstract 2D feature detector and descriptor extractor for visual SLAM.
Definition Features2d.h:145
+
Three-tiered memory management (STM, WM, LTM) for RTAB-Map.
Definition Memory.h:102
+ + +
virtual void reset(const Transform &initialPose)
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryORBSLAM2_8h_source.html b/preview/pr-1492/api/latest/OdometryORBSLAM2_8h_source.html new file mode 100644 index 00000000..a86b712d --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryORBSLAM2_8h_source.html @@ -0,0 +1,167 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryORBSLAM2.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryORBSLAM2.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYORBSLAM2_H_
+
29#define ODOMETRYORBSLAM2_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33
+
34class ORBSLAM2System;
+
35
+
36namespace rtabmap {
+
37
+
+
38class RTABMAP_CORE_EXPORT OdometryORBSLAM2 : public Odometry
+
39{
+
40public:
+
41 OdometryORBSLAM2(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
42 virtual ~OdometryORBSLAM2();
+
43
+
44 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
45 virtual Odometry::Type getType() {return Odometry::kTypeORBSLAM;}
+
46
+
47private:
+
48 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
49
+
50private:
+
51#if defined(RTABMAP_ORB_SLAM) and RTABMAP_ORB_SLAM == 2
+
52 ORBSLAM2System * orbslam_;
+
53 bool firstFrame_;
+
54 Transform originLocalTransform_;
+
55 Transform previousPose_;
+
56#endif
+
57
+
58};
+
+
59
+
60}
+
61
+
62#endif /* ODOMETRYORBSLAM2_H_ */
+ + +
virtual Odometry::Type getType()
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryORBSLAM3_8h_source.html b/preview/pr-1492/api/latest/OdometryORBSLAM3_8h_source.html new file mode 100644 index 00000000..d4e8cd2b --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryORBSLAM3_8h_source.html @@ -0,0 +1,178 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryORBSLAM3.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryORBSLAM3.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYORBSLAM3_H_
+
29#define ODOMETRYORBSLAM3_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33#if defined(RTABMAP_ORB_SLAM) and RTABMAP_ORB_SLAM == 3
+
34#include <System.h>
+
35#endif
+
36
+
37namespace rtabmap {
+
38
+
+
39class RTABMAP_CORE_EXPORT OdometryORBSLAM3 : public Odometry
+
40{
+
41public:
+
42 OdometryORBSLAM3(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
43 virtual ~OdometryORBSLAM3();
+
44
+
45 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
46 virtual Odometry::Type getType() {return Odometry::kTypeORBSLAM;}
+
47 virtual bool canProcessAsyncIMU() const;
+
48
+
49private:
+
50 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
51
+
52 bool init(const rtabmap::CameraModel & model1, const rtabmap::CameraModel & model2, double stamp, bool stereo, double baseline);
+
53private:
+
54#if defined(RTABMAP_ORB_SLAM) and RTABMAP_ORB_SLAM == 3
+
55 ORB_SLAM3::System * orbslam_;
+
56 bool firstFrame_;
+
57 Transform originLocalTransform_;
+
58 Transform previousPose_;
+
59 bool useIMU_;
+
60 Transform imuLocalTransform_;
+
61 ParametersMap parameters_;
+
62 std::vector<ORB_SLAM3::IMU::Point> orbslamImus_;
+
63 double lastImuStamp_;
+
64 double lastImageStamp_;
+
65#endif
+
66
+
67};
+
+
68
+
69}
+
70
+
71#endif /* ODOMETRYORBSLAM_H3_ */
+
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+ + +
virtual bool canProcessAsyncIMU() const
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryOkvis_8h_source.html b/preview/pr-1492/api/latest/OdometryOkvis_8h_source.html new file mode 100644 index 00000000..aaf0582f --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryOkvis_8h_source.html @@ -0,0 +1,177 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryOkvis.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryOkvis.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYOKVIS_H_
+
29#define ODOMETRYOKVIS_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33namespace okvis {
+
34 class ThreadedKFVio;
+
35}
+
36
+
37namespace rtabmap {
+
38
+
39class OkvisCallbackHandler;
+
+
40class RTABMAP_CORE_EXPORT OdometryOkvis : public Odometry
+
41{
+
42public:
+
43 OdometryOkvis(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
44 virtual ~OdometryOkvis();
+
45
+
46 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
47 virtual Odometry::Type getType() {return Odometry::kTypeOkvis;}
+
48 virtual bool canProcessRawImages() const {return true;}
+
49 virtual bool canProcessAsyncIMU() const {return true;}
+
50
+
51private:
+
52 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
53
+
54private:
+
55 std::string configFilename_;
+
56#ifdef RTABMAP_OKVIS
+
57 OkvisCallbackHandler * okvisCallbackHandler_;
+
58 okvis::ThreadedKFVio * okvisEstimator_;
+
59 int imagesProcessed_;
+
60 bool initGravity_;
+
61#endif
+
62 ParametersMap okvisParameters_;
+
63 IMU lastImu_; // only used for initialization
+
64 Transform previousPose_;
+
65};
+
+
66
+
67}
+
68
+
69#endif /* ODOMETRYOKVIS_H_ */
+
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
+ + +
virtual bool canProcessAsyncIMU() const
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
+
virtual bool canProcessRawImages() const
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryOpen3D_8h_source.html b/preview/pr-1492/api/latest/OdometryOpen3D_8h_source.html new file mode 100644 index 00000000..196b0163 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryOpen3D_8h_source.html @@ -0,0 +1,164 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryOpen3D.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryOpen3D.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYOPEN3D_H_
+
29#define ODOMETRYOPEN3D_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33namespace rtabmap {
+
34
+
+
35class RTABMAP_CORE_EXPORT OdometryOpen3D : public Odometry
+
36{
+
37public:
+
38 OdometryOpen3D(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
39 virtual ~OdometryOpen3D();
+
40
+
41 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
42 virtual Odometry::Type getType() {return Odometry::kTypeOpen3D;}
+
43
+
44private:
+
45 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
46
+
47private:
+
48#ifdef RTABMAP_OPEN3D
+
49 rtabmap::SensorData keyFrame_;
+
50 Transform lastKeyFramePose_;
+
51 int method_;
+
52 float maxDepth_;
+
53 float keyFrameThr_;
+
54#endif
+
55};
+
+
56
+
57}
+
58
+
59#endif /* ODOMETRYOPEN3D_H_ */
+ + +
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryOpenVINS_8h_source.html b/preview/pr-1492/api/latest/OdometryOpenVINS_8h_source.html new file mode 100644 index 00000000..28da9310 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryOpenVINS_8h_source.html @@ -0,0 +1,173 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryOpenVINS.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryOpenVINS.h
+
+
+
1/*
+
2Copyright (c) 2010-2021, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYOPENVINS_H_
+
29#define ODOMETRYOPENVINS_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33namespace ov_msckf {
+
34class VioManager;
+
35struct VioManagerOptions;
+
36}
+
37
+
38namespace rtabmap {
+
39
+
+
40class RTABMAP_CORE_EXPORT OdometryOpenVINS : public Odometry
+
41{
+
42public:
+
43 OdometryOpenVINS(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
44
+
45 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
46 virtual Odometry::Type getType() {return Odometry::kTypeOpenVINS;}
+
47 virtual bool canProcessRawImages() const {return true;}
+
48 virtual bool canProcessAsyncIMU() const {return true;}
+
49
+
50private:
+
51 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
52
+
53private:
+
54#ifdef RTABMAP_OPENVINS
+
55 std::unique_ptr<ov_msckf::VioManager> vioManager_;
+
56 std::unique_ptr<ov_msckf::VioManagerOptions> params_;
+
57 bool initGravity_;
+
58 Transform previousPoseInv_;
+
59 Transform imuLocalTransformInv_;
+
60 Eigen::Matrix<double, 6, 6> Phi_;
+
61#endif
+
62};
+
+
63
+
64}
+
65
+
66#endif /* ODOMETRYOPENVINS_H_ */
+ + +
virtual bool canProcessAsyncIMU() const
+
virtual Odometry::Type getType()
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual bool canProcessRawImages() const
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryThread_8h_source.html b/preview/pr-1492/api/latest/OdometryThread_8h_source.html new file mode 100644 index 00000000..21c0ec9c --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryThread_8h_source.html @@ -0,0 +1,186 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/OdometryThread.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryThread.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYTHREAD_H_
+
29#define ODOMETRYTHREAD_H_
+
30
+
31#include <rtabmap/core/rtabmap_core_export.h>
+
32#include <rtabmap/core/SensorEvent.h>
+
33#include <rtabmap/core/SensorData.h>
+
34#include <rtabmap/utilite/UThread.h>
+
35#include <rtabmap/utilite/UEventsHandler.h>
+
36#include <list>
+
37
+
38namespace rtabmap {
+
39
+
40class Odometry;
+
41
+
+
42class RTABMAP_CORE_EXPORT OdometryThread : public UThread, public UEventsHandler {
+
43public:
+
44 // take ownership of Odometry
+
45 OdometryThread(Odometry * odometry, unsigned int dataBufferMaxSize = 1);
+
46 virtual ~OdometryThread();
+
47
+
48protected:
+
49 virtual bool handleEvent(UEvent * event);
+
50
+
51private:
+
52 virtual void mainLoopBegin();
+
53 virtual void mainLoopKill();
+
54
+
55 //============================================================
+
56 // MAIN LOOP
+
57 //============================================================
+
58 virtual void mainLoop();
+
59 void addData(const SensorEvent & data);
+
60 bool getData(SensorEvent & data);
+
61
+
62private:
+
63 USemaphore _dataAdded;
+
64 UMutex _dataMutex;
+
65 std::list<SensorEvent> _dataBuffer;
+
66 std::list<SensorData> _imuBuffer;
+
67 Odometry * _odometry;
+
68 unsigned int _dataBufferMaxSize;
+
69 bool _resetOdometry;
+
70 Transform _resetPose;
+
71 Transform _previousGuessPose;
+
72 double _oldestAsyncImuStamp;
+
73 double _newestAsyncImuStamp;
+
74};
+
+
75
+
76} // namespace rtabmap
+
77
+
78
+
79#endif /* ODOMETRYTHREAD_H_ */
+ + + + + + +
virtual bool handleEvent(UEvent *event)
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Event class for sensor data communication in RTAB-Map's event system.
Definition SensorEvent.h:65
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryVINSFusion_8h_source.html b/preview/pr-1492/api/latest/OdometryVINSFusion_8h_source.html new file mode 100644 index 00000000..5a6cc3ae --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryVINSFusion_8h_source.html @@ -0,0 +1,172 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryVINSFusion.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryVINSFusion.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYVINSFUSION_H_
+
29#define ODOMETRYVINSFUSION_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33namespace rtabmap {
+
34
+
35class VinsFusionEstimator;
+
36
+
+
37class RTABMAP_CORE_EXPORT OdometryVINSFusion : public Odometry
+
38{
+
39public:
+
40 OdometryVINSFusion(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
41 virtual ~OdometryVINSFusion();
+
42
+
43 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
44 virtual Odometry::Type getType() {return Odometry::kTypeVINSFusion;}
+
45 virtual bool canProcessRawImages() const {return true;}
+
46 virtual bool canProcessAsyncIMU() const {return true;}
+
47
+
48private:
+
49 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
50
+
51private:
+
52#ifdef RTABMAP_VINS_FUSION
+
53 VinsFusionEstimator * vinsEstimator_;
+
54 bool initGravity_;
+
55 Transform previousPose_;
+
56 Transform previousLocalTransform_;
+
57 IMU lastImu_;
+
58 double lastImuStamp_;
+
59#endif
+
60};
+
+
61
+
62}
+
63
+
64#endif /* ODOMETRYVINSFUSION_H_ */
+
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
+ + +
virtual bool canProcessAsyncIMU() const
+
virtual bool canProcessRawImages() const
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryVINS_8h_source.html b/preview/pr-1492/api/latest/OdometryVINS_8h_source.html new file mode 100644 index 00000000..ec6aff03 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryVINS_8h_source.html @@ -0,0 +1,125 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryVINS.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryVINS.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29#pragma message("Warning: OdometryVINS.h is deprecated. Please use OdometryVINSFusion.h instead.")
+
30
+
31#include "rtabmap/core/odometry/OdometryVINSFusion.h"
+
+ + + + diff --git a/preview/pr-1492/api/latest/OdometryViso2_8h_source.html b/preview/pr-1492/api/latest/OdometryViso2_8h_source.html new file mode 100644 index 00000000..d79cb324 --- /dev/null +++ b/preview/pr-1492/api/latest/OdometryViso2_8h_source.html @@ -0,0 +1,170 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry/OdometryViso2.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OdometryViso2.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRYVISO2_H_
+
29#define ODOMETRYVISO2_H_
+
30
+
31#include <rtabmap/core/Odometry.h>
+
32
+
33class VisualOdometryStereo;
+
34
+
35namespace rtabmap {
+
36
+
+
37class RTABMAP_CORE_EXPORT OdometryViso2 : public Odometry
+
38{
+
39public:
+
40 OdometryViso2(const rtabmap::ParametersMap & parameters = rtabmap::ParametersMap());
+
41 virtual ~OdometryViso2();
+
42
+
43 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
44 virtual Odometry::Type getType() {return Odometry::kTypeViso2;}
+
45
+
46private:
+
47 virtual Transform computeTransform(SensorData & image, const Transform & guess = Transform(), OdometryInfo * info = 0);
+
48
+
49private:
+
50#ifdef RTABMAP_VISO2
+
51 VisualOdometryStereo * viso2_;
+
52 int ref_frame_change_method_; // Reference frame method (defautl 0): 0=under inliers threshold, 1=min pixel motion,
+
53 int ref_frame_inlier_threshold_; // method 0. Change the reference frame if the number of inliers is low
+
54 double ref_frame_motion_threshold_; // method 1. Change the reference frame if last motion is small
+
55 bool lost_;
+
56 bool keep_reference_frame_;
+
57#endif
+
58 Transform reference_motion_;
+
59 Transform previousLocalTransform_;
+
60 ParametersMap viso2Parameters_;
+
61};
+
+
62
+
63}
+
64
+
65#endif /* ODOMETRYVISO2_H_ */
+ + +
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
virtual Odometry::Type getType()
+
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Odometry_8h_source.html b/preview/pr-1492/api/latest/Odometry_8h_source.html new file mode 100644 index 00000000..a97046d4 --- /dev/null +++ b/preview/pr-1492/api/latest/Odometry_8h_source.html @@ -0,0 +1,254 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Odometry.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Odometry.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef ODOMETRY_H_
+
29#define ODOMETRY_H_
+
30
+
31#include <rtabmap/core/rtabmap_core_export.h>
+
32
+
33#include <rtabmap/core/Transform.h>
+
34#include <rtabmap/core/SensorData.h>
+
35#include <rtabmap/core/Parameters.h>
+
36
+
37namespace rtabmap {
+
38
+
39class OdometryInfo;
+
40class ParticleFilter;
+
41
+
+
56class RTABMAP_CORE_EXPORT Odometry
+
57{
+
58public:
+
+
60 enum Type {
+
61 kTypeUndef = -1,
+
62 kTypeF2M = 0,
+
63 kTypeF2F = 1,
+
64 kTypeFovis = 2,
+
65 kTypeViso2 = 3,
+
66 kTypeDVO = 4,
+
67 kTypeORBSLAM = 5,
+
68 kTypeOkvis = 6,
+
69 kTypeLOAM = 7,
+
70 kTypeMSCKF = 8,
+
71 kTypeVINSFusion = 9,
+
72 kTypeOpenVINS = 10,
+
73 kTypeFLOAM = 11,
+
74 kTypeOpen3D = 12,
+
75 kTypeCuVSLAM = 13,
+
76 kTypeLIOSAM = 14
+
77 };
+
+
78
+
84 static Odometry * create(const ParametersMap & parameters = ParametersMap());
+
90 static Odometry * create(Type & type, const ParametersMap & parameters = ParametersMap());
+
91
+
92 virtual ~Odometry();
+ +
108 Transform process(SensorData & data, const Transform & guess, OdometryInfo * info = 0);
+
113 virtual void reset(const Transform & initialPose = Transform::getIdentity());
+
115 virtual Odometry::Type getType() = 0;
+
117 virtual bool canProcessRawImages() const {return false;}
+
119 virtual bool canProcessAsyncIMU() const {return false;}
+
120
+
122 const Transform & getPose() const {return _pose;}
+
124 bool isInfoDataFilled() const {return _fillInfoData;}
+
126 RTABMAP_DEPRECATED const Transform & previousVelocityTransform() const;
+
128 const Transform & getVelocityGuess() const {return velocityGuess_;}
+
130 double previousStamp() const {return previousStamp_;}
+
132 unsigned int framesProcessed() const {return framesProcessed_;}
+
134 bool imagesAlreadyRectified() const {return _imagesAlreadyRectified;}
+
135
+
136protected:
+
138 const std::map<double, Transform> & imus() const {return imus_;}
+
139
+
141 Odometry(const rtabmap::ParametersMap & parameters);
+
142
+
143private:
+
151 virtual Transform computeTransform(SensorData & data, const Transform & guess = Transform(), OdometryInfo * info = 0) = 0;
+
152
+
153 void initKalmanFilter(const Transform & initialPose = Transform::getIdentity(), float vx=0.0f, float vy=0.0f, float vz=0.0f, float vroll=0.0f, float vpitch=0.0f, float vyaw=0.0f);
+
154 void predictKalmanFilter(float dt, float * vx=0, float * vy=0, float * vz=0, float * vroll=0, float * vpitch=0, float * vyaw=0);
+
155 void updateKalmanFilter(float & vx, float & vy, float & vz, float & vroll, float & vpitch, float & vyaw);
+
156
+
157private:
+
158 int _resetCountdown;
+
159 bool _force3DoF;
+
160 bool _holonomic;
+
161 bool guessFromMotion_;
+
162 float guessSmoothingDelay_;
+
163 int _filteringStrategy;
+
164 int _particleSize;
+
165 float _particleNoiseT;
+
166 float _particleLambdaT;
+
167 float _particleNoiseR;
+
168 float _particleLambdaR;
+
169 bool _fillInfoData;
+
170 float _kalmanProcessNoise;
+
171 float _kalmanMeasurementNoise;
+
172 unsigned int _imageDecimation;
+
173 bool _alignWithGround;
+
174 bool _publishRAMUsage;
+
175 bool _imagesAlreadyRectified;
+
176 bool _deskewing;
+
177 Transform _pose;
+
178 int _resetCurrentCount;
+
179 double previousStamp_;
+
180 std::list<std::pair<std::vector<float>, double> > previousVelocities_;
+
181 Transform velocityGuess_;
+
182 Transform imuLastTransform_;
+
183 Transform previousGroundTruthPose_;
+
184 float distanceTravelled_;
+
185 unsigned int framesProcessed_;
+
186
+
187 std::vector<ParticleFilter *> particleFilters_;
+
188 cv::KalmanFilter kalmanFilter_;
+
189 std::vector<StereoCameraModel> stereoModels_;
+
190 std::vector<CameraModel> models_;
+
191 std::map<double, Transform> imus_;
+
192};
+
+
193
+
194} /* namespace rtabmap */
+
195#endif /* ODOMETRY_H_ */
+ +
Abstract base class for visual, lidar and visual-inertial odometry backends.
Definition Odometry.h:57
+
Transform process(SensorData &data, OdometryInfo *info=0)
Processes a sensor frame and updates the integrated pose.
+
virtual void reset(const Transform &initialPose=Transform::getIdentity())
Resets internal state and sets the initial pose.
+
static Odometry * create(Type &type, const ParametersMap &parameters=ParametersMap())
Creates an odometry instance of a given type.
+
bool isInfoDataFilled() const
Definition Odometry.h:124
+
RTABMAP_DEPRECATED const Transform & previousVelocityTransform() const
+
double previousStamp() const
Definition Odometry.h:130
+
Transform process(SensorData &data, const Transform &guess, OdometryInfo *info=0)
Processes a sensor frame with an external motion guess.
+
Type
Odometry backend selected by Parameters::kOdomStrategy().
Definition Odometry.h:60
+
virtual bool canProcessRawImages() const
Definition Odometry.h:117
+
const std::map< double, Transform > & imus() const
Definition Odometry.h:138
+
unsigned int framesProcessed() const
Definition Odometry.h:132
+
virtual bool canProcessAsyncIMU() const
Definition Odometry.h:119
+
const Transform & getPose() const
Definition Odometry.h:122
+
virtual Odometry::Type getType()=0
+
const Transform & getVelocityGuess() const
Definition Odometry.h:128
+
static Odometry * create(const ParametersMap &parameters=ParametersMap())
Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
+
bool imagesAlreadyRectified() const
Definition Odometry.h:134
+
Odometry(const rtabmap::ParametersMap &parameters)
Constructs the base odometry state from RTAB-Map parameters.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OptimizerCVSBA_8h_source.html b/preview/pr-1492/api/latest/OptimizerCVSBA_8h_source.html new file mode 100644 index 00000000..cc25319c --- /dev/null +++ b/preview/pr-1492/api/latest/OptimizerCVSBA_8h_source.html @@ -0,0 +1,165 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/optimizer/OptimizerCVSBA.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OptimizerCVSBA.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef OPTIMIZERCVSBA_H_
+
29#define OPTIMIZERCVSBA_H_
+
30
+
31#include <rtabmap/core/Optimizer.h>
+
32
+
33namespace rtabmap {
+
34
+
+
35class RTABMAP_CORE_EXPORT OptimizerCVSBA : public Optimizer
+
36{
+
37public:
+
38 static bool available();
+
39
+
40public:
+ +
42 int iterations = Parameters::defaultOptimizerIterations(),
+
43 bool slam2d = Parameters::defaultRegForce3DoF(),
+
44 bool covarianceIgnored = Parameters::defaultOptimizerVarianceIgnored()) :
+
45 Optimizer(iterations, slam2d, covarianceIgnored) {}
+
46 OptimizerCVSBA(const ParametersMap & parameters) :
+
47 Optimizer(parameters) {}
+
48 virtual ~OptimizerCVSBA() {}
+
49
+
50 virtual Type type() const {return kTypeCVSBA;}
+
51
+
52 virtual std::map<int, Transform> optimizeBA(
+
53 int rootId,
+
54 const std::map<int, Transform> & poses,
+
55 const std::multimap<int, Link> & links,
+
56 const std::map<int, std::vector<CameraModel> > & models,
+
57 std::map<int, cv::Point3f> & points3DMap,
+
58 const std::map<int, std::map<int, FeatureBA> > & wordReferences, // <ID words, IDs frames + keypoint(x,y,depth)>
+
59 std::set<int> * outliers = 0);
+
60};
+
+
61
+
62} /* namespace rtabmap */
+
63#endif /* OPTIMIZERCVSBA_H_ */
+ +
virtual std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
+
virtual Type type() const
Returns the concrete back-end identifier (one of Type).
+
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:88
+
Type
Graph-optimizer back-end identifier.
Definition Optimizer.h:91
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OptimizerCeres_8h_source.html b/preview/pr-1492/api/latest/OptimizerCeres_8h_source.html new file mode 100644 index 00000000..b9fff3e2 --- /dev/null +++ b/preview/pr-1492/api/latest/OptimizerCeres_8h_source.html @@ -0,0 +1,188 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/optimizer/OptimizerCeres.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OptimizerCeres.h
+
+
+
1/*
+
2Copyright (c) 2010-2019, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef OPTIMIZERCERES_H_
+
29#define OPTIMIZERCERES_H_
+
30
+
31#include <rtabmap/core/Optimizer.h>
+
32
+
33namespace rtabmap {
+
34
+
+
35class RTABMAP_CORE_EXPORT OptimizerCeres : public Optimizer
+
36{
+
37public:
+
38 static bool available();
+
39
+
40public:
+ +
42 int iterations = Parameters::defaultOptimizerIterations(),
+
43 bool slam2d = Parameters::defaultRegForce3DoF(),
+
44 bool covarianceIgnored = Parameters::defaultOptimizerVarianceIgnored(),
+
45 double epsilon = Parameters::defaultOptimizerEpsilon()) :
+
46 Optimizer(iterations, slam2d, covarianceIgnored, epsilon),
+
47 pixelVariance_(Parameters::defaultOptimizerPixelVariance()),
+
48 disparityVariance_(Parameters::defaultOptimizerDisparityVariance()),
+
49 robustKernelDelta_(Parameters::defaultOptimizerRobustKernelDelta()),
+
50 baseline_(Parameters::defaultOptimizerBaseline()) {}
+
51 OptimizerCeres(const ParametersMap & parameters);
+
52 virtual ~OptimizerCeres() {}
+
53
+
54 virtual Type type() const {return kTypeCeres;}
+
55
+
56 virtual void parseParameters(const ParametersMap & parameters);
+
57
+
58 virtual std::map<int, Transform> optimize(
+
59 int rootId,
+
60 const std::map<int, Transform> & poses,
+
61 const std::multimap<int, Link> & edgeConstraints,
+
62 cv::Mat & outputCovariance,
+
63 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
+
64 double * finalError = 0,
+
65 int * iterationsDone = 0);
+
66
+
67 virtual std::map<int, Transform> optimizeBA(
+
68 int rootId,
+
69 const std::map<int, Transform> & poses,
+
70 const std::multimap<int, Link> & links,
+
71 const std::map<int, std::vector<CameraModel> > & models, // in case of stereo, Tx should be set
+
72 std::map<int, cv::Point3f> & points3DMap,
+
73 const std::map<int, std::map<int, FeatureBA> > & wordReferences, // <ID words, IDs frames + keypoint(x,y,depth)>
+
74 std::set<int> * outliers = 0);
+
75
+
76private:
+
77 double pixelVariance_;
+
78 double disparityVariance_;
+
79 double robustKernelDelta_;
+
80 double baseline_;
+
81};
+
+
82
+
83} /* namespace rtabmap */
+
84#endif /* OPTIMIZERCERES_H_ */
+ +
virtual std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
+
virtual void parseParameters(const ParametersMap &parameters)
Reads shared knobs from parameters and applies them to this instance.
+
virtual std::map< int, Transform > optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization with marginal covariance of rootId.
+
virtual Type type() const
Returns the concrete back-end identifier (one of Type).
+
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:88
+
Type
Graph-optimizer back-end identifier.
Definition Optimizer.h:91
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OptimizerG2O_8h_source.html b/preview/pr-1492/api/latest/OptimizerG2O_8h_source.html new file mode 100644 index 00000000..e1c8a462 --- /dev/null +++ b/preview/pr-1492/api/latest/OptimizerG2O_8h_source.html @@ -0,0 +1,195 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/optimizer/OptimizerG2O.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OptimizerG2O.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef OPTIMIZERG2O_H_
+
29#define OPTIMIZERG2O_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/Optimizer.h>
+
34
+
35namespace rtabmap {
+
36
+
+
37class RTABMAP_CORE_EXPORT OptimizerG2O : public Optimizer
+
38{
+
39public:
+
40 static bool available();
+
41 static bool isCSparseAvailable();
+
42 static bool isCholmodAvailable();
+
43
+
44public:
+
45 static bool loadGraph(
+
46 const std::string & fileName,
+
47 std::map<int, Transform> & poses,
+
48 std::multimap<int, Link> & edgeConstraints);
+
49
+
50public:
+
51 OptimizerG2O(const ParametersMap & parameters = ParametersMap());
+
52 virtual ~OptimizerG2O() {}
+
53
+
54 virtual Type type() const {return kTypeG2O;}
+
55
+
56 virtual void parseParameters(const ParametersMap & parameters);
+
57
+
58 virtual std::map<int, Transform> optimize(
+
59 int rootId,
+
60 const std::map<int, Transform> & poses,
+
61 const std::multimap<int, Link> & edgeConstraints,
+
62 cv::Mat & outputCovariance,
+
63 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
+
64 double * finalError = 0,
+
65 int * iterationsDone = 0);
+
66
+
67 virtual std::map<int, Transform> optimizeBA(
+
68 int rootId,
+
69 const std::map<int, Transform> & poses,
+
70 const std::multimap<int, Link> & links,
+
71 const std::map<int, std::vector<CameraModel> > & models, // in case of stereo, Tx should be set
+
72 std::map<int, cv::Point3f> & points3DMap,
+
73 const std::map<int, std::map<int, FeatureBA> > & wordReferences, // <ID words, IDs frames + keypoint(x,y,depth)>
+
74 std::set<int> * outliers = 0);
+
75
+
76 bool saveGraph(
+
77 const std::string & fileName,
+
78 const std::map<int, Transform> & poses,
+
79 const std::multimap<int, Link> & edgeConstraints);
+
80
+
81private:
+
82 int solver_;
+
83 int optimizer_;
+
84 double pixelVariance_;
+
85 double disparityVariance_;
+
86 double robustKernelDelta_;
+
87 double baseline_;
+
88};
+
+
89
+
90} /* namespace rtabmap */
+
91#endif /* OPTIMIZERG2O_H_ */
+ +
virtual void parseParameters(const ParametersMap &parameters)
Reads shared knobs from parameters and applies them to this instance.
+
virtual std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
+
virtual std::map< int, Transform > optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization with marginal covariance of rootId.
+
virtual Type type() const
Returns the concrete back-end identifier (one of Type).
+
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:88
+
Type
Graph-optimizer back-end identifier.
Definition Optimizer.h:91
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OptimizerGTSAM_8h_source.html b/preview/pr-1492/api/latest/OptimizerGTSAM_8h_source.html new file mode 100644 index 00000000..db77397c --- /dev/null +++ b/preview/pr-1492/api/latest/OptimizerGTSAM_8h_source.html @@ -0,0 +1,202 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/optimizer/OptimizerGTSAM.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OptimizerGTSAM.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef OPTIMIZERGTSAM_H_
+
29#define OPTIMIZERGTSAM_H_
+
30
+
31#include <rtabmap/core/Optimizer.h>
+
32
+
33namespace gtsam {
+
34 class ISAM2;
+
35}
+
36
+
37namespace rtabmap {
+
38
+
+
39class RTABMAP_CORE_EXPORT OptimizerGTSAM : public Optimizer
+
40{
+
41public:
+
42 static bool available();
+
43
+
44public:
+
45 OptimizerGTSAM(const ParametersMap & parameters = ParametersMap());
+
46 virtual ~OptimizerGTSAM();
+
47
+
48 virtual Type type() const {return kTypeGTSAM;}
+
49
+
50 virtual void parseParameters(const ParametersMap & parameters);
+
51
+
52 virtual std::map<int, Transform> optimize(
+
53 int rootId,
+
54 const std::map<int, Transform> & poses,
+
55 const std::multimap<int, Link> & edgeConstraints,
+
56 cv::Mat & outputCovariance,
+
57 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
+
58 double * finalError = 0,
+
59 int * iterationsDone = 0);
+
60
+
61 virtual std::map<int, Transform> optimizeBA(
+
62 int rootId,
+
63 const std::map<int, Transform> & poses,
+
64 const std::multimap<int, Link> & links,
+
65 const std::map<int, std::vector<CameraModel> > & models,
+
66 std::map<int, cv::Point3f> & points3DMap,
+
67 const std::map<int, std::map<int, FeatureBA> > & wordReferences,
+
68 std::set<int> * outliers = 0);
+
69
+
70private:
+
71 int internalOptimizerType_;
+
72 double pixelVariance_;
+
73 double disparityVariance_;
+
74 double robustKernelDelta_;
+
75 double baseline_;
+
76
+
77 gtsam::ISAM2 * isam2_;
+
78 struct ConstraintToFactor {
+
79 ConstraintToFactor(int _from, int _to, std::uint64_t _factorIndice)
+
80 {
+
81 from = _from;
+
82 to = _to;
+
83 factorIndice = _factorIndice;
+
84 }
+
85 int from;
+
86 int to;
+
87 std::uint64_t factorIndice;
+
88 };
+
89
+
90 std::vector<ConstraintToFactor> lastAddedConstraints_;
+
91 int lastSwitchId_;
+
92 std::set<int> addedPoses_;
+
93 std::map<int, bool> isLandmarkWithRotation_; // persists across iSAM2 incremental calls
+
94 std::pair<int, std::uint64_t> lastRootFactorIndex_;
+
95};
+
+
96
+
97} /* namespace rtabmap */
+
98#endif /* OPTIMIZERGTSAM_H_ */
+ +
virtual Type type() const
Returns the concrete back-end identifier (one of Type).
+
virtual std::map< int, Transform > optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization with marginal covariance of rootId.
+
virtual std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
+
virtual void parseParameters(const ParametersMap &parameters)
Reads shared knobs from parameters and applies them to this instance.
+
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:88
+
Type
Graph-optimizer back-end identifier.
Definition Optimizer.h:91
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/OptimizerTORO_8h_source.html b/preview/pr-1492/api/latest/OptimizerTORO_8h_source.html new file mode 100644 index 00000000..c1276ab4 --- /dev/null +++ b/preview/pr-1492/api/latest/OptimizerTORO_8h_source.html @@ -0,0 +1,177 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/optimizer/OptimizerTORO.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OptimizerTORO.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef OPTIMIZERTORO_H_
+
29#define OPTIMIZERTORO_H_
+
30
+
31#include <rtabmap/core/Optimizer.h>
+
32
+
33namespace rtabmap {
+
34
+
+
35class RTABMAP_CORE_EXPORT OptimizerTORO : public Optimizer
+
36{
+
37public:
+
38 static bool available();
+
39
+
40public:
+
41 static bool loadGraph(
+
42 const std::string & fileName,
+
43 std::map<int, Transform> & poses,
+
44 std::multimap<int, Link> & edgeConstraints);
+
45
+
46public:
+ +
48 int iterations = Parameters::defaultOptimizerIterations(),
+
49 bool slam2d = Parameters::defaultRegForce3DoF(),
+
50 bool covarianceIgnored = Parameters::defaultOptimizerVarianceIgnored(),
+
51 double epsilon = Parameters::defaultOptimizerEpsilon()) :
+
52 Optimizer(iterations, slam2d, covarianceIgnored, epsilon) {}
+
53 OptimizerTORO(const ParametersMap & parameters) :
+
54 Optimizer(parameters) {}
+
55 virtual ~OptimizerTORO() {}
+
56
+
57 virtual Type type() const {return kTypeTORO;}
+
58
+
59 virtual std::map<int, Transform> optimize(
+
60 int rootId,
+
61 const std::map<int, Transform> & poses,
+
62 const std::multimap<int, Link> & edgeConstraints,
+
63 cv::Mat & outputCovariance,
+
64 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
+
65 double * finalError = 0,
+
66 int * iterationsDone = 0);
+
67
+
68 bool saveGraph(
+
69 const std::string & fileName,
+
70 const std::map<int, Transform> & poses,
+
71 const std::multimap<int, Link> & edgeConstraints);
+
72};
+
+
73
+
74} /* namespace rtabmap */
+
75#endif /* GRAPH_H_ */
+ +
virtual std::map< int, Transform > optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization with marginal covariance of rootId.
+
virtual Type type() const
Returns the concrete back-end identifier (one of Type).
+
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:88
+
Type
Graph-optimizer back-end identifier.
Definition Optimizer.h:91
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Optimizer_8h_source.html b/preview/pr-1492/api/latest/Optimizer_8h_source.html new file mode 100644 index 00000000..658332c5 --- /dev/null +++ b/preview/pr-1492/api/latest/Optimizer_8h_source.html @@ -0,0 +1,348 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Optimizer.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Optimizer.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef OPTIMIZER_H_
+
29#define OPTIMIZER_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <map>
+
34#include <list>
+
35#include <rtabmap/core/Link.h>
+
36#include <rtabmap/core/Parameters.h>
+
37#include <rtabmap/core/Signature.h>
+
38
+
39namespace rtabmap {
+
40
+
+ +
51{
+
52public:
+
53 FeatureBA(const cv::KeyPoint & kptIn, const float & depthIn = 0.0f, const cv::Mat & descriptorIn = cv::Mat(), int cameraIndexIn = 0):
+
54 kpt(kptIn),
+
55 depth(depthIn),
+
56 descriptor(descriptorIn),
+
57 cameraIndex(cameraIndexIn)
+
58 {
+
59 //UDEBUG("kpt=(%f,%f) depth=%f, camIndex=%d", kpt.pt.x, kpt.pt.y, depth, cameraIndex);
+
60 }
+
61 cv::KeyPoint kpt;
+
62 float depth;
+
63 cv::Mat descriptor;
+ +
65};
+
+
66
+
+
87class RTABMAP_CORE_EXPORT Optimizer
+
88{
+
89public:
+
+
91 enum Type {
+
92 kTypeUndef = -1,
+
93 kTypeTORO = 0,
+
94 kTypeG2O = 1,
+
95 kTypeGTSAM = 2,
+
96 kTypeCeres = 3,
+
97 kTypeCVSBA = 4
+
98 };
+
+
99
+
106 static bool isAvailable(Optimizer::Type type);
+
107
+
114 static Optimizer * create(const ParametersMap & parameters);
+
115
+
117 static Optimizer * create(Optimizer::Type type, const ParametersMap & parameters = ParametersMap());
+
118
+ +
128 int fromId,
+
129 const std::map<int, Transform> & posesIn,
+
130 const std::multimap<int, Link> & linksIn,
+
131 std::map<int, Transform> & posesOut,
+
132 std::multimap<int, Link> & linksOut) const;
+
133
+
134public:
+
135 virtual ~Optimizer() {}
+
136
+
138 virtual Type type() const = 0;
+
139
+
142 int iterations() const {return iterations_;}
+
+
143 bool isSlam2d() const {return slam2d_;}
+
+
144 bool isCovarianceIgnored() const {return covarianceIgnored_;}
+
+
145 double epsilon() const {return epsilon_;}
+
+
146 bool isRobust() const {return robust_;}
+
+
147 bool priorsIgnored() const {return priorsIgnored_;}
+
+
148 bool landmarksIgnored() const {return landmarksIgnored_;}
+
+
149 float gravitySigma() const {return gravitySigma_;}
+
151
+
154 void setIterations(int iterations) {iterations_ = iterations;}
+
155 void setSlam2d(bool enabled) {slam2d_ = enabled;}
+
156 void setCovarianceIgnored(bool enabled) {covarianceIgnored_ = enabled;}
+
157 void setEpsilon(double epsilon) {epsilon_ = epsilon;}
+
158 void setRobust(bool enabled) {robust_ = enabled;}
+
159 void setPriorsIgnored(bool enabled) {priorsIgnored_ = enabled;}
+
160 void setLandmarksIgnored(bool enabled) {landmarksIgnored_ = enabled;}
+
161 void setGravitySigma(float value) {gravitySigma_ = value;}
+
163
+
170 virtual void parseParameters(const ParametersMap & parameters);
+
171
+
189 std::map<int, Transform> optimizeIncremental(
+
190 int rootId,
+
191 const std::map<int, Transform> & poses,
+
192 const std::multimap<int, Link> & constraints,
+
193 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
+
194 double * finalError = 0,
+
195 int * iterationsDone = 0);
+
196
+
203 std::map<int, Transform> optimize(
+
204 int rootId,
+
205 const std::map<int, Transform> & poses,
+
206 const std::multimap<int, Link> & constraints,
+
207 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
+
208 double * finalError = 0,
+
209 int * iterationsDone = 0);
+
210
+
227 virtual std::map<int, Transform> optimize(
+
228 int rootId,
+
229 const std::map<int, Transform> & poses,
+
230 const std::multimap<int, Link> & constraints,
+
231 cv::Mat & outputCovariance,
+
232 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
+
233 double * finalError = 0,
+
234 int * iterationsDone = 0);
+
235
+
253 virtual std::map<int, Transform> optimizeBA(
+
254 int rootId,
+
255 const std::map<int, Transform> & poses,
+
256 const std::multimap<int, Link> & links,
+
257 const std::map<int, std::vector<CameraModel> > & models,
+
258 std::map<int, cv::Point3f> & points3DMap,
+
259 const std::map<int, std::map<int, FeatureBA> > & wordReferences,
+
260 std::set<int> * outliers = 0);
+
261
+
274 std::map<int, Transform> optimizeBA(
+
275 int rootId,
+
276 const std::map<int, Transform> & poses,
+
277 const std::multimap<int, Link> & links,
+
278 const std::map<int, Signature> & signatures,
+
279 std::map<int, cv::Point3f> & points3DMap,
+
280 std::map<int, std::map<int, FeatureBA> > & wordReferences,
+
281 bool rematchFeatures = false,
+
282 const ParametersMap & registrationParameters = ParametersMap());
+
283
+
286 std::map<int, Transform> optimizeBA(
+
287 int rootId,
+
288 const std::map<int, Transform> & poses,
+
289 const std::multimap<int, Link> & links,
+
290 const std::map<int, Signature> & signatures,
+
291 bool rematchFeatures = false,
+
292 const ParametersMap & registrationParameters = ParametersMap());
+
293
+ +
302 const Link & link,
+
303 const CameraModel & model,
+
304 std::map<int, cv::Point3f> & points3DMap,
+
305 const std::map<int, std::map<int, FeatureBA> > & wordReferences,
+
306 std::set<int> * outliers = 0);
+
307
+ +
324 const std::map<int, Transform> & poses,
+
325 const std::multimap<int, Link> & links,
+
326 const std::map<int, Signature> & signatures,
+
327 std::map<int, cv::Point3f> & points3DMap,
+
328 std::map<int, std::map<int, FeatureBA > > & wordReferences,
+
329 bool rematchFeatures = false,
+
330 bool useLinkTransformAsGuess = false,
+
331 ParametersMap registrationParameters = ParametersMap());
+
332
+
333protected:
+
334 Optimizer(
+
335 int iterations = Parameters::defaultOptimizerIterations(),
+
336 bool slam2d = Parameters::defaultRegForce3DoF(),
+
337 bool covarianceIgnored = Parameters::defaultOptimizerVarianceIgnored(),
+
338 double epsilon = Parameters::defaultOptimizerEpsilon(),
+
339 bool robust = Parameters::defaultOptimizerRobust(),
+
340 bool priorsIgnored = Parameters::defaultOptimizerPriorsIgnored(),
+
341 bool landmarksIgnored = Parameters::defaultOptimizerLandmarksIgnored(),
+
342 float gravitySigma = Parameters::defaultOptimizerGravitySigma());
+
343 Optimizer(const ParametersMap & parameters);
+
344
+
345private:
+
346 int iterations_;
+
347 bool slam2d_;
+
348 bool covarianceIgnored_;
+
349 double epsilon_;
+
350 bool robust_;
+
351 bool priorsIgnored_;
+
352 bool landmarksIgnored_;
+
353 float gravitySigma_;
+
354};
+
355
+
356} /* namespace rtabmap */
+
357#endif /* OPTIMIZER_H_ */
+
+
+
+
+
+
+
+
+
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+
A single bundle adjustment feature observation: one keypoint seen in one frame.
Definition Optimizer.h:51
+
cv::KeyPoint kpt
2D image keypoint.
Definition Optimizer.h:61
+
cv::Mat descriptor
Optional descriptor for the keypoint (used when re-matching is enabled).
Definition Optimizer.h:63
+
int cameraIndex
Index into the frame's camera model list for multi-camera rigs.
Definition Optimizer.h:64
+
float depth
Depth at kpt in meters, or 0 if unknown (monocular).
Definition Optimizer.h:62
+ +
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:88
+
virtual std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
+
virtual void parseParameters(const ParametersMap &parameters)
Reads shared knobs from parameters and applies them to this instance.
+
int iterations() const
Max solver iterations.
Definition Optimizer.h:142
+
Type
Graph-optimizer back-end identifier.
Definition Optimizer.h:91
+
std::map< int, Transform > optimizeIncremental(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization that grows the graph one node at a time.
+
bool isRobust() const
If true, use a robust kernel / switchable factors against bad loop closures.
Definition Optimizer.h:146
+
std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
BA wrapper that derives camera models and correspondences from signatures.
+
bool landmarksIgnored() const
If true, landmark/marker observations are dropped.
Definition Optimizer.h:148
+
double epsilon() const
Convergence threshold on cost decrease.
Definition Optimizer.h:145
+
void getConnectedGraph(int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) const
Extracts the connected component reachable from fromId.
+
bool isSlam2d() const
True if optimizing in SE(2) instead of SE(3).
Definition Optimizer.h:143
+
static Optimizer * create(const ParametersMap &parameters)
Factory: build an optimizer from a ParametersMap.
+
std::map< int, Transform > optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization (single shot).
+
bool isCovarianceIgnored() const
If true, all edges share an identity information matrix.
Definition Optimizer.h:144
+
void computeBACorrespondences(const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())
Build BA correspondences (3D points + per-frame observations) from signatures.
+
virtual Type type() const =0
Returns the concrete back-end identifier (one of Type).
+
std::map< int, Transform > optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
BA convenience wrapper: like the overload above but ignores the refined 3D points and observation map...
+
float gravitySigma() const
Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it.
Definition Optimizer.h:149
+
Transform optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
Refine a single two-frame link via BA.
+
bool priorsIgnored() const
If true, unary priors on poses are dropped.
Definition Optimizer.h:147
+
static Optimizer * create(Optimizer::Type type, const ParametersMap &parameters=ParametersMap())
Factory: build an optimizer of a specific type. Caller owns the result.
+
virtual std::map< int, Transform > optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
Pose-graph optimization with marginal covariance of rootId.
+
static bool isAvailable(Optimizer::Type type)
Returns whether type was compiled in (its third-party dependency was found).
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/PDALWriter_8h_source.html b/preview/pr-1492/api/latest/PDALWriter_8h_source.html new file mode 100644 index 00000000..e412c1f9 --- /dev/null +++ b/preview/pr-1492/api/latest/PDALWriter_8h_source.html @@ -0,0 +1,142 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/PDALWriter.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PDALWriter.h
+
+
+
1/*
+
2Copyright (c) 2010-2021, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_PDALWRITER_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_PDALWRITER_H_
+
30
+
31#include <pcl/point_cloud.h>
+
32#include <pcl/point_types.h>
+
33
+
34namespace rtabmap {
+
35
+
36std::string getPDALSupportedWriters();
+
37
+
38int savePDALFile(const std::string & filePath, const pcl::PointCloud<pcl::PointXYZ> & cloud, const std::vector<int> & cameraIds = std::vector<int>(), bool binary = false);
+
39int savePDALFile(const std::string & filePath, const pcl::PointCloud<pcl::PointXYZRGB> & cloud, const std::vector<int> & cameraIds = std::vector<int>(), bool binary = false, const std::vector<float> & intensities = std::vector<float>());
+
40int savePDALFile(const std::string & filePath, const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud, const std::vector<int> & cameraIds = std::vector<int>(), bool binary = false, const std::vector<float> & intensities = std::vector<float>());
+
41int savePDALFile(const std::string & filePath, const pcl::PointCloud<pcl::PointXYZI> & cloud, const std::vector<int> & cameraIds = std::vector<int>(), bool binary = false);
+
42int savePDALFile(const std::string & filePath, const pcl::PointCloud<pcl::PointXYZINormal> & cloud, const std::vector<int> & cameraIds = std::vector<int>(), bool binary = false);
+
43
+
44}
+
45
+
46
+
47#endif /* CORELIB_INCLUDE_RTABMAP_CORE_PDALWRITER_H_ */
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/ParamEvent_8h_source.html b/preview/pr-1492/api/latest/ParamEvent_8h_source.html new file mode 100644 index 00000000..438238f1 --- /dev/null +++ b/preview/pr-1492/api/latest/ParamEvent_8h_source.html @@ -0,0 +1,157 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/ParamEvent.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ParamEvent.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef PARAMEVENT_H_
+
29#define PARAMEVENT_H_
+
30
+
31#include "rtabmap/core/Parameters.h"
+
32#include <rtabmap/utilite/UEvent.h>
+
33
+
34namespace rtabmap
+
35{
+
36
+
+
41class ParamEvent : public UEvent
+
42{
+
43public:
+
44 ParamEvent(const ParametersMap & parameters) : UEvent(0), parameters_(parameters) {}
+
45 ParamEvent(const std::string & parameterKey, const std::string & parameterValue) : UEvent(0)
+
46 {
+
47 parameters_.insert(std::pair<std::string, std::string>(parameterKey, parameterValue));
+
48 }
+
49 ~ParamEvent() {}
+
50 virtual std::string getClassName() const {return "ParamEvent";}
+
51
+
52 const ParametersMap & getParameters() const {return parameters_;}
+
53
+
54private:
+
55 ParametersMap parameters_;
+
56};
+
+
57
+
58}
+
59
+
60#endif /* PARAMEVENT_H_ */
+
61
+ + +
virtual std::string getClassName() const
Definition ParamEvent.h:50
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Parameters_8h_source.html b/preview/pr-1492/api/latest/Parameters_8h_source.html new file mode 100644 index 00000000..e146907c --- /dev/null +++ b/preview/pr-1492/api/latest/Parameters_8h_source.html @@ -0,0 +1,1072 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Parameters.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Parameters.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef PARAMETERS_H_
+
29#define PARAMETERS_H_
+
30
+
31// default parameters
+
32#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
33#include "rtabmap/core/Version.h" // DLL export/import defines
+ +
35#include <opencv2/core/version.hpp>
+
36#include <opencv2/opencv_modules.hpp>
+
37#include <string>
+
38#include <map>
+
39
+
40namespace rtabmap
+
41{
+
42
+
43typedef std::map<std::string, std::string> ParametersMap; // Key, value
+
44typedef std::pair<std::string, std::string> ParametersPair;
+
45
+
64#define RTABMAP_PARAM(PREFIX, NAME, TYPE, DEFAULT_VALUE, DESCRIPTION) \
+
65 public: \
+
66 static std::string k##PREFIX##NAME() {return std::string(#PREFIX "/" #NAME);} \
+
67 static TYPE default##PREFIX##NAME() {return (TYPE)DEFAULT_VALUE;} \
+
68 static std::string type##PREFIX##NAME() {return std::string(#TYPE);} \
+
69 private: \
+
70 class Dummy##PREFIX##NAME { \
+
71 public: \
+
72 Dummy##PREFIX##NAME() {parameters_.insert(ParametersPair(#PREFIX "/" #NAME, #DEFAULT_VALUE)); \
+
73 parametersType_.insert(ParametersPair(#PREFIX "/" #NAME, #TYPE)); \
+
74 descriptions_.insert(ParametersPair(#PREFIX "/" #NAME, DESCRIPTION));} \
+
75 }; \
+
76 Dummy##PREFIX##NAME dummy##PREFIX##NAME
+
77// end define PARAM
+
78
+
98#define RTABMAP_PARAM_STR(PREFIX, NAME, DEFAULT_VALUE, DESCRIPTION) \
+
99 public: \
+
100 static std::string k##PREFIX##NAME() {return std::string(#PREFIX "/" #NAME);} \
+
101 static std::string default##PREFIX##NAME() {return DEFAULT_VALUE;} \
+
102 static std::string type##PREFIX##NAME() {return std::string("string");} \
+
103 private: \
+
104 class Dummy##PREFIX##NAME { \
+
105 public: \
+
106 Dummy##PREFIX##NAME() {parameters_.insert(ParametersPair(#PREFIX "/" #NAME, DEFAULT_VALUE)); \
+
107 parametersType_.insert(ParametersPair(#PREFIX "/" #NAME, "string")); \
+
108 descriptions_.insert(ParametersPair(#PREFIX "/" #NAME, DESCRIPTION));} \
+
109 }; \
+
110 Dummy##PREFIX##NAME dummy##PREFIX##NAME
+
111// end define PARAM
+
112
+
131#define RTABMAP_PARAM_COND(PREFIX, NAME, TYPE, COND, DEFAULT_VALUE1, DEFAULT_VALUE2, DESCRIPTION) \
+
132 public: \
+
133 static std::string k##PREFIX##NAME() {return std::string(#PREFIX "/" #NAME);} \
+
134 static TYPE default##PREFIX##NAME() {return COND?DEFAULT_VALUE1:DEFAULT_VALUE2;} \
+
135 static std::string type##PREFIX##NAME() {return std::string(#TYPE);} \
+
136 private: \
+
137 class Dummy##PREFIX##NAME { \
+
138 public: \
+
139 Dummy##PREFIX##NAME() {parameters_.insert(ParametersPair(#PREFIX "/" #NAME, COND?#DEFAULT_VALUE1:#DEFAULT_VALUE2)); \
+
140 parametersType_.insert(ParametersPair(#PREFIX "/" #NAME, #TYPE)); \
+
141 descriptions_.insert(ParametersPair(#PREFIX "/" #NAME, DESCRIPTION));} \
+
142 }; \
+
143 Dummy##PREFIX##NAME dummy##PREFIX##NAME
+
144// end define PARAM
+
145
+
+
170class RTABMAP_CORE_EXPORT Parameters
+
171{
+
172 // Rtabmap parameters
+
173 RTABMAP_PARAM(Rtabmap, PublishStats, bool, true, "Publishing statistics.");
+
174 RTABMAP_PARAM(Rtabmap, PublishLastSignature, bool, true, "Publishing last signature.");
+
175 RTABMAP_PARAM(Rtabmap, PublishPdf, bool, true, "Publishing pdf.");
+
176 RTABMAP_PARAM(Rtabmap, PublishLikelihood, bool, true, "Publishing likelihood.");
+
177 RTABMAP_PARAM(Rtabmap, PublishRAMUsage, bool, false, "Publishing RAM usage in statistics (may add a small overhead to get info from the system).");
+
178 RTABMAP_PARAM(Rtabmap, ComputeRMSE, bool, true, "Compute root mean square error (RMSE) and publish it in statistics, if ground truth is provided.");
+
179 RTABMAP_PARAM(Rtabmap, SaveWMState, bool, false, "Save working memory state after each update in statistics.");
+
180 RTABMAP_PARAM(Rtabmap, TimeThr, float, 0, "Maximum time allowed for map update (ms) (0 means infinity). When map update time exceeds this fixed time threshold, some nodes in Working Memory (WM) are transferred to Long-Term Memory to limit the size of the WM and decrease the update time.");
+
181 RTABMAP_PARAM(Rtabmap, MemoryThr, int, 0, uFormat("Maximum nodes in the Working Memory (0 means infinity). Similar to \"%s\", when the number of nodes in Working Memory (WM) exceeds this treshold, some nodes are transferred to Long-Term Memory to keep WM size fixed.", kRtabmapTimeThr().c_str()));
+
182 RTABMAP_PARAM(Rtabmap, DetectionRate, float, 1, "Detection rate (Hz). RTAB-Map will filter input images to satisfy this rate.");
+
183 RTABMAP_PARAM(Rtabmap, ImageBufferSize, unsigned int, 1, "Data buffer size (0 min inf).");
+
184 RTABMAP_PARAM(Rtabmap, CreateIntermediateNodes, bool, false, uFormat("Create intermediate nodes between loop closure detection. Only used when %s>0.", kRtabmapDetectionRate().c_str()));
+
185 RTABMAP_PARAM_STR(Rtabmap, WorkingDirectory, "", "Working directory.");
+
186 RTABMAP_PARAM(Rtabmap, MaxRetrieved, unsigned int, 2, "Maximum nodes retrieved at the same time from LTM.");
+
187 RTABMAP_PARAM(Rtabmap, MaxRepublished, unsigned int, 2, uFormat("Maximum nodes republished when requesting missing data. When %s=false, only loop closure data is republished, otherwise the closest nodes from the current localization are republished first. Ignored if %s=false.", kRGBDEnabled().c_str(), kRtabmapPublishLastSignature().c_str()));
+
188 RTABMAP_PARAM(Rtabmap, StatisticLogsBufferedInRAM, bool, true, "Statistic logs buffered in RAM instead of written to hard drive after each iteration.");
+
189 RTABMAP_PARAM(Rtabmap, StatisticLogged, bool, false, "Logging enabled.");
+
190 RTABMAP_PARAM(Rtabmap, StatisticLoggedHeaders, bool, true, "Add column header description to log files.");
+
191 RTABMAP_PARAM(Rtabmap, StartNewMapOnLoopClosure, bool, false, "Start a new map only if there is a global loop closure with a previous map.");
+
192 RTABMAP_PARAM(Rtabmap, StartNewMapOnGoodSignature, bool, false, uFormat("Start a new map only if the first signature is not bad (i.e., has enough features, see %s).", kKpBadSignRatio().c_str()));
+
193 RTABMAP_PARAM(Rtabmap, ImagesAlreadyRectified, bool, true, "Images are already rectified. By default RTAB-Map assumes that received images are rectified. If they are not, they can be rectified by RTAB-Map if this parameter is false.");
+
194 RTABMAP_PARAM(Rtabmap, RectifyOnlyFeatures, bool, false, uFormat("If \"%s\" is false and this parameter is true, the whole RGB image will not be rectified, only the features. Warning: As projection of RGB-D image to point cloud is assuming that images are rectified, the generated point cloud map will have wrong colors if this parameter is true.", kRtabmapImagesAlreadyRectified().c_str()));
+
195
+
196 // Hypotheses selection
+
197 RTABMAP_PARAM(Rtabmap, LoopThr, float, 0.11, "Loop closing threshold.");
+
198 RTABMAP_PARAM(Rtabmap, LoopRatio, float, 0, "The loop closure hypothesis must be over LoopRatio x lastHypothesisValue.");
+
199 RTABMAP_PARAM(Rtabmap, LoopGPS, bool, true, uFormat("Use GPS to filter likelihood (if GPS is recorded). Only locations inside the local radius \"%s\" of the current GPS location are considered for loop closure detection.", kRGBDLocalRadius().c_str()));
+
200 RTABMAP_PARAM(Rtabmap, VirtualPlaceLikelihoodRatio, int, 0, "Likelihood ratio for virtual place (for no loop closure hypothesis): 0=Mean / StdDev, 1=StdDev / (Max-Mean)");
+
201
+
202 // Memory
+
203 RTABMAP_PARAM(Mem, RehearsalSimilarity, float, 0.6, "Rehearsal similarity.");
+
204 RTABMAP_PARAM(Mem, ImageKept, bool, false, "Keep raw images in RAM.");
+
205 RTABMAP_PARAM(Mem, BinDataKept, bool, true, "Keep binary data in db.");
+
206 RTABMAP_PARAM(Mem, RawDescriptorsKept, bool, true, "Raw descriptors kept in memory.");
+
207 RTABMAP_PARAM(Mem, LoadVisualLocalFeaturesOnInit, bool, true, "Load all local visual features (keypoints, descriptors and 3D points) in RAM when loading an existing database. This can add significant time to initialize the memory but the features will be already loaded before computing loop closure transforms. If false, the features are loaded on-demand from the database when a loop closure transformation should be estimated.");
+
208 RTABMAP_PARAM(Mem, MapLabelsAdded, bool, true, "Create map labels. The first node of a map will be labeled as \"map#\" where # is the map ID.");
+
209 RTABMAP_PARAM(Mem, SaveDepth16Format, bool, false, "Save depth image into 16 bits format to reduce memory used. Warning: values over ~65 meters are ignored (maximum 65535 millimeters).");
+
210 RTABMAP_PARAM(Mem, NotLinkedNodesKept, bool, true, "Keep not linked nodes in db (rehearsed nodes and deleted nodes).");
+
211 RTABMAP_PARAM(Mem, IntermediateNodeDataKept, bool, false, "Keep intermediate node data in db.");
+
212 RTABMAP_PARAM_STR(Mem, ImageCompressionFormat, ".jpg", "RGB image compression format. It should be \".jpg\" or \".png\".");
+
213 RTABMAP_PARAM_STR(Mem, DepthCompressionFormat, ".rvl", "Depth image compression format for 16UC1 depth type. It should be \".png\" or \".rvl\". If depth type is 32FC1, \".png\" is used.");
+
214 RTABMAP_PARAM(Mem, STMSize, unsigned int, 10, "Short-term memory size.");
+
215 RTABMAP_PARAM(Mem, IncrementalMemory, bool, true, "SLAM mode, otherwise it is Localization mode.");
+
216 RTABMAP_PARAM(Mem, LocalizationReadOnly, bool, false, uFormat("In localization mode, open the database in read-only mode (ignored if %s=true). Currrenty incompatible with memory management (%s and %s cannot be used) and if there are disjoint sessions in working memory. Last localization pose won't be saved back in the database at the end of the session, so the robot will always restart to original last localization pose, unless %s is used or an external initial pose is provided on initialization.", kMemIncrementalMemory().c_str(), kRtabmapLoopThr().c_str(), kRtabmapMemoryThr().c_str(), kRGBDStartAtOrigin().c_str()).c_str());
+
217 RTABMAP_PARAM(Mem, LocalizationDataSaved, bool, false, uFormat("Save localization data during localization session (when %s=false). When enabled, the database will then also grow in localization mode. This mode would be used only for debugging purpose.", kMemIncrementalMemory().c_str()).c_str());
+
218 RTABMAP_PARAM(Mem, ReduceGraph, bool, false, uFormat("Reduce graph. Merge nodes when loop closures are added (ignoring those with user data). Note that this approach assumes that 100%% of the loop closures accepted are good, so it is highly recommended to enable \"%s\" at the same time.", kRGBDOptimizeMaxError().c_str()));
+
219 RTABMAP_PARAM(Mem, RecentWmRatio, float, 0.2, "Ratio of locations after the last loop closure in WM that cannot be transferred.");
+
220 RTABMAP_PARAM(Mem, TransferSortingByWeightId, bool, false, "On transfer, signatures are sorted by weight->ID only (i.e. the oldest of the lowest weighted signatures are transferred first). If false, the signatures are sorted by weight->Age->ID (i.e. the oldest inserted in WM of the lowest weighted signatures are transferred first). Note that retrieval updates the age, not the ID.");
+
221 RTABMAP_PARAM(Mem, RehearsalIdUpdatedToNewOne, bool, false, uFormat("On merge, update to new id. When false, no copy. Keep this disable if %s=true.", kRtabmapCreateIntermediateNodes().c_str()));
+
222 RTABMAP_PARAM(Mem, RehearsalWeightIgnoredWhileMoving, bool, false, "When the robot is moving, weights are not updated on rehearsal.");
+
223 RTABMAP_PARAM(Mem, GenerateIds, bool, true, "True=Generate location IDs, False=use input image IDs.");
+
224 RTABMAP_PARAM(Mem, BadSignaturesIgnored, bool, false, "Bad signatures are ignored.");
+
225 RTABMAP_PARAM(Mem, InitWMWithAllNodes, bool, false, "Initialize the Working Memory with all nodes in Long-Term Memory. When false, it is initialized with nodes of the previous session.");
+
226 RTABMAP_PARAM(Mem, DepthAsMask, bool, true, "Use depth image as mask when extracting features for vocabulary.");
+
227 RTABMAP_PARAM(Mem, DepthMaskFloorThr, float, 0.0, uFormat("Filter floor from depth mask below specified threshold (m) before extracting features. 0 means disabled. Ignored if %s is false.", kMemDepthAsMask().c_str()));
+
228 RTABMAP_PARAM(Mem, StereoFromMotion, bool, false, uFormat("Triangulate features without depth using stereo from motion (odometry). It would be ignored if %s is true and the feature detector used supports masking.", kMemDepthAsMask().c_str()));
+
229 RTABMAP_PARAM(Mem, ImagePreDecimation, unsigned int, 1, uFormat("Decimation of the RGB image before visual feature detection. If depth size is larger than decimated RGB size, depth is decimated to be always at most equal to RGB size. If %s is true and if depth is smaller than decimated RGB, depth may be interpolated to match RGB size for feature detection.",kMemDepthAsMask().c_str()));
+
230 RTABMAP_PARAM(Mem, ImagePostDecimation, unsigned int, 1, uFormat("Decimation of the RGB image before saving it to database. If depth size is larger than decimated RGB size, depth is decimated to be always at most equal to RGB size. Decimation is done from the original image. If set to same value than %s, data already decimated is saved (no need to re-decimate the image).", kMemImagePreDecimation().c_str()));
+
231 RTABMAP_PARAM(Mem, CompressionParallelized, bool, true, "Compression of sensor data is multi-threaded.");
+
232 RTABMAP_PARAM(Mem, LaserScanDownsampleStepSize, int, 1, "If > 1, downsample the laser scans when creating a signature.");
+
233 RTABMAP_PARAM(Mem, LaserScanVoxelSize, float, 0.0, uFormat("If > 0 m, voxel filtering is done on laser scans when creating a signature. If the laser scan had normals, they will be removed. To recompute the normals, make sure to use \"%s\" or \"%s\" parameters.", kMemLaserScanNormalK().c_str(), kMemLaserScanNormalRadius().c_str()));
+
234 RTABMAP_PARAM(Mem, LaserScanNormalK, int, 0, "If > 0 and laser scans don't have normals, normals will be computed with K search neighbors when creating a signature.");
+
235 RTABMAP_PARAM(Mem, LaserScanNormalRadius, float, 0.0, "If > 0 m and laser scans don't have normals, normals will be computed with radius search neighbors when creating a signature.");
+
236 RTABMAP_PARAM(Mem, UseOdomFeatures, bool, true, "Use odometry features instead of regenerating them.");
+
237 RTABMAP_PARAM(Mem, UseOdomGravity, bool, false, uFormat("Use odometry instead of IMU orientation to add gravity links to new nodes created. We assume that odometry is already aligned with gravity (e.g., we are using a VIO approach). Gravity constraints are used by graph optimization only if \"%s\" is not zero.", kOptimizerGravitySigma().c_str()));
+
238 RTABMAP_PARAM(Mem, CovOffDiagIgnored, bool, true, "Ignore off diagonal values of the covariance matrix.");
+
239 RTABMAP_PARAM(Mem, GlobalDescriptorStrategy, int, 0, "Extract global descriptor from sensor data. 0=disabled, 1=PyDescriptor");
+
240 RTABMAP_PARAM(Mem, RotateImagesUpsideUp, bool, false, "Rotate images so that upside is up if they are not already. This can be useful in case the robots don't have all same camera orientation but are using the same map, so that not rotation-invariant visual features can still be used across the fleet.");
+
241
+
242 // KeypointMemory (Keypoint-based)
+
243 RTABMAP_PARAM(Kp, NNStrategy, int, 1, "kNNFlannNaive=0, kNNFlannKdTree=1, kNNFlannLSH=2, kNNBruteForce=3, kNNBruteForceGPU=4");
+
244 RTABMAP_PARAM(Kp, IncrementalDictionary, bool, true, "");
+
245 RTABMAP_PARAM(Kp, IncrementalFlann, bool, true, uFormat("When using FLANN based strategy, add/remove points to its index without always rebuilding the index (the index is built only when the dictionary increases of the factor \"%s\" in size).", kKpFlannRebalancingFactor().c_str()));
+
246 RTABMAP_PARAM(Kp, FlannRebalancingFactor, float, 2.0, uFormat("Factor used when rebuilding the incremental FLANN index (see \"%s\"). Set <=1 to disable.", kKpIncrementalFlann().c_str()));
+
247 RTABMAP_PARAM(Kp, ByteToFloat, bool, false, uFormat("For %s=1, binary descriptors are converted to float by converting each byte to float instead of converting each bit to float. When converting bytes instead of bits, less memory is used and search is faster at the cost of slightly less accurate matching.", kKpNNStrategy().c_str()));
+
248 RTABMAP_PARAM(Kp, MaxDepth, float, 0, "Filter extracted keypoints by depth (0=inf).");
+
249 RTABMAP_PARAM(Kp, MinDepth, float, 0, "Filter extracted keypoints by depth.");
+
250 RTABMAP_PARAM(Kp, MaxFeatures, int, 500, "Maximum features extracted from the images (0 means not bounded, <0 means no extraction).");
+
251 RTABMAP_PARAM(Kp, SSC, bool, false, "If true, SSC (Suppression via Square Covering) is applied to limit keypoints.");
+
252 RTABMAP_PARAM(Kp, BadSignRatio, float, 0.5, uFormat("Bad signature ratio. If %s=0, the ratio is computed from the average number of words per signature (less than Ratio x AverageWordsPerImage = bad).", kKpMaxFeatures().c_str()));
+
253 RTABMAP_PARAM(Kp, NndrRatio, float, 0.8, "NNDR ratio (A matching pair is detected, if its distance is closer than X times the distance of the second nearest neighbor.)");
+
254#if CV_MAJOR_VERSION > 2 && !defined(HAVE_OPENCV_XFEATURES2D)
+
255 // OpenCV>2 without xFeatures2D module doesn't have BRIEF
+
256 RTABMAP_PARAM(Kp, DetectorStrategy, int, 8, "0=SURF 1=SIFT 2=ORB 3=FAST/FREAK 4=FAST/BRIEF 5=GFTT/FREAK 6=GFTT/BRIEF 7=BRISK 8=GFTT/ORB 9=KAZE 10=ORB-OCTREE 11=SuperPoint 12=SURF/FREAK 13=GFTT/DAISY 14=SURF/DAISY 15=PyDetector 16=SuperPoint-Rpautrat");
+
257#else
+
258 RTABMAP_PARAM(Kp, DetectorStrategy, int, 6, "0=SURF 1=SIFT 2=ORB 3=FAST/FREAK 4=FAST/BRIEF 5=GFTT/FREAK 6=GFTT/BRIEF 7=BRISK 8=GFTT/ORB 9=KAZE 10=ORB-OCTREE 11=SuperPoint 12=SURF/FREAK 13=GFTT/DAISY 14=SURF/DAISY 15=PyDetector 16=SuperPoint-Rpautrat");
+
259#endif
+
260 RTABMAP_PARAM(Kp, TfIdfLikelihoodUsed, bool, true, "Use of the td-idf strategy to compute the likelihood.");
+
261 RTABMAP_PARAM(Kp, Parallelized, bool, true, "If the dictionary update and signature creation were parallelized.");
+
262 RTABMAP_PARAM_STR(Kp, RoiRatios, "0.0 0.0 0.0 0.0", "Region of interest ratios [left, right, top, bottom].");
+
263 RTABMAP_PARAM_STR(Kp, DictionaryPath, "", "Path of the pre-computed dictionary");
+
264 RTABMAP_PARAM(Kp, NewWordsComparedTogether, bool, true, "When adding new words to dictionary, they are compared also with each other (to detect same words in the same signature).");
+
265 RTABMAP_PARAM(Kp, FlannIndexSaved, bool, false, uFormat("Save FLANN index during localization session (when %s=false). The FLANN index will be saved to database after the first time localization mode is used, then on next sessions, the index is reloaded from the database instead of being rebuilt again. This can save significant loading time when the visual word dictionary is big (>1M words). Note that if the dictionary is modified (parameters or data), the index will be rebuilt and saved again on the next session. Ignored on initialization if %s is enabled.", kMemIncrementalMemory().c_str(), kMemInitWMWithAllNodes().c_str()).c_str());
+
266 RTABMAP_PARAM(Kp, SerializeWithChecksum, bool, true, "On serialization of the FLANN index, compute checksum of the data used by the FLANN index. This adds a slight overhead on serialization/deserialization to make sure that the dictionary data correspond to same data used when the index was built.");
+
267 RTABMAP_PARAM(Kp, SubPixWinSize, int, 3, "See cv::cornerSubPix().");
+
268 RTABMAP_PARAM(Kp, SubPixIterations, int, 0, "See cv::cornerSubPix(). 0 disables sub pixel refining.");
+
269 RTABMAP_PARAM(Kp, SubPixEps, double, 0.02, "See cv::cornerSubPix().");
+
270 RTABMAP_PARAM(Kp, GridRows, int, 1, uFormat("Number of rows of the grid used to extract uniformly \"%s / grid cells\" features from each cell.", kKpMaxFeatures().c_str()));
+
271 RTABMAP_PARAM(Kp, GridCols, int, 1, uFormat("Number of columns of the grid used to extract uniformly \"%s / grid cells\" features from each cell.", kKpMaxFeatures().c_str()));
+
272
+
273 //Database
+
274 RTABMAP_PARAM(DbSqlite3, InMemory, bool, false, "Using database in the memory instead of a file on the hard disk.");
+
275 RTABMAP_PARAM(DbSqlite3, CacheSize, unsigned int, 10000,
+
276 "PRAGMA cache_size: number of database pages kept in SQLite's page cache (approx. cacheSize * page_size bytes, often ~4 KiB per page). "
+
277 "Larger values reduce disk I/O when the working set fits in RAM. SQLite built-in default is typically 2000 pages.");
+
278 RTABMAP_PARAM(DbSqlite3, JournalMode, int, 3,
+
279 "PRAGMA journal_mode: rollback journal storage. See sqlite.org/pragma.html#pragma_journal_mode for more details. "
+
280 "0=DELETE (SQLite default): journal file deleted after each commit. "
+
281 "1=TRUNCATE: journal truncated to zero length. "
+
282 "2=PERSIST: journal file kept, header zeroed after commit. "
+
283 "3=MEMORY: journal in RAM only; faster, weaker crash safety. "
+
284 "4=OFF: no journal; fastest, risk of corruption on crash.");
+
285 RTABMAP_PARAM(DbSqlite3, Synchronous, int, 0,
+
286 "PRAGMA synchronous: how aggressively SQLite syncs the database to disk. See sqlite.org/pragma.html#pragma_synchronous for more details. "
+
287 "0=OFF: no wait for persistent storage; fastest, corruption possible on power loss. "
+
288 "1=NORMAL: sync at critical moments (common SQLite default with WAL). "
+
289 "2=FULL (SQLite safest default): sync after every commit; slowest.");
+
290 RTABMAP_PARAM(DbSqlite3, TempStore, int, 2,
+
291 "PRAGMA temp_store: where SQLite stores temporary tables and indices. See sqlite.org/pragma.html#pragma_temp_store for more details. "
+
292 "0=DEFAULT: SQLite compile-time default (often on-disk temp files). "
+
293 "1=FILE: temporary files in the system temp directory. "
+
294 "2=MEMORY: temporary data in RAM when possible.");
+
295 RTABMAP_PARAM_STR(Db, TargetVersion, "", "Target database version for backward compatibility purpose. Only Major and minor versions are used and should be set (e.g., 0.19 vs 0.20 or 1.0 vs 2.0). Patch version is ignored (e.g., 0.20.1 and 0.20.3 will generate a 0.20 database).");
+
296
+
297 // Keypoints descriptors/detectors
+
298 RTABMAP_PARAM(SURF, Extended, bool, false, "Extended descriptor flag (true - use extended 128-element descriptors; false - use 64-element descriptors).");
+
299 RTABMAP_PARAM(SURF, HessianThreshold, float, 500, "Threshold for hessian keypoint detector used in SURF.");
+
300 RTABMAP_PARAM(SURF, Octaves, int, 4, "Number of pyramid octaves the keypoint detector will use.");
+
301 RTABMAP_PARAM(SURF, OctaveLayers, int, 2, "Number of octave layers within each octave.");
+
302 RTABMAP_PARAM(SURF, Upright, bool, false, "Up-right or rotated features flag (true - do not compute orientation of features; false - compute orientation).");
+
303 RTABMAP_PARAM(SURF, GpuVersion, bool, false, "GPU-SURF: Use GPU version of SURF. This option is enabled only if OpenCV is built with CUDA and GPUs are detected.");
+
304 RTABMAP_PARAM(SURF, GpuKeypointsRatio, float, 0.01, "Used with SURF GPU.");
+
305
+
306 RTABMAP_PARAM(SIFT, NOctaveLayers, int, 3, "The number of layers in each octave. 3 is the value used in D. Lowe paper. The number of octaves is computed automatically from the image resolution. Not used by CudaSift, the number of octaves is still computed automatically.");
+
307 RTABMAP_PARAM(SIFT, ContrastThreshold, double, 0.04, uFormat("The contrast threshold used to filter out weak features in semi-uniform (low-contrast) regions. The larger the threshold, the less features are produced by the detector. Not used by CudaSift (see %s instead).", kSIFTGaussianThreshold().c_str()));
+
308 RTABMAP_PARAM(SIFT, EdgeThreshold, double, 10, "The threshold used to filter out edge-like features. Note that the its meaning is different from the contrastThreshold, i.e. the larger the edgeThreshold, the less features are filtered out (more features are retained).");
+
309 RTABMAP_PARAM(SIFT, Sigma, double, 1.6, "The sigma of the Gaussian applied to the input image at the octave #0. If your image is captured with a weak camera with soft lenses, you might want to reduce the number.");
+
310 RTABMAP_PARAM(SIFT, PreciseUpscale, bool, false, "Whether to enable precise upscaling in the scale pyramid (OpenCV >= 4.8).");
+
311 RTABMAP_PARAM(SIFT, RootSIFT, bool, false, "Apply RootSIFT normalization of the descriptors.");
+
312 RTABMAP_PARAM(SIFT, Gpu, bool, false, "CudaSift: Use GPU version of SIFT. This option is enabled only if RTAB-Map is built with CudaSift dependency and GPUs are detected.");
+
313 RTABMAP_PARAM(SIFT, GaussianThreshold, float, 2.0, "CudaSift: Threshold on difference of Gaussians for feature pruning. The higher the threshold, the less features with low response/hessian are produced by the detector.");
+
314 RTABMAP_PARAM(SIFT, MaxGaussianThreshold, float, 0.0, uFormat("CudaSift: Maximum threshold on difference of Gaussians for feature pruning (ignored if smaller or equal than %s). The lower the threshold, the less features with high response/hessian are produced by the detector.", kSIFTGaussianThreshold().c_str()));
+
315 RTABMAP_PARAM(SIFT, Upscale, bool, false, "CudaSift: Whether to enable upscaling.");
+
316
+
317 RTABMAP_PARAM(BRIEF, Bytes, int, 32, "Bytes is a length of descriptor in bytes. It can be equal 16, 32 or 64 bytes.");
+
318
+
319 RTABMAP_PARAM(FAST, Threshold, int, 20, "Threshold on difference between intensity of the central pixel and pixels of a circle around this pixel.");
+
320 RTABMAP_PARAM(FAST, NonmaxSuppression, bool, true, "If true, non-maximum suppression is applied to detected corners (keypoints).");
+
321 RTABMAP_PARAM(FAST, Gpu, bool, false, "GPU-FAST: Use GPU version of FAST. This option is enabled only if OpenCV is built with CUDA and GPUs are detected.");
+
322 RTABMAP_PARAM(FAST, GpuKeypointsRatio, double, 0.05, "Used with FAST GPU.");
+
323 RTABMAP_PARAM(FAST, MinThreshold, int, 7, "Minimum threshold. Used only when FAST/GridRows and FAST/GridCols are set.");
+
324 RTABMAP_PARAM(FAST, MaxThreshold, int, 200, "Maximum threshold. Used only when FAST/GridRows and FAST/GridCols are set.");
+
325 RTABMAP_PARAM(FAST, GridRows, int, 0, "Grid rows (0 to disable). Adapts the detector to partition the source image into a grid and detect points in each cell.");
+
326 RTABMAP_PARAM(FAST, GridCols, int, 0, "Grid cols (0 to disable). Adapts the detector to partition the source image into a grid and detect points in each cell.");
+
327 RTABMAP_PARAM(FAST, CV, int, 0, "Enable FastCV implementation if non-zero (and RTAB-Map is built with FastCV support). Values should be 9 and 10.");
+
328
+
329 RTABMAP_PARAM(GFTT, QualityLevel, double, 0.001, "");
+
330 RTABMAP_PARAM(GFTT, MinDistance, double, 7, "");
+
331 RTABMAP_PARAM(GFTT, BlockSize, int, 3, "");
+
332 RTABMAP_PARAM(GFTT, UseHarrisDetector, bool, false, "");
+
333 RTABMAP_PARAM(GFTT, K, double, 0.04, "");
+
334 RTABMAP_PARAM(GFTT, Gpu, bool, false, "GPU-GFTT: Use GPU version of GFTT. This option is enabled only if OpenCV>=3 is built with CUDA and GPUs are detected.");
+
335
+
336 RTABMAP_PARAM(ORB, ScaleFactor, float, 2, "Pyramid decimation ratio, greater than 1. scaleFactor==2 means the classical pyramid, where each next level has 4x less pixels than the previous, but such a big scale factor will degrade feature matching scores dramatically. On the other hand, too close to 1 scale factor will mean that to cover certain scale range you will need more pyramid levels and so the speed will suffer.");
+
337 RTABMAP_PARAM(ORB, NLevels, int, 3, "The number of pyramid levels. The smallest level will have linear size equal to input_image_linear_size/pow(scaleFactor, nlevels).");
+
338 RTABMAP_PARAM(ORB, EdgeThreshold, int, 19, "This is size of the border where the features are not detected. It should roughly match the patchSize parameter.");
+
339 RTABMAP_PARAM(ORB, FirstLevel, int, 0, "It should be 0 in the current implementation.");
+
340 RTABMAP_PARAM(ORB, WTA_K, int, 2, "The number of points that produce each element of the oriented BRIEF descriptor. The default value 2 means the BRIEF where we take a random point pair and compare their brightnesses, so we get 0/1 response. Other possible values are 3 and 4. For example, 3 means that we take 3 random points (of course, those point coordinates are random, but they are generated from the pre-defined seed, so each element of BRIEF descriptor is computed deterministically from the pixel rectangle), find point of maximum brightness and output index of the winner (0, 1 or 2). Such output will occupy 2 bits, and therefore it will need a special variant of Hamming distance, denoted as NORM_HAMMING2 (2 bits per bin). When WTA_K=4, we take 4 random points to compute each bin (that will also occupy 2 bits with possible values 0, 1, 2 or 3).");
+
341 RTABMAP_PARAM(ORB, ScoreType, int, 0, "The default HARRIS_SCORE=0 means that Harris algorithm is used to rank features (the score is written to KeyPoint::score and is used to retain best nfeatures features); FAST_SCORE=1 is alternative value of the parameter that produces slightly less stable keypoints, but it is a little faster to compute.");
+
342 RTABMAP_PARAM(ORB, PatchSize, int, 31, "size of the patch used by the oriented BRIEF descriptor. Of course, on smaller pyramid layers the perceived image area covered by a feature will be larger.");
+
343 RTABMAP_PARAM(ORB, Gpu, bool, false, "GPU-ORB: Use GPU version of ORB. This option is enabled only if OpenCV is built with CUDA and GPUs are detected.");
+
344
+
345 RTABMAP_PARAM(FREAK, OrientationNormalized, bool, true, "Enable orientation normalization.");
+
346 RTABMAP_PARAM(FREAK, ScaleNormalized, bool, true, "Enable scale normalization.");
+
347 RTABMAP_PARAM(FREAK, PatternScale, float, 22, "Scaling of the description pattern.");
+
348 RTABMAP_PARAM(FREAK, NOctaves, int, 4, "Number of octaves covered by the detected keypoints.");
+
349
+
350 RTABMAP_PARAM(BRISK, Thresh, int, 30, "FAST/AGAST detection threshold score.");
+
351 RTABMAP_PARAM(BRISK, Octaves, int, 3, "Detection octaves. Use 0 to do single scale.");
+
352 RTABMAP_PARAM(BRISK, PatternScale, float, 1,"Apply this scale to the pattern used for sampling the neighbourhood of a keypoint.");
+
353
+
354 RTABMAP_PARAM(KAZE, Extended, bool, false, "Set to enable extraction of extended (128-byte) descriptor.");
+
355 RTABMAP_PARAM(KAZE, Upright, bool, false, "Set to enable use of upright descriptors (non rotation-invariant).");
+
356 RTABMAP_PARAM(KAZE, Threshold, float, 0.001, "Detector response threshold to accept keypoint.");
+
357 RTABMAP_PARAM(KAZE, NOctaves, int, 4, "Maximum octave evolution of the image.");
+
358 RTABMAP_PARAM(KAZE, NOctaveLayers, int, 4, "Default number of sublevels per scale level.");
+
359 RTABMAP_PARAM(KAZE, Diffusivity, int, 1, "Diffusivity type: 0=DIFF_PM_G1, 1=DIFF_PM_G2, 2=DIFF_WEICKERT or 3=DIFF_CHARBONNIER.");
+
360
+
361 RTABMAP_PARAM_STR(SuperPoint, ModelPath, "", "[Required] Path to pre-trained weights Torch file of SuperPoint (*.pt).");
+
362 RTABMAP_PARAM(SuperPoint, Threshold, float, 0.010, "Detector response threshold to accept keypoint.");
+
363 RTABMAP_PARAM(SuperPoint, NMS, bool, true, "If true, non-maximum suppression is applied to detected keypoints.");
+
364 RTABMAP_PARAM(SuperPoint, NMSRadius, int, 4, uFormat("[%s=true] Minimum distance (pixels) between keypoints.", kSuperPointNMS().c_str()));
+
365 RTABMAP_PARAM(SuperPoint, Cuda, bool, true, "Use Cuda device for Torch, otherwise CPU device is used by default.");
+
366
+
367 RTABMAP_PARAM_STR(SuperPointRpautrat, WeightsPath, "", "[Required] SuperPoint weights file (*.pth).");
+
368 RTABMAP_PARAM_STR(SuperPointRpautrat, ModelPath, "", "[Required] SuperPoint python model file (superpoint_pytorch.py).");
+
369 RTABMAP_PARAM(SuperPointRpautrat, Threshold, float, 0.005, "Detector response threshold to accept keypoint.");
+
370 RTABMAP_PARAM(SuperPointRpautrat, NMS, bool, true, "If true, non-maximum suppression is applied to detected keypoints.");
+
371 RTABMAP_PARAM(SuperPointRpautrat, NMSRadius, int, 4, uFormat("[%s=true] Minimum distance (pixels) between keypoints.", kSuperPointRpautratNMS().c_str()));
+
372 RTABMAP_PARAM(SuperPointRpautrat, Cuda, bool, true, "Use Cuda device for Torch, otherwise CPU device is used by default.");
+
373
+
374 RTABMAP_PARAM_STR(PyDetector, Path, "", "Path to python script file (see available ones in rtabmap/corelib/src/python/*). See the header to see where the script should be copied.");
+
375 RTABMAP_PARAM(PyDetector, Cuda, bool, true, "Use cuda.");
+
376
+
377 // BayesFilter
+
378 RTABMAP_PARAM(Bayes, VirtualPlacePriorThr, float, 0.9, "Virtual place prior. Considering that we are at a new place, this is the prior probability to move again to a new place (unvisited location). The prior probability to move to a previously visited location is 1 - VirtualPlacePriorThr (split equally against all previously visited locations).");
+
379 RTABMAP_PARAM_STR(Bayes, PredictionLC, "0.1 0.36 0.30 0.16 0.062 0.0151 0.00255 0.000324 2.5e-05 1.3e-06 4.8e-08 1.2e-09 1.9e-11 2.2e-13 1.7e-15 8.5e-18 2.9e-20 6.9e-23", "Prediction of loop closures (Gaussian-like, here with sigma=1.6) - Format: {VirtualPlaceProb, LoopClosureProb, NeighborLvl1, NeighborLvl2, ...}. Considering we are at a previously visited location, the first value is the probability to move to a new place (unvisited location), the second value is the probability to stay at the same location, the third value is the probability to move to a neighbor or loop closure at the first depth level, the fourth value is the probability to move to a neighbor or loop closure at the second depth level, etc. If the sum of the values is not 1, the difference is normalized against all remaining visited locations. Normally, the sum of these values should be 1.");
+
380 RTABMAP_PARAM(Bayes, FullPredictionUpdate, bool, false, "Regenerate all the prediction matrix on each iteration (otherwise only removed/added ids are updated).");
+
381
+
382 // Verify hypotheses
+
383 RTABMAP_PARAM(VhEp, Enabled, bool, false, uFormat("Verify visual loop closure hypothesis by computing a fundamental matrix. This is done prior to transformation computation when %s is enabled.", kRGBDEnabled().c_str()));
+
384 RTABMAP_PARAM(VhEp, MatchCountMin, int, 8, "Minimum of matching visual words pairs to accept the loop hypothesis.");
+
385 RTABMAP_PARAM(VhEp, RansacParam1, float, 3, "Fundamental matrix (see cvFindFundamentalMat()): Max distance (in pixels) from the epipolar line for a point to be inlier.");
+
386 RTABMAP_PARAM(VhEp, RansacParam2, float, 0.99, "Fundamental matrix (see cvFindFundamentalMat()): Performance of RANSAC.");
+
387
+
388 // RGB-D SLAM
+
389 RTABMAP_PARAM(RGBD, Enabled, bool, true, "Activate metric SLAM. If set to false, classic RTAB-Map loop closure detection is done using only images and without any metric information.");
+
390 RTABMAP_PARAM(RGBD, LinearUpdate, float, 0.1, uFormat("Minimum linear displacement (m) to update the map. Rehearsal is done prior to this, so weights are still updated. To update the map when not moving, both %s and %s should be set to 0.", Parameters::kRGBDLinearUpdate().c_str(), Parameters::kRGBDAngularUpdate().c_str()));
+
391 RTABMAP_PARAM(RGBD, AngularUpdate, float, 0.1, uFormat("Minimum angular displacement (rad) to update the map. Rehearsal is done prior to this, so weights are still updated. To update the map when not moving, both %s and %s should be set to 0.", Parameters::kRGBDLinearUpdate().c_str(), Parameters::kRGBDAngularUpdate().c_str()));
+
392 RTABMAP_PARAM(RGBD, LinearSpeedUpdate, float, 0.0, "Maximum linear speed (m/s) to update the map (0 means not limit).");
+
393 RTABMAP_PARAM(RGBD, AngularSpeedUpdate, float, 0.0, "Maximum angular speed (rad/s) to update the map (0 means not limit).");
+
394 RTABMAP_PARAM(RGBD, AggressiveLoopThr, float, 0.05, uFormat("Loop closure threshold used (overriding %s) when a new mapping session is not yet linked to a map of the highest loop closure hypothesis. In localization mode, this threshold is used when there are no loop closure constraints with any map in the cache (%s). In all cases, the goal is to aggressively loop on a previous map in the database. Only used when %s is enabled. Set 1 to disable.", kRtabmapLoopThr().c_str(), kRGBDMaxOdomCacheSize().c_str(), kRGBDEnabled().c_str()));
+
395 RTABMAP_PARAM(RGBD, NewMapOdomChangeDistance, float, 0, "A new map is created if a change of odometry translation greater than X m is detected (0 m = disabled).");
+
396 RTABMAP_PARAM(RGBD, OptimizeFromGraphEnd, bool, false, "Optimize graph from the newest node. If false, the graph is optimized from the oldest node of the current graph (this adds an overhead computation to detect to oldest node of the current graph, but it can be useful to preserve the map referential from the oldest node). Warning when set to false: when some nodes are transferred, the first referential of the local map may change, resulting in momentary changes in robot/map position (which are annoying in teleoperation).");
+
397 RTABMAP_PARAM(RGBD, OptimizeMaxError, float, 3.0, uFormat("Reject loop closures if optimization error ratio is greater than this value (0=disabled). Ratio is computed as absolute error over standard deviation of each link. This will help to detect when a wrong loop closure is added to the graph. If used with \"%s\", the disabled loop closure links will be removed.", kOptimizerRobust().c_str()));
+
398 RTABMAP_PARAM(RGBD, OptimizeMaxErrorRepairRadius, float, 0.0, uFormat("If two consecutive loop closures are rejected by %s on the same old loop closure link, we will remove that old link, and other old links under that radius if necessary, until optimization is accepted. When optimization is accepted, the old loop closure links are removed from the graph. This feature is useful to reject bad loop closures that were accepted previously. Set to 0 to disable this feature.", kRGBDOptimizeMaxError().c_str()));
+
399 RTABMAP_PARAM(RGBD, MaxLoopClosureDistance, float, 0.0, "Reject loop closures/localizations if the distance from the map is over this distance (0=disabled).");
+
400 RTABMAP_PARAM(RGBD, ForceOdom3DoF, bool, true, uFormat("Force odometry pose to be 3DoF if %s=true.", kRegForce3DoF().c_str()));
+
401 RTABMAP_PARAM(RGBD, StartAtOrigin, bool, false, uFormat("If true, rtabmap will assume the robot is starting from origin of the map. If false, rtabmap will assume the robot is restarting from the last saved localization pose from previous session (the place where it shut down previously). Used only in localization mode (%s=false).", kMemIncrementalMemory().c_str()));
+
402 RTABMAP_PARAM(RGBD, GoalReachedRadius, float, 0.5, "Goal reached radius (m).");
+
403 RTABMAP_PARAM(RGBD, PlanStuckIterations, int, 0, "Mark the current goal node on the path as unreachable if it is not updated after X iterations (0=disabled). If all upcoming nodes on the path are unreachabled, the plan fails.");
+
404 RTABMAP_PARAM(RGBD, PlanLinearVelocity, float, 0, "Linear velocity (m/sec) used to compute path weights.");
+
405 RTABMAP_PARAM(RGBD, PlanAngularVelocity, float, 0, "Angular velocity (rad/sec) used to compute path weights.");
+
406 RTABMAP_PARAM(RGBD, GoalsSavedInUserData, bool, false, "When a goal is received and processed with success, it is saved in user data of the location with this format: \"GOAL:#\".");
+
407 RTABMAP_PARAM(RGBD, MaxLocalRetrieved, unsigned int, 2, "Maximum local locations retrieved (0=disabled) near the current pose in the local map or on the current planned path (those on the planned path have priority).");
+
408 RTABMAP_PARAM(RGBD, LocalRadius, float, 10, "Local radius (m) for nodes selection in the local map. This parameter is used in some approaches about the local map management.");
+
409 RTABMAP_PARAM(RGBD, LocalImmunizationRatio, float, 0.25, "Ratio of working memory for which local nodes are immunized from transfer.");
+
410 RTABMAP_PARAM(RGBD, ScanMatchingIdsSavedInLinks, bool, true, "Save scan matching IDs from one-to-many proximity detection in link's user data.");
+
411 RTABMAP_PARAM(RGBD, NeighborLinkRefining, bool, false, uFormat("When a new node is added to the graph, the transformation of its neighbor link to the previous node is refined using registration approach selected (%s).", kRegStrategy().c_str()));
+
412 RTABMAP_PARAM(RGBD, LoopClosureIdentityGuess, bool, false, uFormat("Use Identity matrix as guess when computing loop closure transform, otherwise no guess is used, thus assuming that registration strategy selected (%s) can deal with transformation estimation without guess.", kRegStrategy().c_str()));
+
413 RTABMAP_PARAM(RGBD, LoopClosureReextractFeatures, bool, false, "Extract features even if there are some already in the nodes. Raw features are not saved in database.");
+
414 RTABMAP_PARAM(RGBD, LocalBundleOnLoopClosure, bool, false, "Do local bundle adjustment with neighborhood of the loop closure.");
+
415 RTABMAP_PARAM(RGBD, InvertedReg, bool, false, "On loop closure, do registration from the target to reference instead of reference to target.");
+
416 RTABMAP_PARAM(RGBD, CreateOccupancyGrid, bool, false, "Create local occupancy grid maps. See \"Grid\" group for parameters.");
+
417 RTABMAP_PARAM(RGBD, MarkerDetection, bool, false, "Detect static markers to be added as landmarks for graph optimization. If input data have already landmarks, this will be ignored. See \"Marker\" group for parameters.");
+
418 RTABMAP_PARAM(RGBD, LoopCovLimited, bool, false, "Limit covariance of non-neighbor links to minimum covariance of neighbor links. In other words, if covariance of a loop closure link is smaller than the minimum covariance of odometry links, its covariance is set to minimum covariance of odometry links.");
+
419 RTABMAP_PARAM(RGBD, MaxOdomCacheSize, int, 10, uFormat("Maximum odometry cache size. Used only in localization mode (when %s=false). This is used to get smoother localizations and to verify localization transforms (when %s!=0) to make sure we don't teleport to a location very similar to one we previously localized on. Set 0 to disable caching.", kMemIncrementalMemory().c_str(), kRGBDOptimizeMaxError().c_str()));
+
420 RTABMAP_PARAM(RGBD, LocalizationSmoothing, bool, true, uFormat("Adjust localization constraints based on optimized odometry cache poses (when %s>0).", kRGBDMaxOdomCacheSize().c_str()));
+
421 RTABMAP_PARAM(RGBD, LocalizationPriorError, double, 0.001, uFormat("The corresponding variance (error x error) set to priors of the map's poses during localization (when %s>0).", kRGBDMaxOdomCacheSize().c_str()));
+
422 RTABMAP_PARAM(RGBD, LocalizationSecondTryWithoutProximityLinks, bool, true, uFormat("When localization is rejected by graph optimization validation, try a second time without proximity links if landmark or loop closure links are also present in odometry cache (see %s). If it succeeds, the proximity links are removed. This assumes that global loop closure and landmark links are more accurate than proximity links.", kRGBDMaxOdomCacheSize().c_str()));
+
423
+
424 // Local/Proximity loop closure detection
+
425 RTABMAP_PARAM(RGBD, ProximityByTime, bool, false, "Detection over all locations in STM.");
+
426 RTABMAP_PARAM(RGBD, ProximityBySpace, bool, true, "Detection over locations (in Working Memory) near in space.");
+
427 RTABMAP_PARAM(RGBD, ProximityMaxGraphDepth, int, 50, "Maximum depth from the current/last loop closure location and the local loop closure hypotheses. Set 0 to ignore.");
+
428 RTABMAP_PARAM(RGBD, ProximityMaxPaths, int, 3, "Maximum paths compared (from the most recent) for proximity detection. 0 means no limit.");
+
429 RTABMAP_PARAM(RGBD, ProximityPathFilteringRadius, float, 1, "Path filtering radius to reduce the number of nodes to compare in a path in one-to-many proximity detection. The nearest node in a path should be inside that radius to be considered for one-to-one proximity detection.");
+
430 RTABMAP_PARAM(RGBD, ProximityPathMaxNeighbors, int, 0, "Maximum neighbor nodes compared on each path for one-to-many proximity detection. Set to 0 to disable one-to-many proximity detection (by merging the laser scans).");
+
431 RTABMAP_PARAM(RGBD, ProximityPathRawPosesUsed, bool, true, "When comparing to a local path for one-to-many proximity detection, merge the scans using the odometry poses (with neighbor link optimizations) instead of the ones in the optimized local graph.");
+
432 RTABMAP_PARAM(RGBD, ProximityAngle, float, 45, "Maximum angle (degrees) for one-to-one proximity detection.");
+
433 RTABMAP_PARAM(RGBD, ProximityOdomGuess, bool, false, "Use odometry as motion guess for one-to-one proximity detection.");
+
434 RTABMAP_PARAM(RGBD, ProximityGlobalScanMap, bool, false, uFormat("Create a global assembled map from laser scans for one-to-many proximity detection, replacing the original one-to-many proximity detection (i.e., detection against local paths). Only used in localization mode (%s=false), otherwise original one-to-many proximity detection is done. Note also that if graph is modified (i.e., memory management is enabled or robot jumps from one disjoint session to another in same database), the global scan map is cleared and one-to-many proximity detection is reverted to original approach.", kMemIncrementalMemory().c_str()));
+
435 RTABMAP_PARAM(RGBD, ProximityMergedScanCovFactor, double, 100.0, uFormat("Covariance factor for one-to-many proximity detection (when %s>0 and scans are used).", kRGBDProximityPathMaxNeighbors().c_str()));
+
436
+
437 // Graph optimization
+
438#ifdef RTABMAP_GTSAM
+
439 RTABMAP_PARAM(Optimizer, Strategy, int, 2, "Graph optimization strategy: 0=TORO, 1=g2o, 2=GTSAM and 3=Ceres.");
+
440 RTABMAP_PARAM(Optimizer, Iterations, int, 20, "Optimization iterations.");
+
441 RTABMAP_PARAM(Optimizer, Epsilon, double, 0.00001, "Stop optimizing when the error improvement is less than this value.");
+
442#else
+
443#ifdef RTABMAP_G2O
+
444 RTABMAP_PARAM(Optimizer, Strategy, int, 1, "Graph optimization strategy: 0=TORO, 1=g2o, 2=GTSAM and 3=Ceres.");
+
445 RTABMAP_PARAM(Optimizer, Iterations, int, 20, "Optimization iterations.");
+
446 RTABMAP_PARAM(Optimizer, Epsilon, double, 0.0, "Stop optimizing when the error improvement is less than this value.");
+
447#else
+
448#ifdef RTABMAP_CERES
+
449 RTABMAP_PARAM(Optimizer, Strategy, int, 3, "Graph optimization strategy: 0=TORO, 1=g2o, 2=GTSAM and 3=Ceres.");
+
450 RTABMAP_PARAM(Optimizer, Iterations, int, 20, "Optimization iterations.");
+
451 RTABMAP_PARAM(Optimizer, Epsilon, double, 0.000001, "Stop optimizing when the error improvement is less than this value.");
+
452#else
+
453 RTABMAP_PARAM(Optimizer, Strategy, int, 0, "Graph optimization strategy: 0=TORO, 1=g2o, 2=GTSAM and 3=Ceres.");
+
454 RTABMAP_PARAM(Optimizer, Iterations, int, 100, "Optimization iterations.");
+
455 RTABMAP_PARAM(Optimizer, Epsilon, double, 0.00001, "Stop optimizing when the error improvement is less than this value.");
+
456#endif
+
457#endif
+
458#endif
+
459 RTABMAP_PARAM(Optimizer, VarianceIgnored, bool, false, "Ignore constraints' variance. If checked, identity information matrix is used for each constraint. Otherwise, an information matrix is generated from the variance saved in the links.");
+
460 RTABMAP_PARAM(Optimizer, Robust, bool, false, "Robust graph optimization using Vertigo (only work for g2o and GTSAM optimization strategies).");
+
461 RTABMAP_PARAM(Optimizer, PriorsIgnored, bool, true, "Ignore prior constraints (global pose or GPS) while optimizing. Currently only g2o and gtsam optimization supports this.");
+
462 RTABMAP_PARAM(Optimizer, LandmarksIgnored, bool, false, "Ignore landmark constraints while optimizing. Currently only g2o and gtsam optimization supports this.");
+
463#if defined(RTABMAP_G2O) || defined(RTABMAP_GTSAM)
+
464 RTABMAP_PARAM(Optimizer, GravitySigma, float, 0.3, uFormat("Gravity sigma value (>=0, typically between 0.1 and 0.3). Optimization is done while preserving gravity orientation of the poses. This should be used only with visual/lidar inertial odometry approaches, for which we assume that all odometry poses are aligned with gravity. Set to 0 to disable gravity constraints. Currently supported only with g2o and GTSAM optimization strategies (see %s).", kOptimizerStrategy().c_str()));
+
465#else
+
466 RTABMAP_PARAM(Optimizer, GravitySigma, float, 0.0, uFormat("Gravity sigma value (>=0, typically between 0.1 and 0.3). Optimization is done while preserving gravity orientation of the poses. This should be used only with visual/lidar inertial odometry approaches, for which we assume that all odometry poses are aligned with gravity. Set to 0 to disable gravity constraints. Currently supported only with g2o and GTSAM optimization strategies (see %s).", kOptimizerStrategy().c_str()));
+
467#endif
+
468
+
469#ifdef RTABMAP_ORB_SLAM
+
470 RTABMAP_PARAM(g2o, Solver, int, 3, "0=csparse 1=pcg 2=cholmod 3=Eigen");
+
471#else
+
472 RTABMAP_PARAM(g2o, Solver, int, 0, "0=csparse 1=pcg 2=cholmod 3=Eigen");
+
473#endif
+
474 RTABMAP_PARAM(g2o, Optimizer, int, 0, "0=Levenberg 1=GaussNewton");
+
475
+
476 RTABMAP_PARAM(Optimizer, Baseline, double, 0.075, "When doing bundle adjustment with RGB-D data (mono camera + depth), set a fake baseline (m) so the BA backend treats depth as stereo disparity. Applies to all BA-capable backends (g2o, GTSAM, Ceres). Set to 0 to keep the problem mono (depth observations are ignored). For real stereo data the baseline in the calibration (Tx) is used directly.");
+
477 RTABMAP_PARAM(Optimizer, PixelVariance, double, 1.0, "Pixel variance used on the u/v axes of every bundle adjustment reprojection edge. Applies to all BA-capable backends (g2o, GTSAM, Ceres). Should approximate the squared 1-sigma keypoint localization error in pixels. Set higher (e.g. 4-9) if features are noisy (low texture, motion blur, low light, or large detector scale). Set lower (e.g. 0.01-0.1) if features are sub-pixel refined (Lucas-Kanade tracking, parabolic peak interpolation). Intuition: the lower the pixel variance, the more the optimizer trusts the keypoint positions.");
+
478 RTABMAP_PARAM(Optimizer, DisparityVariance, double, 1.0, "Disparity variance used on the disparity axis (u - u_right) of stereo / RGB-D bundle adjustment edges. Applies to all BA-capable backends (g2o, GTSAM, Ceres). Defaults to the same value as PixelVariance for backward compatibility. Set higher (e.g. 2-4) if your depth source is noisier than your feature detector's u/v precision (typical for stereo block matchers / SGM at long range). Set lower (e.g. 0.01-0.1) if your depth source is more accurate than the u/v detector (typical for ToF / LiDAR-fused depth where range is measured directly rather than triangulated). Intuition: the lower the disparity variance, the more the optimizer trusts the depth measurements. Geometric note: wider baseline and/or higher image resolution improve a block matcher's effective disparity precision (larger disparity magnitudes and finer sub-pixel refinement), so wide-baseline high-resolution stereo pairs can usually afford a lower disparity variance (e.g. 0.1-0.5); narrow-baseline low-resolution pairs should keep it higher (e.g. 1-4).");
+
479 RTABMAP_PARAM(Optimizer, RobustKernelDelta, double, 8, "Robust kernel delta used for bundle adjustment (0 means don't use robust kernel). Applies to all BA-capable backends (g2o, GTSAM, Ceres). Observations with chi2 over this threshold will be ignored in the second optimization pass.");
+
480
+
481 RTABMAP_PARAM(GTSAM, Optimizer, int, 1, "0=Levenberg 1=GaussNewton 2=Dogleg");
+
482 RTABMAP_PARAM(GTSAM, Incremental, bool, false, uFormat("Do graph optimization incrementally (iSAM2) to increase optimization speed on loop closures. Note that only GaussNewton and Dogleg optimization algorithms are supported (%s) in this mode.", kGTSAMOptimizer().c_str()));
+
483 RTABMAP_PARAM(GTSAM, IncRelinearizeThreshold, double, 0.01, "Only relinearize variables whose linear delta magnitude is greater than this threshold. See GTSAM::ISAM2 doc for more info.");
+
484 RTABMAP_PARAM(GTSAM, IncRelinearizeSkip, int, 1, "Only relinearize any variables every X calls to ISAM2::update(). See GTSAM::ISAM2 doc for more info.");
+
485
+
486 // Odometry
+
487 RTABMAP_PARAM(Odom, Strategy, int, 0, "0=Frame-to-Map (F2M) 1=Frame-to-Frame (F2F) 2=Fovis 3=viso2 4=DVO-SLAM 5=ORB_SLAM 6=OKVIS 7=LOAM 8=MSCKF_VIO 9=VINS-Fusion 10=OpenVINS 11=FLOAM 12=Open3D 13=cuVSLAM 14=LIO-SAM");
+
488 RTABMAP_PARAM(Odom, ResetCountdown, int, 0, "Automatically reset odometry after X consecutive images where odometry cannot be computed (a value of 0 disables auto-reset). When a reset occurs, odometry resumes from the last successfully computed pose with large covariance to trigger a new map. If external odometry is used, it will also be reset based on the motion estimated relative to the last computed pose but no large covariance will be received, so that a new map won't be triggered.");
+
489 RTABMAP_PARAM(Odom, Holonomic, bool, true, "If the robot is holonomic (strafing commands can be issued). If not, y value will be estimated from x and yaw values (y=x*tan(yaw)).");
+
490 RTABMAP_PARAM(Odom, FillInfoData, bool, true, "Fill info with data (inliers/outliers features).");
+
491 RTABMAP_PARAM(Odom, ImageBufferSize, unsigned int, 1, "Data buffer size (0 min inf).");
+
492 RTABMAP_PARAM(Odom, FilteringStrategy, int, 0, "0=No filtering 1=Kalman filtering 2=Particle filtering. This filter is used to smooth the odometry output.");
+
493 RTABMAP_PARAM(Odom, ParticleSize, unsigned int, 400, "Number of particles of the filter.");
+
494 RTABMAP_PARAM(Odom, ParticleNoiseT, float, 0.002, "Noise (m) of translation components (x,y,z).");
+
495 RTABMAP_PARAM(Odom, ParticleLambdaT, float, 100, "Lambda of translation components (x,y,z).");
+
496 RTABMAP_PARAM(Odom, ParticleNoiseR, float, 0.002, "Noise (rad) of rotational components (roll,pitch,yaw).");
+
497 RTABMAP_PARAM(Odom, ParticleLambdaR, float, 100, "Lambda of rotational components (roll,pitch,yaw).");
+
498 RTABMAP_PARAM(Odom, KalmanProcessNoise, float, 0.001, "Process noise covariance value.");
+
499 RTABMAP_PARAM(Odom, KalmanMeasurementNoise, float, 0.01, "Process measurement covariance value.");
+
500 RTABMAP_PARAM(Odom, GuessMotion, bool, true, "Guess next transformation from the last motion computed.");
+
501 RTABMAP_PARAM(Odom, GuessSmoothingDelay, float, 0, uFormat("Guess smoothing delay (s). Estimated velocity is averaged based on last transforms up to this maximum delay. This can help to get smoother velocity prediction. Last velocity computed is used directly if \"%s\" is set or the delay is below the odometry rate.", kOdomFilteringStrategy().c_str()));
+
502 RTABMAP_PARAM(Odom, KeyFrameThr, float, 0.3, "[Visual] Create a new keyframe when the number of inliers drops under this ratio of features in last frame. Setting the value to 0 means that a keyframe is created for each processed frame.");
+
503 RTABMAP_PARAM(Odom, VisKeyFrameThr, int, 150, "[Visual] Create a new keyframe when the number of inliers drops under this threshold. Setting the value to 0 means that a keyframe is created for each processed frame.");
+
504 RTABMAP_PARAM(Odom, ScanKeyFrameThr, float, 0.9, "[Geometry] Create a new keyframe when the number of ICP inliers drops under this ratio of points in last frame's scan. Setting the value to 0 means that a keyframe is created for each processed frame.");
+
505 RTABMAP_PARAM(Odom, ImageDecimation, unsigned int, 1, uFormat("Decimation of the RGB image before registration. If depth size is larger than decimated RGB size, depth is decimated to be always at most equal to RGB size. If %s is true and if depth is smaller than decimated RGB, depth may be interpolated to match RGB size for feature detection.", kVisDepthAsMask().c_str()));
+
506 RTABMAP_PARAM(Odom, AlignWithGround, bool, false, "Align odometry with the ground on initialization.");
+
507 RTABMAP_PARAM(Odom, Deskewing, bool, true, "Lidar deskewing. If input lidar has time channel, it will be deskewed with a constant motion model (with IMU orientation and/or guess if provided).");
+
508
+
509 // Odometry Frame-to-Map
+
510 RTABMAP_PARAM(OdomF2M, MaxSize, int, 2000, "[Visual] Local map size: If > 0 (example 5000), the odometry will maintain a local map of X maximum words.");
+
511 RTABMAP_PARAM(OdomF2M, MaxNewFeatures, int, 0, "[Visual] Maximum features (sorted by keypoint response) added to local map from a new key-frame. 0 means no limit.");
+
512 RTABMAP_PARAM(OdomF2M, InitDepthFactor, float, 0.05, "[Visual] Depth factor used to initialize depth of features without depth. Depth = Factor * fx.");
+
513 RTABMAP_PARAM(OdomF2M, FloorThreshold, float, 0.0, "[Visual] Only track features in 3D feature map that are over this threshold (height in base frame). Can be useful to ignore reflections on the floor. 0 means disabled.");
+
514 RTABMAP_PARAM(OdomF2M, ScanMaxSize, int, 2000, "[Geometry] Maximum local scan map size.");
+
515 RTABMAP_PARAM(OdomF2M, ScanSubtractRadius, float, 0.05, "[Geometry] Radius used to filter points of a new added scan to local map. This could match the voxel size of the scans.");
+
516 RTABMAP_PARAM(OdomF2M, ScanSubtractAngle, float, 45, uFormat("[Geometry] Max angle (degrees) used to filter points of a new added scan to local map (when \"%s\">0). 0 means any angle.", kOdomF2MScanSubtractRadius().c_str()).c_str());
+
517 RTABMAP_PARAM(OdomF2M, ScanRange, float, 0, "[Geometry] Distance Range used to filter points of local map (when > 0). 0 means local map is updated using time and not range.");
+
518 RTABMAP_PARAM(OdomF2M, ValidDepthRatio, float, 0.75, "If a new frame has points without valid depth, they are added to local feature map only if points with valid depth on total points is over this ratio. Setting to 1 means no points without valid depth are added to local feature map.");
+
519#if defined(RTABMAP_G2O) || defined(RTABMAP_ORB_SLAM)
+
520 RTABMAP_PARAM(OdomF2M, BundleAdjustment, int, 1, uFormat("Local bundle adjustment. Value matches the %s parameter: 0=disabled (TORO is not BA-capable), 1=g2o, 2=GTSAM, 3=Ceres, 4=cvsba.", kOptimizerStrategy().c_str()));
+
521#else
+
522 RTABMAP_PARAM(OdomF2M, BundleAdjustment, int, 0, uFormat("Local bundle adjustment. Value matches the %s parameter: 0=disabled (TORO is not BA-capable), 1=g2o, 2=GTSAM, 3=Ceres, 4=cvsba.", kOptimizerStrategy().c_str()));
+
523#endif
+
524 RTABMAP_PARAM(OdomF2M, BundleAdjustmentMaxFrames, int, 10, "Maximum frames used for bundle adjustment (0=inf or all current frames in the local map).");
+
525 RTABMAP_PARAM(OdomF2M, BundleAdjustmentMinMotion, float, 0.0, "To create a new keyframe with bundle adjustment, a minimum motion (in pixels) can be required. The motion is computed by the average distance between inliers of the previous keyframe and new frame.");
+
526 RTABMAP_PARAM(OdomF2M, BundleAdjustmentMaxKeyFramesPerFeature, int, 0, "Maximum keyframes per feature for bundle adjustment. 0 means not limit.");
+
527 RTABMAP_PARAM(OdomF2M, BundleUpdateFeatureMapOnAllFrames, bool, false, uFormat("Update 3D local feature map on every frame with bundle adjustment. Recommended if %s=false and %s=true so that features without depth are better triangulated on every frame (not only on keyframes). If disabled, the feature map is updated only when a new keyframe is added (legacy approach).", kVisDepthAsMask().c_str(), kMemUseOdomFeatures().c_str()));
+
528
+
529 // Odometry Mono
+
530 RTABMAP_PARAM(OdomMono, InitMinFlow, float, 100, "Minimum optical flow required for the initialization step.");
+
531 RTABMAP_PARAM(OdomMono, InitMinTranslation, float, 0.1, "Minimum translation required for the initialization step.");
+
532 RTABMAP_PARAM(OdomMono, MinTranslation, float, 0.02, "Minimum translation to add new points to local map. On initialization, translation x 5 is used as the minimum.");
+
533 RTABMAP_PARAM(OdomMono, MaxVariance, float, 0.01, "Maximum variance to add new points to local map.");
+
534
+
535 // Odometry Fovis
+
536 RTABMAP_PARAM(OdomFovis, FeatureWindowSize, int, 9, "The size of the n x n image patch surrounding each feature, used for keypoint matching.");
+
537 RTABMAP_PARAM(OdomFovis, MaxPyramidLevel, int, 3, "The maximum Gaussian pyramid level to process the image at. Pyramid level 1 corresponds to the original image.");
+
538 RTABMAP_PARAM(OdomFovis, MinPyramidLevel, int, 0, "The minimum pyramid level.");
+
539 RTABMAP_PARAM(OdomFovis, TargetPixelsPerFeature, int, 250, "Specifies the desired feature density as a ratio of input image pixels per feature detected. This number is used to control the adaptive feature thresholding.");
+
540 RTABMAP_PARAM(OdomFovis, FastThreshold, int, 20, "FAST threshold.");
+
541 RTABMAP_PARAM(OdomFovis, UseAdaptiveThreshold, bool, true, "Use FAST adaptive threshold.");
+
542 RTABMAP_PARAM(OdomFovis, FastThresholdAdaptiveGain, double, 0.005, "FAST threshold adaptive gain.");
+
543 RTABMAP_PARAM(OdomFovis, UseHomographyInitialization, bool, true, "Use homography initialization.");
+
544
+
545 RTABMAP_PARAM(OdomFovis, UseBucketing, bool, true, "");
+
546 RTABMAP_PARAM(OdomFovis, BucketWidth, int, 80, "");
+
547 RTABMAP_PARAM(OdomFovis, BucketHeight, int, 80, "");
+
548 RTABMAP_PARAM(OdomFovis, MaxKeypointsPerBucket, int, 25, "");
+
549 RTABMAP_PARAM(OdomFovis, UseImageNormalization, bool, false, "");
+
550
+
551 RTABMAP_PARAM(OdomFovis, InlierMaxReprojectionError, double, 1.5, "The maximum image-space reprojection error (in pixels) a feature match is allowed to have and still be considered an inlier in the set of features used for motion estimation.");
+
552 RTABMAP_PARAM(OdomFovis, CliqueInlierThreshold, double, 0.1, "See Howard's greedy max-clique algorithm for determining the maximum set of mutually consisten feature matches. This specifies the compatibility threshold, in meters.");
+
553 RTABMAP_PARAM(OdomFovis, MinFeaturesForEstimate, int, 20, "Minimum number of features in the inlier set for the motion estimate to be considered valid.");
+
554 RTABMAP_PARAM(OdomFovis, MaxMeanReprojectionError, double, 10.0, "Maximum mean reprojection error over the inlier feature matches for the motion estimate to be considered valid.");
+
555 RTABMAP_PARAM(OdomFovis, UseSubpixelRefinement, bool, true, "Specifies whether or not to refine feature matches to subpixel resolution.");
+
556 RTABMAP_PARAM(OdomFovis, FeatureSearchWindow, int, 25, "Specifies the size of the search window to apply when searching for feature matches across time frames. The search is conducted around the feature location predicted by the initial rotation estimate.");
+
557 RTABMAP_PARAM(OdomFovis, UpdateTargetFeaturesWithRefined, bool, false, "When subpixel refinement is enabled, the refined feature locations can be saved over the original feature locations. This has a slightly negative impact on frame-to-frame visual odometry, but is likely better when using this library as part of a visual SLAM algorithm.");
+
558
+
559 RTABMAP_PARAM(OdomFovis, StereoRequireMutualMatch, bool, true, "");
+
560 RTABMAP_PARAM(OdomFovis, StereoMaxDistEpipolarLine, double, 1.5, "");
+
561 RTABMAP_PARAM(OdomFovis, StereoMaxRefinementDisplacement, double, 1.0, "");
+
562 RTABMAP_PARAM(OdomFovis, StereoMaxDisparity, int, 128, "");
+
563
+
564 // Odometry viso2
+
565 RTABMAP_PARAM(OdomViso2, RansacIters, int, 200, "Number of RANSAC iterations.");
+
566 RTABMAP_PARAM(OdomViso2, InlierThreshold, double, 2.0, "Fundamental matrix inlier threshold.");
+
567 RTABMAP_PARAM(OdomViso2, Reweighting, bool, true, "Lower border weights (more robust to calibration errors).");
+
568 RTABMAP_PARAM(OdomViso2, MatchNmsN, int, 3, "Non-max-suppression: min. distance between maxima (in pixels).");
+
569 RTABMAP_PARAM(OdomViso2, MatchNmsTau, int, 50, "Non-max-suppression: interest point peakiness threshold.");
+
570 RTABMAP_PARAM(OdomViso2, MatchBinsize, int, 50, "Matching bin width/height (affects efficiency only).");
+
571 RTABMAP_PARAM(OdomViso2, MatchRadius, int, 200, "Matching radius (du/dv in pixels).");
+
572 RTABMAP_PARAM(OdomViso2, MatchDispTolerance, int, 2, "Disparity tolerance for stereo matches (in pixels).");
+
573 RTABMAP_PARAM(OdomViso2, MatchOutlierDispTolerance, int, 5, "Outlier removal: disparity tolerance (in pixels).");
+
574 RTABMAP_PARAM(OdomViso2, MatchOutlierFlowTolerance, int, 5, "Outlier removal: flow tolerance (in pixels).");
+
575 RTABMAP_PARAM(OdomViso2, MatchMultiStage, bool, true, "Multistage matching (denser and faster).");
+
576 RTABMAP_PARAM(OdomViso2, MatchHalfResolution, bool, true, "Match at half resolution, refine at full resolution.");
+
577 RTABMAP_PARAM(OdomViso2, MatchRefinement, int, 1, "Refinement (0=none,1=pixel,2=subpixel).");
+
578 RTABMAP_PARAM(OdomViso2, BucketMaxFeatures, int, 2, "Maximal number of features per bucket.");
+
579 RTABMAP_PARAM(OdomViso2, BucketWidth, double, 50, "Width of bucket.");
+
580 RTABMAP_PARAM(OdomViso2, BucketHeight, double, 50, "Height of bucket.");
+
581
+
582 // Odometry ORB_SLAM
+
583 RTABMAP_PARAM_STR(OdomORBSLAM, VocPath, "", "Path to ORB vocabulary (*.txt).");
+
584 RTABMAP_PARAM(OdomORBSLAM, Bf, double, 0.076, "Fake IR projector baseline (m) used only when stereo is not used.");
+
585 RTABMAP_PARAM(OdomORBSLAM, ThDepth, double, 40.0, "Close/Far threshold. Baseline times.");
+
586 RTABMAP_PARAM(OdomORBSLAM, Fps, float, 0.0, "Camera FPS (0 to estimate from input data).");
+
587 RTABMAP_PARAM(OdomORBSLAM, MaxFeatures, int, 1000, "Maximum ORB features extracted per frame.");
+
588 RTABMAP_PARAM(OdomORBSLAM, MapSize, int, 3000, "Maximum size of the feature map (0 means infinite). Only supported with ORB_SLAM2.");
+
589 RTABMAP_PARAM(OdomORBSLAM, Inertial, bool, false, "Enable IMU. Only supported with ORB_SLAM3.");
+
590 RTABMAP_PARAM(OdomORBSLAM, GyroNoise, double, 0.01, "IMU gyroscope \"white noise\".");
+
591 RTABMAP_PARAM(OdomORBSLAM, AccNoise, double, 0.1, "IMU accelerometer \"white noise\".");
+
592 RTABMAP_PARAM(OdomORBSLAM, GyroWalk, double, 0.000001, "IMU gyroscope \"random walk\".");
+
593 RTABMAP_PARAM(OdomORBSLAM, AccWalk, double, 0.0001, "IMU accelerometer \"random walk\".");
+
594 RTABMAP_PARAM(OdomORBSLAM, SamplingRate, double, 0, "IMU sampling rate (0 to estimate from input data).");
+
595
+
596
+
597 // Odometry OKVIS
+
598 RTABMAP_PARAM_STR(OdomOKVIS, ConfigPath, "", "Path of OKVIS config file.");
+
599
+
600 // Odometry LOAM
+
601 RTABMAP_PARAM(OdomLOAM, Sensor, int, 2, "Velodyne sensor: 0=VLP-16, 1=HDL-32, 2=HDL-64E");
+
602 RTABMAP_PARAM(OdomLOAM, ScanPeriod, float, 0.1, "Scan period (s)");
+
603 RTABMAP_PARAM(OdomLOAM, Resolution, float, 0.2, "Map resolution");
+
604 RTABMAP_PARAM(OdomLOAM, LinVar, float, 0.01, "Linear output variance.");
+
605 RTABMAP_PARAM(OdomLOAM, AngVar, float, 0.01, "Angular output variance.");
+
606 RTABMAP_PARAM(OdomLOAM, LocalMapping, bool, true, "Local mapping. It adds more time to compute odometry, but accuracy is significantly improved.");
+
607
+
608 // Odometry MSCKF_VIO
+
609 RTABMAP_PARAM(OdomMSCKF, GridRow, int, 4, "");
+
610 RTABMAP_PARAM(OdomMSCKF, GridCol, int, 5, "");
+
611 RTABMAP_PARAM(OdomMSCKF, GridMinFeatureNum, int, 3, "");
+
612 RTABMAP_PARAM(OdomMSCKF, GridMaxFeatureNum, int, 4, "");
+
613 RTABMAP_PARAM(OdomMSCKF, PyramidLevels, int, 3, "");
+
614 RTABMAP_PARAM(OdomMSCKF, PatchSize, int, 15, "");
+
615 RTABMAP_PARAM(OdomMSCKF, FastThreshold, int, 10, "");
+
616 RTABMAP_PARAM(OdomMSCKF, MaxIteration, int, 30, "");
+
617 RTABMAP_PARAM(OdomMSCKF, TrackPrecision, double, 0.01, "");
+
618 RTABMAP_PARAM(OdomMSCKF, RansacThreshold, double, 3, "");
+
619 RTABMAP_PARAM(OdomMSCKF, StereoThreshold, double, 5, "");
+
620 RTABMAP_PARAM(OdomMSCKF, PositionStdThreshold, double, 8.0, "");
+
621 RTABMAP_PARAM(OdomMSCKF, RotationThreshold, double, 0.2618, "");
+
622 RTABMAP_PARAM(OdomMSCKF, TranslationThreshold, double, 0.4, "");
+
623 RTABMAP_PARAM(OdomMSCKF, TrackingRateThreshold, double, 0.5, "");
+
624 RTABMAP_PARAM(OdomMSCKF, OptTranslationThreshold, double, 0, "");
+
625 RTABMAP_PARAM(OdomMSCKF, NoiseGyro, double, 0.005, "");
+
626 RTABMAP_PARAM(OdomMSCKF, NoiseAcc, double, 0.05, "");
+
627 RTABMAP_PARAM(OdomMSCKF, NoiseGyroBias, double, 0.001, "");
+
628 RTABMAP_PARAM(OdomMSCKF, NoiseAccBias, double, 0.01, "");
+
629 RTABMAP_PARAM(OdomMSCKF, NoiseFeature, double, 0.035, "");
+
630 RTABMAP_PARAM(OdomMSCKF, InitCovVel, double, 0.25, "");
+
631 RTABMAP_PARAM(OdomMSCKF, InitCovGyroBias, double, 0.01, "");
+
632 RTABMAP_PARAM(OdomMSCKF, InitCovAccBias, double, 0.01, "");
+
633 RTABMAP_PARAM(OdomMSCKF, InitCovExRot, double, 0.00030462, "");
+
634 RTABMAP_PARAM(OdomMSCKF, InitCovExTrans, double, 0.000025, "");
+
635 RTABMAP_PARAM(OdomMSCKF, MaxCamStateSize, int, 20, "");
+
636
+
637 // Odometry VINS-Fusion
+
638 RTABMAP_PARAM_STR(OdomVINSFusion, ConfigPath, "", "Path of VINS-Fusion config file.");
+
639
+
640 // Odometry OpenVINS
+
641 RTABMAP_PARAM_STR(OdomOpenVINS, ConfigPath, "", "Path of OpenVINS config file (*.yaml). Same format used than OpenVINS library. Note that any parameter from that config file will overwrite the same parameter in OdomOpenVINS group.");
+
642 RTABMAP_PARAM(OdomOpenVINS, UseStereo, bool, true, "If we have more than 1 camera, if we should try to track stereo constraints between pairs.");
+
643 RTABMAP_PARAM(OdomOpenVINS, UseKLT, bool, true, "If true we will use KLT, otherwise use a ORB descriptor + robust matching.");
+
644 RTABMAP_PARAM(OdomOpenVINS, NumPts, int, 200, "Number of points (per camera) we will extract and try to track.");
+
645 RTABMAP_PARAM(OdomOpenVINS, MinPxDist, int, 15, "Eistance between features (features near each other provide less information).");
+
646 RTABMAP_PARAM(OdomOpenVINS, FiTriangulate1d, bool, false, "If we should perform 1d triangulation instead of 3d.");
+
647 RTABMAP_PARAM(OdomOpenVINS, FiRefineFeatures, bool, true, "If we should perform Levenberg-Marquardt refinement.");
+
648 RTABMAP_PARAM(OdomOpenVINS, FiMaxRuns, int, 5, "Max runs for Levenberg-Marquardt.");
+
649 RTABMAP_PARAM(OdomOpenVINS, FiMaxBaseline, double, 40, "Max baseline ratio to accept triangulated features.");
+
650 RTABMAP_PARAM(OdomOpenVINS, FiMaxCondNumber, double, 10000, "Max condition number of linear triangulation matrix accept triangulated features.");
+
651
+
652 RTABMAP_PARAM(OdomOpenVINS, UseFEJ, bool, true, "If first-estimate Jacobians should be used (enable for good consistency).");
+
653 RTABMAP_PARAM(OdomOpenVINS, Integration, int, 1, "0=discrete, 1=rk4, 2=analytical (if rk4 or analytical used then analytical covariance propagation is used).");
+
654 RTABMAP_PARAM(OdomOpenVINS, CalibCamExtrinsics, bool, false, "Bool to determine whether or not to calibrate imu-to-camera pose.");
+
655 RTABMAP_PARAM(OdomOpenVINS, CalibCamIntrinsics, bool, false, "Bool to determine whether or not to calibrate camera intrinsics.");
+
656 RTABMAP_PARAM(OdomOpenVINS, CalibCamTimeoffset, bool, false, "Bool to determine whether or not to calibrate camera to IMU time offset.");
+
657 RTABMAP_PARAM(OdomOpenVINS, CalibIMUIntrinsics, bool, false, "Bool to determine whether or not to calibrate the IMU intrinsics.");
+
658 RTABMAP_PARAM(OdomOpenVINS, CalibIMUGSensitivity, bool, false, "Bool to determine whether or not to calibrate the Gravity sensitivity.");
+
659 RTABMAP_PARAM(OdomOpenVINS, MaxClones, int, 11, "Max clone size of sliding window.");
+
660 RTABMAP_PARAM(OdomOpenVINS, MaxSLAM, int, 50, "Max number of estimated SLAM features.");
+
661 RTABMAP_PARAM(OdomOpenVINS, MaxSLAMInUpdate, int, 25, "Max number of SLAM features we allow to be included in a single EKF update..");
+
662 RTABMAP_PARAM(OdomOpenVINS, MaxMSCKFInUpdate, int, 50, "Max number of MSCKF features we will use at a given image timestep..");
+
663 RTABMAP_PARAM(OdomOpenVINS, FeatRepMSCKF, int, 0, "What representation our features are in (msckf features).");
+
664 RTABMAP_PARAM(OdomOpenVINS, FeatRepSLAM, int, 4, "What representation our features are in (slam features).");
+
665 RTABMAP_PARAM(OdomOpenVINS, DtSLAMDelay, double, 0.0, "Delay, in seconds, that we should wait from init before we start estimating SLAM features.");
+
666 RTABMAP_PARAM(OdomOpenVINS, GravityMag, double, 9.81, "Gravity magnitude in the global frame (i.e. should be 9.81 typically).");
+
667 RTABMAP_PARAM_STR(OdomOpenVINS, LeftMaskPath, "", "Mask for left image.");
+
668 RTABMAP_PARAM_STR(OdomOpenVINS, RightMaskPath, "", "Mask for right image.");
+
669
+
670 RTABMAP_PARAM(OdomOpenVINS, InitWindowTime, double, 2.0, "Amount of time we will initialize over (seconds).");
+
671 RTABMAP_PARAM(OdomOpenVINS, InitIMUThresh, double, 1.0, "Variance threshold on our acceleration to be classified as moving.");
+
672 RTABMAP_PARAM(OdomOpenVINS, InitMaxDisparity, double, 10.0, "Max disparity to consider the platform stationary (dependent on resolution).");
+
673 RTABMAP_PARAM(OdomOpenVINS, InitMaxFeatures, int, 50, "How many features to track during initialization (saves on computation).");
+
674 RTABMAP_PARAM(OdomOpenVINS, InitDynUse, bool, false, "If dynamic initialization should be used.");
+
675 RTABMAP_PARAM(OdomOpenVINS, InitDynMLEOptCalib, bool, false, "If we should optimize calibration during intialization (not recommended).");
+
676 RTABMAP_PARAM(OdomOpenVINS, InitDynMLEMaxIter, int, 50, "How many iterations the MLE refinement should use (zero to skip the MLE).");
+
677 RTABMAP_PARAM(OdomOpenVINS, InitDynMLEMaxTime, double, 0.05, "How many seconds the MLE should be completed in.");
+
678 RTABMAP_PARAM(OdomOpenVINS, InitDynMLEMaxThreads, int, 6, "How many threads the MLE should use.");
+
679 RTABMAP_PARAM(OdomOpenVINS, InitDynNumPose, int, 6, "Number of poses to use within our window time (evenly spaced).");
+
680 RTABMAP_PARAM(OdomOpenVINS, InitDynMinDeg, double, 10.0, "Orientation change needed to try to init.");
+
681 RTABMAP_PARAM(OdomOpenVINS, InitDynInflationOri, double, 10.0, "What to inflate the recovered q_GtoI covariance by.");
+
682 RTABMAP_PARAM(OdomOpenVINS, InitDynInflationVel, double, 100.0, "What to inflate the recovered v_IinG covariance by.");
+
683 RTABMAP_PARAM(OdomOpenVINS, InitDynInflationBg, double, 10.0, "What to inflate the recovered bias_g covariance by.");
+
684 RTABMAP_PARAM(OdomOpenVINS, InitDynInflationBa, double, 100.0, "What to inflate the recovered bias_a covariance by.");
+
685 RTABMAP_PARAM(OdomOpenVINS, InitDynMinRecCond, double, 1e-15, "Reciprocal condition number thresh for info inversion.");
+
686
+
687 RTABMAP_PARAM(OdomOpenVINS, TryZUPT, bool, true, "If we should try to use zero velocity update.");
+
688 RTABMAP_PARAM(OdomOpenVINS, ZUPTChi2Multiplier, double, 0.0, "Chi2 multiplier for zero velocity.");
+
689 RTABMAP_PARAM(OdomOpenVINS, ZUPTMaxVelodicy, double, 0.1, "Max velocity we will consider to try to do a zupt (i.e. if above this, don't do zupt).");
+
690 RTABMAP_PARAM(OdomOpenVINS, ZUPTNoiseMultiplier, double, 10.0, "Multiplier of our zupt measurement IMU noise matrix (default should be 1.0).");
+
691 RTABMAP_PARAM(OdomOpenVINS, ZUPTMaxDisparity, double, 0.5, "Max disparity we will consider to try to do a zupt (i.e. if above this, don't do zupt).");
+
692 RTABMAP_PARAM(OdomOpenVINS, ZUPTOnlyAtBeginning, bool, false, "If we should only use the zupt at the very beginning static initialization phase.");
+
693
+
694 RTABMAP_PARAM(OdomOpenVINS, AccelerometerNoiseDensity, double, 0.01, "[m/s^2/sqrt(Hz)] (accel \"white noise\").");
+
695 RTABMAP_PARAM(OdomOpenVINS, AccelerometerRandomWalk, double, 0.001, "[m/s^3/sqrt(Hz)] (accel bias diffusion).");
+
696 RTABMAP_PARAM(OdomOpenVINS, GyroscopeNoiseDensity, double, 0.001, "[rad/s/sqrt(Hz)] (gyro \"white noise\").");
+
697 RTABMAP_PARAM(OdomOpenVINS, GyroscopeRandomWalk, double, 0.0001, "[rad/s^2/sqrt(Hz)] (gyro bias diffusion).");
+
698 RTABMAP_PARAM(OdomOpenVINS, UpMSCKFSigmaPx, double, 1.0, "Pixel noise for MSCKF features.");
+
699 RTABMAP_PARAM(OdomOpenVINS, UpMSCKFChi2Multiplier, double, 1.0, "Chi2 multiplier for MSCKF features.");
+
700 RTABMAP_PARAM(OdomOpenVINS, UpSLAMSigmaPx, double, 1.0, "Pixel noise for SLAM features.");
+
701 RTABMAP_PARAM(OdomOpenVINS, UpSLAMChi2Multiplier, double, 1.0, "Chi2 multiplier for SLAM features.");
+
702
+
703 // Odometry Open3D
+
704 RTABMAP_PARAM(OdomOpen3D, MaxDepth, float, 3.0, "Maximum depth.");
+
705 RTABMAP_PARAM(OdomOpen3D, Method, int, 0, "Registration method: 0=PointToPlane, 1=Intensity, 2=Hybrid.");
+
706
+
707 // Odometry cuVSLAM
+
708 RTABMAP_PARAM(OdomCuVSLAM, MulticamMode, int, 0, "cuVSLAM multicam_mode setting: 0=moderate, 1=performance, 2=precision.");
+
709
+
710 // Odometry LIO-SAM
+
711 RTABMAP_PARAM_STR(OdomLIOSAM, ConfigPath, "", "Path to LIO-SAM params.yaml config file. When set, sensor/IMU/feature parameters are loaded from the file and the individual parameters below are ignored.");
+
712 RTABMAP_PARAM(OdomLIOSAM, Sensor, int, 0, "LiDAR sensor: 0=Velodyne, 1=Ouster, 2=Livox");
+
713 RTABMAP_PARAM(OdomLIOSAM, NScan, int, 16, "Number of LiDAR channels (16, 32, 64, 128).");
+
714 RTABMAP_PARAM(OdomLIOSAM, HorizonScan, int, 1800, "Horizontal resolution (Velodyne:1800, Ouster:512/1024/2048).");
+
715 RTABMAP_PARAM(OdomLIOSAM, ImuAccNoise, float, 0.01, "IMU accelerometer white noise.");
+
716 RTABMAP_PARAM(OdomLIOSAM, ImuGyrNoise, float, 0.001, "IMU gyroscope white noise.");
+
717 RTABMAP_PARAM(OdomLIOSAM, ImuAccBiasN, float, 0.0002,"IMU accelerometer bias noise.");
+
718 RTABMAP_PARAM(OdomLIOSAM, ImuGyrBiasN, float, 0.00003,"IMU gyroscope bias noise.");
+
719 RTABMAP_PARAM(OdomLIOSAM, ImuGravity, float, 9.80511,"Gravity magnitude.");
+
720 RTABMAP_PARAM(OdomLIOSAM, EdgeThreshold,float, 1.0, "Edge feature curvature threshold.");
+
721 RTABMAP_PARAM(OdomLIOSAM, SurfThreshold,float, 0.1, "Surface feature curvature threshold.");
+
722 RTABMAP_PARAM(OdomLIOSAM, LinVar, float, 0.01, "Linear output variance.");
+
723 RTABMAP_PARAM(OdomLIOSAM, AngVar, float, 0.01, "Angular output variance.");
+
724
+
725 // Common registration parameters
+
726 RTABMAP_PARAM(Reg, RepeatOnce, bool, true, "Do a second registration with the output of the first registration as guess. Only done if no guess was provided for the first registration (like on loop closure). It can be useful if the registration approach used can use a guess to get better matches.");
+
727 RTABMAP_PARAM(Reg, Strategy, int, 0, "0=Vis, 1=Icp, 2=VisIcp");
+
728 RTABMAP_PARAM(Reg, Force3DoF, bool, false, "Force 3 degrees-of-freedom transform (3Dof: x,y and yaw). Parameters z, roll and pitch will be set to 0.");
+
729
+
730 // Visual registration parameters
+
731 RTABMAP_PARAM(Vis, EstimationType, int, 1, "Motion estimation approach: 0:3D->3D, 1:3D->2D (PnP), 2:2D->2D (Epipolar Geometry)");
+
732 RTABMAP_PARAM(Vis, InlierDistance, float, 0.1, uFormat("[%s = 0] Maximum distance for feature correspondences. Used by 3D->3D estimation approach.", kVisEstimationType().c_str()));
+
733 RTABMAP_PARAM(Vis, RefineIterations, int, 5, uFormat("[%s = 0] Number of iterations used to refine the transformation found by RANSAC. 0 means that the transformation is not refined.", kVisEstimationType().c_str()));
+
734 RTABMAP_PARAM(Vis, PnPReprojError, float, 2, uFormat("[%s = 1] PnP reprojection error.", kVisEstimationType().c_str()));
+
735 RTABMAP_PARAM(Vis, PnPFlags, int, 0, uFormat("[%s = 1] PnP flags: 0=Iterative, 1=EPNP, 2=P3P", kVisEstimationType().c_str()));
+
736#if defined(RTABMAP_G2O) || defined(RTABMAP_ORB_SLAM)
+
737 RTABMAP_PARAM(Vis, PnPRefineIterations, int, 0, uFormat("[%s = 1] Refine iterations. Set to 0 if \"%s\" is also used.", kVisEstimationType().c_str(), kVisBundleAdjustment().c_str()));
+
738#else
+
739 RTABMAP_PARAM(Vis, PnPRefineIterations, int, 1, uFormat("[%s = 1] Refine iterations. Set to 0 if \"%s\" is also used.", kVisEstimationType().c_str(), kVisBundleAdjustment().c_str()));
+
740#endif
+
741 RTABMAP_PARAM(Vis, PnPVarianceMedianRatio, int, 4, uFormat("[%s = 1] Ratio used to compute variance of the estimated transformation if 3D correspondences are provided (should be > 1). The higher it is, the smaller the covariance will be. With accurate depth estimation, this could be set to 2. For depth estimated by stereo, 4 or more maybe used to ignore large errors of very far points.", kVisEstimationType().c_str()));
+
742 RTABMAP_PARAM(Vis, PnPMaxVariance, float, 0.0, uFormat("[%s = 1] Max linear variance between 3D point correspondences after PnP. 0 means disabled.", kVisEstimationType().c_str()));
+
743 RTABMAP_PARAM(Vis, PnPSamplingPolicy, unsigned int, 1, uFormat("[%s = 1] Multi-camera random sampling policy: 0=AUTO, 1=ANY, 2=HOMOGENEOUS. With HOMOGENEOUS policy, RANSAC will be done uniformly against all cameras, so at least 2 matches per camera are required. With ANY policy, RANSAC is not constraint to sample on all cameras at the same time. AUTO policy will use HOMOGENEOUS if there are at least 2 matches per camera, otherwise it will fallback to ANY policy.", kVisEstimationType().c_str()).c_str());
+
744 RTABMAP_PARAM(Vis, PnPSplitLinearCovComponents, bool, false, uFormat("[%s = 1] Compute variance for each linear component instead of using the combined XYZ variance for all linear components.", kVisEstimationType().c_str()).c_str());
+
745
+
746 RTABMAP_PARAM(Vis, EpipolarGeometryVar, float, 0.1, uFormat("[%s = 2] Epipolar geometry maximum variance to accept the transformation.", kVisEstimationType().c_str()));
+
747 RTABMAP_PARAM(Vis, MinInliers, int, 20, "Minimum feature correspondences to compute/accept the transformation.");
+
748 RTABMAP_PARAM(Vis, MeanInliersDistance, float, 0.0, "Maximum distance (m) of the mean distance of inliers from the camera to accept the transformation. 0 means disabled.");
+
749 RTABMAP_PARAM(Vis, MinInliersDistribution, float, 0.0, "Minimum distribution value of the inliers in the image to accept the transformation. The distribution is the second eigen value of the PCA (Principal Component Analysis) on the keypoints of the normalized image [-0.5, 0.5]. The value would be between 0 and 0.5. 0 means disabled.");
+
750
+
751 RTABMAP_PARAM(Vis, Iterations, int, 300, "Maximum iterations to compute the transform.");
+
752#if CV_MAJOR_VERSION > 2 && !defined(HAVE_OPENCV_XFEATURES2D)
+
753 // OpenCV>2 without xFeatures2D module doesn't have BRIEF
+
754 RTABMAP_PARAM(Vis, FeatureType, int, 8, "0=SURF 1=SIFT 2=ORB 3=FAST/FREAK 4=FAST/BRIEF 5=GFTT/FREAK 6=GFTT/BRIEF 7=BRISK 8=GFTT/ORB 9=KAZE 10=ORB-OCTREE 11=SuperPoint 12=SURF/FREAK 13=GFTT/DAISY 14=SURF/DAISY 15=PyDetector 16=SuperPoint-Rpautrat");
+
755#else
+
756 RTABMAP_PARAM(Vis, FeatureType, int, 6, "0=SURF 1=SIFT 2=ORB 3=FAST/FREAK 4=FAST/BRIEF 5=GFTT/FREAK 6=GFTT/BRIEF 7=BRISK 8=GFTT/ORB 9=KAZE 10=ORB-OCTREE 11=SuperPoint 12=SURF/FREAK 13=GFTT/DAISY 14=SURF/DAISY 15=PyDetector 16=SuperPoint-Rpautrat");
+
757#endif
+
758 RTABMAP_PARAM(Vis, MaxFeatures, int, 1000, "0 no limits.");
+
759 RTABMAP_PARAM(Vis, SSC, bool, false, "If true, SSC (Suppression via Square Covering) is applied to limit keypoints.");
+
760 RTABMAP_PARAM(Vis, MaxDepth, float, 0, "Max depth of the features (0 means no limit).");
+
761 RTABMAP_PARAM(Vis, MinDepth, float, 0, "Min depth of the features (0 means no limit).");
+
762 RTABMAP_PARAM(Vis, DepthAsMask, bool, true, "Use depth image as mask when extracting features.");
+
763 RTABMAP_PARAM(Vis, DepthMaskFloorThr, float, 0.0, uFormat("Filter floor from depth mask below specified threshold (m) before extracting features. 0 means disabled. Ignored if %s is false.", kVisDepthAsMask().c_str()));
+
764 RTABMAP_PARAM_STR(Vis, RoiRatios, "0.0 0.0 0.0 0.0", "Region of interest ratios [left, right, top, bottom].");
+
765 RTABMAP_PARAM(Vis, SubPixWinSize, int, 3, "See cv::cornerSubPix().");
+
766 RTABMAP_PARAM(Vis, SubPixIterations, int, 0, "See cv::cornerSubPix(). 0 disables sub pixel refining.");
+
767 RTABMAP_PARAM(Vis, SubPixEps, float, 0.02, "See cv::cornerSubPix().");
+
768 RTABMAP_PARAM(Vis, GridRows, int, 1, uFormat("Number of rows of the grid used to extract uniformly \"%s / grid cells\" features from each cell.", kVisMaxFeatures().c_str()));
+
769 RTABMAP_PARAM(Vis, GridCols, int, 1, uFormat("Number of columns of the grid used to extract uniformly \"%s / grid cells\" features from each cell.", kVisMaxFeatures().c_str()));
+
770 RTABMAP_PARAM(Vis, CorType, int, 0, "Correspondences computation approach: 0=Features Matching, 1=Optical Flow");
+
771 RTABMAP_PARAM(Vis, CorNNType, int, 1, uFormat("[%s=0] kNNFlannNaive=0, kNNFlannKdTree=1, kNNFlannLSH=2, kNNBruteForce=3, kNNBruteForceGPU=4, BruteForceCrossCheck=5, SuperGlue=6, GMS=7. Used for features matching approach.", kVisCorType().c_str()));
+
772 RTABMAP_PARAM(Vis, CorNNDR, float, 0.8, uFormat("[%s=0] NNDR: nearest neighbor distance ratio. Used for knn features matching approach.", kVisCorType().c_str()));
+
773 RTABMAP_PARAM(Vis, CorGuessWinSize, int, 40, uFormat("[%s=0] Matching window size (pixels) around projected points when a guess transform is provided to find correspondences. 0 means disabled.", kVisCorType().c_str()));
+
774 RTABMAP_PARAM(Vis, CorGuessMatchToProjection, bool, false, uFormat("[%s=0] Match frame's corners to source's projected points (when guess transform is provided) instead of projected points to frame's corners.", kVisCorType().c_str()));
+
775 RTABMAP_PARAM(Vis, CorFlowWinSize, int, 16, uFormat("[%s=1] See cv::calcOpticalFlowPyrLK(). Used for optical flow approach.", kVisCorType().c_str()));
+
776 RTABMAP_PARAM(Vis, CorFlowIterations, int, 30, uFormat("[%s=1] See cv::calcOpticalFlowPyrLK(). Used for optical flow approach.", kVisCorType().c_str()));
+
777 RTABMAP_PARAM(Vis, CorFlowEps, float, 0.01, uFormat("[%s=1] See cv::calcOpticalFlowPyrLK(). Used for optical flow approach.", kVisCorType().c_str()));
+
778 RTABMAP_PARAM(Vis, CorFlowMaxLevel, int, 3, uFormat("[%s=1] See cv::calcOpticalFlowPyrLK(). Used for optical flow approach.", kVisCorType().c_str()));
+
779 RTABMAP_PARAM(Vis, CorFlowUseMinEigenVals, bool, true, uFormat("[%s=1] See cv::calcOpticalFlowPyrLK(). Used for optical flow approach. Use minimum eigen values as an error measure, otherwise L1 distance between patches is used as an error measure.", kVisCorType().c_str()));
+
780 RTABMAP_PARAM(Vis, CorFlowMinEigThreshold, float, 1e-4, uFormat("[%s=true] If the minimum eigenvalue of a feature's spatial gradient matrix is less than this threshold, then the feature is filtered out.", kVisCorFlowUseMinEigenVals().c_str()));
+
781 RTABMAP_PARAM(Vis, CorFlowErrorThreshold, float, 20, uFormat("[%s=false] Filter out features with error greater than this threshold.", kVisCorFlowUseMinEigenVals().c_str()));
+
782 RTABMAP_PARAM(Vis, CorFlowGpu, bool, false, uFormat("[%s=1] Enable GPU version of the optical flow approach (only available if OpenCV is built with CUDA). Note that %s is not used in the GPU implementation.", kVisCorType().c_str(), kVisCorFlowUseMinEigenVals().c_str()));
+
783 #if defined(RTABMAP_G2O) || defined(RTABMAP_ORB_SLAM)
+
784 RTABMAP_PARAM(Vis, BundleAdjustment, int, 1, uFormat("Optimization with bundle adjustment. Value matches the %s parameter: 0=disabled (TORO is not BA-capable), 1=g2o, 2=GTSAM, 3=Ceres, 4=cvsba.", kOptimizerStrategy().c_str()));
+
785#else
+
786 RTABMAP_PARAM(Vis, BundleAdjustment, int, 0, uFormat("Optimization with bundle adjustment. Value matches the %s parameter: 0=disabled (TORO is not BA-capable), 1=g2o, 2=GTSAM, 3=Ceres, 4=cvsba.", kOptimizerStrategy().c_str()));
+
787#endif
+
788
+
789 // Features matching approaches
+
790 RTABMAP_PARAM_STR(PyMatcher, Path, "", "Path to python script file (see available ones in rtabmap/corelib/src/python/*). See the header to see where the script should be copied.");
+
791 RTABMAP_PARAM(PyMatcher, Iterations, int, 20, "Sinkhorn iterations. Used by SuperGlue.");
+
792 RTABMAP_PARAM(PyMatcher, Threshold, float, 0.2, "Used by SuperGlue.");
+
793 RTABMAP_PARAM(PyMatcher, Cuda, bool, true, "Used by SuperGlue.");
+
794 RTABMAP_PARAM_STR(PyMatcher, Model, "indoor", "For SuperGlue, set only \"indoor\" or \"outdoor\". For OANet, set path to one of the pth file (e.g., \"OANet/model/gl3d/sift-4000/model_best.pth\").");
+
795
+
796 RTABMAP_PARAM(GMS, WithRotation, bool, false, "Take rotation transformation into account.");
+
797 RTABMAP_PARAM(GMS, WithScale, bool, false, "Take scale transformation into account.");
+
798 RTABMAP_PARAM(GMS, ThresholdFactor, double, 6.0, "The higher, the less matches.");
+
799
+
800 // Global descriptor approaches
+
801 RTABMAP_PARAM_STR(PyDescriptor, Path, "", "Path to python script file (see available ones in rtabmap/corelib/src/pydescriptor/*). See the header to see where the script should be used.");
+
802 RTABMAP_PARAM(PyDescriptor, Dim, int, 4096, "Descriptor dimension.");
+
803
+
804 // ICP registration parameters
+
805#ifdef RTABMAP_POINTMATCHER
+
806 RTABMAP_PARAM(Icp, Strategy, int, 1, "ICP implementation: 0=Point Cloud Library, 1=libpointmatcher, 2=CCCoreLib (CloudCompare).");
+
807#else
+
808 RTABMAP_PARAM(Icp, Strategy, int, 0, "ICP implementation: 0=Point Cloud Library, 1=libpointmatcher, 2=CCCoreLib (CloudCompare).");
+
809#endif
+
810 RTABMAP_PARAM(Icp, MaxTranslation, float, 0.2, "Maximum ICP translation correction accepted (m).");
+
811 RTABMAP_PARAM(Icp, MaxRotation, float, 0.78, "Maximum ICP rotation correction accepted (rad).");
+
812 RTABMAP_PARAM(Icp, VoxelSize, float, 0.05, "Uniform sampling voxel size (0=disabled).");
+
813 RTABMAP_PARAM(Icp, DownsamplingStep, int, 1, "Downsampling step size (1=no sampling). This is done before uniform sampling.");
+
814 RTABMAP_PARAM(Icp, RangeMin, float, 0, "Minimum range filtering (0=disabled).");
+
815 RTABMAP_PARAM(Icp, RangeMax, float, 0, "Maximum range filtering (0=disabled).");
+
816#ifdef RTABMAP_POINTMATCHER
+
817 RTABMAP_PARAM(Icp, MaxCorrespondenceDistance, float, 0.1, "Max distance for point correspondences.");
+
818#else
+
819 RTABMAP_PARAM(Icp, MaxCorrespondenceDistance, float, 0.05, "Max distance for point correspondences.");
+
820#endif
+
821 RTABMAP_PARAM(Icp, ReciprocalCorrespondences, bool, true, "To be a valid correspondence, the corresponding point in target cloud to point in source cloud should be both their closest closest correspondence.");
+
822 RTABMAP_PARAM(Icp, Iterations, int, 30, "Max iterations.");
+
823 RTABMAP_PARAM(Icp, Epsilon, float, 0, "Set the transformation epsilon (maximum allowable difference between two consecutive transformations) in order for an optimization to be considered as having converged to the final solution.");
+
824 RTABMAP_PARAM(Icp, CorrespondenceRatio, float, 0.1, "Ratio of matching correspondences to accept the transform.");
+
825 RTABMAP_PARAM(Icp, Force4DoF, bool, false, uFormat("Limit ICP to x, y, z and yaw DoF. Available if %s > 0.", kIcpStrategy().c_str()));
+
826 RTABMAP_PARAM(Icp, FiltersEnabled, int, 3, "Flag to enable filters: 1=\"from\" cloud only, 2=\"to\" cloud only, 3=both.");
+
827#ifdef RTABMAP_POINTMATCHER
+
828 RTABMAP_PARAM(Icp, PointToPlane, bool, true, "Use point to plane ICP.");
+
829#else
+
830 RTABMAP_PARAM(Icp, PointToPlane, bool, false, "Use point to plane ICP.");
+
831#endif
+
832 RTABMAP_PARAM(Icp, PointToPlaneK, int, 5, "Number of neighbors to compute normals for point to plane if the cloud doesn't have already normals.");
+
833 RTABMAP_PARAM(Icp, PointToPlaneRadius, float, 0.0, "Search radius to compute normals for point to plane if the cloud doesn't have already normals.");
+
834 RTABMAP_PARAM(Icp, PointToPlaneGroundNormalsUp, float, 0.0, "Invert normals on ground if they are pointing down (useful for ring-like 3D LiDARs). 0 means disabled, 1 means only normals perfectly aligned with -z axis. This is only done with 3D scans.");
+
835 RTABMAP_PARAM(Icp, PointToPlaneMinComplexity, float, 0.02, uFormat("Minimum structural complexity (0.0=low, 1.0=high) of the scan to do PointToPlane registration, otherwise PointToPoint registration is done instead and strategy from %s is used. This check is done only when %s=true.", kIcpPointToPlaneLowComplexityStrategy().c_str(), kIcpPointToPlane().c_str()));
+
836 RTABMAP_PARAM(Icp, PointToPlaneComplexityCentered, bool, false, uFormat("If false (default), the complexity metric uses the uncentered second-moment matrix (1/N) * sum(n_i * n_i^T), whose smallest eigenvalue directly measures how well the surface normals span R^N. If true, uses centered PCA (cv::PCA covariance) for backwards compatibility -- but the centered metric is known to mis-classify perpendicular-surface scenes as degenerate when normals are consistently viewpoint-flipped (only N distinct directions in N-D collapse to rank N-1 after centering). For true degeneracies (parallel surfaces, e.g. corridors) the two metrics agree because the normal mean is zero. The %s threshold of 0.02 works under either setting.", kIcpPointToPlaneMinComplexity().c_str()));
+
837 RTABMAP_PARAM(Icp, PointToPlaneLowComplexityStrategy, int, 1, uFormat("If structural complexity is below %s: set to 0 so that the transform is automatically rejected, set to 1 (default, legacy) to recompute the transform with PointToPoint and limit its correction in axes with most constraints (e.g., for a corridor-like environment, the resulting transform will be limited in y and yaw, x will taken from the guess), set to 2 to recompute the transform with PointToPoint and accept it \"as is\", set to 3 to keep the PointToPlane transform and apply the same axis-constrained projection as strategy 1.", kIcpPointToPlaneMinComplexity().c_str()));
+
838 RTABMAP_PARAM(Icp, OutlierRatio, float, 0.85, uFormat("Outlier ratio. For libpointmatcher (%s=1), sets TrimmedDistOutlierFilter/ratio for convenience when configuration file is not set. For CCCoreLib (%s=2), sets \"finalOverlapRatio\". For PCL (%s=0), if 0<value<1, installs a RANSAC correspondence rejector with inlier threshold = value * %s. The value should be between 0 and 1.", kIcpStrategy().c_str(), kIcpStrategy().c_str(), kIcpStrategy().c_str(), kIcpMaxCorrespondenceDistance().c_str()));
+
839 RTABMAP_PARAM_STR(Icp, DebugExportFormat, "", "Export scans used for ICP in the specified format (a warning on terminal will be shown with the file paths used). Supported formats are \"pcd\", \"ply\" or \"vtk\". If logger level is debug, from and to scans will stamped, so previous files won't be overwritten.");
+
840
+
841 // libpointmatcher
+
842 RTABMAP_PARAM_STR(Icp, PMConfig, "", uFormat("Configuration file (*.yaml) used by libpointmatcher. Note that data filters set for libpointmatcher are done after filtering done by rtabmap (i.e., %s, %s), so make sure to disable those in rtabmap if you want to use only those from libpointmatcher. Parameters %s, %s and %s are also ignored if configuration file is set.", kIcpVoxelSize().c_str(), kIcpDownsamplingStep().c_str(), kIcpIterations().c_str(), kIcpEpsilon().c_str(), kIcpMaxCorrespondenceDistance().c_str()).c_str());
+
843 RTABMAP_PARAM(Icp, PMMatcherKnn, int, 1, "KDTreeMatcher/knn: number of nearest neighbors to consider it the reference. For convenience when configuration file is not set.");
+
844 RTABMAP_PARAM(Icp, PMMatcherEpsilon, float, 0.0, "KDTreeMatcher/epsilon: approximation to use for the nearest-neighbor search. For convenience when configuration file is not set.");
+
845 RTABMAP_PARAM(Icp, PMMatcherIntensity, bool, false, uFormat("KDTreeMatcher: among nearest neighbors, keep only the one with the most similar intensity. This only work with %s>1.", kIcpPMMatcherKnn().c_str()));
+
846
+
847 RTABMAP_PARAM(Icp, CCSamplingLimit, unsigned int, 50000, "Maximum number of points per cloud (they are randomly resampled below this limit otherwise).");
+
848 RTABMAP_PARAM(Icp, CCFilterOutFarthestPoints, bool, false, "If true, the algorithm will automatically ignore farthest points from the reference, for better convergence.");
+
849 RTABMAP_PARAM(Icp, CCMaxFinalRMS, float, 0.2, "Maximum final RMS error.");
+
850
+
851 // Stereo disparity
+
852 RTABMAP_PARAM(Stereo, WinWidth, int, 15, "Window width.");
+
853 RTABMAP_PARAM(Stereo, WinHeight, int, 3, "Window height.");
+
854 RTABMAP_PARAM(Stereo, Iterations, int, 30, "Maximum iterations.");
+
855 RTABMAP_PARAM(Stereo, MaxLevel, int, 5, "Maximum pyramid level.");
+
856 RTABMAP_PARAM(Stereo, MinDisparity, float, 0.5, "Minimum disparity.");
+
857 RTABMAP_PARAM(Stereo, MaxDisparity, float, 128.0, "Maximum disparity.");
+
858 RTABMAP_PARAM(Stereo, OpticalFlow, bool, true, "Use optical flow to find stereo correspondences, otherwise a simple block matching approach is used.");
+
859 RTABMAP_PARAM(Stereo, SSD, bool, true, uFormat("[%s=false] Use Sum of Squared Differences (SSD) window, otherwise Sum of Absolute Differences (SAD) window is used.", kStereoOpticalFlow().c_str()));
+
860 RTABMAP_PARAM(Stereo, Eps, double, 0.01, uFormat("[%s=true] Epsilon stop criterion.", kStereoOpticalFlow().c_str()));
+
861 RTABMAP_PARAM(Stereo, UseMinEigenVals, bool, true, uFormat("[%s=true] Use minimum eigen values as an error measure, otherwise L1 distance between patches is used as an error measure.", kStereoOpticalFlow().c_str()));
+
862 RTABMAP_PARAM(Stereo, MinEigThreshold, double, 1e-4, uFormat("[%s=true] If the minimum eigenvalue of a feature's spatial gradient matrix is less than this threshold, then the feature is filtered out.", kStereoUseMinEigenVals().c_str()));
+
863 RTABMAP_PARAM(Stereo, ErrorThreshold, double, 50, uFormat("[%s=false] Filter out features with error greater than this threshold.", kStereoUseMinEigenVals().c_str()));
+
864 RTABMAP_PARAM(Stereo, Gpu, bool, false, uFormat("[%s=true] Enable GPU version of the optical flow approach (only available if OpenCV is built with CUDA). Note that %s is not used in the GPU implementation.", kStereoOpticalFlow().c_str(), kStereoUseMinEigenVals().c_str()));
+
865
+
866 RTABMAP_PARAM(Stereo, DenseStrategy, int, 0, "0=cv::StereoBM, 1=cv::StereoSGBM");
+
867
+
868 RTABMAP_PARAM(StereoBM, BlockSize, int, 15, "See cv::StereoBM");
+
869 RTABMAP_PARAM(StereoBM, MinDisparity, int, 0, "See cv::StereoBM");
+
870 RTABMAP_PARAM(StereoBM, NumDisparities, int, 128, "See cv::StereoBM");
+
871 RTABMAP_PARAM(StereoBM, PreFilterSize, int, 9, "See cv::StereoBM");
+
872 RTABMAP_PARAM(StereoBM, PreFilterCap, int, 31, "See cv::StereoBM");
+
873 RTABMAP_PARAM(StereoBM, UniquenessRatio, int, 15, "See cv::StereoBM");
+
874 RTABMAP_PARAM(StereoBM, TextureThreshold, int, 10, "See cv::StereoBM");
+
875 RTABMAP_PARAM(StereoBM, SpeckleWindowSize, int, 100, "See cv::StereoBM");
+
876 RTABMAP_PARAM(StereoBM, SpeckleRange, int, 4, "See cv::StereoBM");
+
877 RTABMAP_PARAM(StereoBM, Disp12MaxDiff, int, -1, "See cv::StereoBM");
+
878
+
879 RTABMAP_PARAM(StereoSGBM, BlockSize, int, 15, "See cv::StereoSGBM");
+
880 RTABMAP_PARAM(StereoSGBM, MinDisparity, int, 0, "See cv::StereoSGBM");
+
881 RTABMAP_PARAM(StereoSGBM, NumDisparities, int, 128, "See cv::StereoSGBM");
+
882 RTABMAP_PARAM(StereoSGBM, PreFilterCap, int, 31, "See cv::StereoSGBM");
+
883 RTABMAP_PARAM(StereoSGBM, UniquenessRatio, int, 20, "See cv::StereoSGBM");
+
884 RTABMAP_PARAM(StereoSGBM, SpeckleWindowSize, int, 100, "See cv::StereoSGBM");
+
885 RTABMAP_PARAM(StereoSGBM, SpeckleRange, int, 4, "See cv::StereoSGBM");
+
886 RTABMAP_PARAM(StereoSGBM, Disp12MaxDiff, int, 1, "See cv::StereoSGBM");
+
887 RTABMAP_PARAM(StereoSGBM, P1, int, 2, "See cv::StereoSGBM");
+
888 RTABMAP_PARAM(StereoSGBM, P2, int, 5, "See cv::StereoSGBM");
+
889#if CV_MAJOR_VERSION < 3
+
890 RTABMAP_PARAM(StereoSGBM, Mode, int, 0, "See cv::StereoSGBM");
+
891#else
+
892 RTABMAP_PARAM(StereoSGBM, Mode, int, 2, "See cv::StereoSGBM");
+
893#endif
+
894
+
895 // Occupancy Grid
+
896 RTABMAP_PARAM(Grid, Sensor, int, 1, "Create occupancy grid from selected sensor: 0=laser scan, 1=depth image(s) or 2=both laser scan and depth image(s).");
+
897 RTABMAP_PARAM(Grid, DepthDecimation, unsigned int, 4, uFormat("[%s=true] Decimation of the depth image before creating cloud.", kGridDepthDecimation().c_str()));
+
898 RTABMAP_PARAM(Grid, RangeMin, float, 0.0, "Minimum range from sensor.");
+
899 RTABMAP_PARAM(Grid, RangeMax, float, 5.0, "Maximum range from sensor. 0=inf.");
+
900 RTABMAP_PARAM_STR(Grid, DepthRoiRatios, "0.0 0.0 0.0 0.0", uFormat("[%s>=1] Region of interest ratios [left, right, top, bottom].", kGridSensor().c_str()));
+
901 RTABMAP_PARAM(Grid, FootprintLength, float, 0.0, "Footprint length used to filter points over the footprint of the robot.");
+
902 RTABMAP_PARAM(Grid, FootprintWidth, float, 0.0, "Footprint width used to filter points over the footprint of the robot. Footprint length should be set.");
+
903 RTABMAP_PARAM(Grid, FootprintHeight, float, 0.0, "Footprint height used to filter points over the footprint of the robot. Footprint length and width should be set.");
+
904 RTABMAP_PARAM(Grid, ScanDecimation, int, 1, uFormat("[%s=0 or 2] Decimation of the laser scan before creating cloud.", kGridSensor().c_str()));
+
905 RTABMAP_PARAM(Grid, CellSize, float, 0.05, "Resolution of the occupancy grid.");
+
906 RTABMAP_PARAM(Grid, PreVoxelFiltering, bool, true, uFormat("Input cloud is downsampled by voxel filter (voxel size is \"%s\") before doing segmentation of obstacles and ground.", kGridCellSize().c_str()));
+
907 RTABMAP_PARAM(Grid, MapFrameProjection, bool, false, "Projection in map frame. On a 3D terrain and a fixed local camera transform (the cloud is created relative to ground), you may want to disable this to do the projection in robot frame instead.");
+
908 RTABMAP_PARAM(Grid, NormalsSegmentation, bool, true, "Segment ground from obstacles using point normals, otherwise a fast passthrough is used.");
+
909 RTABMAP_PARAM(Grid, MaxObstacleHeight, float, 0.0, "Maximum obstacles height (0=disabled).");
+
910 RTABMAP_PARAM(Grid, MinGroundHeight, float, 0.0, "Minimum ground height (0=disabled).");
+
911 RTABMAP_PARAM(Grid, MaxGroundHeight, float, 0.0, uFormat("Maximum ground height (0=disabled). Should be set if \"%s\" is false.", kGridNormalsSegmentation().c_str()));
+
912 RTABMAP_PARAM(Grid, MaxGroundAngle, float, 45, uFormat("[%s=true] Maximum angle (degrees) between point's normal to ground's normal to label it as ground. Points with higher angle difference are considered as obstacles.", kGridNormalsSegmentation().c_str()));
+
913 RTABMAP_PARAM(Grid, NormalK, int, 20, uFormat("[%s=true] K neighbors to compute normals.", kGridNormalsSegmentation().c_str()));
+
914 RTABMAP_PARAM(Grid, ClusterRadius, float, 0.1, uFormat("[%s=true] Cluster maximum radius.", kGridNormalsSegmentation().c_str()));
+
915 RTABMAP_PARAM(Grid, MinClusterSize, int, 10, uFormat("[%s=true] Minimum cluster size to project the points.", kGridNormalsSegmentation().c_str()));
+
916 RTABMAP_PARAM(Grid, FlatObstacleDetected, bool, true, uFormat("[%s=true] Flat obstacles detected.", kGridNormalsSegmentation().c_str()));
+
917#ifdef RTABMAP_OCTOMAP
+
918 RTABMAP_PARAM(Grid, 3D, bool, true, uFormat("A 3D occupancy grid is required if you want an OctoMap (3D ray tracing). Set to false if you want only a 2D map, the cloud will be projected on xy plane. A 2D map can be still generated if checked, but it requires more memory and time to generate it. Ignored if laser scan is 2D and \"%s\" is 0.", kGridSensor().c_str()));
+
919#else
+
920 RTABMAP_PARAM(Grid, 3D, bool, false, uFormat("A 3D occupancy grid is required if you want an OctoMap (3D ray tracing). Set to false if you want only a 2D map, the cloud will be projected on xy plane. A 2D map can be still generated if checked, but it requires more memory and time to generate it. Ignored if laser scan is 2D and \"%s\" is 0.", kGridSensor().c_str()));
+
921#endif
+
922 RTABMAP_PARAM(Grid, GroundIsObstacle, bool, false, uFormat("[%s=true] Ground segmentation (%s) is ignored, all points are obstacles. Use this only if you want an OctoMap with ground identified as an obstacle (e.g., with an UAV).", kGrid3D().c_str(), kGridNormalsSegmentation().c_str()));
+
923 RTABMAP_PARAM(Grid, NoiseFilteringRadius, float, 0.0, "Noise filtering radius (0=disabled). Done after segmentation.");
+
924 RTABMAP_PARAM(Grid, NoiseFilteringMinNeighbors, int, 5, "Noise filtering minimum neighbors.");
+
925 RTABMAP_PARAM(Grid, Scan2dUnknownSpaceFilled, bool, false, uFormat("Unknown space filled. Only used with 2D laser scans. Use %s to set maximum range if laser scan max range is to set.", kGridRangeMax().c_str()));
+
926 RTABMAP_PARAM(Grid, RayTracing, bool, false, uFormat("Ray tracing is done for each occupied cell, filling unknown space between the sensor and occupied cells. If %s=true, RTAB-Map should be built with OctoMap support, otherwise 3D ray tracing is ignored.", kGrid3D().c_str()));
+
927 RTABMAP_PARAM(GridGlobal, UpdateError, float, 0.01, "Graph changed detection error (m). Update map only if poses in new optimized graph have moved more than this value.");
+
928 RTABMAP_PARAM(GridGlobal, FootprintRadius, float, 0.0, "Footprint radius (m) used to clear all obstacles under the graph.");
+
929 RTABMAP_PARAM(GridGlobal, MinSize, float, 0.0, "Minimum map size (m).");
+
930 RTABMAP_PARAM(GridGlobal, Eroded, bool, false, "Erode obstacle cells.");
+
931 RTABMAP_PARAM(GridGlobal, MaxNodes, int, 0, "Maximum nodes assembled in the map starting from the last node (0=unlimited).");
+
932 RTABMAP_PARAM(GridGlobal, AltitudeDelta, float, 0, "Assemble only nodes that have the same altitude of +-delta meters of the current pose (0=disabled). This is used to generate 2D occupancy grid based on the current altitude (e.g., multi-floor building).");
+
933 RTABMAP_PARAM(GridGlobal, OccupancyThr, float, 0.5, "Occupancy threshold (value between 0 and 1).");
+
934 RTABMAP_PARAM(GridGlobal, ProbHit, float, 0.7, "Probability of a hit (value between 0.5 and 1).");
+
935 RTABMAP_PARAM(GridGlobal, ProbMiss, float, 0.4, "Probability of a miss (value between 0 and 0.5).");
+
936 RTABMAP_PARAM(GridGlobal, ProbClampingMin, float, 0.1192, "Probability clamping minimum (value between 0 and 1).");
+
937 RTABMAP_PARAM(GridGlobal, ProbClampingMax, float, 0.971, "Probability clamping maximum (value between 0 and 1).");
+
938 RTABMAP_PARAM(GridGlobal, FloodFillDepth, unsigned int, 0, "Flood fill filter (0=disabled), used to remove empty cells outside the map. The flood fill is done at the specified depth (between 1 and 16) of the OctoMap.");
+
939
+
940 RTABMAP_PARAM(Marker, Strategy, int, 0, "Marker detection implementation: 0=OpenCV, 1=AprilTag");
+
941 RTABMAP_PARAM(Marker, Dictionary, int, 0, "Dictionary to use: DICT_ARUCO_4X4_50=0, DICT_ARUCO_4X4_100=1, DICT_ARUCO_4X4_250=2, DICT_ARUCO_4X4_1000=3, DICT_ARUCO_5X5_50=4, DICT_ARUCO_5X5_100=5, DICT_ARUCO_5X5_250=6, DICT_ARUCO_5X5_1000=7, DICT_ARUCO_6X6_50=8, DICT_ARUCO_6X6_100=9, DICT_ARUCO_6X6_250=10, DICT_ARUCO_6X6_1000=11, DICT_ARUCO_7X7_50=12, DICT_ARUCO_7X7_100=13, DICT_ARUCO_7X7_250=14, DICT_ARUCO_7X7_1000=15, DICT_ARUCO_ORIGINAL = 16, DICT_APRILTAG_16h5=17, DICT_APRILTAG_25h9=18, DICT_APRILTAG_36h10=19, DICT_APRILTAG_36h11=20, DICT_ARUCO_MIP_36H12=21");
+
942 RTABMAP_PARAM(Marker, Length, float, 0, "The length (m) of the markers' side. Value <=0 means automatic marker length estimation using the depth image (the camera should look at the marker perpendicularly for initialization). If 0, the length is estimated only on the first marker detected, then re-used for all next detections (i.e., this assumes that markers have all the same length). With <0, the length is estimated once for each unique marker, then re-used for next detections with the same marker ID.");
+
943 RTABMAP_PARAM_STR(Marker, Lengths, "", uFormat("List of markers to detect. Format is the marker's ID followed by its length (in meters), multiple markers are separated by a vertical line (\"id1 length|id2 length\"). We can also define a range of markers with \"id1:id2 length\" (id2 included). If empty, all markers of the chosen dictionary can be detected and their length is set/estimated based on %s. For example, to detect markers 12 and 14 with lengths of 8 and 15 cm respectively, and all markers between 30 and 40 with a length of 10 cm, set \"12 0.08|14 0.15|30:40 0.1\".", kMarkerLength().c_str()).c_str());
+
944 RTABMAP_PARAM(Marker, MaxDepthError, float, 0.01, uFormat("Maximum depth error between all corners of a marker when estimating the marker length (when %s is 0). The smaller it is, the more perpendicular the camera should be toward the marker to initialize the length.", kMarkerLength().c_str()));
+
945 RTABMAP_PARAM(Marker, VarianceLinear, float, 0.001, uFormat("Linear variance to set on marker detections. If %s is enabled and %s=2 (GTSAM): it is the variance of the range factor, with 9999 to disable range factor and to do only bearing.", kMarkerVarianceOrientationIgnored().c_str(), kOptimizerStrategy().c_str()));
+
946 RTABMAP_PARAM(Marker, VarianceAngular, float, 0.01, uFormat("Angular variance to set on marker detections. If %s is enabled, it is ignored with %s=1 (g2o) and it corresponds to bearing variance with %s=2 (GTSAM).", kMarkerVarianceOrientationIgnored().c_str(), kOptimizerStrategy().c_str(), kOptimizerStrategy().c_str()));
+
947 RTABMAP_PARAM(Marker, VarianceOrientationIgnored, bool, false, uFormat("When this setting is false, the landmark's orientation is optimized during graph optimization. When this setting is true, only the position of the landmark is optimized. This can be useful when the landmark's orientation estimation is not reliable. Note that for %s=1 (g2o), only %s needs be set if we ignore orientation. For %s=2 (GTSAM), instead of optimizing the landmark's position directly, a bearing/range factor is used, with %s as the variance of the range factor (with 9999 to optimize the position with only a bearing factor) and %s as the variance of the bearing factor (pitch/yaw).", kOptimizerStrategy().c_str(), kMarkerVarianceLinear().c_str(), kOptimizerStrategy().c_str(), kMarkerVarianceLinear().c_str(), kMarkerVarianceAngular().c_str()));
+
948 RTABMAP_PARAM(Marker, MaxRange, float, 0.0, "Maximum range in which markers will be detected. <=0 for unlimited range.");
+
949 RTABMAP_PARAM(Marker, MinRange, float, 0.0, "Miniminum range in which markers will be detected. <=0 for unlimited range.");
+
950 RTABMAP_PARAM_STR(Marker, Priors, "", "World prior locations of the markers. The map will be transformed in marker's world frame when a tag is detected. Format is the marker's ID followed by its position (angles in rad), multiple markers are separated by vertical line (\"id1 x y z roll pitch yaw|id2 x y z roll pitch yaw\"). Example: \"1 0 0 1 0 0 0|2 1 0 1 0 0 1.57\" (marker 2 is 1 meter forward than marker 1 with 90 deg yaw rotation).");
+
951 RTABMAP_PARAM(Marker, PriorsVarianceLinear, float, 0.001, "Linear variance to set on marker priors.");
+
952 RTABMAP_PARAM(Marker, PriorsVarianceAngular, float, 0.001, "Angular variance to set on marker priors.");
+
953
+
954 RTABMAP_PARAM(MarkerAprilTag, NThreads, int, 1, "How many threads should be used?");
+
955 RTABMAP_PARAM(MarkerAprilTag, QuadDecimate, float, 1.0, "Detection of quads can be done on a lower-resolution image, improving speed at a cost of pose accuracy and a slight decrease in detection rate. Decoding the binary payload is still done at full resolution.");
+
956 RTABMAP_PARAM(MarkerAprilTag, QuadSigma, float, 0.0, "What Gaussian blur should be applied to the segmented image (used for quad detection?) Parameter is the standard deviation in pixels. Very noisy images benefit from non-zero values (e.g. 0.8).");
+
957 RTABMAP_PARAM(MarkerAprilTag, RefineEdges, bool, true, uFormat("When true, the edges of the each quad are adjusted to \"snap to\" strong gradients nearby. This is useful when decimation is employed, as it can increase the quality of the initial quad estimate substantially. Generally recommended to be on (true). Very computationally inexpensive. Option is ignored if %s = 1.", kMarkerAprilTagQuadDecimate().c_str()));
+
958 RTABMAP_PARAM(MarkerAprilTag, DecodeSharpening, double, 0.25, "How much sharpening should be done to decoded images? This can help decode small tags but may or may not help in odd lighting conditions or low light conditions.");
+
959 RTABMAP_PARAM(MarkerAprilTag, Debug, bool, false, uFormat("When true, write a variety of debugging images to the working directory where the app started (not %s) at various stages through the detection process. (Somewhat slow).", kRtabmapWorkingDirectory().c_str()));
+
960
+
961 RTABMAP_PARAM(MarkerOpenCV, CornerRefinementMethod, int, 0, "Corner refinement method for OpenCV strategy (0: None, 1: Subpixel, 2:contour, 3: AprilTag2). For OpenCV <3.3.0, this is \"doCornerRefinement\" parameter: set 0 for false and 1 for true.");
+
962
+
963 RTABMAP_PARAM(ImuFilter, MadgwickGain, double, 0.1, "Gain of the filter. Higher values lead to faster convergence but more noise. Lower values lead to slower convergence but smoother signal, belongs in [0, 1].");
+
964 RTABMAP_PARAM(ImuFilter, MadgwickZeta, double, 0.0, "Gyro drift gain (approx. rad/s), belongs in [-1, 1].");
+
965
+
966 RTABMAP_PARAM(ImuFilter, ComplementaryGainAcc, double, 0.01, "Gain parameter for the complementary filter, belongs in [0, 1].");
+
967 RTABMAP_PARAM(ImuFilter, ComplementaryBiasAlpha, double, 0.01, "Bias estimation gain parameter, belongs in [0, 1].");
+
968 RTABMAP_PARAM(ImuFilter, ComplementaryDoBiasEstimation, bool, true, "Parameter whether to do bias estimation or not.");
+
969 RTABMAP_PARAM(ImuFilter, ComplementaryDoAdpativeGain, bool, true, "Parameter whether to do adaptive gain or not.");
+
970
+
971public:
+
972 virtual ~Parameters();
+
973
+
+
978 static const ParametersMap & getDefaultParameters()
+
979 {
+
980 return parameters_;
+
981 }
+
+
982
+
987 static std::string getType(const std::string & paramKey);
+
988
+
993 static std::string getDescription(const std::string & paramKey);
+
994
+
995 static bool parse(const ParametersMap & parameters, const std::string & key, bool & value);
+
996 static bool parse(const ParametersMap & parameters, const std::string & key, int & value);
+
997 static bool parse(const ParametersMap & parameters, const std::string & key, unsigned int & value);
+
998 static bool parse(const ParametersMap & parameters, const std::string & key, float & value);
+
999 static bool parse(const ParametersMap & parameters, const std::string & key, double & value);
+
1000 static bool parse(const ParametersMap & parameters, const std::string & key, std::string & value);
+
1001 static void parse(const ParametersMap & parameters, ParametersMap & parametersOut);
+
1002
+
1003 static const char * showUsage();
+
1004 static ParametersMap parseArguments(int argc, char * argv[], bool onlyParameters = false);
+
1005
+
1006 static std::string getVersion();
+
1007 static std::string getDefaultDatabaseName();
+
1008
+
1009 static std::string serialize(const ParametersMap & parameters);
+
1010 static ParametersMap deserialize(const std::string & parameters);
+
1011
+
1012 static bool isFeatureParameter(const std::string & param);
+
1013 static ParametersMap getDefaultOdometryParameters(bool stereo = false, bool vis = true, bool icp = false);
+
1014 static ParametersMap getDefaultParameters(const std::string & group);
+
1019 static ParametersMap filterParameters(const ParametersMap & parameters, const std::string & group, bool remove = false);
+
1020
+
1021 static void readINI(const std::string & configFile, ParametersMap & parameters, bool modifiedOnly = false);
+
1022 static void readINIStr(const std::string & configContent, ParametersMap & parameters, bool modifiedOnly = false);
+
1023 static void writeINI(const std::string & configFile, const ParametersMap & parameters);
+
1024
+
1029 static const std::map<std::string, std::pair<bool, std::string> > & getRemovedParameters();
+
1030
+
1034 static const ParametersMap & getBackwardCompatibilityMap();
+
1035
+
1036 static std::string createDefaultWorkingDirectory();
+
1037
+
1038private:
+
1039 Parameters();
+
1040
+
1041private:
+
1042 static ParametersMap parameters_;
+
1043 static ParametersMap parametersType_;
+
1044 static ParametersMap descriptions_;
+
1045 static Parameters instance_;
+
1046
+
1047 static std::map<std::string, std::pair<bool, std::string> > removedParameters_;
+
1048 static ParametersMap backwardCompatibilityMap_;
+
1049};
+
+
1050
+
1051}
+
1052
+
1053#endif /* PARAMETERS_H_ */
+
Some conversion functions.
+
std::string UTILITE_EXPORT uFormat(const char *fmt,...)
+
BRISK detector and descriptor.
Definition Features2d.h:599
+
FAST corner detector only (no descriptor).
Definition Features2d.h:416
+
Good-features-to-track detector (Shi–Tomasi / Harris).
Definition Features2d.h:494
+
KAZE detector and descriptor (OpenCV 3+).
Definition Features2d.h:621
+
ORB detector and descriptor (optional GPU).
Definition Features2d.h:384
+
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:88
+ +
static std::string getType(const std::string &paramKey)
+
static ParametersMap filterParameters(const ParametersMap &parameters, const std::string &group, bool remove=false)
+
static const ParametersMap & getDefaultParameters()
Definition Parameters.h:978
+
static const ParametersMap & getBackwardCompatibilityMap()
+
static std::string getDescription(const std::string &paramKey)
+
static const std::map< std::string, std::pair< bool, std::string > > & getRemovedParameters()
+
Top-level RTAB-Map SLAM pipeline (mapping, localization and loop closure).
Definition Rtabmap.h:194
+
SIFT detector and descriptor (optional GPU / CudaSift).
Definition Features2d.h:349
+
SURF detector and descriptor (non-free / xfeatures2d depending on OpenCV build).
Definition Features2d.h:321
+
Block Matching algorithm for dense stereo matching.
Definition StereoBM.h:47
+
Semi-Global Block Matching algorithm for dense stereo matching.
Definition StereoSGBM.h:51
+
Sparse stereo matching using block matching.
Definition Stereo.h:55
+
SuperPoint (rpautrat) via Torch + Python (RTAB-Map must be built with libtorch and Python support).
Definition Features2d.h:698
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/ParticleFilter_8h_source.html b/preview/pr-1492/api/latest/ParticleFilter_8h_source.html new file mode 100644 index 00000000..68a23bb0 --- /dev/null +++ b/preview/pr-1492/api/latest/ParticleFilter_8h_source.html @@ -0,0 +1,280 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/ParticleFilter.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ParticleFilter.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef PARTICLEFILTER_H_
+
29#define PARTICLEFILTER_H_
+
30
+ + +
33
+
34
+
35namespace rtabmap {
+
36
+
37// taken from http://www.developpez.net/forums/d544518/c-cpp/c/equivalent-randn-matlab-c/
+
38#define TWOPI (6.2831853071795864769252867665590057683943387987502) /* 2 * pi */
+
39
+
40/*
+
41 RAND is a macro which returns a pseudo-random numbers from a uniform
+
42 distribution on the interval [0 1]
+
43*/
+
44#define RAND (rand())/((double) RAND_MAX)
+
45
+
46/*
+
47 RANDN is a macro which returns a pseudo-random numbers from a normal
+
48 distribution with mean zero and standard deviation one. This macro uses Box
+
49 Muller's algorithm
+
50*/
+
51#define RANDN (sqrt(-2.0*log(RAND))*cos(TWOPI*RAND))
+
52
+
53std::vector<double> cumSum(const std::vector<double> & v)
+
54{
+
55 std::vector<double> cum(v.size());
+
56 double sum = 0;
+
57 for(unsigned int i=0; i<v.size(); ++i)
+
58 {
+
59 cum[i] = v[i] + sum;
+
60 sum += v[i];
+
61 }
+
62 return cum;
+
63}
+
64
+
65std::vector<double> resample(const std::vector<double> & p, // particles
+
66 const std::vector<double> & w, // weights
+
67 bool normalizeWeights = false)
+
68{
+
69 std::vector<double> np; //new particles
+
70 if(p.size() != w.size() || p.size() == 0)
+
71 {
+
72 UERROR("particles (%d) and weights (%d) are not the same size", p.size(), w.size());
+
73 return np;
+
74 }
+
75
+
76 std::vector<double> cs;
+
77 if(normalizeWeights)
+
78 {
+
79 double wSum = uSum(w);
+
80 std::vector<double> wNorm(w.size());
+
81 for(unsigned int i=0; i<w.size(); ++i)
+
82 {
+
83 wNorm[i] = w[i]/wSum;
+
84 }
+
85 cs = cumSum(wNorm); // cumulative sum
+
86 }
+
87 else
+
88 {
+
89 cs = cumSum(w); // cumulative sum
+
90 }
+
91 for(unsigned int j=0; j<cs.size(); ++j)
+
92 {
+
93 cs[j]/=cs.back();
+
94 }
+
95
+
96 np.resize(p.size());
+
97 for(unsigned int i=0; i<np.size(); ++i)
+
98 {
+
99 unsigned int index = 0;
+
100 double randnum = RAND;
+
101 for(unsigned int j=0; j<cs.size(); ++j)
+
102 {
+
103 if(randnum < cs[j])
+
104 {
+
105 index = j;
+
106 break;
+
107 }
+
108 }
+
109 np[i] = p[index];
+
110 }
+
111 return np;
+
112}
+
113
+
114
+
+ +
116{
+
117public:
+
118 ParticleFilter(unsigned int nParticles = 200,
+
119 double noise = 0.1,
+
120 double lambda = 10.0,
+
121 double initValue = 0.0) :
+
122 noise_(noise),
+
123 lambda_(lambda)
+
124 {
+
125 particles_.resize(nParticles, initValue);
+
126 }
+
127
+
128 void init(double initValue = 0.0f)
+
129 {
+
130 particles_ = std::vector<double>(particles_.size(), initValue);
+
131 }
+
132
+
133 double filter(double val)
+
134 {
+
135 std::vector<double> weights(particles_.size(), 1);
+
136 double sumWeights = 0;
+
137 for(unsigned int i=0; i<particles_.size(); ++i)
+
138 {
+
139 // add noise to particle
+
140 particles_[i] += noise_ * RANDN;
+
141
+
142 // compute weight
+
143 double dist = fabs(particles_[i] - val);
+
144 //dist = sqrt(dist*dist);
+
145 double w = exp(-lambda_*dist);
+
146 if(uIsFinite(w) && w > 0)
+
147 {
+
148 weights[i] = w;
+
149 }
+
150 sumWeights += weights[i];
+
151 }
+
152
+
153
+
154 //normalize and compute estimated value
+
155 double value =0.0;
+
156 for(unsigned int i=0; i<weights.size(); ++i)
+
157 {
+
158 weights[i] /= sumWeights;
+
159 value += weights[i] * particles_[i];
+
160 }
+
161
+
162 //resample the particles
+
163 particles_ = resample(particles_, weights, false);
+
164
+
165 return value;
+
166 }
+
167
+
168private:
+
169 std::vector<double> particles_;
+
170 double noise_;
+
171 double lambda_;
+
172};
+
+
173
+
174}
+
175
+
176
+
177#endif /* PARTICLEFILTER_H_ */
+
ULogger class and convenient macros.
+
#define UERROR(...)
Definition ULogger.h:62
+
Basic mathematics functions.
+
T uSum(const std::list< T > &list)
Definition UMath.h:318
+
bool uIsFinite(const T &value)
Definition UMath.h:53
+ + +
+ + + + diff --git a/preview/pr-1492/api/latest/Posix_2UThreadC_8h_source.html b/preview/pr-1492/api/latest/Posix_2UThreadC_8h_source.html new file mode 100644 index 00000000..39997b45 --- /dev/null +++ b/preview/pr-1492/api/latest/Posix_2UThreadC_8h_source.html @@ -0,0 +1,505 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/Posix/UThreadC.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UThreadC.h
+
+
+
1
+
2// Written by Phillip Sitbon
+
3// Copyright 2003
+
4//
+
5// Modified by Mathieu Labbe
+
6//
+
7// Posix/Thread.h
+
8// - Posix thread
+
9//
+
11
+
12#ifndef _U_Thread_Posix_
+
13#define _U_Thread_Posix_
+
14
+
15#include "rtabmap/utilite/USemaphore.h"
+
16#include "rtabmap/utilite/UMutex.h"
+
17
+
18#include <pthread.h>
+
19
+
23inline void uSleep(unsigned int ms)
+
24{
+
25 struct timespec req;
+
26 struct timespec rem;
+
27 req.tv_sec = ms / 1000;
+
28 req.tv_nsec = (ms - req.tv_sec * 1000) * 1000 * 1000;
+
29 nanosleep (&req, &rem);
+
30}
+
31
+
35inline void uSleepMicro(unsigned int us)
+
36{
+
37 struct timespec req;
+
38 struct timespec rem;
+
39 req.tv_sec = us / 1000000;
+
40 req.tv_nsec = (us - req.tv_sec * 1000000) * 1000;
+
41 nanosleep (&req, &rem);
+
42}
+
43
+
47inline void uSleepNano(unsigned int ns)
+
48{
+
49 struct timespec req;
+
50 struct timespec rem;
+
51 req.tv_sec = ns / 1000000000;
+
52 req.tv_nsec = (ns - req.tv_sec * 1000000000);
+
53 nanosleep (&req, &rem);
+
54}
+
55
+
56
+
57#define InvalidHandle 0
+
58#define THREAD_HANDLE pthread_t
+
59
+
60typedef void *( * pthread_fn )( void * );
+
61
+
62template
+
63<
+
64 typename Thread_T
+
65>
+
+ +
67{
+
68 private:
+
69 struct Instance;
+
70
+
71 public:
+
72 typedef Thread_T & Thread_R;
+
73 typedef const Thread_T & Thread_C_R;
+
74
+
75 typedef THREAD_HANDLE Handle;
+
76 typedef void ( *Handler)( Thread_R );
+
77
+
78 virtual ~UThreadC() {}
+
79
+
80 protected:
+
81 UThreadC() {}
+
82
+
83 virtual void ThreadMain( Thread_R ) = 0;
+
84
+
85 static void Exit()
+
86 { pthread_exit(0); }
+
87#ifndef ANDROID
+
88 static void TestCancel()
+
89 { pthread_testcancel(); }
+
90#endif
+
91
+
92 static Handle Self()
+
93 { return (Handle)pthread_self(); }
+
94
+
95 public:
+
96
+
97 static int Create(
+
98 const Handler & Function,
+
99 Thread_C_R Param,
+
100 Handle * const & H = 0,
+
101 const bool & CreateDetached = false,
+
102 const unsigned int & StackSize = 0,
+
103 const bool & CancelEnable = false,
+
104 const bool & CancelAsync = false
+
105 )
+
106 {
+
107 M_Create().lock();
+
108 pthread_attr_t attr;
+
109 pthread_attr_init(&attr);
+
110
+
111 if ( CreateDetached )
+
112 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
+
113
+
114 if ( StackSize )
+
115 pthread_attr_setstacksize(&attr,StackSize);
+
116
+
117 Instance I(Param,0,Function,CancelEnable,CancelAsync);
+
118
+
119 Handle h=InvalidHandle;
+
120 int R = pthread_create((pthread_t *)&h,&attr,(pthread_fn)ThreadMainHandler,(void *)&I);
+
121
+
122 pthread_attr_destroy(&attr);
+
123
+
124 if(H) *H = h;
+
125 if ( !R ) S_Create().acquire();
+
126
+
127 M_Create().unlock();
+
128 return R;
+
129 }
+
130
+
131 int Create(
+
132 Thread_C_R Param,
+
133 Handle * const & H = 0,
+
134 const bool & CreateDetached = false,
+
135 const unsigned int & StackSize = 0,
+
136 const bool & CancelEnable = false,
+
137 const bool & CancelAsync = false
+
138 ) const
+
139 {
+
140 M_Create().lock();
+
141 pthread_attr_t attr;
+
142 pthread_attr_init(&attr);
+
143
+
144 if ( CreateDetached )
+
145 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
+
146
+
147 if ( StackSize )
+
148 pthread_attr_setstacksize(&attr,StackSize);
+
149
+
150 Instance I(Param,const_cast<UThreadC *>(this),0,CancelEnable,CancelAsync);
+
151
+
152 Handle h=InvalidHandle;
+
153 int R = pthread_create((pthread_t *)&h,&attr,(pthread_fn)ThreadMainHandler,(void *)&I);
+
154
+
155 pthread_attr_destroy(&attr);
+
156
+
157 if(H) *H = h;
+
158 if ( !R ) S_Create().acquire();
+
159
+
160 M_Create().unlock();
+
161 return R;
+
162 }
+
163
+
164 static int Join( Handle H )
+
165 { return pthread_join(H,0); }
+
166
+
167#ifndef ANDROID
+
168 static int Kill( Handle H )
+
169 { return pthread_cancel(H); }
+
170#endif
+
171
+
172 static int Detach( Handle H )
+
173 { return pthread_detach(H); }
+
174
+
175 private:
+
176
+
177 static const UMutex &M_Create() { static UMutex M; return M; }
+
178 static USemaphore &S_Create() { static USemaphore S; return S; }
+
179
+
180 static void *ThreadMainHandler( Instance *Param )
+
181 {
+
182 Instance I(*Param);
+
183 Thread_T Data(I.Data);
+
184 S_Create().release();
+
185
+
186#ifndef ANDROID
+
187 if ( I.Flags & 1 /*CancelEnable*/ )
+
188 {
+
189 pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
+
190
+
191 if ( I.Flags & 2 /*CancelAsync*/ )
+
192 pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);
+
193 else
+
194 pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL);
+
195 }
+
196 else
+
197 {
+
198 pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL);
+
199 }
+
200#endif
+
201
+
202 if ( I.Owner )
+
203 I.Owner->ThreadMain(Data);
+
204 else
+
205 I.pFN(Data);
+
206
+
207 return 0;
+
208 }
+
209
+
210 struct Instance
+
211 {
+
212 Instance( Thread_C_R P, UThreadC<Thread_T> *const &O, const UThreadC<Thread_T>::Handler &pH = 0, const bool &CE=false, const bool &CA=false )
+
213 : Data(P), Owner(O), pFN(pH), Flags(0) { if ( CE ) Flags|=1; if ( CA ) Flags|=2; }
+
214
+
215 Thread_C_R Data;
+
216 UThreadC<Thread_T> * Owner;
+
217 Handler pFN;
+
218 unsigned char Flags;
+
219 };
+
220};
+
+
221
+
223// Explicit specialization, no thread parameters
+
224//
+
225template<>
+
+
226class UThreadC<void>
+
227{
+
228 private:
+
229 struct Instance;
+
230
+
231 public:
+
232 typedef THREAD_HANDLE Handle;
+
233 typedef void ( *Handler)();
+
234
+
235 virtual ~UThreadC() {}
+
236
+
237 protected:
+
238 UThreadC() {}
+
239
+
240 virtual void ThreadMain() = 0;
+
241
+
242 static void Exit()
+
243 { pthread_exit(0); }
+
244
+
245#ifndef ANDROID
+
246 static void TestCancel()
+
247 { pthread_testcancel(); }
+
248#endif
+
249
+
250 static Handle Self()
+
251 { return (Handle)pthread_self(); }
+
252
+
253 public:
+
254
+
255 static int Create(
+
256 const Handler & Function,
+
257 Handle * const & H = 0,
+
258 const bool & CreateDetached = false,
+
259 const unsigned int & StackSize = 0,
+
260 const bool & CancelEnable = false,
+
261 const bool & CancelAsync = false
+
262 )
+
263 {
+
264 M_Create().lock();
+
265 pthread_attr_t attr;
+
266 pthread_attr_init(&attr);
+
267
+
268 if ( CreateDetached )
+
269 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
+
270
+
271 if ( StackSize )
+
272 pthread_attr_setstacksize(&attr,StackSize);
+
273
+
274 Instance I(0,Function,CancelEnable,CancelAsync);
+
275
+
276 Handle h=InvalidHandle;
+
277 int R = pthread_create((pthread_t *)&h,&attr,(pthread_fn)ThreadMainHandler,(void *)&I);
+
278
+
279 pthread_attr_destroy(&attr);
+
280
+
281 if(H) *H = h;
+
282 if ( !R ) S_Create().acquire();
+
283
+
284 M_Create().unlock();
+
285 return R;
+
286 }
+
287
+
288 int Create(
+
289 Handle * const & H = 0,
+
290 const bool & CreateDetached = false,
+
291 const unsigned int & StackSize = 0,
+
292 const bool & CancelEnable = false,
+
293 const bool & CancelAsync = false
+
294 ) const
+
295 {
+
296 M_Create().lock();
+
297 pthread_attr_t attr;
+
298 pthread_attr_init(&attr);
+
299
+
300 if ( CreateDetached )
+
301 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
+
302
+
303 if ( StackSize )
+
304 pthread_attr_setstacksize(&attr,StackSize);
+
305
+
306 Instance I(const_cast<UThreadC *>(this),0,CancelEnable,CancelAsync);
+
307
+
308 Handle h=InvalidHandle;
+
309 int R = pthread_create((pthread_t *)&h,&attr,(pthread_fn)ThreadMainHandler,(void *)&I);
+
310
+
311 pthread_attr_destroy(&attr);
+
312
+
313 if(H) *H = h;
+
314 if ( !R ) S_Create().acquire();
+
315
+
316 M_Create().unlock();
+
317 return R;
+
318 }
+
319
+
320 int Create(
+
321 unsigned long & ThreadId,
+
322 Handle * const & H = 0,
+
323 const bool & CreateDetached = false,
+
324 const unsigned int & StackSize = 0,
+
325 const bool & CancelEnable = false,
+
326 const bool & CancelAsync = false
+
327 ) const
+
328 {
+
329 M_Create().lock();
+
330 pthread_attr_t attr;
+
331 pthread_attr_init(&attr);
+
332
+
333 if ( CreateDetached )
+
334 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
+
335
+
336 if ( StackSize )
+
337 pthread_attr_setstacksize(&attr,StackSize);
+
338
+
339 Instance I(const_cast<UThreadC *>(this),0,CancelEnable,CancelAsync);
+
340
+
341 *H = InvalidHandle;
+
342 int R = pthread_create((pthread_t *)&(*H),&attr,(pthread_fn)ThreadMainHandler,(void *)&I);
+
343
+
344 ThreadId = (unsigned long)*H;
+
345
+
346 pthread_attr_destroy(&attr);
+
347
+
348 if ( !R ) S_Create().acquire();
+
349
+
350 M_Create().unlock();
+
351 return R;
+
352 }
+
353
+
354 static int Join( Handle H )
+
355 { return pthread_join(H,0); }
+
356
+
357#ifndef ANDROID
+
358 static int Kill( Handle H )
+
359 { return pthread_cancel(H); }
+
360#endif
+
361
+
362 static int Detach( Handle H )
+
363 { return pthread_detach(H); }
+
364
+
365 private:
+
366
+
367 static const UMutex &M_Create() { static UMutex M; return M; }
+
368 static USemaphore &S_Create() { static USemaphore S; return S; }
+
369
+
370 static void *ThreadMainHandler( Instance *Param )
+
371 {
+
372 Instance I(*Param);
+
373 S_Create().release();
+
374
+
375#ifndef ANDROID
+
376 if ( I.Flags & 1 /*CancelEnable*/ )
+
377 {
+
378 pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
+
379
+
380 if ( I.Flags & 2 /*CancelAsync*/ )
+
381 pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);
+
382 else
+
383 pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL);
+
384 }
+
385 else
+
386 {
+
387 pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL);
+
388 }
+
389#endif
+
390
+
391 if ( I.Owner )
+
392 I.Owner->ThreadMain();
+
393 else
+
394 I.pFN();
+
395
+
396 return 0;
+
397 }
+
398
+
399 struct Instance
+
400 {
+
401 Instance( UThreadC<void> *const &O, const UThreadC<void>::Handler &pH = 0, const bool &CE=false, const bool &CA=false )
+
402 : pFN(pH), Owner(O), Flags(0) { if ( CE ) Flags|=1; if ( CA ) Flags|=2; }
+
403
+ +
405 UThreadC<void> * Owner;
+
406 unsigned char Flags;
+
407
+
408 };
+
409};
+
+
410
+
411#endif // !_U_Thread_Posix_
+ +
int unlock() const
Definition UMutex.h:120
+
int lock() const
Definition UMutex.h:88
+ +
bool acquire(int n=1, int ms=0)
Definition USemaphore.h:108
+
int release(int n=1)
Definition USemaphore.h:197
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/ProgressState_8h_source.html b/preview/pr-1492/api/latest/ProgressState_8h_source.html new file mode 100644 index 00000000..3495fd6f --- /dev/null +++ b/preview/pr-1492/api/latest/ProgressState_8h_source.html @@ -0,0 +1,162 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/ProgressState.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ProgressState.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_INCLUDE_RTABMAP_CORE_PROGRESSSTATE_H_
+
29#define CORELIB_INCLUDE_RTABMAP_CORE_PROGRESSSTATE_H_
+
30
+ +
32
+
33namespace rtabmap {
+
34
+
+ +
36{
+
37public:
+
38 ProgressState():canceled_(false){}
+
39 virtual bool callback(const std::string & msg) const
+
40 {
+
41 if(!msg.empty())
+
42 UDEBUG("msg=%s", msg.c_str());
+
43 return true;
+
44 }
+
45 virtual ~ProgressState(){}
+
46
+
47 void setCanceled(bool canceled)
+
48 {
+
49 canceled_ = canceled;
+
50 }
+
51 bool isCanceled() const
+
52 {
+
53 return canceled_;
+
54 }
+
55
+
56private:
+
57 bool canceled_;
+
58};
+
+
59
+
60}
+
61
+
62#endif /* CORELIB_INCLUDE_RTABMAP_CORE_PROGRESSSTATE_H_ */
+
ULogger class and convenient macros.
+
#define UDEBUG(...)
Definition ULogger.h:59
+ + +
+ + + + diff --git a/preview/pr-1492/api/latest/PythonInterface_8h_source.html b/preview/pr-1492/api/latest/PythonInterface_8h_source.html new file mode 100644 index 00000000..2bf6d8a3 --- /dev/null +++ b/preview/pr-1492/api/latest/PythonInterface_8h_source.html @@ -0,0 +1,143 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/PythonInterface.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PythonInterface.h
+
+
+
1/*
+
2 * PythonInterface.h
+
3 *
+
4 * Created on: Jan. 14, 2021
+
5 * Author: mathieu
+
6 */
+
7
+
8#ifndef CORELIB_SRC_PYTHON_PYTHONINTERFACE_H_
+
9#define CORELIB_SRC_PYTHON_PYTHONINTERFACE_H_
+
10
+
11#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
12
+
13#include <string>
+
14#include <rtabmap/utilite/UMutex.h>
+
15
+
16namespace pybind11 {
+
17class scoped_interpreter;
+
18class gil_scoped_release;
+
19}
+
20
+
21namespace rtabmap {
+
22
+
+
28class RTABMAP_CORE_EXPORT PythonInterface
+
29{
+
30public:
+
31 // Pass a caller tag (e.g. class name) so the main-thread assertion
+
32 // can report who triggered the first construction.
+
33 static PythonInterface & instance(const std::string & caller = "");
+
34
+
35 PythonInterface(const PythonInterface &) = delete;
+
36 PythonInterface & operator=(const PythonInterface &) = delete;
+
37
+
38private:
+
39 explicit PythonInterface(const std::string & caller);
+ +
41
+
42 pybind11::scoped_interpreter* guard_;
+
43 pybind11::gil_scoped_release* release_;
+
44};
+
+
45
+
46std::string RTABMAP_CORE_EXPORT getPythonTraceback();
+
47
+
48}
+
49
+
50#endif /* CORELIB_SRC_PYTHON_PYTHONINTERFACE_H_ */
+ + +
+ + + + diff --git a/preview/pr-1492/api/latest/Recovery_8h_source.html b/preview/pr-1492/api/latest/Recovery_8h_source.html new file mode 100644 index 00000000..d3a58cf3 --- /dev/null +++ b/preview/pr-1492/api/latest/Recovery_8h_source.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Recovery.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Recovery.h
+
+
+
1/*
+
2Copyright (c) 2010-2017, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef RECOVERY_H_
+
29#define RECOVERY_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <string>
+
34
+
35namespace rtabmap {
+
36
+
37class ProgressState;
+
38
+
47bool RTABMAP_CORE_EXPORT databaseRecovery(
+
48 const std::string & corruptedDatabase,
+
49 bool keepCorruptedDatabase = true,
+
50 std::string * errorMsg = 0,
+
51 ProgressState * progressState = 0);
+
52
+
53}
+
54
+
55
+
56#endif /* RECOVERY_H_ */
+ + +
bool RTABMAP_CORE_EXPORT databaseRecovery(const std::string &corruptedDatabase, bool keepCorruptedDatabase=true, std::string *errorMsg=0, ProgressState *progressState=0)
+
+ + + + diff --git a/preview/pr-1492/api/latest/RegistrationIcp_8h_source.html b/preview/pr-1492/api/latest/RegistrationIcp_8h_source.html new file mode 100644 index 00000000..e08bacd4 --- /dev/null +++ b/preview/pr-1492/api/latest/RegistrationIcp_8h_source.html @@ -0,0 +1,220 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/RegistrationIcp.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
RegistrationIcp.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef REGISTRATIONICP_H_
+
29#define REGISTRATIONICP_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/Registration.h>
+
34#include <rtabmap/core/Signature.h>
+
35
+
36namespace rtabmap {
+
37
+
38// Geometrical registration
+
+
39class RTABMAP_CORE_EXPORT RegistrationIcp : public Registration
+
40{
+
41public:
+
+ +
43 kIcpUndef = -1,
+
44 kIcpPCL = 0,
+
45 kIcpPointMatcher = 1,
+
46 kIcpCCCoreLib = 2,
+
47 kIcpEnd = 3
+
48 };
+
+
49
+
50public:
+
58 static bool available(IcpStrategy strategy);
+
59
+
64 static const char * strategyName(IcpStrategy strategy);
+
65
+
66 // take ownership of child
+
67 RegistrationIcp(const ParametersMap & parameters = ParametersMap(), Registration * child = 0);
+
68 RegistrationIcp(IcpStrategy strategy, const ParametersMap & parameters = ParametersMap(), Registration * child = 0);
+
69 virtual ~RegistrationIcp();
+
70
+
71 virtual void parseParameters(const ParametersMap & parameters);
+
72
+
73protected:
+ +
75 Signature & from,
+
76 Signature & to,
+
77 Transform guess,
+
78 RegistrationInfo & info) const;
+
79 virtual bool isScanRequiredImpl() const {return true;}
+
80 virtual bool canUseGuessImpl() const {return true;}
+
81 virtual float getMinGeometryCorrespondencesRatioImpl() const {return _correspondenceRatio;}
+
82
+
83private:
+
84 IcpStrategy _strategy;
+
85 float _maxTranslation;
+
86 float _maxRotation;
+
87 float _voxelSize;
+
88 int _downsamplingStep;
+
89 float _rangeMin;
+
90 float _rangeMax;
+
91 float _maxCorrespondenceDistance;
+
92 bool _reciprocalCorrespondences;
+
93 int _maxIterations;
+
94 float _epsilon;
+
95 float _correspondenceRatio;
+
96 bool _force4DoF;
+
97 int _filtersEnabled;
+
98 bool _pointToPlane;
+
99 int _pointToPlaneK;
+
100 float _pointToPlaneRadius;
+
101 float _pointToPlaneGroundNormalsUp;
+
102 float _pointToPlaneMinComplexity;
+
103 bool _pointToPlaneComplexityCentered;
+
104 int _pointToPlaneLowComplexityStrategy;
+
105 std::string _libpointmatcherConfig;
+
106 int _libpointmatcherKnn;
+
107 float _libpointmatcherEpsilon;
+
108 bool _libpointmatcherIntensity;
+
109 float _outlierRatio;
+
110 unsigned int _ccSamplingLimit;
+
111 bool _ccFilterOutFarthestPoints;
+
112 double _ccMaxFinalRMS;
+
113 std::string _debugExportFormat;
+
114 std::string _workingDir;
+
115
+
116 void * _libpointmatcherICP;
+
117 void * _libpointmatcherICPFilters;
+
118};
+
+
119
+
120}
+
121
+
122#endif /* REGISTRATIONICP_H_ */
+ + +
static bool available(IcpStrategy strategy)
Returns true if strategy is built into this rtabmap binary.
+
virtual Transform computeTransformationImpl(Signature &from, Signature &to, Transform guess, RegistrationInfo &info) const
Strategy-specific registration.
+
virtual void parseParameters(const ParametersMap &parameters)
Parses Reg/RepeatOnce, Reg/Force3DoF and forwards to child_ if set.
+
static const char * strategyName(IcpStrategy strategy)
Human-readable name for strategy ("PCL", "libpointmatcher", "CCCoreLib", or "Unknown").
+
Statistics and diagnostics returned by Registration.
+
Abstract base for registering two observations (visual, ICP, or both).
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/RegistrationInfo_8h_source.html b/preview/pr-1492/api/latest/RegistrationInfo_8h_source.html new file mode 100644 index 00000000..ed1e5f7a --- /dev/null +++ b/preview/pr-1492/api/latest/RegistrationInfo_8h_source.html @@ -0,0 +1,232 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/RegistrationInfo.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
RegistrationInfo.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef REGISTRATIONINFO_H_
+
29#define REGISTRATIONINFO_H_
+
30
+
31
+
32namespace rtabmap {
+
33
+
+ +
48{
+
49public:
+ +
51 totalTime(0.0),
+
52 inliers(0),
+
53 inliersRatio(0),
+ + +
56 matches(0),
+
57 variance(0.0f),
+ +
59 icpTranslation(0.0f),
+
60 icpRotation(0.0f),
+ + + +
64 icpRMS(0),
+ +
66
+
67 {
+
68 }
+
69
+
+ +
72 {
+
73 RegistrationInfo output;
+
74 output.totalTime = totalTime;
+
75 output.covariance = covariance.clone();
+
76 output.rejectedMsg = rejectedMsg;
+
77 output.inliers = inliers;
+ + + +
81 output.matches = matches;
+ +
83 output.variance = variance;
+ + +
86 output.icpRotation = icpRotation;
+ + + +
90 output.icpRMS = icpRMS;
+ +
92 return output;
+
93 }
+
+
94
+
95 cv::Mat covariance;
+
96 std::string rejectedMsg;
+
97 double totalTime;
+
99 // RegistrationVis
+ + + + +
104 std::vector<int> inliersIDs;
+ +
106 float variance;
+
107 std::vector<int> matchesIDs;
+
108 std::vector<int> projectedIDs;
+
109 std::vector<int> inliersPerCam;
+
110 std::vector<int> matchesPerCam;
+
112 // RegistrationIcp
+ + + + + + +
119 float icpRMS;
+ +
121};
+
+
122
+
123}
+
124
+
125#endif /* REGISTRATIONINFO_H_ */
+
Statistics and diagnostics returned by Registration.
+ +
std::vector< int > inliersPerCam
+ + + + +
std::vector< int > inliersIDs
+ + + + + + + + + + + +
std::vector< int > matchesIDs
+
std::vector< int > projectedIDs
+
std::vector< int > matchesPerCam
+
RegistrationInfo copyWithoutData() const
Copies scalar metrics and covariance; omits correspondence ID vectors.
+ + +
+ + + + diff --git a/preview/pr-1492/api/latest/RegistrationVis_8h_source.html b/preview/pr-1492/api/latest/RegistrationVis_8h_source.html new file mode 100644 index 00000000..44961ecc --- /dev/null +++ b/preview/pr-1492/api/latest/RegistrationVis_8h_source.html @@ -0,0 +1,234 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/RegistrationVis.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
RegistrationVis.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef REGISTRATIONVIS_H_
+
29#define REGISTRATIONVIS_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/Registration.h>
+
34#include <rtabmap/core/Signature.h>
+
35
+
36namespace rtabmap {
+
37
+
38class Feature2D;
+
39
+
40#ifdef RTABMAP_PYTHON
+
41class PyMatcher;
+
42#endif
+
43
+
+
60class RTABMAP_CORE_EXPORT RegistrationVis : public Registration
+
61{
+
62public:
+
64 RegistrationVis(const ParametersMap & parameters = ParametersMap(), Registration * child = 0);
+
65 virtual ~RegistrationVis();
+
66
+
68 virtual void parseParameters(const ParametersMap & parameters);
+
69
+
71 float getInlierDistance() const {return _inlierDistance;}
+
73 int getIterations() const {return _iterations;}
+
75 int getMinInliers() const {return _minInliers;}
+
77 int getNNType() const {return _nnType;}
+
79 float getNNDR() const {return _nndr;}
+
81 int getEstimationType() const {return _estimationType;}
+
82
+
84 const Feature2D * getDetector() const {return _detectorFrom;}
+
85
+
86protected:
+ +
88 Signature & from,
+
89 Signature & to,
+
90 Transform guess,
+
91 RegistrationInfo & info) const;
+
92
+
93 virtual bool isImageRequiredImpl() const {return true;}
+
94 virtual bool canUseGuessImpl() const {return _correspondencesApproach != 0 || _guessWinSize>0;}
+
95 virtual int getMinVisualCorrespondencesImpl() const {return _minInliers;}
+
96
+
97private:
+
98 int _minInliers;
+
99 float _inlierDistance;
+
100 int _iterations;
+
101 int _refineIterations;
+
102 float _epipolarGeometryVar;
+
103 int _estimationType;
+
104 float _PnPReprojError;
+
105 int _PnPFlags;
+
106 int _PnPRefineIterations;
+
107 int _PnPVarMedianRatio;
+
108 float _PnPMaxVar;
+
109 bool _PnPSplitLinearCovarianceComponents;
+
110 unsigned int _multiSamplingPolicy;
+
111 int _correspondencesApproach;
+
112 int _flowWinSize;
+
113 int _flowIterations;
+
114 float _flowEps;
+
115 int _flowMaxLevel;
+
116 bool _flowGpu;
+
117 bool _flowUseMinEigenVals;
+
118 float _flowMinEigThreshold;
+
119 float _flowErrorThreshold;
+
120 float _nndr;
+
121 int _nnType;
+
122 bool _gmsWithRotation;
+
123 bool _gmsWithScale;
+
124 double _gmsThresholdFactor;
+
125 int _guessWinSize;
+
126 bool _guessMatchToProjection;
+
127 int _bundleAdjustment;
+
128 bool _depthAsMask;
+
129 float _maskFloorThreshold;
+
130 float _minInliersDistributionThr;
+
131 float _maxInliersMeanDistance;
+
132
+
133 ParametersMap _featureParameters;
+
134 ParametersMap _bundleParameters;
+
135
+
136 Feature2D * _detectorFrom;
+
137 Feature2D * _detectorTo;
+
138
+
139#ifdef RTABMAP_PYTHON
+
140 PyMatcher * _pyMatcher;
+
141#endif
+
142};
+
+
143
+
144}
+
145
+
146#endif /* REGISTRATION_H_ */
+
Abstract 2D feature detector and descriptor extractor for visual SLAM.
Definition Features2d.h:145
+
Statistics and diagnostics returned by Registration.
+
Visual registration between two signatures using features and geometry.
+
const Feature2D * getDetector() const
+
float getInlierDistance() const
+
virtual void parseParameters(const ParametersMap &parameters)
Parses Vis/ and feature parameters; recreates feature detectors.
+ + + +
virtual Transform computeTransformationImpl(Signature &from, Signature &to, Transform guess, RegistrationInfo &info) const
Strategy-specific registration.
+
RegistrationVis(const ParametersMap &parameters=ParametersMap(), Registration *child=0)
child is owned and deleted in the destructor.
+ + +
Abstract base for registering two observations (visual, ICP, or both).
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Registration_8h_source.html b/preview/pr-1492/api/latest/Registration_8h_source.html new file mode 100644 index 00000000..dc54d155 --- /dev/null +++ b/preview/pr-1492/api/latest/Registration_8h_source.html @@ -0,0 +1,239 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Registration.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Registration.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef RTABMAP_REGISTRATION_H_
+
29#define RTABMAP_REGISTRATION_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/Parameters.h>
+
34#include <rtabmap/core/Signature.h>
+
35#include <rtabmap/core/RegistrationInfo.h>
+
36
+
37namespace rtabmap {
+
38
+
+
60class RTABMAP_CORE_EXPORT Registration
+
61{
+
62public:
+
+
64 enum Type {
+
65 kTypeUndef = -1,
+
66 kTypeVis = 0,
+
67 kTypeIcp = 1,
+
68 kTypeVisIcp = 2
+
69 };
+
+ + +
74
+
75public:
+
77 static Registration * create(const ParametersMap & parameters);
+
79 static Registration * create(Type & type, const ParametersMap & parameters = ParametersMap());
+
80
+
81public:
+
82 virtual ~Registration();
+
84 virtual void parseParameters(const ParametersMap & parameters);
+
85
+
87 bool isImageRequired() const;
+
89 bool isScanRequired() const;
+
91 bool isUserDataRequired() const;
+
92
+
94 bool canUseGuess() const;
+
95
+ + +
100
+
102 bool repeatOnce() const {return repeatOnce_;}
+
104 bool force3DoF() const {return force3DoF_;}
+
105
+ +
108
+ +
111 const Signature & from,
+
112 const Signature & to,
+
113 Transform guess = Transform::getIdentity(),
+
114 RegistrationInfo * info = 0) const;
+ +
117 const SensorData & from,
+
118 const SensorData & to,
+
119 Transform guess = Transform::getIdentity(),
+
120 RegistrationInfo * info = 0) const;
+
121
+ +
124 Signature & from,
+
125 Signature & to,
+
126 Transform guess = Transform::getIdentity(),
+
127 RegistrationInfo * info = 0) const;
+
128
+
129protected:
+
131 Registration(const ParametersMap & parameters = ParametersMap(), Registration * child = 0);
+
132
+ +
139 Signature & from,
+
140 Signature & to,
+
141 Transform guess,
+
142 RegistrationInfo & info) const = 0;
+
143
+
144 virtual bool isImageRequiredImpl() const {return false;}
+
145 virtual bool isScanRequiredImpl() const {return false;}
+
146 virtual bool isUserDataRequiredImpl() const {return false;}
+
147 virtual bool canUseGuessImpl() const {return false;}
+
148 virtual int getMinVisualCorrespondencesImpl() const {return 0;}
+
149 virtual float getMinGeometryCorrespondencesRatioImpl() const {return 0.0f;}
+
150
+
151private:
+
152 bool repeatOnce_;
+
153 bool force3DoF_;
+
154 Registration * child_;
+
155
+
156};
+
+
157
+
158}
+
159
+
160#endif /* RTABMAP_REGISTRATION_H_ */
+
Statistics and diagnostics returned by Registration.
+
Abstract base for registering two observations (visual, ICP, or both).
+
virtual void parseParameters(const ParametersMap &parameters)
Parses Reg/RepeatOnce, Reg/Force3DoF and forwards to child_ if set.
+
static Registration * create(Type &type, const ParametersMap &parameters=ParametersMap())
Creates a registration of type (may be adjusted, e.g. to kTypeVis). Caller owns the pointer.
+
virtual Transform computeTransformationImpl(Signature &from, Signature &to, Transform guess, RegistrationInfo &info) const =0
Strategy-specific registration.
+
bool isUserDataRequired() const
True if user data is needed (parent or child).
+
Transform computeTransformation(const SensorData &from, const SensorData &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
Registers two SensorData observations (wrapped as signatures).
+
Transform computeTransformationMod(Signature &from, Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
Registers from to to; signatures may be modified by the implementation.
+
static Registration * create(const ParametersMap &parameters)
Creates a registration from Reg/Strategy in parameters. Caller owns the pointer.
+
bool repeatOnce() const
+
static double COVARIANCE_LINEAR_EPSILON
Minimum diagonal value for linear covariance (m²).
+
Registration(const ParametersMap &parameters=ParametersMap(), Registration *child=0)
child is owned and deleted in the destructor.
+
bool isScanRequired() const
True if laser scans are needed (parent or child).
+
Transform computeTransformation(const Signature &from, const Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
Registers from to to using immutable signatures (copied internally).
+
bool canUseGuess() const
True if the strategy can refine an initial guess (parent or child).
+ +
int getMinVisualCorrespondences() const
Minimum visual inliers required (max of parent and child thresholds).
+
void setChildRegistration(Registration *child)
Replaces child_; takes ownership of child.
+
float getMinGeometryCorrespondencesRatio() const
Minimum geometry inlier ratio required (max of parent and child thresholds).
+
bool isImageRequired() const
True if images are needed (parent or child).
+
static double COVARIANCE_ANGULAR_EPSILON
Minimum diagonal value for angular covariance (rad²).
+
Type
Registration strategy selected by Reg/Strategy.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/RtabmapEvent_8h_source.html b/preview/pr-1492/api/latest/RtabmapEvent_8h_source.html new file mode 100644 index 00000000..3fd995a4 --- /dev/null +++ b/preview/pr-1492/api/latest/RtabmapEvent_8h_source.html @@ -0,0 +1,392 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/RtabmapEvent.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
RtabmapEvent.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef RTABMAPEVENT_H_
+
29#define RTABMAPEVENT_H_
+
30
+
31
+
32
+
33#include <rtabmap/utilite/UEvent.h>
+ +
35#include "rtabmap/core/Statistics.h"
+
36#include "rtabmap/core/Parameters.h"
+
37
+
38namespace rtabmap
+
39{
+
40
+
+
42class RtabmapEvent : public UEvent
+
43{
+
44public:
+
45 RtabmapEvent(const Statistics & stats) :
+
46 UEvent(0),
+
47 _stats(stats) {}
+
48
+
49 virtual ~RtabmapEvent() {}
+
50 const Statistics & getStats() const {return _stats;}
+
51 virtual std::string getClassName() const {return std::string("RtabmapEvent");}
+
52
+
53private:
+
54 Statistics _stats;
+
55};
+
+
56
+
+
57class RtabmapEventCmd : public UEvent
+
58{
+
59public:
+
60 enum dummy {d}; // Hack, to fix Eclipse complaining about not defined Cmd enum ?!
+
61 enum Cmd {
+
62 kCmdUndef,
+
63 kCmdInit, // params: [string] database path + ParametersMap
+
64 kCmdResetMemory,
+
65 kCmdClose, // params: [bool] database saved (default true), [string] output database path (empty=use same database to save, only work when Db/Sqlite3InMemory=true)
+
66 kCmdUpdateParams, // params: ParametersMap
+
67 kCmdDumpMemory,
+
68 kCmdDumpPrediction,
+
69 kCmdGenerateDOTGraph, // params: [bool] global, [string] path, if global=false: [int] id, [int] margin
+
70 kCmdExportPoses, // params: [bool] global, [bool] optimized, [string] path, [int] type (0=raw format, 1=RGBD-SLAM format, 2=KITTI format, 3=TORO, 4=g2o)
+
71 kCmdCleanDataBuffer,
+
72 kCmdPublish3DMap, // params: [bool] global, [bool] optimized, [bool] graphOnly
+
73 kCmdRepublishData, // params: [vector<int>] ids
+
74 kCmdTriggerNewMap,
+
75 kCmdPause,
+
76 kCmdResume,
+
77 kCmdGoal, // params: [string] label or [int] location ID
+
78 kCmdCancelGoal,
+
79 kCmdLabel, // params: [string] label, [int] location ID
+
80 kCmdRemoveLabel // params: [string] label
+
81 };
+
82public:
+
83 RtabmapEventCmd(Cmd cmd, const ParametersMap & parameters = ParametersMap()) :
+
84 UEvent(0),
+
85 cmd_(cmd),
+
86 parameters_(parameters){}
+
87 RtabmapEventCmd(Cmd cmd, const UVariant & value1, const ParametersMap & parameters = ParametersMap()) :
+
88 UEvent(0),
+
89 cmd_(cmd),
+
90 value1_(value1),
+
91 parameters_(parameters){}
+
92 RtabmapEventCmd(Cmd cmd, const UVariant & value1, const UVariant & value2, const ParametersMap & parameters = ParametersMap()) :
+
93 UEvent(0),
+
94 cmd_(cmd),
+
95 value1_(value1),
+
96 value2_(value2),
+
97 parameters_(parameters){}
+
98 RtabmapEventCmd(Cmd cmd, const UVariant & value1, const UVariant & value2, const UVariant & value3, const ParametersMap & parameters = ParametersMap()) :
+
99 UEvent(0),
+
100 cmd_(cmd),
+
101 value1_(value1),
+
102 value2_(value2),
+
103 value3_(value3),
+
104 parameters_(parameters){}
+
105 RtabmapEventCmd(Cmd cmd, const UVariant & value1, const UVariant & value2, const UVariant & value3, const UVariant & value4, const ParametersMap & parameters = ParametersMap()) :
+
106 UEvent(0),
+
107 cmd_(cmd),
+
108 value1_(value1),
+
109 value2_(value2),
+
110 value3_(value3),
+
111 value4_(value4),
+
112 parameters_(parameters){}
+
113
+
114 virtual ~RtabmapEventCmd() {}
+
115 Cmd getCmd() const {return cmd_;}
+
116
+
117 const UVariant & value1() const {return value1_;}
+
118 const UVariant & value2() const {return value2_;}
+
119 const UVariant & value3() const {return value3_;}
+
120 const UVariant & value4() const {return value4_;}
+
121
+
122 const ParametersMap & getParameters() const {return parameters_;}
+
123
+
124 virtual std::string getClassName() const {return std::string("RtabmapEventCmd");}
+
125
+
126private:
+
127 Cmd cmd_;
+
128 UVariant value1_;
+
129 UVariant value2_;
+
130 UVariant value3_;
+
131 UVariant value4_;
+
132 ParametersMap parameters_;
+
133};
+
+
134
+
+ +
136{
+
137public:
+
138 enum dummy {d}; // Hack, to fix Eclipse complaining about not defined Status enum ?!
+
139 enum Status {
+
140 kInitializing,
+
141 kInitialized,
+
142 kClosing,
+
143 kClosed,
+
144 kInfo,
+
145 kError
+
146 };
+
147
+
148public:
+
149 RtabmapEventInit(Status status, const std::string & info = std::string()) :
+
150 UEvent(0),
+
151 _status(status),
+
152 _info(info)
+
153 {}
+
154
+
155 // for convenience
+
156 RtabmapEventInit(const std::string & info) :
+
157 UEvent(0),
+
158 _status(kInfo),
+
159 _info(info)
+
160 {}
+
161
+
162 Status getStatus() const {return _status;}
+
163 const std::string & getInfo() const {return _info;}
+
164
+
165 virtual ~RtabmapEventInit() {}
+
166 virtual std::string getClassName() const {return std::string("RtabmapEventInit");}
+
167private:
+
168 Status _status;
+
169 std::string _info; // "Loading signatures", "Loading words" ...
+
170};
+
+
171
+
+ +
173{
+
174public:
+
175 RtabmapEvent3DMap(int codeError = 0):
+
176 UEvent(codeError){}
+ +
178 const std::map<int, Signature> & signatures,
+
179 const std::map<int, Transform> & poses,
+
180 const std::multimap<int, Link> & constraints) :
+
181 UEvent(0),
+
182 _signatures(signatures),
+
183 _poses(poses),
+
184 _constraints(constraints)
+
185 {}
+
186
+
187 virtual ~RtabmapEvent3DMap() {}
+
188
+
189 const std::map<int, Signature> & getSignatures() const {return _signatures;}
+
190 const std::map<int, Transform> & getPoses() const {return _poses;}
+
191 const std::multimap<int, Link> & getConstraints() const {return _constraints;}
+
192
+
193 virtual std::string getClassName() const {return std::string("RtabmapEvent3DMap");}
+
194
+
195private:
+
196 std::map<int, Signature> _signatures;
+
197 std::map<int, Transform> _poses;
+
198 std::multimap<int, Link> _constraints;
+
199};
+
+
200
+
+ +
202{
+
203public:
+ +
205 UEvent(0),
+
206 _planningTime(0.0) {}
+ +
208 int goalId,
+
209 const std::vector<std::pair<int, Transform> > & poses,
+
210 double planningTime) :
+
211 UEvent(goalId),
+
212 _poses(poses),
+
213 _planningTime(planningTime) {}
+ +
215 int goalId,
+
216 const std::string & goalLabel,
+
217 const std::vector<std::pair<int, Transform> > & poses,
+
218 double planningTime) :
+
219 UEvent(goalId),
+
220 _goalLabel(goalLabel),
+
221 _poses(poses),
+
222 _planningTime(planningTime) {}
+
223
+
224 virtual ~RtabmapGlobalPathEvent() {}
+
225 int getGoal() const {return this->getCode();}
+
226 const std::string & getGoalLabel() const {return _goalLabel;}
+
227 double getPlanningTime() const {return _planningTime;}
+
228 const std::vector<std::pair<int, Transform> > & getPoses() const {return _poses;}
+
229 virtual std::string getClassName() const {return std::string("RtabmapGlobalPathEvent");}
+
230
+
231private:
+
232 std::string _goalLabel;
+
233 std::vector<std::pair<int, Transform> > _poses;
+
234 double _planningTime;
+
235};
+
+
236
+
+ +
238{
+
239public:
+
240 RtabmapLabelErrorEvent(int id, const std::string & label):
+
241 UEvent(id),
+
242 _label(label){}
+
243
+
244 virtual ~RtabmapLabelErrorEvent() {}
+
245 int id() const {return this->getCode();}
+
246 const std::string & label() const {return _label;}
+
247 virtual std::string getClassName() const {return std::string("RtabmapLabelErrorEvent");}
+
248
+
249private:
+
250 std::string _label;
+
251};
+
+
252
+
+ +
254{
+
255public:
+
256 RtabmapGoalStatusEvent(int status):
+
257 UEvent(status){}
+
258
+
259 virtual ~RtabmapGoalStatusEvent() {}
+
260 virtual std::string getClassName() const {return std::string("RtabmapGoalStatusEvent");}
+
261};
+
+
262
+
263} // namespace rtabmap
+
264
+
265#endif /* RTABMAPEVENT_H_ */
+
UVariant class for storing and converting between different data types.
+ +
int getCode() const
Definition UEvent.h:74
+
A variant type that can hold values of different types.
Definition UVariant.h:54
+ +
virtual std::string getClassName() const
+ +
virtual std::string getClassName() const
+ +
virtual std::string getClassName() const
+ +
virtual std::string getClassName() const
+ +
virtual std::string getClassName() const
+ +
virtual std::string getClassName() const
+ +
virtual std::string getClassName() const
+
Collects and manages runtime statistics for RTAB-Map.
Definition Statistics.h:108
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/RtabmapThread_8h_source.html b/preview/pr-1492/api/latest/RtabmapThread_8h_source.html new file mode 100644 index 00000000..50b7fbf0 --- /dev/null +++ b/preview/pr-1492/api/latest/RtabmapThread_8h_source.html @@ -0,0 +1,224 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/RtabmapThread.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
RtabmapThread.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef RTABMAPTHREAD_H_
+
29#define RTABMAPTHREAD_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/utilite/UThreadNode.h>
+
34#include <rtabmap/utilite/UEventsHandler.h>
+
35#include <rtabmap/utilite/USemaphore.h>
+
36#include <rtabmap/utilite/UMutex.h>
+
37
+
38#include "rtabmap/core/RtabmapEvent.h"
+
39#include "rtabmap/core/SensorData.h"
+
40#include "rtabmap/core/Parameters.h"
+
41#include "rtabmap/core/OdometryEvent.h"
+
42
+
43#include <queue>
+
44
+
45class UTimer;
+
46
+
47namespace rtabmap {
+
48
+
49class Rtabmap;
+
50
+
+
51class RTABMAP_CORE_EXPORT RtabmapThread :
+
52 public UThreadNode,
+
53 public UEventsHandler
+
54{
+
55public:
+
56 enum State {
+
57 kStateDetecting,
+
58 kStateProcessCommand
+
59 };
+
60
+
61public:
+
62 // take ownership
+ +
64 virtual ~RtabmapThread();
+
65
+
66 void clearBufferedData();
+
67 void setDetectorRate(float rate);
+
68 void setDataBufferSize(unsigned int bufferSize);
+
69 void createIntermediateNodes(bool enabled);
+
70
+
71 float getDetectorRate() const {return _rate;}
+
72 unsigned int getDataBufferSize() const {return _dataBufferMaxSize;}
+
73 bool getCreateIntermediateNodes() const {return _createIntermediateNodes;}
+
74
+
82 void close(bool databaseSaved, const std::string & databasePath = "");
+
83
+
84protected:
+
85 virtual bool handleEvent(UEvent * anEvent);
+
86
+
87private:
+
88 virtual void mainLoopBegin();
+
89 virtual void mainLoop();
+
90 virtual void mainLoopKill();
+
91 void process();
+
92 void addData(const OdometryEvent & odomEvent);
+
93 bool getData(OdometryEvent & data);
+
94 void pushNewState(State newState, const RtabmapEventCmd & cmdEvent = RtabmapEventCmd(RtabmapEventCmd::kCmdUndef));
+
95 void publishMap(bool optimized, bool full, bool graphOnly) const;
+
96
+
97private:
+
98 UMutex _stateMutex;
+
99 std::queue<State> _state;
+
100 std::queue<RtabmapEventCmd> _stateParam;
+
101
+
102 std::list<OdometryEvent> _dataBuffer;
+
103 std::list<double> _newMapEvents;
+
104 UMutex _dataMutex;
+
105 USemaphore _dataAdded;
+
106 unsigned int _dataBufferMaxSize;
+
107 float _rate;
+
108 bool _createIntermediateNodes;
+
109 double _previousStamp;
+
110
+
111 Rtabmap * _rtabmap;
+
112 bool _paused;
+
113 Transform lastPose_;
+
114 cv::Mat covariance_;
+
115
+
116 cv::Mat _userData;
+
117 UMutex _userDataMutex;
+
118};
+
+
119
+
120} /* namespace rtabmap */
+
121#endif /* RTABMAPTHREAD_H_ */
+ + + + + + + + + +
void close(bool databaseSaved, const std::string &databasePath="")
+
virtual bool handleEvent(UEvent *anEvent)
+
Top-level RTAB-Map SLAM pipeline (mapping, localization and loop closure).
Definition Rtabmap.h:194
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Rtabmap_8h_source.html b/preview/pr-1492/api/latest/Rtabmap_8h_source.html new file mode 100644 index 00000000..de5fd417 --- /dev/null +++ b/preview/pr-1492/api/latest/Rtabmap_8h_source.html @@ -0,0 +1,554 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Rtabmap.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Rtabmap.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef RTABMAP_H_
+
29#define RTABMAP_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include "rtabmap/core/Parameters.h"
+
34#include "rtabmap/core/SensorData.h"
+
35#include "rtabmap/core/Statistics.h"
+
36#include "rtabmap/core/Link.h"
+
37#include "rtabmap/core/ProgressState.h"
+
38#include "rtabmap/core/Graph.h"
+
39
+
40#include <opencv2/core/core.hpp>
+
41#include <list>
+
42#include <stack>
+
43#include <set>
+
44
+
45namespace rtabmap
+
46{
+
47
+
48class EpipolarGeometry;
+
49class Memory;
+
50class BayesFilter;
+
51class Signature;
+
52class Optimizer;
+
53
+
+
193class RTABMAP_CORE_EXPORT Rtabmap
+
194{
+
195public:
+
+ + + +
200 kVhUndef
+
201 };
+
+
202
+
203public:
+
204 Rtabmap();
+
205 virtual ~Rtabmap();
+
206
+ +
224 const SensorData & data,
+
225 Transform odomPose,
+
226 const cv::Mat & odomCovariance = cv::Mat::eye(6,6,CV_64FC1),
+
227 const std::vector<float> & odomVelocity = std::vector<float>(),
+
228 const std::map<std::string, float> & externalStats = std::map<std::string, float>());
+ +
237 const SensorData & data,
+
238 Transform odomPose,
+
239 float odomLinearVariance,
+
240 float odomAngularVariance,
+
241 const std::vector<float> & odomVelocity = std::vector<float>(),
+
242 const std::map<std::string, float> & externalStats = std::map<std::string, float>());
+ +
254 const cv::Mat & image,
+
255 int id=0, const std::map<std::string, float> & externalStats = std::map<std::string, float>());
+
256
+
271 void init(const ParametersMap & parameters, const std::string & databasePath = "", bool loadDatabaseParameters = false);
+
282 void init(const std::string & configFile = "", const std::string & databasePath = "", bool loadDatabaseParameters = false);
+
283
+
294 void close(bool databaseSaved = true, const std::string & ouputDatabasePath = "");
+
295
+
297 const std::string & getWorkingDir() const {return _wDir;}
+
299 bool isRGBDMode() const { return _rgbdSlamMode; }
+
301 int getLoopClosureId() const {return _loopClosureHypothesis.first;}
+
303 float getLoopClosureValue() const {return _loopClosureHypothesis.second;}
+
305 int getHighestHypothesisId() const {return _highestHypothesis.first;}
+
307 float getHighestHypothesisValue() const {return _highestHypothesis.second;}
+
309 int getLastLocationId() const;
+
311 std::list<int> getWM() const;
+
313 std::set<int> getSTM() const;
+
315 int getWMSize() const;
+
317 int getSTMSize() const;
+
319 std::map<int, int> getWeights() const;
+
321 int getTotalMemSize() const;
+
323 double getLastProcessTime() const {return _lastProcessTime;};
+
325 bool isInSTM(int locationId) const;
+
327 bool isIDsGenerated() const;
+
329 const Statistics & getStatistics() const;
+
331 const std::map<int, Transform> & getLocalOptimizedPoses() const {return _optimizedPoses;}
+
333 const std::multimap<int, Link> & getLocalConstraints() const {return _constraints;}
+
337 Transform getPose(int locationId) const;
+
349 Transform getMapCorrection() const {return _mapCorrection;}
+
351 const Memory * getMemory() const {return _memory;}
+
353 float getGoalReachedRadius() const {return _goalReachedRadius;}
+
355 float getLocalRadius() const {return _localRadius;}
+
363 const Transform & getLastLocalizationPose() const {return _lastLocalizationPose;}
+
364
+
369 float getTimeThreshold() const {return _maxTimeAllowed;}
+
383 void setTimeThreshold(float maxTimeAllowed);
+
388 int getMemoryThreshold() const {return _maxMemoryAllowed;}
+
399 void setMemoryThreshold(int maxMemoryAllowed);
+
400
+
448 void setInitialPose(const Transform & initialPose);
+ +
465 bool labelLocation(int id, const std::string & label);
+
481 bool setUserData(int id, const cv::Mat & data);
+
488 void generateDOTGraph(const std::string & path, int id=0, int margin=5);
+ +
504 const std::string & path,
+
505 bool optimized,
+
506 bool global,
+
507 int format
+
508 );
+ +
517 void dumpPrediction() const;
+
519 void dumpData() const;
+
524 void parseParameters(const ParametersMap & parameters);
+
526 const ParametersMap & getParameters() const {return _parameters;}
+
535 void setWorkingDirectory(std::string path);
+ + +
568 void setOptimizedPoses(const std::map<int, Transform> & poses, const std::multimap<int, Link> & constraints);
+
576 Signature getSignatureCopy(int id, bool images, bool scan, bool userData, bool occupancyGrid, bool withWords, bool withGlobalDescriptors) const;
+
581 RTABMAP_DEPRECATED
+
582 void get3DMap(std::map<int, Signature> & signatures,
+
583 std::map<int, Transform> & poses,
+
584 std::multimap<int, Link> & constraints,
+
585 bool optimized,
+
586 bool global) const;
+
603 void getGraph(std::map<int, Transform> & poses,
+
604 std::multimap<int, Link> & constraints,
+
605 bool optimized,
+
606 bool global,
+
607 std::map<int, Signature> * signatures = 0,
+
608 bool withImages = false,
+
609 bool withScan = false,
+
610 bool withUserData = false,
+
611 bool withGrid = false,
+
612 bool withWords = true,
+
613 bool withGlobalDescriptors = true) const;
+
624 std::map<int, Transform> getNodesInRadius(const Transform & pose, float radius, int k=0, std::map<int, float> * distsSqr=0);
+
635 std::map<int, Transform> getNodesInRadius(int nodeId, float radius, int k=0, std::map<int, float> * distsSqr=0);
+ +
664 float clusterRadiusMax = 0.5f,
+
665 float clusterAngle = M_PI/6.0f,
+
666 int iterations = 1,
+
667 bool intraSession = true,
+
668 bool interSession = true,
+
669 const ProgressState * state = 0,
+
670 float clusterRadiusMin = 0.0f,
+
671 int toFromMapId = -1);
+ +
685 int optimizerType = 1 /*g2o*/,
+
686 bool rematchFeatures = true,
+
687 int iterations = 0,
+
688 float pixelVariance = 0.0f);
+ +
698 const std::map<int, Transform> & mapPoses,
+
699 const cv::Mat & map,
+
700 float xMin,
+
701 float yMin,
+
702 float cellSize,
+
703 int cropRadius = 1,
+
704 bool filterScans = false);
+ +
729 bool addLink(const Link & link);
+
735 cv::Mat getInformation(const cv::Mat & covariance) const;
+
750 void addNodesToRepublish(const std::vector<int> & ids);
+
773 void setDummyDictionary(bool enabled = true);
+
774
+
776 int getPathStatus() const {return _pathStatus;}
+
781 void clearPath(int status);
+
794 bool computePath(int targetNode, bool global);
+
803 bool computePath(const Transform & targetPose, float tolerance = -1.0f);
+
805 const std::vector<std::pair<int, Transform> > & getPath() const {return _path;}
+
807 std::vector<std::pair<int, Transform> > getPathNextPoses() const;
+
809 std::vector<int> getPathNextNodes() const;
+ +
813 unsigned int getPathCurrentIndex() const {return _pathCurrentIndex;}
+
815 unsigned int getPathCurrentGoalIndex() const {return _pathGoalIndex;}
+
817 const Transform & getPathTransformToGoal() const {return _pathTransformToGoal;}
+
818
+
843 std::map<int, Transform> getForwardWMPoses(int fromId, int maxNearestNeighbors, float radius, int maxDiffID) const;
+
879 std::map<int, std::map<int, Transform> > getPaths(const std::map<int, Transform> & poses, const Transform & target, int maxGraphDepth = 0) const;
+
910 void adjustLikelihood(std::map<int, float> & likelihood) const;
+
911
+
912private:
+
913 void optimizeCurrentMap(int id,
+
914 bool lookInDatabase,
+
915 std::map<int, Transform> & optimizedPoses,
+
916 cv::Mat & covariance,
+
917 std::multimap<int, Link> * constraints = 0,
+
918 double * error = 0,
+
919 int * iterationsDone = 0) const;
+
920 std::map<int, Transform> optimizeGraph(
+
921 int fromId,
+
922 const std::set<int> & ids,
+
923 const std::map<int, Transform> & guessPoses,
+
924 bool lookInDatabase,
+
925 cv::Mat & covariance,
+
926 std::multimap<int, Link> * constraints = 0,
+
927 double * error = 0,
+
928 int * iterationsDone = 0) const;
+
929 std::list<std::pair<int, int> > repairGraph(
+
930 graph::MaxGraphErrors & maxGraphErrors,
+
931 std::map<int, Transform> & poses,
+
932 std::multimap<int, Link> & constraints,
+
933 double & optimizationError,
+
934 int & optimizationIterations,
+
935 cv::Mat & optimizationCovariance);
+
936 void updateGoalIndex();
+
937 bool computePath(int targetNode, std::map<int, Transform> nodes, const std::multimap<int, rtabmap::Link> & constraints);
+
938
+
939 void createGlobalScanMap();
+
940
+
941 void setupLogFiles(bool overwrite = false);
+
942 void flushStatisticLogs();
+
943
+
944private:
+
945 // Modifiable parameters
+
946 bool _publishStats;
+
947 bool _publishLastSignatureData;
+
948 bool _publishPdf;
+
949 bool _publishLikelihood;
+
950 bool _publishRAMUsage;
+
951 bool _computeRMSE;
+
952 bool _saveWMState;
+
953 float _maxTimeAllowed;
+
954 unsigned int _maxMemoryAllowed;
+
955 float _loopThr;
+
956 float _loopRatio;
+
957 float _aggressiveLoopThr;
+
958 int _virtualPlaceLikelihoodRatio;
+
959 float _maxLoopClosureDistance;
+
960 bool _verifyLoopClosureHypothesis;
+
961 unsigned int _maxRetrieved;
+
962 unsigned int _maxLocalRetrieved;
+
963 unsigned int _maxRepublished;
+
964 bool _rawDataKept;
+
965 bool _statisticLogsBufferedInRAM;
+
966 bool _statisticLogged;
+
967 bool _statisticLoggedHeaders;
+
968 bool _rgbdSlamMode;
+
969 float _rgbdLinearUpdate;
+
970 float _rgbdAngularUpdate;
+
971 float _rgbdLinearSpeedUpdate;
+
972 float _rgbdAngularSpeedUpdate;
+
973 float _newMapOdomChangeDistance;
+
974 bool _neighborLinkRefining;
+
975 bool _proximityByTime;
+
976 bool _proximityBySpace;
+
977 bool _scanMatchingIdsSavedInLinks;
+
978 bool _loopClosureIdentityGuess;
+
979 float _localRadius;
+
980 float _localImmunizationRatio;
+
981 int _proximityMaxGraphDepth;
+
982 int _proximityMaxPaths;
+
983 int _proximityMaxNeighbors;
+
984 float _proximityFilteringRadius;
+
985 bool _proximityRawPosesUsed;
+
986 float _proximityAngle;
+
987 bool _proximityOdomGuess;
+
988 double _proximityMergedScanCovFactor;
+
989 std::string _databasePath;
+
990 bool _optimizeFromGraphEnd;
+
991 float _optimizationMaxError;
+
992 float _optimizationMaxErrorRepairRadius;
+
993 bool _startNewMapOnLoopClosure;
+
994 bool _startNewMapOnGoodSignature;
+
995 float _goalReachedRadius;
+
996 bool _goalsSavedInUserData;
+
997 int _pathStuckIterations;
+
998 float _pathLinearVelocity;
+
999 float _pathAngularVelocity;
+
1000 bool _forceOdom3doF;
+
1001 bool _restartAtOrigin;
+
1002 bool _loopCovLimited;
+
1003 bool _loopGPS;
+
1004 int _maxOdomCacheSize;
+
1005 bool _localizationSmoothing;
+
1006 double _localizationPriorInf;
+
1007 bool _localizationSecondTryWithoutProximityLinks;
+
1008 bool _createGlobalScanMap;
+
1009 float _markerPriorsLinearVariance;
+
1010 float _markerPriorsAngularVariance;
+
1011
+
1012 std::pair<int, float> _loopClosureHypothesis;
+
1013 std::pair<int, float> _highestHypothesis;
+
1014 double _lastProcessTime;
+
1015 bool _someNodesHaveBeenTransferred;
+
1016 float _distanceTravelled;
+
1017 float _distanceTravelledSinceLastLocalization;
+
1018 bool _optimizeFromGraphEndChanged;
+
1019
+
1020 // Abstract classes containing all loop closure
+
1021 // strategies for a type of signature or configuration.
+
1022 EpipolarGeometry * _epipolarGeometry;
+
1023 BayesFilter * _bayesFilter;
+
1024 Optimizer * _graphOptimizer;
+
1025 ParametersMap _parameters;
+
1026
+
1027 Memory * _memory;
+
1028
+
1029 FILE* _foutFloat;
+
1030 FILE* _foutInt;
+
1031 std::list<std::string> _bufferedLogsF;
+
1032 std::list<std::string> _bufferedLogsI;
+
1033
+
1034 Statistics statistics_;
+
1035
+
1036 std::string _wDir;
+
1037
+
1038 std::map<int, Transform> _optimizedPoses;
+
1039 std::multimap<int, Link> _constraints;
+
1040 Transform _mapCorrection;
+
1041 Transform _mapCorrectionBackup;
+
1042 Transform _lastLocalizationPose;
+
1043 int _lastLocalizationNodeId;
+
1044 cv::Mat _localizationCovariance;
+
1045 std::map<int, std::pair<cv::Point3d, Transform> > _gpsGeocentricCache;
+
1046 bool _currentSessionHasGPS;
+
1047 LaserScan _globalScanMap;
+
1048 std::map<int, Transform> _globalScanMapPoses;
+
1049 std::map<int, Transform> _odomCachePoses;
+
1050 std::multimap<int, Link> _odomCacheConstraints;
+
1051 std::map<int, Transform> _markerPriors;
+
1052 std::pair<int, int> _lastRejectedLoopClosureIds;
+
1053
+
1054 std::set<int> _nodesToRepublish;
+
1055
+
1056 // Planning stuff
+
1057 int _pathStatus;
+
1058 std::vector<std::pair<int,Transform> > _path;
+
1059 std::set<unsigned int> _pathUnreachableNodes;
+
1060 unsigned int _pathCurrentIndex;
+
1061 unsigned int _pathGoalIndex;
+
1062 Transform _pathTransformToGoal;
+
1063 int _pathStuckCount;
+
1064 float _pathStuckDistance;
+
1065
+
1066 bool _dummyDictionary;
+
1067};
+
+
1068
+
1069} // namespace rtabmap
+
1070#endif /* RTABMAP_H_ */
+
Recursive Bayesian filter for loop-closure hypothesis estimation in RTAB-Map.
Definition BayesFilter.h:72
+ +
Represents 2D or 3D laser scan data with support for multiple point data formats.
Definition LaserScan.h:46
+ +
Three-tiered memory management (STM, WM, LTM) for RTAB-Map.
Definition Memory.h:102
+
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:88
+ +
Top-level RTAB-Map SLAM pipeline (mapping, localization and loop closure).
Definition Rtabmap.h:194
+
bool setUserData(int id, const cv::Mat &data)
Attaches user data to signature id, compressing it on the fly if needed.
+
const Memory * getMemory() const
Definition Rtabmap.h:351
+
void addNodesToRepublish(const std::vector< int > &ids)
Marks node ids whose data should be re-emitted on the next process().
+
bool computePath(const Transform &targetPose, float tolerance=-1.0f)
Plans a path in the current optimized map toward a metric goal pose.
+
std::map< int, Transform > getNodesInRadius(const Transform &pose, float radius, int k=0, std::map< int, float > *distsSqr=0)
Returns optimized poses within a metric radius of pose.
+
int getWMSize() const
+
void setWorkingDirectory(std::string path)
Sets the working directory used for dumps, logs and temporary files.
+
void init(const std::string &configFile="", const std::string &databasePath="", bool loadDatabaseParameters=false)
Initializes Rtabmap from a configuration file and a database.
+
int getLoopClosureId() const
Definition Rtabmap.h:301
+
const Transform & getLastLocalizationPose() const
Definition Rtabmap.h:363
+
std::map< int, int > getWeights() const
+
bool process(const cv::Mat &image, int id=0, const std::map< std::string, float > &externalStats=std::map< std::string, float >())
Appearance-only convenience overload (loop-closure detection without odometry).
+
void dumpData() const
Dumps the Memory state (signatures, words, dictionary) to the working directory.
+
void generateDOTGraph(const std::string &path, int id=0, int margin=5)
Writes a Graphviz DOT file of the pose graph.
+
void getGraph(std::map< int, Transform > &poses, std::multimap< int, Link > &constraints, bool optimized, bool global, std::map< int, Signature > *signatures=0, bool withImages=false, bool withScan=false, bool withUserData=false, bool withGrid=false, bool withWords=true, bool withGlobalDescriptors=true) const
Extracts a full snapshot of the current pose graph.
+
std::vector< int > getPathNextNodes() const
+
int getSTMSize() const
+
int triggerNewMap()
Starts a new map session (next process() will create a fresh map id).
+
const std::multimap< int, Link > & getLocalConstraints() const
Definition Rtabmap.h:333
+
void setDummyDictionary(bool enabled=true)
Loads the visual word dictionary as ids only, without descriptors.
+
float getHighestHypothesisValue() const
Definition Rtabmap.h:307
+
void clearPath(int status)
Clears the current path and sets its terminal status.
+
bool isInSTM(int locationId) const
+
void parseParameters(const ParametersMap &parameters)
Re-parses parameters and propagates them to owned sub-objects (Memory, BayesFilter,...
+
const Statistics & getStatistics() const
+
void close(bool databaseSaved=true, const std::string &ouputDatabasePath="")
Closes Rtabmap and releases the underlying Memory.
+
bool isIDsGenerated() const
+
int getPathCurrentGoalId() const
+
const std::vector< std::pair< int, Transform > > & getPath() const
Definition Rtabmap.h:805
+
int detectMoreLoopClosures(float clusterRadiusMax=0.5f, float clusterAngle=M_PI/6.0f, int iterations=1, bool intraSession=true, bool interSession=true, const ProgressState *state=0, float clusterRadiusMin=0.0f, int toFromMapId=-1)
Post-processing: searches for additional loop closures over the existing graph.
+
float getGoalReachedRadius() const
Definition Rtabmap.h:353
+
const std::string & getWorkingDir() const
Definition Rtabmap.h:297
+
int refineLinks()
Re-runs registration on every link of the current graph and updates the ones that converge.
+
void setMemoryThreshold(int maxMemoryAllowed)
Sets the maximum number of signatures kept in WM (0 = unbounded).
+
bool isRGBDMode() const
Definition Rtabmap.h:299
+
float getLocalRadius() const
Definition Rtabmap.h:355
+
void init(const ParametersMap &parameters, const std::string &databasePath="", bool loadDatabaseParameters=false)
Initializes Rtabmap with parameters and a database.
+
Signature getSignatureCopy(int id, bool images, bool scan, bool userData, bool occupancyGrid, bool withWords, bool withGlobalDescriptors) const
Returns a copy of signature id with optional payloads attached.
+
unsigned int getPathCurrentGoalIndex() const
Definition Rtabmap.h:815
+
void setOptimizedPoses(const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints)
Replaces the current optimized poses and constraints with externally provided ones.
+
Transform getMapCorrection() const
Definition Rtabmap.h:349
+
std::set< int > getSTM() const
+
void setTimeThreshold(float maxTimeAllowed)
Sets the per-iteration time budget (ms).
+
std::map< int, Transform > getForwardWMPoses(int fromId, int maxNearestNeighbors, float radius, int maxDiffID) const
Returns optimized poses of WM nodes located in front of fromId.
+
int getMemoryThreshold() const
Definition Rtabmap.h:388
+
double getLastProcessTime() const
Definition Rtabmap.h:323
+
bool process(const SensorData &data, Transform odomPose, float odomLinearVariance, float odomAngularVariance, const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())
Convenience overload: builds a diagonal covariance from scalar variances.
+
int getLastLocationId() const
+
unsigned int getPathCurrentIndex() const
Definition Rtabmap.h:813
+
void setInitialPose(const Transform &initialPose)
Sets the localization prior pose used to seed the next process() call (localization mode only).
+
const ParametersMap & getParameters() const
Definition Rtabmap.h:526
+
std::map< int, Transform > getNodesInRadius(int nodeId, float radius, int k=0, std::map< int, float > *distsSqr=0)
Returns optimized poses within a metric radius of node nodeId.
+
void adjustLikelihood(std::map< int, float > &likelihood) const
Applies the standard RTAB-Map likelihood adjustment.
+
void rejectLastLoopClosure()
Removes the loop-closure link added at the last process() iteration.
+
bool globalBundleAdjustment(int optimizerType=1, bool rematchFeatures=true, int iterations=0, float pixelVariance=0.0f)
Runs a global bundle adjustment over the optimized graph.
+
int getHighestHypothesisId() const
Definition Rtabmap.h:305
+
int getTotalMemSize() const
+
bool computePath(int targetNode, bool global)
Plans a path from the current location to node targetNode.
+
Transform getPose(int locationId) const
+
int cleanupLocalGrids(const std::map< int, Transform > &mapPoses, const cv::Mat &map, float xMin, float yMin, float cellSize, int cropRadius=1, bool filterScans=false)
Filters spurious obstacles from every node's local grid using a reference 2D map.
+
void dumpPrediction() const
Dumps the Bayes-filter prediction matrix to a file in the working directory.
+
std::map< int, std::map< int, Transform > > getPaths(const std::map< int, Transform > &poses, const Transform &target, int maxGraphDepth=0) const
Segments a set of optimized poses into paths connected by neighbor links.
+
bool process(const SensorData &data, Transform odomPose, const cv::Mat &odomCovariance=cv::Mat::eye(6, 6, CV_64FC1), const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())
Main RTAB-Map iteration: ingests one sensor frame and updates the map.
+
float getLoopClosureValue() const
Definition Rtabmap.h:303
+
std::list< int > getWM() const
+
RTABMAP_DEPRECATED void get3DMap(std::map< int, Signature > &signatures, std::map< int, Transform > &poses, std::multimap< int, Link > &constraints, bool optimized, bool global) const
Deprecated: use getGraph() instead with withImages=true, withScan=true, withUserData=true and withGri...
+
const std::map< int, Transform > & getLocalOptimizedPoses() const
Definition Rtabmap.h:331
+
const Transform & getPathTransformToGoal() const
Definition Rtabmap.h:817
+
void deleteLastLocation()
Deletes the most recent (non-intermediate) location from the map.
+
cv::Mat getInformation(const cv::Mat &covariance) const
Converts an odometry covariance into an information matrix, clipping by Memory::getOdomMaxInf() when ...
+
bool addLink(const Link &link)
Adds an external link to the map.
+
void exportPoses(const std::string &path, bool optimized, bool global, int format)
Exports the current pose graph to a text file.
+
void resetMemory()
Clears all in-memory state and resets the database.
+
bool labelLocation(int id, const std::string &label)
Assigns or clears a label on signature id.
+
float getTimeThreshold() const
Definition Rtabmap.h:369
+
std::vector< std::pair< int, Transform > > getPathNextPoses() const
+
VhStrategy
Loop-closure verification strategy.
Definition Rtabmap.h:197
+
@ kVhEpipolar
Epipolar geometry verification (mostly historical, RGB-only mode).
Definition Rtabmap.h:199
+
@ kVhNone
No verification: the highest hypothesis above threshold is accepted.
Definition Rtabmap.h:198
+
int getPathStatus() const
Definition Rtabmap.h:776
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
Collects and manages runtime statistics for RTAB-Map.
Definition Statistics.h:108
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
Largest pose-graph constraint violations after optimization.
Definition Graph.h:232
+
+ + + + diff --git a/preview/pr-1492/api/latest/SensorCaptureInfo_8h_source.html b/preview/pr-1492/api/latest/SensorCaptureInfo_8h_source.html new file mode 100644 index 00000000..7b8c9a18 --- /dev/null +++ b/preview/pr-1492/api/latest/SensorCaptureInfo_8h_source.html @@ -0,0 +1,207 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/SensorCaptureInfo.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SensorCaptureInfo.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/Transform.h"
+
31#include <string>
+
32
+
33namespace rtabmap
+
34{
+
35
+
+ +
65{
+
66
+
67public:
+
+ +
81 cameraName(""),
+
82 id(0),
+
83 stamp(0.0),
+
84 timeCapture(0.0f),
+
85 timeDeskewing(0.0f),
+
86 timeDisparity(0.0f),
+
87 timeMirroring(0.0f),
+ + + + + + +
94 timeTotal(0.0f),
+
95 odomCovariance(cv::Mat::eye(6,6,CV_64FC1))
+
96 {
+
97 }
+
+
98
+ +
103
+
104 std::string cameraName;
+
105 int id;
+
106 double stamp;
+
107
+
108 // Timing information (all in seconds)
+ + + + + + + + + + +
119 float timeTotal;
+
120
+
121 // Odometry information
+ + +
124 std::vector<float> odomVelocity;
+
125};
+
+
126
+
133RTABMAP_DEPRECATED typedef SensorCaptureInfo CameraInfo;
+
134
+
135} // namespace rtabmap
+
Metadata structure for sensor data capture and processing.
+
float timeBilateralFiltering
Time for bilateral filtering of depth (seconds)
+
float timeScanFromDepth
Time to convert depth image to laser scan (seconds)
+
float timeCapture
Time to capture data from the sensor (seconds)
+
int id
Capture ID (typically matches SensorData ID)
+
float timeMirroring
Time for image mirroring/flipping (seconds)
+
float timeStereoExposureCompensation
Time for stereo exposure compensation (seconds)
+
virtual ~SensorCaptureInfo()
Virtual destructor.
+
Transform odomPose
Odometry pose at the time of capture (in odometry coordinate frame)
+
std::vector< float > odomVelocity
6DOF odometry velocity [vx, vy, vz, vroll, vpitch, vyaw] (m/s, rad/s)
+
SensorCaptureInfo()
Default constructor.
+
std::string cameraName
Camera/sensor name identifier.
+
cv::Mat odomCovariance
Odometry twist covariance matrix (6x6, CV_64FC1). Default: identity matrix.
+
float timeDeskewing
Time for laser scan deskewing (seconds)
+
float timeTotal
Total processing time (seconds)
+
float timeHistogramEqualization
Time for histogram equalization (seconds)
+
double stamp
Timestamp in seconds (typically matches SensorData stamp)
+
float timeImageDecimation
Time for image decimation/downsampling (seconds)
+
float timeDisparity
Time to compute stereo disparity (seconds)
+
float timeUndistortDepth
Time to undistort depth image (seconds)
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
RTABMAP_DEPRECATED typedef SensorCaptureInfo CameraInfo
Backward compatibility typedef.
+
+ + + + diff --git a/preview/pr-1492/api/latest/SensorCaptureThread_8h_source.html b/preview/pr-1492/api/latest/SensorCaptureThread_8h_source.html new file mode 100644 index 00000000..af749afd --- /dev/null +++ b/preview/pr-1492/api/latest/SensorCaptureThread_8h_source.html @@ -0,0 +1,358 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/SensorCaptureThread.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SensorCaptureThread.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
31
+
32#include <rtabmap/core/Parameters.h>
+
33#include <rtabmap/core/Transform.h>
+
34#include <rtabmap/utilite/UThread.h>
+
35#include <rtabmap/utilite/UEventsSender.h>
+
36
+
37namespace clams
+
38{
+
39class DiscreteDepthDistortionModel;
+
40}
+
41
+
42namespace rtabmap
+
43{
+
44
+
45class Camera;
+
46class Lidar;
+
47class SensorCapture;
+
48class SensorCaptureInfo;
+
49class SensorData;
+
50class StereoDense;
+
51class IMUFilter;
+
52class Feature2D;
+
53
+
+
97class RTABMAP_CORE_EXPORT SensorCaptureThread :
+
98 public UThread,
+
99 public UEventsSender
+
100{
+
101public:
+ +
114 Camera * camera,
+
115 const ParametersMap & parameters = ParametersMap());
+
116
+ +
137 Camera * camera,
+
138 SensorCapture * odomSensor,
+
139 const Transform & extrinsics,
+
140 double poseTimeOffset = 0.0,
+
141 float poseScaleFactor = 1.0f,
+
142 double poseWaitTime = 0.1,
+
143 const ParametersMap & parameters = ParametersMap());
+
144
+ +
156 Lidar * lidar,
+
157 const ParametersMap & parameters = ParametersMap());
+
158
+ +
171 Lidar * lidar,
+
172 Camera * camera,
+
173 const ParametersMap & parameters = ParametersMap());
+
174
+ +
195 Lidar * lidar,
+
196 SensorCapture * odomSensor,
+
197 double poseTimeOffset = 0.0,
+
198 float poseScaleFactor = 1.0f,
+
199 double poseWaitTime = 0.1,
+
200 const ParametersMap & parameters = ParametersMap());
+
201
+ +
225 Lidar * lidar,
+
226 Camera * camera,
+
227 SensorCapture * odomSensor,
+
228 const Transform & extrinsics,
+
229 double poseTimeOffset = 0.0,
+
230 float poseScaleFactor = 1.0f,
+
231 double poseWaitTime = 0.1,
+
232 const ParametersMap & parameters = ParametersMap());
+
233
+ +
240
+
245 void setMirroringEnabled(bool enabled) {_mirroring = enabled;}
+
246
+
255 void setStereoExposureCompensation(bool enabled) {_stereoExposureCompensation = enabled;}
+
256
+
261 void setColorOnly(bool colorOnly) {_colorOnly = colorOnly;}
+
262
+
271 void setImageDecimation(int decimation) {_imageDecimation = decimation;}
+
272
+
287 void setHistogramMethod(int histogramMethod) {_histogramMethod = histogramMethod;}
+
288
+
296 void setStereoToDepth(bool enabled) {_stereoToDepth = enabled;}
+
297
+
306 void setFrameRate(float frameRate);
+
307
+
312 RTABMAP_DEPRECATED void setImageRate(float frameRate) {setFrameRate(frameRate);}
+
313
+
330 void setDistortionModel(const std::string & path);
+
331
+
340 void setOdomAsGroundTruth(bool enabled) {_odomAsGt = enabled;}
+
341
+
350 void enableBilateralFiltering(float sigmaS, float sigmaR);
+
351
+
355 void disableBilateralFiltering() {_bilateralFiltering = false;}
+
356
+
374 void enableIMUFiltering(int filteringStrategy=1, const ParametersMap & parameters = ParametersMap(), bool baseFrameConversion = false);
+
375
+ +
380
+
394 void enableFeatureDetection(const ParametersMap & parameters = ParametersMap());
+
395
+ +
400
+
409 RTABMAP_DEPRECATED void setScanParameters(
+
410 bool fromDepth,
+
411 int downsampleStep, // decimation of the depth image in case the scan is from depth image
+
412 float rangeMin,
+
413 float rangeMax,
+
414 float voxelSize,
+
415 int normalsK,
+
416 float normalsRadius,
+
417 bool forceGroundNormalsUp,
+
418 bool deskewing);
+
419
+ +
441 bool fromDepth,
+
442 int downsampleStep=1, // decimation of the depth image in case the scan is from depth image
+
443 float rangeMin=0.0f,
+
444 float rangeMax=0.0f,
+
445 float voxelSize = 0.0f,
+
446 int normalsK = 0,
+
447 float normalsRadius = 0.0f,
+
448 float groundNormalsUp = 0.0f,
+
449 bool deskewing = false);
+
450
+
461 void postUpdate(SensorData * data, SensorCaptureInfo * info = 0) const;
+
462
+
463 // Getters
+
464
+
469 bool isPaused() const {return !this->isRunning();}
+
470
+
475 bool isCapturing() const {return this->isRunning();}
+
476
+
481 bool odomProvided() const;
+
482
+
487 Camera * camera() {return _camera;}
+
488
+
493 SensorCapture * odomSensor() {return _odomSensor;}
+
494
+
499 Lidar * lidar() {return _lidar;}
+
500
+
501private:
+
507 virtual void mainLoopBegin();
+
508
+
515 virtual void mainLoop();
+
516
+
522 virtual void mainLoopKill();
+
523
+
524private:
+
525 Camera * _camera;
+
526 SensorCapture * _odomSensor;
+
527 Lidar * _lidar;
+
528 Transform _extrinsicsOdomToCamera;
+
529 bool _odomAsGt;
+
530 double _poseTimeOffset;
+
531 float _poseScaleFactor;
+
532 double _poseWaitTime;
+
533 bool _mirroring;
+
534 bool _stereoExposureCompensation;
+
535 bool _colorOnly;
+
536 int _imageDecimation;
+
537 int _histogramMethod;
+
538 bool _stereoToDepth;
+
539 bool _scanDeskewing;
+
540 bool _scanFromDepth;
+
541 int _scanDownsampleStep;
+
542 float _scanRangeMin;
+
543 float _scanRangeMax;
+
544 float _scanVoxelSize;
+
545 int _scanNormalsK;
+
546 float _scanNormalsRadius;
+
547 float _scanForceGroundNormalsUp;
+
548 StereoDense * _stereoDense;
+
549 clams::DiscreteDepthDistortionModel * _distortionModel;
+
550 bool _bilateralFiltering;
+
551 float _bilateralSigmaS;
+
552 float _bilateralSigmaR;
+
553 IMUFilter * _imuFilter;
+
554 bool _imuBaseFrameConversion;
+
555 Feature2D * _featureDetector;
+
556 bool _depthAsMask;
+
557};
+
+
558
+
565RTABMAP_DEPRECATED typedef SensorCaptureThread CameraThread;
+
566
+
567} // namespace rtabmap
+ + + + +
Abstract 2D feature detector and descriptor extractor for visual SLAM.
Definition Features2d.h:145
+
Fuses gyroscope and accelerometer samples into an orientation quaternion.
Definition IMUFilter.h:59
+ +
Metadata structure for sensor data capture and processing.
+
Thread-based sensor data capture and event posting for RTAB-Map.
+
void setScanParameters(bool fromDepth, int downsampleStep=1, float rangeMin=0.0f, float rangeMax=0.0f, float voxelSize=0.0f, int normalsK=0, float normalsRadius=0.0f, float groundNormalsUp=0.0f, bool deskewing=false)
Sets lidar scan processing parameters.
+
SensorCapture * odomSensor()
Returns the odometry sensor pointer.
+
void setMirroringEnabled(bool enabled)
Enables or disables image mirroring (horizontal flip)
+
RTABMAP_DEPRECATED void setImageRate(float frameRate)
Sets the target image capture rate (deprecated)
+
SensorCaptureThread(Lidar *lidar, Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())
Constructor for lidar with camera and odometry sensor.
+
void setStereoExposureCompensation(bool enabled)
Enables or disables stereo exposure compensation.
+
void setHistogramMethod(int histogramMethod)
Sets histogram equalization method.
+
RTABMAP_DEPRECATED void setScanParameters(bool fromDepth, int downsampleStep, float rangeMin, float rangeMax, float voxelSize, int normalsK, float normalsRadius, bool forceGroundNormalsUp, bool deskewing)
Sets lidar scan processing parameters (deprecated)
+
void setFrameRate(float frameRate)
Sets the target frame rate for capture.
+
void enableBilateralFiltering(float sigmaS, float sigmaR)
Enables bilateral filtering for depth images.
+
bool isPaused() const
Checks if the capture thread is paused.
+
void postUpdate(SensorData *data, SensorCaptureInfo *info=0) const
Post-processing hook called before posting SensorEvent.
+
void disableBilateralFiltering()
Disables bilateral filtering.
+
SensorCaptureThread(Lidar *lidar, SensorCapture *odomSensor, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())
Constructor for lidar with odometry sensor.
+
void setOdomAsGroundTruth(bool enabled)
Sets whether odometry poses should be treated as ground truth.
+
void setColorOnly(bool colorOnly)
Sets whether to capture color images only (skip depth)
+
void setImageDecimation(int decimation)
Sets image decimation factor.
+
void disableIMUFiltering()
Disables IMU data filtering.
+
SensorCaptureThread(Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())
Constructor for camera with odometry sensor.
+
SensorCaptureThread(Lidar *lidar, const ParametersMap &parameters=ParametersMap())
Constructor for lidar-only capture.
+
bool odomProvided() const
Checks if odometry is provided by the sensors.
+
void enableIMUFiltering(int filteringStrategy=1, const ParametersMap &parameters=ParametersMap(), bool baseFrameConversion=false)
Enables IMU data filtering.
+
SensorCaptureThread(Lidar *lidar, Camera *camera, const ParametersMap &parameters=ParametersMap())
Constructor for lidar with camera.
+
void enableFeatureDetection(const ParametersMap &parameters=ParametersMap())
Enables automatic feature detection on captured images.
+
Lidar * lidar()
Returns the lidar pointer.
+
void setDistortionModel(const std::string &path)
Sets the depth distortion model file path.
+
bool isCapturing() const
Checks if the capture thread is actively capturing.
+
SensorCaptureThread(Camera *camera, const ParametersMap &parameters=ParametersMap())
Constructor for camera-only capture.
+
Camera * camera()
Returns the camera pointer.
+
void setStereoToDepth(bool enabled)
Enables or disables stereo-to-depth conversion.
+
void disableFeatureDetection()
Disables automatic feature detection.
+
virtual ~SensorCaptureThread()
Virtual destructor.
+
Abstract base class for sensor data capture (cameras, lidars, etc.)
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Abstract base class for dense stereo matching algorithms.
Definition StereoDense.h:53
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
RTABMAP_DEPRECATED typedef SensorCaptureThread CameraThread
Backward compatibility typedef.
+
+ + + + diff --git a/preview/pr-1492/api/latest/SensorCapture_8h_source.html b/preview/pr-1492/api/latest/SensorCapture_8h_source.html new file mode 100644 index 00000000..05e5a470 --- /dev/null +++ b/preview/pr-1492/api/latest/SensorCapture_8h_source.html @@ -0,0 +1,206 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/SensorCapture.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SensorCapture.h
+
+
+
1/*
+
2Copyright (c) 2010-2022, Mathieu Labbe
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither names of its contributors may be used to endorse or promote products
+
13 derived from this software without specific prior written permission.
+
14
+
15THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
16ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
17WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
18DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
19DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
20(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
21LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
22ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
23(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
24SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
25*/
+
26
+
27#pragma once
+
28
+
29#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
30
+
31#include <opencv2/highgui/highgui.hpp>
+
32#include <rtabmap/core/SensorCaptureInfo.h>
+
33#include "rtabmap/core/SensorData.h"
+
34#include <set>
+
35#include <stack>
+
36#include <list>
+
37#include <vector>
+
38
+
39class UDirectory;
+
40class UTimer;
+
41
+
42namespace rtabmap
+
43{
+
44
+
+
78class RTABMAP_CORE_EXPORT SensorCapture
+
79{
+
80public:
+
84 virtual ~SensorCapture();
+
85
+ +
108
+
126 virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "") = 0;
+
127
+
137 virtual std::string getSerial() const = 0;
+
138
+
152 virtual bool odomProvided() const { return false; }
+
153
+
172 virtual bool getPose(double stamp, Transform & pose, cv::Mat & covariance, double maxWaitTime = 0.06) { return false; }
+
173
+
174 // Getters
+
175
+
180 float getFrameRate() const {return _frameRate;}
+
181
+
186 const Transform & getLocalTransform() const {return _localTransform;}
+
187
+
188 // Setters
+
189
+
200 void setFrameRate(float frameRate) {_frameRate = frameRate;}
+
201
+
210 void setLocalTransform(const Transform & localTransform) {_localTransform= localTransform;}
+
211
+ +
219
+
220protected:
+
231 SensorCapture(float frameRate = 0, const Transform & localTransform = Transform::getIdentity());
+
232
+
254 virtual SensorData captureData(SensorCaptureInfo * info = 0) = 0;
+
255
+
264 int getNextSeqID() {return ++_seq;}
+
265
+
266private:
+
267 float _frameRate;
+
268 Transform _localTransform;
+
269 UTimer * _frameRateTimer;
+
270 int _seq;
+
271};
+
+
272
+
273
+
274} // namespace rtabmap
+ + +
Metadata structure for sensor data capture and processing.
+
Abstract base class for sensor data capture (cameras, lidars, etc.)
+
virtual ~SensorCapture()
Virtual destructor.
+
void setLocalTransform(const Transform &localTransform)
Sets the local transform from base frame to sensor frame.
+
virtual bool init(const std::string &calibrationFolder=".", const std::string &cameraName="")=0
Initializes the sensor.
+
void setFrameRate(float frameRate)
Sets the target frame rate.
+
virtual bool getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
Gets the sensor's pose estimate at a specific timestamp.
+
virtual std::string getSerial() const =0
Returns the sensor's serial number or unique identifier.
+
virtual SensorData captureData(SensorCaptureInfo *info=0)=0
Pure virtual method to capture sensor data.
+
const Transform & getLocalTransform() const
Returns the local transform from base frame to sensor frame.
+
SensorData takeData(SensorCaptureInfo *info=0)
Captures sensor data with frame rate control.
+
int getNextSeqID()
Gets the next sequence ID.
+
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())
Protected constructor.
+
virtual bool odomProvided() const
Checks if the sensor provides odometry poses.
+
float getFrameRate() const
Returns the target frame rate.
+
void resetTimer()
Resets the frame rate timer.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/SensorData_8h_source.html b/preview/pr-1492/api/latest/SensorData_8h_source.html new file mode 100644 index 00000000..99e16f5b --- /dev/null +++ b/preview/pr-1492/api/latest/SensorData_8h_source.html @@ -0,0 +1,630 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/SensorData.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SensorData.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef SENSORDATA_H_
+
29#define SENSORDATA_H_
+
30
+
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>
+
38#else
+
39#include <opencv2/features.hpp>
+
40#endif
+
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>
+
47
+
48namespace rtabmap
+
49{
+
50
+
+
96class RTABMAP_CORE_EXPORT SensorData
+
97{
+
98public:
+ +
106
+ +
120 const cv::Mat & image,
+
121 int id = 0,
+
122 double stamp = 0.0,
+
123 const cv::Mat & userData = cv::Mat());
+
124
+ +
138 const cv::Mat & image,
+
139 const CameraModel & cameraModel,
+
140 int id = 0,
+
141 double stamp = 0.0,
+
142 const cv::Mat & userData = cv::Mat());
+
143
+ +
157 const cv::Mat & rgb,
+
158 const cv::Mat & depth,
+
159 const CameraModel & cameraModel,
+
160 int id = 0,
+
161 double stamp = 0.0,
+
162 const cv::Mat & userData = cv::Mat());
+
163
+ +
178 const cv::Mat & rgb,
+
179 const cv::Mat & depth,
+
180 const cv::Mat & depth_confidence,
+
181 const CameraModel & cameraModel,
+
182 int id = 0,
+
183 double stamp = 0.0,
+
184 const cv::Mat & userData = cv::Mat());
+
185
+ +
200 const LaserScan & laserScan,
+
201 const cv::Mat & rgb,
+
202 const cv::Mat & depth,
+
203 const CameraModel & cameraModel,
+
204 int id = 0,
+
205 double stamp = 0.0,
+
206 const cv::Mat & userData = cv::Mat());
+
207
+ +
223 const LaserScan & laserScan,
+
224 const cv::Mat & rgb,
+
225 const cv::Mat & depth,
+
226 const cv::Mat & depthConfidence,
+
227 const CameraModel & cameraModel,
+
228 int id = 0,
+
229 double stamp = 0.0,
+
230 const cv::Mat & userData = cv::Mat());
+
231
+ +
282 const cv::Mat & rgb,
+
283 const cv::Mat & depth,
+
284 const std::vector<CameraModel> & cameraModels,
+
285 int id = 0,
+
286 double stamp = 0.0,
+
287 const cv::Mat & userData = cv::Mat());
+
288
+ +
305 const cv::Mat & rgb,
+
306 const cv::Mat & depth,
+
307 const cv::Mat & depthConfidence,
+
308 const std::vector<CameraModel> & cameraModels,
+
309 int id = 0,
+
310 double stamp = 0.0,
+
311 const cv::Mat & userData = cv::Mat());
+
312
+ +
329 const LaserScan & laserScan,
+
330 const cv::Mat & rgb,
+
331 const cv::Mat & depth,
+
332 const std::vector<CameraModel> & cameraModels,
+
333 int id = 0,
+
334 double stamp = 0.0,
+
335 const cv::Mat & userData = cv::Mat());
+
336
+ +
354 const LaserScan & laserScan,
+
355 const cv::Mat & rgb,
+
356 const cv::Mat & depth,
+
357 const cv::Mat & depthConfidence,
+
358 const std::vector<CameraModel> & cameraModels,
+
359 int id = 0,
+
360 double stamp = 0.0,
+
361 const cv::Mat & userData = cv::Mat());
+
362
+ +
376 const cv::Mat & left,
+
377 const cv::Mat & right,
+
378 const StereoCameraModel & cameraModel,
+
379 int id = 0,
+
380 double stamp = 0.0,
+
381 const cv::Mat & userData = cv::Mat());
+
382
+ +
397 const LaserScan & laserScan,
+
398 const cv::Mat & left,
+
399 const cv::Mat & right,
+
400 const StereoCameraModel & cameraModel,
+
401 int id = 0,
+
402 double stamp = 0.0,
+
403 const cv::Mat & userData = cv::Mat());
+
404
+ +
420 const cv::Mat & rgb,
+
421 const cv::Mat & depth,
+
422 const std::vector<StereoCameraModel> & cameraModels,
+
423 int id = 0,
+
424 double stamp = 0.0,
+
425 const cv::Mat & userData = cv::Mat());
+
426
+ +
441 const LaserScan & laserScan,
+
442 const cv::Mat & rgb,
+
443 const cv::Mat & depth,
+
444 const std::vector<StereoCameraModel> & cameraModels,
+
445 int id = 0,
+
446 double stamp = 0.0,
+
447 const cv::Mat & userData = cv::Mat());
+
448
+ +
460 const IMU & imu,
+
461 int id = 0,
+
462 double stamp = 0.0);
+
463
+
467 virtual ~SensorData();
+
468
+
+
485 bool isValid() const {
+
486 return !(_id == 0 &&
+
487 _stamp == 0.0 &&
+
488 _imageRaw.empty() &&
+
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() &&
+
508 imu_.empty());
+
509 }
+
+
510
+
515 int id() const {return _id;}
+
516
+
521 void setId(int id) {_id = id;}
+
522
+
527 double stamp() const {return _stamp;}
+
528
+
533 void setStamp(double stamp) {_stamp = stamp;}
+
534
+
540 const cv::Mat & imageCompressed() const {return _imageCompressed;}
+
541
+
547 const cv::Mat & depthOrRightCompressed() const {return _depthOrRightCompressed;}
+
548
+
554 const cv::Mat & depthConfidenceCompressed() const {return _depthConfidenceCompressed;}
+
555
+
560 const LaserScan & laserScanCompressed() const {return _laserScanCompressed;}
+
561
+
566 const cv::Mat & imageRaw() const {return _imageRaw;}
+
567
+
573 const cv::Mat & depthOrRightRaw() const {return _depthOrRightRaw;}
+
574
+
579 const cv::Mat & depthConfidenceRaw() const {return _depthConfidenceRaw;}
+
580
+
585 const LaserScan & laserScanRaw() const {return _laserScanRaw;}
+
586
+
592 void setRGBDImage(const cv::Mat & rgb, const cv::Mat & depth, const CameraModel & model, bool clearPreviousData = true);
+
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);
+
598
+
604 void setLaserScan(const LaserScan & laserScan, bool clearPreviousData = true);
+
605
+
610 void setCameraModel(const CameraModel & model) {_cameraModels.clear(); _cameraModels.push_back(model);}
+
611
+
616 void setCameraModels(const std::vector<CameraModel> & models) {_cameraModels = models;}
+
617
+
622 void setStereoCameraModel(const StereoCameraModel & stereoCameraModel) {_stereoCameraModels.clear(); _stereoCameraModels.push_back(stereoCameraModel);}
+
623
+
628 void setStereoCameraModels(const std::vector<StereoCameraModel> & stereoCameraModels) {_stereoCameraModels = stereoCameraModels;}
+
629
+
639 cv::Mat depthRaw() const {return !(_depthOrRightRaw.type()==CV_8UC1 || _depthOrRightRaw.type()==CV_8UC3) ? _depthOrRightRaw : cv::Mat();}
+
640
+
650 cv::Mat rightRaw() const {return _depthOrRightRaw.type()==CV_8UC1 || _depthOrRightRaw.type()==CV_8UC3 ? _depthOrRightRaw : cv::Mat();}
+
651
+
652 // Use setRGBDImage() or setStereoImage() with clearNotUpdated=false or removeRawData() instead. To be backward compatible, this function doesn't clear compressed data.
+
653 RTABMAP_DEPRECATED void setImageRaw(const cv::Mat & image);
+
654 // Use setRGBDImage() or setStereoImage() with clearNotUpdated=false or removeRawData() instead. To be backward compatible, this function doesn't clear compressed data.
+
655 RTABMAP_DEPRECATED void setDepthOrRightRaw(const cv::Mat & image);
+
656 // Use setLaserScan() with clearNotUpdated=false or removeRawData() instead. To be backward compatible, this function doesn't clear compressed data.
+
657 RTABMAP_DEPRECATED void setLaserScanRaw(const LaserScan & scan);
+
658 // Use setUserData() or removeRawData() instead.
+
659 RTABMAP_DEPRECATED void setUserDataRaw(const cv::Mat & data);
+
660
+ +
668
+ +
687 cv::Mat * imageRaw,
+
688 cv::Mat * depthOrRightRaw,
+
689 LaserScan * laserScanRaw = 0,
+
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);
+
695
+ +
711 cv::Mat * imageRaw,
+
712 cv::Mat * depthOrRightRaw,
+
713 LaserScan * laserScanRaw = 0,
+
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;
+
719
+
724 const std::vector<CameraModel> & cameraModels() const {return _cameraModels;}
+
725
+
730 const std::vector<StereoCameraModel> & stereoCameraModels() const {return _stereoCameraModels;}
+
731
+
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;}
+
743
+ +
758 const cv::Mat & ground,
+
759 const cv::Mat & obstacles,
+
760 const cv::Mat & empty,
+
761 float cellSize,
+
762 const cv::Point3f & viewPoint);
+
767 const cv::Mat & gridGroundCellsRaw() const {return _groundCellsRaw;}
+
768
+
774 const cv::Mat & gridGroundCellsCompressed() const {return _groundCellsCompressed;}
+
775
+
780 const cv::Mat & gridObstacleCellsRaw() const {return _obstacleCellsRaw;}
+
781
+
787 const cv::Mat & gridObstacleCellsCompressed() const {return _obstacleCellsCompressed;}
+
788
+
793 const cv::Mat & gridEmptyCellsRaw() const {return _emptyCellsRaw;}
+
794
+
800 const cv::Mat & gridEmptyCellsCompressed() const {return _emptyCellsCompressed;}
+
801
+
806 float gridCellSize() const {return _cellSize;}
+
807
+
812 const cv::Point3f & gridViewPoint() const {return _viewPoint;}
+
813
+
824 void setFeatures(const std::vector<cv::KeyPoint> & keypoints, const std::vector<cv::Point3f> & keypoints3D, const cv::Mat & descriptors);
+
825
+
830 const std::vector<cv::KeyPoint> & keypoints() const {return _keypoints;}
+
831
+
836 const std::vector<cv::Point3f> & keypoints3D() const {return _keypoints3D;}
+
837
+
842 const cv::Mat & descriptors() const {return _descriptors;}
+
843
+
848 void addGlobalDescriptor(const GlobalDescriptor & descriptor) {_globalDescriptors.push_back(descriptor);}
+
849
+
854 void setGlobalDescriptors(const std::vector<GlobalDescriptor> & descriptors) {_globalDescriptors = descriptors;}
+
855
+
859 void clearGlobalDescriptors() {_globalDescriptors.clear();}
+
860
+
865 const std::vector<GlobalDescriptor> & globalDescriptors() const {return _globalDescriptors;}
+
866
+
871 void setGroundTruth(const Transform & pose) {groundTruth_ = pose;}
+
872
+
877 const Transform & groundTruth() const {return groundTruth_;}
+
878
+
884 void setGlobalPose(const Transform & pose, const cv::Mat & covariance) {globalPose_ = pose; globalPoseCovariance_ = covariance;}
+
885
+
890 const Transform & globalPose() const {return globalPose_;}
+
891
+
896 const cv::Mat & globalPoseCovariance() const {return globalPoseCovariance_;}
+
897
+
902 void setGPS(const GPS & gps) {gps_ = gps;}
+
903
+
908 const GPS & gps() const {return gps_;}
+
909
+
916 void setIMU(const IMU & imu);
+
917
+
922 const IMU & imu() const {return imu_;}
+
923
+
928 void setEnvSensors(const EnvSensors & sensors) {_envSensors = sensors;}
+
929
+
934 void addEnvSensor(const EnvSensor & sensor) {_envSensors.insert(std::make_pair(sensor.type(), sensor));}
+
935
+
940 const EnvSensors & envSensors() const {return _envSensors;}
+
941
+
947 void setLandmarks(const Landmarks & landmarks) {_landmarks = landmarks;}
+
948
+
953 const Landmarks & landmarks() const {return _landmarks;}
+
954
+
963 unsigned long getMemoryUsed() const;
+
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);
+
974
+
984 int isPointVisibleFromCameras(const cv::Point3f & pt) const;
+
985
+
986#ifdef HAVE_OPENCV_CUDEV
+
991 const cv::cuda::GpuMat & imageRawGpu() const {return _imageRawGpu;}
+
992
+
997 void setImageRawGpu(const cv::cuda::GpuMat & image) {_imageRawGpu = image;}
+
998
+
1003 const cv::cuda::GpuMat & depthOrRightRawGpu() const {return _depthOrRightRawGpu;}
+
1004
+
1009 void setDepthOrRightRawGpu(const cv::cuda::GpuMat & image) {_depthOrRightRawGpu = image;}
+
1010#endif
+
1011
+
1012private:
+
1013 int _id;
+
1014 double _stamp;
+
1015
+
1016 // Compressed data
+
1017 cv::Mat _imageCompressed;
+
1018 cv::Mat _depthOrRightCompressed;
+
1019 cv::Mat _depthConfidenceCompressed;
+
1020 LaserScan _laserScanCompressed;
+
1021
+
1022 // Raw data
+
1023 cv::Mat _imageRaw;
+
1024 cv::Mat _depthOrRightRaw;
+
1025 cv::Mat _depthConfidenceRaw;
+
1026 LaserScan _laserScanRaw;
+
1027
+
1028 // Camera models
+
1029 std::vector<CameraModel> _cameraModels;
+
1030 std::vector<StereoCameraModel> _stereoCameraModels;
+
1031
+
1032 // User data
+
1033 cv::Mat _userDataCompressed;
+
1034 cv::Mat _userDataRaw;
+
1035
+
1036 // Occupancy grid
+
1037 cv::Mat _groundCellsCompressed;
+
1038 cv::Mat _obstacleCellsCompressed;
+
1039 cv::Mat _emptyCellsCompressed;
+
1040 cv::Mat _groundCellsRaw;
+
1041 cv::Mat _obstacleCellsRaw;
+
1042 cv::Mat _emptyCellsRaw;
+
1043 float _cellSize;
+
1044 cv::Point3f _viewPoint;
+
1045
+
1046 // Environmental sensors
+
1047 EnvSensors _envSensors;
+
1048
+
1049 // Landmarks
+
1050 Landmarks _landmarks;
+
1051
+
1052 // Visual features
+
1053 std::vector<cv::KeyPoint> _keypoints;
+
1054 std::vector<cv::Point3f> _keypoints3D;
+
1055 cv::Mat _descriptors;
+
1056
+
1057 // Global descriptors
+
1058 std::vector<GlobalDescriptor> _globalDescriptors;
+
1059
+
1060 // Poses
+
1061 Transform groundTruth_;
+
1062 Transform globalPose_;
+
1063 cv::Mat globalPoseCovariance_;
+
1064
+
1065 // Sensor fusion
+
1066 GPS gps_;
+
1067 IMU imu_;
+
1068
+
1069#ifdef HAVE_OPENCV_CUDEV
+
1076 cv::cuda::GpuMat _imageRawGpu;
+
1077 cv::cuda::GpuMat _depthOrRightRawGpu;
+
1078#endif
+
1079};
+
+
1080
+
1081}
+
1082
+
1083
+
1084#endif /* SENSORDATA_H_ */
+
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+
Single environmental measurement (type, value, timestamp).
Definition EnvSensor.h:51
+
const Type & type() const
Definition EnvSensor.h:101
+
WGS84 GPS fix attached to a sensor sample or graph node.
Definition GPS.h:47
+ +
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
+
Represents 2D or 3D laser scan data with support for multiple point data formats.
Definition LaserScan.h:46
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
const IMU & imu() const
Returns IMU data.
Definition SensorData.h:922
+
const cv::Mat & depthConfidenceRaw() const
Returns the raw depth confidence map.
Definition SensorData.h:579
+
const cv::Mat & gridObstacleCellsRaw() const
Returns raw obstacle cells.
Definition SensorData.h:780
+
void addEnvSensor(const EnvSensor &sensor)
Adds a single environmental sensor.
Definition SensorData.h:934
+
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.
Definition SensorData.h:560
+
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.
Definition SensorData.h:908
+
cv::Mat depthRaw() const
Returns the depth image (convenience method)
Definition SensorData.h:639
+
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.
Definition SensorData.h:573
+
SensorData(const IMU &imu, int id=0, double stamp=0.0)
IMU-only constructor.
+
const cv::Mat & gridGroundCellsRaw() const
Returns raw ground cells.
Definition SensorData.h:767
+
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.
Definition SensorData.h:859
+
const cv::Mat & gridEmptyCellsRaw() const
Returns raw empty cells.
Definition SensorData.h:793
+
const EnvSensors & envSensors() const
Returns all environmental sensors.
Definition SensorData.h:940
+
void setId(int id)
Sets the sensor data ID.
Definition SensorData.h:521
+
const cv::Mat & gridObstacleCellsCompressed() const
Returns compressed obstacle cells.
Definition SensorData.h:787
+
const cv::Point3f & gridViewPoint() const
Returns the occupancy grid viewpoint.
Definition SensorData.h:812
+
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.
Definition SensorData.h:890
+
double stamp() const
Returns the timestamp.
Definition SensorData.h:527
+
const cv::Mat & globalPoseCovariance() const
Returns the global pose covariance.
Definition SensorData.h:896
+
void setStamp(double stamp)
Sets the timestamp.
Definition SensorData.h:533
+
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.
Definition SensorData.h:842
+
unsigned long getMemoryUsed() const
Computes the memory usage of this sensor data.
+
const std::vector< CameraModel > & cameraModels() const
Returns the camera models.
Definition SensorData.h:724
+
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.
Definition SensorData.h:871
+
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.
Definition SensorData.h:884
+
const Landmarks & landmarks() const
Returns landmarks.
Definition SensorData.h:953
+
int id() const
Returns the sensor data ID.
Definition SensorData.h:515
+
const cv::Mat & depthOrRightCompressed() const
Returns the compressed depth or right stereo image.
Definition SensorData.h:547
+
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.
Definition SensorData.h:806
+
void uncompressData()
Uncompresses all compressed data in-place.
+
cv::Mat rightRaw() const
Returns the right stereo image (convenience method)
Definition SensorData.h:650
+
const cv::Mat & imageCompressed() const
Returns the compressed RGB/grayscale image.
Definition SensorData.h:540
+
const std::vector< StereoCameraModel > & stereoCameraModels() const
Returns the stereo camera models.
Definition SensorData.h:730
+
const std::vector< cv::Point3f > & keypoints3D() const
Returns the 3D keypoints.
Definition SensorData.h:836
+
void setStereoCameraModel(const StereoCameraModel &stereoCameraModel)
Sets a single stereo camera model (clears previous models)
Definition SensorData.h:622
+
void setEnvSensors(const EnvSensors &sensors)
Sets all environmental sensors.
Definition SensorData.h:928
+
const cv::Mat & gridGroundCellsCompressed() const
Returns compressed ground cells.
Definition SensorData.h:774
+
void setStereoCameraModels(const std::vector< StereoCameraModel > &stereoCameraModels)
Sets multiple stereo camera models.
Definition SensorData.h:628
+
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.
Definition SensorData.h:854
+
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.
Definition SensorData.h:800
+
void addGlobalDescriptor(const GlobalDescriptor &descriptor)
Adds a global descriptor.
Definition SensorData.h:848
+
void setUserData(const cv::Mat &userData, bool clearPreviousData=true)
+
const std::vector< GlobalDescriptor > & globalDescriptors() const
Returns all global descriptors.
Definition SensorData.h:865
+
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.
Definition SensorData.h:902
+
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.
Definition SensorData.h:485
+
void setCameraModel(const CameraModel &model)
Sets a single camera model (clears previous models)
Definition SensorData.h:610
+
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.
Definition SensorData.h:566
+
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.
Definition SensorData.h:554
+
const LaserScan & laserScanRaw() const
Returns the raw laser scan.
Definition SensorData.h:585
+
const Transform & groundTruth() const
Returns the ground truth pose.
Definition SensorData.h:877
+
void setLandmarks(const Landmarks &landmarks)
Sets landmarks.
Definition SensorData.h:947
+
void setCameraModels(const std::vector< CameraModel > &models)
Sets multiple camera models.
Definition SensorData.h:616
+
const std::vector< cv::KeyPoint > & keypoints() const
Returns the 2D keypoints.
Definition SensorData.h:830
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
std::map< int, Landmark > Landmarks
Map of landmark id → Landmark (typically positive keys).
Definition Landmark.h:113
+
std::map< EnvSensor::Type, EnvSensor > EnvSensors
Map of environmental readings keyed by EnvSensor::Type (at most one per type).
Definition EnvSensor.h:114
+
+ + + + diff --git a/preview/pr-1492/api/latest/SensorEvent_8h_source.html b/preview/pr-1492/api/latest/SensorEvent_8h_source.html new file mode 100644 index 00000000..2822eee2 --- /dev/null +++ b/preview/pr-1492/api/latest/SensorEvent_8h_source.html @@ -0,0 +1,224 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/SensorEvent.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SensorEvent.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include <rtabmap/core/SensorCaptureInfo.h>
+
31#include <rtabmap/utilite/UEvent.h>
+
32#include "rtabmap/core/SensorData.h"
+
33
+
34namespace rtabmap
+
35{
+
36
+
+ +
64 public UEvent
+
65{
+
66public:
+
+
71 enum Code {
+ + +
74 };
+
+
75
+
76public:
+
+
88 SensorEvent(const cv::Mat & image, int seq=0, double stamp = 0.0, const std::string & cameraName = std::string()) :
+ +
90 data_(image, seq, stamp)
+
91 {
+
92 sensorCaptureInfo_.cameraName = cameraName;
+
93 }
+
+
94
+
+ + +
105 {
+
106 }
+
+
107
+
+ + +
117 data_(data)
+
118 {
+
119 }
+
+
120
+
+
130 SensorEvent(const SensorData & data, const std::string & cameraName) :
+ +
132 data_(data)
+
133 {
+
134 sensorCaptureInfo_.cameraName = cameraName;
+
135 }
+
+
136
+
+
146 SensorEvent(const SensorData & data, const SensorCaptureInfo & sensorCaptureInfo) :
+ +
148 data_(data),
+
149 sensorCaptureInfo_(sensorCaptureInfo)
+
150 {
+
151 }
+
+
152
+
161 const SensorData & data() const {return data_;}
+
162
+
170 const std::string & cameraName() const {return sensorCaptureInfo_.cameraName;}
+
171
+
180 const SensorCaptureInfo & info() const {return sensorCaptureInfo_;}
+
181
+
185 virtual ~SensorEvent() {}
+
186
+
194 virtual std::string getClassName() const {return std::string("SensorEvent");}
+
195
+
196private:
+
197 SensorData data_;
+
198 SensorCaptureInfo sensorCaptureInfo_;
+
199};
+
+
200
+
207RTABMAP_DEPRECATED typedef SensorEvent CameraEvent;
+
208
+
209} // namespace rtabmap
+ +
Metadata structure for sensor data capture and processing.
+
std::string cameraName
Camera/sensor name identifier.
+
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Event class for sensor data communication in RTAB-Map's event system.
Definition SensorEvent.h:65
+
const SensorData & data() const
Returns the sensor data contained in this event.
+
SensorEvent(const SensorData &data, const std::string &cameraName)
Constructor from SensorData with camera name.
+
SensorEvent(const SensorData &data, const SensorCaptureInfo &sensorCaptureInfo)
Constructor from SensorData with full capture info.
+
virtual ~SensorEvent()
Virtual destructor.
+
SensorEvent(const SensorData &data)
Constructor from SensorData.
+
virtual std::string getClassName() const
Returns the class name for event identification.
+
const SensorCaptureInfo & info() const
Returns the sensor capture information.
+
Code
Event codes for SensorEvent.
Definition SensorEvent.h:71
+
@ kCodeNoMoreImages
Event code indicating the sensor stream has ended.
Definition SensorEvent.h:73
+
@ kCodeData
Event code indicating new sensor data is available.
Definition SensorEvent.h:72
+
SensorEvent(const cv::Mat &image, int seq=0, double stamp=0.0, const std::string &cameraName=std::string())
Constructor from a single image.
Definition SensorEvent.h:88
+
const std::string & cameraName() const
Returns the camera name.
+
SensorEvent()
Constructor for end-of-stream event.
+ +
RTABMAP_DEPRECATED typedef SensorEvent CameraEvent
Backward compatibility typedef.
+
+ + + + diff --git a/preview/pr-1492/api/latest/Signature_8h_source.html b/preview/pr-1492/api/latest/Signature_8h_source.html new file mode 100644 index 00000000..22f154a0 --- /dev/null +++ b/preview/pr-1492/api/latest/Signature_8h_source.html @@ -0,0 +1,365 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Signature.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Signature.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
31
+
32#include <pcl/point_types.h>
+
33#include <opencv2/core/core.hpp>
+
34#if CV_MAJOR_VERSION < 5
+
35#include <opencv2/features2d/features2d.hpp>
+
36#else
+
37#include <opencv2/features.hpp>
+
38#endif
+
39#include <opencv2/imgproc/imgproc.hpp>
+
40#include <map>
+
41#include <list>
+
42#include <vector>
+
43#include <set>
+
44
+
45#include <rtabmap/core/Transform.h>
+
46#include <rtabmap/core/SensorData.h>
+
47#include <rtabmap/core/Link.h>
+
48
+
49namespace rtabmap
+
50{
+
51
+
+
83class RTABMAP_CORE_EXPORT Signature
+
84{
+
85
+
86public:
+ +
94
+
112 Signature(int id,
+
113 int mapId = -1,
+
114 int weight = 0,
+
115 double stamp = 0.0,
+
116 const std::string & label = std::string(),
+
117 const Transform & pose = Transform(),
+
118 const Transform & groundTruthPose = Transform(),
+
119 const SensorData & sensorData = SensorData());
+
120
+
132 Signature(const SensorData & data);
+
133
+
137 virtual ~Signature();
+
138
+
151 float compareTo(const Signature & signature) const;
+
152
+
162 bool isBadSignature() const;
+
163
+
168 int id() const {return _id;}
+
169
+
174 int mapId() const {return _mapId;}
+
175
+
189 void setWeight(int weight) {_modified=_modified || _weight!=weight;_weight = weight;}
+
190
+
195 int getWeight() const {return _weight;}
+
196
+
208 void setLabel(const std::string & label) {_modified=_modified || _label.compare(label)!=0;_label = label;}
+
209
+
214 const std::string & getLabel() const {return _label;}
+
215
+
220 double getStamp() const {return _stamp;}
+
221
+
233 void addLinks(const std::list<Link> & links);
+
234
+
247 void addLinks(const std::map<int, Link> & links);
+
248
+
263 void addLink(const Link & link);
+
264
+
272 bool hasLink(int idTo, Link::Type type = Link::kUndef) const;
+
273
+
285 void changeLinkIds(int idFrom, int idTo);
+
286
+
295 void removeLinks(bool keepSelfReferringLinks = false);
+
296
+
304 void removeLink(int idTo);
+
305
+ +
314
+
326 void addLandmark(const Link & landmark);
+
327
+
332 const std::map<int, Link> & getLandmarks() const {return _landmarks;}
+
333
+ +
338
+
343 void removeLandmark(int landmarkId);
+
344
+
349 void setSaved(bool saved) {_saved = saved;}
+
350
+
359 void setModified(bool modified) {_modified = modified; _linksModified = modified;}
+
360
+
365 const std::multimap<int, Link> & getLinks() const {return _links;}
+
366
+
371 bool isSaved() const {return _saved;}
+
372
+
380 bool isModified() const {return _modified || _linksModified;}
+
381
+
386 bool isLinksModified() const {return _linksModified;}
+
387
+
388 // Visual words management
+
389
+ +
397
+
409 void changeWordsRef(int oldWordId, int activeWordId);
+
410
+
426 void setWords(const std::multimap<int, int> & words, const std::vector<cv::KeyPoint> & keypoints, const std::vector<cv::Point3f> & words3, const cv::Mat & descriptors);
+
427
+
436 bool isEnabled() const {return _enabled;}
+
437
+
442 void setEnabled(bool enabled) {_enabled = enabled;}
+
443
+
452 const std::multimap<int, int> & getWords() const {return _words;}
+
453
+
458 const std::vector<cv::KeyPoint> & getWordsKpts() const {return _wordsKpts;}
+
459
+
469 int getInvalidWordsCount() const {return _invalidWordsCount;}
+
470
+
479 const std::map<int, int> & getWordsChanged() const {return _wordsChanged;}
+
480
+
485 const cv::Mat & getWordsDescriptors() const {return _wordsDescriptors;}
+
486
+
495 void setWordsDescriptors(const cv::Mat & descriptors);
+
496
+
497 // Pose and metric information
+
498
+
519 void setPose(const Transform & pose) {_pose = pose;}
+
520
+
529 void setGroundTruthPose(const Transform & pose) {_groundTruthPose = pose;}
+
530
+
+
544 void setVelocity(float vx, float vy, float vz, float vroll, float vpitch, float vyaw) {
+
545 _velocity = std::vector<float>(6,0);
+
546 _velocity[0]=vx;
+
547 _velocity[1]=vy;
+
548 _velocity[2]=vz;
+
549 _velocity[3]=vroll;
+
550 _velocity[4]=vpitch;
+
551 _velocity[5]=vyaw;
+
552 }
+
+
553
+
562 const std::vector<cv::Point3f> & getWords3() const {return _words3;}
+
563
+
569 const Transform & getPose() const {return _pose;}
+
570
+
579 cv::Mat getPoseCovariance() const;
+
580
+
585 const Transform & getGroundTruthPose() const {return _groundTruthPose;}
+
586
+
591 const std::vector<float> & getVelocity() const {return _velocity;}
+
592
+
597 SensorData & sensorData() {return _sensorData;}
+
598
+
603 const SensorData & sensorData() const {return _sensorData;}
+
604
+
614 unsigned long getMemoryUsed(bool withSensorData=true) const;
+
615
+
616private:
+
617 int _id;
+
618 int _mapId;
+
619 double _stamp;
+
620 std::multimap<int, Link> _links;
+
621 std::map<int, Link> _landmarks;
+
622 int _weight;
+
623 std::string _label;
+
624 bool _saved;
+
625 bool _modified;
+
626 bool _linksModified;
+
627
+
635 std::multimap<int, int> _words;
+
636 std::vector<cv::KeyPoint> _wordsKpts;
+
637 std::vector<cv::Point3f> _words3;
+
638 cv::Mat _wordsDescriptors;
+
639 std::map<int, int> _wordsChanged;
+
640 bool _enabled;
+
641 int _invalidWordsCount;
+
642
+
643 Transform _pose;
+
644 Transform _groundTruthPose;
+
645 std::vector<float> _velocity;
+
646
+
647 SensorData _sensorData;
+
648};
+
+
649
+
650} // namespace rtabmap
+ + +
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
unsigned long getMemoryUsed(bool withSensorData=true) const
Computes the memory usage of this signature.
+
const std::map< int, int > & getWordsChanged() const
Returns the word ID change mapping.
Definition Signature.h:479
+
void setSaved(bool saved)
Sets whether this signature has been saved to the database.
Definition Signature.h:349
+
bool isSaved() const
Checks if this signature has been saved to the database.
Definition Signature.h:371
+
const SensorData & sensorData() const
Returns const access to the sensor data.
Definition Signature.h:603
+
void changeWordsRef(int oldWordId, int activeWordId)
Changes visual word references from one word ID to another.
+
void changeLinkIds(int idFrom, int idTo)
Changes all link target IDs from one value to another.
+
const std::multimap< int, Link > & getLinks() const
Returns all links from this signature.
Definition Signature.h:365
+
void setVelocity(float vx, float vy, float vz, float vroll, float vpitch, float vyaw)
Sets the velocity of this signature.
Definition Signature.h:544
+
const cv::Mat & getWordsDescriptors() const
Returns the feature descriptors for visual words.
Definition Signature.h:485
+
const std::map< int, Link > & getLandmarks() const
Returns all landmark observations.
Definition Signature.h:332
+
void setModified(bool modified)
Sets the modification flag for this signature.
Definition Signature.h:359
+
SensorData & sensorData()
Returns mutable access to the sensor data.
Definition Signature.h:597
+
void setWeight(int weight)
Sets the weight/importance of this signature.
Definition Signature.h:189
+
int id() const
Returns the signature ID.
Definition Signature.h:168
+
void removeVirtualLinks()
Removes all virtual links from this signature.
+
bool isEnabled() const
Checks if this signature is enabled.
Definition Signature.h:436
+
void addLink(const Link &link)
Adds a single link to this signature.
+
const std::vector< cv::KeyPoint > & getWordsKpts() const
Returns the keypoints associated with visual words.
Definition Signature.h:458
+
const Transform & getPose() const
Returns the pose of this signature.
Definition Signature.h:569
+
void setEnabled(bool enabled)
Sets whether this signature is enabled.
Definition Signature.h:442
+
const Transform & getGroundTruthPose() const
Returns the ground truth pose.
Definition Signature.h:585
+
virtual ~Signature()
Virtual destructor.
+
const std::multimap< int, int > & getWords() const
Returns the visual words map.
Definition Signature.h:452
+
bool isBadSignature() const
Checks if this signature is considered "bad".
+
void setWords(const std::multimap< int, int > &words, const std::vector< cv::KeyPoint > &keypoints, const std::vector< cv::Point3f > &words3, const cv::Mat &descriptors)
Sets all visual words for this signature.
+
void removeLandmark(int landmarkId)
Removes a specific landmark observation.
+
int getWeight() const
Returns the weight/importance of this signature.
Definition Signature.h:195
+
void addLandmark(const Link &landmark)
Adds a landmark observation to this signature.
+
const std::string & getLabel() const
Returns the label/name of this signature.
Definition Signature.h:214
+
void setWordsDescriptors(const cv::Mat &descriptors)
Sets the feature descriptors for visual words.
+
void removeLinks(bool keepSelfReferringLinks=false)
Removes all links from this signature.
+
Signature()
Default constructor.
+
bool isLinksModified() const
Checks if the links have been modified.
Definition Signature.h:386
+
Signature(int id, int mapId=-1, int weight=0, double stamp=0.0, const std::string &label=std::string(), const Transform &pose=Transform(), const Transform &groundTruthPose=Transform(), const SensorData &sensorData=SensorData())
Constructor with explicit parameters.
+
void removeLandmarks()
Removes all landmark observations.
+
void setLabel(const std::string &label)
Sets a label/name for this signature.
Definition Signature.h:208
+
void addLinks(const std::list< Link > &links)
Adds multiple links from a list.
+
void setGroundTruthPose(const Transform &pose)
Sets the ground truth pose for evaluation.
Definition Signature.h:529
+
double getStamp() const
Returns the timestamp of this signature.
Definition Signature.h:220
+
void removeAllWords()
Removes all visual words from this signature.
+
bool isModified() const
Checks if this signature has been modified.
Definition Signature.h:380
+
const std::vector< cv::Point3f > & getWords3() const
Returns the 3D points of visual words.
Definition Signature.h:562
+
void removeLink(int idTo)
Removes a specific link to a target signature.
+
float compareTo(const Signature &signature) const
Compares this signature to another signature.
+
int getInvalidWordsCount() const
Returns the count of invalid visual words.
Definition Signature.h:469
+
int mapId() const
Returns the map ID.
Definition Signature.h:174
+
void setPose(const Transform &pose)
Sets the pose of this signature.
Definition Signature.h:519
+
bool hasLink(int idTo, Link::Type type=Link::kUndef) const
Checks if this signature has a link to a target signature.
+
const std::vector< float > & getVelocity() const
Returns the velocity of this signature.
Definition Signature.h:591
+
Signature(const SensorData &data)
Constructor from sensor data.
+
void addLinks(const std::map< int, Link > &links)
Adds multiple links from a map.
+
cv::Mat getPoseCovariance() const
Gets the pose covariance matrix.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Statistics_8h_source.html b/preview/pr-1492/api/latest/Statistics_8h_source.html new file mode 100644 index 00000000..e925c5d6 --- /dev/null +++ b/preview/pr-1492/api/latest/Statistics_8h_source.html @@ -0,0 +1,569 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Statistics.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Statistics.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef STATISTICS_H_
+
29#define STATISTICS_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <opencv2/core/core.hpp>
+
34#if CV_MAJOR_VERSION < 5
+
35#include <opencv2/features2d/features2d.hpp>
+
36#else
+
37#include <opencv2/features.hpp>
+
38#endif
+
39#include <opencv2/imgproc/imgproc.hpp>
+
40#include <list>
+
41#include <vector>
+
42#include <rtabmap/core/Signature.h>
+
43#include <rtabmap/core/Link.h>
+ +
45
+
46namespace rtabmap {
+
47
+
69#define RTABMAP_STATS(PREFIX, NAME, UNIT) \
+
70 public: \
+
71 static std::string k##PREFIX##NAME() {return #PREFIX "/" #NAME "/" #UNIT;} \
+
72 private: \
+
73 class Dummy##PREFIX##NAME { \
+
74 public: \
+
75 Dummy##PREFIX##NAME() {if(!_defaultDataInitialized)_defaultData.insert(std::pair<std::string, float>(#PREFIX "/" #NAME "/" #UNIT, 0.0f));} \
+
76 }; \
+
77 Dummy##PREFIX##NAME dummy##PREFIX##NAME
+
78
+
+
107class RTABMAP_CORE_EXPORT Statistics
+
108{
+
109 RTABMAP_STATS(Loop, Id,); // Combined loop or proximity detection
+
110 RTABMAP_STATS(Loop, RejectedHypothesis,);
+
111 RTABMAP_STATS(Loop, Accepted_hypothesis_id,);
+
112 RTABMAP_STATS(Loop, Suppressed_hypothesis_id,);
+
113 RTABMAP_STATS(Loop, Highest_hypothesis_id,);
+
114 RTABMAP_STATS(Loop, Highest_hypothesis_value,);
+
115 RTABMAP_STATS(Loop, Vp_hypothesis,);
+
116 RTABMAP_STATS(Loop, Reactivate_id,);
+
117 RTABMAP_STATS(Loop, Hypothesis_ratio,);
+
118 RTABMAP_STATS(Loop, Hypothesis_reactivated,);
+
119 RTABMAP_STATS(Loop, Map_id,);
+
120 RTABMAP_STATS(Loop, Visual_words,);
+
121 RTABMAP_STATS(Loop, Visual_inliers,);
+
122 RTABMAP_STATS(Loop, Visual_inliers_ratio,);
+
123 RTABMAP_STATS(Loop, Visual_matches,);
+
124 RTABMAP_STATS(Loop, Visual_variance,);
+
125 RTABMAP_STATS(Loop, Distance_since_last_loc, m);
+
126 RTABMAP_STATS(Loop, Last_id,);
+
127 RTABMAP_STATS(Loop, Optimization_max_error, m);
+
128 RTABMAP_STATS(Loop, Optimization_max_error_ratio, );
+
129 RTABMAP_STATS(Loop, Optimization_max_ang_error, deg);
+
130 RTABMAP_STATS(Loop, Optimization_max_ang_error_ratio, );
+
131 RTABMAP_STATS(Loop, Optimization_error, );
+
132 RTABMAP_STATS(Loop, Optimization_iterations, );
+
133 RTABMAP_STATS(Loop, Optimization_max_error_from_id, );
+
134 RTABMAP_STATS(Loop, Optimization_max_error_to_id, );
+
135 RTABMAP_STATS(Loop, Optimization_max_ang_error_from_id, );
+
136 RTABMAP_STATS(Loop, Optimization_max_ang_error_to_id, );
+
137 RTABMAP_STATS(Loop, Optimization_max_error_removed_from_id, );
+
138 RTABMAP_STATS(Loop, Optimization_max_error_removed_to_id, );
+
139 RTABMAP_STATS(Loop, Optimization_max_error_removed_count, );
+
140 RTABMAP_STATS(Loop, Linear_variance,);
+
141 RTABMAP_STATS(Loop, Angular_variance,);
+
142 RTABMAP_STATS(Loop, Landmark_detected,);
+
143 RTABMAP_STATS(Loop, Landmark_detected_node_ref,);
+
144 RTABMAP_STATS(Loop, Visual_inliers_mean_dist,m);
+
145 RTABMAP_STATS(Loop, Visual_inliers_distribution,);
+
146 RTABMAP_STATS(Loop, Proximity_links_cleared,);
+
147 //Odom correction
+
148 RTABMAP_STATS(Loop, Odom_correction_norm, m);
+
149 RTABMAP_STATS(Loop, Odom_correction_angle, deg);
+
150 RTABMAP_STATS(Loop, Odom_correction_x, m);
+
151 RTABMAP_STATS(Loop, Odom_correction_y, m);
+
152 RTABMAP_STATS(Loop, Odom_correction_z, m);
+
153 RTABMAP_STATS(Loop, Odom_correction_roll, deg);
+
154 RTABMAP_STATS(Loop, Odom_correction_pitch, deg);
+
155 RTABMAP_STATS(Loop, Odom_correction_yaw, deg);
+
156 // Map to Odom
+
157 RTABMAP_STATS(Loop, MapToOdom_norm, m);
+
158 RTABMAP_STATS(Loop, MapToOdom_angle, deg);
+
159 RTABMAP_STATS(Loop, MapToOdom_x, m);
+
160 RTABMAP_STATS(Loop, MapToOdom_y, m);
+
161 RTABMAP_STATS(Loop, MapToOdom_z, m);
+
162 RTABMAP_STATS(Loop, MapToOdom_roll, deg);
+
163 RTABMAP_STATS(Loop, MapToOdom_pitch, deg);
+
164 RTABMAP_STATS(Loop, MapToOdom_yaw, deg);
+
165 // Map to Base
+
166 RTABMAP_STATS(Loop, MapToBase_x, m);
+
167 RTABMAP_STATS(Loop, MapToBase_y, m);
+
168 RTABMAP_STATS(Loop, MapToBase_z, m);
+
169 RTABMAP_STATS(Loop, MapToBase_roll, deg);
+
170 RTABMAP_STATS(Loop, MapToBase_pitch, deg);
+
171 RTABMAP_STATS(Loop, MapToBase_yaw, deg);
+
172 RTABMAP_STATS(Loop, MapToBase_lin_std, m);
+
173 RTABMAP_STATS(Loop, MapToBase_lin_var, m2);
+
174
+
175 RTABMAP_STATS(Proximity, Time_detections,);
+
176 RTABMAP_STATS(Proximity, Space_last_detection_id,);
+
177 RTABMAP_STATS(Proximity, Space_paths,);
+
178 RTABMAP_STATS(Proximity, Space_visual_paths_checked,);
+
179 RTABMAP_STATS(Proximity, Space_scan_paths_checked,);
+
180 RTABMAP_STATS(Proximity, Space_detections_added_visually,);
+
181 RTABMAP_STATS(Proximity, Space_detections_added_icp_multi,);
+
182 RTABMAP_STATS(Proximity, Space_detections_added_icp_global,);
+
183
+
184 RTABMAP_STATS(NeighborLinkRefining, Accepted,);
+
185 RTABMAP_STATS(NeighborLinkRefining, Inliers,);
+
186 RTABMAP_STATS(NeighborLinkRefining, ICP_inliers_ratio,);
+
187 RTABMAP_STATS(NeighborLinkRefining, ICP_rotation, rad);
+
188 RTABMAP_STATS(NeighborLinkRefining, ICP_translation, m);
+
189 RTABMAP_STATS(NeighborLinkRefining, ICP_complexity,);
+
190 RTABMAP_STATS(NeighborLinkRefining, Variance,);
+
191 RTABMAP_STATS(NeighborLinkRefining, Pts,);
+
192
+
193 RTABMAP_STATS(Memory, Working_memory_size,);
+
194 RTABMAP_STATS(Memory, Working_memory_inter_size,);
+
195 RTABMAP_STATS(Memory, Short_time_memory_size,);
+
196 RTABMAP_STATS(Memory, Short_time_memory_inter_size,);
+
197 RTABMAP_STATS(Memory, Database_memory_used, MB);
+
198 RTABMAP_STATS(Memory, Signatures_removed,);
+
199 RTABMAP_STATS(Memory, Immunized_globally,);
+
200 RTABMAP_STATS(Memory, Immunized_locally,);
+
201 RTABMAP_STATS(Memory, Immunized_locally_max,);
+
202 RTABMAP_STATS(Memory, Signatures_retrieved,);
+
203 RTABMAP_STATS(Memory, Images_buffered,);
+
204 RTABMAP_STATS(Memory, Rehearsal_sim,);
+
205 RTABMAP_STATS(Memory, Rehearsal_id,);
+
206 RTABMAP_STATS(Memory, Rehearsal_merged,);
+
207 RTABMAP_STATS(Memory, Local_graph_size,);
+
208 RTABMAP_STATS(Memory, Odom_cache_poses,);
+
209 RTABMAP_STATS(Memory, Odom_cache_links,);
+
210 RTABMAP_STATS(Memory, Small_movement,);
+
211 RTABMAP_STATS(Memory, Fast_movement,);
+
212 RTABMAP_STATS(Memory, New_landmark,);
+
213 RTABMAP_STATS(Memory, Odometry_variance_ang,);
+
214 RTABMAP_STATS(Memory, Odometry_variance_lin,);
+
215 RTABMAP_STATS(Memory, Distance_travelled, m);
+
216 RTABMAP_STATS(Memory, RAM_usage, MB);
+
217 RTABMAP_STATS(Memory, RAM_estimated, MB);
+
218 RTABMAP_STATS(Memory, Triangulated_points, );
+
219 RTABMAP_STATS(Memory, Closest_node_distance, m);
+
220 RTABMAP_STATS(Memory, Closest_node_angle, rad);
+
221
+
222 RTABMAP_STATS(Timing, Memory_update, ms);
+
223 RTABMAP_STATS(Timing, Neighbor_link_refining, ms);
+
224 RTABMAP_STATS(Timing, Proximity_by_time, ms);
+
225 RTABMAP_STATS(Timing, Proximity_by_space_search, ms);
+
226 RTABMAP_STATS(Timing, Proximity_by_space_visual, ms);
+
227 RTABMAP_STATS(Timing, Proximity_by_space, ms);
+
228 RTABMAP_STATS(Timing, Cleaning_neighbors, ms);
+
229 RTABMAP_STATS(Timing, Reactivation, ms);
+
230 RTABMAP_STATS(Timing, Add_loop_closure_link, ms);
+
231 RTABMAP_STATS(Timing, Map_optimization, ms);
+
232 RTABMAP_STATS(Timing, Likelihood_computation, ms);
+
233 RTABMAP_STATS(Timing, Posterior_computation, ms);
+
234 RTABMAP_STATS(Timing, Hypotheses_creation, ms);
+
235 RTABMAP_STATS(Timing, Hypotheses_validation, ms);
+
236 RTABMAP_STATS(Timing, Statistics_creation, ms);
+
237 RTABMAP_STATS(Timing, Memory_cleanup, ms);
+
238 RTABMAP_STATS(Timing, Total, ms);
+
239 RTABMAP_STATS(Timing, Forgetting, ms);
+
240 RTABMAP_STATS(Timing, Joining_trash, ms);
+
241 RTABMAP_STATS(Timing, Emptying_trash, ms);
+
242 RTABMAP_STATS(Timing, Finalizing_statistics, ms);
+
243 RTABMAP_STATS(Timing, RAM_estimation, ms);
+
244
+
245 RTABMAP_STATS(TimingMem, Pre_update, ms);
+
246 RTABMAP_STATS(TimingMem, Signature_creation, ms);
+
247 RTABMAP_STATS(TimingMem, Rehearsal, ms);
+
248 RTABMAP_STATS(TimingMem, Keypoints_detection, ms);
+
249 RTABMAP_STATS(TimingMem, Subpixel, ms);
+
250 RTABMAP_STATS(TimingMem, Stereo_correspondences, ms);
+
251 RTABMAP_STATS(TimingMem, Descriptors_extraction, ms);
+
252 RTABMAP_STATS(TimingMem, Rectification, ms);
+
253 RTABMAP_STATS(TimingMem, Keypoints_3D, ms);
+
254 RTABMAP_STATS(TimingMem, Keypoints_3D_motion, ms);
+
255 RTABMAP_STATS(TimingMem, Joining_dictionary_update, ms);
+
256 RTABMAP_STATS(TimingMem, Add_new_words, ms);
+
257 RTABMAP_STATS(TimingMem, Compressing_data, ms);
+
258 RTABMAP_STATS(TimingMem, Post_decimation, ms);
+
259 RTABMAP_STATS(TimingMem, Scan_filtering, ms);
+
260 RTABMAP_STATS(TimingMem, Occupancy_grid, ms);
+
261 RTABMAP_STATS(TimingMem, Markers_detection, ms);
+
262
+
263 RTABMAP_STATS(Keypoint, Dictionary_size, words);
+
264 RTABMAP_STATS(Keypoint, Current_frame, words);
+
265 RTABMAP_STATS(Keypoint, Indexed_words, words);
+
266 RTABMAP_STATS(Keypoint, Index_memory_usage, KB);
+
267
+
268 RTABMAP_STATS(Gt, Translational_rmse, m);
+
269 RTABMAP_STATS(Gt, Translational_mean, m);
+
270 RTABMAP_STATS(Gt, Translational_median, m);
+
271 RTABMAP_STATS(Gt, Translational_std, m);
+
272 RTABMAP_STATS(Gt, Translational_min, m);
+
273 RTABMAP_STATS(Gt, Translational_max, m);
+
274 RTABMAP_STATS(Gt, Rotational_rmse, deg);
+
275 RTABMAP_STATS(Gt, Rotational_mean, deg);
+
276 RTABMAP_STATS(Gt, Rotational_median, deg);
+
277 RTABMAP_STATS(Gt, Rotational_std, deg);
+
278 RTABMAP_STATS(Gt, Rotational_min, deg);
+
279 RTABMAP_STATS(Gt, Rotational_max, deg);
+
280 RTABMAP_STATS(Gt, Localization_linear_error, m);
+
281 RTABMAP_STATS(Gt, Localization_angular_error, deg);
+
282
+
283public:
+
292 static const std::map<std::string, float> & defaultData();
+
293
+
307 static std::string serializeData(const std::map<std::string, float> & data);
+
308
+
321 static std::map<std::string, float> deserializeData(const std::string & data);
+
322
+
323public:
+ +
333
+
337 virtual ~Statistics();
+
338
+
354 void addStatistic(const std::string & name, float value);
+
355
+
356 // setters
+
357
+
367 void setExtended(bool extended) {_extended = extended;}
+
368
+
373 void setRefImageId(int id) {_refImageId = id;}
+
374
+
379 void setRefImageMapId(int id) {_refImageMapId = id;}
+
380
+
385 void setLoopClosureId(int id) {_loopClosureId = id;}
+
386
+
391 void setLoopClosureMapId(int id) {_loopClosureMapId = id;}
+
392
+
397 void setProximityDetectionId(int id) {_proximiyDetectionId = id;}
+
398
+
403 void setProximityDetectionMapId(int id) {_proximiyDetectionMapId = id;}
+
404
+
409 void setStamp(double stamp) {_stamp = stamp;}
+
410
+
418 RTABMAP_DEPRECATED void setLastSignatureData(const Signature & data);
+
419
+
430 void addSignatureData(const Signature & data) {uInsert(_signaturesData, std::make_pair(data.id(), data));}
+
431
+
436 void setSignaturesData(const std::map<int, Signature> & data) {_signaturesData = data;}
+
437
+
446 void setPoses(const std::map<int, Transform> & poses) {_poses = poses;}
+
447
+
456 void setConstraints(const std::multimap<int, Link> & constraints) {_constraints = constraints;}
+
457
+
467 void setMapCorrection(const Transform & mapCorrection) {_mapCorrection = mapCorrection;}
+
468
+
476 void setLoopClosureTransform(const Transform & loopClosureTransform) {_loopClosureTransform = loopClosureTransform;}
+
477
+
485 void setLocalizationCovariance(const cv::Mat & covariance) {_localizationCovariance = covariance;}
+
486
+
491 void setLabels(const std::map<int, std::string> & labels) {_labels = labels;}
+
492
+
497 void setWeights(const std::map<int, int> & weights) {_weights = weights;}
+
498
+
504 void setPosterior(const std::map<int, float> & posterior) {_posterior = posterior;}
+
505
+
513 void setLikelihood(const std::map<int, float> & likelihood) {_likelihood = likelihood;}
+
514
+
519 void setRawLikelihood(const std::map<int, float> & rawLikelihood) {_rawLikelihood = rawLikelihood;}
+
520
+
528 void setLocalPath(const std::vector<int> & localPath) {_localPath=localPath;}
+
529
+
534 void setCurrentGoalId(int goal) {_currentGoalId=goal;}
+
535
+
543 void setReducedIds(const std::map<int, int> & reducedIds) {_reducedIds = reducedIds;}
+
544
+
552 void setWmState(const std::vector<int> & state) {_wmState = state;}
+
553
+
561 void setOdomCachePoses(const std::map<int, Transform> & poses) {_odomCachePoses = poses;}
+
562
+
570 void setOdomCacheConstraints(const std::multimap<int, Link> & constraints) {_odomCacheConstraints = constraints;}
+
571
+
572 // getters
+
573
+
578 bool extended() const {return _extended;}
+
579
+
584 int refImageId() const {return _refImageId;}
+
585
+
590 int refImageMapId() const {return _refImageMapId;}
+
591
+
596 int loopClosureId() const {return _loopClosureId;}
+
597
+
602 int loopClosureMapId() const {return _loopClosureMapId;}
+
603
+
608 int proximityDetectionId() const {return _proximiyDetectionId;}
+
609
+
614 int proximityDetectionMapId() const {return _proximiyDetectionMapId;}
+
615
+
620 double stamp() const {return _stamp;}
+
621
+
630 const Signature & getLastSignatureData() const {return _signaturesData.empty()?_dummyEmptyData:_signaturesData.rbegin()->second;}
+
631
+
636 const std::map<int, Signature> & getSignaturesData() const {return _signaturesData;}
+
637
+
642 const std::map<int, Transform> & poses() const {return _poses;}
+
643
+
648 const std::multimap<int, Link> & constraints() const {return _constraints;}
+
649
+
657 const Transform & mapCorrection() const {return _mapCorrection;}
+
658
+
663 const Transform & loopClosureTransform() const {return _loopClosureTransform;}
+
664
+
669 const cv::Mat & localizationCovariance() const {return _localizationCovariance;}
+
670
+
675 const std::map<int, std::string> & labels() const {return _labels;}
+
676
+
681 const std::map<int, int> & weights() const {return _weights;}
+
682
+
687 const std::map<int, float> & posterior() const {return _posterior;}
+
688
+
693 const std::map<int, float> & likelihood() const {return _likelihood;}
+
694
+
699 const std::map<int, float> & rawLikelihood() const {return _rawLikelihood;}
+
700
+
705 const std::vector<int> & localPath() const {return _localPath;}
+
706
+
711 int currentGoalId() const {return _currentGoalId;}
+
712
+
717 const std::map<int, int> & reducedIds() const {return _reducedIds;}
+
718
+
723 const std::vector<int> & wmState() const {return _wmState;}
+
724
+
729 const std::map<int, Transform> & odomCachePoses() const {return _odomCachePoses;}
+
730
+
735 const std::multimap<int, Link> & odomCacheConstraints() const {return _odomCacheConstraints;}
+
736
+
748 const std::map<std::string, float> & data() const {return _data;}
+
749
+
750private:
+
751 bool _extended;
+
752
+
753 int _refImageId;
+
754 int _refImageMapId;
+
755 int _loopClosureId;
+
756 int _loopClosureMapId;
+
757 int _proximiyDetectionId;
+
758 int _proximiyDetectionMapId;
+
759 double _stamp;
+
760
+
761 std::map<int, Signature> _signaturesData;
+
762 Signature _dummyEmptyData;
+
763
+
764 std::map<int, Transform> _poses;
+
765 std::multimap<int, Link> _constraints;
+
766 Transform _mapCorrection;
+
767 Transform _loopClosureTransform;
+
768 cv::Mat _localizationCovariance;
+
769
+
770 std::map<int, std::string> _labels;
+
771 std::map<int, int> _weights;
+
772 std::map<int, float> _posterior;
+
773 std::map<int, float> _likelihood;
+
774 std::map<int, float> _rawLikelihood;
+
775
+
776 std::vector<int> _localPath;
+
777 int _currentGoalId;
+
778
+
779 std::map<int, int> _reducedIds;
+
780
+
781 std::vector<int> _wmState;
+
782
+
783 std::map<int, Transform> _odomCachePoses;
+
784 std::multimap<int, Link> _odomCacheConstraints;
+
785
+
795 std::map<std::string, float> _data;
+
796
+
797 static std::map<std::string, float> _defaultData;
+
798 static bool _defaultDataInitialized;
+
799 // end extended data
+
800};
+
+
801
+
802}// end namespace rtabmap
+
803
+
804#endif /* STATISTICS_H_ */
+
Wrappers of STL for convenient functions.
+
void uInsert(std::map< K, V > &map, const std::pair< K, V > &pair)
Definition UStl.h:441
+
Three-tiered memory management (STM, WM, LTM) for RTAB-Map.
Definition Memory.h:102
+
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
+
int id() const
Returns the signature ID.
Definition Signature.h:168
+
Collects and manages runtime statistics for RTAB-Map.
Definition Statistics.h:108
+
int proximityDetectionId() const
Returns the proximity detection ID.
Definition Statistics.h:608
+
const std::vector< int > & wmState() const
Returns the working memory state.
Definition Statistics.h:723
+
void setStamp(double stamp)
Sets the timestamp for these statistics.
Definition Statistics.h:409
+
static std::map< std::string, float > deserializeData(const std::string &data)
Deserializes a statistics data map from a string.
+
void setLoopClosureId(int id)
Sets the loop closure detection ID.
Definition Statistics.h:385
+
int loopClosureMapId() const
Returns the loop closure map ID.
Definition Statistics.h:602
+
bool extended() const
Returns whether extended statistics mode is enabled.
Definition Statistics.h:578
+
void setRawLikelihood(const std::map< int, float > &rawLikelihood)
Sets raw likelihood values (before normalization)
Definition Statistics.h:519
+
double stamp() const
Returns the timestamp.
Definition Statistics.h:620
+
void addStatistic(const std::string &name, float value)
Adds a statistic value to the data map.
+
void setProximityDetectionId(int id)
Sets the proximity detection ID.
Definition Statistics.h:397
+
const std::multimap< int, Link > & constraints() const
Returns the constraint graph.
Definition Statistics.h:648
+
const Transform & loopClosureTransform() const
Returns the loop closure transform.
Definition Statistics.h:663
+
void setRefImageMapId(int id)
Sets the reference image map ID.
Definition Statistics.h:379
+
void setLoopClosureMapId(int id)
Sets the loop closure map ID.
Definition Statistics.h:391
+
void setLocalPath(const std::vector< int > &localPath)
Sets the local path (sequence of node IDs)
Definition Statistics.h:528
+
const std::multimap< int, Link > & odomCacheConstraints() const
Returns odometry cache constraints.
Definition Statistics.h:735
+
int refImageMapId() const
Returns the reference image map ID.
Definition Statistics.h:590
+
const std::map< int, float > & rawLikelihood() const
Returns raw likelihood values.
Definition Statistics.h:699
+
int refImageId() const
Returns the reference image ID.
Definition Statistics.h:584
+
const cv::Mat & localizationCovariance() const
Returns the localization covariance matrix.
Definition Statistics.h:669
+
const std::map< int, float > & likelihood() const
Returns likelihood values.
Definition Statistics.h:693
+
void setRefImageId(int id)
Sets the reference image ID (current/last processed signature ID)
Definition Statistics.h:373
+
void addSignatureData(const Signature &data)
Adds signature data to the statistics.
Definition Statistics.h:430
+
const Signature & getLastSignatureData() const
Returns the last signature data.
Definition Statistics.h:630
+
void setProximityDetectionMapId(int id)
Sets the proximity detection map ID.
Definition Statistics.h:403
+
Statistics()
Default constructor.
+
void setOdomCachePoses(const std::map< int, Transform > &poses)
Sets odometry cache poses.
Definition Statistics.h:561
+
void setMapCorrection(const Transform &mapCorrection)
Sets the map correction transform.
Definition Statistics.h:467
+
int loopClosureId() const
Returns the loop closure detection ID.
Definition Statistics.h:596
+
void setLocalizationCovariance(const cv::Mat &covariance)
Sets the localization covariance matrix.
Definition Statistics.h:485
+
const Transform & mapCorrection() const
Returns the map correction transform.
Definition Statistics.h:657
+
const std::vector< int > & localPath() const
Returns the local path.
Definition Statistics.h:705
+
void setCurrentGoalId(int goal)
Sets the current goal node ID.
Definition Statistics.h:534
+
void setLikelihood(const std::map< int, float > &likelihood)
Sets likelihood values for loop closure hypotheses.
Definition Statistics.h:513
+
const std::map< int, int > & reducedIds() const
Returns the reduced IDs mapping.
Definition Statistics.h:717
+
const std::map< int, Transform > & odomCachePoses() const
Returns odometry cache poses.
Definition Statistics.h:729
+
void setPosterior(const std::map< int, float > &posterior)
Sets posterior probabilities for loop closure hypotheses.
Definition Statistics.h:504
+
static const std::map< std::string, float > & defaultData()
Returns the default statistics data map.
+
void setWeights(const std::map< int, int > &weights)
Sets node weights.
Definition Statistics.h:497
+
void setExtended(bool extended)
Sets whether extended statistics mode is enabled.
Definition Statistics.h:367
+
void setWmState(const std::vector< int > &state)
Sets the working memory state.
Definition Statistics.h:552
+
void setLabels(const std::map< int, std::string > &labels)
Sets node labels.
Definition Statistics.h:491
+
const std::map< int, int > & weights() const
Returns node weights.
Definition Statistics.h:681
+
static std::string serializeData(const std::map< std::string, float > &data)
Serializes a statistics data map to a string.
+
const std::map< std::string, float > & data() const
Returns the statistics data map.
Definition Statistics.h:748
+
const std::map< int, Signature > & getSignaturesData() const
Returns all signature data.
Definition Statistics.h:636
+
void setReducedIds(const std::map< int, int > &reducedIds)
Sets the reduced IDs mapping.
Definition Statistics.h:543
+
void setLoopClosureTransform(const Transform &loopClosureTransform)
Sets the loop closure transform.
Definition Statistics.h:476
+
void setConstraints(const std::multimap< int, Link > &constraints)
Sets the constraint graph (links between nodes)
Definition Statistics.h:456
+
const std::map< int, float > & posterior() const
Returns posterior probabilities.
Definition Statistics.h:687
+
const std::map< int, Transform > & poses() const
Returns the pose graph.
Definition Statistics.h:642
+
void setPoses(const std::map< int, Transform > &poses)
Sets the pose graph (node poses)
Definition Statistics.h:446
+
void setSignaturesData(const std::map< int, Signature > &data)
Sets all signature data at once.
Definition Statistics.h:436
+
int currentGoalId() const
Returns the current goal node ID.
Definition Statistics.h:711
+
void setOdomCacheConstraints(const std::multimap< int, Link > &constraints)
Sets odometry cache constraints.
Definition Statistics.h:570
+
RTABMAP_DEPRECATED void setLastSignatureData(const Signature &data)
Sets the last signature data (deprecated)
+
int proximityDetectionMapId() const
Returns the proximity detection map ID.
Definition Statistics.h:614
+
virtual ~Statistics()
Virtual destructor.
+
const std::map< int, std::string > & labels() const
Returns node labels.
Definition Statistics.h:675
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/StereoBM_8h_source.html b/preview/pr-1492/api/latest/StereoBM_8h_source.html new file mode 100644 index 00000000..71832da7 --- /dev/null +++ b/preview/pr-1492/api/latest/StereoBM_8h_source.html @@ -0,0 +1,170 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/stereo/StereoBM.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
StereoBM.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef STEREOBM_H_
+
29#define STEREOBM_H_
+
30
+
31#include <rtabmap/core/StereoDense.h>
+
32#include <rtabmap/core/Parameters.h>
+
33#include <opencv2/core/core.hpp>
+
34
+
35namespace rtabmap {
+
36
+
+
47class RTABMAP_CORE_EXPORT StereoBM : public StereoDense {
+
48public:
+
55 StereoBM(int blockSize, int numDisparities);
+
56
+
64 StereoBM(const ParametersMap & parameters = ParametersMap());
+
65
+
69 virtual ~StereoBM() {}
+
70
+
89 virtual void parseParameters(const ParametersMap & parameters);
+
90
+
104 virtual cv::Mat computeDisparity(
+
105 const cv::Mat & leftImage,
+
106 const cv::Mat & rightImage) const;
+
107
+
108private:
+
109 int blockSize_;
+
110 int minDisparity_;
+
111 int numDisparities_;
+
112 int preFilterSize_;
+
113 int preFilterCap_;
+
114 int uniquenessRatio_;
+
115 int textureThreshold_;
+
116 int speckleWindowSize_;
+
117 int speckleRange_;
+
118 int disp12MaxDiff_;
+
119};
+
+
120
+
121} /* namespace rtabmap */
+
122
+
123#endif /* STEREOBM_H_ */
+
Block Matching algorithm for dense stereo matching.
Definition StereoBM.h:47
+
StereoBM(int blockSize, int numDisparities)
Constructor with explicit block size and number of disparities.
+
virtual ~StereoBM()
Virtual destructor.
Definition StereoBM.h:69
+
StereoBM(const ParametersMap &parameters=ParametersMap())
Constructor with parameters map.
+
virtual cv::Mat computeDisparity(const cv::Mat &leftImage, const cv::Mat &rightImage) const
Compute disparity map from stereo image pair.
+
virtual void parseParameters(const ParametersMap &parameters)
Parse parameters from a parameters map.
+
Abstract base class for dense stereo matching algorithms.
Definition StereoDense.h:53
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/StereoCameraModel_8h_source.html b/preview/pr-1492/api/latest/StereoCameraModel_8h_source.html new file mode 100644 index 00000000..1d49c767 --- /dev/null +++ b/preview/pr-1492/api/latest/StereoCameraModel_8h_source.html @@ -0,0 +1,306 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/StereoCameraModel.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
StereoCameraModel.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef STEREOCAMERAMODEL_H_
+
29#define STEREOCAMERAMODEL_H_
+
30
+
31#include <rtabmap/core/CameraModel.h>
+
32
+
33namespace rtabmap {
+
34
+
+
53class RTABMAP_CORE_EXPORT StereoCameraModel
+
54{
+
55public:
+
59 StereoCameraModel() : leftSuffix_("left"), rightSuffix_("right") {}
+
60
+ +
93 const std::string & name,
+
94 const cv::Size & imageSize1,
+
95 const cv::Mat & K1, const cv::Mat & D1, const cv::Mat & R1, const cv::Mat & P1,
+
96 const cv::Size & imageSize2,
+
97 const cv::Mat & K2, const cv::Mat & D2, const cv::Mat & R2, const cv::Mat & P2,
+
98 const cv::Mat & R, const cv::Mat & T, const cv::Mat & E, const cv::Mat & F,
+
99 const Transform & localTransform = Transform(0,0,1,0, -1,0,0,0, 0,-1,0,0));
+
100
+ +
125 const std::string & name,
+
126 const CameraModel & leftCameraModel,
+
127 const CameraModel & rightCameraModel,
+
128 const cv::Mat & R = cv::Mat(),
+
129 const cv::Mat & T = cv::Mat(),
+
130 const cv::Mat & E = cv::Mat(),
+
131 const cv::Mat & F = cv::Mat());
+
132
+ +
157 const std::string & name,
+
158 const CameraModel & leftCameraModel,
+
159 const CameraModel & rightCameraModel,
+
160 const Transform & extrinsics);
+
161
+ +
181 double fx,
+
182 double fy,
+
183 double cx,
+
184 double cy,
+
185 double baseline,
+
186 const Transform & localTransform = Transform(0,0,1,0, -1,0,0,0, 0,-1,0,0),
+
187 const cv::Size & imageSize = cv::Size(0,0));
+
188
+ +
207 const std::string & name,
+
208 double fx,
+
209 double fy,
+
210 double cx,
+
211 double cy,
+
212 double baseline,
+
213 const Transform & localTransform = Transform(0,0,1,0, -1,0,0,0, 0,-1,0,0),
+
214 const cv::Size & imageSize = cv::Size(0,0));
+
215
+ +
220
+
224 bool isValidForProjection() const {return left_.isValidForProjection() && right_.isValidForProjection() && baseline() > 0.0;}
+
225
+
229 bool isValidForRectification() const {return left_.isValidForRectification() && right_.isValidForRectification();}
+
230
+
234 void initRectificationMap() {left_.initRectificationMap(); right_.initRectificationMap();}
+
235
+
239 bool isRectificationMapInitialized() const {return left_.isRectificationMapInitialized() && right_.isRectificationMapInitialized();}
+
240
+
253 void setName(const std::string & name, const std::string & leftSuffix = "left", const std::string & rightSuffix = "right");
+
254
+
258 const std::string & name() const {return name_;}
+
259
+
263 void setImageSize(const cv::Size & size) {left_.setImageSize(size); right_.setImageSize(size);}
+
264
+
284 bool load(const std::string & directory, const std::string & cameraName, bool ignoreStereoTransform = true, bool initRectificationMaps = true);
+
285
+
299 bool save(const std::string & directory, bool ignoreStereoTransform = true) const;
+
300
+
315 bool saveStereoTransform(const std::string & directory) const;
+
316
+
330 std::vector<unsigned char> serialize() const;
+
331
+
343 unsigned int deserialize(const std::vector<unsigned char>& data);
+
344
+
365 unsigned int deserialize(const unsigned char * data, unsigned int dataSize);
+
366
+
378 double baseline() const {return right_.fx()!=0.0 && left_.fx() != 0.0 ? left_.Tx() / left_.fx() - right_.Tx()/right_.fx():0.0;}
+
379
+
395 float computeDepth(float disparity) const;
+
396
+
411 float computeDisparity(float depth) const; // m
+
412
+
428 float computeDisparity(unsigned short depth) const; // mm
+
429
+
430 const cv::Mat & R() const {return R_;}
+
+
431 const cv::Mat & T() const {return T_;}
+
+
432 const cv::Mat & E() const {return E_;}
+
+
433 const cv::Mat & F() const {return F_;}
+
434
+
+
447 void scale(double scale);
+
448
+
461 void roi(const cv::Rect & roi);
+
462
+
466 void setLocalTransform(const Transform & transform) {left_.setLocalTransform(transform);}
+
467
+
471 const Transform & localTransform() const {return left_.localTransform();}
+
472
+ +
498
+
502 const CameraModel & left() const {return left_;}
+
506 const CameraModel & right() const {return right_;}
+
507
+
511 const std::string & getLeftSuffix() const {return leftSuffix_;}
+
515 const std::string & getRightSuffix() const {return rightSuffix_;}
+
516
+
517private:
+
528 void updateStereoRectification();
+
529
+
530private:
+
531 std::string leftSuffix_;
+
532 std::string rightSuffix_;
+
533 CameraModel left_;
+
534 CameraModel right_;
+
535 std::string name_;
+
536
+
537 cv::Mat R_;
+
538 cv::Mat T_;
+
539 cv::Mat E_;
+
540 cv::Mat F_;
+
541};
+
542
+
556RTABMAP_CORE_EXPORT std::ostream& operator<<(std::ostream& os, const StereoCameraModel& model);
+
557
+
558} // rtabmap
+
559
+
560#endif /* STEREOCAMERAMODEL_H_ */
+
+
+
+
+
+
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+
A class representing a calibrated stereo camera system.
+
const CameraModel & left() const
Returns the left camera model.
+
StereoCameraModel(double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))
Minimal constructor using focal lengths and baseline only.
+
StereoCameraModel()
Default constructor. Creates an empty stereo model with default suffixes ("left", "right").
+
StereoCameraModel(const std::string &name, const cv::Size &imageSize1, const cv::Mat &K1, const cv::Mat &D1, const cv::Mat &R1, const cv::Mat &P1, const cv::Size &imageSize2, const cv::Mat &K2, const cv::Mat &D2, const cv::Mat &R2, const cv::Mat &P2, const cv::Mat &R, const cv::Mat &T, const cv::Mat &E, const cv::Mat &F, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0))
Constructs a StereoCameraModel from detailed intrinsic and extrinsic parameters for both cameras.
+
bool saveStereoTransform(const std::string &directory) const
Saves stereo extrinsic parameters to a YAML file in ROS format.
+
const cv::Mat & F() const
Fundamental matrix.
+
void scale(double scale)
Scales both cameras' calibration by a factor.
+
float computeDisparity(unsigned short depth) const
Computes the disparity value from a depth given in unsigned short format (millimeters).
+
const std::string & getRightSuffix() const
Gets the suffix used for the right camera calibration file.
+
std::vector< unsigned char > serialize() const
Serializes the stereo camera model into a byte vector.
+
Transform stereoTransform() const
Returns the stereo transform (left camera relative to right camera coordinate system).
+
float computeDepth(float disparity) const
Computes the depth (Z coordinate) from a given disparity value.
+
const Transform & localTransform() const
Gets the local transform from left camera to robot base.
+
void initRectificationMap()
Initializes the rectification maps for both cameras.
+
bool isValidForProjection() const
Returns true if both left and right models are valid for projection and the baseline is positive.
+
unsigned int deserialize(const std::vector< unsigned char > &data)
Deserializes stereo camera model data from a byte vector.
+
StereoCameraModel(const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const Transform &extrinsics)
Constructs a StereoCameraModel from two camera models and an extrinsic Transform between them.
+
const std::string & getLeftSuffix() const
Gets the suffix used for the left camera calibration file.
+
const cv::Mat & R() const
Stereo extrinsic rotation matrix.
+
const cv::Mat & T() const
Stereo extrinsic translation vector.
+
void setImageSize(const cv::Size &size)
Sets the image size for both left and right cameras.
+
const cv::Mat & E() const
Essential matrix.
+
double baseline() const
Returns the stereo baseline in meters.
+
StereoCameraModel(const std::string &name, double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))
Minimal constructor that also sets a name, required if we want to save it to a file.
+
bool load(const std::string &directory, const std::string &cameraName, bool ignoreStereoTransform=true, bool initRectificationMaps=true)
Loads stereo camera calibration data from disk.
+
bool isRectificationMapInitialized() const
Returns true if rectification maps are initialized.
+
const CameraModel & right() const
Returns the right camera model.
+
bool save(const std::string &directory, bool ignoreStereoTransform=true) const
Saves stereo camera calibration data to disk.
+
void roi(const cv::Rect &roi)
Applies region-of-interest (ROI) cropping to both cameras.
+
bool isValidForRectification() const
Returns true if both left and right models are valid for rectification.
+
void setName(const std::string &name, const std::string &leftSuffix="left", const std::string &rightSuffix="right")
Sets the camera name and optional image suffixes for the left and right cameras.
+
const std::string & name() const
Gets the camera name.
+
StereoCameraModel(const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const cv::Mat &R=cv::Mat(), const cv::Mat &T=cv::Mat(), const cv::Mat &E=cv::Mat(), const cv::Mat &F=cv::Mat())
Constructs a StereoCameraModel from two individual camera models and optional stereo extrinsic parame...
+
float computeDisparity(float depth) const
Computes the disparity value from a given depth.
+
void setLocalTransform(const Transform &transform)
Sets the local transform from left camera to robot base.
+
virtual ~StereoCameraModel()
Destructor.
+
unsigned int deserialize(const unsigned char *data, unsigned int dataSize)
Deserializes stereo camera model data from a raw byte array.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+ +
RTABMAP_CORE_EXPORT std::ostream & operator<<(std::ostream &os, const CameraModel &model)
Stream operator for printing a camera model to an output stream.
+
+ + + + diff --git a/preview/pr-1492/api/latest/StereoDense_8h_source.html b/preview/pr-1492/api/latest/StereoDense_8h_source.html new file mode 100644 index 00000000..b0eff569 --- /dev/null +++ b/preview/pr-1492/api/latest/StereoDense_8h_source.html @@ -0,0 +1,171 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/StereoDense.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
StereoDense.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef STEREODENSE_H_
+
29#define STEREODENSE_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/Parameters.h>
+
34#include <opencv2/core/core.hpp>
+
35
+
36namespace rtabmap {
+
37
+
+
53class RTABMAP_CORE_EXPORT StereoDense {
+
54public:
+
+
59 enum Type {
+
60 kTypeBM = 0,
+
61 kTypeSGBM = 1
+
62 };
+
+
63
+
75 static StereoDense * create(const ParametersMap & parameters);
+
76
+
87 static StereoDense * create(StereoDense::Type type, const ParametersMap & parameters = ParametersMap());
+
88
+
89public:
+
93 virtual ~StereoDense() {}
+
94
+
103 virtual void parseParameters(const ParametersMap & parameters) {}
+
104
+
119 virtual cv::Mat computeDisparity(
+
120 const cv::Mat & leftImage,
+
121 const cv::Mat & rightImage) const = 0;
+
122
+
123protected:
+
129 StereoDense(const ParametersMap & parameters = ParametersMap()) {}
+
130};
+
+
131
+
132} /* namespace rtabmap */
+
133
+
134#endif /* STEREODENSE_H_ */
+
Abstract base class for dense stereo matching algorithms.
Definition StereoDense.h:53
+
Type
Enumeration of available stereo matching algorithm types.
Definition StereoDense.h:59
+
StereoDense(const ParametersMap &parameters=ParametersMap())
Protected constructor.
+
virtual ~StereoDense()
Virtual destructor.
Definition StereoDense.h:93
+
virtual void parseParameters(const ParametersMap &parameters)
Parse parameters from a parameters map.
+
virtual cv::Mat computeDisparity(const cv::Mat &leftImage, const cv::Mat &rightImage) const =0
Compute disparity map from stereo image pair.
+
static StereoDense * create(const ParametersMap &parameters)
Factory method to create a StereoDense instance from parameters.
+
static StereoDense * create(StereoDense::Type type, const ParametersMap &parameters=ParametersMap())
Factory method to create a StereoDense instance of a specific type.
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/StereoSGBM_8h_source.html b/preview/pr-1492/api/latest/StereoSGBM_8h_source.html new file mode 100644 index 00000000..f35c4f1e --- /dev/null +++ b/preview/pr-1492/api/latest/StereoSGBM_8h_source.html @@ -0,0 +1,168 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/stereo/StereoSGBM.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
StereoSGBM.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef STEREOSGBM_H_
+
29#define STEREOSGBM_H_
+
30
+
31#include <rtabmap/core/StereoDense.h>
+
32#include <rtabmap/core/Parameters.h>
+
33#include <opencv2/core/core.hpp>
+
34
+
35namespace rtabmap {
+
36
+
+
51class RTABMAP_CORE_EXPORT StereoSGBM : public StereoDense {
+
52public:
+
60 StereoSGBM(const ParametersMap & parameters = ParametersMap());
+
61
+
65 virtual ~StereoSGBM() {}
+
66
+
86 virtual void parseParameters(const ParametersMap & parameters);
+
87
+
101 virtual cv::Mat computeDisparity(
+
102 const cv::Mat & leftImage,
+
103 const cv::Mat & rightImage) const;
+
104
+
105private:
+
106 int blockSize_;
+
107 int minDisparity_;
+
108 int numDisparities_;
+
109 int preFilterCap_;
+
110 int uniquenessRatio_;
+
111 int speckleWindowSize_;
+
112 int speckleRange_;
+
113 int P1_;
+
114 int P2_;
+
115 int disp12MaxDiff_;
+
116 int mode_;
+
117};
+
+
118
+
119} /* namespace rtabmap */
+
120
+
121#endif /* STEREOSGBM_H_ */
+
Abstract base class for dense stereo matching algorithms.
Definition StereoDense.h:53
+
Semi-Global Block Matching algorithm for dense stereo matching.
Definition StereoSGBM.h:51
+
virtual ~StereoSGBM()
Virtual destructor.
Definition StereoSGBM.h:65
+
virtual void parseParameters(const ParametersMap &parameters)
Parse parameters from a parameters map.
+
StereoSGBM(const ParametersMap &parameters=ParametersMap())
Constructor with parameters map.
+
virtual cv::Mat computeDisparity(const cv::Mat &leftImage, const cv::Mat &rightImage) const
Compute disparity map from stereo image pair.
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Stereo_8h_source.html b/preview/pr-1492/api/latest/Stereo_8h_source.html new file mode 100644 index 00000000..365aa536 --- /dev/null +++ b/preview/pr-1492/api/latest/Stereo_8h_source.html @@ -0,0 +1,252 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Stereo.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Stereo.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef STEREO_H_
+
29#define STEREO_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/Parameters.h>
+
34#include <opencv2/core/core.hpp>
+
35
+
36namespace rtabmap {
+
37
+
+
55class RTABMAP_CORE_EXPORT Stereo {
+
56public:
+
70 static Stereo * create(const ParametersMap & parameters = ParametersMap());
+
71
+
72public:
+
82 Stereo(const ParametersMap & parameters = ParametersMap());
+
83
+
87 virtual ~Stereo() {}
+
88
+
104 virtual void parseParameters(const ParametersMap & parameters);
+
105
+
124 virtual std::vector<cv::Point2f> computeCorrespondences(
+
125 const cv::Mat & leftImage,
+
126 const cv::Mat & rightImage,
+
127 const std::vector<cv::Point2f> & leftCorners,
+
128 std::vector<unsigned char> & status) const;
+
129#ifdef HAVE_OPENCV_CUDEV
+
143 virtual std::vector<cv::Point2f> computeCorrespondences(
+
144 const cv::cuda::GpuMat & leftImage,
+
145 const cv::cuda::GpuMat & rightImage,
+
146 const std::vector<cv::Point2f> & leftCorners,
+
147 std::vector<unsigned char> & status) const;
+
148#endif
+
149
+
154 cv::Size winSize() const {return cv::Size(winWidth_, winHeight_);}
+
155
+
160 int iterations() const {return iterations_;}
+
161
+
166 int maxLevel() const {return maxLevel_;}
+
167
+
172 float minDisparity() const {return minDisparity_;}
+
173
+
178 float maxDisparity() const {return maxDisparity_;}
+
179
+
184 bool winSSD() const {return winSSD_;}
+
185
+
190 virtual bool isGpuEnabled() const {return false;}
+
191
+
192private:
+
193 int winWidth_;
+
194 int winHeight_;
+
195 int iterations_;
+
196 int maxLevel_;
+
197 float minDisparity_;
+
198 float maxDisparity_;
+
199 bool winSSD_;
+
200};
+
+
201
+
+
219class RTABMAP_CORE_EXPORT StereoOpticalFlow : public Stereo {
+
220public:
+
230 StereoOpticalFlow(const ParametersMap & parameters = ParametersMap());
+
231
+ +
236
+
250 virtual void parseParameters(const ParametersMap & parameters);
+
251
+
269 virtual std::vector<cv::Point2f> computeCorrespondences(
+
270 const cv::Mat & leftImage,
+
271 const cv::Mat & rightImage,
+
272 const std::vector<cv::Point2f> & leftCorners,
+
273 std::vector<unsigned char> & status) const;
+
274
+
275#ifdef HAVE_OPENCV_CUDEV
+
291 virtual std::vector<cv::Point2f> computeCorrespondences(
+
292 const cv::cuda::GpuMat & leftImage,
+
293 const cv::cuda::GpuMat & rightImage,
+
294 const std::vector<cv::Point2f> & leftCorners,
+
295 std::vector<unsigned char> & status) const;
+
296#endif
+
297
+
302 float epsilon() const {return epsilon_;}
+
303
+
312 virtual bool isGpuEnabled() const;
+
313
+
314 bool usingMinEigenVals() const {return useMinEigenVals_;}
+
315 float minEigThreshold() const {return minEigThreshold_;}
+
316 float errorThreshold() const {return errorThreshold_;}
+
317
+
318private:
+
333 void updateStatus(
+
334 const std::vector<cv::Point2f> & leftCorners,
+
335 const std::vector<cv::Point2f> & rightCorners,
+
336 std::vector<unsigned char> & status,
+
337 std::vector<float> err = {}) const;
+
338
+
339private:
+
340 float epsilon_;
+
341 bool useMinEigenVals_;
+
342 float minEigThreshold_;
+
343 float errorThreshold_;
+
344 bool gpu_;
+
345};
+
+
346
+
347} /* namespace rtabmap */
+
348
+
349#endif /* STEREO_H_ */
+
Sparse stereo matching using optical flow.
Definition Stereo.h:219
+
virtual std::vector< cv::Point2f > computeCorrespondences(const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, std::vector< unsigned char > &status) const
Compute stereo correspondences using optical flow.
+
StereoOpticalFlow(const ParametersMap &parameters=ParametersMap())
Constructor.
+
virtual void parseParameters(const ParametersMap &parameters)
Parse parameters from a parameters map.
+
virtual bool isGpuEnabled() const
Check if GPU acceleration is enabled.
+
float epsilon() const
Get the convergence threshold (epsilon)
Definition Stereo.h:302
+
virtual ~StereoOpticalFlow()
Virtual destructor.
Definition Stereo.h:235
+
Sparse stereo matching using block matching.
Definition Stereo.h:55
+
Stereo(const ParametersMap &parameters=ParametersMap())
Constructor.
+
static Stereo * create(const ParametersMap &parameters=ParametersMap())
Factory method to create a Stereo instance.
+
int maxLevel() const
Get the maximum pyramid level.
Definition Stereo.h:166
+
virtual void parseParameters(const ParametersMap &parameters)
Parse parameters from a parameters map.
+
cv::Size winSize() const
Get the search window size.
Definition Stereo.h:154
+
float maxDisparity() const
Get the maximum disparity value.
Definition Stereo.h:178
+
float minDisparity() const
Get the minimum disparity value.
Definition Stereo.h:172
+
int iterations() const
Get the number of iterations.
Definition Stereo.h:160
+
virtual bool isGpuEnabled() const
Check if GPU acceleration is enabled.
Definition Stereo.h:190
+
virtual ~Stereo()
Virtual destructor.
Definition Stereo.h:87
+
bool winSSD() const
Check if SSD (Sum of Squared Differences) is used.
Definition Stereo.h:184
+
virtual std::vector< cv::Point2f > computeCorrespondences(const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, std::vector< unsigned char > &status) const
Compute stereo correspondences using block matching.
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Transform_8h_source.html b/preview/pr-1492/api/latest/Transform_8h_source.html new file mode 100644 index 00000000..9ee9bad4 --- /dev/null +++ b/preview/pr-1492/api/latest/Transform_8h_source.html @@ -0,0 +1,358 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/Transform.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Transform.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef TRANSFORM_H_
+
29#define TRANSFORM_H_
+
30
+
31#include <rtabmap/core/rtabmap_core_export.h>
+
32#include <vector>
+
33#include <string>
+
34#include <map>
+
35#include <Eigen/Core>
+
36#include <Eigen/Geometry>
+
37#include <opencv2/core/core.hpp>
+
38
+
39namespace rtabmap {
+
40
+
+
52class RTABMAP_CORE_EXPORT Transform
+
53{
+
54public:
+
55
+ +
65 Transform(float r11, float r12, float r13, float o14,
+
66 float r21, float r22, float r23, float o24,
+
67 float r31, float r32, float r33, float o34);
+
72 Transform(const cv::Mat & transformationMatrix);
+
78 Transform(float x, float y, float z, float roll, float pitch, float yaw);
+
84 Transform(float x, float y, float z, float qx, float qy, float qz, float qw);
+
88 Transform(float x, float y, float theta);
+
89
+ +
94
+
95 // --- Accessors (rotation matrix elements, translation) ---
+
96 float r11() const {return data()[0];}
+
97 float r12() const {return data()[1];}
+
98 float r13() const {return data()[2];}
+
99 float r21() const {return data()[4];}
+
100 float r22() const {return data()[5];}
+
101 float r23() const {return data()[6];}
+
102 float r31() const {return data()[8];}
+
103 float r32() const {return data()[9];}
+
104 float r33() const {return data()[10];}
+
105
+
106 float o14() const {return data()[3];}
+
+
107 float o24() const {return data()[7];}
+
+
108 float o34() const {return data()[11];}
+
109
+
110 float & operator[](int index) {return data()[index];}
+
111 const float & operator[](int index) const {return data()[index];}
+
112 float & operator()(int row, int col) {return data()[row*4 + col];}
+
113 const float & operator()(int row, int col) const {return data()[row*4 + col];}
+
114
+
118 bool isNull() const;
+
122 bool isIdentity() const;
+
123
+
127 void setNull();
+ +
132
+
136 const cv::Mat & dataMatrix() const {return data_;}
+
140 const float * data() const {return (const float *)data_.data;}
+
141 float * data() {return (float *)data_.data;}
+
142
+
146 int size() const {return 12;}
+
147
+
149 float & x() {return data()[3];}
+
+
150 float & y() {return data()[7];}
+
+
151 float & z() {return data()[11];}
+
152 const float & x() const {return data()[3];}
+
153 const float & y() const {return data()[7];}
+
154 const float & z() const {return data()[11];}
+
155
+
159 float theta() const;
+
160
+
164 bool isInvertible() const;
+ + + + + +
188 bool is3DoF() const;
+
192 bool is4DoF() const;
+
193
+
197 cv::Mat rotationMatrix() const;
+
201 cv::Mat translationMatrix() const;
+
202
+
206 void getTranslationAndEulerAngles(float & x, float & y, float & z, float & roll, float & pitch, float & yaw) const;
+
210 void getEulerAngles(float & roll, float & pitch, float & yaw) const;
+
214 void getTranslation(float & x, float & y, float & z) const;
+
218 float getAngle(const Transform & t) const;
+
222 float getNorm() const;
+
226 float getNormSquared() const;
+
230 float getDistance(const Transform & t) const;
+
234 float getDistanceSquared(const Transform & t) const;
+
240 Transform interpolate(float t, const Transform & other) const;
+ +
248 std::string prettyPrint() const;
+
249
+
251 Transform operator*(const Transform & t) const;
+
252 Transform & operator*=(const Transform & t);
+
253 bool operator==(const Transform & t) const;
+
254 bool operator!=(const Transform & t) const;
+
255
+
256 // --- Eigen conversions ---
+
257 Eigen::Matrix4f toEigen4f() const;
+
258 Eigen::Matrix4d toEigen4d() const;
+
259 Eigen::Affine3f toEigen3f() const;
+
260 Eigen::Affine3d toEigen3d() const;
+
261
+
262 Eigen::Quaternionf getQuaternionf() const;
+
263 Eigen::Quaterniond getQuaterniond() const;
+
264
+
265public:
+
266 // --- Static helpers ---
+
267
+ +
272
+
274 static Transform fromEigen4f(const Eigen::Matrix4f & matrix);
+
275 static Transform fromEigen4d(const Eigen::Matrix4d & matrix);
+
276 static Transform fromEigen3f(const Eigen::Affine3f & matrix);
+
277 static Transform fromEigen3d(const Eigen::Affine3d & matrix);
+
278 static Transform fromEigen3f(const Eigen::Isometry3f & matrix);
+
279 static Transform fromEigen3d(const Eigen::Isometry3d & matrix);
+
280 static Transform fromEigen3f(const Eigen::Matrix<float, 3, 4> & matrix);
+
281 static Transform fromEigen3d(const Eigen::Matrix<double, 3, 4> & matrix);
+
282
+
+ +
290 0.0f, -1.0f, 0.0f, 0.0f,
+
291 0.0f, 0.0f, 1.0f, 0.0f,
+
292 -1.0f, 0.0f, 0.0f, 0.0f);}
+
+
+ +
300 0.0f, 0.0f,-1.0f, 0.0f,
+
301 -1.0f, 0.0f, 0.0f, 0.0f,
+
302 0.0f, 1.0f, 0.0f, 0.0f);}
+
+
303
+
313 static Transform fromString(const std::string & string);
+
317 static bool canParseString(const std::string & string);
+
318
+ +
329 const std::map<double, Transform> & tfBuffer,
+
330 const double & stamp);
+
334 RTABMAP_DEPRECATED static Transform getClosestTransform(
+
335 const std::map<double, Transform> & tfBuffer,
+
336 const double & stamp,
+
337 double * stampDiff);
+
338
+
339private:
+
340 cv::Mat data_;
+
341};
+
342
+
346RTABMAP_CORE_EXPORT std::ostream& operator<<(std::ostream& os, const Transform& s);
+
347
+
+ +
353{
+
354public:
+
355 TransformStamped(const Transform & transform, const double & stamp) :
+
356 transform_(transform),
+
357 stamp_(stamp)
+
358 {}
+
359 const Transform & transform() const {return transform_;}
+
360 const double & stamp() const {return stamp_;}
+
361
+
362private:
+
363 Transform transform_;
+
364 double stamp_;
+
365};
+
+
366
+
367}
+
368
+
369#endif /* TRANSFORM_H_ */
+
+
+
+
+
+
Associates a transform with a timestamp.
Definition Transform.h:353
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
bool isNull() const
Checks whether the transform is null (all zeros).
+
Transform(float x, float y, float z, float roll, float pitch, float yaw)
Constructs a Transform from position and Euler angles (in radians).
+
float r11() const
Rotation matrix element at row 1, col 1.
Definition Transform.h:96
+
cv::Mat rotationMatrix() const
Returns the 3x3 rotation matrix (cv::Mat).
+
int size() const
Returns the number of float elements (always 12).
Definition Transform.h:146
+
void getTranslation(float &x, float &y, float &z) const
Extracts translation only.
+
float o34() const
Translation z.
Definition Transform.h:108
+
Transform to3DoF() const
Converts to 3 DoF (x, y, theta).
+
static Transform getTransform(const std::map< double, Transform > &tfBuffer, const double &stamp)
Retrieves the transform to a given timestamp.
+
Transform operator*(const Transform &t) const
Operator overloads.
+
float & x()
Translation getters/setters.
Definition Transform.h:149
+
bool is3DoF() const
Checks if the transform is 3 DoF (no pitch/roll).
+
std::string prettyPrint() const
Returns a string representation of the transform.
+
cv::Mat translationMatrix() const
Returns the 3x1 translation matrix (cv::Mat).
+
Transform inverse() const
Returns the inverse of the transform.
+
Transform(const cv::Mat &transformationMatrix)
Constructs a Transform from a 3x4 OpenCV matrix.
+
static Transform fromString(const std::string &string)
Parses a transform from a string representation. Supported formats:
+
const float * data() const
Returns a pointer to the raw data (12 floats).
Definition Transform.h:140
+
static Transform getIdentity()
Returns identity transform.
+
Transform clone() const
Returns a deep copy of the transform.
+
Transform to4DoF() const
Converts to 4 DoF (x, y, z, yaw).
+
Transform(float r11, float r12, float r13, float o14, float r21, float r22, float r23, float o24, float r31, float r32, float r33, float o34)
Constructor from rotation matrix elements and translation components.
+
static Transform rtabmap_T_opengl()
Returns the transform from OpenGL to RTAB-Map coordinate system.
Definition Transform.h:299
+
float o24() const
Translation y.
Definition Transform.h:107
+
const cv::Mat & dataMatrix() const
Returns the internal OpenCV matrix (3x4).
Definition Transform.h:136
+
void getTranslationAndEulerAngles(float &x, float &y, float &z, float &roll, float &pitch, float &yaw) const
Extracts translation and Euler angles (radians).
+
static RTABMAP_DEPRECATED Transform getClosestTransform(const std::map< double, Transform > &tfBuffer, const double &stamp, double *stampDiff)
+
float getAngle(const Transform &t) const
Returns angular difference (in radians) with another transform.
+
static Transform opengl_T_rtabmap()
Returns the transform from RTAB-Map to OpenGL coordinate system.
Definition Transform.h:289
+
Transform()
Default constructor. Initializes to a null (all zeros) transform.
+
float & y()
Translation y.
Definition Transform.h:150
+
void normalizeRotation()
Normalizes the rotation matrix.
+
float theta() const
Returns 2D orientation (theta) in radians.
+
bool is4DoF() const
Checks if the transform is 4 DoF (no pitch).
+
float o14() const
Translation x.
Definition Transform.h:106
+
bool isInvertible() const
Returns whether the transform is invertible.
+
float getDistance(const Transform &t) const
Returns the Euclidean distance to another transform.
+
void getEulerAngles(float &roll, float &pitch, float &yaw) const
Extracts Euler angles (roll, pitch, yaw).
+
bool isIdentity() const
Checks whether the transform is identity.
+
float getDistanceSquared(const Transform &t) const
Returns the squared distance to another transform.
+
static Transform fromEigen4f(const Eigen::Matrix4f &matrix)
Converts from Eigen representations.
+
float getNormSquared() const
Returns the squared norm of the translation vector.
+
Transform translation() const
Returns only the translation component.
+
Transform rotation() const
Returns only the rotation component.
+
void setNull()
Sets the transform to null (zero matrix).
+
float getNorm() const
Returns the Euclidean norm of the translation vector.
+
Transform interpolate(float t, const Transform &other) const
Interpolates between this and another transform.
+
Transform(float x, float y, float theta)
Constructs a 2D Transform (x, y, theta).
+
static bool canParseString(const std::string &string)
Checks if a string can be parsed into a transform.
+
Transform(float x, float y, float z, float qx, float qy, float qz, float qw)
Constructs a Transform from position and quaternion.
+
float & z()
Translation z.
Definition Transform.h:151
+
void setIdentity()
Sets the transform to the identity transform.
+ +
RTABMAP_CORE_EXPORT std::ostream & operator<<(std::ostream &os, const CameraModel &model)
Stream operator for printing a camera model to an output stream.
+
+ + + + diff --git a/preview/pr-1492/api/latest/UConversion_8h.html b/preview/pr-1492/api/latest/UConversion_8h.html new file mode 100644 index 00000000..3d3d99d2 --- /dev/null +++ b/preview/pr-1492/api/latest/UConversion_8h.html @@ -0,0 +1,1050 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UConversion.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
UConversion.h File Reference
+
+
+ +

Some conversion functions. +More...

+
#include "rtabmap/utilite/utilite_export.h"
+#include <string>
+#include <vector>
+#include <stdarg.h>
+
+Include dependency graph for UConversion.h:
+
+
+ + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

std::string UTILITE_EXPORT uReplaceChar (const std::string &str, char before, char after)
 
std::string UTILITE_EXPORT uReplaceChar (const std::string &str, char before, const std::string &after)
 
std::string UTILITE_EXPORT uToUpperCase (const std::string &str)
 
std::string UTILITE_EXPORT uToLowerCase (const std::string &str)
 
std::string UTILITE_EXPORT uNumber2Str (unsigned int number)
 
std::string UTILITE_EXPORT uNumber2Str (int number)
 
std::string UTILITE_EXPORT uNumber2Str (float number, int precision=6, bool fixed=false)
 
std::string UTILITE_EXPORT uNumber2Str (double number, int precision=6, bool fixed=false)
 
int UTILITE_EXPORT uStr2Int (const std::string &str)
 
float UTILITE_EXPORT uStr2Float (const std::string &str)
 
double UTILITE_EXPORT uStr2Double (const std::string &str)
 
std::string UTILITE_EXPORT uBool2Str (bool boolean)
 
bool UTILITE_EXPORT uStr2Bool (const char *str)
 
+bool UTILITE_EXPORT uStr2Bool (const std::string &str)
 
std::vector< unsigned char > UTILITE_EXPORT uStr2Bytes (const std::string &str)
 
std::string UTILITE_EXPORT uBytes2Str (const std::vector< unsigned char > &bytes)
 
std::string UTILITE_EXPORT uBytes2Hex (const char *bytes, unsigned int bytesLen)
 
std::vector< char > UTILITE_EXPORT uHex2Bytes (const std::string &hex)
 
std::vector< char > UTILITE_EXPORT uHex2Bytes (const char *hex, int hexLen)
 
std::string UTILITE_EXPORT uHex2Str (const std::string &hex)
 
unsigned char UTILITE_EXPORT uHex2Ascii (const unsigned char &c, bool rightPart)
 
unsigned char UTILITE_EXPORT uAscii2Hex (const unsigned char &c)
 
std::string UTILITE_EXPORT uFormatv (const char *fmt, va_list ap)
 
std::string UTILITE_EXPORT uFormat (const char *fmt,...)
 
+

Detailed Description

+

Some conversion functions.

+

This contains functions to do some convenient conversion like uNumber2str(), uBytes2Hex() or uHex2Bytes().

+ +

Definition in file UConversion.h.

+

Function Documentation

+ +

◆ uReplaceChar() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::string UTILITE_EXPORT uReplaceChar (const std::string & str,
char before,
char after 
)
+
+

Replace old characters in a string to new ones. Example :

std::string str = "Hello";
+
uReplaceChar(str, 'l', 'p');
+
// The results is str = "Heppo";
+
std::string UTILITE_EXPORT uReplaceChar(const std::string &str, char before, char after)
+
Parameters
+ + + + +
strthe string
beforethe character to be replaced by the new one
afterthe new character replacing the old one
+
+
+
Returns
the modified string
+ +
+
+ +

◆ uReplaceChar() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::string UTILITE_EXPORT uReplaceChar (const std::string & str,
char before,
const std::string & after 
)
+
+

Replace old characters in a string with the specified string. Example :

std::string str = "Hello";
+
uReplaceChar(str, 'o', "oween");
+
// The results is str = "Helloween";
+
Parameters
+ + + + +
strthe string
beforethe character to be replaced by the new one
afterthe new string replacing the old character
+
+
+
Returns
the modified string
+ +
+
+ +

◆ uToUpperCase()

+ +
+
+ + + + + + + + +
std::string UTILITE_EXPORT uToUpperCase (const std::string & str)
+
+

Transform characters from a string to upper case. Example :

std::string str = "hello!";
+
str = uToUpperCase(str);
+
//str is now equal to "HELLO!"
+
std::string UTILITE_EXPORT uToUpperCase(const std::string &str)
+
Parameters
+ + +
strthe string
+
+
+
Returns
the modified string
+ +
+
+ +

◆ uToLowerCase()

+ +
+
+ + + + + + + + +
std::string UTILITE_EXPORT uToLowerCase (const std::string & str)
+
+

Transform characters from a string to lower case. Example :

std::string str = "HELLO!";
+
str = uToLowerCase(str, false);
+
//str is now equal to "hello!"
+
std::string UTILITE_EXPORT uToLowerCase(const std::string &str)
+
Parameters
+ + +
strthe string
+
+
+
Returns
the modified string
+ +
+
+ +

◆ uNumber2Str() [1/4]

+ +
+
+ + + + + + + + +
std::string UTILITE_EXPORT uNumber2Str (unsigned int number)
+
+

Convert an unsigned integer to a string.

+

This function converts an unsigned integer value to its string representation. The conversion uses standard decimal notation.

+

Example:

std::string str = uNumber2Str(42u);
+
// str contains "42"
+
std::string UTILITE_EXPORT uNumber2Str(unsigned int number)
+
Parameters
+ + +
numberthe unsigned integer number to convert to a string
+
+
+
Returns
the string representation of the number
+ +
+
+ +

◆ uNumber2Str() [2/4]

+ +
+
+ + + + + + + + +
std::string UTILITE_EXPORT uNumber2Str (int number)
+
+

Convert a signed integer to a string.

+

This function converts a signed integer value to its string representation. Negative numbers will include a minus sign prefix.

+

Example:

std::string str = uNumber2Str(-42);
+
// str contains "-42"
+
Parameters
+ + +
numberthe integer number to convert to a string
+
+
+
Returns
the string representation of the number (includes minus sign for negative values)
+ +
+
+ +

◆ uNumber2Str() [3/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::string UTILITE_EXPORT uNumber2Str (float number,
int precision = 6,
bool fixed = false 
)
+
+

Convert a float to a string.

+

This function converts a floating-point value to its string representation with configurable precision and format.

+

Example:

std::string str1 = uNumber2Str(3.14159f, 2, false);
+
// str1 contains "3.14" (scientific notation if needed)
+
+
std::string str2 = uNumber2Str(3.14159f, 2, true);
+
// str2 contains "3.14" (fixed decimal notation)
+
Parameters
+ + + + +
numberthe float number to convert to a string
precisionthe number of decimal places to display (default: 6)
fixedif true, use fixed decimal notation; if false, use scientific notation when appropriate (default: false)
+
+
+
Returns
the string representation of the number
+ +
+
+ +

◆ uNumber2Str() [4/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::string UTILITE_EXPORT uNumber2Str (double number,
int precision = 6,
bool fixed = false 
)
+
+

Convert a double to a string.

+

This function converts a double-precision floating-point value to its string representation with configurable precision and format.

+

Example:

std::string str1 = uNumber2Str(3.141592653589793, 4, false);
+
// str1 contains "3.1416" (scientific notation if needed)
+
+
std::string str2 = uNumber2Str(3.141592653589793, 4, true);
+
// str2 contains "3.1416" (fixed decimal notation)
+
Parameters
+ + + + +
numberthe double number to convert to a string
precisionthe number of decimal places to display (default: 6)
fixedif true, use fixed decimal notation; if false, use scientific notation when appropriate (default: false)
+
+
+
Returns
the string representation of the number
+ +
+
+ +

◆ uStr2Int()

+ +
+
+ + + + + + + + +
int UTILITE_EXPORT uStr2Int (const std::string & str)
+
+

Convert a string to an integer.

Parameters
+ + +
thestring
+
+
+
Returns
the number
+ +
+
+ +

◆ uStr2Float()

+ +
+
+ + + + + + + + +
float UTILITE_EXPORT uStr2Float (const std::string & str)
+
+

Convert a string to a float independent of the locale (comma/dot).

Parameters
+ + +
thestring
+
+
+
Returns
the number
+ +
+
+ +

◆ uStr2Double()

+ +
+
+ + + + + + + + +
double UTILITE_EXPORT uStr2Double (const std::string & str)
+
+

Convert a string to a double independent of the locale (comma/dot).

Parameters
+ + +
thestring
+
+
+
Returns
the number
+ +
+
+ +

◆ uBool2Str()

+ +
+
+ + + + + + + + +
std::string UTILITE_EXPORT uBool2Str (bool boolean)
+
+

Convert a bool to a string. The format used is "true" and "false".

Parameters
+ + +
booleanthe boolean to convert in a string
+
+
+
Returns
the string
+ +
+
+ +

◆ uStr2Bool()

+ +
+
+ + + + + + + + +
bool UTILITE_EXPORT uStr2Bool (const char * str)
+
+

Convert a string to a boolean. The format used is : "false", "FALSE" or "0" give false. All others give true.

Parameters
+ + +
strthe string to convert in a boolean
+
+
+
Returns
the boolean
+ +
+
+ +

◆ uStr2Bytes()

+ +
+
+ + + + + + + + +
std::vector< unsigned char > UTILITE_EXPORT uStr2Bytes (const std::string & str)
+
+

Convert a string to an array of bytes including the null character ('\0').

Parameters
+ + +
strthe string
+
+
+
Returns
the array of bytes
+ +
+
+ +

◆ uBytes2Str()

+ +
+
+ + + + + + + + +
std::string UTILITE_EXPORT uBytes2Str (const std::vector< unsigned char > & bytes)
+
+

Convert an array of bytes to string, the array of bytes must end with the null character ('\0').

Parameters
+ + +
bytesthe array of bytes
+
+
+
Returns
the string
+ +
+
+ +

◆ uBytes2Hex()

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::string UTILITE_EXPORT uBytes2Hex (const char * bytes,
unsigned int bytesLen 
)
+
+

Convert a bytes array to an hexadecimal string. The resulting string is twice the size of the bytes array. The hexadecimal Characters are in upper case. Example :

char bytes[] = {0x3F};
+
std::string hex = uBytes2Hex(bytes, 1);
+
// The string constains "3F".
+
std::string UTILITE_EXPORT uBytes2Hex(const char *bytes, unsigned int bytesLen)
+
Parameters
+ + + +
bytesthe bytes array
bytesLenthe length of the bytes array
+
+
+
Returns
the hexadecimal string
+ +
+
+ +

◆ uHex2Bytes() [1/2]

+ +
+
+ + + + + + + + +
std::vector< char > UTILITE_EXPORT uHex2Bytes (const std::string & hex)
+
+

Convert an hexadecimal string to a bytes array. The string must be pair length. The hexadecimal Characters can be in upper or lower case. Example :

std::string hex = "1f3B";
+
std::vector<char> bytes = uHex2Bytes(hex);
+
// The array contains {0x1F, 0x3B}.
+
std::vector< char > UTILITE_EXPORT uHex2Bytes(const std::string &hex)
+
Parameters
+ + +
hexthe hexadecimal string
+
+
+
Returns
the bytes array
+ +
+
+ +

◆ uHex2Bytes() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::vector< char > UTILITE_EXPORT uHex2Bytes (const char * hex,
int hexLen 
)
+
+

Convert an hexadecimal string to a bytes array. The string must be pair length. The hexadecimal Characters can be in upper or lower case. Example :

std::vector<char> bytes = uHex2Bytes("1f3B", 4);
+
// The array contains {0x1F, 0x3B}.
+
Parameters
+ + + +
hexthe hexadecimal string
bytesLenthe hexadecimal string length
+
+
+
Returns
the bytes array
+ +
+
+ +

◆ uHex2Str()

+ +
+
+ + + + + + + + +
std::string UTILITE_EXPORT uHex2Str (const std::string & hex)
+
+

Convert an hexadecimal string to an ascii string. A convenient way when using only strings. The hexadecimal str MUST not contains any null values 0x00 ("00"). Think to use of hex2bytes() to handle 0x00 values. Characters can be in upper or lower case. Example :

std::string str = uHex2Str("48656C6C4F21");
+
// The string contains "Hello!".
+
std::string UTILITE_EXPORT uHex2Str(const std::string &hex)
+
See also
hex2bytes
+
Parameters
+ + +
hexthe hexadecimal string
+
+
+
Returns
the ascii string
+ +
+
+ +

◆ uHex2Ascii()

+ +
+
+ + + + + + + + + + + + + + + + + + +
unsigned char UTILITE_EXPORT uHex2Ascii (const unsigned char & c,
bool rightPart 
)
+
+

Convert hexadecimal (left or right part) value to an ascii character. Example :

unsigned char F = uHex2Ascii(0xFA, false);
+
unsigned char A = uHex2Ascii(0xFA, true);
+
unsigned char UTILITE_EXPORT uHex2Ascii(const unsigned char &c, bool rightPart)
+
See also
ascii2hex
+
Parameters
+ + + +
cthe hexadecimal value
rightPartIf we want the character corresponding to the right of left part (4 bits) of the byte value.
+
+
+
Returns
the ascii character (in upper case)
+ +
+
+ +

◆ uAscii2Hex()

+ +
+
+ + + + + + + + +
unsigned char UTILITE_EXPORT uAscii2Hex (const unsigned char & c)
+
+

Convert an ascii character to an hexadecimal value (right 4 bits). Characters can be in upper or lower case. Example :

unsigned char hex = uAscii2Hex('F');
+
// The results is hex = 0x0F;
+
unsigned char UTILITE_EXPORT uAscii2Hex(const unsigned char &c)
+
See also
hex2ascii
+
Parameters
+ + +
cthe ascii character
+
+
+
Returns
the hexadecimal value
+ +
+
+ +

◆ uFormatv()

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::string UTILITE_EXPORT uFormatv (const char * fmt,
va_list ap 
)
+
+

Format a string like printf, and return it as a std::string

+ +
+
+ +

◆ uFormat()

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::string UTILITE_EXPORT uFormat (const char * fmt,
 ... 
)
+
+

Format a string like printf, and return it as a std::string

+ +
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/UConversion_8h__dep__incl.map b/preview/pr-1492/api/latest/UConversion_8h__dep__incl.map new file mode 100644 index 00000000..04d2a5ef --- /dev/null +++ b/preview/pr-1492/api/latest/UConversion_8h__dep__incl.map @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/UConversion_8h__dep__incl.md5 b/preview/pr-1492/api/latest/UConversion_8h__dep__incl.md5 new file mode 100644 index 00000000..6ccc63f9 --- /dev/null +++ b/preview/pr-1492/api/latest/UConversion_8h__dep__incl.md5 @@ -0,0 +1 @@ +2176991da7076b0ad838ebd435ea0d48 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UConversion_8h__dep__incl.png b/preview/pr-1492/api/latest/UConversion_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8cd60e29b81c9558e68ff87eca250308ab82fa GIT binary patch literal 310712 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%0AF6ubOlw6B! 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 z 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 +
+
UConversion.h
+
+
+Go to the documentation of this file.
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UCONVERSION_H
+
21#define UCONVERSION_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
25#include <string>
+
26#include <vector>
+
27#include <stdarg.h>
+
28
+
51std::string UTILITE_EXPORT uReplaceChar(const std::string & str, char before, char after);
+
52
+
67std::string UTILITE_EXPORT uReplaceChar(const std::string & str, char before, const std::string & after);
+
68
+
80std::string UTILITE_EXPORT uToUpperCase(const std::string & str);
+
81
+
93std::string UTILITE_EXPORT uToLowerCase(const std::string & str);
+
94
+
110std::string UTILITE_EXPORT uNumber2Str(unsigned int number);
+
111
+
127std::string UTILITE_EXPORT uNumber2Str(int number);
+
128
+
149std::string UTILITE_EXPORT uNumber2Str(float number, int precision=6, bool fixed = false);
+
150
+
171std::string UTILITE_EXPORT uNumber2Str(double number, int precision=6, bool fixed = false);
+
172
+
178int UTILITE_EXPORT uStr2Int(const std::string & str);
+
179
+
185float UTILITE_EXPORT uStr2Float(const std::string & str);
+
186
+
192double UTILITE_EXPORT uStr2Double(const std::string & str);
+
193
+
194
+
201std::string UTILITE_EXPORT uBool2Str(bool boolean);
+
209bool UTILITE_EXPORT uStr2Bool(const char * str);
+
210bool UTILITE_EXPORT uStr2Bool(const std::string & str);
+
211
+
217std::vector<unsigned char> UTILITE_EXPORT uStr2Bytes(const std::string & str);
+
218
+
224std::string UTILITE_EXPORT uBytes2Str(const std::vector<unsigned char> & bytes);
+
225
+
241std::string UTILITE_EXPORT uBytes2Hex(const char * bytes, unsigned int bytesLen);
+
256std::vector<char> UTILITE_EXPORT uHex2Bytes(const std::string & hex);
+
271std::vector<char> UTILITE_EXPORT uHex2Bytes(const char * hex, int hexLen);
+
272
+
289std::string UTILITE_EXPORT uHex2Str(const std::string & hex);
+
290
+
303unsigned char UTILITE_EXPORT uHex2Ascii(const unsigned char & c, bool rightPart);
+
304
+
317unsigned char UTILITE_EXPORT uAscii2Hex(const unsigned char & c);
+
318
+
322std::string UTILITE_EXPORT uFormatv (const char *fmt, va_list ap);
+
323
+
327std::string UTILITE_EXPORT uFormat (const char *fmt, ...);
+
328
+
329#ifdef _WIN32
+
334UTILITE_EXPORT wchar_t * createWCharFromChar(const char * text);
+
335
+
340UTILITE_EXPORT char * createCharFromWChar(const wchar_t * wText);
+
341#endif
+
342
+
343#endif /* UCONVERSION_H */
+
std::string UTILITE_EXPORT uBytes2Str(const std::vector< unsigned char > &bytes)
+
unsigned char UTILITE_EXPORT uHex2Ascii(const unsigned char &c, bool rightPart)
+
int UTILITE_EXPORT uStr2Int(const std::string &str)
+
std::string UTILITE_EXPORT uToLowerCase(const std::string &str)
+
std::string UTILITE_EXPORT uBytes2Hex(const char *bytes, unsigned int bytesLen)
+
std::string UTILITE_EXPORT uFormat(const char *fmt,...)
+
unsigned char UTILITE_EXPORT uAscii2Hex(const unsigned char &c)
+
std::string UTILITE_EXPORT uHex2Str(const std::string &hex)
+
std::string UTILITE_EXPORT uFormatv(const char *fmt, va_list ap)
+
double UTILITE_EXPORT uStr2Double(const std::string &str)
+
std::string UTILITE_EXPORT uNumber2Str(unsigned int number)
+
std::vector< unsigned char > UTILITE_EXPORT uStr2Bytes(const std::string &str)
+
float UTILITE_EXPORT uStr2Float(const std::string &str)
+
std::vector< char > UTILITE_EXPORT uHex2Bytes(const std::string &hex)
+
bool UTILITE_EXPORT uStr2Bool(const char *str)
+
std::string UTILITE_EXPORT uReplaceChar(const std::string &str, char before, char after)
+
std::string UTILITE_EXPORT uBool2Str(bool boolean)
+
std::string UTILITE_EXPORT uToUpperCase(const std::string &str)
+
+ + + + diff --git a/preview/pr-1492/api/latest/UDestroyer_8h_source.html b/preview/pr-1492/api/latest/UDestroyer_8h_source.html new file mode 100644 index 00000000..811f5c03 --- /dev/null +++ b/preview/pr-1492/api/latest/UDestroyer_8h_source.html @@ -0,0 +1,159 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UDestroyer.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UDestroyer.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UDESTROYER_H
+
21#define UDESTROYER_H
+
22
+
31template <class T>
+
+ +
33{
+
34public:
+
39 UDestroyer(T* doomed = 0) : doomed_(doomed) {}
+
40
+ +
42 {
+
43 if(doomed_)
+
44 {
+
45 delete doomed_;
+
46 doomed_ = 0;
+
47 }
+
48 }
+
49
+
+
55 bool setDoomed(T* doomed)
+
56 {
+
57 if(doomed_ && doomed)
+
58 {
+
59 return false;
+
60 }
+
61 doomed_ = doomed;
+
62 return true;
+
63 }
+
+
64
+
65private:
+
66 // Prevent users from making copies of a
+
67 // Destroyer to avoid double deletion:
+ +
69 void operator=(const UDestroyer<T>&);
+
70
+
71private:
+
72 T* doomed_;
+
73};
+
+
74
+
75#endif // UDESTROYER_H
+ +
bool setDoomed(T *doomed)
Definition UDestroyer.h:55
+
UDestroyer(T *doomed=0)
Definition UDestroyer.h:39
+
+ + + + diff --git a/preview/pr-1492/api/latest/UDirectory_8h_source.html b/preview/pr-1492/api/latest/UDirectory_8h_source.html new file mode 100644 index 00000000..55bcb711 --- /dev/null +++ b/preview/pr-1492/api/latest/UDirectory_8h_source.html @@ -0,0 +1,185 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UDirectory.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UDirectory.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UDIRECTORY_H
+
21#define UDIRECTORY_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
25#include <string>
+
26#include <vector>
+
27#include <list>
+
28
+
+
34class UTILITE_EXPORT UDirectory
+
35{
+
36public:
+
42 static bool exists(const std::string & dirPath);
+
43
+
49 static std::string getDir(const std::string & filePath);
+
50
+
56 static std::string currentDir(bool trailingSeparator = false);
+
57
+
63 static bool makeDir(const std::string & dirPath);
+
64
+
70 static bool removeDir(const std::string & dirPath);
+
71
+
76 static std::string homeDir();
+
77
+
81 static std::string separator();
+
82
+
83public:
+
90 UDirectory(const std::string & path = "", const std::string & extensions = "");
+
91 UDirectory(const UDirectory & dir);
+
92 UDirectory & operator=(const UDirectory & dir);
+ +
94
+
99 void setPath(const std::string & path, const std::string & extensions = "");
+
100
+
104 void update();
+
105
+
110 bool isValid();
+
111
+
116 std::string getNextFileName();
+
117
+
122 std::string getNextFilePath();
+
123
+
129 const std::list<std::string> & getFileNames() const {return fileNames_;}
+
130
+
134 void rewind();
+
135
+
136private:
+
137 std::string path_;
+
138 std::vector<std::string> extensions_;
+
139 std::list<std::string> fileNames_;
+
140 std::list<std::string>::iterator iFileName_;
+
141};
+
+
142
+
143#endif /* UDIRECTORY_H */
+ +
static std::string getDir(const std::string &filePath)
+
std::string getNextFilePath()
+
static std::string currentDir(bool trailingSeparator=false)
+
static std::string homeDir()
+
static std::string separator()
+
static bool removeDir(const std::string &dirPath)
+
std::string getNextFileName()
+
bool isValid()
+
static bool makeDir(const std::string &dirPath)
+
const std::list< std::string > & getFileNames() const
Definition UDirectory.h:129
+
void setPath(const std::string &path, const std::string &extensions="")
+
void update()
+
void rewind()
+
UDirectory(const std::string &path="", const std::string &extensions="")
+
static bool exists(const std::string &dirPath)
+
+ + + + diff --git a/preview/pr-1492/api/latest/UEvent_8h_source.html b/preview/pr-1492/api/latest/UEvent_8h_source.html new file mode 100644 index 00000000..5610a9f5 --- /dev/null +++ b/preview/pr-1492/api/latest/UEvent_8h_source.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UEvent.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UEvent.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UEVENT_H
+
21#define UEVENT_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
25#include <string>
+
26
+
27class UEventsHandler;
+
28
+
+
57class UTILITE_EXPORT UEvent{
+
58public:
+
59 virtual ~UEvent() {}
+
60
+
68 virtual std::string getClassName() const = 0; // TODO : macro?
+
69
+
74 int getCode() const {return code_;}
+
75
+
76protected:
+
81 UEvent(int code = 0) : code_(code) {}
+
82
+
83private:
+
84 int code_;
+
85};
+
+
86
+
87#endif // UEVENT_H
+ +
virtual std::string getClassName() const =0
+
UEvent(int code=0)
Definition UEvent.h:81
+
int getCode() const
Definition UEvent.h:74
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/UEventsHandler_8h_source.html b/preview/pr-1492/api/latest/UEventsHandler_8h_source.html new file mode 100644 index 00000000..8d74efda --- /dev/null +++ b/preview/pr-1492/api/latest/UEventsHandler_8h_source.html @@ -0,0 +1,152 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UEventsHandler.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UEventsHandler.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UEVENTSHANDLER_H
+
21#define UEVENTSHANDLER_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
25#include "rtabmap/utilite/UEventsSender.h"
+
26class UEvent;
+
27
+
+
128class UTILITE_EXPORT UEventsHandler : public UEventsSender {
+
129public:
+
130
+
131 void registerToEventsManager();
+
132 void unregisterFromEventsManager();
+
133
+
134
+
135protected:
+
140 friend class UEventsManager;
+
141
+
158 virtual bool handleEvent(UEvent * event) = 0;
+
159
+
160protected:
+ +
173
+ +
183
+
184private:
+
185
+
186};
+
+
187
+
188#endif // UEVENTSHANDLER_H
+ + +
virtual bool handleEvent(UEvent *event)=0
+
virtual ~UEventsHandler()
+ + + +
+ + + + diff --git a/preview/pr-1492/api/latest/UEventsManager_8h_source.html b/preview/pr-1492/api/latest/UEventsManager_8h_source.html new file mode 100644 index 00000000..a315cba2 --- /dev/null +++ b/preview/pr-1492/api/latest/UEventsManager_8h_source.html @@ -0,0 +1,310 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UEventsManager.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UEventsManager.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UEVENTSMANAGER_H
+
21#define UEVENTSMANAGER_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
25#include "rtabmap/utilite/UEventsHandler.h"
+
26#include "rtabmap/utilite/UThreadNode.h"
+ +
28#include "rtabmap/utilite/UDestroyer.h"
+
29
+
30#include <list>
+
31#include <map>
+
32
+
33// TODO Not implemented... for multithreading event handling
+
+ +
35{
+
36public:
+
37 virtual ~UEventDispatcher();
+
38protected:
+
39 friend class UEventsManager;
+ +
41
+
42 virtual void mainLoop();
+
43
+
44private:
+
45 virtual void killCleanup();
+
46
+
47private:
+
48 UEvent * _event;
+
49 std::vector<UEventsHandler*> _handlers;
+
50};
+
+
51
+
+
78class UTILITE_EXPORT UEventsManager : public UThread{
+
79
+
80public:
+
81
+
88 static void addHandler(UEventsHandler* handler);
+
89
+
96 static void removeHandler(UEventsHandler* handler);
+
97
+
110 static void post(UEvent * event, bool async = true, const UEventsSender * sender = 0);
+
111
+
112 static void createPipe(
+
113 const UEventsSender * sender,
+
114 const UEventsHandler * receiver,
+
115 const std::string & eventName);
+
116
+
117 static void removePipe(
+
118 const UEventsSender * sender,
+
119 const UEventsHandler * receiver,
+
120 const std::string & eventName);
+
121
+
122 static void removeAllPipes(const UEventsSender * sender);
+
123 static void removeNullPipes(const UEventsSender * sender);
+
124
+
125protected:
+
126
+
127 /*
+
128 * This method is used to have a reference on the
+
129 * EventsManager. When no EventsManager exists, one is
+
130 * created. There is only one instance in the application.
+
131 * See the Singleton pattern further explanation.
+
132 *
+
133 * @return the reference on the EventsManager
+
134 */
+
135 static UEventsManager* getInstance();
+
136
+
137 /*
+
138 * Called only once in getInstance(). It can't be instantiated
+
139 * by the user.
+
140 *
+
141 */
+ +
143
+
144 /*
+
145 * Only called by a Destroyer.
+
146 */
+
147 virtual ~UEventsManager();
+
148
+
149 /*
+
150 * A Destroyer is used to remove a dynamically created
+
151 * Singleton. It is friend here to have access to the
+
152 * destructor.
+
153 *
+
154 */
+
155 friend class UDestroyer<UEventsManager>;
+
156
+
160 virtual void mainLoop();
+
161
+
162private:
+
163
+
167 virtual void mainLoopKill();
+
168
+
169 /*
+
170 * This method dispatches asynchronized events to all handlers.
+
171 * FIFO (first in first out) dispatching is used.
+
172 */
+
173 virtual void dispatchEvents();
+
174
+
175 /*
+
176 * This method dispatches an event to all handlers.
+
177 */
+
178 virtual bool dispatchEvent(UEvent * event, const UEventsSender * sender);
+
179
+
180 /*
+
181 * This method is used to add an events
+
182 * handler to the list of handlers.
+
183 *
+
184 * @param handler the handler to be added.
+
185 */
+
186 void _addHandler(UEventsHandler* handler);
+
187
+
188 /*
+
189 * This method is used to remove an events
+
190 * handler from the list of handlers.
+
191 *
+
192 * @param handler the handler to be removed.
+
193 */
+
194 void _removeHandler(UEventsHandler* handler);
+
195
+
196 /*
+
197 * This method is used to post an event to
+
198 * handlers.
+
199 *
+
200 * Event can be posted asynchronously or not. In the first case,
+
201 * the event is dispatched by the UEventsManager's thread. In the
+
202 * second case, the event is handled immediately by event's
+
203 * receivers, thus in the sender thread.
+
204 *
+
205 * @param event the event to be posted.
+
206 * @param async if true, the event is dispatched by the UEventsManager thread, otherwise it's in the caller thread (synchronous).
+
207 */
+
208 void _postEvent(UEvent * event, bool async = true, const UEventsSender * sender = 0);
+
209
+
210 std::list<UEventsHandler*> getPipes(
+
211 const UEventsSender * sender,
+
212 const std::string & eventName);
+
213
+
214 void _createPipe(
+
215 const UEventsSender * sender,
+
216 const UEventsHandler * receiver,
+
217 const std::string & eventName);
+
218
+
219 void _removePipe(
+
220 const UEventsSender * sender,
+
221 const UEventsHandler * receiver,
+
222 const std::string & eventName);
+
223
+
224 void _removeAllPipes(const UEventsSender * sender);
+
225 void _removeNullPipes(const UEventsSender * sender);
+
226
+
227private:
+
228
+
229 class Pipe
+
230 {
+
231 public:
+
232 Pipe(const UEventsSender * sender, const UEventsHandler * receiver, const std::string & eventName) :
+
233 sender_(sender),
+
234 receiver_(receiver),
+
235 eventName_(eventName)
+
236 {}
+
237 const UEventsSender * sender_;
+
238 const UEventsHandler * receiver_;
+
239 const std::string eventName_;
+
240 };
+
241
+
242 static UEventsManager* instance_; /* The EventsManager instance pointer. */
+
243 static UDestroyer<UEventsManager> destroyer_; /* The EventsManager's destroyer. */
+
244 std::list<std::pair<UEvent*, const UEventsSender * > > events_; /* The events list. */
+
245 std::list<UEventsHandler*> handlers_; /* The handlers list. */
+
246 UMutex eventsMutex_; /* The mutex of the events list, */
+
247 UMutex handlersMutex_; /* The mutex of the handlers list. */
+
248 USemaphore postEventSem_; /* Semaphore used to signal when an events is posted. */
+
249 std::list<Pipe> pipes_;
+
250 UMutex pipesMutex_;
+
251};
+
+
252
+
253#endif // UEVENTSMANAGER_H
+
ULogger class and convenient macros.
+ + +
virtual void mainLoop()
+ + + +
static void removeHandler(UEventsHandler *handler)
+
static void addHandler(UEventsHandler *handler)
+
virtual void mainLoop()
+
static void post(UEvent *event, bool async=true, const UEventsSender *sender=0)
+ + + + +
+ + + + diff --git a/preview/pr-1492/api/latest/UEventsSender_8h_source.html b/preview/pr-1492/api/latest/UEventsSender_8h_source.html new file mode 100644 index 00000000..7eb726e1 --- /dev/null +++ b/preview/pr-1492/api/latest/UEventsSender_8h_source.html @@ -0,0 +1,126 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UEventsSender.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UEventsSender.h
+
+
+
1/*
+
2 * UEventsSender.h
+
3 *
+
4 * Created on: 2013-10-14
+
5 * Author: Mathieu
+
6 */
+
7
+
8#ifndef UEVENTSSENDER_H_
+
9#define UEVENTSSENDER_H_
+
10
+
11#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
12
+
13class UEvent;
+
14
+
+
15class UTILITE_EXPORT UEventsSender
+
16{
+
17public:
+ +
19 virtual ~UEventsSender();
+
20
+
21protected:
+
22
+
27 void post(UEvent * event, bool async = true) const;
+
28};
+
+
29
+
30
+
31#endif /* UEVENTSSENDER_H_ */
+ + +
void post(UEvent *event, bool async=true) const
+
+ + + + diff --git a/preview/pr-1492/api/latest/UException_8h_source.html b/preview/pr-1492/api/latest/UException_8h_source.html new file mode 100644 index 00000000..f750f89c --- /dev/null +++ b/preview/pr-1492/api/latest/UException_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UException.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UException.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UEXCEPTION_H_
+
21#define UEXCEPTION_H_
+
22
+
23#include <stdexcept>
+
24
+
+
25class UException: public std::runtime_error {
+
26public:
+
27
+
28 UException(const std::string & what) :
+
29 std::runtime_error(what)
+
30 {}
+
31};
+
+
32
+
33#endif /* UEXCEPTION_H_ */
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/UFile_8h_source.html b/preview/pr-1492/api/latest/UFile_8h_source.html new file mode 100644 index 00000000..85ce117e --- /dev/null +++ b/preview/pr-1492/api/latest/UFile_8h_source.html @@ -0,0 +1,195 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UFile.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UFile.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef FILE_H
+
21#define FILE_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
25#include "rtabmap/utilite/UDirectory.h"
+
26#include <string>
+
27
+
+
33class UTILITE_EXPORT UFile
+
34{
+
35public:
+
41 static bool exists(const std::string &filePath);
+
42
+
48 static long length(const std::string &filePath);
+
49
+
55 static int erase(const std::string &filePath);
+
56
+
63 static int rename(const std::string &oldFilePath,
+
64 const std::string &newFilePath);
+
65
+
71 static std::string getName(const std::string & filePath);
+
72
+
77 static std::string getExtension(const std::string &filePath);
+
78
+
84 static void copy(const std::string & from, const std::string & to);
+
85
+
86public:
+
91 UFile(const std::string & path) : path_(path) {}
+
92 ~UFile() {}
+
93
+
98 bool isValid() {return exists(path_);}
+
99
+
104 bool exists() {return exists(path_);}
+
105
+
110 long length() {return length(path_);}
+
111
+
+
116 int rename(const std::string &newName)
+
117 {
+
118 std::string ext = this->getExtension();
+
119 std::string newPath = UDirectory::getDir(path_) + std::string("/") + newName;
+
120 if(ext.size())
+
121 {
+
122 newPath += std::string(".") + getExtension(path_);
+
123 }
+
124 int result = rename(path_, newPath);
+
125 if(result == 0)
+
126 {
+
127 path_ = newPath;
+
128 }
+
129 return result;
+
130 }
+
+
135 std::string getName() {return getName(path_);}
+
140 std::string getExtension() {return getExtension(path_);}
+
141
+
146 void copy(const std::string & to) {copy(path_, to);}
+
147
+
148private:
+
149 std::string path_;
+
150};
+
+
151
+
152#endif
+
static std::string getDir(const std::string &filePath)
+
Definition UFile.h:34
+
long length()
Definition UFile.h:110
+
UFile(const std::string &path)
Definition UFile.h:91
+
static int erase(const std::string &filePath)
+
static std::string getName(const std::string &filePath)
+
int rename(const std::string &newName)
Definition UFile.h:116
+
bool exists()
Definition UFile.h:104
+
static int rename(const std::string &oldFilePath, const std::string &newFilePath)
+
void copy(const std::string &to)
Definition UFile.h:146
+
std::string getExtension()
Definition UFile.h:140
+
static void copy(const std::string &from, const std::string &to)
+
static bool exists(const std::string &filePath)
+
static std::string getExtension(const std::string &filePath)
+
bool isValid()
Definition UFile.h:98
+
static long length(const std::string &filePath)
+
std::string getName()
Definition UFile.h:135
+
+ + + + diff --git a/preview/pr-1492/api/latest/ULogger_8h.html b/preview/pr-1492/api/latest/ULogger_8h.html new file mode 100644 index 00000000..9c9222a1 --- /dev/null +++ b/preview/pr-1492/api/latest/ULogger_8h.html @@ -0,0 +1,600 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/ULogger.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ULogger.h File Reference
+
+
+ +

ULogger class and convenient macros. +More...

+
#include "rtabmap/utilite/utilite_export.h"
+#include "rtabmap/utilite/UMutex.h"
+#include "rtabmap/utilite/UDestroyer.h"
+#include "rtabmap/utilite/UEvent.h"
+#include "rtabmap/utilite/UException.h"
+#include <stdio.h>
+#include <time.h>
+#include <string>
+#include <vector>
+#include <map>
+#include <set>
+#include <stdarg.h>
+
+Include dependency graph for ULogger.h:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  ULogEvent
 
class  ULogger
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define ULOGGER_LOG(level, ...)   ULogger::write(level, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)
 
#define ULOGGER_DEBUG(...)   ULOGGER_LOG(ULogger::kDebug, __VA_ARGS__)
 
#define ULOGGER_INFO(...)   ULOGGER_LOG(ULogger::kInfo, __VA_ARGS__)
 
#define ULOGGER_WARN(...)   ULOGGER_LOG(ULogger::kWarning, __VA_ARGS__)
 
#define ULOGGER_ERROR(...)   ULOGGER_LOG(ULogger::kError, __VA_ARGS__)
 
#define ULOGGER_FATAL(...)   ULOGGER_LOG(ULogger::kFatal, __VA_ARGS__)
 
#define UDEBUG(...)   ULOGGER_DEBUG(__VA_ARGS__)
 
#define UINFO(...)   ULOGGER_INFO(__VA_ARGS__)
 
#define UWARN(...)   ULOGGER_WARN(__VA_ARGS__)
 
#define UERROR(...)   ULOGGER_ERROR(__VA_ARGS__)
 
#define UFATAL(...)   ULOGGER_FATAL(__VA_ARGS__)
 
#define UASSERT(condition)   if(!(condition)) ULogger::write(ULogger::kFatal, __FILE__, __LINE__, __FUNCTION__, "Condition (%s) not met!", #condition)
 
#define UASSERT_MSG(condition, msg_str)   if(!(condition)) ULogger::write(ULogger::kFatal, __FILE__, __LINE__, __FUNCTION__, "Condition (%s) not met! [%s]", #condition, msg_str)
 
+

Detailed Description

+

ULogger class and convenient macros.

+

This contains macros useful for logging a message anywhere in the application. Once the ULogger is set, use these macros like a printf to print debug messages.

+ +

Definition in file ULogger.h.

+

Macro Definition Documentation

+ +

◆ ULOGGER_LOG

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ULOGGER_LOG( level,
 ... 
)   ULogger::write(level, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)
+
+ +

Definition at line 51 of file ULogger.h.

+ +
+
+ +

◆ ULOGGER_DEBUG

+ +
+
+ + + + + + + + +
#define ULOGGER_DEBUG( ...)   ULOGGER_LOG(ULogger::kDebug, __VA_ARGS__)
+
+ +

Definition at line 53 of file ULogger.h.

+ +
+
+ +

◆ ULOGGER_INFO

+ +
+
+ + + + + + + + +
#define ULOGGER_INFO( ...)   ULOGGER_LOG(ULogger::kInfo, __VA_ARGS__)
+
+ +

Definition at line 54 of file ULogger.h.

+ +
+
+ +

◆ ULOGGER_WARN

+ +
+
+ + + + + + + + +
#define ULOGGER_WARN( ...)   ULOGGER_LOG(ULogger::kWarning, __VA_ARGS__)
+
+ +

Definition at line 55 of file ULogger.h.

+ +
+
+ +

◆ ULOGGER_ERROR

+ +
+
+ + + + + + + + +
#define ULOGGER_ERROR( ...)   ULOGGER_LOG(ULogger::kError, __VA_ARGS__)
+
+ +

Definition at line 56 of file ULogger.h.

+ +
+
+ +

◆ ULOGGER_FATAL

+ +
+
+ + + + + + + + +
#define ULOGGER_FATAL( ...)   ULOGGER_LOG(ULogger::kFatal, __VA_ARGS__)
+
+ +

Definition at line 57 of file ULogger.h.

+ +
+
+ +

◆ UDEBUG

+ +
+
+ + + + + + + + +
#define UDEBUG( ...)   ULOGGER_DEBUG(__VA_ARGS__)
+
+

Print a debug level message in the logger. Format is the same as a printf:

UDEBUG("This is a debug message with the number %d", 42);
+
#define UDEBUG(...)
Definition ULogger.h:59
+
+

Definition at line 59 of file ULogger.h.

+ +
+
+ +

◆ UINFO

+ +
+
+ + + + + + + + +
#define UINFO( ...)   ULOGGER_INFO(__VA_ARGS__)
+
+

Print a information level message in the logger. Format is the same as a printf:

UINFO("This is a information message with the number %d", 42);
+
#define UINFO(...)
Definition ULogger.h:60
+
+

Definition at line 60 of file ULogger.h.

+ +
+
+ +

◆ UWARN

+ +
+
+ + + + + + + + +
#define UWARN( ...)   ULOGGER_WARN(__VA_ARGS__)
+
+

Print a warning level message in the logger. Format is the same as a printf:

UWARN("This is a warning message with the number %d", 42);
+
#define UWARN(...)
Definition ULogger.h:61
+
+

Definition at line 61 of file ULogger.h.

+ +
+
+ +

◆ UERROR

+ +
+
+ + + + + + + + +
#define UERROR( ...)   ULOGGER_ERROR(__VA_ARGS__)
+
+

Print an error level message in the logger. Format is the same as a printf:

UERROR("This is an error message with the number %d", 42);
+
#define UERROR(...)
Definition ULogger.h:62
+
+

Definition at line 62 of file ULogger.h.

+ +
+
+ +

◆ UFATAL

+ +
+
+ + + + + + + + +
#define UFATAL( ...)   ULOGGER_FATAL(__VA_ARGS__)
+
+

Print a fatal error level message in the logger. The application will exit on fatal error. Format is the same as a printf:

UFATAL("This is a fatal error message with the number %d", 42);
+
#define UFATAL(...)
Definition ULogger.h:63
+
+

Definition at line 63 of file ULogger.h.

+ +
+
+ +

◆ UASSERT

+ +
+
+ + + + + + + + +
#define UASSERT( condition)   if(!(condition)) ULogger::write(ULogger::kFatal, __FILE__, __LINE__, __FUNCTION__, "Condition (%s) not met!", #condition)
+
+

Print a fatal error level message in the logger if condition is not met. The application will exit on fatal error. Format is the same as a printf:

UASSERT(a!=42, "This is a fatal error message with the number %d", 42);
+
#define UASSERT(condition)
Definition ULogger.h:66
+
+

Definition at line 66 of file ULogger.h.

+ +
+
+ +

◆ UASSERT_MSG

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define UASSERT_MSG( condition,
 msg_str 
)   if(!(condition)) ULogger::write(ULogger::kFatal, __FILE__, __LINE__, __FUNCTION__, "Condition (%s) not met! [%s]", #condition, msg_str)
+
+ +

Definition at line 67 of file ULogger.h.

+ +
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/ULogger_8h__dep__incl.map b/preview/pr-1492/api/latest/ULogger_8h__dep__incl.map new file mode 100644 index 00000000..4c10155c --- /dev/null +++ b/preview/pr-1492/api/latest/ULogger_8h__dep__incl.map @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/ULogger_8h__dep__incl.md5 b/preview/pr-1492/api/latest/ULogger_8h__dep__incl.md5 new file mode 100644 index 00000000..c4ccfc9a --- /dev/null +++ b/preview/pr-1492/api/latest/ULogger_8h__dep__incl.md5 @@ -0,0 +1 @@ +af7ce5b25ebe80a93a5854f029754603 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/ULogger_8h__dep__incl.png b/preview/pr-1492/api/latest/ULogger_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..8c017abcd7280821544d89d2e2b0a8d82286af61 GIT binary patch literal 290590 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Į?M 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²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 rKlztYUGlYwjBgLs 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 z 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%0A6lQa(Px1`pA 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⪼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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/ULogger_8h__incl.md5 b/preview/pr-1492/api/latest/ULogger_8h__incl.md5 new file mode 100644 index 00000000..79bf8f9f --- /dev/null +++ b/preview/pr-1492/api/latest/ULogger_8h__incl.md5 @@ -0,0 +1 @@ +aef12f635afb8041f2a2d63eca233206 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/ULogger_8h__incl.png b/preview/pr-1492/api/latest/ULogger_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..fb8e9117c2b4c7057937eb541e779e102f5e5e65 GIT binary patch literal 51207 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

|JT+Ffv^n3GC*=Akk8j4_ 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 G{(k`SpZMhf literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/ULogger_8h_source.html b/preview/pr-1492/api/latest/ULogger_8h_source.html new file mode 100644 index 00000000..4a97d210 --- /dev/null +++ b/preview/pr-1492/api/latest/ULogger_8h_source.html @@ -0,0 +1,442 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/ULogger.h Source File + + + + + + + + + + + + +

+
+
ULogger.h
+
+
+Go to the documentation of this file.
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef ULOGGER_H
+
21#define ULOGGER_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
25#include "rtabmap/utilite/UMutex.h"
+
26#include "rtabmap/utilite/UDestroyer.h"
+
27#include "rtabmap/utilite/UEvent.h"
+
28#include "rtabmap/utilite/UException.h"
+
29
+
30#include <stdio.h>
+
31#include <time.h>
+
32#include <string>
+
33#include <vector>
+
34#include <map>
+
35#include <set>
+
36
+
37#include <stdarg.h>
+
38
+
48/*
+
49 * Convenient macros for logging...
+
50 */
+
51#define ULOGGER_LOG(level, ...) ULogger::write(level, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)
+
52
+
53#define ULOGGER_DEBUG(...) ULOGGER_LOG(ULogger::kDebug, __VA_ARGS__)
+
54#define ULOGGER_INFO(...) ULOGGER_LOG(ULogger::kInfo, __VA_ARGS__)
+
55#define ULOGGER_WARN(...) ULOGGER_LOG(ULogger::kWarning, __VA_ARGS__)
+
56#define ULOGGER_ERROR(...) ULOGGER_LOG(ULogger::kError, __VA_ARGS__)
+
57#define ULOGGER_FATAL(...) ULOGGER_LOG(ULogger::kFatal, __VA_ARGS__) // Throw UException
+
58
+
59#define UDEBUG(...) ULOGGER_DEBUG(__VA_ARGS__)
+
60#define UINFO(...) ULOGGER_INFO(__VA_ARGS__)
+
61#define UWARN(...) ULOGGER_WARN(__VA_ARGS__)
+
62#define UERROR(...) ULOGGER_ERROR(__VA_ARGS__)
+
63#define UFATAL(...) ULOGGER_FATAL(__VA_ARGS__) // Throw UException
+
64
+
65// Throw UException
+
66#define UASSERT(condition) if(!(condition)) ULogger::write(ULogger::kFatal, __FILE__, __LINE__, __FUNCTION__, "Condition (%s) not met!", #condition)
+
67#define UASSERT_MSG(condition, msg_str) if(!(condition)) ULogger::write(ULogger::kFatal, __FILE__, __LINE__, __FUNCTION__, "Condition (%s) not met! [%s]", #condition, msg_str)
+
68
+
+
121class ULogEvent : public UEvent
+
122{
+
123public:
+
+
129 ULogEvent(const std::string & msg, int level) :
+
130 UEvent(level),
+
131 msg_(msg)
+
132 {}
+
+
133 virtual ~ULogEvent() {}
+
137 const std::string & getMsg() const {return msg_;}
+
141 virtual std::string getClassName() const {return "ULogEvent";}
+
142private:
+
143 std::string msg_;
+
144};
+
+
145
+
+
229class UTILITE_EXPORT ULogger
+
230{
+
231
+
232public:
+
236 static const std::string kDefaultLogFileName;
+
237
+
244 enum Type{kTypeNoLog, kTypeConsole, kTypeFile};
+
245
+
252 enum Level{kDebug, kInfo, kWarning, kError, kFatal};
+
253
+
265 static void setType(Type type, const std::string &fileName = kDefaultLogFileName, bool append = true);
+
266 static Type type() {return type_;}
+
267
+
268 // Setters
+
273 static void setPrintTime(bool printTime) {printTime_ = printTime;}
+
274 static bool isPrintTime() {return printTime_;}
+
275
+
280 static void setPrintLevel(bool printLevel) {printLevel_ = printLevel;}
+
281 static bool isPrintLevel() {return printLevel_;}
+
282
+
287 static void setPrintEndline(bool printEndline) {printEndline_ = printEndline;}
+
288 static bool isPrintEndLine() {return printEndline_;}
+
289
+
295 static void setPrintColored(bool printColored) {printColored_ = printColored;}
+
296 static bool isPrintColored() {return printColored_;}
+
297
+
302 static void setPrintWhere(bool printWhere) {printWhere_ = printWhere;}
+
303 static bool isPrintWhere() {return printWhere_;}
+
304
+
309 static void setPrintThreadId(bool printThreadId) {printThreadID_ = printThreadId;}
+
310 static bool isPrintThreadId() {return printThreadID_;}
+
311
+
316 static void setPrintWhereFullPath(bool printWhereFullPath) {printWhereFullPath_ = printWhereFullPath;}
+
317 static bool isPrintWhereFullPath() {return printWhereFullPath_;}
+
318
+
329 static void setBuffered(bool buffered);
+
330 static bool isBuffered() {return buffered_;}
+
331
+
343 static void setLevel(ULogger::Level level) {level_ = level;}
+
344 static ULogger::Level level() {return level_;}
+
345
+
352 static void setEventLevel(ULogger::Level eventSentLevel) {eventLevel_ = eventSentLevel;}
+
353 static ULogger::Level eventLevel() {return eventLevel_;}
+
354
+
358 static void setTreadIdFilter(const std::set<unsigned long> & ids) {threadIdFilter_ = ids;}
+
359 static void setTreadIdFilter(const std::vector<std::string> & ids);
+
360 static const std::set<unsigned long> & getTreadIdFilter() {return threadIdFilter_;}
+
361
+
366 static void registerCurrentThread(const std::string & name);
+
367 static void unregisterCurrentThread();
+
368 static std::map<std::string, unsigned long> getRegisteredThreads();
+
369
+
373 static void reset();
+
374
+
379 static void flush();
+
380
+
381 /*
+
382 * Write a message to logger: use UDEBUG(), UINFO(), UWARN(), UERROR() or UFATAL() instead.
+
383 * @param level the log level of this message
+
384 * @param file the file path
+
385 * @param line the line in the file
+
386 * @param function the function name in which the message is logged
+
387 * @param msg the message to write
+
388 * @param ... the variable arguments
+
389 */
+
390 static void write(ULogger::Level level,
+
391 const char * file,
+
392 int line,
+
393 const char *function,
+
394 const char* msg,
+
395 ...);
+
396
+
402 static int getTime(std::string &timeStr);
+
403
+
404protected:
+
405 /*
+
406 * This method is used to have a reference on the
+
407 * Logger. When no Logger exists, one is
+
408 * created. There is only one instance in the application.
+
409 * Must be protected by loggerMutex_.
+
410 * See the Singleton pattern for further explanation.
+
411 *
+
412 * @return the reference on the Logger
+
413 */
+
414 static ULogger* getInstance();
+
415
+
416 /*
+
417 * Called only once in getInstance(). It can't be instanciated
+
418 * by the user.
+
419 *
+
420 * @see getInstance()
+
421 */
+
422 ULogger() {}
+
423
+
424 /*
+
425 * Only called by a Destroyer.
+
426 * @see Destroyer
+
427 */
+
428 virtual ~ULogger();
+
429
+
430 /*
+
431 * Flush buffered messages
+
432 */
+
433 void _flush();
+
434
+
435 /*
+
436 * A Destroyer is used to remove a dynamicaly created
+
437 * Singleton. It is friend here to have access to the
+
438 * destructor.
+
439 *
+
440 * @see Destroyer
+
441 */
+
442 friend class UDestroyer<ULogger>;
+
443
+
444 /*
+
445 * The log file name.
+
446 */
+
447 static std::string logFileName_;
+
448
+
449 /*
+
450 * Default true, it doesn't overwrite the file.
+
451 */
+
452 static bool append_;
+
453
+
454private:
+
455 /*
+
456 * Create an instance according to type. See the Abstract factory
+
457 * pattern for further explanation.
+
458 * @see type_
+
459 * @return the reference on the new logger
+
460 */
+
461 static ULogger* createInstance();
+
462
+
463 /*
+
464 * Write a message on the output with the format :
+
465 * "A message". Inherited class
+
466 * must override this method to output the message. It
+
467 * does nothing by default.
+
468 * @param msg the message to write.
+
469 * @param arg the variable arguments
+
470 */
+
471 virtual void _write(const char*, va_list) {} // Do nothing by default
+
472 virtual void _writeStr(const char*) {} // Do nothing by default
+
473
+
474private:
+
475 /*
+
476 * The Logger instance pointer.
+
477 */
+
478 static ULogger* instance_;
+
479
+
480 /*
+
481 * The Logger's destroyer
+
482 */
+
483 static UDestroyer<ULogger> destroyer_;
+
484
+
485 /*
+
486 * If the logger prints the time for each message.
+
487 * Default is true.
+
488 */
+
489 static bool printTime_;
+
490
+
491 /*
+
492 * If the logger prints the level for each message.
+
493 * Default is true.
+
494 */
+
495 static bool printLevel_;
+
496
+
497 /*
+
498 * If the logger prints the end line for each message.
+
499 * Default is true.
+
500 */
+
501 static bool printEndline_;
+
502
+
503 /*
+
504 * If the logger prints text with color.
+
505 * Default is true.
+
506 */
+
507 static bool printColored_;
+
508
+
509 /*
+
510 * If the logger prints where the message is logged (fileName::function():line).
+
511 * Default is true.
+
512 */
+
513 static bool printWhere_;
+
514
+
515 /*
+
516 * If the logger prints the full path of the source file
+
517 * where the message is written. Only works when
+
518 * "printWhere_" is true.
+
519 * Default is false.
+
520 */
+
521 static bool printWhereFullPath_;
+
522
+
523 /*
+
524 * If the logger prints the thread ID.
+
525 * Default is false.
+
526 */
+
527 static bool printThreadID_;
+
528
+
529 /*
+
530 * If the logger limit the size of the "where" path to
+
531 * characters. If the path is over 8 characters, a "~"
+
532 * is added. Only works when "printWhereFullPath_" is false.
+
533 * Default is false.
+
534 */
+
535 static bool limitWhereLength_;
+
536
+
537 /*
+
538 * The type of the logger.
+
539 */
+
540 static Type type_;
+
541
+
542 /*
+
543 * The severity of the log.
+
544 */
+
545 static Level level_;
+
546
+
547 /*
+
548 * The severity at which the message is also sent in a ULogEvent.
+
549 */
+
550 static Level eventLevel_;
+
551
+
552 static const char * levelName_[5];
+
553
+
554 /*
+
555 * Mutex used when accessing public functions.
+
556 */
+
557 static UMutex loggerMutex_;
+
558
+
559 /*
+
560 * If the logger prints messages only when ULogger::flush() is called.
+
561 * Default is false.
+
562 */
+
563 static bool buffered_;
+
564
+
565 static std::string bufferedMsgs_;
+
566
+
567 static std::set<unsigned long> threadIdFilter_;
+
568 static std::map<std::string, unsigned long> registeredThreads_;
+
569};
+
+
570
+
571#endif // ULOGGER_H
+ + + +
const std::string & getMsg() const
Definition ULogger.h:137
+
virtual std::string getClassName() const
Definition ULogger.h:141
+
ULogEvent(const std::string &msg, int level)
Definition ULogger.h:129
+ +
static void reset()
+
static void setPrintThreadId(bool printThreadId)
Definition ULogger.h:309
+
static void setType(Type type, const std::string &fileName=kDefaultLogFileName, bool append=true)
+
static int getTime(std::string &timeStr)
+
static void setPrintTime(bool printTime)
Definition ULogger.h:273
+
static void setPrintWhereFullPath(bool printWhereFullPath)
Definition ULogger.h:316
+
static void setPrintLevel(bool printLevel)
Definition ULogger.h:280
+ +
static void flush()
+
static void setPrintColored(bool printColored)
Definition ULogger.h:295
+
static void registerCurrentThread(const std::string &name)
+
static void setPrintEndline(bool printEndline)
Definition ULogger.h:287
+ +
static void setBuffered(bool buffered)
+
static void setEventLevel(ULogger::Level eventSentLevel)
Definition ULogger.h:352
+
static const std::string kDefaultLogFileName
Definition ULogger.h:236
+
static void setLevel(ULogger::Level level)
Definition ULogger.h:343
+
static void setTreadIdFilter(const std::set< unsigned long > &ids)
Definition ULogger.h:358
+
static void setPrintWhere(bool printWhere)
Definition ULogger.h:302
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/UMath_8h.html b/preview/pr-1492/api/latest/UMath_8h.html new file mode 100644 index 00000000..70be972e --- /dev/null +++ b/preview/pr-1492/api/latest/UMath_8h.html @@ -0,0 +1,2574 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UMath.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
UMath.h File Reference
+
+
+ +

Basic mathematics functions. +More...

+
#include <cmath>
+#include <list>
+#include <vector>
+
+Include dependency graph for UMath.h:
+
+
+ + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Enumerations

enum  UXMatchMethod {
+  UXCorrRaw +, UXCorrBiased +, UXCorrUnbiased +, UXCorrCoeff +,
+  UXCovRaw +, UXCovBiased +, UXCovUnbiased +, UXCovCoeff +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<class T >
bool uIsNan (const T &value)
 
template<class T >
bool uIsFinite (const T &value)
 
template<class T >
T uMin3 (const T &a, const T &b, const T &c)
 
template<class T >
T uMax3 (const T &a, const T &b, const T &c)
 
template<class T >
T uMax (const T *v, unsigned int size, unsigned int &index)
 
template<class T >
T uMax (const std::vector< T > &v, unsigned int &index)
 
template<class T >
T uMax (const T *v, unsigned int size)
 
template<class T >
T uMax (const std::vector< T > &v)
 
template<class T >
T uMin (const T *v, unsigned int size, unsigned int &index)
 
template<class T >
T uMin (const std::vector< T > &v, unsigned int &index)
 
template<class T >
T uMin (const T *v, unsigned int size)
 
template<class T >
T uMin (const std::vector< T > &v)
 
template<class T >
void uMinMax (const T *v, unsigned int size, T &min, T &max, unsigned int &indexMin, unsigned int &indexMax)
 
template<class T >
void uMinMax (const std::vector< T > &v, T &min, T &max, unsigned int &indexMin, unsigned int &indexMax)
 
template<class T >
void uMinMax (const T *v, unsigned int size, T &min, T &max)
 
template<class T >
void uMinMax (const std::vector< T > &v, T &min, T &max)
 
template<class T >
int uSign (const T &v)
 
template<class T >
T uSum (const std::list< T > &list)
 
template<class T >
T uSum (const T *v, unsigned int size)
 
template<class T >
T uSum (const std::vector< T > &v)
 
template<class T >
T uSumSquared (const T *v, unsigned int size, T subtract=T())
 
template<class T >
T uSumSquared (const std::vector< T > &v, T subtract=T())
 
template<class T >
T uMean (const T *v, unsigned int size)
 
template<class T >
T uMean (const std::list< T > &list)
 
template<class T >
T uMean (const std::vector< T > &v)
 
template<class T >
T uMeanSquaredError (const T *x, unsigned int sizeX, const T *y, unsigned int sizeY)
 
template<class T >
T uMeanSquaredError (const std::vector< T > &x, const std::vector< T > &y)
 
template<class T >
T uVariance (const T *v, unsigned int size, T meanV)
 
template<class T >
T uVariance (const std::list< T > &list, const T &m)
 
template<class T >
T uVariance (const T *v, unsigned int size)
 
template<class T >
T uVariance (const std::vector< T > &v, const T &m)
 
template<class T >
T uNormSquared (const std::vector< T > &v)
 
template<class T >
T uNorm (const std::vector< T > &v)
 
template<class T >
T uNormSquared (const T &x1, const T &x2)
 
template<class T >
T uNorm (const T &x1, const T &x2)
 
template<class T >
T uNormSquared (const T &x1, const T &x2, const T &x3)
 
template<class T >
T uNorm (const T &x1, const T &x2, const T &x3)
 
template<class T >
std::vector< T > uNormalize (const std::vector< T > &v)
 
template<class T >
std::list< unsigned int > uLocalMaxima (const T *v, unsigned int size)
 
template<class T >
std::list< unsigned int > uLocalMaxima (const std::vector< T > &v)
 
template<class T >
std::vector< T > uXMatch (const T *vA, const T *vB, unsigned int sizeA, unsigned int sizeB, UXMatchMethod method)
 
template<class T >
std::vector< T > uXMatch (const std::vector< T > &vA, const std::vector< T > &vB, UXMatchMethod method)
 
template<class T >
T uXMatch (const T *vA, const T *vB, unsigned int sizeA, unsigned int sizeB, unsigned int index, UXMatchMethod method)
 
template<class T >
T uXMatch (const std::vector< T > &vA, const std::vector< T > &vB, unsigned int index, UXMatchMethod method)
 
std::vector< float > uHamming (unsigned int L)
 
template<typename T >
bool uIsInBounds (const T &value, const T &low, const T &high)
 
+

Detailed Description

+

Basic mathematics functions.

+ +

Definition in file UMath.h.

+

Enumeration Type Documentation

+ +

◆ UXMatchMethod

+ +
+
+ + + + +
enum UXMatchMethod
+
+

Enum of cross matching methods (cross-correlation, cross-covariance) : UXCorrRaw, UXCorrBiased, UXCorrUnbiased, UXCorrCoeff, UXCovRaw, UXCovBiased, UXCovUnbiased, UXCovCoeff.

+ +

Definition at line 696 of file UMath.h.

+ +
+
+

Function Documentation

+ +

◆ uIsNan()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
bool uIsNan (const T & value)
+
+inline
+
+

Return true if the number is NAN.

+ +

Definition at line 40 of file UMath.h.

+ +
+
+ +

◆ uIsFinite()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
bool uIsFinite (const T & value)
+
+inline
+
+

Return true if the number is finite.

+ +

Definition at line 53 of file UMath.h.

+ +
+
+ +

◆ uMin3()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
T uMin3 (const T & a,
const T & b,
const T & c 
)
+
+inline
+
+

Get the minimum of the 3 values.

Returns
the minimum value
+ +

Definition at line 67 of file UMath.h.

+ +
+
+ +

◆ uMax3()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
T uMax3 (const T & a,
const T & b,
const T & c 
)
+
+inline
+
+

Get the maximum of the 3 values.

Returns
the maximum value
+ +

Definition at line 78 of file UMath.h.

+ +
+
+ +

◆ uMax() [1/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
T uMax (const T * v,
unsigned int size,
unsigned int & index 
)
+
+inline
+
+

Get the maximum of a vector.

Parameters
+ + + + +
vthe array
sizethe size of the array
indexthe index of the maximum value in the vector.
+
+
+
Returns
the maximum value of the array
+ +

Definition at line 92 of file UMath.h.

+ +
+
+ +

◆ uMax() [2/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uMax (const std::vector< T > & v,
unsigned int & index 
)
+
+inline
+
+

Get the maximum of a vector.

Parameters
+ + + +
vthe array
indexthe index of the maximum value in the vector.
+
+
+
Returns
the maximum value of the array
+ +

Definition at line 120 of file UMath.h.

+ +
+
+ +

◆ uMax() [3/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uMax (const T * v,
unsigned int size 
)
+
+inline
+
+

Get the maximum of a vector.

Parameters
+ + + +
vthe array
sizethe size of the array
+
+
+
Returns
the maximum value of the array
+ +

Definition at line 132 of file UMath.h.

+ +
+
+ +

◆ uMax() [4/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T uMax (const std::vector< T > & v)
+
+inline
+
+

Get the maximum of a vector.

Parameters
+ + +
vthe array
+
+
+
Returns
the maximum value of the array
+ +

Definition at line 144 of file UMath.h.

+ +
+
+ +

◆ uMin() [1/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
T uMin (const T * v,
unsigned int size,
unsigned int & index 
)
+
+inline
+
+

Get the minimum of a vector.

Parameters
+ + + + +
vthe array
sizethe size of the array
indexthe index of the minimum value in the vector.
+
+
+
Returns
the minimum value of the array
+ +

Definition at line 157 of file UMath.h.

+ +
+
+ +

◆ uMin() [2/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uMin (const std::vector< T > & v,
unsigned int & index 
)
+
+inline
+
+

Get the minimum of a vector.

Parameters
+ + + +
vthe array
indexthe index of the minimum value in the vector.
+
+
+
Returns
the minimum value of the array
+ +

Definition at line 185 of file UMath.h.

+ +
+
+ +

◆ uMin() [3/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uMin (const T * v,
unsigned int size 
)
+
+inline
+
+

Get the minimum of a vector.

Parameters
+ + + +
vthe array
sizethe size of the array
+
+
+
Returns
the minimum value of the array
+ +

Definition at line 197 of file UMath.h.

+ +
+
+ +

◆ uMin() [4/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T uMin (const std::vector< T > & v)
+
+inline
+
+

Get the minimum of a vector.

Parameters
+ + +
vthe array
+
+
+
Returns
the minimum value of the array
+ +

Definition at line 209 of file UMath.h.

+ +
+
+ +

◆ uMinMax() [1/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void uMinMax (const T * v,
unsigned int size,
T & min,
T & max,
unsigned int & indexMin,
unsigned int & indexMax 
)
+
+inline
+
+

Get the minimum and maximum of a vector.

Parameters
+ + + + + + + +
vthe array
sizethe size of the array
minreference to output minimum
maxreference to output maximum
minreference to output minimum index
maxreference to output maximum index
+
+
+ +

Definition at line 224 of file UMath.h.

+ +
+
+ +

◆ uMinMax() [2/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void uMinMax (const std::vector< T > & v,
T & min,
T & max,
unsigned int & indexMin,
unsigned int & indexMax 
)
+
+inline
+
+

Get the minimum and maximum of a vector.

Parameters
+ + + + + + +
vthe array
minreference to output minimum
maxreference to output maximum
minreference to output minimum index
maxreference to output maximum index
+
+
+ +

Definition at line 262 of file UMath.h.

+ +
+
+ +

◆ uMinMax() [3/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void uMinMax (const T * v,
unsigned int size,
T & min,
T & max 
)
+
+inline
+
+

Get the minimum and maximum of a vector.

Parameters
+ + + + + +
vthe array
sizethe size of the array
minreference to output minimum
maxreference to output maximum
+
+
+ +

Definition at line 275 of file UMath.h.

+ +
+
+ +

◆ uMinMax() [4/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void uMinMax (const std::vector< T > & v,
T & min,
T & max 
)
+
+inline
+
+

Get the minimum and maximum of a vector.

Parameters
+ + + + +
vthe array
minreference to output minimum
maxreference to output maximum
+
+
+ +

Definition at line 289 of file UMath.h.

+ +
+
+ +

◆ uSign()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
int uSign (const T & v)
+
+inline
+
+

Get the sign of value.

Parameters
+ + +
vthe value
+
+
+
Returns
-1 if v<0, otherwise 1
+ +

Definition at line 300 of file UMath.h.

+ +
+
+ +

◆ uSum() [1/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T uSum (const std::list< T > & list)
+
+inline
+
+

Get the sum of all values contained in a list. Provided for convenience.

Parameters
+ + +
listthe list
+
+
+
Returns
the sum of values of the list
+ +

Definition at line 318 of file UMath.h.

+ +
+
+ +

◆ uSum() [2/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uSum (const T * v,
unsigned int size 
)
+
+inline
+
+

Get the sum of all values contained in an array: sum(x).

Parameters
+ + + +
vthe array
sizethe size of the array
+
+
+
Returns
the sum of values of the array
+ +

Definition at line 335 of file UMath.h.

+ +
+
+ +

◆ uSum() [3/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T uSum (const std::vector< T > & v)
+
+inline
+
+

Get the sum of all values contained in a vector. Provided for convenience.

Parameters
+ + +
vthe vector
+
+
+
Returns
the sum of values of the vector
+ +

Definition at line 354 of file UMath.h.

+ +
+
+ +

◆ uSumSquared() [1/2]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
T uSumSquared (const T * v,
unsigned int size,
T subtract = T() 
)
+
+inline
+
+

Get the sum of all squared values contained in an array: sum(x.^2).

Parameters
+ + + + +
vthe array
sizethe size of the array
subtractan optional value to remove to v before squaring v: sum((x-sub).^2)
+
+
+
Returns
the sum of values of the array
+ +

Definition at line 367 of file UMath.h.

+ +
+
+ +

◆ uSumSquared() [2/2]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uSumSquared (const std::vector< T > & v,
T subtract = T() 
)
+
+inline
+
+

Get the sum of all squared values contained in an array: sum(x.^2).

Parameters
+ + + +
vthe array
subtractan optional value to remove to v before squaring v: sum((x-sub).^2)
+
+
+
Returns
the sum of values of the array
+ +

Definition at line 387 of file UMath.h.

+ +
+
+ +

◆ uMean() [1/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uMean (const T * v,
unsigned int size 
)
+
+inline
+
+

Compute the mean of an array.

Parameters
+ + + +
vthe array
sizethe size of the array
+
+
+
Returns
the mean
+ +

Definition at line 399 of file UMath.h.

+ +
+
+ +

◆ uMean() [2/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T uMean (const std::list< T > & list)
+
+inline
+
+

Get the mean of a list. Provided for convenience.

Parameters
+ + +
listthe list
+
+
+
Returns
the mean
+ +

Definition at line 419 of file UMath.h.

+ +
+
+ +

◆ uMean() [3/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T uMean (const std::vector< T > & v)
+
+inline
+
+

Get the mean of a vector. Provided for convenience.

Parameters
+ + +
vthe vector
+
+
+
Returns
the mean
+ +

Definition at line 439 of file UMath.h.

+ +
+
+ +

◆ uMeanSquaredError() [1/2]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
T uMeanSquaredError (const T * x,
unsigned int sizeX,
const T * y,
unsigned int sizeY 
)
+
+inline
+
+

Compute mean squared error between two arrays: mean((x-y).^2).

Parameters
+ + + + + +
xthe first array
sizeXthe size of the array x
ythe second array
sizeYthe size of the array y (must be same size as x)
+
+
+
Returns
the mean squared error (return -1 if error cannot be computed)
+ +

Definition at line 453 of file UMath.h.

+ +
+
+ +

◆ uMeanSquaredError() [2/2]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uMeanSquaredError (const std::vector< T > & x,
const std::vector< T > & y 
)
+
+inline
+
+

Compute mean squared error between two arrays: mean((x-y).^2).

Parameters
+ + + +
xthe first array
ythe second array (must be same size as x)
+
+
+
Returns
the mean squared error (return -1 if error cannot be computed)
+ +

Definition at line 475 of file UMath.h.

+ +
+
+ +

◆ uVariance() [1/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
T uVariance (const T * v,
unsigned int size,
T meanV 
)
+
+inline
+
+

Compute the variance of an array.

Parameters
+ + + + +
vthe array
sizethe size of the array
meanVthe mean of the array
+
+
+
Returns
the variance
+
See also
mean()
+ +

Definition at line 489 of file UMath.h.

+ +
+
+ +

◆ uVariance() [2/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uVariance (const std::list< T > & list,
const T & m 
)
+
+inline
+
+

Get the variance of a list. Provided for convenience.

Parameters
+ + + +
listthe list
mthe mean of the list
+
+
+
Returns
the variance
+
See also
mean()
+ +

Definition at line 512 of file UMath.h.

+ +
+
+ +

◆ uVariance() [3/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uVariance (const T * v,
unsigned int size 
)
+
+inline
+
+

Compute the variance of an array.

Parameters
+ + + +
vthe array
sizethe size of the array
+
+
+
Returns
the variance
+ +

Definition at line 534 of file UMath.h.

+ +
+
+ +

◆ uVariance() [4/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uVariance (const std::vector< T > & v,
const T & m 
)
+
+inline
+
+

Get the variance of a vector. Provided for convenience.

Parameters
+ + + +
vthe vector
mthe mean of the vector
+
+
+
Returns
the variance
+
See also
mean()
+ +

Definition at line 548 of file UMath.h.

+ +
+
+ +

◆ uNormSquared() [1/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T uNormSquared (const std::vector< T > & v)
+
+inline
+
+

Get the squared norm of the vector : return x1*x1 + x2*x2 + x3*x3 + ...

Returns
the squared norm of the vector
+ +

Definition at line 558 of file UMath.h.

+ +
+
+ +

◆ uNorm() [1/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T uNorm (const std::vector< T > & v)
+
+inline
+
+

Get the norm of the vector : return sqrt(x1*x1 + x2*x2 + x3*x3 + ...)

Returns
the norm of the vector
+ +

Definition at line 573 of file UMath.h.

+ +
+
+ +

◆ uNormSquared() [2/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uNormSquared (const T & x1,
const T & x2 
)
+
+inline
+
+

Get the squared norm of the vector : return x1*x1 + x2*x2

Returns
the squared norm of the vector
+ +

Definition at line 583 of file UMath.h.

+ +
+
+ +

◆ uNorm() [2/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T uNorm (const T & x1,
const T & x2 
)
+
+inline
+
+

Get the norm of the vector : return sqrt(x1*x1 + x2*x2 + x3*x3)

Returns
the norm of the vector
+ +

Definition at line 593 of file UMath.h.

+ +
+
+ +

◆ uNormSquared() [3/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
T uNormSquared (const T & x1,
const T & x2,
const T & x3 
)
+
+inline
+
+

Get the squared norm of the vector : return x1*x1 + x2*x2 + x3*x3

Returns
the squared norm of the vector
+ +

Definition at line 603 of file UMath.h.

+ +
+
+ +

◆ uNorm() [3/3]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
T uNorm (const T & x1,
const T & x2,
const T & x3 
)
+
+inline
+
+

Get the norm of the vector : return sqrt(x1*x1 + x2*x2 + x3*x3)

Returns
the norm of the vector
+ +

Definition at line 613 of file UMath.h.

+ +
+
+ +

◆ uNormalize()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
std::vector< T > uNormalize (const std::vector< T > & v)
+
+inline
+
+

Normalize the vector : [x1 x2 x3 ...] ./ uNorm([x1 x2 x3 ...])

Returns
the vector normalized
+ +

Definition at line 623 of file UMath.h.

+ +
+
+ +

◆ uLocalMaxima() [1/2]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::list< unsigned int > uLocalMaxima (const T * v,
unsigned int size 
)
+
+inline
+
+

Find all local maxima.

+ +

Definition at line 645 of file UMath.h.

+ +
+
+ +

◆ uLocalMaxima() [2/2]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
std::list< unsigned int > uLocalMaxima (const std::vector< T > & v)
+
+inline
+
+

Find all local maxima.

+ +

Definition at line 687 of file UMath.h.

+ +
+
+ +

◆ uXMatch() [1/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::vector< T > uXMatch (const T * vA,
const T * vB,
unsigned int sizeA,
unsigned int sizeB,
UXMatchMethod method 
)
+
+inline
+
+

Do a full cross-correlation or cross-covariance between 2 arrays.

Parameters
+ + + + + + +
vAthe first array
vBthe second array
sizeAthe size of the first array
sizeBthe size of the second array
methodsee UXMatchMethod
+
+
+
Returns
the resulting correlation/covariance vector of size = sizeA + sizeB - 1
+ +

Definition at line 708 of file UMath.h.

+ +
+
+ +

◆ uXMatch() [2/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::vector< T > uXMatch (const std::vector< T > & vA,
const std::vector< T > & vB,
UXMatchMethod method 
)
+
+inline
+
+

Do a full cross-correlation or cross-covariance between 2 arrays.

Parameters
+ + + + +
vAthe first array
vBthe second array
methodsee UXMatchMethod
+
+
+
Returns
the resulting correlation/covariance vector of size = sizeA + sizeB - 1
+ +

Definition at line 820 of file UMath.h.

+ +
+
+ +

◆ uXMatch() [3/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
T uXMatch (const T * vA,
const T * vB,
unsigned int sizeA,
unsigned int sizeB,
unsigned int index,
UXMatchMethod method 
)
+
+inline
+
+

Do a cross correlation between 2 arrays at a specified index.

Parameters
+ + + + + + + +
vAthe first array
vBthe second array
sizeAthe size of the first array
sizeBthe size of the second array
indexthe index to correlate
methodsee UXMatchMethod
+
+
+
Returns
the resulting correlation value
+ +

Definition at line 836 of file UMath.h.

+ +
+
+ +

◆ uXMatch() [4/4]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
T uXMatch (const std::vector< T > & vA,
const std::vector< T > & vB,
unsigned int index,
UXMatchMethod method 
)
+
+inline
+
+

Do a cross correlation between 2 arrays at a specified index.

Parameters
+ + + + + + + +
vAthe first array
vBthe second array
sizeAthe size of the first array
sizeBthe size of the second array
indexthe index to correlate
methodsee UXMatchMethod
+
+
+
Returns
the resulting correlation value
+ +

Definition at line 909 of file UMath.h.

+ +
+
+ +

◆ uHamming()

+ +
+
+ + + + + +
+ + + + + + + + +
std::vector< float > uHamming (unsigned int L)
+
+inline
+
+

Return Hamming window of length L.

Parameters
+ + +
Lthe window length
+
+
+
Returns
the Hamming window (values are between 0 and 1)
+ +

Definition at line 919 of file UMath.h.

+ +
+
+ +

◆ uIsInBounds()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool uIsInBounds (const T & value,
const T & low,
const T & high 
)
+
+ +

Definition at line 932 of file UMath.h.

+ +
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/UMath_8h__dep__incl.map b/preview/pr-1492/api/latest/UMath_8h__dep__incl.map new file mode 100644 index 00000000..61387dc5 --- /dev/null +++ b/preview/pr-1492/api/latest/UMath_8h__dep__incl.map @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/UMath_8h__dep__incl.md5 b/preview/pr-1492/api/latest/UMath_8h__dep__incl.md5 new file mode 100644 index 00000000..16951bb7 --- /dev/null +++ b/preview/pr-1492/api/latest/UMath_8h__dep__incl.md5 @@ -0,0 +1 @@ +593239fb03d335ef48b8167e41e2cd41 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UMath_8h__dep__incl.png b/preview/pr-1492/api/latest/UMath_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..8513b1858b94b0e4adc5ac24d384c20cce16977e GIT binary patch literal 273128 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

E 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�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

+
+
UMath.h
+
+
+Go to the documentation of this file.
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UMATH_H
+
21#define UMATH_H
+
22
+
27#include <cmath>
+
28#include <list>
+
29#include <vector>
+
30
+
31#if _MSC_VER
+
32 #undef min
+
33 #undef max
+
34#endif
+
35
+
39template<class T>
+
+
40inline bool uIsNan(const T & value)
+
41{
+
42#if _MSC_VER
+
43 return _isnan(value) != 0;
+
44#else
+
45 return std::isnan(value);
+
46#endif
+
47}
+
+
48
+
52template<class T>
+
+
53inline bool uIsFinite(const T & value)
+
54{
+
55#if _MSC_VER
+
56 return _finite(value) != 0;
+
57#else
+
58 return std::isfinite(value);
+
59#endif
+
60}
+
+
61
+
66template<class T>
+
+
67inline T uMin3( const T& a, const T& b, const T& c)
+
68{
+
69 float m=a<b?a:b;
+
70 return m<c?m:c;
+
71}
+
+
72
+
77template<class T>
+
+
78inline T uMax3( const T& a, const T& b, const T& c)
+
79{
+
80 float m=a>b?a:b;
+
81 return m>c?m:c;
+
82}
+
+
83
+
91template<class T>
+
+
92inline T uMax(const T * v, unsigned int size, unsigned int & index)
+
93{
+
94 T max = 0;
+
95 index = 0;
+
96 if(!v || size == 0)
+
97 {
+
98 return max;
+
99 }
+
100 max = v[0];
+
101 for(unsigned int i=1; i<size; ++i)
+
102 {
+
103 if(uIsNan(max) || (max < v[i] && !uIsNan(v[i])))
+
104 {
+
105 max = v[i];
+
106 index = i;
+
107 }
+
108 }
+
109
+
110 return max;
+
111}
+
+
112
+
119template<class T>
+
+
120inline T uMax(const std::vector<T> & v, unsigned int & index)
+
121{
+
122 return uMax(v.data(), v.size(), index);
+
123}
+
+
124
+
131template<class T>
+
+
132inline T uMax(const T * v, unsigned int size)
+
133{
+
134 unsigned int index;
+
135 return uMax(v, size, index);
+
136}
+
+
137
+
143template<class T>
+
+
144inline T uMax(const std::vector<T> & v)
+
145{
+
146 return uMax(v.data(), v.size());
+
147}
+
+
148
+
156template<class T>
+
+
157inline T uMin(const T * v, unsigned int size, unsigned int & index)
+
158{
+
159 T min = 0;
+
160 index = 0;
+
161 if(!v || size == 0)
+
162 {
+
163 return min;
+
164 }
+
165 min = v[0];
+
166 for(unsigned int i=1; i<size; ++i)
+
167 {
+
168 if(uIsNan(min) || (min > v[i] && !uIsNan(v[i])))
+
169 {
+
170 min = v[i];
+
171 index = i;
+
172 }
+
173 }
+
174
+
175 return min;
+
176}
+
+
177
+
184template<class T>
+
+
185inline T uMin(const std::vector<T> & v, unsigned int & index)
+
186{
+
187 return uMin(v.data(), v.size(), index);
+
188}
+
+
189
+
196template<class T>
+
+
197inline T uMin(const T * v, unsigned int size)
+
198{
+
199 unsigned int index;
+
200 return uMin(v, size, index);
+
201}
+
+
202
+
208template<class T>
+
+
209inline T uMin(const std::vector<T> & v)
+
210{
+
211 return uMin(v.data(), v.size());
+
212}
+
+
213
+
223template<class T>
+
+
224inline void uMinMax(const T * v, unsigned int size, T & min, T & max, unsigned int & indexMin, unsigned int & indexMax)
+
225{
+
226 min = 0;
+
227 max = 0;
+
228 indexMin = 0;
+
229 indexMax = 0;
+
230 if(!v || size == 0)
+
231 {
+
232 return;
+
233 }
+
234 min = v[0];
+
235 max = v[0];
+
236
+
237 for(unsigned int i=1; i<size; ++i)
+
238 {
+
239 if(uIsNan(min) || (min > v[i] && !uIsNan(v[i])))
+
240 {
+
241 min = v[i];
+
242 indexMin = i;
+
243 }
+
244
+
245 if(uIsNan(max) || (max < v[i] && !uIsNan(v[i])))
+
246 {
+
247 max = v[i];
+
248 indexMax = i;
+
249 }
+
250 }
+
251}
+
+
252
+
261template<class T>
+
+
262inline void uMinMax(const std::vector<T> & v, T & min, T & max, unsigned int & indexMin, unsigned int & indexMax)
+
263{
+
264 uMinMax(v.data(), v.size(), min, max, indexMin, indexMax);
+
265}
+
+
266
+
274template<class T>
+
+
275inline void uMinMax(const T * v, unsigned int size, T & min, T & max)
+
276{
+
277 unsigned int indexMin;
+
278 unsigned int indexMax;
+
279 uMinMax(v, size, min, max, indexMin, indexMax);
+
280}
+
+
281
+
288template<class T>
+
+
289inline void uMinMax(const std::vector<T> & v, T & min, T & max)
+
290{
+
291 uMinMax(v.data(), v.size(), min, max);
+
292}
+
+
293
+
299template<class T>
+
+
300inline int uSign(const T & v)
+
301{
+
302 if(v < 0)
+
303 {
+
304 return -1;
+
305 }
+
306 else
+
307 {
+
308 return 1;
+
309 }
+
310}
+
+
311
+
317template<class T>
+
+
318inline T uSum(const std::list<T> & list)
+
319{
+
320 T sum = 0;
+
321 for(typename std::list<T>::const_iterator i=list.begin(); i!=list.end(); ++i)
+
322 {
+
323 sum += *i;
+
324 }
+
325 return sum;
+
326}
+
+
327
+
334template<class T>
+
+
335inline T uSum(const T * v, unsigned int size)
+
336{
+
337 T sum = 0;
+
338 if(v && size)
+
339 {
+
340 for(unsigned int i=0; i<size; ++i)
+
341 {
+
342 sum += v[i];
+
343 }
+
344 }
+
345 return sum;
+
346}
+
+
347
+
353template<class T>
+
+
354inline T uSum(const std::vector<T> & v)
+
355{
+
356 return uSum(v.data(), (int)v.size());
+
357}
+
+
358
+
366template<class T>
+
+
367inline T uSumSquared(const T * v, unsigned int size, T subtract = T())
+
368{
+
369 T sum = 0;
+
370 if(v && size)
+
371 {
+
372 for(unsigned int i=0; i<size; ++i)
+
373 {
+
374 sum += (v[i]-subtract)*(v[i]-subtract);
+
375 }
+
376 }
+
377 return sum;
+
378}
+
+
379
+
386template<class T>
+
+
387inline T uSumSquared(const std::vector<T> & v, T subtract = T())
+
388{
+
389 return uSumSquared(v.data(), v.size(), subtract);
+
390}
+
+
391
+
398template<class T>
+
+
399inline T uMean(const T * v, unsigned int size)
+
400{
+
401 T buf = 0;
+
402 if(v && size)
+
403 {
+
404 for(unsigned int i=0; i<size; ++i)
+
405 {
+
406 buf += v[i];
+
407 }
+
408 buf /= size;
+
409 }
+
410 return buf;
+
411}
+
+
412
+
418template<class T>
+
+
419inline T uMean(const std::list<T> & list)
+
420{
+
421 T m = 0;
+
422 if(list.size())
+
423 {
+
424 for(typename std::list<T>::const_iterator i=list.begin(); i!=list.end(); ++i)
+
425 {
+
426 m += *i;
+
427 }
+
428 m /= list.size();
+
429 }
+
430 return m;
+
431}
+
+
432
+
438template<class T>
+
+
439inline T uMean(const std::vector<T> & v)
+
440{
+
441 return uMean(v.data(), v.size());
+
442}
+
+
443
+
452template<class T>
+
+
453inline T uMeanSquaredError(const T * x, unsigned int sizeX, const T * y, unsigned int sizeY)
+
454{
+
455 T sum = 0;
+
456 if(x && y && sizeX == sizeY)
+
457 {
+
458 for(unsigned int i=0; i<sizeX; ++i)
+
459 {
+
460 T diff = x[i]-y[i];
+
461 sum += diff*diff;
+
462 }
+
463 return sum/(T)sizeX;
+
464 }
+
465 return (T)-1;
+
466}
+
+
467
+
474template<class T>
+
+
475inline T uMeanSquaredError(const std::vector<T> & x, const std::vector<T> & y)
+
476{
+
477 return uMeanSquaredError(x.data(), x.size(), y.data(), y.size());
+
478}
+
+
479
+
488template<class T>
+
+
489inline T uVariance(const T * v, unsigned int size, T meanV)
+
490{
+
491 T buf = 0;
+
492 if(v && size>1)
+
493 {
+
494 float sum = 0;
+
495 for(unsigned int i=0; i<size; ++i)
+
496 {
+
497 sum += (v[i]-meanV)*(v[i]-meanV);
+
498 }
+
499 buf = sum/(size-1);
+
500 }
+
501 return buf;
+
502}
+
+
503
+
511template<class T>
+
+
512inline T uVariance(const std::list<T> & list, const T & m)
+
513{
+
514 T buf = 0;
+
515 if(list.size()>1)
+
516 {
+
517 float sum = 0;
+
518 for(typename std::list<T>::const_iterator i=list.begin(); i!=list.end(); ++i)
+
519 {
+
520 sum += (*i-m)*(*i-m);
+
521 }
+
522 buf = sum/(list.size()-1);
+
523 }
+
524 return buf;
+
525}
+
+
526
+
533template<class T>
+
+
534inline T uVariance(const T * v, unsigned int size)
+
535{
+
536 T m = uMean(v, size);
+
537 return uVariance(v, size, m);
+
538}
+
+
539
+
547template<class T>
+
+
548inline T uVariance(const std::vector<T> & v, const T & m)
+
549{
+
550 return uVariance(v.data(), v.size(), m);
+
551}
+
+
552
+
557template<class T>
+
+
558inline T uNormSquared(const std::vector<T> & v)
+
559{
+
560 float sum = 0.0f;
+
561 for(unsigned int i=0; i<v.size(); ++i)
+
562 {
+
563 sum += v[i]*v[i];
+
564 }
+
565 return sum;
+
566}
+
+
567
+
572template<class T>
+
+
573inline T uNorm(const std::vector<T> & v)
+
574{
+
575 return std::sqrt(uNormSquared(v));
+
576}
+
+
577
+
582template<class T>
+
+
583inline T uNormSquared(const T & x1, const T & x2)
+
584{
+
585 return x1*x1 + x2*x2;
+
586}
+
+
587
+
592template<class T>
+
+
593inline T uNorm(const T & x1, const T & x2)
+
594{
+
595 return std::sqrt(uNormSquared(x1, x2));
+
596}
+
+
597
+
602template<class T>
+
+
603inline T uNormSquared(const T & x1, const T & x2, const T & x3)
+
604{
+
605 return x1*x1 + x2*x2 + x3*x3;
+
606}
+
+
607
+
612template<class T>
+
+
613inline T uNorm(const T & x1, const T & x2, const T & x3)
+
614{
+
615 return std::sqrt(uNormSquared(x1, x2, x3));
+
616}
+
+
617
+
622template<class T>
+
+
623inline std::vector<T> uNormalize(const std::vector<T> & v)
+
624{
+
625 float norm = uNorm(v);
+
626 if(norm == 0)
+
627 {
+
628 return v;
+
629 }
+
630 else
+
631 {
+
632 std::vector<T> r(v.size());
+
633 for(unsigned int i=0; i<v.size(); ++i)
+
634 {
+
635 r[i] = v[i]/norm;
+
636 }
+
637 return r;
+
638 }
+
639}
+
+
640
+
644template<class T>
+
+
645inline std::list<unsigned int> uLocalMaxima(const T * v, unsigned int size)
+
646{
+
647 std::list<unsigned int> maxima;
+
648 if(size)
+
649 {
+
650 for(unsigned int i=0; i<size; ++i)
+
651 {
+
652 if(i == 0)
+
653 {
+
654 // first item
+
655 if((i+1 < size && v[i] > v[i+1]) ||
+
656 i+1 >= size)
+
657 {
+
658 maxima.push_back(i);
+
659 }
+
660 }
+
661 else if(i == size - 1)
+
662 {
+
663 //last item
+
664 if((i >= 1 && v[i] > v[i-1]) ||
+
665 i == 0)
+
666 {
+
667 maxima.push_back(i);
+
668 }
+
669 }
+
670 else
+
671 {
+
672 //all others, check previous and next
+
673 if(v[i] > v[i-1] && v[i] > v[i+1])
+
674 {
+
675 maxima.push_back(i);
+
676 }
+
677 }
+
678 }
+
679 }
+
680 return maxima;
+
681}
+
+
682
+
686template<class T>
+
+
687inline std::list<unsigned int> uLocalMaxima(const std::vector<T> & v)
+
688{
+
689 return uLocalMaxima(v.data(), v.size());
+
690}
+
+
691
+
696enum UXMatchMethod{UXCorrRaw, UXCorrBiased, UXCorrUnbiased, UXCorrCoeff, UXCovRaw, UXCovBiased, UXCovUnbiased, UXCovCoeff};
+
697
+
707template<class T>
+
+
708inline std::vector<T> uXMatch(const T * vA, const T * vB, unsigned int sizeA, unsigned int sizeB, UXMatchMethod method)
+
709{
+
710 if(!vA || !vB || sizeA == 0 || sizeB == 0)
+
711 {
+
712 return std::vector<T>();
+
713 }
+
714
+
715 std::vector<T> result(sizeA + sizeB - 1);
+
716
+
717 T meanA = 0;
+
718 T meanB = 0;
+
719 if(method > UXCorrCoeff)
+
720 {
+
721 meanA = uMean(vA, sizeA);
+
722 meanB = uMean(vB, sizeB);
+
723 }
+
724
+
725 T den = 1;
+
726 if(method == UXCorrCoeff || method == UXCovCoeff)
+
727 {
+
728 den = std::sqrt(uSumSquared(vA, sizeA, meanA) * uSumSquared(vB, sizeB, meanB));
+
729 }
+
730 else if(method == UXCorrBiased || method == UXCovBiased)
+
731 {
+
732 den = (T)std::max(sizeA, sizeB);
+
733 }
+
734
+
735 if(sizeA == sizeB)
+
736 {
+
737 T resultA;
+
738 T resultB;
+
739
+
740 int posA;
+
741 int posB;
+
742 unsigned int j;
+
743
+
744 // Optimization, filling two results at once
+
745 for(unsigned int i=0; i<sizeA; ++i)
+
746 {
+
747 if(method == UXCorrUnbiased || method == UXCovUnbiased)
+
748 {
+
749 den = 0;
+
750 }
+
751
+
752 posA = sizeA - i - 1;
+
753 posB = sizeB - i - 1;
+
754 resultA = 0;
+
755 resultB = 0;
+
756 for(j=0; (j + posB) < sizeB && (j + posA) < sizeA; ++j)
+
757 {
+
758 resultA += (vA[j] - meanA) * (vB[j + posB] - meanB);
+
759 resultB += (vA[j + posA] - meanA) * (vB[j] - meanB);
+
760 if(method == UXCorrUnbiased || method == UXCovUnbiased)
+
761 {
+
762 ++den;
+
763 }
+
764 }
+
765
+
766 result[i] = resultA / den;
+
767 result[result.size()-1 -i] = resultB / den;
+
768 }
+
769 }
+
770 else
+
771 {
+
772 for(unsigned int i=0; i<result.size(); ++i)
+
773 {
+
774 if(method == UXCorrUnbiased || method == UXCovUnbiased)
+
775 {
+
776 den = 0;
+
777 }
+
778
+
779 int posB = sizeB - i - 1;
+
780 T r = 0;
+
781 if(posB >= 0)
+
782 {
+
783 for(unsigned int j=0; (j + posB) < sizeB && j < sizeA; ++j)
+
784 {
+
785 r += (vA[j] - meanA) * (vB[j + posB] - meanB);
+
786 if(method == UXCorrUnbiased || method == UXCovUnbiased)
+
787 {
+
788 ++den;
+
789 }
+
790 }
+
791 }
+
792 else
+
793 {
+
794 int posA = posB*-1;
+
795 for(unsigned int i=0; (i+posA) < sizeA && i < sizeB; ++i)
+
796 {
+
797 r += (vA[i+posA] - meanA) * (vB[i] - meanB);
+
798 if(method == UXCorrUnbiased || method == UXCovUnbiased)
+
799 {
+
800 ++den;
+
801 }
+
802 }
+
803 }
+
804
+
805 result[i] = r / den;
+
806 }
+
807 }
+
808
+
809 return result;
+
810}
+
+
811
+
819template<class T>
+
+
820inline std::vector<T> uXMatch(const std::vector<T> & vA, const std::vector<T> & vB, UXMatchMethod method)
+
821{
+
822 return uXMatch(vA.data(), vB.data(), vA.size(), vB.size(), method);
+
823}
+
+
824
+
835template<class T>
+
+
836inline T uXMatch(const T * vA, const T * vB, unsigned int sizeA, unsigned int sizeB, unsigned int index, UXMatchMethod method)
+
837{
+
838 T result = 0;
+
839 if(!vA || !vB || sizeA == 0 || sizeB == 0)
+
840 {
+
841 return result;
+
842 }
+
843
+
844 T meanA = 0;
+
845 T meanB = 0;
+
846 if(method > UXCorrCoeff)
+
847 {
+
848 meanA = uMean(vA, sizeA);
+
849 meanB = uMean(vB, sizeB);
+
850 }
+
851 unsigned int size = sizeA + sizeB - 1;
+
852
+
853 T den = 1;
+
854 if(method == UXCorrCoeff || method == UXCovCoeff)
+
855 {
+
856 den = std::sqrt(uSumSquared(vA, sizeA, meanA) * uSumSquared(vB, sizeB, meanB));
+
857 }
+
858 else if(method == UXCorrBiased || method == UXCovBiased)
+
859 {
+
860 den = (T)std::max(sizeA, sizeB);
+
861 }
+
862 else if(method == UXCorrUnbiased || method == UXCovUnbiased)
+
863 {
+
864 den = 0;
+
865 }
+
866
+
867 if(index < size)
+
868 {
+
869 int posB = sizeB - index - 1;
+
870 unsigned int i;
+
871 if(posB >= 0)
+
872 {
+
873 for(i=0; (i + posB) < sizeB && i < sizeA; ++i)
+
874 {
+
875 result += (vA[i] - meanA) * (vB[i + posB] - meanB);
+
876 if(method == UXCorrUnbiased || method == UXCovUnbiased)
+
877 {
+
878 ++den;
+
879 }
+
880 }
+
881 }
+
882 else
+
883 {
+
884 int posA = posB*-1;
+
885 for(i=0; (i+posA) < sizeA && i < sizeB; ++i)
+
886 {
+
887 result += (vA[i+posA] - meanA) * (vB[i] - meanB);
+
888 if(method == UXCorrUnbiased || method == UXCovUnbiased)
+
889 {
+
890 ++den;
+
891 }
+
892 }
+
893 }
+
894 }
+
895 return result / den;
+
896}
+
+
897
+
908template<class T>
+
+
909inline T uXMatch(const std::vector<T> & vA, const std::vector<T> & vB, unsigned int index, UXMatchMethod method)
+
910{
+
911 return uXMatch(vA.data(), vB.data(), vA.size(), vB.size(), index, method);
+
912}
+
+
913
+
+
919inline std::vector<float> uHamming(unsigned int L)
+
920{
+
921 std::vector<float> w(L);
+
922 unsigned int N = L-1;
+
923 float pi = 3.14159265f;
+
924 for(unsigned int n=0; n<N; ++n)
+
925 {
+
926 w[n] = 0.54f-0.46f*std::cos(2.0f*pi*float(n)/float(N));
+
927 }
+
928 return w;
+
929}
+
+
930
+
931template <typename T>
+
932bool uIsInBounds(const T& value, const T& low, const T& high)
+
933{
+
934 return uIsFinite(value) && !(value < low) && !(value >= high);
+
935}
+
936
+
937#endif // UMATH_H
+
bool uIsNan(const T &value)
Definition UMath.h:40
+
T uMax(const T *v, unsigned int size, unsigned int &index)
Definition UMath.h:92
+
T uMeanSquaredError(const T *x, unsigned int sizeX, const T *y, unsigned int sizeY)
Definition UMath.h:453
+
std::vector< T > uNormalize(const std::vector< T > &v)
Definition UMath.h:623
+
std::list< unsigned int > uLocalMaxima(const T *v, unsigned int size)
Definition UMath.h:645
+
T uMax3(const T &a, const T &b, const T &c)
Definition UMath.h:78
+
int uSign(const T &v)
Definition UMath.h:300
+
T uMean(const T *v, unsigned int size)
Definition UMath.h:399
+
T uSum(const std::list< T > &list)
Definition UMath.h:318
+
std::vector< T > uXMatch(const T *vA, const T *vB, unsigned int sizeA, unsigned int sizeB, UXMatchMethod method)
Definition UMath.h:708
+
T uMin(const T *v, unsigned int size, unsigned int &index)
Definition UMath.h:157
+
T uNorm(const std::vector< T > &v)
Definition UMath.h:573
+
bool uIsFinite(const T &value)
Definition UMath.h:53
+
T uMin3(const T &a, const T &b, const T &c)
Definition UMath.h:67
+
T uVariance(const T *v, unsigned int size, T meanV)
Definition UMath.h:489
+
std::vector< float > uHamming(unsigned int L)
Definition UMath.h:919
+
UXMatchMethod
Definition UMath.h:696
+
T uSumSquared(const T *v, unsigned int size, T subtract=T())
Definition UMath.h:367
+
T uNormSquared(const std::vector< T > &v)
Definition UMath.h:558
+
void uMinMax(const T *v, unsigned int size, T &min, T &max, unsigned int &indexMin, unsigned int &indexMax)
Definition UMath.h:224
+
+ + + + diff --git a/preview/pr-1492/api/latest/UMutex_8h_source.html b/preview/pr-1492/api/latest/UMutex_8h_source.html new file mode 100644 index 00000000..a17c03b8 --- /dev/null +++ b/preview/pr-1492/api/latest/UMutex_8h_source.html @@ -0,0 +1,235 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UMutex.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UMutex.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UMUTEX_H
+
21#define UMUTEX_H
+
22
+
23#include <errno.h>
+
24
+
25#ifdef _WIN32
+
26 #include "rtabmap/utilite/Win32/UWin32.h"
+
27#else
+
28 #include <pthread.h>
+
29#endif
+
30
+
31
+
+
54class UMutex
+
55{
+
56
+
57public:
+
58
+
+ +
63 {
+
64#ifdef _WIN32
+
65 InitializeCriticalSection(&C);
+
66#else
+
67 pthread_mutexattr_t attr;
+
68 pthread_mutexattr_init(&attr);
+
69 pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
+
70 pthread_mutex_init(&M,&attr);
+
71 pthread_mutexattr_destroy(&attr);
+
72#endif
+
73 }
+
+
74
+
75 virtual ~UMutex()
+
76 {
+
77#ifdef _WIN32
+
78 DeleteCriticalSection(&C);
+
79#else
+
80 pthread_mutex_unlock(&M); pthread_mutex_destroy(&M);
+
81#endif
+
82 }
+
83
+
+
88 int lock() const
+
89 {
+
90#ifdef _WIN32
+
91 EnterCriticalSection(&C); return 0;
+
92#else
+
93 return pthread_mutex_lock(&M);
+
94#endif
+
95 }
+
+
96
+
102#ifdef _WIN32
+
103 #if(_WIN32_WINNT >= 0x0400)
+
104 int lockTry() const
+
105 {
+
106 return (TryEnterCriticalSection(&C)?0:EBUSY);
+
107 }
+
108 #endif
+
109#else
+
+
110 int lockTry() const
+
111 {
+
112 return pthread_mutex_trylock(&M);
+
113 }
+
+
114#endif
+
115
+
+
120 int unlock() const
+
121 {
+
122#ifdef _WIN32
+
123 LeaveCriticalSection(&C); return 0;
+
124#else
+
125 return pthread_mutex_unlock(&M);
+
126#endif
+
127 }
+
+
128
+
129 private:
+
130#ifdef _WIN32
+
131 mutable CRITICAL_SECTION C;
+
132#else
+
133 mutable pthread_mutex_t M;
+
134#endif
+
135 void operator=(UMutex &) {}
+
136 UMutex( const UMutex & ) {}
+
137};
+
+
138
+
+ +
165{
+
166public:
+
167 UScopeMutex(const UMutex & mutex) :
+
168 mutex_(mutex)
+
169 {
+
170 mutex_.lock();
+
171 }
+
172 // backward compatibility
+
173 UScopeMutex(UMutex * mutex) :
+
174 mutex_(*mutex)
+
175 {
+
176 mutex_.lock();
+
177 }
+ +
179 {
+
180 mutex_.unlock();
+
181 }
+
182private:
+
183 const UMutex & mutex_;
+
184};
+
+
185
+
186#endif // UMUTEX_H
+ +
UMutex()
Definition UMutex.h:62
+
int unlock() const
Definition UMutex.h:120
+
int lockTry() const
Definition UMutex.h:110
+
int lock() const
Definition UMutex.h:88
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/UObjDeletionThread_8h_source.html b/preview/pr-1492/api/latest/UObjDeletionThread_8h_source.html new file mode 100644 index 00000000..e1669cc8 --- /dev/null +++ b/preview/pr-1492/api/latest/UObjDeletionThread_8h_source.html @@ -0,0 +1,208 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UObjDeletionThread.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UObjDeletionThread.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UOBJDELETIONTHREAD_H
+
21#define UOBJDELETIONTHREAD_H
+
22
+
23#include "rtabmap/utilite/UThreadNode.h"
+
24#include "rtabmap/utilite/UEvent.h"
+
25#include "rtabmap/utilite/UEventsManager.h"
+
26
+
+ +
32{
+
33public:
+
34 UObjDeletedEvent(int objDeletionThreadId) : UEvent(objDeletionThreadId) {}
+
35 virtual ~UObjDeletedEvent() {}
+
39 virtual std::string getClassName() const {return std::string("UObjDeletedEvent");}
+
40};
+
+
41
+
47template<class T>
+
+ +
49{
+
50public:
+
+
56 UObjDeletionThread(T * obj, int id=0) :
+
57 obj_(obj),
+
58 id_(id),
+
59 waitMs_(0) {}
+
+
60
+
+ +
69 {
+
70 join(true);
+
71 if(obj_)
+
72 {
+
73 delete obj_;
+
74 }
+
75 }
+
+
76
+
81 void startDeletion(int waitMs = 0) {waitMs_ = waitMs; this->start();}
+
82
+
87 int id() const {return id_;}
+
88
+
+
93 void setObj(T * obj)
+
94 {
+
95 join();
+
96 if(obj_)
+
97 {
+
98 delete obj_;
+
99 obj_ = 0;
+
100 }
+
101 obj_ = obj;
+
102 }
+
+
103
+
104private:
+
108 virtual void mainLoop()
+
109 {
+
110 if(waitMs_)
+
111 {
+
112 uSleep(waitMs_);
+
113 }
+
114 if(obj_)
+
115 {
+
116 delete obj_;
+
117 obj_ = 0;
+
118 }
+
119 this->kill();
+
120 UEventsManager::post(new UObjDeletedEvent(id_), false);
+
121 }
+
122
+
123private:
+
124 T * obj_;
+
125 int id_;
+
126 int waitMs_;
+
127};
+
+
128
+
129#endif /* UOBJDELETIONTHREAD_H */
+ +
static void post(UEvent *event, bool async=true, const UEventsSender *sender=0)
+ +
virtual std::string getClassName() const
+ + +
void startDeletion(int waitMs=0)
+ + +
UObjDeletionThread(T *obj, int id=0)
+ +
void start()
+
void kill()
+
void join(bool killFirst=false)
+
+ + + + diff --git a/preview/pr-1492/api/latest/UProcessInfo_8h.html b/preview/pr-1492/api/latest/UProcessInfo_8h.html new file mode 100644 index 00000000..df8d990c --- /dev/null +++ b/preview/pr-1492/api/latest/UProcessInfo_8h.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UProcessInfo.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
UProcessInfo.h File Reference
+
+
+ +

UProcessInfo class for getting process information. +More...

+
#include "rtabmap/utilite/utilite_export.h"
+
+Include dependency graph for UProcessInfo.h:
+
+
+ + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  UProcessInfo
 Class for getting information about the current process. More...
 
+

Detailed Description

+

UProcessInfo class for getting process information.

+

This class provides methods to retrieve information about the current process, such as memory usage.

+ +

Definition in file UProcessInfo.h.

+
+ + + + diff --git a/preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.map b/preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.map new file mode 100644 index 00000000..e9679168 --- /dev/null +++ b/preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.md5 b/preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.md5 new file mode 100644 index 00000000..b368b422 --- /dev/null +++ b/preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.md5 @@ -0,0 +1 @@ +52bfde1d4653c713ebe3fa2a3c6916c6 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.png b/preview/pr-1492/api/latest/UProcessInfo_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..4de27f89312ed4e63c256825cd9c32cfa0d12ef1 GIT binary patch literal 7095 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/UProcessInfo_8h__incl.map b/preview/pr-1492/api/latest/UProcessInfo_8h__incl.map new file mode 100644 index 00000000..b9e98fcc --- /dev/null +++ b/preview/pr-1492/api/latest/UProcessInfo_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/UProcessInfo_8h__incl.md5 b/preview/pr-1492/api/latest/UProcessInfo_8h__incl.md5 new file mode 100644 index 00000000..1fb82358 --- /dev/null +++ b/preview/pr-1492/api/latest/UProcessInfo_8h__incl.md5 @@ -0,0 +1 @@ +282ce144cd678af1a9c83b752b9f6b95 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UProcessInfo_8h__incl.png b/preview/pr-1492/api/latest/UProcessInfo_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b85abadcc81da81061a6dcc9e932f7e868fde4 GIT binary patch literal 6856 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/UProcessInfo_8h_source.html b/preview/pr-1492/api/latest/UProcessInfo_8h_source.html new file mode 100644 index 00000000..07fcf72f --- /dev/null +++ b/preview/pr-1492/api/latest/UProcessInfo_8h_source.html @@ -0,0 +1,134 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UProcessInfo.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UProcessInfo.h
+
+
+Go to the documentation of this file.
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UPROCESSINFO_H
+
21#define UPROCESSINFO_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
+
47class UTILITE_EXPORT UProcessInfo {
+
48public:
+ +
53
+
57 virtual ~UProcessInfo();
+
58
+
67 static long int getMemoryUsage();
+
68};
+
+
69
+
70#endif /* UPROCESSINFO_H */
+
Class for getting information about the current process.
+
virtual ~UProcessInfo()
Virtual destructor.
+
static long int getMemoryUsage()
Get the memory used by the current process.
+
UProcessInfo()
Constructor.
+
+ + + + diff --git a/preview/pr-1492/api/latest/USemaphore_8h_source.html b/preview/pr-1492/api/latest/USemaphore_8h_source.html new file mode 100644 index 00000000..4d7dd724 --- /dev/null +++ b/preview/pr-1492/api/latest/USemaphore_8h_source.html @@ -0,0 +1,328 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/USemaphore.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
USemaphore.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20/*
+
21 * Originally written by Phillip Sitbon
+
22 * Copyright 2003
+
23 */
+
24
+
25#ifndef USEMAPHORE_H
+
26#define USEMAPHORE_H
+
27
+
28#include <errno.h>
+
29
+
30#ifdef _WIN32
+
31#include "rtabmap/utilite/Win32/UWin32.h"
+
32#include <atomic>
+
33#define SEM_VALUE_MAX ((int) ((~0u) >> 1))
+
34#else
+
35#include <pthread.h>
+
36#include <sys/time.h>
+
37#endif
+
38
+
+ +
56{
+
57public:
+
+
62 USemaphore( int initValue = 0 )
+
63#ifdef _WIN32
+
64 : _count(initValue)
+
65#endif
+
66 {
+
67#ifdef _WIN32
+
68 S = CreateSemaphore(0,initValue,SEM_VALUE_MAX,0);
+
69#else
+
70 _available = initValue;
+
71 pthread_mutex_init(&_waitMutex, NULL);
+
72 pthread_cond_init(&_cond, NULL);
+
73#endif
+
74 }
+
+
75
+
76 virtual ~USemaphore()
+
77 {
+
78#ifdef _WIN32
+
79 CloseHandle(S);
+
80#else
+
81 pthread_cond_destroy(&_cond);
+
82 pthread_mutex_destroy(&_waitMutex);
+
83#endif
+
84 }
+
85
+
94#ifdef _WIN32
+
95 bool acquire(int n = 1, int ms = 0) const
+
96 {
+
97 int rt = 0;
+
98 while(n-- > 0 && rt==0)
+
99 {
+
100 rt = WaitForSingleObject((HANDLE)S, ms<=0?INFINITE:ms);
+
101 if(rt == 0) {
+
102 --_count;
+
103 }
+
104 }
+
105 return rt == 0;
+
106 }
+
107#else
+
+
108 bool acquire(int n = 1, int ms = 0)
+
109 {
+
110 int rt = 0;
+
111 pthread_mutex_lock(&_waitMutex);
+
112 while (n > _available && rt == 0)
+
113 {
+
114 if(ms > 0)
+
115 {
+
116 struct timespec timeToWait;
+
117 struct timeval now;
+
118
+
119 gettimeofday(&now,NULL);
+
120
+
121 timeToWait.tv_sec = now.tv_sec + ms/1000;
+
122 timeToWait.tv_nsec = (now.tv_usec+1000UL*(ms%1000))*1000UL;
+
123
+
124 rt = pthread_cond_timedwait(&_cond, &_waitMutex, &timeToWait);
+
125 }
+
126 else
+
127 {
+
128 rt = pthread_cond_wait(&_cond, &_waitMutex);
+
129 }
+
130 }
+
131 if(rt == 0)
+
132 {
+
133 // only remove them if waiting did not fail
+
134 _available -= n;
+
135 }
+
136 pthread_mutex_unlock(&_waitMutex);
+
137 return rt == 0;
+
138 }
+
+
139#endif
+
140
+
141 /*
+
142 * Try to acquire the semaphore, not a blocking call.
+
143 * @return 0 if the semaphore was acquired, EAGAIN if it couldn't be taken
+
144 * without waiting.
+
145 * @note The Windows overload takes no argument (it always acquires 1).
+
146 */
+
147#ifdef _WIN32
+
148 int acquireTry() const
+
149 {
+
150 // Non-blocking try-acquire: timeout 0, not INFINITE. INFINITE here
+
151 // turned this into a blocking acquire and hung tests when the count
+
152 // reached 0.
+
153 if(WaitForSingleObject((HANDLE)S, 0) == WAIT_OBJECT_0)
+
154 {
+
155 --_count;
+
156 return 0;
+
157 }
+
158 return EAGAIN;
+
159 }
+
160#else
+
+
164 int acquireTry(int n)
+
165 {
+
166 pthread_mutex_lock(&_waitMutex);
+
167 if(n > _available)
+
168 {
+
169 pthread_mutex_unlock(&_waitMutex);
+
170 return EAGAIN;
+
171 }
+
172 _available -= n;
+
173 pthread_mutex_unlock(&_waitMutex);
+
174 return 0;
+
175 }
+
+
176#endif
+
177
+
186#ifdef _WIN32
+
187 int release(int n = 1) const
+
188 {
+
189 if(ReleaseSemaphore((HANDLE)S, n, 0))
+
190 {
+
191 _count += n;
+
192 return 0;
+
193 }
+
194 return ERANGE;
+
195 }
+
196#else
+
+
197 int release(int n = 1)
+
198 {
+
199 pthread_mutex_lock(&_waitMutex);
+
200 _available += n;
+
201 pthread_cond_broadcast(&_cond);
+
202 pthread_mutex_unlock(&_waitMutex);
+
203 return 0;
+
204 }
+
+
205#endif
+
206
+
211#ifdef _WIN32
+
212 int value() const
+
213 {
+
214 // ReleaseSemaphore(S, 0, &V) returns FALSE on Windows (release count
+
215 // must be >= 1) and never writes V, so we mirror the count in an atomic
+
216 // instead. The value is eventually-consistent under concurrent
+
217 // acquire/release but accurate at quiescence.
+
218 return (int)_count.load();
+
219 }
+
220#else
+
+
221 int value()
+
222 {
+
223 int value = 0;
+
224 pthread_mutex_lock(&_waitMutex);
+
225 value = _available;
+
226 pthread_mutex_unlock(&_waitMutex);
+
227 return value;
+
228 }
+
+
229#endif
+
230
+
231#ifdef _WIN32
+
232 /*
+
233 * Reset the semaphore count.
+
234 * @param init the initial value
+
235 * TODO implement on posix ?
+
236 */
+
237 void reset( int init = 0 )
+
238 {
+
239 CloseHandle(S);
+
240 S = CreateSemaphore(0,init,SEM_VALUE_MAX,0);
+
241 _count = init;
+
242 }
+
243#endif
+
244
+
245private:
+
246 void operator=(const USemaphore &){}
+
247#ifdef _WIN32
+
248 USemaphore(const USemaphore &S){}
+
249 HANDLE S;
+
250 mutable std::atomic<long> _count;
+
251#else
+
252 USemaphore(const USemaphore &):_available(0){}
+
253 pthread_mutex_t _waitMutex;
+
254 pthread_cond_t _cond;
+
255 int _available;
+
256#endif
+
257};
+
+
258
+
259#endif // USEMAPHORE_H
+ +
bool acquire(int n=1, int ms=0)
Definition USemaphore.h:108
+
int acquireTry(int n)
Definition USemaphore.h:164
+
int release(int n=1)
Definition USemaphore.h:197
+
int value()
Definition USemaphore.h:221
+
USemaphore(int initValue=0)
Definition USemaphore.h:62
+
+ + + + diff --git a/preview/pr-1492/api/latest/UStl_8h.html b/preview/pr-1492/api/latest/UStl_8h.html new file mode 100644 index 00000000..76a8fb62 --- /dev/null +++ b/preview/pr-1492/api/latest/UStl_8h.html @@ -0,0 +1,2073 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UStl.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
UStl.h File Reference
+
+
+ +

Wrappers of STL for convenient functions. +More...

+
#include <list>
+#include <map>
+#include <set>
+#include <vector>
+#include <string>
+#include <algorithm>
+#include <stdlib.h>
+
+Include dependency graph for UStl.h:
+
+
+ + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<class K , class V >
std::list< K > uUniqueKeys (const std::multimap< K, V > &mm)
 
template<class K , class V >
std::vector< K > uKeys (const std::multimap< K, V > &mm)
 
template<class K , class V >
std::list< K > uKeysList (const std::multimap< K, V > &mm)
 
template<class K , class V >
std::vector< V > uValues (const std::multimap< K, V > &mm)
 
template<class K , class V >
std::list< V > uValuesList (const std::multimap< K, V > &mm)
 
template<class K , class V >
std::list< V > uValues (const std::multimap< K, V > &mm, const K &key)
 
template<class K , class V >
std::vector< K > uKeys (const std::map< K, V > &m)
 
template<class K , class V >
std::list< K > uKeysList (const std::map< K, V > &m)
 
template<class K , class V >
std::set< K > uKeysSet (const std::map< K, V > &m)
 
template<class K , class V >
std::vector< V > uValues (const std::map< K, V > &m)
 
template<class K , class V >
std::list< V > uValuesList (const std::map< K, V > &m)
 
template<class K , class V >
V uValue (const std::map< K, V > &m, const K &key, const V &defaultValue=V())
 
template<class K , class V >
V uTake (std::map< K, V > &m, const K &key, const V &defaultValue=V())
 
template<class V >
std::list< V >::iterator uIteratorAt (std::list< V > &list, const unsigned int &pos)
 
template<class V >
std::list< V >::const_iterator uIteratorAt (const std::list< V > &list, const unsigned int &pos)
 
template<class V >
std::set< V >::iterator uIteratorAt (std::set< V > &set, const unsigned int &pos)
 
template<class V >
std::set< V >::const_iterator uIteratorAt (const std::set< V > &set, const unsigned int &pos)
 
template<class V >
std::vector< V >::iterator uIteratorAt (std::vector< V > &v, const unsigned int &pos)
 
template<class V >
std::vector< V >::const_iterator uIteratorAt (const std::vector< V > &v, const unsigned int &pos)
 
template<class V >
V & uValueAt (std::list< V > &list, const unsigned int &pos)
 
template<class V >
const V & uValueAt (const std::list< V > &list, const unsigned int &pos)
 
template<class V >
bool uContains (const std::list< V > &list, const V &value)
 
template<class K , class V >
bool uContains (const std::map< K, V > &map, const K &key)
 
template<class K , class V >
bool uContains (const std::multimap< K, V > &map, const K &key)
 
template<class K , class V >
void uInsert (std::map< K, V > &map, const std::pair< K, V > &pair)
 
template<class K , class V >
void uInsert (std::map< K, V > &map, const std::map< K, V > &items)
 
template<class V >
std::vector< V > uListToVector (const std::list< V > &list)
 
template<class V >
std::list< V > uVectorToList (const std::vector< V > &v)
 
template<class K , class V >
std::map< K, V > uMultimapToMap (const std::multimap< K, V > &m)
 
template<class K , class V >
std::map< K, V > uMultimapToMapUnique (const std::multimap< K, V > &m)
 
template<class V >
void uAppend (std::list< V > &list, const std::list< V > &newItems)
 
template<class V >
int uIndexOf (const std::vector< V > &list, const V &value)
 
std::list< std::string > uSplit (const std::string &str, char separator=' ')
 
std::string uJoin (const std::list< std::string > &strings, const std::string &separator="")
 
bool uIsDigit (const char c)
 
bool uIsInteger (const std::string &str, bool checkForSign=true)
 
bool uIsNumber (const std::string &str)
 
std::list< std::string > uSplitNumChar (const std::string &str)
 
int uStrNumCmp (const std::string &a, const std::string &b)
 
bool uStrContains (const std::string &string, const std::string &substring)
 
int uCompareVersion (const std::string &version, int major, int minor=-1, int patch=-1)
 
std::string uPad (const std::string &title, int padding=20)
 
+

Detailed Description

+

Wrappers of STL for convenient functions.

+

All functions you will find here are here for the use of STL in a more convenient way.

+ +

Definition in file UStl.h.

+

Function Documentation

+ +

◆ uUniqueKeys()

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::list< K > uUniqueKeys (const std::multimap< K, V > & mm)
+
+inline
+
+

Get unique keys from a std::multimap.

Parameters
+ + +
mmthe multimap
+
+
+
Returns
the list which contains unique keys
+ +

Definition at line 46 of file UStl.h.

+ +
+
+ +

◆ uKeys() [1/2]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::vector< K > uKeys (const std::multimap< K, V > & mm)
+
+inline
+
+

Get all keys from a std::multimap.

Parameters
+ + +
mmthe multimap
+
+
+
Returns
the vector which contains all keys (may contains duplicated keys)
+ +

Definition at line 67 of file UStl.h.

+ +
+
+ +

◆ uKeysList() [1/2]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::list< K > uKeysList (const std::multimap< K, V > & mm)
+
+inline
+
+

Get all keys from a std::multimap.

Parameters
+ + +
mmthe multimap
+
+
+
Returns
the list which contains all keys (may contains duplicated keys)
+ +

Definition at line 84 of file UStl.h.

+ +
+
+ +

◆ uValues() [1/3]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::vector< V > uValues (const std::multimap< K, V > & mm)
+
+inline
+
+

Get all values from a std::multimap.

Parameters
+ + +
mmthe multimap
+
+
+
Returns
the vector which contains all values (contains values from duplicated keys)
+ +

Definition at line 100 of file UStl.h.

+ +
+
+ +

◆ uValuesList() [1/2]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::list< V > uValuesList (const std::multimap< K, V > & mm)
+
+inline
+
+

Get all values from a std::multimap.

Parameters
+ + +
mmthe multimap
+
+
+
Returns
the list which contains all values (contains values from duplicated keys)
+ +

Definition at line 117 of file UStl.h.

+ +
+
+ +

◆ uValues() [2/3]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::list< V > uValues (const std::multimap< K, V > & mm,
const K & key 
)
+
+inline
+
+

Get values for a specified key from a std::multimap.

Parameters
+ + + +
mmthe multimap
keythe key
+
+
+
Returns
the list which contains the values of the key
+ +

Definition at line 134 of file UStl.h.

+ +
+
+ +

◆ uKeys() [2/2]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::vector< K > uKeys (const std::map< K, V > & m)
+
+inline
+
+

Get all keys from a std::map.

Parameters
+ + +
mthe map
+
+
+
Returns
the vector of keys
+ +

Definition at line 152 of file UStl.h.

+ +
+
+ +

◆ uKeysList() [2/2]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::list< K > uKeysList (const std::map< K, V > & m)
+
+inline
+
+

Get all keys from a std::map.

Parameters
+ + +
mthe map
+
+
+
Returns
the list of keys
+ +

Definition at line 170 of file UStl.h.

+ +
+
+ +

◆ uKeysSet()

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::set< K > uKeysSet (const std::map< K, V > & m)
+
+inline
+
+

Get all keys from a std::map.

Parameters
+ + +
mthe map
+
+
+
Returns
the set of keys
+ +

Definition at line 186 of file UStl.h.

+ +
+
+ +

◆ uValues() [3/3]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::vector< V > uValues (const std::map< K, V > & m)
+
+inline
+
+

Get all values from a std::map.

Parameters
+ + +
mthe map
+
+
+
Returns
the vector of values
+ +

Definition at line 202 of file UStl.h.

+ +
+
+ +

◆ uValuesList() [2/2]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::list< V > uValuesList (const std::map< K, V > & m)
+
+inline
+
+

Get all values from a std::map.

Parameters
+ + +
mthe map
+
+
+
Returns
the list of values
+ +

Definition at line 220 of file UStl.h.

+ +
+
+ +

◆ uValue()

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
V uValue (const std::map< K, V > & m,
const K & key,
const V & defaultValue = V() 
)
+
+inline
+
+

Get the value of a specified key from a std::map.

Parameters
+ + + + +
mthe map
keythe key
defaultValuethe default value used if the key is not found
+
+
+
Returns
the value
+ +

Definition at line 238 of file UStl.h.

+ +
+
+ +

◆ uTake()

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
V uTake (std::map< K, V > & m,
const K & key,
const V & defaultValue = V() 
)
+
+inline
+
+

Get the value of a specified key from a std::map. This will remove the value from the map;

Parameters
+ + + + +
mthe map
keythe key
defaultValuethe default value used if the key is not found
+
+
+
Returns
the value
+ +

Definition at line 258 of file UStl.h.

+ +
+
+ +

◆ uIteratorAt() [1/6]

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::list< V >::iterator uIteratorAt (std::list< V > & list,
const unsigned int & pos 
)
+
+inline
+
+

Get the iterator at a specified position in a std::list. If the position is out of range, the result is the end iterator of the list.

Parameters
+ + + +
listthe list
posthe index position in the list
+
+
+
Returns
the iterator at the specified index
+ +

Definition at line 282 of file UStl.h.

+ +
+
+ +

◆ uIteratorAt() [2/6]

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::list< V >::const_iterator uIteratorAt (const std::list< V > & list,
const unsigned int & pos 
)
+
+inline
+
+

Get the iterator at a specified position in a std::list. If the position is out of range, the result is the end iterator of the list.

Parameters
+ + + +
listthe list
posthe index position in the list
+
+
+
Returns
the iterator at the specified index
+ +

Definition at line 300 of file UStl.h.

+ +
+
+ +

◆ uIteratorAt() [3/6]

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::set< V >::iterator uIteratorAt (std::set< V > & set,
const unsigned int & pos 
)
+
+inline
+
+

Get the iterator at a specified position in a std::set. If the position is out of range, the result is the end iterator of the set.

Parameters
+ + + +
setthe set
posthe index position in the set
+
+
+
Returns
the iterator at the specified index
+ +

Definition at line 318 of file UStl.h.

+ +
+
+ +

◆ uIteratorAt() [4/6]

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::set< V >::const_iterator uIteratorAt (const std::set< V > & set,
const unsigned int & pos 
)
+
+inline
+
+

Get the iterator at a specified position in a std::set. If the position is out of range, the result is the end iterator of the set.

Parameters
+ + + +
setthe set
posthe index position in the set
+
+
+
Returns
the iterator at the specified index
+ +

Definition at line 336 of file UStl.h.

+ +
+
+ +

◆ uIteratorAt() [5/6]

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector< V >::iterator uIteratorAt (std::vector< V > & v,
const unsigned int & pos 
)
+
+inline
+
+

Get the iterator at a specified position in a std::vector. If the position is out of range, the result is the end iterator of the vector.

Parameters
+ + + +
vthe vector
posthe index position in the vector
+
+
+
Returns
the iterator at the specified index
+ +

Definition at line 354 of file UStl.h.

+ +
+
+ +

◆ uIteratorAt() [6/6]

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector< V >::const_iterator uIteratorAt (const std::vector< V > & v,
const unsigned int & pos 
)
+
+inline
+
+

Get the iterator at a specified position in a std::vector. If the position is out of range, the result is the end iterator of the vector.

Parameters
+ + + +
vthe vector
posthe index position in the vector
+
+
+
Returns
the iterator at the specified index
+ +

Definition at line 367 of file UStl.h.

+ +
+
+ +

◆ uValueAt() [1/2]

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
V & uValueAt (std::list< V > & list,
const unsigned int & pos 
)
+
+inline
+
+

Get the value at a specified position in a std::list. If the position is out of range, the result is undefined.

Parameters
+ + + +
listthe list
posthe index position in the list
+
+
+
Returns
the value at the specified index
+ +

Definition at line 380 of file UStl.h.

+ +
+
+ +

◆ uValueAt() [2/2]

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
const V & uValueAt (const std::list< V > & list,
const unsigned int & pos 
)
+
+inline
+
+

Get the value at a specified position in a std::list. If the position is out of range, the result is undefined.

Parameters
+ + + +
listthe list
posthe index position in the list
+
+
+
Returns
the value at the specified index
+ +

Definition at line 394 of file UStl.h.

+ +
+
+ +

◆ uContains() [1/3]

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool uContains (const std::list< V > & list,
const V & value 
)
+
+inline
+
+

Check if the list contains the specified value.

Parameters
+ + + +
listthe list
valuethe value
+
+
+
Returns
true if the value is found in the list, otherwise false
+ +

Definition at line 407 of file UStl.h.

+ +
+
+ +

◆ uContains() [2/3]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool uContains (const std::map< K, V > & map,
const K & key 
)
+
+inline
+
+

Check if the map contains the specified key.

Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
true if the value is found in the map, otherwise false
+ +

Definition at line 419 of file UStl.h.

+ +
+
+ +

◆ uContains() [3/3]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool uContains (const std::multimap< K, V > & map,
const K & key 
)
+
+inline
+
+

Check if the multimap contains the specified key.

Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
true if the value is found in the map, otherwise false
+ +

Definition at line 431 of file UStl.h.

+ +
+
+ +

◆ uInsert() [1/2]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void uInsert (std::map< K, V > & map,
const std::pair< K, V > & pair 
)
+
+inline
+
+

Insert an item in the map. Contrary to the insert in the STL, if the key already exists, the value will be replaced by the new one.

+ +

Definition at line 441 of file UStl.h.

+ +
+
+ +

◆ uInsert() [2/2]

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void uInsert (std::map< K, V > & map,
const std::map< K, V > & items 
)
+
+inline
+
+

Insert items in the map. Contrary to the insert in the STL, if the key already exists, the value will be replaced by the new one.

+ +

Definition at line 455 of file UStl.h.

+ +
+
+ +

◆ uListToVector()

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + +
std::vector< V > uListToVector (const std::list< V > & list)
+
+inline
+
+

Convert a std::list to a std::vector.

Parameters
+ + +
listthe list
+
+
+
Returns
the vector
+ +

Definition at line 473 of file UStl.h.

+ +
+
+ +

◆ uVectorToList()

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + +
std::list< V > uVectorToList (const std::vector< V > & v)
+
+inline
+
+

Convert a std::vector to a std::list.

Parameters
+ + +
vthe vector
+
+
+
Returns
the list
+ +

Definition at line 484 of file UStl.h.

+ +
+
+ +

◆ uMultimapToMap()

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::map< K, V > uMultimapToMap (const std::multimap< K, V > & m)
+
+inline
+
+

Convert a std::multimap to a std::map

See also
uMultimapToMapUnique to keep only unique keys
+ +

Definition at line 494 of file UStl.h.

+ +
+
+ +

◆ uMultimapToMapUnique()

+ +
+
+
+template<class K , class V >
+ + + + + +
+ + + + + + + + +
std::map< K, V > uMultimapToMapUnique (const std::multimap< K, V > & m)
+
+inline
+
+

Convert a std::multimap to a std::map, keeping only unique keys!

+ +

Definition at line 503 of file UStl.h.

+ +
+
+ +

◆ uAppend()

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void uAppend (std::list< V > & list,
const std::list< V > & newItems 
)
+
+inline
+
+

Append a list to another list.

Parameters
+ + + +
listthe list on which the other list will be appended
newItemsthe list of items to be appended
+
+
+ +

Definition at line 524 of file UStl.h.

+ +
+
+ +

◆ uIndexOf()

+ +
+
+
+template<class V >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int uIndexOf (const std::vector< V > & list,
const V & value 
)
+
+inline
+
+

Get the index in the list of the specified value. S negative index is returned if the value is not found.

Parameters
+ + + +
listthe list
valuethe value
+
+
+
Returns
the index of the value in the list
+ +

Definition at line 537 of file UStl.h.

+ +
+
+ +

◆ uSplit()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::list< std::string > uSplit (const std::string & str,
char separator = ' ' 
)
+
+inline
+
+

Split a string into multiple string around the specified separator. Example:

std::list<std::string> v = split("Hello the world!", ' ');
+

The list v will contain {"Hello", "the", "world!"}

Parameters
+ + + +
strthe string
separatorthe separator character
+
+
+
Returns
the list of strings
+ +

Definition at line 564 of file UStl.h.

+ +
+
+ +

◆ uJoin()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::string uJoin (const std::list< std::string > & strings,
const std::string & separator = "" 
)
+
+inline
+
+

Join multiple strings into one string with optional separator. Example:

std::list<std::string> v;
+
v.push_back("Hello");
+
v.push_back("world!");
+
std::string joined = uJoin(v, " ");
+
std::string uJoin(const std::list< std::string > &strings, const std::string &separator="")
Definition UStl.h:601
+

The output string is "Hello world!"

Parameters
+ + + +
stringsa list of strings
separatorthe separator string
+
+
+
Returns
the joined string
+ +

Definition at line 601 of file UStl.h.

+ +
+
+ +

◆ uIsDigit()

+ +
+
+ + + + + +
+ + + + + + + + +
bool uIsDigit (const char c)
+
+inline
+
+

Check if a character is a digit.

Parameters
+ + +
cthe character
+
+
+
Returns
true if the character is a digit (if c >= '0' && c <= '9')
+ +

Definition at line 620 of file UStl.h.

+ +
+
+ +

◆ uIsInteger()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool uIsInteger (const std::string & str,
bool checkForSign = true 
)
+
+inline
+
+

Check if a string is a integer number.

Parameters
+ + +
strthe string
+
+
+
Returns
true if the string is a integer number
+ +

Definition at line 630 of file UStl.h.

+ +
+
+ +

◆ uIsNumber()

+ +
+
+ + + + + +
+ + + + + + + + +
bool uIsNumber (const std::string & str)
+
+inline
+
+

Check if a string is a number (integer or float).

Parameters
+ + +
strthe string
+
+
+
Returns
true if the string is a number
+ +

Definition at line 645 of file UStl.h.

+ +
+
+ +

◆ uSplitNumChar()

+ +
+
+ + + + + +
+ + + + + + + + +
std::list< std::string > uSplitNumChar (const std::string & str)
+
+inline
+
+

Split a string into number and character strings. Example:

std::list<std::string> v = uSplit("Hello 03 my 65 world!");
+
std::list< std::string > uSplit(const std::string &str, char separator=' ')
Definition UStl.h:564
+

The list v will contain {"Hello ", "03", " my ", "65", " world!"}

Parameters
+ + +
strthe string
+
+
+
Returns
the list of strings
+ +

Definition at line 670 of file UStl.h.

+ +
+
+ +

◆ uStrNumCmp()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int uStrNumCmp (const std::string & a,
const std::string & b 
)
+
+inline
+
+

Compare two alphanumeric strings. Useful to sort filenames (human-like sorting). Example:

std::string a = "Image9.jpg";
+
std::string b = "Image10.jpg";
+
int r = uStrNumCmp(a, b); // r returns -1 (a is smaller than b). In contrast, std::strcmp(a, b) would return 1.
+
int uStrNumCmp(const std::string &a, const std::string &b)
Definition UStl.h:717
+
Parameters
+ + + +
athe first string
bthe second string
+
+
+
Returns
-1 if a<b, 0 if a=b and 1 if a>b
+ +

Definition at line 717 of file UStl.h.

+ +
+
+ +

◆ uStrContains()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool uStrContains (const std::string & string,
const std::string & substring 
)
+
+inline
+
+

Check if a string contains a specified substring.

+ +

Definition at line 785 of file UStl.h.

+ +
+
+ +

◆ uCompareVersion()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int uCompareVersion (const std::string & version,
int major,
int minor = -1,
int patch = -1 
)
+
+inline
+
+ +

Definition at line 790 of file UStl.h.

+ +
+
+ +

◆ uPad()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::string uPad (const std::string & title,
int padding = 20 
)
+
+inline
+
+ +

Definition at line 812 of file UStl.h.

+ +
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/UStl_8h__dep__incl.map b/preview/pr-1492/api/latest/UStl_8h__dep__incl.map new file mode 100644 index 00000000..e25cb9cd --- /dev/null +++ b/preview/pr-1492/api/latest/UStl_8h__dep__incl.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/UStl_8h__dep__incl.md5 b/preview/pr-1492/api/latest/UStl_8h__dep__incl.md5 new file mode 100644 index 00000000..d00412ef --- /dev/null +++ b/preview/pr-1492/api/latest/UStl_8h__dep__incl.md5 @@ -0,0 +1 @@ +9ac14c861abfdc0354d9263102a95873 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UStl_8h__dep__incl.png b/preview/pr-1492/api/latest/UStl_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..620e90494d1e97c3eddaed75286e88048ade08c9 GIT binary patch literal 34503 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 + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/UStl_8h__incl.md5 b/preview/pr-1492/api/latest/UStl_8h__incl.md5 new file mode 100644 index 00000000..e40f0dbb --- /dev/null +++ b/preview/pr-1492/api/latest/UStl_8h__incl.md5 @@ -0,0 +1 @@ +56245e3a31ad99d849fb5663ec7fc79f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UStl_8h__incl.png b/preview/pr-1492/api/latest/UStl_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..2c80f09316a9eb72be6d79b777a8ec4a358485e9 GIT binary patch literal 15554 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 + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UStl.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UStl.h
+
+
+Go to the documentation of this file.
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef USTL_H
+
21#define USTL_H
+
22
+
23#include <list>
+
24#include <map>
+
25#include <set>
+
26#include <vector>
+
27#include <string>
+
28#include <algorithm>
+
29#include <stdlib.h>
+
30
+
45template<class K, class V>
+
+
46inline std::list<K> uUniqueKeys(const std::multimap<K, V> & mm)
+
47{
+
48 std::list<K> l;
+
49 typename std::list<K>::reverse_iterator lastValue;
+
50 for(typename std::multimap<K, V>::const_iterator iter = mm.begin(); iter!=mm.end(); ++iter)
+
51 {
+
52 if(iter == mm.begin() || (iter != mm.begin() && *lastValue != iter->first))
+
53 {
+
54 l.push_back(iter->first);
+
55 lastValue = l.rbegin();
+
56 }
+
57 }
+
58 return l;
+
59}
+
+
60
+
66template<class K, class V>
+
+
67inline std::vector<K> uKeys(const std::multimap<K, V> & mm)
+
68{
+
69 std::vector<K> v(mm.size());
+
70 int i=0;
+
71 for(typename std::multimap<K, V>::const_iterator iter = mm.begin(); iter!=mm.end(); ++iter)
+
72 {
+
73 v[i++] = iter->first;
+
74 }
+
75 return v;
+
76}
+
+
77
+
83template<class K, class V>
+
+
84inline std::list<K> uKeysList(const std::multimap<K, V> & mm)
+
85{
+
86 std::list<K> l;
+
87 for(typename std::multimap<K, V>::const_iterator iter = mm.begin(); iter!=mm.end(); ++iter)
+
88 {
+
89 l.push_back(iter->first);
+
90 }
+
91 return l;
+
92}
+
+
93
+
99template<class K, class V>
+
+
100inline std::vector<V> uValues(const std::multimap<K, V> & mm)
+
101{
+
102 std::vector<V> v(mm.size());
+
103 int i=0;
+
104 for(typename std::multimap<K, V>::const_iterator iter = mm.begin(); iter!=mm.end(); ++iter)
+
105 {
+
106 v[i++] = iter->second;
+
107 }
+
108 return v;
+
109}
+
+
110
+
116template<class K, class V>
+
+
117inline std::list<V> uValuesList(const std::multimap<K, V> & mm)
+
118{
+
119 std::list<V> l;
+
120 for(typename std::multimap<K, V>::const_iterator iter = mm.begin(); iter!=mm.end(); ++iter)
+
121 {
+
122 l.push_back(iter->second);
+
123 }
+
124 return l;
+
125}
+
+
126
+
133template<class K, class V>
+
+
134inline std::list<V> uValues(const std::multimap<K, V> & mm, const K & key)
+
135{
+
136 std::list<V> l;
+
137 std::pair<typename std::multimap<K, V>::const_iterator, typename std::multimap<K, V>::const_iterator> range;
+
138 range = mm.equal_range(key);
+
139 for(typename std::multimap<K, V>::const_iterator iter = range.first; iter!=range.second; ++iter)
+
140 {
+
141 l.push_back(iter->second);
+
142 }
+
143 return l;
+
144}
+
+
145
+
151template<class K, class V>
+
+
152inline std::vector<K> uKeys(const std::map<K, V> & m)
+
153{
+
154 std::vector<K> v(m.size());
+
155 int i=0;
+
156 for(typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
+
157 {
+
158 v[i] = iter->first;
+
159 ++i;
+
160 }
+
161 return v;
+
162}
+
+
163
+
169template<class K, class V>
+
+
170inline std::list<K> uKeysList(const std::map<K, V> & m)
+
171{
+
172 std::list<K> l;
+
173 for(typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
+
174 {
+
175 l.push_back(iter->first);
+
176 }
+
177 return l;
+
178}
+
+
179
+
185template<class K, class V>
+
+
186inline std::set<K> uKeysSet(const std::map<K, V> & m)
+
187{
+
188 std::set<K> s;
+
189 for(typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
+
190 {
+
191 s.insert(s.end(), iter->first);
+
192 }
+
193 return s;
+
194}
+
+
195
+
201template<class K, class V>
+
+
202inline std::vector<V> uValues(const std::map<K, V> & m)
+
203{
+
204 std::vector<V> v(m.size());
+
205 int i=0;
+
206 for(typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
+
207 {
+
208 v[i] = iter->second;
+
209 ++i;
+
210 }
+
211 return v;
+
212}
+
+
213
+
219template<class K, class V>
+
+
220inline std::list<V> uValuesList(const std::map<K, V> & m)
+
221{
+
222 std::list<V> l;
+
223 for(typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
+
224 {
+
225 l.push_back(iter->second);
+
226 }
+
227 return l;
+
228}
+
+
229
+
237template<class K, class V>
+
+
238inline V uValue(const std::map<K, V> & m, const K & key, const V & defaultValue = V())
+
239{
+
240 V v = defaultValue;
+
241 typename std::map<K, V>::const_iterator i = m.find(key);
+
242 if(i != m.end())
+
243 {
+
244 v = i->second;
+
245 }
+
246 return v;
+
247}
+
+
248
+
257template<class K, class V>
+
+
258inline V uTake(std::map<K, V> & m, const K & key, const V & defaultValue = V())
+
259{
+
260 V v;
+
261 typename std::map<K, V>::iterator i = m.find(key);
+
262 if(i != m.end())
+
263 {
+
264 v = i->second;
+
265 m.erase(i);
+
266 }
+
267 else
+
268 {
+
269 v = defaultValue;
+
270 }
+
271 return v;
+
272}
+
+
273
+
281template<class V>
+
+
282inline typename std::list<V>::iterator uIteratorAt(std::list<V> & list, const unsigned int & pos)
+
283{
+
284 typename std::list<V>::iterator iter = list.begin();
+
285 for(unsigned int i = 0; i<pos && iter != list.end(); ++i )
+
286 {
+
287 ++iter;
+
288 }
+
289 return iter;
+
290}
+
+
291
+
299template<class V>
+
+
300inline typename std::list<V>::const_iterator uIteratorAt(const std::list<V> & list, const unsigned int & pos)
+
301{
+
302 typename std::list<V>::const_iterator iter = list.begin();
+
303 for(unsigned int i = 0; i<pos && iter != list.end(); ++i )
+
304 {
+
305 ++iter;
+
306 }
+
307 return iter;
+
308}
+
+
309
+
317template<class V>
+
+
318inline typename std::set<V>::iterator uIteratorAt(std::set<V> & set, const unsigned int & pos)
+
319{
+
320 typename std::set<V>::iterator iter = set.begin();
+
321 for(unsigned int i = 0; i<pos && iter != set.end(); ++i )
+
322 {
+
323 ++iter;
+
324 }
+
325 return iter;
+
326}
+
+
327
+
335template<class V>
+
+
336inline typename std::set<V>::const_iterator uIteratorAt(const std::set<V> & set, const unsigned int & pos)
+
337{
+
338 typename std::set<V>::const_iterator iter = set.begin();
+
339 for(unsigned int i = 0; i<pos && iter != set.end(); ++i )
+
340 {
+
341 ++iter;
+
342 }
+
343 return iter;
+
344}
+
+
345
+
353template<class V>
+
+
354inline typename std::vector<V>::iterator uIteratorAt(std::vector<V> & v, const unsigned int & pos)
+
355{
+
356 return v.begin() + pos;
+
357}
+
+
358
+
366template<class V>
+
+
367inline typename std::vector<V>::const_iterator uIteratorAt(const std::vector<V> & v, const unsigned int & pos)
+
368{
+
369 return v.begin() + pos;
+
370}
+
+
371
+
379template<class V>
+
+
380inline V & uValueAt(std::list<V> & list, const unsigned int & pos)
+
381{
+
382 typename std::list<V>::iterator iter = uIteratorAt(list, pos);
+
383 return *iter;
+
384}
+
+
385
+
393template<class V>
+
+
394inline const V & uValueAt(const std::list<V> & list, const unsigned int & pos)
+
395{
+
396 typename std::list<V>::const_iterator iter = uIteratorAt(list, pos);
+
397 return *iter;
+
398}
+
+
399
+
406template<class V>
+
+
407inline bool uContains(const std::list<V> & list, const V & value)
+
408{
+
409 return std::find(list.begin(), list.end(), value) != list.end();
+
410}
+
+
411
+
418template<class K, class V>
+
+
419inline bool uContains(const std::map<K, V> & map, const K & key)
+
420{
+
421 return map.find(key) != map.end();
+
422}
+
+
423
+
430template<class K, class V>
+
+
431inline bool uContains(const std::multimap<K, V> & map, const K & key)
+
432{
+
433 return map.find(key) != map.end();
+
434}
+
+
435
+
440template<class K, class V>
+
+
441inline void uInsert(std::map<K, V> & map, const std::pair<K, V> & pair)
+
442{
+
443 std::pair<typename std::map<K, V>::iterator, bool> inserted = map.insert(pair);
+
444 if(inserted.second == false)
+
445 {
+
446 inserted.first->second = pair.second;
+
447 }
+
448}
+
+
449
+
454template<class K, class V>
+
+
455inline void uInsert(std::map<K, V> & map, const std::map<K, V> & items)
+
456{
+
457 for(typename std::map<K, V>::const_iterator iter=items.begin(); iter!=items.end(); ++iter)
+
458 {
+
459 std::pair<typename std::map<K, V>::iterator, bool> inserted = map.insert(*iter);
+
460 if(inserted.second == false)
+
461 {
+
462 inserted.first->second = iter->second;
+
463 }
+
464 }
+
465}
+
+
466
+
472template<class V>
+
+
473inline std::vector<V> uListToVector(const std::list<V> & list)
+
474{
+
475 return std::vector<V>(list.begin(), list.end());
+
476}
+
+
477
+
483template<class V>
+
+
484inline std::list<V> uVectorToList(const std::vector<V> & v)
+
485{
+
486 return std::list<V>(v.begin(), v.end());
+
487}
+
+
488
+
493template<class K, class V>
+
+
494inline std::map<K, V> uMultimapToMap(const std::multimap<K, V> & m)
+
495{
+
496 return std::map<K, V>(m.begin(), m.end());
+
497}
+
+
498
+
502template<class K, class V>
+
+
503inline std::map<K, V> uMultimapToMapUnique(const std::multimap<K, V> & m)
+
504{
+
505 std::map<K, V> mapOut;
+
506 std::list<K> uniqueKeys = uUniqueKeys(m);
+
507 for(typename std::list<K>::const_iterator iter = uniqueKeys.begin(); iter!=uniqueKeys.end(); ++iter)
+
508 {
+
509 if(m.count(*iter) == 1)
+
510 {
+
511 typename std::multimap<K, V>::const_iterator jter=m.find(*iter);
+
512 mapOut.insert(mapOut.end(), std::pair<K,V>(jter->first, jter->second));
+
513 }
+
514 }
+
515 return mapOut;
+
516}
+
+
517
+
523template<class V>
+
+
524inline void uAppend(std::list<V> & list, const std::list<V> & newItems)
+
525{
+
526 list.insert(list.end(), newItems.begin(), newItems.end());
+
527}
+
+
528
+
536template<class V>
+
+
537inline int uIndexOf(const std::vector<V> & list, const V & value)
+
538{
+
539 int index=-1;
+
540 int i=0;
+
541 for(typename std::vector<V>::const_iterator iter = list.begin(); iter!=list.end(); ++iter)
+
542 {
+
543 if(*iter == value)
+
544 {
+
545 index = i;
+
546 break;
+
547 }
+
548 ++i;
+
549 }
+
550 return index;
+
551}
+
+
552
+
+
564inline std::list<std::string> uSplit(const std::string & str, char separator = ' ')
+
565{
+
566 std::list<std::string> v;
+
567 std::string buf;
+
568 for(unsigned int i=0; i<str.size(); ++i)
+
569 {
+
570 if(str[i] != separator)
+
571 {
+
572 buf += str[i];
+
573 }
+
574 else if(buf.size())
+
575 {
+
576 v.push_back(buf);
+
577 buf = "";
+
578 }
+
579 }
+
580 if(buf.size())
+
581 {
+
582 v.push_back(buf);
+
583 }
+
584 return v;
+
585}
+
+
586
+
+
601inline std::string uJoin(const std::list<std::string> & strings, const std::string & separator = "")
+
602{
+
603 std::string out;
+
604 for(std::list<std::string>::const_iterator iter = strings.begin(); iter!=strings.end(); ++iter)
+
605 {
+
606 if(iter!=strings.begin() && !separator.empty())
+
607 {
+
608 out += separator;
+
609 }
+
610 out+=*iter;
+
611 }
+
612 return out;
+
613}
+
+
614
+
+
620inline bool uIsDigit(const char c)
+
621{
+
622 return c >= '0' && c <= '9';
+
623}
+
+
624
+
+
630inline bool uIsInteger(const std::string & str, bool checkForSign = true)
+
631{
+
632 bool isInteger = str.size()!=0;
+
633 for(unsigned int i=0; i<str.size() && isInteger; ++i)
+
634 {
+
635 isInteger = (checkForSign && i==0 && str[i]=='-') || uIsDigit(str[i]);
+
636 }
+
637 return isInteger;
+
638}
+
+
639
+
+
645inline bool uIsNumber(const std::string & str)
+
646{
+
647 std::list<std::string> list = uSplit(str, '.');
+
648 if(list.size() == 1)
+
649 {
+
650 return uIsInteger(str);
+
651 }
+
652 else if(list.size() == 2)
+
653 {
+
654 return uIsInteger(list.front()) && uIsInteger(list.back(), false);
+
655 }
+
656 return false;
+
657}
+
+
658
+
659
+
+
670inline std::list<std::string> uSplitNumChar(const std::string & str)
+
671{
+
672 std::list<std::string> list;
+
673 std::string buf;
+
674 bool num = false;
+
675 for(unsigned int i=0; i<str.size(); ++i)
+
676 {
+
677 if(uIsDigit(str[i]))
+
678 {
+
679 if(!num && buf.size())
+
680 {
+
681 list.push_back(buf);
+
682 buf.clear();
+
683 }
+
684 buf += str[i];
+
685 num = true;
+
686 }
+
687 else
+
688 {
+
689 if(num)
+
690 {
+
691 list.push_back(buf);
+
692 buf.clear();
+
693 }
+
694 buf += str[i];
+
695 num = false;
+
696 }
+
697 }
+
698 if(buf.size())
+
699 {
+
700 list.push_back(buf);
+
701 }
+
702 return list;
+
703}
+
+
704
+
+
717inline int uStrNumCmp(const std::string & a, const std::string & b)
+
718{
+
719 std::vector<std::string> listA;
+
720 std::vector<std::string> listB;
+
721
+
722 listA = uListToVector(uSplitNumChar(a));
+
723 listB = uListToVector(uSplitNumChar(b));
+
724
+
725 unsigned int i;
+
726 int result = 0;
+
727 for(i=0; i<listA.size() && i<listB.size(); ++i)
+
728 {
+
729 if(uIsDigit(listA[i].at(0)) && uIsDigit(listB[i].at(0)))
+
730 {
+
731 //padding if zeros at the beginning
+
732 if(listA[i].at(0) == '0' && listB[i].size() < listA[i].size())
+
733 {
+
734 while(listB[i].size() < listA[i].size())
+
735 {
+
736 listB[i] += '0';
+
737 }
+
738 }
+
739 else if(listB[i].at(0) == '0' && listA[i].size() < listB[i].size())
+
740 {
+
741 while(listA[i].size() < listB[i].size())
+
742 {
+
743 listA[i] += '0';
+
744 }
+
745 }
+
746
+
747 if(listB[i].size() < listA[i].size())
+
748 {
+
749 result = 1;
+
750 }
+
751 else if(listB[i].size() > listA[i].size())
+
752 {
+
753 result = -1;
+
754 }
+
755 else
+
756 {
+
757 result = listA[i].compare(listB[i]);
+
758 }
+
759 }
+
760 else if(uIsDigit(listA[i].at(0)))
+
761 {
+
762 result = -1;
+
763 }
+
764 else if(uIsDigit(listB[i].at(0)))
+
765 {
+
766 result = 1;
+
767 }
+
768 else
+
769 {
+
770 result = listA[i].compare(listB[i]);
+
771 }
+
772
+
773 if(result != 0)
+
774 {
+
775 break;
+
776 }
+
777 }
+
778
+
779 return result;
+
780}
+
+
781
+
+
785inline bool uStrContains(const std::string & string, const std::string & substring)
+
786{
+
787 return string.find(substring) != std::string::npos;
+
788}
+
+
789
+
790inline int uCompareVersion(const std::string & version, int major, int minor=-1, int patch=-1)
+
791{
+
792 std::vector<std::string> v = uListToVector(uSplit(version, '.'));
+
793 if(v.size() == 3)
+
794 {
+
795 int vMajor = atoi(v[0].c_str());
+
796 int vMinor = atoi(v[1].c_str());
+
797 int vPatch = atoi(v[2].c_str());
+
798 if(vMajor > major ||
+
799 (vMajor == major && minor!=-1 && vMinor > minor) ||
+
800 (vMajor == major && minor!=-1 && vMinor == minor && patch!=-1 && vPatch > patch))
+
801 {
+
802 return 1;
+
803 }
+
804 else if(vMajor == major && (minor == -1 || (vMinor == minor && (patch == -1 || vPatch == patch))))
+
805 {
+
806 return 0;
+
807 }
+
808 }
+
809 return -1;
+
810}
+
811
+
812inline std::string uPad(const std::string & title, int padding = 20)
+
813{
+
814 int emptySize = padding - (int)title.size();
+
815 if(emptySize>0)
+
816 {
+
817 return title + std::string(emptySize, ' ');
+
818 }
+
819 return title;
+
820}
+
821
+
822#endif /* USTL_H */
+
V uValue(const std::map< K, V > &m, const K &key, const V &defaultValue=V())
Definition UStl.h:238
+
V & uValueAt(std::list< V > &list, const unsigned int &pos)
Definition UStl.h:380
+
std::string uJoin(const std::list< std::string > &strings, const std::string &separator="")
Definition UStl.h:601
+
std::list< std::string > uSplitNumChar(const std::string &str)
Definition UStl.h:670
+
void uAppend(std::list< V > &list, const std::list< V > &newItems)
Definition UStl.h:524
+
bool uContains(const std::list< V > &list, const V &value)
Definition UStl.h:407
+
std::list< V > uVectorToList(const std::vector< V > &v)
Definition UStl.h:484
+
bool uIsNumber(const std::string &str)
Definition UStl.h:645
+
std::list< K > uUniqueKeys(const std::multimap< K, V > &mm)
Definition UStl.h:46
+
V uTake(std::map< K, V > &m, const K &key, const V &defaultValue=V())
Definition UStl.h:258
+
std::vector< V > uValues(const std::multimap< K, V > &mm)
Definition UStl.h:100
+
std::vector< V > uListToVector(const std::list< V > &list)
Definition UStl.h:473
+
std::list< V > uValuesList(const std::multimap< K, V > &mm)
Definition UStl.h:117
+
std::vector< K > uKeys(const std::multimap< K, V > &mm)
Definition UStl.h:67
+
std::list< V >::iterator uIteratorAt(std::list< V > &list, const unsigned int &pos)
Definition UStl.h:282
+
std::list< std::string > uSplit(const std::string &str, char separator=' ')
Definition UStl.h:564
+
bool uStrContains(const std::string &string, const std::string &substring)
Definition UStl.h:785
+
std::map< K, V > uMultimapToMapUnique(const std::multimap< K, V > &m)
Definition UStl.h:503
+
void uInsert(std::map< K, V > &map, const std::pair< K, V > &pair)
Definition UStl.h:441
+
bool uIsDigit(const char c)
Definition UStl.h:620
+
int uIndexOf(const std::vector< V > &list, const V &value)
Definition UStl.h:537
+
std::set< K > uKeysSet(const std::map< K, V > &m)
Definition UStl.h:186
+
std::list< K > uKeysList(const std::multimap< K, V > &mm)
Definition UStl.h:84
+
int uStrNumCmp(const std::string &a, const std::string &b)
Definition UStl.h:717
+
std::map< K, V > uMultimapToMap(const std::multimap< K, V > &m)
Definition UStl.h:494
+
bool uIsInteger(const std::string &str, bool checkForSign=true)
Definition UStl.h:630
+
+ + + + diff --git a/preview/pr-1492/api/latest/UThreadC_8h_source.html b/preview/pr-1492/api/latest/UThreadC_8h_source.html new file mode 100644 index 00000000..8ba01981 --- /dev/null +++ b/preview/pr-1492/api/latest/UThreadC_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UThreadC.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UThreadC.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UTHREADC_H
+
21#define UTHREADC_H
+
22
+
23#include <errno.h>
+
24
+
25/*
+
26 * Use of StateThread is safer. The Thread class in his
+
27 * base form is not supported.
+
28 * @see StateThread
+
29 */
+
30#ifdef _WIN32
+
31 #include "rtabmap/utilite/Win32/UThreadC.h"
+
32#else
+
33 #include "rtabmap/utilite/Posix/UThreadC.h"
+
34#endif
+
35
+
36#endif // UTHREADC_H
+
+ + + + diff --git a/preview/pr-1492/api/latest/UThreadNode_8h_source.html b/preview/pr-1492/api/latest/UThreadNode_8h_source.html new file mode 100644 index 00000000..379a6c9e --- /dev/null +++ b/preview/pr-1492/api/latest/UThreadNode_8h_source.html @@ -0,0 +1,124 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UThreadNode.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UThreadNode.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UTHREADNODE_H_
+
21#define UTHREADNODE_H_
+
22
+
23#include "rtabmap/utilite/UThread.h"
+
24
+
25//For backward compatibility
+
26typedef UThread UThreadNode;
+
27
+
28
+
29#endif /* UTHREADNODE_H_ */
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/UThread_8h_source.html b/preview/pr-1492/api/latest/UThread_8h_source.html new file mode 100644 index 00000000..055e95da --- /dev/null +++ b/preview/pr-1492/api/latest/UThread_8h_source.html @@ -0,0 +1,241 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UThread.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UThread.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UTHREADNODE_H
+
21#define UTHREADNODE_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
25#include "rtabmap/utilite/UThreadC.h"
+
26
+
+
86class UTILITE_EXPORT UThread : public UThreadC<void>
+
87{
+
88public:
+
92 enum Priority{kPLow, kPBelowNormal, kPNormal, kPAboveNormal, kPRealTime};
+
93
+
94public:
+
95 //return caller thread id
+
96 static unsigned long currentThreadId() {return (unsigned long)UThreadC<void>::Self();}
+
97
+
98public:
+
104 UThread(Priority priority = kPNormal);
+
105
+
112 virtual ~UThread();
+
113
+
119 void start();
+
120
+
127 void kill();
+
128
+
135 void join(bool killFirst = false);
+
136
+
141 void setPriority(Priority priority);
+
142
+
149 void setAffinity(int cpu = 0);
+
150
+
154 bool isCreating() const;
+
155
+
159 bool isRunning() const;
+
160
+
164 bool isIdle() const;
+
165
+
169 bool isKilled() const;
+
170
+
171 Handle getThreadHandle() const {return handle_;}
+
172 unsigned long getThreadId() const {return threadId_;}
+
173
+
174protected:
+
175
+
176private:
+
183 virtual void mainLoopBegin() {}
+
184
+
194 virtual void mainLoop() = 0;
+
195
+
203 virtual void mainLoopKill() {}
+
204
+
211 virtual void mainLoopEnd() {}
+
212
+
213 /*
+
214 * Inherited method ThreadMain() from Thread.
+
215 * @see Thread<void>
+
216 */
+
217 void ThreadMain();
+
218
+
219 /*
+
220 * Apply thread priority. This is called when starting the thread.
+
221 * *@todo : Support pthread
+
222 */
+
223 void applyPriority();
+
224
+
225 /*
+
226 * Apply cpu affinity. This is called when starting the thread.
+
227 * *@todo : Support Windows
+
228 */
+
229 void applyAffinity();
+
230
+
231 /*
+
232 * Inherited method Create() from Thread.
+
233 * Here we force this function to be private so the
+
234 * inherited class can't have access to it.
+
235 * @see Thread<void>
+
236 */
+
237 int Create(
+
238 Handle * const & H = 0,
+
239 const bool & CreateDetached = false,
+
240 const unsigned int & StackSize = 0,
+
241 const bool & CancelEnable = false, // UNUSED
+
242 const bool & CancelAsync = false // UNUSED
+
243 ) const;
+
244
+
245 //Methods from UThread<void> class hided
+
246 static int Join( Handle H )
+
247 { return UThreadC<void>::Join(H); }
+
248#ifndef ANDROID
+
249 static int Kill( Handle H )
+
250 { return UThreadC<void>::Kill(H); }
+
251#endif
+
252 static int Detach( Handle H )
+
253 { return UThreadC<void>::Detach(H); }
+
254
+
255private:
+
256 void operator=(UThread &) {}
+
257 UThread( const UThread &) : state_(kSIdle) {}
+
258
+
259private:
+
260 enum State{kSIdle, kSCreating, kSRunning, kSKilled}; /* Enum of states. */
+
261 State state_; /* The thread state. */
+
262 Priority priority_; /* The thread priority. */
+
263 Handle handle_; /* The thread handle. */
+
264 unsigned long threadId_; /* The thread id. */
+
265 int cpuAffinity_; /* The cpu affinity. */
+
266 UMutex killSafelyMutex_; /* Mutex used to protect the kill() method. */
+
267 UMutex runningMutex_; /* Mutex used to notify the join method when the thread has finished. */
+
268};
+
+
269
+
270#endif // UTHREADNODE_H
+ + + +
void start()
+
UThread(Priority priority=kPNormal)
+
bool isIdle() const
+
bool isRunning() const
+
bool isKilled() const
+
virtual ~UThread()
+ +
void setPriority(Priority priority)
+
void kill()
+
void setAffinity(int cpu=0)
+
bool isCreating() const
+
void join(bool killFirst=false)
+
+ + + + diff --git a/preview/pr-1492/api/latest/UTimer_8h_source.html b/preview/pr-1492/api/latest/UTimer_8h_source.html new file mode 100644 index 00000000..5649e44c --- /dev/null +++ b/preview/pr-1492/api/latest/UTimer_8h_source.html @@ -0,0 +1,164 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UTimer.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UTimer.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UTIMER_H
+
21#define UTIMER_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24
+
25#ifdef _WIN32
+
26#include <windows.h>
+
27#else
+
28#include <sys/time.h>
+
29#include <time.h>
+
30#endif
+
31
+
+
46class UTILITE_EXPORT UTimer
+
47{
+
48public:
+
49 UTimer();
+
50 ~UTimer();
+
51
+
57 static double now();
+
58
+
62 void start();
+
63
+
67 void stop();
+
68
+
75 double elapsed() {return getElapsedTime();}
+
76 double getElapsedTime();
+
77
+
86 double restart() {return ticks();}
+
87 double ticks();
+
88
+
89private:
+
90#ifdef _WIN32
+
91 LARGE_INTEGER startTimeRecorded_; /* When we start the timer, timeRecorded is copied over lastTimeRecorded.*/
+
92 LARGE_INTEGER stopTimeRecorded_; /* When we stop the timer. */
+
93
+
94 LARGE_INTEGER frequency_; /* Keep the frequency of the counter */
+
95#else
+
96 struct timeval startTimeRecorded_; /* When we start the timer, timeRecorded is copied over lastTimeRecorded.*/
+
97 struct timeval stopTimeRecorded_; /* When we stop the timer. */
+
98#endif
+
99};
+
+
100
+
101#endif //UTIMER_H
+ +
void start()
+
double elapsed()
Definition UTimer.h:75
+
void stop()
+
double restart()
Definition UTimer.h:86
+
static double now()
+
+ + + + diff --git a/preview/pr-1492/api/latest/UVariant_8h.html b/preview/pr-1492/api/latest/UVariant_8h.html new file mode 100644 index 00000000..bc394569 --- /dev/null +++ b/preview/pr-1492/api/latest/UVariant_8h.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UVariant.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
UVariant.h File Reference
+
+
+ +

UVariant class for storing and converting between different data types. +More...

+
#include "rtabmap/utilite/utilite_export.h"
+#include <string>
+#include <vector>
+
+Include dependency graph for UVariant.h:
+
+
+ + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  UVariant
 A variant type that can hold values of different types. More...
 
+

Detailed Description

+

UVariant class for storing and converting between different data types.

+

This class provides a type-safe way to store values of different types and convert between them. It supports basic types (bool, char, int, float, etc.) and arrays of these types.

+

Example:

UVariant v(42);
+
if(v.isInt())
+
{
+
int value = v.toInt();
+
}
+
A variant type that can hold values of different types.
Definition UVariant.h:54
+
+

Definition in file UVariant.h.

+
+ + + + diff --git a/preview/pr-1492/api/latest/UVariant_8h__dep__incl.map b/preview/pr-1492/api/latest/UVariant_8h__dep__incl.map new file mode 100644 index 00000000..2d0b0580 --- /dev/null +++ b/preview/pr-1492/api/latest/UVariant_8h__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/UVariant_8h__dep__incl.md5 b/preview/pr-1492/api/latest/UVariant_8h__dep__incl.md5 new file mode 100644 index 00000000..76b53d37 --- /dev/null +++ b/preview/pr-1492/api/latest/UVariant_8h__dep__incl.md5 @@ -0,0 +1 @@ +90af80d92178df8d8c21353824e86972 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UVariant_8h__dep__incl.png b/preview/pr-1492/api/latest/UVariant_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..3b88067461a21cfbf4025aacf60ec18f63a58ee2 GIT binary patch literal 15445 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 + + + + + + + + diff --git a/preview/pr-1492/api/latest/UVariant_8h__incl.md5 b/preview/pr-1492/api/latest/UVariant_8h__incl.md5 new file mode 100644 index 00000000..7f6eb6e9 --- /dev/null +++ b/preview/pr-1492/api/latest/UVariant_8h__incl.md5 @@ -0,0 +1 @@ +50852576dd9a1a6241433eaa176fa167 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UVariant_8h__incl.png b/preview/pr-1492/api/latest/UVariant_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..cd85a22fd72899862a2c1dcfe3bb1d806b8ac1f2 GIT binary patch literal 10406 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 + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UVariant.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UVariant.h
+
+
+Go to the documentation of this file.
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UVARIANT_H
+
21#define UVARIANT_H
+
22
+
23#include "rtabmap/utilite/utilite_export.h" // DLL export/import defines
+
24#include <string>
+
25#include <vector>
+
26
+
+
53class UTILITE_EXPORT UVariant
+
54{
+
55public:
+ +
81public:
+ +
87
+
92 UVariant(const bool & value);
+
93
+
98 UVariant(const signed char & value);
+
99
+
104 UVariant(const unsigned char & value);
+
105
+
110 UVariant(const short & value);
+
111
+
116 UVariant(const unsigned short & value);
+
117
+
122 UVariant(const int & value);
+
123
+
128 UVariant(const unsigned int & value);
+
129
+
134 UVariant(const float & value);
+
135
+
140 UVariant(const double & value);
+
141
+
146 UVariant(const char * value);
+
147
+
152 UVariant(const std::string & value);
+
153
+
158 UVariant(const std::vector<signed char> & value);
+
159
+
164 UVariant(const std::vector<unsigned char> & value);
+
165
+
170 UVariant(const std::vector<short> & value);
+
171
+
176 UVariant(const std::vector<unsigned short> & value);
+
177
+
182 UVariant(const std::vector<int> & value);
+
183
+
188 UVariant(const std::vector<unsigned int> & value);
+
189
+
194 UVariant(const std::vector<float> & value);
+
195
+
200 UVariant(const std::vector<double> & value);
+
201
+
206 Type type() const {return type_;}
+
207
+
212 bool isUndef() const {return type_ == kUndef;}
+
213
+
218 bool isBool() const {return type_ == kBool;}
+
219
+
224 bool isChar() const {return type_ == kChar;}
+
225
+
230 bool isUChar() const {return type_ == kUChar;}
+
231
+
236 bool isShort() const {return type_ == kShort;}
+
237
+
242 bool isUShort() const {return type_ == kUShort;}
+
243
+
248 bool isInt() const {return type_ == kInt;}
+
249
+
254 bool isUInt() const {return type_ == kUInt;}
+
255
+
260 bool isFloat() const {return type_ == kFloat;}
+
261
+
266 bool isDouble() const {return type_ == kDouble;}
+
267
+
272 bool isStr() const {return type_ == kStr;}
+
273
+
278 bool isCharArray() const {return type_ == kCharArray;}
+
279
+
284 bool isUCharArray() const {return type_ == kUCharArray;}
+
285
+
290 bool isShortArray() const {return type_ == kShortArray;}
+
291
+
296 bool isUShortArray() const {return type_ == kUShortArray;}
+
297
+
302 bool isIntArray() const {return type_ == kIntArray;}
+
303
+
308 bool isUIntArray() const {return type_ == kUIntArray;}
+
309
+
314 bool isFloatArray() const {return type_ == kFloatArray;}
+
315
+
320 bool isDoubleArray() const {return type_ == kDoubleArray;}
+
321
+
326 bool toBool() const;
+
327
+
333 signed char toChar(bool * ok = 0) const;
+
334
+
340 unsigned char toUChar(bool * ok = 0) const;
+
341
+
347 short toShort(bool * ok = 0) const;
+
348
+
354 unsigned short toUShort(bool * ok = 0) const;
+
355
+
361 int toInt(bool * ok = 0) const;
+
362
+
368 unsigned int toUInt(bool * ok = 0) const;
+
369
+
375 float toFloat(bool * ok = 0) const;
+
376
+
382 double toDouble(bool * ok = 0) const;
+
383
+
389 std::string toStr(bool * ok = 0) const;
+
390
+
396 std::vector<signed char> toCharArray(bool * ok = 0) const;
+
397
+
403 std::vector<unsigned char> toUCharArray(bool * ok = 0) const;
+
404
+
410 std::vector<short> toShortArray(bool * ok = 0) const;
+
411
+
417 std::vector<unsigned short> toUShortArray(bool * ok = 0) const;
+
418
+
424 std::vector<int> toIntArray(bool * ok = 0) const;
+
425
+
431 std::vector<unsigned int> toUIntArray(bool * ok = 0) const;
+
432
+
438 std::vector<float> toFloatArray(bool * ok = 0) const;
+
439
+
445 std::vector<double> toDoubleArray(bool * ok = 0) const;
+
446
+
450 virtual ~UVariant() {}
+
451
+
452private:
+
453 Type type_;
+
454 std::vector<unsigned char> data_;
+
455};
+
+
456
+
457#endif /* UVARIANT_H */
+
A variant type that can hold values of different types.
Definition UVariant.h:54
+
bool isUShortArray() const
Check if the variant is an array of unsigned short.
Definition UVariant.h:296
+
UVariant(const char *value)
Constructor from C string.
+
UVariant(const std::string &value)
Constructor from std::string.
+
unsigned char toUChar(bool *ok=0) const
Convert the variant to unsigned char.
+
UVariant(const double &value)
Constructor from double.
+
float toFloat(bool *ok=0) const
Convert the variant to float.
+
bool isBool() const
Check if the variant is a bool.
Definition UVariant.h:218
+
UVariant(const std::vector< int > &value)
Constructor from array of int.
+
std::vector< double > toDoubleArray(bool *ok=0) const
Convert the variant to array of double.
+
bool isFloat() const
Check if the variant is a float.
Definition UVariant.h:260
+
UVariant(const unsigned int &value)
Constructor from unsigned int.
+
bool isDouble() const
Check if the variant is a double.
Definition UVariant.h:266
+
Type
Enumeration of supported data types.
Definition UVariant.h:60
+ +
@ kFloatArray
Definition UVariant.h:77
+ +
@ kUIntArray
Definition UVariant.h:76
+
@ kDouble
Definition UVariant.h:69
+
@ kUShortArray
Definition UVariant.h:74
+
@ kShortArray
Definition UVariant.h:73
+ + +
@ kUShort
Definition UVariant.h:65
+
@ kDoubleArray
Definition UVariant.h:78
+
@ kIntArray
Definition UVariant.h:75
+
@ kUCharArray
Definition UVariant.h:72
+ + + + +
@ kCharArray
Definition UVariant.h:71
+
UVariant(const unsigned short &value)
Constructor from unsigned short.
+
std::vector< unsigned short > toUShortArray(bool *ok=0) const
Convert the variant to array of unsigned short.
+
bool isInt() const
Check if the variant is an int.
Definition UVariant.h:248
+
double toDouble(bool *ok=0) const
Convert the variant to double.
+
Type type() const
Get the type of the stored value.
Definition UVariant.h:206
+
UVariant(const short &value)
Constructor from short.
+
unsigned short toUShort(bool *ok=0) const
Convert the variant to unsigned short.
+
bool isShort() const
Check if the variant is a short.
Definition UVariant.h:236
+
bool isChar() const
Check if the variant is a signed char.
Definition UVariant.h:224
+
UVariant(const std::vector< unsigned short > &value)
Constructor from array of unsigned short.
+
bool isUCharArray() const
Check if the variant is an array of unsigned char.
Definition UVariant.h:284
+
UVariant(const unsigned char &value)
Constructor from unsigned char.
+
bool isShortArray() const
Check if the variant is an array of short.
Definition UVariant.h:290
+
std::string toStr(bool *ok=0) const
Convert the variant to string.
+
UVariant(const std::vector< unsigned char > &value)
Constructor from array of unsigned char.
+
UVariant(const std::vector< signed char > &value)
Constructor from array of signed char.
+
UVariant(const std::vector< short > &value)
Constructor from array of short.
+
bool isUShort() const
Check if the variant is an unsigned short.
Definition UVariant.h:242
+
UVariant(const int &value)
Constructor from int.
+
std::vector< int > toIntArray(bool *ok=0) const
Convert the variant to array of int.
+
bool isFloatArray() const
Check if the variant is an array of float.
Definition UVariant.h:314
+
UVariant(const bool &value)
Constructor from bool.
+
bool isIntArray() const
Check if the variant is an array of int.
Definition UVariant.h:302
+
bool isDoubleArray() const
Check if the variant is an array of double.
Definition UVariant.h:320
+
unsigned int toUInt(bool *ok=0) const
Convert the variant to unsigned int.
+
signed char toChar(bool *ok=0) const
Convert the variant to signed char.
+
bool isUndef() const
Check if the variant is undefined.
Definition UVariant.h:212
+
int toInt(bool *ok=0) const
Convert the variant to int.
+
UVariant(const float &value)
Constructor from float.
+
bool isCharArray() const
Check if the variant is an array of signed char.
Definition UVariant.h:278
+
std::vector< unsigned char > toUCharArray(bool *ok=0) const
Convert the variant to array of unsigned char.
+
std::vector< short > toShortArray(bool *ok=0) const
Convert the variant to array of short.
+
UVariant(const std::vector< float > &value)
Constructor from array of float.
+
short toShort(bool *ok=0) const
Convert the variant to short.
+
std::vector< float > toFloatArray(bool *ok=0) const
Convert the variant to array of float.
+
std::vector< unsigned int > toUIntArray(bool *ok=0) const
Convert the variant to array of unsigned int.
+
UVariant(const std::vector< double > &value)
Constructor from array of double.
+
UVariant(const std::vector< unsigned int > &value)
Constructor from array of unsigned int.
+
UVariant(const signed char &value)
Constructor from signed char.
+
std::vector< signed char > toCharArray(bool *ok=0) const
Convert the variant to array of signed char.
+
bool isUInt() const
Check if the variant is an unsigned int.
Definition UVariant.h:254
+
virtual ~UVariant()
Virtual destructor.
Definition UVariant.h:450
+
bool toBool() const
Convert the variant to bool.
+
UVariant()
Default constructor Creates an undefined variant.
+
bool isUIntArray() const
Check if the variant is an array of unsigned int.
Definition UVariant.h:308
+
bool isStr() const
Check if the variant is a string.
Definition UVariant.h:272
+
bool isUChar() const
Check if the variant is an unsigned char.
Definition UVariant.h:230
+
+ + + + diff --git a/preview/pr-1492/api/latest/UWin32_8h_source.html b/preview/pr-1492/api/latest/UWin32_8h_source.html new file mode 100644 index 00000000..882339fe --- /dev/null +++ b/preview/pr-1492/api/latest/UWin32_8h_source.html @@ -0,0 +1,155 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/Win32/UWin32.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UWin32.h
+
+
+
1
+
2// Written by Phillip Sitbon
+
3// Copyright 2003
+
4//
+
5// Win32.h
+
6// - Windows includes
+
7//
+
9#ifndef _U_Win32_
+
10#define _U_Win32_
+
11
+
12 #if !defined(_WINDOWS_)
+
13 // WIN32 Excludes
+
14 #ifdef WIN32_LEAN_AND_MEAN
+
15 # define VC_EXTRALEAN
+
16 # define WIN32_LEAN_AND_MEAN
+
17 # define _PRSHT_H_
+
18 # define NOGDICAPMASKS // CC_*, LC_*, PC_*, CP_*, TC_*, RC_
+
19 # define NOVIRTUALKEYCODES // VK_*
+
20 # define NOWINMESSAGES // WM_*, EM_*, LB_*, CB_*
+
21 # define NOWINSTYLES // WS_*, CS_*, ES_*, LBS_*, SBS_*, CBS_*
+
22 # define NOSYSMETRICS // SM_*
+
23 # define NOMENUS // MF_*
+
24 # define NOICONS // IDI_*
+
25 # define NOKEYSTATES // MK_*
+
26 # define NOSYSCOMMANDS // SC_*
+
27 # define NORASTEROPS // Binary and Tertiary raster ops
+
28 # define NOSHOWWINDOW // SW_*
+
29 # define OEMRESOURCE // OEM Resource values
+
30 # define NOATOM // Atom Manager routines
+
31 # define NOCLIPBOARD // Clipboard routines
+
32 # define NOCOLOR // Screen colors
+
33 # define NOCTLMGR // Control and Dialog routines
+
34 # define NODRAWTEXT // DrawText() and DT_*
+
35 # define NOGDI // All GDI defines and routines
+
36 # define NOKERNEL // All KERNEL defines and routines
+
37 # define NOUSER // All USER defines and routines
+
38 # define NONLS // All NLS defines and routines
+
39 # define NOMB // MB_* and MessageBox()
+
40 # define NOMEMMGR // GMEM_*, LMEM_*, GHND, LHND, associated routines
+
41 # define NOMETAFILE // typedef METAFILEPICT
+
42 # define NOMINMAX // Macros min(a,b) and max(a,b)
+
43 # define NOMSG // typedef MSG and associated routines
+
44 # define NOOPENFILE // OpenFile(), OemToAnsi, AnsiToOem, and OF_*
+
45 # define NOSCROLL // SB_* and scrolling routines
+
46 # define NOSERVICE // All Service Controller routines, SERVICE_ equates, etc.
+
47 # define NOSOUND // Sound driver routines
+
48 # define NOTEXTMETRIC // typedef TEXTMETRIC and associated routines
+
49 # define NOWH // SetWindowsHook and WH_*
+
50 # define NOWINOFFSETS // GWL_*, GCL_*, associated routines
+
51 # define NOCOMM // COMM driver routines
+
52 # define NOKANJI // Kanji support stuff.
+
53 # define NOHELP // Help engine interface.
+
54 # define NOPROFILER // Profiler interface.
+
55 # define NODEFERWINDOWPOS // DeferWindowPos routines
+
56 # define NOMCX // Modem Configuration Extensions
+
57 #endif // WIN32_LEAN_AND_MEAN
+
58 //
+
59 # include <windows.h>
+
60 #endif
+
61
+
62#endif // !_U_Win32_
+
+ + + + diff --git a/preview/pr-1492/api/latest/UserDataEvent_8h_source.html b/preview/pr-1492/api/latest/UserDataEvent_8h_source.html new file mode 100644 index 00000000..7f51bda0 --- /dev/null +++ b/preview/pr-1492/api/latest/UserDataEvent_8h_source.html @@ -0,0 +1,156 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/UserDataEvent.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UserDataEvent.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef USERDATAEVENT_H_
+
29#define USERDATAEVENT_H_
+
30
+
31#include <opencv2/opencv.hpp>
+
32#include <rtabmap/utilite/UEvent.h>
+
33
+
34namespace rtabmap
+
35{
+
36
+
+
40class UserDataEvent : public UEvent
+
41{
+
42public:
+
43 UserDataEvent(const cv::Mat & data) :
+
44 UEvent(0),
+
45 data_(data)
+
46 {}
+ +
48 virtual std::string getClassName() const {return "UserDataEvent";}
+
49
+
50 const cv::Mat & data() const {return data_;}
+
51
+
52private:
+
53 cv::Mat data_;
+
54};
+
+
55
+
56}
+
57
+
58#endif /* USERDATAEVENT_H_ */
+
59
+ + +
virtual std::string getClassName() const
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/UtiLite_8h_source.html b/preview/pr-1492/api/latest/UtiLite_8h_source.html new file mode 100644 index 00000000..ffa6cd75 --- /dev/null +++ b/preview/pr-1492/api/latest/UtiLite_8h_source.html @@ -0,0 +1,139 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UtiLite.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UtiLite.h
+
+
+
1/*
+
2* utilite is a cross-platform library with
+
3* useful utilities for fast and small developing.
+
4* Copyright (C) 2010 Mathieu Labbe
+
5*
+
6* utilite is free library: you can redistribute it and/or modify
+
7* it under the terms of the GNU Lesser General Public License as published by
+
8* the Free Software Foundation, either version 3 of the License, or
+
9* (at your option) any later version.
+
10*
+
11* utilite is distributed in the hope that it will be useful,
+
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
+
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+
14* GNU Lesser General Public License for more details.
+
15*
+
16* You should have received a copy of the GNU Lesser General Public License
+
17* along with this program. If not, see <http://www.gnu.org/licenses/>.
+
18*/
+
19
+
20#ifndef UTILITE_H
+
21#define UTILITE_H
+
22
+
237#include "rtabmap/utilite/UStl.h"
+ +
239#include "rtabmap/utilite/UDirectory.h"
+
240#include "rtabmap/utilite/UFile.h"
+ +
242#include "rtabmap/utilite/UEventsManager.h"
+
243#include "rtabmap/utilite/UEventsHandler.h"
+
244#include "rtabmap/utilite/UEvent.h"
+ +
246#include "rtabmap/utilite/UMutex.h"
+
247#include "rtabmap/utilite/USemaphore.h"
+
248#include "rtabmap/utilite/UThreadNode.h"
+
249#include "rtabmap/utilite/UTimer.h"
+ + +
252
+
253#endif /* UTILITE_H */
+
Some conversion functions.
+
ULogger class and convenient macros.
+
Basic mathematics functions.
+
UProcessInfo class for getting process information.
+
Wrappers of STL for convenient functions.
+
UVariant class for storing and converting between different data types.
+
+ + + + diff --git a/preview/pr-1492/api/latest/VWDictionary_8h_source.html b/preview/pr-1492/api/latest/VWDictionary_8h_source.html new file mode 100644 index 00000000..33c70a0e --- /dev/null +++ b/preview/pr-1492/api/latest/VWDictionary_8h_source.html @@ -0,0 +1,373 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/VWDictionary.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
VWDictionary.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
31
+
32#include <opencv2/highgui/highgui.hpp>
+
33#include <opencv2/core/core.hpp>
+
34#if CV_MAJOR_VERSION < 5
+
35#include <opencv2/features2d/features2d.hpp>
+
36#else
+
37#include <opencv2/features.hpp>
+
38#endif
+
39#include <list>
+
40#include <set>
+
41#include "rtabmap/core/Parameters.h"
+
42
+
43namespace rtabmap
+
44{
+
45
+
46class DBDriver;
+
47class VisualWord;
+
48class FlannIndex;
+
49
+
+
65class RTABMAP_CORE_EXPORT VWDictionary
+
66{
+
67public:
+ +
80
+
84 static const int ID_START;
+
85
+
89 static const int ID_INVALID;
+
90
+
+
96 static std::string nnStrategyName(NNStrategy strategy)
+
97 {
+
98 switch(strategy) {
+
99 case kNNFlannNaive:
+
100 return "FLANN NAIVE";
+
101 case kNNFlannKdTree:
+
102 return "FLANN KD-TREE";
+
103 case kNNFlannLSH:
+
104 return "FLANN LSH";
+
105 case kNNBruteForce:
+
106 return "BRUTE FORCE";
+
107 case kNNBruteForceGPU:
+
108 return "BRUTE FORCE GPU";
+
109 default:
+
110 return "Unknown";
+
111 }
+
112 }
+
+
113
+
114public:
+
119 VWDictionary(const ParametersMap & parameters = ParametersMap());
+
120
+
126 virtual ~VWDictionary();
+
127
+
132 virtual void parseParameters(const ParametersMap & parameters);
+
133
+
140 virtual void update();
+
141
+
156 virtual std::list<int> addNewWords(
+
157 const cv::Mat & descriptors,
+
158 int signatureId);
+
159
+
166 virtual void addWord(VisualWord * vw);
+
167
+
177 std::vector<int> findNN(const std::list<VisualWord *> & vws) const;
+
178
+
188 std::vector<int> findNN(const cv::Mat & descriptors) const;
+
189
+
199 bool addWordRef(int wordId, int signatureId);
+
200
+
209 void removeAllWordRef(int wordId, int signatureId);
+
210
+
216 const VisualWord * getWord(int id) const;
+
217
+
226 VisualWord * getUnusedWord(int id) const;
+
227
+
232 void setLastWordId(int id) {_lastWordId = id;}
+
233
+
238 const std::map<int, VisualWord *> & getVisualWords() const {return _visualWords;}
+
239
+
251 float getNndrRatio() const {return _nndrRatio;}
+
252
+
257 unsigned int getNotIndexedWordsCount() const {return (int)_notIndexedWords.size();}
+
258
+ +
264
+
269 int getTotalActiveReferences() const {return _totalActiveReferences;}
+
270
+
275 unsigned int getIndexedWordsCount() const;
+
276
+
281 unsigned int getIndexMemoryUsed() const; // KB
+
282
+
287 unsigned long getMemoryUsed() const; //Bytes
+
288
+
296 bool setNNStrategy(NNStrategy strategy);
+
297
+
302 NNStrategy getNNStrategy() const {return _strategy;}
+
303
+
308 bool isIncremental() const {return _incrementalDictionary;}
+
309
+
314 bool isIncrementalFlann() const {return _incrementalFlann;}
+
315
+ +
323
+
332 void setFixedDictionary(const std::string & dictionaryPath);
+
333
+
338 bool isModified() const;
+
339
+
344 std::vector<unsigned char> serializeIndex() const;
+
345
+
351 bool deserializeIndex(const std::vector<unsigned char> & data);
+
352
+
359 bool deserializeIndex(const unsigned char * data, size_t size);
+
360
+
368 void exportDictionary(const char * fileNameReferences, const char * fileNameDescriptors) const;
+
369
+
376 void clear(bool printWarningsIfNotEmpty = true);
+
377
+
387 std::vector<VisualWord *> getUnusedWords() const;
+
388
+
393 std::vector<int> getUnusedWordIds() const;
+
394
+
399 unsigned int getUnusedWordsSize() const {return (int)_unusedWords.size();}
+
400
+
407 void removeWords(const std::vector<VisualWord*> & words); // caller must delete the words
+
408
+ +
415
+
416public:
+
428 static cv::Mat convertBinTo32F(const cv::Mat & descriptorsIn, bool byteToFloat = true);
+
429
+
442 static cv::Mat convert32FToBin(const cv::Mat & descriptorsIn, bool byteToFloat = true);
+
443
+
444protected:
+ +
450
+
451protected:
+
456 std::map<int, VisualWord *> _visualWords; //<id,VisualWord*>
+
457
+ +
463
+
464private:
+
468 bool _incrementalDictionary;
+
469
+
473 bool _incrementalFlann;
+
474
+
478 float _rebalancingFactor;
+
479
+
483 bool _byteToFloat;
+
484
+
491 float _nndrRatio;
+
492
+
496 std::string _dictionaryPath; // a pre-computed dictionary (.txt or .db)
+
497
+
501 std::string _newDictionaryPath; // a pre-computed dictionary (.txt or .db)
+
502
+
506 bool _newWordsComparedTogether;
+
507
+
511 bool _serializeWithChecksum;
+
512
+
516 int _lastWordId;
+
517
+
521 bool useDistanceL1_;
+
522
+
526 FlannIndex * _flannIndex;
+
527
+
531 cv::Mat _dataTree;
+
532
+
536 bool _modified;
+
537
+
541 NNStrategy _strategy;
+
542
+
546 std::map<int ,int> _mapIndexId;
+
547
+
551 std::map<int ,int> _mapIdIndex;
+
552
+
557 std::map<int, VisualWord*> _unusedWords; //<id,VisualWord*>
+
561 std::set<int> _notIndexedWords;
+
562
+
566 std::set<int> _removedIndexedWords;
+
567};
+
+
568
+
569} // namespace rtabmap
+ +
Manages a dictionary of visual words for visual place recognition and loop closure detection.
+
int getNextId()
Get the next available visual word ID.
+
bool deserializeIndex(const unsigned char *data, size_t size)
Deserialize the search index from raw bytes.
+
unsigned int getUnusedWordsSize() const
Get the count of unused visual words.
+
void exportDictionary(const char *fileNameReferences, const char *fileNameDescriptors) const
Export the dictionary to files.
+
std::vector< unsigned char > serializeIndex() const
Serialize the search index to a byte vector.
+
unsigned int getNotIndexedWordsCount() const
Get the count of words not yet indexed in the search tree.
+
virtual std::list< int > addNewWords(const cv::Mat &descriptors, int signatureId)
Add new visual words from descriptors.
+
static const int ID_START
Starting ID for visual words (typically 1)
+
void deleteUnusedWords()
Delete all unused visual words.
+
bool deserializeIndex(const std::vector< unsigned char > &data)
Deserialize the search index from a byte vector.
+
float getNndrRatio() const
Get the Nearest Neighbor Distance Ratio (NNDR) threshold.
+
int _totalActiveReferences
Total count of active word-to-signature references.
+
void clear(bool printWarningsIfNotEmpty=true)
Clear all visual words and reset the dictionary.
+
const VisualWord * getWord(int id) const
Get a visual word by ID.
+
void setFixedDictionary(const std::string &dictionaryPath)
Set the dictionary to fixed mode and load from file.
+
unsigned int getIndexMemoryUsed() const
Get the memory used by the search index.
+
std::vector< int > getUnusedWordIds() const
Get IDs of all unused visual words.
+
int getLastIndexedWordId() const
Get the ID of the last indexed word.
+
unsigned int getIndexedWordsCount() const
Get the count of words currently indexed in the search tree.
+
const std::map< int, VisualWord * > & getVisualWords() const
Get all visual words.
+
bool isIncremental() const
Check if the dictionary is in incremental mode.
+
static std::string nnStrategyName(NNStrategy strategy)
Get the name of a nearest neighbor strategy.
+
static cv::Mat convertBinTo32F(const cv::Mat &descriptorsIn, bool byteToFloat=true)
Convert binary descriptors to 32-bit float format.
+
void removeWords(const std::vector< VisualWord * > &words)
Remove words from the dictionary.
+
static const int ID_INVALID
Invalid visual word ID (typically 0)
+
virtual void update()
Update the search index with newly added words.
+
virtual void parseParameters(const ParametersMap &parameters)
Parse and apply parameters from a parameters map.
+
NNStrategy
Nearest neighbor search strategies for descriptor matching.
+
@ kNNBruteForce
Brute force CPU search.
+
@ kNNBruteForceGPU
Brute force GPU-accelerated search (requires CUDA)
+
@ kNNFlannLSH
FLANN Locality-Sensitive Hashing (ideal for binary descriptors)
+
@ kNNFlannKdTree
FLANN kd-tree index (fast for high-dimensional descriptors)
+
@ kNNFlannNaive
FLANN naive search (exhaustive)
+
int getTotalActiveReferences() const
Get the total number of active word-to-signature references.
+
bool isIncrementalFlann() const
Check if FLANN index is updated incrementally.
+
bool isModified() const
Check if the dictionary has been modified since last save.
+
std::vector< int > findNN(const cv::Mat &descriptors) const
Find nearest neighbor visual word IDs for descriptors.
+
void setIncrementalDictionary()
Set the dictionary to incremental mode.
+
NNStrategy getNNStrategy() const
Get the current nearest neighbor search strategy.
+
std::vector< VisualWord * > getUnusedWords() const
Get all unused visual words.
+
VisualWord * getUnusedWord(int id) const
Get an unused visual word by ID.
+
std::vector< int > findNN(const std::list< VisualWord * > &vws) const
Find nearest neighbor visual word IDs for a list of visual words.
+
void removeAllWordRef(int wordId, int signatureId)
Remove all references from a visual word to a signature.
+
unsigned long getMemoryUsed() const
Get the total memory used by the dictionary.
+
static cv::Mat convert32FToBin(const cv::Mat &descriptorsIn, bool byteToFloat=true)
Convert 32-bit float descriptors to binary format.
+
virtual void addWord(VisualWord *vw)
Add an existing visual word to the dictionary.
+
VWDictionary(const ParametersMap &parameters=ParametersMap())
Constructor.
+
std::map< int, VisualWord * > _visualWords
Map of visual word ID to VisualWord pointer.
+
bool addWordRef(int wordId, int signatureId)
Add a reference from a visual word to a signature.
+
void setLastWordId(int id)
Set the last word ID (used when loading from database)
+
bool setNNStrategy(NNStrategy strategy)
Set the nearest neighbor search strategy.
+
virtual ~VWDictionary()
Destructor.
+
Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.
Definition VisualWord.h:50
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Version_8h_source.html b/preview/pr-1492/api/latest/Version_8h_source.html new file mode 100644 index 00000000..117dd65a --- /dev/null +++ b/preview/pr-1492/api/latest/Version_8h_source.html @@ -0,0 +1,206 @@ + + + + + + + + +RTAB-Map: build-docs/corelib/src/include/rtabmap/core/Version.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Version.h
+
+
+
1/*
+
2Copyright (c) 2010-2014, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL UNIVERTY DE SHERBROOKE BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef VERSION_H_
+
29#define VERSION_H_
+
30
+
31// This is auto-generated!
+
32#define RTABMAP_VERSION "0.23.10"
+
33
+
34#define RTABMAP_VERSION_MAJOR 0
+
35#define RTABMAP_VERSION_MINOR 23
+
36#define RTABMAP_VERSION_PATCH 10
+
37
+
38#define RTABMAP_VERSION_COMPARE(OP, MAJOR, MINOR, PATCH) (RTABMAP_VERSION_MAJOR*10000+RTABMAP_VERSION_MINOR*100+RTABMAP_VERSION_PATCH OP MAJOR*10000+MINOR*100+PATCH)
+
39
+
40//#define RTABMAP_NONFREE
+
41#define RTABMAP_TORO
+
42//#define RTABMAP_G2O
+
43//#define RTABMAP_G2O_CPP11
+
44#define RTABMAP_G2O_WITH_SBA_UTILS
+
45//#define RTABMAP_GTSAM
+
46//#define RTABMAP_CERES
+
47//#define RTABMAP_MRPT
+
48//#define RTABMAP_VERTIGO
+
49//#define RTABMAP_OPENNI
+
50#define RTABMAP_OPENNI2
+
51//#define RTABMAP_FREENECT
+
52//#define RTABMAP_FREENECT2
+
53//#define RTABMAP_K4W2
+
54//#define RTABMAP_K4A
+
55//#define RTABMAP_CVSBA
+
56//#define RTABMAP_POINTMATCHER
+
57//#define RTABMAP_CCCORELIB
+
58//#define RTABMAP_OPEN3D
+
59//#define RTABMAP_FASTCV
+
60//#define RTABMAP_OPENGV
+
61//#define RTABMAP_PDAL
+
62//#define RTABMAP_LIBLAS
+
63//#define RTABMAP_CUDASIFT
+
64//#define RTABMAP_LOAM
+
65//#define RTABMAP_FLOAM
+
66//#define RTABMAP_LIOSAM
+
67#define RTABMAP_DC1394
+
68//#define RTABMAP_FLYCAPTURE2
+
69//#define RTABMAP_ZED
+
70//#define RTABMAP_ZEDOC
+
71//#define RTABMAP_REALSENSE
+
72//#define RTABMAP_REALSENSE_SLAM
+
73//#define RTABMAP_REALSENSE2
+
74//#define RTABMAP_MYNTEYE
+
75//#define RTABMAP_DEPTHAI
+
76//#define RTABMAP_XVSDK
+
77//#define RTABMAP_ORBBEC_SDK
+
78//#define RTABMAP_OCTOMAP
+
79//#define RTABMAP_GRIDMAP
+
80//#define RTABMAP_CPUTSDF
+
81//#define RTABMAP_ALICE_VISION
+
82//#define RTABMAP_OPENCHISEL
+
83//#define RTABMAP_FOVIS
+
84//#define RTABMAP_VISO2
+
85//#define RTABMAP_DVO
+
86//#define RTABMAP_OKVIS
+
87//#define RTABMAP_MSCKF_VIO
+
88//#define RTABMAP_VINS_FUSION
+
89//#define RTABMAP_OPENVINS
+
90//#define RTABMAP_CUVSLAM
+
91//#define RTABMAP_ORB_SLAM
+
92#define RTABMAP_ORB_OCTREE
+
93//#define RTABMAP_TORCH
+
94//#define RTABMAP_PYTHON
+
95#define RTABMAP_MADGWICK
+
96//#define RTABMAP_APRILTAG
+
97//#define RTABMAP_APRILTAG_WITH_ARUCO
+
98
+
99#include <pcl/pcl_config.h>
+
100
+
101#if PCL_VERSION_COMPARE(>, 1, 11, 1)
+
102#include <pcl/types.h>
+
103#define RTABMAP_PCL_INDEX pcl::index_t
+
104#elif PCL_VERSION_COMPARE(>=, 1, 10, 0)
+
105#define RTABMAP_PCL_INDEX std::uint32_t
+
106#else
+
107#include <pcl/pcl_macros.h>
+
108#define RTABMAP_PCL_INDEX pcl::uint32_t
+
109#endif
+
110
+
111#endif /* VERSION_H_ */
+
112
+
+ + + + diff --git a/preview/pr-1492/api/latest/VisualWord_8h_source.html b/preview/pr-1492/api/latest/VisualWord_8h_source.html new file mode 100644 index 00000000..a008e866 --- /dev/null +++ b/preview/pr-1492/api/latest/VisualWord_8h_source.html @@ -0,0 +1,181 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/VisualWord.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
VisualWord.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#pragma once
+
29
+
30#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
31
+
32#include <opencv2/core/core.hpp>
+
33#include <map>
+
34
+
35namespace rtabmap
+
36{
+
37
+
+
49class RTABMAP_CORE_EXPORT VisualWord
+
50{
+
51public:
+
58 VisualWord(int id, const cv::Mat & descriptor, int signatureId = 0);
+
59
+ +
64
+
69 void addRef(int signatureId);
+
70
+
76 int removeAllRef(int signatureId);
+
77
+
82 unsigned long getMemoryUsed() const;
+
83
+
88 int getTotalReferences() const {return _totalReferences;}
+
89
+
94 int id() const {return _id;}
+
95
+
100 const cv::Mat & getDescriptor() const {return _descriptor;}
+
101
+
106 const std::map<int, int> & getReferences() const {return _references;}
+
107
+
112 bool isSaved() const {return _saved;}
+
113
+
118 void setSaved(bool saved) {_saved = saved;}
+
119
+
120private:
+
121 int _id;
+
122 cv::Mat _descriptor;
+
123 bool _saved;
+
124
+
125 int _totalReferences;
+
126 std::map<int, int> _references;
+
127};
+
+
128
+
129} // namespace rtabmap
+
Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.
Definition VisualWord.h:50
+
const cv::Mat & getDescriptor() const
Returns the feature descriptor of this word.
Definition VisualWord.h:100
+
int getTotalReferences() const
Returns the total number of references (across all signatures).
Definition VisualWord.h:88
+
bool isSaved() const
Checks if the word has been saved to the database.
Definition VisualWord.h:112
+
void addRef(int signatureId)
Adds a reference to this word for the given signature ID.
+
void setSaved(bool saved)
Sets the saved flag for the word.
Definition VisualWord.h:118
+
int removeAllRef(int signatureId)
Removes all references to this word for the given signature ID.
+
VisualWord(int id, const cv::Mat &descriptor, int signatureId=0)
Constructor.
+
int id() const
Returns the ID of this visual word.
Definition VisualWord.h:94
+
unsigned long getMemoryUsed() const
Estimates the memory used by this visual word in bytes.
+
~VisualWord()
Destructor.
+
const std::map< int, int > & getReferences() const
Returns the references of this word.
Definition VisualWord.h:106
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/Win32_2UThreadC_8h_source.html b/preview/pr-1492/api/latest/Win32_2UThreadC_8h_source.html new file mode 100644 index 00000000..18e8402c --- /dev/null +++ b/preview/pr-1492/api/latest/Win32_2UThreadC_8h_source.html @@ -0,0 +1,480 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/Win32/UThreadC.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
UThreadC.h
+
+
+
1
+
2// Written by Phillip Sitbon
+
3// Copyright 2003
+
4//
+
5// Modified by Mathieu Labbe
+
6//
+
7// Win32/Thread.h
+
8// - Windows thread
+
9//
+
10// - From CreateThread Platform SDK Documentation:
+
11//
+
12// "A thread that uses functions from the static C run-time
+
13// libraries should use the beginthread and endthread C run-time
+
14// functions for thread management rather than CreateThread and
+
15// ExitThread. Failure to do so results in small memory leaks
+
16// when ExitThread is called. Note that this is not a problem
+
17// with the C run-time in a DLL."
+
18//
+
19// With regards to this, I have decided to use the CreateThread
+
20// API, unless you define _CRT_ in which case there are two
+
21// possibilities:
+
22//
+
23// 1. Define _USE_BEGINTHREAD: Uses _beginthread/_endthread
+
24// (said to be *unreliable* in the SDK docs)
+
25//
+
26// 2. Don't - Uses _beginthreaded/_endthreadex
+
27//
+
28// A note about _endthread:
+
29//
+
30// It will call CloseHandle() on exit, and if it was already
+
31// closed then you will get an exception. To prevent this, I
+
32// removed the CloseHandle() functionality - this means that
+
33// a Join() WILL wait on a Detach()'ed thread.
+
34//
+
36#ifndef _U_Thread_Win32_
+
37#define _U_Thread_Win32_
+
38
+
39#include "rtabmap/utilite/utilite_export.h"
+
40#include "rtabmap/utilite/Win32/UWin32.h"
+
41#include "rtabmap/utilite/USemaphore.h"
+
42#include "rtabmap/utilite/UMutex.h"
+
43
+
44inline void uSleep(unsigned int ms)
+
45{
+
46 Sleep(ms);
+
47}
+
48
+
49#ifdef _CRT_
+
50# include <process.h>
+
51# ifdef _USE_BEGINTHREAD
+
52# define THREAD_CALL __cdecl
+
53# define THREAD_HANDLE uintptr_t
+
54# define THREAD_RET_T void
+
55# define CREATE_THREAD_FAILED (-1L)
+
56# define CREATE_THREAD_ERROR (errno)
+
57# define CREATE_THREAD(_S,_F,_P) ((Handle)_beginthread((void (__cdecl *)(void *))_F,_S,(void *)_P))
+
58# define EXIT_THREAD _endthread()
+
59# define CLOSE_HANDLE(x) 1
+
60# define THREAD_RETURN(x) return
+
61# else
+
62# define THREAD_CALL WINAPI
+
63# define THREAD_HANDLE HANDLE
+
64# define THREAD_RET_T UINT
+
65# define CREATE_THREAD_FAILED (0L)
+
66# define CREATE_THREAD_ERROR (errno)
+
67# define CREATE_THREAD(_S,_F,_P) ((Handle)_beginthreadex(0,_S,(UINT (WINAPI *)(void *))_F,(void *)_P,0,0))
+
68# define EXIT_THREAD _endthreadex(0)
+
69# define CLOSE_HANDLE(x) CloseHandle(x)
+
70# define THREAD_RETURN(x) return(x)
+
71# endif
+
72#else
+
73# define THREAD_CALL WINAPI
+
74# define THREAD_HANDLE HANDLE
+
75# define THREAD_RET_T DWORD
+
76# define CREATE_THREAD_FAILED (0L)
+
77# define CREATE_THREAD_ERROR GetLastError()
+
78# define CREATE_THREAD(_S,_F,_P) ((Handle)CreateThread(0,_S,(DWORD (WINAPI *)(void *))_F,(void *)_P,0,0))
+
79# define CREATE_THREAD2(_S,_F,_P,_ID) ((Handle)CreateThread(0,_S,(DWORD (WINAPI *)(void *))_F,(void *)_P,0,_ID))
+
80# define EXIT_THREAD ExitThread(0)
+
81# define CLOSE_HANDLE(x) CloseHandle(x)
+
82# define THREAD_RETURN(x) return(x)
+
83#endif
+
84
+
85#define InvalidHandle 0
+
86
+
87template
+
88<
+
89 typename Thread_T
+
90>
+
91class UTILITE_EXPORT UThreadC
+
92{
+
93 private:
+
94 struct Instance;
+
95
+
96 public:
+
97 typedef Thread_T & Thread_R;
+
98 typedef const Thread_T & Thread_C_R;
+
99
+
100 typedef THREAD_HANDLE Handle;
+
101 typedef void (* Handler)( Thread_R );
+
102
+
103 protected:
+
104 UThreadC() {}
+
105
+
106 virtual void ThreadMain( Thread_R ) = 0;
+
107
+
108 static void Exit()
+
109 { EXIT_THREAD; }
+
110
+
111 static void TestCancel()
+
112 { Sleep(0); }
+
113
+
114 static int Self()
+
115 {
+
116 Handle Hnd = InvalidHandle;
+
117 DuplicateHandle(GetCurrentProcess(),GetCurrentThread(),GetCurrentProcess(),(LPHANDLE)&Hnd,NULL,0,NULL);
+
118 return Hnd;
+
119
+
120 // only a pseudo-handle!
+
121 //return (Handle)GetCurrentThread();
+
122 }
+
123
+
124 public:
+
125
+
126 static int Create(
+
127 const Handler & Function,
+
128 Thread_C_R Param,
+
129 Handle * const & H = 0,
+
130 const bool & CreateDetached = false,
+
131 const unsigned int & StackSize = 0,
+
132 const bool & CancelEnable = false, // UNUSED
+
133 const bool & CancelAsync = false // UNUSED
+
134 )
+
135 {
+
136 M_Create().lock();
+
137
+
138 Instance I(Param,0,Function);
+
139
+
140 Handle Hnd(CREATE_THREAD(StackSize,ThreadMainHandler,&I));
+
141
+
142 if ( Hnd == CREATE_THREAD_FAILED )
+
143 {
+
144 if ( H ) *H = InvalidHandle;
+
145 M_Create().unlock();
+
146 return CREATE_THREAD_ERROR;
+
147 }
+
148
+
149 if ( H ) *H = Hnd;
+
150
+
151 S_Create().Wait();
+
152 M_Create().unlock();
+
153
+
154 if ( CreateDetached ) CLOSE_HANDLE(Hnd);
+
155 return 0;
+
156 }
+
157
+
158 int Create(
+
159 Thread_C_R Param,
+
160 Handle * const & H = 0,
+
161 const bool & CreateDetached = false,
+
162 const unsigned int & StackSize = 0,
+
163 const bool & CancelEnable = false, // UNUSED
+
164 const bool & CancelAsync = false // UNUSED
+
165 ) const
+
166 {
+
167 M_Create().lock();
+
168
+
169 Instance I(Param,const_cast<UThreadC *>(this));
+
170
+
171 Handle Hnd(CREATE_THREAD(StackSize,ThreadMainHandler,&I));
+
172
+
173 if ( Hnd == CREATE_THREAD_FAILED )
+
174 {
+
175 if ( H ) *H = InvalidHandle;
+
176 M_Create().unlock();
+
177 return CREATE_THREAD_ERROR;
+
178 }
+
179
+
180 if ( H ) *H = Hnd;
+
181
+
182 S_Create().Wait();
+
183 M_Create().unlock();
+
184
+
185 if ( CreateDetached ) CLOSE_HANDLE(Hnd);
+
186 return 0;
+
187 }
+
188
+
189 static int Join( const Handle &H )
+
190 {
+
191 DWORD R = WaitForSingleObject((HANDLE)H,INFINITE);
+
192
+
193 if ( (R == WAIT_OBJECT_0) || (R == WAIT_ABANDONED) )
+
194 {
+
195 CLOSE_HANDLE(H);
+
196 return 0;
+
197 }
+
198
+
199 if ( R == WAIT_TIMEOUT ) return EAGAIN;
+
200 return EINVAL;
+
201 }
+
202
+
203 static int Kill( const Handle &H )
+
204 { return TerminateThread((HANDLE)H,0) ? 0 : EINVAL; }
+
205
+
206 static int Detach( const Handle &H )
+
207 { return (CLOSE_HANDLE(H)?0:EINVAL); }
+
208
+
209 private:
+
210
+
211 static const UMutex &M_Create() { static UMutex M; return M; }
+
212 static const USemaphore &S_Create() { static USemaphore S; return S; }
+
213
+
214 static THREAD_RET_T THREAD_CALL ThreadMainHandler( Instance *Param )
+
215 {
+
216 Instance I(*Param);
+
217 Thread_T Data(I.Data);
+
218 S_Create().Post();
+
219
+
220 if ( I.Owner )
+
221 I.Owner->ThreadMain(Data);
+
222 else
+
223 I.pFN(Data);
+
224
+
225 Exit();
+
226 THREAD_RETURN(0);
+
227 }
+
228
+
229 struct Instance
+
230 {
+
231 Instance( Thread_C_R P, UThreadC<Thread_T> *const &O, const typename UThreadC<Thread_T>::Handler &pH = 0 )
+
232 : pFN(pH), Data(P), Owner(O) {}
+
233
+
234 typename UThreadC<Thread_T>::Handler pFN;
+
235 typename UThreadC<Thread_T>::Thread_C_R Data;
+
236 UThreadC<Thread_T> * Owner;
+
237
+
238 };
+
239};
+
240
+
242// Explicit Specialization of void
+
243//
+
244template<>
+
245class UTILITE_EXPORT UThreadC<void>
+
246{
+
247 private:
+
248 struct Instance;
+
249
+
250 public:
+
251 typedef THREAD_HANDLE Handle;
+
252 typedef void ( *Handler)();
+
253
+
254 virtual ~UThreadC<void>() {}
+
255
+
256 protected:
+
257 UThreadC<void>() {}
+
258
+
259 virtual void ThreadMain() = 0;
+
260
+
261 static void Exit()
+
262 { EXIT_THREAD; }
+
263
+
264 static void TestCancel()
+
265 { Sleep(0); }
+
266
+
267 static int Self()
+
268 {
+
269 return (int)GetCurrentThreadId();
+
270 //Handle Hnd = InvalidHandle;
+
271 //DuplicateHandle(GetCurrentProcess(),GetCurrentThread(),GetCurrentProcess(),(LPHANDLE)&Hnd,NULL,0,NULL);
+
272 //return Hnd;
+
273
+
274 // only a pseudo-handle!
+
275 //return (Handle)GetCurrentThread();
+
276 }
+
277
+
278 public:
+
279
+
280 static int Create(
+
281 const Handler & Function,
+
282 Handle * const & H = 0,
+
283 const bool & CreateDetached = false,
+
284 const unsigned int & StackSize = 0,
+
285 const bool & CancelEnable = false, // UNUSED
+
286 const bool & CancelAsync = false // UNUSED
+
287 )
+
288 {
+
289 Handle Hnd(CREATE_THREAD(StackSize,ThreadMainHandler_S,Function));
+
290
+
291 if ( Hnd == CREATE_THREAD_FAILED )
+
292 {
+
293 if ( H ) *H = InvalidHandle;
+
294 return (int)CREATE_THREAD_ERROR;
+
295 }
+
296
+
297 if ( H ) *H = Hnd;
+
298 if ( CreateDetached ) CLOSE_HANDLE(Hnd);
+
299 return 0;
+
300 }
+
301
+
302 int Create(
+
303 Handle * const & H = 0,
+
304 const bool & CreateDetached = false,
+
305 const unsigned int & StackSize = 0,
+
306 const bool & CancelEnable = false, // UNUSED
+
307 const bool & CancelAsync = false // UNUSED
+
308 ) const
+
309 {
+
310 Handle Hnd(CREATE_THREAD(StackSize,ThreadMainHandler,this));
+
311
+
312 if ( Hnd == CREATE_THREAD_FAILED )
+
313 {
+
314 if ( H ) *H = InvalidHandle;
+
315 return (int)CREATE_THREAD_ERROR;
+
316 }
+
317
+
318 if ( H ) *H = Hnd;
+
319 if ( CreateDetached ) CLOSE_HANDLE(Hnd);
+
320 Self();
+
321 return 0;
+
322 }
+
323
+
324 int Create(
+
325 unsigned long & ThreadId,
+
326 Handle * const & H = 0,
+
327 const bool & CreateDetached = false,
+
328 const unsigned int & StackSize = 0,
+
329 const bool & CancelEnable = false, // UNUSED
+
330 const bool & CancelAsync = false // UNUSED
+
331 ) const
+
332 {
+
333 *H = InvalidHandle;
+
334 int id;
+
335 *H = CREATE_THREAD2(StackSize,ThreadMainHandler,this, (LPDWORD)&id);
+
336 ThreadId = (unsigned long)id;
+
337
+
338 if ( *H == CREATE_THREAD_FAILED )
+
339 {
+
340 *H = InvalidHandle;
+
341 return (int)CREATE_THREAD_ERROR;
+
342 }
+
343
+
344 if ( CreateDetached ) CLOSE_HANDLE(*H);
+
345 return 0;
+
346 }
+
347
+
348 static int Join( const Handle &H )
+
349 {
+
350 DWORD R = WaitForSingleObject((HANDLE)H,INFINITE);
+
351
+
352 if ( (R == WAIT_OBJECT_0) || (R == WAIT_ABANDONED) )
+
353 {
+
354 CLOSE_HANDLE(H);
+
355 return 0;
+
356 }
+
357
+
358 if ( R == WAIT_TIMEOUT ) return EAGAIN;
+
359 return EINVAL;
+
360 }
+
361
+
362 static int Kill( const Handle &H )
+
363 { return TerminateThread((HANDLE)H,0) ? 0 : EINVAL; }
+
364
+
365 static int Detach( const Handle &H )
+
366 { return (CLOSE_HANDLE(H)?0:EINVAL); }
+
367
+
368 private:
+
369
+
370 static THREAD_RET_T THREAD_CALL ThreadMainHandler( UThreadC<void> *Param )
+
371 {
+
372 Param->ThreadMain();
+
373 Exit();
+
374 THREAD_RETURN(0);
+
375 }
+
376
+
377 static THREAD_RET_T THREAD_CALL ThreadMainHandler_S( Handler Param )
+
378 {
+
379 Param();
+
380 Exit();
+
381 THREAD_RETURN(0);
+
382 }
+
383};
+
384
+
385#endif // !_U_Thread_Win32_
+ + + +
+ + + + diff --git a/preview/pr-1492/api/latest/_2home_2runner_2work_2rtabmap_2rtabmap_2corelib_2include_2rtabmap_2core_2util3d_correspondences_8h-example.html b/preview/pr-1492/api/latest/_2home_2runner_2work_2rtabmap_2rtabmap_2corelib_2include_2rtabmap_2core_2util3d_correspondences_8h-example.html new file mode 100644 index 00000000..eab48813 --- /dev/null +++ b/preview/pr-1492/api/latest/_2home_2runner_2work_2rtabmap_2rtabmap_2corelib_2include_2rtabmap_2core_2util3d_correspondences_8h-example.html @@ -0,0 +1,212 @@ + + + + + + + + +RTAB-Map: /home/runner/work/rtabmap/rtabmap/corelib/include/rtabmap/core/util3d_correspondences.h + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
/home/runner/work/rtabmap/rtabmap/corelib/include/rtabmap/core/util3d_correspondences.h
+
+
+

Finds 2D point correspondences between two sets of keypoints based on matching word IDs.

+

Finds 2D point correspondences between two sets of keypoints based on matching word IDs.This function compares two multimap structures containing word IDs associated with cv::KeyPoints. It extracts correspondences where the same word ID appears exactly once in each set.

+
Parameters
+ + + + +
[in]wordsAA multimap from word ID to keypoints in set A.
[in]wordsBA multimap from word ID to keypoints in set B.
[out]pairsA list of matching 2D point correspondences (Point2f) between wordsA and wordsB.
+
+
+
Note
Only unique word ID matches (count == 1 in both sets) are considered valid correspondences.
+

If wordsA = [1 2 3 4 6 6] and wordsB = [1 1 2 4 5 6 6], the output pairs will contain correspondences for IDs 2 and 4, because only those have exactly one match in both sets.

+
/*
+
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
All rights reserved.
+
+
Redistribution and use in source and binary forms, with or without
+
modification, are permitted provided that the following conditions are met:
+
* Redistributions of source code must retain the above copyright
+
notice, this list of conditions and the following disclaimer.
+
* Redistributions in binary form must reproduce the above copyright
+
notice, this list of conditions and the following disclaimer in the
+
documentation and/or other materials provided with the distribution.
+
* Neither the name of the Universite de Sherbrooke nor the
+
names of its contributors may be used to endorse or promote products
+
derived from this software without specific prior written permission.
+
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
*/
+
+
#ifndef UTIL3D_CORRESPONDENCES_H_
+
#define UTIL3D_CORRESPONDENCES_H_
+
+
#include <rtabmap/core/rtabmap_core_export.h>
+
+
#include <pcl/point_cloud.h>
+
#include <pcl/point_types.h>
+
#include <opencv2/core/version.hpp>
+
#if CV_MAJOR_VERSION < 5
+
#include <opencv2/features2d/features2d.hpp>
+
#else
+
#include <opencv2/features.hpp>
+
#endif
+
#include <set>
+
#include <map>
+
#include <list>
+
+
namespace rtabmap
+
{
+
+
namespace util3d
+
{
+
+
void RTABMAP_CORE_EXPORT extractXYZCorrespondences(const std::multimap<int, pcl::PointXYZ> & words1,
+
const std::multimap<int, pcl::PointXYZ> & words2,
+
pcl::PointCloud<pcl::PointXYZ> & cloud1,
+
pcl::PointCloud<pcl::PointXYZ> & cloud2);
+
+
void RTABMAP_CORE_EXPORT extractXYZCorrespondencesRANSAC(const std::multimap<int, pcl::PointXYZ> & words1,
+
const std::multimap<int, pcl::PointXYZ> & words2,
+
pcl::PointCloud<pcl::PointXYZ> & cloud1,
+
pcl::PointCloud<pcl::PointXYZ> & cloud2);
+
+
void RTABMAP_CORE_EXPORT extractXYZCorrespondences(const std::list<std::pair<cv::Point2f, cv::Point2f> > & correspondences,
+
const cv::Mat & depthImage1,
+
const cv::Mat & depthImage2,
+
float cx, float cy,
+
float fx, float fy,
+
float maxDepth,
+
pcl::PointCloud<pcl::PointXYZ> & cloud1,
+
pcl::PointCloud<pcl::PointXYZ> & cloud2);
+
+
void RTABMAP_CORE_EXPORT extractXYZCorrespondences(const std::list<std::pair<cv::Point2f, cv::Point2f> > & correspondences,
+
const pcl::PointCloud<pcl::PointXYZ> & cloud1,
+
const pcl::PointCloud<pcl::PointXYZ> & cloud2,
+
pcl::PointCloud<pcl::PointXYZ> & inliers1,
+
pcl::PointCloud<pcl::PointXYZ> & inliers2);
+
void RTABMAP_CORE_EXPORT extractXYZCorrespondences(const std::list<std::pair<cv::Point2f, cv::Point2f> > & correspondences,
+
const pcl::PointCloud<pcl::PointXYZRGB> & cloud1,
+
const pcl::PointCloud<pcl::PointXYZRGB> & cloud2,
+
pcl::PointCloud<pcl::PointXYZ> & inliers1,
+
pcl::PointCloud<pcl::PointXYZ> & inliers2);
+
+
int RTABMAP_CORE_EXPORT countUniquePairs(const std::multimap<int, pcl::PointXYZ> & wordsA,
+
const std::multimap<int, pcl::PointXYZ> & wordsB);
+
+
void RTABMAP_CORE_EXPORT filterMaxDepth(pcl::PointCloud<pcl::PointXYZ> & inliers1,
+
pcl::PointCloud<pcl::PointXYZ> & inliers2,
+
float maxDepth,
+
char depthAxis,
+
bool removeDuplicates);
+
+
void RTABMAP_CORE_EXPORT findCorrespondences(
+
const std::multimap<int, cv::KeyPoint> & wordsA,
+
const std::multimap<int, cv::KeyPoint> & wordsB,
+
std::list<std::pair<cv::Point2f, cv::Point2f> > & pairs);
+
+
void RTABMAP_CORE_EXPORT findCorrespondences(
+
const std::multimap<int, cv::Point3f> & words1,
+
const std::multimap<int, cv::Point3f> & words2,
+
std::vector<cv::Point3f> & inliers1,
+
std::vector<cv::Point3f> & inliers2,
+
float maxDepth,
+
std::vector<int> * uniqueCorrespondences = 0);
+
+
void RTABMAP_CORE_EXPORT findCorrespondences(
+
const std::map<int, cv::Point3f> & words1,
+
const std::map<int, cv::Point3f> & words2,
+
std::vector<cv::Point3f> & inliers1,
+
std::vector<cv::Point3f> & inliers2,
+
float maxDepth,
+
std::vector<int> * correspondences = 0);
+
+
} // namespace util3d
+
} // namespace rtabmap
+
+
#endif /* UTIL3D_CORRESPONDENCES_H_ */
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/_formulas.tex b/preview/pr-1492/api/latest/_formulas.tex new file mode 100644 index 00000000..58482652 --- /dev/null +++ b/preview/pr-1492/api/latest/_formulas.tex @@ -0,0 +1,59 @@ +\documentclass{article} +\usepackage{ifthen} +\usepackage{epsfig} +\usepackage[utf8]{inputenc} +\usepackage{xcolor} +\usepackage{newunicodechar} + \makeatletter + \def\doxynewunicodechar#1#2{% + \@tempswafalse + \edef\nuc@tempa{\detokenize{#1}}% + \if\relax\nuc@tempa\relax + \nuc@emptyargerr + \else + \edef\@tempb{\expandafter\@car\nuc@tempa\@nil}% + \nuc@check + \if@tempswa + \@namedef{u8:\nuc@tempa}{#2}% + \fi + \fi + } + \makeatother + \doxynewunicodechar{⁻}{${}^{-}$}% Superscript minus + \doxynewunicodechar{²}{${}^{2}$}% Superscript two + \doxynewunicodechar{³}{${}^{3}$}% Superscript three + +\pagestyle{empty} +\begin{document} +\[ +\text{FoV}_x = 2 \cdot \tan^{-1}\left(\frac{\text{image width}}{2 \cdot f_x}\right) +\] +\pagebreak + +\[ +\text{FoV}_y = 2 \cdot \tan^{-1}\left(\frac{\text{image height}}{2 \cdot f_y}\right) +\] +\pagebreak + +\[ + \text{depth} = \frac{\text{baseline} \times f_x}{\text{disparity} + (c_{x_{right}} - c_{x_{left}})} +\] +\pagebreak + +\[ + \text{disparity} = \frac{\text{baseline} \times f_x}{\text{depth}} - (c_{x_{right}} - c_{x_{left}}) +\] +\pagebreak + +\[ + \text{disparity} = \frac{\text{baseline} \times f_x}{\text{depth (meters)}} - (c_{x_{right}} - c_{x_{left}}) +\] +\pagebreak + +\[ \text{depth} = \frac{\text{baseline} \times \text{focal length}}{\text{disparity}} \] +\pagebreak + +\[ Z = \frac{baseline \times f}{disparity + (cx1 - cx0)} \] +\pagebreak + +\end{document} diff --git a/preview/pr-1492/api/latest/_formulas_dark.tex b/preview/pr-1492/api/latest/_formulas_dark.tex new file mode 100644 index 00000000..83ee7458 --- /dev/null +++ b/preview/pr-1492/api/latest/_formulas_dark.tex @@ -0,0 +1,61 @@ +\documentclass{article} +\usepackage{ifthen} +\usepackage{epsfig} +\usepackage[utf8]{inputenc} +\usepackage{xcolor} +\color{white} +\pagecolor{black} +\usepackage{newunicodechar} + \makeatletter + \def\doxynewunicodechar#1#2{% + \@tempswafalse + \edef\nuc@tempa{\detokenize{#1}}% + \if\relax\nuc@tempa\relax + \nuc@emptyargerr + \else + \edef\@tempb{\expandafter\@car\nuc@tempa\@nil}% + \nuc@check + \if@tempswa + \@namedef{u8:\nuc@tempa}{#2}% + \fi + \fi + } + \makeatother + \doxynewunicodechar{⁻}{${}^{-}$}% Superscript minus + \doxynewunicodechar{²}{${}^{2}$}% Superscript two + \doxynewunicodechar{³}{${}^{3}$}% Superscript three + +\pagestyle{empty} +\begin{document} +\[ +\text{FoV}_x = 2 \cdot \tan^{-1}\left(\frac{\text{image width}}{2 \cdot f_x}\right) +\] +\pagebreak + +\[ +\text{FoV}_y = 2 \cdot \tan^{-1}\left(\frac{\text{image height}}{2 \cdot f_y}\right) +\] +\pagebreak + +\[ + \text{depth} = \frac{\text{baseline} \times f_x}{\text{disparity} + (c_{x_{right}} - c_{x_{left}})} +\] +\pagebreak + +\[ + \text{disparity} = \frac{\text{baseline} \times f_x}{\text{depth}} - (c_{x_{right}} - c_{x_{left}}) +\] +\pagebreak + +\[ + \text{disparity} = \frac{\text{baseline} \times f_x}{\text{depth (meters)}} - (c_{x_{right}} - c_{x_{left}}) +\] +\pagebreak + +\[ \text{depth} = \frac{\text{baseline} \times \text{focal length}}{\text{disparity}} \] +\pagebreak + +\[ Z = \frac{baseline \times f}{disparity + (cx1 - cx0)} \] +\pagebreak + +\end{document} diff --git a/preview/pr-1492/api/latest/annotated.html b/preview/pr-1492/api/latest/annotated.html new file mode 100644 index 00000000..26856ba7 --- /dev/null +++ b/preview/pr-1492/api/latest/annotated.html @@ -0,0 +1,267 @@ + + + + + + + + +RTAB-Map: Class List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 ►Nclams
 ►Nrtabmap
 CUDestroyer
 CUDirectory
 CUEvent
 CUEventDispatcher
 CUEventsHandler
 CUEventsManager
 CUEventsSender
 CUException
 CUFile
 CULogEvent
 CULogger
 CUMutex
 CUObjDeletedEvent
 CUObjDeletionThread
 CUProcessInfoClass for getting information about the current process
 CUScopeMutex
 CUSemaphore
 CUThread
 CUThreadC
 CUThreadC< void >
 CUTimer
 CUVariantA variant type that can hold values of different types
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/bc_s.png b/preview/pr-1492/api/latest/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/bc_sd.png b/preview/pr-1492/api/latest/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUDestroyer-members.html b/preview/pr-1492/api/latest/classUDestroyer-members.html new file mode 100644 index 00000000..ec8988c7 --- /dev/null +++ b/preview/pr-1492/api/latest/classUDestroyer-members.html @@ -0,0 +1,91 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UDestroyer< T > Member List
+
+
+ +

This is the complete list of members for UDestroyer< T >, including all inherited members.

+ + + + +
setDoomed(T *doomed)UDestroyer< T >inline
UDestroyer(T *doomed=0)UDestroyer< T >inline
~UDestroyer() (defined in UDestroyer< T >)UDestroyer< T >inline
+ + + + diff --git a/preview/pr-1492/api/latest/classUDestroyer.html b/preview/pr-1492/api/latest/classUDestroyer.html new file mode 100644 index 00000000..b2cd4075 --- /dev/null +++ b/preview/pr-1492/api/latest/classUDestroyer.html @@ -0,0 +1,205 @@ + + + + + + + + +RTAB-Map: UDestroyer< T > Class Template Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UDestroyer< T > Class Template Reference
+
+
+ +

#include <UDestroyer.h>

+ + + + + + +

+Public Member Functions

 UDestroyer (T *doomed=0)
 
bool setDoomed (T *doomed)
 
+

Detailed Description

+
template<class T>
+class UDestroyer< T >

This class is used to delete a dynamically created objects. It was mainly designed to remove dynamically created Singleton. Created on the stack of a Singleton, when the application is finished, his destructor make sure that the Singleton is deleted.

+ +

Definition at line 32 of file UDestroyer.h.

+

Constructor & Destructor Documentation

+ +

◆ UDestroyer()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
UDestroyer< T >::UDestroyer (T * doomed = 0)
+
+inline
+
+

The constructor. Set the doomed object (take ownership of the object). The object is deleted when this object is deleted.

+ +

Definition at line 39 of file UDestroyer.h.

+ +
+
+ +

◆ ~UDestroyer()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
UDestroyer< T >::~UDestroyer ()
+
+inline
+
+ +

Definition at line 41 of file UDestroyer.h.

+ +
+
+

Member Function Documentation

+ +

◆ setDoomed()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
bool UDestroyer< T >::setDoomed (T * doomed)
+
+inline
+
+

Set the doomed object. If a doomed object is already set, the function returns false.

Parameters
+ + +
doomedthe doomed object
+
+
+
Returns
false if an object is already set and the new object is not null, otherwise true
+ +

Definition at line 55 of file UDestroyer.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUDirectory-members.html b/preview/pr-1492/api/latest/classUDirectory-members.html new file mode 100644 index 00000000..35209c04 --- /dev/null +++ b/preview/pr-1492/api/latest/classUDirectory-members.html @@ -0,0 +1,106 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UDirectory Member List
+
+
+ +

This is the complete list of members for UDirectory, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
currentDir(bool trailingSeparator=false)UDirectorystatic
exists(const std::string &dirPath)UDirectorystatic
getDir(const std::string &filePath)UDirectorystatic
getFileNames() constUDirectoryinline
getNextFileName()UDirectory
getNextFilePath()UDirectory
homeDir()UDirectorystatic
isValid()UDirectory
makeDir(const std::string &dirPath)UDirectorystatic
operator=(const UDirectory &dir) (defined in UDirectory)UDirectory
removeDir(const std::string &dirPath)UDirectorystatic
rewind()UDirectory
separator()UDirectorystatic
setPath(const std::string &path, const std::string &extensions="")UDirectory
UDirectory(const std::string &path="", const std::string &extensions="")UDirectory
UDirectory(const UDirectory &dir) (defined in UDirectory)UDirectory
update()UDirectory
~UDirectory() (defined in UDirectory)UDirectory
+ + + + diff --git a/preview/pr-1492/api/latest/classUDirectory.html b/preview/pr-1492/api/latest/classUDirectory.html new file mode 100644 index 00000000..1d946513 --- /dev/null +++ b/preview/pr-1492/api/latest/classUDirectory.html @@ -0,0 +1,549 @@ + + + + + + + + +RTAB-Map: UDirectory Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <UDirectory.h>

+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 UDirectory (const std::string &path="", const std::string &extensions="")
 
+ UDirectory (const UDirectory &dir)
 
+UDirectory & operator= (const UDirectory &dir)
 
void setPath (const std::string &path, const std::string &extensions="")
 
void update ()
 
bool isValid ()
 
std::string getNextFileName ()
 
std::string getNextFilePath ()
 
const std::list< std::string > & getFileNames () const
 
void rewind ()
 
+ + + + + + + + + + + + + + + +

+Static Public Member Functions

static bool exists (const std::string &dirPath)
 
static std::string getDir (const std::string &filePath)
 
static std::string currentDir (bool trailingSeparator=false)
 
static bool makeDir (const std::string &dirPath)
 
static bool removeDir (const std::string &dirPath)
 
static std::string homeDir ()
 
static std::string separator ()
 
+

Detailed Description

+

Class UDirectory.

+

This class can be used to get file names in a directory.

+ +

Definition at line 34 of file UDirectory.h.

+

Constructor & Destructor Documentation

+ +

◆ UDirectory()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UDirectory::UDirectory (const std::string & path = "",
const std::string & extensions = "" 
)
+
+

Create a UDirectory object with path initialized to an existing "path" and with filter "extensions".

Parameters
+ + + +
paththe path to an existing directory
extensionsfilter to get only file names with the extensions specified, format is a list of extensions separated by a space: "jpg bmp" get only file names finishing by jpg or bmp.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ exists()

+ +
+
+ + + + + +
+ + + + + + + + +
static bool UDirectory::exists (const std::string & dirPath)
+
+static
+
+

Check if a directory exists.

Parameters
+ + +
dirPaththe directory path
+
+
+
Returns
true if the directory exists
+ +
+
+ +

◆ getDir()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string UDirectory::getDir (const std::string & filePath)
+
+static
+
+

Get the directory path of a file path.

Parameters
+ + +
filePaththe file path
+
+
+
Returns
the directory path of the file
+ +
+
+ +

◆ currentDir()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string UDirectory::currentDir (bool trailingSeparator = false)
+
+static
+
+

Get the current directory.

Parameters
+ + +
trailingSeparatorIf true, a '/' is added to the path.
+
+
+
Returns
the current directory
+ +
+
+ +

◆ makeDir()

+ +
+
+ + + + + +
+ + + + + + + + +
static bool UDirectory::makeDir (const std::string & dirPath)
+
+static
+
+

Make a directory.

Parameters
+ + +
dirPaththe directory path
+
+
+
Returns
true on success, false otherwise.
+ +
+
+ +

◆ removeDir()

+ +
+
+ + + + + +
+ + + + + + + + +
static bool UDirectory::removeDir (const std::string & dirPath)
+
+static
+
+

Remove a directory.

Parameters
+ + +
dirPaththe directory path
+
+
+
Returns
true on success, false otherwise.
+ +
+
+ +

◆ homeDir()

+ +
+
+ + + + + +
+ + + + + + + +
static std::string UDirectory::homeDir ()
+
+static
+
+

Return the "home" directory.

Returns
the directory path.
+ +
+
+ +

◆ separator()

+ +
+
+ + + + + +
+ + + + + + + +
static std::string UDirectory::separator ()
+
+static
+
+

Return \ (Win32) or / (Unix) depending of the platform.

+ +
+
+ +

◆ setPath()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void UDirectory::setPath (const std::string & path,
const std::string & extensions = "" 
)
+
+

Set path of the directory.

Parameters
+ + +
paththe new directory path.
+
+
+ +
+
+ +

◆ update()

+ +
+
+ + + + + + + +
void UDirectory::update ()
+
+

Update indexed file names (if the directory changed).

+ +
+
+ +

◆ isValid()

+ +
+
+ + + + + + + +
bool UDirectory::isValid ()
+
+

Check is the directory exists.

Returns
if directory exists.
+ +
+
+ +

◆ getNextFileName()

+ +
+
+ + + + + + + +
std::string UDirectory::getNextFileName ()
+
+

Get the next file name.

Returns
the next file name
+ +
+
+ +

◆ getNextFilePath()

+ +
+
+ + + + + + + +
std::string UDirectory::getNextFilePath ()
+
+

Get the next file path.

Returns
the next file path
+ +
+
+ +

◆ getFileNames()

+ +
+
+ + + + + +
+ + + + + + + +
const std::list< std::string > & UDirectory::getFileNames () const
+
+inline
+
+

Get all file names.

See also
UDirectory()
+
Returns
all the file names in directory matching the set extensions.
+ +

Definition at line 129 of file UDirectory.h.

+ +
+
+ +

◆ rewind()

+ +
+
+ + + + + + + +
void UDirectory::rewind ()
+
+

Return the pointer of file names to beginning.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUEvent-members.html b/preview/pr-1492/api/latest/classUEvent-members.html new file mode 100644 index 00000000..20032bd4 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEvent-members.html @@ -0,0 +1,92 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UEvent Member List
+
+
+ +

This is the complete list of members for UEvent, including all inherited members.

+ + + + + +
getClassName() const =0UEventpure virtual
getCode() constUEventinline
UEvent(int code=0)UEventinlineprotected
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUEvent.html b/preview/pr-1492/api/latest/classUEvent.html new file mode 100644 index 00000000..cced916b --- /dev/null +++ b/preview/pr-1492/api/latest/classUEvent.html @@ -0,0 +1,289 @@ + + + + + + + + +RTAB-Map: UEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UEvent Class Referenceabstract
+
+
+ +

#include <UEvent.h>

+
+Inheritance diagram for UEvent:
+
+
Inheritance graph
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
+ + + + + + +

+Public Member Functions

virtual std::string getClassName () const =0
 
int getCode () const
 
+ + + +

+Protected Member Functions

 UEvent (int code=0)
 
+

Detailed Description

+

This is the base class for all events used with the UEventsManager. Inherited classes must redefined the virtual method getClassName() to return their class name.

+

Example:

class MyEvent : public UEvent
+
{
+
public:
+
MyEvent() {}
+
virtual ~MyEvent() {}
+
std::string getClassName() const {return "MyEvent";}
+
};
+
+
int main(int argc, char * argv[])
+
{
+
...
+
UEventsManager::post(new MyEvent()); // UEventsManager take ownership of the event (deleted by UEventsManager).
+
...
+
}
+ +
static void post(UEvent *event, bool async=true, const UEventsSender *sender=0)
+
See also
UEventsManager
+
+UEventsHandler
+
+getClassName()
+ +

Definition at line 57 of file UEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ ~UEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual UEvent::~UEvent ()
+
+inlinevirtual
+
+ +

Definition at line 59 of file UEvent.h.

+ +
+
+ +

◆ UEvent()

+ +
+
+ + + + + +
+ + + + + + + + +
UEvent::UEvent (int code = 0)
+
+inlineprotected
+
+
Parameters
+ + +
codethe event code. TODO : Remove the code, not required for most of all implemented events
+
+
+ +

Definition at line 81 of file UEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string UEvent::getClassName () const
+
+pure virtual
+
+
+ +

◆ getCode()

+ +
+
+ + + + + +
+ + + + + + + +
int UEvent::getCode () const
+
+inline
+
+

Get event's code.

Returns
the code
+ +

Definition at line 74 of file UEvent.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • utilite/include/rtabmap/utilite/UEvent.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classUEventDispatcher-members.html b/preview/pr-1492/api/latest/classUEventDispatcher-members.html new file mode 100644 index 00000000..e852199b --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventDispatcher-members.html @@ -0,0 +1,131 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UEventDispatcher Member List
+
+
+ +

This is the complete list of members for UEventDispatcher, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
currentThreadId() (defined in UThread)UThreadinlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
isCreating() constUThread
isIdle() constUThread
isKilled() constUThread
isRunning() constUThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
join(bool killFirst=false)UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
mainLoop()UEventDispatcherprotectedvirtual
Priority enum nameUThread
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setPriority(Priority priority)UThread
start()UThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
UEventDispatcher() (defined in UEventDispatcher)UEventDispatcherprotected
UEventsManager (defined in UEventDispatcher)UEventDispatcherfriend
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~UEventDispatcher() (defined in UEventDispatcher)UEventDispatchervirtual
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUEventDispatcher.html b/preview/pr-1492/api/latest/classUEventDispatcher.html new file mode 100644 index 00000000..395e053a --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventDispatcher.html @@ -0,0 +1,279 @@ + + + + + + + + +RTAB-Map: UEventDispatcher Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UEventDispatcher Class Reference
+
+
+
+Inheritance diagram for UEventDispatcher:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for UEventDispatcher:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + +

+Protected Member Functions

virtual void mainLoop ()
 
+ + + +

+Friends

class UEventsManager
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+
+

Definition at line 34 of file UEventsManager.h.

+

Member Function Documentation

+ +

◆ mainLoop()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void UEventDispatcher::mainLoop ()
+
+protectedvirtual
+
+

Pure virtual method mainLoop(). The inner loop of the thread. This method is called repetitively until the thread is killed. Note that if kill() is called in mainLoopBegin(), mainLoop() is not called, terminating immediately the thread.

+
See also
mainLoop()
+
+kill()
+ +

Implements UThread.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ UEventsManager

+ +
+
+ + + + + +
+ + + + +
friend class UEventsManager
+
+friend
+
+ +

Definition at line 39 of file UEventsManager.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.map b/preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.map new file mode 100644 index 00000000..93f3f5d2 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.md5 b/preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.md5 new file mode 100644 index 00000000..756fa290 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.md5 @@ -0,0 +1 @@ +53e0fc90c95d48f533cb4c4c567dc622 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.png b/preview/pr-1492/api/latest/classUEventDispatcher__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2667612115d21ecf1d8a5d942d19659b8231ac68 GIT binary patch literal 6156 zcmcJTXH-+q+QkDZ1eK1oAc}~f(joLBU8MJp^bP^(9qAweB?!_L1QZCpBO=8B(tGbs zq!a1w4*$E}5BFW`e!L-YvXa9&nVDyv{o6ZARauVkChbiK1VSkPTv{C*Q^9XF6c7Bp zLCo3&4tQn?a?+5?tDlbzc_;{ks!3j2Lend4bK2KX)BU1tca+A88AxbhWSyoD;Eo#Pq}~r=qJ}t8_E2J%?$@^Fa^glNqUDtv9bH1P;H83SN9k36D8p-9=#=|E%dfb>XQkXnJU`a+Gu~; z_xA4sFcxDEhucf!^KI2k-$X~7U0$49q31`?2Df2+F$)W38l#pDp+J>C=yIQVQ^!U!+QTyK4H(TRtzS5XJTFT4?C???(%_qTjrs5%J>0u5?S~ z4dRq|?V1e?4D{LXx~&a_ebvb0wrD3=#A@m2VDrS!qgo<}!T0U>ERRzBlPu)^WV+td zdiJ}&4X=2t&`MXbl)St=@}!`kV7xI<+@Q+A^l)qX==78v1~XXq7_W1GYHMp-XjDHk zrmd+dt*c9&%8$skA1#71jMca>c64;GL^qfBiggZs)j$sRW{9Tt^{GlqNx>?`h+lbl zSRL;zcclrUb{E^oX=pk$R77)ni00Od8;Qi7=Ynja*^TNVEA2-|Y&<bN&9o=H%!cUweBy$t_A&lC7<+EV(%P2ag`fE-ft$3HRnG zB!z~Bh1K}%=a)L3pX@h}j*cFAjTGuNx3$Un?R7AlbtbZ9xvussyw@@2I>5hiBiUi` zWF$|_x;Nv_8%j2^bYV|Qqk4}!3Q6pDsMrl{oEz>XBqcEu(Fxqwml;cB)id+++yA45 zB3xcwWnSq{wccoSUr+2?b9*2vI(@YW4_VpR*3YCk45}0r(}lF446Xa?qhYeyq_cil zWNF~~2pY30;`aM3q&4sYo9QzecyV@&OM-f&M8>R=QRq2=FS(^%c ze}*L^>jMRlvW&5Jg{?MJl$9y<(b^Pu?hr62wv6;kVFvOCHwU06E5e-fbM=6 zT8}837KsN0IXc$x{{wTd2iLOmQ+`9FE4yiRngHm!Q(fmYgFQJpRPo~d8q{`AqpAO{wx_dUNxxEPZbpj zb8{x(zEQEUn30jh)>dh-5o54PNl6;U#!hLCU%s^0#4u<2k@@=i#-mWXSZqOgF6eOF zZogHXX1;Y;XZmAO;PxN5%<)W3O%*dllIL3@Mvt>#;sGL!=bH$5B_$>XhSy+EO-)bZ zIJ>!h&d-k?7*OBX+{9sFW#v5({qkx5E7G_aOuuMrTN^4Np*0BST4YSj(i@KNKYDtK zX1r7L^@_?xPdCaPrt99Xj~2rwLA8dUP~_*Qhltp`FIsW*qC5Nh%dJu5x9=y^l&&@q^a$*PN&T3Sb0QxD9$q&fD;2;uvxG|1WP8Zs}INiSHdDyz$aF|ir z2&($(ysQm$l6G2+=Bz#(ujp#=e_yP+NkY zTXgtDbS4uOw%zm<`l4MQ&{Y>3Yl<|e#%)azZ4Zwf`V@zAJ;ou zplT$!E9^nhD}s%I-n_}(6Sy-cF~6|zz|Y@bCW+ms6-=Fdj0>1n#StOSK6yB|L%iMp3GX{olqO@#0ZFV8kLL}vM*23AUc^iFC%1l_L33=2&&w@C z5o2t0jb<^esRjj;7L?R9)=WQy{A3HI5VrrD)xT}jzjD@y&r=i~<>$iJRAwoO5`JqB zox0pD7=(#~Z-Zb)bb#r1^XpxO}Rlq*GF;qOfCajz*-1pm56UpFzy)s?ni z!N=`@?fl9~Zvbt*`l%v1R0WR**I1^fbjS`u(>Syc=C$a7p3UKXsTpC9DABFQef`)iS}u+QT(|y%e8peG6Kb8ySz2zQ8V=5 zXjc9u!KwbqXZ-dOcyLh1v+nIDxHoOkcQQ0;KWoc}qj5L_9;fw@WIaQV4uw9WX8lm; zVT68n+u+(?A&mJKQ5y)0E(@M)&q;){Mrq+c{~*apkkeGX&zf(N_T)yT8Mnj!hbk4f z>v)5ahi}777P5<4d7xKBYZ;>GP2MRqvy(vf)bV$p5}1|ML?D&9;B>yRLL4 z9uptZiIAq_eN3CS+#OB`wY4duv-%2jIFvKRlmKv~cmAHN-p*#nTBEx|9hZN-2SPA1 z1_KoIao8>@?w^KWVQGo8GwnI+0@N@#I5=jo$f#a>I3>_&LUD}N97r!_b`)*U=DXd{ z))azopI%j0mx5jG%^tQ}>(7oTJqO69siU*FxYz<@q@<)|E{Zt=a$j6L^QlfzAKHMQ z?(SVAc4=iLK0O_o#ZpsS+uz{pS)o6ugy5tW0PSUDWCUzT_@aI_op?bBd?f4^)eaWh zGBJ^omPQvG5+bjtD6K{Tc(x577Yhr^kC~Z_$VjMF*N3LRYlC2rO>J!vZ>Tu-PS%UD ze+r6m-=?Je0(1fa?C?YqN=8nOj5q@%wY&cEG6jGPXdN!@?l~0|Lk{bgU)oECA3S~f z=I>v(I*-j40Rdv*K_~bsltC&S@-{iS15hZ^w?fc$MO9b#IcU;+e0+YVo7I2UN8|D` z15!W-Bqt@6kd_X0Ilj_F@8$P8W98PwkjB&LZ9u4VN4tx^-Gmkv7Cyl36HlIAM0S+- z>jRXI2D6Mix3VG&RH412gKMpkiZ=)_%avj&rwKHHsXpEgyzE4&h{?Zr5$%!!sCTEE zf7bbTAA_Ht-*W{8o`cQt@(6G2%BR8Uh8yRg^Osg5d_8dyJidH@s`vKx>?)EH6BpLj z#y?wDB4%fnO0^4e^7DTkjg60wAJvn9#m4p6oRE3-s;tyVjl#jv5$EV=F)o=O0oa{h zKv+0?bp0_qdu~=1u7ZMs)9iOgZj1)S4Sf8FN5fOJ70D$4Y2E-aQq$9m%E@7Z_%vj6 zbty_pO45&GpF~S$iup$ZJ94lwj`3i)ZfR)=VKx5tfe^+=O`P-i@#7deK{AHxpjtsS zC})Ut067h+xBfL+WaMiBPgO`In7qaD?Z={mWUO`qC4^Y|_SOS3@EPg4@&BIe#US7a;z8EL&^a{C| z;WS;BZ1@KPg+hO{v}E^OynRa&OD8C4Y)lVOkP$G^;cQ^0L4%f-bN8WAxFD8*`=PyL!zPugQJ505`%PIp>} zf5y=8RHdFGbdvbWtx@`7|4nkfUy8fx^a)k|?i>Ph%C@y`>vIeCeUmedxhT+fOWp41 zU=q=7B-xlDV z52oe9(T^z}kp2$v($qs+X6dclT3U?J+D;hH<4-j*murTKB=CjZHeh_rN!lmgw*hxA zhH}b@Ude(v^b_QriAd;0pK^|DyOgbYM+v<7@A>s>ckSI+bhCDvfhIb&$-aesB@O*F zBK2GJ?uBqr-cVs)WxT2VkFsl$r!8JeI&BYqWaho$_I7A++qVWy&wtcr$h$>1hwe^> z=IFyKwYeP#eKYEaKS7{3gnfPKr;{`$p)^%Kih}nGDX0~uBUB+2ud~|A2kSrUY|eYzZu4TM*$T;l)HIne(*3l(Oc>*r82!N(?9O}-w^OWR~*Kc z|96Z1nfDw*LMN6XO`NJ|GyO335PF`!G=n;*zkldmlLo-rrodfXT-;}Z%VsV`Y&og% zs_aL%_(31*eyL}#6@TNa-rUk(7&tW^co9=h>Z)tRRD2K^3*>+-_xDp!Ql``==!4aIXI#uIB$RS?<_E6yhj(3xA5gt+nFRsj`|+c@!WUj` zt$>NKE2#)F80<}IDh$HW@Rv+WOADS@YTAOwn<95g`{m0QldY-RLfukaDk>`T({niR ztVG}?;6EC;9R(2)5#-;^l-|~#aClrld7p@b$H^>4<)n#N{F!BJwOhH8z0eF0VUVNsM84iE{`SZg>j+e1nEK}dSQI3;U?|?#u zh26lx!2#CO)YeuW3=){rx#QK$)w!k+3JQw8T372_#pK|Ef~UY&-Z1HiXM%`eyLiC) z$wPfbM#A438j|7ml$}W&*1+Eb#r`z9p3Gw%>%w6K+!3%LvQ}1)hKGlbPENQ@o3C$d zY{a-rOG`T+?U;f_wl;!>y?gf##1*)lo?C`bo;(41`eS-J9hmaD)m3~|>vVpnDH8y` z7S`54fC&f)Oj{#KF%!LMf*R{S*N_uV}4)=wGCXTQp1_+$F_4PN}1xhzPRm6vyPcJd_477Q<} zuF4e~Hyj-{UK&}mB_}6?geH`L+}YXrM}PmjogHVC>QLp3(zw&%L1_0^J>qOiN=nEh z--ka0evjBGWfm22rOIYAu&_i94QZYnY%189nt<05)y#t$^y=PLP^}VXVQTpp;o_N5?dn>DqzKc zac%AHMuI8_W|`&56K*GFV&XU<`&w`8BQT=<4C&#@8RWE6PtX2z=ixluehkPZ2tbyW zm#-Y1xi6q0ee{TcvTY2IwOugTY9JUWHE&ZSa%X2}_ww=C!@v+jLI^#*b5C>41RwDY zvn=472lG@03v`NwlHjkFp3BD4MFHCkO7;wRG*f`F7+cU8Vyx$@5wlll0b(YQy&bKJ zUv?;PG_;z>iH0lZ{ezuU_Kxm#b#<@){#Ltj!5`ZZ;rGoR&VQ&W@Q@p6)3 z?W-FN#wvizqN1X1(+QNw!`i@h0dZG}WhdpY&d#;T>f+Mg+1bppGH#Gs0VXB@&UAib zyd20pzukCZVj@^$l<6H83y-VC%AQ9b^UQYURMdz}tA& zKnNzt#KZ(TP&vR76qkWfz(0dIcW^s9+6B4WF4!Pynwp{6*^F1)hnKekQvvGyOTWh@ zJO_jyAVi_zbNJA~F!t+LG(hAs`%!i?bMvqH`B@-&1+Vil!af}1xNdIK+bKn8Ji zbj0bpq6opeP5t8-yBdW=%0MNyXBq$rtAx0JKiliv7%L62>`c7skk6k(4-O6pw~|xL z>(43n=~V!hmri$dtnu$L$`Y^64 z?nyFn6R6GbjGQCk5=f%|!_U!*NPNl9UjX!PH}s&=g)kglQBl#OBJ%tyI{)W6AaxuV YMLp{F+}A7+#QP9=8D;4rNt57z0V#|gzW@LL literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.map b/preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.map new file mode 100644 index 00000000..93f3f5d2 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.md5 b/preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.md5 new file mode 100644 index 00000000..756fa290 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.md5 @@ -0,0 +1 @@ +53e0fc90c95d48f533cb4c4c567dc622 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.png b/preview/pr-1492/api/latest/classUEventDispatcher__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2667612115d21ecf1d8a5d942d19659b8231ac68 GIT binary patch literal 6156 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 YMLp{F+}A7+#QP9=8D;4rNt57z0V#|gzW@LL literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUEvent__inherit__graph.map b/preview/pr-1492/api/latest/classUEvent__inherit__graph.map new file mode 100644 index 00000000..6173a7c7 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEvent__inherit__graph.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classUEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classUEvent__inherit__graph.md5 new file mode 100644 index 00000000..664700de --- /dev/null +++ b/preview/pr-1492/api/latest/classUEvent__inherit__graph.md5 @@ -0,0 +1 @@ +348a474d7b0f3e1e714427f547d25f0a \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUEvent__inherit__graph.png b/preview/pr-1492/api/latest/classUEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..170388beb59de7a705b45418741a8dd48464c607 GIT binary patch literal 67504 zcmZU*1yEIOv_Fg>A)tt~q@Z+nmvnb`BV7`b3eup`-6;*y0wN(@N(e{^Qj#hS|8?Gb z@60#z&FhS>oWnVLKhIk0S-)62QcXqnF6Ki_BqXG}@^VrdNJzIVk&sYsW1zuLo>fRO z!e3|>in3BjH;DgoKb9mQAyFa8OG#+?WbQ6{8-4qB({(u0l2RGG!P^_gpt*iSJkT*jXlyU3#(o|M$;#p23M*b_Q-4?BtzZm0UfE*Sjyz zj^{o&q!fInKg5o^CqBikJT;&<#a$^i{@-7>|Nnm-eOg+|`5ca8Yv{c@%W-*iCE&Ii z>Sest5ir;2lwoYKIp4%~eSIwuIBZjIyxsO=eJJJdJuqx?UO!qNn)X`qKfY@_mi<8y8}WZ^?FY!lZO=ynpZet zmv8nvF7Dad+P=mn>3;L*DUzI`VnNW&b^F!7c_~?0kJAJ5?;jlc8|*|#jg2radH3b zEzavu#{Oel0NNRC*lGCj+))o3<;-=oK3*QYcT6ck+_ zl8=ViI){UAq3G4y+_ks2XEtoahV?+hChi(YpgTjXd(v??7Tdv(7yJ4tq}+C0tG&@A zqW=5|bgCQSl!3X5DXfp_=<1*UHt4w66GF1EusH3!xe$vZ6L{IyCWNG2u4TU36RDKR zKVbkL@liHMG$7bvk-fU}S`aBq&V-qKQ_Znb(19z?^K9ay(_5k(w&^UZ=7mk{EFr(><*&OQHr% z&aw6N^60$2$UcUVe4qekkCz zjbCZ-p{`2EZS^+Vs}KmSU%viD3Q6vd8-M<^V$?3b9o*E!$H2fa*Z38-u>Ww{O@1!^WWd4q@;fGkIv1d{rTgGlsFhb-Jel8<0uQ6-*d;9 zDO-kUua16CawUA+Bo~cJk3S|v3bzsI`0g9KFJ}8MZw-n*CBBACV6z#^j_vFetE#Fh zEGgk~m}Z7lck}QVIzIjJ@x}4a1l2nGDO$giy%9*{G?5pLABw)WdAnr$Z8J2wEUA>J zWXZ|Pn@{9Rqej)fIN8&xG)TI+KIyzX->L5D>oaIVMMXW_tsi^$_O1Ev*K#T#|H;py}eUdG#D)9ZnDBYf zq^hy2R16j&v)P}`iLYgv;jizKx+EK(TkXL9*6uyYJUFI z6cfM5i~Y`=a_#p9C-&pHw;;Bj@beS1v9T>IES$oJ`27AbbL4fcz_1hBS*)DF`Rpsb zNP2glC+Bq3V$Hh6pK>W%=0DOCDV~D4NGn7kE~qB;sb{R`CfXL+?4_oiqVtVTYY-Wk z{BAGjT{T!*qq?nx6*~Y0YylB;oVT0?(c4yQZc~WEXdd*@GdD?@C{?C zKX~wn4s|sLrAnbI0A&ll$UiA5pJcvfFgH1xXxwsre-qu(v#=ImGXLu2I9{ zM|H$YeQy?^l`HsblmA!)mdubgf2aTMuVRbdsOgMnde zw|j3^{Xi7Icd}I6t83!W-asBvbRHM;A4(tI?zZb9F>iT55w%+q=;`U0u9LoLRY5R# zs<&nKx~$7A^eH{H)G0k<>CdImsfKrQkZR)HtA!a|o>+ghYOu_E!nAa%iK}+S%BqT! z%wa{(I0Iib)M8XejpN9PZ;}%f@(KyEDl;*`#XB?b>ui(aSL-ti2iF*qY?6}X@(K!8 z<$wS9g71G0?R1->gxciyvX(u6->ur?k0JLbt%iI-(#cEY7i`SuB*xy?V@@XU-7lMq z`ea7`LqJjSkqALT@>9L`KM%}#)l~0rEr!k5{?*)yi&LB$OO0Y zN!p#Lc3pBWPos1l3b@N#_X*hohHdf_yXSI=YuLpry*-uEb+R{|quloagtx7AfajYC!gwXS%Kwb!;u2rnmglT89(CCv5;dz zEMvkG%@<_k3B^gaVSXG1I<0A|>vvv-jC2v|>Rx(MPjf3XsZcX=tNh^XjeNqbll|P2 zKfU-Wz9U3eMe1>criS2g$b`6@R_-3(=s@~z*cId!{QdW4D!1~G{8AUw=Wg$)dXB7b^nzx2W2@p>5j>TJlLO5a z57ak0^)WmNPy!0h%W}xc-xb^Qm9#Mo(rXIi(#zaJA^fW?L{1)GY;VwF8I>YY%wL^Bii%W~bk{L)O%Mm|tKy!CmR<$;rCjz4}-x7YD6X_C!mU3~{Al1#Jup zwae9o#S>pBLN`mPv}t8jL&L+P3oOSKs!_2B6TfE`8}=2YPJ9U$k9tpft1YB)75jyFc)?iI+vHxx;(Sz)+}N#+QMXr~vf)fPe3UH$dz*Cu;|h75%N z>|I0FJ+pp4H}$xc>+fd8D5ljYYdl@H51Apl zU9K4yCp*PGKR(c$SZj48_+~Zn(~G#cB4)qK!~Q#1ZD&^Ah>O_&@sYRM`+I|Z428(| zjrENp{d$`Uqn5haop0`w0ewYsc9{)2>?(H(h_KaC$jDXY-=wBS%sCcIM-$FX@6Xkv z7vV$o8*4O?l2cN8EFeHaNlCd42S@HXuhaLQrJ$RU<1y2nM}p6HiNo(1zc^oj(+E!B z@lth~%*@>j)1Bo{udJ-B#w+x>GLn3+T8yfp5Odp&ciH@1h!GhrlVL>8h( zIfJN3#OJaZrea}Xk=@x_PciKq7>F!VOfi`0?ddr<_>AMRHTeX-{&Ppbg&p+e6B83> z6beKX6xmK^Q>tR?NxCMV#>Q~!=Z3eYN(4MMu;E}@|1e|nd1&bUCS6)|i^nhbf4lnm z1qDtz8-IVff8?<2GviEi)EOI@UCUI!gC&kUJe*vjUa(a2lxDaxle!gfb9I7E#{VXb z%l7DWEgt1fa{ITOTZc!hXmdfoRtZ$%3x_67|QCf1a61QAlE3C-HW^$PxB^S6KL1LqntD@ALg1 zHmJu_b+-cWjS5JXGOtD{dZ?(?3fIPj6ZnJ zu@646r$;I?Gt=&S!cz|xY~*jNek1Z;Gu{wYq4vw86O4_IUwIA`eC*~il(ZZYaq z$Z2We6S0|Ct#pS?|BZ}{TyX0rzm1MQRcEaz6GtWwEjbc&49nkiO+Q*2Lp0DaGDd}l z-fnc7M-zYcj1kaHiSO}-@SpLg(1GT_Lj7onG5p=>@k^!S=K4k8**Xz5HFZQp1Qiz- z*O;J6ws2%l4rRc_KkMbLkU!hsq8l16@2c}}f93p$Q5KCQoid!!gDa>F4V^ zQKm_U=%kC4(vZ90w4Ut<5OVt7uri#+1-(BmoUuKTc*n-3DXhk>-rlyqMzcJBe^0W_ z2}p((^4+_4092L_Rz4%nc<(zJ0xVZZl1sx60x#;&pB9v*rC!B9` z>4y&T?D*F&{*s1<1~Qg4LKXwH0-3unU%rfpi?ivAAwjCpuSbL42YSFP+hP4*&9-9{ z(0)o^o&P<9UdZliDeh9>#c$=YGGVx_N%2GE8l6tPh66b6J*S*Q29uaP4p*gjjzmrt zo@VemAwg?{X4x0>h?TWU{4Yb%!O_v`(Yk}jWwpVFC<+n314xHj>mkB83K0beLznZf zdJ-pNV;r@$wMyB-B!Eqp4Q@_i1HPB2<}@}c)d&9DokJ0az*bCV{^ZDuf&hShv81-Y zDF#%BVXru90V}f#+TaJB!>3Sn9+&IYQrnJZ4%CW5?#|0a z`u*M3?^Ic$-;ps%CQWz_-8rKD4_R$>T|tKT)X=KX zD6`MR|N{_w~@JHW`5q-ObJIR@I{a1r(LdsgiiF z&bKtOb*?Lt5FnE4gGrS;o!93M&v$3vR=Rl1R2l0r6FNlim*fO89=N_I;j&T7lSD;E zMpjdB`<3PWfRM27DbCftOL>Irmc}S<)Y;t9+}zxE$&oP*1%`)w&chIKo3n=oE;EsM zbO02sI>rVdK-3FlaLLJ)0hew~S7vzOD@cqT+N_%fsjSDU^gYqjc|S`XxXd)D>!BM`C1X^78Vgud;)#eSsBFxcK+mce||Q;PB8KBDno* zBSZLNw;o#i&#f*R8V{iQS@%TX`kyR%_w@ACKq1QLd-HAVS*;#_z&W>R;Mo&IpMSX8 ztMy*zZZO{upI7J?w(J+jK7W1%}sYipmOh^WHZ z8SKFI&6v`~?ulYW5POwa z$_^?T8mH5DZX|;b&w8PV2mn*?^fmTCqp8W?i}Q1Xi}CsfhnYBdb=^;eZ-|fVccCRA42x)cV4X)uO&IlYVv-cu1G?YXQ5U#-{gPPtwn_JKgdMr- zd?hHou&IQF{U3OGxi+*!M@Q4p(!Qq4_UWF;v$K8!JEP{)&dr5&s|!iCUjzRUhkN*^ zF8<|PxfI>%%UDl@-@O}bVtV~v!>eiI>SXCx2s#DTk3lR^;EzUtqVvp>sp2PNXm;45^T@9%w-nQ9e& zPcd36>t*^s9v5U(`vC1FQt@4PK0?vk>9_W6`42bV{n)0I?Ju&oP6GUZlrXKh{+?Zn zf$Z8Yg+av`uUApe=k{!QOhfE$f#Z#!mGV>_Ecfj%uGIMKhE+AgZ{0%sqVD)iA*Hae zyQ}9K?0xa!t`wdan4OSH?7?HLv6>K1+K#y2=lqV5)rK&N{r*aTq9B_9BcU==wI}EE znsJ}KTj_ek*j`ds=7*D5T#8aP^efq4s6O=Ky4e}{0u(H`gQw;g-JyGBlKJggNMjWh z*W`8we816B?i6=Fd{anwXJWZcZ-C@s$AIN7ZJGNe<9qgT+?9b+@xOs?)7AC{DuN_J zYQ|*`AN*SJn7Od*w;#1fPv#xcH`rS< zx+Rz;*`o@)8joW??qJ3yl@PS&g{IJ;q{V4i>1#Je>8dzz7fw(A14+5z3r0(>RvHMUsx zFif(KO1YJ5LX4Cc()i33x`g06+) z;tHtXlhHnr7S`(7(H$tM4`D7+eUR3}+5J<)&iJgEbDl~nyiSkV*tzX@W8U3|+^(MV z1|+V)b&X~T0rJ9Bf^}JbjE#FL^cVS#G=nYRVO_#$jKVZy62bSj6NYn7q+g-kO=UNK zS@3y$Fc_M?Y9%T>yteD@-%re`# zc5G2R(hU9hs-Z9Q6gZe$tIwx&4(-!*I5&Z)!$Wx*j8(?q$m&R9e#og6N`y)gg{fvb z&n^t1hOx-m$W_#AdS^!$TUQs$!(T450dIu{b)OAW>)4Up)c5)IrEj7JnONWgl-+cd zzJK`FMOp+a&WexP=({Zn<8Do(7;3T}B*uOQY2r2{TO4Orizx#qC%zl12(Nz$e{{%t zmv6z_x6-X=y7vl;it-Xyzr3Z1yVtviVCI0^u45s^M!UY`x~L2VyqK4m4`lwdmuwuF z1Vb-n(B)gFC4d=l3H+{9hAj$ZWMXM)Y0m}gZx~c(xT011o)<0$QdO~gsHcu`qS#pn zoBvC7)?_j?XmlKC_nmuDyD^d>3xso&)*i5h_uo2-si>UmB#3NUInu3=_L4Ts7A_m( zudNk{9o&uzCqgT~sSofh%F&2IC=EK51}m$pFH1`3T%FqMG@^hSyQK!yT%tyEbMrVr zmg%YyfwINzZ|_^y;)D=wG4SQ<(Cl~JoF^{%tldQrnZm-tn~QCHa6^v(S^x-BueVW# zlQgHY-SAtQ_69no{~L!aq>zx1(6F#YPXRtWI+dRV@uI8Hh9fzG01^{}4UN3~)UXqF;0G?UbK((!YaYAjD9_JQ1eTvdF(a+|C*i}p1{E*U8Box9r1S{yt-j`-q1Jz^`u@^d&z}w=X7SDQle<1@8eY1o;3E z+E}B=qemgl&HVSs1$&^+v0rTE$rAG30RB`;TKaI-GT!azr~J-!V`+UZG_Xp*t)2nl zjFie{dk=12ib1>3-G!E$I}y-0f`v9Ff<_iJBn1XmlXkiPWrLv|U4xd{0{)5UL+1t| zc<%1ZRMUZI1BF8HZkPQ>jmw!|F(pb2-1H;3K z&>jy#fJsaJ>r^CM``N^O+xzm@_t}F)IlwI7oPSeNwb$t97 zOH(ukp!E{K4$ZBt`H2=I={y3j>v$Yz$Itg4@;n1z66SaT4gAQt3m;#T?S-`0zREE)n%iG@^XxNO6jOr>oYsdI^`f?`htcFuL zm`(hD2Q)$Bzu++@^0m^CsChbn5s+6SX%M-f=kh{}$FvIv65y$(>-ojS#dCpVSwWKd zPlrsNsEmf#XF&zBb`=YBQL>5b40Z9}9r_OjV|F@Ul41)4CFxcgNLyJwX40+t2|8*7 z1`7JUVUC9glsz4E^LNJ7sNLr+aQOI)w6b5*dhNI$P*9A5c;K^{7w*1T0(sxu(y~tM zTN`u}Xk=v64B8^#cR;Lw>@o$tq5vL%%ww?#cuxe&X$OCY7;y(M~4g+p9+HcmN~4=$e83E|=BCMG5bz%flK2V^kVt>-ciwEgm8Hl7#f95`vQW)!Hh;8xp=;;}swOoxPz&p=i)QQyy$K|N zIbfkv*i1Jdf;Ng$Oh6SOE|^H&_W&Y-Auup7Rf$$ZQ?ms^x^f=v?!z89VtiM^i1>lG z0`UqE+s_xAr3+QI`p{63({EO5UANLxQ}?_{8?adZ8iu7*>tSd8oz$iM(`Ov97}!1p z%SR^guFAM=vRIk)8ALmjR}4(dLAQm?i2@RKGb8|M)KDl0m@tsSt$r{QtZF zZm3*$yN$74eT`d+d>8@1vz zBvb|b!=~?S%qHKX510>r=2LyBPVHtQH0RKe#g0Ly#r%r?k2ti2P)}!iRC~%%p3ZU} z^LAharWRkot(ltjRn~4g%tjfs19Of(8@^9>R&A7QYcOcl|J+t7h#?(YQlUsFJ+e~tiq7+&dD%^J>!l~k8a{rYL3}UP6bs>N zUP`GjV=`8_w^c(EEPGsXYG^WkNuHDPSVxItPgK>pUx=ZrJ|nCEfAM+|j! ziEVrIP(6CUEaIVCU9Y-KaIfp>->@mXFl{PMl4`YfL~$OULS~iu;&p8?uq=XKR^_b3 zwl|AOgHZHzebIc-Qd#oO=fu7FqB3g6o((2LvOn{;bw1u$YrP7Q8h<>Nr=sA=_bQx%18d15{JRuDY;ry z^D zyCqAMvd61mOmg>wgb;!M2d%M+xT?ye(}XkamJz$nQJf`p+lRy22WIlNwe+00=ggQI z8RY*7Q0K~&()V#6q2;1SIYtiS(>R6HDjaG>I@m|iYgPz5sP|wvadUn;q6`L-LEv)Q94+%69wf=J`ykb44X{o$opr4CJ>lL~T%*dFV{u1<4B621zj= z`I~Co-QPj5jtLU8cZo+{=BV_f>l|%b8OZ@(faOYb)X9oj@?Q9!76Hnb5Nq8oV$)U( zV&G8X#Tr|Ot^%{s%(2`jC#$@zby!ch$E9W;x!V2R@CD_^*A z3vS)~PaMlq=?g2Y@=_=J^2}ba=$Jd#h|_m0FXW1eS%reI7gK$>`T}L`kJUZ`3X=MS z%@|$@aj40~XyN(b`&c^%CG9RZv-b{gAy+f4te1)ttZe##;+Ek|LL_-AbBOlcHkM6C z#sq0HhGh7;of$PFvyLc|3GO3qPB~a#CKk}N?)OOYb=fr!CL=mVUang!^5LS(kMflc z+nJ&wk!c7~%e3!BOHVZ*PqC~?*63~K;Ri7j=Z>b2wBOEbeWOrFW69ZjEO-#{05Ij( zNWCcqQrI-IAZEuqKd54B*>$=+*B0=58Mt*!(6f>IWYEg2J7c%jlbA@%uPksYBXBFhiTUUULAvJDu8*HQ`9&%k^@>4-7E3s~yReOxyYdg> z8|yHx6>1gl6yPg)O1+=OXQB!AR#S?_RHG#DzCtnuZN*jg>wEjSaWG}HjdhhKxZMh^ zB2YzjlIAa2R*FJ7kNUh?l!7sV>_LQD+7#7x&8$#1My}mdED#LbSLCNKXJnb8&5$sL zUXhp7p07?L!`N=?TwH#!?A7;n-fLdFSFT&Vx5>^u;(UF+!v?ImCbJjtLP+kFou_1y z8(~_6M7E1J_X;i)mS2>V#{jdHyjo#8#eFf!cYwJ;fp0?p!+^ucn6*lQt}fR{W^7I_O-|mfnIe} z*NU&YQ9NBKZ$p&W;snW8Kt9YAc`-dF)pK?PW%B-<~l)oZ5?IJWbX{V`2d zkzOERcQ^054C>5mLNgB7IP=Sw-2~EUkQcsK|B|&oHJ%#ar^F`AMyb);6+5^7=0?*QC5ml;i9F7ZtQmEyhC%m0Xot}5J*J^S2?`2A0?M}wdZ|<)Z&n2c2mlpu zmjMwkFqk10BudKb*fl@@AI1Z=*ftqobop{?})}nku-Mp0lx48|^IA+v4De{JGDhQ;`e(t3a}8z+dfudy7M$b(R{n za3Z0gVduhDf2Qz3!z|vsZC(?1t=*9zC2UN`<|GX7-$kgvOoObUhawYt9s}I`;V{>jTBQLGh-&@NoMx{*WYMdkn*UItRrUa(8ZWkbHMg}H z4w3UYlL0Ad1411Vs527=qkkddKd;4$jl%l7dU(`V;oP}n4ljecxtZ){5)_N@7Ah%W ztEi|brE^CDAp7Mo8KW6~7^nU*QRPyOl=)PsZbz^mUu=3#keX2Wm?!0^RhRUX19~2fF<7-f4i{uk% zIf0FLT!%{@0v^K}uAb9tTkG)P;0@3eJI{4>b$$O#$XbKc_Tb?|P^Y!tf?_ZLt)%te z?QfGHRr`W+TwzW4VU#lPR02s}L1ECV1$yBlKm@f-rD_ zh^_%>f?0tQcmzT! z!r@aGcy;a$njSbprK)B&`y5)pcV|Cck;ZJ$@Wo&cmaZ2>rE{SpFo7w8X5?{&%}f}5 zdV2Z=w!C5oHi8CL+5PC}fbd%T^@+n|p?qE7m7gy}Rqx`Wu}UWY+a2GZGoZ&le)K3$ zi913;L^E@kqjxZDTyM^CzZG$~YG%sWwa3(X8%t}aS}lOO=ePqwL%r4)+qUio+x8Z4 zi4{``Xi?L*A5(Ms9GE#sW(fP%fmr&j^*0b6`HAnqH#yt7_X1fBG$51wkVEy18 z&Lwl&a&mGI_R%?u?b+G_p4yG)vF>fjfWA5axKFeS2VVM+2zr)!odIx6!6aami>DB& zyKgLNRd?&*r-bb9>d%~37e-3!QAObpqSA+t#5<~1g0SR~18@W!req-4_JW6?+5e0a zA>cdmT5>` z7tFGe;D9-WkY*^P=PQ18qpnEY#?Qp78D)kf%N%fpnz0jO+_|&TIPZ+G;(==*0mvcc z7`|(Cp`dGFaDBE~x3pB&TW2-7&lr2x0{KGmg89OenuyiN4Co>d5bqY@gIqVajf;zL zKODaB^<9sk5fEq@|CO!10a2CuJ08jC;;HLofV;dGYGT@82V^vvrjhXTNet!~%uEM_2%-7lH^9h?{Ts|Zu|?ku`TGi84Na3FkKsU_@_k^u_3pZ7G(II zu7saKFhkwprA=U%=Zn0AMSmnHm=11IF0e{C@{t@zaj~Ha;K)u4oYHplj^o+oht_vd zVx5=bw|&K9drA-*asQ!LwcxXOL51=V6!fDJz9qezSH>UxlKLrwGJ##1Xz{Rp2*%`3 zuh2cnz?{?%Ms5i00?2*Oy@fOg86v^B{Au5nZd8z-pDDlNWA)ydjs>&$0aQGM+2Qi? zvQ)pG7UWoj_sQqQ3zP$JOT0@=l!D4@|E-(=;%yzQ&`o{p9ve!)QYnFp#%`+kF3=0i zdNqg*#6MpEH@k9sdwVG)0$4g%;r-wj5P&eo`*QVg5dy}k`FK=l4iW}_O`wsI-?b}U zu0GIa_;iU&3*0yBK)h6#d=%_I^zBVcAss7t%y{PHjeaLOVT?shmH`_>Ocu2~+|gKe z6RoV0`I5G~Tw3DU%gUjq5)hRczTl^$-y`dCgm+3XR8flG?+-m_{slm>PMbSP3wQ?yU7v-+{jaR8Jq4b}**6y2jl`V~ zp$?Vvz*f~l?Q-0SCl~6=dm8S(Yg%tJ;u!F;^YRD_2rnq-JpCO_QCv+POTbxuc=jzH z_%?x2n$9}{4wxel=HEqhx2-ax57>&z=hD^)eR_~6qo}`b@O_g?WXP@#rhTU}FO8yI zt~}IK|B`lXl9`EQ>9p%*@}k(yVv;oz#PNs1n|R|8xC*avOa^)$=K$Bn;Uffq{a@ld%86gy(GA_uzd!N71Tfk z^mnsjwb#;%Ck^&z4QUSPF?D(l&4x(wO`;!Y-?zuzBQ(!o8Nyj&7){k@>~;}lZGSdY z$D_>j(UY?yr0)Jb|9bXd5lq1XN1+b>V`kL?J7;z--u#lm2J5->;v^G65>s1HCXuo4 zM_?|AYdT)m0Jq7leUOiVi?y$P;iO$vY+sb4(l_HaYW4U(kx~iEo2hsGxa{&-bR7+K zPcHsj@%&oG{qOlo%2R{)vSR82Rq#*@H~J@_nHfb5FANJE3*B3qECiny&h=9$D`5`Ftf=jJTw885C7T z+PspxO?m%z&4G1~y9XZC+gUL;)^5~#pCS{n9M8NP8)>_68tLa9Z92LlF>Oq0rG0x@ zgk>IDKlD|)gLhvAWvZRo{w6|Va76fFx{Zqb^Ei|==c8>q?%Q9mtb9L$s`uMnrh$#Q{%Fptsg_F zgPK2f?y#qn8+Tokpk|^wg5s}d$1@+ur?Q?p9Q?;^|4~cDd({`0Lfuu%tZ*#8BIZ9U zKrtxWDt*B(Yr9mjkhNAjnFJ$h3QE`0jeTyd@D{AjH?j_W|T)})$arHSWE_l68ZS#>G&@*~e;}&_g@_|3+@YztR zFg=iLLzbmOo<;uW@hvx^TjMy?xb%#VI#vR}^!+*RZN4&+Px&!|ilIz{GVvIvWg5T?%uC{(7&pY7TkJ%C~#^)J6 z@PCWa@anL3@>Ax3ExqvVb5=~P3C49Y>s(g$ za>OmD40XYG(Ij&SX}VAC-#BF}VKzXyl4rjz-}1ZIm4_XJow2vI!YfTu7Ilk&bKtD% zpKxfOf~Fbrfg0e?cMK~2BR11{2YtaoTBg=hXK6gj^|9{roM^A_^gzCQ=riGaA_X!G zKfR}Lh<0FWtefvdZ22~{SDvrxV<+39U19Wp*O)Y9Mb@e#Oz=lNDv8f=Tl|spkF?by zA@*@9VSSC)bz!}V&0RM5hA|`ymHqdCL(&m#V=%gdoEf8g#^|8^KOXuIU75%!bnWG4 zQ{7YqE<@~C(jd9}7>4!}wBygE=&C8GidEP@F=|oj!$d<~Vg(|_rgBJF)&bR7rQD2f zU&-wOhG(xNkzv2S8p5RFO%^T1fxYtS3)SB=*mSTr4;u4H!&jlbygdzUTiO;z;n(Ys zmmL|b$SXr%0=H!|Q1vk^SBqYz5Sd0;P_eTkcr+&MLE|APQX=?TyrsJX#M0Y_$oyct^LVM(Rp7^7l(uW0E1%F=$ONTO3v-=F^byM_e(-$PK)7Q$V8N8ZO zkE9}M7|V0c=ZYl=#Se5frp(NuACw~*dr?m}OqMM?vCO@RHO9wzA}5`jmWM>cpyVcu z)WF>p3h#K^SCsu|RMTI2IGage5os1wF$Q{k9cW$6jqiiqDO1u5V3=DqjuaZFm z1R?&7dUqY%c!r3@h@xEkSDuGwI$cy~eyk+9D*V)7U2rTg`b$C@b|K{^T<7v{i{mD% z?6;?tn3u5F`eQE(jBzc7*K<$Cg>UyO1iU)6FZ#t z=WDzn&n?XC0|)O!Cj}z^{`SF_K1%yEMdO>JISOXIJGGg_@=c%oFIh>+ZcMY%tnMjp z78j-$|8~=M__o~>Vz`Vk)LzcnQLUW+y&3&6eIM)WA?~9nTlF6NlhQDCj#X=&9%Pf$ zEkY8#WJ-8ig{GkF6{q?Xyr`Lvw2A%tjQ@hl^`* zKacIcH{zzc#Lm*OO%8=?tkvIqx4EGA;6vyV!e>UILb2lx@H5^2p^*lqhfbyFzB83p zh0c${B|Iu%PN4k0fMO`-w0vNudsrY}P;b|MfOxSDP;s{Qy61UzYce zEre0Nc-UL>Hl5s)Bo(@l6PJbOb6>JBMqjr>hWl#a|6*~*A5yY2cbimRrYZ7a;#3Pz zBlFrwnRDEL(V!yee?UAG5X`iAo0&NbzGBb}^8kkeK;suIG^|_aIfqWQMvs}ks1zs= zXrJ-{iSkDMnRb3oq0g~c3Rs@Li0nZEOX8W;ZlVg#tyh|8rc2Grp^aU=Kk={I=MGm) zqr&w$C{{jhW^YFszd}_ql@|%o?m8C~V;}kPm*6W5c5cnp(}m+u7DJO5cdx$+`amCO z?DaeR1%Mr(1zirDm)FNRHwQ3@B`DaQ0hhH6Gppny0Ol}o7=x+34`?Pi`4(Qz1Hc0?HAw?R17e(^i$MJ)_M$id91_ktTbkac0A@i4Tp5wYbbo{1Q+ zDra-p`vRH24?e03+W8K?-l1?lAzo@p>|*{omnfn(x>bj2#dl*$ZtlF$g3T3xk3N(j z=<+Ze|29>DOzbo*%)IAP6o8l7WE% zY`|69}p#pez(+WL`%^45#xbE-Wq<0ie-%ufswj z>{HWVH__dC1DoADHKhriIt_e$0vLjapxf6h^e}CEUI}J#WAOVhK=4iiQU~`&O+>^3 zjP?ptsq2W$m<}y3o54r9HoAiWoz=MQ`3Kgv*49Db%_@cf;yn-tG9{^64@j&>5IYHo zbpb0yA>hxuL9>zh&#BvPN&qHVRL1R>t0WN$wLq z-3>?Yz_&NVTjte*m>DsjKY#AEsEvq_d-kjxY1;J10*oC>!g$;xm;ttIG(7+=1m(x9883!Nf9c-~xcUa)96Ag^^KaL5M~X|V@%1gQ@TL$CjS<+{%x3g+{{s2kpuT5FC_&y z@`D7dydy1t$7#|8Hr31(ee`ds_owI%g6}m0@2ZrSFq9&PC<7=6N$W_1+ui z+B$|PHDA6Dd`*_&Irk#N^=i&i7J+Z!8%ui_Xt5 z?a~blW;hAhv381eES^0dVOEw_RK~L<8Exwj3#R#OE{cJ^v~+wR+`dmS{e6DTA_oS3 zNIwOB8r2mT3fz}wN-RI?C4T?uW4=FyfLb7SOU`(e7 zhKhyY0AMyp7JO5R%=JKYv|k<#&HWiW_lE-w!eqrW6POauuV*kQ4(5MS80;EoqV$z^2a_dE5o+%W3T zj&c4CoV(0HR-gafkp*Los_5Bcs2l5`{KQaXiFkD*hG7sVC{*_QxYJc$3u}hCtiUq< z1gDrer0jy2)s>P7CjgcRd61&AcPLck34v=!Q8er zk2Bmf)T=aLiu;9NysCenHzO7Zd@Bc+`Z;*WfJfPIJB&Ip06hxsA&!h3l4amOpMO0A z;@*Sgcg2{zy!^ejEO{s)9$RXOwK*^<409gQ2tw4W)q5ZMFrp)J-O-?-7ke$?Ff(=x zu6o3S0)Xy+3mdT4Vk>RoIskawu%FDCp)I$fb19qK^7VUEaKV*NvElhM_hE z?zndUJ|vhfW;SYm19?#k!zHl6(mxYtho zxaZXiZGjE-6rQ3YQ=gZ9#aYV%%Xa1LMO|p?!NVg&ZC6Lxzn~l=#t0BcML|1^EVStG zA!I#A*DH`f5cfWIxB8`P*zhIq0X&4^B@BikX3c=J_WWa;PRrJL$qAeyVmu2ZA1?1b zBj8%eNDY<(ywBoZ!XzJpsI%eP2FBm5^^vX~jPuDs80vKf1~e)+KstkIg#h^Zklh;@ zU&KU8v1$&Gavl-U(Uuqg+6#o8cuAp7@xoX>H7jdeaBwiPmjFCi0_u8^!^|HC>LtG& z7El-9+z~PojH^&eWe<_1@P)(gwoZlKC-BmdTcZvzZ{mEYAM1QyTGPjG**o`OB)e!N z#9d^2L7F2VOQ$tgN#<(;n&NdvKY)8_2fyF)e`*%IfHrpI@6Uc&GHKuQwiCVN> zH1Wcca1=+x#0>v6f&&kc2|#TN_#9Ay9~6|exYAPkfBQ>gDW=6Q5@ceCKP9M&4lG^& zmVR}>LCidw3xn=zv1`f`zyl{$q*lBn!2ZQMxxUFD>J~bi&17?vh zzplsf{V)UC2b+{P1_I<5T%Qx54Ozs~aJjF*aX0)o_A%GLCOAs5NjO7+$W?E0Hg;}V zPnH}rmiSqsDPLAYcYs|)`Nn^PStTBq$#YZqSv)WT9sg&fvJPtvFWs0!z$$#=G zp-@CL$~1}`_kRT41i)PU7w`x6LrX*~?DOAKD1h1IfC^Cnt+w#rubOcJ9WXOT$3cZ)-7vNbD(_h8V5F&0=-YPNSsm@2*cv=1c}C+ilDFiZTq4K z0v!VAol|E4RoduA88nJ8;mBl~WhAjhq08`8(&7(!=)H*$caPD!Wqv0|`taM%k=Thh z8_YPd-(1uJqcPvr7Udb9+HTu6)uZ@`F{thbZ*pE#Pa}OwkfvnnWMPq? z)YsX_dNEMU! zFXe#;MfYLH;nA>r1~2S?@Ilxi@rLIhHpWo1%O_VZ!Xxb{~;RUD8#k#p>@}fCQ8&i%F5|%XOE8(qY zfBEF@Wu@0tQ$zoNV3fGTcM|2Gj&wA(mYzJM@C#L(Re%fqCrmoyfK}&9!N1zpk7@)t z<&ueJySlqq%L}Pn8T@XAAG!0Cj^nPQ(^b7Z%xCuc8!6=SDu~hNy}oFiP>z7d>zk|U zpC{?*7?COE<2@IdSPgYGrKgz!2~5%|yo{L~gqtA;PA2Q=9h{?t^0*HQJ_hU12YD2+ zKB^T&!a$Q@BV!I~t=nJCEjNU6eRe#y`rdu|&%Yl|=R9I|CR4%$@d{18{-m0po9)6j z_4V+PwY?s$pc0G|qwqzoa;N=2n%)Acs;zq;ra?di2}unL!sXAoX2}bk`Y3Nw)w3dH;>j8(=PP64E%OCGcsMT;^pxf&PfE2E^`Q&%N zCtqq~L(>jj7Ha_FGSH6IeLMNGX;n$F%zG^iw%hlyj^F24#46p!`H*^geiPl)I`y=@ z{wuq>QtV#}dYQbg?i0M}II@)nqDn)cU*X%v&MMqM4|2NQEI~7IZGylrWF*)=+k!{) z!Klxd(Q!-OMdh`BWWVCQ2ESd?yY_gTILS!*$zAxdm*v4a^zB$=4WyTUnHdT4Y|n!V@IA_9j1g=Y;dm{<5^xUMb z_!4fQ6?iY0h53m*j&ik}3Izp4k!&RI09EJLAM#PC5@SURy=_^h=OkhDUT2S$Q=1f= zi@X0|xO3wry&a5yjQ(uneO>AZMh|hP>^D+DC86X-GYSd=8u9_kALj3IgRwfj^(B$_ zAzGCjm-`BOf!2Edv%?WfEylMJQPNsLOxd3Dp+!S|B30`};*p1FJrDI1FL6I3Co3iLFlonvC`dk z){PD4@)Yj-V*Az`?kc~_i{J9O#?7fU9ptB~X&E}Fs(BAP+#ra-SL){-@OUnr-G0U3 zqq|jt7pgq$e;cz;OqIu6x5vt-u;*@g=a%m@Sd`99(EpmHqmA^h|Bg`ULF~= zhDmqWB6t;AZhL)oOo?)w&`Rpc#~u2eR~Ja5DW7z+icHq3v7yJ1&x4S!Ji!NOqDIAH$Rwm{exiftgQn?`O(3K9s-OyeQpf7M9e$jeO7O&n zyv6jhyHV_xQcPB`t(U#eW@1}rCZ;C8OE9c`2e$V0jjI8XFW88e#Gu}r~0l8^VYY!Uf#* ziEtSTt+#BRCb~PCn8SF9%AIBMd~109uamnon zgYP!{BRo+49`kh|yIz=v6WLdDT8e^u;lEPFjg}=zVGxH!w3bCM)jyP8|M- zTz_eoXGCny#Zt@D!#U?*O`sZ+&9=ir;6DCOxzpRWrQL1o16X%$hM< z4D5>N7)22OY>o^Q^YwD6|# zU`81c6$j70i2J1_myfa){Dr-8FLYg=#waUQYGAM6m_Q{cE%RXJPR5)G6gmga%^s;2{ZRm34<4a;ir zg__Ujy0@+9UTBhszYITl?EBou@>mlEc3aY6V4kRt@yq!ctOO*HClh5A} z5E7I~@zmm7BUzm;MH}L`>YatL#FWNDNlb>TsH1^x|2N#o^9OJ{`bT* z&022qeTf6t0-k`w&3gTUnSg`-TO=fM5g@{v1Zl`hKuPdZWmLKKTn^9&9+RArA2h5s zx#5!-qX+##@mm&8YD|Szv1$8QbM&Ys-O0ybIUaGbX<70T$8^R&RRvJPiBOesIVToYf>v z#oDtsHD*9dQSw;tR2nezhvJ6m^~+I+?hc4z{FXgfP!qm#i~Xn-tyFwKdK4tqeeF}K+eU@v2Gm&#IB>w5W@Rjt+L>5{YB2(fL|c`?^Q z)L{2qgMF&;cGT`L)t#qDB%mf-2enx#Tj;<4zPA3TZr9Y)MYxD|BdKftD^0F60CgZ1 zW(((M;FAM2o{5OZDjHIhgQ1QEP%vH}0szJ1wk-1hiZ_7XQ-M%~R78lfQ_lbIf<4{w zWBP^`G6lc60Dw)+@)pT_i4F^ZRpRq~DiUgDu@%?l76eK}%-YaapsF_u`YDK%$j}c! zT*WAbTnw9}5IezjgcAl=%wbd?0rmpVkkUjgOHA;y{m1-R$_^P^`vh$6p$(Ha77nq}qX z-rFOSP*02QKFSo)>h0;F9p^NDKLI0SH~j-{cslg*hdEIeXhPGgKIoKaoP+qZ%xO)M zU~C?)`o+taDXKqyzGL4=*K@?ztxr3X(`Ly+%b=G3bE_oaCXuNM`MV^gpi1R%sm2$WFw7!Xz#IDEWG4;1w;21eY%BH;22OZb)G zt@8RSATq!}Tv!PR3POxyQcxVPK<~-GfV7hAvjbivp=! zArPlCRbNI&m{42mI9yNI9pxTF-FKZ>#1{m1|yy^}%To``G6GJQ2PK zL1vF(4fPw&vM0nK5k^&K4X2lm!ccuX+9MJiD z0E9ue${T2pLn7AS*Khyy7=K zf(VAWJ6V=PK}(1IWRNqij*M72PevF`=dAD*-6LE{&Z;H;p7kS*)obDH1(-#KgAFxy z09uB@4h6(9Upbu*K$3%{hh=VV4ps-KuQ#Jgp0Nc6#`fiUwB&nK8>K(#B; ztoII~V8d_|jfPc>isJb`5l>$f|EYNOHi4JG|^d3&;ouFkJpRFkV z8uO%$g_U1D@q72L((e3LA^hI=g2ptiNpX07GoE(B5jcf0as+lWo%nmK+V_KJz9g6Z3*j5g1OJ_|6Aue>IDd-8a)9gw4UUWwsMvc>W2ax^hM%Zg>Lqfz#JwVJsPuhb>mdxE7R08GHj}+%FD`24 zoFGFQ9uxCYP1 zi&UYgBVXoYo-Vf)_4VZ2w50IW9mWOaG`P+ zoZ^HLHhXV(OG_;;xKn%DQ;%J4A@#QC@T_1iR%|@8lAmF}%Ek4yeS55YTY4C^ewE?{ z-0xX`U*UL@YbX|1EotjTTpa;Ul<%GPNO{%`vjIx##FxAjdF(2-4QSRbl(D31N*kQP zY33cz@c!xkm|vqK$!Eaal4AN^!2#ftYv(LwRgY}>GD}Z9OT4M}iiw!vSW;sMpdtjn z>|$x~_J+>97OAV!Fx1g`1)j8G>e0We!&g;p+sN7eXc``K>!-Nx+YnUrB>PN-u^@Bw zKFfsZs%&_dA`U8a*jSh#rh?=N|G@FYGW#MKjc`JUbChG@R@R_DDljlj#=F-dKsgCH zlXoj=owqOTdLqEW%!qCWsn~0(K$h|kEi0Qx1#qv)Ua8{#4zc`@&IK# zfTPmar#DLz*J;Q!R3%fA;JvA6#aAHbU%?pYK<$pP)6tP?^fsiLEOBFYsip5|)8;m= zOZmtF->JR)yvO_6Ql*wS-fH8lKo%?SCcYQd3T=v~DIXT^s95GoOXx|mR1+ab`8ACQ zOYe&O?1 zrwIIygmkuiNfq!awQYTTavOQ=E!T+P-kLIINY_lqXvF2dMGu+dHSQJvNv`|y+%l}$ zzqVeazIV>?QDl2~)E^8~PL1yoe%0QO;Y%u#n_ZX>-=N<#nF~Z9h}+G)19->XL)%$i z5}=L-!YkG8p%%k~3i&^))@$5LRjs9w(xZz+{F(x3TTq^^{S6UB#H8n+)?CFE`_ zdJo<-H%|Blil;~0H5f8=6Q8pWDyfY10E|3H^jz~7_v`uH*#M%&bFTF`v?}2sB~94sd<#lPQl1%2Ht&GZq~7StrVvW zOR9-Pc#io3WL`C~B{kD3w<12Wjj)w}NHCDrc2%zZBhg|J8({GMX^Smr1AH#%7b^ z>K4z#WbBodi;fR>MC#y0C6;Y`-{Svq0o*KO`D3kpry1KT9)7%tunwVE4t)TQd z+kXtq$3u*N*n6Uva zW3+YXgKnGUNuap#9)GIi6N;qoK6vr9zKZ7(+1D_*@i?H{_1m=AAKj*fX+^QMR47pX z#@h&XrX_&tgV!kB@WazFL<_DhT6i#QoMgI1FJaA*{hiV>H@~`38XvIb_8Tv1mX#$Z zYCrBvM)f;-E-_0>%U~#6ZL1VoyVD6y203HvWUkk{tf-rpB%?`by+se2t8IegAJc?v zQe))zpedXx^}y^6gL}BDWiRVu&GO)fPqkL*R&(N-cu;Lm3;Y=w89nw4-;f^YDOI+5 zgf91}=V|I3)$?|KQ}*7QCw5_pGU{EFqpE!NMJ-Qr7;9W08%>)l?Snpkx&6IO(kca} zcj%aMX=GH4zscvnvHkC$4P-a4Tdl3sW7WGIut@^_$1kMYpwj?}Xc~w?fm-D|Q^w-` z#<$Wa0LqhZP~VjeKWPr|A+YB7K1pVDkJT8xTt!gtuYFYo6k#>^iPH8{C5xI7j?Ch1 zKDC*it?Nd3<|UkaI5`-z*SFqbKdf&Q*lMK#HVPtQg25^K1NDg}a8TjgFUe)vg5(c; zpRKsn{^WP@!{<2C{b@0k)}t!W!L4}}{3Jv1gl9lTT}SloS!IteMpwm@;buMWZFm*q zVXB`hTAm;8Z;I-@*5gexrw+8gNm221Z=b}Y&#vI}MYva~z*h1Tz}6|nd|1F4)gCSa zB)so(La)-0wjj_v5Cg{Tk+lEmNP%g?L--tu3}SG1Ty56n#vD_3w&fwt>Dw1N3RmN%9yF$^@(p%%{#+Dmdqe(-cc^i)v1l<=i+ znhd~j8nyY9P1}b7d?~tK54Zt>1tBeW@XAE2ipcG_yj}~k!}G9)e?J`0Z4ECbzI{t6 z>ct3NI0CMVWMR;lJOB=v_xX_{SU-(IK@cchXA023(D00-~ASxol|zi-`Ows z+E>mbaY$MVwrV7sYo@cNxS#A-jg3mXPP5FL)7~to!e)*>+%$R4)S9FV7)URehC}7h>7AQ2zh(%10tHz&;n@Gu%^%1r6%6+FBkoU>qsR$zeguwh&MTr2o%pQh&c9 z2uO@|3obw^LR@m-GSyX7qGiXBq7Cd~;WuqTa|i6O9HhPk15`esa)8Ko;k{#GLDw@I zW=2LHFtri4y)EYR3gMk;N$q%R05}r$#qCLDv|=2!p5-=!6hfQrC#l(arbkfrxL1Zxgj{SVC<=I$){IzRwv$FKO z=bG|uP^()?M)bR&P26O7(OPaD3Owrb11ubNDWhuzV7_@grT6U zwGTzPHnkTjoxAhYN-a3}14Setkw4&pB>a2~)~&waV|>;G9G?lKy1tBf@j@&cpq)m* z0^5SmycEyCiI;W@aAzH9Qc_a7-{5gvhH&wQZElPEYj&M&(nBTY7y6TzYGSPpD5xN5^=l)%Zm_ zD9BPUejvC3z(93Rew)E~3<8c?X5JOjBnC`~Cl|lKvIij4`3C#=jmLn_(RO_XMIBJ8 zz(OkN=VR@uEsJ+=QAZ$U9UmXp%Kk%@3luDbuZge;#4nGgFU~8bRY$*sAh*vhDJh8t zfDlj6UzgjUXamRUQ5YyhqKFRPa09%15jW_C#b`VPp8@t2W-d@yUf07y#Qgs2b!GL< zCm$cjdXgu3CwP`*O-ZjZgmDUfp?tKM+o-$|h?&h^%HO+bMBc=Kmmrff!OlT-_EHL6 zj2=r4_me^OJ1vs^{ZChuq(fKzYcLO&eWukR80Ag-@6HTR<<$fBXKFs$Kpj7_12?z1 z;6Ao9m0(0{bXf`jSTSIku~hso&@pjDW+$_D7`StIyTKhP4P0XZ@w7u|aehm#z!|y` z1`zZ;2Jyf1)*xlHcm52zIhi>6uKGiz))OlGKC&PSkK52W`hlkPFs$LvOVl;Ac!6`w zVoPi5kW2Nb=?r3=sKcZR-|O+S=S?>2;XlaE<&9pnOdvMOz(E^6$V^TBRHjpsD(FlB z7gYp!o6FL>|D+L%BRU*Q*ohINIgn~nsNx!YGHr690tcZdGoxpjiNGr11ykYd;6vrX z_GrFa*jhl7QHZ~-4lKam9VfRz82P#$h+fmM&mtz+=YM~y!m>mx?-2Gf3{d2*6l_sX zP#wIT7Mj@7O2Pv#Jm@USmGvyl?Igm(@xPAVVJZ3ZW8CeK7FAq&_iQ;i@C6_eKliU| z4%rph`{Zu=-p`37WI}X?Am-5-Dqau z%my?^a}GLF`i4>(e>B*?HUVS24<^c z?Se}%>~64jUm$eLj-V&i9e<4xgS$~X_8CgAG3$Vm<#tvVq4LF_7UMk7qC>ms`Yh)y z=RiwW9>-WsO#wUc^kFm%AeAN$M2$QaSx zEe%%O!T@Q;T2dn42ymna5U^nS4g#ci26P+mV}zO%a&=~(F66qqPa~Fy3^v5})DMlu zN~7U3ks{153!tBA*uJI_CV~^Bcn&x&Z<#7oLH7dT-9yJfue85q zvS4To>hH0wHYbq9f)f`VFdGri26&hcwm&VTf-n}iKqY`@YwXm0(D{|cW|`w?(%3+g zXRRA{K}k{JO}?0`i!G#pJ=B}{`G>DiVh82XYih=f!##El;qteD&S9DsnLA_>jVk^9 z)5;mwHF}5bmg#KsgMH91$CA9cQT;A>04&EX!Kh$Crm|X}?a&mVo$7V`0W<0jtD&vo zj*Om}J?McIccVva+w@T`?Ga*)EjqoiA83SHAy>sb!v1lQ34r+uXYqK$G(r4_PW*j9 zf~YQl=R^2FPp{kUQGBtcgA>aG-O?>QXHp!D1JN2YRCIS@w|(`ZEG|0A%ZFLw z&BTEC1Cnf6vF}CX7{Mq2XAH$IW_SuA4x{M)d}|>++T?Cz94WrP0Oi zD+{@0&mI#xsVEp`NSm)#h{p@kj9~aFU=thMl#sDHHnMoveN-wP(9ZZ2N-M+7!sVJ+ z`GYsZyaVcC_sRtXlP{@;o&>T7f3I|%w_l{7q(^!8|NT*};t<=(wI9Jo|K=S%v^ZI? zQI{w~Z1>5d>klHBS#Yt_30&}FiVE<3`+VGD1>+P+{tBGGi;uZ)%H$*QPXSLcjhK${ z_pMMy@(fr6ZST8OcZaT3jpY<`ho*N5G}9Fn{k)Nag3o=F6lBd2eLo@XZetnSOF8f| z{g324+UtBoH009)7u1*CHXJ?g*X`^GVm5puS@V~vs2KmT4vDa_G1MFB{pL`>b50$Clf<5AnA6#Jw$c!Qhb~rn&)}`jBPqx`5pZj4N|U2ztLcg z49=h3&u_pJW417j-;R_{N4B?LIF2 zZE!)~^OiP9@7U z*67?iN_A8MeOTet<$H?XBHt$b;hU6|pyZmspy`cfxX-8{8y<=gZ?fhbz#q_IX0LN@ z;YA?hu4a6<@R|$hsdn;0nWKxDxbADRc|c*Xd~{WcAFm^`mW zjm#rnYR<_KCFLOHrNaG~S~Ocb-GmRDizF?=FvzWz_F-%t;hm|c=w*0PXm=P~>ZyYD zG_^wk`nX^{8KC^AnoJgf)9smL=d@3v@<1_lnx$KDD<;1d1%+wNnA8P#( zzq-F}@^TT>xIt6>I9JR^q~Fx31<5op%`v?R*SeHTlxu|+IXFyJ&x8kSL=z`=Lc)_fwX{(KjLPkGPf;;bPYdz?;c8lX{MY4*Sbx3wGKIhKQNXzpdk&(%( zDe-m_)DrZS9=@RayAWX>)?WXjAhO@dqrlx?c;{n0Qi1mmW2lDO#= z(R*mD(nMZoaB+Aa`Lkbw#TwvQaa0EHuW}WcI%UoXCEPDl8(Sd*Ii)B#!6!r;yp87i+IB1mbJmXV_Ft!#EDYbEyOupcv&&RgD*%oPfKL>}4O@Yb78Pc^_^3rcWZizf&8{ zy+3BZbt82cGWGj^y-~@@AD~Y$psmKGlx`#WE5A@v`_Q77iOKD|g{aP4AW)w+)m!-o z^6D0Eo)#5evXpM#Hs5yQVPw;Mm!zv;#LKHu;m_7V{34n!_DI!uoWMoP(Aq%Kh>Q^z zrLPJTC|~neEU&afcphy*F&C4Lq z4mM0I9F}F7^Ohz|8Zx0wiCzQ!mNXy*X>-MS8dhG>`SX_0b264;w5zQJDv~K^kP+*y z-I+ue|9MCtugBy=7oycX^l{yf7h%FRk~rYY@>j=|bM}zvt;-qaSXuY3qkBz78YAy2 z`Ypb(c>zN%X6{=Bj%+>XI#IWZ?ggA>@ndXZWfR721e3Mw&3xJPud8#Njvw^i}HWusZ}zjHen(iJL6D_U$UmKTZh$(TpA~5uzYy!*v*=u%-vqg zbWdNjt4*0!re-WC#J@qzfR+O_<&hFFmkcnpoD-~R*w?H2U~;QMbkFU zC~7w5f@z4n4c<>l?kJcW((3Q-9&LIF$Vn#i&fcA6CgjV*OfR9=Ab+Tqn&`5loFY$I zs^UOK= z`uYLo7t@G$OYqW7{Kk~*yv#jJTT6t4frCqTJbk@2s`jhqFB4)$&*~X&*jh*v|Gn~X zeIdE*jw0b`xmN zS7S;2alWs)+ROWoB!{f|VDl~CL{;GD?=B}Zd_UvAvQJF&N2qq+`7&gmp89_t(1v+R zhP-J_n}o-cJ;6>y#UMk*OY->ct#N{sz0aE8r>^bJ9c({pmClk{e^abZd#oYU@&@&v z{<^o_otY{O-^V3g7+nEPJuXs*cfuY{ju?;bb}nOGe740WPXwH1?Z*$3IVVFy(?$@Q zynu%D1J2=T%Fj^Y&5*I-3!V}DSvQ*E((92;teY*Dk0bbMty`1cu~PK-74E842l<*( zTy?1_ft|`*YBN>_U8YMD`Q)DCk9eqX-oGIHNO!JgbruB3I8(Fw=|DpEqZPYiiw&OPaHe5PoF%reO?P&7`aOal0?>zj&jfM<}iptX681s#_|M zg&b~?m*x|TU&Nxx2S3V!*H-5Wpf$;YD;YW>qXmxY$&L>cKJk}OEh+60z%?rK=Ow^PU_ubsjh7a2(UERGlyAT$>keT-VWQEJc&4S-ykwrywT3^9raojD`{ zGi0m*TF4IiUc@>6_3R1w!9hmT4allm7}$z#<+!%RoW2fvDkKhQBwK=}SE<k3wbj5JN$bgsx0}2G1lUp$_!VNQf)qzYYp0Ac=hJ`giFL zGBg?((uXjek%x!ya)4ZG5Baaib;4su3@1T;iKdx5qV@$$o3?egft3i!(D!+H-@xX$ z6*#60E(H#Al~gddugG3APVJ+}!LbPqLR{H?{`ja^bT0WP+qrC-Ey)96|1yFZ^ z$K_3MF@v!m0hRL4Qz5f5Z6**!lp)(#Rc|hWUUK09#1IT-|H4Y6 z!{jp{&m90M?f^_iMRB?U{@A&-tl=O?OZiPIDrNXpU=UI=^uUaP;IwT39|wnr36#u_ z0q$Sj+Uf@u<|i0z#LOHbl^~HRgrzQnfk7rtR-)zF^T~WQG^f1p&03f?%0IsUMV>FH z@v;GpLWiV;SW|P>-;n-*BtQ)QL0m%t349e5<@sT$&6gb}0w;_Yl3I)~&|rTn*2uyy ztPw#1dcj=}q6lbUL$U_HMdXQ6zW4~Ry8rj0lvA)pH)WWHc>zN$rvFhi2OYs*Vby}B z%o>!l&`{ck>}NC{mwBGf^W6%3-v4c2fSBrlS3N|;83N1&U^W990JA;tIRH+g?Srn< z8!#utSPaZmA#1Pz7tQdDR4yp3*FxA3ljt=i6*trVsw z7~X5bWI%HGfYS!X0TO`f!kviV1YDeY65Wv;fdvWJ)zNUl)8JrmN?SuBL`GkLM}Y|8 zA0WOef(IUKs}O(DE*I#0U20^^`aa{_wtBcTukyov6w8?KBl+X^uAgAv;IQ1n zn{d?#lKVt3jCjyVf4sMl2=vBbTfQY&1*4~%!8nLp8U%oWQ1%TB9Q@ZqNR41yHnpL1 z*3X8<1%i-5nguWkxnY|V2bD1>gRi85cIa;FrClD3wWJXfyd0$I|$7fY71NF~bKdW3*mX>ShlMK)oj){1owp98CjnY!>r{X1+nbWsi~AeY(-8B(8Ca5NC}-GBaxAjQF`=f+`AL* z6`9Mx|4&Ft>Vx(eexuf0CkKHU$p*ahJ=bKe;-VnG@-S8?cVE;x44xe_Igr^4fMc0a zL$Q6xcaW36!UHqUk?CRpcT>0Jvxa|i@7#$U)@yoV--XrO`(cZ#bk@IgXH%Y@>!#qT zdm6?*hExmnWJiQ+bOYlRH0CUU)hXaS7YqArVp`e|qO%S@NwHf%xY0T#T<^R)1ri5% z2%kOYt`>OU6`K72xB$%yE;hE0D(gKvU zv2+iR*v9Ivt3dEs?1fbw7W3O3j39g9v?vZ%^2Uu^@7O=lNlC*$*+DF?;G`621!tLC z!e4wyfxv44`J9nWuv|A_5@(y+wNiocZM@_;3lO8}B_%t%|B@g4-u3dAkAJ8;slXEY@f%DB#H z^CMw+a&^y)DEI@h>+B^7zd(MSbfJv(CqW5Ms;McwQfj>=vE(5I3k!=*bC-W7q5lTq zXd)5+1gwmUK`{|<9ss*hYVr58trj@l@fAfR&)R#Mt!@=V$0inJvq*0bCh>C3c|HpU zCMFde#(=eqBvvc~stx7_6dp0ZkOd0a)zDHnd9O8#p<_tU5b7wEE$Yo2pZWwc``}Kz zU{Hn^)1h$(qV}`xOmv(Zx79#Ki_lep7C&_2LzMjIa%+IyN*va$8T7$`5U&OdWl>Om zYm_8HPmK2~!JB8>$e`^8$S#A{7k1))5To}%vu?GO8Klh6dqz?YEt{9h3~FwJ5zIEc z7!biN#~fB5vg^KgB!!66`ywJOo9;59ryPPIUYlLkR!4Vm+b1z8xo~c<%#bj}Sm8Br zdmqmlGynq{QVKO-E&solD#RNC5Bwz*5P#NV&V-L8;dqQ3#G#wI3g5*9FI0GK70-Ak z&DtxQucAXdW*ThGiJ6(PU))YII>Vmr{O<-x(%_W<;%SP`i$m3H@Cy+C+yUGA#X)@N zCfLg&@uASh;e~cIv^k1~CFM6YHKi2f<&gsw@@GiX{TVg^#9)deVSu+99Mh4+5fFsO zBDqHJZiXi96(`U2-c@MTbDaF&GKCHL5bS{JA7pFnLNfT{fr?zb~w1@Us% z?lk@hIon8p6#BlXXd3J=DPkE6%nE82617)ra!>a%+%w;6H!E8&~Z!wTxV-=4?!5$(9SwU-bC;X{Ggylq{QQ&@<7RpbP$msB)Cf*&}z)p znEyVDH%rKQ@T=wCBZd&rjvQ`2qu3%{g?80F0fG0@Ir1Id&d?y~T%JZg47y#gvY-F& zfjEGZD6H8}!uGU~!wH9aw3f9OG?bFTBFOZCCo|;zB@7+&6oxGo<}-38f$r@(xPolJ zyOHZC8|eMJ0d1V6ci_s0VQodl#}C>ycwQcV{sRYj&wg@)%@|Q0o&?ygrW>6Nz)rYd zT!#!kBOiP{$RbAV5KcwFc~j+6BYk{MF7ug;;jh#*U-Xu)3^iw)Xa`Chst9&khu?d4 zwS3D-G}6*5W(B9{qYRcj#OfJ*6J#O3#`dN5cf+S^5+5d0-~=}saFad6Ga%+Ie^q=Y z`ZoHX+ona=G3qIqHJfbgpp5^D^^P)y)ce0-?(W#VJ2Ci$xr!TK+4Rl*;}3tSs>X6& zyq5ZRHl9o;ll*a);5V2=eNXfyh3b~$;<~eqDSp1>%%TF1pgP_h$8NMXDUD#ieAeFO zffL(|OzCrNQhLD^E^Y(AWvEp3ZmGt`e0=2V)<-Lj@yuz|cbT-ESh``kj78?}9cIz{ z^}4*+WZ02TEdRaEqxuu>%kU}4{Hk8yKXv;YPc&1ad+#g zHFr|HW21uPIJ2#T#6(Zb7a7_RAAfVpK#ivrermEz6^)K9n$;t||)4$Id z$LwdOiJE=KKYf~K&iL0p{B%os6@(Eg_=*F zrM-09vP?1v8%`M^x2cLPr)XBlQO8YURqLpnxkF7~^ zJGw!YL)zypk+x;PU*G%k{`vC64OZu`4CJZq@)@;L)#4>?E73oqe3qYy^Dd900lSvL zFD&z~9|t^>&Uo%u2l}gR;`ft-NGQ>4UZAzIEN`C$im_fSwwNNGI;Q8=T zbhk9oL&-NwMJj`)gGS|qaW_ayddos_uloC0DM|Y^*Vr?7Jl{Q*{NtCYrSX*5_C<^0 zC(-03HLbaUNL8sYTm#4F-D>A-N4G3lCJ0Zd45RAzKD@p7b+>Mt1fD~It|RYjjX6)J zL%TN_fo#k&%s7`WRC|8dUa1#b91UnRJvYM#*Y^%PgstOLrifmAv|3Hyi;d>cx*bK3 z@|n9sh*=?S=9iCFkrYZZ;#W(kV{lZhT7;gb-@>=iQ<&i8LVCurbjsm-8 zv8L3&IpW2a@nt^yL12&nidBvOxxbUfodb=ukkvK0DnE+i=#N;^0$~+5&xfz_7bTJ^ z;wAm z14S)rvZuazHtQ6J!B!jzMf;Hz)Uq9-_NJ44h2RSPXPK>sI9F-{`^5Cz&LX*|JnTi~ zpKY>OM4qV0)Gs2Y<*xU9yu)fF%h7UER7h!r5B%2E`0 zx3a}`lu9pS|I#!sOz)LEr|3GJe?|M0MN6(m=<=s}Y82%>>3jd_o?ee!phXCEFVlWx3X?3iK>Hh;BB@d^Wnv0_!GwS4QA z4@&tm+H2Q?WIIo;@8!@%rjVBM;=>4E3=`*6!T{?8GBb^#8?0)XQgd&XY+$%+&imU+^1TnBDt`-acKxXqWYJ(nGWE zoRj{{?GxWTJeUF$GKtig^^4Uv&g z4z9t1o$4y(xh4{;`6xG??ZI*vA)o@*RR@VioWI zAl5M|R{7BV6Hh&CG5z6}hzDDrRcqqaX3SoEG}d!_gqL#Mf1LO@GvwO7#xOUfbKHLP zqp?p50^gZ>=%jDtzQOxm9?VpGduzIKH+XxPz!jQX1aP&3_#M|1k1=XW4;3RQ&@i6# zMGoD^Zc?5)#w&qaS5gk%y1ChU;5T4=Z*z*YQ6?iMW@#q3gryn%vFGp5`a7N_Q&ETC zIUYQy3~4&8+90*c?C`g2$Kx#*$C#lIDcko6PW_;-nUOj9{+jS8QKGxb`uN(+$L=7* zXM1`I%uY&z&rM?Y0_-ERrF~cJBWtkdDh|Kbbk$oPc(iIR92gtwGD^}9SZ6MdV84_< zZD-@g-~!sQYjCQ#q2YsOO3W$GcTL0gZ;TxV zkxxu z$Vl!rQY*q$52v>Di^qg!2B!laCA!x~2y-WwuMSloy1wAlHc`TBmovO&pYm<$G|p>R z0)s#|?aQv}z}XMg4v3AYai8D49wJy_@K2dWK*VXz(O=tH@Kn!vPVi$Xm(flj*00kK zt(mn7BNTeCp$H^occd}DxzTHNm{0v7qMnEz?^{{VDporq`68E5fu`NOT6Gj1<9{mO zgKF_&W;bO`?%h5b)UARqx_<3i9+DAAhq4{gexAcUvpN`?zDykajJk>M^Y7-`eQNNO z1ed)@Fekj}>?}Q*qD%F`nS{r&~wCAGZN;O@NHP`c!FqxecZpGkK z4w#D`y%t7up6>`v3VUzeNIBA8QA{oZxDD(xTk3mR-i~E=>0KIfhM3Sw1STQWmhzul zPaapx;L*xEVq8S5Vi>ao+u}EyRexDuTjxu%5BraSv{A?La{M;q55l4x>5~NFn+0&5 zD{8cbUVDaHw(xrJP0jEuD$WB5tp*&cAX1PBM7)ujl*#pe_Vsfa+BX)Sd_p z46qcyTs$KC^lqQVQfB-TwN?|kVSzuWwTPaB_F0bEsbGCxYfE|c?>C#DKjK<${z@_r zRo{4$AB-1FnN@fa)LSh-TMQ+6DH{|a8xX^|jd*zhDLR=>zcsXpDU$P5VuH zx{8AX3xIEkKOdM*J_GN$DToY!LQmh(GnpJ7qe&Ab4Ks5Xi(_|k8hS8#>1eK^=N@Ck zaA2g3PFi%i0YwMLZLVAEJ^s>3tZXB38dH?+^HnGWL<0c96WS!xh03II5lDV4;EYTB zfnrdkLYZE_(*oTeaR4|o#nYZlE(37W3J{qiaFGF7vIUA*z{SPYN!QMe&{IsvCny9k zq_4lf4&Y`8TM>f6T1L|seL+lqT+2N>YtuM*PJjaNP00GvQ5=m-V_)Jq%- z_`HzmTPfB+7zbZ8&%JrxaZx>lLO7E3;Ip?lw6UO!l7l)7@A`El%k3 z2>hbT-Qlwk0$nXWBrE}>+z2%kGD!e~rGXFMIAhXE?`-o}!+=cbTxhGkcbbh31;^ch zY(I{Ass=S@vCMMoMBmchvNWxz^TOUT>NkZ3Vwr7Bs50(bpY?s}S2jJ$(;jDyR)}O$ z|MYMw?kzjuW!>eEaRNKNBPfZDO+ka3%a9M;=_Zf|Yv}3S0lGh(pp$N%E2J?L0zfbe zyxg5S%x?f53vhC(0|Qx5M8pvI$r3rZSXkd6>1mCg!2LOBn=^J!nx~m7^!}uPiQF(cKT3Q)ky|b{beTOEHgyhBlCh^1N;6J11 zpnM+m{s0Y_s>kh3(3#NJ(=!L%K0LU_>_{JUrLxWyyyMMQ-EIp0n;U=^jvMZipR zf{Sp2Uz-SVnJImvk;Ydvk*cy}01g0i0MYM4GvElWY1c!9Yyy~(=5q#auW3c|A-?p= zymw%2hX1uqoR`S);3v6Ds3~@prb3{E;766ws5tz1`cg+Yz}Y7=!=Ys5yT|SVONrQ1 zTTdm&z7_=K8Y5?tE-wc|!bxaZZq@ar9LDf^+^0cF54M~0>90`>)H$q`q2v-xBd4|SHp1y#Kac8 zgJ<;&z9Y=x!7Jzz9YdPX$>|+2ABXI5cj!xG3A<;PQ!K|bas-F80TgVvPlh}Q%#ojW$WH}Hy z^s@ZuR*Q0Z9iLUJ&~a0IIpVGv{lN~98A4i-1n4f_{hz2G`cw&N0d*e~VIll^-@02~ z0SWg4PCf^|z;(TM_wL>CR_M(nW`}tCwh0GQ$o~@EfE(Ti7|j!b?3xZ{J6RmYPLV~4 zh9KGqj}-B_0M;=(LJ!u`(h3WTM%*MIONVcKxC^|gy;r;cKjPjpDyuGR10)0y5CKUM zM7oiXkW@e#>Fx%RQVBsqK^i1QNogLWyGua2OS(k51VKUOKJUyoGi%MvTC?WQylcHb z)F;lf&)N6h`?{|{kGfF&us8{GX;92i0eT0BWiH-D1OMx66nMG`JuyM165uU#7an*E z#1?n80@?8DF5e=-PT48w6Cqa`6_+FC=8S_k zY2_oS#+}SEqVB({W)x?a!gIct2t6OkaVsk;n*yj0jcc+4Lt+6e22%x)cv)CCvm*=W zUQgtyy@gUV3~&tcI0#=FY=i;Yg=7jLh#NGHrC}_8&d;UTvC$#Z8k%jZH;8QhwL0CNZxn$9 zyG3x^L_aU!21GK3dr-)I*9iy^&}m?z5_DW`y?R9UIQgC#hVS2*1qy)Rp^UFWxDaCd zJnQ3i(5Z}djOcUDHVcZ8)+c;BGl0XnAaek)Jp?RBJ``p8F{gRQKqt->48KRg&-xR; z-6QClD?TgEI#m+0Knv1fMvEo+$GXqEkF%fVA#ztu<#EV8G0uoTjI2(=4$%`h*Oo-o z=A-aFG{+h2*SOQP(#~s&7bSEwYT2=WhRx&7Sbpr2xFHU9BorRHBe3FWxv|7Yj+4(b z<_1{XZBqUn`=)!B)Rv=-hgKS&0JD;g*p8U6|ubJ}Ukw+2L!RM;lcBF6)VCw9OBJU(FMsj78eFAo-RG++`S8X5o9M^&uO zc$uY31RDV^Q@Z{7&^&G;Dkh2X7sFH@Pt4@wG}4eW*xJryTYo`ulf77ijm5Fdcx&$0 z(_fT67-d)NG4#wcL)aF=hG-9+(lc zwxwaw;9WCQevy$N9@Gu|vs}0$V^Kpxy4yU;MQD+z`nVtN8N17e7_5GIBL(~?&jkMA zRt!AQ7SDIYBC`3gk<+a#`TG8p=mWhV%{V96>Y?5~3E}Z$%cnE+cNOwl>T(Y?2w!Pm zy;5?G^{jzM5=JL)KNN?DwDxV+_QNuI&Ikidk4eph$BbJ~+sW)yWzN8}G0)puCEQ=r zpA096=u^QVwe!oO*ZbO18(%3FC;4;Gn3b0FoURxclEI$+O1+Y5Fd-uwL%`r|m1jE9 zJOJ5f(uh}|N(SEHsg(~X#F@-1qslvzaxX$7$ZxghIrDmvQ58(Z(7`S6zJGZsW>;=R z9(NCp(I3m()}VDMv&0b4J)6gHp&oFFL6sT%>vN5>o+?q(=*S3LTSQ>sf_lQGlsI$e zJ6F}fdZL&yOVjtQ?jLdAb&t1v_QRj3$LLn2y6~%3T%i{a4;*Iq_=e?l-5_hOyquFQ zJivLHIyz(S8RfY_;2A;g$uK^Re2s<==aXhe);M5=E*Zh^R<>%!(MjAd$II@ZyvX}3vWD|o)p5`w(6cs0hBTCFtqJR zjlIHi8k3v)n%SXox^p2;l9ukx_$Sz*GWFfmV{N;)+{=mnFX6 z1|3nJNwvy>qCMGHXanQ-xbS%9bGY^N;Md=dDDR!aiKfH9q23gtG^U=t2Q)-YW%z~V z>&j6pTwKL0oL5fXr_5vTs&V%C+-&PzetO_6FME2^*(6Rwv7u~m1`a9DG-}YNEGV*I z8%GtL@seGH3!bsEmFMQk{XTJIE!?=A%2U@3&zv)~j||NgNvu@$s5^o}Gy;BO<;Y~& z9+!P*XD{DzWf50;M?1^fMr(jwpOO5>beI$7E{eB_wX?@3opYDXk<$Tt0ln&%q^MU8 z#rv$G4yvO@u0%9`JfXoXI_@Ic<()DP_TVi|U6y+@OJiEvq(T77b})D7G8lx%OG)+~ z_0UL;HwZa-Z}Jz&2stIjHSxL&!1v-Lerdau;h5a&wI4L-+n~=S-sXLnE;uxFZ)z1} zDhI6k1!We90|=!!YbWjk=CkhkvlZ(4WGo+P?g1)p8m7!cUQ&Tf`rU(mEK5N|tFVIq31^r#X+_!eW$lf`(87@3$|Y&6ie$!b|T(J~l5 zPc`06<>4_$5nnf4c`#rC*E0hJrl{tgXKzCHcuu#g+I*zSk1f>x@-Wp9;DbC^9W#`;o!JjJaTtBRmS-+hdYQd827t~Hk;8c?>68$rRFQINKdYP z33uDU zsmc#KHS7pM-FCsWv}rJU7dFxr@BrI;&3W^ZL#?VL?~|q;PwnmLN;(2_Vtmt275s5~ zS8kENcmMmDt@(GtUZQwR_9EIN4JWJQ>g@z_m!&d+Ru#d(B}oHJfd|Q-e(HX%)^c+I z0F(Sco(EfUI`_4yZCe$!=94e|Vb>9XW~E$h3(JQX$O z)U8AQ9xl@&?j4g4gj`!U+p^PGUQ5f#>TNo2eu%Ve?ESC{eZYl%Js#~TEJMt!&=ES3 z8M7M-^W;zILQ6;**gH!<$JnuDO4pRS;Y4|jy2%idb3I*YvqT%ZeoAR2FNgCtBle}b zWrhH18=!Tcr>9>i!dkh~i)wziJ-tTj=)dc+QHg4}F-rkxvhg21y>CVS2U#tnP|mEK zz8A3oRwm`0I2%%5)#a<@Id)I(CBqgSJLf=K#xh)!KwJtMQ=40I7e>HSDB~*iaLLK@8c@Efj-CoZ~;({@dAfgcFIPV1s*eR zQ4~1j!ehByZhjk9F?8nZge{F7jjbx_&r;t!tl^`*LfrUKYpIl)J||HW(2M;3=7wj@ z86QVw2biG_!yRCIl$Y;)z2R2Y`A_FfL)kKd${z`w91T%}p*(19j#~C;{TAk9EtbrL z&hxY;@806>(ZAr1GD=&)mS<}-Az~7WsTfQ8tbKoZyNu_qVJCJ=JcNW#e&)D-&CIt# z8y^l={b4H5e^Z6Y@q zpROG4tLgQX^bUK}pEHXq)!lNYE|FY9Z#S)P&o_Z0Yz_?o{b?6{-BVup*b)tXuh2G` zE#cRzqCGcU?H*%I2QJ^$>-eidDqQo10yDWey|1vR;HanV%e`ruJ4~_qKCSW7!o5^j zsa4ab!%JhunX&xVzg!#ZY!%@Nu0618Rkb32q(Q5gejlw(g`t@OGp|HCeeZ2S#Y4}p ze6SMm#!2A*5`MuR6(1CZdZZMd2%ly#Is!iRhO4 zjeNg$?(=ht?^AYsL|TzymSLr38UamMMrqgXTxsoVQTm70#}Soi9oVY_#>p5~p%#Hf zQFmC<5`xkWVP}26J`8A~YSm6b zFTFNiSWk}ALQ`0eeS7ZK9DzYr)qBDLjH`s&0Q5hB6X+w)%r)|{$Pl8V5dnhSe>wp< zE^Zq}j{fX#B6B|cpm5db*TbD`AGpzB70cbXR#(e*!a z^xRiUglWTs^ZpS;^M)D7j6x#tEy0r?_20brv^Y7uKS6d!8JH**PaSRuTcEw<{)I#9 zH6X-?<32crn<^-t@|f89(RGD=3S-xt8_}^iH*f-En2)Lte*yTn^!K!Zf_|GMPpXPy z5S9Ty`oPAo2BL;sXo}J`)eTZ%&?`WlODzQs%j^GWM4Dyi@aa#R#fbo|H`je{9!bsyY8@dFQEMnE`=Q|q_v`4t#?LQ-H3~4_n?EiP zkS#4MOFr`$&Lp*eck8*Imhib*;49kz zLIuQ7iv6^vZ?B7M?Euoc%h{m#@WNw%@nI8$1(?s+&ImZ^9ia~AP6H|M9LUVRd@{U7 zNIno1X*qJGD4UQ6Th$D`M+$mF&0X<YyC5y3^U5k^JJZ2REC%7ehdpiD(dTO_Q>6 za}lZ`SQvJL>VFCXls z2F!6tTi+GFLrK|<7(5uc&tbIyB?jSjz=&pn{h=sifT#NO9V`GP8@Q6!aBxg#Yg}es zx~KzBRrfmZ z?)(~%Wzm2!`4IRlXmZNRYtuGqYrrRkYwSoVKynO#=nmN) zxfQvQV7O1MxYYFU(anIR2v&{ zeORA`K-faK<;ULh_e`dIPAE8h~&=x4MqXBhzpPD)V-kmPBhEoo^*QJ5(&J!NC zmr(z5>oEjFtet3|>eZ_U z@buaMJQ8duuGU5Vm+p7tj~or=-%_?fs7D?U=sO_HP4JaC0P++@Itno*=<8ET;A#~5 zcLx0HL(7O4+llTWl3-AKI4k9{|1Ki5ll!Ys(lg1eTe}zgZj^0qTAz@H$n@J)U9$+4 zv>zAm2~|SF)LPh4NuK4iGFz0^9-tYt#*u6P8*iWSzHG*Pqrqb5H$;!YoxBHdKC?wdRKDe zCh=h-5!2Au5COywNdmOAvf=?5z!O8TNkAMfW?g$ZJ--7tJwx|^{1~q&Ycl@V_rtI2 z8Z)khv4iNYt`XO*sQi>`PF#1&KFAJU&0wcnKUKHB5%UriPM&x>K8uKSr&$y(hyYOf zZ_gc}+YnA8_6b@m!$5C>tn5$4bAZ>Lfe8@0``rW>O0((@KKDKKUhhJggV;216)MGu z;${S74cNShp{~zahf&F($)5}%a4$w2ZV;|Es4@0DJ#m}?HY|Zj4_P+WPxKAp7Q#H> zOxStzr}Rr)Q2)rHp!t_JaS%j>!-=Lk4DlE4fw+F>OgNCp7cyUWiX2fWDV5dOdm zHBP-tO*@V8wg1&!B3ppuJb?;+f#Pntc(Xksx-#oo=X=_I=M?DsdS#Z^qNAfd9hy&< z!@x6S2ngK>Pmxr|5FyY*dXq=J8|he-)tY(|nbm5m*7uerO*lBbL5hgaw)1Aia)rCl zv7&5QlZFow8T&gOYL)&xT$w%$^3yZl@utRo{?bZY;yr{;-TSl;WTIqsRp&HBIq!+sPp;&XqmPO3JOhW;3M**7P-%VfT+5<6?+?2`64O-havDd zs{Q8my~ZVzM%=q*$fu#=GOP^Q2F#UO$fgcHpW(PR@9nR1pGmPnS~DhmareALEpMvZ&aa~n~w>NMYt3B*x+DVPp_5t1Y^#cZ(qFX z)QW|BW!5w-C~2St@0b5@P{qY@=xR)IiN1oxbLU%~Df{Kf zr$C~c^f`q@H!xUp$|~qkJqUPm{ahj3e-7tZRJO-0eIDuZqLwPeU9nH^v`x8&7t5JT zG4gRnn6o2!jxqI$zH54KCobv1VW zirF_D*kM76b^V=t;9T$}SpRcBJ0A_;EQejqU#B`0(6q4MdYJ{bscD2otD#%&tu}Pr z%m0P4FU4GakxqzhNEllg-Tl3+%mPW9kbrCKkWm@2bQ+YmGH`26H~-v2g-cJD@btj- zSx+>joA51`U!Vh8iv@;4)wjoRrV$S@32|vlIb?71^rw10Kv|NqtfGO|+9MjMAwXr( z!`u_Y)6OOPw(Mu2vu2r`i%_MJRTrd6EWL)WLRa;9WGm(nja_?VI@0x-i_T;t)NtwG zt28~OYST)0=$QNM@vrz`h?kZjyXqUhC}niNHm*2<$}LyS{rdt{X6jyjZ2FyTt;T#Is9iqU<+j-amL3;mQ~WhU`xYOj7IYsBs_cITl5R3RFruRj7CM27#O4@GdaolxamwzlnK&K={ zX-qmY%Vl-o>;iNxT`(@*AjnlI3@1)UIAE=NUu)tc-b&{9g@iexp&Up*kCw>TvxgMk zVmk7VMaR~1Tcy0i#GOZc?VR($M`76Uw$M=_Pp|N~O1Q-zIkNXCXQcoGbj?%k_**YG zU0xFPAMJP2cB3t8Qv3xRk3Gtx@!_MIKB6_Q!20sYat=C~ux1&=n)c@V3M^E$1P%jeeC%G>=#2ohT+3S&53I_D~L(R+E1)`bid`sz0Z> z6z#tyH3HJEACp}Flb{|Rj&6SS+e3dWwsU%>#|7SL9lxT#0A|9_^O`RF1+~pftv(#^ zR;-bWCr?nnyL}Zya~daA`EfNGCvtMi=CQ-k@FTcdzr;uNt~0O~L+uq>|1*ImSB9t2 zGf$9VCGcVGtWr9`#M#DjymM5EjcTn%)ANtp?9l#VtoprH`cmrxFa%49{`B`jWfQq+)&ywF=DB?dhcnv19pt^(jDW_ z(nmlitF5Uq4p^b^rcBA=VKl-)ybr`rt0~x@`M+HKBq-2B+lht}#hfLI&k_r3sKF(c z(De~|{mG{#mhIeRhfo}Vd36a+gok<6mu%%ik}9xLaxjtPy5y<$()Y4eJm!Gj^%myk z%uEaC$;#jxvEk)YMv~YRQ{9J5^j1epEVg<{QCxBD3^3I52 z6-OOf>eaT)*y9{tS-p_2Fh&QM8=n^?YfMn3B0c#xwA~EJ$eLx&wZpZhuJZF2Jij7j z%XU#PQ1CMxt?gbqdWasPxm}w z-++hA>V{vmyof33Jz6ilUykMYl%&FWt+6epzTI;X)NEZV?O**{cQBNVdbEQyEX1tj zpf2=~Hj}O-j0>Sz-s1Y6`Q?fu^~b!s84l6Bk>TjX*gd$WoITI2Dz)N+0g0(Pe^bQr z`}41xv0^Y&E7@B0bmO>v*gL1Q`ETS6%_nrQwd6Tweo)x>AhX_X%IjQDFaOuG!QJPY3{np+cH-I)Z9g<^|XZ_>R2~^(rul@s~Ueu>WSJ{P}iDQmFOc2i^P!_!>>z z$!>F*dZ7PDCId8wsu9kxCK4hhynx5TwY^j)D7tC(Q<@uo>@p!*9=!B#F^A=E@$J$V z>iqWsm_CA^dX)jM%i4GFP8@S*u#*VT5}+z9H}qy~8v`J&i^}J=d>z{7g2KC#9q$x! z1Rbh;6c>(kjP!=u zmB=b>3McC~=XC#h-ljLo(C6ng{%fRxXYtKtc`MhEkcIOe{xVc=&s)ls@M^g zTqvk0k8O2u+mz4fe9k}so)jOE(@F|x7H|dbUFS0h4_uQ}c99^ul08#1V9@j*7NtSL z^qAQm&uJPGQcj;OPMYKI#(N0UuS~lMGqee~xQOkuFOGjFzHijve^_p}pCPyds`yh0 zAMQ>ZFOq6N7-MX21+2`cj}>4|EI{j!LX^(AxS1oCiyILjBPyC6f=q?Q-q%D_RK3lh z0yH-qO@unoq;;j3x{QP zk#IJD?%y2{9e|`8mlktxH71Oi$mjR%wH24MqA6KLNv81hR+w$83eWQf4-!~8^Lovn zzT+`@nqK|3q(RFBa1S0q&|831G~GNT=l8OJs{>o$chI+f z-hN$X5~IL=A^tKd+z7fEdg#0Pp-2Z}H~Ohay8eXA1J4vNmHVWBU zLR5v;{|R7%1H?aIWFd^Fw)S?&7O!2u<+~9E2pAtkLNlo(BdOA-5HhZ$t4kqq@#`iS z+0%1zhXOltISWzY20k61$9A)92B~~gU;n{0ZNlAnH$pnA znAIq+eLq!zw}yMDgRdnGE~w1os9#Y2$&*|-iGMMyjR7J{30xu|UK?}uf@tj8Ul!pI zWAo?NMlcTeOm#X|-y|iCADo9Kx?ZU{7KqB0;6#}NDjOOJIMg6fmjKuhQ&4=%j1pIX z5%dK4K7w$7BY+Lu0?3-dD1rFl-amaIVhjvfl4&At+otEI2OP!?iHJ&C1UpZwAYok` z3_n{y3Mi+fWC;uz4x_p_kazx(F%kVe`y4sY!sZK+^gpRbJTXCQUkZ>!trrhJ(frTNjq{Ki=>j&5v zpipa^g z4mvmZX_!Nd1rQZg0W|ZD@0Ipb3NsQ;=RDIKnNjXRsTOBOF&kEY?(yS zN6GDLIV?aLlLNqNQ1l2N90!&ls|ShxM7((^-l?rNlI0e21qBa5Y!2{IT=WbAU+bWO zu?8(1dLhnK{PO%c@C2sdm-i+5=5G!pU`3eUrCz zQ+*Wvf5wjP;Y+ReeOx))2Jgu4;G!@%2#|`V*75&FE%}$7J`x%g@M&3 z25ZRL{WJhcQe`LJM52R%fC5BO!^bG4iKjp|E4}O4D}$yfa!6eHX2A`%iBNkCxyTVB z(2*Vist2GISwQo});A{#d+$#gwu2HJ(qf&XeZp@3&PH%l1p8QO!vZc)8|b(J`{an{ z^oyiE+7+6BKV$4o&YUxS)x|%_;}!T_D`{qz)2$SceuwWTngjQZh3D8kG(j3B(w zxMY*}fVLs!9Et>KueRBR&KURPVcT9gYYVUu#v+Zgm0bt=OM2CKPH#JZ-1S^>ZP$um zZHW?CsyzIqp@(Qx5kir0HRv_L%d;PRg@4Xeb3^uT|D+>8c;3Kg@~bcDfsCt?nVsy& z%rD{~)O`qutgzd*u7B4DViFQ*xIx8@C%2l<5AhZyULTBUJXw120I8aXIQzh6=H3$A zzMQT&*}zo|*LWz31ENZ_2vQi)U4+x7b~k{4%&Ye>5zm>-*?B7EH{%&ICc z^PPj;_q=>QN@o`-MMXu<-_(K*Bd)UOOY?hsH-2H487*>g4E{Y{K3-0Jp1OXP`h4%g z)nnj!>P^BH&|-hN*hUOpfP(g7>!eE}hq3ah;;dlZzpG_nI58pZplBr1s8gg#A5+>I zBiPU%bJQgxiWabjE6sX-d)nubPP|nqA^NZT!1|M|TEj&Gyb!h+(HqJ6NwD1(wo5Zc<+8P4!|{F;cx9D>W=$cEcH1K$T?#0PN>aTkqGepV?0))a<;( z4}De4FMCt%aja!P5(EF`@;9wz3nen1Pg%btn%zv5qJ1fq554~Jz0hIb!fJSX^+pfi zX}FvczW*8=<{R|DxuuZYMkQ606}WG4aPQ@;t*!lEPHxq{Iz|B`CI-S zh@fwB39b`|U?@X2m6Ig^no-WjnWa+#iuHc*7?eKR2?>Uuuj>OIsqn)N;Wov>659jY z9!3$7`k|)1>GIqb-mnfj0H&i04XS&9^cgn$A?7n_y{`>t4NHdl1po|anIE3k3} z1Da-%na659&(VwZB{t}r_erMj?!Wxf{ObOtYo`2&pU5Yt3>D3|G9lh~>l$B2+uI08 zL@Y2hvptkF?CnvSmf|ZYBmoVGjD$CDu579rs@%crsuNFhfx`A|p!9x55{6^|rd*RS zTantnN%{nL)V^P)MdDsD7ds}ABzzs^>dzB?<$?$HO1#=7cWUiI(9doY*?LE{XPoW*9@yz zUWu@i2nu$h>tSO)PZ`h2v5Pl|knbcDJVB>nE++BOO(J#+b>3U-P@kkMmHw?sE=_?e zN@^W*Xu>ofMgei)}+4pW7<#BrsF1goofjRjdc)&qQ;PsM~gU%w{`N6mQ_fJqCc-C z&(KGnj$fKy{-wCad`yb&HdTdM1c;&@(FC-f&i3#KQjO3>{>nwJ!x7n2|A=H0Q>7b6|F@xJJD2QvzU zg9{_!vN6I4O-=jPY=ObfU_b>`3XkCstbHPB#Ow<%JL_3sloYM4b4E{|6ePkh=XV&R zDH4$%%$o8&;#^GD#c^}9Ew4l2GhRWDdgXagS3WaoSOA?de2RO1NI(|1ad=cz)JtR2 zY!a~JMsnp8H8fzNK%f!VcT!4k*>rH7@kfY(aj^wVO;Okfffp=?EuZ z#CGX$tv3?KsQfKlH2RejMIw4ORRupzmLjymM>>ajqipIGOpZK2P7XEZ(z|RxlB!4cfa7N& z*8^1HC;q2NIl^J7mHlL)jU>Z1_@;jSlI-{##1x0#p&k!}AJ97Gr6h@9VmanpEb{5R z_-Om-hv9uLN-EPdoNC#km`8(DgZIlRRUNHQFkag0QEZ>%96>?oBErUKY*#<6FIXPp z?-#Z=_Pk+=iIA_PYlz)(}ud>G6gXzO6YWE*nP4X zud(!=xp7-9w2zK^d2JeB6lKa4+C`_dyf445NW5Nb9ZZ->g4eFGYWCmjSH@~AZYBK5NmEBG{QD zDV3C}<}m!XKUDK?Ge%~Zyr!EoOy*UOvT}j(tl~n}AEK$Nv-dqpJvgqZ>l_s;{zR39 zGflIGo(!XJ;$_Om#Q77oG#lOAxwCvR9L4LXNg(gCvE!p zbrCJT*i!RijNk7BUC37>ifUSKuzbg4=};ole#hJ^HR-71mJen9zNpNfu=gGr^yL1R z1-2zf|12qnTuq2DVht|{%Dv~eys1VUq8zYU#Xp%qg_-i{F? zmt?;b56#j=iKWXKp{Vj`Pw@{X3p}s5p}KD`eft(CXbykeBI~fh@hx&<{@N=Gs9AayI z!d`zXDV(!SC0*q$_N>t=b{kXrcrb|_1|d~C0Xi#ohvGokh#QYT8}6w{=*I_lpX!fm zSj3i&S>G@fpg7e~+v=~J#*rg<(NpbFC;9tcY=w)$dn*#E^m)vTBF0s6L+Yp;yQ+fH zZlTWwJ;XvR>MwXzexe50I~<8<`rX8u>bYtW!SLc~v~ywCz_I$KmPQ^Ev}P8;PN4@)p~2TR%cUt8LW6&u^o>5(v(;bI&WtTx zO`-hTl*o1*reDnAjXBm+7%%wsI_>u-Yr*>=lG0Xn*Roh#{OxNgesYKY`>~*xdKnc8 zYrJBFN~fc>8^*is?Tjv}u3y?4EiUcXjYtixxZbarSqH3Seo3q`wr3oowsk7%csE31 zx4W4Lqy6PE^U93RBF=lTnP_+_pu1Rlj<@`$K#{Jm6ekm#JE1NzqHNh5bL_^lidTBV z!zpW}Xl6s|*c>~o@t>C7&;E3aDa5}I4~)R22~&v2;G3;w&tbRyIqqi`897R`{3@^F zd*ud>gQPB{V~oPfr`0**FYZ5}l$s9?jTs2nnwM$#(^ZBSSr<&8dMOp{XKt=lD!gl!l(S*Ur^50#dh}}Mm*`H+tx&#E@`W$<&_UsM)_@2O$^jX=-vLaop- zpv7WylilcgY;WR%ZlBM%7d0e|=fLyHvZBCZq~g<;PG*aCEjP59`VX^C9IC4_-0tr4 z*q`p(wj4!<47nf$;78>Kwi2c|K3{j}K0|H$xQm^>vgQgbMJC50&OPR=pBHpX(QR*4 z>FblREoe|*{lVHHf%-npBdMtqPeql^^!X=h(U_;CH<5#zR-HZ#Bh#)(eI@qbzKFst zHMPmM8v|-d?s%t2pwE9zZe%J=N`d6CFxMIz~*dYF%;WO)XCa3H%Eb60YR;O`+X?*mC2uc!>yyjQBMbVs4$T z9J}!pl}=q*O%jP=QQCdZ4u+Md^Vr^zHabPJeDSh|e&2V0C^MTj5T_Pfm^vlOzuPFn zQ+|H?Vhy7WDmYOUMc=GQb<_jZF##gh!#J7K9`mJ%)A`NnjH+vV-AY(b>eq(Y>Wb@@ zr}B0zzyR?fW1)nN-H>VQS(D9x{Kf9eZ}TGQC%K{;o09+bj3 zp!RUSa2O*+@q3QjvmA_R8f&Jh`wx^yQTJ2Ai=)+lYMc`M@#krrHMsJ$xYicSg6VBqv=TZzZDuS=izc0niDwlPAbJ2y&Z$i_(=EZ zC&TK7kRMyRp{cesv_&8OU`-WsykO5SVtlxXV)>VEn#dzVQ{nz)ycIU1A0NC#6}0D( z*dLZ6#)6=@b$dw>|3;;Aa`ucm$iMdoF^wv&pZWDizehHY&QiGveIA`o8S`i}2N6&s zCapyTnd*7nU36dr3R1+n2jL12nOB~|w8H98A=y#*t`bnm@|{xI^|{^gwQ!8OK;~YP z?OP6vd=Qb6qm)lff5v7Bximp|Hw5uA`!2E!6o%#FY_XsKs zPjewtmo_vCb<{2i+SoogZyHj+Yp0g*N&fZgMMg#jg@lhN9F$?d8;I}CRE z5D3x%vS>A!Ygw>|#3{1VpmtKwU^kNf`nsYUH15cdBN7P8O#fZ`b~> z*YPUZMI1wdm4b|v@!iuS3UXqq^nrItt2QKaerws|b^~jqf`TVWbDoqQz4JUGGjKDy z`}$UMk{r!}|CbCNcHqqg0$3@?r$K`uVT5ym&B^vOOSbJu*0q2C{z04(DQXYAx~$fE z;`tq>-hVKD6#}@o-b}6c8EKB9RNWjv09A||^pq{rCD#Ka)>qmbuA3f77! zvaaRA>Unce=>fJI1ZbK;FV@wo2-k6T_Ftl~DPS`kx+Q)vzS;4;sgfvwJr!N zr@Hwf0x)P&s%o*HmdR=UX(fxEheW$Mi6RGnTNj;Arq!(;-8nAc(aT}Myu8QMb3P@$ znb_F&G7xspJir=DeSM+_4;j#;xZv7;0J{sHL|Q)67C*X~29E;8%w)2?F$*y{5m2QKt~N^@8=98K6-z zonM4o6y?=tY-0+RSPzxtXDF44P5DFc4enOYr~?47Y{uX1e=nA!;z`yCaL?GFYeH-g zK_jOB9h`_wr{OMJf#We_0>E=AaEWAjxnPcHE|65%i^w*=;c+*Z8eKwnz+lp-$y+Z@ z9qANpl>s-gH};9RU9|v=G%axJV&dbqR=41X>4=JnA+~pMT{K=wUt12TZ;H-h6Qe)Fx@^RsX9r?_p-@RwE2VINqB8W%y~*a^gL+Hz3qCFv-o% zmIvd{EI2}gH8d3^k9h#_2Z!sLVAkgG!sj1?+Zm~@8)#^|;YcSVjmRtyp)l%CuK7ki zL*Qe1Wo6FM+gyM8gwiM*wcI>Hw{L!?R^3j%?kMbSQ6y6pBx2-0s94}G|Gw^)V~md9 znprn5JD2LS5{oI7Nx+`ft3h=tiu5vI$v{HjfH??UsmN)Es()cy>+3{5K1;c)|+t23Q|Vt2Rh7Ha4E{wF-N6eF$7np^|;;>$8L+0kTpm ztsX;atpi?nrzd$Qha!uWE5{ zmPc%^_u+r%!&Q0EJ$E5LtZ2nRlhWP&H^yHK=d(krtvzH?Ajk!zz5zh-p8+XMpP&<} ztzi_X9DKRk{Q6%`E*4PAy=vDEjmLHIMO zxAb&f;xeS$a=G#MJp20!U@PmSM*^`LT1{p%?v3rYVgts@RiQ__L?-T;_xRJ&>}MWDA7Y4EuA%z<_M9Go9BfVPeX-1{&N%$Ir12zW~vx%@rV2~Y$z|PP!W#Hp0Z>iflHf(&Q<+eR_7jS3R z$`p`m_kvMGVX^PUvCe-60}dMMNg#qD%N*8qNXj;9fr+U5`9xY8EQUEiN-tIUfb1+g zJG&beUMtv##iXPd**12VLsKmB8}PZ;pmYUJd?4vsY7er46&$NdFsUD`OCL@*c$R|| zNSW$uE3u}I`0jy$1Q-at->;!JemLXQOvT#p>heb9HDzMI8k_-*GO@z-T-W$?Qle?V+4lMcj@WhLf19%P$*^xb^#*itN{OmeG0BiH%YZ^~dj7^^nA=2l^oP3vnl1kUuFW7p(Dpq(_!{W%(I84c9aJ_}*LT zP035qhx}#f)paaws*9`^q4?ZSsP)H(U;&cOY8gBh`OU8kZ@@8-QIOzEosp$RQ_&5e zS$oC?tA^@5>ZO|(grlEq{=ehcYAXM?I5t~Kc-Uurpcw@*D2$F&k?L})ex7;0sh^0G z{H>p{iFX!1LwFDhtsGcx=#`lIznq5NC}N`xtac2%0 ztRpRNXn2C7{Tpb_^8&iQMd=C2rO8cc`rR*hxgHlbgn2Cgu$IyZeE%i=qGa4v(Q_tg z*uW~xUp3ouEp)<3 z#b@YDVape)v2j8%QU$L3%I)==>@>Ys1z@JB#rz|*fwAhdqU3) z8c>xJzAHv?fR=Oe``2lE!k1uR8I<0ol!eBLUq9UyD0)AVJn&9C(Zc9;YK7`+?v@*!P zhmKCVvlkJnPPR61Bq>%NSWB9(SfCHe2fZ5SyAaU|dKWTXSUp*Q;_?kj1#-dwf(As8 z`U8dJyQVv=?jh}D%|?ipG>;6Q6qV*6+#upVu8zyW!;ID=e|Ac zlPEv0d2b#gWf^l!z-!Di^Z!7u2a1ld?r36DIsQ~tAk=1Kn|Ja~8Dz@vyN<0(lFVRy zg3=kSK&Icwg&(l-uE+aZrd!CNrv9l`5=+alhEY&3EoyZ|P>B809Yt}cge!hF<=fBW zd`=ctf~)GN_p3tZuS???H+BbMKyJIvA*yk6oWIa@xVwfwR9Uk9S65ASg|Y?anBJmS z`d3+jc&+eeeY|t!fbJz$-fyWdpMKI7{t4Ey?VQ`Hp-PHH&x}Z0CRtK%HRy)=5_k#& zMEH@ekM!<*BHfMe<&MguhEJGR)TRIC-wxZ4eKT7Ni|Ac^e{`pq3`ML?Ro^5n587iU&)ryL`l z)V(;BPJ#D^0!!}waEzy33xe^@#iB(EP#It9j3sSc%{52lB{7cK#`d zVpBKyXGd{gd6W%8QT~x9a1>9K?Z8RFn!kImljJN(%0eO9<#DWTIFsjm^bYhBJn9Cg z+$312xR*Jvsaw-xmHIZj_>}(J#9XAO6%du#7O2u2Idb4Q`UTEj;^cTvr%GuR$xBJQkLMh?BkEVh%cEa-2 z7ZUm{Ugc@DxMNfNT>SRM{BNFxM7bwCOvp783n)9T7s?R-J-^5*(KGtAY)N08zB00{VmH>$SNEBpb81s5yOx(*4DlDf zctH6f8i&gNG4q3w?-RTVrB`a!q{*H<;3`{&o&>dH=s?R(%RAr$tb_^ykesU0X%*)Z zz0<^CV8KVerOnDS{q`Stu=f%-gzt)yVi%i_y zf5n9BM6D&V2R=R>)o8_~9Zux%m6fjLWkL{NF7oUtzYHs=eEk!=!(!tu{(JHFzDAc$ z(*fuodQG)G-kc#+Fr4Wh6;!Rd2VBYp$kG+$a7yq^%{rAuQ5ef4*xZlr2dYFSyg9T= z_b2p!YOMtVbHBA0Maqxb!%Ew0*3?`VZeE~nMMZ5^T7r{jr1*0seW-_{saoHuWdB|p zH=Q?mD&5UqA%`cU{31gpb%(?gcvgy?2aV%SlBl+0Bhs@D0O`e(Hdxyji00+?zUhmd z!_%k8yy8mS@oG_}OC)7yZC+%pbo3#`upR|p+ z_Le*>slZ~i;*%uv%3+T=rfH|rdKpP?MTsVB9}Bh+OBrs+u}=N$t(B_{*BX`}V#JI+ zo8u&BF=%iY!+&7Osz=JkbZ-kT-M(gL|e z?=WJiDa=12HcPM{BhjBH_4}Jl9hsvgjF3}d7re$+@Hd>jrN2ecuVcG)1+IKtYmM#n z5v}IJMULGqDBO49-eZ~O#*__qCOl;#*uP)IF@q%u*UX#}&R*2F5`j+qCoiSt30=UH z1Oxo_E%4Gw<{FnaE>JWXti; z`o;u0-DL6e_=k}qX_&jyIw_ZOIX%mO4uN2JVcbj;cYH@z^Mx-2SOD{{n3^6n`+~P9 z{l97@^YCLA{@~W<0kja!*rHG{j^~3Ns7}z5GgxM2!IlJpQUS0d2CNG5c<>xFj3PS# z%dIAlSwee!;~umsTs|e zjz>7nY+FD~0F^Y@@kyzu5Fn0e{{H^npmh4R5i59A^QABul3otTQ4s+qi^uHI)8UN3 zFuF2WR(B*#Bi>9tidh>7kbGIeVU^@WcP4!`QXfAY&Dc#T;6xCN@Bxyl-N;GOt+XeF z<0cYi1ZVys&{U%#l59A^d=&E%P+$e{@=bFyqTdbN{0m{)dH{wZ7FgLIj5EMQf5MH+ zq$wOo3b3`y1Y|IrN-z>`|31PpPDpqRUSNpBW~Kc&hAG6RFjjerxp8wB)BShiM&e}@ z6F6FDX6lEY`hlR*;5UGRsb7p6KS5v;Fml^CG zw~xJd$KJ=!`dRn7*IL(gUguEAuWIiWTPjb2pn)kOjR8wT=p<1~z45vm8o62a=}SYq z6=)RS7Z&(SW+!6JZ2mh8^nBrR#d^_LRlE%I;G6VN$EC&5BF_Ar6!lFB6_h83&P}E; zv6n0Isr=G2*iV;Xie@Vc#phXVcBTu78*(J;(>;8&OY-JfO@F58d$=YOr=4B@my>=@U3?ehzTqS^x(V~;`0YMK}cq1 z=CPIWsKtKE2vyYSJP=MpS)To|&;wWr;ls&0cgl0-=Z_yz_FWnDSz{236NUyfG!Op` zIrdG+&#m~PDYtc+#|}B$!saou<)OHB$nr8SY#IzK7qK{u#tr&dy~yrvU4iy%T926r zLoKMp7-#~tt-T~hy>mX*s28bU;Gv$6Bl(t(Z%uc0-B|Y|sMk0$ku5^-Qsi&!FCMs? zU_3ng=*Ep3Oq9MRr=8IfA#kX-52Wsh5tFk%n=Uxcz&Vaa##p+19W;mSl#N z&aGlxe%M;2{vT9P0vw+>bB-kEu1&pxu^ck&!U*a)sB9b zYVy#l_{BS^s*|*y;=bylBHq zs=@7SPBDDGpNQ_#6B%fp7!P|B^K{q&xRP4Wj#?c@9VROG&jfqEAj0I>8Z| zGC)4+u*j?7xv(qHtmakAG3rI6eoc0Ae{Zo@p0tYP$tlm~#%)=bqAfB{FquzvJj#G- z88~febjJgtYHR6^7Xo*dPP z&B7RoQ4slhjcEM7W3~W9{_2+wKk&<48qao0w|H&Yv-pk{R(0!-pq)I;J_{2yjN#<_TVzM~3RT+5g=p)?J2bmW zvQ@FmaxPA?aF8mkyb{FM>0d~!He6H5us5>Kh$>8M`;uEkqkVRpej3|ti+ze0Jc^E4 z<@ZbW;hDBm?Wv+Xd_G*%)*wvb=HaOmaI&8OMTHdfpfBIGBfCW|vATNSri^$ApAh%4MHMs~xc1{tt!jDYBocWUmB8OfBRtZ}VuAyKf)e`M*NF{`bU98D`m_ zTRbZDk>5c;WB6=Jb0;7-Cgx{|hHDsZGsbC&4RDRO;0eepw-K>pZFFqRbMm3>vuk%W zpfUhuz3cULZy@cbw6v)42(y8tq*olJ8R)B@zkXGXU^`AMiu~q!vFkN$Av}3mmEW?A zGDHer(@#sfXxnH%KKe-LcziA0|H#jDxbxrhGl?qe|MD}LaNN4Cniti)hwF9dpW3S4 z6HoOpcvBFhT%Nf^YorIWRc>-hCIv)9;(lvrY;2U7%G2HncnfAV`uq>iB-jkn@vThJ z^$H&Nv-{}VyTgLUCyH)u(C5yKlF4n~eQxOYD^|rW!KWP^TL0G3Bqx)xuZsUa0j;Xq z%*^iQGq}98zw@i3xT|6k1hw0-)a1kDcczQSvU9TJ#?~!;y@3c;dM)=O=n!K9AuV@^ zi7JpY3J2gwz-3*4#y|!BI#gb);RI)Cx;=aL;J=scLe$jSKTImz&q+%jXth7sE!8hpvlosY72bY~%HW#> zX@bj`^^@lYN_PfR<$$_u$3<{FZ{|kZZxfNX^JZLxtu30%@(*Q71gUVjk49$hp4!7_T5Yl!F4uDkjn z^7X%SxF>QCpzMwcA%9E4E60&idFzHbAG5y07MvU}PVVg!LrTd#XEG{}&xCzTmlll6 zyO6r`?Lf7s_TuO|MR~1mA%nKW>n!WqF;N`ZzVQX zaOKSo(;m;(CGvfJhwlBh$nL(TYYfiNBh3a8t{PjW->3h{mUPi&DZJi&XyW7^KkuUA zbIE}fI81s}VQAT_?_@WPrEl*a&{RM3yw4(I`@#k1gZd!t6mt)DN#^=s3*7&bG<}Q0 z%x{eS@q><2->&Lh)xW&GfKyT>UiPI1n4PFg7-{QmtH<7z1snxPDok#!WEWZD zel;OJV?YxhSX@b><6u=OkoXY#HTS*W0cuSqN*{J-+E*Ix`SwQjxZ;Xu&o*xr))i|# zcV;GtO3POCd`bevCWE1~WE0(=G-?gk<9~Rs9tsU;zsc~G_3P*}>DX;gbFTPJllkAT z{uF*~qzdi9w`V`4G=$XgeWCNYKS|_+s7Gf@ElGPa$yE%d7&3wj2)>Gbnl7 zp_dpzrS*oQJ;)-{_XU4FHh8$^ea5CqheDi>`W13 z*0K5yPU>j3hh#2a=N_J1o*ILuKNdDG_*d&za;yv*_r?hSd0@deA|ST%Ud0B`sDUYK zY=)k}YHL|!5a8aBd)dNwueu47;CypFJhwlnSaR!HWko-064&lZH{&h`am>Mj{WITk z&@c$pe>}7?9h5UxF5(jXJMLgb7&WD%IK`z_DqVrn2Vp@$hNB}3lDR|h-j?m}IbXjmiO~ zSJ=LzjxI79Ld6*KM8(8RPK)jAXey%(p3Ziujp8M*-wa4=PS|0p7n5VzEZSh^MCQe! zv6xjYujRw)9Qk;g+-r~fD)q|(@StOb2IIh~9Q*n~L`J5cZg|;V7Fk$ELnSF`V*Mn? zQa}@&UrrH)<>xmaQ*6I!C@LDhFUmUdb<~+I0_j)dBUo*u>7m0L13o69;k59THrK>7c{5DjZ7OhbKwHhGG@_&Ol^C({tw0J@x@Cb z!Pd}@poM*v=A}zae1M>GGt~2? zGfhn!nmECm4JJTkGL(TWZ{J?PdlS*-BVWHZp)sf-lx>E>dAoD}(aBIhA)xn#(D-WF zSG~M00$8YyPMwt8KR^Jo-tD&gP~&LVEr^Z3JUt zV!9xk2fsz3>}y-*%m1`i%uX9VBF=&6*olNhv{5M!2yd-_319L-ha-&A5I%pYG8)~` zmARpEWYxnP39ew5;f>aT3kTaBohOM%u#QJT4xzmzYOj;f-hn#>6La=7=%2674<`Z~ zJJ<4{7qqj`i>|2T`O^{0D!RCg7cS&2NA?_FqQ>+r9ncOe2)j_tlPLRRNZyMGX7`Xc7<6WH^$5?;7X@mR z1~oSS>#a`iZ zkMAiwyu87{64KJr4EtWadewro5?*d@CESBTb8~YG|B{QD!Bdg5Oko$zF&~$semTM z2^%|F5ZeZj_Zt)h!!mV{kN6DoOzsn^JK&AEZU{e^`FoI3r-Vm{=4e1$4{#wGXd>O( z>k2e8AW0=ye2P8A=BX^V`h|OD27^O2%zwwxAG!}belN$!OAr=##l^Kv*1mOQKZuP? zEA8YtP^&$@msqa})dr}C_zPNNL_dOJG=V&ZgIZ_MFYj`cfR!1uxK)tbbE$jHAr(K~$r6d&p@D&c1n9O1`}?Oh~VY(Kj3#V7;bhb?P-GPnFtpbno)5u{|XI-13owpSCnI08JkUwkG}=mPY`EX z(tCYuZ4p?{POUGt@EOFl#5ME$k{tMK5H<7!zK5o;o)fUenQaAxe#OkJCH2 zYxGZ_HfS89L?@W;OyrLc$?-(0=>u&-@`{aqKPt-dV}^Chtw4CN%@w)tAo1|tyi)um zA%O)Koh+sY`c|;NUX`AU#AtmHp`(cii@$gO{u^Kxb;Lj5INknFDQ+TsT3vk{;_6-* zprYDY?`GBt5Gw;5%o7SnPq=%nwEJ$5j=M2};}Hp&{-Dvjj~^3pj3{g(!&v&|*C_dq z*=Y@r-ynj*0SP!F;vBefAxtG9HGk%$f7LgeCGl{^gQPIy9X@~A0 z*pm|UGgOn9_$R{;s`sVfOL>*+BH2aL&ky(LqCVTQ5o}@SugZ4W?btg26cX@YY@cZH zy?gH6+qc!oz($P7Wklzk_ne4UBpPzrl+@Iww{JOkc>`cQ2hHEYUo-@|(Zc{`UjH85 z1qrIEjSU}+)QHDv2EYlDyT}m+o>_Ed>?E*jBIy;%^a}tG(i?7oGKTM{0~puT++1T( zc%jhnS)(NM-{{tgVI2AHv3$G#4$ogK%b+_BHSQv$c)%KISy?sg?Ckv9=m*&OS6$CW z5>i9l{Gz zsGjgLmAxhc0z)+4_GyVR!SN5ub2GZb%8ICJxn-CQ4sorMdT>Fgx4BsgB}=$wgPuBc zWhBDI{25gbc%GZGM*Iwnkl!%8cGhkpBkBsh)!DmSoL{Bz`y4gvDiKsYFeb=9Y?es< zS%WT$i*|y|pfME{D6#Y_-JiKHJRS)9nisCpRT9$GR2C9~dPe1U&aLyrh`;B%UA+FG zxxC#9LRDo7&pBIpc2IP28#HAT6>^THpqjNe&&v$GhW0f4PLI5IkF`C=GsRk5thwhq zoi$7i09Z8inA;hp>)X%CbvBC%tK5nfGkaoSa?|MBUon#`ZoVBDrRUN`gf3_~-jtd7 z`@dPPZ^@5;du3`|RcF;y@j(s$`iXL5b3I>$hIFDIMet%7<>@;#Z zYt+R%>>`I2=seqc3hm-Edh8mkJm1*SoZp~6a;=Z~# zE^~^`>Q-=KjtZ)s`zsXkL}6oIqfVPPB2hgaqjdSInOl9&A^Uh-$uKJufe7=@@>@@d zi4o!k;{O|IWCoV@C=^z9pM1jIp>VFBA)e>VOBp_moUb@gGKQ4Nj=R43g^`oygb9di ze%ha6pO;$YBb6AmQ{s@Oz%Y4lupjkDr)2wgneBHk%B1s%XlY1ML~OYxxNERB$~q{g z7TTVZkC`v(i)N_($r(_m4^lP^8{Nc#ISm@q?WO!Q8;m$Xm@Y7kyPZO{kX$Z(_HWrc z_P%6V{hE$lK;7@0+_sqxn);k-vyVk9198G1|5o?5tF4AYXEAlw*ulB6|CZn`8VWKkgLG zmizdO_1~N9JKusWP0Y(&A1AGG*E3^Nne646dhAGzGDqd0se$s^P$()+AsQmL^=)1P z0iw=qdAn7+vdI$fK6eS;rIlkz`rz@)toc2ilHMInhG+t5@kdUi&AUfUn75d+-pLpU zdzC}lQL=ahx#36!%-gNhHH$8=ZG!OR#B(j~$d!~Fr7KyWV&4O<&2ov(XR!zD%wW9v z@+&9fY#U%bc@L9O5>Q>sCSr{321^eT(LZeohhLN@EmoXa8GJVnrdFe!8o_gu+ zF`5nWEv#}raR@^C*kgWV2=DojV+o(YoSmBsUlU~em!8AI!UDpPb=U$BPR%g#xebwZ zlIJ9I0%Et<9#nl>M^x3>46o)K!Rw`0#d{w)pl-F=@b&)1_P%?wVaxir_luD~B6C$O zj1r8J`P36*CnfD@Vj|Vz0}?!v6~xs_I4HKZWd%{U`G-U*Y}+fqDHP8rSUAh&nVkB- z-YPOHtJpDVp8fNR)QetK?%Yp5ZoQG4n)QLtrQEE!Y^+A+?Wm}|bHkOPetui7Ub|-L z;ILCIot8w)z#tGHd`eo{Hu&gK2P#y zj!L*EYuSn0czer&$9A*1Sq*kX@3Yzr%*@!)2?oA2wpk&)Y6AmK?{0<@2;$@ zT=@R|gtN0q-{$Nemi_xFNeo~69DU)th2!W^W)yNt2$<&L=H{dgZk;sK(YYNG5^}Vy zYqnqF!{Ffk#Kf@p_1ejsNq^AYsSdP*xlP(^Zq?8aQ;BWWU-?*x%w^M zY#Wk-4dW3OOyt(q*6=0rH_E*e78cfNpbF;(kl6@n49RQyOvp1VE?=fDFE2MSJM27E zU01iQ+d(QmKAxJ5Exfl^-^1JcwmFkYg$E7xW`~_*R(AF+we(xcTql6r!&v3kqeuHG zwr!nTsBX6qr@W2&2d?V9R;`_#XS@6Q#?a4_T2yqK>>R9&GwYB>X9{7XEOF{x+ zM1~`i5t5AUND#D<*lD}H_DA!URsj;a!N3|$g48RxD>%*(h?F; z#_Vit?{Zn#*=^xl){maawFUQF^+{#r_0l+QZthtetG}s9HR>DUo1{fV-toV~sSO~L zEAQKvFK?x#rCq)i79N@_SLd??dE#Qhb)2U+>Ky00#lJ3{II(4Be*Tj9sY1in$*HLy z&AuW(bhWgqKMV{Mg7Z$k2iLPmxP`bWF|!u>wTdN|mXTSFU4+e!l%eSTfBLZjhb^VS zVh;Gz^&4J&J+zg>tM(cLm{wD3%Pckyd8N9ykv$VYYrl*H~Vq$_{P;j)N@qif+?%S^o zo*9~p<@@d;Hgv-EqUM^K-#<4YB*4D2liYViRyH+1e~-iSeL6ZiLkT`VS)4sQn8L%u zZPuio&t7YgY;0?zVr6AL*|N5_Mit_&txb!@s9KB?^IR(EGb9fmRuYU>ll zQ+(Q+{8N-4yuD`-l0zO0Jz9`=QtkQ!_PO{*X_j~-J zvu0bavE!GFJw+q?_wN^zl(Z^1ZNpF=`o zZ*On!km2a)sFs;o1ky$Mqt)>Dm#Z?cY}nM!!`c3G`m_=(w$X@qOvv|nt}=(6yp1fu zQ8d_u3Dz~m?9a=-_=`D*!@G$A<=%}vz{Mu*b*6ge!&w&FIyu;6 zC5{ZT6MRu8uudYe+{ce!e>WC)sr7MUHNskJA4=F#v$7IP35|g{rilE)!v2cMBqWCC z&V9xli8{3YUdx1Gu?>~9^Uz!R8Ei%+e!3c56_9-mE4`#bLPI$jLfa-A#3-=_bUVo^ zDk?Z)ThPt~Oiw!uue7@**;x2)9)YjY3p9vq>~cN|dV2Jd`@-Ioy0-l~WqH1JBdLAC z>TEM0pRTSh&rN^6TCt9qW%5SnEf=h;wwaom#>K_mR7}39z)_9I+8uP z*ySgC+m?!9KylUGy=HhAb1^oXF-b{Dj-)4oi9doF4ibP>Ua)^=`nUlWB6$Y?m4jZU2W4`@Us9{DUVsrA6!SrLTLvyu3!{ z=H8jMEu>a>dwX|wb&-x37hZFBzoRQC<$0vmWW)7g=Delv8DR#N{WI4$){izcG~gNR zy!64W?FGIkFE8)1o14@=iBGpGsO6JY>*HEm@)^de24LHJos@LtSI0c_Ud6YY0x#ol zQ755Cs_IbU*c4l}Qm5byC84)eq&T-NiwU3LQmBukR%F;B*x*lHMA6YhXEog1+^nUq zU)oX2F`j=C2j10Ew7$W2i&~L_)BnHzwXn!;s&eLOo0>u$3I0-5(NxY;ym0IP0Cp%- AI{*Lx literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUEventsHandler-members.html b/preview/pr-1492/api/latest/classUEventsHandler-members.html new file mode 100644 index 00000000..6a67dd97 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsHandler-members.html @@ -0,0 +1,97 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UEventsHandler Member List
+
+
+ +

This is the complete list of members for UEventsHandler, including all inherited members.

+ + + + + + + + + + +
handleEvent(UEvent *event)=0UEventsHandlerprotectedpure virtual
post(UEvent *event, bool async=true) constUEventsSenderprotected
registerToEventsManager() (defined in UEventsHandler)UEventsHandler
UEventsHandler()UEventsHandlerinlineprotected
UEventsManagerUEventsHandlerfriend
UEventsSender() (defined in UEventsSender)UEventsSenderinline
unregisterFromEventsManager() (defined in UEventsHandler)UEventsHandler
~UEventsHandler()UEventsHandlerprotectedvirtual
~UEventsSender() (defined in UEventsSender)UEventsSendervirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUEventsHandler.html b/preview/pr-1492/api/latest/classUEventsHandler.html new file mode 100644 index 00000000..106bb5b7 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsHandler.html @@ -0,0 +1,351 @@ + + + + + + + + +RTAB-Map: UEventsHandler Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UEventsHandler Class Referenceabstract
+
+
+ +

#include <UEventsHandler.h>

+
+Inheritance diagram for UEventsHandler:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for UEventsHandler:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + +

+Public Member Functions

+void registerToEventsManager ()
 
+void unregisterFromEventsManager ()
 
+ + + + + + + + + + +

+Protected Member Functions

virtual bool handleEvent (UEvent *event)=0
 
 UEventsHandler ()
 
virtual ~UEventsHandler ()
 
- Protected Member Functions inherited from UEventsSender
void post (UEvent *event, bool async=true) const
 
+ + + +

+Friends

class UEventsManager
 
+

Detailed Description

+

The class UEventsHandler is an abstract class for handling events.

+

Inherited classes must implement handleEvent() function, which is called by the UEventsManager when an event is dispatched. Once the handler is created, it must be added to events manager with UEventsManager::addHandler() function. Note that it is not safe to automatically add the handler to UEventsManager in the handler's constructor.

+

Note for multi-threading: the handleEvent() method is called inside the UEventsManager thread. If the inherited class also inherits from UThreadNode, handleEvent() is done as well outside the thread's main loop, so be careful to protect private data of the thread used in its main loop.

+

Example for a useful combination of an UEventsHandler and a UThreadNode, with safe data modification while not blocking the handleEvent() call on a mutex:

#include "utilite/UThreadNode.h"
+
#include "utilite/UEventsHandler.h"
+
#include "utilite/UEventsManager.h"
+
#include "utilite/UEvent.h"
+
+
// Implement a simple event
+
class ResetEvent : public UEvent {
+
public:
+
ResetEvent() {}
+
virtual ~ResetEvent() {}
+
virtual std::string getClassName() const {return "ResetEvent";} // Must be implemented
+
};
+
+
// There is the thread counting indefinitely, the count can be reseted by sending a ResetEvent.
+
class CounterThread : public UThreadNode, public UEventsHandler {
+
public:
+
CounterThread() : state_(0), count_(0) {}
+
virtual ~CounterThread() {this->join(true);}
+
+
protected:
+
virtual void mainLoop() {
+
if(state_ == 1) {
+
state_ = 0;
+
// Do a long initialization, reset memory or other special long works... here
+
// we reset the count. This could be done in the handleEvent() but
+
// with many objects, it is more safe to do it here (in the thread's loop). A safe
+
// way could be also to use a UMutex to protect this initialization in
+
// the handleEvent(), but it is not recommended to do long works in handleEvent()
+
// because this will add latency in the UEventsManager dispatching events loop.
+
count_ = 0; // Reset the count
+
printf("Reset!\n");
+
}
+
+
// Do some works...
+
printf("count=%d\n", count_++);
+
uSleep(100); // wait 100 ms
+
}
+
virtual void handleEvent(UEvent * event) {
+
if(event->getClassName().compare("ResetEvent") == 0) {
+
state_ = 1;
+
}
+
}
+
private:
+
int state_;
+
int count_;
+
};
+
+
int main(int argc, char * argv[])
+
{
+
CounterThread counter;
+
counter.start();
+ +
+
uSleep(500); // wait 500 ms before sending a reset event
+
UEventsManager::post(new ResetEvent());
+
uSleep(500); // wait 500 ms before termination
+
+ +
counter.join(true); // Kill and wait to finish
+
return 0;
+
}
+ +
virtual std::string getClassName() const =0
+ +
static void removeHandler(UEventsHandler *handler)
+
static void addHandler(UEventsHandler *handler)
+
static void post(UEvent *event, bool async=true, const UEventsSender *sender=0)
+ +

The output is:

count=0
+
count=1
+
count=2
+
count=3
+
count=4
+
Reset!
+
count=0
+
count=1
+
count=2
+
count=3
+
count=4
+
See also
UEventsManager
+
+UEvent
+
+UThreadNode
+ +

Definition at line 128 of file UEventsHandler.h.

+

Constructor & Destructor Documentation

+ +

◆ UEventsHandler()

+ +
+
+ + + + + +
+ + + + + + + +
UEventsHandler::UEventsHandler ()
+
+inlineprotected
+
+

UEventsHandler constructor.

+

Note : You can call EventsManager::addHandler(this) at the end of the constructor of the inherited class where the virtual method handleEvent(...) is defined. If so, the UEventsHandler doesn't need to be manually added to the EventsManager where the handler is instantiated. We decided to not include UEventsManager::addHandler(this) in this abstract class constructor because an event can be handled (calling the pure virtual method) while the concrete class is constructed.

+ +

Definition at line 172 of file UEventsHandler.h.

+ +
+
+ +

◆ ~UEventsHandler()

+ +
+
+ + + + + +
+ + + + + + + +
virtual UEventsHandler::~UEventsHandler ()
+
+protectedvirtual
+
+

UEventsHandler destructor.

+

By default, it removes the handler reference from the UEventsManager. To be thread-safe, the inherited class must remove itself from the UEventsManager before it is deleted because an event can be handled (calling the pure virtual method handleEvent()) after the concrete class is deleted.

+ +
+
+

Member Function Documentation

+ +

◆ handleEvent()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool UEventsHandler::handleEvent (UEvent * event)
+
+protectedpure virtual
+
+

Method called by the UEventsManager to handle an event. Important : this method must do a minimum of work because the faster the dispatching loop is done; the faster the events are received. If a handling function takes too much time, the events list can grow faster than it is emptied. The event can be modified.

Returns
"true" to notify UEventsManager that this handler took ownership of the event (meaning it must delete it). The event will not be dispatched to next handlers.
+
+"false" to let event be dispatched to next handlers (default behavior). UEventsManager will take care of deleting the event.
+ +

Implemented in rtabmap::RtabmapThread, and rtabmap::OdometryThread.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ UEventsManager

+ +
+
+ + + + + +
+ + + + +
friend class UEventsManager
+
+friend
+
+

Only the UEventsManager has access to the handleEvent() method.

+ +

Definition at line 140 of file UEventsHandler.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUEventsHandler__coll__graph.map b/preview/pr-1492/api/latest/classUEventsHandler__coll__graph.map new file mode 100644 index 00000000..b817bb3b --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsHandler__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classUEventsHandler__coll__graph.md5 b/preview/pr-1492/api/latest/classUEventsHandler__coll__graph.md5 new file mode 100644 index 00000000..ee98892d --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsHandler__coll__graph.md5 @@ -0,0 +1 @@ +1c87383052669c2c204d5e153c3d17db \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUEventsHandler__coll__graph.png b/preview/pr-1492/api/latest/classUEventsHandler__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..65b98880d4b144acf8c5f9c7cf0008223fa54695 GIT binary patch literal 4186 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.map b/preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.map new file mode 100644 index 00000000..c21a1852 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.md5 b/preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.md5 new file mode 100644 index 00000000..2ed23dc2 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.md5 @@ -0,0 +1 @@ +0b83d37b00028a6dc39532bf4e2aa88e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.png b/preview/pr-1492/api/latest/classUEventsHandler__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2752521a220c19ac3294a65278003e72989a34 GIT binary patch literal 10138 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UEventsManager Member List
+
+
+ +

This is the complete list of members for UEventsManager, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addHandler(UEventsHandler *handler)UEventsManagerstatic
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
createPipe(const UEventsSender *sender, const UEventsHandler *receiver, const std::string &eventName) (defined in UEventsManager)UEventsManagerstatic
currentThreadId() (defined in UThread)UThreadinlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
getInstance() (defined in UEventsManager)UEventsManagerprotectedstatic
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
isCreating() constUThread
isIdle() constUThread
isKilled() constUThread
isRunning() constUThread
join(bool killFirst=false)UThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
mainLoop()UEventsManagerprotectedvirtual
post(UEvent *event, bool async=true, const UEventsSender *sender=0)UEventsManagerstatic
Priority enum nameUThread
removeAllPipes(const UEventsSender *sender) (defined in UEventsManager)UEventsManagerstatic
removeHandler(UEventsHandler *handler)UEventsManagerstatic
removeNullPipes(const UEventsSender *sender) (defined in UEventsManager)UEventsManagerstatic
removePipe(const UEventsSender *sender, const UEventsHandler *receiver, const std::string &eventName) (defined in UEventsManager)UEventsManagerstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setPriority(Priority priority)UThread
start()UThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
UDestroyer< UEventsManager > (defined in UEventsManager)UEventsManagerfriend
UEventsManager() (defined in UEventsManager)UEventsManagerprotected
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~UEventsManager() (defined in UEventsManager)UEventsManagerprotectedvirtual
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUEventsManager.html b/preview/pr-1492/api/latest/classUEventsManager.html new file mode 100644 index 00000000..2e9194e6 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsManager.html @@ -0,0 +1,440 @@ + + + + + + + + +RTAB-Map: UEventsManager Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <UEventsManager.h>

+
+Inheritance diagram for UEventsManager:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for UEventsManager:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static void addHandler (UEventsHandler *handler)
 
static void removeHandler (UEventsHandler *handler)
 
static void post (UEvent *event, bool async=true, const UEventsSender *sender=0)
 
+static void createPipe (const UEventsSender *sender, const UEventsHandler *receiver, const std::string &eventName)
 
+static void removePipe (const UEventsSender *sender, const UEventsHandler *receiver, const std::string &eventName)
 
+static void removeAllPipes (const UEventsSender *sender)
 
+static void removeNullPipes (const UEventsSender *sender)
 
- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
+ + + +

+Protected Member Functions

virtual void mainLoop ()
 
+ + + + + + + + + + + + + + + + +

+Static Protected Member Functions

+static UEventsManager * getInstance ()
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+ + + +

+Friends

class UDestroyer< UEventsManager >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+

Detailed Description

+

This class is used to post events between threads in the application. It is Thread-Safe and the events are sent to receivers in the same order they are posted (FIFO). It works like the design pattern Mediator. It is also a Singleton, so it can be used anywhere in the application.

+

To send an event, use UEventsManager::post(). Events are automatically deleted after they are posted.

+

The EventsManager have a list of handlers to which it sends posted events. To add an handler, use UEventsManager::addHandler(). To remove, use UEventsManager::removeHandler().

+
// Anywhere in the code:
+
UEventsManager::post(new MyEvent()); // where MyEvent is an implemented UEvent
+
static void post(UEvent *event, bool async=true, const UEventsSender *sender=0)
+
See also
UEvent
+
+UEventsHandler
+
+post()
+
+addHandler()
+
+removeHandler()
+ +

Definition at line 78 of file UEventsManager.h.

+

Member Function Documentation

+ +

◆ addHandler()

+ +
+
+ + + + + +
+ + + + + + + + +
static void UEventsManager::addHandler (UEventsHandler * handler)
+
+static
+
+

This method is used to add an events handler to the list of handlers.

+
Parameters
+ + +
handlerthe handler to be added.
+
+
+ +
+
+ +

◆ removeHandler()

+ +
+
+ + + + + +
+ + + + + + + + +
static void UEventsManager::removeHandler (UEventsHandler * handler)
+
+static
+
+

This method is used to remove an events handler from the list of handlers.

+
Parameters
+ + +
handlerthe handler to be removed.
+
+
+ +
+
+ +

◆ post()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static void UEventsManager::post (UEvent * event,
bool async = true,
const UEventsSender * sender = 0 
)
+
+static
+
+

This method is used to post an event to handlers.

+

Event can be posted asynchronously or not. In the first case, the event is dispatched by the UEventsManager's thread. In the second case, the event is handled immediately by event's receivers, thus in the sender thread.

+
Parameters
+ + + +
eventthe event to be posted.
asyncif true, the event is dispatched by the UEventsManager thread, otherwise it's in the caller thread (synchronous).
+
+
+ +
+
+ +

◆ mainLoop()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void UEventsManager::mainLoop ()
+
+protectedvirtual
+
+

The UEventsManager's main loop.

+ +

Implements UThread.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ UDestroyer< UEventsManager >

+ +
+
+ + + + + +
+ + + + +
friend class UDestroyer< UEventsManager >
+
+friend
+
+ +

Definition at line 147 of file UEventsManager.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUEventsManager__coll__graph.map b/preview/pr-1492/api/latest/classUEventsManager__coll__graph.map new file mode 100644 index 00000000..f44b9743 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsManager__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classUEventsManager__coll__graph.md5 b/preview/pr-1492/api/latest/classUEventsManager__coll__graph.md5 new file mode 100644 index 00000000..198fd67e --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsManager__coll__graph.md5 @@ -0,0 +1 @@ +fcda036a66518a2e853a9b55fad0d084 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUEventsManager__coll__graph.png b/preview/pr-1492/api/latest/classUEventsManager__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..aade4d2213f2f90ab1f47ae927d45e2c9de8400d GIT binary patch literal 6027 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUEventsManager__inherit__graph.map b/preview/pr-1492/api/latest/classUEventsManager__inherit__graph.map new file mode 100644 index 00000000..f44b9743 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsManager__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classUEventsManager__inherit__graph.md5 b/preview/pr-1492/api/latest/classUEventsManager__inherit__graph.md5 new file mode 100644 index 00000000..198fd67e --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsManager__inherit__graph.md5 @@ -0,0 +1 @@ +fcda036a66518a2e853a9b55fad0d084 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUEventsManager__inherit__graph.png b/preview/pr-1492/api/latest/classUEventsManager__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..aade4d2213f2f90ab1f47ae927d45e2c9de8400d GIT binary patch literal 6027 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUEventsSender-members.html b/preview/pr-1492/api/latest/classUEventsSender-members.html new file mode 100644 index 00000000..7fca459e --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsSender-members.html @@ -0,0 +1,91 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UEventsSender Member List
+
+
+ +

This is the complete list of members for UEventsSender, including all inherited members.

+ + + + +
post(UEvent *event, bool async=true) constUEventsSenderprotected
UEventsSender() (defined in UEventsSender)UEventsSenderinline
~UEventsSender() (defined in UEventsSender)UEventsSendervirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUEventsSender.html b/preview/pr-1492/api/latest/classUEventsSender.html new file mode 100644 index 00000000..faf1cce9 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsSender.html @@ -0,0 +1,184 @@ + + + + + + + + +RTAB-Map: UEventsSender Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UEventsSender Class Reference
+
+
+
+Inheritance diagram for UEventsSender:
+
+
Inheritance graph
+ + + + + + + + + + + + + +
[legend]
+ + + + +

+Protected Member Functions

void post (UEvent *event, bool async=true) const
 
+

Detailed Description

+
+

Definition at line 15 of file UEventsSender.h.

+

Constructor & Destructor Documentation

+ +

◆ UEventsSender()

+ +
+
+ + + + + +
+ + + + + + + +
UEventsSender::UEventsSender ()
+
+inline
+
+ +

Definition at line 18 of file UEventsSender.h.

+ +
+
+

Member Function Documentation

+ +

◆ post()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void UEventsSender::post (UEvent * event,
bool async = true 
) const
+
+protected
+
+

For convenience to post an event. This is the same than calling UEventsManager::post() with the sender reference.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUEventsSender__inherit__graph.map b/preview/pr-1492/api/latest/classUEventsSender__inherit__graph.map new file mode 100644 index 00000000..e22e6ed4 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsSender__inherit__graph.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classUEventsSender__inherit__graph.md5 b/preview/pr-1492/api/latest/classUEventsSender__inherit__graph.md5 new file mode 100644 index 00000000..c32ce101 --- /dev/null +++ b/preview/pr-1492/api/latest/classUEventsSender__inherit__graph.md5 @@ -0,0 +1 @@ +b1cfed5963969da1887184ba91fab2de \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUEventsSender__inherit__graph.png b/preview/pr-1492/api/latest/classUEventsSender__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee5c4607816542a0a1f100b20a195c3a8906e7d GIT binary patch literal 16427 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UException Member List
+
+
+ +

This is the complete list of members for UException, including all inherited members.

+ + +
UException(const std::string &what) (defined in UException)UExceptioninline
+ + + + diff --git a/preview/pr-1492/api/latest/classUException.html b/preview/pr-1492/api/latest/classUException.html new file mode 100644 index 00000000..c3bd4d15 --- /dev/null +++ b/preview/pr-1492/api/latest/classUException.html @@ -0,0 +1,149 @@ + + + + + + + + +RTAB-Map: UException Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UException Class Reference
+
+
+
+Inheritance diagram for UException:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for UException:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + +

+Public Member Functions

 UException (const std::string &what)
 
+

Detailed Description

+
+

Definition at line 25 of file UException.h.

+

Constructor & Destructor Documentation

+ +

◆ UException()

+ +
+
+ + + + + +
+ + + + + + + + +
UException::UException (const std::string & what)
+
+inline
+
+ +

Definition at line 28 of file UException.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUException__coll__graph.map b/preview/pr-1492/api/latest/classUException__coll__graph.map new file mode 100644 index 00000000..00f629b1 --- /dev/null +++ b/preview/pr-1492/api/latest/classUException__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classUException__coll__graph.md5 b/preview/pr-1492/api/latest/classUException__coll__graph.md5 new file mode 100644 index 00000000..6732013e --- /dev/null +++ b/preview/pr-1492/api/latest/classUException__coll__graph.md5 @@ -0,0 +1 @@ +bfaf32ec3fc5e809b5d0b97f507628eb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUException__coll__graph.png b/preview/pr-1492/api/latest/classUException__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..66f94200aa95e749de8db12dc8e555a53d5270e9 GIT binary patch literal 4024 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 + + + + diff --git a/preview/pr-1492/api/latest/classUException__inherit__graph.md5 b/preview/pr-1492/api/latest/classUException__inherit__graph.md5 new file mode 100644 index 00000000..6732013e --- /dev/null +++ b/preview/pr-1492/api/latest/classUException__inherit__graph.md5 @@ -0,0 +1 @@ +bfaf32ec3fc5e809b5d0b97f507628eb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUException__inherit__graph.png b/preview/pr-1492/api/latest/classUException__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..66f94200aa95e749de8db12dc8e555a53d5270e9 GIT binary patch literal 4024 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UFile Member List
+
+
+ +

This is the complete list of members for UFile, including all inherited members.

+ + + + + + + + + + + + + + + + + +
copy(const std::string &from, const std::string &to)UFilestatic
copy(const std::string &to)UFileinline
erase(const std::string &filePath)UFilestatic
exists(const std::string &filePath)UFilestatic
exists()UFileinline
getExtension(const std::string &filePath)UFilestatic
getExtension()UFileinline
getName(const std::string &filePath)UFilestatic
getName()UFileinline
isValid()UFileinline
length(const std::string &filePath)UFilestatic
length()UFileinline
rename(const std::string &oldFilePath, const std::string &newFilePath)UFilestatic
rename(const std::string &newName)UFileinline
UFile(const std::string &path)UFileinline
~UFile() (defined in UFile)UFileinline
+ + + + diff --git a/preview/pr-1492/api/latest/classUFile.html b/preview/pr-1492/api/latest/classUFile.html new file mode 100644 index 00000000..21b71243 --- /dev/null +++ b/preview/pr-1492/api/latest/classUFile.html @@ -0,0 +1,653 @@ + + + + + + + + +RTAB-Map: UFile Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <UFile.h>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 UFile (const std::string &path)
 
bool isValid ()
 
bool exists ()
 
long length ()
 
int rename (const std::string &newName)
 
std::string getName ()
 
std::string getExtension ()
 
void copy (const std::string &to)
 
+ + + + + + + + + + + + + + + +

+Static Public Member Functions

static bool exists (const std::string &filePath)
 
static long length (const std::string &filePath)
 
static int erase (const std::string &filePath)
 
static int rename (const std::string &oldFilePath, const std::string &newFilePath)
 
static std::string getName (const std::string &filePath)
 
static std::string getExtension (const std::string &filePath)
 
static void copy (const std::string &from, const std::string &to)
 
+

Detailed Description

+

Class UFile.

+

This class can be used to modify/erase files on hard drive.

+ +

Definition at line 33 of file UFile.h.

+

Constructor & Destructor Documentation

+ +

◆ UFile()

+ +
+
+ + + + + +
+ + + + + + + + +
UFile::UFile (const std::string & path)
+
+inline
+
+

Create a UFile object with path initialized to an existing file .

Parameters
+ + +
paththe path to an existing file
+
+
+ +

Definition at line 91 of file UFile.h.

+ +
+
+ +

◆ ~UFile()

+ +
+
+ + + + + +
+ + + + + + + +
UFile::~UFile ()
+
+inline
+
+ +

Definition at line 92 of file UFile.h.

+ +
+
+

Member Function Documentation

+ +

◆ exists() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static bool UFile::exists (const std::string & filePath)
+
+static
+
+

Check if a file exists.

Parameters
+ + +
filePaththe file path
+
+
+
Returns
true if the file exists, otherwise false.
+ +
+
+ +

◆ length() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static long UFile::length (const std::string & filePath)
+
+static
+
+

Get the file length.

Parameters
+ + +
filePaththe file path
+
+
+
Returns
long the length of the file in bytes. Return -1 if the file doesn't exist.
+ +
+
+ +

◆ erase()

+ +
+
+ + + + + +
+ + + + + + + + +
static int UFile::erase (const std::string & filePath)
+
+static
+
+

Erase a file.

Parameters
+ + +
filePaththe file path
+
+
+
Returns
0 if success.
+ +
+
+ +

◆ rename() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static int UFile::rename (const std::string & oldFilePath,
const std::string & newFilePath 
)
+
+static
+
+

Rename a file.

Parameters
+ + + +
oldFilePaththe old file path
newFilePaththe new file path
+
+
+
Returns
0 if success.
+ +
+
+ +

◆ getName() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string UFile::getName (const std::string & filePath)
+
+static
+
+

Get the file name from a file path (with extension).

Parameters
+ + +
filePaththe file path
+
+
+
Returns
the file name.
+ +
+
+ +

◆ getExtension() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string UFile::getExtension (const std::string & filePath)
+
+static
+
+

Get the file extension.

Returns
the file extension
+ +
+
+ +

◆ copy() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static void UFile::copy (const std::string & from,
const std::string & to 
)
+
+static
+
+

Copy a file.

Parameters
+ + + +
fromthe file path
todestination file path
+
+
+ +
+
+ +

◆ isValid()

+ +
+
+ + + + + +
+ + + + + + + +
bool UFile::isValid ()
+
+inline
+
+

Check if the file exists. Same as exists().

Returns
true if the path exits
+ +

Definition at line 98 of file UFile.h.

+ +
+
+ +

◆ exists() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
bool UFile::exists ()
+
+inline
+
+

Check if the file exists.

Returns
true if the path exits
+ +

Definition at line 104 of file UFile.h.

+ +
+
+ +

◆ length() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
long UFile::length ()
+
+inline
+
+

Get the length of the file.

Returns
long the length of the file in bytes. Return -1 if the file doesn't exist.
+ +

Definition at line 110 of file UFile.h.

+ +
+
+ +

◆ rename() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
int UFile::rename (const std::string & newName)
+
+inline
+
+

Rename the file name. The path stays the same.

Parameters
+ + +
thenew name
+
+
+ +

Definition at line 116 of file UFile.h.

+ +
+
+ +

◆ getName() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
std::string UFile::getName ()
+
+inline
+
+

Get the file name without the path.

Returns
the file name
+ +

Definition at line 135 of file UFile.h.

+ +
+
+ +

◆ getExtension() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
std::string UFile::getExtension ()
+
+inline
+
+

Get the file extension.

Returns
the file extension
+ +

Definition at line 140 of file UFile.h.

+ +
+
+ +

◆ copy() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void UFile::copy (const std::string & to)
+
+inline
+
+

Copy a file.

Parameters
+ + +
todestination file path
+
+
+ +

Definition at line 146 of file UFile.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • utilite/include/rtabmap/utilite/UFile.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classULogEvent-members.html b/preview/pr-1492/api/latest/classULogEvent-members.html new file mode 100644 index 00000000..0dc03253 --- /dev/null +++ b/preview/pr-1492/api/latest/classULogEvent-members.html @@ -0,0 +1,95 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
ULogEvent Member List
+
+
+ +

This is the complete list of members for ULogEvent, including all inherited members.

+ + + + + + + + +
getClassName() constULogEventinlinevirtual
getCode() constUEventinline
getMsg() constULogEventinline
UEvent(int code=0)UEventinlineprotected
ULogEvent(const std::string &msg, int level)ULogEventinline
~UEvent() (defined in UEvent)UEventinlinevirtual
~ULogEvent() (defined in ULogEvent)ULogEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classULogEvent.html b/preview/pr-1492/api/latest/classULogEvent.html new file mode 100644 index 00000000..2c8a8a89 --- /dev/null +++ b/preview/pr-1492/api/latest/classULogEvent.html @@ -0,0 +1,269 @@ + + + + + + + + +RTAB-Map: ULogEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
ULogEvent Class Reference
+
+
+ +

#include <ULogger.h>

+
+Inheritance diagram for ULogEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for ULogEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + +

+Public Member Functions

 ULogEvent (const std::string &msg, int level)
 
const std::string & getMsg () const
 
virtual std::string getClassName () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+

This class is used by the ULogger to send logged messages like events. Messages with level over the event level set in ULogger::setEventLevel() are sent like ULogEvent with the message and its level. The default event level of ULogger is kFatal (see ULogger::Level).

+ +

Definition at line 121 of file ULogger.h.

+

Constructor & Destructor Documentation

+ +

◆ ULogEvent()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ULogEvent::ULogEvent (const std::string & msg,
int level 
)
+
+inline
+
+

ULogEvent constructor. Note that to retrieve the message level, use UEvent::getCode().

Parameters
+ + + +
msgthe message already formatted to a full string.
levelthe severity of the message,
+
+
+
See also
ULogger::Level.
+ +

Definition at line 129 of file ULogger.h.

+ +
+
+ +

◆ ~ULogEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual ULogEvent::~ULogEvent ()
+
+inlinevirtual
+
+ +

Definition at line 133 of file ULogger.h.

+ +
+
+

Member Function Documentation

+ +

◆ getMsg()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & ULogEvent::getMsg () const
+
+inline
+
+

Get the message from the event.

+ +

Definition at line 137 of file ULogger.h.

+ +
+
+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string ULogEvent::getClassName () const
+
+inlinevirtual
+
+
Returns
string "ULogEvent"
+ +

Implements UEvent.

+ +

Definition at line 141 of file ULogger.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • utilite/include/rtabmap/utilite/ULogger.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classULogEvent__coll__graph.map b/preview/pr-1492/api/latest/classULogEvent__coll__graph.map new file mode 100644 index 00000000..325155c5 --- /dev/null +++ b/preview/pr-1492/api/latest/classULogEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classULogEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classULogEvent__coll__graph.md5 new file mode 100644 index 00000000..cf137fed --- /dev/null +++ b/preview/pr-1492/api/latest/classULogEvent__coll__graph.md5 @@ -0,0 +1 @@ +d1048a72a7ec5cf7d0d3e17af660cf04 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classULogEvent__coll__graph.png b/preview/pr-1492/api/latest/classULogEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b7aa40b89c347a3bfd25619cdc950f82c61d62c2 GIT binary patch literal 3109 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 Nv7xC!%?;<+e*s0m^)~ + + + + diff --git a/preview/pr-1492/api/latest/classULogEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classULogEvent__inherit__graph.md5 new file mode 100644 index 00000000..cf137fed --- /dev/null +++ b/preview/pr-1492/api/latest/classULogEvent__inherit__graph.md5 @@ -0,0 +1 @@ +d1048a72a7ec5cf7d0d3e17af660cf04 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classULogEvent__inherit__graph.png b/preview/pr-1492/api/latest/classULogEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b7aa40b89c347a3bfd25619cdc950f82c61d62c2 GIT binary patch literal 3109 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 Nv7xC!%?;<+e*s0m^)~ + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
ULogger Member List
+
+
+ +

This is the complete list of members for ULogger, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_flush() (defined in ULogger)ULoggerprotected
append_ (defined in ULogger)ULoggerprotectedstatic
eventLevel() (defined in ULogger)ULoggerinlinestatic
flush()ULoggerstatic
getInstance() (defined in ULogger)ULoggerprotectedstatic
getRegisteredThreads() (defined in ULogger)ULoggerstatic
getTime(std::string &timeStr)ULoggerstatic
getTreadIdFilter() (defined in ULogger)ULoggerinlinestatic
isBuffered() (defined in ULogger)ULoggerinlinestatic
isPrintColored() (defined in ULogger)ULoggerinlinestatic
isPrintEndLine() (defined in ULogger)ULoggerinlinestatic
isPrintLevel() (defined in ULogger)ULoggerinlinestatic
isPrintThreadId() (defined in ULogger)ULoggerinlinestatic
isPrintTime() (defined in ULogger)ULoggerinlinestatic
isPrintWhere() (defined in ULogger)ULoggerinlinestatic
isPrintWhereFullPath() (defined in ULogger)ULoggerinlinestatic
kDebug enum value (defined in ULogger)ULogger
kDefaultLogFileNameULoggerstatic
kError enum value (defined in ULogger)ULogger
kFatal enum value (defined in ULogger)ULogger
kInfo enum value (defined in ULogger)ULogger
kTypeConsole enum value (defined in ULogger)ULogger
kTypeFile enum value (defined in ULogger)ULogger
kTypeNoLog enum value (defined in ULogger)ULogger
kWarning enum value (defined in ULogger)ULogger
level() (defined in ULogger)ULoggerinlinestatic
Level enum nameULogger
logFileName_ (defined in ULogger)ULoggerprotectedstatic
registerCurrentThread(const std::string &name)ULoggerstatic
reset()ULoggerstatic
setBuffered(bool buffered)ULoggerstatic
setEventLevel(ULogger::Level eventSentLevel)ULoggerinlinestatic
setLevel(ULogger::Level level)ULoggerinlinestatic
setPrintColored(bool printColored)ULoggerinlinestatic
setPrintEndline(bool printEndline)ULoggerinlinestatic
setPrintLevel(bool printLevel)ULoggerinlinestatic
setPrintThreadId(bool printThreadId)ULoggerinlinestatic
setPrintTime(bool printTime)ULoggerinlinestatic
setPrintWhere(bool printWhere)ULoggerinlinestatic
setPrintWhereFullPath(bool printWhereFullPath)ULoggerinlinestatic
setTreadIdFilter(const std::set< unsigned long > &ids)ULoggerinlinestatic
setTreadIdFilter(const std::vector< std::string > &ids) (defined in ULogger)ULoggerstatic
setType(Type type, const std::string &fileName=kDefaultLogFileName, bool append=true)ULoggerstatic
Type enum nameULogger
type() (defined in ULogger)ULoggerinlinestatic
UDestroyer< ULogger > (defined in ULogger)ULoggerfriend
ULogger() (defined in ULogger)ULoggerinlineprotected
unregisterCurrentThread() (defined in ULogger)ULoggerstatic
write(ULogger::Level level, const char *file, int line, const char *function, const char *msg,...) (defined in ULogger)ULoggerstatic
~ULogger() (defined in ULogger)ULoggerprotectedvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classULogger.html b/preview/pr-1492/api/latest/classULogger.html new file mode 100644 index 00000000..602ed253 --- /dev/null +++ b/preview/pr-1492/api/latest/classULogger.html @@ -0,0 +1,1307 @@ + + + + + + + + +RTAB-Map: ULogger Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <ULogger.h>

+ + + + + + +

+Public Types

enum  Type { kTypeNoLog +, kTypeConsole +, kTypeFile + }
 
enum  Level {
+  kDebug +, kInfo +, kWarning +, kError +,
+  kFatal +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static void setType (Type type, const std::string &fileName=kDefaultLogFileName, bool append=true)
 
static Type type ()
 
static void setPrintTime (bool printTime)
 
static bool isPrintTime ()
 
static void setPrintLevel (bool printLevel)
 
static bool isPrintLevel ()
 
static void setPrintEndline (bool printEndline)
 
static bool isPrintEndLine ()
 
static void setPrintColored (bool printColored)
 
static bool isPrintColored ()
 
static void setPrintWhere (bool printWhere)
 
static bool isPrintWhere ()
 
static void setPrintThreadId (bool printThreadId)
 
static bool isPrintThreadId ()
 
static void setPrintWhereFullPath (bool printWhereFullPath)
 
static bool isPrintWhereFullPath ()
 
static void setBuffered (bool buffered)
 
static bool isBuffered ()
 
static void setLevel (ULogger::Level level)
 
static ULogger::Level level ()
 
static void setEventLevel (ULogger::Level eventSentLevel)
 
static ULogger::Level eventLevel ()
 
static void setTreadIdFilter (const std::set< unsigned long > &ids)
 
+static void setTreadIdFilter (const std::vector< std::string > &ids)
 
static const std::set< unsigned long > & getTreadIdFilter ()
 
static void registerCurrentThread (const std::string &name)
 
+static void unregisterCurrentThread ()
 
+static std::map< std::string, unsigned long > getRegisteredThreads ()
 
static void reset ()
 
static void flush ()
 
+static void write (ULogger::Level level, const char *file, int line, const char *function, const char *msg,...)
 
static int getTime (std::string &timeStr)
 
+ + + +

+Static Public Attributes

static const std::string kDefaultLogFileName
 
+ + + +

+Protected Member Functions

+void _flush ()
 
+ + + +

+Static Protected Member Functions

+static ULogger * getInstance ()
 
+ + + + + +

+Static Protected Attributes

static std::string logFileName_
 
static bool append_
 
+ + + +

+Friends

class UDestroyer< ULogger >
 
+

Detailed Description

+

This class is used to log messages with time on a console, in a file and/or with an event. At the start of the application, call ULogger::setType() with the type of the logger you want (see ULogger::Type, the type of the output can be changed at the run-time.). To use it, simply call the convenient macros UDEBUG(), UINFO(), UWARN(), UERROR(), UFATAL() depending of the severity of the message. You can disable some messages by setting the logger level ULogger::setLevel() to severity you want, defined by ULogger::Level. A fatal message will make the application to exit, printing the message on console (whatever the logger type) and posting a ULogEvent (synchronously... see UEventsManager::post()) before exiting.

+

The display of the logged messages can be modified:

+

When using a file logger (kTypeLogger), it can be useful in some application to buffer messages before writing them to hard drive (avoiding hard drive latencies). You can set ULogger::setBuffered() to true to do that. When the buffered messages will be written to file on appllciation exit (ULogger destructor) or when ULogger::flush() is called.

+

If you want the application to exit on a lower severity level than kFatal, you can set ULogger::setExitLevel() to any ULogger::Type you want.

+

Example:

+
int main(int argc, char * argv[])
+
{
+
// Set the logger type. The choices are kTypeConsole,
+
// kTypeFile or kTypeNoLog (nothing is logged).
+
ULogger::setType(ULogger::kTypeConsole);
+
+
// Set the logger severity level (kDebug, kInfo, kWarning, kError, kFatal).
+
// All log entries under the severity level are not logged. Here,
+
// only debug messages are not logged.
+
ULogger::setLevel(ULogger::kInfo);
+
+
// Use a predefined Macro to easy logging. It can be
+
// called anywhere in the application as the logger is
+
// a Singleton.
+
UDEBUG("This message won't be logged because the "
+
"severity level of the logger is set to kInfo.");
+
+
UINFO("This message is logged.");
+
+
UWARN("A warning message...");
+
+
UERROR("An error message with code %d.", 42);
+
+
return 0;
+
}
+
ULogger class and convenient macros.
+
#define UERROR(...)
Definition ULogger.h:62
+
#define UINFO(...)
Definition ULogger.h:60
+
#define UDEBUG(...)
Definition ULogger.h:59
+
#define UWARN(...)
Definition ULogger.h:61
+
static void setType(Type type, const std::string &fileName=kDefaultLogFileName, bool append=true)
+
static void setLevel(ULogger::Level level)
Definition ULogger.h:343
+

Output:

[ INFO] (2010-09-25 18:08:20) main.cpp:18::main() This message is logged.
+
[ WARN] (2010-09-25 18:08:20) main.cpp:20::main() A warning message...
+
[ERROR] (2010-09-25 18:08:20) main.cpp:22::main() An error message with code 42.
+

Another useful form of the ULogger is to use it with the UTimer class. Here an example:

+
#include <utilite/UTimer.h>
+
...
+
UTimer timer; // automatically starts
+
// do some works for part A
+
UINFO("Time for part A = %f s", timer.ticks());
+
// do some works for part B
+
UINFO("Time for part B = %f s", timer.ticks());
+
// do some works for part C
+
UINFO("Time for part C = %f s", timer.ticks());
+
...
+
See also
setType()
+
+setLevel()
+
+UDEBUG(), UINFO(), UWARN(), UERROR(), UFATAL()
+ +

Definition at line 229 of file ULogger.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum ULogger::Type
+
+

Loggers available:

kTypeNoLog, kTypeConsole, kTypeFile
+
+

Definition at line 244 of file ULogger.h.

+ +
+
+ +

◆ Level

+ +
+
+ + + + +
enum ULogger::Level
+
+

Logger levels, from lowest severity to highest:

kDebug, kInfo, kWarning, kError, kFatal
+
+

Definition at line 252 of file ULogger.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ ULogger()

+ +
+
+ + + + + +
+ + + + + + + +
ULogger::ULogger ()
+
+inlineprotected
+
+ +

Definition at line 422 of file ULogger.h.

+ +
+
+

Member Function Documentation

+ +

◆ setType()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static void ULogger::setType (Type type,
const std::string & fileName = kDefaultLogFileName,
bool append = true 
)
+
+static
+
+

Set the type of the logger. When using kTypeFile, the parameter "fileName" would be changed (default is "./ULog.txt"), and optionally "append" if we want the logger to append messages to file or to overwrite the file.

Parameters
+ + + + +
typethe ULogger::Type of the logger.
fileNamefile name used with a file logger type.
appendif true, the file isn't overwritten, otherwise it is.
+
+
+

TODO : Can it be useful to have 2 or more types at the same time ? Print in console and file at the same time.

+ +
+
+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
static Type ULogger::type ()
+
+inlinestatic
+
+ +

Definition at line 266 of file ULogger.h.

+ +
+
+ +

◆ setPrintTime()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setPrintTime (bool printTime)
+
+inlinestatic
+
+

Print time: default true.

Parameters
+ + +
printTimetrue to print time, otherwise set to false.
+
+
+ +

Definition at line 273 of file ULogger.h.

+ +
+
+ +

◆ isPrintTime()

+ +
+
+ + + + + +
+ + + + + + + +
static bool ULogger::isPrintTime ()
+
+inlinestatic
+
+ +

Definition at line 274 of file ULogger.h.

+ +
+
+ +

◆ setPrintLevel()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setPrintLevel (bool printLevel)
+
+inlinestatic
+
+

Print level: default true.

Parameters
+ + +
printLeveltrue to print level, otherwise set to false.
+
+
+ +

Definition at line 280 of file ULogger.h.

+ +
+
+ +

◆ isPrintLevel()

+ +
+
+ + + + + +
+ + + + + + + +
static bool ULogger::isPrintLevel ()
+
+inlinestatic
+
+ +

Definition at line 281 of file ULogger.h.

+ +
+
+ +

◆ setPrintEndline()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setPrintEndline (bool printEndline)
+
+inlinestatic
+
+

Print end of line: default true.

Parameters
+ + +
printLeveltrue to print end of line, otherwise set to false.
+
+
+ +

Definition at line 287 of file ULogger.h.

+ +
+
+ +

◆ isPrintEndLine()

+ +
+
+ + + + + +
+ + + + + + + +
static bool ULogger::isPrintEndLine ()
+
+inlinestatic
+
+ +

Definition at line 288 of file ULogger.h.

+ +
+
+ +

◆ setPrintColored()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setPrintColored (bool printColored)
+
+inlinestatic
+
+

Print text with color: default true. Dark green for Debug, white for Info, yellow for Warning, red for Error and Fatal.

Parameters
+ + +
printColoredtrue to print text with color, otherwise set to false.
+
+
+ +

Definition at line 295 of file ULogger.h.

+ +
+
+ +

◆ isPrintColored()

+ +
+
+ + + + + +
+ + + + + + + +
static bool ULogger::isPrintColored ()
+
+inlinestatic
+
+ +

Definition at line 296 of file ULogger.h.

+ +
+
+ +

◆ setPrintWhere()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setPrintWhere (bool printWhere)
+
+inlinestatic
+
+

Print where is this message in source code: default true.

Parameters
+ + +
printWheretrue to print where, otherwise set to false.
+
+
+ +

Definition at line 302 of file ULogger.h.

+ +
+
+ +

◆ isPrintWhere()

+ +
+
+ + + + + +
+ + + + + + + +
static bool ULogger::isPrintWhere ()
+
+inlinestatic
+
+ +

Definition at line 303 of file ULogger.h.

+ +
+
+ +

◆ setPrintThreadId()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setPrintThreadId (bool printThreadId)
+
+inlinestatic
+
+

Print thread ID: default false.

Parameters
+ + +
printThreadIdtrue to print where, otherwise set to false.
+
+
+ +

Definition at line 309 of file ULogger.h.

+ +
+
+ +

◆ isPrintThreadId()

+ +
+
+ + + + + +
+ + + + + + + +
static bool ULogger::isPrintThreadId ()
+
+inlinestatic
+
+ +

Definition at line 310 of file ULogger.h.

+ +
+
+ +

◆ setPrintWhereFullPath()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setPrintWhereFullPath (bool printWhereFullPath)
+
+inlinestatic
+
+

Print the full path: default true. ULogger::setPrintWhere() must be true to have path printed.

Parameters
+ + +
printWhereFullPathtrue to print the full path, otherwise set to false.
+
+
+ +

Definition at line 316 of file ULogger.h.

+ +
+
+ +

◆ isPrintWhereFullPath()

+ +
+
+ + + + + +
+ + + + + + + +
static bool ULogger::isPrintWhereFullPath ()
+
+inlinestatic
+
+ +

Definition at line 317 of file ULogger.h.

+ +
+
+ +

◆ setBuffered()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setBuffered (bool buffered)
+
+static
+
+

Set is the logger buffers messages, default false. When true, the messages are buffered until the application is closed or ULogger::flush() is called.

+

Note that if logging to a file, flush doesn't mean that messages are written to file right away. To write everything on disk, set logger type to kTypeNoLog.

+
See also
ULogger::flush()
+
Parameters
+ + +
bufferedtrue to buffer messages, otherwise set to false.
+
+
+ +
+
+ +

◆ isBuffered()

+ +
+
+ + + + + +
+ + + + + + + +
static bool ULogger::isBuffered ()
+
+inlinestatic
+
+ +

Definition at line 330 of file ULogger.h.

+ +
+
+ +

◆ setLevel()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setLevel (ULogger::Level level)
+
+inlinestatic
+
+

Set logger level: default kInfo. All messages over the severity set are printed, other are ignored. The severity is from the lowest to highest:

    +
  • kDebug
  • +
  • kInfo
  • +
  • kWarning
  • +
  • kError
  • +
  • kFatal
    Parameters
    + + +
    levelthe minimum level of the messages printed.
    +
    +
    +
  • +
+ +

Definition at line 343 of file ULogger.h.

+ +
+
+ +

◆ level()

+ +
+
+ + + + + +
+ + + + + + + +
static ULogger::Level ULogger::level ()
+
+inlinestatic
+
+ +

Definition at line 344 of file ULogger.h.

+ +
+
+ +

◆ setEventLevel()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setEventLevel (ULogger::Level eventSentLevel)
+
+inlinestatic
+
+

An ULogEvent is sent on each message logged at the specified level. Note : On message with level >= exitLevel, the event is sent synchronously (see UEventsManager::post()).

See also
ULogEvent
+
+setExitLevel()
+ +

Definition at line 352 of file ULogger.h.

+ +
+
+ +

◆ eventLevel()

+ +
+
+ + + + + +
+ + + + + + + +
static ULogger::Level ULogger::eventLevel ()
+
+inlinestatic
+
+ +

Definition at line 353 of file ULogger.h.

+ +
+
+ +

◆ setTreadIdFilter()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::setTreadIdFilter (const std::set< unsigned long > & ids)
+
+inlinestatic
+
+

If not empty, only show log messages from threads included in this list.

+ +

Definition at line 358 of file ULogger.h.

+ +
+
+ +

◆ getTreadIdFilter()

+ +
+
+ + + + + +
+ + + + + + + +
static const std::set< unsigned long > & ULogger::getTreadIdFilter ()
+
+inlinestatic
+
+ +

Definition at line 360 of file ULogger.h.

+ +
+
+ +

◆ registerCurrentThread()

+ +
+
+ + + + + +
+ + + + + + + + +
static void ULogger::registerCurrentThread (const std::string & name)
+
+static
+
+

Threads can register to this list. If name is empty, it will clear the thread in the list. Should be called from the thread itself.

+ +
+
+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + +
static void ULogger::reset ()
+
+static
+
+

Reset to default parameters.

+ +
+
+ +

◆ flush()

+ +
+
+ + + + + +
+ + + + + + + +
static void ULogger::flush ()
+
+static
+
+

Flush buffered messages.

See also
setBuffered()
+ +
+
+ +

◆ getTime()

+ +
+
+ + + + + +
+ + + + + + + + +
static int ULogger::getTime (std::string & timeStr)
+
+static
+
+

Get the time in the format "2008-7-13 12:23:44".

Parameters
+ + +
timeStrstring were the time will be copied.
+
+
+
Returns
the number of characters written, or 0 if an error occurred.
+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ UDestroyer< ULogger >

+ +
+
+ + + + + +
+ + + + +
friend class UDestroyer< ULogger >
+
+friend
+
+ +

Definition at line 433 of file ULogger.h.

+ +
+
+

Member Data Documentation

+ +

◆ kDefaultLogFileName

+ +
+
+ + + + + +
+ + + + +
const std::string ULogger::kDefaultLogFileName
+
+static
+
+

The default log file name.

+ +

Definition at line 236 of file ULogger.h.

+ +
+
+ +

◆ logFileName_

+ +
+
+ + + + + +
+ + + + +
std::string ULogger::logFileName_
+
+staticprotected
+
+ +

Definition at line 447 of file ULogger.h.

+ +
+
+ +

◆ append_

+ +
+
+ + + + + +
+ + + + +
bool ULogger::append_
+
+staticprotected
+
+ +

Definition at line 452 of file ULogger.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • utilite/include/rtabmap/utilite/ULogger.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classUMutex-members.html b/preview/pr-1492/api/latest/classUMutex-members.html new file mode 100644 index 00000000..a1326724 --- /dev/null +++ b/preview/pr-1492/api/latest/classUMutex-members.html @@ -0,0 +1,93 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UMutex Member List
+
+
+ +

This is the complete list of members for UMutex, including all inherited members.

+ + + + + + +
lock() constUMutexinline
lockTry() constUMutexinline
UMutex()UMutexinline
unlock() constUMutexinline
~UMutex() (defined in UMutex)UMutexinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUMutex.html b/preview/pr-1492/api/latest/classUMutex.html new file mode 100644 index 00000000..88972eaa --- /dev/null +++ b/preview/pr-1492/api/latest/classUMutex.html @@ -0,0 +1,262 @@ + + + + + + + + +RTAB-Map: UMutex Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UMutex Class Reference
+
+
+ +

#include <UMutex.h>

+ + + + + + + + + + +

+Public Member Functions

 UMutex ()
 
int lock () const
 
int lockTry () const
 
int unlock () const
 
+

Detailed Description

+

A mutex class.

+

On a lock() call, the calling thread is blocked if the UMutex was previously locked by another thread. It is unblocked when unlock() is called.

+

On Unix (not yet tested on Windows), UMutex is recursive: the same thread can call multiple times lock() without being blocked.

+

Example:

UMutex m; // Mutex shared with another thread(s).
+
...
+
m.lock();
+
// Data is protected here from the second thread
+
//(assuming the second one protects also with the same mutex the same data).
+
m.unlock();
+ +
int unlock() const
Definition UMutex.h:120
+
int lock() const
Definition UMutex.h:88
+
See also
USemaphore
+ +

Definition at line 54 of file UMutex.h.

+

Constructor & Destructor Documentation

+ +

◆ UMutex()

+ +
+
+ + + + + +
+ + + + + + + +
UMutex::UMutex ()
+
+inline
+
+

The constructor.

+ +

Definition at line 62 of file UMutex.h.

+ +
+
+ +

◆ ~UMutex()

+ +
+
+ + + + + +
+ + + + + + + +
virtual UMutex::~UMutex ()
+
+inlinevirtual
+
+ +

Definition at line 75 of file UMutex.h.

+ +
+
+

Member Function Documentation

+ +

◆ lock()

+ +
+
+ + + + + +
+ + + + + + + +
int UMutex::lock () const
+
+inline
+
+

Lock the mutex.

Returns
0 on success, an error code otherwise.
+ +

Definition at line 88 of file UMutex.h.

+ +
+
+ +

◆ lockTry()

+ +
+
+ + + + + +
+ + + + + + + +
int UMutex::lockTry () const
+
+inline
+
+

Try locking the mutex.

Returns
0 if the mutex has been locked by this call, EBUSY (or another error code) otherwise.
+ +

Definition at line 110 of file UMutex.h.

+ +
+
+ +

◆ unlock()

+ +
+
+ + + + + +
+ + + + + + + +
int UMutex::unlock () const
+
+inline
+
+

Unlock the mutex.

Returns
0 on success, an error code otherwise.
+ +

Definition at line 120 of file UMutex.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • utilite/include/rtabmap/utilite/UMutex.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classUObjDeletedEvent-members.html b/preview/pr-1492/api/latest/classUObjDeletedEvent-members.html new file mode 100644 index 00000000..52dbdef5 --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletedEvent-members.html @@ -0,0 +1,94 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UObjDeletedEvent Member List
+
+
+ +

This is the complete list of members for UObjDeletedEvent, including all inherited members.

+ + + + + + + +
getClassName() constUObjDeletedEventinlinevirtual
getCode() constUEventinline
UEvent(int code=0)UEventinlineprotected
UObjDeletedEvent(int objDeletionThreadId) (defined in UObjDeletedEvent)UObjDeletedEventinline
~UEvent() (defined in UEvent)UEventinlinevirtual
~UObjDeletedEvent() (defined in UObjDeletedEvent)UObjDeletedEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUObjDeletedEvent.html b/preview/pr-1492/api/latest/classUObjDeletedEvent.html new file mode 100644 index 00000000..505fa53b --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletedEvent.html @@ -0,0 +1,221 @@ + + + + + + + + +RTAB-Map: UObjDeletedEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UObjDeletedEvent Class Reference
+
+
+ +

#include <UObjDeletionThread.h>

+
+Inheritance diagram for UObjDeletedEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for UObjDeletedEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + +

+Public Member Functions

 UObjDeletedEvent (int objDeletionThreadId)
 
virtual std::string getClassName () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+

Event used by UObjDeletionThread to notify when its object is deleted. It contains the object id used for deletion (can be retrieved by UEvent::getCode()).

+ +

Definition at line 31 of file UObjDeletionThread.h.

+

Constructor & Destructor Documentation

+ +

◆ UObjDeletedEvent()

+ +
+
+ + + + + +
+ + + + + + + + +
UObjDeletedEvent::UObjDeletedEvent (int objDeletionThreadId)
+
+inline
+
+ +

Definition at line 34 of file UObjDeletionThread.h.

+ +
+
+ +

◆ ~UObjDeletedEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual UObjDeletedEvent::~UObjDeletedEvent ()
+
+inlinevirtual
+
+ +

Definition at line 35 of file UObjDeletionThread.h.

+ +
+
+

Member Function Documentation

+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string UObjDeletedEvent::getClassName () const
+
+inlinevirtual
+
+
Returns
string "UObjDeletedEvent"
+ +

Implements UEvent.

+ +

Definition at line 39 of file UObjDeletionThread.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.map b/preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.map new file mode 100644 index 00000000..b1ed124f --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.md5 new file mode 100644 index 00000000..49e8faf9 --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.md5 @@ -0,0 +1 @@ +a400393b3b1d41227f91bc4849588c6a \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.png b/preview/pr-1492/api/latest/classUObjDeletedEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..363abcb946e2255e6c95c4f72e13b00e0efa6f00 GIT binary patch literal 3870 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.map b/preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.map new file mode 100644 index 00000000..b1ed124f --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.md5 new file mode 100644 index 00000000..49e8faf9 --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.md5 @@ -0,0 +1 @@ +a400393b3b1d41227f91bc4849588c6a \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.png b/preview/pr-1492/api/latest/classUObjDeletedEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..363abcb946e2255e6c95c4f72e13b00e0efa6f00 GIT binary patch literal 3870 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUObjDeletionThread-members.html b/preview/pr-1492/api/latest/classUObjDeletionThread-members.html new file mode 100644 index 00000000..5f4fab0c --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletionThread-members.html @@ -0,0 +1,132 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UObjDeletionThread< T > Member List
+
+
+ +

This is the complete list of members for UObjDeletionThread< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
currentThreadId() (defined in UThread)UThreadinlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
id() constUObjDeletionThread< T >inline
isCreating() constUThread
isIdle() constUThread
isKilled() constUThread
isRunning() constUThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
join(bool killFirst=false)UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
Priority enum nameUThread
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setObj(T *obj)UObjDeletionThread< T >inline
setPriority(Priority priority)UThread
start()UThread
startDeletion(int waitMs=0)UObjDeletionThread< T >inline
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
UObjDeletionThread(T *obj, int id=0)UObjDeletionThread< T >inline
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~UObjDeletionThread()UObjDeletionThread< T >inlinevirtual
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUObjDeletionThread.html b/preview/pr-1492/api/latest/classUObjDeletionThread.html new file mode 100644 index 00000000..7e1c8dc7 --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletionThread.html @@ -0,0 +1,415 @@ + + + + + + + + +RTAB-Map: UObjDeletionThread< T > Class Template Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UObjDeletionThread< T > Class Template Reference
+
+
+ +

#include <UObjDeletionThread.h>

+
+Inheritance diagram for UObjDeletionThread< T >:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for UObjDeletionThread< T >:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 UObjDeletionThread (T *obj, int id=0)
 
virtual ~UObjDeletionThread ()
 
void startDeletion (int waitMs=0)
 
int id () const
 
void setObj (T *obj)
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+
template<class T>
+class UObjDeletionThread< T >

This class can be used to delete a dynamically created object in another thread. Give the dynamic reference to object to it and it will notify with a UObjDeletedEvent when the object is deleted. The deletion can be delayed on startDeletion(), the thread will wait the time given before deleting the object.

+ +

Definition at line 48 of file UObjDeletionThread.h.

+

Constructor & Destructor Documentation

+ +

◆ UObjDeletionThread()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
UObjDeletionThread< T >::UObjDeletionThread (T * obj,
int id = 0 
)
+
+inline
+
+

The constructor.

Parameters
+ + + +
objthe object to delete
idthe custom id which will be sent in a event UObjDeletedEvent after the object is deleted
+
+
+ +

Definition at line 56 of file UObjDeletionThread.h.

+ +
+
+ +

◆ ~UObjDeletionThread()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual UObjDeletionThread< T >::~UObjDeletionThread ()
+
+inlinevirtual
+
+

The destructor. If this thread is not started but with an object set, the object is deleted. If the thread has not finished to delete the object, the calling thread will wait (on a UThreadNode::join()) until the object is deleted.

Parameters
+ + + +
objthe object to delete
idthe custom id which will be sent in a event UObjDeletedEvent after the object is deleted
+
+
+ +

Definition at line 68 of file UObjDeletionThread.h.

+ +
+
+

Member Function Documentation

+ +

◆ startDeletion()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
void UObjDeletionThread< T >::startDeletion (int waitMs = 0)
+
+inline
+
+

Start the thread after optional delay.

Parameters
+ + +
waitMsthe delay before deletion
+
+
+ +

Definition at line 81 of file UObjDeletionThread.h.

+ +
+
+ +

◆ id()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
int UObjDeletionThread< T >::id () const
+
+inline
+
+

Get id of the deleted object.

Returns
the id
+ +

Definition at line 87 of file UObjDeletionThread.h.

+ +
+
+ +

◆ setObj()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
void UObjDeletionThread< T >::setObj (T * obj)
+
+inline
+
+

Set a new object, if one was already set, the old one is deleted.

Parameters
+ + +
objthe object to delete
+
+
+ +

Definition at line 93 of file UObjDeletionThread.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.map b/preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.map new file mode 100644 index 00000000..0b70dcf0 --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.md5 b/preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.md5 new file mode 100644 index 00000000..afb01428 --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.md5 @@ -0,0 +1 @@ +6f3a8a87a98d9cf20edc6c46c9d9ffb4 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.png b/preview/pr-1492/api/latest/classUObjDeletionThread__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..17988c40b9efd8a72839d4283443cfa5899be2ea GIT binary patch literal 6769 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.map b/preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.map new file mode 100644 index 00000000..0b70dcf0 --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.md5 b/preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.md5 new file mode 100644 index 00000000..afb01428 --- /dev/null +++ b/preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.md5 @@ -0,0 +1 @@ +6f3a8a87a98d9cf20edc6c46c9d9ffb4 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.png b/preview/pr-1492/api/latest/classUObjDeletionThread__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..17988c40b9efd8a72839d4283443cfa5899be2ea GIT binary patch literal 6769 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUProcessInfo-members.html b/preview/pr-1492/api/latest/classUProcessInfo-members.html new file mode 100644 index 00000000..10c5c0f6 --- /dev/null +++ b/preview/pr-1492/api/latest/classUProcessInfo-members.html @@ -0,0 +1,91 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UProcessInfo Member List
+
+
+ +

This is the complete list of members for UProcessInfo, including all inherited members.

+ + + + +
getMemoryUsage()UProcessInfostatic
UProcessInfo()UProcessInfo
~UProcessInfo()UProcessInfovirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUProcessInfo.html b/preview/pr-1492/api/latest/classUProcessInfo.html new file mode 100644 index 00000000..b0efbced --- /dev/null +++ b/preview/pr-1492/api/latest/classUProcessInfo.html @@ -0,0 +1,153 @@ + + + + + + + + +RTAB-Map: UProcessInfo Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

Class for getting information about the current process. + More...

+ +

#include <UProcessInfo.h>

+ + + + + + + + +

+Public Member Functions

+ UProcessInfo ()
 Constructor.
 
+virtual ~UProcessInfo ()
 Virtual destructor.
 
+ + + + +

+Static Public Member Functions

static long int getMemoryUsage ()
 Get the memory used by the current process.
 
+

Detailed Description

+

Class for getting information about the current process.

+

This class provides static methods to retrieve information about the current process, such as memory usage. The information is retrieved from the operating system.

+

Example:

long int memory = UProcessInfo::getMemoryUsage();
+
std::cout << "Memory usage: " << memory << " bytes" << std::endl;
+
static long int getMemoryUsage()
Get the memory used by the current process.
+
+

Definition at line 47 of file UProcessInfo.h.

+

Member Function Documentation

+ +

◆ getMemoryUsage()

+ +
+
+ + + + + +
+ + + + + + + +
static long int UProcessInfo::getMemoryUsage ()
+
+static
+
+ +

Get the memory used by the current process.

+

This method returns the amount of memory currently used by the process. The exact meaning of "memory used" may vary between operating systems.

+
Returns
the number of bytes used by the current process, or -1 on error
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUScopeMutex-members.html b/preview/pr-1492/api/latest/classUScopeMutex-members.html new file mode 100644 index 00000000..ee9c81da --- /dev/null +++ b/preview/pr-1492/api/latest/classUScopeMutex-members.html @@ -0,0 +1,91 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UScopeMutex Member List
+
+
+ +

This is the complete list of members for UScopeMutex, including all inherited members.

+ + + + +
UScopeMutex(const UMutex &mutex) (defined in UScopeMutex)UScopeMutexinline
UScopeMutex(UMutex *mutex) (defined in UScopeMutex)UScopeMutexinline
~UScopeMutex() (defined in UScopeMutex)UScopeMutexinline
+ + + + diff --git a/preview/pr-1492/api/latest/classUScopeMutex.html b/preview/pr-1492/api/latest/classUScopeMutex.html new file mode 100644 index 00000000..1ab0f255 --- /dev/null +++ b/preview/pr-1492/api/latest/classUScopeMutex.html @@ -0,0 +1,207 @@ + + + + + + + + +RTAB-Map: UScopeMutex Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UScopeMutex Class Reference
+
+
+ +

#include <UMutex.h>

+ + + + + + +

+Public Member Functions

 UScopeMutex (const UMutex &mutex)
 
 UScopeMutex (UMutex *mutex)
 
+

Detailed Description

+

Automatically lock the referenced mutex on constructor and unlock mutex on destructor.

+

Example:

UMutex m; // Mutex shared with another thread(s).
+
...
+
int myMethod()
+
{
+
UScopeMutex sm(m); // automatically lock the mutex m
+
if(cond1)
+
{
+
return 1; // automatically unlock the mutex m
+
}
+
else if(cond2)
+
{
+
return 2; // automatically unlock the mutex m
+
}
+
return 0; // automatically unlock the mutex m
+
}
+ + +
See also
UMutex
+ +

Definition at line 164 of file UMutex.h.

+

Constructor & Destructor Documentation

+ +

◆ UScopeMutex() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
UScopeMutex::UScopeMutex (const UMutex & mutex)
+
+inline
+
+ +

Definition at line 167 of file UMutex.h.

+ +
+
+ +

◆ UScopeMutex() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
UScopeMutex::UScopeMutex (UMutex * mutex)
+
+inline
+
+ +

Definition at line 173 of file UMutex.h.

+ +
+
+ +

◆ ~UScopeMutex()

+ +
+
+ + + + + +
+ + + + + + + +
UScopeMutex::~UScopeMutex ()
+
+inline
+
+ +

Definition at line 178 of file UMutex.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • utilite/include/rtabmap/utilite/UMutex.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classUSemaphore-members.html b/preview/pr-1492/api/latest/classUSemaphore-members.html new file mode 100644 index 00000000..18dbe806 --- /dev/null +++ b/preview/pr-1492/api/latest/classUSemaphore-members.html @@ -0,0 +1,94 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
USemaphore Member List
+
+
+ +

This is the complete list of members for USemaphore, including all inherited members.

+ + + + + + + +
acquire(int n=1, int ms=0)USemaphoreinline
acquireTry(int n)USemaphoreinline
release(int n=1)USemaphoreinline
USemaphore(int initValue=0)USemaphoreinline
value()USemaphoreinline
~USemaphore() (defined in USemaphore)USemaphoreinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUSemaphore.html b/preview/pr-1492/api/latest/classUSemaphore.html new file mode 100644 index 00000000..139de28c --- /dev/null +++ b/preview/pr-1492/api/latest/classUSemaphore.html @@ -0,0 +1,324 @@ + + + + + + + + +RTAB-Map: USemaphore Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
USemaphore Class Reference
+
+
+ +

#include <USemaphore.h>

+ + + + + + + + + + + + +

+Public Member Functions

 USemaphore (int initValue=0)
 
bool acquire (int n=1, int ms=0)
 
int acquireTry (int n)
 
int release (int n=1)
 
int value ()
 
+

Detailed Description

+

A semaphore class.

+

On an acquire() call, the calling thread is blocked if the USemaphore's value is <= 0. It is unblocked when release() is called. The function acquire() decreases by 1 (default) the semaphore's value and release() increases it by 1 (default).

+

Example:

+
s.acquire(); // Will wait until s.release() is called by another thread.
+ +
bool acquire(int n=1, int ms=0)
Definition USemaphore.h:108
+
See also
UMutex
+ +

Definition at line 55 of file USemaphore.h.

+

Constructor & Destructor Documentation

+ +

◆ USemaphore()

+ +
+
+ + + + + +
+ + + + + + + + +
USemaphore::USemaphore (int initValue = 0)
+
+inline
+
+

The constructor. The semaphore waits on acquire() when its value is <= 0.

Parameters
+ + +
nnumber to initialize
+
+
+ +

Definition at line 62 of file USemaphore.h.

+ +
+
+ +

◆ ~USemaphore()

+ +
+
+ + + + + +
+ + + + + + + +
virtual USemaphore::~USemaphore ()
+
+inlinevirtual
+
+ +

Definition at line 76 of file USemaphore.h.

+ +
+
+

Member Function Documentation

+ +

◆ acquire()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool USemaphore::acquire (int n = 1,
int ms = 0 
)
+
+inline
+
+

Acquire the semaphore. If semaphore's value is <=0, the calling thread will wait until the count acquired is released.

See also
release()
+
Parameters
+ + + +
nnumber to acquire
ttime to wait (ms), a value <=0 means infinite
+
+
+
Returns
true on success, false on error/timeout
+ +

Definition at line 108 of file USemaphore.h.

+ +
+
+ +

◆ acquireTry()

+ +
+
+ + + + + +
+ + + + + + + + +
int USemaphore::acquireTry (int n)
+
+inline
+
+
Parameters
+ + +
nthe number to acquire.
+
+
+ +

Definition at line 164 of file USemaphore.h.

+ +
+
+ +

◆ release()

+ +
+
+ + + + + +
+ + + + + + + + +
int USemaphore::release (int n = 1)
+
+inline
+
+

Release the semaphore, increasing its value by n and signaling waiting threads (which called acquire()).

Parameters
+ + +
nthe number to release.
+
+
+
Returns
0 on success, ERANGE if the release would push the semaphore over SEM_VALUE_MAX (the count is then left unchanged). The Unix implementation cannot fail and always returns 0.
+ +

Definition at line 197 of file USemaphore.h.

+ +
+
+ +

◆ value()

+ +
+
+ + + + + +
+ + + + + + + +
int USemaphore::value ()
+
+inline
+
+

Get the USempahore's value.

Returns
the semaphore's value
+ +

Definition at line 221 of file USemaphore.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classUThread-members.html b/preview/pr-1492/api/latest/classUThread-members.html new file mode 100644 index 00000000..a3233936 --- /dev/null +++ b/preview/pr-1492/api/latest/classUThread-members.html @@ -0,0 +1,127 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UThread Member List
+
+
+ +

This is the complete list of members for UThread, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
currentThreadId() (defined in UThread)UThreadinlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
isCreating() constUThread
isIdle() constUThread
isKilled() constUThread
isRunning() constUThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
join(bool killFirst=false)UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
Priority enum nameUThread
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setPriority(Priority priority)UThread
start()UThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUThread.html b/preview/pr-1492/api/latest/classUThread.html new file mode 100644 index 00000000..66ab1049 --- /dev/null +++ b/preview/pr-1492/api/latest/classUThread.html @@ -0,0 +1,615 @@ + + + + + + + + +RTAB-Map: UThread Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <UThread.h>

+
+Inheritance diagram for UThread:
+
+
Inheritance graph
+ + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
+
+Collaboration diagram for UThread:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + +

+Public Types

enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+ + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
+ + + + + + + + + + + + + + +

+Additional Inherited Members

- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+

The class UThread is an abstract class for creating thread objects. A UThread provides methods to create threads as an object-style fashion.

+

For most of inherited classes, only mainLoop() needs to be implemented, then only start() needs to be called from the outside. The main loop is called until the thread itself calls kill() or another thread calls kill() or join() (with parameter to true) on this thread. Unlike kill(), join() is a blocking call: the calling thread will wait until this thread has finished, thus join() must not be called inside the mainLoop().

+

If inside the mainLoop(), at some time, the thread needs to wait on a mutex/semaphore (like for the acquisition of a resource), the function mainLoopKill() should be implemented to release the mutex/semaphore when the thread is killed, to avoid a deadlock. The function killCleanup() is called after the thread's state is set to kSKilled. After the mutex/semaphore is released in killCleanup(), on wake up, the thread can know if it needs to stop by calling isKilled().

+

To do an initialization process (executed by the worker thread) just one time before entering the mainLoop(), mainLoopBegin() can be implemented.

+

Example:

#include "utilite/UThread.h"
+
class SimpleThread : public UThread
+
{
+
public:
+
SimpleThread() {}
+
virtual ~SimpleThread() {
+
// The calling thread will wait until this thread has finished.
+
this->join(true);
+
}
+
+
protected:
+
virtual void mainLoop() {
+
// Do some works...
+
+
// This will stop the thread, otherwise the mainLoop() is recalled.
+
this->kill();
+
}
+
};
+
+
int main(int argc, char * argv[])
+
{
+
SimpleThread t;
+
t.start();
+
t.join(); // Wait until the thread has finished.
+
return 0;
+
}
+ +
See also
start()
+
+kill()
+
+join()
+
+mainLoopBegin()
+
+mainLoopKill()
+
+mainLoop()
+ +

Definition at line 86 of file UThread.h.

+

Member Enumeration Documentation

+ +

◆ Priority

+ +
+
+ + + + +
enum UThread::Priority
+
+

Enum of priorities : kPLow, kPBelowNormal, kPNormal, kPAboveNormal, kPRealTime.

+ +

Definition at line 92 of file UThread.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ UThread()

+ +
+
+ + + + + + + + +
UThread::UThread (Priority priority = kPNormal)
+
+

The constructor.

See also
Priority
+
Parameters
+ + +
prioritythe thread priority
+
+
+ +
+
+ +

◆ ~UThread()

+ +
+
+ + + + + +
+ + + + + + + +
virtual UThread::~UThread ()
+
+virtual
+
+

The destructor. Inherited classes must call join(true) inside their destructor to avoid memory leaks where the underlying c-thread is still running.

+

Note: not safe to delete a thread while other threads are joining it.

+ +
+
+

Member Function Documentation

+ +

◆ currentThreadId()

+ +
+
+ + + + + +
+ + + + + + + +
static unsigned long UThread::currentThreadId ()
+
+inlinestatic
+
+ +

Definition at line 96 of file UThread.h.

+ +
+
+ +

◆ start()

+ +
+
+ + + + + + + +
void UThread::start ()
+
+

Start the thread. Once the thread is started, subsequent calls to start() are ignored until the thread is killed.

See also
kill()
+ +
+
+ +

◆ kill()

+ +
+
+ + + + + + + +
void UThread::kill ()
+
+

Kill the thread. This functions does nothing if the thread is not started or is killed.

+

Note : not a blocking call

+ +
+
+ +

◆ join()

+ +
+
+ + + + + + + + +
void UThread::join (bool killFirst = false)
+
+

The caller thread will wait until the thread has finished.

+

Note : blocking call

Parameters
+ + +
killFirstif you want kill() to be called before joining (default false), otherwise not.
+
+
+ +
+
+ +

◆ setPriority()

+ +
+
+ + + + + + + + +
void UThread::setPriority (Priority priority)
+
+

Set the thread priority.

Parameters
+ + +
prioritythe priority
+
+
+ +
+
+ +

◆ setAffinity()

+ +
+
+ + + + + + + + +
void UThread::setAffinity (int cpu = 0)
+
+

Set the thread affinity. This is applied during start of the thread.

+

MAC OS X : http://developer.apple.com/library/mac/#releasenotes/Performance/RN-AffinityAPI/_index.html.

Parameters
+ + +
cputhe cpu id (start at 1), 0 means no affinity (default).
+
+
+ +
+
+ +

◆ isCreating()

+ +
+
+ + + + + + + +
bool UThread::isCreating () const
+
+
Returns
if the state of the thread is kSCreating (after start() is called but before entering the mainLoop()).
+ +
+
+ +

◆ isRunning()

+ +
+
+ + + + + + + +
bool UThread::isRunning () const
+
+
Returns
if the state of the thread is kSRunning (it is executing the mainLoop()) or kSCreating.
+ +
+
+ +

◆ isIdle()

+ +
+
+ + + + + + + +
bool UThread::isIdle () const
+
+
Returns
if the state of the thread is kSIdle (before start() is called and after the thread is totally killed (or after join(true))).
+ +
+
+ +

◆ isKilled()

+ +
+
+ + + + + + + +
bool UThread::isKilled () const
+
+
Returns
if the state of the thread is kSKilled (after kill() is called and before the thread is totally killed).
+ +
+
+ +

◆ getThreadHandle()

+ +
+
+ + + + + +
+ + + + + + + +
Handle UThread::getThreadHandle () const
+
+inline
+
+ +

Definition at line 171 of file UThread.h.

+ +
+
+ +

◆ getThreadId()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned long UThread::getThreadId () const
+
+inline
+
+ +

Definition at line 172 of file UThread.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • utilite/include/rtabmap/utilite/UThread.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classUThreadC-members.html b/preview/pr-1492/api/latest/classUThreadC-members.html new file mode 100644 index 00000000..a737a392 --- /dev/null +++ b/preview/pr-1492/api/latest/classUThreadC-members.html @@ -0,0 +1,117 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UThreadC< Thread_T > Member List
+
+
+ +

This is the complete list of members for UThreadC< Thread_T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Create(const Handler &Function, Thread_C_R Param, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlinestatic
Create(Thread_C_R Param, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inline
Create(const Handler &Function, Thread_C_R Param, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlinestatic
Create(Thread_C_R Param, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inline
Detach(Handle H) (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlinestatic
Detach(const Handle &H) (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlinestatic
Exit() (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlineprotectedstatic
Exit() (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlineprotectedstatic
Handle typedef (defined in UThreadC< Thread_T >)UThreadC< Thread_T >
Handle typedef (defined in UThreadC< Thread_T >)UThreadC< Thread_T >
Handler typedef (defined in UThreadC< Thread_T >)UThreadC< Thread_T >
Handler typedef (defined in UThreadC< Thread_T >)UThreadC< Thread_T >
Join(Handle H) (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlinestatic
Join(const Handle &H) (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlinestatic
Kill(Handle H) (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlinestatic
Kill(const Handle &H) (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlinestatic
Self() (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlineprotectedstatic
Self() (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlineprotectedstatic
TestCancel() (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlineprotectedstatic
TestCancel() (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlineprotectedstatic
Thread_C_R typedef (defined in UThreadC< Thread_T >)UThreadC< Thread_T >
Thread_C_R typedef (defined in UThreadC< Thread_T >)UThreadC< Thread_T >
Thread_R typedef (defined in UThreadC< Thread_T >)UThreadC< Thread_T >
Thread_R typedef (defined in UThreadC< Thread_T >)UThreadC< Thread_T >
ThreadMain(Thread_R)=0 (defined in UThreadC< Thread_T >)UThreadC< Thread_T >protectedpure virtual
ThreadMain(Thread_R)=0 (defined in UThreadC< Thread_T >)UThreadC< Thread_T >protectedpure virtual
UThreadC() (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlineprotected
UThreadC() (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlineprotected
~UThreadC() (defined in UThreadC< Thread_T >)UThreadC< Thread_T >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUThreadC.html b/preview/pr-1492/api/latest/classUThreadC.html new file mode 100644 index 00000000..ae3a9c11 --- /dev/null +++ b/preview/pr-1492/api/latest/classUThreadC.html @@ -0,0 +1,1027 @@ + + + + + + + + +RTAB-Map: UThreadC< Thread_T > Class Template Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + +

+Public Types

typedef Thread_T & Thread_R
 
typedef const Thread_T & Thread_C_R
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) (Thread_R)
 
typedef Thread_T & Thread_R
 
typedef const Thread_T & Thread_C_R
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) (Thread_R)
 
+ + + + + +

+Public Member Functions

int Create (Thread_C_R Param, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Thread_C_R Param, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+ + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static int Create (const Handler &Function, Thread_C_R Param, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Thread_C_R Param, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
+ + + + + +

+Protected Member Functions

+virtual void ThreadMain (Thread_R)=0
 
+virtual void ThreadMain (Thread_R)=0
 
+ + + + + + + + + + + + + +

+Static Protected Member Functions

static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+
template<typename Thread_T>
+class UThreadC< Thread_T >
+

Definition at line 66 of file UThreadC.h.

+

Member Typedef Documentation

+ +

◆ Thread_R [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + +
typedef Thread_T& UThreadC< Thread_T >::Thread_R
+
+ +

Definition at line 72 of file UThreadC.h.

+ +
+
+ +

◆ Thread_C_R [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + +
typedef const Thread_T& UThreadC< Thread_T >::Thread_C_R
+
+ +

Definition at line 73 of file UThreadC.h.

+ +
+
+ +

◆ Handle [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + +
typedef THREAD_HANDLE UThreadC< Thread_T >::Handle
+
+ +

Definition at line 75 of file UThreadC.h.

+ +
+
+ +

◆ Handler [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + +
typedef void(* UThreadC< Thread_T >::Handler) (Thread_R)
+
+ +

Definition at line 76 of file UThreadC.h.

+ +
+
+ +

◆ Thread_R [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + +
typedef Thread_T& UThreadC< Thread_T >::Thread_R
+
+ +

Definition at line 97 of file UThreadC.h.

+ +
+
+ +

◆ Thread_C_R [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + +
typedef const Thread_T& UThreadC< Thread_T >::Thread_C_R
+
+ +

Definition at line 98 of file UThreadC.h.

+ +
+
+ +

◆ Handle [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + +
typedef THREAD_HANDLE UThreadC< Thread_T >::Handle
+
+ +

Definition at line 100 of file UThreadC.h.

+ +
+
+ +

◆ Handler [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + +
typedef void(* UThreadC< Thread_T >::Handler) (Thread_R)
+
+ +

Definition at line 101 of file UThreadC.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ ~UThreadC()

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + +
virtual UThreadC< Thread_T >::~UThreadC ()
+
+inlinevirtual
+
+ +

Definition at line 78 of file UThreadC.h.

+ +
+
+ +

◆ UThreadC() [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + +
UThreadC< Thread_T >::UThreadC ()
+
+inlineprotected
+
+ +

Definition at line 81 of file UThreadC.h.

+ +
+
+ +

◆ UThreadC() [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + +
UThreadC< Thread_T >::UThreadC ()
+
+inlineprotected
+
+ +

Definition at line 104 of file UThreadC.h.

+ +
+
+

Member Function Documentation

+ +

◆ Exit() [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + +
static void UThreadC< Thread_T >::Exit ()
+
+inlinestaticprotected
+
+ +

Definition at line 85 of file UThreadC.h.

+ +
+
+ +

◆ TestCancel() [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + +
static void UThreadC< Thread_T >::TestCancel ()
+
+inlinestaticprotected
+
+ +

Definition at line 88 of file UThreadC.h.

+ +
+
+ +

◆ Self() [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + +
static Handle UThreadC< Thread_T >::Self ()
+
+inlinestaticprotected
+
+ +

Definition at line 92 of file UThreadC.h.

+ +
+
+ +

◆ Create() [1/4]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static int UThreadC< Thread_T >::Create (const Handler & Function,
Thread_C_R Param,
Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
)
+
+inlinestatic
+
+ +

Definition at line 97 of file UThreadC.h.

+ +
+
+ +

◆ Create() [2/4]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int UThreadC< Thread_T >::Create (Thread_C_R Param,
Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
) const
+
+inline
+
+ +

Definition at line 131 of file UThreadC.h.

+ +
+
+ +

◆ Join() [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + +
static int UThreadC< Thread_T >::Join (Handle H)
+
+inlinestatic
+
+ +

Definition at line 164 of file UThreadC.h.

+ +
+
+ +

◆ Kill() [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + +
static int UThreadC< Thread_T >::Kill (Handle H)
+
+inlinestatic
+
+ +

Definition at line 168 of file UThreadC.h.

+ +
+
+ +

◆ Detach() [1/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + +
static int UThreadC< Thread_T >::Detach (Handle H)
+
+inlinestatic
+
+ +

Definition at line 172 of file UThreadC.h.

+ +
+
+ +

◆ Exit() [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + +
static void UThreadC< Thread_T >::Exit ()
+
+inlinestaticprotected
+
+ +

Definition at line 108 of file UThreadC.h.

+ +
+
+ +

◆ TestCancel() [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + +
static void UThreadC< Thread_T >::TestCancel ()
+
+inlinestaticprotected
+
+ +

Definition at line 111 of file UThreadC.h.

+ +
+
+ +

◆ Self() [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + +
static int UThreadC< Thread_T >::Self ()
+
+inlinestaticprotected
+
+ +

Definition at line 114 of file UThreadC.h.

+ +
+
+ +

◆ Create() [3/4]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static int UThreadC< Thread_T >::Create (const Handler & Function,
Thread_C_R Param,
Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
)
+
+inlinestatic
+
+ +

Definition at line 126 of file UThreadC.h.

+ +
+
+ +

◆ Create() [4/4]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int UThreadC< Thread_T >::Create (Thread_C_R Param,
Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
) const
+
+inline
+
+ +

Definition at line 158 of file UThreadC.h.

+ +
+
+ +

◆ Join() [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + +
static int UThreadC< Thread_T >::Join (const Handle & H)
+
+inlinestatic
+
+ +

Definition at line 189 of file UThreadC.h.

+ +
+
+ +

◆ Kill() [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + +
static int UThreadC< Thread_T >::Kill (const Handle & H)
+
+inlinestatic
+
+ +

Definition at line 203 of file UThreadC.h.

+ +
+
+ +

◆ Detach() [2/2]

+ +
+
+
+template<typename Thread_T >
+ + + + + +
+ + + + + + + + +
static int UThreadC< Thread_T >::Detach (const Handle & H)
+
+inlinestatic
+
+ +

Definition at line 206 of file UThreadC.h.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • utilite/include/rtabmap/utilite/Posix/UThreadC.h
  • +
  • utilite/include/rtabmap/utilite/Win32/UThreadC.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4-members.html b/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4-members.html new file mode 100644 index 00000000..6a9452a9 --- /dev/null +++ b/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4-members.html @@ -0,0 +1,116 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UThreadC< void > Member List
+
+
+ +

This is the complete list of members for UThreadC< void >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
Detach(Handle H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Join(Handle H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Kill(Handle H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
ThreadMain()=0 (defined in UThreadC< void >)UThreadC< void >protectedpure virtual
ThreadMain()=0 (defined in UThreadC< void >)UThreadC< void >protectedpure virtual
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4.html b/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4.html new file mode 100644 index 00000000..c9ed10b6 --- /dev/null +++ b/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4.html @@ -0,0 +1,1061 @@ + + + + + + + + +RTAB-Map: UThreadC< void > Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+
+Inheritance diagram for UThreadC< void >:
+
+
Inheritance graph
+ + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
+ + + + + + + + + + +

+Public Types

typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
+ + + + + + + + + +

+Public Member Functions

int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+ + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
+ + + + + +

+Protected Member Functions

+virtual void ThreadMain ()=0
 
+virtual void ThreadMain ()=0
 
+ + + + + + + + + + + + + +

+Static Protected Member Functions

static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+
+

Definition at line 226 of file UThreadC.h.

+

Member Typedef Documentation

+ +

◆ Handle [1/2]

+ +
+
+ + + + +
typedef THREAD_HANDLE UThreadC< void >::Handle
+
+ +

Definition at line 232 of file UThreadC.h.

+ +
+
+ +

◆ Handler [1/2]

+ +
+
+ + + + +
typedef void(* UThreadC< void >::Handler) ()
+
+ +

Definition at line 233 of file UThreadC.h.

+ +
+
+ +

◆ Handle [2/2]

+ +
+
+ + + + +
typedef THREAD_HANDLE UThreadC< void >::Handle
+
+ +

Definition at line 251 of file UThreadC.h.

+ +
+
+ +

◆ Handler [2/2]

+ +
+
+ + + + +
typedef void(* UThreadC< void >::Handler) ()
+
+ +

Definition at line 252 of file UThreadC.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ ~UThreadC() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
virtual UThreadC< void >::~UThreadC ()
+
+inlinevirtual
+
+ +

Definition at line 235 of file UThreadC.h.

+ +
+
+ +

◆ UThreadC() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
UThreadC< void >::UThreadC ()
+
+inlineprotected
+
+ +

Definition at line 238 of file UThreadC.h.

+ +
+
+ +

◆ ~UThreadC() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
virtual UThreadC< void >::~UThreadC ()
+
+inlinevirtual
+
+ +

Definition at line 252 of file UThreadC.h.

+ +
+
+ +

◆ UThreadC() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
UThreadC< void >::UThreadC ()
+
+inlineprotected
+
+ +

Definition at line 252 of file UThreadC.h.

+ +
+
+

Member Function Documentation

+ +

◆ Exit() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
static void UThreadC< void >::Exit ()
+
+inlinestaticprotected
+
+ +

Definition at line 242 of file UThreadC.h.

+ +
+
+ +

◆ TestCancel() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
static void UThreadC< void >::TestCancel ()
+
+inlinestaticprotected
+
+ +

Definition at line 246 of file UThreadC.h.

+ +
+
+ +

◆ Self() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
static Handle UThreadC< void >::Self ()
+
+inlinestaticprotected
+
+ +

Definition at line 250 of file UThreadC.h.

+ +
+
+ +

◆ Create() [1/6]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static int UThreadC< void >::Create (const Handler & Function,
Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
)
+
+inlinestatic
+
+ +

Definition at line 255 of file UThreadC.h.

+ +
+
+ +

◆ Create() [2/6]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int UThreadC< void >::Create (Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
) const
+
+inline
+
+ +

Definition at line 288 of file UThreadC.h.

+ +
+
+ +

◆ Create() [3/6]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int UThreadC< void >::Create (unsigned long & ThreadId,
Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
) const
+
+inline
+
+ +

Definition at line 320 of file UThreadC.h.

+ +
+
+ +

◆ Join() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static int UThreadC< void >::Join (Handle H)
+
+inlinestatic
+
+ +

Definition at line 354 of file UThreadC.h.

+ +
+
+ +

◆ Kill() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static int UThreadC< void >::Kill (Handle H)
+
+inlinestatic
+
+ +

Definition at line 358 of file UThreadC.h.

+ +
+
+ +

◆ Detach() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static int UThreadC< void >::Detach (Handle H)
+
+inlinestatic
+
+ +

Definition at line 362 of file UThreadC.h.

+ +
+
+ +

◆ Exit() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
static void UThreadC< void >::Exit ()
+
+inlinestaticprotected
+
+ +

Definition at line 261 of file UThreadC.h.

+ +
+
+ +

◆ TestCancel() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
static void UThreadC< void >::TestCancel ()
+
+inlinestaticprotected
+
+ +

Definition at line 264 of file UThreadC.h.

+ +
+
+ +

◆ Self() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
static int UThreadC< void >::Self ()
+
+inlinestaticprotected
+
+ +

Definition at line 267 of file UThreadC.h.

+ +
+
+ +

◆ Create() [4/6]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static int UThreadC< void >::Create (const Handler & Function,
Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
)
+
+inlinestatic
+
+ +

Definition at line 280 of file UThreadC.h.

+ +
+
+ +

◆ Create() [5/6]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int UThreadC< void >::Create (Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
) const
+
+inline
+
+ +

Definition at line 302 of file UThreadC.h.

+ +
+
+ +

◆ Create() [6/6]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int UThreadC< void >::Create (unsigned long & ThreadId,
Handle *const & H = 0,
const bool & CreateDetached = false,
const unsigned int & StackSize = 0,
const bool & CancelEnable = false,
const bool & CancelAsync = false 
) const
+
+inline
+
+ +

Definition at line 324 of file UThreadC.h.

+ +
+
+ +

◆ Join() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static int UThreadC< void >::Join (const Handle & H)
+
+inlinestatic
+
+ +

Definition at line 348 of file UThreadC.h.

+ +
+
+ +

◆ Kill() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static int UThreadC< void >::Kill (const Handle & H)
+
+inlinestatic
+
+ +

Definition at line 362 of file UThreadC.h.

+ +
+
+ +

◆ Detach() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static int UThreadC< void >::Detach (const Handle & H)
+
+inlinestatic
+
+ +

Definition at line 365 of file UThreadC.h.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • utilite/include/rtabmap/utilite/Posix/UThreadC.h
  • +
  • utilite/include/rtabmap/utilite/Win32/UThreadC.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.map b/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.map new file mode 100644 index 00000000..bb14dceb --- /dev/null +++ b/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.md5 b/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.md5 new file mode 100644 index 00000000..87269f17 --- /dev/null +++ b/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +adde97c410d8f2d8c5fb41e41d1bdb50 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.png b/preview/pr-1492/api/latest/classUThreadC_3_01void_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..83dfc23e778d2361cec74b61d4a43b32509aa514 GIT binary patch literal 43335 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 W(r7$q4`+aZ!`suBeQ85@`hNj^_epL5 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classUThread__coll__graph.map b/preview/pr-1492/api/latest/classUThread__coll__graph.map new file mode 100644 index 00000000..aafd36b2 --- /dev/null +++ b/preview/pr-1492/api/latest/classUThread__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classUThread__coll__graph.md5 b/preview/pr-1492/api/latest/classUThread__coll__graph.md5 new file mode 100644 index 00000000..15edb62c --- /dev/null +++ b/preview/pr-1492/api/latest/classUThread__coll__graph.md5 @@ -0,0 +1 @@ +697514e647218960aeef4e637f2d87f5 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUThread__coll__graph.png b/preview/pr-1492/api/latest/classUThread__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b5ae22ce8847fe96e5d608caccdf0bcdd47438f2 GIT binary patch literal 3851 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 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classUThread__inherit__graph.md5 b/preview/pr-1492/api/latest/classUThread__inherit__graph.md5 new file mode 100644 index 00000000..dbc97c44 --- /dev/null +++ b/preview/pr-1492/api/latest/classUThread__inherit__graph.md5 @@ -0,0 +1 @@ +28469be9b90305d8fb84dfb8b1722303 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classUThread__inherit__graph.png b/preview/pr-1492/api/latest/classUThread__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c41bc86b4d53e0af5e540548b78a3b39573a4fea GIT binary patch literal 43080 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 OTx%Sh + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +

+
+
UTimer Member List
+
+
+ +

This is the complete list of members for UTimer, including all inherited members.

+ + + + + + + + + + +
elapsed()UTimerinline
getElapsedTime() (defined in UTimer)UTimer
now()UTimerstatic
restart()UTimerinline
start()UTimer
stop()UTimer
ticks() (defined in UTimer)UTimer
UTimer() (defined in UTimer)UTimer
~UTimer() (defined in UTimer)UTimer
+ + + + diff --git a/preview/pr-1492/api/latest/classUTimer.html b/preview/pr-1492/api/latest/classUTimer.html new file mode 100644 index 00000000..03afab36 --- /dev/null +++ b/preview/pr-1492/api/latest/classUTimer.html @@ -0,0 +1,248 @@ + + + + + + + + +RTAB-Map: UTimer Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <UTimer.h>

+ + + + + + + + + + + + + + +

+Public Member Functions

void start ()
 
void stop ()
 
double elapsed ()
 
+double getElapsedTime ()
 
double restart ()
 
+double ticks ()
 
+ + + +

+Static Public Member Functions

static double now ()
 
+

Detailed Description

+

This class is used to time some codes (in seconds). On Unix, the resolution is up to microseconds (see gettimeofday()). On Windows, the performance counter is used (see QueryPerformanceCounter() and QueryPerformanceFrequency()). Example:

UTimer timer;
+
timer.start();
+
... (do some work)
+
timer.stop();
+
double seconds = timer.getInterval();
+
...
+ +
void start()
+
void stop()
+
+

Definition at line 46 of file UTimer.h.

+

Member Function Documentation

+ +

◆ now()

+ +
+
+ + + + + +
+ + + + + + + +
static double UTimer::now ()
+
+static
+
+

This method is used to get the time of the system right now.

Returns
double the time in seconds.
+ +
+
+ +

◆ start()

+ +
+
+ + + + + + + +
void UTimer::start ()
+
+

This method starts the timer.

+ +
+
+ +

◆ stop()

+ +
+
+ + + + + + + +
void UTimer::stop ()
+
+

This method stops the timer.

+ +
+
+ +

◆ elapsed()

+ +
+
+ + + + + +
+ + + + + + + +
double UTimer::elapsed ()
+
+inline
+
+

This method is used to get the elapsed time between now and the start(). If timer is stopped, the interval time between stop() and the start() is returned.

Returns
double the interval in seconds.
+ +

Definition at line 75 of file UTimer.h.

+ +
+
+ +

◆ restart()

+ +
+
+ + + + + +
+ + + + + + + +
double UTimer::restart ()
+
+inline
+
+

This method is used to get the interval of the timer while it is running. It's automatically stop the timer, get the interval and restart the timer. It's the same of calling stop(), elapsed() and start(). Method restart() does the same thing, for convenience.

Returns
double the interval in seconds.
+ +

Definition at line 86 of file UTimer.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • utilite/include/rtabmap/utilite/UTimer.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classUVariant-members.html b/preview/pr-1492/api/latest/classUVariant-members.html new file mode 100644 index 00000000..e9f32fbb --- /dev/null +++ b/preview/pr-1492/api/latest/classUVariant-members.html @@ -0,0 +1,167 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
UVariant Member List
+
+
+ +

This is the complete list of members for UVariant, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
isBool() constUVariantinline
isChar() constUVariantinline
isCharArray() constUVariantinline
isDouble() constUVariantinline
isDoubleArray() constUVariantinline
isFloat() constUVariantinline
isFloatArray() constUVariantinline
isInt() constUVariantinline
isIntArray() constUVariantinline
isShort() constUVariantinline
isShortArray() constUVariantinline
isStr() constUVariantinline
isUChar() constUVariantinline
isUCharArray() constUVariantinline
isUInt() constUVariantinline
isUIntArray() constUVariantinline
isUndef() constUVariantinline
isUShort() constUVariantinline
isUShortArray() constUVariantinline
kBool enum valueUVariant
kChar enum valueUVariant
kCharArray enum valueUVariant
kDouble enum valueUVariant
kDoubleArray enum valueUVariant
kFloat enum valueUVariant
kFloatArray enum valueUVariant
kInt enum valueUVariant
kIntArray enum valueUVariant
kShort enum valueUVariant
kShortArray enum valueUVariant
kStr enum valueUVariant
kUChar enum valueUVariant
kUCharArray enum valueUVariant
kUInt enum valueUVariant
kUIntArray enum valueUVariant
kUndef enum valueUVariant
kUShort enum valueUVariant
kUShortArray enum valueUVariant
toBool() constUVariant
toChar(bool *ok=0) constUVariant
toCharArray(bool *ok=0) constUVariant
toDouble(bool *ok=0) constUVariant
toDoubleArray(bool *ok=0) constUVariant
toFloat(bool *ok=0) constUVariant
toFloatArray(bool *ok=0) constUVariant
toInt(bool *ok=0) constUVariant
toIntArray(bool *ok=0) constUVariant
toShort(bool *ok=0) constUVariant
toShortArray(bool *ok=0) constUVariant
toStr(bool *ok=0) constUVariant
toUChar(bool *ok=0) constUVariant
toUCharArray(bool *ok=0) constUVariant
toUInt(bool *ok=0) constUVariant
toUIntArray(bool *ok=0) constUVariant
toUShort(bool *ok=0) constUVariant
toUShortArray(bool *ok=0) constUVariant
type() constUVariantinline
Type enum nameUVariant
UVariant()UVariant
UVariant(const bool &value)UVariant
UVariant(const signed char &value)UVariant
UVariant(const unsigned char &value)UVariant
UVariant(const short &value)UVariant
UVariant(const unsigned short &value)UVariant
UVariant(const int &value)UVariant
UVariant(const unsigned int &value)UVariant
UVariant(const float &value)UVariant
UVariant(const double &value)UVariant
UVariant(const char *value)UVariant
UVariant(const std::string &value)UVariant
UVariant(const std::vector< signed char > &value)UVariant
UVariant(const std::vector< unsigned char > &value)UVariant
UVariant(const std::vector< short > &value)UVariant
UVariant(const std::vector< unsigned short > &value)UVariant
UVariant(const std::vector< int > &value)UVariant
UVariant(const std::vector< unsigned int > &value)UVariant
UVariant(const std::vector< float > &value)UVariant
UVariant(const std::vector< double > &value)UVariant
~UVariant()UVariantinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classUVariant.html b/preview/pr-1492/api/latest/classUVariant.html new file mode 100644 index 00000000..cb275099 --- /dev/null +++ b/preview/pr-1492/api/latest/classUVariant.html @@ -0,0 +1,1978 @@ + + + + + + + + +RTAB-Map: UVariant Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
UVariant Class Reference
+
+
+ +

A variant type that can hold values of different types. + More...

+ +

#include <UVariant.h>

+ + + + + +

+Public Types

enum  Type {
+  kBool +, kChar +, kUChar +, kShort +,
+  kUShort +, kInt +, kUInt +, kFloat +,
+  kDouble +, kStr +, kCharArray +, kUCharArray +,
+  kShortArray +, kUShortArray +, kIntArray +, kUIntArray +,
+  kFloatArray +, kDoubleArray +, kUndef +
+ }
 Enumeration of supported data types. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ UVariant ()
 Default constructor Creates an undefined variant.
 
 UVariant (const bool &value)
 Constructor from bool.
 
 UVariant (const signed char &value)
 Constructor from signed char.
 
 UVariant (const unsigned char &value)
 Constructor from unsigned char.
 
 UVariant (const short &value)
 Constructor from short.
 
 UVariant (const unsigned short &value)
 Constructor from unsigned short.
 
 UVariant (const int &value)
 Constructor from int.
 
 UVariant (const unsigned int &value)
 Constructor from unsigned int.
 
 UVariant (const float &value)
 Constructor from float.
 
 UVariant (const double &value)
 Constructor from double.
 
 UVariant (const char *value)
 Constructor from C string.
 
 UVariant (const std::string &value)
 Constructor from std::string.
 
 UVariant (const std::vector< signed char > &value)
 Constructor from array of signed char.
 
 UVariant (const std::vector< unsigned char > &value)
 Constructor from array of unsigned char.
 
 UVariant (const std::vector< short > &value)
 Constructor from array of short.
 
 UVariant (const std::vector< unsigned short > &value)
 Constructor from array of unsigned short.
 
 UVariant (const std::vector< int > &value)
 Constructor from array of int.
 
 UVariant (const std::vector< unsigned int > &value)
 Constructor from array of unsigned int.
 
 UVariant (const std::vector< float > &value)
 Constructor from array of float.
 
 UVariant (const std::vector< double > &value)
 Constructor from array of double.
 
Type type () const
 Get the type of the stored value.
 
bool isUndef () const
 Check if the variant is undefined.
 
bool isBool () const
 Check if the variant is a bool.
 
bool isChar () const
 Check if the variant is a signed char.
 
bool isUChar () const
 Check if the variant is an unsigned char.
 
bool isShort () const
 Check if the variant is a short.
 
bool isUShort () const
 Check if the variant is an unsigned short.
 
bool isInt () const
 Check if the variant is an int.
 
bool isUInt () const
 Check if the variant is an unsigned int.
 
bool isFloat () const
 Check if the variant is a float.
 
bool isDouble () const
 Check if the variant is a double.
 
bool isStr () const
 Check if the variant is a string.
 
bool isCharArray () const
 Check if the variant is an array of signed char.
 
bool isUCharArray () const
 Check if the variant is an array of unsigned char.
 
bool isShortArray () const
 Check if the variant is an array of short.
 
bool isUShortArray () const
 Check if the variant is an array of unsigned short.
 
bool isIntArray () const
 Check if the variant is an array of int.
 
bool isUIntArray () const
 Check if the variant is an array of unsigned int.
 
bool isFloatArray () const
 Check if the variant is an array of float.
 
bool isDoubleArray () const
 Check if the variant is an array of double.
 
bool toBool () const
 Convert the variant to bool.
 
signed char toChar (bool *ok=0) const
 Convert the variant to signed char.
 
unsigned char toUChar (bool *ok=0) const
 Convert the variant to unsigned char.
 
short toShort (bool *ok=0) const
 Convert the variant to short.
 
unsigned short toUShort (bool *ok=0) const
 Convert the variant to unsigned short.
 
int toInt (bool *ok=0) const
 Convert the variant to int.
 
unsigned int toUInt (bool *ok=0) const
 Convert the variant to unsigned int.
 
float toFloat (bool *ok=0) const
 Convert the variant to float.
 
double toDouble (bool *ok=0) const
 Convert the variant to double.
 
std::string toStr (bool *ok=0) const
 Convert the variant to string.
 
std::vector< signed char > toCharArray (bool *ok=0) const
 Convert the variant to array of signed char.
 
std::vector< unsigned char > toUCharArray (bool *ok=0) const
 Convert the variant to array of unsigned char.
 
std::vector< short > toShortArray (bool *ok=0) const
 Convert the variant to array of short.
 
std::vector< unsigned short > toUShortArray (bool *ok=0) const
 Convert the variant to array of unsigned short.
 
std::vector< int > toIntArray (bool *ok=0) const
 Convert the variant to array of int.
 
std::vector< unsigned int > toUIntArray (bool *ok=0) const
 Convert the variant to array of unsigned int.
 
std::vector< float > toFloatArray (bool *ok=0) const
 Convert the variant to array of float.
 
std::vector< double > toDoubleArray (bool *ok=0) const
 Convert the variant to array of double.
 
virtual ~UVariant ()
 Virtual destructor.
 
+

Detailed Description

+

A variant type that can hold values of different types.

+

UVariant is a type-safe container that can store values of various types including booleans, integers, floats, strings, and arrays. It provides methods to check the stored type and convert to other types.

+ +

Definition at line 53 of file UVariant.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum UVariant::Type
+
+ +

Enumeration of supported data types.

+ + + + + + + + + + + + + + + + + + + + +
Enumerator
kBool 

Boolean type

+
kChar 

Signed char type

+
kUChar 

Unsigned char type

+
kShort 

Short integer type

+
kUShort 

Unsigned short integer type

+
kInt 

Integer type

+
kUInt 

Unsigned integer type

+
kFloat 

Float type

+
kDouble 

Double type

+
kStr 

String type

+
kCharArray 

Array of signed char

+
kUCharArray 

Array of unsigned char

+
kShortArray 

Array of short

+
kUShortArray 

Array of unsigned short

+
kIntArray 

Array of int

+
kUIntArray 

Array of unsigned int

+
kFloatArray 

Array of float

+
kDoubleArray 

Array of double

+
kUndef 

Undefined type (default)

+
+ +

Definition at line 60 of file UVariant.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ UVariant() [1/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const bool & value)
+
+ +

Constructor from bool.

+
Parameters
+ + +
valuethe boolean value
+
+
+ +
+
+ +

◆ UVariant() [2/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const signed char & value)
+
+ +

Constructor from signed char.

+
Parameters
+ + +
valuethe signed char value
+
+
+ +
+
+ +

◆ UVariant() [3/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const unsigned char & value)
+
+ +

Constructor from unsigned char.

+
Parameters
+ + +
valuethe unsigned char value
+
+
+ +
+
+ +

◆ UVariant() [4/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const short & value)
+
+ +

Constructor from short.

+
Parameters
+ + +
valuethe short value
+
+
+ +
+
+ +

◆ UVariant() [5/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const unsigned short & value)
+
+ +

Constructor from unsigned short.

+
Parameters
+ + +
valuethe unsigned short value
+
+
+ +
+
+ +

◆ UVariant() [6/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const int & value)
+
+ +

Constructor from int.

+
Parameters
+ + +
valuethe integer value
+
+
+ +
+
+ +

◆ UVariant() [7/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const unsigned int & value)
+
+ +

Constructor from unsigned int.

+
Parameters
+ + +
valuethe unsigned integer value
+
+
+ +
+
+ +

◆ UVariant() [8/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const float & value)
+
+ +

Constructor from float.

+
Parameters
+ + +
valuethe float value
+
+
+ +
+
+ +

◆ UVariant() [9/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const double & value)
+
+ +

Constructor from double.

+
Parameters
+ + +
valuethe double value
+
+
+ +
+
+ +

◆ UVariant() [10/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const char * value)
+
+ +

Constructor from C string.

+
Parameters
+ + +
valuethe C string value
+
+
+ +
+
+ +

◆ UVariant() [11/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const std::string & value)
+
+ +

Constructor from std::string.

+
Parameters
+ + +
valuethe string value
+
+
+ +
+
+ +

◆ UVariant() [12/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const std::vector< signed char > & value)
+
+ +

Constructor from array of signed char.

+
Parameters
+ + +
valuethe array of signed char
+
+
+ +
+
+ +

◆ UVariant() [13/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const std::vector< unsigned char > & value)
+
+ +

Constructor from array of unsigned char.

+
Parameters
+ + +
valuethe array of unsigned char
+
+
+ +
+
+ +

◆ UVariant() [14/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const std::vector< short > & value)
+
+ +

Constructor from array of short.

+
Parameters
+ + +
valuethe array of short
+
+
+ +
+
+ +

◆ UVariant() [15/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const std::vector< unsigned short > & value)
+
+ +

Constructor from array of unsigned short.

+
Parameters
+ + +
valuethe array of unsigned short
+
+
+ +
+
+ +

◆ UVariant() [16/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const std::vector< int > & value)
+
+ +

Constructor from array of int.

+
Parameters
+ + +
valuethe array of int
+
+
+ +
+
+ +

◆ UVariant() [17/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const std::vector< unsigned int > & value)
+
+ +

Constructor from array of unsigned int.

+
Parameters
+ + +
valuethe array of unsigned int
+
+
+ +
+
+ +

◆ UVariant() [18/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const std::vector< float > & value)
+
+ +

Constructor from array of float.

+
Parameters
+ + +
valuethe array of float
+
+
+ +
+
+ +

◆ UVariant() [19/19]

+ +
+
+ + + + + + + + +
UVariant::UVariant (const std::vector< double > & value)
+
+ +

Constructor from array of double.

+
Parameters
+ + +
valuethe array of double
+
+
+ +
+
+ +

◆ ~UVariant()

+ +
+
+ + + + + +
+ + + + + + + +
virtual UVariant::~UVariant ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 450 of file UVariant.h.

+ +
+
+

Member Function Documentation

+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
Type UVariant::type () const
+
+inline
+
+ +

Get the type of the stored value.

+
Returns
the Type enum value
+ +

Definition at line 206 of file UVariant.h.

+ +
+
+ +

◆ isUndef()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isUndef () const
+
+inline
+
+ +

Check if the variant is undefined.

+
Returns
true if type is kUndef
+ +

Definition at line 212 of file UVariant.h.

+ +
+
+ +

◆ isBool()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isBool () const
+
+inline
+
+ +

Check if the variant is a bool.

+
Returns
true if type is kBool
+ +

Definition at line 218 of file UVariant.h.

+ +
+
+ +

◆ isChar()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isChar () const
+
+inline
+
+ +

Check if the variant is a signed char.

+
Returns
true if type is kChar
+ +

Definition at line 224 of file UVariant.h.

+ +
+
+ +

◆ isUChar()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isUChar () const
+
+inline
+
+ +

Check if the variant is an unsigned char.

+
Returns
true if type is kUChar
+ +

Definition at line 230 of file UVariant.h.

+ +
+
+ +

◆ isShort()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isShort () const
+
+inline
+
+ +

Check if the variant is a short.

+
Returns
true if type is kShort
+ +

Definition at line 236 of file UVariant.h.

+ +
+
+ +

◆ isUShort()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isUShort () const
+
+inline
+
+ +

Check if the variant is an unsigned short.

+
Returns
true if type is kUShort
+ +

Definition at line 242 of file UVariant.h.

+ +
+
+ +

◆ isInt()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isInt () const
+
+inline
+
+ +

Check if the variant is an int.

+
Returns
true if type is kInt
+ +

Definition at line 248 of file UVariant.h.

+ +
+
+ +

◆ isUInt()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isUInt () const
+
+inline
+
+ +

Check if the variant is an unsigned int.

+
Returns
true if type is kUInt
+ +

Definition at line 254 of file UVariant.h.

+ +
+
+ +

◆ isFloat()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isFloat () const
+
+inline
+
+ +

Check if the variant is a float.

+
Returns
true if type is kFloat
+ +

Definition at line 260 of file UVariant.h.

+ +
+
+ +

◆ isDouble()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isDouble () const
+
+inline
+
+ +

Check if the variant is a double.

+
Returns
true if type is kDouble
+ +

Definition at line 266 of file UVariant.h.

+ +
+
+ +

◆ isStr()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isStr () const
+
+inline
+
+ +

Check if the variant is a string.

+
Returns
true if type is kStr
+ +

Definition at line 272 of file UVariant.h.

+ +
+
+ +

◆ isCharArray()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isCharArray () const
+
+inline
+
+ +

Check if the variant is an array of signed char.

+
Returns
true if type is kCharArray
+ +

Definition at line 278 of file UVariant.h.

+ +
+
+ +

◆ isUCharArray()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isUCharArray () const
+
+inline
+
+ +

Check if the variant is an array of unsigned char.

+
Returns
true if type is kUCharArray
+ +

Definition at line 284 of file UVariant.h.

+ +
+
+ +

◆ isShortArray()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isShortArray () const
+
+inline
+
+ +

Check if the variant is an array of short.

+
Returns
true if type is kShortArray
+ +

Definition at line 290 of file UVariant.h.

+ +
+
+ +

◆ isUShortArray()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isUShortArray () const
+
+inline
+
+ +

Check if the variant is an array of unsigned short.

+
Returns
true if type is kUShortArray
+ +

Definition at line 296 of file UVariant.h.

+ +
+
+ +

◆ isIntArray()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isIntArray () const
+
+inline
+
+ +

Check if the variant is an array of int.

+
Returns
true if type is kIntArray
+ +

Definition at line 302 of file UVariant.h.

+ +
+
+ +

◆ isUIntArray()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isUIntArray () const
+
+inline
+
+ +

Check if the variant is an array of unsigned int.

+
Returns
true if type is kUIntArray
+ +

Definition at line 308 of file UVariant.h.

+ +
+
+ +

◆ isFloatArray()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isFloatArray () const
+
+inline
+
+ +

Check if the variant is an array of float.

+
Returns
true if type is kFloatArray
+ +

Definition at line 314 of file UVariant.h.

+ +
+
+ +

◆ isDoubleArray()

+ +
+
+ + + + + +
+ + + + + + + +
bool UVariant::isDoubleArray () const
+
+inline
+
+ +

Check if the variant is an array of double.

+
Returns
true if type is kDoubleArray
+ +

Definition at line 320 of file UVariant.h.

+ +
+
+ +

◆ toBool()

+ +
+
+ + + + + + + +
bool UVariant::toBool () const
+
+ +

Convert the variant to bool.

+
Returns
the boolean value
+ +
+
+ +

◆ toChar()

+ +
+
+ + + + + + + + +
signed char UVariant::toChar (bool * ok = 0) const
+
+ +

Convert the variant to signed char.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the signed char value
+ +
+
+ +

◆ toUChar()

+ +
+
+ + + + + + + + +
unsigned char UVariant::toUChar (bool * ok = 0) const
+
+ +

Convert the variant to unsigned char.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the unsigned char value
+ +
+
+ +

◆ toShort()

+ +
+
+ + + + + + + + +
short UVariant::toShort (bool * ok = 0) const
+
+ +

Convert the variant to short.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the short value
+ +
+
+ +

◆ toUShort()

+ +
+
+ + + + + + + + +
unsigned short UVariant::toUShort (bool * ok = 0) const
+
+ +

Convert the variant to unsigned short.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the unsigned short value
+ +
+
+ +

◆ toInt()

+ +
+
+ + + + + + + + +
int UVariant::toInt (bool * ok = 0) const
+
+ +

Convert the variant to int.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the integer value
+ +
+
+ +

◆ toUInt()

+ +
+
+ + + + + + + + +
unsigned int UVariant::toUInt (bool * ok = 0) const
+
+ +

Convert the variant to unsigned int.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the unsigned integer value
+ +
+
+ +

◆ toFloat()

+ +
+
+ + + + + + + + +
float UVariant::toFloat (bool * ok = 0) const
+
+ +

Convert the variant to float.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the float value
+ +
+
+ +

◆ toDouble()

+ +
+
+ + + + + + + + +
double UVariant::toDouble (bool * ok = 0) const
+
+ +

Convert the variant to double.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the double value
+ +
+
+ +

◆ toStr()

+ +
+
+ + + + + + + + +
std::string UVariant::toStr (bool * ok = 0) const
+
+ +

Convert the variant to string.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the string value
+ +
+
+ +

◆ toCharArray()

+ +
+
+ + + + + + + + +
std::vector< signed char > UVariant::toCharArray (bool * ok = 0) const
+
+ +

Convert the variant to array of signed char.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the array of signed char
+ +
+
+ +

◆ toUCharArray()

+ +
+
+ + + + + + + + +
std::vector< unsigned char > UVariant::toUCharArray (bool * ok = 0) const
+
+ +

Convert the variant to array of unsigned char.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the array of unsigned char
+ +
+
+ +

◆ toShortArray()

+ +
+
+ + + + + + + + +
std::vector< short > UVariant::toShortArray (bool * ok = 0) const
+
+ +

Convert the variant to array of short.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the array of short
+ +
+
+ +

◆ toUShortArray()

+ +
+
+ + + + + + + + +
std::vector< unsigned short > UVariant::toUShortArray (bool * ok = 0) const
+
+ +

Convert the variant to array of unsigned short.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the array of unsigned short
+ +
+
+ +

◆ toIntArray()

+ +
+
+ + + + + + + + +
std::vector< int > UVariant::toIntArray (bool * ok = 0) const
+
+ +

Convert the variant to array of int.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the array of int
+ +
+
+ +

◆ toUIntArray()

+ +
+
+ + + + + + + + +
std::vector< unsigned int > UVariant::toUIntArray (bool * ok = 0) const
+
+ +

Convert the variant to array of unsigned int.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the array of unsigned int
+ +
+
+ +

◆ toFloatArray()

+ +
+
+ + + + + + + + +
std::vector< float > UVariant::toFloatArray (bool * ok = 0) const
+
+ +

Convert the variant to array of float.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the array of float
+ +
+
+ +

◆ toDoubleArray()

+ +
+
+ + + + + + + + +
std::vector< double > UVariant::toDoubleArray (bool * ok = 0) const
+
+ +

Convert the variant to array of double.

+
Parameters
+ + +
okpointer to bool to indicate success (optional)
+
+
+
Returns
the array of double
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel-members.html b/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel-members.html new file mode 100644 index 00000000..31ec661f --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel-members.html @@ -0,0 +1,125 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
clams::DiscreteDepthDistortionModel Member List
+
+
+ +

This is the complete list of members for clams::DiscreteDepthDistortionModel, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accumulate(const cv::Mat &ground_truth, const cv::Mat &measurement)clams::DiscreteDepthDistortionModel
addExample(int v, int u, double ground_truth, double measurement) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
bin_depth_clams::DiscreteDepthDistortionModelprotected
bin_height_clams::DiscreteDepthDistortionModelprotected
bin_width_clams::DiscreteDepthDistortionModelprotected
deleteFrustums() (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelprotected
deserialize(std::istream &in, bool ascii) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
DiscreteDepthDistortionModel() (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelinline
DiscreteDepthDistortionModel(int width, int height, int bin_width=8, int bin_height=6, double bin_depth=2.0, int smoothing=1, double max_depth=10.0) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
DiscreteDepthDistortionModel(const DiscreteDepthDistortionModel &other) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
frustum(int y, int x) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelprotected
frustum(int y, int x) const (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelprotected
frustums_clams::DiscreteDepthDistortionModelprotected
getBinSize(const size_t &width, const size_t &height, size_t &bin_width, size_t &bin_height) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelstatic
getClosestToRef(const std::set< size_t > &divisors, const double &ref) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelstatic
getDivisors(const size_t &num) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelstatic
getHeight() const (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelinline
getTrainingSamples() const (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelinline
getWidth() const (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelinline
height_clams::DiscreteDepthDistortionModelprotected
isValid() const (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelinline
load(const std::string &path) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
mutex_ (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelprotected
num_bins_x_ (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelprotected
num_bins_y_ (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelprotected
operator=(const DiscreteDepthDistortionModel &other) (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
save(const std::string &path) const (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
serialize(std::ostream &out, bool ascii) const (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
training_samples_ (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelprotected
undistort(cv::Mat &depth) const (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
visualize(const std::string &path="") const (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModel
width_clams::DiscreteDepthDistortionModelprotected
~DiscreteDepthDistortionModel() (defined in clams::DiscreteDepthDistortionModel)clams::DiscreteDepthDistortionModelvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel.html b/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel.html new file mode 100644 index 00000000..4b8c47e4 --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel.html @@ -0,0 +1,627 @@ + + + + + + + + +RTAB-Map: clams::DiscreteDepthDistortionModel Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Collaboration diagram for clams::DiscreteDepthDistortionModel:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ DiscreteDepthDistortionModel (int width, int height, int bin_width=8, int bin_height=6, double bin_depth=2.0, int smoothing=1, double max_depth=10.0)
 
+ DiscreteDepthDistortionModel (const DiscreteDepthDistortionModel &other)
 
+DiscreteDepthDistortionModel & operator= (const DiscreteDepthDistortionModel &other)
 
+void undistort (cv::Mat &depth) const
 
size_t accumulate (const cv::Mat &ground_truth, const cv::Mat &measurement)
 
+void addExample (int v, int u, double ground_truth, double measurement)
 
+void save (const std::string &path) const
 
+void load (const std::string &path)
 
+void serialize (std::ostream &out, bool ascii) const
 
+void deserialize (std::istream &in, bool ascii)
 
+cv::Mat visualize (const std::string &path="") const
 
int getWidth () const
 
int getHeight () const
 
size_t getTrainingSamples () const
 
bool isValid () const
 
+ + + + + + + +

+Static Public Member Functions

+static std::set< size_t > getDivisors (const size_t &num)
 
+static size_t getClosestToRef (const std::set< size_t > &divisors, const double &ref)
 
+static void getBinSize (const size_t &width, const size_t &height, size_t &bin_width, size_t &bin_height)
 
+ + + + + + + +

+Protected Member Functions

+void deleteFrustums ()
 
+DiscreteFrustum & frustum (int y, int x)
 
+const DiscreteFrustum & frustum (int y, int x) const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

int width_
 Image width.
 
int height_
 Image height.
 
int bin_width_
 Width of each bin in pixels.
 
int bin_height_
 Height of each bin in pixels.
 
double bin_depth_
 Depth of each bin in meters.
 
int num_bins_x_
 
int num_bins_y_
 
std::vector< std::vector< DiscreteFrustum * > > frustums_
 frustums_[y][x]
 
size_t training_samples_
 
UMutex mutex_
 
+

Detailed Description

+
+

Definition at line 68 of file discrete_depth_distortion_model.h.

+

Constructor & Destructor Documentation

+ +

◆ DiscreteDepthDistortionModel()

+ +
+
+ + + + + +
+ + + + + + + +
clams::DiscreteDepthDistortionModel::DiscreteDepthDistortionModel ()
+
+inline
+
+ +

Definition at line 81 of file discrete_depth_distortion_model.h.

+ +
+
+

Member Function Documentation

+ +

◆ accumulate()

+ +
+
+ + + + + + + + + + + + + + + + + + +
size_t clams::DiscreteDepthDistortionModel::accumulate (const cv::Mat & ground_truth,
const cv::Mat & measurement 
)
+
+

Returns the number of training examples it used from this pair. Thread-safe.

+ +
+
+ +

◆ getWidth()

+ +
+
+ + + + + +
+ + + + + + + +
int clams::DiscreteDepthDistortionModel::getWidth () const
+
+inline
+
+ +

Definition at line 106 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ getHeight()

+ +
+
+ + + + + +
+ + + + + + + +
int clams::DiscreteDepthDistortionModel::getHeight () const
+
+inline
+
+ +

Definition at line 107 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ getTrainingSamples()

+ +
+
+ + + + + +
+ + + + + + + +
size_t clams::DiscreteDepthDistortionModel::getTrainingSamples () const
+
+inline
+
+ +

Definition at line 108 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ isValid()

+ +
+
+ + + + + +
+ + + + + + + +
bool clams::DiscreteDepthDistortionModel::isValid () const
+
+inline
+
+ +

Definition at line 109 of file discrete_depth_distortion_model.h.

+ +
+
+

Member Data Documentation

+ +

◆ width_

+ +
+
+ + + + + +
+ + + + +
int clams::DiscreteDepthDistortionModel::width_
+
+protected
+
+ +

Image width.

+ +

Definition at line 116 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ height_

+ +
+
+ + + + + +
+ + + + +
int clams::DiscreteDepthDistortionModel::height_
+
+protected
+
+ +

Image height.

+ +

Definition at line 118 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ bin_width_

+ +
+
+ + + + + +
+ + + + +
int clams::DiscreteDepthDistortionModel::bin_width_
+
+protected
+
+ +

Width of each bin in pixels.

+ +

Definition at line 120 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ bin_height_

+ +
+
+ + + + + +
+ + + + +
int clams::DiscreteDepthDistortionModel::bin_height_
+
+protected
+
+ +

Height of each bin in pixels.

+ +

Definition at line 122 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ bin_depth_

+ +
+
+ + + + + +
+ + + + +
double clams::DiscreteDepthDistortionModel::bin_depth_
+
+protected
+
+ +

Depth of each bin in meters.

+ +

Definition at line 124 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ num_bins_x_

+ +
+
+ + + + + +
+ + + + +
int clams::DiscreteDepthDistortionModel::num_bins_x_
+
+protected
+
+ +

Definition at line 125 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ num_bins_y_

+ +
+
+ + + + + +
+ + + + +
int clams::DiscreteDepthDistortionModel::num_bins_y_
+
+protected
+
+ +

Definition at line 126 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ frustums_

+ +
+
+ + + + + +
+ + + + +
std::vector< std::vector<DiscreteFrustum*> > clams::DiscreteDepthDistortionModel::frustums_
+
+protected
+
+ +

frustums_[y][x]

+ +

Definition at line 128 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ training_samples_

+ +
+
+ + + + + +
+ + + + +
size_t clams::DiscreteDepthDistortionModel::training_samples_
+
+protected
+
+ +

Definition at line 130 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ mutex_

+ +
+
+ + + + + +
+ + + + +
UMutex clams::DiscreteDepthDistortionModel::mutex_
+
+protected
+
+ +

Definition at line 136 of file discrete_depth_distortion_model.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.map b/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.map new file mode 100644 index 00000000..b4138995 --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.md5 b/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.md5 new file mode 100644 index 00000000..e93e4f18 --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.md5 @@ -0,0 +1 @@ +bb338278c28d5aefe5c96975724687f4 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.png b/preview/pr-1492/api/latest/classclams_1_1DiscreteDepthDistortionModel__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b71c6f97d0f0e1b69ddeb279f64b2093da85eccf GIT binary patch literal 6020 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classclams_1_1DiscreteFrustum-members.html b/preview/pr-1492/api/latest/classclams_1_1DiscreteFrustum-members.html new file mode 100644 index 00000000..7554bf2d --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1DiscreteFrustum-members.html @@ -0,0 +1,107 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
clams::DiscreteFrustum Member List
+
+
+ +

This is the complete list of members for clams::DiscreteFrustum, including all inherited members.

+ + + + + + + + + + + + + + + + +
addExample(double ground_truth, double measurement)clams::DiscreteFrustum
bin_depth_ (defined in clams::DiscreteFrustum)clams::DiscreteFrustumprotected
counts_ (defined in clams::DiscreteFrustum)clams::DiscreteFrustumprotected
deserialize(std::istream &in, bool ascii) (defined in clams::DiscreteFrustum)clams::DiscreteFrustum
DiscreteDepthDistortionModel (defined in clams::DiscreteFrustum)clams::DiscreteFrustumfriend
DiscreteFrustum(int smoothing=1, double bin_depth=1.0, double max_dist=10.0) (defined in clams::DiscreteFrustum)clams::DiscreteFrustum
index(double z) const (defined in clams::DiscreteFrustum)clams::DiscreteFrustum
interpolatedUndistort(double *z) const (defined in clams::DiscreteFrustum)clams::DiscreteFrustum
max_dist_ (defined in clams::DiscreteFrustum)clams::DiscreteFrustumprotected
multipliers_ (defined in clams::DiscreteFrustum)clams::DiscreteFrustumprotected
num_bins_ (defined in clams::DiscreteFrustum)clams::DiscreteFrustumprotected
serialize(std::ostream &out, bool ascii) const (defined in clams::DiscreteFrustum)clams::DiscreteFrustum
total_denominators_ (defined in clams::DiscreteFrustum)clams::DiscreteFrustumprotected
total_numerators_ (defined in clams::DiscreteFrustum)clams::DiscreteFrustumprotected
undistort(double *z) const (defined in clams::DiscreteFrustum)clams::DiscreteFrustum
+ + + + diff --git a/preview/pr-1492/api/latest/classclams_1_1DiscreteFrustum.html b/preview/pr-1492/api/latest/classclams_1_1DiscreteFrustum.html new file mode 100644 index 00000000..991ac4ff --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1DiscreteFrustum.html @@ -0,0 +1,370 @@ + + + + + + + + +RTAB-Map: clams::DiscreteFrustum Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
clams::DiscreteFrustum Class Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

+ DiscreteFrustum (int smoothing=1, double bin_depth=1.0, double max_dist=10.0)
 
void addExample (double ground_truth, double measurement)
 
+int index (double z) const
 
+void undistort (double *z) const
 
+void interpolatedUndistort (double *z) const
 
+void serialize (std::ostream &out, bool ascii) const
 
+void deserialize (std::istream &in, bool ascii)
 
+ + + + + + + + + + + + + + + +

+Protected Attributes

double max_dist_
 
int num_bins_
 
double bin_depth_
 
Eigen::VectorXf counts_
 
Eigen::VectorXf total_numerators_
 
Eigen::VectorXf total_denominators_
 
Eigen::VectorXf multipliers_
 
+ + + +

+Friends

class DiscreteDepthDistortionModel
 
+

Detailed Description

+
+

Definition at line 43 of file discrete_depth_distortion_model.h.

+

Member Function Documentation

+ +

◆ addExample()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void clams::DiscreteFrustum::addExample (double ground_truth,
double measurement 
)
+
+

z value, not distance to origin. thread-safe.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ DiscreteDepthDistortionModel

+ +
+
+ + + + + +
+ + + + +
friend class DiscreteDepthDistortionModel
+
+friend
+
+ +

Definition at line 65 of file discrete_depth_distortion_model.h.

+ +
+
+

Member Data Documentation

+ +

◆ max_dist_

+ +
+
+ + + + + +
+ + + + +
double clams::DiscreteFrustum::max_dist_
+
+protected
+
+ +

Definition at line 57 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ num_bins_

+ +
+
+ + + + + +
+ + + + +
int clams::DiscreteFrustum::num_bins_
+
+protected
+
+ +

Definition at line 58 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ bin_depth_

+ +
+
+ + + + + +
+ + + + +
double clams::DiscreteFrustum::bin_depth_
+
+protected
+
+ +

Definition at line 59 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ counts_

+ +
+
+ + + + + +
+ + + + +
Eigen::VectorXf clams::DiscreteFrustum::counts_
+
+protected
+
+ +

Definition at line 60 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ total_numerators_

+ +
+
+ + + + + +
+ + + + +
Eigen::VectorXf clams::DiscreteFrustum::total_numerators_
+
+protected
+
+ +

Definition at line 61 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ total_denominators_

+ +
+
+ + + + + +
+ + + + +
Eigen::VectorXf clams::DiscreteFrustum::total_denominators_
+
+protected
+
+ +

Definition at line 62 of file discrete_depth_distortion_model.h.

+ +
+
+ +

◆ multipliers_

+ +
+
+ + + + + +
+ + + + +
Eigen::VectorXf clams::DiscreteFrustum::multipliers_
+
+protected
+
+ +

Definition at line 63 of file discrete_depth_distortion_model.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classclams_1_1FrameProjector-members.html b/preview/pr-1492/api/latest/classclams_1_1FrameProjector-members.html new file mode 100644 index 00000000..050a0c9a --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1FrameProjector-members.html @@ -0,0 +1,99 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
clams::FrameProjector Member List
+
+
+ +

This is the complete list of members for clams::FrameProjector, including all inherited members.

+ + + + + + + + +
cloudToRangeIndex(const pcl::PointCloud< pcl::PointXYZ >::Ptr &pcd) const (defined in clams::FrameProjector)clams::FrameProjector
coneFit(const cv::Size &imageSize, const RangeIndex &rindex, int uc, int vc, double radius, double measurement_depth, double *mean, double *stdev) const (defined in clams::FrameProjector)clams::FrameProjectorprotected
estimateMapDepth(const pcl::PointCloud< pcl::PointXYZ >::Ptr &map, const rtabmap::Transform &transform, const cv::Mat &measurement, double coneRadius=0.02, double coneStdevThresh=0.03) constclams::FrameProjector
FrameProjector(const rtabmap::CameraModel &model) (defined in clams::FrameProjector)clams::FrameProjector
project(const ProjectivePoint &ppt) const (defined in clams::FrameProjector)clams::FrameProjector
RangeIndex typedef (defined in clams::FrameProjector)clams::FrameProjector
reproject(const pcl::PointXYZ &pt) const (defined in clams::FrameProjector)clams::FrameProjector
+ + + + diff --git a/preview/pr-1492/api/latest/classclams_1_1FrameProjector.html b/preview/pr-1492/api/latest/classclams_1_1FrameProjector.html new file mode 100644 index 00000000..99356068 --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1FrameProjector.html @@ -0,0 +1,197 @@ + + + + + + + + +RTAB-Map: clams::FrameProjector Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
clams::FrameProjector Class Reference
+
+
+ +

#include <frame_projector.h>

+ + + + +

+Public Types

typedef std::vector< std::vector< std::vector< double > > > RangeIndex
 
+ + + + + + + + + + + +

+Public Member Functions

+ FrameProjector (const rtabmap::CameraModel &model)
 
+RangeIndex cloudToRangeIndex (const pcl::PointCloud< pcl::PointXYZ >::Ptr &pcd) const
 
cv::Mat estimateMapDepth (const pcl::PointCloud< pcl::PointXYZ >::Ptr &map, const rtabmap::Transform &transform, const cv::Mat &measurement, double coneRadius=0.02, double coneStdevThresh=0.03) const
 
+pcl::PointXYZ project (const ProjectivePoint &ppt) const
 
+ProjectivePoint reproject (const pcl::PointXYZ &pt) const
 
+ + + +

+Protected Member Functions

+bool coneFit (const cv::Size &imageSize, const RangeIndex &rindex, int uc, int vc, double radius, double measurement_depth, double *mean, double *stdev) const
 
+

Detailed Description

+

This is essentially a pinhole camera model for an RGBD sensor, with some extra functions added on for use during calibration.

+ +

Definition at line 62 of file frame_projector.h.

+

Member Typedef Documentation

+ +

◆ RangeIndex

+ +
+
+ + + + +
typedef std::vector< std::vector< std::vector<double> > > clams::FrameProjector::RangeIndex
+
+ +

Definition at line 66 of file frame_projector.h.

+ +
+
+

Member Function Documentation

+ +

◆ estimateMapDepth()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cv::Mat clams::FrameProjector::estimateMapDepth (const pcl::PointCloud< pcl::PointXYZ >::Ptr & map,
const rtabmap::Transform & transform,
const cv::Mat & measurement,
double coneRadius = 0.02,
double coneStdevThresh = 0.03 
) const
+
+

transform is applied to the map, then projected into a depth index. The best depth estimate from the map corresponding to the measurement depth frame will be returned.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classclams_1_1ProjectivePoint-members.html b/preview/pr-1492/api/latest/classclams_1_1ProjectivePoint-members.html new file mode 100644 index 00000000..6b5208ff --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1ProjectivePoint-members.html @@ -0,0 +1,96 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
clams::ProjectivePoint Member List
+
+
+ +

This is the complete list of members for clams::ProjectivePoint, including all inherited members.

+ + + + + +
ProjectivePoint() (defined in clams::ProjectivePoint)clams::ProjectivePointinline
u_ (defined in clams::ProjectivePoint)clams::ProjectivePoint
v_ (defined in clams::ProjectivePoint)clams::ProjectivePoint
z_ (defined in clams::ProjectivePoint)clams::ProjectivePoint
+ + + + diff --git a/preview/pr-1492/api/latest/classclams_1_1ProjectivePoint.html b/preview/pr-1492/api/latest/classclams_1_1ProjectivePoint.html new file mode 100644 index 00000000..a0774b68 --- /dev/null +++ b/preview/pr-1492/api/latest/classclams_1_1ProjectivePoint.html @@ -0,0 +1,188 @@ + + + + + + + + +RTAB-Map: clams::ProjectivePoint Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
clams::ProjectivePoint Class Reference
+
+
+ +

#include <frame_projector.h>

+ + + + + + + + +

+Public Attributes

int u_
 
int v_
 
float z_
 
+

Detailed Description

+

"Projective" point comes from the OpenNI terminology, and refers to (u, v, z), i.e. pixel id and depth value. Here I've added color, too, so that this represents everything that is known about a pixel in an RBGD camera.

+ +

Definition at line 47 of file frame_projector.h.

+

Constructor & Destructor Documentation

+ +

◆ ProjectivePoint()

+ +
+
+ + + + + +
+ + + + + + + +
clams::ProjectivePoint::ProjectivePoint ()
+
+inline
+
+ +

Definition at line 50 of file frame_projector.h.

+ +
+
+

Member Data Documentation

+ +

◆ u_

+ +
+
+ + + + +
int clams::ProjectivePoint::u_
+
+ +

Definition at line 55 of file frame_projector.h.

+ +
+
+ +

◆ v_

+ +
+
+ + + + +
int clams::ProjectivePoint::v_
+
+ +

Definition at line 56 of file frame_projector.h.

+ +
+
+ +

◆ z_

+ +
+
+ + + + +
float clams::ProjectivePoint::z_
+
+ +

Definition at line 57 of file frame_projector.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classes.html b/preview/pr-1492/api/latest/classes.html new file mode 100644 index 00000000..b0b879aa --- /dev/null +++ b/preview/pr-1492/api/latest/classes.html @@ -0,0 +1,139 @@ + + + + + + + + +RTAB-Map: Class Index + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
B | C | D | E | F | G | I | K | L | M | O | P | R | S | T | U | V
+
+
+
B
+
BayesFilter (rtabmap)
BRISK (rtabmap)
+
+
C
+
Camera (rtabmap)
CameraDepthAI (rtabmap)
CameraFreenect (rtabmap)
CameraFreenect2 (rtabmap)
CameraImages (rtabmap)
CameraK4A (rtabmap)
CameraK4W2 (rtabmap)
CameraModel (rtabmap)
CameraMyntEye (rtabmap)
CameraOpenni (rtabmap)
CameraOpenNI2 (rtabmap)
CameraOpenNICV (rtabmap)
CameraOrbbecSDK (rtabmap)
CameraRealSense (rtabmap)
CameraRealSense2 (rtabmap)
CameraRGBDImages (rtabmap)
CameraSeerSense (rtabmap)
CameraStereoDC1394 (rtabmap)
CameraStereoFlyCapture2 (rtabmap)
CameraStereoImages (rtabmap)
CameraStereoTara (rtabmap)
CameraStereoVideo (rtabmap)
CameraStereoZed (rtabmap)
CameraStereoZedOC (rtabmap)
CameraVideo (rtabmap)
CloudMap (rtabmap)
CompressionThread (rtabmap)
+
+
D
+
DBDriver (rtabmap)
DBDriverSqlite3 (rtabmap)
DBReader (rtabmap)
DiscreteDepthDistortionModel (clams)
DiscreteFrustum (clams)
+
+
E
+
EnvSensor (rtabmap)
EpipolarGeometry (rtabmap)
+
+
F
+
FAST (rtabmap)
FAST_BRIEF (rtabmap)
FAST_FREAK (rtabmap)
Feature2D (rtabmap)
FeatureBA (rtabmap)
FlannIndex (rtabmap)
FrameProjector (clams)
+
+
G
+
GainCompensator (rtabmap)
GeodeticCoords (rtabmap)
GFTT (rtabmap)
GFTT_BRIEF (rtabmap)
GFTT_DAISY (rtabmap)
GFTT_FREAK (rtabmap)
GFTT_ORB (rtabmap)
GlobalDescriptor (rtabmap)
GlobalDescriptorExtractor (rtabmap)
GlobalMap (rtabmap)
GPS (rtabmap)
GridMap (rtabmap)
+
+
I
+
IMU (rtabmap)
IMUEvent (rtabmap)
IMUFilter (rtabmap)
IMUThread (rtabmap)
+
+
K
+
KAZE (rtabmap)
+
+
L
+
Landmark (rtabmap)
LaserScan (rtabmap)
Lidar (rtabmap)
LidarVLP16 (rtabmap)
Link (rtabmap)
LocalGrid (rtabmap)
LocalGridCache (rtabmap)
LocalGridMaker (rtabmap)
+
+
M
+
MarkerDetector (rtabmap)
MarkerInfo (rtabmap)
MaxGraphErrors (rtabmap::graph)
Memory (rtabmap)
+
+
O
+
OccupancyGrid (rtabmap)
OctoMap (rtabmap)
Odometry (rtabmap)
OdometryCuVSLAM (rtabmap)
OdometryDVO (rtabmap)
OdometryEvent (rtabmap)
OdometryF2F (rtabmap)
OdometryF2M (rtabmap)
OdometryFLOAM (rtabmap)
OdometryFovis (rtabmap)
OdometryInfo (rtabmap)
OdometryLIOSAM (rtabmap)
OdometryLOAM (rtabmap)
OdometryMono (rtabmap)
OdometryMSCKF (rtabmap)
OdometryOkvis (rtabmap)
OdometryOpen3D (rtabmap)
OdometryOpenVINS (rtabmap)
OdometryORBSLAM2 (rtabmap)
OdometryORBSLAM3 (rtabmap)
OdometryResetEvent (rtabmap)
OdometryThread (rtabmap)
OdometryVINSFusion (rtabmap)
OdometryViso2 (rtabmap)
Optimizer (rtabmap)
OptimizerCeres (rtabmap)
OptimizerCVSBA (rtabmap)
OptimizerG2O (rtabmap)
OptimizerGTSAM (rtabmap)
OptimizerTORO (rtabmap)
ORB (rtabmap)
ORBOctree (rtabmap)
+
+
P
+
Parameters (rtabmap)
ParamEvent (rtabmap)
ParticleFilter (rtabmap)
PointXYZIRT (rtabmap)
PointXYZIT (rtabmap)
ProgressState (rtabmap)
ProjectivePoint (clams)
PythonInterface (rtabmap)
+
+
R
+
Registration (rtabmap)
RegistrationIcp (rtabmap)
RegistrationInfo (rtabmap)
RegistrationVis (rtabmap)
Rtabmap (rtabmap)
RtabmapColorOcTree (rtabmap)
RtabmapColorOcTreeNode (rtabmap)
RtabmapEvent (rtabmap)
RtabmapEvent3DMap (rtabmap)
RtabmapEventCmd (rtabmap)
RtabmapEventInit (rtabmap)
RtabmapGlobalPathEvent (rtabmap)
RtabmapGoalStatusEvent (rtabmap)
RtabmapLabelErrorEvent (rtabmap)
RtabmapThread (rtabmap)
RvlCodec (rtabmap)
+
+
S
+
SensorCapture (rtabmap)
SensorCaptureInfo (rtabmap)
SensorCaptureThread (rtabmap)
SensorData (rtabmap)
SensorEvent (rtabmap)
SIFT (rtabmap)
Signature (rtabmap)
RtabmapColorOcTree::StaticMemberInitializer (rtabmap)
Statistics (rtabmap)
Stereo (rtabmap)
StereoBM (rtabmap)
StereoCameraModel (rtabmap)
StereoDense (rtabmap)
StereoOpticalFlow (rtabmap)
StereoSGBM (rtabmap)
SuperPointRpautrat (rtabmap)
SuperPointTorch (rtabmap)
SURF (rtabmap)
SURF_DAISY (rtabmap)
SURF_FREAK (rtabmap)
+
+
T
+
Transform (rtabmap)
TransformStamped (rtabmap)
+
+
U
+
UDestroyer
UDirectory
UEvent
UEventDispatcher
UEventsHandler
UEventsManager
UEventsSender
UException
UFile
ULogEvent
ULogger
UMutex
UObjDeletedEvent
UObjDeletionThread
UProcessInfo
UScopeMutex
USemaphore
UserDataEvent (rtabmap)
UThread
UThreadC
UThreadC< void >
UTimer
UVariant
+
+
V
+
VisualWord (rtabmap)
VWDictionary (rtabmap)
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BRISK-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK-members.html new file mode 100644 index 00000000..ea725e68 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK-members.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::BRISK Member List
+
+
+ +

This is the complete list of members for rtabmap::BRISK, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BRISK(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::BRISK)rtabmap::BRISK
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::BRISK)rtabmap::BRISKinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() constrtabmap::Feature2Dinlinevirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::BRISK)rtabmap::BRISKvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~BRISK() (defined in rtabmap::BRISK)rtabmap::BRISKvirtual
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BRISK.html b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK.html new file mode 100644 index 00000000..753d6c50 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK.html @@ -0,0 +1,314 @@ + + + + + + + + +RTAB-Map: rtabmap::BRISK Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::BRISK Class Reference
+
+
+ +

BRISK detector and descriptor. + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::BRISK:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::BRISK:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ BRISK (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
virtual bool isGpuAvailable () const
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

BRISK detector and descriptor.

+ +

Definition at line 598 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::BRISK::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::BRISK::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 605 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.map new file mode 100644 index 00000000..acf5cc84 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.md5 new file mode 100644 index 00000000..c8b1a70e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.md5 @@ -0,0 +1 @@ +856132462a20ceb7b7cc029e96986ebf \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8200332bb5c7139197433591f08151d2267f475d GIT binary patch literal 4418 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.map new file mode 100644 index 00000000..acf5cc84 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.md5 new file mode 100644 index 00000000..c8b1a70e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.md5 @@ -0,0 +1 @@ +856132462a20ceb7b7cc029e96986ebf \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1BRISK__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8200332bb5c7139197433591f08151d2267f475d GIT binary patch literal 4418 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BayesFilter-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1BayesFilter-members.html new file mode 100644 index 00000000..7fdaa341 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1BayesFilter-members.html @@ -0,0 +1,104 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::BayesFilter Member List
+
+
+ +

This is the complete list of members for rtabmap::BayesFilter, including all inherited members.

+ + + + + + + + + + + + + +
BayesFilter(const ParametersMap &parameters=ParametersMap())rtabmap::BayesFilter
computePosterior(const Memory *memory, const std::map< int, float > &likelihood)rtabmap::BayesFilter
generatePrediction(const Memory *memory, const std::vector< int > &ids)rtabmap::BayesFilter
getMemoryUsed() constrtabmap::BayesFilter
getPosterior() constrtabmap::BayesFilterinline
getPredictionLC() constrtabmap::BayesFilter
getPredictionLCStr() constrtabmap::BayesFilter
getVirtualPlacePrior() constrtabmap::BayesFilterinline
parseParameters(const ParametersMap &parameters)rtabmap::BayesFiltervirtual
reset()rtabmap::BayesFilter
setPredictionLC(const std::string &prediction)rtabmap::BayesFilter
~BayesFilter() (defined in rtabmap::BayesFilter)rtabmap::BayesFiltervirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1BayesFilter.html b/preview/pr-1492/api/latest/classrtabmap_1_1BayesFilter.html new file mode 100644 index 00000000..e242b5f2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1BayesFilter.html @@ -0,0 +1,448 @@ + + + + + + + + +RTAB-Map: rtabmap::BayesFilter Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::BayesFilter Class Reference
+
+
+ +

Recursive Bayesian filter for loop-closure hypothesis estimation in RTAB-Map. + More...

+ +

#include <BayesFilter.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BayesFilter (const ParametersMap &parameters=ParametersMap())
 Constructs a Bayes filter with default or custom parameters.
 
virtual void parseParameters (const ParametersMap &parameters)
 Updates internal settings from the parameter map.
 
const std::map< int, float > & computePosterior (const Memory *memory, const std::map< int, float > &likelihood)
 Runs one Bayes filter iteration (prediction + update).
 
+void reset ()
 Clears posterior, prediction matrix and cached neighbor indices.
 
void setPredictionLC (const std::string &prediction)
 Sets the loop-closure prediction model from a space-separated string.
 
const std::map< int, float > & getPosterior () const
 Returns the current posterior probability map.
 
float getVirtualPlacePrior () const
 Returns the virtual place prior threshold.
 
const std::vector< double > & getPredictionLC () const
 Returns the loop-closure prediction model as a vector of values.
 
std::string getPredictionLCStr () const
 Returns the loop-closure prediction model as a space-separated string.
 
cv::Mat generatePrediction (const Memory *memory, const std::vector< int > &ids)
 Builds or updates the prediction (transition) matrix for the given signature ids.
 
unsigned long getMemoryUsed () const
 Estimates memory usage of this object and its internal containers.
 
+

Detailed Description

+

Recursive Bayesian filter for loop-closure hypothesis estimation in RTAB-Map.

+

This class implements the prediction and update steps of a Bayes filter used to estimate the posterior probability over candidate locations (signatures) in working memory. It is typically called by Rtabmap after likelihood values have been computed from visual word comparisons.

+

The filter operates in two steps on each iteration:

    +
  • Prediction: builds a transition matrix from the memory graph and multiplies it with the previous posterior to obtain the prior.
  • +
  • Update: multiplies the prior by the observation likelihood and normalizes the result.
  • +
+

The prediction matrix is built from neighbor relationships in Memory, using a Gaussian-like model configured through Parameters::kBayesPredictionLC(). A virtual place (negative signature id, see Memory::kIdVirtual) represents the hypothesis that the current observation comes from a new location.

+

Related parameters (see Parameters):

    +
  • Parameters::kBayesPredictionLC() — transition probabilities per graph depth level.
  • +
  • Parameters::kBayesVirtualPlacePriorThr() — prior for the virtual place.
  • +
  • Parameters::kBayesFullPredictionUpdate() — regenerate the full prediction matrix each iteration.
  • +
+
See also
Memory::getNeighborsId()
+
+Rtabmap
+ +

Definition at line 71 of file BayesFilter.h.

+

Constructor & Destructor Documentation

+ +

◆ BayesFilter()

+ +
+
+ + + + + + + + +
rtabmap::BayesFilter::BayesFilter (const ParametersMap & parameters = ParametersMap())
+
+ +

Constructs a Bayes filter with default or custom parameters.

+
Parameters
+ + +
parametersOptional parameter map (Bayes group keys). Defaults are used for missing keys.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::BayesFilter::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Updates internal settings from the parameter map.

+
Parameters
+ + +
parametersMap containing Bayes group keys.
+
+
+ +
+
+ +

◆ computePosterior()

+ +
+
+ + + + + + + + + + + + + + + + + + +
const std::map< int, float > & rtabmap::BayesFilter::computePosterior (const Memory * memory,
const std::map< int, float > & likelihood 
)
+
+ +

Runs one Bayes filter iteration (prediction + update).

+

Given a likelihood map over signature ids, computes and stores the normalized posterior. The prediction matrix is generated or updated from Memory using the ids present in likelihood.

+
Parameters
+ + + +
memoryWorking memory instance (must not be null).
likelihoodObservation likelihood per signature id (must not be empty).
+
+
+
Returns
Reference to the internal posterior map (id → probability). On error (null memory, empty likelihood, or invalid prediction model), returns the unchanged posterior.
+ +
+
+ +

◆ setPredictionLC()

+ +
+
+ + + + + + + + +
void rtabmap::BayesFilter::setPredictionLC (const std::string & prediction)
+
+ +

Sets the loop-closure prediction model from a space-separated string.

+

Format: {Vp, Lc, l1, l2, l3, ...} where:

    +
  • Vp — virtual place probability. This is the probability to move to a new place (unvisited location).
  • +
  • Lc — loop closure (depth 0) probability. This is the probability to stay at the same location.
  • +
  • l1, l2, ... — probabilities for neighbors at increasing graph depth levels. This is the probability to move to a neighbor at the given depth level.
  • +
+

Each value must be in [0, 1]. At least two values are required. Invalid strings are rejected and the previous model is kept.

+
Parameters
+ + +
predictionSpace-separated list of probabilities (same format as Parameters::kBayesPredictionLC()).
+
+
+ +
+
+ +

◆ getPosterior()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, float > & rtabmap::BayesFilter::getPosterior () const
+
+inline
+
+ +

Returns the current posterior probability map.

+
Returns
Map of signature id to normalized posterior probability. This is the probability to be at the given location.
+ +

Definition at line 125 of file BayesFilter.h.

+ +
+
+ +

◆ getVirtualPlacePrior()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::BayesFilter::getVirtualPlacePrior () const
+
+inline
+
+ +

Returns the virtual place prior threshold.

+
Returns
Value in [0, 1] used when building the virtual place row of the prediction matrix.
+ +

Definition at line 131 of file BayesFilter.h.

+ +
+
+ +

◆ getPredictionLC()

+ +
+
+ + + + + + + +
const std::vector< double > & rtabmap::BayesFilter::getPredictionLC () const
+
+ +

Returns the loop-closure prediction model as a vector of values.

+
Returns
Vector in the format {Vp, Lc, l1, l2, l3, ...}.
+ +
+
+ +

◆ getPredictionLCStr()

+ +
+
+ + + + + + + +
std::string rtabmap::BayesFilter::getPredictionLCStr () const
+
+ +

Returns the loop-closure prediction model as a space-separated string.

+
Returns
String representation of getPredictionLC().
+ +
+
+ +

◆ generatePrediction()

+ +
+
+ + + + + + + + + + + + + + + + + + +
cv::Mat rtabmap::BayesFilter::generatePrediction (const Memory * memory,
const std::vector< int > & ids 
)
+
+ +

Builds or updates the prediction (transition) matrix for the given signature ids.

+

Rows and columns correspond to ids. Neighbor links are queried from Memory to fill transition probabilities according to getPredictionLC(). When ids match the current posterior keys, the cached matrix may be returned without recomputation.

+
Parameters
+ + + +
memoryWorking memory instance (must not be null).
idsOrdered list of signature ids (often includes Memory::kIdVirtual as first element).
+
+
+
Returns
Square CV_32FC1 matrix of size ids.size() × ids.size().
+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + + + +
unsigned long rtabmap::BayesFilter::getMemoryUsed () const
+
+ +

Estimates memory usage of this object and its internal containers.

+
Returns
Approximate memory footprint in bytes.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Camera-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Camera-members.html new file mode 100644 index 00000000..4350aa77 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Camera-members.html @@ -0,0 +1,116 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Camera Member List
+
+
+ +

This is the complete list of members for rtabmap::Camera, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
captureImage(SensorCaptureInfo *info=0)=0 (defined in rtabmap::Camera)rtabmap::Cameraprotectedpure virtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() const =0rtabmap::SensorCapturepure virtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")=0rtabmap::SensorCapturepure virtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const =0 (defined in rtabmap::Camera)rtabmap::Camerapure virtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Camera.html b/preview/pr-1492/api/latest/classrtabmap_1_1Camera.html new file mode 100644 index 00000000..8a5c60ff --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Camera.html @@ -0,0 +1,427 @@ + + + + + + + + +RTAB-Map: rtabmap::Camera Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::Camera Class Referenceabstract
+
+
+ +

#include <Camera.h>

+
+Inheritance diagram for rtabmap::Camera:
+
+
Inheritance graph
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::Camera:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
+virtual bool isCalibrated () const =0
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")=0
 Initializes the sensor.
 
virtual std::string getSerial () const =0
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual SensorData captureImage (SensorCaptureInfo *info=0)=0
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+

Class Camera

+ +

Definition at line 43 of file Camera.h.

+

Constructor & Destructor Documentation

+ +

◆ Camera()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::Camera::Camera (float imageRate = 0,
const Transform & localTransform = Transform::getIdentity() 
)
+
+protected
+
+

Constructor

+
Parameters
+ + + +
imageRatethe frame rate (Hz), 0 for fast as the camera can
localTransformthe transform from base frame to camera frame (without optical rotation)
+
+
+ +
+
+

Member Function Documentation

+ +

◆ takeImage()

+ +
+
+ + + + + +
+ + + + + + + + +
SensorData rtabmap::Camera::takeImage (SensorCaptureInfo * info = 0)
+
+inline
+
+ +

Definition at line 48 of file Camera.h.

+ +
+
+ +

◆ getImageRate()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Camera::getImageRate () const
+
+inline
+
+ +

Definition at line 49 of file Camera.h.

+ +
+
+ +

◆ setImageRate()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Camera::setImageRate (float imageRate)
+
+inline
+
+ +

Definition at line 50 of file Camera.h.

+ +
+
+ +

◆ isInterIMUPublishing()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Camera::isInterIMUPublishing () const
+
+inline
+
+ +

Definition at line 52 of file Camera.h.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::Camera::captureImage (SensorCaptureInfo * info = 0)
+
+protectedpure virtual
+
+ +

Implemented in rtabmap::CameraMyntEye.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/Camera.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI-members.html new file mode 100644 index 00000000..b14c52b5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI-members.html @@ -0,0 +1,130 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraDepthAI Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraDepthAI, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAIstatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraDepthAI(const std::string &mxidOrName="", int imageWidth=1280, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAIprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraDepthAIvirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraDepthAIvirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAIvirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setDepthProfile(int confThreshold=200, int lrcThreshold=5) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setDetectFeatures(int detectFeatures=0, const std::string &blobPath="") (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setDisparityWidthAndFilter(int disparityWidth=96, int medianFilter=5) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setExtendedDisparity(bool extendedDisparity=false, bool enableCompanding=false) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setGFTTDetector(bool useHarrisDetector=false, float minDistance=7.0f, int numTargetFeatures=1000) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setIMU(bool imuPublished, bool publishInterIMU) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setIrIntensity(float dotIntensity=0.0f, float floodIntensity=0.0f) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setOutputMode(int outputMode=0) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setRectification(bool useSpecTranslation=false, float alphaScaling=0.0f, bool enabled=true) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setSubpixelMode(bool enabled=false, int fractionalBits=3) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
setSuperPointDetector(float threshold=0.01f, bool nms=true, int nmsRadius=4) (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAI
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraDepthAI() (defined in rtabmap::CameraDepthAI)rtabmap::CameraDepthAIvirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI.html new file mode 100644 index 00000000..7b594199 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI.html @@ -0,0 +1,381 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraDepthAI Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraDepthAI:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraDepthAI:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraDepthAI (const std::string &mxidOrName="", int imageWidth=1280, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
+void setOutputMode (int outputMode=0)
 
+void setDepthProfile (int confThreshold=200, int lrcThreshold=5)
 
+void setExtendedDisparity (bool extendedDisparity=false, bool enableCompanding=false)
 
+void setSubpixelMode (bool enabled=false, int fractionalBits=3)
 
+void setDisparityWidthAndFilter (int disparityWidth=96, int medianFilter=5)
 
+void setRectification (bool useSpecTranslation=false, float alphaScaling=0.0f, bool enabled=true)
 
+void setIMU (bool imuPublished, bool publishInterIMU)
 
+void setIrIntensity (float dotIntensity=0.0f, float floodIntensity=0.0f)
 
+void setDetectFeatures (int detectFeatures=0, const std::string &blobPath="")
 
+void setGFTTDetector (bool useHarrisDetector=false, float minDistance=7.0f, int numTargetFeatures=1000)
 
+void setSuperPointDetector (float threshold=0.01f, bool nms=true, int nmsRadius=4)
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 44 of file CameraDepthAI.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraDepthAI::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraDepthAI::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraDepthAI::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraDepthAI::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.map new file mode 100644 index 00000000..93db103a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.md5 new file mode 100644 index 00000000..10e31ed8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.md5 @@ -0,0 +1 @@ +eae77801d9e0a833774363652d3658ca \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..efaa0d32a4f799ce4bf64cf7f93457672ffed898 GIT binary patch literal 6839 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 b-C;1q$n!kSxcUX&L_x|5>hk5XX2Jgj8PyIm literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.map new file mode 100644 index 00000000..93db103a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.md5 new file mode 100644 index 00000000..10e31ed8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.md5 @@ -0,0 +1 @@ +eae77801d9e0a833774363652d3658ca \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraDepthAI__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..efaa0d32a4f799ce4bf64cf7f93457672ffed898 GIT binary patch literal 6839 zcmc(kbyO8!zs85|M&ghn-6RkqsjYZV_BqS6^f5V^bIj9+Mm_Z zIoM)Pd*z*JZ(qag7*gN%e{3|1|EtL_IH=!;>gP!)ZLjD%1smB8$-U@6Gh^j+L^6wEJhs_6*Vw4l+=uSmb_i#h>DKRz|LM$ z-IS#E;sulB-!+npiwm!6t`@ON00+p|RFeJZ!Z!zECvW^TACjZMK!^_UfElBrWIQIZx~6{j$azfU z!41BC{hFAZjB03Tc(OM~9)gZ1tEWdHd3`ANLEHl$I}DjU1^f2)HjURjxPi{Y!-Lbf ziPU3%UPeU)8y%M-Foi?6Yivw=*Lr)R__3N=FPIW@2Zw~EB{M54D|${&+!rric;1{& zFYoMd>{k~^f}6(bns}ipD=QmZJ#t)v7#=*R3b?yv-U|*!)-y0*kd&l-pcGGfu5Vy~ zO+rFa<+nCKL@nV>3a0At=%}mtpbbYtLZa%9Qs5=Ms3;|v^UAuqzLIC9W)2PnP-H?v zf4On9E!A&G{nvxtjb;tBE@-#K({Hp5ETb(9!WRpTn<5zIQk0y!`xQ20Lqm zNtra_#uEV}M6|TOR(#qOkdTlhRo`>wPC2@`JaBPwF=+Rf=L;TT=hS-(&8hJ;;)*0J>Wp-BbaA&_TwFHe zpVdeyDU}7RM;L{Lg&7#W4i6V(OZbd6x$SI5(D{GFqk5QFQBiR*TfgX^Nlimzb9Z}l z0=DeC)>er!y((E}6Jin)EJ#5~Nmx9`jVJ8wzR`X5 z>}_qWkl*pJ@XF<6scy_p0-cmP#40XsX!OwM?2SRQyIu3C*VUQbB^Xc7Y1|wiAK%*c zwu+*nqM-e}$mL--!PeQ{oV>h_p59|`Z|@bV(8!{OhP0E@)2;R4Op7}X-Ez|D#YUG1 zNYme6l8J>S>FryhXV0HU?+gtMMMbjm@Fb98D~R zCHMGV&aRuJIts#{rB;nA*mmU}Pb(P=EiAP5+LfEO#~U}hFJGSSfU79k+jGOq%7p4{ zJiYQNDhNO|8MS&pGg@C;W4v9MpQo1aIg@YqzY%;7Zc}fVb9Q#N!W3V3mdy6l@$b=# zwY4?Gj=wtF3n?w-c=zs|rlw{fSlR2}JOMv8H3(6Sn%(j6@$n&uoSfXr_~2J764cw< z3$|nTSb^&D@^X;VYM*&mC{~)dN4cjFDD4M|v4p1LFTYVtOih70lxy*|5#a%YAU!YB zE~YP#Sl@CIgr9CtmWst0`)pS_vZiD-lc5f)wj3Qf$I^(C;gEC7o0-wa#>O5lcq}f@ zH@d*)gnTWh>xaL6V?3X0SRnG-?wXn+tE;Q?{QEmKSG(Bp;?VqC8Xrn9Jv}QcW_Wlw zY>t5TkzS$YOpBMmRE24RYAW~g@u*aPUmVrjj0|i60Rb?!yp|TD77R9ac4R1SmTF`u z@xGjyg+*{$8bw26qs?B0MBkISKddP#;MC~7=xFS+xd{Owp-G$F*{6jPW&A=y3g+gy zGb1A-idtGk&nryg5b_692FRaw(zJrSd?ZT1*{(h#BjZvpxv4K4Hv4H51p~ihbW~%$ z&io2U>&3-tf|kBMTY0*OJf`Wn`YiKArIq`kS%35Ap3jF?E)9Fer^I>OiufkDbNl*|H zVqA%diOdNG8XrW08X6khDXaTj2q3Vc7k@W$dfin`(ckRMNW|ldy9loD?8Hdj{T&tY zz2FVUr-`N!cQ?B{*>ZGt4o*rU`SRrpuhjsdj;^k4%Sdl88W8nhP(owl<5f1}%neOV zlF#wLY}oA!aB!%u3IvAR0i9S|UzaV=?(FMB2RmbHYwPg%IHaP2$NOY62%(9dt8v1F zw6yqCR8;dVUL=U6PoR}BfG^I@!fdDDop}l|X4cjbpq9*fqwlR0Oi!Bz#Qif}npSOC0Qx*+(zqHY7po zKwS1)x&RR+WfXWKGCGfXw_UNG)%ipgMn+A0d;6r{Kv-QbPi*2cOHNK)#eB{w*-1FN1T6_5?K&DL^v1Su62 z$JD%0nYLvi&d;3ZZq}zH!>-d=eQ=@W&9TKYizn(??xR198Ch6{jAiSO^W!OVL@AOw zmd&0ZM}+WUQRDY9I*K$Un(lu!MzVdpQTPn(EgF3c0o`1CD~KU)8k&&I(W92wIO3JjDQ5trxpONtljS>8mR=s;$e2pFCm>!Bd|4UdrMT2B1=PJWCe z@NY15vq(NEjkNgEv_}jrLhhwbU@DX*sF%+|=zF{9#GhEoe1-`QzZSawD6Q800`=rl zEy%`svWIrrap2WpKoJX88kX#;X^V~$@^wvHq#F!BB6dQh1zmdXcM@^v^mTkv)O$C0 zlB0-~d?AQ0+~4SU$;E^ZWj9g{7>W(Ms9D#!ATL?x~qx|91A}JmrNlE58~N8TzJU9 zxp@&yvC~DS@OIQt>)QCVJam*gR(a{)^oNR%VM#3V|8v0LIwwp_MOr#AfgbZNx%7^^ zzlLtWo-uSN;&*wzDi#4j>YhYNa_Oo!AQI=)@3pbZf1tojVTTpKEMKPReMG_u=(s(w z;4$ySseMN~)BfjKJlVUK_xIx~+HVc^`Sr-B_qyLECx_0@8#NAX3c9(uHTeGJAIXtQ z=<1Sf9P-L@yZSfds_gTN_14+VnZ0-sR{XTk;^&taj_&S#CtKrAJ5yYZsy+;Zx2*L- zpcu`qtucVqmtctWq%6)DAk0 zQM*6Q4PgARFoh(4&}$O2v+)6~>KPiMK>Ymtn$Mr3>+0%m0!6H_DIUG_JKLUAwawAj z*KhDRpjC{671YweV9{PyyxAbk?0Qr9Y{ORcE_`NZFikciEB;pqk(9+gM z2Cb6<22&Y{%F3cSIy!QN1u);Ir|+;vunG)lj-c%n=k|039l)5kK=mmpDc@FC3wZhX zjDx}ltiZ||+0xpIfHOE8{_1Non~sS|c~wrjfb~0|z<{D+aq;kM=IZQVJB4bQitg_2 zYg=2&fJ$myHq^a;r|7;KNW7n~T|6*3nF5rhce zXZ-rro|AE-bJ+a+{Nn=cAC>0a17E*J=Y9Ibw6O-3nrkXICNvb);ENU3;EiNT?`n8= zcekA7(IW{7HUv3pqsICaxyaH)Z2DQ->uZ4(+XhfYuL6efZckkYcB-N<0s@rBBN9ZR*J;Ry8S|%p(K)F{DOtC}GWq=BZ8VXEJC0C542m<8VF*$h;TH4r%u+H{E zhj_hDUV;AK@~4jqf(o>;07_n8?o{ke6@m`t>*v>NM^(qc!GQ$5eEHH&a({|?I*v-% zachhTZrV-@SdQ5CVy}KNF(ZTBHYR5ev`2X%%o7&Ya`3!5J15aXu%Nx3&Eb~ z5q{Cy=O75sgcQ)=9-!ptfP){OFmQ2kKkBdxy`P+#sn{jqvX(lEoqxNEBad+n%Nv6w<<$yI)&k_ss zI$jTYe2klwm`H!y+SCLCJ<8F^$?G3R0Zpo>zdvS&s%~#@Z~6D{Ffeg)WzU7T+G}cb zHed#pOC3R)tfZJYINcgjH;lJYv9UcfRhDytWD7F&2#Q!+3k4V?4cdNJ7c#(2US8e~ zV4ry1clC@K9FfF5_Cu4BlKOV=X~aVPZ!SAQi4qYJZBCYwzZ}iJ(GyBbPp@r6ppw~W zw#2}|!1vks$jA<``M_Y%fX@QGePyc5@M1mFq0;xSb1a>dNg>Rj8{Di^x1tYt*~97f z+j}>cr*Z}cu(SPz7+{Z>HEIn65Car*!KIU=_Pad!p?CH}iLP^G1V8hkT^E>dGaH+z zyW8{j2KPN!o&7>IFrcAfVPJG}mQnzZ<REMdcYXjmPyj(Um3!`mDhNn6}yqc3~$h1?)Im3&Y-bus^<777JCVC zO7+IYA!C))k3$|KVi|9i!D9Y=U3<9*+_Q7a_gdU+0qL9AGQ+Xj-Bs51yUh9Dyp#bn ztm8Eo7%B`%wDNjw9!-_c_PzgU=`j|YqQtzo5bBazn4SV6X`cR8Js~^~ zv~64SOU`%q-cs;X#k(Pc_8n}g{P*f6JiCWkC>S!0a)XnAd%QCaBZmafRU1xFk&ZWL z@;oBfn86(yWmXTabfNc>k-jFC2Qjl)b&^3@9SN#=d3w73hE6Xn zTPyO1R^+tI(Uj)oLS;KUuCGHwwdG0I4x_-Qi^J*rnxa9+9&|jE_+QMDs~Yxzkr5TZ zEJ&}czTewuQwf`- zu)+Qh&(6-C|Go7Fl-y%gRTK!}btWcA@)9e;n`2MW(=cZToc>dNwD z^9O9F&S5dW&F`wKzrWCUd$-c@5f`9rLNc;&D*IvL)nOz(% zJEzXDKmGh9C?SF1wXLldsJ`(+4a?QOI6ctZ!ttn>ZSCYk5r;q|78w&`OB{bT#l4J) zh1Ch1;^9t3`wH;?MI|N3(C%D40m49sgrEcm2UlA5EC3G=u}L5kY@_ z5ON8kw)=vDh@h*pdQ>t74Tmf;r!h1%v;(*)FdYLUBjI6TXuo`q)etckGc!79rah5F z4?ss^LBw1;w(U-<;Zu^I^70&kL4h0Amn&yRRtDVp$5IL7yKLMZREq;A_3eY`(>FWX za<&PjB_-HO3A75%&iwvYd&0OBybulZ!Xvjo~;IG7w#?69e)8(&@wLD1`37_eEG z1OyQU1x$+Z)NJ-H+Y@Yv7!WiJ5w~qp#Cig{>YSOOfE@pPuUE|}`3zy07GBabqB9H|HZy{!YgMk5ANJt2gTp|Jm5Z$eg zYe@BiWUoiqXH}Gv&q6-N?UjJ@+T#zRF6e;2Hs|Uq)csWBY^0?T`CP5Z^P8g~9!y-^ z(6~4}5cgGj9GHZLheuz<#>8~v@U#Fhh>9X%Vc_P*Ki(L1s5`5BRZn#UHeKhBA4J#+ zL(Mv@q?Ogx-TBH%iSOR!RgKKeQGqCxS5UA=m8TT}Ai$Hw?67ELko66yd5UC8&k9FV3i2q3skS|Y=6$U$sM z3<8ie0c(6PdZ+V!W2YQ#moX!nS+E%)2uzpjesh7>#7h8?n~UvIAgt}jGZmv0gS7!=fw}XA2 zu#xRkt|nBY2!6efi7a`0VR-_O-nlv4<@d>{GYo1}{i|)Yb6;fI=TXe@2%NMF68p0dc+kg6xwgPm-oV zM25)cJTDIK19sNZ(Lwd_IPWjXmAH(Jj_v~C7Xlv9WCC+?=zutd00v(LlUh_>-UnU_ zIGt>2F)}l68_C%sBxHCP&(!x18h}KglyTp_J@LKVDl951vm4i&C@n3OGcln>WVVQ8 z9k{F}&j%H%i^Fj?tLKWU+jKm_xaiQMyX)hD!9f{y^?3Cwn=*W#WsB#lbJ8QY{A zr+W6ID4_MS#X4O;+fmSQr8PAZ`!=YXP8R0VUi&x*vVeL5a&7;`2%G}s5yUKdm1aRB zmW8Fv8}U)f(dOVS&p)qvC@i0h b-C;1q$n!kSxcUX&L_x|5>hk5XX2Jgj8PyIm literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect-members.html new file mode 100644 index 00000000..241b325b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect-members.html @@ -0,0 +1,122 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraFreenect Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraFreenect, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraFreenect)rtabmap::CameraFreenectstatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraFreenect(int deviceId=0, Type type=kTypeColorDepth, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraFreenect)rtabmap::CameraFreenect
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraFreenect)rtabmap::CameraFreenectprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraFreenectvirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraFreenectvirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraFreenect)rtabmap::CameraFreenectvirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
kTypeColorDepth enum value (defined in rtabmap::CameraFreenect)rtabmap::CameraFreenect
kTypeIRDepth enum value (defined in rtabmap::CameraFreenect)rtabmap::CameraFreenect
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
Type enum name (defined in rtabmap::CameraFreenect)rtabmap::CameraFreenect
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraFreenect() (defined in rtabmap::CameraFreenect)rtabmap::CameraFreenectvirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect.html new file mode 100644 index 00000000..1ad01136 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect.html @@ -0,0 +1,373 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraFreenect Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraFreenect:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraFreenect:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + +

+Public Types

enum  Type { kTypeColorDepth +, kTypeIRDepth + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraFreenect (int deviceId=0, Type type=kTypeColorDepth, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 44 of file CameraFreenect.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::CameraFreenect::Type
+
+ +

Definition at line 49 of file CameraFreenect.h.

+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraFreenect::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraFreenect::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraFreenect::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraFreenect::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2-members.html new file mode 100644 index 00000000..8cfb42d5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2-members.html @@ -0,0 +1,126 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraFreenect2 Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraFreenect2, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2static
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraFreenect2(int deviceId=0, Type type=kTypeDepth2ColorSD, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity(), float minDepth=0.3f, float maxDepth=12.0f, bool bilateralFiltering=true, bool edgeAwareFiltering=true, bool noiseFiltering=true, const std::string &pipelineName="") (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2protectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraFreenect2virtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraFreenect2virtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2virtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
kTypeColor2DepthSD enum value (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2
kTypeColorIR enum value (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2
kTypeDepth2ColorHD enum value (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2
kTypeDepth2ColorHD2 enum value (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2
kTypeDepth2ColorSD enum value (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2
kTypeIRDepth enum value (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
Type enum name (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraFreenect2() (defined in rtabmap::CameraFreenect2)rtabmap::CameraFreenect2virtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2.html new file mode 100644 index 00000000..bff3117e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2.html @@ -0,0 +1,380 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraFreenect2 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraFreenect2:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraFreenect2:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + +

+Public Types

enum  Type {
+  kTypeColor2DepthSD +, kTypeDepth2ColorSD +, kTypeDepth2ColorHD +, kTypeDepth2ColorHD2 +,
+  kTypeIRDepth +, kTypeColorIR +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraFreenect2 (int deviceId=0, Type type=kTypeDepth2ColorSD, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity(), float minDepth=0.3f, float maxDepth=12.0f, bool bilateralFiltering=true, bool edgeAwareFiltering=true, bool noiseFiltering=true, const std::string &pipelineName="")
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 46 of file CameraFreenect2.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::CameraFreenect2::Type
+
+ +

Definition at line 52 of file CameraFreenect2.h.

+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraFreenect2::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraFreenect2::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraFreenect2::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraFreenect2::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.map new file mode 100644 index 00000000..fb6c9b12 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.md5 new file mode 100644 index 00000000..986a2df9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.md5 @@ -0,0 +1 @@ +8f2a2ca6f6f31485c1bc0d5d6ba98262 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..addfc1cc4df7ad8ef6d99f4ab0e7cc5b0447f5de GIT binary patch literal 6872 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 a0&5~53mYq0nFKCXA(Z7G$(72O1pN=TKus0^ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.map new file mode 100644 index 00000000..fb6c9b12 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.md5 new file mode 100644 index 00000000..986a2df9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.md5 @@ -0,0 +1 @@ +8f2a2ca6f6f31485c1bc0d5d6ba98262 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect2__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..addfc1cc4df7ad8ef6d99f4ab0e7cc5b0447f5de GIT binary patch literal 6872 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 a0&5~53mYq0nFKCXA(Z7G$(72O1pN=TKus0^ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.map new file mode 100644 index 00000000..a7b834f6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.md5 new file mode 100644 index 00000000..29bee754 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.md5 @@ -0,0 +1 @@ +8d3ce94e993c2d6c8a7e38fd385c9802 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bd64b3a0389f8ee2d0b3e14d97936183aa314c3e GIT binary patch literal 6690 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.map new file mode 100644 index 00000000..a7b834f6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.md5 new file mode 100644 index 00000000..29bee754 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.md5 @@ -0,0 +1 @@ +8d3ce94e993c2d6c8a7e38fd385c9802 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraFreenect__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bd64b3a0389f8ee2d0b3e14d97936183aa314c3e GIT binary patch literal 6690 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages-members.html new file mode 100644 index 00000000..68b50700 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages-members.html @@ -0,0 +1,146 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraImages Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraImages, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_calibrationFolder (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotected
_multiCameraCalib (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotected
_multiCameraCount (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotected
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraImages() (defined in rtabmap::CameraImages)rtabmap::CameraImages
CameraImages(const std::string &path, float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraImages)rtabmap::CameraImages
cameraModel() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotectedvirtual
filenames() const (defined in rtabmap::CameraImages)rtabmap::CameraImages
getBayerMode() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getMaxPoseTimeDiff() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPath() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraImagesvirtual
imagesCount() const (defined in rtabmap::CameraImages)rtabmap::CameraImages
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraImagesvirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesvirtual
isConfigForEachFrame() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
isImagesRectified() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
lastImageFileName() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinlineprotected
odomProvided() constrtabmap::CameraImagesinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setBayerMode(int mode) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setConfigForEachFrame(bool value) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setDepth(bool isDepth, float depthScaleFactor=1.0f) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setDepthFromScan(bool enabled, int fillHoles=1, bool fillHolesFromBorder=false) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setDirRefreshed(bool enabled) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setGroundTruthPath(const std::string &filePath, int format=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setImagesRectified(bool enabled) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setMaxFrames(int value) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinlinevirtual
setMaxPoseTimeDiff(double diff) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setMultiCameraCalibration(bool enabled) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setOdometryPath(const std::string &filePath, int format=0) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setPath(const std::string &dir) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setScanPath(const std::string &dir, int maxScanPts=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setStartIndex(int index) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinlinevirtual
setTimestamps(bool fileNamesAreStamps, const std::string &filePath="", bool syncImageRateWithStamps=true) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraImages() (defined in rtabmap::CameraImages)rtabmap::CameraImagesvirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages.html new file mode 100644 index 00000000..fc725ba8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages.html @@ -0,0 +1,1210 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraImages Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraImages:
+
+
Inheritance graph
+ + + + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraImages:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraImages (const std::string &path, float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
std::string getPath () const
 
+unsigned int imagesCount () const
 
+std::vector< std::string > filenames () const
 
bool isImagesRectified () const
 
int getBayerMode () const
 
const CameraModel & cameraModel () const
 
void setPath (const std::string &dir)
 
virtual void setStartIndex (int index)
 
virtual void setMaxFrames (int value)
 
void setDirRefreshed (bool enabled)
 
void setImagesRectified (bool enabled)
 
void setBayerMode (int mode)
 
void setTimestamps (bool fileNamesAreStamps, const std::string &filePath="", bool syncImageRateWithStamps=true)
 
void setConfigForEachFrame (bool value)
 
bool isConfigForEachFrame () const
 
void setMultiCameraCalibration (bool enabled)
 
void setScanPath (const std::string &dir, int maxScanPts=0, const Transform &localTransform=Transform::getIdentity())
 
void setDepthFromScan (bool enabled, int fillHoles=1, bool fillHolesFromBorder=false)
 
void setOdometryPath (const std::string &filePath, int format=0)
 
void setGroundTruthPath (const std::string &filePath, int format=0, const Transform &localTransform=Transform::getIdentity())
 
void setMaxPoseTimeDiff (double diff)
 
double getMaxPoseTimeDiff () const
 
void setDepth (bool isDepth, float depthScaleFactor=1.0f)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
const std::string & lastImageFileName () const
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+ + + + + + + +

+Protected Attributes

std::string _calibrationFolder
 
bool _multiCameraCalib
 
int _multiCameraCount
 
+

Detailed Description

+
+

Definition at line 39 of file CameraImages.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraImages::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +

Reimplemented in rtabmap::CameraRGBDImages, and rtabmap::CameraStereoImages.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraImages::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraImages::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +

Reimplemented in rtabmap::CameraStereoImages.

+ +
+
+ +

◆ odomProvided()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraImages::odomProvided () const
+
+inlinevirtual
+
+ +

Checks if the sensor provides odometry poses.

+

Some sensors (e.g., visual-inertial cameras) can provide pose estimates directly. This method indicates whether the sensor supports pose queries.

+
Returns
True if the sensor provides odometry poses, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
getPose()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +

Definition at line 53 of file CameraImages.h.

+ +
+
+ +

◆ getPath()

+ +
+
+ + + + + +
+ + + + + + + +
std::string rtabmap::CameraImages::getPath () const
+
+inline
+
+ +

Definition at line 54 of file CameraImages.h.

+ +
+
+ +

◆ isImagesRectified()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::CameraImages::isImagesRectified () const
+
+inline
+
+ +

Definition at line 57 of file CameraImages.h.

+ +
+
+ +

◆ getBayerMode()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::CameraImages::getBayerMode () const
+
+inline
+
+ +

Definition at line 58 of file CameraImages.h.

+ +
+
+ +

◆ cameraModel()

+ +
+
+ + + + + +
+ + + + + + + +
const CameraModel & rtabmap::CameraImages::cameraModel () const
+
+inline
+
+ +

Definition at line 59 of file CameraImages.h.

+ +
+
+ +

◆ setPath()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraImages::setPath (const std::string & dir)
+
+inline
+
+ +

Definition at line 61 of file CameraImages.h.

+ +
+
+ +

◆ setStartIndex()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::CameraImages::setStartIndex (int index)
+
+inlinevirtual
+
+ +

Definition at line 62 of file CameraImages.h.

+ +
+
+ +

◆ setMaxFrames()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::CameraImages::setMaxFrames (int value)
+
+inlinevirtual
+
+ +

Definition at line 63 of file CameraImages.h.

+ +
+
+ +

◆ setDirRefreshed()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraImages::setDirRefreshed (bool enabled)
+
+inline
+
+ +

Definition at line 64 of file CameraImages.h.

+ +
+
+ +

◆ setImagesRectified()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraImages::setImagesRectified (bool enabled)
+
+inline
+
+ +

Definition at line 65 of file CameraImages.h.

+ +
+
+ +

◆ setBayerMode()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraImages::setBayerMode (int mode)
+
+inline
+
+ +

Definition at line 66 of file CameraImages.h.

+ +
+
+ +

◆ setTimestamps()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::CameraImages::setTimestamps (bool fileNamesAreStamps,
const std::string & filePath = "",
bool syncImageRateWithStamps = true 
)
+
+inline
+
+ +

Definition at line 68 of file CameraImages.h.

+ +
+
+ +

◆ setConfigForEachFrame()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraImages::setConfigForEachFrame (bool value)
+
+inline
+
+ +

Definition at line 75 of file CameraImages.h.

+ +
+
+ +

◆ isConfigForEachFrame()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::CameraImages::isConfigForEachFrame () const
+
+inline
+
+ +

Definition at line 79 of file CameraImages.h.

+ +
+
+ +

◆ setMultiCameraCalibration()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraImages::setMultiCameraCalibration (bool enabled)
+
+inline
+
+ +

Definition at line 97 of file CameraImages.h.

+ +
+
+ +

◆ setScanPath()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::CameraImages::setScanPath (const std::string & dir,
int maxScanPts = 0,
const Transform & localTransform = Transform::getIdentity() 
)
+
+inline
+
+ +

Definition at line 102 of file CameraImages.h.

+ +
+
+ +

◆ setDepthFromScan()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::CameraImages::setDepthFromScan (bool enabled,
int fillHoles = 1,
bool fillHolesFromBorder = false 
)
+
+inline
+
+ +

Definition at line 112 of file CameraImages.h.

+ +
+
+ +

◆ setOdometryPath()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void rtabmap::CameraImages::setOdometryPath (const std::string & filePath,
int format = 0 
)
+
+inline
+
+ +

Definition at line 120 of file CameraImages.h.

+ +
+
+ +

◆ setGroundTruthPath()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::CameraImages::setGroundTruthPath (const std::string & filePath,
int format = 0,
const Transform & localTransform = Transform::getIdentity() 
)
+
+inline
+
+ +

Definition at line 127 of file CameraImages.h.

+ +
+
+ +

◆ setMaxPoseTimeDiff()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraImages::setMaxPoseTimeDiff (double diff)
+
+inline
+
+ +

Definition at line 134 of file CameraImages.h.

+ +
+
+ +

◆ getMaxPoseTimeDiff()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::CameraImages::getMaxPoseTimeDiff () const
+
+inline
+
+ +

Definition at line 135 of file CameraImages.h.

+ +
+
+ +

◆ setDepth()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void rtabmap::CameraImages::setDepth (bool isDepth,
float depthScaleFactor = 1.0f 
)
+
+inline
+
+ +

Definition at line 137 of file CameraImages.h.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraImages::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ lastImageFileName()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::CameraImages::lastImageFileName () const
+
+inlineprotected
+
+ +

Definition at line 149 of file CameraImages.h.

+ +
+
+

Member Data Documentation

+ +

◆ _calibrationFolder

+ +
+
+ + + + + +
+ + + + +
std::string rtabmap::CameraImages::_calibrationFolder
+
+protected
+
+ +

Definition at line 153 of file CameraImages.h.

+ +
+
+ +

◆ _multiCameraCalib

+ +
+
+ + + + + +
+ + + + +
bool rtabmap::CameraImages::_multiCameraCalib
+
+protected
+
+ +

Definition at line 159 of file CameraImages.h.

+ +
+
+ +

◆ _multiCameraCount

+ +
+
+ + + + + +
+ + + + +
int rtabmap::CameraImages::_multiCameraCount
+
+protected
+
+ +

Definition at line 160 of file CameraImages.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.map new file mode 100644 index 00000000..84eb525b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.md5 new file mode 100644 index 00000000..8e3b512e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.md5 @@ -0,0 +1 @@ +f07a80c10716f715ca90d0860e710fcd \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5117f28ba7347a0a209871a59ab65dd3aaba2134 GIT binary patch literal 6739 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 IDU*Qz19~p{IRF3v literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.map new file mode 100644 index 00000000..bf45a4a2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.md5 new file mode 100644 index 00000000..81ae0792 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.md5 @@ -0,0 +1 @@ +865b01255e5c570d0c0be6cdeff31934 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraImages__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..41cb0fa404b0c5fa7aacb23d55ce04dd388f3a93 GIT binary patch literal 14840 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraK4A Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraK4A, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraK4A)rtabmap::CameraK4Astatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraK4A(int deviceId=0, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraK4A)rtabmap::CameraK4A
CameraK4A(const std::string &fileName, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraK4A)rtabmap::CameraK4A
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraK4A)rtabmap::CameraK4Aprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraK4Avirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraK4Avirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraK4A)rtabmap::CameraK4Avirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setIRDepthFormat(bool enabled) (defined in rtabmap::CameraK4A)rtabmap::CameraK4A
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setPreferences(int rgb_resolution, int framerate, int depth_resolution) (defined in rtabmap::CameraK4A)rtabmap::CameraK4A
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraK4A() (defined in rtabmap::CameraK4A)rtabmap::CameraK4Avirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A.html new file mode 100644 index 00000000..081fc647 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A.html @@ -0,0 +1,357 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraK4A Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraK4A:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraK4A:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraK4A (int deviceId=0, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
+ CameraK4A (const std::string &fileName, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
+void setIRDepthFormat (bool enabled)
 
+void setPreferences (int rgb_resolution, int framerate, int depth_resolution)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 43 of file CameraK4A.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraK4A::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraK4A::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraK4A::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraK4A::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.map new file mode 100644 index 00000000..b2b4402d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.md5 new file mode 100644 index 00000000..19e0737c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.md5 @@ -0,0 +1 @@ +d651da1a566326c3ffcd7b59f593d720 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8085c80296a47bb50476b3551bd06bb37aeb1c92 GIT binary patch literal 6753 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 =W_&xcIb;U|lUC%XP>;Ktu=J69{ zUHZDZ(Vd+l|0E@CwUM4;{wV7j)zlc%KDV~ECIXq&^0JXnVz!F3wDj)|FW$hwz-qfW zeo!)$ATAmo^nI|OW)BMoz0aWqL^RrsHliSx0zGW}w4%7U6BPTwq_(}K&31yK&{vQb z94DdN;O+1eK6n81o~?6g>LD8&+s3aV0^gep^K@Z9n$y$MjRiOyCc6^{qK=h)zuPwg zf`UscEB8c|ZZkJQ=L5DRE-h_l=QrTzzpJZ;v&{}+v9bL?S6$Q^-7#|-fo6MF2 zj3uc5o_GdX1JKri?=RPG!iT|N&7LRB0P>d>7yS!llj-^SDW{oN9p>+swDO3?E?n4-LtIPG&rk{yK%nR;z9o8yg$A z;eKG(Uxf$@3DIO`W+IM{dtg4u#ob-JRJkTzdj5_>CI*J3Xx{lw5bC_w){e~1rt?1j zDMij<;NLt7dM^rea&j^-G$a95?B=uyUb34I7w6AA?|#qc^7!kw1SSx7#o$r$gw5E` zwFZMv1B+*{0P{It{6xS3^oUibnegAK2B+(eW&^^taWn~Za51*z?(XiqiR=239Km%p zaOGIx8*<>WJ8Mk`5x^yRAM`#91E2=7z*i&TjV@0a7#;(QKbZ95m%Cm;K|xqVL>CZ* zkLx2DW;2u&6dzBv)Y_4IZD8b32tIWL@YO&$D~AtuWcaU@k4{b=V79yf77{4?ozi_y zO)Y602Epp&@0`L03nddufKnj-=zqE-)ICq z$4z}O(9y#+t_ueNb8dh|uG0>T$!uy|PyF%)M_gR|{QUe*_Nu{Ys;byQI6EeMppG#+*R%hw5gH0K*GEFY_vJzo2 zF_Iux1;whQuTKC~*VMe9sX8zLSl0;#1?B+^9uoqr5k7;5hu3=&JvA{g;Ub*{kk#%a z9oS4IJw1GSs{>q-nLBs|^7ri7GZ6y=gSs2Qb3Jh0OcL8|&3X$Wz;QKh`+DWNZDc^Z z9yIm#_vZnUPhe8CbC3gXeg?6QdKw+pGiK(o%jMq>j!y$LR0x%ol|Nn_nzmo8rIB-) zVBN>VBch;~-gz$O;J{g4QGo&ha4)W?2u@5?3*Fk-6UxZQIGE7Te+-i3y}iAR(i}mI z`{e#0#4-d6OVI?PM7L&q5)zWTVF2y?U1v@(S)q-Ii;D|&0*BzRJ^7+st3hTr1vI0Y zxh%h%M*z)L2Srp>N!j#a<-Z7Eo?hdYCMIa$9H8#QW0Bx4=@P#EC{m;?R%O;{bHxMR zWH=@|DoVo8@G-~;9Ja=vN0D>p4zqleZOt9MMxL!~{LEX1MJHq8Q3R!On=b>q-|T(C zb+-g6DxYR&b*T8Au|PDaHT8qW&dv_RJd)t@0KO43_VCAGjr(J1_m4H9+cY@vHwHhl zMX|84MWv;&Ap?*nVBzAD+@2$md5T#=;P-BDb`aLY{>+o&Z98viZob2io$-g>UYjTH z*UPG45h_Irk6BsobDItMgD4CHfHk%=JcL95X_uCl$99^{vwX+^e2G|E-nH;*$JOun zQyhj}L3aC2pcQ}(BdViArH~~ADn2AfJk$svJlL6IfcQ8#IlqGD>##QT2;@k3pwI#C zn3QQuo=yTdt+AS5231e@^eNi*WCh8s%XmHvMgy9P6>W1?byJg+xcEH~>T6v+tSxid z5UxW*L-V#ZHGQRsQ}t5V<7qR9Vel8UYW9whyf_bO_?N70?8O>0MRQ7 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__inherit__graph.md5 new file mode 100644 index 00000000..19e0737c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__inherit__graph.md5 @@ -0,0 +1 @@ +d651da1a566326c3ffcd7b59f593d720 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4A__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8085c80296a47bb50476b3551bd06bb37aeb1c92 GIT binary patch literal 6753 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 =W_&xcIb;U|lUC%XP>;Ktu=J69{ zUHZDZ(Vd+l|0E@CwUM4;{wV7j)zlc%KDV~ECIXq&^0JXnVz!F3wDj)|FW$hwz-qfW zeo!)$ATAmo^nI|OW)BMoz0aWqL^RrsHliSx0zGW}w4%7U6BPTwq_(}K&31yK&{vQb z94DdN;O+1eK6n81o~?6g>LD8&+s3aV0^gep^K@Z9n$y$MjRiOyCc6^{qK=h)zuPwg zf`UscEB8c|ZZkJQ=L5DRE-h_l=QrTzzpJZ;v&{}+v9bL?S6$Q^-7#|-fo6MF2 zj3uc5o_GdX1JKri?=RPG!iT|N&7LRB0P>d>7yS!llj-^SDW{oN9p>+swDO3?E?n4-LtIPG&rk{yK%nR;z9o8yg$A z;eKG(Uxf$@3DIO`W+IM{dtg4u#ob-JRJkTzdj5_>CI*J3Xx{lw5bC_w){e~1rt?1j zDMij<;NLt7dM^rea&j^-G$a95?B=uyUb34I7w6AA?|#qc^7!kw1SSx7#o$r$gw5E` zwFZMv1B+*{0P{It{6xS3^oUibnegAK2B+(eW&^^taWn~Za51*z?(XiqiR=239Km%p zaOGIx8*<>WJ8Mk`5x^yRAM`#91E2=7z*i&TjV@0a7#;(QKbZ95m%Cm;K|xqVL>CZ* zkLx2DW;2u&6dzBv)Y_4IZD8b32tIWL@YO&$D~AtuWcaU@k4{b=V79yf77{4?ozi_y zO)Y602Epp&@0`L03nddufKnj-=zqE-)ICq z$4z}O(9y#+t_ueNb8dh|uG0>T$!uy|PyF%)M_gR|{QUe*_Nu{Ys;byQI6EeMppG#+*R%hw5gH0K*GEFY_vJzo2 zF_Iux1;whQuTKC~*VMe9sX8zLSl0;#1?B+^9uoqr5k7;5hu3=&JvA{g;Ub*{kk#%a z9oS4IJw1GSs{>q-nLBs|^7ri7GZ6y=gSs2Qb3Jh0OcL8|&3X$Wz;QKh`+DWNZDc^Z z9yIm#_vZnUPhe8CbC3gXeg?6QdKw+pGiK(o%jMq>j!y$LR0x%ol|Nn_nzmo8rIB-) zVBN>VBch;~-gz$O;J{g4QGo&ha4)W?2u@5?3*Fk-6UxZQIGE7Te+-i3y}iAR(i}mI z`{e#0#4-d6OVI?PM7L&q5)zWTVF2y?U1v@(S)q-Ii;D|&0*BzRJ^7+st3hTr1vI0Y zxh%h%M*z)L2Srp>N!j#a<-Z7Eo?hdYCMIa$9H8#QW0Bx4=@P#EC{m;?R%O;{bHxMR zWH=@|DoVo8@G-~;9Ja=vN0D>p4zqleZOt9MMxL!~{LEX1MJHq8Q3R!On=b>q-|T(C zb+-g6DxYR&b*T8Au|PDaHT8qW&dv_RJd)t@0KO43_VCAGjr(J1_m4H9+cY@vHwHhl zMX|84MWv;&Ap?*nVBzAD+@2$md5T#=;P-BDb`aLY{>+o&Z98viZob2io$-g>UYjTH z*UPG45h_Irk6BsobDItMgD4CHfHk%=JcL95X_uCl$99^{vwX+^e2G|E-nH;*$JOun zQyhj}L3aC2pcQ}(BdViArH~~ADn2AfJk$svJlL6IfcQ8#IlqGD>##QT2;@k3pwI#C zn3QQuo=yTdt+AS5231e@^eNi*WCh8s%XmHvMgy9P6>W1?byJg+xcEH~>T6v+tSxid z5UxW*L-V#ZHGQRsQ}t5V<7qR9Vel8UYW9whyf_bO_?N70?8O>0MRQ7 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraK4W2 Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraK4W2, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2static
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraK4W2(int deviceId=0, Type type=kTypeDepth2ColorSD, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2protectedvirtual
cColorHeight (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2static
cColorWidth (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2static
cDepthHeight (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2static
cDepthWidth (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2static
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraK4W2virtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraK4W2virtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2virtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
kTypeColor2DepthSD enum value (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2
kTypeDepth2ColorHD enum value (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2
kTypeDepth2ColorSD enum value (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
Type enum name (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraK4W2() (defined in rtabmap::CameraK4W2)rtabmap::CameraK4W2virtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2.html new file mode 100644 index 00000000..34067f78 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2.html @@ -0,0 +1,483 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraK4W2 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraK4W2:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraK4W2:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + +

+Public Types

enum  Type { kTypeColor2DepthSD +, kTypeDepth2ColorSD +, kTypeDepth2ColorHD + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraK4W2 (int deviceId=0, Type type=kTypeDepth2ColorSD, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + +

+Static Public Attributes

static const int cDepthWidth = 512
 
static const int cDepthHeight = 424
 
static const int cColorWidth = 1920
 
static const int cColorHeight = 1080
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 44 of file CameraK4W2.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::CameraK4W2::Type
+
+ +

Definition at line 50 of file CameraK4W2.h.

+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraK4W2::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraK4W2::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraK4W2::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraK4W2::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+

Member Data Documentation

+ +

◆ cDepthWidth

+ +
+
+ + + + + +
+ + + + +
const int rtabmap::CameraK4W2::cDepthWidth = 512
+
+static
+
+ +

Definition at line 57 of file CameraK4W2.h.

+ +
+
+ +

◆ cDepthHeight

+ +
+
+ + + + + +
+ + + + +
const int rtabmap::CameraK4W2::cDepthHeight = 424
+
+static
+
+ +

Definition at line 58 of file CameraK4W2.h.

+ +
+
+ +

◆ cColorWidth

+ +
+
+ + + + + +
+ + + + +
const int rtabmap::CameraK4W2::cColorWidth = 1920
+
+static
+
+ +

Definition at line 59 of file CameraK4W2.h.

+ +
+
+ +

◆ cColorHeight

+ +
+
+ + + + + +
+ + + + +
const int rtabmap::CameraK4W2::cColorHeight = 1080
+
+static
+
+ +

Definition at line 60 of file CameraK4W2.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.map new file mode 100644 index 00000000..3c639995 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.md5 new file mode 100644 index 00000000..3ab77f38 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.md5 @@ -0,0 +1 @@ +347f2be409307a8e7906c986363d0a7c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ca6265381363fb76d7a80e53c5ec5dacfa0d7474 GIT binary patch literal 7075 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.map new file mode 100644 index 00000000..3c639995 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.md5 new file mode 100644 index 00000000..3ab77f38 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.md5 @@ -0,0 +1 @@ +347f2be409307a8e7906c986363d0a7c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraK4W2__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ca6265381363fb76d7a80e53c5ec5dacfa0d7474 GIT binary patch literal 7075 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraModel-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraModel-members.html new file mode 100644 index 00000000..313855f0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraModel-members.html @@ -0,0 +1,141 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraModel Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraModel, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CameraModel()rtabmap::CameraModel
CameraModel(const std::string &name, const cv::Size &imageSize, const cv::Mat &K, const cv::Mat &D, const cv::Mat &R, const cv::Mat &P, const Transform &localTransform=opticalRotation())rtabmap::CameraModel
CameraModel(double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))rtabmap::CameraModel
CameraModel(const std::string &name, double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))rtabmap::CameraModel
cx() constrtabmap::CameraModelinline
cy() constrtabmap::CameraModelinline
D() constrtabmap::CameraModelinline
D_raw() constrtabmap::CameraModelinline
deserialize(const std::vector< unsigned char > &data)rtabmap::CameraModel
deserialize(const unsigned char *data, unsigned int dataSize)rtabmap::CameraModel
fovX() constrtabmap::CameraModel
fovY() constrtabmap::CameraModel
fx() constrtabmap::CameraModelinline
fy() constrtabmap::CameraModelinline
horizontalFOV() constrtabmap::CameraModel
imageHeight() const (defined in rtabmap::CameraModel)rtabmap::CameraModelinline
imageSize() const (defined in rtabmap::CameraModel)rtabmap::CameraModelinline
imageWidth() const (defined in rtabmap::CameraModel)rtabmap::CameraModelinline
inFrame(int u, int v) constrtabmap::CameraModel
initRectificationMap()rtabmap::CameraModel
isFisheye() constrtabmap::CameraModelinline
isRectificationMapInitialized() constrtabmap::CameraModelinline
isValidForProjection() constrtabmap::CameraModelinline
isValidForRectification() constrtabmap::CameraModelinline
isValidForReprojection() constrtabmap::CameraModelinline
K() constrtabmap::CameraModelinline
K_raw() constrtabmap::CameraModelinline
load(const std::string &filePath, bool initRectificationMaps=true)rtabmap::CameraModel
load(const std::string &directory, const std::string &cameraName, bool initRectificationMaps=true)rtabmap::CameraModel
localTransform() constrtabmap::CameraModelinline
name() constrtabmap::CameraModelinline
opticalRotation()rtabmap::CameraModelinlinestatic
P() constrtabmap::CameraModelinline
project(float u, float v, float depth, float &x, float &y, float &z) constrtabmap::CameraModel
R() constrtabmap::CameraModelinline
rectifyDepth(const cv::Mat &raw) constrtabmap::CameraModel
rectifyImage(const cv::Mat &raw, int interpolation=cv::INTER_LINEAR) constrtabmap::CameraModel
reproject(float x, float y, float z, float &u, float &v) constrtabmap::CameraModel
reproject(float x, float y, float z, int &u, int &v) constrtabmap::CameraModel
roi(const cv::Rect &roi) constrtabmap::CameraModel
save(const std::string &directory) constrtabmap::CameraModel
scaled(double scale) constrtabmap::CameraModel
serialize() constrtabmap::CameraModel
setImageSize(const cv::Size &size)rtabmap::CameraModel
setLocalTransform(const Transform &transform)rtabmap::CameraModelinline
setName(const std::string &name)rtabmap::CameraModelinline
Tx() constrtabmap::CameraModelinline
verticalFOV() constrtabmap::CameraModel
~CameraModel()rtabmap::CameraModelinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraModel.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraModel.html new file mode 100644 index 00000000..a3718eed --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraModel.html @@ -0,0 +1,1905 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraModel Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::CameraModel Class Reference
+
+
+ +

Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection, rectification, and transformation. + More...

+ +

#include <CameraModel.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraModel ()
 Default constructor.
 
 CameraModel (const std::string &name, const cv::Size &imageSize, const cv::Mat &K, const cv::Mat &D, const cv::Mat &R, const cv::Mat &P, const Transform &localTransform=opticalRotation())
 Constructor using full camera parameters.
 
 CameraModel (double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))
 Minimal constructor using intrinsic parameters. This assumes the images are already rectified.
 
+ CameraModel (const std::string &name, double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))
 Minimal constructor with name for saving.
 
virtual ~CameraModel ()
 Destructor.
 
bool initRectificationMap ()
 Initializes the rectification maps used to undistort and rectify images.
 
bool isRectificationMapInitialized () const
 Checks if the rectification map has been initialized.
 
bool isValidForProjection () const
 Checks if the model is valid for 2D->3D projection.
 
bool isValidForReprojection () const
 Checks if the model is valid for 3D->2D reprojection.
 
bool isValidForRectification () const
 Checks if the model has sufficient data for image rectification.
 
void setName (const std::string &name)
 Sets the camera name, used to set a camera name when saving to a file.
 
const std::string & name () const
 Returns the camera name.
 
double fx () const
 Returns focal length in x.
 
double fy () const
 Returns focal length in y.
 
double cx () const
 Returns principal point x.
 
double cy () const
 Returns principal point y.
 
double Tx () const
 Returns the x translation (usually fx * baseline in case of stereo, otherwise would be 0).
 
cv::Mat K_raw () const
 Returns the raw intrinsic matrix (before rectification).
 
cv::Mat D_raw () const
 Returns the raw distortion coefficients (before rectification).
 
cv::Mat K () const
 Returns the rectified camera intrinsic matrix if the projection matrix P exists, otherwise returns the raw intrinsic matrix.
 
cv::Mat D () const
 Returns the rectified distortion coefficients (1x5 filled with zeros) if the projection matrix P exists, otherwise returns the raw distortion coefficients.
 
cv::Mat R () const
 Returns the rectification matrix.
 
cv::Mat P () const
 Returns the projection matrix.
 
void setLocalTransform (const Transform &transform)
 Sets the local transform of the camera (base frame to optical frame).
 
const Transform & localTransform () const
 Returns the local transform (base frame to optical frame).
 
void setImageSize (const cv::Size &size)
 Sets the image size of the camera model and updates the principal point if undefined.
 
const cv::Size & imageSize () const
 
int imageWidth () const
 
int imageHeight () const
 
double fovX () const
 Returns the horizontal field of view (FoV) in radians.
 
double fovY () const
 Returns the vertical field of view (FoV) in radians.
 
double horizontalFOV () const
 Returns the horizontal field of view in degrees.
 
double verticalFOV () const
 Returns the vertical field of view in degrees.
 
bool isFisheye () const
 Checks if the distortion model is fisheye (6 coefficients: k1,k2,0,0,k3,k4).
 
bool load (const std::string &filePath, bool initRectificationMaps=true)
 Loads the camera model parameters from a YAML calibration file.
 
bool load (const std::string &directory, const std::string &cameraName, bool initRectificationMaps=true)
 Loads the camera model by constructing a file path from a directory and camera name.
 
bool save (const std::string &directory) const
 Saves the camera model parameters to a YAML calibration file in ROS format.
 
std::vector< unsigned char > serialize () const
 Serializes the camera model to a binary format.
 
unsigned int deserialize (const std::vector< unsigned char > &data)
 Deserializes a camera model from a byte vector.
 
unsigned int deserialize (const unsigned char *data, unsigned int dataSize)
 Deserializes a camera model from a raw byte buffer.
 
CameraModel scaled (double scale) const
 Returns a new camera model with all intrinsic parameters scaled by a given factor.
 
CameraModel roi (const cv::Rect &roi) const
 Returns a new camera model adjusted for a given region of interest (ROI).
 
cv::Mat rectifyImage (const cv::Mat &raw, int interpolation=cv::INTER_LINEAR) const
 Rectifies a raw image using the precomputed rectification maps.
 
cv::Mat rectifyDepth (const cv::Mat &raw) const
 Rectifies a raw depth image using the precomputed rectification maps.
 
void project (float u, float v, float depth, float &x, float &y, float &z) const
 Projects a 2D pixel and depth value into a 3D point in the camera coordinate frame (/camera_link).
 
void reproject (float x, float y, float z, float &u, float &v) const
 Reprojects a 3D point in the camera frame (/camera_link) into 2D image coordinates (floating-point).
 
void reproject (float x, float y, float z, int &u, int &v) const
 Reprojects a 3D point in the camera frame (/camera_link) into 2D image coordinates (rounded to int).
 
bool inFrame (int u, int v) const
 Checks if a given pixel coordinate lies within the image bounds.
 
+ + + + +

+Static Public Member Functions

static Transform opticalRotation ()
 Returns the default optical rotation to convert image coordinates to robot coordinates.
 
+

Detailed Description

+

Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection, rectification, and transformation.

+

This class encapsulates camera calibration data, including intrinsic parameters (fx, fy, cx, cy), distortion coefficients, rectification and projection matrices. It provides utility functions for image rectification, projection from 2D to 3D, and vice versa.

+

This class supports the 4 to 14 parameters Radial Tangential distortion model (also called Plumb Bob or Brown-Conrady model) and 4 parameters Fish Eye model (also known as Equidistant model).

+
See also
OpenCV's calib3d module for all supported camera models.
+ +

Definition at line 52 of file CameraModel.h.

+

Constructor & Destructor Documentation

+ +

◆ CameraModel() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::CameraModel::CameraModel (const std::string & name,
const cv::Size & imageSize,
const cv::Mat & K,
const cv::Mat & D,
const cv::Mat & R,
const cv::Mat & P,
const Transform & localTransform = opticalRotation() 
)
+
+ +

Constructor using full camera parameters.

+
Parameters
+ + + + + + + + +
nameCamera name or ID.
imageSizeSize of the image (width x height).
KIntrinsic matrix (3x3).
DDistortion coefficients, 1xN matrix where N is between 4 and 14 parameters: k1,k2,p1,p2[,k3[,k4,k5,k6[,s1,s2,s3,s4[,tx,ty]]]]). To set Fish Eye / Equidistant model, it is implicitly used if we provide 6 values like this: [k1,k2,0,0,k3,k4], where you only need to fill "k" parameters.
RRectification matrix (3x3).
PProjection matrix (3x4).
localTransformLocal transform to apply to the camera frame.
+
+
+ +
+
+ +

◆ CameraModel() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::CameraModel::CameraModel (double fx,
double fy,
double cx,
double cy,
const Transform & localTransform = opticalRotation(),
double Tx = 0.0f,
const cv::Size & imageSize = cv::Size(0, 0) 
)
+
+ +

Minimal constructor using intrinsic parameters. This assumes the images are already rectified.

+
Parameters
+ + + + + + + + +
fxFocal length x.
fyFocal length y.
cxPrincipal point x.
cyPrincipal point y.
localTransformLocal transform to apply to the camera frame.
TxBaseline * fx (optional). Mainly used in case of stereo pair.
imageSizeImage size (optional).
+
+
+ +
+
+ +

◆ ~CameraModel()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::CameraModel::~CameraModel ()
+
+inlinevirtual
+
+ +

Destructor.

+ +

Definition at line 128 of file CameraModel.h.

+ +
+
+

Member Function Documentation

+ +

◆ opticalRotation()

+ +
+
+ + + + + +
+ + + + + + + +
static Transform rtabmap::CameraModel::opticalRotation ()
+
+inlinestatic
+
+ +

Returns the default optical rotation to convert image coordinates to robot coordinates.

+

Image frame: x -> right, y -> down, z -> forward
+ Robot frame: x -> forward, y -> left, z -> up

+
Returns
Transform rotation matrix.
+ +

Definition at line 63 of file CameraModel.h.

+ +
+
+ +

◆ initRectificationMap()

+ +
+
+ + + + + + + +
bool rtabmap::CameraModel::initRectificationMap ()
+
+ +

Initializes the rectification maps used to undistort and rectify images.

+

This function prepares the mapX_ and mapY_ lookup tables used for image rectification. It supports both standard radial-tangential distortion and fisheye/equidistant distortion models.

+
    +
  • If the distortion model is fisheye (indicated by D_.cols == 6), it uses cv::fisheye::initUndistortRectifyMap() to create the rectification maps. This requires OpenCV ≥ 2.4.10.
  • +
  • Otherwise, it uses the standard cv::initUndistortRectifyMap() for plumb bob or rational polynomial models.
  • +
+
Precondition
The camera model must be valid for rectification:
    +
  • imageSize_ must be non-zero.
  • +
  • D_ must be a 1-row matrix with an accepted number of columns (4, 5, 6, 8, 12, or 14).
  • +
  • R_ must be a 3x3 rectification matrix.
  • +
  • P_ must be a 3x4 projection matrix.
  • +
+
+
Returns
true if the rectification maps were successfully initialized (mapX_ and mapY_ are not empty), false otherwise.
+
See also
isRectificationMapInitialized(), rectifyImage(), rectifyDepth()
+
Warning
Requires OpenCV 2.4.10 or newer for fisheye support. If the version is older, fisheye rectification will not work.
+ +
+
+ +

◆ isRectificationMapInitialized()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::CameraModel::isRectificationMapInitialized () const
+
+inline
+
+ +

Checks if the rectification map has been initialized.

+
Returns
True if both mapX_ and mapY_ are initialized.
+ +

Definition at line 159 of file CameraModel.h.

+ +
+
+ +

◆ isValidForProjection()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::CameraModel::isValidForProjection () const
+
+inline
+
+ +

Checks if the model is valid for 2D->3D projection.

+ +

Definition at line 164 of file CameraModel.h.

+ +
+
+ +

◆ isValidForReprojection()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::CameraModel::isValidForReprojection () const
+
+inline
+
+ +

Checks if the model is valid for 3D->2D reprojection.

+ +

Definition at line 168 of file CameraModel.h.

+ +
+
+ +

◆ isValidForRectification()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::CameraModel::isValidForRectification () const
+
+inline
+
+ +

Checks if the model has sufficient data for image rectification.

+ +

Definition at line 172 of file CameraModel.h.

+ +
+
+ +

◆ setName()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraModel::setName (const std::string & name)
+
+inline
+
+ +

Sets the camera name, used to set a camera name when saving to a file.

+ +

Definition at line 183 of file CameraModel.h.

+ +
+
+ +

◆ name()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::CameraModel::name () const
+
+inline
+
+ +

Returns the camera name.

+ +

Definition at line 185 of file CameraModel.h.

+ +
+
+ +

◆ fx()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::CameraModel::fx () const
+
+inline
+
+ +

Returns focal length in x.

+ +

Definition at line 188 of file CameraModel.h.

+ +
+
+ +

◆ fy()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::CameraModel::fy () const
+
+inline
+
+ +

Returns focal length in y.

+ +

Definition at line 190 of file CameraModel.h.

+ +
+
+ +

◆ cx()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::CameraModel::cx () const
+
+inline
+
+ +

Returns principal point x.

+ +

Definition at line 192 of file CameraModel.h.

+ +
+
+ +

◆ cy()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::CameraModel::cy () const
+
+inline
+
+ +

Returns principal point y.

+ +

Definition at line 194 of file CameraModel.h.

+ +
+
+ +

◆ Tx()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::CameraModel::Tx () const
+
+inline
+
+ +

Returns the x translation (usually fx * baseline in case of stereo, otherwise would be 0).

+ +

Definition at line 196 of file CameraModel.h.

+ +
+
+ +

◆ K_raw()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Mat rtabmap::CameraModel::K_raw () const
+
+inline
+
+ +

Returns the raw intrinsic matrix (before rectification).

+ +

Definition at line 199 of file CameraModel.h.

+ +
+
+ +

◆ D_raw()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Mat rtabmap::CameraModel::D_raw () const
+
+inline
+
+ +

Returns the raw distortion coefficients (before rectification).

+ +

Definition at line 201 of file CameraModel.h.

+ +
+
+ +

◆ K()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Mat rtabmap::CameraModel::K () const
+
+inline
+
+ +

Returns the rectified camera intrinsic matrix if the projection matrix P exists, otherwise returns the raw intrinsic matrix.

+ +

Definition at line 203 of file CameraModel.h.

+ +
+
+ +

◆ D()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Mat rtabmap::CameraModel::D () const
+
+inline
+
+ +

Returns the rectified distortion coefficients (1x5 filled with zeros) if the projection matrix P exists, otherwise returns the raw distortion coefficients.

+ +

Definition at line 205 of file CameraModel.h.

+ +
+
+ +

◆ R()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Mat rtabmap::CameraModel::R () const
+
+inline
+
+ +

Returns the rectification matrix.

+ +

Definition at line 207 of file CameraModel.h.

+ +
+
+ +

◆ P()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Mat rtabmap::CameraModel::P () const
+
+inline
+
+ +

Returns the projection matrix.

+ +

Definition at line 209 of file CameraModel.h.

+ +
+
+ +

◆ setLocalTransform()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraModel::setLocalTransform (const Transform & transform)
+
+inline
+
+ +

Sets the local transform of the camera (base frame to optical frame).

+ +

Definition at line 212 of file CameraModel.h.

+ +
+
+ +

◆ localTransform()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::CameraModel::localTransform () const
+
+inline
+
+ +

Returns the local transform (base frame to optical frame).

+ +

Definition at line 214 of file CameraModel.h.

+ +
+
+ +

◆ setImageSize()

+ +
+
+ + + + + + + + +
void rtabmap::CameraModel::setImageSize (const cv::Size & size)
+
+ +

Sets the image size of the camera model and updates the principal point if undefined.

+

This function updates the internal image size (imageSize_) with the provided size. If the intrinsic matrices (K_ or P_) are present and the principal point coordinates (cx, cy) are zero, they are set to the image center (width/2 - 0.5, height/2 - 0.5).

+

This ensures the camera model remains valid and useful even when the calibration file has no principal point set or the image size is updated manually.

+
Parameters
+ + +
sizeThe new image size. It must be either both dimensions zero (clearing) or both positive.
+
+
+
Precondition
size.width > 0 && size.height > 0 or size.width == 0 && size.height == 0
+
Postcondition
Updates the imageSize_, and adjusts cx and cy in K_ and P_ if they were initially zero.
+
Warning
If K_ or P_ are not initialized (empty()), no updates will be applied to them.
+
See also
imageSize(), imageWidth(), imageHeight()
+ +
+
+ +

◆ imageSize()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Size & rtabmap::CameraModel::imageSize () const
+
+inline
+
+ +

Definition at line 236 of file CameraModel.h.

+ +
+
+ +

◆ imageWidth()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::CameraModel::imageWidth () const
+
+inline
+
+ +

Definition at line 237 of file CameraModel.h.

+ +
+
+ +

◆ imageHeight()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::CameraModel::imageHeight () const
+
+inline
+
+ +

Definition at line 238 of file CameraModel.h.

+ +
+
+ +

◆ fovX()

+ +
+
+ + + + + + + +
double rtabmap::CameraModel::fovX () const
+
+ +

Returns the horizontal field of view (FoV) in radians.

+

The FoV is computed using the pinhole camera model as:

+\[
+\text{FoV}_x = 2 \cdot \tan^{-1}\left(\frac{\text{image width}}{2 \cdot f_x}\right)
+\] +

+
Returns
Horizontal field of view in radians. Returns 0.0 if image width or focal length is invalid.
+ +
+
+ +

◆ fovY()

+ +
+
+ + + + + + + +
double rtabmap::CameraModel::fovY () const
+
+ +

Returns the vertical field of view (FoV) in radians.

+

The FoV is computed using the pinhole camera model as:

+\[
+\text{FoV}_y = 2 \cdot \tan^{-1}\left(\frac{\text{image height}}{2 \cdot f_y}\right)
+\] +

+
Returns
Vertical field of view in radians. Returns 0.0 if image height or focal length is invalid.
+ +
+
+ +

◆ horizontalFOV()

+ +
+
+ + + + + + + +
double rtabmap::CameraModel::horizontalFOV () const
+
+ +

Returns the horizontal field of view in degrees.

+

Converts the result of fovX() from radians to degrees.

+
Returns
Horizontal field of view in degrees. Returns 0.0 if the result is invalid.
+ +
+
+ +

◆ verticalFOV()

+ +
+
+ + + + + + + +
double rtabmap::CameraModel::verticalFOV () const
+
+ +

Returns the vertical field of view in degrees.

+

Converts the result of fovY() from radians to degrees.

+
Returns
Vertical field of view in degrees. Returns 0.0 if the result is invalid.
+ +
+
+ +

◆ isFisheye()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::CameraModel::isFisheye () const
+
+inline
+
+ +

Checks if the distortion model is fisheye (6 coefficients: k1,k2,0,0,k3,k4).

+ +

Definition at line 283 of file CameraModel.h.

+ +
+
+ +

◆ load() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::CameraModel::load (const std::string & filePath,
bool initRectificationMaps = true 
)
+
+ +

Loads the camera model parameters from a YAML calibration file.

+

This method attempts to read camera intrinsic/extrinsic parameters and image size from a YAML file, typically in the ROS calibration format. If the distortion model is "fisheye" or "equidistant", we expect 4 coefficients, which are converted to a 6-coefficient format for internal representation.

+

Fields loaded (if present):
+

    +
  • camera_name
    +
  • +
  • image_width (pixels)
  • +
  • image_height (pixels)
  • +
  • camera_matrix (K, 3x3 double matrix)
    +
  • +
  • distortion_coefficients (D, 1xN double matrix)
    +
  • +
  • distortion_model (string: name of the model)
  • +
  • rectification_matrix (R, 3x3 double matrix)
    +
  • +
  • projection_matrix (P, 3x4 double matrix)
    +
  • +
  • local_transform (camera pose w.r.t robot frame)
  • +
+

On success, the internal matrices and settings of the camera model are updated. If the model is valid for rectification, the rectification map is initialized.

+
Parameters
+ + + +
filePathAbsolute or relative path to the YAML file.
initRectificationMapsSet to false to skip building the (potentially large) rectification maps when rectification won't be used (saves time and memory).
+
+
+
Returns
True if the file was successfully loaded and parsed, false otherwise.
+
Warning
Logs warnings if any fields are missing. If file does not exist or parsing fails, returns false.
+
See also
initRectificationMap()
+ +
+
+ +

◆ load() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool rtabmap::CameraModel::load (const std::string & directory,
const std::string & cameraName,
bool initRectificationMaps = true 
)
+
+ +

Loads the camera model by constructing a file path from a directory and camera name.

+

This is a convenience wrapper around load(filePath) that constructs the file path as: directory + "/" + cameraName + ".yaml".

+
Parameters
+ + + + +
directoryPath to the folder containing the camera YAML file.
cameraNameBase name of the camera file (without extension).
initRectificationMapsSet to false to skip building the (potentially large) rectification maps when rectification won't be used (saves time and memory).
+
+
+
Returns
True if loading from the constructed path succeeds, false otherwise.
+ +
+
+ +

◆ save()

+ +
+
+ + + + + + + + +
bool rtabmap::CameraModel::save (const std::string & directory) const
+
+ +

Saves the camera model parameters to a YAML calibration file in ROS format.

+

The file will include the following fields if they are not empty:

    +
  • camera_name
  • +
  • image_width
  • +
  • image_height
  • +
  • camera_matrix (K)
  • +
  • distortion_coefficients (D)
  • +
  • distortion_model (auto-detected based on number of distortion coefficients)
  • +
  • rectification_matrix (R)
  • +
  • projection_matrix (P)
  • +
  • local_transform (camera pose w.r.t robot frame)
  • +
+

If the distortion matrix contains 6 coefficients (used for fisheye), it is converted to a standard 4-coefficient format for ROS compatibility.

+
Parameters
+ + +
directoryPath to the folder where the YAML file will be saved.
+
+
+
Returns
True if saving was successful, false otherwise.
+
Note
If name_ is empty, "camera.yaml" is used as the default filename.
+
Warning
Returns false and logs an error if none of the matrices are set.
+ +
+
+ +

◆ serialize()

+ +
+
+ + + + + + + +
std::vector< unsigned char > rtabmap::CameraModel::serialize () const
+
+ +

Serializes the camera model to a binary format.

+

The serialization includes the camera intrinsics (K_, D_), rectification matrix (R_), projection matrix (P_), image size, and the local transform. The format is compact and suitable for file storage or transmission over a network.

+

Data layout:

    +
  • Header (11 integers):
      +
    • [0-2] RTAB-Map version (major, minor, patch)
    • +
    • [3] Camera type (0 = mono, 1=stereo)
    • +
    • [4-5] Image width, height
    • +
    • [6-9] Element counts for K, D, R, P matrices
    • +
    • [10] Size of localTransform (0 if null)
    • +
    +
  • +
  • Data section (in order): raw memory blocks for K, D, R, P (double values), followed by float values for localTransform
  • +
+
Returns
A byte vector containing the serialized data. The format is compatible with deserialize().
+
Note
This is a custom binary format, not meant to be human-readable.
+
See also
deserialize(), StereoCameraModel
+ +
+
+ +

◆ deserialize() [1/2]

+ +
+
+ + + + + + + + +
unsigned int rtabmap::CameraModel::deserialize (const std::vector< unsigned char > & data)
+
+ +

Deserializes a camera model from a byte vector.

+

This is a convenience wrapper around deserialize(const unsigned char*, unsigned int) that takes a std::vector<unsigned char> instead of a raw buffer.

+
Parameters
+ + +
dataByte vector containing data serialized by serialize().
+
+
+
Returns
The number of bytes successfully read and parsed. Returns 0 on failure.
+
See also
serialize(), deserialize(const unsigned char*, unsigned int)
+ +
+
+ +

◆ deserialize() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
unsigned int rtabmap::CameraModel::deserialize (const unsigned char * data,
unsigned int dataSize 
)
+
+ +

Deserializes a camera model from a raw byte buffer.

+

Reads the camera intrinsics, distortion, rectification, projection matrices, image size, and local transform from a serialized binary format previously created with serialize().

+
Parameters
+ + + +
dataPointer to the binary data buffer.
dataSizeSize of the data buffer in bytes.
+
+
+
Returns
The number of bytes successfully read. Returns 0 on error or if the format is invalid.
+
Warning
If the buffer format does not match the expected layout or version, an error is logged and the camera model remains in a default-initialized state.
+
Note
Assumes little-endian architecture and strict size/type matching. The serialized format must be created by CameraModel::serialize(). Non-mono camera types are not supported. See StereoCameraModel to serialize/deserialize stereo models.
+
See also
serialize()
+ +
+
+ +

◆ scaled()

+ +
+
+ + + + + + + + +
CameraModel rtabmap::CameraModel::scaled (double scale) const
+
+ +

Returns a new camera model with all intrinsic parameters scaled by a given factor.

+

This method scales the camera's intrinsic matrix (K_) and projection matrix (P_), as well as the image size, by the given scale factor. The distortion and rectification matrices are left unchanged.

+

Only valid camera models (i.e., those for which isValidForProjection() returns true) are scaled. If the model is invalid, a warning is issued and the original model is returned unchanged.

+
Parameters
+ + +
scaleScaling factor (> 0). For example, use 0.5 to downscale or 2.0 to upscale.
+
+
+
Returns
A scaled copy of the camera model with updated intrinsics and image size.
+
Warning
If the camera model is not valid for projection, the scale operation is ignored.
+ +
+
+ +

◆ roi()

+ +
+
+ + + + + + + + +
CameraModel rtabmap::CameraModel::roi (const cv::Rect & roi) const
+
+ +

Returns a new camera model adjusted for a given region of interest (ROI).

+

This method shifts the principal point (cx, cy) in the intrinsic matrix (K_) and projection matrix (P_) by subtracting the ROI’s top-left (x, y) offset. The image size is also set to the ROI size.

+

Only valid camera models (i.e., those for which isValidForProjection() returns true) can be adjusted. If the model is invalid, a warning is issued and the original model is returned unchanged.

+
Parameters
+ + +
roiRegion of interest defined as a rectangle (typically a subwindow of the full image).
+
+
+
Returns
A new camera model adapted to the ROI with adjusted intrinsics and image size.
+
Warning
If the camera model is not valid for projection, the ROI operation is ignored.
+ +
+
+ +

◆ rectifyImage()

+ +
+
+ + + + + + + + + + + + + + + + + + +
cv::Mat rtabmap::CameraModel::rectifyImage (const cv::Mat & raw,
int interpolation = cv::INTER_LINEAR 
) const
+
+ +

Rectifies a raw image using the precomputed rectification maps.

+

This function applies geometric correction (rectification) to an image using the camera model's mapX_ and mapY_ rectification maps. It is typically used to correct lens distortion in images based on the calibration parameters.

+
Parameters
+ + + +
rawInput raw image (e.g., from camera). Must be a valid cv::Mat.
interpolationInterpolation method to use. Typically cv::INTER_LINEAR or cv::INTER_NEAREST.
+
+
+
Returns
Rectified image. If the rectification maps are not initialized, the function logs an error and returns a clone of the original image.
+
Precondition
mapX_ and mapY_ must be initialized using initRectificationMap().
+
Note
Works for color and grayscale images of any valid type.
+
See also
initRectificationMap(), rectifyDepth()
+ +
+
+ +

◆ rectifyDepth()

+ +
+
+ + + + + + + + +
cv::Mat rtabmap::CameraModel::rectifyDepth (const cv::Mat & raw) const
+
+ +

Rectifies a raw depth image using the precomputed rectification maps.

+

This function applies geometric correction (rectification) to a 16-bit unsigned depth image. It performs a pixel-by-pixel bilinear interpolation, only if all neighboring pixels have valid (non-zero) depth values, and the variation among them is within 1% of their average.

+

The method is optimized to avoid introducing noise in regions of high depth variance.

+
Parameters
+ + +
rawInput raw depth image (CV_16UC1). Must contain 16-bit unsigned depth values.
+
+
+
Returns
Rectified depth image. If the rectification maps are not initialized or the input image is not of type CV_16UC1, the function logs an error and returns a clone of the input.
+
Precondition
Input image must be of type CV_16UC1. mapX_ and mapY_ must be initialized.
+
Note
Inspired by the Kinect2 CPU depth registration implementation from: https://github.com/code-iai/iai_kinect2
+
Warning
Invalid or noisy regions are skipped in interpolation to maintain depth consistency.
+
See also
initRectificationMap(), rectifyImage()
+ +
+
+ +

◆ project()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::CameraModel::project (float u,
float v,
float depth,
float & x,
float & y,
float & z 
) const
+
+ +

Projects a 2D pixel and depth value into a 3D point in the camera coordinate frame (/camera_link).

+

This function uses the camera's intrinsic parameters to compute the 3D point corresponding to the given 2D image coordinates and depth value.

+
Parameters
+ + + + + + + +
uHorizontal image coordinate (in pixels).
vVertical image coordinate (in pixels).
depthDepth value at (u, v) in meters.
[out]xOutput X coordinate in 3D space.
[out]yOutput Y coordinate in 3D space.
[out]zOutput Z coordinate in 3D space (equals depth).
+
+
+
Note
If depth <= 0, the output (x, y, z) will be set to NaN.
+
See also
reproject()
+ +
+
+ +

◆ reproject() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::CameraModel::reproject (float x,
float y,
float z,
float & u,
float & v 
) const
+
+ +

Reprojects a 3D point in the camera frame (/camera_link) into 2D image coordinates (floating-point).

+

This function computes the image plane coordinates for a given 3D point using the camera's intrinsic parameters.

+
Parameters
+ + + + + + +
xX coordinate in camera space.
yY coordinate in camera space.
zZ coordinate in camera space (must be non-zero).
[out]uOutput horizontal image coordinate (float).
[out]vOutput vertical image coordinate (float).
+
+
+
Precondition
z != 0
+
See also
project(), reproject(int&, int&)
+ +
+
+ +

◆ reproject() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::CameraModel::reproject (float x,
float y,
float z,
int & u,
int & v 
) const
+
+ +

Reprojects a 3D point in the camera frame (/camera_link) into 2D image coordinates (rounded to int).

+

This version of reproject() returns integer pixel indices, computed from the 3D position.

+
Parameters
+ + + + + + +
xX coordinate in camera space.
yY coordinate in camera space.
zZ coordinate in camera space (must be non-zero).
[out]uOutput horizontal image coordinate (integer pixel).
[out]vOutput vertical image coordinate (integer pixel).
+
+
+
Precondition
z != 0
+
See also
project(), reproject(float&, float&)
+ +
+
+ +

◆ inFrame()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::CameraModel::inFrame (int u,
int v 
) const
+
+ +

Checks if a given pixel coordinate lies within the image bounds.

+
Parameters
+ + + +
uHorizontal image coordinate (in pixels).
vVertical image coordinate (in pixels).
+
+
+
Returns
true if the pixel is within the image dimensions, false otherwise.
+
Note
Inclusive lower bound, exclusive upper bound: [0, width), [0, height)
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye-members.html new file mode 100644 index 00000000..b6227f9b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye-members.html @@ -0,0 +1,123 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraMyntEye Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraMyntEye, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraMyntEye)rtabmap::CameraMyntEyestatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraMyntEye(const std::string &device="", bool apiRectification=false, bool apiDepth=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraMyntEye)rtabmap::CameraMyntEye
captureImage(SensorCaptureInfo *info=0)rtabmap::CameraMyntEyeprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraMyntEyevirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraMyntEyevirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraMyntEye)rtabmap::CameraMyntEyevirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::CameraMyntEyeinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
publishInterIMU(bool enabled) (defined in rtabmap::CameraMyntEye)rtabmap::CameraMyntEye
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setAutoExposure() (defined in rtabmap::CameraMyntEye)rtabmap::CameraMyntEye
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setIrControl(int value) (defined in rtabmap::CameraMyntEye)rtabmap::CameraMyntEye
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setManualExposure(int gain=24, int brightness=120, int constrast=116) (defined in rtabmap::CameraMyntEye)rtabmap::CameraMyntEye
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraMyntEye() (defined in rtabmap::CameraMyntEye)rtabmap::CameraMyntEyevirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye.html new file mode 100644 index 00000000..eed1eab4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye.html @@ -0,0 +1,399 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraMyntEye Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

#include <CameraMyntEye.h>

+
+Inheritance diagram for rtabmap::CameraMyntEye:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraMyntEye:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraMyntEye (const std::string &device="", bool apiRectification=false, bool apiDepth=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
+void publishInterIMU (bool enabled)
 
+void setAutoExposure ()
 
+void setManualExposure (int gain=24, int brightness=120, int constrast=116)
 
+void setIrControl (int value)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+

Class CameraMyntEye

+ +

Definition at line 47 of file CameraMyntEye.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraMyntEye::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraMyntEye::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraMyntEye::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ odomProvided()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraMyntEye::odomProvided () const
+
+inlinevirtual
+
+ +

Checks if the sensor provides odometry poses.

+

Some sensors (e.g., visual-inertial cameras) can provide pose estimates directly. This method indicates whether the sensor supports pose queries.

+
Returns
True if the sensor provides odometry poses, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
getPose()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +

Definition at line 59 of file CameraMyntEye.h.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraMyntEye::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+

returned rgb and depth images should be already rectified if calibration was loaded

+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.map new file mode 100644 index 00000000..4becbad9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.md5 new file mode 100644 index 00000000..5244fce2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.md5 @@ -0,0 +1 @@ +b7b367399ec947a71da159d485d5f145 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa04ceae9addc9f7cc887a790816de790d3325a GIT binary patch literal 6983 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__inherit__graph.md5 new file mode 100644 index 00000000..5244fce2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__inherit__graph.md5 @@ -0,0 +1 @@ +b7b367399ec947a71da159d485d5f145 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraMyntEye__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa04ceae9addc9f7cc887a790816de790d3325a GIT binary patch literal 6983 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraOpenNI2 Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraOpenNI2, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2static
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraOpenNI2(const std::string &deviceId="", Type type=kTypeColorDepth, float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2protectedvirtual
exposureGainAvailable() (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2static
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraOpenNI2virtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraOpenNI2virtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2virtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
kTypeColorDepth enum value (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
kTypeIR enum value (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
kTypeIRDepth enum value (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setAutoExposure(bool enabled) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
setAutoWhiteBalance(bool enabled) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
setDepthDecimation(int decimation) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
setExposure(int value) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setGain(int value) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setIRDepthShift(int horizontal, int vertical) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setMirroring(bool enabled) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
setOpenNI2StampsAndIDsUsed(bool used) (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
Type enum name (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraOpenNI2() (defined in rtabmap::CameraOpenNI2)rtabmap::CameraOpenNI2virtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2.html new file mode 100644 index 00000000..0161dcc3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2.html @@ -0,0 +1,401 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraOpenNI2 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraOpenNI2:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraOpenNI2:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + +

+Public Types

enum  Type { kTypeColorDepth +, kTypeIRDepth +, kTypeIR + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraOpenNI2 (const std::string &deviceId="", Type type=kTypeColorDepth, float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
+bool setAutoWhiteBalance (bool enabled)
 
+bool setAutoExposure (bool enabled)
 
+bool setExposure (int value)
 
+bool setGain (int value)
 
+bool setMirroring (bool enabled)
 
+void setOpenNI2StampsAndIDsUsed (bool used)
 
+void setIRDepthShift (int horizontal, int vertical)
 
+void setDepthDecimation (int decimation)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + + + +

+Static Public Member Functions

+static bool available ()
 
+static bool exposureGainAvailable ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 42 of file CameraOpenNI2.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::CameraOpenNI2::Type
+
+ +

Definition at line 49 of file CameraOpenNI2.h.

+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraOpenNI2::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraOpenNI2::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraOpenNI2::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraOpenNI2::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.map new file mode 100644 index 00000000..89a2bc6d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.md5 new file mode 100644 index 00000000..5294d83f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.md5 @@ -0,0 +1 @@ +e8553fb070aea365ba9c0ee7a72cc282 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..93ca54ada8d5e6f065bc1cc64eebe1d63437fe15 GIT binary patch literal 6987 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 F{68lqnT7xW literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.map new file mode 100644 index 00000000..89a2bc6d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.md5 new file mode 100644 index 00000000..5294d83f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.md5 @@ -0,0 +1 @@ +e8553fb070aea365ba9c0ee7a72cc282 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNI2__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..93ca54ada8d5e6f065bc1cc64eebe1d63437fe15 GIT binary patch literal 6987 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 F{68lqnT7xW literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV-members.html new file mode 100644 index 00000000..de913844 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV-members.html @@ -0,0 +1,119 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraOpenNICV Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraOpenNICV, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraOpenNICV)rtabmap::CameraOpenNICVstatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraOpenNICV(bool asus=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraOpenNICV)rtabmap::CameraOpenNICV
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraOpenNICV)rtabmap::CameraOpenNICVprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraOpenNICVinlinevirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraOpenNICVvirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraOpenNICV)rtabmap::CameraOpenNICVvirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraOpenNICV() (defined in rtabmap::CameraOpenNICV)rtabmap::CameraOpenNICVvirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV.html new file mode 100644 index 00000000..e565944c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV.html @@ -0,0 +1,350 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraOpenNICV Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraOpenNICV:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraOpenNICV:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraOpenNICV (bool asus=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 36 of file CameraOpenNICV.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraOpenNICV::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraOpenNICV::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraOpenNICV::getSerial () const
+
+inlinevirtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +

Definition at line 51 of file CameraOpenNICV.h.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraOpenNICV::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.map new file mode 100644 index 00000000..a9bf8758 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.md5 new file mode 100644 index 00000000..7e1aab76 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.md5 @@ -0,0 +1 @@ +a5112f374e6e4cbaa9bb001e5bb7ec60 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..52fd44b3214ecc26463ee43c58d0d2a8b7150f35 GIT binary patch literal 7128 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 AqyPW_ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.map new file mode 100644 index 00000000..a9bf8758 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.md5 new file mode 100644 index 00000000..7e1aab76 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.md5 @@ -0,0 +1 @@ +a5112f374e6e4cbaa9bb001e5bb7ec60 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenNICV__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..52fd44b3214ecc26463ee43c58d0d2a8b7150f35 GIT binary patch literal 7128 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 AqyPW_ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni-members.html new file mode 100644 index 00000000..1e37c0ab --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni-members.html @@ -0,0 +1,119 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraOpenni Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraOpenni, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraOpenni)rtabmap::CameraOpennistatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraOpenni(const std::string &deviceId="", float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraOpenni)rtabmap::CameraOpenni
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraOpenni)rtabmap::CameraOpenniprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraOpennivirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraOpennivirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraOpenni)rtabmap::CameraOpennivirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraOpenni() (defined in rtabmap::CameraOpenni)rtabmap::CameraOpennivirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni.html new file mode 100644 index 00000000..02391887 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni.html @@ -0,0 +1,354 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraOpenni Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

OpenNI driver for cameras like Kinect for Xbox 360. + More...

+ +

#include <CameraOpenni.h>

+
+Inheritance diagram for rtabmap::CameraOpenni:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraOpenni:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraOpenni (const std::string &deviceId="", float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+

OpenNI driver for cameras like Kinect for Xbox 360.

+ +

Definition at line 57 of file CameraOpenni.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraOpenni::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraOpenni::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraOpenni::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraOpenni::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.map new file mode 100644 index 00000000..9284f1ea --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.md5 new file mode 100644 index 00000000..3058cecd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.md5 @@ -0,0 +1 @@ +7a98c5eabb6fb0be187a39dc15be189d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d027be5c26c3a81cd96e6880e373946a43d974ec GIT binary patch literal 6707 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__inherit__graph.md5 new file mode 100644 index 00000000..3058cecd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__inherit__graph.md5 @@ -0,0 +1 @@ +7a98c5eabb6fb0be187a39dc15be189d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOpenni__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d027be5c26c3a81cd96e6880e373946a43d974ec GIT binary patch literal 6707 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraOrbbecSDK Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraOrbbecSDK, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraOrbbecSDK)rtabmap::CameraOrbbecSDKstatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraOrbbecSDK(std::string deviceId="", unsigned int colorWidth=800, unsigned int colorHeight=600, unsigned int depthWidth=800, unsigned int depthHeight=600, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraOrbbecSDK)rtabmap::CameraOrbbecSDK
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraOrbbecSDK)rtabmap::CameraOrbbecSDKprotectedvirtual
close() (defined in rtabmap::CameraOrbbecSDK)rtabmap::CameraOrbbecSDK
enableColorRectification(bool enabled) (defined in rtabmap::CameraOrbbecSDK)rtabmap::CameraOrbbecSDK
enableDepthMM(bool enabled) (defined in rtabmap::CameraOrbbecSDK)rtabmap::CameraOrbbecSDK
enableImu(bool enabled) (defined in rtabmap::CameraOrbbecSDK)rtabmap::CameraOrbbecSDK
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraOrbbecSDKvirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraOrbbecSDKvirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraOrbbecSDK)rtabmap::CameraOrbbecSDKvirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraOrbbecSDK() (defined in rtabmap::CameraOrbbecSDK)rtabmap::CameraOrbbecSDKvirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK.html new file mode 100644 index 00000000..fea9660e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK.html @@ -0,0 +1,360 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraOrbbecSDK Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraOrbbecSDK:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraOrbbecSDK:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraOrbbecSDK (std::string deviceId="", unsigned int colorWidth=800, unsigned int colorHeight=600, unsigned int depthWidth=800, unsigned int depthHeight=600, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
+void close ()
 
+void enableColorRectification (bool enabled)
 
+void enableImu (bool enabled)
 
+void enableDepthMM (bool enabled)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 45 of file CameraOrbbecSDK.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraOrbbecSDK::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraOrbbecSDK::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraOrbbecSDK::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraOrbbecSDK::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.map new file mode 100644 index 00000000..49acb9a7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.md5 new file mode 100644 index 00000000..5c4c7cd7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.md5 @@ -0,0 +1 @@ +188457db7af831efd4da78024a94b1ea \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..afe6a9d7c363728afbd54a70dfecce046d565cb8 GIT binary patch literal 7440 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__inherit__graph.md5 new file mode 100644 index 00000000..5c4c7cd7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__inherit__graph.md5 @@ -0,0 +1 @@ +188457db7af831efd4da78024a94b1ea \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraOrbbecSDK__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..afe6a9d7c363728afbd54a70dfecce046d565cb8 GIT binary patch literal 7440 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraRGBDImages Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraRGBDImages, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_calibrationFolder (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotected
_multiCameraCalib (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotected
_multiCameraCount (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotected
available() (defined in rtabmap::CameraRGBDImages)rtabmap::CameraRGBDImagesstatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraImages() (defined in rtabmap::CameraImages)rtabmap::CameraImages
CameraImages(const std::string &path, float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraImages)rtabmap::CameraImages
cameraModel() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
CameraRGBDImages(const std::string &pathRGBImages, const std::string &pathDepthImages, float depthScaleFactor=1.0f, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraRGBDImages)rtabmap::CameraRGBDImages
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraRGBDImages)rtabmap::CameraRGBDImagesprotectedvirtual
filenames() const (defined in rtabmap::CameraImages)rtabmap::CameraImages
getBayerMode() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getMaxPoseTimeDiff() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPath() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraImagesvirtual
imagesCount() const (defined in rtabmap::CameraImages)rtabmap::CameraImages
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraRGBDImagesvirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesvirtual
isConfigForEachFrame() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
isImagesRectified() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
lastImageFileName() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinlineprotected
odomProvided() constrtabmap::CameraImagesinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setBayerMode(int mode) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setConfigForEachFrame(bool value) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setDepth(bool isDepth, float depthScaleFactor=1.0f) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setDepthFromScan(bool enabled, int fillHoles=1, bool fillHolesFromBorder=false) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setDirRefreshed(bool enabled) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setGroundTruthPath(const std::string &filePath, int format=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setImagesRectified(bool enabled) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setMaxFrames(int value) (defined in rtabmap::CameraRGBDImages)rtabmap::CameraRGBDImagesinlinevirtual
setMaxPoseTimeDiff(double diff) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setMultiCameraCalibration(bool enabled) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setOdometryPath(const std::string &filePath, int format=0) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setPath(const std::string &dir) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setScanPath(const std::string &dir, int maxScanPts=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setStartIndex(int index) (defined in rtabmap::CameraRGBDImages)rtabmap::CameraRGBDImagesinlinevirtual
setTimestamps(bool fileNamesAreStamps, const std::string &filePath="", bool syncImageRateWithStamps=true) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraImages() (defined in rtabmap::CameraImages)rtabmap::CameraImagesvirtual
~CameraRGBDImages() (defined in rtabmap::CameraRGBDImages)rtabmap::CameraRGBDImagesvirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages.html new file mode 100644 index 00000000..e2aa227f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages.html @@ -0,0 +1,419 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraRGBDImages Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraRGBDImages:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraRGBDImages:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraRGBDImages (const std::string &pathRGBImages, const std::string &pathDepthImages, float depthScaleFactor=1.0f, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual void setStartIndex (int index)
 
virtual void setMaxFrames (int value)
 
- Public Member Functions inherited from rtabmap::CameraImages
+ CameraImages (const std::string &path, float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
std::string getPath () const
 
+unsigned int imagesCount () const
 
+std::vector< std::string > filenames () const
 
bool isImagesRectified () const
 
int getBayerMode () const
 
const CameraModel & cameraModel () const
 
void setPath (const std::string &dir)
 
void setDirRefreshed (bool enabled)
 
void setImagesRectified (bool enabled)
 
void setBayerMode (int mode)
 
void setTimestamps (bool fileNamesAreStamps, const std::string &filePath="", bool syncImageRateWithStamps=true)
 
void setConfigForEachFrame (bool value)
 
bool isConfigForEachFrame () const
 
void setMultiCameraCalibration (bool enabled)
 
void setScanPath (const std::string &dir, int maxScanPts=0, const Transform &localTransform=Transform::getIdentity())
 
void setDepthFromScan (bool enabled, int fillHoles=1, bool fillHolesFromBorder=false)
 
void setOdometryPath (const std::string &filePath, int format=0)
 
void setGroundTruthPath (const std::string &filePath, int format=0, const Transform &localTransform=Transform::getIdentity())
 
void setMaxPoseTimeDiff (double diff)
 
double getMaxPoseTimeDiff () const
 
void setDepth (bool isDepth, float depthScaleFactor=1.0f)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::CameraImages
const std::string & lastImageFileName () const
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from rtabmap::CameraImages
std::string _calibrationFolder
 
bool _multiCameraCalib
 
int _multiCameraCount
 
+

Detailed Description

+
+

Definition at line 35 of file CameraRGBDImages.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraRGBDImages::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Reimplemented from rtabmap::CameraImages.

+ +
+
+ +

◆ setStartIndex()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::CameraRGBDImages::setStartIndex (int index)
+
+inlinevirtual
+
+ +

Reimplemented from rtabmap::CameraImages.

+ +

Definition at line 52 of file CameraRGBDImages.h.

+ +
+
+ +

◆ setMaxFrames()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::CameraRGBDImages::setMaxFrames (int value)
+
+inlinevirtual
+
+ +

Reimplemented from rtabmap::CameraImages.

+ +

Definition at line 53 of file CameraRGBDImages.h.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraRGBDImages::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Reimplemented from rtabmap::CameraImages.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.map new file mode 100644 index 00000000..fcfc0c8d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.md5 new file mode 100644 index 00000000..2c4e200d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.md5 @@ -0,0 +1 @@ +25faafc59cc93987328608039022aea4 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a71e4461b62988c6a83573b7a2cf715a7f79f3d1 GIT binary patch literal 10041 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.map new file mode 100644 index 00000000..fcfc0c8d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.md5 new file mode 100644 index 00000000..2c4e200d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.md5 @@ -0,0 +1 @@ +25faafc59cc93987328608039022aea4 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRGBDImages__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a71e4461b62988c6a83573b7a2cf715a7f79f3d1 GIT binary patch literal 10041 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense-members.html new file mode 100644 index 00000000..7f6b2cd1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense-members.html @@ -0,0 +1,125 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraRealSense Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraRealSense, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSensestatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraRealSense(int deviceId=0, int presetRGB=0, int presetDepth=0, bool computeOdometry=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSense
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSenseprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraRealSensevirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraRealSensevirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSensevirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
kColor enum value (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSense
kFishEye enum value (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSense
kInfrared enum value (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSense
odomProvided() constrtabmap::CameraRealSensevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
RGBSource enum name (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSense
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setDepthScaledToRGBSize(bool enabled) (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSense
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setRGBSource(RGBSource source) (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSense
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraRealSense() (defined in rtabmap::CameraRealSense)rtabmap::CameraRealSensevirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense.html new file mode 100644 index 00000000..1ed7a00f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense.html @@ -0,0 +1,413 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraRealSense Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraRealSense:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraRealSense:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + +

+Public Types

enum  RGBSource { kColor +, kInfrared +, kFishEye + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraRealSense (int deviceId=0, int presetRGB=0, int presetDepth=0, bool computeOdometry=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void setDepthScaledToRGBSize (bool enabled)
 
+void setRGBSource (RGBSource source)
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 49 of file CameraRealSense.h.

+

Member Enumeration Documentation

+ +

◆ RGBSource

+ +
+
+ + + + +
enum rtabmap::CameraRealSense::RGBSource
+
+ +

Definition at line 54 of file CameraRealSense.h.

+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraRealSense::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraRealSense::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraRealSense::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ odomProvided()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraRealSense::odomProvided () const
+
+virtual
+
+ +

Checks if the sensor provides odometry poses.

+

Some sensors (e.g., visual-inertial cameras) can provide pose estimates directly. This method indicates whether the sensor supports pose queries.

+
Returns
True if the sensor provides odometry poses, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
getPose()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraRealSense::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2-members.html new file mode 100644 index 00000000..93d0cf31 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2-members.html @@ -0,0 +1,128 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraRealSense2 Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraRealSense2, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2static
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraRealSense2(const std::string &deviceId="", float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2protectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::CameraRealSense2virtual
getSerial() constrtabmap::CameraRealSense2virtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraRealSense2virtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2virtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::CameraRealSense2virtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setDepthResolution(int width, int height, int fps=30) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2
setDualMode(bool enabled, const Transform &extrinsics)rtabmap::CameraRealSense2
setEmitterEnabled(bool enabled) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setGlobalTimeSync(bool enabled) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setImagesRectified(bool enabled) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setIRFormat(bool enabled, bool useDepthInsteadOfRightImage) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2
setJsonConfig(const std::string &json) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setOdomProvided(bool enabled, bool imageStreamsDisabled=false, bool onlyLeftStream=false) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2
setResolution(int width, int height, int fps=30) (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraRealSense2() (defined in rtabmap::CameraRealSense2)rtabmap::CameraRealSense2virtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2.html new file mode 100644 index 00000000..672ef193 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2.html @@ -0,0 +1,507 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraRealSense2 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraRealSense2:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraRealSense2:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraRealSense2 (const std::string &deviceId="", float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
+void setEmitterEnabled (bool enabled)
 
+void setIRFormat (bool enabled, bool useDepthInsteadOfRightImage)
 
+void setResolution (int width, int height, int fps=30)
 
+void setDepthResolution (int width, int height, int fps=30)
 
+void setGlobalTimeSync (bool enabled)
 
void setDualMode (bool enabled, const Transform &extrinsics)
 
+void setJsonConfig (const std::string &json)
 
+void setImagesRectified (bool enabled)
 
+void setOdomProvided (bool enabled, bool imageStreamsDisabled=false, bool onlyLeftStream=false)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 54 of file CameraRealSense2.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraRealSense2::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraRealSense2::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraRealSense2::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ odomProvided()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraRealSense2::odomProvided () const
+
+virtual
+
+ +

Checks if the sensor provides odometry poses.

+

Some sensors (e.g., visual-inertial cameras) can provide pose estimates directly. This method indicates whether the sensor supports pose queries.

+
Returns
True if the sensor provides odometry poses, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
getPose()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +
+
+ +

◆ getPose()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraRealSense2::getPose (double stamp,
Transform & pose,
cv::Mat & covariance,
double maxWaitTime = 0.06 
)
+
+virtual
+
+ +

Gets the sensor's pose estimate at a specific timestamp.

+

Queries the sensor for its pose estimate at the given timestamp. This is typically used for sensors that provide visual-inertial odometry or other pose estimation capabilities.

+
Parameters
+ + + + + +
stampTimestamp in seconds for which to query the pose
[out]poseOutput transform representing the sensor pose
[out]covarianceOutput covariance matrix (6x6) representing twist uncertainty
maxWaitTimeMaximum time in seconds to wait for pose data (default: 0.06)
+
+
+
Returns
True if pose was successfully retrieved, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
odomProvided()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +
+
+ +

◆ setDualMode()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::CameraRealSense2::setDualMode (bool enabled,
const Transform & extrinsics 
)
+
+

Dual mode (D400+T265 or L500+T265)

Parameters
+ + + +
enabledenable dual mode
extrinsicsthe extrinsics between T265 pose frame (middle of the camera) to D400/L500 main camera (without optical rotation).
+
+
+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraRealSense2::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.map new file mode 100644 index 00000000..d623cd9f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.md5 new file mode 100644 index 00000000..5a276bbb --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.md5 @@ -0,0 +1 @@ +c20a513b649ad8e6da74c334238afd3f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3bc904cf03f97fd24ff3ddf6bdf40f1a28dc43d1 GIT binary patch literal 7207 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 W*;gthYT)D#p{$@TUvk$h=sy4k((_mV literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.map new file mode 100644 index 00000000..d623cd9f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.md5 new file mode 100644 index 00000000..5a276bbb --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.md5 @@ -0,0 +1 @@ +c20a513b649ad8e6da74c334238afd3f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense2__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3bc904cf03f97fd24ff3ddf6bdf40f1a28dc43d1 GIT binary patch literal 7207 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 W*;gthYT)D#p{$@TUvk$h=sy4k((_mV literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.map new file mode 100644 index 00000000..9e3eef76 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.md5 new file mode 100644 index 00000000..ed406cd3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.md5 @@ -0,0 +1 @@ +689120af1c6843380f53b419e260f61c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4866895025a861a4079a0de502d6d4da2d8d8732 GIT binary patch literal 7047 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__inherit__graph.md5 new file mode 100644 index 00000000..ed406cd3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__inherit__graph.md5 @@ -0,0 +1 @@ +689120af1c6843380f53b419e260f61c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraRealSense__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4866895025a861a4079a0de502d6d4da2d8d8732 GIT binary patch literal 7047 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + + +
+
rtabmap::CameraSeerSense Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraSeerSense, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraSeerSense)rtabmap::CameraSeerSensestatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraSeerSense(bool computeOdometry=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraSeerSense)rtabmap::CameraSeerSense
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraSeerSense)rtabmap::CameraSeerSenseprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.0)rtabmap::CameraSeerSensevirtual
getSerial() constrtabmap::CameraSeerSensevirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraSeerSensevirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraSeerSense)rtabmap::CameraSeerSensevirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::CameraSeerSensevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraSeerSense() (defined in rtabmap::CameraSeerSense)rtabmap::CameraSeerSensevirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense.html new file mode 100644 index 00000000..237b6298 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense.html @@ -0,0 +1,446 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraSeerSense Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraSeerSense:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraSeerSense:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraSeerSense (bool computeOdometry=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.0)
 Gets the sensor's pose estimate at a specific timestamp.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 14 of file CameraSeerSense.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraSeerSense::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraSeerSense::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraSeerSense::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ odomProvided()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraSeerSense::odomProvided () const
+
+virtual
+
+ +

Checks if the sensor provides odometry poses.

+

Some sensors (e.g., visual-inertial cameras) can provide pose estimates directly. This method indicates whether the sensor supports pose queries.

+
Returns
True if the sensor provides odometry poses, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
getPose()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +
+
+ +

◆ getPose()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraSeerSense::getPose (double stamp,
Transform & pose,
cv::Mat & covariance,
double maxWaitTime = 0.0 
)
+
+virtual
+
+ +

Gets the sensor's pose estimate at a specific timestamp.

+

Queries the sensor for its pose estimate at the given timestamp. This is typically used for sensors that provide visual-inertial odometry or other pose estimation capabilities.

+
Parameters
+ + + + + +
stampTimestamp in seconds for which to query the pose
[out]poseOutput transform representing the sensor pose
[out]covarianceOutput covariance matrix (6x6) representing twist uncertainty
maxWaitTimeMaximum time in seconds to wait for pose data (default: 0.06)
+
+
+
Returns
True if pose was successfully retrieved, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
odomProvided()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraSeerSense::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.map new file mode 100644 index 00000000..cd7164e6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.md5 new file mode 100644 index 00000000..c66e32d4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.md5 @@ -0,0 +1 @@ +e8ef7bbe035968ed9a408ff887d935d0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..aa39ccd438f170b168b251335b70d4e3ef5d4ac7 GIT binary patch literal 6899 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.map new file mode 100644 index 00000000..cd7164e6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.md5 new file mode 100644 index 00000000..c66e32d4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.md5 @@ -0,0 +1 @@ +e8ef7bbe035968ed9a408ff887d935d0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraSeerSense__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..aa39ccd438f170b168b251335b70d4e3ef5d4ac7 GIT binary patch literal 6899 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394-members.html new file mode 100644 index 00000000..711ed171 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394-members.html @@ -0,0 +1,119 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraStereoDC1394 Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraStereoDC1394, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraStereoDC1394)rtabmap::CameraStereoDC1394static
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraStereoDC1394(float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoDC1394)rtabmap::CameraStereoDC1394
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraStereoDC1394)rtabmap::CameraStereoDC1394protectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraStereoDC1394virtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraStereoDC1394virtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraStereoDC1394)rtabmap::CameraStereoDC1394virtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraStereoDC1394() (defined in rtabmap::CameraStereoDC1394)rtabmap::CameraStereoDC1394virtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394.html new file mode 100644 index 00000000..a6be618e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394.html @@ -0,0 +1,348 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraStereoDC1394 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraStereoDC1394:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraStereoDC1394:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraStereoDC1394 (float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 39 of file CameraStereoDC1394.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraStereoDC1394::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraStereoDC1394::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraStereoDC1394::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraStereoDC1394::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.map new file mode 100644 index 00000000..be68736e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.md5 new file mode 100644 index 00000000..85aff204 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.md5 @@ -0,0 +1 @@ +d678a6552f4f26891292977ebfe6c848 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc2e491221cef48b0ae3d460f419388eede80e1 GIT binary patch literal 7682 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.map new file mode 100644 index 00000000..be68736e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.md5 new file mode 100644 index 00000000..85aff204 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.md5 @@ -0,0 +1 @@ +d678a6552f4f26891292977ebfe6c848 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoDC1394__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc2e491221cef48b0ae3d460f419388eede80e1 GIT binary patch literal 7682 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2-members.html new file mode 100644 index 00000000..d9050e83 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2-members.html @@ -0,0 +1,119 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraStereoFlyCapture2 Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraStereoFlyCapture2, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraStereoFlyCapture2)rtabmap::CameraStereoFlyCapture2static
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraStereoFlyCapture2(float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoFlyCapture2)rtabmap::CameraStereoFlyCapture2
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraStereoFlyCapture2)rtabmap::CameraStereoFlyCapture2protectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraStereoFlyCapture2virtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraStereoFlyCapture2virtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraStereoFlyCapture2)rtabmap::CameraStereoFlyCapture2virtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraStereoFlyCapture2() (defined in rtabmap::CameraStereoFlyCapture2)rtabmap::CameraStereoFlyCapture2virtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2.html new file mode 100644 index 00000000..93a1a95c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2.html @@ -0,0 +1,348 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraStereoFlyCapture2 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::CameraStereoFlyCapture2 Class Reference
+
+
+
+Inheritance diagram for rtabmap::CameraStereoFlyCapture2:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraStereoFlyCapture2:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraStereoFlyCapture2 (float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 41 of file CameraStereoFlyCapture2.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraStereoFlyCapture2::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraStereoFlyCapture2::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraStereoFlyCapture2::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraStereoFlyCapture2::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.map new file mode 100644 index 00000000..8e782036 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.md5 new file mode 100644 index 00000000..030e0fec --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.md5 @@ -0,0 +1 @@ +c9cf8af61497254c9957558f8ede86a1 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..faa492318501aaa966d2e95230854095eb23a072 GIT binary patch literal 8485 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__inherit__graph.md5 new file mode 100644 index 00000000..030e0fec --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__inherit__graph.md5 @@ -0,0 +1 @@ +c9cf8af61497254c9957558f8ede86a1 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoFlyCapture2__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..faa492318501aaa966d2e95230854095eb23a072 GIT binary patch literal 8485 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraStereoImages Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraStereoImages, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_calibrationFolder (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotected
_multiCameraCalib (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotected
_multiCameraCount (defined in rtabmap::CameraImages)rtabmap::CameraImagesprotected
available() (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImagesstatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraImages() (defined in rtabmap::CameraImages)rtabmap::CameraImages
CameraImages(const std::string &path, float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraImages)rtabmap::CameraImages
cameraModel() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
CameraStereoImages(const std::string &pathLeftImages, const std::string &pathRightImages, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImages
CameraStereoImages(const std::string &pathLeftRightImages, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImages
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImagesprotectedvirtual
filenames() const (defined in rtabmap::CameraImages)rtabmap::CameraImages
getBayerMode() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getMaxPoseTimeDiff() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPath() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraStereoImagesvirtual
imagesCount() const (defined in rtabmap::CameraImages)rtabmap::CameraImages
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraStereoImagesvirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImagesvirtual
isConfigForEachFrame() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
isImagesRectified() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
lastImageFileName() const (defined in rtabmap::CameraImages)rtabmap::CameraImagesinlineprotected
odomProvided() constrtabmap::CameraImagesinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setBayerMode(int mode) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setConfigForEachFrame(bool value) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setDepth(bool isDepth, float depthScaleFactor=1.0f) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setDepthFromScan(bool enabled, int fillHoles=1, bool fillHolesFromBorder=false) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setDirRefreshed(bool enabled) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setGroundTruthPath(const std::string &filePath, int format=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setImagesRectified(bool enabled) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setMaxFrames(int value) (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImagesinlinevirtual
setMaxPoseTimeDiff(double diff) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setMultiCameraCalibration(bool enabled) (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImagesinline
setOdometryPath(const std::string &filePath, int format=0) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setPath(const std::string &dir) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setRightGrayScale(bool enabled=true) (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImagesinline
setScanPath(const std::string &dir, int maxScanPts=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
setStartIndex(int index) (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImagesinlinevirtual
setTimestamps(bool fileNamesAreStamps, const std::string &filePath="", bool syncImageRateWithStamps=true) (defined in rtabmap::CameraImages)rtabmap::CameraImagesinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraImages() (defined in rtabmap::CameraImages)rtabmap::CameraImagesvirtual
~CameraStereoImages() (defined in rtabmap::CameraStereoImages)rtabmap::CameraStereoImagesvirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages.html new file mode 100644 index 00000000..c1f20ac6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages.html @@ -0,0 +1,540 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraStereoImages Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraStereoImages:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraStereoImages:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraStereoImages (const std::string &pathLeftImages, const std::string &pathRightImages, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
+ CameraStereoImages (const std::string &pathLeftRightImages, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
void setRightGrayScale (bool enabled=true)
 
void setMultiCameraCalibration (bool enabled)
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
virtual void setStartIndex (int index)
 
virtual void setMaxFrames (int value)
 
- Public Member Functions inherited from rtabmap::CameraImages
+ CameraImages (const std::string &path, float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
std::string getPath () const
 
+unsigned int imagesCount () const
 
+std::vector< std::string > filenames () const
 
bool isImagesRectified () const
 
int getBayerMode () const
 
const CameraModel & cameraModel () const
 
void setPath (const std::string &dir)
 
void setDirRefreshed (bool enabled)
 
void setImagesRectified (bool enabled)
 
void setBayerMode (int mode)
 
void setTimestamps (bool fileNamesAreStamps, const std::string &filePath="", bool syncImageRateWithStamps=true)
 
void setConfigForEachFrame (bool value)
 
bool isConfigForEachFrame () const
 
void setMultiCameraCalibration (bool enabled)
 
void setScanPath (const std::string &dir, int maxScanPts=0, const Transform &localTransform=Transform::getIdentity())
 
void setDepthFromScan (bool enabled, int fillHoles=1, bool fillHolesFromBorder=false)
 
void setOdometryPath (const std::string &filePath, int format=0)
 
void setGroundTruthPath (const std::string &filePath, int format=0, const Transform &localTransform=Transform::getIdentity())
 
void setMaxPoseTimeDiff (double diff)
 
double getMaxPoseTimeDiff () const
 
void setDepth (bool isDepth, float depthScaleFactor=1.0f)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::CameraImages
const std::string & lastImageFileName () const
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from rtabmap::CameraImages
std::string _calibrationFolder
 
bool _multiCameraCalib
 
int _multiCameraCount
 
+

Detailed Description

+
+

Definition at line 39 of file CameraStereoImages.h.

+

Member Function Documentation

+ +

◆ setRightGrayScale()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraStereoImages::setRightGrayScale (bool enabled = true)
+
+inline
+
+ +

Definition at line 59 of file CameraStereoImages.h.

+ +
+
+ +

◆ setMultiCameraCalibration()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraStereoImages::setMultiCameraCalibration (bool enabled)
+
+inline
+
+ +

Definition at line 77 of file CameraStereoImages.h.

+ +
+
+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraStereoImages::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Reimplemented from rtabmap::CameraImages.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraStereoImages::isCalibrated () const
+
+virtual
+
+ +

Reimplemented from rtabmap::CameraImages.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraStereoImages::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Reimplemented from rtabmap::CameraImages.

+ +
+
+ +

◆ setStartIndex()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::CameraStereoImages::setStartIndex (int index)
+
+inlinevirtual
+
+ +

Reimplemented from rtabmap::CameraImages.

+ +

Definition at line 83 of file CameraStereoImages.h.

+ +
+
+ +

◆ setMaxFrames()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::CameraStereoImages::setMaxFrames (int value)
+
+inlinevirtual
+
+ +

Reimplemented from rtabmap::CameraImages.

+ +

Definition at line 84 of file CameraStereoImages.h.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraStereoImages::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Reimplemented from rtabmap::CameraImages.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.map new file mode 100644 index 00000000..5bea9c78 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.md5 new file mode 100644 index 00000000..204ec62f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.md5 @@ -0,0 +1 @@ +4bbc0f1e8d6c277bcb98d0946cc5c86f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4b68b61f320464983035a752934bb56e473059c6 GIT binary patch literal 9940 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 + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__inherit__graph.md5 new file mode 100644 index 00000000..204ec62f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__inherit__graph.md5 @@ -0,0 +1 @@ +4bbc0f1e8d6c277bcb98d0946cc5c86f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoImages__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4b68b61f320464983035a752934bb56e473059c6 GIT binary patch literal 9940 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraStereoTara Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraStereoTara, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraStereoTara)rtabmap::CameraStereoTarastatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraStereoTara(int device, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoTara)rtabmap::CameraStereoTara
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraStereoTara)rtabmap::CameraStereoTaraprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraStereoTaravirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraStereoTaravirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraStereoTara)rtabmap::CameraStereoTaravirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraStereoTara() (defined in rtabmap::CameraStereoTara)rtabmap::CameraStereoTaravirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara.html new file mode 100644 index 00000000..1ab95133 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara.html @@ -0,0 +1,348 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraStereoTara Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraStereoTara:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraStereoTara:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraStereoTara (int device, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 43 of file CameraStereoTara.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraStereoTara::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraStereoTara::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraStereoTara::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraStereoTara::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.map new file mode 100644 index 00000000..4aaaa8e6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.md5 new file mode 100644 index 00000000..601b8f8c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.md5 @@ -0,0 +1 @@ +3f058003e9eba970f9eeea6a0f4e5831 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8d998d45fbb5449f5b69551833aed1841348c313 GIT binary patch literal 6967 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 OAWCxTvW3!SLH_|qMPBIu literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.map new file mode 100644 index 00000000..4aaaa8e6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.md5 new file mode 100644 index 00000000..601b8f8c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.md5 @@ -0,0 +1 @@ +3f058003e9eba970f9eeea6a0f4e5831 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoTara__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8d998d45fbb5449f5b69551833aed1841348c313 GIT binary patch literal 6967 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 OAWCxTvW3!SLH_|qMPBIu literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo-members.html new file mode 100644 index 00000000..764bcbac --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo-members.html @@ -0,0 +1,125 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +

+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraStereoVideo Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraStereoVideo, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideostatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraStereoVideo(const std::string &pathSideBySide, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideo
CameraStereoVideo(const std::string &pathLeft, const std::string &pathRight, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideo
CameraStereoVideo(int device, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideo
CameraStereoVideo(int deviceLeft, int deviceRight, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideo
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideoprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraStereoVideovirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraStereoVideovirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideovirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFOURCC(const std::string &fourcc) (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideoinline
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setResolution(int width, int height) (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideoinline
setRightGrayScale(bool enabled=true) (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideoinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraStereoVideo() (defined in rtabmap::CameraStereoVideo)rtabmap::CameraStereoVideovirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo.html new file mode 100644 index 00000000..10e283f2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo.html @@ -0,0 +1,457 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraStereoVideo Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraStereoVideo:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraStereoVideo:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraStereoVideo (const std::string &pathSideBySide, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
+ CameraStereoVideo (const std::string &pathLeft, const std::string &pathRight, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
+ CameraStereoVideo (int device, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
+ CameraStereoVideo (int deviceLeft, int deviceRight, bool rectifyImages=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
void setResolution (int width, int height)
 
void setFOURCC (const std::string &fourcc)
 
void setRightGrayScale (bool enabled=true)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 36 of file CameraStereoVideo.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraStereoVideo::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraStereoVideo::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraStereoVideo::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ setResolution()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void rtabmap::CameraStereoVideo::setResolution (int width,
int height 
)
+
+inline
+
+ +

Definition at line 71 of file CameraStereoVideo.h.

+ +
+
+ +

◆ setFOURCC()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraStereoVideo::setFOURCC (const std::string & fourcc)
+
+inline
+
+ +

Definition at line 72 of file CameraStereoVideo.h.

+ +
+
+ +

◆ setRightGrayScale()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraStereoVideo::setRightGrayScale (bool enabled = true)
+
+inline
+
+ +

Definition at line 73 of file CameraStereoVideo.h.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraStereoVideo::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.map new file mode 100644 index 00000000..916ea7c9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.md5 new file mode 100644 index 00000000..59ebba66 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.md5 @@ -0,0 +1 @@ +deb4cfb3c577a65a03ca9c36893b2184 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3c503348a82743c7c59b70492e7d22bed76ba8ff GIT binary patch literal 7266 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__inherit__graph.md5 new file mode 100644 index 00000000..59ebba66 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__inherit__graph.md5 @@ -0,0 +1 @@ +deb4cfb3c577a65a03ca9c36893b2184 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoVideo__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3c503348a82743c7c59b70492e7d22bed76ba8ff GIT binary patch literal 7266 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraStereoZed Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraStereoZed, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraStereoZed)rtabmap::CameraStereoZedstatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraStereoZed(int deviceId, int resolution=-1, int quality=1, int sensingMode=0, int confidenceThr=100, bool computeOdometry=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity(), bool selfCalibration=true, bool odomForce3DoF=false, int texturenessConfidenceThr=90) (defined in rtabmap::CameraStereoZed)rtabmap::CameraStereoZed
CameraStereoZed(const std::string &svoFilePath, int quality=1, int sensingMode=0, int confidenceThr=100, bool computeOdometry=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity(), bool selfCalibration=true, bool odomForce3DoF=false, int texturenessConfidenceThr=90) (defined in rtabmap::CameraStereoZed)rtabmap::CameraStereoZed
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraStereoZed)rtabmap::CameraStereoZedprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNeuralModelWarning(int quality)rtabmap::CameraStereoZedstatic
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.0)rtabmap::CameraStereoZedvirtual
getSerial() constrtabmap::CameraStereoZedvirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraStereoZedvirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraStereoZed)rtabmap::CameraStereoZedvirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::CameraStereoZedvirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
postInterIMUPublic(const IMU &imu, double stamp) (defined in rtabmap::CameraStereoZed)rtabmap::CameraStereoZed
resetTimer()rtabmap::SensorCapture
sdkVersion() (defined in rtabmap::CameraStereoZed)rtabmap::CameraStereoZedstatic
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setRightGrayScale(bool enabled=true) (defined in rtabmap::CameraStereoZed)rtabmap::CameraStereoZed
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraStereoZed() (defined in rtabmap::CameraStereoZed)rtabmap::CameraStereoZedvirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed.html new file mode 100644 index 00000000..03b07436 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed.html @@ -0,0 +1,487 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraStereoZed Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraStereoZed:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraStereoZed:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraStereoZed (int deviceId, int resolution=-1, int quality=1, int sensingMode=0, int confidenceThr=100, bool computeOdometry=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity(), bool selfCalibration=true, bool odomForce3DoF=false, int texturenessConfidenceThr=90)
 
+ CameraStereoZed (const std::string &svoFilePath, int quality=1, int sensingMode=0, int confidenceThr=100, bool computeOdometry=false, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity(), bool selfCalibration=true, bool odomForce3DoF=false, int texturenessConfidenceThr=90)
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.0)
 Gets the sensor's pose estimate at a specific timestamp.
 
+void postInterIMUPublic (const IMU &imu, double stamp)
 
+void setRightGrayScale (bool enabled=true)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + + + + + +

+Static Public Member Functions

+static bool available ()
 
+static int sdkVersion ()
 
static std::string getNeuralModelWarning (int quality)
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 43 of file CameraStereoZed.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraStereoZed::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraStereoZed::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraStereoZed::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ odomProvided()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraStereoZed::odomProvided () const
+
+virtual
+
+ +

Checks if the sensor provides odometry poses.

+

Some sensors (e.g., visual-inertial cameras) can provide pose estimates directly. This method indicates whether the sensor supports pose queries.

+
Returns
True if the sensor provides odometry poses, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
getPose()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +
+
+ +

◆ getPose()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraStereoZed::getPose (double stamp,
Transform & pose,
cv::Mat & covariance,
double maxWaitTime = 0.0 
)
+
+virtual
+
+ +

Gets the sensor's pose estimate at a specific timestamp.

+

Queries the sensor for its pose estimate at the given timestamp. This is typically used for sensors that provide visual-inertial odometry or other pose estimation capabilities.

+
Parameters
+ + + + + +
stampTimestamp in seconds for which to query the pose
[out]poseOutput transform representing the sensor pose
[out]covarianceOutput covariance matrix (6x6) representing twist uncertainty
maxWaitTimeMaximum time in seconds to wait for pose data (default: 0.06)
+
+
+
Returns
True if pose was successfully retrieved, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
odomProvided()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +
+
+ +

◆ getNeuralModelWarning()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string rtabmap::CameraStereoZed::getNeuralModelWarning (int quality)
+
+static
+
+

If the given ZED depth mode (quality: same encoding as the constructor) is a NEURAL mode whose AI model isn't yet downloaded/optimized for the GPU, returns a human-readable warning that the first start will be slower (the ZED SDK downloads/optimizes the model during init()). Returns an empty string when the model is ready, the mode isn't neural, or the SDK/build doesn't support the check.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraStereoZed::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC-members.html new file mode 100644 index 00000000..74b674e8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC-members.html @@ -0,0 +1,120 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraStereoZedOC Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraStereoZedOC, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::CameraStereoZedOC)rtabmap::CameraStereoZedOCstatic
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraStereoZedOC(int deviceId, int resolution=3, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraStereoZedOC)rtabmap::CameraStereoZedOC
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraStereoZedOC)rtabmap::CameraStereoZedOCprotectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraStereoZedOCvirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraStereoZedOCvirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraStereoZedOC)rtabmap::CameraStereoZedOCvirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setRightGrayScale(bool enabled=true) (defined in rtabmap::CameraStereoZedOC)rtabmap::CameraStereoZedOC
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraStereoZedOC() (defined in rtabmap::CameraStereoZedOC)rtabmap::CameraStereoZedOCvirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC.html new file mode 100644 index 00000000..0d7030bd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC.html @@ -0,0 +1,351 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraStereoZedOC Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::CameraStereoZedOC:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraStereoZedOC:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraStereoZedOC (int deviceId, int resolution=3, float imageRate=0.0f, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
+void setRightGrayScale (bool enabled=true)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + +

+Static Public Member Functions

+static bool available ()
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 47 of file CameraStereoZedOC.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraStereoZedOC::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraStereoZedOC::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraStereoZedOC::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraStereoZedOC::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.map new file mode 100644 index 00000000..f79d1ba0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.md5 new file mode 100644 index 00000000..02c44178 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.md5 @@ -0,0 +1 @@ +8853bacc157343998cb0e6679c32afe2 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..028c9c696eadafbd55b57963dab5b2ad9bd1cd76 GIT binary patch literal 7467 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__inherit__graph.md5 new file mode 100644 index 00000000..02c44178 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__inherit__graph.md5 @@ -0,0 +1 @@ +8853bacc157343998cb0e6679c32afe2 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZedOC__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..028c9c696eadafbd55b57963dab5b2ad9bd1cd76 GIT binary patch literal 7467 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__coll__graph.md5 new file mode 100644 index 00000000..dc2e2a72 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__coll__graph.md5 @@ -0,0 +1 @@ +da4feacbe01ec07831bcd46b75bd3533 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0c93efdca93da62906a86f4b9e2a286910b32b6d GIT binary patch literal 7192 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 IC}rsVKcNrp761SM literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.map new file mode 100644 index 00000000..67bf97d0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.md5 new file mode 100644 index 00000000..dc2e2a72 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.md5 @@ -0,0 +1 @@ +da4feacbe01ec07831bcd46b75bd3533 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraStereoZed__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0c93efdca93da62906a86f4b9e2a286910b32b6d GIT binary patch literal 7192 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 IC}rsVKcNrp761SM literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo-members.html new file mode 100644 index 00000000..bae85a44 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo-members.html @@ -0,0 +1,126 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CameraVideo Member List
+
+
+ +

This is the complete list of members for rtabmap::CameraVideo, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
CameraVideo(int usbDevice=0, bool rectifyImages=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraVideo)rtabmap::CameraVideo
CameraVideo(const std::string &filePath, bool rectifyImages=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::CameraVideo)rtabmap::CameraVideo
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::CameraVideo)rtabmap::CameraVideoprotectedvirtual
getFilePath() const (defined in rtabmap::CameraVideo)rtabmap::CameraVideoinline
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() constrtabmap::CameraVideovirtual
getUsbDevice() const (defined in rtabmap::CameraVideo)rtabmap::CameraVideoinline
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::CameraVideovirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::CameraVideo)rtabmap::CameraVideovirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
kUsbDevice enum value (defined in rtabmap::CameraVideo)rtabmap::CameraVideo
kVideoFile enum value (defined in rtabmap::CameraVideo)rtabmap::CameraVideo
odomProvided() constrtabmap::SensorCaptureinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFOURCC(const std::string &fourcc) (defined in rtabmap::CameraVideo)rtabmap::CameraVideoinline
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setResolution(int width, int height)rtabmap::CameraVideoinline
Source enum name (defined in rtabmap::CameraVideo)rtabmap::CameraVideo
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~CameraVideo() (defined in rtabmap::CameraVideo)rtabmap::CameraVideovirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo.html b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo.html new file mode 100644 index 00000000..d4f5e041 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo.html @@ -0,0 +1,498 @@ + + + + + + + + +RTAB-Map: rtabmap::CameraVideo Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::CameraVideo Class Reference
+
+
+
+Inheritance diagram for rtabmap::CameraVideo:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CameraVideo:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + +

+Public Types

enum  Source { kVideoFile +, kUsbDevice + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CameraVideo (int usbDevice=0, bool rectifyImages=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+ CameraVideo (const std::string &filePath, bool rectifyImages=false, float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
int getUsbDevice () const
 
const std::string & getFilePath () const
 
void setResolution (int width, int height)
 
void setFOURCC (const std::string &fourcc)
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 36 of file CameraVideo.h.

+

Member Enumeration Documentation

+ +

◆ Source

+ +
+
+ + + + +
enum rtabmap::CameraVideo::Source
+
+ +

Definition at line 40 of file CameraVideo.h.

+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::CameraVideo::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::CameraVideo::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::CameraVideo::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ getUsbDevice()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::CameraVideo::getUsbDevice () const
+
+inline
+
+ +

Definition at line 56 of file CameraVideo.h.

+ +
+
+ +

◆ getFilePath()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::CameraVideo::getFilePath () const
+
+inline
+
+ +

Definition at line 57 of file CameraVideo.h.

+ +
+
+ +

◆ setResolution()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void rtabmap::CameraVideo::setResolution (int width,
int height 
)
+
+inline
+
+

Set wanted usb resolution, should be set before initialization. 0 means default resolution. It won't be applied if a valid camera calibration has been loaded, thus resolution from calibration is used.

+ +

Definition at line 64 of file CameraVideo.h.

+ +
+
+ +

◆ setFOURCC()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::CameraVideo::setFOURCC (const std::string & fourcc)
+
+inline
+
+ +

Definition at line 65 of file CameraVideo.h.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::CameraVideo::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.map new file mode 100644 index 00000000..a7c3cc6e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.md5 new file mode 100644 index 00000000..045f319d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.md5 @@ -0,0 +1 @@ +12325830da2198fceb07ffa2d589e18c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0185f0b62cbe50707d31c79e9fc3033577fec781 GIT binary patch literal 6814 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 Je9tQM{{Z&uq9gzS literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.map new file mode 100644 index 00000000..a7c3cc6e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.md5 new file mode 100644 index 00000000..045f319d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.md5 @@ -0,0 +1 @@ +12325830da2198fceb07ffa2d589e18c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CameraVideo__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0185f0b62cbe50707d31c79e9fc3033577fec781 GIT binary patch literal 6814 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 Je9tQM{{Z&uq9gzS literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.map new file mode 100644 index 00000000..c760c06c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.md5 new file mode 100644 index 00000000..28f87caa --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.md5 @@ -0,0 +1 @@ +b1d3b50480189606638dbe9c8a503a05 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c7091f43856d5139c3fa64050e745aef4aef150e GIT binary patch literal 4526 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.map new file mode 100644 index 00000000..54227f2f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.map @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.md5 new file mode 100644 index 00000000..acfbe17a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.md5 @@ -0,0 +1 @@ +c5239df68e346a3715a1b217358a0352 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Camera__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..20467992f48323d2eb3a57b0c18a6ca7af7503cb GIT binary patch literal 131753 zcmc%xWmJ`2_&16!QaYrOMy0zO5l{g^Qc6;~4Y~wr5Cf1#DG8AjP#UDWK@p#8pb*xS=ZEp#!UuNg5&YG(? zN>Vip$_=#B+Dy&~jLXT7w_Z36b+NM2J1iU_S8Em1=6*|n&DwsAr+lH8hlhefEks8i z3p?>kKtLiHD~=F9Kle=kQ@01H5=%e&|40a#c>DCFVvvyjzyG|d#Uebje94am?c2H&TP3 zUN%xvU9Rcr>E)69H+7aI@inZsUNG_S^iB(ehjZtadZ1V?ehSVed@o;&MDvT~-W|n@ zpM@95%Qa~p)VLF#ot^zXdqDW@PkMOABS+bY@bE5nIXT7}_l+Qv;wlgF0yE#Oh;Z)q z#W&&Md4cQejz_1b^UWdnhcC34)zc(H-kSQ;w1g72v=GZhd+jYUOGr#kmwpuW+%|(J zvNAEDZiW%H?yn4&K3&tJj!{mD(H!e%l;Sxf73TQp5@=Nq<`pFin?u?d@x_m(#3`#Ebo zw%Ra=r33GqcwuROP*<97ixF`8E{qKI`)3DHnk?>&7_R%D%y#BlZ)<3@!(;eGGj%>< zXD4fXM&GU?GnKiUJG^2+%qYt}wmj3&us+jZnyZn)3m@{@|KABNYGt(W?f%w`sqER2 zB`GN`9^UJ-f2ZB=ZUjI4USap>WZzC3`2-x)-k zP=LJHee(y0hTOjj%uAQL3ybSHy}Z0GlaaBugb}|Lux#sihHNe*GDeiV#`?c^7rNiJ4i9TD_Gg$bC;tBZI~?wgc<|@FuHN4GKhr)M$}i|R;IiMu zToI!zFxZy)@?=G;R6!hX}pG_#`2l z$k^D}ht}4S9df-Nii?Xs>X#~v6`S(WOFnrCw>70`Yoavk+qZ8WU!SghYj3}``E`vq zN!%^d_juv0pwFRWzERbud~1Vta#CCZg1C~B5|+33i%oclh=^Xt$Lp@|lwJ)M*%PFV zxlBUBgocK;3m2=ZrWP&iGHsl|`@mkWeAXv(d@ZV%`O)d(#+RjZGC4W9!nXRK0(aHa zxc4X7Jqh%R46m8`?u0y99=KuMlW3lhW!e5>_ov59#Gq{)5xrzbz29liSo!fq(G)1C zO!-p&y>&iXcpoe9>a}YWH5m;J4IfSF3>DAp3@t1y)Yga@q}f$CBs?}#?ffh(GVT7Q zN<7ZKn<8o;_q?OfOz<{q%kVvbh&`~3fsZV2?@jGrerUt zsmi;)zP>%l)791DI|m0Mg$7!zdi-G>8!1&*-3bxp<>k7TGnY>IpWR)B6j7&lap)-a zoO>VC>9aq4n0naL7IP)bVf>Tz6s7Se-NJ-PeXFD@kv&PzZKi#1nV{g{yQfgOv+I-P z9esVGb?$3E7I$7`8rS>MI6FJ*#rV}&e$ToUJN06?-p^-v>tJ5jqJ8iH^=r0S8{^q6Z`Tl?;3CCx;tR`}wy`a>^LoF(0d}HhZjNQ%6ZKB#O zYf@D8Ew7TA8UeHolR3KZ@B;kljRd4=8h*BKnw+G0%V!GLyghs4==j(i`WOxoQD|{7 z9}%OhvF*&CnShyn+t}79s;oP2t}ny<=RcaT=#hB5IJ;3bBkE-2`b8r{mRj&3j>65G zZhw#5hDDE$kM%1ZX|%MpdHT#^W@pV(r96nBqip~A6V}im2P-IazCAWYBsE8Z5^G^` z(V{5`3*PsViSLfmMa}c9mTSI-%AJS#RFanuv{MTR2#`Km&eE^<{nGjrt^gw)sdG+w zju5x`HuH{`%(mm7=&!3K2EKer!fjZAi#5n{(!oNJ9C+% zmoV&!WEvDDx%a=Lo%u3{ao*vd&W|5IUigsV|C%x2ujamY-QUA0m)xf?v$>K~d?s-j z{wJO5xuRI(Gfx(KXe2zh-%TdY1f17p=j0?ML|xfijB$Sb=1mlxcJ|Q~B8n#mtGW`d zvw?qiyZJ&GNG(=si;~8B{bK2*t~Z>W6#iaZr1bfy(#6bzd^R+Kvd2s6$G^fD@nUQ` zClctiN%#7dHNE&Ae7$;lxbf!44`X=F>-2P!hc6iYk8bp(N?3N88ZTyUhu&1w8U1nA zjSoA#ZnXM`sDr~phRJ+wHlJG@9xE#=+puCEJt~`=RO75Ga94|^lL)G)sEC0knYEr4 z0(j$ZA7BFHCtk{b3EAxN3ba2EDSn$4D4<}_hW)WsDC0l)ptJe^iYavQ-#nS~9$lWZ z-=c#j>j+P~!bBHT+)fj}z9xX{UHhoQ%1X9M4;uco(9+lfDUq%I{6{jBN=x~714spON{3OzjR;9C-7N9aKhSl4+6am zf9>ps|7N9?Peu_dUgAir6N2l}T>0;hlEd@g7QSLoayALE=x_3RE(SBJxNI3C6XGq6 zw5xcPiTgv+s=kl8Hx_5cmhBb`P&56MfX#XNeh^T$W7x>)a;kc*Btb zI$T*BP?r}!1@8wo1jW_3ynf;CmerNRy?y1kErHypPr0@^Z%8Nb%^aREF@$MZY^foW zyyMvdZ^tP{Hur59#}VB%FM(8h!V@ZP)cB&3e8btPLTpj#nN5krq3m^atZ?sM{o8h~ zg4gmYd``?EXP{)VT`)WNP`CFVj@J|sx^`oea9G7zzqZzPiyQeAiT|cno77a*DHyE* zU7U_S+?--ZMk7s~3g7IZSL{ul2qyv@9BQjA5=F(27PdNo+2{J4r_(^1#?uag1P4i#;S$Vi;cNCbVkOENV?Z~ zTDMhI%RMkzSfVZl{gCYaR8FauK3d4a;ImcLi^17Zdt5=ZASSG%cFcmc!#*ex#dzY2WsxMEz<$8wN!8e{dBZ-oZcis0wnz4ym#<%2 zY_TIxWBBiB;tTUKDC}T-lQNHlG6b%d+Yo#I*(AJw|GrOqKFN5oX?v+<`|R>^xTw?j zcYvx6Up)N$v&N$ZSWeyI($XbUQ&XvHoN38N$E=yjVaQnHzsGsv3Zs)L@%!oqs#JNT zmjO&rmX}Ape*JnNQwiUvo#Q_8zUBS0Q6dgw?_i_c-rrY5SV1gftWp$ZQ*UqYG${{4 zJ}R7l(jKghi`7w*l0Ms+Z=Vu~Kd>KKiVe5t6-5e%6PD;T)n7MB9gS%|R(_X?{S4SV zLe}qO7RZ6P|6g%IK|vG>+PaK-hAbhB71^}=(`DdFUEST40sG8uY&>{aH!`9Fkm((e zoZLko;7veecuw|Lf_r+@01m!~$G5k)1Dnhm;n&&K)kuJ5DWjauJwYNuf`WK4xTs6S z49}yY@ZnSM|K3d$uylnz-pEzXG7%q^XG|m?ls$mq7dvgNL&xVRk<Zk)>Qp)Yo`~q>7)A} zHbf)k{_*JKL?w)fKHH?u8`<2-4-mRDR%E0K8(M33x2o*<-^VLMIZ;3S{`{OWCPtNxq>PM=$jjhP8v@q3e&@~| zYZ3fC#_p|Ju;okd58PDpKjU^g+BQe#!Tn_Z7BWRT{>}5*c8PkQLR!0{ z4*SsK>W`zt!%4CR*;!bCh)|%cW15Tl(xli3X@y^IHJnd>q(P>DngE-W)a&2Dc4JYS zL(%;*e^M`4$5ke##>{^j0G#1NcUL}SB#*gF*BbDe);kU^ZMnmyuBqG9?F_BQelF01 zx!TON)#tEJixL>CaGcgP=eMb;(Q$F)%Lm>-j?jRj(t97QS{ceYjByX=#P`ddaxeC# zgaLw2uCJkDU~v9k>9I9k?Y=<^Gz1f6JNA(#S=cTJNMSPXGoJ25Xa?;dB=qi58TWN{ zDZn*yOUhoeDzP@%+1c6N*?Cr2$OVfM7qvWAbR~h$l!#Pdlw(zfgQMLh!!PvPH^t#y zzJf5}wWD?x(Db4cx(Xd4L&N9xzSf?(5Xh)|@IIG+FnJj#9uw zw>8d}&Q!6sSk`7|Q63&1<^SmE=w4=IxC{%pe1I-=TU}jQUA@m~tH9n4+hGw1OTaIn z@8QwW!WVq1qpM4hhw6e*jCjbpFhm6%sC1dxwFT`xdGe&f^9Aq(WmsSGiaOe*$WWt{ zlq0XxKu5kmcw?2zXQ}iW8yg!+jKRxI+tHC5sQGgsI4NT@9y5N{HchD6#%CC|QZY`$^k{hxEvOlwc@!m2bFJ52kNxU_H+v2@a0hsgM)<>2l}i{9$(4h` z`^E6Yx{kKVF$tBfd&$vbV*yKP9xq?LGXHu<6IxJUCekuS2@!lyHZf`9sfPAIxH0Rn z&%%M1mv{T%KuJf39GjRS8VVu{sDt?9MFJqh1MhBNI8K&f$(JY(t;r$|{LVkb>7?8VnwpxR zvo;Q9-72*o3tsdh%y0 zR&2(X%wg=~4cOtYtEYx9rTg?b`Zc-v`uPp!s8W@?`M@gjR$q9@d^3`MFITrv&-~xX zK}Z{BAk=KK%$aobIZ=X#MwR#^o@&KP9r@zEY zBfcs+Iis?zjmHnSuoaru(2#X;ks9RGlie=6Z2ToTg5AdkpkHP|6apxI>U|rZbKqy9 z3!*8_(yhDzbDE>ATLAwDooEOWFU=|}>iSyz2j@QTAi$o2Ls;|g%h)^jJO$k=x;}d_ zAY=TF@Ey&;-EH*1-`2ePmRsyq*D{+g^KUAil`8Wl-FN-nLF&T>NI5Af>F|ZT;zQC4 zjB(pDRhS~AJ-%7!6&mNvv{$5{g!+j?g+69TO<&XL+Sm#HmEobGb^53dUd7*1J~m7& zoc~>oqOd1}d~ym};YQkmo_77~O66O%*iGzMS2+ncU(o5C2ORc6$tkv82)foR^>HWI zOvbn-CuZS8Q&RnRN#!En{Nj^#z&yifx`U&93#(B7Kkm|f(fWk2*`$e?jEZkm)Rq4r zr{(h_2w=twEWX^+R~;E^af>Us?lFRg7m$m7)p<2->Ipb3I);^@&hXH*X1@0 z+vVAC;`MlQU>k)Gt}uo(>5$91ehgcB`{$n5VHW~mD_f9aaVF_`-h8qUJYwKOz(~qg zL_q7y5p+U(V>^;5-YoWll*)Qe0y8mJsl`NJCc>Eh+*E>$8b-1eE@aoF(yV) zG<&IR?x_?@Ul89;PLdP&H2DPQoUdU9c#@72(##8fk#AR^I96!Fi#yzIeiqb5+v1#! z$&>F1*3x=4PX-jSbq?VPBKqInYN-acqqrmJiwG!0fObgd1bV#ZXXCtG*K z6TBd0j*jwR3(?@T?{O_s3vIrn^2>DanZ2e`j4BN7uoWgH4_mvD3?<5quai$9V3Mb& zj8B4P=CAY4yN;y|mRV*O!oxKQMS$X9xmIcZ%8I1s6E->FFcS$R&I}$2;IvRfmVq=< z5u^7kzGDwKyob3=)L{gIHr`mQ_kGZf z1qlWyL|qevGV8PeM z`ewOw7n!adv<;9p4`0A5agbLgD=0=#k}-!HOy69HZzp*(pDh>og+#h;^~TdY>9*?5 z;bAgBOPu}8;RV_MH`@pAmk01h`|#}zoWP(Abc?Pm|7FUZ0oxK44#yZGy#;R}xIZif z-WRu#JgA-dNB~3;?zbm>`k1ps;%4?=M%ds6a>iU#!*-ndCdn*mPDz3EY8YDwDu*8{ z=tCyMJ*sX?g8$tVM^Pun(b%&eJ6pVs#?wjI(pmIzLt+M-ILF2gxZeCfnWHYz#kI+A zi<4J!Gv=O^J+%`H8Apu>(r#B2IUu!v(1a9gGQP&k1k`4**;9#;dL#1mpyqXr&^*qk zKD{6<-{1%t{-7}>r4piFb_sg+Y%QNX`7)1&Pc;+-)g7eoXF()kUfw3((c^>+9Lgf>!(*pmYy=l9xu=!2{h*s?;y@rJwdw=oTD*M>k$QcKj^ zhZ~($F4iU;U40^0I%oZz3cI_#Q5*JcG)_^M<10kDouW0^yN6OMPipK+AGz z?|(8TMeTw-uL?x#TT9E$Py!kj4h|0MwHe>NyDMN30)y;?VO`_kxYOL+oDIVo0x)J! z>6rBYLA5f(-4ujrV?LTT)KAP?-obWQdb<1j4vnmD^+>U)DXob8RdAEutc@3^jB+2P zr-Dr}LC3-ZsILs@lftpf{o-nZ1Z(56hY?RUe;B|}7wS(p5huv7;=FgB@$zLBgl&Q7 z>jg@zqGI-qU~C{-&J^$mcoOenUCro!9+U3cmMIhkspd5@N}x4zB|vs>Po z$kHm7!RWXD3MLR7po(R2inl<-!8yGP_|0nb$CpPdL)Y%8t0$mgV0Q@hOIsoyla?0I ztJf+0{{!sd5<6FhKP&(V5Okd2rxCG_Q#!S=wpM|ev|1g>-(AWGP*G8d>`9f-<~6Rq zH@Bprc$JGw6`(LTaL9V4t)F)Hrnw?pnavvCZ%a_@qkShwFBF z<)EQtj@mm3THj$|Wo_;6FaEZ{-3c@k(0Vp36YDi%I&mg|-e5Rw1N92)h*>17O8s2_ zXhG%Gf3yXW!z<3B`08H*r#GrNUmYz(SnlrL9)53OcE72=e|@F->NhtBV*+cHX$vtn&B_N7ST|iK0Ya9HDA9b^UV12NJ&jyw*-1vIU(WY z<1-I;nS_)*r;Ci2eCK~<0fb!~7USdMo+H|Qhd{AOo&8DOtdE7=i_H4HBv9D%OzzNd z_j>O6VWGhMidymnlNXVdz-$Z|qhbTGhm1`fQJ>&vc5cpM^bEEjiY<3lMV$veJxv3*vVtAYdj@v(O70BU;+<0*ficO-$%%JG%vsUfTT&4dG?7~{Q zW8}_gYiqmxJ9!FlxMt`3vQtEXaR+Z_sTWcrJ3Ne zVQJm8w!U6}e&!QRFGUF^<7e?;5n$dg)6-u-is08=Yg9)^hrF>dUApI7gdiinkrn%0 zWrwvZ1lZDhJwny4ztHG7<8CE(*fVpK3se!7W?f;u!&ww!pH)!z7V;f{o z=}i&41JNQsFbjprnXtJ7JTXJ9Cq#yd7O<@4}^dfGZomI8RSE#2Mtot>RI z^%ZaJ6aIq`PL}fWjTiKZGu#GnL;*8aG#ZIbVVlsCD9>=SPdJoQH9H7eEQmnxfryZV zdM(yA)x_p&qlF+U^4V>{6%aUVvs|3TVuH$_ zy-^*4Pgh3-e!dKa!E??h0peLzHYdO|vP5^ZIv1bbpAXk({))gj0TDBJ(=z5u<7s7%}GeO!eTv(_o>B%Dkm_O>`&#R^gRO zGRUC5AgD)|RmD6SU36-W+sZRjIIx)vH62Y~ROUny3y9C2-vn8^ch%HiT9fPt&FUJB z2rXJxq6^aRmNZiyINmKDX9W`y^)jt^cCjO6mjq4h%yHz26evVaTLg+Cqk(7`qCcGJ z5tL)EKqEkjw?cFOmHwC^si}$|#x^GTS)FfUSDBKmQFl+zw{%vHBZ(Pe^pGa?h6!-P zbT6xLq{!GuhJS2BK+sohJWG@>gOuSy!smo0+;X(v)#CU2%F`Xn|7L_?l%YxEh5S?D zXJcYAiv_x-xiDC2dF$xtXhI5GGv-xtawMp5lr@MxlWEU%!DwsZo1?6X4)ileZp!8= z{E|~e9}zM7T^^6?Hn)&4PY!dt}#qmG6I?HH4iO%%!W5WJup&wB1%WaFAG-r$K$; z<<++cwzZ-xi08mIBgM>DF*nnB_uU-vdaCxoDrJ$9x>9b_U+F=fsd7=96mPkxKWTQ1 zVwk?o>Dw1~>qJjSZNIAP_g41h`5c4IO=Wg9uu4csAfuo5T4vYgw+OOo_aZH0VFewI z3z9ZR&Tou~D{y1g+hEmrd{zK!M1Z4SUWyeZK|lmmG+iiE@4PNa4-( zyZrutJqZ}3Cmf}Mn*#gg&gmdeARcfg4RH@w5Zzd~xd}kI=hac=z;bbMA)pn;dH?>s ztE($}MNE0Q5bU;L5U{cQd$a=rYm&hydMS74umwM2Z&)FOJP*%Dh0SC6fSNrh--`2U zrVhF_-u6ntrBSRat>uz8^C-&|w?k2qHX-c^Sou0N51BJ*w|;lNIa(`TJwMn@O{GIZ zL5K*N?ssTV;WERJpPxTbW`%#aH4}?SMPRqMAFdmK2ZHo<@W>~sTo^%rL*ib@OHpS@ zTL4W$A^KzSEu6FiD*ycK&qaGh_Nd_CU;`e~8?cEYsf1KnKicAkGw=61Fo%GI0{I&L zUIqoLoh`#R2m(@xm8TG4*>E@JBt!bTZldg^rhBfBdfF??MsQW-nF3#++NQ22Jymuh zvC-g3xM_|a=*5LmN}>`WQwI0x@m@``iHXV4$y%}7&YV)JwAbbT;u4oojx+W2;OR6E z<*2@o3yO^;M#sP)rKL5@n+As?dSj|83wFIkSwG3m+CBAQad4r+YHFkqbsDr->GQvP zfIymzTu?KKGuKNf{ZLD7wAn!7R_!{0}5ouHd`4Y$;AH4`LTK;KN^5xp|sK3&w7ZL_U26~ z$b;H@UTdOaYqk4BsyKv%kp7T=)t}50+mD8F{83E`qYg_+xx(PLuleyo4JCLmkckV3 zXqUQn4Qs3Zl=lU_R465nq1o6+16u&G@7Jv^WCl)c9JG>}9*+Qu9xc2GP^<4xVU`;M z2ffETfqKUn_;Q))Kv&6zDKmKk)|@`%GumFzM*#!{+fBt$;cl7(?EOtyoyu#A8+nvL(DTO!EVN*pHz0bH2v{_Z@Q zi{c}prVa-<$|@~QhjEGM8@Mg+2W__@f`K6)VVN%Oh7Pf!TcDP{vb46gwiy5P05B5j zp6zkN`9D6`EqZ86Qvmo}+y)5f3D}RY_oPWtft%L~m~x=pMuSe`5$0zQp7+!L$0)eQ za2^DN-feY+0}~4?sZOpcWvf@!If{iv-1mszu)@}D%E{S#rcyX%#4^vpGqeP)R@`Hg4k9(}<)0N5 z_hZ8uTRGIY-nLW-W^q3S7hF40FZ$Px;5WTV?t_W9Ls!+f&hdx4zH}OXDa>qV%Ur$l zVYn00MXg#w);%wwW2Dp_{&?KqIUg%$vhFYCu^9&%c=9M>fq_{y><}xx8!o-`jV$*7 zv}mEC8vlP^*>kR5zuvb0{rum|`JMB#e@>#-%F3YtZ2(AcJTk}{>?qJJj7-)SDx0)W6GZQZ#eG3_}|=;q<^7Q&ONGxdHsAjJ!sH)DQr-$=Gg zF3tqV<<+E!51>KA z+t$J}>ejkNZhd3>*6_c9@0=;u5Xn-Rbq>wAr~78VNXy8VNV<&hJOnbwSKkGop1^Go z1PvS)@o3!LMf=ia@PnJoz8aU`ie&&ZHrEdvu@H#p4L<@BdADJ_Ko=ieSV&E!t%&gP z@gXTWM>PP1<=qM{58NL=7P?Ygu~%tr!V(0v#mvV?Y*cl&cYgx9r7M#0+AZ3OxF$g> z>KNY9ar>c-jU{LSpsj~b-hJboR{Y@u8;~}0e(LQ;4C2J18UuV3;s(K8wp{E<0zu!h zv|UvZTpKhov8pL&%kKVX%2`dogr9*9l33|7l#PqHEnV6}J0@ihaRI6if;qasF+~N4 z@Oe#*Pw5^v;YFj36J$|Dle>jgkUcb(NXIsfYP-qLC8$N?L|v?JZn$D6tWX%35$!Eq zW?lW&P}7o(l%jQT@NY(|($9sb>l39gGl|gHR>z8>z&}J*FcPL(TpCm6m64$bEXYym z?B)^oxiztMWvYq~S#g$a8+@4;X-+MbCeXVe$#x5Ll-@BBuo(7FFXjc$|I%Y{yOw`^ z5rS$695?al6`nzSU13uyDk>y?EGO4+ug|EVe-Z+PAV<)E*{%qS-NmOC)>IgTnPCaY zRQ+sA$iM)z2x4eVtgI~+b>WHi<~v$1);8X6R8xAZnPwWmSW-gybY4#Rs)Ae{wJ-C(`qs4hj&w z$8V=w4Y80=Oj;})wMUe!B#~5*jW`7MV3S2hVUKf*QZZEcb@ukT~y1!?~P^Lclk|$ zcXNsaWYmr0X78|bN8oZ#2`TW1fCa)8;)&xvDmeRUVvw_jrR^F^*%(-rr9OY0hvmi~ zdnfRCQB4iDtva7S%H0V(ZqU;eP7js`F<6zO<)N_*V0>FKr*30P6D1k>*Zu(|Fh z+|DBI>-xeDV+3G}3ikei``ip|>|TSv-#&bz$FvvQ_e!UzeC-d(X@k;kbI$| zO84Ep0|Cg6_4V~$r_F|Q{|cumN*He&Z~$=M76s|(*OuyCe<>g!gU6^+5!^)*GO}Pu zg(vqhP{g502 zWP9VmnCk=|*vO+?-P!pQ6xuxq)Tq$eK*_vLO0qMAaR$+eyEZze%(bNoScX0i3Hj;X z^V(TlX8?BAhtQ@U9j;F*tZ^q*ecroFdc0QL@H>pr|0NP{_k`@C8+03%c5$!W?7vVI zAtrK9SL48Vz5jwyj@P?x+VLl}Gte}VL^!1QyP)2XtVG?0DD2}!bTZyLySux1F^?TS z?H)mF_V?0KH=vi_fDm4%q;SC|`x+)Td9?cH4(0LEp8uLnhgQN5*X2VhN-|Q-9E#ld zEE3zS;L&ocyi&%-h-D^`rqIDi@U@6JLiBS;hWDiub$4C0 znlomdNi0Nzd{0(BP>gvRMj}j_B5PLwQ$DxtijV4po8|>LFO)9L8C_B4x+;AGJ7V@R zYAx9>>;n>Cn;ZjKWP|=0CmQS^>(g~p(*i2rkN}^q2woG*M15^o7gz75#>#IZoHh3lwxI_5L zwrE$6zFHVR4CMU#+nJ@{-W#&)w}LDWtxCKHrwvpbyi==o6o|M0NzdDo~m7m#!Wu=&`Rn3lf zuC1IcGMrsUEL^uyt@x1fVt5H=XtG=zeVI*Uc;e*r*^&QlIoKhpf$|MH^0N*s<@UH; zsr*VN7BGjDzdQJ5?p|lPf)>qb|1*zpZt+({`x}bI#_$9des(PCXOgcZ-MF_3Npqda zihXYhi{jMkJQI3tZNo-UixLiIU=Wk)Y-k8f$C%ZicAL&~#R|%zovr@N=}M#?BRe;3)3^$A z3kUJd%&>yBN`@B0|8s{xsR#BA&*9cdWU){iGP4* zTw+}dxrp8@qFU#=9~1%Syhk;in6wz%opln^avCQ!EO<-tvv}lZWv8B>40@k4qw zlXQ1L-|ozrA;#8`d;4_8hV2U4cF^&{CkfOilvwhur}KYUQGMMr#b7iO(i-pl48uRH z9{wC2oxdy)k@xW8_Tt1Sl#mW29KM!7YmRUJnj`8+^r1aMwGyK;^4)u_<*L;iR--f& zESz<)(SHz5v?G!Jh{8a9xa=`x_Bc^58O>Eu*7?aB^k9^oO0aOuEDI*pdsh@5RgALn zJv=+qP&D3BD~(+tx{msB-^X=q0_u{cX`1jn{)@e{@f)TaRg)iHqE_<1oAWuuftxIz z&DQS~b@b5nZVnLQ{ZYayxSBG0J(Gn7>qw?X)P3Pt<{i1Rf>~qCt)=**BWWz^m>^87 zb<){dt=rl}x1(soM|OP|`A7#ZEQA7-jTs4wjV>CC2#i6LIXeJ{tbX6tHNHD|~mp1x(F^n1f3bTd)%Tt%#c zVkh0Ig6{tQcF4HA8(-U?4=LctFqGGb6((>ybGt7@_2WIcH|j_XQwr@jdf?Z=ILb_v zCY~$>_1o|c0z}q=LkXCXoIf8p(?1rVYow>0SX91gZs>InO_k}$Nw3O@Qcs z|NV3OrOENO3XcveuW9ROiKf&n375uMUqO0e=;q=srWFkD;7^jPU%v9 z6A~%7yS>I7<;t zBZLj$1c}XnseuW{Oq642C#5o5-M6M=;Fv)7w7@zG0-cGP zAmmdsETZ*rWGA_{G#hA!rj@eZt}(WG`Y`C|H!gNdczaj!d?{Z}grG$fYUbptnZ3c9 zt|%P))30`A9{cnl3T$j!_V9dY3ueb#=La#k2 z6qn%~hCGCsHfy$Idy+-)fwt#vJqJCWv9z>Q{OKw=0>%)&oZ)v!BkKGE2e37wk-(}C z%Qtbeoc?&cnBrmq$`}%If+H@CQ&Wh5$6MjM&_$t^Do%wWl-gu2GC3bkP@7`nyxc~KiGaYOpr0-)WnUr4*mhnP)p%?-;=V*#u4PI`m$ZMJRni; zj4C&N!3vK#Q{nS2?FN}s>34=T z8wd~;XR}SgnQ^b7Mv}(hf#k9NB%xbir?4t#X(~Dk^TD|>vNUxYBuDH2@8G_K`+B0C zU(*5{6;%a{ADNbwL-R3d9CREwVA%d~B_=A04D#LoD?>~E)A#$XXR&F634~QyzI^$T zd!QkEoSlEnZD$fi#g_mfX+jqZ~%h^Jh zKgs#)xM>us=4bGzac^uFG_A&#jTEeZg~OI}qLOJu;NU62B7%c)h?n{1lm}8rkBjw5pwA75|ShbrpO59lLGimrN@BA@R6Mj8!N3KFT68cmj_L$yDC{3x;NrZk2l&8L61+8v7PLSeC+ zAMchucn48hii?~_d?F45307f77EM0cEv)GKL8JFnRD|3;YoCNPv#D&GKPfq>78WTe z`~UL99;0#=DGG^!fEJ4h!aKJvkx{e+q~B}*9Zuys;q(4k8NLKrj2pJL>_CQ`zh4K_ z7#QtMd;5Y`nvbM(bkR`7i0lLH7>@1T0+xvAKINh1!tI&dDzx*@E-^HMyBG+X7zPTC zB$U8fi&{Epr81p`<7(COFQoWgXXPRAKMOalY6a*MC)Y)8Df=Q7_$~$Aq||*Tj*cKy z;bzP`9Wl=2uXk%7QOHuw-oNA`eLtC2H%$u}!dQF`)&Z9p*Z@JeV#q$FS~A z4grlZ3m!s3x)6R40GC4=YK+pR1mX0huz(O92sS;C4wUTeIT1Z?(NdH0S`1=k)q+Zj zgM%XvaTeFJzg`FxM@(W{69~LEL&G=Yr$*KYM1d?P%dAAxFo0)~zS3=;vvN$-+r9oR z;=|~v{X#i^(K<(OH3WKahr25Ii~iDleL(v*H?%H(G4!US$;sb`|0@fSrVdBV&ob&x zU&I!4oy(m`3UQ1)XHbz3!3k$qd6W5Ep6Pu=OeTBiRYfb^lFje_p${6O*f~XCl8`jf zuHz&Ppl2%PuNE|Fkt?Xm3%t+m`SWsRF{bDeB<&sW-4I?<>9%aY%g;%v*8KR+H< zx=fZS>3uR@G29Rp6T6QbfL})O&RD^!D07=vmH@x$nO}~~R$1!! zN_~o$O9JSArHw4IA@t?h5ZD2``bo^Mh&8|OO~IF}etv!W2u?a2|7keq0lk-N)GH#@ z_%|Z$mw`a>_|s#%<)E7?`FruFrkpu(T3tLA+E+E7i`7r3k2(SR}VNiwU9KK%Q7vz>0!$Lv`x$d62*!e7@294Q=s; zhK-I&e)F&$zzKDWT>@BBsE=uBWiBm2i)HfN+&HA*8Vt{|w5 zH*Sp5*#5(M6d?^Yu6Qo7Xjs<}pLc#m#cmSYcHerG>$CTJx)94F;TTWWDo6zY*P5r9 zRZHKp@QFNsh3iQb?s!xTKkGh8Q@i{NoHHBY-dhuEpWmtEN2OC{!0@pQM4O+rM%9z6J}$=iB?zi z_sKYB^6d9K(e<$fx#UWa{xD&^43!lUgo?5kb z{XM+Z%0GbP6=-_LuXPrqmhugEEXHX`>3y?|-noGl)2LQv-^r=wzE4N|Z?<;Gv{WAG zR2;!g<-A@(`2chEByPv6Umz-*nZzD~@^+`+cwSMevpwd&dQ~~uqnoZ0kG4){^*sIj zaZBhlQD)pFkt#-MajqW(QEs=xafoSKWKvW2_IWC^wrN8x<;l2duUvW1IzaHAbk>F7 zCGpC!xFy}|&d#YPe^?$`Oz@S=$mfzCN`|PV#QcNW&PbOv%^3-~aZv#Fj{8EPGPtBx zDIpb8)Vwd>V07l#$#LKLn|kaU#Qbxm{rPT4kz^*NiX|f>LxS(-lr3-7*OK0;S8==5 z2CuBIY|qwl>>Ag%iVH|%jwqH;d7l=wUMa^;N(-TP(0{E{{2=!F@4=CYJO_2kyt_QM zLGSZP6?!^N#i)XdH%4|~nD~Fu=mb-fZ-~$dKH42`G?7|={9RnQreP2(HtuV<-A;a- zmTt6sHBMCbpbO@9Yc0;>3gHb5`@I0_@846ONM>a0MH{j3?D8;_HtDO1JCd2u&Q@(E zV_ez|{iI*oJhc;7K<=WHsK(@PT%gw3$=o*K*%Or8roca;UiEm4{UoXXxTV+4tUdoc zQup1xf2MARf1(vW(+`Zuvo<=TwFOa!rJ{)33T}&h@F!fK*D19Zqm#6LWs=Z-NnQ2s z-O-$k_yQJ49`+rx@$<++N#R8pF^QxO5Z+WUI8owD$kpE`|Ft+&!B~DD7j zpVwaK-KPt+^hCEM)^FUAa6SpkEh8`Z<9F@po}caN^XsYHx7X0`5(rb|IfxtNS=c(N zkLBr7r%0vqi zisu~tyKDDwVQ@rHxNOpvdqDr)t7q1Y@fOS7os*-q*i4M6mzcjZCt(W)^qi-;qlws# zL1n+T-mWTv=x<+;$?i}0MS&QuYdUjK(d;=yr=6+^rG^r{kZr&necRk=cm}f0n>)CVBWSLOu)i zxK?Il+gCqF=Zoz{{Y4C1=@MP@vTyzVN#6I4lO^3{F4vT2{*POF85g>iu{7})IBU}G zlX_qAWQ+>9N+cXIGn^I2sgrcBS%@cf;CMQweg5S~eDVpw$RBm~9G!^&I>Fq?UiyP? z+j<5k5@|n(=(_r>z1%h|=q{tzqSq!;n@2hs=@O`3_K|mDXeZ&@W>x4nz=)n!FN}jO z81{eO;Y?OkFFq%uu?Sl>P435U%28|m*At|RW)sP2z2}9VhW$}@Uv(=cVmuLRZYU?- zD?V?OG|-d-}1Ff}Hl;p8AJY-q&W&`tJGO zpdo2wmACouhPRa>UpFW`;z5r-sfl3dO!WJ;p0mYEF743Y=qg=i)Zq{ngcA?k<5bEm z+lc_#*-qC=z?r7$7uwE{D4K<@D|iRn6qcU!C(fA_5J@08kquzcr1#g|%GW9EuqBZ% zcuteG@T3}#)^<$UTE6X|XjGh?lnCw#;CwkS51nX!f}ApHJGYUm^5n@-Gt_Sqd^JVi zUccPd26ene=j&^5Dl`Y2ucNdmg-_YPo&WAvN@I$Nf5VR+s@N@icWn+pWMQJ3Bg;f!Wyv zg0LOD@w3UV`}_MA?b3cdU~N-MT7wvLMbz;fI3i#TX6#Au@WeoDLcncK5&6=Ib$2Ng zoGLX3{AAU2FJVuTM@Z-m#C(CpAV(7;|Ej|?ARWvn+790|B!Bxh4um9tKwj!DL%xvW z5)s`j=o=yaA4F4%dL#_1oF6!53`0Pq6G94ifK3AySRQ>Vv-22j_KD4r{_)E1z-x zWo_a^8aw;fSRts~$FbDAJJubi{X>Dkj zj6%M#VtMI*zA-7XPBy3W-q>DOUta>i%R6w`F&msoW?x9wko70R94HufknQHN!Whmw&as#CU7Tr0WW?%)JPV-0}tGLzjlA<^8|e7 zjj`Xs=+H+4p)acih1p;@A-^Zd1^DNGI)^pDhZsw+u2dkUd6k#<(?rIrW(aZJ25ROB zWD8KPQn-7EoF!dZ5x1WOz2NmWW;O&RD$$j<jvbhR8w$TlU)kC0MERV`?aEXW#fE?8vLZHYL zF83OIzr1p`j{}S9zZSkr56^8u1*n#J_z1 zap|C{;on`b?-!r~;Xo!d6y$r7Ah|R4w5PlQP6n$b2`WLNX`!^8;SHSARRj0?{yRVO z89T2>aU)B8Qd{sTXUyQwHAea67K5l1aWM`C}nUxSyBAa9uGD7y=GRnx_D=W$t zWp8@hTU7R5k-Z|+@4Vcf@1y^d|AYI9o2%=3jq`k+$9Wvb%K)h2F(yQ9~Z?Z36BTiEnh0UeCM>kExTfy=Twv7`SPxxP?OMAFkiUvyW=&(#7m^qJIBR zy)eE|1CIZ0(<-`YuvGUm|D6RVaA^-0YH|$^<2M}^*v&TSIrZN{19puAF#6~1MexH% z8a$lPfannbK01#cJt~>JTkrC#1HNur*bKd%zxjW^}G|OzPz_@%b|2WHrQ=_+lBM~k!@xvwG+g6}vVdyQ> z6V!r@Q!rE{!6{}YPe24%LMV-(*$y?0T|WR(IEg@<55@A zc>uA8L~q({;BHvj_-fj>~{W#yx$ut3Fl9 z*I^IFW#xc0*MWsr3xwaXdN;d*fiGn$f1e)0W5FDN8{#hLg=1k!+SaYHRWFS$Jm$!0 zP$JC2sY+Tt&tRIeCY)`M7@`xg3T6z%GOSm{G;ntN5gMwHsK}bxj_X=)-&%an%&WUG zUcGP+1PX7#?*TmHPf9rS7_4zwARr`}FE9Vy z{(*#2cSesMTHR9!vV6FZ`Hxi!V&;X2}dw^*oRnIZZ|85PQq`%KKInT4 zK&k~%(h6io-o5`8>6FjurZ-r?A%6#U69AoEgLBq=&p6CJ#wd#HE)_)3hQl9EktYGv z6b}SunE2JY#_AfUe1k?Y;LI>GGrtC!RRmy3q`|H8o+V@S&YJgN?`G#~6qpUplaSoz z8t&s#&ivec#fXNkV@QA>b>`~nwV{p|>n)7emqBmAaH#Xs@r^FasIdv&PSNy0bbt?A z?_^56I#mV`Ei6V$re$_*QD8WNh^j|7GSvNkjSr3pro*x2J%lR64g*;s39*cVg8K(b zr=pd)1IRQ}ous{^RlCgoEU7BWbkPixc7R(Py=#$m&ijQO=$M0!38ZqY^FyJ36P~|Lt`T#!hh?~bT{0*DS+~RF#XBdxu z&7%MdbK5BS7z3s$MwIdhs*g14IZyBy`5Ft#*uQdIcS_v1Ms#aaNrA(K5f=|{{@CH1 zN0Wm5$`usAwJAUf2Ga9&Vd2C}4DKxeJ0aBx$IY^Ld07YL8TIwU6fa&y4654ECbIb8 z+M!2|WA-Iwbm=mfJpK^O%7Quj%5Fo5&R^wIA>s-J1n&WfNVP6sH*%;2#bh=|6PtW*ii<6ft8OJSK zn#`m95ILvO{ci9(8%i{e?XM|F^uNM<(6+OAHs7J!bM)HJ#N)dT9!Vc+)TZm)5m4g@N$VR5IBnW;cg zc$d_mlkYA+ihEb1WjNG94mTR#y0_e6@uaHI1{$2e>6wYl;x+!SuAiLb=fwpp(G>`A z@Z)bXTN_;_-CzLS^m!IG}5Lqk) zv}4peapN@J9-=#R%`L;n#jUwvpiufvW^NJ4hIZy^3KSP;(jEqB$tB0l+G2n-#rzK{ z1J*q}SUPzVu6M7>6R-`^82bFS9$skYiIK{SlaXr5G}_tlm;Lu6FMjVWcwQRK47`iy ze9J5H0Y={NC&wpVqc@^jZ&#QI@9W%kdo#}Lp@dVmZx|ZTxYe_sa~+7s&g!^ZAKHdu;Nf&4O{iURnBxW_MTCZgrwyu(?K=i z>lua@K8I$B``-ib$RI)=x)Q=u3WqPSf&}i_qzpe&#*adqHbGx7QaXlke{!MTQ!iGI zzHSp)a=1Rxl3&f-_j{)2Q39~@(?JpCbw@U50(w*y78a|U_#febXFOf^DoSs4dHFN+ zMXGG4JylMjTOI~NPIAvCC=N5KqdlO09$cEX zlg95Y?B&OCxLLPFnaW*_7Kg@>p0L+4H>bx-)1Lhym zkj;mIR|;B=t<4vvi29Z)*+UXq_^&S!uY7%Yjg^mYC+!Fbi9n@Hin=TLJNGrnJJJBt z2i@H2*FK05O(WlJ0Sk+zX+31h@tP5|^%t_guTAg+Q(H7We9yjtDZ)YSp?_`5#(0cb zVYQ<>1i?vrv2>uEhXN5gHYVmCbj;wy2j7X|2if(r`5*(J3z7Um06#mx(PMGZY3o}3 z|IdQ?cU*2>9@U+dHIpiEX&K@NFPL#?<{&;jv$Oxw24UPme)0w~-5wkjO{yo+5hV!J zl01)tpv{2D*f%CB5k3QmS|2aD8COphz)L~BwdMfzu^bff2XgvJ_YYAb{VfownPB17X$71`y6m9N7O*gff z=dY8VuLK`bE;o@J=LX*W?ZGUqiID4&#y)hKh%qoQ^kfjA1?+^-xD6VTq2flSb8bm- zTP6Tlh_PIy4Z|+Qu(C#=^##8^R%JsAa)IaYZg9TXfoJW2@v8%ru6&>#XMs^)vk$AT>LC8GZ?tK`%u%C1K|{b96(I~N`}*B^?%|>bcV=G z3Mu4axHOAxOa-U%DRpoI)vst9ej?E;tI=#31KPtMm-cz%&~@`sfqLE&!)g*_ zV?bo0hp$5I1a-q>SQ85qM_tTOT`(s4*3IS_9-*N9|_?RK|KodfzHCosgS0U_vX!%*LI_T_pyC-#0kv39GsuP4w&*!Ewl^~RbcE* zbv&9LPXpi6$ypY0aXoOv;$&h1L@XNWiyq)R>vxKu-T@CN@Ui^>2Q);*?g1rh*aj61 z4F{|v64Dp|g1TU8)eZkaLBk96ZZVfOQsn~+zU`M|Rd_g|yt4A)MEMkSU1$!F>{IxF z@_?jEiTXuV(l=pA18b?f{%o?zu_P8pn)ll=YQk9Qe{`fME*)A;taP0jN|!PiF> zN_9nRH|W>?g=!V)%tFB=^W@2wTe;v%(0glC4^s-xd~VY&R7An=TSQ=;U3v#qJNThp zp`ZxtcioHHhH~liORq22azew$VGY88451|xoO=Ta2cx<^@pnV7r$MIo9v&23pn?v9 z$o2_5)Jp2sIRVttnoBnKWoKRH>o5#w1m$at)32t004zr*C#Wl|vsP15Q+vT}xMm@g zORpBF{(W$8)m^v+s8U$Wj4J@73GzS93|%bVZmr*YX!4ar#97aMytNyjf}};`UFK(8 zF6A%YpYs7a39*62-w8(;&>Z0bzk>PZ%_zX>pl1qQ>q{be(M4bt3iVO*pC$-A*hiDr zRTzWJ6PvD}0-qK$bKtFAioLJ>iszR{(sILt0N^XXMoySHib-`7)FvP^PW-h$J}YnG zC}ca8Oe}fqx3gmpGp_)C$-hK@KGWvrKt5RcB1CBIo7Z5nBK#*+IbgmA@MgL|R zBaH>AeSOm?UrDf4ZeMez96S2|7LhmkTB`ug;_h|qKmG{Q0AV=s&O@0_Zi_Ejun0k| zKnSAyd8g1ucvlD{3JF=<;rt+%%K)4dj`OP%yi8zPReXOGV=k1d#1OCpBq=}@@EV{q zDxjahP}UqxSOI;;P0t1_qu;d7Uxz`4@-#X+x&=@$8d1j&MG+%wEH`ev0jj|eRJV@l z<&f6$|4VBEY%*`dhWc=Gc$T*Ai)@VeVMXC^J+KZvAe(0m$h&eWnV8e-Y+o7Hth|DP zF^C9YPsc%YM*MfdR9w~2@H!x)%MgV{@}5Cf0h*@SQdf-k>1H($-QR!~I{yE@7>QC4 zOGmP#FCi)=D0f?d6{7KKr{`Cf(%g-l`#}zQTj(`*(x**8uJ)nZ?hZ8zM#plUQ_-#Q@ z2Y@ZG#=Mg@prav@$e}f%&Ft%C`#+i{`tmlN-mDUYLISAbfC0ABD+}j#8*wswr?~s( zm-+rwua*N>qDISA!sc84qbV5e2B4w=4`@lPT<8C|0054tf*=tb{N|REp0NQ;46{IT z_3HXt2SPkNBgj#Du+$NX$HruJ6rwk|MW8z-0;NA9jV~F5K>%EI{IK=|Kl&C>G?+TU z1oXO)&^MQ->*JY4nnfKz<4yrR42b`iK&xj0qd-V677sf50u7oTCj(g6$j<q0N#r22=X^Wf zyVu6K%$ceNXG}dMklk;eIM?{6p{|}AKRMLa5NgH$+mmmevN!#>rpFb(aH8B=-hxNC zuW0>C77*+!^OF8CcEm!>S}S9Pjxb#aBgU>%4US7O!w59O>A!z{6ytkNKzoq!;}3DT z=jhCo90_qm*>O3SgRlY$$}c5<=(#$Y+99^2Kwx|K#`3edRd1(%=fAz~yh1`>^2M0~ zFMLRu(6>Kwskyz9>^QGQ1@qAR>fTG!=d?+jm5z?bgvX+%eE;&p`5Rd|b$Kgkwm#9w zK0#?p{o(H&ocs()wIJ-(e-CQ2r;iTemucFt50@5WBINtjK`pG+!&%M5X3k&k@9E)j zkP7`KPwzejVQ3d)SPE(ozQ0U}R`x*W#*Tg1w$2RG!8VY3*swQnb~7ZBYi@2or5B~^Zqk9T#H;|PbQ zi|L%Xxz>!&cPqiMp>t`6AzGa46_vQCmMJxq5PoQ~Xi*M(w{Fei65dVgU)>L;HJ3jJ zQ^+Q9qq>%GaF!#PWHR=s62&q-7aHevJA~eY381P^))Z`o~fsO?YE*<%<^<%A$?d z`exg^KrI z-6{3YUN@WE^SnJnGN$%zvzCJ5+RZ9w+I_#5|L0@3D4Qd^2SRODg`UWn(x%IZJo4`}&Pag;SZ()q~ zU$c$$vZQkhgZ($~T0C4v{1cgx`vRKaEYj?R*AqteXZ$4^T744Xv=f8wk+uP8+-7sr z{qdjJ!-Ov)j8fPg!=Ws}91PuQ+dy9(v^FZ1wzX$?jx&U68Ts_bgP}u#vnk{)6ywzquUM0*oiZN9xjMRBvVS|8q>y zsKq>FQw9B+|JKx-zxORMZ3cX1MyMIkDH|n*&hYtw0>l(>)nS&Wnwa~FugM~h;nxkh zxTTWCx~I?t^WVYd8=di!44G$ZML<2+)1sb}A7L5z^+%~-R5eWfqsRmdNszJ;>rdK@ zRz1x2yQ-MV5i)n(=tt5Q7Tc>%#d1T9=uqe7ILQ_>1AufWa136=M)4Lg zkKWC{wbFeVBa`9n?^~kEnROgGs+y!a`fz<*I%~cXt)Ynr>_{z0l~2-lI_DY5FC-bH zy75hM+jnlDYr2^MMh2slbFn)8K7YkF>R%h=Cs@8Rr!}`FNOk=RE@ooAiRtLE#;*LJ z5oNS6S8PBi!{BsBj>1PWQE$Qnp&-U`roJn7<`>Iy`Rm0BAPeB_q8ap>peEiZzuj`! z69<3JKZGgg(iy!bDvnWc+jZ-sWhqC9KIgq!(PE(?^e}^vC+-(vn*L(m`xhwXFz3`K z3leO%6=L2}cc9s^ISYH_O>Ro6n7^xfR-3#`XNh0oUsnrk)kn0-DV4|{G{>3hpImC`KI9eP#pN(~SHdkj{c z{rY)^iTaY*ySU4_nd5Adn%;g4#++K-vc8O!mz7X_%>1b0(yq@_9Ppr}=kv8^_QJO< zFBT=of1^a`Ol~CM*S{b+mzP3nc9>!_?DP{CYixre?c`up_uX5GBy%ojy4zP%nIt~R zb$lueYJYRms$5bnh)jCV>BYjn9s1-(gnzCu?XUOhIYdE5xFZ9$?DzAf%#1}+d+%s% zT&YF1yv9{!BjmrtMLwn6kt;{6Xm6;a+1kxhN-QM$-`Ers-n(ex-QGLQDrbFzdv{EQ zB;t$5{o}a}*A9|UBU2fJ5GEA^9G?M6CF8*R_1y(1L7L;bptz?+Pv%qJz7=a;(o)b= z25*H{05aiNbI}EJWLEt7W@oZkj;Q?ujI_u0WubBNDw;$V*LQiO8NAyfpSvByq_Bc! zkX#!0T6>5laJBHN)^{#()mk37Z3(o$cB^WI-=LlV?_b{9EI{opU3~QKIxR!#4PzAc zlRNvhn;SU({(8*!)Ax9Vg}CJl!;J8Ewu*80T>{Cphdk8XF~Ial3GkW*dg%gnu&Y6? zrn!Lc90^{oz!_|+h&d>t2Y#Y8 zOFSY&57#QmMI^8kWM9N^TLI64ZAL|Evk;QK^SQawD#n$TRq%A5oL3j?v?u4y( zq1EZd^|qF2LHz^ICz9id8Nd0uLWm?BIic^7ty>!sCBu#uVC7%Dj>OI|a#o**V~3MhiO~b#L9YG}|NL`N_B)cL4v~&UL`?F8wV`b9 zO^>`T`kZf`u;?-PA~+z-zFhgu!OG@G2St{lwdbVvSkxjnQFMn|iThsw&qTC3At9Q^ zkBpIZW#xP^Dl#=%hEcf6FF)*zW{U85V)|AcM>=I-^QZt*fUp6LJ599ZLk*)%EumuU zx(fR<^urBToPkgwUr(+u)ov|!wTSxIQ`;Sl))HUeGxy6HCTTPL7{D?4A zYZ)zT+dh)b`bkOROiWxpzw#$Vf2L=FCra|q4d~!N8-U|zYr0qB_mniq9iTpEhwcdM9Y_NcyXqWZiw^)t!gWP|(vAkj_X#_wp~%K>0rJrs{vc?MXs04( z2PTB75}G@{olq_A0z;VI58x(1S`e#dC8$+s;8Gf3&N%#DgM8>AgPgk@Uq1?CL3
s(81@C8|2(-@IBw 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

{V$w3l2$l@xM*?-%@0$(B2fI1!a|cBob>+YD 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


=D!?(Jvqs{U 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

Y9Ha|;9HNw^bV(lL;{@WDR2|7z$*Li&1l|G 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%0AR%U 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 Zk@4mNW9EKsO>PQa2Q>AlPxe?{`d^zH_#XfO literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap-members.html new file mode 100644 index 00000000..6956fbf5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap-members.html @@ -0,0 +1,125 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +

+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CloudMap Member List
+
+
+ +

This is the complete list of members for rtabmap::CloudMap, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addAssembledNode(int id, const Transform &pose)rtabmap::GlobalMapprotected
addedNodes() constrtabmap::GlobalMapinline
assemble(const std::list< std::pair< int, Transform > > &newPoses)rtabmap::CloudMapprotectedvirtual
assembledNodes() constrtabmap::GlobalMapinlineprotected
cache() constrtabmap::GlobalMapinlineprotected
cellSize_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
clear()rtabmap::CloudMapvirtual
CloudMap(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::CloudMap)rtabmap::CloudMap
fullUpdateNeeded(const std::map< int, Transform > &poses) constrtabmap::GlobalMap
getCellSize() constrtabmap::GlobalMapinline
getGridMax(double &x, double &y) constrtabmap::GlobalMapinline
getGridMax(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getMapEmptyCells() const (defined in rtabmap::CloudMap)rtabmap::CloudMapinline
getMapGround() const (defined in rtabmap::CloudMap)rtabmap::CloudMapinline
getMapObstacles() const (defined in rtabmap::CloudMap)rtabmap::CloudMapinline
getMemoryUsed() constrtabmap::CloudMapvirtual
getUpdateError() constrtabmap::GlobalMapinline
GlobalMap(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())rtabmap::GlobalMapprotected
isNodeAssembled(int id)rtabmap::GlobalMapinlineprotected
logodds(double probability)rtabmap::GlobalMapinlinestatic
logOddsClampingMax_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsClampingMin_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsHit_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsMiss_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
maxValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
minValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
occupancyThr_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
probability(double logodds)rtabmap::GlobalMapinlinestatic
update(const std::map< int, Transform > &poses)rtabmap::GlobalMap
updateError_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
~GlobalMap() (defined in rtabmap::GlobalMap)rtabmap::GlobalMapvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap.html b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap.html new file mode 100644 index 00000000..7b30d1ae --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap.html @@ -0,0 +1,382 @@ + + + + + + + + +RTAB-Map: rtabmap::CloudMap Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::CloudMap Class Reference
+
+
+
+Inheritance diagram for rtabmap::CloudMap:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CloudMap:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ CloudMap (const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
 
virtual void clear ()
 Clears assembled nodes and grid bounds; does not clear LocalGridCache.
 
const pcl::PointCloud< pcl::PointXYZRGB >::Ptr & getMapGround () const
 
const pcl::PointCloud< pcl::PointXYZRGB >::Ptr & getMapObstacles () const
 
const pcl::PointCloud< pcl::PointXYZ >::Ptr & getMapEmptyCells () const
 
unsigned long getMemoryUsed () const
 Approximate memory used by assembled-node bookkeeping (bytes).
 
- Public Member Functions inherited from rtabmap::GlobalMap
bool fullUpdateNeeded (const std::map< int, Transform > &poses) const
 True if the map should be rebuilt from cache (loop closure or disjoint graph).
 
bool update (const std::map< int, Transform > &poses)
 Incrementally assemble new nodes from poses.
 
float getCellSize () const
 
float getUpdateError () const
 
const std::map< int, Transform > & addedNodes () const
 
void getGridMin (double &x, double &y) const
 2D grid minimum (x, y) in meters.
 
void getGridMax (double &x, double &y) const
 2D grid maximum (x, y) in meters.
 
void getGridMin (double &x, double &y, double &z) const
 3D grid minimum (x, y, z) in meters.
 
void getGridMax (double &x, double &y, double &z) const
 3D grid maximum (x, y, z) in meters.
 
+ + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual void assemble (const std::list< std::pair< int, Transform > > &newPoses)
 Subclass hook: merge newPoses into the global map; call addAssembledNode().
 
- Protected Member Functions inherited from rtabmap::GlobalMap
 GlobalMap (const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
 Constructs the base map; subclasses call from their constructor.
 
const std::map< int, LocalGrid > & cache () const
 
const std::map< int, Transform > & assembledNodes () const
 
bool isNodeAssembled (int id)
 
+void addAssembledNode (int id, const Transform &pose)
 Records a successfully assembled node (ids <= 0 are ignored).
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from rtabmap::GlobalMap
static float logodds (double probability)
 Converts probability in (0, 1) to log-odds.
 
static double probability (double logodds)
 Converts log-odds back to probability in (0, 1).
 
- Protected Attributes inherited from rtabmap::GlobalMap
float cellSize_
 
float updateError_
 
float occupancyThr_
 
float logOddsHit_
 
float logOddsMiss_
 
float logOddsClampingMin_
 
float logOddsClampingMax_
 
double minValues_ [3]
 
double maxValues_ [3]
 
+

Detailed Description

+
+

Definition at line 40 of file CloudMap.h.

+

Member Function Documentation

+ +

◆ clear()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void rtabmap::CloudMap::clear ()
+
+virtual
+
+ +

Clears assembled nodes and grid bounds; does not clear LocalGridCache.

+ +

Reimplemented from rtabmap::GlobalMap.

+ +
+
+ +

◆ getMapGround()

+ +
+
+ + + + + +
+ + + + + + + +
const pcl::PointCloud< pcl::PointXYZRGB >::Ptr & rtabmap::CloudMap::getMapGround () const
+
+inline
+
+ +

Definition at line 47 of file CloudMap.h.

+ +
+
+ +

◆ getMapObstacles()

+ +
+
+ + + + + +
+ + + + + + + +
const pcl::PointCloud< pcl::PointXYZRGB >::Ptr & rtabmap::CloudMap::getMapObstacles () const
+
+inline
+
+ +

Definition at line 48 of file CloudMap.h.

+ +
+
+ +

◆ getMapEmptyCells()

+ +
+
+ + + + + +
+ + + + + + + +
const pcl::PointCloud< pcl::PointXYZ >::Ptr & rtabmap::CloudMap::getMapEmptyCells () const
+
+inline
+
+ +

Definition at line 49 of file CloudMap.h.

+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned long rtabmap::CloudMap::getMemoryUsed () const
+
+virtual
+
+ +

Approximate memory used by assembled-node bookkeeping (bytes).

+ +

Reimplemented from rtabmap::GlobalMap.

+ +
+
+ +

◆ assemble()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::CloudMap::assemble (const std::list< std::pair< int, Transform > > & newPoses)
+
+protectedvirtual
+
+ +

Subclass hook: merge newPoses into the global map; call addAssembledNode().

+ +

Implements rtabmap::GlobalMap.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/global_map/CloudMap.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.map new file mode 100644 index 00000000..06033eee --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.md5 new file mode 100644 index 00000000..9e5899c0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.md5 @@ -0,0 +1 @@ +f52453a4e473f67f92435c0ab43ad11d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..728f8005ee5555fa3b62de96d0d789b817516bba GIT binary patch literal 4411 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 C7h@j) literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.map new file mode 100644 index 00000000..06033eee --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.md5 new file mode 100644 index 00000000..9e5899c0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.md5 @@ -0,0 +1 @@ +f52453a4e473f67f92435c0ab43ad11d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CloudMap__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..728f8005ee5555fa3b62de96d0d789b817516bba GIT binary patch literal 4411 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 C7h@j) literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread-members.html new file mode 100644 index 00000000..1a8715ce --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread-members.html @@ -0,0 +1,136 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::CompressionThread Member List
+
+
+ +

This is the complete list of members for rtabmap::CompressionThread, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CompressionThread(const cv::Mat &mat, const std::string &format="")rtabmap::CompressionThread
CompressionThread(const cv::Mat &bytes, bool isImage)rtabmap::CompressionThread
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
currentThreadId() (defined in UThread)UThreadinlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
getCompressedData() constrtabmap::CompressionThreadinline
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
getUncompressedData()rtabmap::CompressionThreadinline
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
isCreating() constUThread
isIdle() constUThread
isKilled() constUThread
isRunning() constUThread
join(bool killFirst=false)UThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
mainLoop()rtabmap::CompressionThreadprotectedvirtual
Priority enum nameUThread
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setPriority(Priority priority)UThread
start()UThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread.html b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread.html new file mode 100644 index 00000000..d1506ca6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread.html @@ -0,0 +1,415 @@ + + + + + + + + +RTAB-Map: rtabmap::CompressionThread Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::CompressionThread Class Reference
+
+
+ +

Background thread to compress or uncompress images and generic matrices. + More...

+ +

#include <Compression.h>

+
+Inheritance diagram for rtabmap::CompressionThread:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::CompressionThread:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 CompressionThread (const cv::Mat &mat, const std::string &format="")
 Constructs a thread in compress mode.
 
 CompressionThread (const cv::Mat &bytes, bool isImage)
 Constructs a thread in uncompress mode.
 
const cv::Mat & getCompressedData () const
 
cv::Mat & getUncompressedData ()
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+ + + +

+Protected Member Functions

virtual void mainLoop ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+

Background thread to compress or uncompress images and generic matrices.

+

In compress mode, pass a source matrix to the constructor with an optional image format (".png", ".jpg", ".rvl", or empty for zlib data). In uncompress mode, pass compressed bytes and set isImage accordingly. Call UThread::start() then UThread::join() to obtain the result from getCompressedData() or getUncompressedData().

+

Example compression:

cv::Mat image;
+
CompressionThread ct(image, ".png");
+
ct.start();
+
ct.join();
+
cv::Mat bytes = ct.getCompressedData();
+
Background thread to compress or uncompress images and generic matrices.
Definition Compression.h:68
+

Example uncompression:

cv::Mat bytes;
+
CompressionThread ct(bytes, true);
+
ct.start();
+
ct.join();
+
cv::Mat image = ct.getUncompressedData();
+
+

Definition at line 67 of file Compression.h.

+

Constructor & Destructor Documentation

+ +

◆ CompressionThread() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
rtabmap::CompressionThread::CompressionThread (const cv::Mat & mat,
const std::string & format = "" 
)
+
+ +

Constructs a thread in compress mode.

+
Parameters
+ + + +
matSource image or data matrix to compress.
formatImage format: ".png", ".jpg", ".rvl", or empty for zlib (compressData2).
+
+
+ +
+
+ +

◆ CompressionThread() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
rtabmap::CompressionThread::CompressionThread (const cv::Mat & bytes,
bool isImage 
)
+
+ +

Constructs a thread in uncompress mode.

+
Parameters
+ + + +
bytesCompressed bytes (CV_8UC1).
isImageIf true, decode as image; otherwise decode as zlib data.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ getCompressedData()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::CompressionThread::getCompressedData () const
+
+inline
+
+
Returns
Compressed output (CV_8UC1), valid after compress mode completes.
+ +

Definition at line 83 of file Compression.h.

+ +
+
+ +

◆ getUncompressedData()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Mat & rtabmap::CompressionThread::getUncompressedData ()
+
+inline
+
+
Returns
Uncompressed output, valid after uncompress mode completes.
+ +

Definition at line 85 of file Compression.h.

+ +
+
+ +

◆ mainLoop()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void rtabmap::CompressionThread::mainLoop ()
+
+protectedvirtual
+
+

Pure virtual method mainLoop(). The inner loop of the thread. This method is called repetitively until the thread is killed. Note that if kill() is called in mainLoopBegin(), mainLoop() is not called, terminating immediately the thread.

+
See also
mainLoop()
+
+kill()
+ +

Implements UThread.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.map new file mode 100644 index 00000000..a757e90d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.md5 new file mode 100644 index 00000000..bee2881b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.md5 @@ -0,0 +1 @@ +8deb0a19b9b4501c87822e452a7b8b09 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..74fd909129698eab637b498b7ebcb86a25083451 GIT binary patch literal 6405 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 BfK~ti literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.map new file mode 100644 index 00000000..a757e90d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.md5 new file mode 100644 index 00000000..bee2881b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.md5 @@ -0,0 +1 @@ +8deb0a19b9b4501c87822e452a7b8b09 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1CompressionThread__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..74fd909129698eab637b498b7ebcb86a25083451 GIT binary patch literal 6405 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 BfK~ti literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver-members.html new file mode 100644 index 00000000..d6f40fda --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver-members.html @@ -0,0 +1,277 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::DBDriver Member List
+
+
+ +

This is the complete list of members for rtabmap::DBDriver, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addInfoAfterRun(int stMemSize, int lastSignAdded, int processMemUsed, int databaseMemUsed, int dictionarySize, const ParametersMap &parameters) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
addLink(const Link &link)rtabmap::DBDriver
addLinkQuery(const Link &link) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
addStatistics(const Statistics &statistics, bool saveWmState) constrtabmap::DBDriver
addStatisticsQuery(const Statistics &statistics, bool saveWmState) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
asyncSave(Signature *s)rtabmap::DBDriver
asyncSave(VisualWord *vw)rtabmap::DBDriver
closeConnection(bool save=true, const std::string &outputUrl="")rtabmap::DBDriver
connectDatabaseQuery(const std::string &url, bool overwritten=false, bool readOnly=false)=0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
create(const ParametersMap &parameters=ParametersMap())rtabmap::DBDriverstatic
currentThreadId() (defined in UThread)UThreadinlinestatic
DBDriver(const ParametersMap &parameters=ParametersMap())rtabmap::DBDriverprotected
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
disconnectDatabaseQuery(bool save=true, const std::string &outputUrl="")=0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
emptyTrashes(bool async=false)rtabmap::DBDriver
executeNoResult(const std::string &sql) constrtabmap::DBDriver
executeNoResultQuery(const std::string &sql) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
generateGraph(const std::string &fileName, const std::set< int > &ids=std::set< int >(), const std::map< int, Signature * > &otherSignatures=std::map< int, Signature * >())rtabmap::DBDriver
getAllLabels(std::map< int, std::string > &labels) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllLabelsQuery(std::map< int, std::string > &labels) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getAllLinks(std::multimap< int, Link > &links, bool ignoreNullLinks=true, bool withLandmarks=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllLinksQuery(std::multimap< int, Link > &links, bool ignoreNullLinks, bool withLandmarks) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getAllNodeIds(std::set< int > &ids, bool ignoreChildren=false, bool ignoreBadSignatures=false, bool ignoreIntermediateNodes=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllNodeIdsQuery(std::set< int > &ids, bool ignoreChildren, bool ignoreBadSignatures, bool ignoreIntermediateNodes) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getAllOdomPoses(std::map< int, Transform > &poses, bool ignoreChildren=false, bool ignoreIntermediateNodes=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllOdomPosesQuery(std::map< int, Transform > &poses, bool ignoreChildren, bool ignoreIntermediateNodes) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getAllStatistics() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllStatisticsQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getAllStatisticsWmStates() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllStatisticsWmStatesQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getCalibration(int signatureId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getCalibrationQuery(int signatureId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getCalibrationsMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getCalibrationsMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getDatabaseVersion() constrtabmap::DBDriver
getDatabaseVersionQuery(std::string &version) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getDepthImagesMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getDepthImagesMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getEmptyTrashesTime() const (defined in rtabmap::DBDriver)rtabmap::DBDriverinline
getFeaturesMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getFeaturesMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getGridsMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getGridsMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getImagesMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getImagesMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getInvertedIndexNi(int signatureId, int &ni) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getInvertedIndexNiQuery(int signatureId, int &ni) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getLaserScanInfo(int signatureId, LaserScan &info) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLaserScanInfoQuery(int signatureId, LaserScan &info) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getLaserScansMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLaserScansMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getLastDictionarySize() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastDictionarySizeQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getLastIdQuery(const std::string &tableName, int &id, const std::string &fieldName="id") const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getLastMapId(int &mapId) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastNodeId(int &id) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastNodeIds(std::set< int > &ids) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastNodeIdsQuery(std::set< int > &ids) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getLastNodesSize() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastNodesSizeQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getLastParameters() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastParametersQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getLastWordId(int &id) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLinksMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLinksMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getLocalFeatures(int signatureId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &points, cv::Mat &descriptors) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLocalFeaturesQuery(int signatureId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &points, cv::Mat &descriptors) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getNodeData(int signatureId, SensorData &data, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodeIdByLabel(const std::string &label, int &id) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodeIdByLabelQuery(const std::string &label, int &id) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getNodeInfo(int signatureId, Transform &pose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruthPose, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodeInfoQuery(int signatureId, Transform &pose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruthPose, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getNodesMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodesMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getNodesObservingLandmark(int landmarkId, std::map< int, Link > &nodes) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodesObservingLandmarkQuery(int landmarkId, std::map< int, Link > &nodes) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getStatistics(int nodeId, double &stamp, std::vector< int > *wmState=0) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getStatisticsMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getStatisticsMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getStatisticsQuery(int nodeId, double &stamp, std::vector< int > *wmState) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getTargetVersion() constrtabmap::DBDriverinline
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
getTotalDictionarySize() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getTotalDictionarySizeQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getTotalNodesSize() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getTotalNodesSizeQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getUrl() constrtabmap::DBDriverinline
getUserDataMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getUserDataMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getWeight(int signatureId, int &weight) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getWeightQuery(int signatureId, int &weight) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
getWordsMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getWordsMemoryUsedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
isConnected() constrtabmap::DBDriver
isConnectedQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
isCreating() constUThread
isIdle() constUThread
isInMemory() constrtabmap::DBDriverinlinevirtual
isKilled() constUThread
isRunning() constUThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
join(bool killFirst=false)UThread
kill()UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
load(VWDictionary &dictionary, bool lastStateOnly=true, bool idsOnly=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
load2DMap(float &xMin, float &yMin, float &cellSize) constrtabmap::DBDriver
load2DMapQuery(float &xMin, float &yMin, float &cellSize) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
loadLastNodes(std::list< Signature * > &signatures, bool loadWordIdsOnly=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadLastNodesQuery(std::list< Signature * > &signatures, bool loadWordIdsOnly) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
loadLinks(int signatureId, std::multimap< int, Link > &links, Link::Type type=Link::kUndef) constrtabmap::DBDriver
loadLinksQuery(int signatureId, std::multimap< int, Link > &links, Link::Type type=Link::kUndef) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
loadNodeData(Signature &signature, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadNodeData(std::list< Signature * > &signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadNodeDataQuery(std::list< Signature * > &signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
loadOptimizedMesh(std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons=0, std::vector< std::vector< Eigen::Vector2f > > *texCoords=0, cv::Mat *textures=0) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadOptimizedMeshQuery(std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons, std::vector< std::vector< Eigen::Vector2f > > *texCoords, cv::Mat *textures) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
loadOptimizedPoses(Transform *lastlocalizationPose=0) constrtabmap::DBDriver
loadOptimizedPosesQuery(Transform *lastlocalizationPose=0) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
loadPreviewImage() constrtabmap::DBDriver
loadPreviewImageQuery() const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
loadQuery(VWDictionary &dictionary, bool lastStateOnly=true, bool idsOnly=false) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
loadSignature(int id, bool *loadedFromTrash=0)rtabmap::DBDriver
loadSignatures(const std::list< int > &ids, std::list< Signature * > &signatures, std::set< int > *loadedFromTrash=0, bool loadWordIdsOnly=false) (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadSignaturesQuery(const std::list< int > &ids, std::list< Signature * > &signatures, bool loadWordIdsOnly) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
loadWords(const std::set< int > &wordIds, std::list< VisualWord * > &vws) (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadWordsQuery(const std::set< int > &wordIds, std::list< VisualWord * > &vws) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
openConnection(const std::string &url, bool overwritten=false, bool readOnly=false)rtabmap::DBDriver
parseParameters(const ParametersMap &parameters)rtabmap::DBDrivervirtual
Priority enum nameUThread
removeLink(int from, int to)rtabmap::DBDriver
save2DMap(const cv::Mat &map, float xMin, float yMin, float cellSize) constrtabmap::DBDriver
save2DMapQuery(const cv::Mat &map, float xMin, float yMin, float cellSize) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
saveFlannIndex(const std::vector< unsigned char > &indexData) constrtabmap::DBDriver
saveFlannIndexQuery(const std::vector< unsigned char > &indexData) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
saveOptimizedMesh(const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) constrtabmap::DBDriver
saveOptimizedMeshQuery(const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons, const std::vector< std::vector< Eigen::Vector2f > > &texCoords, const cv::Mat &textures) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
saveOptimizedPoses(const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) constrtabmap::DBDriver
saveOptimizedPosesQuery(const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
savePreviewImage(const cv::Mat &image) constrtabmap::DBDriver
savePreviewImageQuery(const cv::Mat &image) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
saveQuery(const std::list< Signature * > &signatures)=0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
saveQuery(const std::list< VisualWord * > &words) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setPriority(Priority priority)UThread
setTimestampUpdateEnabled(bool enabled) (defined in rtabmap::DBDriver)rtabmap::DBDriverinline
start()UThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
updateCalibration(int nodeId, const std::vector< CameraModel > &models, const std::vector< StereoCameraModel > &stereoModels)rtabmap::DBDriver
updateCalibrationQuery(int nodeId, const std::vector< CameraModel > &models, const std::vector< StereoCameraModel > &stereoModels) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
updateDepthImage(int nodeId, const cv::Mat &image, const std::string &format)rtabmap::DBDriver
updateDepthImageQuery(int nodeId, const cv::Mat &image, const std::string &format) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
updateLaserScan(int nodeId, const LaserScan &scan)rtabmap::DBDriver
updateLaserScanQuery(int nodeId, const LaserScan &scan) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
updateLink(const Link &link)rtabmap::DBDriver
updateLinkQuery(const Link &link) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
updateOccupancyGrid(int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewpoint)rtabmap::DBDriver
updateOccupancyGridQuery(int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewpoint) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
updateQuery(const std::list< Signature * > &signatures, bool updateTimestamp) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
updateQuery(const std::list< VisualWord * > &words, bool updateTimestamp) const =0 (defined in rtabmap::DBDriver)rtabmap::DBDriverprotectedpure virtual
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~DBDriver() (defined in rtabmap::DBDriver)rtabmap::DBDrivervirtual
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver.html b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver.html new file mode 100644 index 00000000..44e40e93 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver.html @@ -0,0 +1,1321 @@ + + + + + + + + +RTAB-Map: rtabmap::DBDriver Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Abstract database driver for RTAB-Map maps (signatures, links, words, statistics). + More...

+ +

#include <DBDriver.h>

+
+Inheritance diagram for rtabmap::DBDriver:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::DBDriver:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual void parseParameters (const ParametersMap &parameters)
 Parse driver parameters from the map (e.g. target schema version).
 
virtual bool isInMemory () const
 True when no database file URL was set at open time.
 
const std::string & getUrl () const
 
const std::string & getTargetVersion () const
 
+void asyncSave (Signature *s)
 Queue a signature for deferred save; ownership is transferred.
 
+void asyncSave (VisualWord *vw)
 Queue a visual word for deferred save; ownership is transferred.
 
void emptyTrashes (bool async=false)
 Flush queued signatures and visual words to the database.
 
double getEmptyTrashesTime () const
 
void setTimestampUpdateEnabled (bool enabled)
 
void generateGraph (const std::string &fileName, const std::set< int > &ids=std::set< int >(), const std::map< int, Signature * > &otherSignatures=std::map< int, Signature * >())
 Export the pose graph to a Graphviz DOT file for visualization.
 
void executeNoResult (const std::string &sql) const
 Run a SQL statement that does not return result rows.
 
Direct database updates

Write node or link data immediately (not via the async trash).

+
+void addLink (const Link &link)
 Insert or replace a link in the database.
 
+void removeLink (int from, int to)
 Remove a link between two nodes.
 
+void updateLink (const Link &link)
 Update an existing link in the database.
 
void updateOccupancyGrid (int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewpoint)
 Update occupancy grid cells for a node.
 
+void updateCalibration (int nodeId, const std::vector< CameraModel > &models, const std::vector< StereoCameraModel > &stereoModels)
 Update camera calibration stored for a node.
 
void updateDepthImage (int nodeId, const cv::Mat &image, const std::string &format)
 Update the depth image stored for a node.
 
void updateLaserScan (int nodeId, const LaserScan &scan)
 Update the laser scan stored for a node.
 
Session exports and map artifacts

Statistics, preview image, optimized poses, 2D map, mesh and FLANN index.

+
+void addInfoAfterRun (int stMemSize, int lastSignAdded, int processMemUsed, int databaseMemUsed, int dictionarySize, const ParametersMap &parameters) const
 
void addStatistics (const Statistics &statistics, bool saveWmState) const
 Append a Statistics record for a processed node.
 
void savePreviewImage (const cv::Mat &image) const
 Save the map preview thumbnail in the Admin table.
 
+cv::Mat loadPreviewImage () const
 Load and uncompress the map preview thumbnail from the Admin table.
 
+void saveOptimizedPoses (const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) const
 Persist graph-optimized poses and last localization pose.
 
+std::map< int, Transform > loadOptimizedPoses (Transform *lastlocalizationPose=0) const
 Load optimized poses; optional last localization pose output.
 
+void save2DMap (const cv::Mat &map, float xMin, float yMin, float cellSize) const
 Save the assembled 2D occupancy grid and its origin metadata.
 
+cv::Mat load2DMap (float &xMin, float &yMin, float &cellSize) const
 Load the 2D map and fill origin/cell size outputs.
 
void saveOptimizedMesh (const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) const
 Persist the global optimized 3D mesh to the database.
 
+cv::Mat loadOptimizedMesh (std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons=0, std::vector< std::vector< Eigen::Vector2f > > *texCoords=0, cv::Mat *textures=0) const
 
void saveFlannIndex (const std::vector< unsigned char > &indexData) const
 Persist the visual word dictionary FLANN index (serialized blob).
 
Connection and database introspection

Mutex-protected wrappers around protected *Query() methods.

+
+bool openConnection (const std::string &url, bool overwritten=false, bool readOnly=false)
 Open or create the database at url (empty url uses an in-memory database).
 
+void closeConnection (bool save=true, const std::string &outputUrl="")
 Close the connection; optionally flush trashes and save in-memory DB to outputUrl.
 
bool isConnected () const
 
+unsigned long getMemoryUsed () const
 
std::string getDatabaseVersion () const
 
+long getNodesMemoryUsed () const
 
+long getLinksMemoryUsed () const
 
+long getImagesMemoryUsed () const
 
+long getDepthImagesMemoryUsed () const
 
+long getCalibrationsMemoryUsed () const
 
+long getGridsMemoryUsed () const
 
+long getLaserScansMemoryUsed () const
 
+long getUserDataMemoryUsed () const
 
+long getWordsMemoryUsed () const
 
+long getFeaturesMemoryUsed () const
 
+long getStatisticsMemoryUsed () const
 
+int getLastNodesSize () const
 
+int getLastDictionarySize () const
 
+int getTotalNodesSize () const
 
+int getTotalDictionarySize () const
 
+ParametersMap getLastParameters () const
 
+std::map< std::string, float > getStatistics (int nodeId, double &stamp, std::vector< int > *wmState=0) const
 
+std::map< int, std::pair< std::map< std::string, float >, double > > getAllStatistics () const
 
+std::map< int, std::vector< int > > getAllStatisticsWmStates () const
 
Load and query

Load signatures, words, links and node metadata from the database.

+
+void load (VWDictionary &dictionary, bool lastStateOnly=true, bool idsOnly=false) const
 
+void loadLastNodes (std::list< Signature * > &signatures, bool loadWordIdsOnly=false) const
 
+Signature * loadSignature (int id, bool *loadedFromTrash=0)
 Load one signature by id; caller must delete the returned pointer.
 
+void loadSignatures (const std::list< int > &ids, std::list< Signature * > &signatures, std::set< int > *loadedFromTrash=0, bool loadWordIdsOnly=false)
 
+void loadWords (const std::set< int > &wordIds, std::list< VisualWord * > &vws)
 
+void loadNodeData (Signature &signature, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const
 
+void loadNodeData (std::list< Signature * > &signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const
 
+void getNodeData (int signatureId, SensorData &data, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const
 
+bool getCalibration (int signatureId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const
 
+bool getLaserScanInfo (int signatureId, LaserScan &info) const
 
+bool getNodeInfo (int signatureId, Transform &pose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruthPose, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors) const
 
+void getLocalFeatures (int signatureId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &points, cv::Mat &descriptors) const
 
+void loadLinks (int signatureId, std::multimap< int, Link > &links, Link::Type type=Link::kUndef) const
 Load outgoing links from signatureId, optionally filtered by type.
 
+void getWeight (int signatureId, int &weight) const
 
+void getLastNodeIds (std::set< int > &ids) const
 
+void getAllNodeIds (std::set< int > &ids, bool ignoreChildren=false, bool ignoreBadSignatures=false, bool ignoreIntermediateNodes=false) const
 
+void getAllOdomPoses (std::map< int, Transform > &poses, bool ignoreChildren=false, bool ignoreIntermediateNodes=false) const
 
+void getAllLinks (std::multimap< int, Link > &links, bool ignoreNullLinks=true, bool withLandmarks=false) const
 
+void getLastNodeId (int &id) const
 
+void getLastMapId (int &mapId) const
 
+void getLastWordId (int &id) const
 
+void getInvertedIndexNi (int signatureId, int &ni) const
 
+void getNodesObservingLandmark (int landmarkId, std::map< int, Link > &nodes) const
 
+void getNodeIdByLabel (const std::string &label, int &id) const
 
+void getAllLabels (std::map< int, std::string > &labels) const
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static DBDriver * create (const ParametersMap &parameters=ParametersMap())
 Factory: returns a SQLite database driver (DBDriverSqlite3).
 
- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+ DBDriver (const ParametersMap &parameters=ParametersMap())
 Protected constructor for subclasses.
 
Backend implementation (subclass responsibility)

Pure virtual SQL/backend hooks invoked by public wrappers above.

+
+virtual bool connectDatabaseQuery (const std::string &url, bool overwritten=false, bool readOnly=false)=0
 
+virtual void disconnectDatabaseQuery (bool save=true, const std::string &outputUrl="")=0
 
+virtual bool isConnectedQuery () const =0
 
+virtual unsigned long getMemoryUsedQuery () const =0
 
+virtual bool getDatabaseVersionQuery (std::string &version) const =0
 
+virtual long getNodesMemoryUsedQuery () const =0
 
+virtual long getLinksMemoryUsedQuery () const =0
 
+virtual long getImagesMemoryUsedQuery () const =0
 
+virtual long getDepthImagesMemoryUsedQuery () const =0
 
+virtual long getCalibrationsMemoryUsedQuery () const =0
 
+virtual long getGridsMemoryUsedQuery () const =0
 
+virtual long getLaserScansMemoryUsedQuery () const =0
 
+virtual long getUserDataMemoryUsedQuery () const =0
 
+virtual long getWordsMemoryUsedQuery () const =0
 
+virtual long getFeaturesMemoryUsedQuery () const =0
 
+virtual long getStatisticsMemoryUsedQuery () const =0
 
+virtual int getLastNodesSizeQuery () const =0
 
+virtual int getLastDictionarySizeQuery () const =0
 
+virtual int getTotalNodesSizeQuery () const =0
 
+virtual int getTotalDictionarySizeQuery () const =0
 
+virtual ParametersMap getLastParametersQuery () const =0
 
+virtual std::map< std::string, float > getStatisticsQuery (int nodeId, double &stamp, std::vector< int > *wmState) const =0
 
+virtual std::map< int, std::pair< std::map< std::string, float >, double > > getAllStatisticsQuery () const =0
 
+virtual std::map< int, std::vector< int > > getAllStatisticsWmStatesQuery () const =0
 
+virtual void executeNoResultQuery (const std::string &sql) const =0
 
+virtual void getWeightQuery (int signatureId, int &weight) const =0
 
+virtual void saveQuery (const std::list< Signature * > &signatures)=0
 
+virtual void saveQuery (const std::list< VisualWord * > &words) const =0
 
+virtual void updateQuery (const std::list< Signature * > &signatures, bool updateTimestamp) const =0
 
+virtual void updateQuery (const std::list< VisualWord * > &words, bool updateTimestamp) const =0
 
+virtual void addLinkQuery (const Link &link) const =0
 
+virtual void updateLinkQuery (const Link &link) const =0
 
+virtual void updateOccupancyGridQuery (int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewpoint) const =0
 
+virtual void updateCalibrationQuery (int nodeId, const std::vector< CameraModel > &models, const std::vector< StereoCameraModel > &stereoModels) const =0
 
+virtual void updateDepthImageQuery (int nodeId, const cv::Mat &image, const std::string &format) const =0
 
+virtual void updateLaserScanQuery (int nodeId, const LaserScan &scan) const =0
 
+virtual void addStatisticsQuery (const Statistics &statistics, bool saveWmState) const =0
 
+virtual void savePreviewImageQuery (const cv::Mat &image) const =0
 
+virtual cv::Mat loadPreviewImageQuery () const =0
 
+virtual void saveOptimizedPosesQuery (const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) const =0
 
+virtual std::map< int, Transform > loadOptimizedPosesQuery (Transform *lastlocalizationPose=0) const =0
 
+virtual void save2DMapQuery (const cv::Mat &map, float xMin, float yMin, float cellSize) const =0
 
+virtual cv::Mat load2DMapQuery (float &xMin, float &yMin, float &cellSize) const =0
 
+virtual void saveOptimizedMeshQuery (const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons, const std::vector< std::vector< Eigen::Vector2f > > &texCoords, const cv::Mat &textures) const =0
 
+virtual cv::Mat loadOptimizedMeshQuery (std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons, std::vector< std::vector< Eigen::Vector2f > > *texCoords, cv::Mat *textures) const =0
 
+virtual void saveFlannIndexQuery (const std::vector< unsigned char > &indexData) const =0
 
+virtual void loadQuery (VWDictionary &dictionary, bool lastStateOnly=true, bool idsOnly=false) const =0
 
+virtual void loadLastNodesQuery (std::list< Signature * > &signatures, bool loadWordIdsOnly) const =0
 
+virtual void loadSignaturesQuery (const std::list< int > &ids, std::list< Signature * > &signatures, bool loadWordIdsOnly) const =0
 
+virtual void loadWordsQuery (const std::set< int > &wordIds, std::list< VisualWord * > &vws) const =0
 
+virtual void loadLinksQuery (int signatureId, std::multimap< int, Link > &links, Link::Type type=Link::kUndef) const =0
 
+virtual void loadNodeDataQuery (std::list< Signature * > &signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const =0
 
+virtual bool getCalibrationQuery (int signatureId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const =0
 
+virtual bool getLaserScanInfoQuery (int signatureId, LaserScan &info) const =0
 
+virtual bool getNodeInfoQuery (int signatureId, Transform &pose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruthPose, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors) const =0
 
+virtual void getLocalFeaturesQuery (int signatureId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &points, cv::Mat &descriptors) const =0
 
+virtual void getLastNodeIdsQuery (std::set< int > &ids) const =0
 
+virtual void getAllNodeIdsQuery (std::set< int > &ids, bool ignoreChildren, bool ignoreBadSignatures, bool ignoreIntermediateNodes) const =0
 
+virtual void getAllOdomPosesQuery (std::map< int, Transform > &poses, bool ignoreChildren, bool ignoreIntermediateNodes) const =0
 
+virtual void getAllLinksQuery (std::multimap< int, Link > &links, bool ignoreNullLinks, bool withLandmarks) const =0
 
+virtual void getLastIdQuery (const std::string &tableName, int &id, const std::string &fieldName="id") const =0
 
+virtual void getInvertedIndexNiQuery (int signatureId, int &ni) const =0
 
+virtual void getNodesObservingLandmarkQuery (int landmarkId, std::map< int, Link > &nodes) const =0
 
+virtual void getNodeIdByLabelQuery (const std::string &label, int &id) const =0
 
+virtual void getAllLabelsQuery (std::map< int, std::string > &labels) const =0
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+

Abstract database driver for RTAB-Map maps (signatures, links, words, statistics).

+

DBDriver is the persistence layer used by Memory, DBReader and tools that read or write .db files. The default implementation is DBDriverSqlite3, created by create().

+

The driver extends UThreadNode: pending Signature and VisualWord objects are queued with asyncSave() and flushed to the database by emptyTrashes() (also called from the background thread on closeConnection()).

+

Public methods are thread-safe where noted (mutex-protected wrappers). Subclasses implement SQL-specific logic in protected *Query() virtual methods.

+
See also
DBDriverSqlite3
+
+Memory
+ +

Definition at line 71 of file DBDriver.h.

+

Member Function Documentation

+ +

◆ create()

+ +
+
+ + + + + +
+ + + + + + + + +
static DBDriver * rtabmap::DBDriver::create (const ParametersMap & parameters = ParametersMap())
+
+static
+
+ +

Factory: returns a SQLite database driver (DBDriverSqlite3).

+
Parameters
+ + +
parametersOptional driver parameters (e.g. Parameters::kDbTargetVersion()).
+
+
+
Returns
New driver instance; caller owns the pointer.
+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriver::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Parse driver parameters from the map (e.g. target schema version).

+ +

Reimplemented in rtabmap::DBDriverSqlite3.

+ +
+
+ +

◆ isInMemory()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::DBDriver::isInMemory () const
+
+inlinevirtual
+
+ +

True when no database file URL was set at open time.

+
Note
DBDriverSqlite3 overrides this when Parameters::kDbSqlite3InMemory() is enabled.
+ +

Reimplemented in rtabmap::DBDriverSqlite3.

+ +

Definition at line 90 of file DBDriver.h.

+ +
+
+ +

◆ getUrl()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::DBDriver::getUrl () const
+
+inline
+
+
Returns
Database file path last passed to openConnection().
+ +

Definition at line 92 of file DBDriver.h.

+ +
+
+ +

◆ getTargetVersion()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::DBDriver::getTargetVersion () const
+
+inline
+
+
Returns
Target schema version for new databases (from parameters).
+ +

Definition at line 94 of file DBDriver.h.

+ +
+
+ +

◆ emptyTrashes()

+ +
+
+ + + + + + + + +
void rtabmap::DBDriver::emptyTrashes (bool async = false)
+
+ +

Flush queued signatures and visual words to the database.

+
Parameters
+ + +
asyncIf true, signal the background thread instead of flushing synchronously.
+
+
+ +
+
+ +

◆ getEmptyTrashesTime()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::DBDriver::getEmptyTrashesTime () const
+
+inline
+
+ +

Definition at line 105 of file DBDriver.h.

+ +
+
+ +

◆ setTimestampUpdateEnabled()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::DBDriver::setTimestampUpdateEnabled (bool enabled)
+
+inline
+
+ +

Definition at line 106 of file DBDriver.h.

+ +
+
+ +

◆ generateGraph()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::DBDriver::generateGraph (const std::string & fileName,
const std::set< int > & ids = std::set< int >(),
const std::map< int, Signature * > & otherSignatures = std::map< int, Signature * >() 
)
+
+ +

Export the pose graph to a Graphviz DOT file for visualization.

+

Reads nodes and links from the database (and optionally from otherSignatures not yet persisted) and writes fileName. Does not modify the database. If ids is empty, all node ids are included.

+ +
+
+ +

◆ updateOccupancyGrid()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::DBDriver::updateOccupancyGrid (int nodeId,
const cv::Mat & ground,
const cv::Mat & obstacles,
const cv::Mat & empty,
float cellSize,
const cv::Point3f & viewpoint 
)
+
+ +

Update occupancy grid cells for a node.

+
Parameters
+ + + + +
groundGround cells (raw CV_32FC2/CV_32FC3, or compressed CV_8UC1 1×N).
obstaclesObstacle cells (same formats as ground).
emptyEmpty cells (same formats as ground; ignored on DB schema < 0.16.0). Raw mats are compressed internally via SensorData::setOccupancyGrid() before writing.
+
+
+ +
+
+ +

◆ updateDepthImage()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::DBDriver::updateDepthImage (int nodeId,
const cv::Mat & image,
const std::string & format 
)
+
+ +

Update the depth image stored for a node.

+
Parameters
+ + + +
imageRaw depth image, or pre-compressed blob (CV_8UC1, single row).
formatCompression format when image is raw (e.g. ".png"); ignored if already compressed. Uncompressed images are compressed with Compression::compressImage2() before writing.
+
+
+ +
+
+ +

◆ updateLaserScan()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::DBDriver::updateLaserScan (int nodeId,
const LaserScan & scan 
)
+
+ +

Update the laser scan stored for a node.

+
Parameters
+ + +
scanUncompressed scan, or already compressed (LaserScan::isCompressed()). Uncompressed data is compressed with Compression::compressData2() before writing.
+
+
+ +
+
+ +

◆ addStatistics()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::DBDriver::addStatistics (const Statistics & statistics,
bool saveWmState 
) const
+
+ +

Append a Statistics record for a processed node.

+
Parameters
+ + + +
statisticsMetrics for Statistics::refImageId() (insert skipped if id ≤ 0 or data empty).
saveWmStateIf true and schema ≥ 0.16.2, also store compressed working-memory state.
+
+
+ +
+
+ +

◆ savePreviewImage()

+ +
+
+ + + + + + + + +
void rtabmap::DBDriver::savePreviewImage (const cv::Mat & image) const
+
+ +

Save the map preview thumbnail in the Admin table.

+
Parameters
+ + +
imageRaw image or JPEG-compressed blob (CV_8UC1, single row); empty clears it.
+
+
+
Note
Requires database schema ≥ 0.12.0.
+ +
+
+ +

◆ saveOptimizedMesh()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::DBDriver::saveOptimizedMesh (const cv::Mat & cloud,
const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > & polygons = std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(),
const std::vector< std::vector< Eigen::Vector2f > > & texCoords = std::vector< std::vector< Eigen::Vector2f > >(),
const cv::Mat & textures = cv::Mat() 
) const
+
+ +

Persist the global optimized 3D mesh to the database.

+
Parameters
+ + + + + +
cloudPoint cloud (CV_32FC1 or CV_32FC3).
polygonsOptional per-texture polygon index lists (texture → polygon → vertex indices).
texCoordsOptional UV coordinates per texture (one per polygon vertex).
texturesOptional concatenated square texture images (same size per texture).
+
+
+ +
+
+ +

◆ saveFlannIndex()

+ +
+
+ + + + + + + + +
void rtabmap::DBDriver::saveFlannIndex (const std::vector< unsigned char > & indexData) const
+
+ +

Persist the visual word dictionary FLANN index (serialized blob).

+
Parameters
+ + +
indexDataSerialized index from VWDictionary::serializeIndex(); pass empty to clear.
+
+
+
Note
Requires database schema ≥ 0.23.0. Used when Parameters::kKpFlannIndexSaved() is enabled.
+ +
+
+ +

◆ isConnected()

+ +
+
+ + + + + + + +
bool rtabmap::DBDriver::isConnected () const
+
+
Returns
True if a database connection is active.
+ +
+
+ +

◆ getDatabaseVersion()

+ +
+
+ + + + + + + +
std::string rtabmap::DBDriver::getDatabaseVersion () const
+
+
Returns
Schema version string stored in the database (e.g. "0.21.0").
+ +
+
+ +

◆ executeNoResult()

+ +
+
+ + + + + + + + +
void rtabmap::DBDriver::executeNoResult (const std::string & sql) const
+
+ +

Run a SQL statement that does not return result rows.

+

Executes sql on the open database (e.g. INSERT, UPDATE, DELETE, CREATE, PRAGMA). Thread-safe wrapper around executeNoResultQuery().

+

For reads, use the dedicated loadSignature(), loadLinks() and related query methods instead of raw SQL.

+
Parameters
+ + +
sqlComplete SQL statement (SQLite syntax for DBDriverSqlite3).
+
+
+
Note
The connection must be open (isConnected()). On failure the driver aborts with an assertion (SQLite backend).
+
Warning
sql is passed verbatim; sanitize any user-controlled values before calling.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3-members.html new file mode 100644 index 00000000..5d4d0bf3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3-members.html @@ -0,0 +1,286 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::DBDriverSqlite3 Member List
+
+
+ +

This is the complete list of members for rtabmap::DBDriverSqlite3, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_ppDbrtabmap::DBDriverSqlite3protected
_versionrtabmap::DBDriverSqlite3protected
addInfoAfterRun(int stMemSize, int lastSignAdded, int processMemUsed, int databaseMemUsed, int dictionarySize, const ParametersMap &parameters) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
addLink(const Link &link)rtabmap::DBDriver
addLinkQuery(const Link &link) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
addStatistics(const Statistics &statistics, bool saveWmState) constrtabmap::DBDriver
addStatisticsQuery(const Statistics &statistics, bool saveWmState) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
asyncSave(Signature *s)rtabmap::DBDriver
asyncSave(VisualWord *vw)rtabmap::DBDriver
closeConnection(bool save=true, const std::string &outputUrl="")rtabmap::DBDriver
connectDatabaseQuery(const std::string &url, bool overwritten=false, bool readOnly=false) (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::DBDriverstatic
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
currentThreadId() (defined in UThread)UThreadinlinestatic
DBDriver(const ParametersMap &parameters=ParametersMap())rtabmap::DBDriverprotected
DBDriverSqlite3(const ParametersMap &parameters=ParametersMap())rtabmap::DBDriverSqlite3
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
disconnectDatabaseQuery(bool save=true, const std::string &outputUrl="") (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
emptyTrashes(bool async=false)rtabmap::DBDriver
executeNoResult(const std::string &sql) constrtabmap::DBDriver
executeNoResultQuery(const std::string &sql) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
generateGraph(const std::string &fileName, const std::set< int > &ids=std::set< int >(), const std::map< int, Signature * > &otherSignatures=std::map< int, Signature * >())rtabmap::DBDriver
getAllLabels(std::map< int, std::string > &labels) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllLabelsQuery(std::map< int, std::string > &labels) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getAllLinks(std::multimap< int, Link > &links, bool ignoreNullLinks=true, bool withLandmarks=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllLinksQuery(std::multimap< int, Link > &links, bool ignoreNullLinks, bool withLandmarks) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getAllNodeIds(std::set< int > &ids, bool ignoreChildren=false, bool ignoreBadSignatures=false, bool ignoreIntermediateNodes=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllNodeIdsQuery(std::set< int > &ids, bool ignoreChildren, bool ignoreBadSignatures, bool ignoreIntermediateNodes) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getAllOdomPoses(std::map< int, Transform > &poses, bool ignoreChildren=false, bool ignoreIntermediateNodes=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllOdomPosesQuery(std::map< int, Transform > &poses, bool ignoreChildren, bool ignoreIntermediateNodes) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getAllStatistics() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllStatisticsQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getAllStatisticsWmStates() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getAllStatisticsWmStatesQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getCalibration(int signatureId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getCalibrationQuery(int signatureId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getCalibrationsMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getCalibrationsMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getDatabaseVersion() constrtabmap::DBDriver
getDatabaseVersionQuery(std::string &version) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getDepthImagesMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getDepthImagesMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getEmptyTrashesTime() const (defined in rtabmap::DBDriver)rtabmap::DBDriverinline
getFeaturesMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getFeaturesMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getGridsMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getGridsMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getImagesMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getImagesMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getInvertedIndexNi(int signatureId, int &ni) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getInvertedIndexNiQuery(int signatureId, int &ni) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getLaserScanInfo(int signatureId, LaserScan &info) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLaserScanInfoQuery(int signatureId, LaserScan &info) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getLaserScansMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLaserScansMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getLastDictionarySize() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastDictionarySizeQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getLastIdQuery(const std::string &tableName, int &id, const std::string &fieldName="id") const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getLastMapId(int &mapId) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastNodeId(int &id) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastNodeIds(std::set< int > &ids) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastNodeIdsQuery(std::set< int > &ids) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getLastNodesSize() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastNodesSizeQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getLastParameters() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLastParametersQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getLastWordId(int &id) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLinksMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLinksMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getLocalFeatures(int signatureId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &points, cv::Mat &descriptors) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getLocalFeaturesQuery(int signatureId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &points, cv::Mat &descriptors) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getNodeData(int signatureId, SensorData &data, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodeIdByLabel(const std::string &label, int &id) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodeIdByLabelQuery(const std::string &label, int &id) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getNodeInfo(int signatureId, Transform &pose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruthPose, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodeInfoQuery(int signatureId, Transform &pose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruthPose, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getNodesMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodesMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getNodesObservingLandmark(int landmarkId, std::map< int, Link > &nodes) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getNodesObservingLandmarkQuery(int landmarkId, std::map< int, Link > &nodes) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getStatistics(int nodeId, double &stamp, std::vector< int > *wmState=0) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getStatisticsMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getStatisticsMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getStatisticsQuery(int nodeId, double &stamp, std::vector< int > *wmState) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getTargetVersion() constrtabmap::DBDriverinline
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
getTotalDictionarySize() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getTotalDictionarySizeQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getTotalNodesSize() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getTotalNodesSizeQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getUrl() constrtabmap::DBDriverinline
getUserDataMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getUserDataMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getWeight(int signatureId, int &weight) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getWeightQuery(int signatureId, int &weight) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
getWordsMemoryUsed() const (defined in rtabmap::DBDriver)rtabmap::DBDriver
getWordsMemoryUsedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
isConnected() constrtabmap::DBDriver
isConnectedQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
isCreating() constUThread
isIdle() constUThread
isInMemory() constrtabmap::DBDriverSqlite3inlinevirtual
isKilled() constUThread
isRunning() constUThread
join(bool killFirst=false)UThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
load(VWDictionary &dictionary, bool lastStateOnly=true, bool idsOnly=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
load2DMap(float &xMin, float &yMin, float &cellSize) constrtabmap::DBDriver
load2DMapQuery(float &xMin, float &yMin, float &cellSize) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
loadLastNodes(std::list< Signature * > &signatures, bool loadWordIdsOnly=false) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadLastNodesQuery(std::list< Signature * > &signatures, bool loadWordIdsOnly) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
loadLinks(int signatureId, std::multimap< int, Link > &links, Link::Type type=Link::kUndef) constrtabmap::DBDriver
loadLinksQuery(int signatureId, std::multimap< int, Link > &links, Link::Type type=Link::kUndef) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
loadNodeData(Signature &signature, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadNodeData(std::list< Signature * > &signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadNodeDataQuery(std::list< Signature * > &signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
loadOptimizedMesh(std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons=0, std::vector< std::vector< Eigen::Vector2f > > *texCoords=0, cv::Mat *textures=0) const (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadOptimizedMeshQuery(std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons, std::vector< std::vector< Eigen::Vector2f > > *texCoords, cv::Mat *textures) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
loadOptimizedPoses(Transform *lastlocalizationPose=0) constrtabmap::DBDriver
loadOptimizedPosesQuery(Transform *lastlocalizationPose=0) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
loadPreviewImage() constrtabmap::DBDriver
loadPreviewImageQuery() const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
loadQuery(VWDictionary &dictionary, bool lastStateOnly=true, bool idsOnly=false) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
loadSignature(int id, bool *loadedFromTrash=0)rtabmap::DBDriver
loadSignatures(const std::list< int > &ids, std::list< Signature * > &signatures, std::set< int > *loadedFromTrash=0, bool loadWordIdsOnly=false) (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadSignaturesQuery(const std::list< int > &ids, std::list< Signature * > &signatures, bool loadWordIdsOnly) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
loadWords(const std::set< int > &wordIds, std::list< VisualWord * > &vws) (defined in rtabmap::DBDriver)rtabmap::DBDriver
loadWordsQuery(const std::set< int > &wordIds, std::list< VisualWord * > &vws) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
openConnection(const std::string &url, bool overwritten=false, bool readOnly=false)rtabmap::DBDriver
parseParameters(const ParametersMap &parameters)rtabmap::DBDriverSqlite3virtual
Priority enum nameUThread
removeLink(int from, int to)rtabmap::DBDriver
save2DMap(const cv::Mat &map, float xMin, float yMin, float cellSize) constrtabmap::DBDriver
save2DMapQuery(const cv::Mat &map, float xMin, float yMin, float cellSize) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
saveFlannIndex(const std::vector< unsigned char > &indexData) constrtabmap::DBDriver
saveFlannIndexQuery(const std::vector< unsigned char > &indexData) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
saveOptimizedMesh(const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) constrtabmap::DBDriver
saveOptimizedMeshQuery(const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons, const std::vector< std::vector< Eigen::Vector2f > > &texCoords, const cv::Mat &textures) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
saveOptimizedPoses(const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) constrtabmap::DBDriver
saveOptimizedPosesQuery(const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
savePreviewImage(const cv::Mat &image) constrtabmap::DBDriver
savePreviewImageQuery(const cv::Mat &image) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
saveQuery(const std::list< Signature * > &signatures) (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
saveQuery(const std::list< VisualWord * > &words) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setCacheSize(unsigned int cacheSize)rtabmap::DBDriverSqlite3
setDbInMemory(bool dbInMemory)rtabmap::DBDriverSqlite3
setJournalMode(int journalMode)rtabmap::DBDriverSqlite3
setPriority(Priority priority)UThread
setSynchronous(int synchronous)rtabmap::DBDriverSqlite3
setTempStore(int tempStore)rtabmap::DBDriverSqlite3
setTimestampUpdateEnabled(bool enabled) (defined in rtabmap::DBDriver)rtabmap::DBDriverinline
start()UThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
updateCalibration(int nodeId, const std::vector< CameraModel > &models, const std::vector< StereoCameraModel > &stereoModels)rtabmap::DBDriver
updateCalibrationQuery(int nodeId, const std::vector< CameraModel > &models, const std::vector< StereoCameraModel > &stereoModels) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
updateDepthImage(int nodeId, const cv::Mat &image, const std::string &format)rtabmap::DBDriver
updateDepthImageQuery(int nodeId, const cv::Mat &image, const std::string &format) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
updateLaserScan(int nodeId, const LaserScan &scan)rtabmap::DBDriver
updateLaserScanQuery(int nodeId, const LaserScan &scan) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
updateLink(const Link &link)rtabmap::DBDriver
updateLinkQuery(const Link &link) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
updateOccupancyGrid(int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewpoint)rtabmap::DBDriver
updateOccupancyGridQuery(int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewpoint) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
updateQuery(const std::list< Signature * > &signatures, bool updateTimestamp) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
updateQuery(const std::list< VisualWord * > &words, bool updateTimestamp) const (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3protectedvirtual
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~DBDriver() (defined in rtabmap::DBDriver)rtabmap::DBDrivervirtual
~DBDriverSqlite3() (defined in rtabmap::DBDriverSqlite3)rtabmap::DBDriverSqlite3virtual
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3.html b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3.html new file mode 100644 index 00000000..3017dae7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3.html @@ -0,0 +1,3278 @@ + + + + + + + + +RTAB-Map: rtabmap::DBDriverSqlite3 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::DBDriverSqlite3 Class Reference
+
+
+ +

SQLite3 implementation of DBDriver for RTAB-Map map databases. + More...

+ +

#include <DBDriverSqlite3.h>

+
+Inheritance diagram for rtabmap::DBDriverSqlite3:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::DBDriverSqlite3:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 DBDriverSqlite3 (const ParametersMap &parameters=ParametersMap())
 Construct driver with optional SQLite-specific parameters.
 
virtual void parseParameters (const ParametersMap &parameters)
 Apply SQLite parameters from the map; forwards to DBDriver::parseParameters().
 
virtual bool isInMemory () const
 True when the database runs in RAM instead of on disk.
 
+void setDbInMemory (bool dbInMemory)
 Enable or disable in-memory mode. If connected, the connection is closed and reopened with the new mode.
 
void setJournalMode (int journalMode)
 Set SQLite rollback journal mode (PRAGMA journal_mode).
 
void setCacheSize (unsigned int cacheSize)
 Set the number of database pages kept in SQLite's page cache (PRAGMA cache_size).
 
void setSynchronous (int synchronous)
 Set how aggressively SQLite syncs the database file to disk (PRAGMA synchronous).
 
void setTempStore (int tempStore)
 Set where SQLite stores temporary tables and indices (PRAGMA temp_store).
 
- Public Member Functions inherited from rtabmap::DBDriver
const std::string & getUrl () const
 
const std::string & getTargetVersion () const
 
+void asyncSave (Signature *s)
 Queue a signature for deferred save; ownership is transferred.
 
+void asyncSave (VisualWord *vw)
 Queue a visual word for deferred save; ownership is transferred.
 
void emptyTrashes (bool async=false)
 Flush queued signatures and visual words to the database.
 
double getEmptyTrashesTime () const
 
void setTimestampUpdateEnabled (bool enabled)
 
void generateGraph (const std::string &fileName, const std::set< int > &ids=std::set< int >(), const std::map< int, Signature * > &otherSignatures=std::map< int, Signature * >())
 Export the pose graph to a Graphviz DOT file for visualization.
 
void executeNoResult (const std::string &sql) const
 Run a SQL statement that does not return result rows.
 
+void addLink (const Link &link)
 Insert or replace a link in the database.
 
+void removeLink (int from, int to)
 Remove a link between two nodes.
 
+void updateLink (const Link &link)
 Update an existing link in the database.
 
void updateOccupancyGrid (int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewpoint)
 Update occupancy grid cells for a node.
 
+void updateCalibration (int nodeId, const std::vector< CameraModel > &models, const std::vector< StereoCameraModel > &stereoModels)
 Update camera calibration stored for a node.
 
void updateDepthImage (int nodeId, const cv::Mat &image, const std::string &format)
 Update the depth image stored for a node.
 
void updateLaserScan (int nodeId, const LaserScan &scan)
 Update the laser scan stored for a node.
 
+void addInfoAfterRun (int stMemSize, int lastSignAdded, int processMemUsed, int databaseMemUsed, int dictionarySize, const ParametersMap &parameters) const
 
void addStatistics (const Statistics &statistics, bool saveWmState) const
 Append a Statistics record for a processed node.
 
void savePreviewImage (const cv::Mat &image) const
 Save the map preview thumbnail in the Admin table.
 
+cv::Mat loadPreviewImage () const
 Load and uncompress the map preview thumbnail from the Admin table.
 
+void saveOptimizedPoses (const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) const
 Persist graph-optimized poses and last localization pose.
 
+std::map< int, Transform > loadOptimizedPoses (Transform *lastlocalizationPose=0) const
 Load optimized poses; optional last localization pose output.
 
+void save2DMap (const cv::Mat &map, float xMin, float yMin, float cellSize) const
 Save the assembled 2D occupancy grid and its origin metadata.
 
+cv::Mat load2DMap (float &xMin, float &yMin, float &cellSize) const
 Load the 2D map and fill origin/cell size outputs.
 
void saveOptimizedMesh (const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) const
 Persist the global optimized 3D mesh to the database.
 
+cv::Mat loadOptimizedMesh (std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons=0, std::vector< std::vector< Eigen::Vector2f > > *texCoords=0, cv::Mat *textures=0) const
 
void saveFlannIndex (const std::vector< unsigned char > &indexData) const
 Persist the visual word dictionary FLANN index (serialized blob).
 
+bool openConnection (const std::string &url, bool overwritten=false, bool readOnly=false)
 Open or create the database at url (empty url uses an in-memory database).
 
+void closeConnection (bool save=true, const std::string &outputUrl="")
 Close the connection; optionally flush trashes and save in-memory DB to outputUrl.
 
bool isConnected () const
 
+unsigned long getMemoryUsed () const
 
std::string getDatabaseVersion () const
 
+long getNodesMemoryUsed () const
 
+long getLinksMemoryUsed () const
 
+long getImagesMemoryUsed () const
 
+long getDepthImagesMemoryUsed () const
 
+long getCalibrationsMemoryUsed () const
 
+long getGridsMemoryUsed () const
 
+long getLaserScansMemoryUsed () const
 
+long getUserDataMemoryUsed () const
 
+long getWordsMemoryUsed () const
 
+long getFeaturesMemoryUsed () const
 
+long getStatisticsMemoryUsed () const
 
+int getLastNodesSize () const
 
+int getLastDictionarySize () const
 
+int getTotalNodesSize () const
 
+int getTotalDictionarySize () const
 
+ParametersMap getLastParameters () const
 
+std::map< std::string, float > getStatistics (int nodeId, double &stamp, std::vector< int > *wmState=0) const
 
+std::map< int, std::pair< std::map< std::string, float >, double > > getAllStatistics () const
 
+std::map< int, std::vector< int > > getAllStatisticsWmStates () const
 
+void load (VWDictionary &dictionary, bool lastStateOnly=true, bool idsOnly=false) const
 
+void loadLastNodes (std::list< Signature * > &signatures, bool loadWordIdsOnly=false) const
 
+Signature * loadSignature (int id, bool *loadedFromTrash=0)
 Load one signature by id; caller must delete the returned pointer.
 
+void loadSignatures (const std::list< int > &ids, std::list< Signature * > &signatures, std::set< int > *loadedFromTrash=0, bool loadWordIdsOnly=false)
 
+void loadWords (const std::set< int > &wordIds, std::list< VisualWord * > &vws)
 
+void loadNodeData (Signature &signature, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const
 
+void loadNodeData (std::list< Signature * > &signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const
 
+void getNodeData (int signatureId, SensorData &data, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const
 
+bool getCalibration (int signatureId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const
 
+bool getLaserScanInfo (int signatureId, LaserScan &info) const
 
+bool getNodeInfo (int signatureId, Transform &pose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruthPose, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors) const
 
+void getLocalFeatures (int signatureId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &points, cv::Mat &descriptors) const
 
+void loadLinks (int signatureId, std::multimap< int, Link > &links, Link::Type type=Link::kUndef) const
 Load outgoing links from signatureId, optionally filtered by type.
 
+void getWeight (int signatureId, int &weight) const
 
+void getLastNodeIds (std::set< int > &ids) const
 
+void getAllNodeIds (std::set< int > &ids, bool ignoreChildren=false, bool ignoreBadSignatures=false, bool ignoreIntermediateNodes=false) const
 
+void getAllOdomPoses (std::map< int, Transform > &poses, bool ignoreChildren=false, bool ignoreIntermediateNodes=false) const
 
+void getAllLinks (std::multimap< int, Link > &links, bool ignoreNullLinks=true, bool withLandmarks=false) const
 
+void getLastNodeId (int &id) const
 
+void getLastMapId (int &mapId) const
 
+void getLastWordId (int &id) const
 
+void getInvertedIndexNi (int signatureId, int &ni) const
 
+void getNodesObservingLandmark (int landmarkId, std::map< int, Link > &nodes) const
 
+void getNodeIdByLabel (const std::string &label, int &id) const
 
+void getAllLabels (std::map< int, std::string > &labels) const
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual bool connectDatabaseQuery (const std::string &url, bool overwritten=false, bool readOnly=false)
 
virtual void disconnectDatabaseQuery (bool save=true, const std::string &outputUrl="")
 
virtual bool isConnectedQuery () const
 
virtual unsigned long getMemoryUsedQuery () const
 
virtual bool getDatabaseVersionQuery (std::string &version) const
 
virtual long getNodesMemoryUsedQuery () const
 
virtual long getLinksMemoryUsedQuery () const
 
virtual long getImagesMemoryUsedQuery () const
 
virtual long getDepthImagesMemoryUsedQuery () const
 
virtual long getCalibrationsMemoryUsedQuery () const
 
virtual long getGridsMemoryUsedQuery () const
 
virtual long getLaserScansMemoryUsedQuery () const
 
virtual long getUserDataMemoryUsedQuery () const
 
virtual long getWordsMemoryUsedQuery () const
 
virtual long getFeaturesMemoryUsedQuery () const
 
virtual long getStatisticsMemoryUsedQuery () const
 
virtual int getLastNodesSizeQuery () const
 
virtual int getLastDictionarySizeQuery () const
 
virtual int getTotalNodesSizeQuery () const
 
virtual int getTotalDictionarySizeQuery () const
 
virtual ParametersMap getLastParametersQuery () const
 
virtual std::map< std::string, float > getStatisticsQuery (int nodeId, double &stamp, std::vector< int > *wmState) const
 
virtual std::map< int, std::pair< std::map< std::string, float >, double > > getAllStatisticsQuery () const
 
virtual std::map< int, std::vector< int > > getAllStatisticsWmStatesQuery () const
 
virtual void executeNoResultQuery (const std::string &sql) const
 
virtual void getWeightQuery (int signatureId, int &weight) const
 
virtual void saveQuery (const std::list< Signature * > &signatures)
 
virtual void saveQuery (const std::list< VisualWord * > &words) const
 
virtual void updateQuery (const std::list< Signature * > &signatures, bool updateTimestamp) const
 
virtual void updateQuery (const std::list< VisualWord * > &words, bool updateTimestamp) const
 
virtual void addLinkQuery (const Link &link) const
 
virtual void updateLinkQuery (const Link &link) const
 
virtual void updateOccupancyGridQuery (int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewpoint) const
 
virtual void updateCalibrationQuery (int nodeId, const std::vector< CameraModel > &models, const std::vector< StereoCameraModel > &stereoModels) const
 
virtual void updateDepthImageQuery (int nodeId, const cv::Mat &image, const std::string &format) const
 
void updateLaserScanQuery (int nodeId, const LaserScan &scan) const
 
virtual void addStatisticsQuery (const Statistics &statistics, bool saveWmState) const
 
virtual void savePreviewImageQuery (const cv::Mat &image) const
 
virtual cv::Mat loadPreviewImageQuery () const
 
virtual void saveOptimizedPosesQuery (const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) const
 
virtual std::map< int, Transform > loadOptimizedPosesQuery (Transform *lastlocalizationPose=0) const
 
virtual void save2DMapQuery (const cv::Mat &map, float xMin, float yMin, float cellSize) const
 
virtual cv::Mat load2DMapQuery (float &xMin, float &yMin, float &cellSize) const
 
virtual void saveOptimizedMeshQuery (const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons, const std::vector< std::vector< Eigen::Vector2f > > &texCoords, const cv::Mat &textures) const
 
virtual cv::Mat loadOptimizedMeshQuery (std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons, std::vector< std::vector< Eigen::Vector2f > > *texCoords, cv::Mat *textures) const
 
virtual void saveFlannIndexQuery (const std::vector< unsigned char > &indexData) const
 
virtual void loadQuery (VWDictionary &dictionary, bool lastStateOnly=true, bool idsOnly=false) const
 
virtual void loadLastNodesQuery (std::list< Signature * > &signatures, bool loadWordIdsOnly) const
 
virtual void loadSignaturesQuery (const std::list< int > &ids, std::list< Signature * > &signatures, bool loadWordIdsOnly) const
 
virtual void loadWordsQuery (const std::set< int > &wordIds, std::list< VisualWord * > &vws) const
 
virtual void loadLinksQuery (int signatureId, std::multimap< int, Link > &links, Link::Type type=Link::kUndef) const
 
virtual void loadNodeDataQuery (std::list< Signature * > &signatures, bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true) const
 
virtual bool getCalibrationQuery (int signatureId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const
 
virtual bool getLaserScanInfoQuery (int signatureId, LaserScan &info) const
 
virtual bool getNodeInfoQuery (int signatureId, Transform &pose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruthPose, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors) const
 
virtual void getLocalFeaturesQuery (int signatureId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &points, cv::Mat &descriptors) const
 
virtual void getLastNodeIdsQuery (std::set< int > &ids) const
 
virtual void getAllNodeIdsQuery (std::set< int > &ids, bool ignoreChildren, bool ignoreBadSignatures, bool ignoreIntermediateNodes) const
 
virtual void getAllOdomPosesQuery (std::map< int, Transform > &poses, bool ignoreChildren, bool ignoreIntermediateNodes) const
 
virtual void getAllLinksQuery (std::multimap< int, Link > &links, bool ignoreNullLinks, bool withLandmarks) const
 
virtual void getLastIdQuery (const std::string &tableName, int &id, const std::string &fieldName="id") const
 
virtual void getInvertedIndexNiQuery (int signatureId, int &ni) const
 
virtual void getNodesObservingLandmarkQuery (int landmarkId, std::map< int, Link > &nodes) const
 
virtual void getNodeIdByLabelQuery (const std::string &label, int &id) const
 
virtual void getAllLabelsQuery (std::map< int, std::string > &labels) const
 
- Protected Member Functions inherited from rtabmap::DBDriver
+ DBDriver (const ParametersMap &parameters=ParametersMap())
 Protected constructor for subclasses.
 
+ + + + + + + +

+Protected Attributes

sqlite3 * _ppDb
 Open SQLite connection (null when disconnected)
 
std::string _version
 Schema version read from the database.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
- Static Public Member Functions inherited from rtabmap::DBDriver
static DBDriver * create (const ParametersMap &parameters=ParametersMap())
 Factory: returns a SQLite database driver (DBDriverSqlite3).
 
- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+

SQLite3 implementation of DBDriver for RTAB-Map map databases.

+

This is the default driver returned by DBDriver::create(). It stores signatures, links, visual words, statistics and sensor payloads in a single .db file using the SQLite C API.

+

Storage modes

    +
  • File-backed (default): the database is read/written directly on disk at getUrl().
  • +
  • In-memory: when isInMemory() is true, SQLite uses :memory: and the file at getUrl() (if any) is loaded at open and optionally saved on closeConnection().
  • +
+

SQLite PRAGMA tuning (applied on connect and when setters are called while connected):

+

Configure via Parameters::kDbSqlite3InMemory(), Parameters::kDbSqlite3CacheSize(), Parameters::kDbSqlite3JournalMode(), Parameters::kDbSqlite3Synchronous() and Parameters::kDbSqlite3TempStore(), or call the setters directly.

+
See also
DBDriver
+
+DBDriver::create()
+ +

Definition at line 70 of file DBDriverSqlite3.h.

+

Constructor & Destructor Documentation

+ +

◆ DBDriverSqlite3()

+ +
+
+ + + + + + + + +
rtabmap::DBDriverSqlite3::DBDriverSqlite3 (const ParametersMap & parameters = ParametersMap())
+
+ +

Construct driver with optional SQLite-specific parameters.

+
Parameters
+ + +
parametersMap of parameters (see class description).
+
+
+ +
+
+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Apply SQLite parameters from the map; forwards to DBDriver::parseParameters().

+ +

Reimplemented from rtabmap::DBDriver.

+ +
+
+ +

◆ isInMemory()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::DBDriverSqlite3::isInMemory () const
+
+inlinevirtual
+
+ +

True when the database runs in RAM instead of on disk.

+
Returns
True if getUrl() is empty or setDbInMemory(true) was used.
+ +

Reimplemented from rtabmap::DBDriver.

+ +

Definition at line 85 of file DBDriverSqlite3.h.

+ +
+
+ +

◆ setJournalMode()

+ +
+
+ + + + + + + + +
void rtabmap::DBDriverSqlite3::setJournalMode (int journalMode)
+
+ +

Set SQLite rollback journal mode (PRAGMA journal_mode).

+

Controls how SQLite stores the transaction journal used for atomic commit and rollback. See https://www.sqlite.org/pragma.html#pragma_journal_mode

+
Parameters
+ + +
journalModeAccepted values (invalid values are ignored). RTAB-Map default: Parameters::defaultDbSqlite3JournalMode() = 3 (MEMORY) (Parameters::kDbSqlite3JournalMode()).
    +
  • 0 — DELETE (SQLite default): the journal file is deleted at the end of each transaction. Good general-purpose balance of safety and speed.
  • +
  • 1 — TRUNCATE: the journal is truncated to zero length instead of being unlinked; can be faster on some filesystems than DELETE.
  • +
  • 2 — PERSIST: the journal file is not deleted; only its header is zeroed after commit, reducing create/delete overhead at the cost of always keeping a journal file on disk.
  • +
  • 3 — MEMORY (RTAB-Map default): the journal is held in RAM only (not written to disk). Faster, but the database cannot be rolled back after a crash and may corrupt if the process dies mid-write.
  • +
  • 4 — OFF: no rollback journal. Fastest, but a crash or power loss during a write can leave the database inconsistent; transactions cannot be rolled back atomically.
  • +
+
+
+
+ +
+
+ +

◆ setCacheSize()

+ +
+
+ + + + + + + + +
void rtabmap::DBDriverSqlite3::setCacheSize (unsigned int cacheSize)
+
+ +

Set the number of database pages kept in SQLite's page cache (PRAGMA cache_size).

+

A larger cache reduces disk I/O when the working set fits in memory. The effective memory is approximately cacheSize * page_size bytes (page size is usually 4096 bytes unless changed with PRAGMA page_size). Only positive values are used (page count); see https://www.sqlite.org/pragma.html#pragma_cache_size

+
Parameters
+ + +
cacheSizeNumber of pages to cache. RTAB-Map default: Parameters::defaultDbSqlite3CacheSize() = 10000 (Parameters::kDbSqlite3CacheSize()).
+
+
+ +
+
+ +

◆ setSynchronous()

+ +
+
+ + + + + + + + +
void rtabmap::DBDriverSqlite3::setSynchronous (int synchronous)
+
+ +

Set how aggressively SQLite syncs the database file to disk (PRAGMA synchronous).

+

Trade-off between durability after a crash or power loss and write performance. See https://www.sqlite.org/pragma.html#pragma_synchronous

+
Parameters
+ + +
synchronousAccepted values (invalid values are ignored). RTAB-Map default: Parameters::defaultDbSqlite3Synchronous() = 0 (OFF) (Parameters::kDbSqlite3Synchronous()).
    +
  • 0 — OFF (RTAB-Map default): SQLite does not wait for data to reach persistent storage. Fastest; a system crash or power loss during a transaction may corrupt the database.
  • +
  • 1 — NORMAL: syncs at the most critical moments (SQLite default in many builds). A crash may lose the last transaction but the database file structure usually stays valid.
  • +
  • 2 — FULL: syncs after every transaction commit. Slowest; strongest guarantee that a committed transaction survives a power loss (when the OS honors fsync).
  • +
+
+
+
+ +
+
+ +

◆ setTempStore()

+ +
+
+ + + + + + + + +
void rtabmap::DBDriverSqlite3::setTempStore (int tempStore)
+
+ +

Set where SQLite stores temporary tables and indices (PRAGMA temp_store).

+

Affects internal temp storage used for some queries and operations, not RTAB-Map map data. See https://www.sqlite.org/pragma.html#pragma_temp_store

+
Parameters
+ + +
tempStoreAccepted values (invalid values are ignored). RTAB-Map default: Parameters::defaultDbSqlite3TempStore() = 2 (MEMORY) (Parameters::kDbSqlite3TempStore()).
    +
  • 0 — DEFAULT: use SQLite's compile-time default (often FILE, i.e. on-disk temp files).
  • +
  • 1 — FILE: store temporary tables and indices in temporary files in the directory given by PRAGMA temp_store_directory or the system temp folder.
  • +
  • 2 — MEMORY (RTAB-Map default): store temporary tables and indices in RAM. Can speed up heavy queries but increases memory use; large temp structures may still spill to disk depending on build.
  • +
+
+
+
+ +
+
+ +

◆ connectDatabaseQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::DBDriverSqlite3::connectDatabaseQuery (const std::string & url,
bool overwritten = false,
bool readOnly = false 
)
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ disconnectDatabaseQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::disconnectDatabaseQuery (bool save = true,
const std::string & outputUrl = "" 
)
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ isConnectedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::DBDriverSqlite3::isConnectedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned long rtabmap::DBDriverSqlite3::getMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getDatabaseVersionQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool rtabmap::DBDriverSqlite3::getDatabaseVersionQuery (std::string & version) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getNodesMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getNodesMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getLinksMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getLinksMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getImagesMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getImagesMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getDepthImagesMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getDepthImagesMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getCalibrationsMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getCalibrationsMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getGridsMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getGridsMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getLaserScansMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getLaserScansMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getUserDataMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getUserDataMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getWordsMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getWordsMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getFeaturesMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getFeaturesMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getStatisticsMemoryUsedQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual long rtabmap::DBDriverSqlite3::getStatisticsMemoryUsedQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getLastNodesSizeQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int rtabmap::DBDriverSqlite3::getLastNodesSizeQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getLastDictionarySizeQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int rtabmap::DBDriverSqlite3::getLastDictionarySizeQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getTotalNodesSizeQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int rtabmap::DBDriverSqlite3::getTotalNodesSizeQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getTotalDictionarySizeQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int rtabmap::DBDriverSqlite3::getTotalDictionarySizeQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getLastParametersQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual ParametersMap rtabmap::DBDriverSqlite3::getLastParametersQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getStatisticsQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< std::string, float > rtabmap::DBDriverSqlite3::getStatisticsQuery (int nodeId,
double & stamp,
std::vector< int > * wmState 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getAllStatisticsQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::map< int, std::pair< std::map< std::string, float >, double > > rtabmap::DBDriverSqlite3::getAllStatisticsQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getAllStatisticsWmStatesQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::map< int, std::vector< int > > rtabmap::DBDriverSqlite3::getAllStatisticsWmStatesQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ executeNoResultQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::executeNoResultQuery (const std::string & sql) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getWeightQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getWeightQuery (int signatureId,
int & weight 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ saveQuery() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::saveQuery (const std::list< Signature * > & signatures)
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ saveQuery() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::saveQuery (const std::list< VisualWord * > & words) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ updateQuery() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::updateQuery (const std::list< Signature * > & signatures,
bool updateTimestamp 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ updateQuery() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::updateQuery (const std::list< VisualWord * > & words,
bool updateTimestamp 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ addLinkQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::addLinkQuery (const Link & link) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ updateLinkQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::updateLinkQuery (const Link & link) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ updateOccupancyGridQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::updateOccupancyGridQuery (int nodeId,
const cv::Mat & ground,
const cv::Mat & obstacles,
const cv::Mat & empty,
float cellSize,
const cv::Point3f & viewpoint 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ updateCalibrationQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::updateCalibrationQuery (int nodeId,
const std::vector< CameraModel > & models,
const std::vector< StereoCameraModel > & stereoModels 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ updateDepthImageQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::updateDepthImageQuery (int nodeId,
const cv::Mat & image,
const std::string & format 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ updateLaserScanQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void rtabmap::DBDriverSqlite3::updateLaserScanQuery (int nodeId,
const LaserScan & scan 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ addStatisticsQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::addStatisticsQuery (const Statistics & statistics,
bool saveWmState 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ savePreviewImageQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::savePreviewImageQuery (const cv::Mat & image) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ loadPreviewImageQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual cv::Mat rtabmap::DBDriverSqlite3::loadPreviewImageQuery () const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ saveOptimizedPosesQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::saveOptimizedPosesQuery (const std::map< int, Transform > & optimizedPoses,
const Transform & lastlocalizationPose 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ loadOptimizedPosesQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::map< int, Transform > rtabmap::DBDriverSqlite3::loadOptimizedPosesQuery (Transform * lastlocalizationPose = 0) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ save2DMapQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::save2DMapQuery (const cv::Mat & map,
float xMin,
float yMin,
float cellSize 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ load2DMapQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual cv::Mat rtabmap::DBDriverSqlite3::load2DMapQuery (float & xMin,
float & yMin,
float & cellSize 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ saveOptimizedMeshQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::saveOptimizedMeshQuery (const cv::Mat & cloud,
const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > & polygons,
const std::vector< std::vector< Eigen::Vector2f > > & texCoords,
const cv::Mat & textures 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ loadOptimizedMeshQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual cv::Mat rtabmap::DBDriverSqlite3::loadOptimizedMeshQuery (std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > * polygons,
std::vector< std::vector< Eigen::Vector2f > > * texCoords,
cv::Mat * textures 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ saveFlannIndexQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::saveFlannIndexQuery (const std::vector< unsigned char > & indexData) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ loadQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::loadQuery (VWDictionary & dictionary,
bool lastStateOnly = true,
bool idsOnly = false 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ loadLastNodesQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::loadLastNodesQuery (std::list< Signature * > & signatures,
bool loadWordIdsOnly 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ loadSignaturesQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::loadSignaturesQuery (const std::list< int > & ids,
std::list< Signature * > & signatures,
bool loadWordIdsOnly 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ loadWordsQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::loadWordsQuery (const std::set< int > & wordIds,
std::list< VisualWord * > & vws 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ loadLinksQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::loadLinksQuery (int signatureId,
std::multimap< int, Link > & links,
Link::Type type = Link::kUndef 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ loadNodeDataQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::loadNodeDataQuery (std::list< Signature * > & signatures,
bool images = true,
bool scan = true,
bool userData = true,
bool occupancyGrid = true 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getCalibrationQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::DBDriverSqlite3::getCalibrationQuery (int signatureId,
std::vector< CameraModel > & models,
std::vector< StereoCameraModel > & stereoModels 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getLaserScanInfoQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::DBDriverSqlite3::getLaserScanInfoQuery (int signatureId,
LaserScan & info 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getNodeInfoQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::DBDriverSqlite3::getNodeInfoQuery (int signatureId,
Transform & pose,
int & mapId,
int & weight,
std::string & label,
double & stamp,
Transform & groundTruthPose,
std::vector< float > & velocity,
GPS & gps,
EnvSensors & sensors 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getLocalFeaturesQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getLocalFeaturesQuery (int signatureId,
std::multimap< int, int > & words,
std::vector< cv::KeyPoint > & keypoints,
std::vector< cv::Point3f > & points,
cv::Mat & descriptors 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getLastNodeIdsQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getLastNodeIdsQuery (std::set< int > & ids) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getAllNodeIdsQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getAllNodeIdsQuery (std::set< int > & ids,
bool ignoreChildren,
bool ignoreBadSignatures,
bool ignoreIntermediateNodes 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getAllOdomPosesQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getAllOdomPosesQuery (std::map< int, Transform > & poses,
bool ignoreChildren,
bool ignoreIntermediateNodes 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getAllLinksQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getAllLinksQuery (std::multimap< int, Link > & links,
bool ignoreNullLinks,
bool withLandmarks 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getLastIdQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getLastIdQuery (const std::string & tableName,
int & id,
const std::string & fieldName = "id" 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getInvertedIndexNiQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getInvertedIndexNiQuery (int signatureId,
int & ni 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getNodesObservingLandmarkQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getNodesObservingLandmarkQuery (int landmarkId,
std::map< int, Link > & nodes 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getNodeIdByLabelQuery()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getNodeIdByLabelQuery (const std::string & label,
int & id 
) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+ +

◆ getAllLabelsQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::DBDriverSqlite3::getAllLabelsQuery (std::map< int, std::string > & labels) const
+
+protectedvirtual
+
+ +

Implements rtabmap::DBDriver.

+ +
+
+

Member Data Documentation

+ +

◆ _ppDb

+ +
+
+ + + + + +
+ + + + +
sqlite3* rtabmap::DBDriverSqlite3::_ppDb
+
+protected
+
+ +

Open SQLite connection (null when disconnected)

+ +

Definition at line 307 of file DBDriverSqlite3.h.

+ +
+
+ +

◆ _version

+ +
+
+ + + + + +
+ + + + +
std::string rtabmap::DBDriverSqlite3::_version
+
+protected
+
+ +

Schema version read from the database.

+ +

Definition at line 308 of file DBDriverSqlite3.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.map new file mode 100644 index 00000000..3f6f38f0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.md5 new file mode 100644 index 00000000..5e9a6bda --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.md5 @@ -0,0 +1 @@ +bdd0bdfe5df4b340d3db97667ffa2ad9 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..79579002c06052c4855390146f312802f5cf6470 GIT binary patch literal 9517 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 Nzj{lpM8zWHzX6*F{8In` literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.map new file mode 100644 index 00000000..3f6f38f0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.md5 new file mode 100644 index 00000000..5e9a6bda --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.md5 @@ -0,0 +1 @@ +bdd0bdfe5df4b340d3db97667ffa2ad9 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriverSqlite3__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..79579002c06052c4855390146f312802f5cf6470 GIT binary patch literal 9517 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 Nzj{lpM8zWHzX6*F{8In` literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.map new file mode 100644 index 00000000..f8a4d40c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.md5 new file mode 100644 index 00000000..2f28aaa5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.md5 @@ -0,0 +1 @@ +522aae097c7f426cfd8582030669d6b1 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3ad40c6b3235757ef2993fe00f39b1257fa339 GIT binary patch literal 6375 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 VxG+5t{%Z{AzWO7zvb$Dc{{eCvDt!O| literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.map new file mode 100644 index 00000000..fb9f46db --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.md5 new file mode 100644 index 00000000..343bddcf --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.md5 @@ -0,0 +1 @@ +4d977177fc99ad3b85224bb032e5a251 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1DBDriver__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5b08b556131174c704d324e2a53fdde93b55acda GIT binary patch literal 9596 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBReader-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader-members.html new file mode 100644 index 00000000..1b5b49c9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader-members.html @@ -0,0 +1,120 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::DBReader Member List
+
+
+ +

This is the complete list of members for rtabmap::DBReader, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Camera(float imageRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Cameraprotected
captureImage(SensorCaptureInfo *info=0) (defined in rtabmap::DBReader)rtabmap::DBReaderprotectedvirtual
DBReader(const std::string &databasePath, float frameRate=0.0f, bool odometryIgnored=false, bool ignoreGoalDelay=false, bool goalsIgnored=false, int startId=0, const std::vector< unsigned int > &cameraIndices=std::vector< unsigned int >(), int stopId=0, bool intermediateNodesIgnored=false, bool landmarksIgnored=false, bool featuresIgnored=false, int startMapId=0, int stopMapId=-1, bool priorsIgnored=false, bool imuIgnored=false, bool intermediateNodesAreNormalNodes=false, const std::vector< Transform > &cameraLocalTransformOverrides=std::vector< Transform >()) (defined in rtabmap::DBReader)rtabmap::DBReader
DBReader(const std::list< std::string > &databasePaths, float frameRate=0.0f, bool odometryIgnored=false, bool ignoreGoalDelay=false, bool goalsIgnored=false, int startId=0, const std::vector< unsigned int > &cameraIndices=std::vector< unsigned int >(), int stopId=0, bool intermediateNodesIgnored=false, bool landmarksIgnored=false, bool featuresIgnored=false, int startMapId=0, int stopMapId=-1, bool priorsIgnored=false, bool imuIgnored=false, bool intermediateNodesAreNormalNodes=false, const std::vector< Transform > &cameraLocalTransformOverrides=std::vector< Transform >()) (defined in rtabmap::DBReader)rtabmap::DBReader
driver() const (defined in rtabmap::DBReader)rtabmap::DBReaderinline
getFrameRate() constrtabmap::SensorCaptureinline
getImageRate() const (defined in rtabmap::Camera)rtabmap::Camerainline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::DBReadervirtual
getSerial() constrtabmap::DBReadervirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")rtabmap::DBReadervirtual
initFromFile(const std::string &calibrationPath) (defined in rtabmap::Camera)rtabmap::Camera
isCalibrated() const (defined in rtabmap::DBReader)rtabmap::DBReadervirtual
isInterIMUPublishing() const (defined in rtabmap::Camera)rtabmap::Camerainline
odomProvided() constrtabmap::DBReaderinlinevirtual
postInterIMU(const IMU &imu, double stamp) (defined in rtabmap::Camera)rtabmap::Cameraprotected
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setImageRate(float imageRate) (defined in rtabmap::Camera)rtabmap::Camerainline
setInterIMUPublishing(bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false) (defined in rtabmap::Camera)rtabmap::Camera
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeImage(SensorCaptureInfo *info=0) (defined in rtabmap::Camera)rtabmap::Camerainline
~Camera() (defined in rtabmap::Camera)rtabmap::Cameravirtual
~DBReader() (defined in rtabmap::DBReader)rtabmap::DBReadervirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBReader.html b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader.html new file mode 100644 index 00000000..d9155cf1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader.html @@ -0,0 +1,473 @@ + + + + + + + + +RTAB-Map: rtabmap::DBReader Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::DBReader Class Reference
+
+
+
+Inheritance diagram for rtabmap::DBReader:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::DBReader:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ DBReader (const std::string &databasePath, float frameRate=0.0f, bool odometryIgnored=false, bool ignoreGoalDelay=false, bool goalsIgnored=false, int startId=0, const std::vector< unsigned int > &cameraIndices=std::vector< unsigned int >(), int stopId=0, bool intermediateNodesIgnored=false, bool landmarksIgnored=false, bool featuresIgnored=false, int startMapId=0, int stopMapId=-1, bool priorsIgnored=false, bool imuIgnored=false, bool intermediateNodesAreNormalNodes=false, const std::vector< Transform > &cameraLocalTransformOverrides=std::vector< Transform >())
 
+ DBReader (const std::list< std::string > &databasePaths, float frameRate=0.0f, bool odometryIgnored=false, bool ignoreGoalDelay=false, bool goalsIgnored=false, int startId=0, const std::vector< unsigned int > &cameraIndices=std::vector< unsigned int >(), int stopId=0, bool intermediateNodesIgnored=false, bool landmarksIgnored=false, bool featuresIgnored=false, int startMapId=0, int stopMapId=-1, bool priorsIgnored=false, bool imuIgnored=false, bool intermediateNodesAreNormalNodes=false, const std::vector< Transform > &cameraLocalTransformOverrides=std::vector< Transform >())
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")
 Initializes the sensor.
 
virtual bool isCalibrated () const
 
virtual std::string getSerial () const
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
const DBDriver * driver () const
 
- Public Member Functions inherited from rtabmap::Camera
SensorData takeImage (SensorCaptureInfo *info=0)
 
float getImageRate () const
 
void setImageRate (float imageRate)
 
+void setInterIMUPublishing (bool enabled, IMUFilter *filter=0, bool baseFrameConversion=false)
 
bool isInterIMUPublishing () const
 
+bool initFromFile (const std::string &calibrationPath)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureImage (SensorCaptureInfo *info=0)
 
- Protected Member Functions inherited from rtabmap::Camera
 Camera (float imageRate=0, const Transform &localTransform=Transform::getIdentity())
 
+void postInterIMU (const IMU &imu, double stamp)
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 46 of file DBReader.h.

+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::DBReader::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::DBReader::isCalibrated () const
+
+virtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::DBReader::getSerial () const
+
+virtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ odomProvided()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::DBReader::odomProvided () const
+
+inlinevirtual
+
+ +

Checks if the sensor provides odometry poses.

+

Some sensors (e.g., visual-inertial cameras) can provide pose estimates directly. This method indicates whether the sensor supports pose queries.

+
Returns
True if the sensor provides odometry poses, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
getPose()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +

Definition at line 90 of file DBReader.h.

+ +
+
+ +

◆ getPose()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::DBReader::getPose (double stamp,
Transform & pose,
cv::Mat & covariance,
double maxWaitTime = 0.06 
)
+
+virtual
+
+ +

Gets the sensor's pose estimate at a specific timestamp.

+

Queries the sensor for its pose estimate at the given timestamp. This is typically used for sensors that provide visual-inertial odometry or other pose estimation capabilities.

+
Parameters
+ + + + + +
stampTimestamp in seconds for which to query the pose
[out]poseOutput transform representing the sensor pose
[out]covarianceOutput covariance matrix (6x6) representing twist uncertainty
maxWaitTimeMaximum time in seconds to wait for pose data (default: 0.06)
+
+
+
Returns
True if pose was successfully retrieved, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
odomProvided()
+ +

Reimplemented from rtabmap::SensorCapture.

+ +
+
+ +

◆ driver()

+ +
+
+ + + + + +
+ + + + + + + +
const DBDriver * rtabmap::DBReader::driver () const
+
+inline
+
+ +

Definition at line 93 of file DBReader.h.

+ +
+
+ +

◆ captureImage()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::DBReader::captureImage (SensorCaptureInfo * info = 0)
+
+protectedvirtual
+
+ +

Implements rtabmap::Camera.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.map new file mode 100644 index 00000000..311cf8e6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.md5 new file mode 100644 index 00000000..78279bd9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.md5 @@ -0,0 +1 @@ +cd514b4d0d6e6d454bfdc86b5b398ec0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..78b6f75ba61eee92452106b6f434194b9bc25788 GIT binary patch literal 6698 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__inherit__graph.md5 new file mode 100644 index 00000000..78279bd9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__inherit__graph.md5 @@ -0,0 +1 @@ +cd514b4d0d6e6d454bfdc86b5b398ec0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1DBReader__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..78b6f75ba61eee92452106b6f434194b9bc25788 GIT binary patch literal 6698 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::EnvSensor Member List
+
+
+ +

This is the complete list of members for rtabmap::EnvSensor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
EnvSensor()rtabmap::EnvSensorinline
EnvSensor(const Type &type, const double &value, const double &stamp=0)rtabmap::EnvSensorinline
kAmbientAirPressure enum valuertabmap::EnvSensor
kAmbientLight enum valuertabmap::EnvSensor
kAmbientRelativeHumidity enum valuertabmap::EnvSensor
kAmbientTemperature enum valuertabmap::EnvSensor
kCustomSensor1 enum valuertabmap::EnvSensor
kCustomSensor2 enum value (defined in rtabmap::EnvSensor)rtabmap::EnvSensor
kCustomSensor3 enum value (defined in rtabmap::EnvSensor)rtabmap::EnvSensor
kCustomSensor4 enum value (defined in rtabmap::EnvSensor)rtabmap::EnvSensor
kCustomSensor5 enum value (defined in rtabmap::EnvSensor)rtabmap::EnvSensor
kCustomSensor6 enum value (defined in rtabmap::EnvSensor)rtabmap::EnvSensor
kCustomSensor7 enum value (defined in rtabmap::EnvSensor)rtabmap::EnvSensor
kCustomSensor8 enum value (defined in rtabmap::EnvSensor)rtabmap::EnvSensor
kCustomSensor9 enum value (defined in rtabmap::EnvSensor)rtabmap::EnvSensor
kUndefined enum valuertabmap::EnvSensor
kWifiSignalStrength enum valuertabmap::EnvSensor
stamp() constrtabmap::EnvSensorinline
type() constrtabmap::EnvSensorinline
Type enum namertabmap::EnvSensor
value() constrtabmap::EnvSensorinline
~EnvSensor() (defined in rtabmap::EnvSensor)rtabmap::EnvSensorinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1EnvSensor.html b/preview/pr-1492/api/latest/classrtabmap_1_1EnvSensor.html new file mode 100644 index 00000000..e44e99dd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1EnvSensor.html @@ -0,0 +1,386 @@ + + + + + + + + +RTAB-Map: rtabmap::EnvSensor Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::EnvSensor Class Reference
+
+
+ +

Single environmental measurement (type, value, timestamp). + More...

+ +

#include <EnvSensor.h>

+ + + + + +

+Public Types

enum  Type {
+  kUndefined = 0 +, kWifiSignalStrength +, kAmbientTemperature +, kAmbientAirPressure +,
+  kAmbientLight +, kAmbientRelativeHumidity +, kCustomSensor1 = 100 +, kCustomSensor2 +,
+  kCustomSensor3 +, kCustomSensor4 +, kCustomSensor5 +, kCustomSensor6 +,
+  kCustomSensor7 +, kCustomSensor8 +, kCustomSensor9 +
+ }
 Environmental sensor channel identifier. More...
 
+ + + + + + + + + + + + + +

+Public Member Functions

 EnvSensor ()
 Default constructor: kUndefined type, zero value and stamp.
 
 EnvSensor (const Type &type, const double &value, const double &stamp=0)
 Constructs a reading with the given type, value, and optional stamp.
 
const Type & type () const
 
const double & value () const
 
const double & stamp () const
 
+

Detailed Description

+

Single environmental measurement (type, value, timestamp).

+

Built-in Type values cover common phone/robot sensors; kCustomSensor1 through kCustomSensor9 are reserved for application-specific channels. Units depend on the type (see Type).

+

Samples are stored per node in SensorData via EnvSensors (one entry per type). Persisted in the database with node records (DBDriver).

+
See also
SensorData::setEnvSensors()
+
+SensorData::addEnvSensor()
+
+SensorData::envSensors()
+ +

Definition at line 50 of file EnvSensor.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::EnvSensor::Type
+
+ +

Environmental sensor channel identifier.

+

Built-in types use fixed units; custom types (≥ kCustomSensor1) have application-defined meaning and units.

+ + + + + + + + +
Enumerator
kUndefined 

Uninitialized / unknown channel.

+
kWifiSignalStrength 

Wi‑Fi signal strength (dBm).

+
kAmbientTemperature 

Ambient temperature (°C).

+
kAmbientAirPressure 

Ambient air pressure (hPa).

+
kAmbientLight 

Ambient illuminance (lx).

+
kAmbientRelativeHumidity 

Relative humidity (%).

+
kCustomSensor1 

User-defined sensor slot 1.

+
+ +

Definition at line 59 of file EnvSensor.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ EnvSensor() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::EnvSensor::EnvSensor ()
+
+inline
+
+ +

Default constructor: kUndefined type, zero value and stamp.

+ +

Definition at line 80 of file EnvSensor.h.

+ +
+
+ +

◆ EnvSensor() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::EnvSensor::EnvSensor (const Type & type,
const double & value,
const double & stamp = 0 
)
+
+inline
+
+ +

Constructs a reading with the given type, value, and optional stamp.

+
Parameters
+ + + + +
typeSensor channel (Type).
valueMeasurement in the units for type.
stampTimestamp in seconds (0 if unknown).
+
+
+ +

Definition at line 92 of file EnvSensor.h.

+ +
+
+ +

◆ ~EnvSensor()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::EnvSensor::~EnvSensor ()
+
+inlinevirtual
+
+ +

Definition at line 98 of file EnvSensor.h.

+ +
+
+

Member Function Documentation

+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
const Type & rtabmap::EnvSensor::type () const
+
+inline
+
+
Returns
Sensor channel.
+ +

Definition at line 101 of file EnvSensor.h.

+ +
+
+ +

◆ value()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::EnvSensor::value () const
+
+inline
+
+
Returns
Measurement value (units depend on type()).
+ +

Definition at line 103 of file EnvSensor.h.

+ +
+
+ +

◆ stamp()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::EnvSensor::stamp () const
+
+inline
+
+
Returns
Timestamp in seconds.
+ +

Definition at line 105 of file EnvSensor.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1EpipolarGeometry-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1EpipolarGeometry-members.html new file mode 100644 index 00000000..e82ccaee --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1EpipolarGeometry-members.html @@ -0,0 +1,114 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::EpipolarGeometry Member List
+
+
+ +

This is the complete list of members for rtabmap::EpipolarGeometry, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
check(const Signature *ssA, const Signature *ssB) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometry
EpipolarGeometry(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometry
findEpipolesFromF(const cv::Mat &fundamentalMatrix, cv::Vec3d &e1, cv::Vec3d &e2) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometrystatic
findFFromCalibratedStereoCameras(double fx, double fy, double cx, double cy, double Tx, double Ty) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometrystatic
findFFromWords(const std::list< std::pair< int, std::pair< cv::KeyPoint, cv::KeyPoint > > > &pairs, std::vector< uchar > &status, double ransacReprojThreshold=3.0, double ransacConfidence=0.99) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometrystatic
findPairs(const std::map< int, T > &wordsA, const std::map< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)rtabmap::EpipolarGeometryinlinestatic
findPairs(const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)rtabmap::EpipolarGeometryinlinestatic
findPairsAll(const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)rtabmap::EpipolarGeometryinlinestatic
findPairsUnique(const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)rtabmap::EpipolarGeometryinlinestatic
findPFromE(const cv::Mat &E, const cv::Mat &x, const cv::Mat &xp) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometrystatic
findRTFromP(const cv::Mat &p, cv::Mat &r, cv::Mat &t) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometrystatic
getMatchCountMinAccepted() const (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometryinline
getRansacParam1() const (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometryinline
getRansacParam2() const (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometryinline
iterativeLinearLSTriangulation(cv::Point3d u, const cv::Matx34d &P, cv::Point3d u1, const cv::Matx34d &P1) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometrystatic
linearLSTriangulation(cv::Point3d u, cv::Matx34d P, cv::Point3d u1, cv::Matx34d P1) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometrystatic
parseParameters(const ParametersMap &parameters) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometry
setMatchCountMinAccepted(int matchCountMinAccepted) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometryinline
setRansacParam1(double ransacParam1) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometryinline
setRansacParam2(double ransacParam2) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometryinline
triangulatePoints(const cv::Mat &pt_set1, const cv::Mat &pt_set2, const cv::Mat &P, const cv::Mat &P1, pcl::PointCloud< pcl::PointXYZ >::Ptr &pointcloud, std::vector< double > &reproj_errors) (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometrystatic
~EpipolarGeometry() (defined in rtabmap::EpipolarGeometry)rtabmap::EpipolarGeometryvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1EpipolarGeometry.html b/preview/pr-1492/api/latest/classrtabmap_1_1EpipolarGeometry.html new file mode 100644 index 00000000..774f9a40 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1EpipolarGeometry.html @@ -0,0 +1,541 @@ + + + + + + + + +RTAB-Map: rtabmap::EpipolarGeometry Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::EpipolarGeometry Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ EpipolarGeometry (const ParametersMap &parameters=ParametersMap())
 
+bool check (const Signature *ssA, const Signature *ssB)
 
+void parseParameters (const ParametersMap &parameters)
 
int getMatchCountMinAccepted () const
 
double getRansacParam1 () const
 
double getRansacParam2 () const
 
void setMatchCountMinAccepted (int matchCountMinAccepted)
 
void setRansacParam1 (double ransacParam1)
 
void setRansacParam2 (double ransacParam2)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static void findEpipolesFromF (const cv::Mat &fundamentalMatrix, cv::Vec3d &e1, cv::Vec3d &e2)
 
+static cv::Mat findPFromE (const cv::Mat &E, const cv::Mat &x, const cv::Mat &xp)
 
+static cv::Mat findFFromWords (const std::list< std::pair< int, std::pair< cv::KeyPoint, cv::KeyPoint > > > &pairs, std::vector< uchar > &status, double ransacReprojThreshold=3.0, double ransacConfidence=0.99)
 
+static void findRTFromP (const cv::Mat &p, cv::Mat &r, cv::Mat &t)
 
+static cv::Mat findFFromCalibratedStereoCameras (double fx, double fy, double cx, double cy, double Tx, double Ty)
 
template<typename T >
static int findPairs (const std::map< int, T > &wordsA, const std::map< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)
 
template<typename T >
static int findPairs (const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)
 
template<typename T >
static int findPairsUnique (const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)
 
template<typename T >
static int findPairsAll (const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)
 
+static cv::Mat linearLSTriangulation (cv::Point3d u, cv::Matx34d P, cv::Point3d u1, cv::Matx34d P1)
 
+static cv::Mat iterativeLinearLSTriangulation (cv::Point3d u, const cv::Matx34d &P, cv::Point3d u1, const cv::Matx34d &P1)
 
+static double triangulatePoints (const cv::Mat &pt_set1, const cv::Mat &pt_set2, const cv::Mat &P, const cv::Mat &P1, pcl::PointCloud< pcl::PointXYZ >::Ptr &pointcloud, std::vector< double > &reproj_errors)
 
+

Detailed Description

+
+

Definition at line 49 of file EpipolarGeometry.h.

+

Member Function Documentation

+ +

◆ getMatchCountMinAccepted()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::EpipolarGeometry::getMatchCountMinAccepted () const
+
+inline
+
+ +

Definition at line 57 of file EpipolarGeometry.h.

+ +
+
+ +

◆ getRansacParam1()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::EpipolarGeometry::getRansacParam1 () const
+
+inline
+
+ +

Definition at line 58 of file EpipolarGeometry.h.

+ +
+
+ +

◆ getRansacParam2()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::EpipolarGeometry::getRansacParam2 () const
+
+inline
+
+ +

Definition at line 59 of file EpipolarGeometry.h.

+ +
+
+ +

◆ setMatchCountMinAccepted()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::EpipolarGeometry::setMatchCountMinAccepted (int matchCountMinAccepted)
+
+inline
+
+ +

Definition at line 61 of file EpipolarGeometry.h.

+ +
+
+ +

◆ setRansacParam1()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::EpipolarGeometry::setRansacParam1 (double ransacParam1)
+
+inline
+
+ +

Definition at line 62 of file EpipolarGeometry.h.

+ +
+
+ +

◆ setRansacParam2()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::EpipolarGeometry::setRansacParam2 (double ransacParam2)
+
+inline
+
+ +

Definition at line 63 of file EpipolarGeometry.h.

+ +
+
+ +

◆ findPairs() [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static int rtabmap::EpipolarGeometry::findPairs (const std::map< int, T > & wordsA,
const std::map< int, T > & wordsB,
std::list< std::pair< int, std::pair< T, T > > > & pairs,
bool ignoreNegativeIds = true 
)
+
+inlinestatic
+
+

if a=[1 2 3 4 6], b=[1 2 4 5 6], results= [(1,1) (2,2) (4,4) (6,6)] realPairsCount = 4

+ +

Definition at line 100 of file EpipolarGeometry.h.

+ +
+
+ +

◆ findPairs() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static int rtabmap::EpipolarGeometry::findPairs (const std::multimap< int, T > & wordsA,
const std::multimap< int, T > & wordsB,
std::list< std::pair< int, std::pair< T, T > > > & pairs,
bool ignoreNegativeIds = true 
)
+
+inlinestatic
+
+

if a=[1 2 3 4 6 6], b=[1 1 2 4 5 6 6], results= [(1,1a) (2,2) (4,4) (6a,6a) (6b,6b)] realPairsCount = 5

+ +

Definition at line 128 of file EpipolarGeometry.h.

+ +
+
+ +

◆ findPairsUnique()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static int rtabmap::EpipolarGeometry::findPairsUnique (const std::multimap< int, T > & wordsA,
const std::multimap< int, T > & wordsB,
std::list< std::pair< int, std::pair< T, T > > > & pairs,
bool ignoreNegativeIds = true 
)
+
+inlinestatic
+
+

if a=[1 2 3 4 6 6], b=[1 1 2 4 5 6 6], results= [(2,2) (4,4)] realPairsCount = 5

+ +

Definition at line 162 of file EpipolarGeometry.h.

+ +
+
+ +

◆ findPairsAll()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static int rtabmap::EpipolarGeometry::findPairsAll (const std::multimap< int, T > & wordsA,
const std::multimap< int, T > & wordsB,
std::list< std::pair< int, std::pair< T, T > > > & pairs,
bool ignoreNegativeIds = true 
)
+
+inlinestatic
+
+

if a=[1 2 3 4 6 6], b=[1 1 2 4 5 6 6], results= [(1,1a) (1,1b) (2,2) (4,4) (6a,6a) (6a,6b) (6b,6a) (6b,6b)] realPairsCount = 5

+ +

Definition at line 197 of file EpipolarGeometry.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1FAST-members.html new file mode 100644 index 00000000..09e2419c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST-members.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::FAST Member List
+
+
+ +

This is the complete list of members for rtabmap::FAST, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
FAST(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::FAST)rtabmap::FAST
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::FAST)rtabmap::FASTinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::FASTvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::FAST)rtabmap::FASTvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~FAST() (defined in rtabmap::FAST)rtabmap::FASTvirtual
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST.html b/preview/pr-1492/api/latest/classrtabmap_1_1FAST.html new file mode 100644 index 00000000..f9520fdd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST.html @@ -0,0 +1,347 @@ + + + + + + + + +RTAB-Map: rtabmap::FAST Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::FAST Class Reference
+
+
+ +

FAST corner detector only (no descriptor). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::FAST:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::FAST:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ FAST (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

FAST corner detector only (no descriptor).

+ +

Definition at line 415 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::FAST::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::FAST::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 422 of file Features2d.h.

+ +
+
+ +

◆ isGpuAvailable()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::FAST::isGpuAvailable () const
+
+overridevirtual
+
+ +

Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.

+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF-members.html new file mode 100644 index 00000000..96a83cfc --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF-members.html @@ -0,0 +1,147 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::FAST_BRIEF Member List
+
+
+ +

This is the complete list of members for rtabmap::FAST_BRIEF, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
FAST(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::FAST)rtabmap::FAST
FAST_BRIEF(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::FAST_BRIEF)rtabmap::FAST_BRIEF
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::FAST_BRIEF)rtabmap::FAST_BRIEFinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::FASTvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::FAST_BRIEF)rtabmap::FAST_BRIEFvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~FAST() (defined in rtabmap::FAST)rtabmap::FASTvirtual
~FAST_BRIEF() (defined in rtabmap::FAST_BRIEF)rtabmap::FAST_BRIEFvirtual
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF.html b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF.html new file mode 100644 index 00000000..7380652b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: rtabmap::FAST_BRIEF Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::FAST_BRIEF Class Reference
+
+
+ +

FAST corners + BRIEF descriptors. + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::FAST_BRIEF:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::FAST_BRIEF:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ FAST_BRIEF (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::FAST
+ FAST (const ParametersMap &parameters=ParametersMap())
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

FAST corners + BRIEF descriptors.

+ +

Definition at line 452 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::FAST_BRIEF::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::FAST.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::FAST_BRIEF::getType () const
+
+inlineoverridevirtual
+
+ +

Reimplemented from rtabmap::FAST.

+ +

Definition at line 459 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.map new file mode 100644 index 00000000..2fd82ee3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.md5 new file mode 100644 index 00000000..50e4ef3a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.md5 @@ -0,0 +1 @@ +c13468118d510cc6c0a2f605f7461e30 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a585498c6feb82a521eb7adabd532ad3de766894 GIT binary patch literal 6510 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 NG*q;eKPg&-{Rfu(znK64 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.map new file mode 100644 index 00000000..2fd82ee3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.md5 new file mode 100644 index 00000000..50e4ef3a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.md5 @@ -0,0 +1 @@ +c13468118d510cc6c0a2f605f7461e30 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__BRIEF__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a585498c6feb82a521eb7adabd532ad3de766894 GIT binary patch literal 6510 zcmc&(hdMu0-#{WTR;yTZdcADZ|cUe}`Mhv5B&p8uy($ zR|jN|`7szwF4`VS-(1^plvZ{)-nUXXPffn1Vrj zQSY;p=K=VdG5huia#7npIDvd}a&jTsUcF-MDjm8|BSpOcJs3fL)&9q;>#tK%xLpbg z3nQS1s;VT{uU|+1`H|v)pRCb;{8&v{nVy~=Jjlz<9Ugqp@H<(%q~P^y*vHb+g5hEP zcalDQ{qMx$K7an)=NM>|Lp>!OxL?*O`!Z(c#m)oc249!BA@BHZ*Lb(i1ZB%@Fb`z-AK`J^gB89FmCj(nm7{;=8uhyWjF3_ z3OwjTjXivF%TLot*-3z|bd0J1f0HEroY~zes6pYASL;)#z~L zkB=MOq)jb0p(x{xg|V?cK%>#S6LvYej*fi9BqW$m5+QWEVImE;)qh;QB9(O~8- z7#=!wXB^|o_ChaayZB-=+S}W~=BuCc@$oGW<|+MIT2g!S=8fJ|M>NeNd3l6E%@fI} zQ4-Xa_11fzGLzcGlarJ8m6e0e90J6?xY6=ISS$v6X0**4>M|y>20ActNy*MmoNn;r zmXqTU6BDa@adbOgwctrcGPjy$NOW{`M}I%{;|jAkC^?H($l+^R8Y9>zPBI$VF>W#f zX&D(^V`Ik@+0)b0t=%D=j2ah7YN*<7K%AwczP_GIN{R*a3F;AZvbyT{XK^wA<3|ct zS69Q4eF{vwuJUs?J3#Xrg{#l!{#%Zd^XVD}QJmdb2m5t+rjoR^_?c6};ftT77Zeoa6%a2&~z{p z&KnCM9%P8meJIIp2Pcoc^s>qBSLcb_U<0%rr@ZU0OJ-drCMJGgS{iOx8fjSCnRHFb zeW8b5;@-U)`8bEj}BHR9>fQk0b zPGY_{6gN`HOLTHn!81KQJxMt^G&RNo3CYYtZp%D(?=srh*x1@d?ko*(OGv<*o13A{ zL0K&=t+|DT$i_zLy1F`1+*NFju`op1`};K*(Vrd6{x}Nq9`| z;hC3O8fL|a-Y8PBN&%)a6=YU*l{->V-hDTkmgvg)#%yUA@3zeCTfBglohF~`jq+E| zVCO}dxwHu(7<^|-c`iO&YgON$%E|g4uFLXl2+5dq{BnRKi)_c_V2`(FPidPD)Oapc z`laHE%wtu`8)~B?Z#S7nqqZG4S%b-M$#3$%@AB_97(Q~haB;fKPDRT8FgKCt3%-{u zor(R*`1f{iPrP1u1N4h!faj6{z0Kx?+@tr7mInJ|hg447rXNL^nvgO~`Rx1C~F5NITq_LIMO0vjay#9&e7xAofRVbo9fbkF?&!8zFXlFQo zr;NJJw~b1A&FBhDTg<;LnBK>X)yRai&#g%V=VFBOS07XrD$y0XJ;z`ivK<$8^`usg z=j0i(Uh7o&!>KulCiHNl`9S`}s|Oy*@uyqXwnYg$&UP4&HN6V;uaXohcE@ za@TddMyG*vbZF=*;E7tl+A_AMb?$BJLEG@u9~7kjZar7&#xWQ@vM|KS$qTi#_Q~(- zjHWII=H^I%OYzKN6rVnQN)#+HWuhX9$+s8RDbl;f$q7O3_(?Gs1B2DCIuC|1At9me zJ>1yb++66{>9G>Ifx7OGg*#_dBTe)NftH=djiG*)vW)K8l0&=?=gI4-E}T zAPK*9R!>h)T3TA@jb^iRx4-ZdGYF&%eE+GKaYlVh}0&QpCmo7qt;Ns@iC_pEf zRq$}-Yoy#rRxQZWEl}01b)B{cUxpFa)YK${`m<#+0CTCA8>S$UG&awkr3>T$4Y;@Q zJ4aDT=|^vGob2)19SRzn5`gO4+uQlXlnm)3qp3gNb}=5x^Tell2^xA%(;krm)Oii(R-lRsYp+|&aCH#pGteMgSv zrPk?bHq`>UFwWVTrohe3&DLz0z`iIVwM5qBvt}P01L!qsWvGPv_HB%_3Am9WlE7)S ztSyX~^5V2POdu{1x^K=ZK&?RPinz^4KeMs9#?Mdn{P}aT%a^-=Sjsajo%&T07e|>L z{MVtn+H=SOI$Uqqm|a=9`2fjuhXkl%iQp57nUM1!?~NI@M3F- zp>F>28n6VX5H9WvkD}p76f~`u#(0EaW!9PYv7K=kZxt2dOPmGh@iG@zSHYmuy|LHX z+1keC|I*0HEt&YAIdVcZVgnbHq5-*iLPXRd56yEu@LB z3^D(2S!X}rl~6deav^qs1attpP}G0ZqS~jow|51IrQ9dgwz}%-WX}TwhZ5PO-tD#7 zjr-2x@u!0efbG)7U6{d8BW7nU>b`!R1542_sLY)6;i;+V+~Q&ssBZ@|V10^O8oXBs z{QUf?_b%R~{CGAbYhvv{b&OWy$g>;Bwq?}u+nDK`sJ5e{rzeKM7Rl@BU3vBD6$Aka z>i{x3K0O`2A{fs4gR3&(o|F`!zk6V58>o3*ef@~`c14Gy@hWQtWm}xBjg4h1;u6H( zI1H?r#t^cHA;{PZJ)&=GdqY|G+lNObeT#0t>gWQR%*ZpP$`TMY6k~T!GpE z_6FS)=vQW3LqW;Fk7#K*=g!(<{!*g@8KIn+{_d`Xwk=|t+Hq%h=_{HFDxY5XgXjA#UbLoJg7D^mRQ(9YFL1l|DgY_e+qa^ zl=DOwFjRfnGA!ie z#ep0oa0>4P+DXj+EcNo-U|y0_v&B!&d0=k;=xuEmF>*7qONLnP>uSs1ykL6JYDZ|Cy?^>1WAtN z+cI~H|7=qVD){h_zWudew2dfp-WU!)U2ZzPMMel68obz;)tpR2+kXkn@ue1d20ob^?Ea&E7)!8`e?3o@}Z0{qr7Rs6Q6vMiJJ{CAS20IWCQJWwVSY|*oCyoK>3hC4 zjQmpQgC$D&-<{pU?Q~*3s;ovVy0lob%H1==a_HMcQ?7Qb`A27q1x>v_Dp($}&6;s} zdEMts0r;Go!zNFEmUY<~v3zHXOlRnzfQWL|*#{>p@_)t=I#F^hei3H1e@IHaI9{Hu z9Uo2PvWu1VTv-oopq<^S^d)c~co4CXx)jMAI5Nt##e_^fwF~1wnC0w5-|~nrSNu@n5|CpZxuQ zb=9n{h}XG)KmLl!7PT5|=*h$3TLTcn-4}N^@sr9=7)2*ZlbPH8&VGM$s0oOH!Z`aj zcXz*-+hp}GG|`;l7Uv0%_HbFa+<_PF907zSZ)|+mlK3)s$ZrRcbkddXgQy8HZwAU2cIARCWJ0? z$i@pb9}>hd2(-V~E$Ev(1?KdyTkh;a3*~|w2Z(auN|yl$1JK7<FP%1a94UnFU z4IxL9bRju}WO5Ve=q`93U7*%sAuLL{1}t2z-iHf>0g&8gFN$487x;s8CwB~2iifKu^R%Z`wSFp;!PL5Gl|Cf=Cdt?vgJV z(irfEc=`Fif!qn$B_v>8EN{&-oi}@KRdDk1l2JsqW0P{{Y_wr2;D*@(q-&=>bAOi&4 z1oRvNFu5fN;4T!Gv^4w4*(OMP!oPh}-d&$&3EW?612Rn5>Kj?(&QGbjkaJluL{ebp zfZEB}JF251A1lTM>??VKLAVHYr>E%__imDj^ip~;KsG&Di zJOsI8zmaE3cqqQp*3?u4@;NCZBM!{)15yr{!NY#HU_v`PJD}nL!C=29a|0eG1*Aa> zhsOYZz`nK1u3D8q6+4)MND(gSZ6D{7nVGq{T3XRQFtCw~qJ%b@j|IWuu=RMZr>9pP z%#qelfWzab9Wy8y1!qBrbzVz}qR#frp62GiZHGYMi1D7U&ITlRv4i@2{fi?bBNJZ+ zMva)OPjTkwiW(Z^Wdu~-NKcU|c4-2j;x|9R>a@?i#QA38cP z(n_x-?X}4oN>ICwqs9681RWNhmfuf1Z3LU+QQ5U>RMV(sO&b2){)Z3x*(XE??!@P_D_|$wln&o zR+2L_`9VPDqS4`!)n!SH0C68U%DK6@5YW#4pn5!xwr%tc4KG46kRYh2sE|=m1eBeE z2bjcf-J%QvwN_;cN>2nN)2y;D;5Sl!6pM{(HcXGkCM0z7;KdxSqQ!NKpdSO@FG@4}+$(cn%Q2gXMCRNiYo94*6v#3FxDLdey>E5qy%`Yq z%PUs{4~weUdJ*gd+-S?tbtN!+e_VMjzhGQ!Y&+lvyh#$9%vNX+P-kqW?c6(CTOxtD zeT{Y{f*ZG3jsCj{n0eDPGEP-r?kdArStO_y$lxsg_1gq^NiR5+LnN;7JtE<|0e(P% NG*q;eKPg&-{Rfu(znK64 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK-members.html new file mode 100644 index 00000000..2397d996 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK-members.html @@ -0,0 +1,147 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::FAST_FREAK Member List
+
+
+ +

This is the complete list of members for rtabmap::FAST_FREAK, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
FAST(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::FAST)rtabmap::FAST
FAST_FREAK(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::FAST_FREAK)rtabmap::FAST_FREAK
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::FAST_FREAK)rtabmap::FAST_FREAKinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::FASTvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::FAST_FREAK)rtabmap::FAST_FREAKvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~FAST() (defined in rtabmap::FAST)rtabmap::FASTvirtual
~FAST_FREAK() (defined in rtabmap::FAST_FREAK)rtabmap::FAST_FREAKvirtual
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK.html b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK.html new file mode 100644 index 00000000..36f50a77 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: rtabmap::FAST_FREAK Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::FAST_FREAK Class Reference
+
+
+ +

FAST corners + FREAK descriptors. + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::FAST_FREAK:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::FAST_FREAK:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ FAST_FREAK (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::FAST
+ FAST (const ParametersMap &parameters=ParametersMap())
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

FAST corners + FREAK descriptors.

+ +

Definition at line 471 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::FAST_FREAK::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::FAST.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::FAST_FREAK::getType () const
+
+inlineoverridevirtual
+
+ +

Reimplemented from rtabmap::FAST.

+ +

Definition at line 478 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.map new file mode 100644 index 00000000..6d2ef73f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.md5 new file mode 100644 index 00000000..d0c03a23 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.md5 @@ -0,0 +1 @@ +f56eb4d063f1b2de25fb3e5e5ce0f291 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0baa07f5baaccc510a786d65592bf61338d1afc4 GIT binary patch literal 6534 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__inherit__graph.md5 new file mode 100644 index 00000000..d0c03a23 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__inherit__graph.md5 @@ -0,0 +1 @@ +f56eb4d063f1b2de25fb3e5e5ce0f291 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__FREAK__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0baa07f5baaccc510a786d65592bf61338d1afc4 GIT binary patch literal 6534 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__coll__graph.md5 new file mode 100644 index 00000000..2555cf2b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__coll__graph.md5 @@ -0,0 +1 @@ +e56ba15ee1b9367a6f832e7fa9464329 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c642a347c2c607bc3e97a003f049a1f44794a7b1 GIT binary patch literal 4158 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.map new file mode 100644 index 00000000..453ba0d7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.md5 new file mode 100644 index 00000000..e9d0fca7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.md5 @@ -0,0 +1 @@ +11032a1c022c4c436cfa3c0604bdc839 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1FAST__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7935cc4f60c51bdaa5e0b566828064bc8e96a8fe GIT binary patch literal 10022 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Feature2D Member List
+
+
+ +

This is the complete list of members for rtabmap::Feature2D, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const =0 (defined in rtabmap::Feature2D)rtabmap::Feature2Dpure virtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() constrtabmap::Feature2Dinlinevirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D.html b/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D.html new file mode 100644 index 00000000..3a123476 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D.html @@ -0,0 +1,558 @@ + + + + + + + + +RTAB-Map: rtabmap::Feature2D Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Abstract 2D feature detector and descriptor extractor for visual SLAM. + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::Feature2D:
+
+
Inheritance graph
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
+ + + + + +

+Public Types

enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
+virtual void parseParameters (const ParametersMap &parameters)
 
virtual const ParametersMap & getParameters () const
 
+virtual Feature2D::Type getType () const =0
 
virtual bool isGpuAvailable () const
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
+ + + +

+Protected Member Functions

+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

Abstract 2D feature detector and descriptor extractor for visual SLAM.

+

Factory create() builds a concrete detector from Type or from Kp/DetectorStrategy in a ParametersMap. Common tuning keys include Kp/MaxFeatures, Kp/GridRows, Kp/GridCols, Kp/SSC, depth filters (Kp/MinDepth, Kp/MaxDepth), ROI (Kp/RoiRatios), and sub-pixel refinement.

+

Pipeline: generateKeypoints() (grid + ROI + optional mask) then generateDescriptors(). Static helpers filter or cap keypoints before/after matching. generateKeypoints3D() projects features using stereo or depth when available in SensorData.

+
See also
Memory
+
+RegistrationVis
+ +

Definition at line 145 of file Features2d.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::Feature2D::Type
+
+ +

Built-in detector/descriptor strategy (Kp/DetectorStrategy).

+ +

Definition at line 148 of file Features2d.h.

+ +
+
+

Member Function Documentation

+ +

◆ typeName()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string rtabmap::Feature2D::typeName (Type type)
+
+inlinestatic
+
+
Returns
Human-readable name for type (e.g. "ORB", "GFTT+BRIEF").
+ +

Definition at line 169 of file Features2d.h.

+ +
+
+ +

◆ getMaxFeatures()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Feature2D::getMaxFeatures () const
+
+inline
+
+ +

Definition at line 260 of file Features2d.h.

+ +
+
+ +

◆ getSSC()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Feature2D::getSSC () const
+
+inline
+
+ +

Definition at line 261 of file Features2d.h.

+ +
+
+ +

◆ getMinDepth()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Feature2D::getMinDepth () const
+
+inline
+
+ +

Definition at line 262 of file Features2d.h.

+ +
+
+ +

◆ getMaxDepth()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Feature2D::getMaxDepth () const
+
+inline
+
+ +

Definition at line 263 of file Features2d.h.

+ +
+
+ +

◆ getGridRows()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Feature2D::getGridRows () const
+
+inline
+
+ +

Definition at line 264 of file Features2d.h.

+ +
+
+ +

◆ getGridCols()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Feature2D::getGridCols () const
+
+inline
+
+ +

Definition at line 265 of file Features2d.h.

+ +
+
+ +

◆ getParameters()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const ParametersMap & rtabmap::Feature2D::getParameters () const
+
+inlinevirtual
+
+ +

Definition at line 284 of file Features2d.h.

+ +
+
+ +

◆ isGpuAvailable()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::Feature2D::isGpuAvailable () const
+
+inlinevirtual
+
+ +

Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.

+ +

Reimplemented in rtabmap::SURF, rtabmap::SIFT, rtabmap::ORB, rtabmap::FAST, rtabmap::GFTT, rtabmap::SuperPointTorch, and rtabmap::SuperPointRpautrat.

+ +

Definition at line 294 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.map new file mode 100644 index 00000000..323a47bd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.map @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.md5 new file mode 100644 index 00000000..a2791eb3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.md5 @@ -0,0 +1 @@ +a39fcfc767182bbd4eea66e9f463501c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Feature2D__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5536373550412f1b4c72897eaa0d2d1736aceafd GIT binary patch literal 66093 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FeatureBA-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1FeatureBA-members.html new file mode 100644 index 00000000..84a88987 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FeatureBA-members.html @@ -0,0 +1,97 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::FeatureBA Member List
+
+
+ +

This is the complete list of members for rtabmap::FeatureBA, including all inherited members.

+ + + + + + +
cameraIndexrtabmap::FeatureBA
depthrtabmap::FeatureBA
descriptorrtabmap::FeatureBA
FeatureBA(const cv::KeyPoint &kptIn, const float &depthIn=0.0f, const cv::Mat &descriptorIn=cv::Mat(), int cameraIndexIn=0) (defined in rtabmap::FeatureBA)rtabmap::FeatureBAinline
kptrtabmap::FeatureBA
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FeatureBA.html b/preview/pr-1492/api/latest/classrtabmap_1_1FeatureBA.html new file mode 100644 index 00000000..c2e126b6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FeatureBA.html @@ -0,0 +1,251 @@ + + + + + + + + +RTAB-Map: rtabmap::FeatureBA Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::FeatureBA Class Reference
+
+
+ +

A single bundle adjustment feature observation: one keypoint seen in one frame. + More...

+ +

#include <Optimizer.h>

+ + + + +

+Public Member Functions

 FeatureBA (const cv::KeyPoint &kptIn, const float &depthIn=0.0f, const cv::Mat &descriptorIn=cv::Mat(), int cameraIndexIn=0)
 
+ + + + + + + + + + + + + +

+Public Attributes

cv::KeyPoint kpt
 2D image keypoint.
 
float depth
 Depth at kpt in meters, or 0 if unknown (monocular).
 
cv::Mat descriptor
 Optional descriptor for the keypoint (used when re-matching is enabled).
 
int cameraIndex
 Index into the frame's camera model list for multi-camera rigs.
 
+

Detailed Description

+

A single bundle adjustment feature observation: one keypoint seen in one frame.

+

Used as the per-frame value in the wordReferences map (<wordId, <frameId, FeatureBA>>) passed to Optimizer::optimizeBA(). depth is in meters when available (RGB-D / stereo with disparity) or 0 if unknown (monocular). descriptor and cameraIndex are optional; cameraIndex selects which CameraModel of a multi-camera rig the keypoint belongs to.

+ +

Definition at line 50 of file Optimizer.h.

+

Constructor & Destructor Documentation

+ +

◆ FeatureBA()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::FeatureBA::FeatureBA (const cv::KeyPoint & kptIn,
const float & depthIn = 0.0f,
const cv::Mat & descriptorIn = cv::Mat(),
int cameraIndexIn = 0 
)
+
+inline
+
+ +

Definition at line 53 of file Optimizer.h.

+ +
+
+

Member Data Documentation

+ +

◆ kpt

+ +
+
+ + + + +
cv::KeyPoint rtabmap::FeatureBA::kpt
+
+ +

2D image keypoint.

+ +

Definition at line 61 of file Optimizer.h.

+ +
+
+ +

◆ depth

+ +
+
+ + + + +
float rtabmap::FeatureBA::depth
+
+ +

Depth at kpt in meters, or 0 if unknown (monocular).

+ +

Definition at line 62 of file Optimizer.h.

+ +
+
+ +

◆ descriptor

+ +
+
+ + + + +
cv::Mat rtabmap::FeatureBA::descriptor
+
+ +

Optional descriptor for the keypoint (used when re-matching is enabled).

+ +

Definition at line 63 of file Optimizer.h.

+ +
+
+ +

◆ cameraIndex

+ +
+
+ + + + +
int rtabmap::FeatureBA::cameraIndex
+
+ +

Index into the frame's camera model list for multi-camera rigs.

+ +

Definition at line 64 of file Optimizer.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FlannIndex-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1FlannIndex-members.html new file mode 100644 index 00000000..2cab2864 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FlannIndex-members.html @@ -0,0 +1,113 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::FlannIndex Member List
+
+
+ +

This is the complete list of members for rtabmap::FlannIndex, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
addPoints(const cv::Mat &features) (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
buildIndex(flann_algorithm_t algorithm, const cv::Mat &features, bool useDistanceL1=false, float rebalancingFactor=2.0f) (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
featuresDim() const (defined in rtabmap::FlannIndex)rtabmap::FlannIndexinline
featuresType() const (defined in rtabmap::FlannIndex)rtabmap::FlannIndexinline
flann_algorithm_t enum name (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
FLANN_INDEX_KDTREE enum value (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
FLANN_INDEX_KDTREE_SINGLE enum value (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
FLANN_INDEX_LINEAR enum value (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
FLANN_INDEX_LSH enum value (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
FlannIndex() (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
indexedFeatures() const (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
isBuilt() (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
knnSearch(const cv::Mat &query, cv::Mat &indices, cv::Mat &dists, int knn, int checks=32, float eps=0.0, bool sorted=true) const (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
loadIndex(const std::vector< unsigned char > &indexData, flann_algorithm_t algorithm, const cv::Mat &features, bool useDistanceL1=false, float rebalancingFactor=2.0f, std::string *errorMsg=NULL) (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
loadIndex(const unsigned char *indexData, size_t indexDataSize, flann_algorithm_t algorithm, const cv::Mat &features, bool useDistanceL1=false, float rebalancingFactor=2.0f, std::string *errorMsg=NULL) (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
memoryUsed() const (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
radiusSearch(const cv::Mat &query, std::vector< std::vector< size_t > > &indices, std::vector< std::vector< float > > &dists, float radius, int maxNeighbors=0, int checks=32, float eps=0.0, bool sorted=true) const (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
release() (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
removePoint(unsigned int index) (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
serializeIndex(bool computeChecksum=true) const (defined in rtabmap::FlannIndex)rtabmap::FlannIndex
~FlannIndex() (defined in rtabmap::FlannIndex)rtabmap::FlannIndexvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1FlannIndex.html b/preview/pr-1492/api/latest/classrtabmap_1_1FlannIndex.html new file mode 100644 index 00000000..afd7ba0c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1FlannIndex.html @@ -0,0 +1,224 @@ + + + + + + + + +RTAB-Map: rtabmap::FlannIndex Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::FlannIndex Class Reference
+
+
+ + + + +

+Public Types

enum  flann_algorithm_t { FLANN_INDEX_LINEAR = 0 +, FLANN_INDEX_KDTREE = 1 +, FLANN_INDEX_KDTREE_SINGLE = 4 +, FLANN_INDEX_LSH = 6 + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+void release ()
 
+std::vector< unsigned char > serializeIndex (bool computeChecksum=true) const
 
+size_t indexedFeatures () const
 
+size_t memoryUsed () const
 
+void buildIndex (flann_algorithm_t algorithm, const cv::Mat &features, bool useDistanceL1=false, float rebalancingFactor=2.0f)
 
+bool loadIndex (const std::vector< unsigned char > &indexData, flann_algorithm_t algorithm, const cv::Mat &features, bool useDistanceL1=false, float rebalancingFactor=2.0f, std::string *errorMsg=NULL)
 
+bool loadIndex (const unsigned char *indexData, size_t indexDataSize, flann_algorithm_t algorithm, const cv::Mat &features, bool useDistanceL1=false, float rebalancingFactor=2.0f, std::string *errorMsg=NULL)
 
+bool isBuilt ()
 
int featuresType () const
 
int featuresDim () const
 
+std::vector< unsigned int > addPoints (const cv::Mat &features)
 
+void removePoint (unsigned int index)
 
+void knnSearch (const cv::Mat &query, cv::Mat &indices, cv::Mat &dists, int knn, int checks=32, float eps=0.0, bool sorted=true) const
 
+void radiusSearch (const cv::Mat &query, std::vector< std::vector< size_t > > &indices, std::vector< std::vector< float > > &dists, float radius, int maxNeighbors=0, int checks=32, float eps=0.0, bool sorted=true) const
 
+

Detailed Description

+
+

Definition at line 37 of file FlannIndex.h.

+

Member Enumeration Documentation

+ +

◆ flann_algorithm_t

+ +
+
+ + + + +
enum rtabmap::FlannIndex::flann_algorithm_t
+
+ +

Definition at line 41 of file FlannIndex.h.

+ +
+
+

Member Function Documentation

+ +

◆ featuresType()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::FlannIndex::featuresType () const
+
+inline
+
+ +

Definition at line 85 of file FlannIndex.h.

+ +
+
+ +

◆ featuresDim()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::FlannIndex::featuresDim () const
+
+inline
+
+ +

Definition at line 86 of file FlannIndex.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT-members.html new file mode 100644 index 00000000..0bad110b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT-members.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GFTT Member List
+
+
+ +

This is the complete list of members for rtabmap::GFTT, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const =0 (defined in rtabmap::Feature2D)rtabmap::Feature2Dpure virtual
GFTT(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GFTT)rtabmap::GFTT
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::GFTTvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::GFTT)rtabmap::GFTTvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~GFTT() (defined in rtabmap::GFTT)rtabmap::GFTTvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT.html new file mode 100644 index 00000000..290effbc --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT.html @@ -0,0 +1,323 @@ + + + + + + + + +RTAB-Map: rtabmap::GFTT Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GFTT Class Reference
+
+
+ +

Good-features-to-track detector (Shi–Tomasi / Harris). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::GFTT:
+
+
Inheritance graph
+ + + + + + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::GFTT:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ GFTT (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+virtual Feature2D::Type getType () const =0
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

Good-features-to-track detector (Shi–Tomasi / Harris).

+ +

Definition at line 493 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::GFTT::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ isGpuAvailable()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::GFTT::isGpuAvailable () const
+
+overridevirtual
+
+ +

Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.

+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF-members.html new file mode 100644 index 00000000..10c473db --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF-members.html @@ -0,0 +1,147 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GFTT_BRIEF Member List
+
+
+ +

This is the complete list of members for rtabmap::GFTT_BRIEF, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::GFTT_BRIEF)rtabmap::GFTT_BRIEFinlinevirtual
GFTT(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GFTT)rtabmap::GFTT
GFTT_BRIEF(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GFTT_BRIEF)rtabmap::GFTT_BRIEF
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::GFTTvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::GFTT_BRIEF)rtabmap::GFTT_BRIEFvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~GFTT() (defined in rtabmap::GFTT)rtabmap::GFTTvirtual
~GFTT_BRIEF() (defined in rtabmap::GFTT_BRIEF)rtabmap::GFTT_BRIEFvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF.html new file mode 100644 index 00000000..e17bcdc6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: rtabmap::GFTT_BRIEF Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GFTT_BRIEF Class Reference
+
+
+ +

GFTT corners + BRIEF descriptors. + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::GFTT_BRIEF:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::GFTT_BRIEF:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ GFTT_BRIEF (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::GFTT
+ GFTT (const ParametersMap &parameters=ParametersMap())
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

GFTT corners + BRIEF descriptors.

+ +

Definition at line 518 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::GFTT_BRIEF::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::GFTT.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::GFTT_BRIEF::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 525 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.map new file mode 100644 index 00000000..bf6e6f72 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.md5 new file mode 100644 index 00000000..2ca05c83 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.md5 @@ -0,0 +1 @@ +8b57ac3922ea422557f4b5b9fbd7cded \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f05143e8cd9a81b7cecfe10cbc52cb57caf3d8af GIT binary patch literal 6091 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.map new file mode 100644 index 00000000..bf6e6f72 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.md5 new file mode 100644 index 00000000..2ca05c83 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.md5 @@ -0,0 +1 @@ +8b57ac3922ea422557f4b5b9fbd7cded \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__BRIEF__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f05143e8cd9a81b7cecfe10cbc52cb57caf3d8af GIT binary patch literal 6091 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY-members.html new file mode 100644 index 00000000..f62bf167 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY-members.html @@ -0,0 +1,147 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GFTT_DAISY Member List
+
+
+ +

This is the complete list of members for rtabmap::GFTT_DAISY, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::GFTT_DAISY)rtabmap::GFTT_DAISYinlinevirtual
GFTT(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GFTT)rtabmap::GFTT
GFTT_DAISY(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GFTT_DAISY)rtabmap::GFTT_DAISY
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::GFTTvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::GFTT_DAISY)rtabmap::GFTT_DAISYvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~GFTT() (defined in rtabmap::GFTT)rtabmap::GFTTvirtual
~GFTT_DAISY() (defined in rtabmap::GFTT_DAISY)rtabmap::GFTT_DAISYvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY.html new file mode 100644 index 00000000..0c4747fe --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: rtabmap::GFTT_DAISY Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GFTT_DAISY Class Reference
+
+
+ +

GFTT corners + DAISY descriptors (OpenCV 3+ xfeatures2d). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::GFTT_DAISY:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::GFTT_DAISY:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ GFTT_DAISY (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::GFTT
+ GFTT (const ParametersMap &parameters=ParametersMap())
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

GFTT corners + DAISY descriptors (OpenCV 3+ xfeatures2d).

+ +

Definition at line 723 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::GFTT_DAISY::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::GFTT.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::GFTT_DAISY::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 730 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.map new file mode 100644 index 00000000..3d2add0c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.md5 new file mode 100644 index 00000000..4180bd05 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.md5 @@ -0,0 +1 @@ +acd7925d4a27c53057c573337726a1c6 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e107cd8a26ac4218250a2e014a31544be6d41946 GIT binary patch literal 6525 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 o!1mP$iTd{sE6|U*{-782|tP literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.map new file mode 100644 index 00000000..3d2add0c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.md5 new file mode 100644 index 00000000..4180bd05 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.md5 @@ -0,0 +1 @@ +acd7925d4a27c53057c573337726a1c6 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__DAISY__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e107cd8a26ac4218250a2e014a31544be6d41946 GIT binary patch literal 6525 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 o!1mP$iTd{sE6|U*{-782|tP literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK-members.html new file mode 100644 index 00000000..e1b4efa1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK-members.html @@ -0,0 +1,147 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GFTT_FREAK Member List
+
+
+ +

This is the complete list of members for rtabmap::GFTT_FREAK, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::GFTT_FREAK)rtabmap::GFTT_FREAKinlinevirtual
GFTT(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GFTT)rtabmap::GFTT
GFTT_FREAK(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GFTT_FREAK)rtabmap::GFTT_FREAK
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::GFTTvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::GFTT_FREAK)rtabmap::GFTT_FREAKvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~GFTT() (defined in rtabmap::GFTT)rtabmap::GFTTvirtual
~GFTT_FREAK() (defined in rtabmap::GFTT_FREAK)rtabmap::GFTT_FREAKvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK.html new file mode 100644 index 00000000..406eedc3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: rtabmap::GFTT_FREAK Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GFTT_FREAK Class Reference
+
+
+ +

GFTT corners + FREAK descriptors. + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::GFTT_FREAK:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::GFTT_FREAK:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ GFTT_FREAK (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::GFTT
+ GFTT (const ParametersMap &parameters=ParametersMap())
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

GFTT corners + FREAK descriptors.

+ +

Definition at line 537 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::GFTT_FREAK::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::GFTT.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::GFTT_FREAK::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 544 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.map new file mode 100644 index 00000000..ecd8d35c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.md5 new file mode 100644 index 00000000..f8b1d99c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.md5 @@ -0,0 +1 @@ +64e5f6b35c54d56433ee54729aa7a08c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..22b24f4a0e7bfd0d9f42d0ad20def3d671406096 GIT binary patch literal 6376 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.map new file mode 100644 index 00000000..ecd8d35c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.md5 new file mode 100644 index 00000000..f8b1d99c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.md5 @@ -0,0 +1 @@ +64e5f6b35c54d56433ee54729aa7a08c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__FREAK__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..22b24f4a0e7bfd0d9f42d0ad20def3d671406096 GIT binary patch literal 6376 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB-members.html new file mode 100644 index 00000000..a7dd497f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB-members.html @@ -0,0 +1,147 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GFTT_ORB Member List
+
+
+ +

This is the complete list of members for rtabmap::GFTT_ORB, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::GFTT_ORB)rtabmap::GFTT_ORBinlinevirtual
GFTT(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GFTT)rtabmap::GFTT
GFTT_ORB(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GFTT_ORB)rtabmap::GFTT_ORB
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::GFTTvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::GFTT_ORB)rtabmap::GFTT_ORBvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~GFTT() (defined in rtabmap::GFTT)rtabmap::GFTTvirtual
~GFTT_ORB() (defined in rtabmap::GFTT_ORB)rtabmap::GFTT_ORBvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB.html b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB.html new file mode 100644 index 00000000..23514796 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: rtabmap::GFTT_ORB Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GFTT_ORB Class Reference
+
+
+ +

GFTT corners + ORB descriptors (common default when SURF is unavailable). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::GFTT_ORB:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::GFTT_ORB:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ GFTT_ORB (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::GFTT
+ GFTT (const ParametersMap &parameters=ParametersMap())
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

GFTT corners + ORB descriptors (common default when SURF is unavailable).

+ +

Definition at line 581 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::GFTT_ORB::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::GFTT.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::GFTT_ORB::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 588 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.map new file mode 100644 index 00000000..7fb9f87d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.md5 new file mode 100644 index 00000000..80e7ac14 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.md5 @@ -0,0 +1 @@ +793e800baefb515ee99a2226b4f2ec5d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9222b2ff3d160dbe7ff824632c948e879f41f4ec GIT binary patch literal 6209 zcmc(khdZ26*X~D;o~R>6OY|1KGonNak%%A>f)Sk%z4zXUlIWf2L~lV1qSry9MQ4-* zqfGE^-+Rt=&VTT7ZF9}cHS;`st+m(vyO;21Pu0jtZj(SD5b{S4RkXlkK3EMm2*Ka< zlVd0FKxpzrO$Bmw{hQrZln8;)V;-s8*LF+ao%htHHeVn**jHh_^8sZM|AaU!U|dTz zKAB{b*QD-v*P}tFg|5s1vx%+Poiot+v*b}fgD7#Pf8H|n`_IBeX1S_LT;!b^eyai< zUexWI)xYr9OuFRuSw8ak2eGo7ep}pt#mb3luAdF9rZsWg^t-8agDohItK0H(qtAth zZ{|h@VKemaQQSlJh||+kbj5^*nDe^(<&{*7zRhV(-$ca5*#sonDWgI-4kGmK2Tj@A zj)iR1_@WnHUUGl`{uLWeB(oO?Its&mq!J94sc0nK)}J_2%NEn#)LhWB>!=N z(t`(tul4n#4M>Ek%5`Tirhfg38XbKGgZsb`y)ojGLb*b&dvD}?{^{Aic5{=`sdzJ6 zxkj-n!OzdH0dGrJ=qLWP5a(o>p+BciI^57(=|eN&V$ABNH0y4CsP$B&?Q zlT%Z|5Po_24BMG1e}OlRaXsI^3l(VfLlI@w)$s&`gf&M;P8jUsRc3HVNX_P^MWHtD zDvU0Nw-m(m-{ zQX31uOcgL}O)b}}4#-gOZbsF$oo|=U*BiULOOuk3nerw*-b_hPADk}NFRE9_$cp^@ z`7`s5+v!2h++Ue(5=zQ_2PQr~zE9=l0zX^bYmv?suYRwYKVkUCO$kp^5#bHa|Y{*c@+9q0`>C8}GNBFxS@BQYX(Y z3Ns-1+1XXxy2R`12og5j>0q$IfWW}nl(#|DBL1OIl_;G~L)y2u8`AToBx!i~-a!%Rk z{ri#e@$n-OPDGUV$-HY>cD7>bVx2(Jy9hHgv)3rK#7x{0l;cAd7M2We za3TBEzFQwtQu6BRXbA`ixCI1W?udGyJ1v{PfB!x;Eo}v}`?Kq>yqsLnS$%yy6z(G@ zRdL~X2iDt(L=qk!AA2xNbavv5$e*OYUaYW%=(T$_%}K8wEO&!rM*g+F{*IWKcIv|T zcz~?yUUpLx!}|Jq+n4ftGI08~lDuyC)tRQ(>2jzPIJA|5`Bv7}Q_PERJ;?LJ`zs@N zZag%9_3D-0SBqP@xw%zte@wvrAizc}?Cf-QP}1rG0sT-6 zHN__&DAA~`uMY_f!~>seK9&?0pL&&6c)UG>1l4+aHkPOM8hczALm@0IJk#bWDfp%l z0ydkmL-w^}M)qy=NlNFQatu@$7sRW$yqvahzR>~iLlcZq(oV&~f;&AU;}1xgt0$T( z%L_Mi0|!!FT@97AgSED{o@<9HAiY3FtF2LjIqy;R5;-|J#l^*bS|uvap544|Xa5dI zR(e@{gFrJFo)fcGCL$twSfKT$)$JB!baFE2u3F4dDFtMv*_lt_;^+nFI~d-mSQa>P zI78N9xr@N-pp!@jdy?E~hqZ@=((>sTUH&^u6*9)vDSsWT8cDaD7poBPMzD8tEbqC# zKB=xQ$}V=zof+Id9UWbx>pt_-ECq5=QBg5*ad`)(3npp{%DTL~ywL`0eMVhfU6}L- zd}~xia8eR&2qjAl_GBNiF`V(gl|@EL*$ax{&zyCo@!!?{M&B!i!lxM#NF-7L7618j z1n4sAsX{o*%gbFWg_>D0sj1K$CI*J^nHfEBvE}PMr=>9tr%MOEsx{mCMb}pFM~|M4 z&c$kbvLrHVb;W#ZYwO_TBvhOCWttBbWBaScl`8Eoo2?Aq8u*-@&TiomQ8;1c@*j9N{a`MWsd!9F5?uYn-Rj6GN#M&# z4YBZy^s13D0)dB2tsY?Q$d+fnMN9JkuY6|i+x{PRPYU{}M?I3fkGEf*x1kM965oQb zB&5A%X!&?w6T!+s)o+)%;d$j=R|HLbDAh>N>%RiM>PGE{d^@5p zKISRAu#{^cx$(d;S+Ku$eTO#)q@?~XA;W-U2W}t;#2Ae*@hv~#Hip!AF z+hNTiBy-9NJRHe6u0J*YK6$G|INj`sUIi<^dIw5kLHQpXxki%z#_BQh9ha7q`&V-I z*>D|A1X27L-B ze&}2VDQHTKEiEgdEIts3wzhV5Yby+#E2XUZdI`3f&+FhYQVu@G1X$p{($)?FFE%zc zsK90JEhOluLK1A{5OIn}vEiUzRsarZaI$a1F64h9Q3;zqj6l+**P7aQ4rD1SK z2RvWPvH`O;kn-mTU!~E{dfU^9tV?$OmiBh$EU&-ebIil@^KHG5-T4-Jpa!q8o1fp? z4y93Z8QB_qq1f2}ez>*KT+BXTx1~c6{Hnfwz4Es5FTJrvvhe+ zoz&#Cw8->y7$E)ZFJDO7+uNnw4pbSn8&P17hPk5-9`<0~nVr=`l{WzAPUfsW0~DV$i!fKn$|7`WD#J({BJUAO{D_ z%5`mNd3kq#&Cg@&J5?WQ>&`lE4AXYaB(ATUt!`}Gy?YlAba*RG=F!XKg4kF}h|yrG zuwI*octS$LB+}u-2V97Hh74_CVWD1&ivW89W=I%;Bm*_FW2=7e-o5;yBE-?=*zKP~ zLqkeSei&shZEYG5l#rz*BM=XRRM-6lc@^l9Q89 z0T&rtT82MK5hV8H(^wfym!<|UD|v!sTAiFbMH7GBU-R~LcQFp1(5 z0~S8+OW0QYNJB%_&@huN^ky(Nd6z{wQG7w{14jtz=g9{4hmpT&RL0(U_@|tRtix@7 z$g@>%ht8QgG8aPZ3tr90gTuk5a`JbOQ6wvz=0_4kLvCmEFdMd{oP0o9u?OdiF)aCZ zOJ-*b?yRphl!%%zRU||lDQH%er-)HLm6o{WN3Vx1q3rGC;}6#u|06VxM`8;9ic<>V zmetVu3rl7!&CKz`on?{J!Q1>NOSl_qi`+D+j^&Q?KAM(ZC!!EED01|hXm(6Bi~1ab zOJd6M2&yBbIDr+7l{V_}qZd;d%_*SF%}rHV4&}9n7F6SfehwjmI$H6d3LO;2A~12@ z_U43UmgILKLNofW?pQ4G-j)Gh-iatk?sg{PVAqp2IwoUt>hn>0@>E2W?}>I`;5*F= zsihq0*ymZp8?TAJ)aUqN;xzky+&**;z6F5_)mTE6h;j>af_#eBi5=t~Lz`R8hn9VD zAY?418fMR~c5;Krf}A&I`oVgHKnc@~vZaNQ5G4Fp*5d~F7V!SpLyxNwXb+jr;8g}a z#BX51bqJ)GlPcWQ)yvDvWy5m*GC*+T@F}cUpuW1Aq45V{O91um)z7(RhK9J#JRlu% zBU!kkj;ykcO=I;OA&Ds|MGi6<%2dyD6#uhsy<`P!9-o+qK#PRk3g?Xrf}$f6UG{#3 zXJ@mvp8k#uxveAy1_E&(KL+LI-Vu|O>|R)420y8?u7ai_3=pG{O!-Fl!@{{0IXO9d zV4W0V`Qjhmq^B>ceGBCN8pab6sJ_;x!r-5PT=H_m}P0_nd=MTHB8!=t^~ zsfcZCY=pp@t-$>+NnLn7Ve?MZg?j_512jw-cpEx_*Z7{Eo?tR@t;*&jnLVGyt%KTY z%}0>q1yAY(`4kkGf%$Vg9FoL}brhYi52b}pmFg<RlY{G(!GLVyd8h>ZL*p$X5a ztGmE*QnDySb%#=RPfgM4*V}Xg4UW&s0!V)SNk2bGP)Nv^wr0RK*B%XM?{)Xrt2PO? z*A$bHxlPUWR0W_9&{8xSU1c_On}(K_je~;#c+FG^+uOipaqz!Dr83n4>tY2H<>4Vt z5j5zEVUlgGV?aoG9B~_ZY;o|vs!`D+`lL?yNj)UR(BlzHTEmFUHtCHU-@1ZHgSSM@ z1|hu;QcjyU|6N=dzkgqekpl1oeCzUReWyKl`f794J^-ZI_~QH+D(k`@!vc>1)=WK3f?U7Bt|w0|whF|<&BMb4_%RR07ipd+ zdpU)L4|YenIOV4#ZRf^|q<9 z21P<5qLcG^Ca?uAE-ri`qLr5Y_7|jTMn{V@0^y>b8 zESN)qu;Bwg1~dw^^6we4u0e_z*FiAKxS(PDiHZhZn^G`C zJC-SwV5$Q(PMmXeco>+K#d1AS1YxYZY#wGiF3)Q}KliAkCm(GOwYIQ$_A`^|SX@Hl zH-KCz$8|DJjn9CC#>*)YWB>@S^G^XvwPC^I$vyF%-Fi(_X<5Z?NC+WJ&g~{C9lxTw zIvFtBT8x!g;6R;9 z!)S1JUP(E*_Bf>5Z#(XOzEoH>t-{6u00!lCGt;X;ix>$V92znPSUEnfm7kyQx>{m%YbegKdg~}qY-j;xZ&E8y>;!02S14tfzija67BhQ zS2UZWqvP`CW^u!3a+jZ6fJ@(c{UNxX#{fjKnXMtH?6{PnV3rFjEaa4um0by@H&lES ze(svy@$c`z>G@9Ob3;Q4aK^&IZe-BY&&~Y&$>=rMpU8y(>?-An;Ro}~(eZIyMn*p9KA&W5PZw=udQzlG*mgB6`a}YBAU$CNNBGMj^B+))aR~_lfPhHp1(`PDz@Aq7 z;tviEzWwfrJl1*N(DDgP1D{C8$c`Q78Wl&x#2|k)IZoL@sJjOS2JjFzv;KHQlkKOO z3o`7vO8b*!CLqnHhgnx;4w=A0Ojj7lRuOD + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__inherit__graph.md5 new file mode 100644 index 00000000..80e7ac14 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__inherit__graph.md5 @@ -0,0 +1 @@ +793e800baefb515ee99a2226b4f2ec5d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__ORB__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9222b2ff3d160dbe7ff824632c948e879f41f4ec GIT binary patch literal 6209 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__coll__graph.md5 new file mode 100644 index 00000000..25dae58f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__coll__graph.md5 @@ -0,0 +1 @@ +db11e38c00aeb2804a24a394c9cc7674 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..557b6a77ff4b3b83dcdbc764e7e7d1368bc52ef6 GIT binary patch literal 4014 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 + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__inherit__graph.md5 new file mode 100644 index 00000000..3a00b07c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__inherit__graph.md5 @@ -0,0 +1 @@ +e3a9c71ccd759b43992c038a47127bf0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GFTT__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3310fe5d72220b4eae457e414eff0eafcf9e87 GIT binary patch literal 13971 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GPS-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GPS-members.html new file mode 100644 index 00000000..890cec78 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GPS-members.html @@ -0,0 +1,101 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GPS Member List
+
+
+ +

This is the complete list of members for rtabmap::GPS, including all inherited members.

+ + + + + + + + + + +
altitude() constrtabmap::GPSinline
bearing() constrtabmap::GPSinline
error() constrtabmap::GPSinline
GPS()rtabmap::GPSinline
GPS(const double &stamp, const double &longitude, const double &latitude, const double &altitude, const double &error, const double &bearing)rtabmap::GPSinline
latitude() constrtabmap::GPSinline
longitude() constrtabmap::GPSinline
stamp() constrtabmap::GPSinline
toGeodeticCoords() constrtabmap::GPSinline
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GPS.html b/preview/pr-1492/api/latest/classrtabmap_1_1GPS.html new file mode 100644 index 00000000..b79a2065 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GPS.html @@ -0,0 +1,434 @@ + + + + + + + + +RTAB-Map: rtabmap::GPS Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GPS Class Reference
+
+
+ +

WGS84 GPS fix attached to a sensor sample or graph node. + More...

+ +

#include <GPS.h>

+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 GPS ()
 Default-constructs a fix at the origin with zero stamp and error.
 
 GPS (const double &stamp, const double &longitude, const double &latitude, const double &altitude, const double &error, const double &bearing)
 Constructs a GPS fix.
 
const double & stamp () const
 
const double & longitude () const
 
const double & latitude () const
 
const double & altitude () const
 
const double & error () const
 
const double & bearing () const
 
GeodeticCoords toGeodeticCoords () const
 
+

Detailed Description

+

WGS84 GPS fix attached to a sensor sample or graph node.

+

Stores a timestamped geographic position with horizontal accuracy and bearing. Values are persisted in the database as six doubles in the order stamp, longitude, latitude, altitude, error, bearing.

+
See also
SensorData::gps()
+
+GeodeticCoords
+ +

Definition at line 46 of file GPS.h.

+

Constructor & Destructor Documentation

+ +

◆ GPS() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::GPS::GPS ()
+
+inline
+
+ +

Default-constructs a fix at the origin with zero stamp and error.

+ +

Definition at line 50 of file GPS.h.

+ +
+
+ +

◆ GPS() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::GPS::GPS (const double & stamp,
const double & longitude,
const double & latitude,
const double & altitude,
const double & error,
const double & bearing 
)
+
+inline
+
+ +

Constructs a GPS fix.

+
Parameters
+ + + + + + + +
stampTimestamp in seconds.
longitudeLongitude in decimal degrees (DD, east positive).
latitudeLatitude in decimal degrees (DD, north positive).
altitudeAltitude in meters above the WGS84 ellipsoid.
errorHorizontal position error radius in meters.
bearingHeading in degrees, 0 = north, increasing clockwise.
+
+
+ +

Definition at line 67 of file GPS.h.

+ +
+
+

Member Function Documentation

+ +

◆ stamp()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::GPS::stamp () const
+
+inline
+
+
Returns
Timestamp in seconds.
+ +

Definition at line 81 of file GPS.h.

+ +
+
+ +

◆ longitude()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::GPS::longitude () const
+
+inline
+
+
Returns
Longitude in decimal degrees (DD).
+ +

Definition at line 83 of file GPS.h.

+ +
+
+ +

◆ latitude()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::GPS::latitude () const
+
+inline
+
+
Returns
Latitude in decimal degrees (DD).
+ +

Definition at line 85 of file GPS.h.

+ +
+
+ +

◆ altitude()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::GPS::altitude () const
+
+inline
+
+
Returns
Altitude in meters.
+ +

Definition at line 87 of file GPS.h.

+ +
+
+ +

◆ error()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::GPS::error () const
+
+inline
+
+
Returns
Horizontal position error in meters.
+ +

Definition at line 89 of file GPS.h.

+ +
+
+ +

◆ bearing()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::GPS::bearing () const
+
+inline
+
+
Returns
Bearing in degrees (north = 0, clockwise).
+ +

Definition at line 91 of file GPS.h.

+ +
+
+ +

◆ toGeodeticCoords()

+ +
+
+ + + + + +
+ + + + + + + +
GeodeticCoords rtabmap::GPS::toGeodeticCoords () const
+
+inline
+
+
Returns
GeodeticCoords built from latitude(), longitude() and altitude().
+ +

Definition at line 96 of file GPS.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/GPS.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GainCompensator-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GainCompensator-members.html new file mode 100644 index 00000000..eec869d4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GainCompensator-members.html @@ -0,0 +1,106 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GainCompensator Member List
+
+
+ +

This is the complete list of members for rtabmap::GainCompensator, including all inherited members.

+ + + + + + + + + + + + + + + +
apply(int id, pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, bool rgb=true) const (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
apply(int id, pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, bool rgb=true) const (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
apply(int id, pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool rgb=true) const (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
apply(int id, cv::Mat &image, bool rgb=true) const (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
feed(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloudA, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloudB, const Transform &transformB) (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
feed(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloudA, const pcl::IndicesPtr &indicesA, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloudB, const pcl::IndicesPtr &indicesB, const Transform &transformB) (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
feed(const std::map< int, pcl::PointCloud< pcl::PointXYZRGB >::Ptr > &clouds, const std::multimap< int, Link > &links) (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
feed(const std::map< int, pcl::PointCloud< pcl::PointXYZRGB >::Ptr > &clouds, const std::map< int, pcl::IndicesPtr > &indices, const std::multimap< int, Link > &links) (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
feed(const std::map< int, pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr > &clouds, const std::map< int, pcl::IndicesPtr > &indices, const std::multimap< int, Link > &links) (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
feed(const std::map< int, std::pair< pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr, pcl::IndicesPtr > > &clouds, const std::multimap< int, Link > &links) (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
GainCompensator(double maxCorrespondenceDistance=0.02, double minOverlap=0.0, double alpha=0.01, double beta=10) (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
getGain(int id, double *r=0, double *g=0, double *b=0) const (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
getIndex(int id) const (defined in rtabmap::GainCompensator)rtabmap::GainCompensator
~GainCompensator() (defined in rtabmap::GainCompensator)rtabmap::GainCompensatorvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GainCompensator.html b/preview/pr-1492/api/latest/classrtabmap_1_1GainCompensator.html new file mode 100644 index 00000000..6aafc740 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GainCompensator.html @@ -0,0 +1,144 @@ + + + + + + + + +RTAB-Map: rtabmap::GainCompensator Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GainCompensator Class Reference
+
+
+ +

#include <GainCompensator.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ GainCompensator (double maxCorrespondenceDistance=0.02, double minOverlap=0.0, double alpha=0.01, double beta=10)
 
+void feed (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloudA, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloudB, const Transform &transformB)
 
+void feed (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloudA, const pcl::IndicesPtr &indicesA, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloudB, const pcl::IndicesPtr &indicesB, const Transform &transformB)
 
+void feed (const std::map< int, pcl::PointCloud< pcl::PointXYZRGB >::Ptr > &clouds, const std::multimap< int, Link > &links)
 
+void feed (const std::map< int, pcl::PointCloud< pcl::PointXYZRGB >::Ptr > &clouds, const std::map< int, pcl::IndicesPtr > &indices, const std::multimap< int, Link > &links)
 
+void feed (const std::map< int, pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr > &clouds, const std::map< int, pcl::IndicesPtr > &indices, const std::multimap< int, Link > &links)
 
+void feed (const std::map< int, std::pair< pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr, pcl::IndicesPtr > > &clouds, const std::multimap< int, Link > &links)
 
+void apply (int id, pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, bool rgb=true) const
 
+void apply (int id, pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, bool rgb=true) const
 
+void apply (int id, pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool rgb=true) const
 
+void apply (int id, cv::Mat &image, bool rgb=true) const
 
+double getGain (int id, double *r=0, double *g=0, double *b=0) const
 
+int getIndex (int id) const
 
+

Detailed Description

+

Works like cv::GainCompensator but with point clouds

+ +

Definition at line 44 of file GainCompensator.h.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GeodeticCoords-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GeodeticCoords-members.html new file mode 100644 index 00000000..995e2d73 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GeodeticCoords-members.html @@ -0,0 +1,106 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GeodeticCoords Member List
+
+
+ +

This is the complete list of members for rtabmap::GeodeticCoords, including all inherited members.

+ + + + + + + + + + + + + + + +
altitude() constrtabmap::GeodeticCoordsinline
ENU_WGS84ToGeocentric_WGS84(const cv::Point3d &enu, const GeodeticCoords &origin)rtabmap::GeodeticCoordsstatic
fromENU_WGS84(const cv::Point3d &enu, const GeodeticCoords &origin)rtabmap::GeodeticCoords
fromGeocentric_WGS84(const cv::Point3d &geocentric)rtabmap::GeodeticCoords
Geocentric_WGS84ToENU_WGS84(const cv::Point3d &geocentric_WGS84, const cv::Point3d &origin_geocentric_WGS84, const GeodeticCoords &origin)rtabmap::GeodeticCoordsstatic
GeodeticCoords()rtabmap::GeodeticCoords
GeodeticCoords(double latitude, double longitude, double altitude)rtabmap::GeodeticCoords
latitude() constrtabmap::GeodeticCoordsinline
longitude() constrtabmap::GeodeticCoordsinline
setAltitude(const double &value)rtabmap::GeodeticCoordsinline
setLatitude(const double &value)rtabmap::GeodeticCoordsinline
setLongitude(const double &value)rtabmap::GeodeticCoordsinline
toENU_WGS84(const GeodeticCoords &origin) constrtabmap::GeodeticCoords
toGeocentric_WGS84() constrtabmap::GeodeticCoords
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GeodeticCoords.html b/preview/pr-1492/api/latest/classrtabmap_1_1GeodeticCoords.html new file mode 100644 index 00000000..fd972bfd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GeodeticCoords.html @@ -0,0 +1,495 @@ + + + + + + + + +RTAB-Map: rtabmap::GeodeticCoords Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GeodeticCoords Class Reference
+
+
+ +

WGS84 geodetic latitude, longitude and altitude with coordinate conversions. + More...

+ +

#include <GeodeticCoords.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ GeodeticCoords ()
 Default-constructs coordinates at (0°, 0°, 0 m).
 
 GeodeticCoords (double latitude, double longitude, double altitude)
 Constructs geodetic coordinates.
 
const double & latitude () const
 
const double & longitude () const
 
const double & altitude () const
 
void setLatitude (const double &value)
 Sets latitude in decimal degrees.
 
void setLongitude (const double &value)
 Sets longitude in decimal degrees.
 
void setAltitude (const double &value)
 Sets altitude in meters.
 
cv::Point3d toGeocentric_WGS84 () const
 
cv::Point3d toENU_WGS84 (const GeodeticCoords &origin) const
 
+void fromGeocentric_WGS84 (const cv::Point3d &geocentric)
 Sets this point from ECEF geocentric geocentric coordinates.
 
+void fromENU_WGS84 (const cv::Point3d &enu, const GeodeticCoords &origin)
 Sets this point from an ENU offset relative to origin.
 
+ + + + + +

+Static Public Member Functions

static cv::Point3d ENU_WGS84ToGeocentric_WGS84 (const cv::Point3d &enu, const GeodeticCoords &origin)
 
static cv::Point3d Geocentric_WGS84ToENU_WGS84 (const cv::Point3d &geocentric_WGS84, const cv::Point3d &origin_geocentric_WGS84, const GeodeticCoords &origin)
 
+

Detailed Description

+

WGS84 geodetic latitude, longitude and altitude with coordinate conversions.

+

Conversions follow the WGS84 reference ellipsoid (MRPT-derived implementation). ENU frames use east = X, north = Y, up = Z relative to a local origin.

+
See also
GPS::toGeodeticCoords()
+ +

Definition at line 61 of file GeodeticCoords.h.

+

Constructor & Destructor Documentation

+ +

◆ GeodeticCoords()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::GeodeticCoords::GeodeticCoords (double latitude,
double longitude,
double altitude 
)
+
+ +

Constructs geodetic coordinates.

+
Parameters
+ + + + +
latitudeLatitude in decimal degrees (DD, north positive).
longitudeLongitude in decimal degrees (DD, east positive).
altitudeAltitude in meters above the WGS84 ellipsoid.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ latitude()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::GeodeticCoords::latitude () const
+
+inline
+
+
Returns
Latitude in decimal degrees.
+ +

Definition at line 75 of file GeodeticCoords.h.

+ +
+
+ +

◆ longitude()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::GeodeticCoords::longitude () const
+
+inline
+
+
Returns
Longitude in decimal degrees.
+ +

Definition at line 77 of file GeodeticCoords.h.

+ +
+
+ +

◆ altitude()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::GeodeticCoords::altitude () const
+
+inline
+
+
Returns
Altitude in meters.
+ +

Definition at line 79 of file GeodeticCoords.h.

+ +
+
+ +

◆ setLatitude()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::GeodeticCoords::setLatitude (const double & value)
+
+inline
+
+ +

Sets latitude in decimal degrees.

+ +

Definition at line 82 of file GeodeticCoords.h.

+ +
+
+ +

◆ setLongitude()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::GeodeticCoords::setLongitude (const double & value)
+
+inline
+
+ +

Sets longitude in decimal degrees.

+ +

Definition at line 84 of file GeodeticCoords.h.

+ +
+
+ +

◆ setAltitude()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::GeodeticCoords::setAltitude (const double & value)
+
+inline
+
+ +

Sets altitude in meters.

+ +

Definition at line 86 of file GeodeticCoords.h.

+ +
+
+ +

◆ toGeocentric_WGS84()

+ +
+
+ + + + + + + +
cv::Point3d rtabmap::GeodeticCoords::toGeocentric_WGS84 () const
+
+
Returns
ECEF geocentric coordinates (meters) in the WGS84 frame.
+ +
+
+ +

◆ toENU_WGS84()

+ +
+
+ + + + + + + + +
cv::Point3d rtabmap::GeodeticCoords::toENU_WGS84 (const GeodeticCoords & origin) const
+
+
Returns
ENU offset (meters) from origin to this point. East = X, north = Y, up = Z.
+ +
+
+ +

◆ ENU_WGS84ToGeocentric_WGS84()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static cv::Point3d rtabmap::GeodeticCoords::ENU_WGS84ToGeocentric_WGS84 (const cv::Point3d & enu,
const GeodeticCoords & origin 
)
+
+static
+
+
Returns
ECEF geocentric coordinates of ENU point enu relative to origin.
+ +
+
+ +

◆ Geocentric_WGS84ToENU_WGS84()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static cv::Point3d rtabmap::GeodeticCoords::Geocentric_WGS84ToENU_WGS84 (const cv::Point3d & geocentric_WGS84,
const cv::Point3d & origin_geocentric_WGS84,
const GeodeticCoords & origin 
)
+
+static
+
+
Returns
ENU offset from geocentric origin_geocentric_WGS84 to geocentric_WGS84.
+
Parameters
+ + +
originGeodetic origin used to define the local ENU basis.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptor-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptor-members.html new file mode 100644 index 00000000..6062717b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptor-members.html @@ -0,0 +1,98 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GlobalDescriptor Member List
+
+
+ +

This is the complete list of members for rtabmap::GlobalDescriptor, including all inherited members.

+ + + + + + + +
data() const (defined in rtabmap::GlobalDescriptor)rtabmap::GlobalDescriptorinline
GlobalDescriptor(int type, const cv::Mat &data, const cv::Mat &info=cv::Mat()) (defined in rtabmap::GlobalDescriptor)rtabmap::GlobalDescriptorinline
GlobalDescriptor() (defined in rtabmap::GlobalDescriptor)rtabmap::GlobalDescriptorinline
info() const (defined in rtabmap::GlobalDescriptor)rtabmap::GlobalDescriptorinline
type() const (defined in rtabmap::GlobalDescriptor)rtabmap::GlobalDescriptorinline
~GlobalDescriptor() (defined in rtabmap::GlobalDescriptor)rtabmap::GlobalDescriptorinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptor.html b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptor.html new file mode 100644 index 00000000..1a947f51 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptor.html @@ -0,0 +1,291 @@ + + + + + + + + +RTAB-Map: rtabmap::GlobalDescriptor Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GlobalDescriptor Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

 GlobalDescriptor (int type, const cv::Mat &data, const cv::Mat &info=cv::Mat())
 
int type () const
 
const cv::Mat info () const
 
const cv::Mat data () const
 
+

Detailed Description

+
+

Definition at line 35 of file GlobalDescriptor.h.

+

Constructor & Destructor Documentation

+ +

◆ GlobalDescriptor() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::GlobalDescriptor::GlobalDescriptor (int type,
const cv::Mat & data,
const cv::Mat & info = cv::Mat() 
)
+
+inline
+
+ +

Definition at line 39 of file GlobalDescriptor.h.

+ +
+
+ +

◆ GlobalDescriptor() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::GlobalDescriptor::GlobalDescriptor ()
+
+inline
+
+ +

Definition at line 44 of file GlobalDescriptor.h.

+ +
+
+ +

◆ ~GlobalDescriptor()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::GlobalDescriptor::~GlobalDescriptor ()
+
+inlinevirtual
+
+ +

Definition at line 47 of file GlobalDescriptor.h.

+ +
+
+

Member Function Documentation

+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::GlobalDescriptor::type () const
+
+inline
+
+ +

Definition at line 49 of file GlobalDescriptor.h.

+ +
+
+ +

◆ info()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat rtabmap::GlobalDescriptor::info () const
+
+inline
+
+ +

Definition at line 50 of file GlobalDescriptor.h.

+ +
+
+ +

◆ data()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat rtabmap::GlobalDescriptor::data () const
+
+inline
+
+ +

Definition at line 51 of file GlobalDescriptor.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptorExtractor-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptorExtractor-members.html new file mode 100644 index 00000000..42b5da49 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptorExtractor-members.html @@ -0,0 +1,103 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GlobalDescriptorExtractor Member List
+
+
+ +

This is the complete list of members for rtabmap::GlobalDescriptorExtractor, including all inherited members.

+ + + + + + + + + + + + +
create(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractorstatic
create(GlobalDescriptorExtractor::Type type, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractorstatic
extract(const SensorData &data) const =0 (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractorpure virtual
getType() const =0 (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractorpure virtual
GlobalDescriptorExtractor(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractorprotected
kPyDescriptor enum value (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractor
kUndef enum value (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractor
parseParameters(const ParametersMap &parameters) (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractorinlinevirtual
Type enum name (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractor
typeName(Type type) (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractorinlinestatic
~GlobalDescriptorExtractor() (defined in rtabmap::GlobalDescriptorExtractor)rtabmap::GlobalDescriptorExtractorvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptorExtractor.html b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptorExtractor.html new file mode 100644 index 00000000..e486f11d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalDescriptorExtractor.html @@ -0,0 +1,211 @@ + + + + + + + + +RTAB-Map: rtabmap::GlobalDescriptorExtractor Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GlobalDescriptorExtractor Class Referenceabstract
+
+
+ + + + +

+Public Types

enum  Type { kUndef =0 +, kPyDescriptor =1 + }
 
+ + + + + + + +

+Public Member Functions

+virtual GlobalDescriptor extract (const SensorData &data) const =0
 
virtual void parseParameters (const ParametersMap &parameters)
 
+virtual GlobalDescriptorExtractor::Type getType () const =0
 
+ + + + + + + +

+Static Public Member Functions

static std::string typeName (Type type)
 
+static GlobalDescriptorExtractor * create (const ParametersMap &parameters=ParametersMap())
 
+static GlobalDescriptorExtractor * create (GlobalDescriptorExtractor::Type type, const ParametersMap &parameters=ParametersMap())
 
+ + + +

+Protected Member Functions

+ GlobalDescriptorExtractor (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+
+

Definition at line 40 of file GlobalDescriptorExtractor.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::GlobalDescriptorExtractor::Type
+
+ +

Definition at line 42 of file GlobalDescriptorExtractor.h.

+ +
+
+

Member Function Documentation

+ +

◆ typeName()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string rtabmap::GlobalDescriptorExtractor::typeName (Type type)
+
+inlinestatic
+
+ +

Definition at line 46 of file GlobalDescriptorExtractor.h.

+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::GlobalDescriptorExtractor::parseParameters (const ParametersMap & parameters)
+
+inlinevirtual
+
+ +

Definition at line 64 of file GlobalDescriptorExtractor.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap-members.html new file mode 100644 index 00000000..cffccd86 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap-members.html @@ -0,0 +1,121 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GlobalMap Member List
+
+
+ +

This is the complete list of members for rtabmap::GlobalMap, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addAssembledNode(int id, const Transform &pose)rtabmap::GlobalMapprotected
addedNodes() constrtabmap::GlobalMapinline
assemble(const std::list< std::pair< int, Transform > > &newPoses)=0rtabmap::GlobalMapprotectedpure virtual
assembledNodes() constrtabmap::GlobalMapinlineprotected
cache() constrtabmap::GlobalMapinlineprotected
cellSize_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
clear()rtabmap::GlobalMapvirtual
fullUpdateNeeded(const std::map< int, Transform > &poses) constrtabmap::GlobalMap
getCellSize() constrtabmap::GlobalMapinline
getGridMax(double &x, double &y) constrtabmap::GlobalMapinline
getGridMax(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getMemoryUsed() constrtabmap::GlobalMapvirtual
getUpdateError() constrtabmap::GlobalMapinline
GlobalMap(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())rtabmap::GlobalMapprotected
isNodeAssembled(int id)rtabmap::GlobalMapinlineprotected
logodds(double probability)rtabmap::GlobalMapinlinestatic
logOddsClampingMax_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsClampingMin_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsHit_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsMiss_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
maxValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
minValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
occupancyThr_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
probability(double logodds)rtabmap::GlobalMapinlinestatic
update(const std::map< int, Transform > &poses)rtabmap::GlobalMap
updateError_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
~GlobalMap() (defined in rtabmap::GlobalMap)rtabmap::GlobalMapvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap.html b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap.html new file mode 100644 index 00000000..37ad2a16 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap.html @@ -0,0 +1,1016 @@ + + + + + + + + +RTAB-Map: rtabmap::GlobalMap Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Abstract base for assembling per-node LocalGrid data into a global map. + More...

+ +

#include <GlobalMap.h>

+
+Inheritance diagram for rtabmap::GlobalMap:
+
+
Inheritance graph
+ + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool fullUpdateNeeded (const std::map< int, Transform > &poses) const
 True if the map should be rebuilt from cache (loop closure or disjoint graph).
 
bool update (const std::map< int, Transform > &poses)
 Incrementally assemble new nodes from poses.
 
virtual void clear ()
 Clears assembled nodes and grid bounds; does not clear LocalGridCache.
 
float getCellSize () const
 
float getUpdateError () const
 
const std::map< int, Transform > & addedNodes () const
 
void getGridMin (double &x, double &y) const
 2D grid minimum (x, y) in meters.
 
void getGridMax (double &x, double &y) const
 2D grid maximum (x, y) in meters.
 
void getGridMin (double &x, double &y, double &z) const
 3D grid minimum (x, y, z) in meters.
 
void getGridMax (double &x, double &y, double &z) const
 3D grid maximum (x, y, z) in meters.
 
virtual unsigned long getMemoryUsed () const
 Approximate memory used by assembled-node bookkeeping (bytes).
 
+ + + + + + + +

+Static Public Member Functions

static float logodds (double probability)
 Converts probability in (0, 1) to log-odds.
 
static double probability (double logodds)
 Converts log-odds back to probability in (0, 1).
 
+ + + + + + + + + + + + + + + + +

+Protected Member Functions

 GlobalMap (const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
 Constructs the base map; subclasses call from their constructor.
 
virtual void assemble (const std::list< std::pair< int, Transform > > &newPoses)=0
 Subclass hook: merge newPoses into the global map; call addAssembledNode().
 
const std::map< int, LocalGrid > & cache () const
 
const std::map< int, Transform > & assembledNodes () const
 
bool isNodeAssembled (int id)
 
+void addAssembledNode (int id, const Transform &pose)
 Records a successfully assembled node (ids <= 0 are ignored).
 
+ + + + + + + + + + + + + + + + + + + +

+Protected Attributes

float cellSize_
 
float updateError_
 
float occupancyThr_
 
float logOddsHit_
 
float logOddsMiss_
 
float logOddsClampingMin_
 
float logOddsClampingMax_
 
double minValues_ [3]
 
double maxValues_ [3]
 
+

Detailed Description

+

Abstract base for assembling per-node LocalGrid data into a global map.

+

Subclasses (OccupancyGrid, OctoMap, GridMap, CloudMap) implement assemble() to merge new node poses from LocalGridCache into their representation.

+

update() decides which poses need assembly (not yet in addedNodes(), present in cache, id > 0) and may call clear() when fullUpdateNeeded() detects graph optimization or a disjoint pose set (see kGridGlobalUpdateError).

+

Log-odds helpers logodds() and probability() convert between occupancy probability and the internal log-odds representation used for global hit/miss/clamping parameters (GridGlobal/Prob*).

+ +

Definition at line 55 of file GlobalMap.h.

+

Constructor & Destructor Documentation

+ +

◆ GlobalMap()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::GlobalMap::GlobalMap (const LocalGridCache * cache,
const ParametersMap & parameters = ParametersMap() 
)
+
+protected
+
+ +

Constructs the base map; subclasses call from their constructor.

+
Parameters
+ + + +
cacheNon-null cache of per-node local grids.
parametersOptional Grid/ and GridGlobal/ parameter overrides.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ logodds()

+ +
+
+ + + + + +
+ + + + + + + + +
static float rtabmap::GlobalMap::logodds (double probability)
+
+inlinestatic
+
+ +

Converts probability in (0, 1) to log-odds.

+ +

Definition at line 59 of file GlobalMap.h.

+ +
+
+ +

◆ probability()

+ +
+
+ + + + + +
+ + + + + + + + +
static double rtabmap::GlobalMap::probability (double logodds)
+
+inlinestatic
+
+ +

Converts log-odds back to probability in (0, 1).

+ +

Definition at line 65 of file GlobalMap.h.

+ +
+
+ +

◆ fullUpdateNeeded()

+ +
+
+ + + + + + + + +
bool rtabmap::GlobalMap::fullUpdateNeeded (const std::map< int, Transform > & poses) const
+
+ +

True if the map should be rebuilt from cache (loop closure or disjoint graph).

+

Compares poses to addedNodes() using getUpdateError(), which is set from Grid/GlobalUpdateError (Parameters::kGridGlobalUpdateError()): if any assembled node's pose moved farther than that threshold (meters), or if none of the assembled nodes appear in poses, returns true and update() will call clear() first.

+
Parameters
+ + +
posesCurrent graph poses (node id → transform).
+
+
+ +
+
+ +

◆ update()

+ +
+
+ + + + + + + + +
bool rtabmap::GlobalMap::update (const std::map< int, Transform > & poses)
+
+ +

Incrementally assemble new nodes from poses.

+
Parameters
+ + +
posesGraph poses; ids > 0 with a cached LocalGrid are candidates.
+
+
+
Returns
True if assemble() was called (at least one new pose processed).
+ +
+
+ +

◆ clear()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void rtabmap::GlobalMap::clear ()
+
+virtual
+
+ +

Clears assembled nodes and grid bounds; does not clear LocalGridCache.

+ +

Reimplemented in rtabmap::CloudMap, rtabmap::GridMap, rtabmap::OccupancyGrid, and rtabmap::OctoMap.

+ +
+
+ +

◆ getCellSize()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::GlobalMap::getCellSize () const
+
+inline
+
+
Returns
Grid cell size in meters (Grid/CellSize).
+ +

Definition at line 96 of file GlobalMap.h.

+ +
+
+ +

◆ getUpdateError()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::GlobalMap::getUpdateError () const
+
+inline
+
+
Returns
Pose change threshold for full rebuild (Grid/GlobalUpdateError).
+ +

Definition at line 98 of file GlobalMap.h.

+ +
+
+ +

◆ addedNodes()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Transform > & rtabmap::GlobalMap::addedNodes () const
+
+inline
+
+
Returns
Poses of nodes already assembled into the global map.
+ +

Definition at line 100 of file GlobalMap.h.

+ +
+
+ +

◆ getGridMin() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void rtabmap::GlobalMap::getGridMin (double & x,
double & y 
) const
+
+inline
+
+ +

2D grid minimum (x, y) in meters.

+ +

Definition at line 103 of file GlobalMap.h.

+ +
+
+ +

◆ getGridMax() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void rtabmap::GlobalMap::getGridMax (double & x,
double & y 
) const
+
+inline
+
+ +

2D grid maximum (x, y) in meters.

+ +

Definition at line 105 of file GlobalMap.h.

+ +
+
+ +

◆ getGridMin() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::GlobalMap::getGridMin (double & x,
double & y,
double & z 
) const
+
+inline
+
+ +

3D grid minimum (x, y, z) in meters.

+ +

Definition at line 107 of file GlobalMap.h.

+ +
+
+ +

◆ getGridMax() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::GlobalMap::getGridMax (double & x,
double & y,
double & z 
) const
+
+inline
+
+ +

3D grid maximum (x, y, z) in meters.

+ +

Definition at line 109 of file GlobalMap.h.

+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned long rtabmap::GlobalMap::getMemoryUsed () const
+
+virtual
+
+ +

Approximate memory used by assembled-node bookkeeping (bytes).

+ +

Reimplemented in rtabmap::CloudMap, rtabmap::OccupancyGrid, and rtabmap::OctoMap.

+ +
+
+ +

◆ assemble()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::GlobalMap::assemble (const std::list< std::pair< int, Transform > > & newPoses)
+
+protectedpure virtual
+
+ +

Subclass hook: merge newPoses into the global map; call addAssembledNode().

+ +

Implemented in rtabmap::CloudMap, rtabmap::GridMap, rtabmap::OccupancyGrid, and rtabmap::OctoMap.

+ +
+
+ +

◆ cache()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, LocalGrid > & rtabmap::GlobalMap::cache () const
+
+inlineprotected
+
+
Returns
Cached local grids keyed by node id.
+ +

Definition at line 126 of file GlobalMap.h.

+ +
+
+ +

◆ assembledNodes()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Transform > & rtabmap::GlobalMap::assembledNodes () const
+
+inlineprotected
+
+
Returns
Poses of nodes already assembled (same as addedNodes()).
+ +

Definition at line 129 of file GlobalMap.h.

+ +
+
+ +

◆ isNodeAssembled()

+ +
+
+ + + + + +
+ + + + + + + + +
bool rtabmap::GlobalMap::isNodeAssembled (int id)
+
+inlineprotected
+
+
Returns
True if id is already in the assembled set.
+ +

Definition at line 131 of file GlobalMap.h.

+ +
+
+

Member Data Documentation

+ +

◆ cellSize_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::GlobalMap::cellSize_
+
+protected
+
+ +

Definition at line 136 of file GlobalMap.h.

+ +
+
+ +

◆ updateError_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::GlobalMap::updateError_
+
+protected
+
+ +

Definition at line 137 of file GlobalMap.h.

+ +
+
+ +

◆ occupancyThr_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::GlobalMap::occupancyThr_
+
+protected
+
+ +

Definition at line 139 of file GlobalMap.h.

+ +
+
+ +

◆ logOddsHit_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::GlobalMap::logOddsHit_
+
+protected
+
+ +

Definition at line 140 of file GlobalMap.h.

+ +
+
+ +

◆ logOddsMiss_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::GlobalMap::logOddsMiss_
+
+protected
+
+ +

Definition at line 141 of file GlobalMap.h.

+ +
+
+ +

◆ logOddsClampingMin_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::GlobalMap::logOddsClampingMin_
+
+protected
+
+ +

Definition at line 142 of file GlobalMap.h.

+ +
+
+ +

◆ logOddsClampingMax_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::GlobalMap::logOddsClampingMax_
+
+protected
+
+ +

Definition at line 143 of file GlobalMap.h.

+ +
+
+ +

◆ minValues_

+ +
+
+ + + + + +
+ + + + +
double rtabmap::GlobalMap::minValues_[3]
+
+protected
+
+ +

Definition at line 145 of file GlobalMap.h.

+ +
+
+ +

◆ maxValues_

+ +
+
+ + + + + +
+ + + + +
double rtabmap::GlobalMap::maxValues_[3]
+
+protected
+
+ +

Definition at line 146 of file GlobalMap.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.map new file mode 100644 index 00000000..aac75644 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.md5 new file mode 100644 index 00000000..c22847f6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.md5 @@ -0,0 +1 @@ +8d427454b28808662072ef9544efed17 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GlobalMap__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7bd7292398a40b6684cc95b0bac1b5c059af68 GIT binary patch literal 13175 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

wThq?dsJq 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +

+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::GridMap Member List
+
+
+ +

This is the complete list of members for rtabmap::GridMap, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addAssembledNode(int id, const Transform &pose)rtabmap::GlobalMapprotected
addedNodes() constrtabmap::GlobalMapinline
assemble(const std::list< std::pair< int, Transform > > &newPoses)rtabmap::GridMapprotectedvirtual
assembledNodes() constrtabmap::GlobalMapinlineprotected
cache() constrtabmap::GlobalMapinlineprotected
cellSize_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
clear()rtabmap::GridMapvirtual
createColorMap(float &xMin, float &yMin, float &cellSize) const (defined in rtabmap::GridMap)rtabmap::GridMap
createHeightMap(float &xMin, float &yMin, float &cellSize) const (defined in rtabmap::GridMap)rtabmap::GridMap
createTerrainCloud() const (defined in rtabmap::GridMap)rtabmap::GridMap
createTerrainMesh() const (defined in rtabmap::GridMap)rtabmap::GridMap
fullUpdateNeeded(const std::map< int, Transform > &poses) constrtabmap::GlobalMap
getCellSize() constrtabmap::GlobalMapinline
getGridMax(double &x, double &y) constrtabmap::GlobalMapinline
getGridMax(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getMemoryUsed() constrtabmap::GlobalMapvirtual
getUpdateError() constrtabmap::GlobalMapinline
GlobalMap(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())rtabmap::GlobalMapprotected
gridMap() const (defined in rtabmap::GridMap)rtabmap::GridMapinline
GridMap(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::GridMap)rtabmap::GridMap
isNodeAssembled(int id)rtabmap::GlobalMapinlineprotected
logodds(double probability)rtabmap::GlobalMapinlinestatic
logOddsClampingMax_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsClampingMin_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsHit_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsMiss_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
maxValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
minValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
occupancyThr_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
probability(double logodds)rtabmap::GlobalMapinlinestatic
update(const std::map< int, Transform > &poses)rtabmap::GlobalMap
updateError_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
~GlobalMap() (defined in rtabmap::GlobalMap)rtabmap::GlobalMapvirtual
~GridMap() (defined in rtabmap::GridMap)rtabmap::GridMapvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GridMap.html b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap.html new file mode 100644 index 00000000..f54ce9f8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap.html @@ -0,0 +1,307 @@ + + + + + + + + +RTAB-Map: rtabmap::GridMap Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::GridMap Class Reference
+
+
+
+Inheritance diagram for rtabmap::GridMap:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::GridMap:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ GridMap (const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
 
virtual void clear ()
 Clears assembled nodes and grid bounds; does not clear LocalGridCache.
 
const grid_map::GridMap * gridMap () const
 
+cv::Mat createHeightMap (float &xMin, float &yMin, float &cellSize) const
 
+cv::Mat createColorMap (float &xMin, float &yMin, float &cellSize) const
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr createTerrainCloud () const
 
+pcl::PolygonMesh::Ptr createTerrainMesh () const
 
- Public Member Functions inherited from rtabmap::GlobalMap
bool fullUpdateNeeded (const std::map< int, Transform > &poses) const
 True if the map should be rebuilt from cache (loop closure or disjoint graph).
 
bool update (const std::map< int, Transform > &poses)
 Incrementally assemble new nodes from poses.
 
float getCellSize () const
 
float getUpdateError () const
 
const std::map< int, Transform > & addedNodes () const
 
void getGridMin (double &x, double &y) const
 2D grid minimum (x, y) in meters.
 
void getGridMax (double &x, double &y) const
 2D grid maximum (x, y) in meters.
 
void getGridMin (double &x, double &y, double &z) const
 3D grid minimum (x, y, z) in meters.
 
void getGridMax (double &x, double &y, double &z) const
 3D grid maximum (x, y, z) in meters.
 
virtual unsigned long getMemoryUsed () const
 Approximate memory used by assembled-node bookkeeping (bytes).
 
+ + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual void assemble (const std::list< std::pair< int, Transform > > &newPoses)
 Subclass hook: merge newPoses into the global map; call addAssembledNode().
 
- Protected Member Functions inherited from rtabmap::GlobalMap
 GlobalMap (const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
 Constructs the base map; subclasses call from their constructor.
 
const std::map< int, LocalGrid > & cache () const
 
const std::map< int, Transform > & assembledNodes () const
 
bool isNodeAssembled (int id)
 
+void addAssembledNode (int id, const Transform &pose)
 Records a successfully assembled node (ids <= 0 are ignored).
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from rtabmap::GlobalMap
static float logodds (double probability)
 Converts probability in (0, 1) to log-odds.
 
static double probability (double logodds)
 Converts log-odds back to probability in (0, 1).
 
- Protected Attributes inherited from rtabmap::GlobalMap
float cellSize_
 
float updateError_
 
float occupancyThr_
 
float logOddsHit_
 
float logOddsMiss_
 
float logOddsClampingMin_
 
float logOddsClampingMax_
 
double minValues_ [3]
 
double maxValues_ [3]
 
+

Detailed Description

+
+

Definition at line 44 of file GridMap.h.

+

Member Function Documentation

+ +

◆ clear()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void rtabmap::GridMap::clear ()
+
+virtual
+
+ +

Clears assembled nodes and grid bounds; does not clear LocalGridCache.

+ +

Reimplemented from rtabmap::GlobalMap.

+ +
+
+ +

◆ gridMap()

+ +
+
+ + + + + +
+ + + + + + + +
const grid_map::GridMap * rtabmap::GridMap::gridMap () const
+
+inline
+
+ +

Definition at line 52 of file GridMap.h.

+ +
+
+ +

◆ assemble()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::GridMap::assemble (const std::list< std::pair< int, Transform > > & newPoses)
+
+protectedvirtual
+
+ +

Subclass hook: merge newPoses into the global map; call addAssembledNode().

+ +

Implements rtabmap::GlobalMap.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/global_map/GridMap.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.map new file mode 100644 index 00000000..c3cf58cc --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.md5 new file mode 100644 index 00000000..4bda067d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.md5 @@ -0,0 +1 @@ +a40bbcf0f292ffee2fc803c8693a3706 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ff19b9221a9a79243f57121dbafc89a8fd510d06 GIT binary patch literal 4291 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 Mc-aI+L^{R(2l|ODg#Z8m literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.map new file mode 100644 index 00000000..c3cf58cc --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.md5 new file mode 100644 index 00000000..4bda067d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.md5 @@ -0,0 +1 @@ +a40bbcf0f292ffee2fc803c8693a3706 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1GridMap__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ff19b9221a9a79243f57121dbafc89a8fd510d06 GIT binary patch literal 4291 zcmd6rhd@gE9*9pQO1>#lG{z;3gO~b zi0q<_aP5_>kni#MeSg2d;rF-fi}Sp@}BOiV+v zZ2bDK@}w7p-z82qFz4LdyTyoPV!B2~mhA_fm5}WmnvLqrIiY@=Tn$b=?R0#4*3Pjq zh4SVYCWcf>EE5Zhl5hR+1|#B3*3TIq+bzPdJ5}&?Hum7duy0erqWx^%I)s-w0a;`w z!<*s{kCbn7S(i?9Ms~pxe^0kmc@Mt9e5?u|w*9l*1~+DEg?}zSlloh_xYxsiuA#Ty ze}jacH^07w%sO3CMYVPb214LRrZgyF;#p0^ij3cr>DxHG>qo z;g)wE>-O~k|E1k*YW;*m?%6YE7^|zRX<5$P0a&cLrKRfJKPt_oe0?YWv$3GK_=C6Z zJx@GC9D0BJNK-ml>O8*WX#OYE+r-gl6TJkSkI-y3pL)~V+jO_Jne8kd26Ct z?S=cJwZ2o``C2>s8$Hzv8R_YMv)!WhA0oaRcidG8DGZQFYIjk%QNtP<8v4+v)J*O% z89U3qwL1R5x9NbdzwBD;BdIGS?5xQxclS6~+mO&un358EDxYGXP(^k1$>ii@a^NCg zL_`G1Ygma)Cj0q2M66$)o}HCaR^})uD0pZfEu*N|4mu&A<+wye@i{pHcN%amDeW$( z%a?WK9xvcS!J0t;p=V4B25vai2PsBGMm~DuntEM^7mC$q(zUSQ?k>Ez1zGy{qMC>}jM!o$r? z-WreE!$Ty%bnJhooRt4mpdGHS;O6RjsxD|*Xn3qXFE`f^@-QWZnW!x#6&IhF7!Vzn zgYXqIG%}Km=d`$Sc`}`RS^1BPwWh>>4vOb5ec1 z*8JR@1Q!?A^i$stu=)AL3E1Dn!#a!z`>3hNOK#MT12e1FhVz)s}y2mW6AH2v+xlrDp*QO zOLJ7+yJOx%Rh1)+3onZP`}gl$$eIMvvFZN1cWU-zKi${*nCObhvo6A-EG$0Js%cv+ z28xP`Oeapz!5G%p*T21W=g3mJ$^6);bnx|RU=FhAs~vO?5}W}F6}r&f+sk$H=1q^=wmy-Yvlry&r=zDwZ%usp5{bb`adUH%yuY7iU}Rj36o}s6@xN1LYimpPpMpAsOeQ$r z7D&!{Zjw(~7_6xK(Aa5ZWo2M&+&0!29(V`6ontHxmbbRGMQw>=tb0$-$nLZ-@B(}n zGaGiAbxj&}j27irve!W(W5+3s;rO3qyfved{35A8? z`}_M68J{^hISE+j3xNx09*;OX$7q^&RIw+}jK3j6N zxR=$_A(8a%9m>Wg$8baA8LN9Sc8ba-ncW$9Snz_d^`<$sLh4yMP7ALicZ$hq<{ zGyb6hq}T21SvS~+s}V{0qlf9u(WP(sw-24}Xk$)fxmNrg5{zn3JnPZs{+XZQ8#A;z zqI8$Hp5oZ>pLKnhGwuWMg>eTUp<+6B`hIkLX-@)pW{?G8F`9r1- z9WzUzRHzChY;3;jmO#UM`O6-#WGUqEg`e(Ix9E5@E&1~|9 zOhuRip-coS+@H)6_rZKvuRP?nydDtNi~*BXR%aC|($` zaM&|j==Uk@q|-|x{k82b#e`r^TTL8)U-VrR;kBrpz z^z{6@ys`dKTnd2*&g8|5wT{dQbjC4q5UeUxoGA?0cmxZF_(hbZCC}3G^5oJIYu55% zgc%ymP-=04gX4iNe*Ej#n7@C+&S`12ez)DrcnGY<>;)PKbbNL7CTSLKm(!k^o0|(n zuw|s$>kC&DT2@XD84z$5DB>iImRM7xQI3|2Pe_=Y$##Uc&NW?c@SCK-+UueYG^2KB z_;+@9Cl9vAXBWh^!{Wijo;5a#)(0)eW@l%cZwRs(-|2Y&UXv3!v9ORbGGYg0Kutpf zS!z*KQo;b4SX^XDK;jrV#2}EP>94F1x4oZPRlu@4oiUi=z#A`vMe6L?aXOIT;9!Uj z7ON^GBm@V`u2j8@!C;zH!l`%t{diq$c4^W?K<&j6pa z;1A|{rS?G#q1d)61%_jEnp#@b-I?*60|Ns(GQ10UY;?{2{XE;NVzR^qvk zYu#F_PQTisFZ#%2cfuYSIQjVC!Ri?p7@UASIoa~@D?6Yg{g=G6Bql`DE7Qg9&|JKGHygH4LNpGt*BMMaTFb0(Pa09#u@hse$AcU}>RNO3PwtBP5|6K7y7%zgs7*d_r`bpV#C&mmyEJ9V`mj` zx8ZpN_pZjt;;Ov@4IiQGrGIlvOKl)%<`x#mtgWpp#W^8mCiy8~=JXIMUijYb#%wWx zpd)`jBZCKWL@38_5Eed#3F2s(aV|yCR*I{?wUvIf#wQMN!&m@t9d}I#$Q%Px(~tB0 z&;94V!hY0m_h5hH0?=k=F>7mnObkB@1sutKMPt`eQ&U+Q8XNtAH{Nn{lT=e1n8=~h zM$u^shVJN-r-j zPwc8v81URoqAqc`ySonz4*I)>hlhKQ*02fTp#XyW7DgTKGr>H(y!sbf;c544#E^P= zkDfe9q0!vhsMLjJ%tD=ToNdrJSfLPJzhY&!Fq(SAC8tWsWC6#B_2W#tv!&9x#!w_v zFs-7z9KKMK{zipyWDda1)bE*2o2pyM=E@{ED?I{%K%>zU^Un*RUnB9~2L?)Nqjhv3 z!1iN9H)t(Xs{ZTI4w}bbh@o7wcxsc`VH!FE5W(Ni_0BMMa!} zG)1-NLhE2?NC*L_1;Td>Wp2(D8yBa7p|XCubrzIJ#Xz}0p%b#R2BY;9a%8!hTU#?a zIy#c;>R<>2KPYFshF-N;nrgekyMNXPuY+2F(%sDt0hLtm$Vf_avkv6vu>V23f`URk z0B&%Mo*~?B+z@_QQNhK_%K&yVze-148r$S)`ti-|<`t62&-{bJmM2ON3%`MqDiLh$-=f~szF`_On!(38v7 z(sz5MwER7%-BrsM13!NJpy2*)!Cz%ZfWupuWIb$QVexfn$ZhTYlD}IC4Y1U`{q)tG z(5-8s0q{=s8Jm{D!ISy<`JhDR>pCCo*%4*a5b~z(R1O=qJ6~y>cTD%1;iTw5=6@T& zgf4`vLGXCIRAmB^4$f-HjkEyVE&I+)%+e;S@@y^izZHK+M*AT>x=QS3TToFP_*VjA Mc-aI+L^{R(2l|ODg#Z8m literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMU-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1IMU-members.html new file mode 100644 index 00000000..0c00858c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMU-members.html @@ -0,0 +1,104 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::IMU Member List
+
+
+ +

This is the complete list of members for rtabmap::IMU, including all inherited members.

+ + + + + + + + + + + + + +
angularVelocity() constrtabmap::IMUinline
angularVelocityCovariance() constrtabmap::IMUinline
convertToBaseFrame()rtabmap::IMU
empty() constrtabmap::IMUinline
IMU()rtabmap::IMUinline
IMU(const cv::Vec4d &orientation, const cv::Mat &orientationCovariance, const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())rtabmap::IMUinline
IMU(const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())rtabmap::IMUinline
linearAcceleration() constrtabmap::IMUinline
linearAccelerationCovariance() constrtabmap::IMUinline
localTransform() constrtabmap::IMUinline
orientation() constrtabmap::IMUinline
orientationCovariance() constrtabmap::IMUinline
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMU.html b/preview/pr-1492/api/latest/classrtabmap_1_1IMU.html new file mode 100644 index 00000000..5ba3c469 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMU.html @@ -0,0 +1,569 @@ + + + + + + + + +RTAB-Map: rtabmap::IMU Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::IMU Class Reference
+
+
+ +

Inertial measurement sample (ROS sensor_msgs/Imu-like fields). + More...

+ +

#include <IMU.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 IMU ()
 Default-constructs an empty sample (null localTransform()).
 
 IMU (const cv::Vec4d &orientation, const cv::Mat &orientationCovariance, const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())
 Constructs a sample with orientation and motion data.
 
 IMU (const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())
 Constructs a sample without orientation (e.g. no magnetometer / no attitude).
 
const cv::Vec4d & orientation () const
 
const cv::Mat & orientationCovariance () const
 
const cv::Vec3d & angularVelocity () const
 
const cv::Mat & angularVelocityCovariance () const
 
const cv::Vec3d & linearAcceleration () const
 
const cv::Mat & linearAccelerationCovariance () const
 
const Transform & localTransform () const
 
void convertToBaseFrame ()
 Rotate motion (and optionally orientation) into the base frame.
 
bool empty () const
 True when localTransform() is null (placeholder / unset sample).
 
+

Detailed Description

+

Inertial measurement sample (ROS sensor_msgs/Imu-like fields).

+

Holds orientation (quaternion), angular velocity, linear acceleration, optional 3×3 row-major covariance matrices (double), and an optional Transform expressing the IMU frame relative to the robot base.

+

empty() is true when localTransform() is null (default constructor). A sample constructed with Transform::getIdentity() is not empty.

+

convertToBaseFrame() rotates linear/angular velocity (and orientation when quaternion x/y/z are non-zero) into the base frame, then clears rotation in localTransform() while keeping translation.

+
See also
SensorData::imu()
+
+IMUEvent
+ +

Definition at line 56 of file IMU.h.

+

Constructor & Destructor Documentation

+ +

◆ IMU() [1/3]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::IMU::IMU ()
+
+inline
+
+ +

Default-constructs an empty sample (null localTransform()).

+ +

Definition at line 60 of file IMU.h.

+ +
+
+ +

◆ IMU() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::IMU::IMU (const cv::Vec4d & orientation,
const cv::Mat & orientationCovariance,
const cv::Vec3d & angularVelocity,
const cv::Mat & angularVelocityCovariance,
const cv::Vec3d & linearAcceleration,
const cv::Mat & linearAccelerationCovariance,
const Transform & localTransform = Transform::getIdentity() 
)
+
+inline
+
+ +

Constructs a sample with orientation and motion data.

+
Parameters
+ + + + + + + + +
orientationUnit quaternion (qx, qy, qz, qw).
orientationCovariance3×3 row-major covariance about x, y, z (empty if unused).
angularVelocityRad/s about x, y, z.
angularVelocityCovariance3×3 row-major covariance (empty if unused).
linearAccelerationm/s² about x, y, z.
linearAccelerationCovariance3×3 row-major covariance (empty if unused).
localTransformIMU frame in base coordinates (default identity).
+
+
+ +

Definition at line 72 of file IMU.h.

+ +
+
+ +

◆ IMU() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::IMU::IMU (const cv::Vec3d & angularVelocity,
const cv::Mat & angularVelocityCovariance,
const cv::Vec3d & linearAcceleration,
const cv::Mat & linearAccelerationCovariance,
const Transform & localTransform = Transform::getIdentity() 
)
+
+inline
+
+ +

Constructs a sample without orientation (e.g. no magnetometer / no attitude).

+
Parameters
+ + + + + + +
angularVelocityRad/s about x, y, z.
angularVelocityCovariance3×3 row-major covariance (empty if unused).
linearAccelerationm/s² about x, y, z.
linearAccelerationCovariance3×3 row-major covariance (empty if unused).
localTransformIMU frame in base coordinates (default identity).
+
+
+ +

Definition at line 97 of file IMU.h.

+ +
+
+

Member Function Documentation

+ +

◆ orientation()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Vec4d & rtabmap::IMU::orientation () const
+
+inline
+
+
Returns
Orientation quaternion (qx, qy, qz, qw).
+ +

Definition at line 111 of file IMU.h.

+ +
+
+ +

◆ orientationCovariance()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::IMU::orientationCovariance () const
+
+inline
+
+
Returns
3×3 orientation covariance (row-major, empty if orientation unset).
+ +

Definition at line 113 of file IMU.h.

+ +
+
+ +

◆ angularVelocity()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Vec3d & rtabmap::IMU::angularVelocity () const
+
+inline
+
+
Returns
Angular velocity (rad/s).
+ +

Definition at line 116 of file IMU.h.

+ +
+
+ +

◆ angularVelocityCovariance()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::IMU::angularVelocityCovariance () const
+
+inline
+
+
Returns
3×3 angular velocity covariance (row-major, empty if unused).
+ +

Definition at line 118 of file IMU.h.

+ +
+
+ +

◆ linearAcceleration()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Vec3d & rtabmap::IMU::linearAcceleration () const
+
+inline
+
+
Returns
Linear acceleration (m/s²).
+ +

Definition at line 121 of file IMU.h.

+ +
+
+ +

◆ linearAccelerationCovariance()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::IMU::linearAccelerationCovariance () const
+
+inline
+
+
Returns
3×3 linear acceleration covariance (row-major, empty if unused).
+ +

Definition at line 123 of file IMU.h.

+ +
+
+ +

◆ localTransform()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::IMU::localTransform () const
+
+inline
+
+
Returns
Transform from IMU frame to base frame.
+ +

Definition at line 126 of file IMU.h.

+ +
+
+ +

◆ convertToBaseFrame()

+ +
+
+ + + + + + + +
void rtabmap::IMU::convertToBaseFrame ()
+
+ +

Rotate motion (and optionally orientation) into the base frame.

+

Applies localTransform() rotation to vectors and covariances, then sets rotational part of localTransform() to identity (translation unchanged). No-op if localTransform() is null or rotation is identity. Orientation is updated only when quaternion qx, qy, qz, qw are not all zero.

+ +
+
+ +

◆ empty()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::IMU::empty () const
+
+inline
+
+ +

True when localTransform() is null (placeholder / unset sample).

+ +

Definition at line 141 of file IMU.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/IMU.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent-members.html new file mode 100644 index 00000000..7b85f6aa --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent-members.html @@ -0,0 +1,100 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::IMUEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::IMUEvent, including all inherited members.

+ + + + + + + + + +
getClassName() constrtabmap::IMUEventinlinevirtual
getCode() constUEventinline
getData() constrtabmap::IMUEventinline
getStamp() constrtabmap::IMUEventinline
IMUEvent()rtabmap::IMUEventinline
IMUEvent(const IMU &data, double stamp)rtabmap::IMUEventinline
UEvent(int code=0)UEventinlineprotected
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent.html new file mode 100644 index 00000000..9ffc2de3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent.html @@ -0,0 +1,313 @@ + + + + + + + + +RTAB-Map: rtabmap::IMUEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::IMUEvent Class Reference
+
+
+ +

UEvent carrying an IMU sample and timestamp. + More...

+ +

#include <IMU.h>

+
+Inheritance diagram for rtabmap::IMUEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::IMUEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 IMUEvent ()
 Default-constructs an event with zero stamp.
 
 IMUEvent (const IMU &data, double stamp)
 Constructs an event with IMU data and stamp.
 
virtual std::string getClassName () const
 
const IMU & getData () const
 
double getStamp () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+

UEvent carrying an IMU sample and timestamp.

+ +

Definition at line 163 of file IMU.h.

+

Constructor & Destructor Documentation

+ +

◆ IMUEvent() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::IMUEvent::IMUEvent ()
+
+inline
+
+ +

Default-constructs an event with zero stamp.

+ +

Definition at line 167 of file IMU.h.

+ +
+
+ +

◆ IMUEvent() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::IMUEvent::IMUEvent (const IMU & data,
double stamp 
)
+
+inline
+
+ +

Constructs an event with IMU data and stamp.

+
Parameters
+ + + +
dataIMU sample.
stampTimestamp in seconds.
+
+
+ +

Definition at line 175 of file IMU.h.

+ +
+
+

Member Function Documentation

+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::IMUEvent::getClassName () const
+
+inlinevirtual
+
+
Returns
Event type name for the utilite event system.
+ +

Implements UEvent.

+ +

Definition at line 181 of file IMU.h.

+ +
+
+ +

◆ getData()

+ +
+
+ + + + + +
+ + + + + + + +
const IMU & rtabmap::IMUEvent::getData () const
+
+inline
+
+
Returns
IMU payload.
+ +

Definition at line 183 of file IMU.h.

+ +
+
+ +

◆ getStamp()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::IMUEvent::getStamp () const
+
+inline
+
+
Returns
Timestamp in seconds.
+ +

Definition at line 185 of file IMU.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/IMU.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.map new file mode 100644 index 00000000..4361a521 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.md5 new file mode 100644 index 00000000..859f9b89 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.md5 @@ -0,0 +1 @@ +d60f00bea9c6214f630c960fadc3db2e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3fd4bfcf3aa03c65a0e3edd1377213af0bc298 GIT binary patch literal 3775 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.map new file mode 100644 index 00000000..4361a521 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.md5 new file mode 100644 index 00000000..859f9b89 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.md5 @@ -0,0 +1 @@ +d60f00bea9c6214f630c960fadc3db2e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1IMUEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3fd4bfcf3aa03c65a0e3edd1377213af0bc298 GIT binary patch literal 3775 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUFilter-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1IMUFilter-members.html new file mode 100644 index 00000000..2bebbb2d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUFilter-members.html @@ -0,0 +1,104 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::IMUFilter Member List
+
+
+ +

This is the complete list of members for rtabmap::IMUFilter, including all inherited members.

+ + + + + + + + + + + + + +
create(const ParametersMap &parameters=ParametersMap())rtabmap::IMUFilterstatic
create(IMUFilter::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::IMUFilterstatic
getOrientation(double &qx, double &qy, double &qz, double &qw) const =0rtabmap::IMUFilterpure virtual
IMUFilter(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::IMUFilter)rtabmap::IMUFilterinlineprotected
kComplementaryFilter enum value (defined in rtabmap::IMUFilter)rtabmap::IMUFilter
kMadgwick enum valuertabmap::IMUFilter
parseParameters(const ParametersMap &parameters)rtabmap::IMUFilterinlinevirtual
reset(double qx=0.0, double qy=0.0, double qz=0.0, double qw=1.0)=0rtabmap::IMUFilterpure virtual
Type enum namertabmap::IMUFilter
type() const =0rtabmap::IMUFilterpure virtual
update(double gx, double gy, double gz, double ax, double ay, double az, double stamp)rtabmap::IMUFilter
~IMUFilter() (defined in rtabmap::IMUFilter)rtabmap::IMUFilterinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUFilter.html b/preview/pr-1492/api/latest/classrtabmap_1_1IMUFilter.html new file mode 100644 index 00000000..4a69bc67 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUFilter.html @@ -0,0 +1,567 @@ + + + + + + + + +RTAB-Map: rtabmap::IMUFilter Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Fuses gyroscope and accelerometer samples into an orientation quaternion. + More...

+ +

#include <IMUFilter.h>

+ + + + + +

+Public Types

enum  Type { kMadgwick = 0 +, kComplementaryFilter = 1 + }
 Orientation fusion algorithm. More...
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

virtual void parseParameters (const ParametersMap &parameters)
 Re-reads filter parameters from parameters.
 
void update (double gx, double gy, double gz, double ax, double ay, double az, double stamp)
 Integrates one IMU sample and updates the internal orientation estimate.
 
virtual IMUFilter::Type type () const =0
 
virtual void getOrientation (double &qx, double &qy, double &qz, double &qw) const =0
 Current orientation estimate.
 
virtual void reset (double qx=0.0, double qy=0.0, double qz=0.0, double qw=1.0)=0
 Resets internal state to the given orientation.
 
+ + + + + + + +

+Static Public Member Functions

static IMUFilter * create (const ParametersMap &parameters=ParametersMap())
 Creates a filter using type parsed from parameters.
 
static IMUFilter * create (IMUFilter::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a filter of the given type.
 
+ + + +

+Protected Member Functions

 IMUFilter (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

Fuses gyroscope and accelerometer samples into an orientation quaternion.

+

Implementations integrate angular rates and correct drift using the measured gravity vector. The public update() API takes timestamps and computes the time step between consecutive calls.

+

Factory methods create() return heap-allocated instances; the caller owns the pointer (e.g. SensorCaptureThread, IMUThread, Camera).

+

Output orientation from getOrientation() is a unit quaternion (qx, qy, qz, qw) in the same convention as IMU (body frame).

+

Filter tuning parameters are read from ParametersMap (ImuFilter/... keys); see ComplementaryFilter and MadgwickFilter (when RTAB-Map is built with Madgwick support).

+
See also
IMU
+
+SensorCaptureThread::enableIMUFiltering()
+ +

Definition at line 58 of file IMUFilter.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::IMUFilter::Type
+
+ +

Orientation fusion algorithm.

+ + +
Enumerator
kMadgwick 

Madgwick AHRS (attitude and heading reference system). RTAB-Map must be built with Madgwick support.

+
+ +

Definition at line 64 of file IMUFilter.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ ~IMUFilter()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::IMUFilter::~IMUFilter ()
+
+inlinevirtual
+
+ +

Definition at line 84 of file IMUFilter.h.

+ +
+
+ +

◆ IMUFilter()

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::IMUFilter::IMUFilter (const ParametersMap & parameters = ParametersMap())
+
+inlineprotected
+
+ +

Definition at line 129 of file IMUFilter.h.

+ +
+
+

Member Function Documentation

+ +

◆ create() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static IMUFilter * rtabmap::IMUFilter::create (const ParametersMap & parameters = ParametersMap())
+
+static
+
+ +

Creates a filter using type parsed from parameters.

+
Parameters
+ + +
parametersOptional ImuFilter/... tuning parameters.
+
+
+
Returns
New filter instance (caller owns the pointer).
+ +
+
+ +

◆ create() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static IMUFilter * rtabmap::IMUFilter::create (IMUFilter::Type type,
const ParametersMap & parameters = ParametersMap() 
)
+
+static
+
+ +

Creates a filter of the given type.

+
Parameters
+ + + +
typeFusion algorithm; falls back to kComplementaryFilter if kMadgwick is requested but not compiled in.
parametersOptional ImuFilter/... tuning parameters.
+
+
+
Returns
New filter instance (caller owns the pointer).
+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::IMUFilter::parseParameters (const ParametersMap & parameters)
+
+inlinevirtual
+
+ +

Re-reads filter parameters from parameters.

+
Parameters
+ + +
parametersImuFilter/... keys (implementation-specific).
+
+
+ +

Definition at line 90 of file IMUFilter.h.

+ +
+
+ +

◆ update()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::IMUFilter::update (double gx,
double gy,
double gz,
double ax,
double ay,
double az,
double stamp 
)
+
+ +

Integrates one IMU sample and updates the internal orientation estimate.

+
Parameters
+ + + + + + + + +
gxGyroscope x angular rate (rad/s).
gyGyroscope y angular rate (rad/s).
gzGyroscope z angular rate (rad/s).
axAccelerometer x (m/s²; magnitude ~9.81 when stationary).
ayAccelerometer y (m/s²).
azAccelerometer z (m/s²).
stampSample time (seconds); used with the previous stamp to compute dt.
+
+
+ +
+
+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
virtual IMUFilter::Type rtabmap::IMUFilter::type () const
+
+pure virtual
+
+
Returns
Active fusion algorithm type.
+ +
+
+ +

◆ getOrientation()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::IMUFilter::getOrientation (double & qx,
double & qy,
double & qz,
double & qw 
) const
+
+pure virtual
+
+ +

Current orientation estimate.

+
Parameters
+ + + + + +
qxQuaternion x
qyQuaternion y
qzQuaternion z
qwQuaternion w (scalar)
+
+
+ +
+
+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void rtabmap::IMUFilter::reset (double qx = 0.0,
double qy = 0.0,
double qz = 0.0,
double qw = 1.0 
)
+
+pure virtual
+
+ +

Resets internal state to the given orientation.

+
Parameters
+ + + + + +
qxQuaternion x (default 0)
qyQuaternion y (default 0)
qzQuaternion z (default 0)
qwQuaternion w (default 1, identity)
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread-members.html new file mode 100644 index 00000000..648b6b1a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread-members.html @@ -0,0 +1,140 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::IMUThread Member List
+
+
+ +

This is the complete list of members for rtabmap::IMUThread, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
currentThreadId() (defined in UThread)UThreadinlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
disableIMUFiltering()rtabmap::IMUThread
enableIMUFiltering(int filteringStrategy=1, const ParametersMap &parameters=ParametersMap(), bool baseFrameConversion=false)rtabmap::IMUThread
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
IMUThread(int rate, const Transform &localTransform)rtabmap::IMUThread
init(const std::string &path)rtabmap::IMUThread
isCreating() constUThread
isIdle() constUThread
isKilled() constUThread
isRunning() constUThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
join(bool killFirst=false)UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
post(UEvent *event, bool async=true) constUEventsSenderprotected
Priority enum nameUThread
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setPriority(Priority priority)UThread
setRate(int rate)rtabmap::IMUThread
start()UThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
UEventsSender() (defined in UEventsSender)UEventsSenderinline
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~IMUThread() (defined in rtabmap::IMUThread)rtabmap::IMUThreadvirtual
~UEventsSender() (defined in UEventsSender)UEventsSendervirtual
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread.html b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread.html new file mode 100644 index 00000000..0daa3979 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread.html @@ -0,0 +1,369 @@ + + + + + + + + +RTAB-Map: rtabmap::IMUThread Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::IMUThread Class Reference
+
+
+ +

Background thread that replays IMU measurements from a CSV file. + More...

+ +

#include <IMUThread.h>

+
+Inheritance diagram for rtabmap::IMUThread:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::IMUThread:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 IMUThread (int rate, const Transform &localTransform)
 Constructs the replay thread.
 
bool init (const std::string &path)
 Opens and validates an IMU CSV file.
 
+void setRate (int rate)
 Sets the target playback rate in Hz.
 
void enableIMUFiltering (int filteringStrategy=1, const ParametersMap &parameters=ParametersMap(), bool baseFrameConversion=false)
 Enables orientation fusion on replayed samples.
 
+void disableIMUFiltering ()
 Disables fusion and deletes the internal IMUFilter.
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
- Protected Member Functions inherited from UEventsSender
void post (UEvent *event, bool async=true) const
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+

Background thread that replays IMU measurements from a CSV file.

+

Reads gyroscope and accelerometer samples from a comma-separated file (EuRoC-style or epoch timestamps), optionally fuses them with IMUFilter, and posts IMUEvent on each step.

+

CSV format:

    +
  • First line: header (skipped).
  • +
  • Following lines: stamp,gx,gy,gz,ax,ay,az (stamp in seconds with a decimal point, or EuRoC nanoseconds without one).
  • +
+

Playback rate is limited by setRate() when rate > 0; otherwise samples are read as fast as possible (or spaced using inter-sample timestamps after the first pair). When the file ends, the thread posts an empty IMUEvent and stops.

+
See also
IMUEvent
+
+IMUFilter
+
+SensorCaptureThread::enableIMUFiltering()
+ +

Definition at line 65 of file IMUThread.h.

+

Constructor & Destructor Documentation

+ +

◆ IMUThread()

+ +
+
+ + + + + + + + + + + + + + + + + + +
rtabmap::IMUThread::IMUThread (int rate,
const Transform & localTransform 
)
+
+ +

Constructs the replay thread.

+
Parameters
+ + + +
rateTarget playback rate in Hz (0 = no rate cap until timestamps apply).
localTransformIMU frame relative to the robot base (stored in each IMU).
+
+
+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + + + + +
bool rtabmap::IMUThread::init (const std::string & path)
+
+ +

Opens and validates an IMU CSV file.

+
Parameters
+ + +
pathPath to the CSV file.
+
+
+
Returns
False if the file is missing or contains no data rows.
+ +
+
+ +

◆ enableIMUFiltering()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::IMUThread::enableIMUFiltering (int filteringStrategy = 1,
const ParametersMap & parameters = ParametersMap(),
bool baseFrameConversion = false 
)
+
+ +

Enables orientation fusion on replayed samples.

+
Parameters
+ + + + +
filteringStrategyIMUFilter::Type index (0 = Madgwick, 1 = complementary).
parametersOptional ImuFilter/... tuning parameters.
baseFrameConversionIf true, rotate IMU vectors into the base frame before filtering.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.map new file mode 100644 index 00000000..02926b5b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.md5 new file mode 100644 index 00000000..485e9d3e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.md5 @@ -0,0 +1 @@ +a45442278ea3ee1f1cc0193684240d5c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5eed9e65cbbface8a4640dd75ed9a9365251f37c GIT binary patch literal 8912 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 + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__inherit__graph.md5 new file mode 100644 index 00000000..485e9d3e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__inherit__graph.md5 @@ -0,0 +1 @@ +a45442278ea3ee1f1cc0193684240d5c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1IMUThread__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5eed9e65cbbface8a4640dd75ed9a9365251f37c GIT binary patch literal 8912 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::KAZE Member List
+
+
+ +

This is the complete list of members for rtabmap::KAZE, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::KAZE)rtabmap::KAZEinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() constrtabmap::Feature2Dinlinevirtual
KAZE(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::KAZE)rtabmap::KAZE
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::KAZE)rtabmap::KAZEvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~KAZE() (defined in rtabmap::KAZE)rtabmap::KAZEvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1KAZE.html b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE.html new file mode 100644 index 00000000..00711351 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE.html @@ -0,0 +1,314 @@ + + + + + + + + +RTAB-Map: rtabmap::KAZE Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::KAZE Class Reference
+
+
+ +

KAZE detector and descriptor (OpenCV 3+). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::KAZE:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::KAZE:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ KAZE (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
virtual bool isGpuAvailable () const
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

KAZE detector and descriptor (OpenCV 3+).

+ +

Definition at line 620 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::KAZE::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::KAZE::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 627 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.map new file mode 100644 index 00000000..13cb9e34 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.md5 new file mode 100644 index 00000000..a56dee3e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.md5 @@ -0,0 +1 @@ +3897632e8065b53e0d3828894a9dbde9 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..13a3f8cb53e4fd1ca2429aa520980f052f2911dc GIT binary patch literal 4329 zcmchbc{o(>`^P8yPL{HZeC#x1&sO#&C6Z*z82i43?2M3IeXWC-DbmQ2EkedvlAS1o zVak$yX>8&5`2Mcn_50)d|M!}ibFMk(I?p-xbHDHR{d&%`yLa>%>A2}25D258fsPs2 zW5Cagh6-#4(nfT^j>_Sdz7FK<{8QXo_5uQ7DKga2G!H3Qp9wR*7koy&weME))L%R& zi9It3O@nwbN#lPpe}y77=?!6*;B@b%q8w4?&ZNl0!p`OA|5%q&J^r$Q_BJU%p}3S}2C>ERN7BkWZg+`~iC-`~IZt{7o$ zEhR3FLinG5V$el)@f(x+NoWFr0I9J|`TW_S!lsE;Mn=X0i+6@giHmFM=)}Eic1eBz zUN%ujsAYFh)fknKkZ}KqzZ{|LF(D-^Dtc8xfy2F?n~RIw~Z`)%Wk;`x3huDJUoi#Pl2S2Eq>Ac{ido zP7jF8|H{tp7#d>sZ{ltAnd?41Io<|ip9do@E^Zu!OwG&Aj@M1TRPyRo=UQ%0xE$*7N3NrFdIT-WWRjbI^#L+q0`_SbBP-78I`RNwU*6TwADIwts*~^lA(7%y>y{oHhFP@RdHDI!KssJW0A2{q~F2QkLMP}v0 z6BF@AN1=&b4j8YFj*i^9Cu;m!+S;b3rntJ>D8~xfu zuGytT9Fyk%e0wAiSdg842@;LL5UV|?Dme92Rf(0MgPoyu_4R_XvaB8x6`Fc_R6vy5 zeb+waw%p!lG8=l2LRo)0A=x%`W5fZXy^08jY-Oqo2 zL87hR#am#zNbA!zA=?gdPoJJw*-yWwrY2+MN}HzGg$0M?Q=@^J?td5F+xysDuVa~g zQ7DuJhr@|UNN9O_N;%4Mp)nXgP~D(0;HK1ngW)pJ-*3!&NOp`Ys{g07`mO|Yk39wpl*rXsWc1>ow1bkP_HR@9UUF} zsX8|n8VZqgltzR~ED|Z0Wd!q?RRiNuUu)eP&2X>o&ec|rnfGr}ezGGxSa2Qrj7?NX zN{V52cJ@tq`GuUm`Zo=2JuDDlKwBUSSLNl|@0A*BA`ryt-^*)jIt~s(yu7?yzj7XF ziM-Ghc>zEDd#HC(p!S4SHje?M7}WN8THe>zW@cq6EZ0>3tM~Y3XlSUcuIUZ6K50jz z*Q{)!cRCNYiK$Z_9v-H)wu~T<{(|dl?PJ$dEU>!1zEBlaRa0y0zKYeAp59*CtgNhD zc{f%yb@gMurFne92R|a!Vt*dq^WMXUv@$u#(b14nuVR?CwswtE-z6#A=C5nH!JD(X zwzhm7c>I7&PF9xY6&B9aZ#h=)^t83f$;ioX%dj$=TSxV5;gHn8%D49S6OxnZf&M^Z z;4UuTHUmZ;@c~)uRn@73Vh_kGuc%;e=RC< z93kd1HdMoK;t@57sufqHt~1{2$V{d0;{rTChjJcM|WcDUezFQB9H5tQv;OyB%! zat!(P2sO-Fk z{5a+36ECE0LvE5|Uz}J8x zHR3o*x>}I6Tk!jqq;#>k6eZ)a2DaIa4ta*6=#T=(q2C2BL^m}eREG^LAEyN=)TVJ# z&=OgO+ub2l0jpx|gP9%AFUq(XUxA0~`MfNd!Qocf?MeAUw~>mzHB&!S9PEWthL)eH zKevYp03M>0acXaAJWc06IHMLc&VXuM&F_}Di;PV9vQCzrZlH;vp(V;$zSKX4B*s&| zTp5!;^*TWa0NX7Gp~V(@|87;i^;(-e?DwU0I1ZrZ-aHW(-l|Z)rI_ z3~JO*=P#+OWCHpITqLp%EZo=E*M3S>MWuMe^@vYfC^LF!NgFd#jKSa?TdS(BQIN%C zkzAK8dAbojX}}DCFZ6yOKCE41^WG ze{{hoK}juiD$2^m;5k(anbHMr=tV@RgI)zpiLkVk5VpTj(%Q<$u8YIt$%~4LoR7y= z0s%ormz9YELpSc8-#vU&Rh583@x*BfLW*l@E`nh|#6dx4yxF+!wVARen6;JF767Bg zW{-TK5V-Sz%)XeU zBp&!_P57aIXJ=~z$Vd$d35oOmM+ylF47A^zZKa{5#dSQTPdHpl z;kAgn2+2pG0Kw(4tWDMT{q$0S!7>k9u~>SL0bOwQ!oor>skvF@^DloI3bG$<5j>B= zw<%*|V+lkeIblVzf3Q#$?&FhAe_4jm`Hao-V~{i&jRw(Y6c(mpA5;k`Do#isLPJ70 zTj@x)RM9&-{s3Zx0D;Rn_d~FDUH!w<)ruIGGj^5~94ezJ3AnLezvR0S{IP6p(2A{7s=uK*hc8i1?>Z1*N1? zCL1>WhdzLIF}xD!y#Mf>g*JAa3<5L>6y`nK@+^T_AisdXcO#N_U|;~ihtw`#P$#cMMbGYTZ{4neg~=m+y@@OXUy0>_Moqz zfVZ=!2Z`l}N@uL?#C2o0e7{QUd{QBl#5kdXGlK_*H{%3QT4 zvKzCl$$$TbrwH7bUG@X4u(7eRwY!T4nA%R<-ujKLVk)PKxd~l^Nvp?Phz3CCIaNms zKpJ_c3=hO_XW)RhjQrvU^1}Sb8>QW_4bZ8m*@h9WNK%Z z_T`I_^7ZS25)yPE;~|H?a`GYc933SCPYGr--*&=Pp5>WNzvOEJVJ&<6D|Gbq^FM#a z<>zx#P*TE2Um5E4q@cx?|D5A*3|b8MWMEJb(0ATnAmH|~F*cB))YMdw)z+34<4Sc> zS#2#FfN?Q#@k#hLo2MXZ#zr#B=-rHhHBcf& zKEf$@;Y;#Wf<9R3n + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__inherit__graph.md5 new file mode 100644 index 00000000..a56dee3e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__inherit__graph.md5 @@ -0,0 +1 @@ +3897632e8065b53e0d3828894a9dbde9 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1KAZE__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..13a3f8cb53e4fd1ca2429aa520980f052f2911dc GIT binary patch literal 4329 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Landmark Member List
+
+
+ +

This is the complete list of members for rtabmap::Landmark, including all inherited members.

+ + + + + + + + + +
covariance() constrtabmap::Landmarkinline
id() constrtabmap::Landmarkinline
Landmark()rtabmap::Landmarkinline
Landmark(const int &id, const float &size, const Transform &pose, const cv::Mat &covariance)rtabmap::Landmarkinline
Landmark(const int &id, const Transform &pose, const cv::Mat &covariance)rtabmap::Landmarkinline
pose() constrtabmap::Landmarkinline
size() constrtabmap::Landmarkinline
~Landmark() (defined in rtabmap::Landmark)rtabmap::Landmarkinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Landmark.html b/preview/pr-1492/api/latest/classrtabmap_1_1Landmark.html new file mode 100644 index 00000000..9f618164 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Landmark.html @@ -0,0 +1,408 @@ + + + + + + + + +RTAB-Map: rtabmap::Landmark Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::Landmark Class Reference
+
+
+ +

Optimized pose of a visual landmark (e.g. ArUco/AprilTag) in the map. + More...

+ +

#include <Landmark.h>

+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Landmark ()
 Default-constructs an invalid landmark (id == 0).
 
 Landmark (const int &id, const float &size, const Transform &pose, const cv::Mat &covariance)
 Constructs a landmark with size, pose, and covariance.
 
RTABMAP_DEPRECATED Landmark (const int &id, const Transform &pose, const cv::Mat &covariance)
 Deprecated; use the constructor with explicit size (0 if unknown).
 
const int & id () const
 
const float & size () const
 
const Transform & pose () const
 
const cv::Mat & covariance () const
 
+

Detailed Description

+

Optimized pose of a visual landmark (e.g. ArUco/AprilTag) in the map.

+

Stores a positive landmark id(), optional physical size() (m), world pose(), and a 6×6 pose covariance matrix (x, y, z, roll, pitch, yaw).

+

Used in Landmarks maps on SensorData and in memory during SLAM. Graph constraints to landmarks use Link::kLandmark with a negative landmark id on the link (to is typically -id()).

+

Covariance diagonal entries must be finite and strictly positive. Use a large value (e.g. 9999) on angular axes when orientation uncertainty is unknown.

+
See also
SensorData::setLandmarks()
+
+Signature::addLandmark()
+ +

Definition at line 56 of file Landmark.h.

+

Constructor & Destructor Documentation

+ +

◆ Landmark() [1/3]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::Landmark::Landmark ()
+
+inline
+
+ +

Default-constructs an invalid landmark (id == 0).

+ +

Definition at line 60 of file Landmark.h.

+ +
+
+ +

◆ Landmark() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::Landmark::Landmark (const int & id,
const float & size,
const Transform & pose,
const cv::Mat & covariance 
)
+
+inline
+
+ +

Constructs a landmark with size, pose, and covariance.

+
Parameters
+ + + + + +
idPositive landmark identifier.
sizePhysical size of the marker (m); 0 if unknown.
poseLandmark pose in the base frame (typically the robot frame).
covariance6×6 CV_64FC1 covariance (diagonal entries must be > 0).
+
+
+ +

Definition at line 72 of file Landmark.h.

+ +
+
+ +

◆ Landmark() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::Landmark::Landmark (const int & id,
const Transform & pose,
const cv::Mat & covariance 
)
+
+inline
+
+ +

Deprecated; use the constructor with explicit size (0 if unknown).

+ +

Definition at line 115 of file Landmark.h.

+ +
+
+ +

◆ ~Landmark()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::Landmark::~Landmark ()
+
+inlinevirtual
+
+ +

Definition at line 94 of file Landmark.h.

+ +
+
+

Member Function Documentation

+ +

◆ id()

+ +
+
+ + + + + +
+ + + + + + + +
const int & rtabmap::Landmark::id () const
+
+inline
+
+
Returns
Positive landmark id (map key in Landmarks).
+ +

Definition at line 97 of file Landmark.h.

+ +
+
+ +

◆ size()

+ +
+
+ + + + + +
+ + + + + + + +
const float & rtabmap::Landmark::size () const
+
+inline
+
+
Returns
Marker size in metres (0 if unknown).
+ +

Definition at line 99 of file Landmark.h.

+ +
+
+ +

◆ pose()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Landmark::pose () const
+
+inline
+
+
Returns
Landmark pose in the map frame.
+ +

Definition at line 101 of file Landmark.h.

+ +
+
+ +

◆ covariance()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::Landmark::covariance () const
+
+inline
+
+
Returns
6×6 pose covariance (CV_64FC1).
+ +

Definition at line 103 of file Landmark.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LaserScan-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1LaserScan-members.html new file mode 100644 index 00000000..9a2b3778 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LaserScan-members.html @@ -0,0 +1,160 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::LaserScan Member List
+
+
+ +

This is the complete list of members for rtabmap::LaserScan, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
angleIncrement() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
angleMax() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
angleMin() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
backwardCompatibility(const cv::Mat &oldScanFormat, int maxPoints=0, int maxRange=0, const Transform &localTransform=Transform::getIdentity())rtabmap::LaserScanstatic
backwardCompatibility(const cv::Mat &oldScanFormat, float minRange, float maxRange, float angleMin, float angleMax, float angleInc, const Transform &localTransform=Transform::getIdentity())rtabmap::LaserScanstatic
channels(const Format &format) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
channels() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
clear()rtabmap::LaserScaninline
clone() const (defined in rtabmap::LaserScan)rtabmap::LaserScan
data() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
dataType() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
densify() const (defined in rtabmap::LaserScan)rtabmap::LaserScan
empty() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
field(unsigned int pointIndex, unsigned int channelOffset)rtabmap::LaserScan
format() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
Format enum namertabmap::LaserScan
formatName(const Format &format) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
formatName() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
getIntensityOffset() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
getNormalsOffset() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
getRGBOffset() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
getRingOffset() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
getTimeOffset() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
hasIntensity() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
hasNormals() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
hasRGB() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
hasRing() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
hasTime() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
is2d() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
isCompressed() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
isEmpty() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
isOrganized() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
isScan2d(const Format &format) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
isScanHasIntensity(const Format &format) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
isScanHasNormals(const Format &format) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
isScanHasRGB(const Format &format) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
isScanHasRing(const Format &format) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
isScanHasTime(const Format &format) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
kUnknown enum valuertabmap::LaserScan
kXY enum valuertabmap::LaserScan
kXYI enum valuertabmap::LaserScan
kXYINormal enum valuertabmap::LaserScan
kXYNormal enum valuertabmap::LaserScan
kXYZ enum valuertabmap::LaserScan
kXYZI enum valuertabmap::LaserScan
kXYZINormal enum valuertabmap::LaserScan
kXYZIRT enum valuertabmap::LaserScan
kXYZIT enum valuertabmap::LaserScan
kXYZNormal enum valuertabmap::LaserScan
kXYZRGB enum valuertabmap::LaserScan
kXYZRGBNormal enum valuertabmap::LaserScan
LaserScan() (defined in rtabmap::LaserScan)rtabmap::LaserScan
LaserScan(const LaserScan &data, int maxPoints, float maxRange, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::LaserScan)rtabmap::LaserScan
LaserScan(const LaserScan &data, int maxPoints, float maxRange, Format format, const Transform &localTransform=Transform::getIdentity())rtabmap::LaserScan
LaserScan(const cv::Mat &data, int maxPoints, float maxRange, Format format, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::LaserScan)rtabmap::LaserScan
LaserScan(const LaserScan &data, Format format, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity())rtabmap::LaserScan
LaserScan(const LaserScan &data, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::LaserScan)rtabmap::LaserScan
LaserScan(const cv::Mat &data, Format format, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity()) (defined in rtabmap::LaserScan)rtabmap::LaserScan
localTransform() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
maxPoints() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
operator+(const LaserScan &)rtabmap::LaserScan
operator+=(const LaserScan &)rtabmap::LaserScan
packRGB(unsigned char r, unsigned char g, unsigned char b) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
rangeMax() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
rangeMin() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
setLocalTransform(const Transform &t) (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
size() const (defined in rtabmap::LaserScan)rtabmap::LaserScaninline
unpackRGB(float rgb, unsigned char &r, unsigned char &g, unsigned char &b) (defined in rtabmap::LaserScan)rtabmap::LaserScanstatic
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LaserScan.html b/preview/pr-1492/api/latest/classrtabmap_1_1LaserScan.html new file mode 100644 index 00000000..53fa04e3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LaserScan.html @@ -0,0 +1,1287 @@ + + + + + + + + +RTAB-Map: rtabmap::LaserScan Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::LaserScan Class Reference
+
+
+ +

Represents 2D or 3D laser scan data with support for multiple point data formats. + More...

+ +

#include <LaserScan.h>

+ + + + + +

+Public Types

enum  Format {
+  kUnknown =0 +, kXY =1 +, kXYI =2 +, kXYNormal =3 +,
+  kXYINormal =4 +, kXYZ =5 +, kXYZI =6 +, kXYZRGB =7 +,
+  kXYZNormal =8 +, kXYZINormal =9 +, kXYZRGBNormal =10 +, kXYZIT =11 +,
+  kXYZIRT =12 +
+ }
 Enumeration of possible formats for laser scan data. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Constructors
+ LaserScan (const LaserScan &data, int maxPoints, float maxRange, const Transform &localTransform=Transform::getIdentity())
 
RTABMAP_DEPRECATED LaserScan (const LaserScan &data, int maxPoints, float maxRange, Format format, const Transform &localTransform=Transform::getIdentity())
 
+ LaserScan (const cv::Mat &data, int maxPoints, float maxRange, Format format, const Transform &localTransform=Transform::getIdentity())
 
RTABMAP_DEPRECATED LaserScan (const LaserScan &data, Format format, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity())
 
+ LaserScan (const LaserScan &data, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity())
 
+ LaserScan (const cv::Mat &data, Format format, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity())
 
Accessors
const cv::Mat & data () const
 
Format format () const
 
std::string formatName () const
 
int channels () const
 
int maxPoints () const
 
float rangeMin () const
 
float rangeMax () const
 
float angleMin () const
 
float angleMax () const
 
float angleIncrement () const
 
void setLocalTransform (const Transform &t)
 
Transform localTransform () const
 
Status and Format Checks
bool empty () const
 
bool isEmpty () const
 
int size () const
 
int dataType () const
 
bool is2d () const
 
bool hasNormals () const
 
bool hasRGB () const
 
bool hasIntensity () const
 
bool hasTime () const
 
bool hasRing () const
 
bool isCompressed () const
 
bool isOrganized () const
 
+LaserScan clone () const
 
+LaserScan densify () const
 
Operations
int getIntensityOffset () const
 
int getRGBOffset () const
 
int getNormalsOffset () const
 
int getRingOffset () const
 
int getTimeOffset () const
 
float & field (unsigned int pointIndex, unsigned int channelOffset)
 Access a specific field value of a point.
 
void clear ()
 Clear the scan data.
 
+LaserScan & operator+= (const LaserScan &)
 Concatenate scan's data (localTransform is ignored).
 
+LaserScan operator+ (const LaserScan &)
 Concatenate scan's data (localTransform is ignored).
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

Static Utility Functions
+static std::string formatName (const Format &format)
 
+static int channels (const Format &format)
 
+static bool isScan2d (const Format &format)
 
+static bool isScanHasNormals (const Format &format)
 
+static bool isScanHasRGB (const Format &format)
 
+static bool isScanHasIntensity (const Format &format)
 
+static bool isScanHasTime (const Format &format)
 
+static bool isScanHasRing (const Format &format)
 
+static float packRGB (unsigned char r, unsigned char g, unsigned char b)
 
+static void unpackRGB (float rgb, unsigned char &r, unsigned char &g, unsigned char &b)
 
+static LaserScan backwardCompatibility (const cv::Mat &oldScanFormat, int maxPoints=0, int maxRange=0, const Transform &localTransform=Transform::getIdentity())
 Converts legacy scan format to a LaserScan object.
 
+static LaserScan backwardCompatibility (const cv::Mat &oldScanFormat, float minRange, float maxRange, float angleMin, float angleMax, float angleInc, const Transform &localTransform=Transform::getIdentity())
 Converts legacy scan format with additional metadata to a LaserScan.
 
+

Detailed Description

+

Represents 2D or 3D laser scan data with support for multiple point data formats.

+

The LaserScan class stores structured laser scan data used in SLAM, mapping, and perception. It supports various formats including point coordinates, intensity, normals, RGB colors, and timestamps. Utility methods are provided for format checking, cloning, and combining scans.

+ +

Definition at line 45 of file LaserScan.h.

+

Member Enumeration Documentation

+ +

◆ Format

+ +
+
+ + + + +
enum rtabmap::LaserScan::Format
+
+ +

Enumeration of possible formats for laser scan data.

+

These values represent different combinations of point attributes that can be stored in a laser scan. The format determines how each point in the scan is structured.

+ + + + + + + + + + + + + + +
Enumerator
kUnknown 

Unknown format.

+
kXY 

2D points with X and Y coordinates.

+
kXYI 

2D points with X, Y and intensity.

+
kXYNormal 

2D points with X, Y and normal vectors.

+
kXYINormal 

2D points with X, Y, intensity and normal vectors.

+
kXYZ 

3D points with X, Y and Z coordinates.

+
kXYZI 

3D points with X, Y, Z and intensity.

+
kXYZRGB 

3D points with X, Y, Z and RGB color.

+
kXYZNormal 

3D points with X, Y, Z and normal vectors.

+
kXYZINormal 

3D points with X, Y, Z, intensity and normal vectors.

+
kXYZRGBNormal 

3D points with X, Y, Z, RGB color and normal vectors.

+
kXYZIT 

3D points with X, Y, Z, intensity and time.

+
kXYZIRT 

3D points with X, Y, Z, intensity, ring and time.

+
+ +

Definition at line 55 of file LaserScan.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ LaserScan() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RTABMAP_DEPRECATED rtabmap::LaserScan::LaserScan (const LaserScan & data,
int maxPoints,
float maxRange,
Format format,
const Transform & localTransform = Transform::getIdentity() 
)
+
+
Deprecated:
Use constructor without format argument.
+ +
+
+ +

◆ LaserScan() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RTABMAP_DEPRECATED rtabmap::LaserScan::LaserScan (const LaserScan & data,
Format format,
float minRange,
float maxRange,
float angleMin,
float angleMax,
float angleIncrement,
const Transform & localTransform = Transform::getIdentity() 
)
+
+
Deprecated:
Use constructor without format argument.
+ +
+
+

Member Function Documentation

+ +

◆ data()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::LaserScan::data () const
+
+inline
+
+ +

Definition at line 156 of file LaserScan.h.

+ +
+
+ +

◆ format()

+ +
+
+ + + + + +
+ + + + + + + +
Format rtabmap::LaserScan::format () const
+
+inline
+
+ +

Definition at line 157 of file LaserScan.h.

+ +
+
+ +

◆ formatName()

+ +
+
+ + + + + +
+ + + + + + + +
std::string rtabmap::LaserScan::formatName () const
+
+inline
+
+ +

Definition at line 158 of file LaserScan.h.

+ +
+
+ +

◆ channels()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::LaserScan::channels () const
+
+inline
+
+ +

Definition at line 159 of file LaserScan.h.

+ +
+
+ +

◆ maxPoints()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::LaserScan::maxPoints () const
+
+inline
+
+ +

Definition at line 160 of file LaserScan.h.

+ +
+
+ +

◆ rangeMin()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::LaserScan::rangeMin () const
+
+inline
+
+ +

Definition at line 161 of file LaserScan.h.

+ +
+
+ +

◆ rangeMax()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::LaserScan::rangeMax () const
+
+inline
+
+ +

Definition at line 162 of file LaserScan.h.

+ +
+
+ +

◆ angleMin()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::LaserScan::angleMin () const
+
+inline
+
+ +

Definition at line 163 of file LaserScan.h.

+ +
+
+ +

◆ angleMax()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::LaserScan::angleMax () const
+
+inline
+
+ +

Definition at line 164 of file LaserScan.h.

+ +
+
+ +

◆ angleIncrement()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::LaserScan::angleIncrement () const
+
+inline
+
+ +

Definition at line 165 of file LaserScan.h.

+ +
+
+ +

◆ setLocalTransform()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::LaserScan::setLocalTransform (const Transform & t)
+
+inline
+
+ +

Definition at line 166 of file LaserScan.h.

+ +
+
+ +

◆ localTransform()

+ +
+
+ + + + + +
+ + + + + + + +
Transform rtabmap::LaserScan::localTransform () const
+
+inline
+
+ +

Definition at line 167 of file LaserScan.h.

+ +
+
+ +

◆ empty()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::empty () const
+
+inline
+
+ +

Definition at line 172 of file LaserScan.h.

+ +
+
+ +

◆ isEmpty()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::isEmpty () const
+
+inline
+
+ +

Definition at line 173 of file LaserScan.h.

+ +
+
+ +

◆ size()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::LaserScan::size () const
+
+inline
+
+ +

Definition at line 174 of file LaserScan.h.

+ +
+
+ +

◆ dataType()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::LaserScan::dataType () const
+
+inline
+
+ +

Definition at line 175 of file LaserScan.h.

+ +
+
+ +

◆ is2d()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::is2d () const
+
+inline
+
+ +

Definition at line 176 of file LaserScan.h.

+ +
+
+ +

◆ hasNormals()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::hasNormals () const
+
+inline
+
+ +

Definition at line 177 of file LaserScan.h.

+ +
+
+ +

◆ hasRGB()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::hasRGB () const
+
+inline
+
+ +

Definition at line 178 of file LaserScan.h.

+ +
+
+ +

◆ hasIntensity()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::hasIntensity () const
+
+inline
+
+ +

Definition at line 179 of file LaserScan.h.

+ +
+
+ +

◆ hasTime()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::hasTime () const
+
+inline
+
+ +

Definition at line 180 of file LaserScan.h.

+ +
+
+ +

◆ hasRing()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::hasRing () const
+
+inline
+
+ +

Definition at line 181 of file LaserScan.h.

+ +
+
+ +

◆ isCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::isCompressed () const
+
+inline
+
+ +

Definition at line 182 of file LaserScan.h.

+ +
+
+ +

◆ isOrganized()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LaserScan::isOrganized () const
+
+inline
+
+ +

Definition at line 183 of file LaserScan.h.

+ +
+
+ +

◆ getIntensityOffset()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::LaserScan::getIntensityOffset () const
+
+inline
+
+ +

Definition at line 190 of file LaserScan.h.

+ +
+
+ +

◆ getRGBOffset()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::LaserScan::getRGBOffset () const
+
+inline
+
+ +

Definition at line 191 of file LaserScan.h.

+ +
+
+ +

◆ getNormalsOffset()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::LaserScan::getNormalsOffset () const
+
+inline
+
+ +

Definition at line 192 of file LaserScan.h.

+ +
+
+ +

◆ getRingOffset()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::LaserScan::getRingOffset () const
+
+inline
+
+ +

Definition at line 193 of file LaserScan.h.

+ +
+
+ +

◆ getTimeOffset()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::LaserScan::getTimeOffset () const
+
+inline
+
+ +

Definition at line 194 of file LaserScan.h.

+ +
+
+ +

◆ field()

+ +
+
+ + + + + + + + + + + + + + + + + + +
float & rtabmap::LaserScan::field (unsigned int pointIndex,
unsigned int channelOffset 
)
+
+ +

Access a specific field value of a point.

+
Parameters
+ + + +
pointIndexIndex of the point.
channelOffsetChannel offset to access (e.g., 0=X, 1=Y, 2=Z if 2D, for other fields, use corresponding getter functions).
+
+
+
Returns
Reference to the field value.
+
See also
getIntensityOffset() getRGBOffset() getNormalsOffset() getTimeOffset()
+ +
+
+ +

◆ clear()

+ +
+
+ + + + + +
+ + + + + + + +
void rtabmap::LaserScan::clear ()
+
+inline
+
+ +

Clear the scan data.

+ +

Definition at line 208 of file LaserScan.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Lidar-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar-members.html new file mode 100644 index 00000000..a6588011 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar-members.html @@ -0,0 +1,108 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Lidar Member List
+
+
+ +

This is the complete list of members for rtabmap::Lidar, including all inherited members.

+ + + + + + + + + + + + + + + + + +
captureData(SensorCaptureInfo *info=0)=0rtabmap::SensorCaptureprotectedpure virtual
getFrameRate() constrtabmap::SensorCaptureinline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() const =0rtabmap::SensorCapturepure virtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")=0rtabmap::SensorCapturepure virtual
Lidar(float lidarRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Lidarinlineprotected
odomProvided() constrtabmap::SensorCaptureinlinevirtual
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
~Lidar() (defined in rtabmap::Lidar)rtabmap::Lidarinlinevirtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Lidar.html b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar.html new file mode 100644 index 00000000..f0902421 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar.html @@ -0,0 +1,251 @@ + + + + + + + + +RTAB-Map: rtabmap::Lidar Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::Lidar Class Reference
+
+
+ +

#include <Lidar.h>

+
+Inheritance diagram for rtabmap::Lidar:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::Lidar:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + +

+Protected Member Functions

 Lidar (float lidarRate=0, const Transform &localTransform=Transform::getIdentity())
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
virtual SensorData captureData (SensorCaptureInfo *info=0)=0
 Pure virtual method to capture sensor data.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")=0
 Initializes the sensor.
 
virtual std::string getSerial () const =0
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+

Detailed Description

+

Class Lidar

+ +

Definition at line 40 of file Lidar.h.

+

Constructor & Destructor Documentation

+ +

◆ ~Lidar()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::Lidar::~Lidar ()
+
+inlinevirtual
+
+ +

Definition at line 43 of file Lidar.h.

+ +
+
+ +

◆ Lidar()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::Lidar::Lidar (float lidarRate = 0,
const Transform & localTransform = Transform::getIdentity() 
)
+
+inlineprotected
+
+

Constructor

+
Parameters
+ + + +
lidarRatethe frame rate (Hz), 0 for fast as the lidar can
localTransformthe transform from base frame to lidar frame
+
+
+ +

Definition at line 52 of file Lidar.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/Lidar.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16-members.html new file mode 100644 index 00000000..bf7d1d38 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16-members.html @@ -0,0 +1,113 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::LidarVLP16 Member List
+
+
+ +

This is the complete list of members for rtabmap::LidarVLP16, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
captureData(SensorCaptureInfo *info=0) overridertabmap::LidarVLP16protectedvirtual
getFrameRate() constrtabmap::SensorCaptureinline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() const overridertabmap::LidarVLP16inlinevirtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="") overridertabmap::LidarVLP16virtual
Lidar(float lidarRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::Lidarinlineprotected
LidarVLP16(const std::string &pcapFile, bool organized=false, bool stampLast=true, float frameRate=0.0f, Transform localTransform=Transform::getIdentity()) (defined in rtabmap::LidarVLP16)rtabmap::LidarVLP16
LidarVLP16(const boost::asio::ip::address &ipAddress, const std::uint16_t port=2368, bool organized=false, bool useHostTime=true, bool stampLast=true, float frameRate=0.0f, Transform localTransform=Transform::getIdentity()) (defined in rtabmap::LidarVLP16)rtabmap::LidarVLP16
odomProvided() constrtabmap::SensorCaptureinlinevirtual
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
setOrganized(bool enable) (defined in rtabmap::LidarVLP16)rtabmap::LidarVLP16
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
takeScan(SensorCaptureInfo *info=0) (defined in rtabmap::LidarVLP16)rtabmap::LidarVLP16inline
~Lidar() (defined in rtabmap::Lidar)rtabmap::Lidarinlinevirtual
~LidarVLP16() (defined in rtabmap::LidarVLP16)rtabmap::LidarVLP16virtual
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16.html b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16.html new file mode 100644 index 00000000..6b4a009f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16.html @@ -0,0 +1,356 @@ + + + + + + + + +RTAB-Map: rtabmap::LidarVLP16 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::LidarVLP16 Class Reference
+
+
+
+Inheritance diagram for rtabmap::LidarVLP16:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::LidarVLP16:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ LidarVLP16 (const std::string &pcapFile, bool organized=false, bool stampLast=true, float frameRate=0.0f, Transform localTransform=Transform::getIdentity())
 
+ LidarVLP16 (const boost::asio::ip::address &ipAddress, const std::uint16_t port=2368, bool organized=false, bool useHostTime=true, bool stampLast=true, float frameRate=0.0f, Transform localTransform=Transform::getIdentity())
 
SensorData takeScan (SensorCaptureInfo *info=0)
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="") override
 Initializes the sensor.
 
virtual std::string getSerial () const override
 Returns the sensor's serial number or unique identifier.
 
+void setOrganized (bool enable)
 
- Public Member Functions inherited from rtabmap::SensorCapture
+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

virtual SensorData captureData (SensorCaptureInfo *info=0) override
 Pure virtual method to capture sensor data.
 
- Protected Member Functions inherited from rtabmap::Lidar
 Lidar (float lidarRate=0, const Transform &localTransform=Transform::getIdentity())
 
- Protected Member Functions inherited from rtabmap::SensorCapture
 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+
+

Definition at line 61 of file LidarVLP16.h.

+

Member Function Documentation

+ +

◆ takeScan()

+ +
+
+ + + + + +
+ + + + + + + + +
SensorData rtabmap::LidarVLP16::takeScan (SensorCaptureInfo * info = 0)
+
+inline
+
+ +

Definition at line 79 of file LidarVLP16.h.

+ +
+
+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::LidarVLP16::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+overridevirtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::LidarVLP16::getSerial () const
+
+inlineoverridevirtual
+
+ +

Returns the sensor's serial number or unique identifier.

+

Pure virtual method that must be implemented by derived classes to return a unique identifier for the sensor (e.g., device serial number, file path, or other identifier).

+
Returns
String identifier for the sensor
+ +

Implements rtabmap::SensorCapture.

+ +

Definition at line 82 of file LidarVLP16.h.

+ +
+
+ +

◆ captureData()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::LidarVLP16::captureData (SensorCaptureInfo * info = 0)
+
+overrideprotectedvirtual
+
+ +

Pure virtual method to capture sensor data.

+

This method must be implemented by derived classes to perform the actual sensor data capture. It is called by takeData() after frame rate throttling.

+

The returned SensorData should:

    +
  • Have rectified images if calibration was loaded during init()
  • +
  • Include proper timestamps
  • +
  • Contain valid sensor data (images, depth, laser scans, etc.)
  • +
+
Parameters
+ + +
infoOptional pointer to SensorCaptureInfo to fill with capture metadata. The base class will fill ID, timestamp, and capture time, but derived classes can add additional information.
+
+
+
Returns
SensorData containing the captured sensor data
+
Note
If capture fails, return an empty SensorData (id=0, stamp=0.0).
+
+RGB and depth images should be already rectified if calibration was loaded.
+
See also
takeData()
+ +

Implements rtabmap::SensorCapture.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.map new file mode 100644 index 00000000..d20f2010 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.md5 new file mode 100644 index 00000000..cd93a94d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.md5 @@ -0,0 +1 @@ +c42e24aff3ee311da9e5dd31941e1c1f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1174d7fd21170832a3e4d86b11f66cac40d265b7 GIT binary patch literal 10242 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.map new file mode 100644 index 00000000..d20f2010 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.md5 new file mode 100644 index 00000000..cd93a94d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.md5 @@ -0,0 +1 @@ +c42e24aff3ee311da9e5dd31941e1c1f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1LidarVLP16__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1174d7fd21170832a3e4d86b11f66cac40d265b7 GIT binary patch literal 10242 zcmdUV^;eYP_wCT#NT(nmN;e`PASK=1or;8lbSkNI_kc7?C?X;#DyVcwcXvz3J@fh8 zAHM6}`w!fu3uYGY%=@nNc6FTBjKH6dZDJr34ieaSij{-r_ui5;?e)BI@`2(Om2;P-E?MjCo!S- zY<(hred1(dV=uk;=<=*h#y?2rgs+{(Hcp`HzdtHT_6~7nWMoWPzwoP5b{g6KY4LHb zL%Le2%kQj_$;DX9#W0I#6WYed$X7>}le=hQVqyy0GscO$I6ZyhHr1j(XkW*{KIn}W zCoqyEK15?H87UtxfYi;>FaP`Z@7!3uZ5D610P-um|N8CQ!uHgM|GuZ=8KUAfi>a%t z>oN&^t8Hc$7ks&4xqE!vS$w>O-9CY(0-UpMus^*_@4w)EfZZ+Q?vDG#8ljG z+bq2LQ>k0Ph?Iy)`3-hkVey)bgZg@7=qXA^zz4a&LZOSQt7Xv$WZuz5d48 z(Z=d%EpyQ69L~G<@8^Dr%|sLzv!(Hxzeq|-!genH&zI>xEwcI?hBXaK-gum!m7mYd zp_UPHu+q!M%8C{l8L6zSEc-2iaj#6~67Qq`QAZk&>F&St9X1XQY{5*zGGd-M0j#l>ftuTF8Qs;f(VCnqN#{@u6FkqKt<_4PIS=r2-Z z`6+?Nw5g!3j&u;I-uW|AsMKd<1PS-=N@Pxqh`?-g-=6+RUszapy8U6Nf^cPVv3-1; zZsm7w=j`Y3QXeWx%Jz;9IXYrIyw9N+I7#{WiDYbwR(tbb`$k98$MYc^yk_r0AYl!j zGfd3ScF{IBHxUTb=SMAr;{#5%t=mJ;jGEjs8$7Oej8vPF(bD3vVoFI#@q13Ux-|Dp zcz%l4uQd4F*GEc5MwawL@6%x3(4|!1alaC?b!QZje$(a9Yu);1f4vA9#7Pkkul@z9 zSfTMMGn>bS3G^N_E?4c57!x^Js2yQNh5#;BfC7 zv#y;T`~Ca(UqWg=o=gW&Ub}W54-Zd4!Fz4s#)}s(ioSnW9&d1_Fg7t6$P{wa8?p89 z(5N)1E(*sXd6k|{?XxqTtE#G6vQ}-{jO>*@k0WN3RFID*E|m^E>x&^{bDC)jq@T<1=nU0R!^78UwZ}7ilO8m(2He<+*&)Ps_SXkI9 z1X|c@QF;IP*uZ&ad^~HU)>0D^BJ4cC?&alm{d!SV)onomfx<@D(SiPArL|;D=|Xr$ z)t1(TCzjg8YE1DZ$LDr4Wh6W>2M;Z(me7a;N<(K2m)Qs4a!@;#8ic*n)e z<7jnJFWn=1t1Xq`gK>{a`Tm#fzAjRXFVI$v-NFipt8A zo<4m#&~nQ&-7@HJB%<$Ewpis>e$=Xv&qNz3 zhPCq>wV%3%D-E^v^dca>uzM}+^SYxS!6U5Be3BU$7$|v^kdQF&sk*Al%EkuW)YLTf z5!{Jr1eu$g>&;c}@#Ju|Us+YPBlnKq!?_Nui<3`R_jjg0zD!CA$;n~hqQq}K_!mp4Pu{>9;YJ3(3t z|Fs*=#*U7TDXFP*fG-2q7E4<;Ha6F*C#I*FhMi-!4sUahW~HSWl(pGzIulX3`1@B> zlFJ=YDr#$!MG?_Q{dwzXJJ%7(FC^5dDRUW-kwKICmm6mwdCs8PME}EdSu}m|ua;HV z5t6=}xBz}*6BD*q|1MGR7C~y%_Dmu!E>3TGXRu5&SGuz-Kj=lG%s-lRUh|IQt%-V% zDM_=oXSCHOjdI4uv~YS#9=pAN{~l4G6R@;3(ClexWMsr5C`hiMq2V&&8Y8WH^7QcV zP|Lu8gGlDtsn(X1rjd!s$m<=N0Fz?#%Z7%AFL26A=6?QETU=hY`TF8o2ER2rHVIQ) zL_`F4&(>JI{8_lf<7LA6`FVcd%`wM{Le}xgj{#!Oo;@phdW!_&WV_H6&&A7|hAb;7 znf-Tpj#^oZ-%f(XM}JmPQL37n8X5^NcEvcF&{%4|j)8$UBWDy86aYAAfq{W2V1XT` z;Nrr)zrWx2F~AR%EqYP6q-D!bL3jNRSGBh+;tC5{4XTVngZ~}m>wCNx_uZt?$Pw>n z2|PY*!U_4EduL(sNAkc!calsQ&zbtP%Fo9`d7_V()ovTV!8||NQTh~gS@-n7A&y>* z7`D|zZ*K)fMeMWVt=NG9ozx|`M<_gNVc_|(vby?LNO}JUza3a80BG-&gQ8+o_g%Bp z=wH8ny-ZET3J3`BUhPAJ!tna_>)pM*&j9PJ={@y+I~MQ?Cp0v4wXYCkU~o_%;Mnc^ z(!R-t=Sa(Wu5DpKT&nZ@ZoskL z`wHVfZ|r*t%F1wnYtoriX^~Bq5bcOH2JbpRQ^I zw|@BJ6A;`4yn6HYt*aZSj7&bnwNOyg#DosOQ{CQ7-Ca^bqQA!cLxua>CIT#lYnT>qR-<* z99zq}Xa;XGxWozMb`<`Pm&kjL!Gqpdacg-lwLwrf>uzp1J+0c*mVScft5Ag*<5_G| zRj7w2a$OR`Dhu1iSv%zt*&F6Of!AGA`;4XLzQw5b-MBUUAo_CbDhu^DYK|A!VeyEz zv1Qij5pQ+)i*y+htvR|K3zHtfVl^^kHP6{V>&n95LRWz4Ksxusm9L8Dr+`lK5kK;Q z_)u0xu+$oXRSPNq=?oW^U54?3TwJ~6f|jdI3WgtoDphffAnar&A*m4QVxyM+uv|o- zlw3OLp7v7)G-RUPZl509k({`ZV=*{JP1%YZSM%zjy#(HAxp|C$0Uv{ly7FrrKEyh) z(2?x!zJwf=3sRtKJygCLkBpxnL}yAEZIzZl&29b_&7cHaY}ar7CXCP)tKc|K_+p0U<+%6;`H{a+}N zxTY13ls=#)q!U&K;*I?(DXDMOoraFC2##U=G_mWy)13b+UYEVEZakP>St(l+q*L?v zm(EVO1#htAx>f+>P@I4`Nzy#={yS3dRb5r(s~ za~5xLKOAEgX=#hC2H;_vGc$r7)Xp`O_*g~7#V_;oYkmFQ+-?gB3L+4k8acAQzD?tQ z0VG0KSDh~Qd-#+!G!#`-o{#^15gYq5BO?aL=;G3n$j|6LIZ0X<%fO>+Kt)hbI0dYs za_Yn3$;mey=4X9huGM!R9v$taf4acR7V`uwg5pLa>Xy-vzOcL;1vvTIJTW_)e)`#g zdX-5dJ_V=77XrT4kcDrF4+fc~pT*pdrTPqH8C4SMo%*kPZ;f9oR!ZywkfmSg6tOj7 zb{Va;{FZvl5K3PZ0H1=A5}S|^g|V@5OhSU9x3_SL>J8vTrJf()k5KAgo9D|FwlDRh zmwIaXY_Z?CG1r}XYoGxt!F4ENSXfxxJwqeQ$vy_74)^Y%L2ODrm&>AEi?(-lU+Z0$ zkf2>#TVv7r`0ag7qx9Mekem?{`Nzj4%sW#bqQ87mkn%q)@0P-kM2D);IBn|(%s2Il zBsH4)wo!=tM3es74(x+s$KE`Mfl=-{q@4%u@#yl*M=gUNt@hKu7U5qL6ZB;oxpI(> zpvxn}FJHg1a&qE;_F+Z6MaUW(XC7ug_VRkT{F62%Eo~lZA}qBF*eVeBOP7h-*ZD5l zHCkLrIXQ9gd~&b#R2M2MRaQ>V&vgOChll6C#yX$w&J6)mqLX^U|GuT=RdqGbpRuu| z%F0{tPDe!r?{c@3WZ>awjrr>b>AWc^DSGyIiHV7Yfk(Zmt1DO=EK8OvOhS^-3P!Z} zZmEW26I~Y)67s)18g>4aB{KB>vEw?(HAsTCoLpGL?-h3;4vwh*u-EZ9P3gZ8IXO8) z$2|c%AC;t~r3ZF_-mQM6wk!d{uaz$y=(PC#N{IMujKsIL zww9NaL@?d;S3soa0Q?nIQ_%`ePfzJ&JUu*k(O95vziDpfG&D4X0>?^1LgMA)Q(7n= z{R(*W<>gLr?He_pOT7v2>nMez^TBtk95}+_?5r%1wnN~?BSyOBz_CtLWQ2oz$z700 zq&Lu5=SirVYe%D&wU6GzzJ3)Q9o_9uNJzMP@%KPM0k-h{rlzLDVM9xm!HEWEd0JXp z1qDiGW=(|C_T+m#ScHOtXX_sJ(|`amqwF6)ek`u9tDbC6>E1ER*E-nSV+AJ4&BJq} z=tThMukN5c(VHmXt?CuT*lOt6fFQ6T6+3HIL)PhNf^XsNtmRx=v{i! zc#47RHjK|1zjf$Oxv5(+*Vm^dC@P8sspD)GDCZ7$0@1Jv8mhs%6B|@YYWD@;4@wJa zYikc&Rdb@vgKShS)p5V$w>`;9Pfsrya9q_bIDDk*KIl2savwCDH_*Y?@n2)92T%7F zHq3N=T<}GzWiBwee@lomd^Xi$QweAjZbVtd2MT;1Uq% zI+p>$AVNT8$yr)5KVJDAsb!> zD&pG8ZOF`7@f3!_TDUqy7D`)YR1R zqi1JpWgx4SBpp_ON@!tUO^^liGwZW036^RcV92~BLM`2iNaUV8$rQ6B++3Th? zC;<0iOId;D&cz1}+p)LsO`rJN@bIBj){?Ex(Qu2;hRMpGMptTBQyidfF&qUgF3Rt{ zy-IMv35kf%3c7<6K&!kqyARS=JCis0hZXR1qMjwM)W_OH{SNXh*D0x}DjIG?gp`)r ze{`vSAmf_ceQ9lHhiPkT3-~|xIUL6cJdg0k1IR?NX|u=aa<(TwFye@)sQE9?DUM9O zk;q)2(7YJV<`alu9e_BZ9R=|qMWli*Xh6*)LhO6etbq+1)!W=pjU`EKwhjuC=1|Xy z=t<`*b{(zZ7Zp_mt{O$mSn=N@b-20dCiP?&0r+NMJOkn$9H^=$WK;n~;ju8}4}@-I zT)@@k$sU{&YcL%U+)QtngdF0!#T4b_&{I@P534EY>0<#Bq#iT&PN1-!oPuI*bCXbB zzLUGt=SGAqsAp1Y>S$OZ1_Dl2_)O4wwMFB47U+2AUZI;e@nFM+0m9(pt!CxAZ}}m6KBpsuD6{b03eiUF<&q3@rfIf9UI5V^|GK`dXrrToK1C6C|ak zrndXXG2a?A*^$Xg-razt6LB=|H(I$CVml-`w9w}fCVLgfn8X; zxQshB=R%Q}kd(YGE=~i623!&u8%rSRy&3`{qkUk2{L|$zz4YbbAa{?wgM-cQ90`;Z z(a4vMXH!aG5fIqR+;}oAs;i^J?=r+?=ityWGSbw|kAU;aDk*7Vp9}P-a^Uy=QqSIq zspmb8yK6$)uSge%S1&+VvST8qcmgzoG%(!nE%N(k(ihm z>h!Q&cl+}O3!I3mH_gO|;H&c)YggA;D2T5au|wb^R)6=GjG8^n8w0abQcB*87T4A$ zf{QVFN^8>W5f4?;x+{(rI7n1k8K;|@8|oMWq*h>V45C&F`_39lRb74kXUG;AGqYvs zul2Jv6|Ui-M9XJ;SY7e-IKjcept0r-*9PDDA8`{ih-)pZ_%i{0fU>5~%XWTxI=lQU z`xLe@%FK+3!NtVEv4zEtfnl||wM9ls8UhxYN`Nw4Z}irI=;yCr^|s%LGqST6z&jhT zNN({3>(C170@1|SSb3{?Ns}m=)$-3w8eylTaZ#Szw`bSaxwlg9-gR?y#4$CU;Qnv| zI$06)zMf0=-2hS4Hn=>Q=^PuQVGcYb^WC1jnVVnv;7ZR=!qPPG;Fs7bpz|ZJYkub4 zrH7)7rS-^!6$}7yWNsX9PZ5CDb{lWN1Mf`H+4-iKxw$nEi0U#>*W4=-`Apb|Teoht zo^O8;4?Gig_?4w!N<~dg4FdVPpr8(&qq8$ApdDYoVvUT939a0+i=^HKyHF*-&)?sl`^pc|J~&7LHcJO!tE|HA?yfADW2N#toIO>h&BOrhRRfxh z>ghl1a7jqM0XKX!+l~fj!0Jm38H7*0QA8xd;qR;OSOioJF@_{Opy0td_FYtaim3Z|9)i`T{1iQv4OoC5e|MK2T(l8b7 zvLWcGaB`uu7FQ%BSH!1kp!51aIUxBz@#dg_td)jAza$t$GAP8 zvs^J41fR9@70;yOdWnaY+I)??(2PT?h;j_6WJJBn8Z@dGU*&(0IDpIANlt2kp_QO& zja?8IvT%>7LtcJqjgVM`XMtLyCsnoT8u~sr1r{X>E@@Cmd)5|{+(~fGn@rP>S$3Jf zpQNT3-Ndv&*NR&2wI}(r&1#cfCzbo95NW^6%>Fo&RS>VP%32f)R}k$PALfYr5$SlK zu@-?k5r-|oU8N>_M92HqK zmNeDbM*o!Zn+RjJF;T@y{S=!Ngy2;(&rqef{lh2G(NB&IZwp<6Ag$if)Rslh*1DX| zLT~^2O*M{apFC3Ch_2FZ1@n;-?>AhuNsJ0S(Xc$V1d{9~!Kto7Wa**ZsT?A4SWQQE zwkZ_dW9I1#bdf=03VeoJf-IesdS+XCf60N5ojX@%zbkk-?@bwQ^M)yXHZ(C!^?lb{2z;cx9WR7NuP-PHlpXhDAn<`7|b$jz0C({$>*t(`{p(D znendn;3JnpxAilVS6J3Vrg#h(4;SjmYYhVGqm*TFtDp9~5S`Oj?7j)L&CxQo2F7zzUd&f1i2|XXW&MQG?9OOS@f1pkR&1*`krHi7oP>0Fo|r_O z9lZ#fg9CvC4E4w2Lnbj>OxNS=cF6^wO!0p9V{jvKoF?;%Bv--{w=VkP8qkV$l~IYk zH|I#OK(E2e5<$+YR?FjnO-w#4)6wa&M6bvsXC*@x^vcv$^rUQgFVBSF?UZ>AX-FCA zL%v?c?=uOcS89KSOh`2r&?01?U*-}D#9~xGoz-#;ZF(A$oMg=qk{-J>CL{JDPS`xT zX^)`HS+yew_hR&zVR`ofMizViG<~Z{ESv9XE_V20&hqgPA8&NFsjySb2A(^7-Fc7z63jV3yNI+9ACV#RY zXi)L2bM-DFpLA}j;E_!-a>IIfLCco>lkHG)_alag!*7_HLCmIDH~TQDaNfsW!M7L) z5sM%@WODpdC=$YV=`km-PB@a%o-3b5EeIiES!X{@nPWP)up8VV7BTpGQ9NYM(fNpU zJ8k{5`wGp=;k2naCIGj8AtLCViX%qc2S-^w$i^(LA@8-c%wALoqsSyUurF^vlMx)mK+Yk1f5 zd||kZ87^bHvb8g`NXSP^=??7=Wt#U>A00A6Vkd`2V)6BNz2m@B-IL7>y!aN+AX5YSSB)&t=s(KF2HA)3f&m zks|lJTq3%>7_L_S7yZ4&C`uk-7D;X^(bqt~^SWO0AeNn;yYmqOxfG#26GtH?Vm^3q z_JA@oHD#6)-5*YYrQZO+ca_C7ZkeyWEIZlli1u>#?Ri7>(Zi}`MeSQpZzhEG(W2X) zMr(OvMAKC^KUFHPR*OLunRPdaP2SR8|}xo+U;{a5j%F;udq1D#yN!c*YD=KU~SxL-3s>VXKt zdFVAwwqClHwQge}?o%X~!yXo@HNR9KaNT@Rq(15^T>M9@SRv1hSPXYE<;U(@Pw}IE zZ*`G9q8kCUtoX9DKX$uCH6NLxF8&4=KbSRo>FE?wkI;Gk@R+zozhKR)cnX_||6~`<{WQqGDs$n+Zt*&{oldAgiV)$ptl(^4NgMKe7@AaE*CvjB6{ zihKk&5-?(JihU9PHx-!{4xf2<_2k8?FgZ0eQguOvGse=F>VMj1wCPmZ$#5fjs`tjl zioYx%-SVBOqUl^I16uDp-$QGSl*Pnj$YWM4&MGqhRJ^Ey4)`9&o$=TbsX@y>cLfJ|t#N5|WAU0U!qy4<8B;B7dEP`XF7HoA2ue*f| zZBKB2UJa>I9S4c0ri)yVAm}qUZcSZz=6qM}CVgbeC;QrMm!sji8b>T1F0Ru{nWeI_ zHFWP>QkxgxZX6z(JTc@9#3(JqvZGoK_Nd}Wd1NVjyc&veo2PNzcqqyMNc5{$6I4J=N4#l&DP${Je9~vD{q*+($fj6g5!ht^r;{(q4RQuZzyPr z3N|)H$Q~=YuEMT{4(L6RQBszy31(2uR_2>n0V(9-=I(%2gowFnF?2fQ!RCTajIsSV zcw_X9Ti|zITpaYCo-QP^MyzjTLt`7I0#R)`+jwhhYg{}$G{oxKS|Mmu8X*TlAo2(V z^geKLaiKlc0@r#Rg2x!-1kb2_cts9$wxq z=qFk^I7ETOm_ses*H;u|W!_F_BY$hz$WPEBY+_>6XJ=>7Rk~+A$L!eykB5eEn{K5A zS7of(lNr%IImrNCQWuyF&`Z7k>uR;1&26HI=;qCvAfKZ?eE4wq4HgmyebeuDf@bf% zu)N+gfam2j)gl6JNjNmnP*QvM=m>t_XE?b$@0E$d8*I9v{~jeu$H= zHkJ(jC$;=LHx@ds@|KpCTXSV#8N(n30s$@2G3Zhr@605EBc*b{&cR^=qANqhl?pYM z(cUg=WNKP$So>l|`MviV`Nid>0F0l2r#c6{x$y9C3@RQIOt3CtEQUo`m=YWvr#ex3 zRVODd9UYxI?=>ChqT0aX-a+5*hO)KgTCiYVBJ zW35kxYRulFgW8It6~czDX#8{&?_6iELpeA$G?Lz2V25uAe@acg2DaqGy`uHRSa6B4 z;6i>uK{;?g`R%@w=14qN%$kNSZ|muNEWfbumpbcC1Oi-3r_mZllu{gcz{kqQR{VK< zbD)#}wphu>H)YWqs8JRQ4mH_mVn%RsUN{dT^(QQchtIra{5D32w#FNik7Ew@_rW?_ zl4SOWsSSfDXvIyoK7IQ;)B>9HZykF({`{c@yA|bGkuortm3kNmP3yWwt?w)A!$ zxl+Eg&-qIpFw0;T$EvU39wG#WLJC0KzI!-_4sP-TR1V~#s_=%KIfzbq--kCc?dg;@%GaFFYon_(}frB&o; z)jp_R7r%3djh!76yi1f~?n+=ZtsQrBcOSN(t=@P8&NlZ#jPlm8HBACT#M7!e4Lwr$q+`2kRfs$w4c=g0TkG zTxXE<#{G2l?+z2RJZ5LDxF~~LN#5`_R@mCugn`1IhY_Cp*4C_1#O^K4FF(9{$8z^B zgE4ed#+@~Cl%+vY7W2!jrNm#D-gfYTsJ;~( z?f`J%B=rXyozR&<@c-|2;;w|qh}G$~-v|Sc*8f+h(UQvvJvINXT~&Q*YU3s|az)D( oJ=OAg=l>X-`_BlSEBh76?IjkDI(l|y80tf)+}BX3k+TZ>Uv}n`D*ylh literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.map new file mode 100644 index 00000000..bbe30762 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.md5 new file mode 100644 index 00000000..973ebf86 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.md5 @@ -0,0 +1 @@ +103b329e8022c780143221bbdb498639 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8161a3f5621cfbb028931dcbbcfafacd7395ba4f GIT binary patch literal 4411 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__inherit__graph.md5 new file mode 100644 index 00000000..f3bed1ba --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__inherit__graph.md5 @@ -0,0 +1 @@ +f40df56eb3690496b25cb07fbad49cf2 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Lidar__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..837eb3f7528c19db034b8d66ec44b4b231d27b21 GIT binary patch literal 6572 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Link Member List
+
+
+ +

This is the complete list of members for rtabmap::Link, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
from() const (defined in rtabmap::Link)rtabmap::Linkinline
infMatrix() const (defined in rtabmap::Link)rtabmap::Linkinline
inverse() constrtabmap::Link
isValid() constrtabmap::Linkinline
kAllWithLandmarks enum valuertabmap::Link
kAllWithoutLandmarks enum valuertabmap::Link
kEnd enum value (defined in rtabmap::Link)rtabmap::Link
kGlobalClosure enum valuertabmap::Link
kGravity enum valuertabmap::Link
kLandmark enum valuertabmap::Link
kLocalSpaceClosure enum valuertabmap::Link
kLocalTimeClosure enum valuertabmap::Link
kNeighbor enum valuertabmap::Link
kNeighborMerged enum valuertabmap::Link
kPosePrior enum valuertabmap::Link
kSelfRefLink enum valuertabmap::Link
kUndef enum value (defined in rtabmap::Link)rtabmap::Link
kUserClosure enum valuertabmap::Link
kVirtualClosure enum valuertabmap::Link
Link()rtabmap::Link
Link(int from, int to, Type type, const Transform &transform, const cv::Mat &infMatrix=cv::Mat::eye(6, 6, CV_64FC1), const cv::Mat &userData=cv::Mat())rtabmap::Link
merge(const Link &link, Type outputType) constrtabmap::Link
rotVariance(bool minimum=true) constrtabmap::Link
setFrom(int from) (defined in rtabmap::Link)rtabmap::Linkinline
setInfMatrix(const cv::Mat &infMatrix)rtabmap::Link
setTo(int to) (defined in rtabmap::Link)rtabmap::Linkinline
setTransform(const Transform &transform) (defined in rtabmap::Link)rtabmap::Linkinline
setType(Type type) (defined in rtabmap::Link)rtabmap::Linkinline
to() const (defined in rtabmap::Link)rtabmap::Linkinline
transform() const (defined in rtabmap::Link)rtabmap::Linkinline
transVariance(bool minimum=true) constrtabmap::Link
type() const (defined in rtabmap::Link)rtabmap::Linkinline
Type enum namertabmap::Link
typeName(Type type)rtabmap::Linkstatic
typeName() const (defined in rtabmap::Link)rtabmap::Linkinline
uncompressUserData()rtabmap::Link
uncompressUserDataConst() constrtabmap::Link
userDataCompressed() const (defined in rtabmap::Link)rtabmap::Linkinline
userDataRaw() const (defined in rtabmap::Link)rtabmap::Linkinline
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Link.html b/preview/pr-1492/api/latest/classrtabmap_1_1Link.html new file mode 100644 index 00000000..3074d0af --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Link.html @@ -0,0 +1,828 @@ + + + + + + + + +RTAB-Map: rtabmap::Link Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Directed constraint between two nodes in RTAB-Map's pose graph. + More...

+ +

#include <Link.h>

+ + + + + +

+Public Types

enum  Type {
+  kNeighbor +, kGlobalClosure +, kLocalSpaceClosure +, kLocalTimeClosure +,
+  kUserClosure +, kVirtualClosure +, kNeighborMerged +, kPosePrior +,
+  kLandmark +, kGravity +, kEnd +, kSelfRefLink = 97 +,
+  kAllWithLandmarks = 98 +, kAllWithoutLandmarks = 99 +, kUndef = 99 +
+ }
 Link category and filter sentinels. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ Link ()
 Default constructor; creates an invalid link (kUndef).
 
 Link (int from, int to, Type type, const Transform &transform, const cv::Mat &infMatrix=cv::Mat::eye(6, 6, CV_64FC1), const cv::Mat &userData=cv::Mat())
 Constructs a link between two nodes.
 
bool isValid () const
 
int from () const
 
int to () const
 
const Transform & transform () const
 
Type type () const
 
std::string typeName () const
 
const cv::Mat & infMatrix () const
 
double rotVariance (bool minimum=true) const
 Rotation variance derived from the information matrix diagonal (roll, pitch, yaw).
 
double transVariance (bool minimum=true) const
 Translation variance derived from the information matrix diagonal (x, y, z).
 
void setFrom (int from)
 
void setTo (int to)
 
void setTransform (const Transform &transform)
 
void setType (Type type)
 
+void setInfMatrix (const cv::Mat &infMatrix)
 Sets the 6x6 information matrix (CV_64FC1); diagonal entries must be positive and finite.
 
const cv::Mat & userDataRaw () const
 
const cv::Mat & userDataCompressed () const
 
+void uncompressUserData ()
 Decompresses user data into userDataRaw() if compressed data is stored.
 
cv::Mat uncompressUserDataConst () const
 
Link merge (const Link &link, Type outputType) const
 Chains this link (from → to) with link (to → link.to).
 
Link inverse () const
 
+ + + +

+Static Public Member Functions

static std::string typeName (Type type)
 
+

Detailed Description

+

Directed constraint between two nodes in RTAB-Map's pose graph.

+

A link connects signature from() to signature to() with a relative Transform and an information matrix (inverse covariance) used by graph optimization. Links are stored on Signature objects and persisted in the database; they define odometry chains, loop closures, landmarks, and priors.

+

The transform is expressed from the from node frame to the to node frame (i.e. pose of to relative to from), unless type() indicates a special semantics (e.g. kPosePrior, kLandmark).

+
See also
Signature
+
+Memory::addLink()
+ +

Definition at line 54 of file Link.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::Link::Type
+
+ +

Link category and filter sentinels.

+

Values kSelfRefLink, kAllWithLandmarks, kAllWithoutLandmarks and kUndef are also used as query filters when retrieving links from memory or the database (they are not stored as link types on signatures).

+ + + + + + + + + + + + + + +
Enumerator
kNeighbor 

Sequential odometry link between consecutive nodes.

+
kGlobalClosure 

Global loop closure added by global loop closure detection (i.e., using bags-of-words to find loop closures with other nodes in WM without using current estimated pose).

+
kLocalSpaceClosure 

Local loop closure added by proximity detection by space (i.e. using current estimated pose to find loop closures with nearby nodes in WM).

+
kLocalTimeClosure 

Local loop closure added by proximity detection by time (i.e. between nodes in STM).

+
kUserClosure 

User-defined loop closure constraint.

+
kVirtualClosure 

Virtual link added to keep the path linked to local map.

+
kNeighborMerged 

Merged neighbor link after graph reduction.

+
kPosePrior 

Absolute pose prior in the world frame (from == to).

+
kLandmark 

Observation of a landmark: from is the observer node, to is a negative landmark id.

+
kGravity 

Gravity direction constraint on the base frame (from == to).

+
kSelfRefLink 

Filter: links where from == to (e.g. kPosePrior, kGravity).

+
kAllWithLandmarks 

Filter: all link types including kLandmark.

+
kAllWithoutLandmarks 

Filter: all link types except kLandmark.

+
+ +

Definition at line 64 of file Link.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ Link()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::Link::Link (int from,
int to,
Type type,
const Transform & transform,
const cv::Mat & infMatrix = cv::Mat::eye(6, 6, CV_64FC1),
const cv::Mat & userData = cv::Mat() 
)
+
+ +

Constructs a link between two nodes.

+
Parameters
+ + + + + + + +
fromSource signature id.
toTarget signature id (negative for landmarks when type is kLandmark).
typeLink category.
transformRelative transform from from to to.
infMatrix6x6 information matrix (inverse covariance)
userDataOptional payload; compressed automatically if not already CV_8UC1.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ typeName() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string rtabmap::Link::typeName (Type type)
+
+static
+
+
Returns
Human-readable name for type (e.g. "Neighbor", "GlobalClosure").
+ +
+
+ +

◆ isValid()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Link::isValid () const
+
+inline
+
+
Returns
True if ids, transform, and type are valid for use in the graph.
+ +

Definition at line 103 of file Link.h.

+ +
+
+ +

◆ from()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Link::from () const
+
+inline
+
+ +

Definition at line 105 of file Link.h.

+ +
+
+ +

◆ to()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Link::to () const
+
+inline
+
+ +

Definition at line 106 of file Link.h.

+ +
+
+ +

◆ transform()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Link::transform () const
+
+inline
+
+ +

Definition at line 107 of file Link.h.

+ +
+
+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
Type rtabmap::Link::type () const
+
+inline
+
+ +

Definition at line 108 of file Link.h.

+ +
+
+ +

◆ typeName() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
std::string rtabmap::Link::typeName () const
+
+inline
+
+ +

Definition at line 109 of file Link.h.

+ +
+
+ +

◆ infMatrix()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::Link::infMatrix () const
+
+inline
+
+ +

Definition at line 110 of file Link.h.

+ +
+
+ +

◆ rotVariance()

+ +
+
+ + + + + + + + +
double rtabmap::Link::rotVariance (bool minimum = true) const
+
+ +

Rotation variance derived from the information matrix diagonal (roll, pitch, yaw).

+
Parameters
+ + +
minimumIf true, returns the largest diagonal entry (most uncertain axis); if false, returns the smallest non-zero entry.
+
+
+ +
+
+ +

◆ transVariance()

+ +
+
+ + + + + + + + +
double rtabmap::Link::transVariance (bool minimum = true) const
+
+ +

Translation variance derived from the information matrix diagonal (x, y, z).

+
Parameters
+ + +
minimumIf true, returns the largest diagonal entry; if false, the smallest non-zero entry.
+
+
+ +
+
+ +

◆ setFrom()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Link::setFrom (int from)
+
+inline
+
+ +

Definition at line 124 of file Link.h.

+ +
+
+ +

◆ setTo()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Link::setTo (int to)
+
+inline
+
+ +

Definition at line 125 of file Link.h.

+ +
+
+ +

◆ setTransform()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Link::setTransform (const Transform & transform)
+
+inline
+
+ +

Definition at line 126 of file Link.h.

+ +
+
+ +

◆ setType()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Link::setType (Type type)
+
+inline
+
+ +

Definition at line 127 of file Link.h.

+ +
+
+ +

◆ userDataRaw()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::Link::userDataRaw () const
+
+inline
+
+ +

Definition at line 131 of file Link.h.

+ +
+
+ +

◆ userDataCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::Link::userDataCompressed () const
+
+inline
+
+ +

Definition at line 132 of file Link.h.

+ +
+
+ +

◆ uncompressUserDataConst()

+ +
+
+ + + + + + + +
cv::Mat rtabmap::Link::uncompressUserDataConst () const
+
+
Returns
Uncompressed user data without modifying internal storage.
+ +
+
+ +

◆ merge()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Link rtabmap::Link::merge (const Link & link,
Type outputType 
) const
+
+ +

Chains this link (from → to) with link (to → link.to).

+
Parameters
+ + + +
linkSecond link; must satisfy this->to() == link.from().
outputTypeType of the merged link.
+
+
+
Returns
Single link from from() to link.to() with transform (T_{ac} = T_{ab} T_{bc}) (or null if either input transform is null). Information matrix handling depends on outputType:
    +
  • kNeighborMerged: (\Omega_{ac} = (\Omega_{ab}^{-1} + \Omega_{bc}^{-1})^{-1}) (covariances add when both legs are diagonal and independent).
  • +
  • Other types: keeps the full information matrix of link unless (\Omega_{ab}(0,0) < \Omega_{bc}(0,0)) (i.e. the smaller x information entry).
  • +
+
+ +
+
+ +

◆ inverse()

+ +
+
+ + + + + + + +
Link rtabmap::Link::inverse () const
+
+
Returns
Link with swapped endpoints and inverted transform.
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/Link.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LocalGrid-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGrid-members.html new file mode 100644 index 00000000..055f2e14 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGrid-members.html @@ -0,0 +1,100 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::LocalGrid Member List
+
+
+ +

This is the complete list of members for rtabmap::LocalGrid, including all inherited members.

+ + + + + + + + + +
cellSizertabmap::LocalGrid
emptyCellsrtabmap::LocalGrid
groundCellsrtabmap::LocalGrid
is3D() constrtabmap::LocalGrid
LocalGrid(const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint=cv::Point3f(0, 0, 0))rtabmap::LocalGrid
obstacleCellsrtabmap::LocalGrid
viewPointrtabmap::LocalGrid
~LocalGrid() (defined in rtabmap::LocalGrid)rtabmap::LocalGridinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LocalGrid.html b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGrid.html new file mode 100644 index 00000000..b1e62d6b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGrid.html @@ -0,0 +1,344 @@ + + + + + + + + +RTAB-Map: rtabmap::LocalGrid Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::LocalGrid Class Reference
+
+
+ +

Local occupancy grid cells for one map node (ground, obstacles, empty). + More...

+ +

#include <LocalGrid.h>

+ + + + + + + +

+Public Member Functions

 LocalGrid (const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint=cv::Point3f(0, 0, 0))
 Builds a local grid from cell matrices.
 
bool is3D () const
 
+ + + + + + + + + + + + + + + + +

+Public Attributes

cv::Mat groundCells
 Ground cells (1×N, CV_32FC2–CV_32FC7, see class doc).
 
cv::Mat obstacleCells
 Obstacle cells (same layout as groundCells).
 
cv::Mat emptyCells
 Empty/free cells (same layout as groundCells).
 
float cellSize
 Cell size in meters.
 
cv::Point3f viewPoint
 View point used to build the grid.
 
+

Detailed Description

+

Local occupancy grid cells for one map node (ground, obstacles, empty).

+

Each layer is stored as a 1×N cv::Mat of cell coordinates in the robot/base frame. Layouts match LaserScan grid storage (LaserScan::Format):

    +
  • CV_32FC2 (2 ch): kXY — (x, y)
  • +
  • CV_32FC3 (3 ch): kXYZ or kXYI — (x, y, z) or (x, y, intensity)
  • +
  • CV_32FC4 (4 ch): kXYZI or kXYZRGB — (x, y, z, intensity) or (x, y, z, RGB)
  • +
  • CV_32FC5 (5 ch): kXYNormal or kXYZIT — 2D (x, y, nx, ny, nz) or 3D (x, y, z, intensity, time)
  • +
  • CV_32FC6 (6 ch): kXYINormal, kXYZNormal or kXYZIRT
  • +
  • CV_32FC7 (7 ch): kXYZINormal or kXYZRGBNormal
  • +
+

is3D() is true when every non-empty layer is CV_32FC3, CV_32FC4 or CV_32FC6 (5-channel layers are treated as 2D by OccupancyGrid). Extra fields are not used for pose/projection. cellSize is the grid resolution in meters (must be > 0). viewPoint is the sensor/view origin used when the grid was built.

+
See also
LaserScan
+
+LocalGridMaker
+
+OccupancyGrid
+
+LocalGridCache
+ +

Definition at line 61 of file LocalGrid.h.

+

Constructor & Destructor Documentation

+ +

◆ LocalGrid()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::LocalGrid::LocalGrid (const cv::Mat & ground,
const cv::Mat & obstacles,
const cv::Mat & empty,
float cellSize,
const cv::Point3f & viewPoint = cv::Point3f(0, 0, 0) 
)
+
+ +

Builds a local grid from cell matrices.

+
Parameters
+ + + + + + +
groundGround cell coordinates (may be empty).
obstaclesObstacle cell coordinates (may be empty).
emptyEmpty/free cell coordinates (may be empty).
cellSizeGrid cell size in meters (must be > 0).
viewPointView/sensor origin in the grid frame.
+
+
+ +
+
+ +

◆ ~LocalGrid()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::LocalGrid::~LocalGrid ()
+
+inlinevirtual
+
+ +

Definition at line 77 of file LocalGrid.h.

+ +
+
+

Member Function Documentation

+ +

◆ is3D()

+ +
+
+ + + + + + + +
bool rtabmap::LocalGrid::is3D () const
+
+
Returns
True if every non-empty layer is CV_32FC3, CV_32FC4 or CV_32FC6 (see class doc).
+ +
+
+

Member Data Documentation

+ +

◆ groundCells

+ +
+
+ + + + +
cv::Mat rtabmap::LocalGrid::groundCells
+
+ +

Ground cells (1×N, CV_32FC2–CV_32FC7, see class doc).

+ +

Definition at line 82 of file LocalGrid.h.

+ +
+
+ +

◆ obstacleCells

+ +
+
+ + + + +
cv::Mat rtabmap::LocalGrid::obstacleCells
+
+ +

Obstacle cells (same layout as groundCells).

+ +

Definition at line 83 of file LocalGrid.h.

+ +
+
+ +

◆ emptyCells

+ +
+
+ + + + +
cv::Mat rtabmap::LocalGrid::emptyCells
+
+ +

Empty/free cells (same layout as groundCells).

+ +

Definition at line 84 of file LocalGrid.h.

+ +
+
+ +

◆ cellSize

+ +
+
+ + + + +
float rtabmap::LocalGrid::cellSize
+
+ +

Cell size in meters.

+ +

Definition at line 85 of file LocalGrid.h.

+ +
+
+ +

◆ viewPoint

+ +
+
+ + + + +
cv::Point3f rtabmap::LocalGrid::viewPoint
+
+ +

View point used to build the grid.

+ +

Definition at line 86 of file LocalGrid.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridCache-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridCache-members.html new file mode 100644 index 00000000..9816ba52 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridCache-members.html @@ -0,0 +1,105 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::LocalGridCache Member List
+
+
+ +

This is the complete list of members for rtabmap::LocalGridCache, including all inherited members.

+ + + + + + + + + + + + + + +
add(int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint=cv::Point3f(0, 0, 0))rtabmap::LocalGridCache
add(int nodeId, const LocalGrid &localGrid)rtabmap::LocalGridCache
begin() const (defined in rtabmap::LocalGridCache)rtabmap::LocalGridCacheinline
clear(bool temporaryOnly=false)rtabmap::LocalGridCache
empty() const (defined in rtabmap::LocalGridCache)rtabmap::LocalGridCacheinline
end() const (defined in rtabmap::LocalGridCache)rtabmap::LocalGridCacheinline
find(int nodeId) const (defined in rtabmap::LocalGridCache)rtabmap::LocalGridCacheinline
getMemoryUsed() constrtabmap::LocalGridCache
LocalGridCache() (defined in rtabmap::LocalGridCache)rtabmap::LocalGridCacheinline
localGrids() const (defined in rtabmap::LocalGridCache)rtabmap::LocalGridCacheinline
shareTo(int nodeId, LocalGridCache &anotherCache) constrtabmap::LocalGridCache
size() const (defined in rtabmap::LocalGridCache)rtabmap::LocalGridCacheinline
~LocalGridCache() (defined in rtabmap::LocalGridCache)rtabmap::LocalGridCacheinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridCache.html b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridCache.html new file mode 100644 index 00000000..8b2b5da5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridCache.html @@ -0,0 +1,415 @@ + + + + + + + + +RTAB-Map: rtabmap::LocalGridCache Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::LocalGridCache Class Reference
+
+
+ +

Cache of LocalGrid entries keyed by map node id. + More...

+ +

#include <LocalGrid.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+void add (int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint=cv::Point3f(0, 0, 0))
 Inserts or replaces the grid for nodeId (from separate cell mats).
 
+void add (int nodeId, const LocalGrid &localGrid)
 Inserts or replaces the grid for nodeId.
 
bool shareTo (int nodeId, LocalGridCache &anotherCache) const
 Copies a grid to anotherCache if present here and absent there.
 
+unsigned long getMemoryUsed () const
 Approximate memory used by cached grids (bytes).
 
void clear (bool temporaryOnly=false)
 Removes cached grids.
 
size_t size () const
 
bool empty () const
 
const std::map< int, LocalGrid > & localGrids () const
 
std::map< int, LocalGrid >::const_iterator find (int nodeId) const
 
std::map< int, LocalGrid >::const_iterator begin () const
 
std::map< int, LocalGrid >::const_iterator end () const
 
+

Detailed Description

+

Cache of LocalGrid entries keyed by map node id.

+

Used by GlobalMap and its subclasses (e.g. OccupancyGrid) to hold per-node local grids before assembly. Node id 0 is stored as -1 (temporary grid). Negative ids passed to add() are rejected.

+ +

Definition at line 97 of file LocalGrid.h.

+

Constructor & Destructor Documentation

+ +

◆ LocalGridCache()

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::LocalGridCache::LocalGridCache ()
+
+inline
+
+ +

Definition at line 100 of file LocalGrid.h.

+ +
+
+ +

◆ ~LocalGridCache()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::LocalGridCache::~LocalGridCache ()
+
+inlinevirtual
+
+ +

Definition at line 101 of file LocalGrid.h.

+ +
+
+

Member Function Documentation

+ +

◆ shareTo()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::LocalGridCache::shareTo (int nodeId,
LocalGridCache & anotherCache 
) const
+
+ +

Copies a grid to anotherCache if present here and absent there.

+
Returns
True if a grid was shared.
+ +
+
+ +

◆ clear()

+ +
+
+ + + + + + + + +
void rtabmap::LocalGridCache::clear (bool temporaryOnly = false)
+
+ +

Removes cached grids.

+
Parameters
+ + +
temporaryOnlyIf true, removes only entries with negative ids (e.g. -1).
+
+
+ +
+
+ +

◆ size()

+ +
+
+ + + + + +
+ + + + + + + +
size_t rtabmap::LocalGridCache::size () const
+
+inline
+
+ +

Definition at line 129 of file LocalGrid.h.

+ +
+
+ +

◆ empty()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LocalGridCache::empty () const
+
+inline
+
+ +

Definition at line 130 of file LocalGrid.h.

+ +
+
+ +

◆ localGrids()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, LocalGrid > & rtabmap::LocalGridCache::localGrids () const
+
+inline
+
+ +

Definition at line 131 of file LocalGrid.h.

+ +
+
+ +

◆ find()

+ +
+
+ + + + + +
+ + + + + + + + +
std::map< int, LocalGrid >::const_iterator rtabmap::LocalGridCache::find (int nodeId) const
+
+inline
+
+ +

Definition at line 133 of file LocalGrid.h.

+ +
+
+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
std::map< int, LocalGrid >::const_iterator rtabmap::LocalGridCache::begin () const
+
+inline
+
+ +

Definition at line 134 of file LocalGrid.h.

+ +
+
+ +

◆ end()

+ +
+
+ + + + + +
+ + + + + + + +
std::map< int, LocalGrid >::const_iterator rtabmap::LocalGridCache::end () const
+
+inline
+
+ +

Definition at line 135 of file LocalGrid.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridMaker-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridMaker-members.html new file mode 100644 index 00000000..d3c6bae2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridMaker-members.html @@ -0,0 +1,130 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::LocalGridMaker Member List
+
+
+ +

This is the complete list of members for rtabmap::LocalGridMaker, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cellSize_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
cloudDecimation_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
clusterRadius_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
createLocalMap(const Signature &node, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPoint)rtabmap::LocalGridMaker
createLocalMap(const LaserScan &cloud, const Transform &pose, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPointInOut) constrtabmap::LocalGridMaker
flatObstaclesDetected_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
footprintHeight_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
footprintLength_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
footprintWidth_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
getCellSize() constrtabmap::LocalGridMakerinline
grid3D_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
groundIsObstacle_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
groundNormalsUp_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
isGridFromDepth() constrtabmap::LocalGridMakerinline
isMapFrameProjection() constrtabmap::LocalGridMakerinline
LocalGridMaker(const ParametersMap &parameters=ParametersMap())rtabmap::LocalGridMaker
maxGroundAngle_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
maxGroundHeight_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
maxObstacleHeight_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
minClusterSize_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
minGroundHeight_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
noiseFilteringMinNeighbors_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
noiseFilteringRadius_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
normalKSearch_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
normalsSegmentation_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
occupancySensor_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
parameters_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
parseParameters(const ParametersMap &parameters)rtabmap::LocalGridMakervirtual
preVoxelFiltering_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
projMapFrame_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
rangeMax_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
rangeMin_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
rayTracing_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
roiRatios_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
scan2dUnknownSpaceFilled_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
scanDecimation_ (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakerprotected
segmentCloud(const typename pcl::PointCloud< PointT >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &pose, const cv::Point3f &viewPoint, pcl::IndicesPtr &groundIndices, pcl::IndicesPtr &obstaclesIndices, pcl::IndicesPtr *flatObstacles=0) constrtabmap::LocalGridMaker
~LocalGridMaker() (defined in rtabmap::LocalGridMaker)rtabmap::LocalGridMakervirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridMaker.html b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridMaker.html new file mode 100644 index 00000000..e4594486 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1LocalGridMaker.html @@ -0,0 +1,1193 @@ + + + + + + + + +RTAB-Map: rtabmap::LocalGridMaker Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::LocalGridMaker Class Reference
+
+
+ +

Builds per-node local occupancy grids from laser scans or depth clouds. + More...

+ +

#include <LocalGridMaker.h>

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ LocalGridMaker (const ParametersMap &parameters=ParametersMap())
 Constructs with parseParameters() on parameters (or defaults).
 
+virtual void parseParameters (const ParametersMap &parameters)
 Updates grid settings from Grid/ entries in parameters.
 
float getCellSize () const
 
bool isGridFromDepth () const
 
bool isMapFrameProjection () const
 
template<typename PointT >
pcl::PointCloud< PointT >::Ptr segmentCloud (const typename pcl::PointCloud< PointT >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &pose, const cv::Point3f &viewPoint, pcl::IndicesPtr &groundIndices, pcl::IndicesPtr &obstaclesIndices, pcl::IndicesPtr *flatObstacles=0) const
 Segments a point cloud into ground and obstacle indices.
 
void createLocalMap (const Signature &node, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPoint)
 Creates a local grid from a Signature's laser scan or depth data.
 
void createLocalMap (const LaserScan &cloud, const Transform &pose, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPointInOut) const
 Creates a local grid from a 3D (or organized) LaserScan.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

ParametersMap parameters_
 
unsigned int cloudDecimation_
 
float rangeMax_
 
float rangeMin_
 
std::vector< float > roiRatios_
 
float footprintLength_
 
float footprintWidth_
 
float footprintHeight_
 
int scanDecimation_
 
float cellSize_
 
bool preVoxelFiltering_
 
int occupancySensor_
 
bool projMapFrame_
 
float maxObstacleHeight_
 
int normalKSearch_
 
float groundNormalsUp_
 
float maxGroundAngle_
 
float clusterRadius_
 
int minClusterSize_
 
bool flatObstaclesDetected_
 
float minGroundHeight_
 
float maxGroundHeight_
 
bool normalsSegmentation_
 
bool grid3D_
 
bool groundIsObstacle_
 
float noiseFilteringRadius_
 
int noiseFilteringMinNeighbors_
 
bool scan2dUnknownSpaceFilled_
 
bool rayTracing_
 
+

Detailed Description

+

Builds per-node local occupancy grids from laser scans or depth clouds.

+

Configured via Grid/ parameters (parseParameters()). Used by Memory to populate LocalGrid cells (ground / obstacles / empty) stored on SensorData and cached in LocalGridCache for global maps (OccupancyGrid, OctoMap, GridMap).

+

Sensor source (Grid/Sensor, isGridFromDepth()):

    +
  • 0 — laser scan only
  • +
  • 1 — depth image(s) only (default)
  • +
  • 2 — laser scan and depth
  • +
+

2D laser path: projects a 2D LaserScan with util3d::occupancy2DFromLaserScan().

+

3D path: segments the scan/cloud into ground and obstacles (segmentCloud()), then outputs LocalGrid cell matrices (2D projection or 3D cells per Grid/3D).

+
See also
LocalGrid
+
+Memory
+ +

Definition at line 64 of file LocalGridMaker.h.

+

Member Function Documentation

+ +

◆ getCellSize()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::LocalGridMaker::getCellSize () const
+
+inline
+
+
Returns
Current Grid/CellSize (m).
+ +

Definition at line 75 of file LocalGridMaker.h.

+ +
+
+ +

◆ isGridFromDepth()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LocalGridMaker::isGridFromDepth () const
+
+inline
+
+
Returns
True if occupancy is built from depth (Grid/Sensor is 1 or 2).
+ +

Definition at line 77 of file LocalGridMaker.h.

+ +
+
+ +

◆ isMapFrameProjection()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::LocalGridMaker::isMapFrameProjection () const
+
+inline
+
+
Returns
True if Grid/MapFrameProjection is enabled.
+ +

Definition at line 79 of file LocalGridMaker.h.

+ +
+
+ +

◆ segmentCloud()

+ +
+
+
+template<typename PointT >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
pcl::PointCloud< PointT >::Ptr rtabmap::LocalGridMaker::segmentCloud (const typename pcl::PointCloud< PointT >::Ptr & cloud,
const pcl::IndicesPtr & indices,
const Transform & pose,
const cv::Point3f & viewPoint,
pcl::IndicesPtr & groundIndices,
pcl::IndicesPtr & obstaclesIndices,
pcl::IndicesPtr * flatObstacles = 0 
) const
+
+ +

Segments a point cloud into ground and obstacle indices.

+

Applies optional voxel filtering (Grid/PreVoxelFiltering, leaf size Grid/CellSize), footprint crop, height filtering, then either normal-based ground segmentation (Grid/NormalsSegmentation) or Z passthrough.

+
Parameters
+ + + + + + + + +
cloudInput cloud (sensor frame, transformed internally using pose). Must be non-null; an empty cloud is allowed and returns empty outputs.
indicesSubset of cloud to process (must be non-null; empty = all points when the cloud is dense).
poseNode pose (used for map-frame projection and footprint).
viewPointSensor origin for segmentation / ray tracing.
groundIndicesOutput indices of ground points.
obstaclesIndicesOutput indices of obstacle points.
flatObstaclesOptional output for flat obstacle clusters.
+
+
+
Returns
Segmented cloud (voxel-downsampled when Grid/PreVoxelFiltering is true, using Grid/CellSize).
+ +

Definition at line 38 of file LocalMapMaker.hpp.

+ +
+
+ +

◆ createLocalMap() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::LocalGridMaker::createLocalMap (const Signature & node,
cv::Mat & groundCells,
cv::Mat & obstacleCells,
cv::Mat & emptyCells,
cv::Point3f & viewPoint 
)
+
+ +

Creates a local grid from a Signature's laser scan or depth data.

+
Parameters
+ + + + + + +
nodeSignature with sensor data (pose used for 3D scans).
groundCellsOutput ground cells (LocalGrid format).
obstacleCellsOutput obstacle cells.
emptyCellsOutput empty/free cells. Behavior depends on the sensor path:
    +
  • 2D laser, laser-only mode (Grid/Sensor=0 and a 2D LaserScan): uses util3d::occupancy2DFromLaserScan() / util3d::create2DMap(). Free space along each hit beam is always ray-traced (sensor → obstacle). Grid/Scan2dUnknownSpaceFilled is separate: when true, it additionally sweeps unknown angular gaps between the first and last hit (sparse FOV / “holes” in coverage) out to Grid/RangeMax or scan max range.
  • +
  • Other cases (3D scan, depth, Grid/Sensor=2, etc.): see createLocalMap(const LaserScan&,...).
  • +
+
viewPointOutput view point used for the grid.
+
+
+ +
+
+ +

◆ createLocalMap() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::LocalGridMaker::createLocalMap (const LaserScan & cloud,
const Transform & pose,
cv::Mat & groundCells,
cv::Mat & obstacleCells,
cv::Mat & emptyCells,
cv::Point3f & viewPointInOut 
) const
+
+ +

Creates a local grid from a 3D (or organized) LaserScan.

+
Parameters
+ + + + + + + +
cloudInput scan in sensor frame.
poseNode pose in map/odom frame.
groundCellsOutput ground cells.
obstacleCellsOutput obstacle cells.
emptyCellsOutput empty/free cells. Filled when Grid/RayTracing is true: 3D via OctoMap if Grid/3D and OctoMap support are enabled (Grid/RangeMax, Grid/CellSize); otherwise 2D ray fill via occupancy2DFromLaserScan when Grid/3D is false (Grid/RangeMax, Grid/CellSize).
viewPointInOutView point (may be rotated if isMapFrameProjection()).
+
+
+ +
+
+

Member Data Documentation

+ +

◆ parameters_

+ +
+
+ + + + + +
+ + + + +
ParametersMap rtabmap::LocalGridMaker::parameters_
+
+protected
+
+ +

Definition at line 152 of file LocalGridMaker.h.

+ +
+
+ +

◆ cloudDecimation_

+ +
+
+ + + + + +
+ + + + +
unsigned int rtabmap::LocalGridMaker::cloudDecimation_
+
+protected
+
+ +

Definition at line 154 of file LocalGridMaker.h.

+ +
+
+ +

◆ rangeMax_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::rangeMax_
+
+protected
+
+ +

Definition at line 155 of file LocalGridMaker.h.

+ +
+
+ +

◆ rangeMin_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::rangeMin_
+
+protected
+
+ +

Definition at line 156 of file LocalGridMaker.h.

+ +
+
+ +

◆ roiRatios_

+ +
+
+ + + + + +
+ + + + +
std::vector<float> rtabmap::LocalGridMaker::roiRatios_
+
+protected
+
+ +

Definition at line 157 of file LocalGridMaker.h.

+ +
+
+ +

◆ footprintLength_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::footprintLength_
+
+protected
+
+ +

Definition at line 158 of file LocalGridMaker.h.

+ +
+
+ +

◆ footprintWidth_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::footprintWidth_
+
+protected
+
+ +

Definition at line 159 of file LocalGridMaker.h.

+ +
+
+ +

◆ footprintHeight_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::footprintHeight_
+
+protected
+
+ +

Definition at line 160 of file LocalGridMaker.h.

+ +
+
+ +

◆ scanDecimation_

+ +
+
+ + + + + +
+ + + + +
int rtabmap::LocalGridMaker::scanDecimation_
+
+protected
+
+ +

Definition at line 161 of file LocalGridMaker.h.

+ +
+
+ +

◆ cellSize_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::cellSize_
+
+protected
+
+ +

Definition at line 162 of file LocalGridMaker.h.

+ +
+
+ +

◆ preVoxelFiltering_

+ +
+
+ + + + + +
+ + + + +
bool rtabmap::LocalGridMaker::preVoxelFiltering_
+
+protected
+
+ +

Definition at line 163 of file LocalGridMaker.h.

+ +
+
+ +

◆ occupancySensor_

+ +
+
+ + + + + +
+ + + + +
int rtabmap::LocalGridMaker::occupancySensor_
+
+protected
+
+ +

Definition at line 164 of file LocalGridMaker.h.

+ +
+
+ +

◆ projMapFrame_

+ +
+
+ + + + + +
+ + + + +
bool rtabmap::LocalGridMaker::projMapFrame_
+
+protected
+
+ +

Definition at line 165 of file LocalGridMaker.h.

+ +
+
+ +

◆ maxObstacleHeight_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::maxObstacleHeight_
+
+protected
+
+ +

Definition at line 166 of file LocalGridMaker.h.

+ +
+
+ +

◆ normalKSearch_

+ +
+
+ + + + + +
+ + + + +
int rtabmap::LocalGridMaker::normalKSearch_
+
+protected
+
+ +

Definition at line 167 of file LocalGridMaker.h.

+ +
+
+ +

◆ groundNormalsUp_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::groundNormalsUp_
+
+protected
+
+ +

Definition at line 168 of file LocalGridMaker.h.

+ +
+
+ +

◆ maxGroundAngle_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::maxGroundAngle_
+
+protected
+
+ +

Definition at line 169 of file LocalGridMaker.h.

+ +
+
+ +

◆ clusterRadius_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::clusterRadius_
+
+protected
+
+ +

Definition at line 170 of file LocalGridMaker.h.

+ +
+
+ +

◆ minClusterSize_

+ +
+
+ + + + + +
+ + + + +
int rtabmap::LocalGridMaker::minClusterSize_
+
+protected
+
+ +

Definition at line 171 of file LocalGridMaker.h.

+ +
+
+ +

◆ flatObstaclesDetected_

+ +
+
+ + + + + +
+ + + + +
bool rtabmap::LocalGridMaker::flatObstaclesDetected_
+
+protected
+
+ +

Definition at line 172 of file LocalGridMaker.h.

+ +
+
+ +

◆ minGroundHeight_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::minGroundHeight_
+
+protected
+
+ +

Definition at line 173 of file LocalGridMaker.h.

+ +
+
+ +

◆ maxGroundHeight_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::maxGroundHeight_
+
+protected
+
+ +

Definition at line 174 of file LocalGridMaker.h.

+ +
+
+ +

◆ normalsSegmentation_

+ +
+
+ + + + + +
+ + + + +
bool rtabmap::LocalGridMaker::normalsSegmentation_
+
+protected
+
+ +

Definition at line 175 of file LocalGridMaker.h.

+ +
+
+ +

◆ grid3D_

+ +
+
+ + + + + +
+ + + + +
bool rtabmap::LocalGridMaker::grid3D_
+
+protected
+
+ +

Definition at line 176 of file LocalGridMaker.h.

+ +
+
+ +

◆ groundIsObstacle_

+ +
+
+ + + + + +
+ + + + +
bool rtabmap::LocalGridMaker::groundIsObstacle_
+
+protected
+
+ +

Definition at line 177 of file LocalGridMaker.h.

+ +
+
+ +

◆ noiseFilteringRadius_

+ +
+
+ + + + + +
+ + + + +
float rtabmap::LocalGridMaker::noiseFilteringRadius_
+
+protected
+
+ +

Definition at line 178 of file LocalGridMaker.h.

+ +
+
+ +

◆ noiseFilteringMinNeighbors_

+ +
+
+ + + + + +
+ + + + +
int rtabmap::LocalGridMaker::noiseFilteringMinNeighbors_
+
+protected
+
+ +

Definition at line 179 of file LocalGridMaker.h.

+ +
+
+ +

◆ scan2dUnknownSpaceFilled_

+ +
+
+ + + + + +
+ + + + +
bool rtabmap::LocalGridMaker::scan2dUnknownSpaceFilled_
+
+protected
+
+ +

Definition at line 180 of file LocalGridMaker.h.

+ +
+
+ +

◆ rayTracing_

+ +
+
+ + + + + +
+ + + + +
bool rtabmap::LocalGridMaker::rayTracing_
+
+protected
+
+ +

Definition at line 181 of file LocalGridMaker.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1MarkerDetector-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1MarkerDetector-members.html new file mode 100644 index 00000000..514a9cea --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1MarkerDetector-members.html @@ -0,0 +1,100 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::MarkerDetector Member List
+
+
+ +

This is the complete list of members for rtabmap::MarkerDetector, including all inherited members.

+ + + + + + + + + +
detect(const cv::Mat &image, const std::vector< CameraModel > &models, const cv::Mat &depth=cv::Mat(), const std::map< int, float > &markerLengths=std::map< int, float >(), cv::Mat *imageWithDetections=0) (defined in rtabmap::MarkerDetector)rtabmap::MarkerDetector
detect(const cv::Mat &image, const CameraModel &model, const cv::Mat &depth=cv::Mat(), const std::map< int, float > &markerLengths=std::map< int, float >(), cv::Mat *imageWithDetections=0) (defined in rtabmap::MarkerDetector)rtabmap::MarkerDetector
kStrategyApriltag enum value (defined in rtabmap::MarkerDetector)rtabmap::MarkerDetector
kStrategyOpencv enum value (defined in rtabmap::MarkerDetector)rtabmap::MarkerDetector
MarkerDetector(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::MarkerDetector)rtabmap::MarkerDetector
parseParameters(const ParametersMap &parameters) (defined in rtabmap::MarkerDetector)rtabmap::MarkerDetector
Strategy enum name (defined in rtabmap::MarkerDetector)rtabmap::MarkerDetector
~MarkerDetector() (defined in rtabmap::MarkerDetector)rtabmap::MarkerDetectorvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1MarkerDetector.html b/preview/pr-1492/api/latest/classrtabmap_1_1MarkerDetector.html new file mode 100644 index 00000000..da0b4693 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1MarkerDetector.html @@ -0,0 +1,139 @@ + + + + + + + + +RTAB-Map: rtabmap::MarkerDetector Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::MarkerDetector Class Reference
+
+
+ + + + +

+Public Types

enum  Strategy { kStrategyOpencv +, kStrategyApriltag + }
 
+ + + + + + + + + +

+Public Member Functions

+ MarkerDetector (const ParametersMap &parameters=ParametersMap())
 
+void parseParameters (const ParametersMap &parameters)
 
+std::map< int, MarkerInfo > detect (const cv::Mat &image, const std::vector< CameraModel > &models, const cv::Mat &depth=cv::Mat(), const std::map< int, float > &markerLengths=std::map< int, float >(), cv::Mat *imageWithDetections=0)
 
+std::map< int, MarkerInfo > detect (const cv::Mat &image, const CameraModel &model, const cv::Mat &depth=cv::Mat(), const std::map< int, float > &markerLengths=std::map< int, float >(), cv::Mat *imageWithDetections=0)
 
+

Detailed Description

+
+

Definition at line 59 of file MarkerDetector.h.

+

Member Enumeration Documentation

+ +

◆ Strategy

+ +
+
+ + + + +
enum rtabmap::MarkerDetector::Strategy
+
+ +

Definition at line 62 of file MarkerDetector.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1MarkerInfo-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1MarkerInfo-members.html new file mode 100644 index 00000000..45e770cb --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1MarkerInfo-members.html @@ -0,0 +1,96 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::MarkerInfo Member List
+
+
+ +

This is the complete list of members for rtabmap::MarkerInfo, including all inherited members.

+ + + + + +
id() const (defined in rtabmap::MarkerInfo)rtabmap::MarkerInfoinline
length() const (defined in rtabmap::MarkerInfo)rtabmap::MarkerInfoinline
MarkerInfo(int id, float length, Transform pose) (defined in rtabmap::MarkerInfo)rtabmap::MarkerInfoinline
pose() const (defined in rtabmap::MarkerInfo)rtabmap::MarkerInfoinline
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1MarkerInfo.html b/preview/pr-1492/api/latest/classrtabmap_1_1MarkerInfo.html new file mode 100644 index 00000000..d272901e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1MarkerInfo.html @@ -0,0 +1,237 @@ + + + + + + + + +RTAB-Map: rtabmap::MarkerInfo Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::MarkerInfo Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

 MarkerInfo (int id, float length, Transform pose)
 
int id () const
 
float length () const
 
const Transform & pose () const
 
+

Detailed Description

+
+

Definition at line 43 of file MarkerDetector.h.

+

Constructor & Destructor Documentation

+ +

◆ MarkerInfo()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::MarkerInfo::MarkerInfo (int id,
float length,
Transform pose 
)
+
+inline
+
+ +

Definition at line 45 of file MarkerDetector.h.

+ +
+
+

Member Function Documentation

+ +

◆ id()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::MarkerInfo::id () const
+
+inline
+
+ +

Definition at line 50 of file MarkerDetector.h.

+ +
+
+ +

◆ length()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::MarkerInfo::length () const
+
+inline
+
+ +

Definition at line 51 of file MarkerDetector.h.

+ +
+
+ +

◆ pose()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::MarkerInfo::pose () const
+
+inline
+
+ +

Definition at line 52 of file MarkerDetector.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Memory-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Memory-members.html new file mode 100644 index 00000000..b554d0fe --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Memory-members.html @@ -0,0 +1,198 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Memory Member List
+
+
+ +

This is the complete list of members for rtabmap::Memory, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_dbDriverrtabmap::Memoryprotected
addLink(const Link &link, bool addInDatabase=false)rtabmap::Memory
allNodesInWM() constrtabmap::Memoryinline
cleanup()rtabmap::Memory
cleanupLocalGrids(const std::map< int, Transform > &poses, const cv::Mat &map, float xMin, float yMin, float cellSize, int cropRadius=1, bool filterScans=false)rtabmap::Memory
close(bool databaseSaved=true, bool postInitClosingEvents=false, const std::string &ouputDatabasePath="")rtabmap::Memory
computeIcpTransform(const Signature &fromS, const Signature &toS, Transform guess, RegistrationInfo *info=0) constrtabmap::Memory
computeIcpTransformMulti(int newId, int oldId, const std::map< int, Transform > &poses, RegistrationInfo *info=0)rtabmap::Memory
computeLikelihood(const Signature *signature, const std::list< int > &ids)rtabmap::Memory
computeTransform(Signature &fromS, Signature &toS, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false) constrtabmap::Memory
computeTransform(int fromId, int toId, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false)rtabmap::Memory
convertToIntermediate(int locationId)rtabmap::Memory
deleteLocation(int locationId, std::list< int > *deletedWords=0, bool keepLinkedInDb=false)rtabmap::Memory
dumpDictionary(const char *fileNameRef, const char *fileNameDesc) constrtabmap::Memory
dumpMemory(std::string directory) constrtabmap::Memoryvirtual
dumpMemoryTree(const char *fileNameTree) constrtabmap::Memory
dumpSignatures(const char *fileNameSign, bool words3D) constrtabmap::Memoryvirtual
emptyTrash()rtabmap::Memory
forget(const std::set< int > &ignoredIds=std::set< int >())rtabmap::Memory
generateGraph(const std::string &fileName, const std::set< int > &ids=std::set< int >())rtabmap::Memory
getAllLabels() constrtabmap::Memoryinline
getAllLinks(bool lookInDatabase, bool ignoreNullLinks=true, bool withLandmarks=false) constrtabmap::Memory
getAllSignatureIds(bool ignoreChildren=true) constrtabmap::Memory
getDatabaseMemoryUsed() constrtabmap::Memory
getDatabaseUrl() constrtabmap::Memory
getDatabaseVersion() constrtabmap::Memory
getDbSavingTime() constrtabmap::Memory
getFeature2D() constrtabmap::Memoryinline
getGPS(int id, GPS &gps, Transform &offsetENU, bool lookInDatabase, int maxGraphDepth=0) constrtabmap::Memory
getGroundTruthPose(int signatureId, bool lookInDatabase=false) constrtabmap::Memory
getGroundTruths() constrtabmap::Memoryinline
getImageCompressed(int signatureId) constrtabmap::Memory
getLandmarksIndex() constrtabmap::Memoryinline
getLastGlobalLoopClosureId() constrtabmap::Memoryinline
getLastSignatureId() constrtabmap::Memory
getLastWorkingSignature(bool ignoreIntermediateNodes) constrtabmap::Memory
getLinks(int signatureId, bool lookInDatabase=false, bool withLandmarks=false) constrtabmap::Memory
getLoopClosureLinks(int signatureId, bool lookInDatabase=false) constrtabmap::Memory
getMapId(int id, bool lookInDatabase=false) constrtabmap::Memory
getMaxStMemSize() constrtabmap::Memoryinline
getMemoryUsed() constrtabmap::Memory
getMetricConstraints(const std::set< int > &ids, std::map< int, Transform > &poses, std::multimap< int, Link > &links, bool lookInDatabase=false, bool landmarksAdded=false)rtabmap::Memory
getNeighborLinks(int signatureId, bool lookInDatabase=false) constrtabmap::Memory
getNeighborsId(int signatureId, int maxGraphDepth, int maxCheckedInDatabase=-1, bool incrementMarginOnLoop=false, bool ignoreLoopIds=false, bool ignoreIntermediateNodes=false, bool ignoreLocalSpaceLoopIds=false, const std::set< int > &nodesSet=std::set< int >(), double *dbAccessTime=0) constrtabmap::Memory
getNeighborsIdRadius(int signatureId, float radius, const std::map< int, Transform > &optimizedPoses, int maxGraphDepth) constrtabmap::Memory
getNodeCalibration(int nodeId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) constrtabmap::Memory
getNodeData(int locationId, bool images, bool scan, bool userData, bool occupancyGrid) constrtabmap::Memory
getNodeInfo(int signatureId, Transform &odomPose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruth, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors, bool lookInDatabase=false) constrtabmap::Memory
getNodesObservingLandmark(int landmarkId, bool lookInDatabase) constrtabmap::Memory
getNodeWordsAndGlobalDescriptors(int nodeId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &wordsKpts, std::vector< cv::Point3f > &words3, cv::Mat &wordsDescriptors, std::vector< GlobalDescriptor > &globalDescriptors) constrtabmap::Memory
getOdomMaxInf() constrtabmap::Memoryinline
getOdomPose(int signatureId, bool lookInDatabase=false) constrtabmap::Memory
getParameters() constrtabmap::Memoryinlinevirtual
getSignature(int id) constrtabmap::Memory
getSignatureIdByLabel(const std::string &label, bool lookInDatabase=true) constrtabmap::Memory
getSimilarityThreshold() constrtabmap::Memoryinline
getStMem() constrtabmap::Memoryinline
getStMemIntermediateNodesCount() constrtabmap::Memoryinline
getVWDictionary() constrtabmap::Memory
getWeights() constrtabmap::Memory
getWorkingMem() constrtabmap::Memoryinline
getWorkingMemIntermediateNodesCount() constrtabmap::Memoryinline
getWorkingMemSize(bool ignoreIntermediateNodes=false) constrtabmap::Memory
incrementMapId(std::map< int, int > *reducedIds=0)rtabmap::Memory
init(const std::string &dbUrl, bool dbOverwritten=false, const ParametersMap &parameters=ParametersMap(), bool postInitClosingEvents=false)rtabmap::Memory
isBinDataKept() constrtabmap::Memoryinline
isGraphReduced() constrtabmap::Memoryinline
isIDsGenerated() constrtabmap::Memoryinline
isIncremental() constrtabmap::Memoryinline
isInLTM(int signatureId) constrtabmap::Memoryinline
isInSTM(int signatureId) constrtabmap::Memoryinline
isInWM(int signatureId) constrtabmap::Memoryinline
isLocalizationDataSaved() constrtabmap::Memoryinline
isOdomGravityUsed() constrtabmap::Memoryinline
isReadOnly() constrtabmap::Memoryinline
joinTrashThread()rtabmap::Memory
kIdInvalidrtabmap::Memorystatic
kIdStartrtabmap::Memorystatic
kIdVirtualrtabmap::Memorystatic
labelSignature(int id, const std::string &label)rtabmap::Memory
load2DMap(float &xMin, float &yMin, float &cellSize) constrtabmap::Memory
loadOptimizedMesh(std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons=0, std::vector< std::vector< Eigen::Vector2f > > *texCoords=0, cv::Mat *textures=0) constrtabmap::Memory
loadOptimizedPoses(Transform *lastlocalizationPose) constrtabmap::Memory
loadPreviewImage() constrtabmap::Memory
Memory(const ParametersMap &parameters=ParametersMap())rtabmap::Memory
memoryChanged() constrtabmap::Memoryinline
parseParameters(const ParametersMap &parameters)rtabmap::Memoryvirtual
reactivateSignatures(const std::list< int > &ids, unsigned int maxLoaded, double &timeDbAccess)rtabmap::Memory
reduceNode(int id, float maxDistance=0.0f, bool keepLinkedInDb=false, int direction=0)rtabmap::Memory
removeAllVirtualLinks()rtabmap::Memory
removeLink(int idA, int idB)rtabmap::Memory
removeRawData(int id, bool image=true, bool scan=true, bool userData=true, bool occupancyGrid=true)rtabmap::Memory
removeVirtualLinks(int signatureId)rtabmap::Memory
save2DMap(const cv::Mat &map, float xMin, float yMin, float cellSize) constrtabmap::Memory
saveLocationData(int locationId)rtabmap::Memory
saveOptimizedMesh(const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) constrtabmap::Memory
saveOptimizedPoses(const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) constrtabmap::Memory
savePreviewImage(const cv::Mat &image) constrtabmap::Memory
saveStatistics(const Statistics &statistics, bool saveWMState)rtabmap::Memory
setDummyDictionary(bool enabled)rtabmap::Memory
setUserData(int id, const cv::Mat &data)rtabmap::Memory
update(const SensorData &data, Statistics *stats=0)rtabmap::Memory
update(const SensorData &data, const Transform &pose, const cv::Mat &covariance, const std::vector< float > &velocity=std::vector< float >(), Statistics *stats=0)rtabmap::Memory
updateAge(int signatureId)rtabmap::Memory
updateLink(const Link &link, bool updateInDatabase=false)rtabmap::Memory
~Memory() (defined in rtabmap::Memory)rtabmap::Memoryvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Memory.html b/preview/pr-1492/api/latest/classrtabmap_1_1Memory.html new file mode 100644 index 00000000..115fe62c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Memory.html @@ -0,0 +1,3109 @@ + + + + + + + + +RTAB-Map: rtabmap::Memory Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Three-tiered memory management (STM, WM, LTM) for RTAB-Map. + More...

+ +

#include <Memory.h>

+
+Collaboration diagram for rtabmap::Memory:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Memory (const ParametersMap &parameters=ParametersMap())
 Constructs a Memory instance with the given parameters.
 
virtual void parseParameters (const ParametersMap &parameters)
 Re-parses parameters and propagates them to owned sub-objects.
 
virtual const ParametersMap & getParameters () const
 
bool update (const SensorData &data, Statistics *stats=0)
 Adds a sensor observation to the map (overload without odometry pose).
 
bool update (const SensorData &data, const Transform &pose, const cv::Mat &covariance, const std::vector< float > &velocity=std::vector< float >(), Statistics *stats=0)
 Adds a sensor observation with odometry pose and velocity to the map.
 
bool init (const std::string &dbUrl, bool dbOverwritten=false, const ParametersMap &parameters=ParametersMap(), bool postInitClosingEvents=false)
 Opens or creates a database and loads existing state into WM.
 
void close (bool databaseSaved=true, bool postInitClosingEvents=false, const std::string &ouputDatabasePath="")
 Flushes pending data and closes the database connection.
 
std::map< int, float > computeLikelihood (const Signature *signature, const std::list< int > &ids)
 Computes loop-closure likelihood of signature against a set of WM ids.
 
int incrementMapId (std::map< int, int > *reducedIds=0)
 Starts a new map id, breaking session continuity (e.g. after localization loss).
 
void updateAge (int signatureId)
 Refreshes the age of signatureId in working memory, marking it as recent.
 
std::list< int > forget (const std::set< int > &ignoredIds=std::set< int >())
 Transfers oldest signatures from WM to LTM to respect memory and/or time limits.
 
std::set< int > reactivateSignatures (const std::list< int > &ids, unsigned int maxLoaded, double &timeDbAccess)
 Reloads signatures from LTM into WM.
 
int cleanup ()
 Drops the last signature if flagged as bad, or any signature in localization mode.
 
+void saveStatistics (const Statistics &statistics, bool saveWMState)
 Persists statistics to the database; saveWMState records the WM id list.
 
+void savePreviewImage (const cv::Mat &image) const
 Stores a preview image (typically a thumbnail of the last frame) in the database.
 
+cv::Mat loadPreviewImage () const
 Loads the preview image previously written by savePreviewImage().
 
+void saveOptimizedPoses (const std::map< int, Transform > &optimizedPoses, const Transform &lastlocalizationPose) const
 Persists an optimized pose graph and the last localization pose for next session.
 
+std::map< int, Transform > loadOptimizedPoses (Transform *lastlocalizationPose) const
 Loads optimized poses previously written by saveOptimizedPoses().
 
+void save2DMap (const cv::Mat &map, float xMin, float yMin, float cellSize) const
 Persists a 2D occupancy grid (origin xMin, yMin and resolution cellSize).
 
+cv::Mat load2DMap (float &xMin, float &yMin, float &cellSize) const
 Loads the 2D occupancy grid previously written by save2DMap().
 
void saveOptimizedMesh (const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) const
 Persists an optimized textured/colored mesh to the database.
 
+cv::Mat loadOptimizedMesh (std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > *polygons=0, std::vector< std::vector< Eigen::Vector2f > > *texCoords=0, cv::Mat *textures=0) const
 Loads the optimized mesh previously written by saveOptimizedMesh().
 
+void emptyTrash ()
 Forces the database driver to flush any queued signature/word saves.
 
+void joinTrashThread ()
 Blocks until the asynchronous database write thread has finished pending work.
 
bool addLink (const Link &link, bool addInDatabase=false)
 Adds a graph link between two signatures.
 
+void updateLink (const Link &link, bool updateInDatabase=false)
 Replaces an existing link with link (same endpoints and type).
 
+void removeAllVirtualLinks ()
 Removes every virtual link in WM.
 
+void removeVirtualLinks (int signatureId)
 Removes virtual links attached to signatureId.
 
std::map< int, int > getNeighborsId (int signatureId, int maxGraphDepth, int maxCheckedInDatabase=-1, bool incrementMarginOnLoop=false, bool ignoreLoopIds=false, bool ignoreIntermediateNodes=false, bool ignoreLocalSpaceLoopIds=false, const std::set< int > &nodesSet=std::set< int >(), double *dbAccessTime=0) const
 Breadth-first walk of the pose graph from signatureId.
 
std::map< int, float > getNeighborsIdRadius (int signatureId, float radius, const std::map< int, Transform > &optimizedPoses, int maxGraphDepth) const
 Returns neighbor ids within a Euclidean radius using optimized poses.
 
+void convertToIntermediate (int locationId)
 Marks locationId as intermediate (weight = -1); excludes it from loop closure.
 
void deleteLocation (int locationId, std::list< int > *deletedWords=0, bool keepLinkedInDb=false)
 Removes locationId from WM/STM and the database.
 
+void saveLocationData (int locationId)
 Forces locationId to be flushed to the database.
 
+void removeLink (int idA, int idB)
 Removes any link between idA and idB (both directions).
 
+void removeRawData (int id, bool image=true, bool scan=true, bool userData=true, bool occupancyGrid=true)
 Strips raw images, scan, user data and/or occupancy grid from id to save memory (RAM). This doesn't clear any compressed data.
 
int reduceNode (int id, float maxDistance=0.0f, bool keepLinkedInDb=false, int direction=0)
 Merges id with a close neighbor (graph reduction).
 
void setDummyDictionary (bool enabled)
 Enables a dummy visual word dictionary (no descriptors kept, word ids only).
 
const std::map< int, double > & getWorkingMem () const
 
size_t getWorkingMemSize (bool ignoreIntermediateNodes=false) const
 Returns the number of signatures in working memory, excluding the virtual place.
 
int getWorkingMemIntermediateNodesCount () const
 
int getStMemIntermediateNodesCount () const
 
const std::set< int > & getStMem () const
 
int getMaxStMemSize () const
 
+std::multimap< int, Link > getNeighborLinks (int signatureId, bool lookInDatabase=false) const
 Returns neighbor (sequential) links of signatureId; lookInDatabase also checks LTM.
 
+std::multimap< int, Link > getLoopClosureLinks (int signatureId, bool lookInDatabase=false) const
 Returns loop-closure links of signatureId; lookInDatabase also checks LTM.
 
std::multimap< int, Link > getLinks (int signatureId, bool lookInDatabase=false, bool withLandmarks=false) const
 Returns all links of signatureId (neighbor, loop, prior, gravity, ...).
 
+std::multimap< int, Link > getAllLinks (bool lookInDatabase, bool ignoreNullLinks=true, bool withLandmarks=false) const
 Returns links of every signature; ignoreNullLinks drops empty placeholders.
 
bool isBinDataKept () const
 
float getSimilarityThreshold () const
 
std::map< int, int > getWeights () const
 
int getLastSignatureId () const
 
const Signature * getLastWorkingSignature (bool ignoreIntermediateNodes) const
 Returns the most recent WM signature.
 
+std::map< int, Link > getNodesObservingLandmark (int landmarkId, bool lookInDatabase) const
 Returns all nodes observing landmark landmarkId, mapped to the observation link.
 
int getSignatureIdByLabel (const std::string &label, bool lookInDatabase=true) const
 
bool labelSignature (int id, const std::string &label)
 Assigns or removes a label on id.
 
const std::map< int, std::string > & getAllLabels () const
 
const std::map< int, std::set< int > > & getLandmarksIndex () const
 
bool allNodesInWM () const
 
bool setUserData (int id, const cv::Mat &data)
 Attaches user data to signature id, compressing it on the fly if needed.
 
int getDatabaseMemoryUsed () const
 
std::string getDatabaseVersion () const
 
std::string getDatabaseUrl () const
 
double getDbSavingTime () const
 
int getMapId (int id, bool lookInDatabase=false) const
 
Transform getOdomPose (int signatureId, bool lookInDatabase=false) const
 
Transform getGroundTruthPose (int signatureId, bool lookInDatabase=false) const
 
const std::map< int, Transform > & getGroundTruths () const
 
void getGPS (int id, GPS &gps, Transform &offsetENU, bool lookInDatabase, int maxGraphDepth=0) const
 Returns a GPS fix for id, falling back to the nearest GPS-tagged neighbor.
 
bool getNodeInfo (int signatureId, Transform &odomPose, int &mapId, int &weight, std::string &label, double &stamp, Transform &groundTruth, std::vector< float > &velocity, GPS &gps, EnvSensors &sensors, bool lookInDatabase=false) const
 Reads metadata of signatureId (no images/scan/words).
 
cv::Mat getImageCompressed (int signatureId) const
 
SensorData getNodeData (int locationId, bool images, bool scan, bool userData, bool occupancyGrid) const
 Loads sensor data of locationId from WM or LTM.
 
+void getNodeWordsAndGlobalDescriptors (int nodeId, std::multimap< int, int > &words, std::vector< cv::KeyPoint > &wordsKpts, std::vector< cv::Point3f > &words3, cv::Mat &wordsDescriptors, std::vector< GlobalDescriptor > &globalDescriptors) const
 Loads the visual words, 3D points and global descriptors stored with nodeId.
 
+void getNodeCalibration (int nodeId, std::vector< CameraModel > &models, std::vector< StereoCameraModel > &stereoModels) const
 Loads mono and/or stereo camera calibration stored with nodeId.
 
std::set< int > getAllSignatureIds (bool ignoreChildren=true) const
 Returns all signature ids in WM, STM and LTM.
 
bool memoryChanged () const
 Reports whether the in-memory map has been modified since the database was last loaded or reset. close() uses this flag to decide whether the database needs to be rewritten.
 
bool isIncremental () const
 
bool isReadOnly () const
 
bool isLocalizationDataSaved () const
 
const Signature * getSignature (int id) const
 
bool isInSTM (int signatureId) const
 
bool isInWM (int signatureId) const
 
bool isInLTM (int signatureId) const
 
bool isIDsGenerated () const
 
int getLastGlobalLoopClosureId () const
 
const Feature2D * getFeature2D () const
 
bool isGraphReduced () const
 
const std::vector< double > & getOdomMaxInf () const
 
bool isOdomGravityUsed () const
 
+void dumpMemoryTree (const char *fileNameTree) const
 Writes a human-readable dump of WM/STM, links and weights to fileNameTree.
 
+virtual void dumpMemory (std::string directory) const
 Dumps every internal map (signatures, words, dictionary) to text files in directory.
 
+virtual void dumpSignatures (const char *fileNameSign, bool words3D) const
 Dumps signatures' word ids (and 3D positions if words3D) to fileNameSign.
 
+void dumpDictionary (const char *fileNameRef, const char *fileNameDesc) const
 Dumps the visual word dictionary: references to fileNameRef, descriptors to fileNameDesc.
 
unsigned long getMemoryUsed () const
 
void generateGraph (const std::string &fileName, const std::set< int > &ids=std::set< int >())
 Writes a Graphviz DOT file of the pose graph.
 
int cleanupLocalGrids (const std::map< int, Transform > &poses, const cv::Mat &map, float xMin, float yMin, float cellSize, int cropRadius=1, bool filterScans=false)
 Removes spurious obstacle points from each node's local grid using a reference 2D map.
 
const VWDictionary * getVWDictionary () const
 
void getMetricConstraints (const std::set< int > &ids, std::map< int, Transform > &poses, std::multimap< int, Link > &links, bool lookInDatabase=false, bool landmarksAdded=false)
 Extracts a sub-graph (poses + links) for a set of node ids.
 
Transform computeTransform (Signature &fromS, Signature &toS, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false) const
 Computes the relative transform from fromS to toS using the registration pipeline.
 
+Transform computeTransform (int fromId, int toId, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false)
 Convenience overload: loads signatures by id and forwards to the Signature variant.
 
Transform computeIcpTransform (const Signature &fromS, const Signature &toS, Transform guess, RegistrationInfo *info=0) const
 Refines a transform using ICP alignment of laser scans only.
 
Transform computeIcpTransformMulti (int newId, int oldId, const std::map< int, Transform > &poses, RegistrationInfo *info=0)
 ICP registration of one node against an assembled cloud from multiple neighbors.
 
+ + + + + + + + + + +

+Static Public Attributes

static const int kIdStart
 First valid signature id assigned by getNextId() (positive integer).
 
static const int kIdVirtual
 Reserved id for the "virtual place" used by the Bayes filter (negative).
 
static const int kIdInvalid
 Sentinel value indicating an invalid signature id (zero).
 
+ + + + +

+Protected Attributes

DBDriver * _dbDriver
 Database driver owning the persistent storage (created by init()).
 
+

Detailed Description

+

Three-tiered memory management (STM, WM, LTM) for RTAB-Map.

+

Memory is the core map data structure used by Rtabmap. It stores observations as Signature nodes connected by Link edges and orchestrates their lifecycle across three tiers:

+
    +
  • Short-Term Memory (STM): most recently added signatures, kept at a fixed size (see Parameters::kMemSTMSize()). Used to delay recently observed places before they become candidates for loop closure.
  • +
  • Working Memory (WM): signatures available for loop-closure likelihood computation in the current iteration. Older signatures are transferred from WM to LTM by forget() to bound iteration time.
  • +
  • Long-Term Memory (LTM): persisted in the database via DBDriver. Signatures can be brought back to WM with reactivateSignatures() when their neighbors still in WM are good loop-closure candidates.
  • +
+

The class also owns a visual word dictionary (VWDictionary), feature extractor (Feature2D) and registration pipelines (Registration, RegistrationVis, RegistrationIcp) used to compute relative transforms between signatures.

+

Typical iteration: update() adds a new SensorData as a Signature in STM; computeLikelihood() scores it against WM; the Rtabmap caller decides on loop closures with BayesFilter; cleanup() drops bad signatures; forget() transfers oldest WM signatures to LTM and reactivateSignatures() pulls relevant ones back.

+
See also
Signature
+
+DBDriver
+
+VWDictionary
+
+Rtabmap
+ +

Definition at line 101 of file Memory.h.

+

Constructor & Destructor Documentation

+ +

◆ Memory()

+ +
+
+ + + + + + + + +
rtabmap::Memory::Memory (const ParametersMap & parameters = ParametersMap())
+
+ +

Constructs a Memory instance with the given parameters.

+

The database is not opened here; call init() to open or create a database and load persisted state. parameters may include any key from Parameters (memory, keypoint, registration, etc.); missing keys fall back to defaults.

+ +
+
+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::Memory::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Re-parses parameters and propagates them to owned sub-objects.

+

Forwards the relevant subset to VWDictionary, Feature2D, the registration pipelines and the database driver. Safe to call at runtime to change settings.

+ +
+
+ +

◆ getParameters()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const ParametersMap & rtabmap::Memory::getParameters () const
+
+inlinevirtual
+
+
Returns
The most recent parameter map applied via the constructor or parseParameters().
+ +

Definition at line 130 of file Memory.h.

+ +
+
+ +

◆ update() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::Memory::update (const SensorData & data,
Statistics * stats = 0 
)
+
+ +

Adds a sensor observation to the map (overload without odometry pose).

+

Equivalent to calling the full update() with an identity pose and empty covariance. The new signature is added to STM; oldest STM entries are promoted to WM as needed.

+
Parameters
+ + + +
dataSensor data (images, scan, user data, odometry features) for this frame.
statsOptional output statistics receiver for timing/diagnostic values.
+
+
+
Returns
True if a signature was successfully created and added, false otherwise.
+ +
+
+ +

◆ update() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool rtabmap::Memory::update (const SensorData & data,
const Transform & pose,
const cv::Mat & covariance,
const std::vector< float > & velocity = std::vector< float >(),
Statistics * stats = 0 
)
+
+ +

Adds a sensor observation with odometry pose and velocity to the map.

+

Creates a new Signature, extracts visual words, links it to the previous STM signature with a neighbor link, runs rehearsal against STM and promotes the oldest STM signature to WM if STM is full.

+
Parameters
+ + + + + + +
dataSensor data (images, scan, user data, odometry features).
poseOdometry pose at this frame (null if odometry not used).
covariance6x6 odometry covariance (or empty if null odometry is provided).
velocityOptional 6-vector (vx, vy, vz, vroll, vpitch, vyaw).
statsOptional output statistics receiver.
+
+
+
Returns
True on success, false if signature creation failed.
+ +
+
+ +

◆ init()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool rtabmap::Memory::init (const std::string & dbUrl,
bool dbOverwritten = false,
const ParametersMap & parameters = ParametersMap(),
bool postInitClosingEvents = false 
)
+
+ +

Opens or creates a database and loads existing state into WM.

+
Parameters
+ + + + + +
dbUrlPath to the database file (empty for in-memory).
dbOverwrittenIf true, deletes the existing file before opening.
parametersOptional parameter override applied before loading.
postInitClosingEventsIf true, posts RtabmapEventInit events for progress reporting (used by GUI).
+
+
+
Returns
True on success, false if the database could not be opened.
+ +
+
+ +

◆ close()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Memory::close (bool databaseSaved = true,
bool postInitClosingEvents = false,
const std::string & ouputDatabasePath = "" 
)
+
+ +

Flushes pending data and closes the database connection.

+
Parameters
+ + + + +
databaseSavedIf true, persists STM/WM signatures and statistics before closing. If false, in-memory state is discarded.
postInitClosingEventsIf true, posts progress events while closing.
ouputDatabasePathIf non-empty, the database is copied to this path on close. If a database on disk was initially created/loaded on a different path, it will be updated with latest changes and renamed to the output path.
+
+
+ +
+
+ +

◆ computeLikelihood()

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::map< int, float > rtabmap::Memory::computeLikelihood (const Signature * signature,
const std::list< int > & ids 
)
+
+ +

Computes loop-closure likelihood of signature against a set of WM ids.

+

Compares visual words (tf-idf if enabled) between signature and each id in ids and returns a normalized likelihood per id.

+
Parameters
+ + + +
signatureQuery signature (typically the last added one).
idsCandidate signature ids in working memory.
+
+
+
Returns
Map from id to likelihood score.
+ +
+
+ +

◆ incrementMapId()

+ +
+
+ + + + + + + + +
int rtabmap::Memory::incrementMapId (std::map< int, int > * reducedIds = 0)
+
+ +

Starts a new map id, breaking session continuity (e.g. after localization loss).

+
Parameters
+ + +
reducedIdsIf non-null, populated with id remappings produced by graph reduction triggered by the new map.
+
+
+
Returns
The new map id (auto-incremented).
+ +
+
+ +

◆ updateAge()

+ +
+
+ + + + + + + + +
void rtabmap::Memory::updateAge (int signatureId)
+
+ +

Refreshes the age of signatureId in working memory, marking it as recent.

+

Used to keep loop-closure hypotheses active so they are not transferred to LTM during the next forget() call.

+ +
+
+ +

◆ forget()

+ +
+
+ + + + + + + + +
std::list< int > rtabmap::Memory::forget (const std::set< int > & ignoredIds = std::set< int >())
+
+ +

Transfers oldest signatures from WM to LTM to respect memory and/or time limits.

+

Two regimes are used depending on the visual word dictionary state:

    +
  • Word-count regime: active only when mapping mode is on, the VWDictionary is in incremental mode, contains at least one word, and is not using incremental FLANN. In this regime, signatures are transferred until the number of visual words removed from the dictionary catches up with the number of new words indexed since the previous iteration.
  • +
  • Signature-count regime: used in every other case (localization mode, dictionary not incremental, dictionary still empty – e.g. lidar-only mapping or no feature extraction – or incremental FLANN, where the word count is no longer the bottleneck). In this regime, at least one more signature than the count added/retrieved in the previous iteration is transferred, regardless of words.
  • +
+

In both regimes, candidate selection (see getRemovableSignatures()) honors ignoredIds, skips intermediate nodes, and excludes WM nodes linked to STM (to preserve rehearsal). Intermediate (weight==-1) nodes linked to a transferred signature are dragged out with it.

+
Parameters
+ + +
ignoredIdsSignatures that must not be transferred (e.g. STM, retrieved ids, on the planned path).
+
+
+
Returns
Ids of signatures moved to LTM, in transfer order.
+ +
+
+ +

◆ reactivateSignatures()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::set< int > rtabmap::Memory::reactivateSignatures (const std::list< int > & ids,
unsigned int maxLoaded,
double & timeDbAccess 
)
+
+ +

Reloads signatures from LTM into WM.

+
Parameters
+ + + + +
idsCandidate ids; those already in WM/STM are ignored.
maxLoadedHard cap on number of ids actually loaded (0 = unlimited).
timeDbAccessOutput: time spent in the database driver (seconds).
+
+
+
Returns
Ids effectively brought back to WM.
+ +
+
+ +

◆ cleanup()

+ +
+
+ + + + + + + +
int rtabmap::Memory::cleanup ()
+
+ +

Drops the last signature if flagged as bad, or any signature in localization mode.

+
Returns
Id of the removed signature, or 0 if none was removed.
+ +
+
+ +

◆ saveOptimizedMesh()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Memory::saveOptimizedMesh (const cv::Mat & cloud,
const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > & polygons = std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(),
const std::vector< std::vector< Eigen::Vector2f > > & texCoords = std::vector< std::vector< Eigen::Vector2f > >(),
const cv::Mat & textures = cv::Mat() 
) const
+
+ +

Persists an optimized textured/colored mesh to the database.

+
Parameters
+ + + + + +
cloudPoint cloud (XYZRGB) of vertices.
polygonsPer-texture list of polygons; each polygon is a list of vertex indices.
texCoordsPer-texture list of UV coords matching polygons.
texturesConcatenated texture images (square, equal-sized).
+
+
+ +
+
+ +

◆ addLink()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::Memory::addLink (const Link & link,
bool addInDatabase = false 
)
+
+ +

Adds a graph link between two signatures.

+
Parameters
+ + + +
linkLink to add (type, transform, covariance).
addInDatabaseIf true, the link is also added when one of the ids is only in LTM.
+
+
+
Returns
True if the link was added, false on conflict or missing nodes.
+ +
+
+ +

◆ getNeighborsId()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::map< int, int > rtabmap::Memory::getNeighborsId (int signatureId,
int maxGraphDepth,
int maxCheckedInDatabase = -1,
bool incrementMarginOnLoop = false,
bool ignoreLoopIds = false,
bool ignoreIntermediateNodes = false,
bool ignoreLocalSpaceLoopIds = false,
const std::set< int > & nodesSet = std::set< int >(),
double * dbAccessTime = 0 
) const
+
+ +

Breadth-first walk of the pose graph from signatureId.

+

Visits neighbor and (optionally) loop-closure neighbors up to maxGraphDepth.

+
Parameters
+ + + + + + + + + + +
signatureIdStarting node.
maxGraphDepthMaximum graph distance (0 = infinite graph depth).
maxCheckedInDatabaseCap on LTM look-ups (-1 = unlimited, 0 = WM only).
incrementMarginOnLoopIf true, loop-closure links count toward depth.
ignoreLoopIdsIf true, loop-closure neighbors are not traversed.
ignoreIntermediateNodesIf true, weight==-1 intermediate nodes are skipped.
ignoreLocalSpaceLoopIdsIf true, only global loop closures are traversed.
nodesSetIf non-empty, traversal is constrained to these ids.
dbAccessTimeOutput: time spent in database access (seconds).
+
+
+
Returns
Map from visited node id to graph depth, including signatureId (with graph depth of 0)
+ +
+
+ +

◆ getNeighborsIdRadius()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::map< int, float > rtabmap::Memory::getNeighborsIdRadius (int signatureId,
float radius,
const std::map< int, Transform > & optimizedPoses,
int maxGraphDepth 
) const
+
+ +

Returns neighbor ids within a Euclidean radius using optimized poses.

+
Parameters
+ + + + + +
signatureIdQuery node id.
radiusMaximum distance from signatureId (meters).
optimizedPosesPose graph after optimization (used for distances).
maxGraphDepthMaximum graph distance (in terms of nodes) to bound the search.
+
+
+
Returns
Map from node id to squared distance from signatureId.
+ +
+
+ +

◆ deleteLocation()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Memory::deleteLocation (int locationId,
std::list< int > * deletedWords = 0,
bool keepLinkedInDb = false 
)
+
+ +

Removes locationId from WM/STM and the database.

+
Parameters
+ + + + +
locationIdId of the signature to delete.
deletedWordsOptional output: words whose reference count dropped to zero.
keepLinkedInDbIf true, the location keeps its links, weight and label and stays part of the graph in the database. If false (default), it is unlinked first – links removed on both sides, weight invalidated, label cleared – so at best it is kept as history only and no longer appears in getAllSignatureIds(). An unlinked location is written to the database only if it was already saved there or if Parameters::kMemNotLinkedNodesKept() is true (default); otherwise it is discarded outright.
+
+
+ +
+
+ +

◆ reduceNode()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rtabmap::Memory::reduceNode (int id,
float maxDistance = 0.0f,
bool keepLinkedInDb = false,
int direction = 0 
)
+
+ +

Merges id with a close neighbor (graph reduction).

+
Parameters
+ + + + + +
idNode to reduce.
maxDistanceMaximum distance to a neighbor to allow the merge (meters).
keepLinkedInDbSame meaning as in deleteLocation(): if true, the merged node keeps its links, weight and label and stays part of the graph in the database. If false (default), it is unlinked first – links removed on both sides, weight invalidated, label cleared – so at best it is kept as history only and no longer appears in getAllSignatureIds(). An unlinked node is written to the database only if it was already saved there or if Parameters::kMemNotLinkedNodesKept() is true (default); otherwise it is discarded outright.
directionRestrict merge target: 0=any, 1=previous neighbor, 2=next neighbor.
+
+
+
Returns
Id of the node id was merged into, or 0 if no reduction was performed.
+ +
+
+ +

◆ setDummyDictionary()

+ +
+
+ + + + + + + + +
void rtabmap::Memory::setDummyDictionary (bool enabled)
+
+ +

Enables a dummy visual word dictionary (no descriptors kept, word ids only).

+
Note
Must be called before init(); ignored (with an error logged) once the database driver is set.
+
+Silently disabled by init() when the database holds no dictionary, since there would be nothing to skip loading, and the memory would otherwise be left unable to add new nodes.
+ +
+
+ +

◆ getWorkingMem()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, double > & rtabmap::Memory::getWorkingMem () const
+
+inline
+
+
Returns
Working memory as { signature id, age } (does not include STM).
+ +

Definition at line 400 of file Memory.h.

+ +
+
+ +

◆ getWorkingMemSize()

+ +
+
+ + + + + + + + +
size_t rtabmap::Memory::getWorkingMemSize (bool ignoreIntermediateNodes = false) const
+
+ +

Returns the number of signatures in working memory, excluding the virtual place.

+
Parameters
+ + +
ignoreIntermediateNodesIf true, intermediate nodes (weight = -1) are not counted.
+
+
+ +
+
+ +

◆ getWorkingMemIntermediateNodesCount()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Memory::getWorkingMemIntermediateNodesCount () const
+
+inline
+
+
Returns
Number of intermediate nodes (weight = -1) currently in working memory.
+ +

Definition at line 407 of file Memory.h.

+ +
+
+ +

◆ getStMemIntermediateNodesCount()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Memory::getStMemIntermediateNodesCount () const
+
+inline
+
+
Returns
Number of intermediate nodes (weight = -1) currently in short-term memory.
+ +

Definition at line 409 of file Memory.h.

+ +
+
+ +

◆ getStMem()

+ +
+
+ + + + + +
+ + + + + + + +
const std::set< int > & rtabmap::Memory::getStMem () const
+
+inline
+
+
Returns
Set of signature ids currently in short-term memory.
+ +

Definition at line 411 of file Memory.h.

+ +
+
+ +

◆ getMaxStMemSize()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Memory::getMaxStMemSize () const
+
+inline
+
+
Returns
Configured maximum STM size (Parameters::kMemSTMSize()).
+ +

Definition at line 413 of file Memory.h.

+ +
+
+ +

◆ getLinks()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::multimap< int, Link > rtabmap::Memory::getLinks (int signatureId,
bool lookInDatabase = false,
bool withLandmarks = false 
) const
+
+ +

Returns all links of signatureId (neighbor, loop, prior, gravity, ...).

+
Parameters
+ + + + +
signatureIdSource node id (can also be a landmark id).
lookInDatabaseAlso query LTM for links.
withLandmarksInclude landmark links in the result.
+
+
+ +
+
+ +

◆ isBinDataKept()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Memory::isBinDataKept () const
+
+inline
+
+
Returns
True if raw binary data (images, scans) is kept in memory after compression.
+ +

Definition at line 432 of file Memory.h.

+ +
+
+ +

◆ getSimilarityThreshold()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Memory::getSimilarityThreshold () const
+
+inline
+
+
Returns
Similarity threshold used by rehearsal (Parameters::kMemRehearsalSimilarity()).
+ +

Definition at line 434 of file Memory.h.

+ +
+
+ +

◆ getWeights()

+ +
+
+ + + + + + + +
std::map< int, int > rtabmap::Memory::getWeights () const
+
+
Returns
Map from signature id to weight (rehearsal accumulation count) for WM and STM.
+ +
+
+ +

◆ getLastSignatureId()

+ +
+
+ + + + + + + +
int rtabmap::Memory::getLastSignatureId () const
+
+
Returns
Id of the most recently added signature, or 0 if none.
+ +
+
+ +

◆ getLastWorkingSignature()

+ +
+
+ + + + + + + + +
const Signature * rtabmap::Memory::getLastWorkingSignature (bool ignoreIntermediateNodes) const
+
+ +

Returns the most recent WM signature.

+
Parameters
+ + +
ignoreIntermediateNodesIf true, skips weight==-1 placeholder nodes.
+
+
+ +
+
+ +

◆ getSignatureIdByLabel()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int rtabmap::Memory::getSignatureIdByLabel (const std::string & label,
bool lookInDatabase = true 
) const
+
+
Returns
Signature id labeled label, or 0 if not found.
+ +
+
+ +

◆ labelSignature()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::Memory::labelSignature (int id,
const std::string & label 
)
+
+ +

Assigns or removes a label on id.

+
Parameters
+ + + +
idSignature id; pass 0 to remove an existing label by name.
labelLabel text; empty to remove.
+
+
+
Returns
True if the label was applied.
+ +
+
+ +

◆ getAllLabels()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, std::string > & rtabmap::Memory::getAllLabels () const
+
+inline
+
+
Returns
Map from signature id to non-empty label (including STM+WM+LTM).
+ +

Definition at line 456 of file Memory.h.

+ +
+
+ +

◆ getLandmarksIndex()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, std::set< int > > & rtabmap::Memory::getLandmarksIndex () const
+
+inline
+
+
Returns
Reverse landmark index: { landmark id (negative), nodes observing it }.
+ +

Definition at line 458 of file Memory.h.

+ +
+
+ +

◆ allNodesInWM()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Memory::allNodesInWM () const
+
+inline
+
+
Returns
True if every persisted node (in LTM) is currently loaded in WM/STM.
+ +

Definition at line 460 of file Memory.h.

+ +
+
+ +

◆ setUserData()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::Memory::setUserData (int id,
const cv::Mat & data 
)
+
+ +

Attaches user data to signature id, compressing it on the fly if needed.

+

The format is detected automatically: a single-row CV_8UC1 matrix is treated as already-compressed data and stored as-is; anything else is considered raw and compressed before being stored.

+
Note
If you pass one-dimensional unsigned 8-bit raw data, transpose it so it has multiple rows (not multiple columns), otherwise it will be misdetected as already compressed.
+
Parameters
+ + + +
idTarget signature id (must be in WM/STM or LTM).
dataRaw or pre-compressed user data.
+
+
+
Returns
True if the data was attached, false if id was not found.
+ +
+
+ +

◆ getDatabaseMemoryUsed()

+ +
+
+ + + + + + + +
int rtabmap::Memory::getDatabaseMemoryUsed () const
+
+
Returns
On-disk database size in bytes.
+ +
+
+ +

◆ getDatabaseVersion()

+ +
+
+ + + + + + + +
std::string rtabmap::Memory::getDatabaseVersion () const
+
+
Returns
Schema version of the open database (e.g. "0.20.0").
+ +
+
+ +

◆ getDatabaseUrl()

+ +
+
+ + + + + + + +
std::string rtabmap::Memory::getDatabaseUrl () const
+
+
Returns
File path of the open database (empty if in-memory).
+ +
+
+ +

◆ getDbSavingTime()

+ +
+
+ + + + + + + +
double rtabmap::Memory::getDbSavingTime () const
+
+
Returns
Last emptyTrash() flush time in seconds.
+ +
+
+ +

◆ getMapId()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int rtabmap::Memory::getMapId (int id,
bool lookInDatabase = false 
) const
+
+
Returns
Map id of signature id; lookInDatabase also queries LTM.
+ +
+
+ +

◆ getOdomPose()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Transform rtabmap::Memory::getOdomPose (int signatureId,
bool lookInDatabase = false 
) const
+
+
Returns
Odometry pose stored with signatureId (null if unknown).
+ +
+
+ +

◆ getGroundTruthPose()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Transform rtabmap::Memory::getGroundTruthPose (int signatureId,
bool lookInDatabase = false 
) const
+
+
Returns
Ground-truth pose stored with signatureId (null if unknown).
+ +
+
+ +

◆ getGroundTruths()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Transform > & rtabmap::Memory::getGroundTruths () const
+
+inline
+
+
Returns
Ground-truth poses for nodes currently in WM/STM.
+ +

Definition at line 493 of file Memory.h.

+ +
+
+ +

◆ getGPS()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Memory::getGPS (int id,
GPS & gps,
Transform & offsetENU,
bool lookInDatabase,
int maxGraphDepth = 0 
) const
+
+ +

Returns a GPS fix for id, falling back to the nearest GPS-tagged neighbor.

+

Two cases:

    +
  • If id has a GPS fix attached, gps is set to that fix and offsetENU is left at identity.
  • +
  • Otherwise, the graph is searched (via getNeighborsId() with depth maxGraphDepth, ignoring loop closures) for the closest neighbor that has a GPS fix. When one is found, gps is set to that neighbor's fix and offsetENU is the rigid transform from that neighbor's pose to id, expressed in ENU coordinates (derived from the neighbor's heading/bearing). Applying offsetENU on top of the GPS-derived pose of the neighbor yields the ENU pose of id.
  • +
+

If no GPS fix is found on id or any reachable neighbor, gps is returned empty (gps.stamp()==0) and offsetENU is identity.

+
Parameters
+ + + + + + +
idQuery signature id.
gpsOutput GPS fix (empty if none found).
offsetENUOutput ENU-frame offset from the GPS-tagged node to id (identity when id itself carries the GPS fix or when none is found).
lookInDatabaseIf true, also fetch missing nodes from LTM during the search.
maxGraphDepthMaximum graph depth used to look for a GPS-tagged neighbor when id has none (0 = no depth limit, i.e. search the whole reachable graph).
+
+
+ +
+
+ +

◆ getNodeInfo()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool rtabmap::Memory::getNodeInfo (int signatureId,
Transform & odomPose,
int & mapId,
int & weight,
std::string & label,
double & stamp,
Transform & groundTruth,
std::vector< float > & velocity,
GPS & gps,
EnvSensors & sensors,
bool lookInDatabase = false 
) const
+
+ +

Reads metadata of signatureId (no images/scan/words).

+
Parameters
+ + + + + + + + + + + + +
signatureIdNode id.
odomPoseOutput odometry pose (null if not set).
mapIdOutput map id.
weightOutput rehearsal weight.
labelOutput label (empty if none).
stampOutput timestamp (seconds, epoch).
groundTruthOutput ground-truth pose (null if not set).
velocityOutput 6-vector velocity (empty if not set).
gpsOutput GPS fix (invalid if not set).
sensorsOutput environmental sensor readings.
lookInDatabaseAlso query LTM.
+
+
+
Returns
True if signatureId was found.
+ +
+
+ +

◆ getImageCompressed()

+ +
+
+ + + + + + + + +
cv::Mat rtabmap::Memory::getImageCompressed (int signatureId) const
+
+
Returns
Compressed image blob for signatureId (empty if not stored).
+ +
+
+ +

◆ getNodeData()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SensorData rtabmap::Memory::getNodeData (int locationId,
bool images,
bool scan,
bool userData,
bool occupancyGrid 
) const
+
+ +

Loads sensor data of locationId from WM or LTM.

+
Parameters
+ + + + + +
imagesInclude compressed RGB/depth images.
scanInclude laser scan blob.
userDataInclude user data blob.
occupancyGridInclude occupancy grid cells.
+
+
+ +
+
+ +

◆ getAllSignatureIds()

+ +
+
+ + + + + + + + +
std::set< int > rtabmap::Memory::getAllSignatureIds (bool ignoreChildren = true) const
+
+ +

Returns all signature ids in WM, STM and LTM.

+
Parameters
+ + +
ignoreChildrenIf true, nodes not linked to graph anymore are excluded
+
+
+ +
+
+ +

◆ memoryChanged()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Memory::memoryChanged () const
+
+inline
+
+ +

Reports whether the in-memory map has been modified since the database was last loaded or reset. close() uses this flag to decide whether the database needs to be rewritten.

+

The flag is cleared to false on construction and by close() / clear(), and is raised to true on any of the following events:

+
    +
  • update() in mapping mode (Parameters::kMemIncrementalMemory() == true, see isIncremental()): every successful call sets the flag, since a new Signature is added to the graph and the visual word dictionary may grow.
  • +
  • update() in localization mode (isIncremental() == false): the flag is set only when Parameters::kMemLocalizationDataSaved() is enabled (see isLocalizationDataSaved()), i.e. when the new node must be persisted back to the database. Pure localization (the default, Parameters::kMemLocalizationDataSaved() == false) leaves the flag at false even after many update() calls, because nothing needs to be saved.
  • +
  • reduceNode(): merging a node into a neighbor mutates the graph and marks the memory as changed (and also raises the link-changed flag).
  • +
  • init() dictionary repair: when init() rebuilds the visual word dictionary because words are missing from the database, the flag is forced to true so the regenerated dictionary is saved back on close(), even if no new data was processed.
  • +
+

Note that link-only modifications (e.g. addLink(), updateLink(), removeLink()) update an independent _linksChanged flag, not this one.

+
Returns
True if the memory has changed and would need to be persisted.
+ +

Definition at line 602 of file Memory.h.

+ +
+
+ +

◆ isIncremental()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Memory::isIncremental () const
+
+inline
+
+
Returns
True if the memory grows on update() (mapping mode), false in localization mode.
+
See also
Parameters::kMemIncrementalMemory()
+ +

Definition at line 607 of file Memory.h.

+ +
+
+ +

◆ isReadOnly()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Memory::isReadOnly () const
+
+inline
+
+
Returns
True in localization mode when database writes are disabled (i.e. isIncremental() is false and Parameters::kMemLocalizationReadOnly() is enabled).
+
See also
Parameters::kMemIncrementalMemory()
+
+Parameters::kMemLocalizationReadOnly()
+ +

Definition at line 614 of file Memory.h.

+ +
+
+ +

◆ isLocalizationDataSaved()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Memory::isLocalizationDataSaved () const
+
+inline
+
+
Returns
True if data added during localization is persisted to the database.
+
See also
Parameters::kMemLocalizationDataSaved()
+ +

Definition at line 619 of file Memory.h.

+ +
+
+ +

◆ getSignature()

+ +
+
+ + + + + + + + +
const Signature * rtabmap::Memory::getSignature (int id) const
+
+
Returns
Signature with id in WM/STM, or null if not loaded.
+ +
+
+ +

◆ isInSTM()

+ +
+
+ + + + + +
+ + + + + + + + +
bool rtabmap::Memory::isInSTM (int signatureId) const
+
+inline
+
+
Returns
True if signatureId is in short-term memory.
+ +

Definition at line 623 of file Memory.h.

+ +
+
+ +

◆ isInWM()

+ +
+
+ + + + + +
+ + + + + + + + +
bool rtabmap::Memory::isInWM (int signatureId) const
+
+inline
+
+
Returns
True if signatureId is in working memory.
+ +

Definition at line 625 of file Memory.h.

+ +
+
+ +

◆ isInLTM()

+ +
+
+ + + + + +
+ + + + + + + + +
bool rtabmap::Memory::isInLTM (int signatureId) const
+
+inline
+
+
Returns
True if signatureId is not in STM/WM, so when it is in LTM or non-existing.
+ +

Definition at line 627 of file Memory.h.

+ +
+
+ +

◆ isIDsGenerated()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Memory::isIDsGenerated () const
+
+inline
+
+
Returns
True if signature ids are auto-generated, false if taken from sensor data id.
+ +

Definition at line 629 of file Memory.h.

+ +
+
+ +

◆ getLastGlobalLoopClosureId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Memory::getLastGlobalLoopClosureId () const
+
+inline
+
+
Returns
Id of the last accepted global loop-closure node, or 0 if none.
+ +

Definition at line 631 of file Memory.h.

+ +
+
+ +

◆ getFeature2D()

+ +
+
+ + + + + +
+ + + + + + + +
const Feature2D * rtabmap::Memory::getFeature2D () const
+
+inline
+
+
Returns
Feature extractor used to compute visual words.
+ +

Definition at line 633 of file Memory.h.

+ +
+
+ +

◆ isGraphReduced()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Memory::isGraphReduced () const
+
+inline
+
+
Returns
True if graph reduction is enabled (Parameters::kMemReduceGraph()).
+ +

Definition at line 635 of file Memory.h.

+ +
+
+ +

◆ getOdomMaxInf()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< double > & rtabmap::Memory::getOdomMaxInf () const
+
+inline
+
+
Returns
Running per-axis maximum of the diagonal of every neighbor (odometry) link's information matrix observed so far, as a 6-vector (x, y, z, roll, pitch, yaw). Empty until at least one 6x6 neighbor link information matrix has been seen.
+

This is a runtime statistic, not a configurable parameter: it is updated on init() (over all loaded neighbor links) and on every update() that adds a new neighbor link.

+

It is consumed by Rtabmap::getInformation() when Parameters::kRGBDLoopCovLimited() is enabled, to clip loop-closure information matrices so a loop never claims higher confidence than odometry itself ever provided.

+
See also
Parameters::kRGBDLoopCovLimited()
+ +

Definition at line 653 of file Memory.h.

+ +
+
+ +

◆ isOdomGravityUsed()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Memory::isOdomGravityUsed () const
+
+inline
+
+
Returns
True if the odometry pose orientation is used (instead of the IMU orientation) as the source of each new node's gravity link.
+

When enabled, every new node gets a self-loop Link::kGravity holding the rotation of the odometry pose passed to update(). This assumes odometry is already gravity-aligned (e.g. a VIO front-end). When disabled, the gravity link is built from the IMU orientation in SensorData::imu() if available.

+

Gravity links are consumed by graph optimization only when Parameters::kOptimizerGravitySigma() is non-zero.

+
See also
Parameters::kMemUseOdomGravity()
+
+Parameters::kOptimizerGravitySigma()
+ +

Definition at line 669 of file Memory.h.

+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + + + +
unsigned long rtabmap::Memory::getMemoryUsed () const
+
+
Returns
Approximate RAM usage of the in-memory state, in bytes.
+ +
+
+ +

◆ generateGraph()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::Memory::generateGraph (const std::string & fileName,
const std::set< int > & ids = std::set< int >() 
)
+
+ +

Writes a Graphviz DOT file of the pose graph.

+
Parameters
+ + + +
fileNameOutput path.
idsIf non-empty, restrict the graph to these node ids.
+
+
+ +
+
+ +

◆ cleanupLocalGrids()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rtabmap::Memory::cleanupLocalGrids (const std::map< int, Transform > & poses,
const cv::Mat & map,
float xMin,
float yMin,
float cellSize,
int cropRadius = 1,
bool filterScans = false 
)
+
+ +

Removes spurious obstacle points from each node's local grid using a reference 2D map.

+

For every node in poses, the node's local obstacle grid is loaded, each obstacle point is projected with poses into the reference map, and the point is kept only if either:

    +
  • the reference map cell at its projection is not free space (i.e. the cell is an obstacle or unknown, value != 0), or
  • +
  • the reference map contains an obstacle cell (value == 100) within cropRadius cells of the projection.
  • +
+

Points that fall on a free cell and have no obstacle neighbor within cropRadius are dropped. The filtered obstacle grid replaces the node's grid in WM/STM and (if the node is already persisted) in the database via DBDriver::updateOccupancyGrid().

+

Ground and empty cells are not touched: they are read and written back as-is.

+

When filterScans is true, the same projection/filtering rule is also applied to each node's raw laser scan, and the rewritten scan is saved back to the database. This is useful to remove dynamic objects from the stored scans before re-meshing or re-exporting.

+
Parameters
+ + + + + + + + +
posesOptimized poses used to project the local grids/scans into map.
mapReference 2D occupancy grid (cell values: 0 free, 100 occupied, anything else unknown).
xMinReference map origin x in world coordinates (meters).
yMinReference map origin y in world coordinates (meters).
cellSizeReference map resolution (meters/cell); must match the nodes' grid cell size.
cropRadiusSearch radius (in cells) around each projected point used to accept points near an obstacle in map.
filterScansIf true, also filter and rewrite the raw laser scan attached to each node, using the same rule as for obstacle cells.
+
+
+
Returns
Number of (node, grid or scan) modifications performed, or -1 on error (no database loaded, empty poses or empty map).
+ +
+
+ +

◆ getVWDictionary()

+ +
+
+ + + + + + + +
const VWDictionary * rtabmap::Memory::getVWDictionary () const
+
+
Returns
Visual word dictionary used for tf-idf likelihood and feature matching.
+ +
+
+ +

◆ getMetricConstraints()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Memory::getMetricConstraints (const std::set< int > & ids,
std::map< int, Transform > & poses,
std::multimap< int, Link > & links,
bool lookInDatabase = false,
bool landmarksAdded = false 
)
+
+ +

Extracts a sub-graph (poses + links) for a set of node ids.

+

Used by graph optimization callers to retrieve constraints for a region of interest.

+
Parameters
+ + + + + + +
idsIds to include.
posesOutput: odometry poses for ids.
linksOutput: links between the nodes (and to landmarks if landmarksAdded).
lookInDatabaseIf true, fetch missing data from LTM.
landmarksAddedIf true, also include landmark constraints.
+
+
+ +
+
+ +

◆ computeTransform()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Transform rtabmap::Memory::computeTransform (Signature & fromS,
Signature & toS,
Transform guess,
RegistrationInfo * info = 0,
bool useKnownCorrespondencesIfPossible = false 
) const
+
+ +

Computes the relative transform from fromS to toS using the registration pipeline.

+
Parameters
+ + + + + + +
fromSSource signature (will be modified to cache extracted data).
toSTarget signature.
guessInitial transform estimate (null if unknown).
infoOptional output with inlier counts, variance and diagnostics.
useKnownCorrespondencesIfPossibleIf true, reuses existing word-id correspondences.
+
+
+
Returns
The estimated transform, or a null Transform on failure.
+ +
+
+ +

◆ computeIcpTransform()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Transform rtabmap::Memory::computeIcpTransform (const Signature & fromS,
const Signature & toS,
Transform guess,
RegistrationInfo * info = 0 
) const
+
+ +

Refines a transform using ICP alignment of laser scans only.

+
Returns
The refined transform, or a null Transform on failure.
+ +
+
+ +

◆ computeIcpTransformMulti()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Transform rtabmap::Memory::computeIcpTransformMulti (int newId,
int oldId,
const std::map< int, Transform > & poses,
RegistrationInfo * info = 0 
)
+
+ +

ICP registration of one node against an assembled cloud from multiple neighbors.

+
Parameters
+ + + + + +
newIdNew (query) node id.
oldIdReference node id.
posesNeighbor poses used to assemble the reference cloud.
infoOptional output with inlier counts and diagnostics.
+
+
+
Returns
The estimated transform, or a null Transform on failure.
+ +
+
+

Member Data Documentation

+ +

◆ kIdStart

+ +
+
+ + + + + +
+ + + + +
const int rtabmap::Memory::kIdStart
+
+static
+
+ +

First valid signature id assigned by getNextId() (positive integer).

+ +

Definition at line 105 of file Memory.h.

+ +
+
+ +

◆ kIdVirtual

+ +
+
+ + + + + +
+ + + + +
const int rtabmap::Memory::kIdVirtual
+
+static
+
+ +

Reserved id for the "virtual place" used by the Bayes filter (negative).

+ +

Definition at line 107 of file Memory.h.

+ +
+
+ +

◆ kIdInvalid

+ +
+
+ + + + + +
+ + + + +
const int rtabmap::Memory::kIdInvalid
+
+static
+
+ +

Sentinel value indicating an invalid signature id (zero).

+ +

Definition at line 109 of file Memory.h.

+ +
+
+ +

◆ _dbDriver

+ +
+
+ + + + + +
+ + + + +
DBDriver* rtabmap::Memory::_dbDriver
+
+protected
+
+ +

Database driver owning the persistent storage (created by init()).

+ +

Definition at line 819 of file Memory.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/Memory.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.map new file mode 100644 index 00000000..1c4cee3f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.md5 new file mode 100644 index 00000000..b37d9283 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.md5 @@ -0,0 +1 @@ +bf1db22bb325861ec26b874057354fa0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Memory__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e310d2bc08dd2a3a8d243e547e6db8b128361442 GIT binary patch literal 9984 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::ORB Member List
+
+
+ +

This is the complete list of members for rtabmap::ORB, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::ORB)rtabmap::ORBinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::ORBvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
ORB(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::ORB)rtabmap::ORB
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::ORB)rtabmap::ORBvirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~ORB() (defined in rtabmap::ORB)rtabmap::ORBvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORB.html b/preview/pr-1492/api/latest/classrtabmap_1_1ORB.html new file mode 100644 index 00000000..68830bb6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORB.html @@ -0,0 +1,343 @@ + + + + + + + + +RTAB-Map: rtabmap::ORB Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::ORB Class Reference
+
+
+ +

ORB detector and descriptor (optional GPU). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::ORB:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::ORB:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ ORB (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

ORB detector and descriptor (optional GPU).

+ +

Definition at line 383 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::ORB::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::ORB::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 390 of file Features2d.h.

+ +
+
+ +

◆ isGpuAvailable()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::ORB::isGpuAvailable () const
+
+overridevirtual
+
+ +

Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.

+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree-members.html new file mode 100644 index 00000000..16f256ac --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree-members.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::ORBOctree Member List
+
+
+ +

This is the complete list of members for rtabmap::ORBOctree, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::ORBOctree)rtabmap::ORBOctreeinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() constrtabmap::Feature2Dinlinevirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
ORBOctree(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::ORBOctree)rtabmap::ORBOctree
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::ORBOctree)rtabmap::ORBOctreevirtual
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~ORBOctree() (defined in rtabmap::ORBOctree)rtabmap::ORBOctreevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree.html b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree.html new file mode 100644 index 00000000..bfa3cadd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree.html @@ -0,0 +1,314 @@ + + + + + + + + +RTAB-Map: rtabmap::ORBOctree Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::ORBOctree Class Reference
+
+
+ +

ORB with octree spatial distribution (RTAB-Map must be built with OCTREE enabled). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::ORBOctree:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::ORBOctree:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ ORBOctree (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
virtual bool isGpuAvailable () const
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

ORB with octree spatial distribution (RTAB-Map must be built with OCTREE enabled).

+ +

Definition at line 647 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::ORBOctree::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::ORBOctree::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 654 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.map new file mode 100644 index 00000000..b3fb3764 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.md5 new file mode 100644 index 00000000..aa00c106 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.md5 @@ -0,0 +1 @@ +50aea02d62e4bc4c8ece040ae8bbccbb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8e941d1f2a0c38064f715335e245d6ef7de1bf12 GIT binary patch literal 4702 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.map new file mode 100644 index 00000000..b3fb3764 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.md5 new file mode 100644 index 00000000..aa00c106 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.md5 @@ -0,0 +1 @@ +50aea02d62e4bc4c8ece040ae8bbccbb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1ORBOctree__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8e941d1f2a0c38064f715335e245d6ef7de1bf12 GIT binary patch literal 4702 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.map new file mode 100644 index 00000000..d0f1d46a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.md5 new file mode 100644 index 00000000..9f8687ac --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.md5 @@ -0,0 +1 @@ +6475f38c94b0fa606c63e1840ec1dc2e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1ORB__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..362d6754733c371816a8b56820dfe7dd1b469048 GIT binary patch literal 4267 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 V-BQvc@b3eOih{ + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORB__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1ORB__inherit__graph.md5 new file mode 100644 index 00000000..9f8687ac --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ORB__inherit__graph.md5 @@ -0,0 +1 @@ +6475f38c94b0fa606c63e1840ec1dc2e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ORB__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1ORB__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..362d6754733c371816a8b56820dfe7dd1b469048 GIT binary patch literal 4267 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 V-BQvc@b3eOih{ + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OccupancyGrid Member List
+
+
+ +

This is the complete list of members for rtabmap::OccupancyGrid, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addAssembledNode(int id, const Transform &pose)rtabmap::GlobalMapprotected
addedNodes() constrtabmap::GlobalMapinline
assemble(const std::list< std::pair< int, Transform > > &newPoses)rtabmap::OccupancyGridprotectedvirtual
assembledNodes() constrtabmap::GlobalMapinlineprotected
cache() constrtabmap::GlobalMapinlineprotected
cellSize_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
clear()rtabmap::OccupancyGridvirtual
fullUpdateNeeded(const std::map< int, Transform > &poses) constrtabmap::GlobalMap
getCellSize() constrtabmap::GlobalMapinline
getGridMax(double &x, double &y) constrtabmap::GlobalMapinline
getGridMax(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getMap(float &xMin, float &yMin) const (defined in rtabmap::OccupancyGrid)rtabmap::OccupancyGrid
getMemoryUsed() constrtabmap::OccupancyGridvirtual
getMinMapSize() const (defined in rtabmap::OccupancyGrid)rtabmap::OccupancyGridinline
getProbMap(float &xMin, float &yMin) const (defined in rtabmap::OccupancyGrid)rtabmap::OccupancyGrid
getUpdateError() constrtabmap::GlobalMapinline
GlobalMap(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())rtabmap::GlobalMapprotected
isNodeAssembled(int id)rtabmap::GlobalMapinlineprotected
logodds(double probability)rtabmap::GlobalMapinlinestatic
logOddsClampingMax_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsClampingMin_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsHit_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsMiss_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
maxValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
minValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
OccupancyGrid(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::OccupancyGrid)rtabmap::OccupancyGrid
occupancyThr_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
probability(double logodds)rtabmap::GlobalMapinlinestatic
setMap(const cv::Mat &map, float xMin, float yMin, float cellSize, const std::map< int, Transform > &poses) (defined in rtabmap::OccupancyGrid)rtabmap::OccupancyGrid
update(const std::map< int, Transform > &poses)rtabmap::GlobalMap
updateError_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
~GlobalMap() (defined in rtabmap::GlobalMap)rtabmap::GlobalMapvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid.html b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid.html new file mode 100644 index 00000000..4f96c64c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid.html @@ -0,0 +1,333 @@ + + + + + + + + +RTAB-Map: rtabmap::OccupancyGrid Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OccupancyGrid Class Reference
+
+
+
+Inheritance diagram for rtabmap::OccupancyGrid:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OccupancyGrid:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OccupancyGrid (const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
 
+void setMap (const cv::Mat &map, float xMin, float yMin, float cellSize, const std::map< int, Transform > &poses)
 
float getMinMapSize () const
 
virtual void clear ()
 Clears assembled nodes and grid bounds; does not clear LocalGridCache.
 
+cv::Mat getMap (float &xMin, float &yMin) const
 
+cv::Mat getProbMap (float &xMin, float &yMin) const
 
unsigned long getMemoryUsed () const
 Approximate memory used by assembled-node bookkeeping (bytes).
 
- Public Member Functions inherited from rtabmap::GlobalMap
bool fullUpdateNeeded (const std::map< int, Transform > &poses) const
 True if the map should be rebuilt from cache (loop closure or disjoint graph).
 
bool update (const std::map< int, Transform > &poses)
 Incrementally assemble new nodes from poses.
 
float getCellSize () const
 
float getUpdateError () const
 
const std::map< int, Transform > & addedNodes () const
 
void getGridMin (double &x, double &y) const
 2D grid minimum (x, y) in meters.
 
void getGridMax (double &x, double &y) const
 2D grid maximum (x, y) in meters.
 
void getGridMin (double &x, double &y, double &z) const
 3D grid minimum (x, y, z) in meters.
 
void getGridMax (double &x, double &y, double &z) const
 3D grid maximum (x, y, z) in meters.
 
+ + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual void assemble (const std::list< std::pair< int, Transform > > &newPoses)
 Subclass hook: merge newPoses into the global map; call addAssembledNode().
 
- Protected Member Functions inherited from rtabmap::GlobalMap
 GlobalMap (const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
 Constructs the base map; subclasses call from their constructor.
 
const std::map< int, LocalGrid > & cache () const
 
const std::map< int, Transform > & assembledNodes () const
 
bool isNodeAssembled (int id)
 
+void addAssembledNode (int id, const Transform &pose)
 Records a successfully assembled node (ids <= 0 are ignored).
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from rtabmap::GlobalMap
static float logodds (double probability)
 Converts probability in (0, 1) to log-odds.
 
static double probability (double logodds)
 Converts log-odds back to probability in (0, 1).
 
- Protected Attributes inherited from rtabmap::GlobalMap
float cellSize_
 
float updateError_
 
float occupancyThr_
 
float logOddsHit_
 
float logOddsMiss_
 
float logOddsClampingMin_
 
float logOddsClampingMax_
 
double minValues_ [3]
 
double maxValues_ [3]
 
+

Detailed Description

+
+

Definition at line 40 of file OccupancyGrid.h.

+

Member Function Documentation

+ +

◆ getMinMapSize()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::OccupancyGrid::getMinMapSize () const
+
+inline
+
+ +

Definition at line 45 of file OccupancyGrid.h.

+ +
+
+ +

◆ clear()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void rtabmap::OccupancyGrid::clear ()
+
+virtual
+
+ +

Clears assembled nodes and grid bounds; does not clear LocalGridCache.

+ +

Reimplemented from rtabmap::GlobalMap.

+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned long rtabmap::OccupancyGrid::getMemoryUsed () const
+
+virtual
+
+ +

Approximate memory used by assembled-node bookkeeping (bytes).

+ +

Reimplemented from rtabmap::GlobalMap.

+ +
+
+ +

◆ assemble()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OccupancyGrid::assemble (const std::list< std::pair< int, Transform > > & newPoses)
+
+protectedvirtual
+
+ +

Subclass hook: merge newPoses into the global map; call addAssembledNode().

+ +

Implements rtabmap::GlobalMap.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.map new file mode 100644 index 00000000..043231d9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.md5 new file mode 100644 index 00000000..28d03fba --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.md5 @@ -0,0 +1 @@ +0897b3d4fae84f643f27c75c0a94586d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..22efbc1d92229a8ba9f614f78f230640623cd249 GIT binary patch literal 4912 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__inherit__graph.md5 new file mode 100644 index 00000000..28d03fba --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__inherit__graph.md5 @@ -0,0 +1 @@ +0897b3d4fae84f643f27c75c0a94586d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OccupancyGrid__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..22efbc1d92229a8ba9f614f78f230640623cd249 GIT binary patch literal 4912 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OctoMap Member List
+
+
+ +

This is the complete list of members for rtabmap::OctoMap, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addAssembledNode(int id, const Transform &pose)rtabmap::GlobalMapprotected
addedNodes() constrtabmap::GlobalMapinline
assemble(const std::list< std::pair< int, Transform > > &newPoses)rtabmap::OctoMapprotectedvirtual
assembledNodes() constrtabmap::GlobalMapinlineprotected
cache() constrtabmap::GlobalMapinlineprotected
cellSize_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
clear()rtabmap::OctoMapvirtual
createCloud(unsigned int treeDepth=0, std::vector< int > *obstacleIndices=0, std::vector< int > *emptyIndices=0, std::vector< int > *groundIndices=0, bool originalRefPoints=true, std::vector< int > *frontierIndices=0, std::vector< double > *cloudProb=0) const (defined in rtabmap::OctoMap)rtabmap::OctoMap
createProjectionMap(float &xMin, float &yMin, float &gridCellSize, float minGridSize=0.0f, unsigned int treeDepth=0) (defined in rtabmap::OctoMap)rtabmap::OctoMap
findCloseEmpty(RtabmapColorOcTree *octree_, unsigned int treeDepth, octomap::point3d startPosition) (defined in rtabmap::OctoMap)rtabmap::OctoMapstatic
findEmptyNode(RtabmapColorOcTree *octree_, unsigned int treeDepth, octomap::point3d startPosition) (defined in rtabmap::OctoMap)rtabmap::OctoMapstatic
floodFill(RtabmapColorOcTree *octree_, unsigned int treeDepth, octomap::point3d startPosition, std::unordered_set< octomap::OcTreeKey, octomap::OcTreeKey::KeyHash > &EmptyNodes, std::queue< octomap::point3d > &positionToExplore) (defined in rtabmap::OctoMap)rtabmap::OctoMapstatic
fullUpdateNeeded(const std::map< int, Transform > &poses) constrtabmap::GlobalMap
getCellSize() constrtabmap::GlobalMapinline
getGridMax(double &x, double &y) constrtabmap::GlobalMapinline
getGridMax(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y) constrtabmap::GlobalMapinline
getGridMin(double &x, double &y, double &z) constrtabmap::GlobalMapinline
getMemoryUsed() constrtabmap::OctoMapvirtual
getUpdateError() constrtabmap::GlobalMapinline
GlobalMap(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())rtabmap::GlobalMapprotected
hasColor() const (defined in rtabmap::OctoMap)rtabmap::OctoMapinline
isNodeAssembled(int id)rtabmap::GlobalMapinlineprotected
isNodeVisited(std::unordered_set< octomap::OcTreeKey, octomap::OcTreeKey::KeyHash > const &EmptyNodes, octomap::OcTreeKey const key) (defined in rtabmap::OctoMap)rtabmap::OctoMapstatic
isValidEmpty(RtabmapColorOcTree *octree_, unsigned int treeDepth, octomap::point3d startPosition) (defined in rtabmap::OctoMap)rtabmap::OctoMapstatic
logodds(double probability)rtabmap::GlobalMapinlinestatic
logOddsClampingMax_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsClampingMin_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsHit_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
logOddsMiss_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
maxValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
minValues_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
occupancyThr_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
OctoMap(const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::OctoMap)rtabmap::OctoMap
octree() const (defined in rtabmap::OctoMap)rtabmap::OctoMapinline
probability(double logodds)rtabmap::GlobalMapinlinestatic
update(const std::map< int, Transform > &poses)rtabmap::GlobalMap
updateError_ (defined in rtabmap::GlobalMap)rtabmap::GlobalMapprotected
writeBinary(const std::string &path) (defined in rtabmap::OctoMap)rtabmap::OctoMap
~GlobalMap() (defined in rtabmap::GlobalMap)rtabmap::GlobalMapvirtual
~OctoMap() (defined in rtabmap::OctoMap)rtabmap::OctoMapvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap.html b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap.html new file mode 100644 index 00000000..91833dbb --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap.html @@ -0,0 +1,381 @@ + + + + + + + + +RTAB-Map: rtabmap::OctoMap Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::OctoMap:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OctoMap:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OctoMap (const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
 
const RtabmapColorOcTree * octree () const
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr createCloud (unsigned int treeDepth=0, std::vector< int > *obstacleIndices=0, std::vector< int > *emptyIndices=0, std::vector< int > *groundIndices=0, bool originalRefPoints=true, std::vector< int > *frontierIndices=0, std::vector< double > *cloudProb=0) const
 
+cv::Mat createProjectionMap (float &xMin, float &yMin, float &gridCellSize, float minGridSize=0.0f, unsigned int treeDepth=0)
 
+bool writeBinary (const std::string &path)
 
virtual void clear ()
 Clears assembled nodes and grid bounds; does not clear LocalGridCache.
 
virtual unsigned long getMemoryUsed () const
 Approximate memory used by assembled-node bookkeeping (bytes).
 
bool hasColor () const
 
- Public Member Functions inherited from rtabmap::GlobalMap
bool fullUpdateNeeded (const std::map< int, Transform > &poses) const
 True if the map should be rebuilt from cache (loop closure or disjoint graph).
 
bool update (const std::map< int, Transform > &poses)
 Incrementally assemble new nodes from poses.
 
float getCellSize () const
 
float getUpdateError () const
 
const std::map< int, Transform > & addedNodes () const
 
void getGridMin (double &x, double &y) const
 2D grid minimum (x, y) in meters.
 
void getGridMax (double &x, double &y) const
 2D grid maximum (x, y) in meters.
 
void getGridMin (double &x, double &y, double &z) const
 3D grid minimum (x, y, z) in meters.
 
void getGridMax (double &x, double &y, double &z) const
 3D grid maximum (x, y, z) in meters.
 
+ + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static std::unordered_set< octomap::OcTreeKey, octomap::OcTreeKey::KeyHash > findEmptyNode (RtabmapColorOcTree *octree_, unsigned int treeDepth, octomap::point3d startPosition)
 
+static void floodFill (RtabmapColorOcTree *octree_, unsigned int treeDepth, octomap::point3d startPosition, std::unordered_set< octomap::OcTreeKey, octomap::OcTreeKey::KeyHash > &EmptyNodes, std::queue< octomap::point3d > &positionToExplore)
 
+static bool isNodeVisited (std::unordered_set< octomap::OcTreeKey, octomap::OcTreeKey::KeyHash > const &EmptyNodes, octomap::OcTreeKey const key)
 
+static octomap::point3d findCloseEmpty (RtabmapColorOcTree *octree_, unsigned int treeDepth, octomap::point3d startPosition)
 
+static bool isValidEmpty (RtabmapColorOcTree *octree_, unsigned int treeDepth, octomap::point3d startPosition)
 
- Static Public Member Functions inherited from rtabmap::GlobalMap
static float logodds (double probability)
 Converts probability in (0, 1) to log-odds.
 
static double probability (double logodds)
 Converts log-odds back to probability in (0, 1).
 
+ + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual void assemble (const std::list< std::pair< int, Transform > > &newPoses)
 Subclass hook: merge newPoses into the global map; call addAssembledNode().
 
- Protected Member Functions inherited from rtabmap::GlobalMap
 GlobalMap (const LocalGridCache *cache, const ParametersMap &parameters=ParametersMap())
 Constructs the base map; subclasses call from their constructor.
 
const std::map< int, LocalGrid > & cache () const
 
const std::map< int, Transform > & assembledNodes () const
 
bool isNodeAssembled (int id)
 
+void addAssembledNode (int id, const Transform &pose)
 Records a successfully assembled node (ids <= 0 are ignored).
 
+ + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from rtabmap::GlobalMap
float cellSize_
 
float updateError_
 
float occupancyThr_
 
float logOddsHit_
 
float logOddsMiss_
 
float logOddsClampingMin_
 
float logOddsClampingMax_
 
double minValues_ [3]
 
double maxValues_ [3]
 
+

Detailed Description

+
+

Definition at line 175 of file OctoMap.h.

+

Member Function Documentation

+ +

◆ octree()

+ +
+
+ + + + + +
+ + + + + + + +
const RtabmapColorOcTree * rtabmap::OctoMap::octree () const
+
+inline
+
+ +

Definition at line 179 of file OctoMap.h.

+ +
+
+ +

◆ clear()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void rtabmap::OctoMap::clear ()
+
+virtual
+
+ +

Clears assembled nodes and grid bounds; does not clear LocalGridCache.

+ +

Reimplemented from rtabmap::GlobalMap.

+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned long rtabmap::OctoMap::getMemoryUsed () const
+
+virtual
+
+ +

Approximate memory used by assembled-node bookkeeping (bytes).

+ +

Reimplemented from rtabmap::GlobalMap.

+ +
+
+ +

◆ hasColor()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::OctoMap::hasColor () const
+
+inline
+
+ +

Definition at line 203 of file OctoMap.h.

+ +
+
+ +

◆ assemble()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OctoMap::assemble (const std::list< std::pair< int, Transform > > & newPoses)
+
+protectedvirtual
+
+ +

Subclass hook: merge newPoses into the global map; call addAssembledNode().

+ +

Implements rtabmap::GlobalMap.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/global_map/OctoMap.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.map new file mode 100644 index 00000000..8c4b20ad --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.md5 new file mode 100644 index 00000000..5b1e8f40 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.md5 @@ -0,0 +1 @@ +fb723b6cf31e4a10cf0e3548e12616a1 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..793a60424c5557965df048776ed3be9e2f382c41 GIT binary patch literal 4378 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.map new file mode 100644 index 00000000..8c4b20ad --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.md5 new file mode 100644 index 00000000..5b1e8f40 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.md5 @@ -0,0 +1 @@ +fb723b6cf31e4a10cf0e3548e12616a1 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OctoMap__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..793a60424c5557965df048776ed3be9e2f382c41 GIT binary patch literal 4378 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Odometry-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Odometry-members.html new file mode 100644 index 00000000..49163df5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Odometry-members.html @@ -0,0 +1,127 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Odometry Member List
+
+
+ +

This is the complete list of members for rtabmap::Odometry, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()=0rtabmap::Odometrypure virtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::Odometryvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Odometry.html b/preview/pr-1492/api/latest/classrtabmap_1_1Odometry.html new file mode 100644 index 00000000..a8bb399d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Odometry.html @@ -0,0 +1,786 @@ + + + + + + + + +RTAB-Map: rtabmap::Odometry Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Abstract base class for visual, lidar and visual-inertial odometry backends. + More...

+ +

#include <Odometry.h>

+
+Inheritance diagram for rtabmap::Odometry:
+
+
Inheritance graph
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
+ + + + + +

+Public Types

enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()=0
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + +

+Static Public Member Functions

static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
+ + + + + + +

+Protected Member Functions

const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+

Abstract base class for visual, lidar and visual-inertial odometry backends.

+

Odometry estimates the incremental motion between consecutive SensorData frames. Concrete implementations override computeTransform(); the public process() pipeline handles IMU caching, optional motion guesses, filtering (Kalman or particle), image decimation, deskewing and pose integration.

+

Use create() to instantiate a backend from Parameters::kOdomStrategy().

+
See also
OdometryThread
+
+OdometryInfo
+ +

Definition at line 56 of file Odometry.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::Odometry::Type
+
+ +

Odometry backend selected by Parameters::kOdomStrategy().

+ + + + + + + + + + + + + + + + + +
Enumerator
kTypeUndef 

Undefined / invalid type.

+
kTypeF2M 

Frame-to-map (default).

+
kTypeF2F 

Frame-to-frame.

+
kTypeFovis 

FOVIS stereo visual odometry.

+
kTypeViso2 

libviso2.

+
kTypeDVO 

Dense visual odometry.

+
kTypeORBSLAM 

ORB-SLAM 2/3.

+
kTypeOkvis 

OKVIS.

+
kTypeLOAM 

LOAM lidar odometry.

+
kTypeMSCKF 

MSCKF visual-inertial.

+
kTypeVINSFusion 

VINS-Fusion.

+
kTypeOpenVINS 

OpenVINS.

+
kTypeFLOAM 

FLOAM lidar odometry.

+
kTypeOpen3D 

Open3D RGB-D odometry.

+
kTypeCuVSLAM 

cuVSLAM.

+
kTypeLIOSAM 

LIO-SAM.

+
+ +

Definition at line 60 of file Odometry.h.

+ +
+
+

Member Function Documentation

+ +

◆ create() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static Odometry * rtabmap::Odometry::create (const ParametersMap & parameters = ParametersMap())
+
+static
+
+ +

Creates an odometry instance from Parameters::kOdomStrategy() in parameters.

+
Parameters
+ + +
parametersRTAB-Map parameters (odometry strategy and related options).
+
+
+
Returns
New odometry object (caller owns the pointer). Falls back to kTypeF2M if the type is unknown.
+ +
+
+ +

◆ create() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static Odometry * rtabmap::Odometry::create (Type & type,
const ParametersMap & parameters = ParametersMap() 
)
+
+static
+
+ +

Creates an odometry instance of a given type.

+
Parameters
+ + + +
typeIn/out odometry type; updated to kTypeF2M if type is unknown.
parametersRTAB-Map parameters passed to the concrete backend.
+
+
+ +
+
+ +

◆ process() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
Transform rtabmap::Odometry::process (SensorData & data,
OdometryInfo * info = 0 
)
+
+ +

Processes a sensor frame and updates the integrated pose.

+
Parameters
+ + + +
dataInput sensor data (must have id() >= 0). May be modified in place (decompression, deskewing).
infoOptional output statistics and debug data.
+
+
+
Returns
Updated integrated pose (getPose()) after the frame is processed, or a null transform if odometry is lost. The incremental transform is available in OdometryInfo::transform when info is provided.
+ +
+
+ +

◆ process() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Transform rtabmap::Odometry::process (SensorData & data,
const Transform & guess,
OdometryInfo * info = 0 
)
+
+ +

Processes a sensor frame with an external motion guess.

+
Parameters
+ + + + +
dataInput sensor data.
guessOptional prior on the incremental transform (used by the backend when supported).
infoOptional output statistics and debug data.
+
+
+ +
+
+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::Odometry::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+
+ +

◆ getType()

+ + + +

◆ canProcessRawImages()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::Odometry::canProcessRawImages () const
+
+inlinevirtual
+
+
Returns
True if the backend can process unrectified camera images.
+ +

Reimplemented in rtabmap::OdometryMSCKF, rtabmap::OdometryOkvis, rtabmap::OdometryOpenVINS, and rtabmap::OdometryVINSFusion.

+ +

Definition at line 117 of file Odometry.h.

+ +
+
+ +

◆ canProcessAsyncIMU()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::Odometry::canProcessAsyncIMU () const
+
+inlinevirtual
+
+
Returns
True if the backend processes IMU asynchronously outside process().
+ +

Reimplemented in rtabmap::OdometryLIOSAM, rtabmap::OdometryMSCKF, rtabmap::OdometryOkvis, rtabmap::OdometryOpenVINS, rtabmap::OdometryORBSLAM3, and rtabmap::OdometryVINSFusion.

+ +

Definition at line 119 of file Odometry.h.

+ +
+
+ +

◆ getPose()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Odometry::getPose () const
+
+inline
+
+
Returns
Current integrated odometry pose.
+ +

Definition at line 122 of file Odometry.h.

+ +
+
+ +

◆ isInfoDataFilled()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Odometry::isInfoDataFilled () const
+
+inline
+
+
Returns
True if OdometryInfo debug/statistics fields are filled in process().
+ +

Definition at line 124 of file Odometry.h.

+ +
+
+ +

◆ previousVelocityTransform()

+ +
+
+ + + + + + + +
RTABMAP_DEPRECATED const Transform & rtabmap::Odometry::previousVelocityTransform () const
+
+
+ +

◆ getVelocityGuess()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Odometry::getVelocityGuess () const
+
+inline
+
+
Returns
Last estimated velocity used for motion guessing (may be null).
+ +

Definition at line 128 of file Odometry.h.

+ +
+
+ +

◆ previousStamp()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::Odometry::previousStamp () const
+
+inline
+
+
Returns
Timestamp of the previously processed frame.
+ +

Definition at line 130 of file Odometry.h.

+ +
+
+ +

◆ framesProcessed()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int rtabmap::Odometry::framesProcessed () const
+
+inline
+
+
Returns
Number of frames processed since the last reset().
+ +

Definition at line 132 of file Odometry.h.

+ +
+
+ +

◆ imagesAlreadyRectified()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Odometry::imagesAlreadyRectified () const
+
+inline
+
+
Returns
True if input images are already rectified (see Parameters::kRtabmapImagesAlreadyRectified()).
+ +

Definition at line 134 of file Odometry.h.

+ +
+
+ +

◆ imus()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< double, Transform > & rtabmap::Odometry::imus () const
+
+inlineprotected
+
+
Returns
IMU orientations cached from recent frames (stamp → transform).
+ +

Definition at line 138 of file Odometry.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM-members.html new file mode 100644 index 00000000..894ca8b3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryCuVSLAM Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryCuVSLAM, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryCuVSLAMinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryCuVSLAM(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryCuVSLAM)rtabmap::OdometryCuVSLAM
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryCuVSLAMvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryCuVSLAM() (defined in rtabmap::OdometryCuVSLAM)rtabmap::OdometryCuVSLAMvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM.html new file mode 100644 index 00000000..cf4eaa35 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM.html @@ -0,0 +1,264 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryCuVSLAM Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryCuVSLAM Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryCuVSLAM:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryCuVSLAM:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryCuVSLAM (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 45 of file OdometryCuVSLAM.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryCuVSLAM::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryCuVSLAM::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 52 of file OdometryCuVSLAM.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.map new file mode 100644 index 00000000..a0c260b8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.md5 new file mode 100644 index 00000000..17d4fc6c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.md5 @@ -0,0 +1 @@ +46b713e7fb07ed9d1d7e33aec50163c7 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ab68352eac2fd2186fc800fd28d32d0a3f7dff49 GIT binary patch literal 6014 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 V1jA$Y?t_6kq%5y4S0ZB)_#d&glVtz^ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.map new file mode 100644 index 00000000..a0c260b8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.md5 new file mode 100644 index 00000000..17d4fc6c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.md5 @@ -0,0 +1 @@ +46b713e7fb07ed9d1d7e33aec50163c7 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryCuVSLAM__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ab68352eac2fd2186fc800fd28d32d0a3f7dff49 GIT binary patch literal 6014 zcmd5=1y__&wEYMPB?d(qnn46bBm_jdOTv)`K|oqkq@;TokP;9?Iz?Kfn?XQOknWOZ z=x}J?<;8kyy0FH%3K?>@{Jo?Wj!@+JOneL_i{eWhyx>kt*P>Kb*ec03D< z5W)PdSon3Bv{~kOP1&~Z{^A*Zwt1Spn{Orh-uAAftca1~BdO(|{nw-KYA6;8RZ&%) zYH=kS8odAD!RD-C=gwWT5(0RXX;Ot@rb=lrf{$&0XW-vml9 zzgrhXpm5I*{e(GpDgJvo(|`4flY&XC%N5?7TvPLSacSu_V+VgU`&{4FRBh1u`l}Mm z(J=MRo0*M`saW2$x0=qkT(TrCj?AW-{g}P}Zp@3sbCfhUGt<)2c6E2lxVsBYO;1zN z(?^7bk(9{N4_6E+X20dUQC3xTi;|%4*^4 zc>m~VA-a{9EG0FS>gLUm2hXck*|i@6is1@|mtKs-;D0W4wZxot+)>udwQiGFU-wjEszUVvD|fkp1Sjf?rQ6IAUmE#vAcxUsPTL8T3QS7l^nsc31@+J!m@0Rd{rX=_S2MZ$+}d3iZ3 zB4W@6hnw|_=4m>@H!?DUq2%)cSm{4*yPR?+{M$d%HCm9)8Oh<=;+wo9=ruj_6 zTQ*@~{X&K}Z{F;UJa>$}M#CKgj+#zFi0^#**WOJuy^rHEc(oq8tm9uTuDy10V!61u zV0-W&GDXxq>SwBG;>K)q`hz!Ft`{JTgpkdvR|EAMYir6EN1c-E;ym|tidZJA>~9Cd z-p9sD+u7ME0i+$T7nX)KH%rd%A20UsG_wW6oR@#nzO=DXreKy(?M;__+Sb-~`3JOc zIB(6Su&{9Z$jApa4vsjLMDAGkS)at8ANf&TOU?rW16kG4p*RbW3Vjg17`CwB#2~vQLj%GfrnVK^EGe4iH z9aUW|cMLyz|%{08O zz8;;Mdj~``tJR(cEw}hPQ`Ug*`1rW|M^0(g^z`&L zKYyH2nvf&YX@wMve?h^$<-YX3l8TCoAXWBH-$aUwi^mbkO%@>c#V1U|)6?YFu3dx4 zu-uB6Us>sN0Kdi*=~qDh(@b!9mqT@BWk_^1rNeAfWTLU}arvY=iL`~qos-kk*8rAo z>7k*ad{)UQoQ1cy*u@S?GUMAf>K89wJoY&eXu3GTKI=(RPYWj$cr@Zbgjv0K-}%Y0 ziIgcC_3M)mW@d)z*RNk=-)wGx-Nwz~zI;9A5631Zq6|u!T;udttOElBW8&h1X8&E_ z46t6Fo=82tFmbQH{-$s}eSMo@S(4WCQ{4CwxRC3g)vc{ZHJh>)9UUF7?nv+^onTpFe+wAf;Rlb8~YRPR{PR$Lt1H+S)hUFqrW^Y$%W4PAl=zR{i!)zan$_ z(&68~tOx`iegO2m+TjW$r>MBF+MkUq9ESW44qOfn4$3;o>~%R4AR-RCJOFc?HhNjWq!vd+M99bM*o?g`M~;pKIkg#|*R(L|km z{URWIF^P$t>>WExzkefBB>k9Bl*}FPX!%*Lqv!to!AHvl-q$T@0U?26-oFpb%VP(% zMy&FIOIksJ$k51W91e7XBt!-;6Bz~y$#j4D*WFKZD#$v_G$>!adR58HEPG}@N2gF3z_j+w3Pr!QKu%d%3`k`0!*wiH zSy`Dhwr44Bz)gl^ZFQAJUS2+@vQpb>az}!$fQJ-eKA5Lw{wrC~vpTXe9|Gm{Wr zenlo>j>2evzckl_2g*7+A6hL`hY7toQ5i#n3+K4m&aW0dFa`#(Ox$k4dO^~a)RKz} zT=N^ow)jL4%lLTe5{$>o)f+KckLCXF;zVcb2?A3Oi-hNEidvZ#!CDx8-LNfs$6I1El}?-%I(oE%fff zuP`RrdG&@99Up%i7GB&(;?eP>==6{^i#?ou&P8VDU&oBahR^4MAPVVxbn$E)tz4uR z{4}q?^c^2IPAPA5G%O++enObSeX{%fU1_t2U3L4>|0SlPWGImgX%t zM5s*sPx16scVTJiXuWSc;kW8)zn87Zp$f|!!kle?>hFl;|5-BcCHSBI-IO(*ui(ob z9UKg@pRCHPu1>@v?^1}D6WUo@OFezs7su(_{j6}<+RjeS$48t=!n@1$@xsG#pPYVc zr|lW>sYWjv=UVTn&S~%_H8s@}NJeF5ZS6-Roxec2I&{MQq9N?;%)7{_{#Ji~zriH<5cTB?Corxo?ChaN#@gB;*^1F^ zLqpVxQ4F-(Hnf8|Y$md@1i&boSXvUHFrDavQac6hANb*nR1i4kF^>?vCm2r*d_5z1%~J z1>!woD=aJwN=&5DDKSJ75L0AiXUpE#|NfFMN8?^#P*7&Sbxc}Xl%VYh%fpA)q2HsU zDB#Q*SDe{66RrYs4vUPG*U`C^m6g@PJ29)MU*m)*F{%$ueBp`S3<9FSWmp4q-Ap4^sE-nUJ6$0uM1JpfKIt-AH5O=#TtXtdAbu0(*WgEHvX0(ACvt zyK^U?Z>7Rwy5=>3vER8MP_h1riEvl!$b1OR3lnU4d3kH27tX}qK5}{45%K;R{#P!Re9(GTof$p+0LDDR_F(D~OM;>rQAam=@4tVU57;tOb&li{G%xZpYc%+lv@aYjP&U{4fV~94wRR z4+!v+7zXQow1e;vOB*4#v#!sy-`?E3g5mA@@uNSyXL{NQd$!7db`~5QJoo2>e`$ zEC2-}GrKRyiWBGyF5C#MUT>5UHX!GmqB7amj z<;2SMk+*N(E*6c`;*@uA;FdVsk#*afn{;d*_N>DT(j1U=*R3?T<74p)|jPK2|s#~K*f%%QM9?X&L-QD4g;R%U}w^>;O zr!5^FDS3E!44b_5R~Vq68+R-%Eny^t2Fz+e4A+M$K%D@hWCpanvDgEvG$5A=8&Ly5 zA^-5<14xEhl{7$PO%2@dVn2P{77y;t$t3B^0906{92F9h33}i{onpEQZ&~120NE(m z*xcLL+%z>c#RJ>`r>DORCcyuteF4z{a+m2k1*T#oqN1WT_4NzQ|IT?-)zkoS*&@mC z15DanqaKkGK)buU8|E@dBn)UU=l%Q7w6uZ&Xuuc-Gd0B^EiJ92q9UuRN(OWw=Htg7 zBaRjpAu%y9w-1hhTxNYwAF#5rk}*x_>*>wqCcbEsyx66blb3Jp?WF)=l?CaPIGQ5> zhr=Gk*4LkgErp;^3t%7sTKR#u6YXHmvonuTQdX7*2RP-Ed-jYRiYKL8D}rXa`&~b`Hi5h+7er z-Hgdf&Mq!PPnt4C0KIW2L?rXI06jKm4qkX zDZD~?o*Njj^76u*YZ*Y**LdN$ft`ZU(4fFczrKF(q5%$A0^c;=x zgPzv4waEZCf#kqL^%fcwD}dqBD_dJ>5@{_h>Qf3J{9<7Aba{7B9G9~{;M8C+SjJ&L zIwa%@uo+p|*_EN+z|OwDzQEeGf*D8u*cb^hF>x`+*>B?Am*sj`NubzTIy!BgohU|A zGE+DaxItrMZn{BC&Ge?PX){K7&h V1jA$Y?t_6kq%5y4S0ZB)_#d&glVtz^ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO-members.html new file mode 100644 index 00000000..9450b62e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryDVO Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryDVO, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryDVOinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryDVO(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryDVO)rtabmap::OdometryDVO
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryDVOvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryDVO() (defined in rtabmap::OdometryDVO)rtabmap::OdometryDVOvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO.html new file mode 100644 index 00000000..f35073c8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO.html @@ -0,0 +1,264 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryDVO Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryDVO Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryDVO:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryDVO:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryDVO (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 43 of file OdometryDVO.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryDVO::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryDVO::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 50 of file OdometryDVO.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.map new file mode 100644 index 00000000..0928a1e1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.md5 new file mode 100644 index 00000000..c39e9ff8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.md5 @@ -0,0 +1 @@ +e751dcd3a2f80de5113c2cab3307d015 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e7994b10aba48957729f912b2729b4c120763c3e GIT binary patch literal 5318 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__inherit__graph.md5 new file mode 100644 index 00000000..c39e9ff8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__inherit__graph.md5 @@ -0,0 +1 @@ +e751dcd3a2f80de5113c2cab3307d015 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryDVO__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e7994b10aba48957729f912b2729b4c120763c3e GIT binary patch literal 5318 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryEvent, including all inherited members.

+ + + + + + + + + + + + + + +
covariance() const (defined in rtabmap::OdometryEvent)rtabmap::OdometryEventinline
data() (defined in rtabmap::OdometryEvent)rtabmap::OdometryEventinline
data() const (defined in rtabmap::OdometryEvent)rtabmap::OdometryEventinline
getClassName() constrtabmap::OdometryEventinlinevirtual
getCode() constUEventinline
info() const (defined in rtabmap::OdometryEvent)rtabmap::OdometryEventinline
OdometryEvent() (defined in rtabmap::OdometryEvent)rtabmap::OdometryEventinline
OdometryEvent(const SensorData &data, const Transform &pose, const OdometryInfo &info=OdometryInfo()) (defined in rtabmap::OdometryEvent)rtabmap::OdometryEventinline
pose() const (defined in rtabmap::OdometryEvent)rtabmap::OdometryEventinline
UEvent(int code=0)UEventinlineprotected
velocity() const (defined in rtabmap::OdometryEvent)rtabmap::OdometryEventinline
~OdometryEvent() (defined in rtabmap::OdometryEvent)rtabmap::OdometryEventinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent.html new file mode 100644 index 00000000..e54974ec --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent.html @@ -0,0 +1,439 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryEvent Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 OdometryEvent (const SensorData &data, const Transform &pose, const OdometryInfo &info=OdometryInfo())
 
virtual std::string getClassName () const
 
SensorData & data ()
 
const SensorData & data () const
 
const Transform & pose () const
 
const cv::Mat & covariance () const
 
std::vector< float > velocity () const
 
const OdometryInfo & info () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+
+

Definition at line 39 of file OdometryEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ OdometryEvent() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::OdometryEvent::OdometryEvent ()
+
+inline
+
+ +

Definition at line 42 of file OdometryEvent.h.

+ +
+
+ +

◆ OdometryEvent() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::OdometryEvent::OdometryEvent (const SensorData & data,
const Transform & pose,
const OdometryInfo & info = OdometryInfo() 
)
+
+inline
+
+ +

Definition at line 46 of file OdometryEvent.h.

+ +
+
+ +

◆ ~OdometryEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::OdometryEvent::~OdometryEvent ()
+
+inlinevirtual
+
+ +

Definition at line 66 of file OdometryEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::OdometryEvent::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 67 of file OdometryEvent.h.

+ +
+
+ +

◆ data() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
SensorData & rtabmap::OdometryEvent::data ()
+
+inline
+
+ +

Definition at line 69 of file OdometryEvent.h.

+ +
+
+ +

◆ data() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
const SensorData & rtabmap::OdometryEvent::data () const
+
+inline
+
+ +

Definition at line 70 of file OdometryEvent.h.

+ +
+
+ +

◆ pose()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::OdometryEvent::pose () const
+
+inline
+
+ +

Definition at line 71 of file OdometryEvent.h.

+ +
+
+ +

◆ covariance()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::OdometryEvent::covariance () const
+
+inline
+
+ +

Definition at line 72 of file OdometryEvent.h.

+ +
+
+ +

◆ velocity()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< float > rtabmap::OdometryEvent::velocity () const
+
+inline
+
+ +

Definition at line 73 of file OdometryEvent.h.

+ +
+
+ +

◆ info()

+ +
+
+ + + + + +
+ + + + + + + +
const OdometryInfo & rtabmap::OdometryEvent::info () const
+
+inline
+
+ +

Definition at line 89 of file OdometryEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.map new file mode 100644 index 00000000..7099f608 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.md5 new file mode 100644 index 00000000..60781ef8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.md5 @@ -0,0 +1 @@ +29c8a5c1613a8565348ba1efc5a88b3d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0e2936ab53dd9d1697df6997a64e76047cdcb4 GIT binary patch literal 4339 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__inherit__graph.md5 new file mode 100644 index 00000000..60781ef8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__inherit__graph.md5 @@ -0,0 +1 @@ +29c8a5c1613a8565348ba1efc5a88b3d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0e2936ab53dd9d1697df6997a64e76047cdcb4 GIT binary patch literal 4339 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryF2F Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryF2F, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getRefFrame() const (defined in rtabmap::OdometryF2F)rtabmap::OdometryF2Finline
getType()rtabmap::OdometryF2Finlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryF2F(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryF2F)rtabmap::OdometryF2F
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryF2Fvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryF2F() (defined in rtabmap::OdometryF2F)rtabmap::OdometryF2Fvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F.html new file mode 100644 index 00000000..237e08f8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F.html @@ -0,0 +1,293 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryF2F Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryF2F Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryF2F:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryF2F:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryF2F (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
const Signature & getRefFrame () const
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 38 of file OdometryF2F.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryF2F::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getRefFrame()

+ +
+
+ + + + + +
+ + + + + + + +
const Signature & rtabmap::OdometryF2F::getRefFrame () const
+
+inline
+
+ +

Definition at line 46 of file OdometryF2F.h.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryF2F::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 48 of file OdometryF2F.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.map new file mode 100644 index 00000000..ba55bd28 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.md5 new file mode 100644 index 00000000..d4da40ca --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.md5 @@ -0,0 +1 @@ +b6a1fbb74d85d805a228e95ab8dac605 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a5066c92ccb7dff3351a7ee72424fa2269a60d GIT binary patch literal 5204 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 b8`@~)qX~ak&dh<^A3`3f>cY#EtzQ2doN)t~ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.map new file mode 100644 index 00000000..ba55bd28 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.md5 new file mode 100644 index 00000000..d4da40ca --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.md5 @@ -0,0 +1 @@ +b6a1fbb74d85d805a228e95ab8dac605 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2F__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a5066c92ccb7dff3351a7ee72424fa2269a60d GIT binary patch literal 5204 zcmcgw_dA^bwjEt`5>YauMi-++FJYAE#1UU5TGS9VdQ0>eL=e3tVMvVLB6=BwMDN|G ziB6P3oX^~I?l1QbxQ~bNyfg2-d+*QMYpuOw^>x)L$(YF?5D4WX4Y(nA{R)0vNr}PV zEBrP)@Iq{(r4EN&<9_m+k;xFqts9Tv4~_h?cXIrVj3!xnTKC!qmMZ#sIbzu2@;Tmm z8>VzeeeBw4C~`JL)Tz<@Rzw$}9%VtLRd2>i)XAf5Uu)W=aJjlD+aid6;*~^(aWtqB z!F?DbtZ8V7?bjz2dCMs%dPQMUbAy&%X}+P07rSW}yUk5_VeM8hMhfEacB^!{7oRA* zy1E*?pbYjDA{1(Fe!1mm`<>L)>LXEW8mjJ42DHZ<1E*_rJ1jyMc|q5PO{x*GN%lQj zj%H>4!beP?l!iP!JXD*baw8O?KsQ8XWLuxWlEnscku$3zA|e_(Iuf-Ak%uKl9HOFh zIyyQ&^r;NCtaiY6>H zjP+d%X82-^>Zr2o-^czg|5#kyJ64t3J1V1wL9hDz`xm27;1LGM;$qT=4^^RI2x@+NJ4^{b!(NVZNl?6?df&gSXE)?<|Y<+QU(tRQ2>Dt&CMYKPj{`a|6ZM) zVG>0genO%00k_;*&bh0qtJ{y{$DdfLDk(u)E_P-2gC?OzM|s!K(ITDBBAqOKQ&Tco zSy{(gQ>a1^V@5`XyRUB#I{wZdtPWg5TN`d_$}E-82`Y$-Q$9y!M-~$FXZ*<-sMYY; zSVT+=>Gs^$n;c1`q1e$piUfnbN^dW(a1E}GBu@2+2dSF(CQxS4pFVN<1q4tHiWhM` zc;M4n=Q``i3yPN<9!{_`Tc0>GGQuk_pL2P6>3F(3pOTxa3kna1dt=a)ntFQ3ni}zd z>#Nhgg@xRzs;c9e%G%mO`M?u>O-(Y?)8@>}tE)#SWAZi848-5d4aHH(#UPcVjX~sB zuMI;uoG?c|@Vx?dlM~$fp+8NS+%-Xb{o7uPmV$zU@>TBE;h`tKQb|ck@a`ioFR=qT zy}aNPCR*C=uCAf&>FTXG;g)<%PvR(oNsJUCA9VIMCZ^79Q5W3oy*|Js^YYg%e?Pw= zx6lhSTx|k_g5>-I14sLkdHC+#i{#+sbn1+v1esi%xQ5$~1qzm1d{g5{ig^_(&ic8=X;t?TpMohwP>N$cn1<8x~Jy@J6w^}iPi*m0R}{Fla; zac9q$FX<66I5itQvtQ+ajg|RaK%`&_WT1xm#Lk_h}*g z0s>-;{qyrV3;r7{pHZlLxf@&SKeCkn@${^+@{Ck|C^z`K`;nFwr1i<LuGv^A|oRmotz%Jx(b%Y!4*Btny_vq;8rh=@L zloEex$Nap7uwJ1dlTcA~G>M#?9EjYh#E1-{Ut$#SveBT#sG_b;&A@=Rw6qlFyK7$H zve4uo!0eyfqZf*O%q}c0ev3JtxVyXiZU36e?#28!-{I-$*u~3r$$(6N-sZs5rM0zj zbvMc89?zZxmY9SDHDzV|`<5*T(4-3esLHNq-1RkM)IU71!tlD98a6>eimV5&%I4-! z7Z;cP^3W^t>1nL+r$6G3z5$1;eOGm}vhvI#7o0E{O4HX^ZWPDdIJCuDj$dQ3k!*Se0(5bfIA9Yq=M_~>q&Y%{4nv75$W^Z z*A;(!gZC=UYaD5zP^kOK_CL5rGieRE%HJJy6nUZhWP4|)z=%K6TUC{a`Ock#2{SkA zweP8PaNrwBJ!7&d3Q^plYFXTudlQV}Cu%&1P?*Swl~c z;a5sZiq&kLt4Xah{i>(5{g2GZtx+Tfq$vPVLXIvAhn~mjFD@>!K7IOB%5Ojat?yDB z-aw|r^EM`5HqdT39$Q^sUpe2%Q-Ai1i-Uv1{R;bXYIc@jQ&#P&-2)0*B;j-+klHfz zO2Wq0HoCCS1aT)>U0t11LE$bfE$vjLEeZIZN|$NTv-5LyaC{*lAsv_&o@)Ca9e}df z()wxX=_3h9sMy%ptW1~@wAD>bP-$st<@tpz$pt@x){FVQihw`PXJ=<@yu74%czAxh zUpL-nXH!6EV&P}2$$IYlOAiSN3EO68?=Z)!IjV5cEgx@<;@(->+oJ~bnl0-~h1AQt zt?Lr?CNh$!JqcWD%>zvTBMuvW@NuuXJ0>R?K=_>_;x8C~ zqL03(3K*H0&GNK<{`>}jskHtaa1NE7on4Y<;fKsj=H{whpUkYREucn5mX?ZE*+oU% z-vIrH>DD;U3%qsr01Gyg)ti?jOG2@@iM{ zg}O*iVPRn$aZ;YR!sN!00(xTe+zu22-Ejg8tE7q97>A@nCDjrgR-+ob^rCkneS#4ZB}+n6{P7Ip^!cG55(cUI~&2bF5}$J z5LZYY)P_^o#`&A1I+2yu$X-S{5r$0|UiqtVn}7#%D;VjV5(yo`smvfmOd?NiSUekq zFs+J45LR0hi!XN0XrRDKjwf}sH$C0w5p(y9EUMCqn^nL&hIr_pH6;eKe~4{Oo=SPg zO$LH&1OKOEDyZ77b#yAKt2_5w=Gz(Rz#CyX^6zg_XXW}sNhsA}^9-y!G~g-(*{Mb~ zbUeV>_D-sF-aDyOr||iQHf@FPO_|DdUDo$VKPW^JR+>boa=(=*08h1(x-r2h?#Dn# zRgNghzdThww|B=>kZN@w8lt8L`Kjp_6}iUgLs1I{U@zF^#%-GRtO?9VVdTER}a!n zd*H8stWs1*|F0XmYwsB~-KqT(7WjWp=>PRY!GDLDJ)%!z6 zPR@MxH)w-1($gDS9CGbKQ=6Nb)GUYLpCnk{#zL6BwW8OTJEMV_*-c(7@3Rw~E+(^q zA#`kQKeh+e{Re6P%>yBj%)`aS#>3MC+*XEu8BMCHqPM|U@oVaeFoyWE&cba7P`T_UUEM1QhoAuu}(BS1PNBqZKy zaJhSW;`ex{G=^{?GW!OzrNeuBH6kJ-g%^vZI-g>WM2|u{Y2Dl!pq{j04F8q$MRK#kgIs ziwsvTfIvX3VH?-2nNZzDys(&|p`kE9P}(^%^uX{z^dCRAbw>mw78-wvOiiVqn>)T1 z2mm4tTqU<$B@mVeF0jkQBB0U>&4Jc-c0?%SINP2Cc4=v*Z$3M8zbL$~G(_I?>E*}} z@$m4Zynk==J%w+{|1N(j84(eY-~JLFNQRb$C4O$s94HoPxU}nx`1VvK0bMNI@%K#a zbE&`+!R_sBeKWJT+UJut!yi2sf^ZQpFE5YtL%Z$yZ}obnABUGN&yP$hZ6dAQApjE{0_9Dw zadHOGwSRmJ2Pr17$P$~GnH7&apJB1T<~xBs;^OA+7#X316GCF*;yQuWM9-gsazYhD zpsud2Z#4^nmzipODPTXC8{gC<_dj+}US8f~?K}PUVk_(I+qWT&6o2bmuP8~V??O`) z-wRvb52~xE2+PZ36%`XBd5IE%&3G0T6yO~k9CT2IY~=W2<;W(>EChlk9L1$PS4l-h zMJt~5(XqD{6%m8afJgG)zmG0ZiG~H9xL9*(i`e^+JDK&Mp zF0vCGP*QSo_(opn0=wFq#^WLVQzjtDJ3PM zxR_Vatd0U60nB|tnemtI*qb~sw*|Sr{ z6pcHM>T0p3=H@@YXAWtzA=jpui4+|%u1P|O$_FsXZH3Tz&x(4t@ZZy(j+7`eg(b^81p4C zf&-f!(`_Snv0dFc!j`J34h5<3KrRo{TDw5Ixu5M@1KD`Uk+cMctll3#R9##Ixpgul z9wl?LgUKQ`HWml^nb}#KqOiB1P(nBhz0!4~)U=iigbxNklLmKoaEo|p3!oX>^TV~X zrEqFocLRFPZ){|~J|7I-Kbdvw92uz^WCSzl@$6Gz#i>|i2+7IG2eKsHhGe{DSQ4Pp zuK^Za<{D^0B9O*h88P79jTfWdsP0jGHNV^DF^64HS0gYmHYNt`V7)`?-Tc|iz~I## z$rt&6YCOL}!3|v~vwHWv1$h%QGfp`11jWekRMlZ=7_uC7i3=mD?RG+yHQM1EPBu89K)F)@y6CEXU_ zK=eTEaD`dkf{nEh;FJxtAP#nO-+Za*VhM+bhdT_5PZ^1biJ75V`OiCZ0MSW%tsjf{ z+u7X%Z9!RfB*9D>a<)tYW?jG-tYC2E6%>SfcvSA!KsT`kLsL^RCnqPYV0b@C%ssyf zarzL*P%P%#yAfKhn2jPQ2IN!kJ=E(YHns&sb z?*qeq`Cr5RUmFCh&h{1E&2W*0t-aun3fvq1Ey~Ez;OWK13M&{|Om5I2%aj1@-~O|P b8`@~)qX~ak&dh<^A3`3f>cY#EtzQ2doN)t~ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M-members.html new file mode 100644 index 00000000..68b4c55a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M-members.html @@ -0,0 +1,131 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + + +
+
rtabmap::OdometryF2M Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryF2M, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getLastFrame() const (defined in rtabmap::OdometryF2M)rtabmap::OdometryF2Minline
getMap() const (defined in rtabmap::OdometryF2M)rtabmap::OdometryF2Minline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryF2Minlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryF2M(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryF2M)rtabmap::OdometryF2M
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryF2Mvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryF2M() (defined in rtabmap::OdometryF2M)rtabmap::OdometryF2Mvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M.html new file mode 100644 index 00000000..06dcd59e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryF2M Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryF2M Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryF2M:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryF2M:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryF2M (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
const Signature & getMap () const
 
const Signature & getLastFrame () const
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 44 of file OdometryF2M.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryF2M::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getMap()

+ +
+
+ + + + + +
+ + + + + + + +
const Signature & rtabmap::OdometryF2M::getMap () const
+
+inline
+
+ +

Definition at line 51 of file OdometryF2M.h.

+ +
+
+ +

◆ getLastFrame()

+ +
+
+ + + + + +
+ + + + + + + +
const Signature & rtabmap::OdometryF2M::getLastFrame () const
+
+inline
+
+ +

Definition at line 52 of file OdometryF2M.h.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryF2M::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 54 of file OdometryF2M.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.map new file mode 100644 index 00000000..5c04be24 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.md5 new file mode 100644 index 00000000..104290b4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.md5 @@ -0,0 +1 @@ +d97cb536a83f9f703ffb2a7f26265687 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d3154dbe776bf1a6c5053be51e3fff25ac6319a5 GIT binary patch literal 5380 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 mOP)A4Sz)b&Q0tAxxdi<4=l9B~B zg4*~wwpzFRQgEQ;2LSQaI5Ns`;+tudASaPPM5wSWWRQ}l(Gd}3MKm*DC3YN{Eo!a!;B zhOlt=@^C38h%&q|!KB4>AYhD|zlb9*=*$;nVFjU#Ss*rGuKpG5dWEs(`)=pbTs0{QA11M}Yd!-(wIE zXMjQiH38ilUS59d@< z`I*4KfeLks*DtPF5VNGp+x+(?Dx;^rpW*w`>`Q7R(HO1HTG;{E&gB0*;-3P&tdSUx{cY5k_lG``C^4TtHNmx_7UAauN+9>Za5xG; zWieiDy|l7|u(9D=_?Bhq;UvT2;OJOo)k}ABx*60BW=q1{T-fK&_fK|*ANw3kd7C>r zPVp<_@%YmT6bgmKxA>a_@nIFSk#=PRlLe@qazKC#AY$nI_ctL+2WwL!BaF_iM+?*B z($ES&JrMoFM5t=sAJC4->*(tKGcZ6SBqU^<3!?1%@^aVpiM!$w56w`j zAXu{-Q%wK{6&01~bj=obhO1X!ie|_kkhKDZY;SK5Kt9*jCINPml28PM_hN_{*D|mwQ~J z`SRsWCP96XV$@fDLnEUqu+P%G-37Nf_41IyfV+b2th^KDYYeJ1PsA`hRf8`qev(TP(xAQEuA$ zQJ!CH(ETr|1xi-8aDFY+%9A+u4}71nWRU&=M1 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__inherit__graph.md5 new file mode 100644 index 00000000..104290b4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__inherit__graph.md5 @@ -0,0 +1 @@ +d97cb536a83f9f703ffb2a7f26265687 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryF2M__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d3154dbe776bf1a6c5053be51e3fff25ac6319a5 GIT binary patch literal 5380 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 mOP)A4Sz)b&Q0tAxxdi<4=l9B~B zg4*~wwpzFRQgEQ;2LSQaI5Ns`;+tudASaPPM5wSWWRQ}l(Gd}3MKm*DC3YN{Eo!a!;B zhOlt=@^C38h%&q|!KB4>AYhD|zlb9*=*$;nVFjU#Ss*rGuKpG5dWEs(`)=pbTs0{QA11M}Yd!-(wIE zXMjQiH38ilUS59d@< z`I*4KfeLks*DtPF5VNGp+x+(?Dx;^rpW*w`>`Q7R(HO1HTG;{E&gB0*;-3P&tdSUx{cY5k_lG``C^4TtHNmx_7UAauN+9>Za5xG; zWieiDy|l7|u(9D=_?Bhq;UvT2;OJOo)k}ABx*60BW=q1{T-fK&_fK|*ANw3kd7C>r zPVp<_@%YmT6bgmKxA>a_@nIFSk#=PRlLe@qazKC#AY$nI_ctL+2WwL!BaF_iM+?*B z($ES&JrMoFM5t=sAJC4->*(tKGcZ6SBqU^<3!?1%@^aVpiM!$w56w`j zAXu{-Q%wK{6&01~bj=obhO1X!ie|_kkhKDZY;SK5Kt9*jCINPml28PM_hN_{*D|mwQ~J z`SRsWCP96XV$@fDLnEUqu+P%G-37Nf_41IyfV+b2th^KDYYeJ1PsA`hRf8`qev(TP(xAQEuA$ zQJ!CH(ETr|1xi-8aDFY+%9A+u4}71nWRU&=M1 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryFLOAM Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryFLOAM, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryFLOAMinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryFLOAM(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryFLOAM)rtabmap::OdometryFLOAM
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryFLOAMvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryFLOAM() (defined in rtabmap::OdometryFLOAM)rtabmap::OdometryFLOAMvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM.html new file mode 100644 index 00000000..e0ddbb6e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM.html @@ -0,0 +1,264 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryFLOAM Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryFLOAM Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryFLOAM:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryFLOAM:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryFLOAM (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 38 of file OdometryFLOAM.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryFLOAM::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryFLOAM::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 45 of file OdometryFLOAM.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.map new file mode 100644 index 00000000..dd0734af --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.md5 new file mode 100644 index 00000000..8e0c7057 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.md5 @@ -0,0 +1 @@ +7de2e4e330b04aa3c7df4c067b7627b0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..80cc7e3bfa85740cbd61f052039fb09ea8d0d5b8 GIT binary patch literal 5482 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.map new file mode 100644 index 00000000..dd0734af --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.md5 new file mode 100644 index 00000000..8e0c7057 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.md5 @@ -0,0 +1 @@ +7de2e4e330b04aa3c7df4c067b7627b0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFLOAM__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..80cc7e3bfa85740cbd61f052039fb09ea8d0d5b8 GIT binary patch literal 5482 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis-members.html new file mode 100644 index 00000000..59416dab --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryFovis Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryFovis, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryFovisinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryFovis(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryFovis)rtabmap::OdometryFovis
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryFovisvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryFovis() (defined in rtabmap::OdometryFovis)rtabmap::OdometryFovisvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis.html new file mode 100644 index 00000000..b0a5ddde --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis.html @@ -0,0 +1,264 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryFovis Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryFovis Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryFovis:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryFovis:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryFovis (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 43 of file OdometryFovis.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryFovis::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryFovis::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 50 of file OdometryFovis.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.map new file mode 100644 index 00000000..6cb918f7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.md5 new file mode 100644 index 00000000..a1b8e5dd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.md5 @@ -0,0 +1 @@ +ca43bf3fc11a38839e658107945b934b \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..95b794c18829229531d65008a6712327234c862a GIT binary patch literal 5369 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__inherit__graph.md5 new file mode 100644 index 00000000..a1b8e5dd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__inherit__graph.md5 @@ -0,0 +1 @@ +ca43bf3fc11a38839e658107945b934b \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryFovis__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..95b794c18829229531d65008a6712327234c862a GIT binary patch literal 5369 zcmchbhc}#CxW)<5!qH2}5HVqtMDIbOi{7I|@7-aLFiMcc+Q$*7MD?fkvEr<@BL-sSH}A3(*@5!$UmM2lI|lzRd)?}qO`SM zD2qKZ3MJnkz5!DZwA?wk=pK%}!OTc}fAb*6wa>4>ui)oF-p`OxL_v4-!&Ioozppay zAw8q!fbID??ljlWdQI@-rVAqh(Ppd@^70RV zt`!x9n_4}Ko}GQdbkDq}FOkjF#ibVh1PyOV9FNg{IXbE{F*)h#?p_avDecsc$=jbE zZi-1rq-JFetoFvAU@B@*_@!Xp`}Z5*L5SwXK9?S7qz;mcpFf`2Dk$RF!3HfG+l|hN z_nPCI{vHbrRNkJ8pM}VeA3vHtWxj7|v)Byp>Fup^o#akX<=UIfxg#f+ zZ+&%&7I;z{PQ@l+BgQ({7A%RyVg;Tyr~m%#5r0~Zb~4RhM&R?OB?zq$IAaOVc?Wn) zdwan@{HCet={-l=3udiB!n$%ehUJh0sz;9=Ra&)~%jwpj4~F<_XqcJ%w`w|c{QT-w z@)8php*%eF;3v_s2TH1{sx?w)3;3j@zZyK|KL1Eo&{0&pc6PLFIGl0MV#Yn8d45wq z1BA!1KMBHwD|!FEE(mKEMbp-|+W^)D6}UB1RjfcjOGkIdz`#J++&o8JTbnU_w%$2e zT~m`D%$7!xEF~p{b7EqmCxVEyM^ms38WIxHGhJaCO`|x4M&EcyOiUcJz0eq+tZ?}x z>gCHgWMSxh@dE(?t>5#XG=I<4s~sO7$J`Wkis2~?F$lr-GOtQ@oFwiY9vW@6PD@17 z*j=8V*iDxkn=}UQeB%{kO>}W}-GpmjUhIb5cxYr|5_fbIK+D9$4T26m+Fce*O-qYz zX=%w4ag3u;i~%#JWoN&?F_Oz8e|7GMJzDU-QDwq^iK_{tLhW*=X*@XmsztD1b zqG;S_DrsY5V>LYj{P5_9Y2QI=88))9v0c9%7av~}T%d!b=Lp%0pjkx{E`M^*G%v`^ zuWn^S@JNe%IYI@()8etq26-Aad2#rDo5CuJZ77LQ;k*gsYr%u5GUJ43|sr{V= z?^f(fG75?h^P?vRKd;{w5f$xSY734oEG!gap>#XR5qF<*m~9EH+1uZz8yOjKI{`Uy zf2ZRrG+yd#5--?sZU7eg3DnKat(=UEj7ISZ$G)`*r@MQ5K9-i2 zFaZIht*c(a&^H;uK|wThbT5i6&qj-jVF@=y`|PmK`8`k1&O|-u#p3N-yxl*|%QFw* za5w@~bF+b-UgzQFq_4lf(JboKBp6FYnRxpstXz0-&tW~vNbWsgcMb@=KM zN`Z6_Z2L{wJ zTU&#JgSH!AvY8x7so8tFyCZ9Bg@BR--_^!%7m!n;Q_GwwFE-D9jlad>@jTMfO{UqA zkwn~SWn+FV$#*+JV93bH-@JPlm7dNZ;W7L5XH$cS9n)7i*H7lRAds?(3Pb$*`a12c zTVLV@+toch1PBQU^W+iD=%(HFvuYVViv|zdZz$iW=x8cfQkToY^BcdwxIjktmm62W zczN}crTu@=ut|DBd3nhbRlB>X6|@2ZB(k%!2`robjt0Hrj(`1f(J7Q40qI8Q;^no` zhF_`=D#x3G&OjRa`}-G7ZhqbL{}#O4mM0g?l&ESCPdKHcp?RpKMX8w~@TROR_O7Pt z(#J4mgor;9MxpxvOMHV#z-E7KP{5)g;rKY{a_^M_&8=Grjg69UIGp(Ub({>^K?F=H zp`wD{*w{E^e~?E?Mh57_#IBUrCv8-Q-jDud)8y@@w!mGhnJNo47Z(^OC#RUW_#5<= z#^cAU>zURhD+R$jwv#2=%4%x#tgMfXjTvcaX&IQ9%Gbj#4+{TiVj8!0adGjBGDGD4 zjD{LeoW9-1GR)pFdAUU#UyjEpuy3_@oWq)^HNJ2_4kpj)Z0p zIWH(L0LXGYABrVMV_~4NOp6*9yNxUgPCmhqsFFVBNiEySwiIq4$<2^+nzvBc=+Mo^5wG1MY ztB+CFSec_ywts0Ta(CAT?`VFHfKc<>;G8KGZ)+V1aO|L<*_7SY-4Xr5X1c@#48Ixa z$HzkNg}f9NAO{z8$THr1+jAE>Qa#?aC09293#&SIi{bJigCsUzh%?CU7gy>#+O=#V zyTNjz{gwr;i1YtOA?~zCsb3sK)KjyyNHj$LZ+!lXm;Qfl!ksD%K)Jc^>ocs|TM+xH zvC6Rv+cFJp>Uu&3A&v_To^3k_ZEI4}>({9~#U^xfbi-Shx{I5dvU74+D;yErkx1mv z*VmyMTq%~K|8qWEd^cxmtjDlF`aL0iwW#MfJ^&x@%gP34-XypWA%2_?>|*e4{ghsM4Y_ zX)uk4NYBDz7?7kXV6mW`rk_*IGBPrym6c#m>UQhU=B5W-5gebM+BxGV1p;m(NNE&{ z&|9vap6k^uJDeLL<#qexI2ux-w*l_j*&Zfauk!M^`5a|?@cw@+eX zVzqA5e2Pj+fC1`cROR|bKx4px6eO}q+If3ZTeg^89U>I~?3b`Dv7xt2pFNZ22s;<{ zZo_5d+y=96J=;JJ?A{N&kY#^c2ViKdH03?zi!!%R!{hwwol0Lt#`f>}2?n>m+!rBC(5& z{Cs>a?(SS-Vjt1CEHPI)5L!!=PXs8=gUhpBdI&@t@PQ)PQrHy&Hw)|&NV}MrnA`I5 z?BU7sr!fF5Lh&ujZ(xr*&hAIqfL%^2S0WLGl44Ndl$6ZuxVqRqzr=SqfBzi4w!Utb z&kg6$ogNyp$9Rs0OF80z{Q) zKmaibiGhWMtc&Mpj(EIrg-Ka|z_OROH|a0Gy2@!cQ1V8`#`>nFYX1IW1aZZsS0ts? z)f*tyn8;b_>6JiWG6k*K^_Jb;++c!&JTO=cNId-~Phw0e-nX^o$Hh@pU;}{TiYwk* ziKI?VNg;d)yf2SV-bxoK$44n7NJ+u=W5tV_@^Z|}iwPGoWo2bBcXG>IRVQa>eA7$p z;i2-|ai8C_!hlPs4@ifL0FV_rFcvcPy`#QR^8P6wAYb_ya-)q(ej$XDc+{x^!)RaxzULjoWu` z0t3ALwiYLakpaOmVoMIezp z)z#G)HA_`h5)cI7T71_AXhRT)d!xgnqkX_ogohIVI|uB~8t9fykJ7yAC}RQ4l69pF zSzrea7|yZDVNekfIKo=Ul|5O=J%aoj)@`l}w4OJr} z27ry=9AbQKZt(KrEL%3Pdb;Ug#0L&{?0Rwid|fci78vWGprAkNl*BIg*ua2}HL(QE z0wR29R;Yut2mQ`2EG!>RtvQ`B-n=;o%ma|*2PbQ3h#6CJ^P!)GVLG65c6N49(5o98 z0fv(YxwgxG{a><0k+8V^pfU7Qw4u5AV;>)(rKKfIdr{Ht`&O;$R#xoK+X}Kpo$2W4 zK5tGUrGt+Izyg7Py#gYGBjtPl{ykVwJ!|VRaP_8afB;~5BSFitfMzSI0FFEi#trB= zu)?3m$FVOxog5r!*w{2RHRGoxwlEkMZ*S+mgqtRfYKg49;CR6m*d5SxdV2cG_wQYC zjQl|9Qdv!df~0_80$s8dVu?vkMwXPQJ|zX*0Jeia`6@0h4#Zj*$Ssa{Zn>REtKh*+ zZ*Om)8-GR%gc1scmKy$3V9&tL?gbb4J|A*%jQs&D8t(B+z$AT15O`MqW@a*9US5LkQwj@{TUum?GX90}`9VFdt*y0= z*H?~N?`%Hz^J%f@2$cizV4I4b-7W=g3~d#hm}&Jq_VsHTi&vsHz;ZD#GvjwNgP~=b z07tG)#==+>LeIx!XuTYi5&C0H*NBLAvvzf + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryInfo Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryInfo, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
copyWithoutData() const (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
cornerInliers (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
distanceTravelled (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
features (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
gravityPitchError (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
gravityRollError (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
guess (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
guessVelocity (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
interval (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
keyFrameAdded (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localBundleAvgInlierDistance (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localBundleConstraints (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localBundleMaxKeyFramesForInlier (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localBundleModels (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localBundleOutliers (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localBundleOutliersPerCam (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localBundlePoses (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localBundleTime (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localKeyFrames (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localMap (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localMapSize (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localScanMap (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
localScanMapSize (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
lost (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
memoryUsage (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
newCorners (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
OdometryInfo() (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
refCorners (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
reg (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
stamp (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
statistics(const Transform &pose=Transform()) (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
timeDeskewing (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
timeEstimation (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
timeParticleFiltering (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
transform (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
transformFiltered (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
transformGroundTruth (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
type (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
words (defined in rtabmap::OdometryInfo)rtabmap::OdometryInfo
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo.html new file mode 100644 index 00000000..54747848 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo.html @@ -0,0 +1,775 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryInfo Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryInfo Class Reference
+
+
+
+Collaboration diagram for rtabmap::OdometryInfo:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + +

+Public Member Functions

+OdometryInfo copyWithoutData () const
 
+std::map< std::string, float > statistics (const Transform &pose=Transform())
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

bool lost
 
RegistrationInfo reg
 
int features
 
int localMapSize
 
int localScanMapSize
 
int localKeyFrames
 
int localBundleOutliers
 
int localBundleConstraints
 
float localBundleTime
 
std::map< int, Transform > localBundlePoses
 
std::map< int, std::vector< CameraModel > > localBundleModels
 
float localBundleAvgInlierDistance
 
int localBundleMaxKeyFramesForInlier
 
std::vector< int > localBundleOutliersPerCam
 
bool keyFrameAdded
 
float timeDeskewing
 
float timeEstimation
 
float timeParticleFiltering
 
double stamp
 
double interval
 
Transform transform
 
Transform transformFiltered
 
Transform transformGroundTruth
 
Transform guessVelocity
 
Transform guess
 
float distanceTravelled
 
int memoryUsage
 
double gravityRollError
 
double gravityPitchError
 
int type
 
std::multimap< int, cv::KeyPoint > words
 
std::map< int, cv::Point3f > localMap
 
LaserScan localScanMap
 
std::vector< cv::Point2f > refCorners
 
std::vector< cv::Point2f > newCorners
 
std::vector< int > cornerInliers
 
+

Detailed Description

+
+

Definition at line 45 of file OdometryInfo.h.

+

Member Data Documentation

+ +

◆ lost

+ +
+
+ + + + +
bool rtabmap::OdometryInfo::lost
+
+ +

Definition at line 52 of file OdometryInfo.h.

+ +
+
+ +

◆ reg

+ +
+
+ + + + +
RegistrationInfo rtabmap::OdometryInfo::reg
+
+ +

Definition at line 53 of file OdometryInfo.h.

+ +
+
+ +

◆ features

+ +
+
+ + + + +
int rtabmap::OdometryInfo::features
+
+ +

Definition at line 54 of file OdometryInfo.h.

+ +
+
+ +

◆ localMapSize

+ +
+
+ + + + +
int rtabmap::OdometryInfo::localMapSize
+
+ +

Definition at line 55 of file OdometryInfo.h.

+ +
+
+ +

◆ localScanMapSize

+ +
+
+ + + + +
int rtabmap::OdometryInfo::localScanMapSize
+
+ +

Definition at line 56 of file OdometryInfo.h.

+ +
+
+ +

◆ localKeyFrames

+ +
+
+ + + + +
int rtabmap::OdometryInfo::localKeyFrames
+
+ +

Definition at line 57 of file OdometryInfo.h.

+ +
+
+ +

◆ localBundleOutliers

+ +
+
+ + + + +
int rtabmap::OdometryInfo::localBundleOutliers
+
+ +

Definition at line 58 of file OdometryInfo.h.

+ +
+
+ +

◆ localBundleConstraints

+ +
+
+ + + + +
int rtabmap::OdometryInfo::localBundleConstraints
+
+ +

Definition at line 59 of file OdometryInfo.h.

+ +
+
+ +

◆ localBundleTime

+ +
+
+ + + + +
float rtabmap::OdometryInfo::localBundleTime
+
+ +

Definition at line 60 of file OdometryInfo.h.

+ +
+
+ +

◆ localBundlePoses

+ +
+
+ + + + +
std::map<int, Transform> rtabmap::OdometryInfo::localBundlePoses
+
+ +

Definition at line 61 of file OdometryInfo.h.

+ +
+
+ +

◆ localBundleModels

+ +
+
+ + + + +
std::map<int, std::vector<CameraModel> > rtabmap::OdometryInfo::localBundleModels
+
+ +

Definition at line 62 of file OdometryInfo.h.

+ +
+
+ +

◆ localBundleAvgInlierDistance

+ +
+
+ + + + +
float rtabmap::OdometryInfo::localBundleAvgInlierDistance
+
+ +

Definition at line 63 of file OdometryInfo.h.

+ +
+
+ +

◆ localBundleMaxKeyFramesForInlier

+ +
+
+ + + + +
int rtabmap::OdometryInfo::localBundleMaxKeyFramesForInlier
+
+ +

Definition at line 64 of file OdometryInfo.h.

+ +
+
+ +

◆ localBundleOutliersPerCam

+ +
+
+ + + + +
std::vector<int> rtabmap::OdometryInfo::localBundleOutliersPerCam
+
+ +

Definition at line 65 of file OdometryInfo.h.

+ +
+
+ +

◆ keyFrameAdded

+ +
+
+ + + + +
bool rtabmap::OdometryInfo::keyFrameAdded
+
+ +

Definition at line 66 of file OdometryInfo.h.

+ +
+
+ +

◆ timeDeskewing

+ +
+
+ + + + +
float rtabmap::OdometryInfo::timeDeskewing
+
+ +

Definition at line 67 of file OdometryInfo.h.

+ +
+
+ +

◆ timeEstimation

+ +
+
+ + + + +
float rtabmap::OdometryInfo::timeEstimation
+
+ +

Definition at line 68 of file OdometryInfo.h.

+ +
+
+ +

◆ timeParticleFiltering

+ +
+
+ + + + +
float rtabmap::OdometryInfo::timeParticleFiltering
+
+ +

Definition at line 69 of file OdometryInfo.h.

+ +
+
+ +

◆ stamp

+ +
+
+ + + + +
double rtabmap::OdometryInfo::stamp
+
+ +

Definition at line 70 of file OdometryInfo.h.

+ +
+
+ +

◆ interval

+ +
+
+ + + + +
double rtabmap::OdometryInfo::interval
+
+ +

Definition at line 71 of file OdometryInfo.h.

+ +
+
+ +

◆ transform

+ +
+
+ + + + +
Transform rtabmap::OdometryInfo::transform
+
+ +

Definition at line 72 of file OdometryInfo.h.

+ +
+
+ +

◆ transformFiltered

+ +
+
+ + + + +
Transform rtabmap::OdometryInfo::transformFiltered
+
+ +

Definition at line 73 of file OdometryInfo.h.

+ +
+
+ +

◆ transformGroundTruth

+ +
+
+ + + + +
Transform rtabmap::OdometryInfo::transformGroundTruth
+
+ +

Definition at line 74 of file OdometryInfo.h.

+ +
+
+ +

◆ guessVelocity

+ +
+
+ + + + +
Transform rtabmap::OdometryInfo::guessVelocity
+
+ +

Definition at line 75 of file OdometryInfo.h.

+ +
+
+ +

◆ guess

+ +
+
+ + + + +
Transform rtabmap::OdometryInfo::guess
+
+ +

Definition at line 76 of file OdometryInfo.h.

+ +
+
+ +

◆ distanceTravelled

+ +
+
+ + + + +
float rtabmap::OdometryInfo::distanceTravelled
+
+ +

Definition at line 77 of file OdometryInfo.h.

+ +
+
+ +

◆ memoryUsage

+ +
+
+ + + + +
int rtabmap::OdometryInfo::memoryUsage
+
+ +

Definition at line 78 of file OdometryInfo.h.

+ +
+
+ +

◆ gravityRollError

+ +
+
+ + + + +
double rtabmap::OdometryInfo::gravityRollError
+
+ +

Definition at line 79 of file OdometryInfo.h.

+ +
+
+ +

◆ gravityPitchError

+ +
+
+ + + + +
double rtabmap::OdometryInfo::gravityPitchError
+
+ +

Definition at line 80 of file OdometryInfo.h.

+ +
+
+ +

◆ type

+ +
+
+ + + + +
int rtabmap::OdometryInfo::type
+
+ +

Definition at line 82 of file OdometryInfo.h.

+ +
+
+ +

◆ words

+ +
+
+ + + + +
std::multimap<int, cv::KeyPoint> rtabmap::OdometryInfo::words
+
+ +

Definition at line 85 of file OdometryInfo.h.

+ +
+
+ +

◆ localMap

+ +
+
+ + + + +
std::map<int, cv::Point3f> rtabmap::OdometryInfo::localMap
+
+ +

Definition at line 86 of file OdometryInfo.h.

+ +
+
+ +

◆ localScanMap

+ +
+
+ + + + +
LaserScan rtabmap::OdometryInfo::localScanMap
+
+ +

Definition at line 87 of file OdometryInfo.h.

+ +
+
+ +

◆ refCorners

+ +
+
+ + + + +
std::vector<cv::Point2f> rtabmap::OdometryInfo::refCorners
+
+ +

Definition at line 90 of file OdometryInfo.h.

+ +
+
+ +

◆ newCorners

+ +
+
+ + + + +
std::vector<cv::Point2f> rtabmap::OdometryInfo::newCorners
+
+ +

Definition at line 91 of file OdometryInfo.h.

+ +
+
+ +

◆ cornerInliers

+ +
+
+ + + + +
std::vector<int> rtabmap::OdometryInfo::cornerInliers
+
+ +

Definition at line 92 of file OdometryInfo.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.map new file mode 100644 index 00000000..0fab7a78 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.md5 new file mode 100644 index 00000000..ee636992 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.md5 @@ -0,0 +1 @@ +1dfb656980ce4742b00af94c04e7f617 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryInfo__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ea8c43bfdf6337ecdbc0d1233eeefcc49a7958 GIT binary patch literal 19487 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 AhyVZp literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM-members.html new file mode 100644 index 00000000..76a3e720 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryLIOSAM Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryLIOSAM, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::OdometryLIOSAMinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryLIOSAMinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryLIOSAM(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryLIOSAM)rtabmap::OdometryLIOSAM
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryLIOSAMvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryLIOSAM() (defined in rtabmap::OdometryLIOSAM)rtabmap::OdometryLIOSAMvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM.html new file mode 100644 index 00000000..f2ed63e5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM.html @@ -0,0 +1,294 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryLIOSAM Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryLIOSAM Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryLIOSAM:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryLIOSAM:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryLIOSAM (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
virtual bool canProcessAsyncIMU () const
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 42 of file OdometryLIOSAM.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryLIOSAM::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryLIOSAM::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 49 of file OdometryLIOSAM.h.

+ +
+
+ +

◆ canProcessAsyncIMU()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryLIOSAM::canProcessAsyncIMU () const
+
+inlinevirtual
+
+
Returns
True if the backend processes IMU asynchronously outside process().
+ +

Reimplemented from rtabmap::Odometry.

+ +

Definition at line 50 of file OdometryLIOSAM.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.map new file mode 100644 index 00000000..b1e4b2c2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.md5 new file mode 100644 index 00000000..f0179ed7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.md5 @@ -0,0 +1 @@ +d267fde7794d827222fe03ffddc4d480 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..671a831285efcb0075aa537e2382f9413f8c2334 GIT binary patch literal 5590 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.map new file mode 100644 index 00000000..b1e4b2c2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.md5 new file mode 100644 index 00000000..f0179ed7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.md5 @@ -0,0 +1 @@ +d267fde7794d827222fe03ffddc4d480 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLIOSAM__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..671a831285efcb0075aa537e2382f9413f8c2334 GIT binary patch literal 5590 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM-members.html new file mode 100644 index 00000000..58e84233 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryLOAM Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryLOAM, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryLOAMinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryLOAM(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryLOAM)rtabmap::OdometryLOAM
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryLOAMvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryLOAM() (defined in rtabmap::OdometryLOAM)rtabmap::OdometryLOAMvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM.html new file mode 100644 index 00000000..287f67ac --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM.html @@ -0,0 +1,264 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryLOAM Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryLOAM Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryLOAM:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryLOAM:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryLOAM (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 43 of file OdometryLOAM.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryLOAM::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryLOAM::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 50 of file OdometryLOAM.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.map new file mode 100644 index 00000000..f5aecfe7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.md5 new file mode 100644 index 00000000..9e07e9d1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.md5 @@ -0,0 +1 @@ +d8cb4f0fa094697021747e72386a6073 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..694bc2c8925303b2e79a994d4c5e38b2a2db1328 GIT binary patch literal 5383 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__inherit__graph.md5 new file mode 100644 index 00000000..9e07e9d1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__inherit__graph.md5 @@ -0,0 +1 @@ +d8cb4f0fa094697021747e72386a6073 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryLOAM__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..694bc2c8925303b2e79a994d4c5e38b2a2db1328 GIT binary patch literal 5383 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryMSCKF Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryMSCKF, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::OdometryMSCKFinlinevirtual
canProcessRawImages() constrtabmap::OdometryMSCKFinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryMSCKFinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryMSCKF(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryMSCKF)rtabmap::OdometryMSCKF
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryMSCKFvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryMSCKF() (defined in rtabmap::OdometryMSCKF)rtabmap::OdometryMSCKFvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF.html new file mode 100644 index 00000000..d1230676 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF.html @@ -0,0 +1,324 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryMSCKF Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryMSCKF Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryMSCKF:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryMSCKF:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryMSCKF (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 38 of file OdometryMSCKF.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryMSCKF::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryMSCKF::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 45 of file OdometryMSCKF.h.

+ +
+
+ +

◆ canProcessRawImages()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryMSCKF::canProcessRawImages () const
+
+inlinevirtual
+
+
Returns
True if the backend can process unrectified camera images.
+ +

Reimplemented from rtabmap::Odometry.

+ +

Definition at line 46 of file OdometryMSCKF.h.

+ +
+
+ +

◆ canProcessAsyncIMU()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryMSCKF::canProcessAsyncIMU () const
+
+inlinevirtual
+
+
Returns
True if the backend processes IMU asynchronously outside process().
+ +

Reimplemented from rtabmap::Odometry.

+ +

Definition at line 47 of file OdometryMSCKF.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.map new file mode 100644 index 00000000..bad9263d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.md5 new file mode 100644 index 00000000..a211e131 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.md5 @@ -0,0 +1 @@ +9b62089d96b53dc6a9437b74fe56d309 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e39900c0bf5aa1cae852514a51d432f5a7749235 GIT binary patch literal 5752 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.map new file mode 100644 index 00000000..bad9263d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.md5 new file mode 100644 index 00000000..a211e131 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.md5 @@ -0,0 +1 @@ +9b62089d96b53dc6a9437b74fe56d309 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMSCKF__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e39900c0bf5aa1cae852514a51d432f5a7749235 GIT binary patch literal 5752 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono-members.html new file mode 100644 index 00000000..a0288c7e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryMono Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryMono, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryMonoinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryMono(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryMono)rtabmap::OdometryMono
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose)rtabmap::OdometryMonovirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryMono() (defined in rtabmap::OdometryMono)rtabmap::OdometryMonovirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono.html new file mode 100644 index 00000000..7156a9f3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono.html @@ -0,0 +1,264 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryMono Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryMono Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryMono:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryMono:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryMono (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose)
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 39 of file OdometryMono.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryMono::reset (const Transform & initialPose)
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryMono::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 45 of file OdometryMono.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.map new file mode 100644 index 00000000..d57a4073 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.md5 new file mode 100644 index 00000000..4ce96424 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.md5 @@ -0,0 +1 @@ +a910cc5f5b0edf8befbac5ba54d02c08 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..35a66fb385e032ddab08db72a0d43ec5cf89f444 GIT binary patch literal 5256 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 PwFtSdWu#f5;SlpbTL3IL literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.map new file mode 100644 index 00000000..d57a4073 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.md5 new file mode 100644 index 00000000..4ce96424 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.md5 @@ -0,0 +1 @@ +a910cc5f5b0edf8befbac5ba54d02c08 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryMono__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..35a66fb385e032ddab08db72a0d43ec5cf89f444 GIT binary patch literal 5256 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 PwFtSdWu#f5;SlpbTL3IL literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2-members.html new file mode 100644 index 00000000..05fbaa34 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryORBSLAM2 Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryORBSLAM2, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryORBSLAM2inlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryORBSLAM2(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryORBSLAM2)rtabmap::OdometryORBSLAM2
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryORBSLAM2virtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryORBSLAM2() (defined in rtabmap::OdometryORBSLAM2)rtabmap::OdometryORBSLAM2virtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2.html new file mode 100644 index 00000000..2a74695e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2.html @@ -0,0 +1,264 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryORBSLAM2 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryORBSLAM2 Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryORBSLAM2:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryORBSLAM2:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryORBSLAM2 (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 38 of file OdometryORBSLAM2.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryORBSLAM2::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryORBSLAM2::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 45 of file OdometryORBSLAM2.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.map new file mode 100644 index 00000000..07934e6b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.md5 new file mode 100644 index 00000000..a3a4ec5c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.md5 @@ -0,0 +1 @@ +b2a6f1f48a11bd1f02ec9322fdb67349 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9fcbf765a222ddde22e8dbd8aef030de9137ca2e GIT binary patch literal 6191 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.map new file mode 100644 index 00000000..07934e6b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.md5 new file mode 100644 index 00000000..a3a4ec5c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.md5 @@ -0,0 +1 @@ +b2a6f1f48a11bd1f02ec9322fdb67349 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM2__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9fcbf765a222ddde22e8dbd8aef030de9137ca2e GIT binary patch literal 6191 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3-members.html new file mode 100644 index 00000000..dd6137af --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryORBSLAM3 Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryORBSLAM3, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::OdometryORBSLAM3virtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryORBSLAM3inlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryORBSLAM3(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryORBSLAM3)rtabmap::OdometryORBSLAM3
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryORBSLAM3virtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryORBSLAM3() (defined in rtabmap::OdometryORBSLAM3)rtabmap::OdometryORBSLAM3virtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3.html new file mode 100644 index 00000000..d8b4a497 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3.html @@ -0,0 +1,292 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryORBSLAM3 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryORBSLAM3 Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryORBSLAM3:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryORBSLAM3:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryORBSLAM3 (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
virtual bool canProcessAsyncIMU () const
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 39 of file OdometryORBSLAM3.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryORBSLAM3::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryORBSLAM3::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 46 of file OdometryORBSLAM3.h.

+ +
+
+ +

◆ canProcessAsyncIMU()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryORBSLAM3::canProcessAsyncIMU () const
+
+virtual
+
+
Returns
True if the backend processes IMU asynchronously outside process().
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.map new file mode 100644 index 00000000..190f042c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.md5 new file mode 100644 index 00000000..681038d9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.md5 @@ -0,0 +1 @@ +210a093f7e6b6d1f8ca6dc4428621b23 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8732fd1973e24a0281c31f4b6f7564980da34d GIT binary patch literal 6213 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 Lj4HfD$|UGt6}|B| literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.map new file mode 100644 index 00000000..190f042c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.md5 new file mode 100644 index 00000000..681038d9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.md5 @@ -0,0 +1 @@ +210a093f7e6b6d1f8ca6dc4428621b23 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryORBSLAM3__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8732fd1973e24a0281c31f4b6f7564980da34d GIT binary patch literal 6213 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 Lj4HfD$|UGt6}|B| literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis-members.html new file mode 100644 index 00000000..c651de93 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryOkvis Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryOkvis, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::OdometryOkvisinlinevirtual
canProcessRawImages() constrtabmap::OdometryOkvisinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryOkvisinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryOkvis(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryOkvis)rtabmap::OdometryOkvis
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryOkvisvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryOkvis() (defined in rtabmap::OdometryOkvis)rtabmap::OdometryOkvisvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis.html new file mode 100644 index 00000000..f3cc51fa --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis.html @@ -0,0 +1,324 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryOkvis Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryOkvis Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryOkvis:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryOkvis:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryOkvis (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 40 of file OdometryOkvis.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryOkvis::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryOkvis::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 47 of file OdometryOkvis.h.

+ +
+
+ +

◆ canProcessRawImages()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryOkvis::canProcessRawImages () const
+
+inlinevirtual
+
+
Returns
True if the backend can process unrectified camera images.
+ +

Reimplemented from rtabmap::Odometry.

+ +

Definition at line 48 of file OdometryOkvis.h.

+ +
+
+ +

◆ canProcessAsyncIMU()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryOkvis::canProcessAsyncIMU () const
+
+inlinevirtual
+
+
Returns
True if the backend processes IMU asynchronously outside process().
+ +

Reimplemented from rtabmap::Odometry.

+ +

Definition at line 49 of file OdometryOkvis.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.map new file mode 100644 index 00000000..fce4c973 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.md5 new file mode 100644 index 00000000..bf69b005 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.md5 @@ -0,0 +1 @@ +43af8d6272fedcdd9cbb75a9a3a7e404 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f4288395e8b1a6ff27fc8a6a56ada8424cd92a5f GIT binary patch literal 5452 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 DL&~(j literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.map new file mode 100644 index 00000000..fce4c973 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.md5 new file mode 100644 index 00000000..bf69b005 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.md5 @@ -0,0 +1 @@ +43af8d6272fedcdd9cbb75a9a3a7e404 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOkvis__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f4288395e8b1a6ff27fc8a6a56ada8424cd92a5f GIT binary patch literal 5452 zcmc&&hdW%|*Ci4qdg4V0f<%c<)F>~aO!P>IFiP|uy$%T>dhcaM4MEHx>L^hMBSec% z5N-76{X5?0`TY&wqs(z1_ug~%UVE*zceu8u3i)k@+jw|*y{F&(!Wa_IlK?FOkQ(rywf2;-GmSDELRTfA$*o=&-zeYstFGv|9yL84ZR{)QC4o? ziMTWLYEuoCsab?>aGa|7R&F!Zz{7A$o959oounq{X!A&|sF+v)e&2dT4VsrmqsDRS z*CJ5_6K+s4Ft|5AKmSrs z?@dFJalU@&LPz-Bq@<+R4N*=y`udm(b4)Q3S?kW-q#R4Bq z`(J{7hYnVKX|2e>3wu{LH$Lbuf`b|%+-@#-bwOR-_>iT0{q(fa4FUp)s_O4#ePdQ( z;e@|`T{+a#zK@v%IJX`ZqQ4wb(oxpOsHC)KP^z-M?WFCFj(|uci80_R?J8&RJ zK6oU+*n9p~KU@a;MYm{YXXgP2N2ppVe}yHMwxp!Q`(RW*JSi8ZdUA3iAtmLy zJu4&TIQh)gRd{P_tMT%5-3r6^@c}=7Oh?Bv8YQ#S{WV_W#__U#6&cU>0xjnW7iUMh z1_qGVuj#R=0xHO{J&fFC#i-Cw%o571{pb3D!)&90V-<+5zOhe8_EWEgwY7^-RNVN-{0|fhtvc}f!% zJyTFnh;)1L>eVB6sqEv8s)3JG3IJje06Y;*en%0TQ?-%t>?*haoo@8eC1&l&bZ+MM z_xJCB%lLJaL(v~Uefo6#!#TiQZzZ4EPhCA~=kSo0CGfmL;@$7}#FUhDdn*HU3dAm# z=O=m?)u$<(T5uZQCS#)pcZj3cVplYqpy1BDK-|?-gGXstM8xT*LgcQ>uR(2Iljdm$ zsJ3?8c)go78W|ZLP7NRQaAZ*8gO@!u$r6a(=~V^YqM2=h=3PKtyC@h-T4U>jC(y z+D;6nG?$B;n_4QnzYGD=Z|3O8_xSN+DfbOaOG^dhSScNvO5x?pm&A;WjPa?doF8pq zQEwQr^=>N>a~E4)xJm>9G2ZCoR*IR1ms2RkX2{~JXG!dSIQ#SG56WX*&(+nnxV-#x zT^+r+xOf#TC^&c&;ppIyCgH+H$8V%P7R@a4=3-)E;$Cp;do&t7(GU?4p}9WX-cCSC zN$KIYXBpgz_pg#t$b_s0*cPg`mQ!4u?&;H~Ak#>v%qO-92GLU4F`Nkh7f^AZzZMJ( z40Y~ncjV>eWBoV43v!y9;U*V2eJfG!h_=p1y4}Bj?R1>)ZocL>tceN>BYtac4xpHu zlatfAkK|l+$wk$O2|#rETDlFPPz_a8Vp2N(hf-1*mltPy1A&)`-=6FVsEf7aWTp_2 z(f_nUPcD_OR`KEE<4Z_L#Kpz^YigP^Q8O~~vZS<>gq*yyt1EPJ@{OIneMME3{ou-b zd;%LAo1BIQ1{D<*yk0DJ)R9TjlarH^MrnStc24iiVTh)`#u&+jU4i>iSX)~kZcbrR zO#*rvefF4f=kB%4SNlCZJ>iv=!X78M(bA;U)IER#Vf$aaAh3oPuH*gLPe(~PL`9Pq zF|m8+djnp@q5Z2Ova+)q(2A4FuV4AL8}}$m^^qK)=w>(t1Y!%-QiTB@1_cGti&&Ad zD@XlqrYkFl#6Dm}&4>2mhpw-d^3@-P<#tu5+=lun@HD zrDkQrnAplVd~EAE~}s*RbXHs+3Fp~f2T9Lyz3Lji;Y-+N# zvC*CaS2t#xGPUF`XaIiz&Xx4ud4TrX)~2tN_S;HKNtJfMGPVBv_qh8b+Pul9Q9!Bqb*t5CB(UKxC>sHV-7Pi@CPt;_DCD zDfFPz*47OATF}_|_%xD|ldFBSLP4K`=9}wY_c9zTck&%&wSldK0CC;AS-b!~8nc3K-OsveM zvSC6)=Cveu|4*B{wfCvMjPXG~j1*uIvPvo{ULJH!3X7x_{t48dUg(&vy*O>;Ck>%u z`^USwbaGpxqxeg6Udy`Q+cvG1Atoq#YUtpce$~C96gujedSO^O)E+6#D@Ni?8j?V5 zOBNZf!@vjCHR0Ii=H=y3UcK2EgLhLgs#V%?E#p+`-fdDI?+EJ;tyfol<@z*ilYt>4 zqZVAeU*m~$wyxBCmFBB`0_nt3c)uVMb5S|h>xed*LVc^(XIXZJ=OU> ztEa9uF>KLLs0>S*Pyn~-F=L&T;9WLspnwFtP<=rvOp{Q+s>ljq`2SxFF36<;;AbGY zdX3d+hEv0L1@eu4yzjM7;V;ypR`92$qZ3D-NUhg+9{&A{JB=vV9?iNzCsWtGHw$%| zZG^mf^(ykfF|@6-vrvsR;h`FjfPk|{Q)5xwL-KpKAwzMwaSx-J|A`nMe+_WT2UV`E zgPn;D4i3K5*EeiPa@teG)aK;8@9pi?EGzba(%#M=>;^)PE;(T?%FX=%2&CMoz704O zUTDAK+J+Dg=N6Zcpa8h0sJ3);dANwh4tOY_?RW103k%(+SBbel|1(!{e|wGv2;lV& z-@Ow=HXSmEiHW7~BQ>%mm1kTi*x1;l3bTpUlC-Q~CLw(O!&CPQEZQ>H|vg&eiqC z@2+UZG1kBW0^&#D-jGYq?upN%&sqEgU)^QLzO?R8Je zoy)h0`F&nq-hY1OXltguzdy#TJv6;KGcywl45Sb}S*$xnM(LL?xhNEsmX;P^O~9-+ zwFnT`tgNh&MM5q@$TN< zh2CVIy83z`2=dCxgg!n#xZjj4vRRhclys&(AO{n*&MYx8F*I~^B3@fYaKA0dY8IfB z01%}4_~ z#q?AUM)ak$lwC}Ww#isaLE#1hc6cw6mXGbplccULWj&;^hOe)b?q~J2Bv~lHWB_{3 zzaE8(1CFLEhG}ZS|M>XW)ZQMugiUqv^0Hp(&%PGydm>g3KAM6*aLoWiASO)e8Bf9` z-InooPF4_A<`@d#QA6^$fIm|pu5q5zG&OxtWj&y*LsMBjQd(G)XrO>;5cT zkJAx<-ViDaOUwA=WF>8FDm?JK#c)pe_x^s0{J~@Gl^h=~U@^lYBd_5g4cacen}mdw zen(D~RaLu3M??>R7s9XvW(8cFR@M*rX`>5L%o zpFe+I=dqq*pk1Ve&;)?0b(+EbteC5F3AP_ApI=&10%!y&2RXyxa9q5+4%M?9KQJ$J zXy5^-wh4)e_`p~%k9^UUzStkWF3c=xpM<(Pi4=Zl3E_?Jlam>cM2`53jN8))JGg{P z-j6dTIy$Nl;3<-MI6|I3q=g2KXi94-P_#9HS$r(LPd9#MKS zD=p!Sxo_MNLB>e&Oh29o1#@%rqQi-l&u57V2??|&kwWR}z}yLfTHBg!iZn**3)na! zytbz0i-yyizC3ZBM)otBOGWiy}!T1g^GW>A(N%gT6-pwQjJ z!+-*}p9R1gXKSilU0xXOGv2w=20Cfra40~l(rGG~rqT0F6qIzr{=Pe~dG#Law7Nx_ zn+C(2e89eWIFTLA)yFW)^a7hY!dOT^M3Dx&jR!nj>9ztWdn2@GbP?RQL{ZdT8L>HI zgRZOly|~z3I~RZjj&sD8;`@C2r?oL83vkXwpldii^#xp0u1SD2s?XbcYSB&gkqWRo zfB?xfLTlY!3her+`-b8t3MCyHAOP>&+;qn>)j33sCWY)GgM$fTWe(|qS36)(S_q11 zgeGVrgk2UoKKTYaX{Cm=jgBURQ_n9f1T{4^ow}rEWkuE2ir>0*>%NR{5}@|9rY&F| zC7wQAoS&DsvwIALO8RizoT;SMRPg-wwZkMlo)`$|0?IP+&Gs%UD=Uy3*TW41VPRp= zh~}BJ1njSm#m2=^Ei5ct*I{*aHK0t@&AHar4=9wN=f-&J#za-U*ETZ|#r@wC)(A%r z*$csq%}t-(PP&tIldIluw!@&;Up_rpKVOl%GF$3Rer;%2OV3V887nqLN=a!A=m*eZ zb=qg?K1my=-Xw0Yg-Y9Dj(`)a3CL`|6DbJ^tB_DUpmth*qj4)4<@|Usg8-r&R8=Kn zU|;~cE$I=OOZl>IJfL$q|3@jk2=?R`bN*l$h($0FrQR42lYHj+^CR9RK|M zoL<^n5VXZcjo#FThK2xNBVW=zqi)=|@rFsQ?kYSE4)3pXS$y+x!E8W&uV!Xu#>K;9 z$>i#kE?+tN#XxOoDbLCP0y8()q9g~f;qC1$2oOw2alac(Y`~m_3_Ke+;7ZfhAiW|> zM{WUuqMDjRG&sR!{>iD>Rd?|kMA4a!kr7KO(D>6<+_veJhlePSUfJ)jwX<(Wigi-> zi*x}!rUSwHbj8jNu>*wE-g0%}45kcz8V@Fi^P8z`NZ@cdc*~oHDCSKtKanSvx3DNE zR9mBkT_(OA%u`C?&&3!v`_~t$t?GeG3JKpVxE?|jLlqL9Trcu}Fgk9gEs$wX+A4gFb(=Y DL&~(j literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D-members.html new file mode 100644 index 00000000..ea7a5440 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryOpen3D Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryOpen3D, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryOpen3Dinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryOpen3D(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryOpen3D)rtabmap::OdometryOpen3D
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryOpen3Dvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryOpen3D() (defined in rtabmap::OdometryOpen3D)rtabmap::OdometryOpen3Dvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D.html new file mode 100644 index 00000000..17a359d3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D.html @@ -0,0 +1,264 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryOpen3D Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryOpen3D Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryOpen3D:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryOpen3D:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryOpen3D (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 35 of file OdometryOpen3D.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryOpen3D::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryOpen3D::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 42 of file OdometryOpen3D.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.map new file mode 100644 index 00000000..8804fbf4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.md5 new file mode 100644 index 00000000..6f863e5a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.md5 @@ -0,0 +1 @@ +bd10b0e09c8eb3ee1702de2cfb74aecb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..faf761c821f5d46bc132cfddbfdb809a902b450e GIT binary patch literal 5545 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.map new file mode 100644 index 00000000..8804fbf4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.md5 new file mode 100644 index 00000000..6f863e5a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.md5 @@ -0,0 +1 @@ +bd10b0e09c8eb3ee1702de2cfb74aecb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpen3D__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..faf761c821f5d46bc132cfddbfdb809a902b450e GIT binary patch literal 5545 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS-members.html new file mode 100644 index 00000000..e138d3d4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS-members.html @@ -0,0 +1,128 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryOpenVINS Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryOpenVINS, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::OdometryOpenVINSinlinevirtual
canProcessRawImages() constrtabmap::OdometryOpenVINSinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryOpenVINSinlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryOpenVINS(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryOpenVINS)rtabmap::OdometryOpenVINS
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryOpenVINSvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS.html new file mode 100644 index 00000000..c6c6cc52 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS.html @@ -0,0 +1,324 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryOpenVINS Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryOpenVINS Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryOpenVINS:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryOpenVINS:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryOpenVINS (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 40 of file OdometryOpenVINS.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryOpenVINS::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryOpenVINS::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 46 of file OdometryOpenVINS.h.

+ +
+
+ +

◆ canProcessRawImages()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryOpenVINS::canProcessRawImages () const
+
+inlinevirtual
+
+
Returns
True if the backend can process unrectified camera images.
+ +

Reimplemented from rtabmap::Odometry.

+ +

Definition at line 47 of file OdometryOpenVINS.h.

+ +
+
+ +

◆ canProcessAsyncIMU()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryOpenVINS::canProcessAsyncIMU () const
+
+inlinevirtual
+
+
Returns
True if the backend processes IMU asynchronously outside process().
+ +

Reimplemented from rtabmap::Odometry.

+ +

Definition at line 48 of file OdometryOpenVINS.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.map new file mode 100644 index 00000000..6c05396b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.md5 new file mode 100644 index 00000000..78e4708d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.md5 @@ -0,0 +1 @@ +66469d480d4a914c5b507e8c9111bcaa \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..11273ae97a09e5e0cdeeb76b4ef6ad44c10a4361 GIT binary patch literal 5791 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.map new file mode 100644 index 00000000..6c05396b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.md5 new file mode 100644 index 00000000..78e4708d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.md5 @@ -0,0 +1 @@ +66469d480d4a914c5b507e8c9111bcaa \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryOpenVINS__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..11273ae97a09e5e0cdeeb76b4ef6ad44c10a4361 GIT binary patch literal 5791 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent-members.html new file mode 100644 index 00000000..cd7b9da6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent-members.html @@ -0,0 +1,99 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + + +
+
rtabmap::OdometryResetEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryResetEvent, including all inherited members.

+ + + + + + + + +
getClassName() constrtabmap::OdometryResetEventinlinevirtual
getCode() constUEventinline
getPose() const (defined in rtabmap::OdometryResetEvent)rtabmap::OdometryResetEventinline
OdometryResetEvent(const Transform &pose=Transform::getIdentity()) (defined in rtabmap::OdometryResetEvent)rtabmap::OdometryResetEventinline
UEvent(int code=0)UEventinlineprotected
~OdometryResetEvent() (defined in rtabmap::OdometryResetEvent)rtabmap::OdometryResetEventinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent.html new file mode 100644 index 00000000..c7f7001f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent.html @@ -0,0 +1,251 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryResetEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryResetEvent Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryResetEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryResetEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + +

+Public Member Functions

 OdometryResetEvent (const Transform &pose=Transform::getIdentity())
 
virtual std::string getClassName () const
 
const Transform & getPose () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+
+

Definition at line 97 of file OdometryEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ OdometryResetEvent()

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::OdometryResetEvent::OdometryResetEvent (const Transform & pose = Transform::getIdentity())
+
+inline
+
+ +

Definition at line 100 of file OdometryEvent.h.

+ +
+
+ +

◆ ~OdometryResetEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::OdometryResetEvent::~OdometryResetEvent ()
+
+inlinevirtual
+
+ +

Definition at line 101 of file OdometryEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::OdometryResetEvent::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 102 of file OdometryEvent.h.

+ +
+
+ +

◆ getPose()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::OdometryResetEvent::getPose () const
+
+inline
+
+ +

Definition at line 103 of file OdometryEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.map new file mode 100644 index 00000000..00bc018d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.md5 new file mode 100644 index 00000000..23585b85 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.md5 @@ -0,0 +1 @@ +bc601a474947b14f52ccaef76abdcb59 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..68b3e801e5f74caac495df76be25567f612e7fd8 GIT binary patch literal 4713 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__inherit__graph.md5 new file mode 100644 index 00000000..23585b85 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__inherit__graph.md5 @@ -0,0 +1 @@ +bc601a474947b14f52ccaef76abdcb59 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryResetEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..68b3e801e5f74caac495df76be25567f612e7fd8 GIT binary patch literal 4713 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryThread Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryThread, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
currentThreadId() (defined in UThread)UThreadinlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
handleEvent(UEvent *event)rtabmap::OdometryThreadprotectedvirtual
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
isCreating() constUThread
isIdle() constUThread
isKilled() constUThread
isRunning() constUThread
join(bool killFirst=false)UThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
OdometryThread(Odometry *odometry, unsigned int dataBufferMaxSize=1) (defined in rtabmap::OdometryThread)rtabmap::OdometryThread
post(UEvent *event, bool async=true) constUEventsSenderprotected
Priority enum nameUThread
registerToEventsManager() (defined in UEventsHandler)UEventsHandler
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setPriority(Priority priority)UThread
start()UThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
UEventsHandler()UEventsHandlerinlineprotected
UEventsSender() (defined in UEventsSender)UEventsSenderinline
unregisterFromEventsManager() (defined in UEventsHandler)UEventsHandler
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~OdometryThread() (defined in rtabmap::OdometryThread)rtabmap::OdometryThreadvirtual
~UEventsHandler()UEventsHandlerprotectedvirtual
~UEventsSender() (defined in UEventsSender)UEventsSendervirtual
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread.html new file mode 100644 index 00000000..5a1088ae --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread.html @@ -0,0 +1,282 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryThread Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryThread Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryThread:
+
+
Inheritance graph
+ + + + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryThread:
+
+
Collaboration graph
+ + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryThread (Odometry *odometry, unsigned int dataBufferMaxSize=1)
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
- Public Member Functions inherited from UEventsHandler
+void registerToEventsManager ()
 
+void unregisterFromEventsManager ()
 
+ + + + + + + + + + + +

+Protected Member Functions

virtual bool handleEvent (UEvent *event)
 
- Protected Member Functions inherited from UEventsHandler
 UEventsHandler ()
 
virtual ~UEventsHandler ()
 
- Protected Member Functions inherited from UEventsSender
void post (UEvent *event, bool async=true) const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+
+

Definition at line 42 of file OdometryThread.h.

+

Member Function Documentation

+ +

◆ handleEvent()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool rtabmap::OdometryThread::handleEvent (UEvent * event)
+
+protectedvirtual
+
+

Method called by the UEventsManager to handle an event. Important : this method must do a minimum of work because the faster the dispatching loop is done; the faster the events are received. If a handling function takes too much time, the events list can grow faster than it is emptied. The event can be modified.

Returns
"true" to notify UEventsManager that this handler took ownership of the event (meaning it must delete it). The event will not be dispatched to next handlers.
+
+"false" to let event be dispatched to next handlers (default behavior). UEventsManager will take care of deleting the event.
+ +

Implements UEventsHandler.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.map new file mode 100644 index 00000000..32728eb4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.md5 new file mode 100644 index 00000000..b7a4cd38 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.md5 @@ -0,0 +1 @@ +4e35d5c93c28ebac9c73ce9927f75d85 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..48c924085f63d1aaaac1d078e3391ceed030ecfa GIT binary patch literal 11891 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 UG + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__inherit__graph.md5 new file mode 100644 index 00000000..b7a4cd38 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__inherit__graph.md5 @@ -0,0 +1 @@ +4e35d5c93c28ebac9c73ce9927f75d85 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryThread__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..48c924085f63d1aaaac1d078e3391ceed030ecfa GIT binary patch literal 11891 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 UG + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryVINSFusion Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryVINSFusion, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::OdometryVINSFusioninlinevirtual
canProcessRawImages() constrtabmap::OdometryVINSFusioninlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryVINSFusioninlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryVINSFusion(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryVINSFusion)rtabmap::OdometryVINSFusion
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryVINSFusionvirtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryVINSFusion() (defined in rtabmap::OdometryVINSFusion)rtabmap::OdometryVINSFusionvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion.html new file mode 100644 index 00000000..ea4be4bf --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion.html @@ -0,0 +1,324 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryVINSFusion Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryVINSFusion Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryVINSFusion:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryVINSFusion:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryVINSFusion (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 37 of file OdometryVINSFusion.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryVINSFusion::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryVINSFusion::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 44 of file OdometryVINSFusion.h.

+ +
+
+ +

◆ canProcessRawImages()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryVINSFusion::canProcessRawImages () const
+
+inlinevirtual
+
+
Returns
True if the backend can process unrectified camera images.
+ +

Reimplemented from rtabmap::Odometry.

+ +

Definition at line 45 of file OdometryVINSFusion.h.

+ +
+
+ +

◆ canProcessAsyncIMU()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::OdometryVINSFusion::canProcessAsyncIMU () const
+
+inlinevirtual
+
+
Returns
True if the backend processes IMU asynchronously outside process().
+ +

Reimplemented from rtabmap::Odometry.

+ +

Definition at line 46 of file OdometryVINSFusion.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.map new file mode 100644 index 00000000..c250577b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.md5 new file mode 100644 index 00000000..ee694588 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.md5 @@ -0,0 +1 @@ +165fba02a881e94f128ea6462b146d97 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb7b4d84a9862dfd01049af80b9cb6c82cb8a4b GIT binary patch literal 6121 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.map new file mode 100644 index 00000000..c250577b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.md5 new file mode 100644 index 00000000..ee694588 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.md5 @@ -0,0 +1 @@ +165fba02a881e94f128ea6462b146d97 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryVINSFusion__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb7b4d84a9862dfd01049af80b9cb6c82cb8a4b GIT binary patch literal 6121 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2-members.html new file mode 100644 index 00000000..239648e2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2-members.html @@ -0,0 +1,129 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OdometryViso2 Member List
+
+
+ +

This is the complete list of members for rtabmap::OdometryViso2, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canProcessAsyncIMU() constrtabmap::Odometryinlinevirtual
canProcessRawImages() constrtabmap::Odometryinlinevirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Odometrystatic
framesProcessed() constrtabmap::Odometryinline
getPose() constrtabmap::Odometryinline
getType()rtabmap::OdometryViso2inlinevirtual
getVelocityGuess() constrtabmap::Odometryinline
imagesAlreadyRectified() constrtabmap::Odometryinline
imus() constrtabmap::Odometryinlineprotected
isInfoDataFilled() constrtabmap::Odometryinline
kTypeCuVSLAM enum valuertabmap::Odometry
kTypeDVO enum valuertabmap::Odometry
kTypeF2F enum valuertabmap::Odometry
kTypeF2M enum valuertabmap::Odometry
kTypeFLOAM enum valuertabmap::Odometry
kTypeFovis enum valuertabmap::Odometry
kTypeLIOSAM enum valuertabmap::Odometry
kTypeLOAM enum valuertabmap::Odometry
kTypeMSCKF enum valuertabmap::Odometry
kTypeOkvis enum valuertabmap::Odometry
kTypeOpen3D enum valuertabmap::Odometry
kTypeOpenVINS enum valuertabmap::Odometry
kTypeORBSLAM enum valuertabmap::Odometry
kTypeUndef enum valuertabmap::Odometry
kTypeVINSFusion enum valuertabmap::Odometry
kTypeViso2 enum valuertabmap::Odometry
Odometry(const rtabmap::ParametersMap &parameters)rtabmap::Odometryprotected
OdometryViso2(const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap()) (defined in rtabmap::OdometryViso2)rtabmap::OdometryViso2
previousStamp() constrtabmap::Odometryinline
previousVelocityTransform() constrtabmap::Odometry
process(SensorData &data, OdometryInfo *info=0)rtabmap::Odometry
process(SensorData &data, const Transform &guess, OdometryInfo *info=0)rtabmap::Odometry
reset(const Transform &initialPose=Transform::getIdentity())rtabmap::OdometryViso2virtual
Type enum namertabmap::Odometry
~Odometry() (defined in rtabmap::Odometry)rtabmap::Odometryvirtual
~OdometryViso2() (defined in rtabmap::OdometryViso2)rtabmap::OdometryViso2virtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2.html b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2.html new file mode 100644 index 00000000..57255989 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2.html @@ -0,0 +1,264 @@ + + + + + + + + +RTAB-Map: rtabmap::OdometryViso2 Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OdometryViso2 Class Reference
+
+
+
+Inheritance diagram for rtabmap::OdometryViso2:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OdometryViso2:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OdometryViso2 (const rtabmap::ParametersMap &parameters=rtabmap::ParametersMap())
 
virtual void reset (const Transform &initialPose=Transform::getIdentity())
 Resets internal state and sets the initial pose.
 
virtual Odometry::Type getType ()
 
- Public Member Functions inherited from rtabmap::Odometry
Transform process (SensorData &data, OdometryInfo *info=0)
 Processes a sensor frame and updates the integrated pose.
 
Transform process (SensorData &data, const Transform &guess, OdometryInfo *info=0)
 Processes a sensor frame with an external motion guess.
 
virtual bool canProcessRawImages () const
 
virtual bool canProcessAsyncIMU () const
 
const Transform & getPose () const
 
bool isInfoDataFilled () const
 
RTABMAP_DEPRECATED const Transform & previousVelocityTransform () const
 
const Transform & getVelocityGuess () const
 
double previousStamp () const
 
unsigned int framesProcessed () const
 
bool imagesAlreadyRectified () const
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Odometry
enum  Type {
+  kTypeUndef = -1 +, kTypeF2M = 0 +, kTypeF2F = 1 +, kTypeFovis = 2 +,
+  kTypeViso2 = 3 +, kTypeDVO = 4 +, kTypeORBSLAM = 5 +, kTypeOkvis = 6 +,
+  kTypeLOAM = 7 +, kTypeMSCKF = 8 +, kTypeVINSFusion = 9 +, kTypeOpenVINS = 10 +,
+  kTypeFLOAM = 11 +, kTypeOpen3D = 12 +, kTypeCuVSLAM = 13 +, kTypeLIOSAM = 14 +
+ }
 Odometry backend selected by Parameters::kOdomStrategy(). More...
 
- Static Public Member Functions inherited from rtabmap::Odometry
static Odometry * create (const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance from Parameters::kOdomStrategy() in parameters.
 
static Odometry * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates an odometry instance of a given type.
 
- Protected Member Functions inherited from rtabmap::Odometry
const std::map< double, Transform > & imus () const
 
+ Odometry (const rtabmap::ParametersMap &parameters)
 Constructs the base odometry state from RTAB-Map parameters.
 
+

Detailed Description

+
+

Definition at line 37 of file OdometryViso2.h.

+

Member Function Documentation

+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OdometryViso2::reset (const Transform & initialPose = Transform::getIdentity())
+
+virtual
+
+ +

Resets internal state and sets the initial pose.

+
Parameters
+ + +
initialPoseStarting pose (must not be null). Z/roll/pitch may be cleared if Parameters::kRegForce3DoF() is enabled.
+
+
+ +

Reimplemented from rtabmap::Odometry.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Odometry::Type rtabmap::OdometryViso2::getType ()
+
+inlinevirtual
+
+
Returns
Concrete odometry backend type.
+ +

Implements rtabmap::Odometry.

+ +

Definition at line 44 of file OdometryViso2.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.map new file mode 100644 index 00000000..bdac189d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.md5 new file mode 100644 index 00000000..7ff06872 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.md5 @@ -0,0 +1 @@ +396f87140fe8a797dd3425a64897c7a9 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..88492fe33ac80db58f403eb787ebbffb69fec8c8 GIT binary patch literal 5548 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__inherit__graph.md5 new file mode 100644 index 00000000..7ff06872 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__inherit__graph.md5 @@ -0,0 +1 @@ +396f87140fe8a797dd3425a64897c7a9 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OdometryViso2__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..88492fe33ac80db58f403eb787ebbffb69fec8c8 GIT binary patch literal 5548 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Odometry__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Odometry__inherit__graph.md5 new file mode 100644 index 00000000..5477f294 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Odometry__inherit__graph.md5 @@ -0,0 +1 @@ +671065d71490d3becd7a082da712ae03 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Odometry__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Odometry__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1349295e421ff97d8e2c3255b960526a4b51abe5 GIT binary patch literal 94878 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%0AUo!)un?qBvV`9^Qm*5Uy!eLcpV& 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

S3QH`sgc98 z!-unDw{xz29Y|q40@E-+?mtv(y`h9lRX=Nzl!A*3FJj3F0Oa@Oj*jY4?kt`5lI(1n z>W+Vb0O{Rddq2Ka0H5A-l=J3*___?6VIpl4Dt zm}9XTn?qkW*k0CN%&*+{mu15&XT!hPa7Z%8VOeCFm@BS) zreSDgcYL5(uFXUWPM*(7RJAWEErDY};?0pPLBw>THGMGBQC^J;*xHKzcw02&ER}n4>|03^K$pdI*@==)z^dpMl6(gMPL= zrFUx%NBohqvT(00uxdbGM*G>%62QU{v&8j{jRWA*y}(P$YxrhUE!fYJ9}Z2Ka0)|C zQ`y}x1mlChjD67tc~&Zk*9HMV>jw&*R>&6b(Ne$-a5od7HuFG-NNwc{02;gD&2|yr zUPOVl>~N7H`_*S)*t_c0(hN#Y53y?i-FBqs8!!a9x$!~w0|!7lUjZE6K*GSBS^;*v z^PxmRx_5a4;Hs#FAAHQ8_x>PnKtE|(@>zWRS0wuCeIsye2;-B?{HjBRTX+T-882`F z74}$>D*zu;pta22{NpHPN~HL)dQ_eWCz-o7OIt@yAMdtwS6Gy4YpnD8uzl;uv-omv zM!Z_AuzmArw>s#2zU+>l|L^N}Yc^*#3eq1GGV??(bIqZJB>v?IKQgaCV^% z0@ImtG)ItmPJcZpTi*LD?!C$R0x+?+rx&3Y00$Zv_(GJ;?w_;iZ@+gHNu*x_MLP+J zUIqqVn%oO9<{?EdU(B;O6tpPw(5S#5;si0$Ab{FI6pKKq%^=ds!hc6MK0qM654iB1 zLi5Wvh@LlLtA8zFVBjj6E0I6;q7az3azJkbL1}ky+!n^3U>lGxksCKuC4F~a!qS=n zn6Z3#V-kegKNef+%gZ-6HxX&B2nUA>!qtNJsnPEQ;jsyXqndwkn@I8OXr}}cIzJ++ z=TfcQ*TB-Zw?hj~dAS5op!fF5bhHm1i36kz9RyW47~#cl0r*wB?!OXVJPxd?1ZZWD zZ+iXmWm)+yprVxk{*}p`ZkI?{p~8xTDuiZ$Nc)BeMj0giJ^^@Md+(y+35+42^%9l3 zlN`)Up^5)K?il!vebi7r^LYWopZ(?;dY(nd;LbF86su~fH8r#{KTCXf9BMR>+a$Mr=8HuOv1U-=F!2>)qb zM#if!H)zCK425Mi1Nri0yKnic0idL8r~x&xvJz;AJ{KPY#!uOR@Rf*!SA;8({x zaQCYY?T}@I_h3|MTm*Vo9w+{P0l)neVjkEF?2%yM(1KKmd%w=7nfZ%UQIE-C$oqGMO9OtoWRA5}k za9-Xu>2Hoc zNhlahLsvuX3kFC zHg4MOhMMnW5D)ITaP3+3J7$*WIfI-AnFRh{H@5?(8TE+|W^D~$$mHu<7;L=RcASy? z5a`@o_cU+U2YO7pg3d#M55Af^ssjHD)ZwmgLW+5+n~S%X0VaI~>7A1nQs|JjAyRRpcjJ?>7#YHwqV$Px?5q=RBbDNSe_69^f=_fQQs^=%qpQXr545w zNYIWLzk^4>x|_U{!V`cvulx2DE39w=R_gm24syPN>mUua%eqI_wwnLy}sweyo}E1u4vG=1SHOw_|`QuKBJG1 z0buXl`*Rh>!)t6w)XA>38gnp`8_!sv=mIJ@tBx04ldXekiJ_t0G22vF5R5^Vz zse3#}MLvV~cEr?GgdDZeO|pyY$wgz52{%|dLw*_YVDwHQ>~>+fhOY!V6%dOLsCend zffWQr6ChN-1J7dVvv*LKmYRxKzd~hx37vAtM?lL3GFs3Qb`pOTNrZ*grz4kkYA&R@g4~ebh7z@|mu5EY~1m8@?fsHTpa=(~u%6J1wmQENrL2uinwm zuMw!)##`g?d5f6PXC+%drA-K`lOurzjdvlF$KF74#O{Ga~>KiPxKuxkbdv6+I8o54Z-S_ zHG$hxiZQGv9d&s0i+(K&DV3Mx%rg(NekNbH=f{aBju`9x=Jc$fikjANhR3YXk@~Sf z3txwd%cy+@$|lKNMZdrCiDRFU67A2#jPY_2lz``-%XcPsv9vKrxLoQ8lC<9qUhd9U zdmz_WxHF2sbNd!PedX-WUMW-?$m{f23h<@U_PMv8^!OaJV|g5Wym#l*lT)5Qr<-|_ zxk+w=mvY`c;(!qo^-S)pE2dR6g%|gVDTGIp-MErWj5<8bBr^|T8)s<_TTm%=>@9MX z-=EzOS#hP5@#FYrSC}T|Rs9q4RlTQ1{BN37e+YSoxxi0Q(LF_b*0T~+YII3|+emVz!Ifhg;WEq0 z#m~5(!YX*{v8sUd^wn6riqp?dkAT`3qZX=8iN-P@yKeJp+bR~NurmMkjMmT|ZM13A zD@44@AhI+Z{YuU8o5T>lEE*G&MI2tT?5}xMTSlsPn?3vQl=t&}=IlZHaSP>Cs_mfv zh-9LtXZ;gkoXkA}vr!WS1m*nQ=pv4mv(+b8z8C9yzq30CjSbnLUI~itbln(yv|!7( zpMjd)WyHBl$0x2z9F5jmE7ZR;EnLA`DysHwxNTZcla0Y$ghDZC3(mfEXjmg%SJvrK_5 z_y-@t>qv~XlS673@nmpVk~RgJr5LV0uoE1*fl>4M<*|`X!nr-o5$-(w@4vOxBoanS zaN+b_VC#IY5wt=Zr90yi>KFKX@ah~oTzVo&;NnUi!GM-RmWK@|8~EYqF}0*OKahyR zc}D)AXi>L_j!>KFd^I_0rNx$e5Wo+WjLxtR>Q`mNXuT*nh*G;5TifiEJO%d|_g$D$ zpLxoBSg4e@xA6+}?0RgSubGhjYD-0>j+jtdTJW%{yR<1*XmI{XG`=(&HEKuiDQW@t z%ET=IvMKiVG-s^wro6o$>LrJkYvx%n5cX`TOoTdF&gork{Te*4opJeQKeSluZdvyj zCE0E5aUqOz#q`!NbJVvPGY;gJQ2wssIS+kIF7U4Uhk)Q4;;w)z-_yqfb#gz+=H`cg zDZ@H+uriDwjwYp@9X&y5qZu00=+G&tPBHv#_rH`2u{Wt7Oo&;rw+aq;e=9eOJx-F< zI{?T3C5K-9c_6TVhbh(JYwGX(w$nE8 zmZUrn-z{a^HftJnU)QIAJ2J5lc5_IYJ<&FTn#GFFiFErw3FZO zgTE{I&pk-H{p6?+?+8}UWSmd$$&s7E5`poyl(>rM%%@|FfIV)hJjblt&fGP8F@>*g zCgAEo!YzvQ(-?n z2j{C;lyR>lqg6K1MXvvCU*On_-LFLXtJWnFMUBjJSSNq?>yOi@e~2lCyGRSL;ZyBp zub126zOIF_vFh6b48}2J)}<7Luc+-x?u~?Rq!AnuP@QbWTBFzE6E+#WEdfmXx3|YmqB<>~yj(1-ec)WG)=`8V92-q8V_V2R^ zXj%7_i3i@>YRs`uQ-rygVU$G3{bV9u_Z#q?6cUi{p{&2U2>h&2XdJBaYj`kb}(VZ^wQ6`DDH+|iH z*ggO{VYhKua)!#ROkjRMcBpn~b=m}~QI+!0B1z~tglU~Z~b-)3%!^~-sl zp-xTaM&-yS@OgE5FMlv_ct$@aSlkd2wsXMfy^dn`n8Z=cRS2wF}s6o*rCXU94*FTU5nP=Cp)21MQV5e(SNp!X71ImGO z{C@q(^v-nbbXAAFjSYDyoa}7gG3BSPPmmuv2%>O`USj4h7ETjLeq0%j0fq;y%Yj>r zr$X`@+8&0pa<>SYHy76Kt zM9xyRZb^sXY?#G5`Pvv64nbwT@n4ChQU(RCOC=W1TH6-a)Rn|laoDE0zWcRSEd7Q70xZWV1rO{C_FnnxN z8C)V@zVb|GoCaLv+UPG24s2 zl*+N8pSnPAMgqMVmHp^!Kz>D_*TIU)5Yv@GxWV%vi2YK^IPLYb6FnX4llph+#R;5b zy~gM&VXCC2O18iJefxA65!y_jQPe7HJq29-UwQq>a%Iewf*t%9Xm)~;nT9*C z$8t`%x|1?E-&o#f)B}7-;q;ItX(%=o5N}%qlKCvnW;Sf|b_KxXRT_?wt;!RP$)5;G zJRb$xN<=s$JNwfWU^FmUTwZGz_^b72#5E4{b)DIb8uHE zKPOf_+kpSU|9S!bLN%k&8JMuSGO|IAY4_tGB?hhhWswYvmT#OoF`a^4@!fhR(0GEH(Y zuAjw$v#AQ34RSNO|CUrQQ_AT2;MHs*vGV7;1EfE3#~ST_`52rUL`BMb%|0I{Mv)6< z2bI6fFXw`}pG?EE%r?K?IifjMj~9_xm;;;7n<>we=^i!;m;gi+Vzt5=>+B;*N>UC8 zpY&2AjP8Bh`KmC!YEFRFKMs3}Ht%00*PX5cd2tUUC2 zJ(0sc-}{jxzg~G8y^a6QBdfbgSAxE_NkEy!MerEPL1960bD$h)2I8&g(Y#!)yQFFf zgEsv;RXWCl+T)qc2{$z*V7_oZgpDb&-ll(_lq=0> zt*zixgL$p-+Vz2=^O#phL@r*}=SX;|G){(NT#Nr|MlM%TtyMUsEpTXHbG%46175;l zvE-DEI4i7Q<=T)W-gU_jrW+<-cjADR`PDOo8|(M~n0oJcF8BX`+=!4!b`jZoW+qBj zHhJ0ED|_!kQC5<@$;`_pd&{0lW_Fa3kq}wG$93M{&+Yd6$@b-=B==M^YMru;p8VsYq{n&Tfq>yo&b!w_W0?85+ zy1{YzJ;J0=fd=strs%fV+4}o_mpK#56@rk zU#{=ShaXUfRmv{j{<(V^GzJN9KN~o5mW9RSW8=xRf z<^CT7NY-j4UcRfb!Ijiy5>GHh!|tmJ$71cKt+odg5SP?r)`c6l-o`>4y^!AbFB$Kz zrtD?h#i)2O7s)f4)wy@iw}k88(v+YhIW|8I+>Nrh$MoXc(zu+%7oWD(>x{F$pB}io z-vMW0b{C2bb57o>G{ovawNFumr9jMX;?jlU9a`Na_1N1oTwHV--Qz9X~WjlHShaD*Y*dsZG06To34hHRt%@C z-);5Z>~Dt7IA^?P0hPXXNk>D7uETKY5d~>%Y)mChQvGELNr6D&E?%-rcBj_^2VQun zx3hlce4db@k+ImRdn{*?jQLl)htDfuI=@2@OKrmHA1erKtVl}b*Ug98fe$tKn&60N ze~_1fE2cL;*J(AgnI_xp?y=X49R;$zS!@XJytymc!9D(l&AuwsE6|-hKQ8q(f2Z=t zKIuO5|3KZ!)tGe*8m4@>}hs*VkEl%(NeieLo+Lg^w-Svl8%l zu1=_N9|fxZcB@t?KU~(mI*&7KcYUaBV`lot-T6x`Rr<;LsY+qd#?1{LWFiM!@Qij)7lVP68JII9 zzjSx8U0?_KZ)joy9X;-Nd~$LhKqU~9#fa8d>;{h~=SMG)0wel;n{V*LFKfWl_ZD*Z zfbl?~w*ZAhz#wpDmT0B+;RB*CCEhH~(tDsXZ1GH3HxrI>JNp~&`>o2HeLbSair9rJ z+~Cl{HeB%fyZ=9Bl@+aP%Y<^r9ouXQebvaJ$#{~uqI68(RW|CeXLkrV_1V)0eM z%OMv2m{BhB^S^^lKyjW_1FbOw2Idu+6npMJ0B$U;(ZYB*i5~f z_11V%A`*dmQ^+-W zLr%0A@q7SfsCyg5|FrXCC+QuTF-^1%@(wDXF|yJk3-hUr2G6Far!W|DOra}{OSc>& z5Zt#g0gy@}4Bc`QOz5WLGOUXR7(brf3Dg2etS%_|$({@h3~+uye8w#h8d_Od8F)I~ z3HhjcpcZG>15AuZFiABKd`*>rL<&d|(@CbmOeqIf3}V6r6NZAKV#lg05;PbeT@9uj zi1DRx|AFZYHWMV#7t!B-tl}`g+&eV13Ym=-z!y?=SD1%EKryZQ9xeIg<0Bq`**bwg z(wF`L&LXg#bEX_?tx_Z8W^R6dCA29Tc`xCB-)&yAs=C7uxX-&^#>NmwHW)KZ-_3#9 z))e?UF5{Los1b&|OU)n3C0s4XKW-v6OUUB`%-R3ieg<%>V4P{r9sxfq6AO!3Rs1aC ztGgUVX=sa>huJD~eIiPrRw&)B5=8@U-vqC(|U68-r~a&A^TB zgN1JrLJ6M&@JIfcv#d$e?_eX3&VM%ujh@-^MCPQC$2e*Rd{obt!&t*D$cEbxk{IEW zKo75ha91#r%rlpXZxvG-dB68u`}`nP$Syzg`M*N&ilBHKe+f8D6emYf@n;7+2#pq^ zZL6lguDj!&H37(l;|_kByo^2omWu&z8=IXqM4{68OkW5?tsywuH4(bY1CU^5D-&1~ zUx7TZ1Hz^n+)v=-Hl72!?wf8&u!8{8760GIHSJ0_1Fs%#Wrze86nbfWC^%}Q5p&HY zq87*vo(1B@2EJ<1DPdG5HQ=Obm~+4wjaGl(=^Gdr1F$uldICZtk(H5>n5d&@tS9io z1^iu`U==z5tHmU6OzW^;D)k|af_KEl^#dRo6@@xm%XzyGX~Il4ldTL?yjzQ zzmeZ@LfC@%j6`MUpOTBE=mMU(SI(pvjUy1-=jZIcu<5)SD|pF~!#Z5x1>_eK!fG)3 z#U3n+X5R8-v6~7v*6xq;nHgRmA6G5gj{IXAB2Qo&u_0a#?p=gI|vFUhdiqJ}Q8>|v0sfU~Lw=jC_i7N#4pmxLTbsU(V#kLqgbA(=+2|k8?F$<3GnRK;VUyM`GrD&M{D+p%!uyYobNU6! z$(niASt&bYNVD6)$yrKVTrL3mg)>`+*Pn$i#HOVcBU@<%PlG~LWu=x-Kz%9LsAd|y zoS+@kOX%Lc<~YHk-k`0yMjgls&4bTVM~#CMVgrnuihW6tkUS5I5(!-{LfgWyBQc=l z;^i>zc3^b@8<-ULpA3^ErBIJRwpRL&VlCm7D-~q)(l2-!DRPtbBV8X_?$e02SkyCbD@z7%yttdOaPTqxTV+g4yDvSESX&~JW+d+gv*Ee5a1G)4+hJsfe zVvyx2xb?NN&p;2+ZPs@Y`wXJdVV1GIdr!}^Jyo-g(s|Ma)*g^c9d{8UIS@cN4U9-7 zp58-|rk6Dz-hc;&_h>T^ZV;>n$Gw-*h#v~vA#I>G=mgRNVpO@to#6h}8S)^b>FBjC6cYHCV)t%AG2g2}9de)_5f)g>yWa zR_U7b0SmcM9fwd$h<6#j4kEh&4n=WR=X9VP?h?W_LAnIxle^y|%{hmmUHH{irSmeA zYJJ!vt`rVe+I*|whC$9d916^SRtX0uS77@zjrY2wc0hHsHqa6cyF`5Ddk*u3WD-qfq;OA)!kP=SKH|zp%;pZilc;F@L@nEjY5(^*3JhmT%tj#_B}9CF8?`( zOaR_d?PP0b2^e9}9bIl+csufw^RX9LTi1YD1W^v|-lv~$0|F3pThRSLI9Te4CP01) z`2E2%#GIkz(@q1&D>CGkmNxcFVpai(2lg@~aTf7Ia#Y{Y&>OU9F}2VPm|oqtrRc!v zsm14d++P|cG0Fo6(FTp+_WSFZQtj@??i{#pucp4o$BFu&@BM2pR#1=b@zPwKMfzq` z{MU_s0vyLiW!L;QT%n^#wiY@ec_)stmBBD&D4Rye;w?{jEBFLLp%Jm4X`kSjlLU@) z>vRtah%P|dzYYDis+s>u!YxFc=OEqzQ|6~o5=POVX>J@sjN%z78<)J{`7XNC^d~&w zb9jK{pFu&SiMw{r^Cs-;z(yl|k`lLwp=9?8e0hvnpv5F$2G4@TEAoa=IJoWvLFSVk zc>&u(_o}N4m{wiD(T9W=AOQ{m=YKLe-quIMd1?>L@=$E83LJ$97f1pyQk1(5*~qejIgq`oS%Y}5kr;EhmV^{; zVlbJ$e>hOe7x(U6yT{~{9>^6Kgq#?7_2Bju?#e`Y@LQWKS;wl+1icH$s^1FrnQ2OE zsUpMG(SFDL_BWoxO_9>sc|9Lcv12a=a40vP1k4n75Sez9GA{gB-D5Q=>+0|twrI{P zbwCqB@G=7j2fDKwBA<~NgKVd8BA357KckjsyLk%3_i z3V9KmB+$Qz@p;yzhgLQ!r@Xl?1BrsEw(BD$(J}I2=GI^NsaC3BeLI#_jR;K&_s`J~ z?ycqXThI+Ib-IfU8wC?=y@;oF%3c^snl*A+1q5P1I`;~sOqq}c0$rxbP!a*DH9i_A z9U)iNM{_Pa*21}9f)DC~afxpkZdDj?QNSYrT50LwEDiwtA;r_@D#Z;Nz>&kt&_$&WzkaKttuiU27J)W^R81N0xr5?*#*v5rNu zJLsP6lOP)gV;v8UR#XU16{cRLkFQf6)e5^#w@udu&1tU{nTe@{ASpp1li zy6KWcp`x@l#b4H|iTaOr7XOdN<`Z4i%6HyjXJq_-sW`yX>^HpgxWeB32d4TcL;*Ai z|BPc25)!g`pyY;2;TWf)uzruv3%Ytb$~0B!<$qwd;CMb3B|(4RgydMp^TXnf%9LdkKTed($-zHxU;tRHA=cbseu3D_{m_T9D#pW)MZ* z#tTgF9C6(1-z?)Jt;<(@9e1@GJK!p+qy)GBdm9C(zwX@N-z9o}?Fl>KNj!gUT(`8o zfBRu6^1m%|Adw5+tsubXbJZcsebC$-fjS1<;?f#xO^>!fsLN;GHiB`$73a#L{n9wD8VER$&#kj(23?7*iePLKkPLN6M8%#{Y!9s9+_O%wDn}?sV2r*V4_jqFM;h>YZ9x5gR%pdl z>(!P8yBXmXFOEAEGE2ZYZND@49qpfPHe zH7x~YF~}x7*;ZcN0KiPRzaWCUUn^+8&f?i>)6P-B0JB_I^8kyWU@Wp>X;}d^^A%$( zXdEls{*oi{OcGu1sI#4LdJwr~f1nz92DR|Rozh?JbHUGD+t$bN@rdtQZ5RL@TBMIH z8YRzz7~mk?Pr^?Fa{!N2^h$i1g_5tUup zovM-Xm4g1adK6lPtF5XY1?$WSQyaWAjcZ%g9GECdV*Jc6@b6LiP4#*wXyqxxugqEC!WsqA9${g$Y zPVV`^9Ohrnwyq1iA&>K`t`1_=GD#l>+F@`N6@o{m2#3H*FEvhpc8Vb=g0oloE#{;9 zW8Et2Psq=32K;v3OK8WdpY|_q^RDBKVDR?%95kr+6H$hF>bV$^>7WI0sYvI7o#ci_ zRXrRMfdU@~P;#r{0b6r0o;vT_kU+T=SBLULX_lUTtGGNfEeC3nwv++UEK?(<-{kX# zvJ(8K2Elp+g3HbN4bltv3J)|Fbx3@(bh#)J#9|Mo8;YeJU>JpzFKhc1Uw)DB?wM28 zFYF0jE-gbWSp}@~jXk?~1_iK$IMP2@>@yX-^D*q3%$>4ZL~)-mkJc>oWByE8cx<|t zQY>Kx7hp9W^YiF&rXveKcN?yg`+dLu;<9VYEaeC7Uu}0@Two2=u6`~+3tz&DBz^zL z{mwA@uq3qanMJEE6_MeXXbPn?w^SO?baf6f^tiNu^IF|)5(gb{-j#PSyVLk!nI@=T zu?zb5W`xORi-Wuc$5-p4eEgKoa}C{M#dyx^YPaZHZ}O3N@12X?*b}FAOywe9!VI$h z?yv8e{+pBxFz6o@19&9on(DGA@*s10CEz;-yOcZfi+l0QDb(!(v)Zu|FrMDeB_WY8 zmv@mlqN37I&uhc8EXErm)}um=x5T%D)g;6#s4$9*yH;y3Ec_dbv4MeeA%_~a*Uy#m z;iYks{|(h6xT{M3UyTK1kGM@f^XoPOTY_D~LC(vlAHRP86U&>h5;QHo=X5FGqs2n> ztM57q!Wt45R9x3zs$Fc4X)k>yalG!UP};-er1u`XUk58T-6;L%{?o*UnjyGmI#}u~ z{rXIG*qnQ=C9Q+=SE`pB_9BGAc zp=TDH{f%vZmN+7oD+Y`zTwmV*`H5nl_;u8bMYalsuf1WEa}L3iV%*I%$#fD#&o^0< zoRn4yw^mqVBHNvVb1S9;D{C~tz5&I=ajh!=6Q62Um-cb7PZQSHDw&XcTQ|PhGmDb8 z^ftT#orl_q#lzP$-l|wttNv7DtIcvJ*45oqm>`xL{NlDbBS9KFb`@>_gKarQsOKQ_ zn(4wsgf8~43cO~H7?e8USdo6SWoPh%%A2bmA*>zsYO6H^%5ju|BJe0obY3r1fo(ye zBF4hufi=lC>FpY$d&1()|MIDQoy;`-;EE~2Dk~}OW3?xeJmKM&NqVczgNnnWyR!cV zPBN&T44NxW7?=O-KPs&c!VdIX4K4=)?gbOd@E+N=1~VV?$%ZB>vbCOZ=x(z zZfuR&ZOljl!$FH&^3FF4*7C;L`$R9bvUDsf^>kg6aA;T(Q;W<;fRB>)(OA0GBjKP! zOC2vQQzhWSaazn*B!1$_DnR;A$unDp<)dl=ZHF<*Fn^rW_ojxgFx^l?Dey9+DF*ZH zq?lyQP}@8shz^OZoa4M6$EQG)`d01D+9~?QgIqtu6jIih7I-Wl$Z1p7H&ScG)&c z0$!OPzwOd=q^Q%2g%g#ATJMp@-Y`2S85hVdzP_e!g{eRyn_Q;FGx`25u2gxS?dsvi z%u2-{{N0Cbi(MQ2AGo&9V~7YZ%Zd5>YOX356Cvukw@+>n$cz%K5-ln}RG9Y^GDtU~ zy*ZI*05?4C!g^;oC+9=u<){EBFKH}=sY|$*$jIX7a4<<&FWtU!&GZ@-ZCj8#9^>-b zqFT2`9A6Y;=*{dv3rtHgCWfpScZ_v8vT1THZ4#y|Ha4ZU=)9Bj^R|y+(+zji-LG%B zMg9C-h(2*dCASo!b#|z6ier+M{V~7ZH0OSXC6z==N>^*C_1d? z5^k67`1c1d?#1UYuA2Uz7J!Vsh>Ruly3?aEeDXOXR5_nA50mU8MYG&}kt?)y-oxDr zw=SENG_bHdk=Oou*9Z5ZiX~aO;*YvE%D@!G`ZsHJM>NIr6<220w3SKAu!nAb&B?6w zVSYVe8&r)orqm?9{~lt;)x8OpER`C34|ohbgruYoS>$>x{;YnKt{cFol+iOG`0;wm z{n=zpzSmpT$%gacF_RA)kyzS&F_)ECoTn_ZJFT^^fH#)LE8MS^g!0t@X7JFktNRZO z=aeH#XC-@auLRbp#u&yVjt=RdTC*?v6a6+-9LWnRuCWXjvaY!@ll?i#kB?IyP&OX6qeSrO7e%JLe>M#^$vkWVU#bcd|ykrSy}Xi&kfU6Q)9Qkodd@oGO#zRPW7ZzackXqxv?7 z2f1lF#|W`8x>{3CK~?WIwwqoIXNxcvon~ko5fhp6kfDa z5eiL1sgSdHI(wi-+o=lgq0H&zZl3;K%U}!gTGfo$ajPZ3@xE)DJk#UvZnN)@rAb@Q*Ze)GBE{1 z)TIBL5feTwjK(>mUn6gM_SoC?i ze%}7m$8kb!Lli~AuB?v!O`<^-!ThV~GL;_J$}o%>PirMyB;v0z8^}@-5)Q3B(zJA6 z7oj2?kA?fyiGLTRM7P7oo8%D~{&{k)ZkdVNCdrbeLE`vq2K#p=+ozs<+vKsvBTcj5 z;>V;fgZ#`&2GN5xMcKf;GBN-{^L3$6D;xylpCQmGpuqG4ZY0(Z-VSSqS=|}(?hZb& zH|0a??ia#l%NW4Rm4@dvv9rkbbF|qC{EnH-@%LsIGt`dQqa@$1%C!q2cCqB6Leu30 z9*5!G4SZEmRFD36prywsT_<0W&V;#?fYM)fMs2%_`%tZsUDs^+X*;hF8RJD_rg5t( z_i3I7TcHB5a}Q-i{g2999~Y8cq2OA~Pj$=&w&iP?ab|C?0>BR|J0BHSH{Di-`SFN| zmpZGfO9kKqw@W(YRf3Ic5Z->D*rX#RO+`Aq($dm(%i)}%VPQ)E+l81xidyzy z+R4G@>uGzQLn??_HWx@11^eCmOaSh0l9)oIX2^5Ls_C_FwY&f}|CdsnA(1>gJ1gMk z{2FdMll(D_^D@`7I<~Q{C>kA~FUi@Kd^?y@HW=ppiOgJ7^o=-1m>Dk6gv`q<+q=o2 zEaNRM{DiLL*WuN9KS(C?0gM3o2XdaMAmlR}t{u{hUqd+Bzq`$fOMU!EwH>-204zv9 zWrh~E54IJX5LXxuO9jcO1YgjVHsD0UqN1$8KL?ysFc`8TC7=D<{i4L{6ZZ%HZW_`i z!2ra3`}X@O59FRS`TQX`vj;bj`?}_S#d(^ToA*Xx0bB*0F4$Ap+1XD|7A_9iSRay; znUCMIoVyiK`!ui%ZT+0~=_dz@qTzDg0|VpPe-V0x2VC0stSZn8`S-&rHbf&(=?Qnz zm&<4%kg*?toWcx@ec%~JAs^Mw#3TzVRqkzpnBZUm)R&xntDm6**Xm;sJ=ovKj%HaIfw%=zBN^mV|NUn zD0JtJ*5-Io0ic?r1sT4IfA;qJt9O81{0g^k6M&RbU~eYjmTy43912wp;I8bj#`C*4 zBbGKcA0Vu_LVXq>ETr5KSVmuWLde*12mZ8lL^xFi^9-P0MZ=zTcU!m#K-)Hg|IMQB zdWmuC^LI4_|DHuID`!aPv8trx!VLI=(BzJej_;^|X8(`b($-G+j}~>9EKOHUx$_7J zCtcf9NTA)hK|-RjA>L|THSG?FJtN0O?Yufe1Zv@9?k0!Ggu&Aa+v&+OoX)(Baf%{w zu66y=VVYyJG55GGG*JYq@q{5m4TxpLp)t}=3BYxODtc|58i|DRD^p)h8n_x zH5%tip;zo+h5ck}O@Hyz6##wx*5}W3mL8*;kAI{hT-+^M?D39}Rq*~o;VBzp04-9#c%EKd z%%!5B@EMtAK;~(o4&aO4AS25KlyMYX)J30`*uFUG;c$U175L}vnZH2VtOLIk-lsNG*j53hAR7jM!1ucnVm>5|Pn+YnK`N_qI**JuA zQJRmp>J|GAkCpyTxT8|5D>QyWctxE&0_Bi!XKrKUZ`G+@XA`#xV$0ohgO6W847HQI zKIe(n&>m}d{QG+k`DXx~>l1dSDn3;s6>u|PuaV|21J(yDmXc4axPJfs?F%k0%En*d zF4MR#b-Y3f+Vrn5@hSC0Op*L_VKOUiJ;(ib;xvrvjalJ zqhR#NB@)r-ba9U_ot-jZ0 zDMCe`#o>lcKuEU@EO4M;8+-v^-9YXUo7_{JU%<^yG;TKx9Eb@Cp&(o`Vg<5OZy;Q2 zHLzH|r$;WZQd-VIGr&wy-g*YADwn%t{GnHf8P*{)u$SW!6 z;Ki8eN9YLz~%=DhOt2F`M4AAaT~YL6pZzO zng$6Ygjz?Q$|vW7;Z1;f>_T%lmj%DuGuUEG(x^Y4``i0J;jD- zLuUI6xa2VZUHiLaS|f!Bx8Le^FCZv9XCy-z1?Bvr9fuDR{1x(j3CYJSS?dv!~^QR!9)tcA=0#b+8znQ1V*zy zq27=1Io$=|zpOx1z|$)ka=*z^X88 zf`T!| z*tLR#gOMiP`j)tn^t<1l7xo%UykPGN%KogV#7EK7^mvV-` z1|b%51JqB&I3B^1g9>^@APrUoZnfCbQfu??* zfz}W+bH}OjAV}=o8xmOnry&lg*W9c|GE{)#?H}x+9bZmtdG#$Q?nzsks%Frp1Z^tc z$O9~OsYR?$O)BMCBA0vhLSADiMWW_XoU5{7K3`u{W0*}HeJS$2=4qDHAD2n^+I1J_ zC;X{H5}?IF?4U@D1(H}Hb-F~1XtF+h_`vWD9&6!1gqFh7KtNCs^c26vU-#R%0Wpe% z@FHod(Elm!vC#=^sxH_lHzQhLZWilTha=7Hpz7F#w$F%G7`jp_2xdkC-u>a+_R)Si z1}Q;+Dp!c|Xqx{U9evGS_$HVdf4;ium<95c!BmmAaDJiaZ(bDR7y_lr5yW0s=yJ)H z&d-YB{+AUF6d$+y!G3|%89vE-m|%oAg(KlfxCfFWEIv3BPm&`$U>z8`#r%)>w2P`g zZ#AD%9bY_wCgqitm2$YRW*2mj1aKMHFDNsw{OTVu23jeEc!M!P>IvW!ng{a`lzDC6 zb-N0`)Ee>NRILB2-@L3N*cEBQ5I84UP(l6sPqrI6tgaO*x%Wzw{lnXMBH~#=I`?9{Xv6 z!9wbW>5P%AAJx@9sm0*i&;uVn984xmGw1H ztH=hL<9!?iuLgtEy%hJm+PN)DiYT2J55xS7H@&~enTZOAG_xETOxrbDKMxRNxJE2N z(J1%rgrl_fI)g>d*dwRK{xl59TdAePmL?QsVb87&!XvN#u?z|1Kt1H8JhRizn%j`(p9HTgZ54$^Ftt z(`2dnd1^Z5Y#JapP)B`7XOqDu*9p4@P|wb*@vFByzb@kB1fp;{C^UTIs%M%2FSUHl zfql=RBdtdoRk?>1_J^l08+NKsPt7EpQ!PDKi4P6ZR-BJZwQrfWiEvDD6^&buoDt$a z95*8?=eTcrMcS*j)GYWf`S$*Pxb^dorwr0DZD%dNN)l;!zNs6@`S4g(*X*KZ_mb`^ zsHWdjs>9oKshluFEi?%|g;z*2xEM?VgFxKxn(S_!gdy?wBV4q@1Ab?dv5=NwsHC&{ zkL5{bioIoTd*mXpkmxeN2yg-OE4M^8!N3c>Vo*CYaa!?F&6=M|>tH5|9nth^Kb{_G zk72ZAb?#*+Jp7n`e6||O!AaH>5SCw8H@X+`hzeV#D}SBMxSNNPL?trD8`X^&E8u9^ z2Ux_ng{RbnxC?l@URbzE_wHA6YtP}kUq08F_=m+w{t9EB(B|$H(}(uxLuDFz$y7bQ z+tR}N#p3cI(|=paYDBVElgi8zbzI|^y5I#$LsMG%XxC|7+`=gMbWNrB*Dw3$r=vwG zS8-py1>kIBDqGW2o(Ll@9*_8qLEa<_Vcc29ofsNsx*lB*&W@LXY6aawKljw+>E8um z4&rR@TmITpjEbwSu=|)O?k%M=O;M%)n&tI?u-f;udwvroE~_vmU4Q&0tv|_96h+}) z-xS49hOeMx;B}-a^g7tt(8Sj)S7OJ~;L&of!!icDpN$J~XZ}+<@`*430e(e_6M-6D z-QpQMOMdAO9DiBmAH}q~2~ZKv^JfI1NYM6}wr6J9c6yunk=HKwb9DWI1!O(4C+sZE zYZP*HC=^DuR0T=U4MI-z$>ahu!aL^7OwKf^ZJxq zq$o$?GH`1zG>dN8^}Vb7y0oaB74qY^o_&L_a7S3X$u1{Mz}pP|4AM?s6X|r^ty%t| zzFs$f4`I4$2Opy)R*LF72oyu3-(U$|GlFlk=})_$LqQbB%OhG(ZQ0CW$E}?%>0g*~ zmY&#d!j`JhhQ7|4`N1{BGQL5iJSB{rVgD_>MK{^1dgI&JG_)x=)$l3}(C2gbGiz4= z-0*b^Oj8Mu@gwWTApTl5@)~8SMe?#;T>!ZzYk_IP6%)@LVY3p$gd#KHakFTVEkHQE z+Ad_ga~b3cLy2Q0Vv}3LKezk5=y^uFFbVtU)!49aT2F&wN4T`#?0c!=zI<;Xhgl>I zxE{r>*s>93Dl9_wDL($$Z^9@a3LCGFtfTYYY$|2})8B&w(7WC+wTnZA{n>9DN>184 z3bWep}vkhfPnp#1s!P>DW#OQn%)88Pjys zCkn%4=YQxW1Bz;878fafT-7!gh0($%S1m$?z6IZmKieP6J<1^GU`|h}x4kitUAJlT z4PI8ia+bVuO2c?ir#Zt7?+P8Wxfz!09Jy}@qRE)qi7uz}RZy~eMxY9GR;_(-Kjn49 zTvDOW#9$fvRPxQi?Q$PG+1=$cht3tYW2z&(-?sL$wSy7SbmVdzgaBA6%T|B4yK=ez zcdj!o=EY@+HPQC&Dfi~-1s_=Na7|)iXDgQ%?Ovyjv}0V;48)v2l)H3oNeYXEq9{R( zp`|v4u?u%l#;00;D1j^c(K`X9!P(&52#!?qFCN++b+op8Uy=J99;bHc@BC%#-m4~J z*Gvcw&xOqZjC*i=sidxmFHrk|vc}Z=4ukO$HyOC$v1AYELZ~#h@r5fyy3v3C-Q|6` zqzNE5heC*2;H_;*C!d_m(@RrY&8=_n0(S|e-3M(CyepNxx?VrZAn?K-qOJCRpFLB^ z$B;t9?v&)Vo@GL=Yg4gt*`?68y7jRj6^{^H(FrJ9X#ZLG}Rx zUGli8x6N(Ds-*9?9Z91HT(h)QiLeL8YVa;_&hJ>od-ABIRWix-HD)(uD=trIZK=aA z%+19+{xHrWo)dYU%0~E4br*V!(=6HoW_c1U76ua8BRo7euUPn4&83H^bIpwW*bY5> ze^cS#x<1QwpS}ja4jNHrNoYKoxsM{F;~mardnD$Uuql(2%QulW^dJItA?9B=ap?8@ ze-r__Ka6(u&^xu^o?T5_>iw_HcGVS=Tj3u%#_&FU|8n44_Px&Zxk#UfC>7>cH&O3q z4%O!6usD*KSgPB9UcRim;Z5P)WQ6zHeC*D=*|^;K@QBHWr?Az?KEe>rGLjP(sc%$? z+U1F+O&TcQ`#9%Ix`T1D7son4+CvMo%cb6XT=a8g%4^Ps=6*g_t|HQmhhCw z9AUptUkzK0O1kq*CfHggR53DI2-p(K8_DR~?N-a`w=Sh%D#`fp@GE*A-xYcJUR z5er^$3;TvcHXSaJZ;gvga!XqG=?Co0e!f1QV-gY5oL30Xiojb!(`Z_Hax*gus~Feh z+OY=wwBgfY?dI;}u%G2v+~%hwkmhCh|LtZknQbtiXumuKIQP3(7kR~ zdHaSM4a*3Q!xaTN`t0~oN6X4@TeXlYrj5b+@%b6=UMb2To3;e%${hv z9k0U&J>@%k5o%9(<;q?C+ZCJ)AKJal#tuF_PL8Evzwq!%by=SoDD=;U`oTY#NXJJPu6+B+Jzjd{Ya@qMFa>3SYI zVEbF`&X@4eEl)~^mzkm!16`xHX3rVa;Aufobc+w4F$f?onEq@mDwCKO?Js{*4={>p zPITvPGHF=B5n*#hp)mU5_^c3GY1|=QFgS0BQ;72A`|PQ$LxML>64*t{TIJZa_oC4c zZaJ_umGt)l^C<6T@H`(ZNx$>u%X%Z{LvC8d3fvBtAfCGCzL2wB6*xE#xPM=;$v8 zeIhuMnBkE=#L7eqbW{2y#q|W;G%s2GHMbT7LpvGwiI2>hr?}X0tc;5ARXFTe8>Ux3 zFO0n*qriB$b8`P?f=H0Dal^BRAs4>>cdKZA$PYZKx?ZYiAWyG!k6M2~9Xu#Mks389 z?AZ0_zBiyjNh zKZcCPAH>lwu}1Gty}Qz+pX@Nnh!an_aVpewOlbO^ZOCwPNCOIOUBYV_iT7bQ?zhQs?Y=u_QQGbOkF$5m*J_RvG4Aebm_ z2%#mvtKNi<)1_i5AgK{g&sdO?(F^>{-Hm?o?46SOwXvWpK|bVCbNxHO9Gno4$|jjs zY^?P=wsN?L(jeal5}%Il#uL;+)0Jc05-z+@QbU9zg7kxt4Ukx*n<=0`hru`_r(YD8 zB{mFL0rf`DH#aZ!EILsXsaEM8l=s|3hj*cYO8u8T;tFIdMUhnx;KlHoqj94B4EDGy z=8wm>@TH2brw%3T0TPa8m45ip19GVTwP6$60E7i@r+ES!Fm~Mm5Z%~sO9+K}6B+sS z^Jn!f(4_-5t^sbTU*Rr*6X1Mxtlb1)uK;)q1jDs;bSy=q0rs*56djB|&F}^-#KEDM z30;pvLqp@T5ftlyNgp7xbAS!2)gAMylj;5-4vHET)VTaD9~tP{n>K?+#XloAu3yi- zI35Wgs7_8yEPzT6#H%wo0`)Y77e_r(h-(HBiXy-#=!5o00Mkpe0?>Zzl3VH(Hdz4IV*8QIrVB_m3m=Q-d zpLvO=-=Lt#heD7B0M?#-w0Q^UR6G*ah(f^^c6jF&x1ieYb_^KaCU{)(h+coHc0%SF z*dXU}%+<>S(?wmR5w96|gUc@3a5Daa z0Poxj)pm*Dp||dO4p#dE*jc&?T*w5%WS#GMil@&&K4SH>z2wu!C=Z}P5T*I#-iu5m z>Jm6C_L_9WM~De2ia8KrX#=Yj(i^{3OYravquMkzH4&$o@A;|E%+a`~gtttG)0hrLq6gD1YzUW=JnY zn6EpK4f(kN;GJ<;7#nckPzTH74(jUBj^ALlMo^T4$?DNg-S;SIei&^X`&-O~YgktB z6k}Qb#H1GNvE1cW-ihg|Wm%~ zUo=GB0)KV+KA2>HPbvV$^A_z(e^~uUottvHc=hK7fb)=^O|Yn53xp->1_l{dh%KbN zc>=H>C$JECFe*@!8}{+zN9mq24n6{1p=B*?#{GjmZ4-fO>tppbX%fMo1tHe)2yI2=?SS+B{``=bgpN)P@aYKuWQtP( z@JM1&@)&|G2$#8=r%a~UHK#@v(_o%K+SOoZK*}OzTUM?-KYunF5@CGa zI?^8dtjxGo65J^e!#IDi07C=F9274lG&r=o;a{Vqd_8W90C7yr%>0hCqLTt%Zy&TE zotlsqS>^3AdiNBR-j-k=fty!h(vAg6F2%tLxE6pEuQ$#O11;wR&5D2|`-g3wyoBQb zNr4&8M#jsG3`c{>KE=hK`k0ZNZk8gC||$fO6(1bB*oqXTUJe#OrZ zOn_s9^9{jyowsMjdwq=obJnSB1J`H#(x{PK zUa@B2osn!!B=Yd?cHPU{4__hBB5{;@mmtidNM@uzTe;elcSwu&YQg%5FT_UWK>0BSS>AulJ+&VI(lkpc28 z1Je)*33=wYvA^Qd|N?yc)cQ`?T4q10(A0z zc+x05BJn3u=j7^VNGJxw$pum*hIB9^{|BscP>bM(OUdUUt#Al3%o}j5^xojb_N|vM zVBxaw$*G5WF{MGIFmD#jI!JSFs$)YKJQ9&=IyItq z?drObC}SYGUh8}-9j^h(9W-BRl0)oI=*o44zNOxZX}RMVZ)8`o@t0rwtkYO0czZXW z^ff$|;UGtLd<=AyJJ8joMxo#`X@Fi&gkS|H?Iuuuh6Ao{Zckj0dSt{p{GJF8C-LVA ztQZg2dO~JqKR%7k5OwJ|sQ)N@@E+=}lvO!=6CN5I z{0bb@gIZ_}webO#9=7Kab)Ad7Uw-E`K)8+rP2J#oO0Km_Lq4h60_}#JS;)_OF7%7z zc6CVtmk&-^>2w3wI`V{5hsNh5Ge0e?yd=il+3Ejwtev>>B*!E8LJC4BQua8TvK3cYghL_5pG zu^GMj%l8ahU0%i0R%#wZ zW}gz$8Ms z{g)Z`Y12zR28vW|U7iBAMdMJQek1ig^`rMaGN!)K@n z?_XEP1%9`1JP1=_RsdhC;GrA=6~(GeE-kXxHl>=hOr#mZ?NN1CQEl$A1lre>?(A> zLt_Z`Y8_*!BpWq@Jxyxqz5aRRS}idx%gjE6$Kdu_QxrXqh_%UDqkn2iqVdH&p`&=J z`k%L%)Ny;_v8C9tb$Qrb+MrX)&_9;;PTYjCV=g;(b&Szo%KbA_?zAaXx9v{f4FKx} z2k>*78IuqEk(9|r6}m;ks5)kL%?6*UGelp=6im3d3b;z`+c8E!xr+PELhb^d_ha*D z{sx@gLV|a3p$V&%NxpBd-+sZdb^&%X1C&)N?#tHD-fk$#eS7(dGpDEQB_XXSW8)jo z7rtqTVQ{VgGe&U@)0Y}ju}EfSN`koa%EzMbxtnD>w70a z0sz-1v++xrM6Mt~IQ`LQSO*`Wqi;VY!_~8m|4hx#piBuo_sp5{C zsNWo{?3%^d`?#fEqDNDeie>-9kL_Wcw|RDNE#4136qYdywwFJa33=_Gl&l2uMWI0c zw(+Rg^Hh=IJ7F4?1MIW7qWo2TYgSHtTF>AIe;`uY4)K1Mn@z--wI$qUx5w+JhC%;#O+k9e`xx=n$h2e!YdhqbbTRFvO^=C05 z?x!8t8F0M;gJm+&>G!(%j^=t`Qy|UuUll7^X1U(m8n<+oexrRk`HeMmi?JLZ;N7`m zU_Mse`X6b6>;hMpf-M;ccdeqz{rg@rlP2Z#OZAf$aB++LA)s_(W;yZO8>nQG?Vqf+ z9aS<(=O_f8)W*N*Mym+!LvoW-hKXzW7zx<07jz7evWf&!2EhRQhR;5m;dJ409_Q^4 zBp;6|8w3O+jAXW?Uka6+FiM*0qBLrwFm;p6dNxeJ%BNT_MgXNZP zS4IDu{hrel4ihUPu#2D%A#FG+xs4x%#+A`Lm?aoQS(bL82hja-{Qm>yg+iwXT^9x1 zguUWehhcp0>lG`8NbT^aCeu65+gm-5CA3750LdGYtKg#*eBQ<#b-x8PZN^1P=YZmx z!q`~=b^4;5x?hT~Y`W7u$nNdFNjb45=jiFVD=ukH(DQ`-@Xa$_lIx5X>5QQ~cmwJ& zT-w5s1|=d#|H0_UuaHaQ!hMxcOSyE4H_h3hn7jP?xgtTLnvBm4?@|t;BZHI>Q&(|z z>1~nZHQYt_$~l-n+fRz#oTaC>tB=9_dxg(eaS4y0LA1lSJ~Y<)l4C{g(|X584LPe; z=iD7E}SBLW~+%z+}9w zSVK^Z;&}cw^2poehZr^XM?(DfzN$Rz*WR}3NVcyFJc?d%3W&fB)z{wRrKnZ$%tAX zM^G=`L6uc$K(OOE>K)bX*D=`^ksP!dH5g?nmB+#?PYTYtpQQe~EA{eyg8+f<&;iA@ zjfm-x*p5|FlQ(Q?@lqv~2&eI>9dEG`p?q?N`lD%>Pmte2U3y*N+G>#DszC&b)NHK! zP3s>)D)i0oT?034k2FijuXlK%2Nj}Xl2_kQ#^%?Cmum#?cH-%MkDwW_A48jB*#*9i zWw6w?{J4HaIF%cRN_)arRhh<9c(tfWd!JxR$^5YuvxPOE7B~9ePdJ|O99S8^7c~J1 z?Bxc)?o}ki6T`nSvBzwOe&97rVD3i0#qTWoA|j?JSsE!kFkn@c_y3jk9`IQ9@B8?T zo6L-cRau3QnUa(}G9sB}CK1XAAz4wjkd={0*`uhGaoejX5vhcd3K^+{^gpi8=l}hU z|NnWto}Sku_qg8I^*-O{d7Q_29AN1%yCPXRIW68Ul{emBjSS0ci*&xLJBx7lNwHX7 zr@?rJ#6{EEj|_&QZgDjnDfC4RomCQL`(+O0i_~jaDD5+KKOwDh)I{s)OBnvdZkkyPMwTUg3AB5@`C&V~$9RzX3;rogM1`-{wrj+LCtZ!FN8n@s;#);xURO z6*ZH|f2Hid$x(%lH3dDKWs3T@8pzukKiJwVL@Lf-&?$0{K0JZCl3W2>sF6F znm}8>iDJ46M)1%Ykb@A+TK3Tlv59S_5e|^cYC{PH=BInK#46-+@EQU-MRl=&itb+T->klZh_g22|o8W!v#cZESe_X=s+^3Sq z-*vbJ4scNDDKpHcJq@_NzCZtnAjLsPy%qK4n@W2c5(=Q^^N*gc^NiyEU~LVOkk^Dp zm;2^5c&`u^>3}DP`W6=#t!A?nJj38^eLcf}Ve%~O>_N!v9j(6<(<)Z>JWM9Wb(0-x z3zUo%t$o18>;N-i^!*xeHo`j{AQGf3oL-kU&s7lUEAiG4<=^u316X@bC}9cpqgJIu zZ!U&_#syCc@n3Tv5?+1v{u>B1N@e_lNoDpL8Zq~7dEupMGJRPGS|DC_%=A%0=)sOB z)q%mcP(;2($*h0-93aM4fKG%m3FK#X0ZRdFwfO|Ngcl*eS`pHSz0V(Hv8>Cx_C`aTX6>_XDn^omcnsBLw9>z6R+JNkoj(aF2NOe* zA_(>Mi{0V`9US|#ECjwL>iFkp&5+G;(?Lufu&}TUq8$4MZJE0OvLrlZMgxC5A3+rZaPbn;|IJ+Yhg=ck z7hE<_QEg@jS)Rw*P+)d09yv=tQ z>#dU9^I>fkD_w?dG6=-W8Em~JkoY9}&o_YOZ3_namz8bcMiV^Q`!;9-{ER>NT~y}i z5x0GrnY(@z;^e;$rA{L=wUyt&`TsX=%Ez??_lfv`w|atnbrzpj!L$2t;x&!I)w1-V*SSlr(Cd*)3( zZp9$*A4|}pZ3OHuR4u`Zi!)Bj@fny`-8%tY0tk7<@L}m?*;Qq z{dbPQ*kCiy0{^~!uYbxg98|J$UblwWU);1--7f$DhB~x1L6e{;&3OWp6 z3Z_V+zRGwEznpLaHt9Y6It~$n2Frd$ZIxhYqjRF8p+P1Ansl6KjkkjGm<3E7>A7}pn9e~J;6tP2TjcvFi^AgPm)iPDe?@HTBbQa9IXs@YIp9nlN4TevMhV_N1WA`fti^s=_}ot1`!Y9FoEP; zAE0X7I3j9v4yrUsWdaRN!r1{Z{Y1s$yk=&B&jc3~Q<|EZGy~oq$Ud5L`IlvLbF=ek z-2n*jY=_*W#6V3TTu{n`VXgL)5ZZ|-rzRd!!WOUM7jG_(ive)&F`D(X+h_%yMw8F0zK*znzOpP<-keX(d#Ydl+Yo2G`1>~xls0pyG2KY1 za$Wk>x_-Zd&wp9X$cT-=S7l@p=jT1j>lSrSR693;N8ba9Cud9mh?|$6#)0(C_vCoM zA>e(IR*zM5bm$43A7Y9`B5>ZC{jZJxTXH&}VH~U8@72VYYjOWTb`2qDw184Qkr1RzX%fPEwagD0%%Fhh_@c=|w1=>cYg7PZ&-l>DSIxItizkYUV$HrS75CaHPQ zSpDnz{?M`TwCYLKYXC1sKN1`5N0-R0O7uGjX`Pt^Vqe8Z-1cqa<+_{-}uUbxkG z?z!-r>xNHhPxm7ULOv(q&@V0w*Wd!T5}ggF9Dll)He=^{;!fl3=W!-hLJ$*}t2#ha zLa3=up?lK7D%ARv%RvjOtbHx@4Y8}!CL(jui-GU~$} z?yTQ#K*PDY%?ZM35|+)xiW0CiwiLIt9SK5k)EF?bBSz5>B1CQlCOteS_3IV`Jw1Ua zqXqH+I4Ee(t>`#fM+gP`H~B)Z&H%XxQ_Wk%Fv-TXiD@6lnhbXcezrYifW-_aw6LCV zD6@jSOiaQ7(UpbEAtd>>3knK?TX3%=n?g}JyuR!}+~&`Hw+tZ}ipem#NAJ91T>l`E z`ik|6ii(;67>MX7<2P?t@%#O0*~FZjUJO08MQ;)J1MK{#g>RjLrl_8hc3VxdJF*x= zgDnAclU*{R)5MeNSu5`{5D7=1EsvM=!GF(idviYmlVep_R2%fkbAndR4y^jT$;OSaj)6%pf zRAiITq(8XO1d++pZU-;2Ez(NEOG7cA$0T&@5&4tt|76p+++TAtgnHcLga6(Xd_(Ht zFi?0b5T_Q@u!mY5&OLhDBhQ!aN$blXdoY8>>X>r4YD4Tn;EL>ycbf+=L(`mAb!b6L z`A?UdFh?O@y7mfJ=GG5wJ$8j;H2fTKHYol1luYEaLAAz3MX}Vr3^$ckHj0%Va}29+ zxYc!<&ZGa+CvMx0U#%$7Tired%NHxmBA069L=HQM%7#a|V3_67NMdjUj) zBe{vGWimwUGVRD2r{sN#);-@10j?E;5pA6}@v$u`DMb3AV8g(6;q{H)^hMfk8RF)Z zpG4n?=#pPFq}~sVHMsIOI~hDrAS~9+&-{0inrd!b3fz9l{_!>=Kics|Q~U1ZR?#<( zvM*U5zq#=|x;v-inVs}<4ldLFNB-o_=7UD67XlpRSRRkjfBLY64{Y2jqMHbb8#To6$u-M z_Q_{9p(=lsws3CWNnInO7nRr9@;~M`8Qnw$a%1|CbbbhTrG*b~bIu)l?%5w>#ix#R zY#cbZMWb(7x=Y+Oxmz05R(2)NoA>K~xBzT)dLW?WTNWAx;_r!%HaCE+iX#KV)PrCGK^%=o#!j1GxY zphciI?5a+7l#H3|c{_bQ=SnV>4a&4uET%%N%iC16cGwr)b}<<+loTu};#MM8vQs2) z>D-j`5pK6wD1Pq5UK%iO`XY#0wAGrcH0qB=(l!2Ybvuj5%wdN@#Xj}&Ty9e8bxQFw z??9`J-v$n`rW+4aJ1EjGQ&IREFAuaC$*aBBAX85PH&6y0=(P=RTs1iSrJEG|nTxh2vq_8&X~ zWX@md8DA%0P7Yx*LUCQvJanO`CbzmV`Ht-}fTZ(vG*V)i?jlSiw;MrIK*FzN~&P2W$ z0cw8fZ4|Z|hEvPk+hdPh<2tgX_Lo~-s?4D z>R9-EVQ(RRJ(_L5qjIB+olea-wz9-->9M%VN7`#9!n@vY$a6f9n%|~O%h~6N*(uN0 z{*emeEGwaG5@fYc?3)kBgq_gIj;TsJQWKnS*PkRVN*|&pCs!@ER9`2&yRd{=fyxe+ z(H7@Bp|o==GmMVPnPF@?mN~F5c==iS_yRkZI6L>pf26&Q*;oF_dzS@&A6DX{sQK?a z!1Kh$k>Mv>#~yj0pqEGx_W3A%>wMpTUz1{`>PoeA?hM@qb-oB%(JqC<8?;GWCtc=0 zcQ*-kT>mNdwzYoXWhcEV=?RU6D>;z+i{y7*d`(VvzR)UT?z7T-DlyC3{CJ<3g~W84 z_egJ4$#e^CyIOAk<~0jDr~11Wyx|wAn2l(HyS7w^NNKiNOnwxSHWOad86l}XIwLa1 z#m2w)YWY+?zdO|$qn&=_)8W%!0(osMU}z5eBjy1PrBK0Rh(4& z@$&V=fujb?$srfj-?zOkF5GSY!jRO?F&<~c>RBV^!qa@m<9-Ua0Eui%`c0DP?Nrf8 zf7F?($m<}_jaQ%XqCH17HatUCG;KRJyyPK!NuuQ#Ntm1ai|MNm^M8LQTQ|_jwY}2% zrNb7~y}#qWkEEc%H@Db9jdv7_338Ji1(%N?9O*2hm*q>k?;2QheVqO0HM z;J;nTZ{9&bV{WlQ^0>p9pkuG@KR;)neo0TMi|b6lw_Jfm8M9;tfmDTq2l=EH4w!Da zTF>=~afFU?xRu3PfNZL1aEqQtnCzQGd2F89PdK^6?S2lC0TAS-(-)6n6V&=7aB$7^k>J|nw}rUT4B*`8h&a^4am zznc{fl05i$k-zStptYt$hiWid%WlugM zdmN*2+g_6*QCuwPP`WZf*WPVV)}BW8P86R%YC6a~Be@t(;S$_ib{zQO|N514@7X-r zDN=09=LgJW%Zi^gou3dU3$xiLS*gDI&l?5cjl{I#YDqUOhOWAsrm}c$x)e@HBc*l= zIjfkyE|-LUEq^!|HemzDiisJzu`d=5l5t(dY`Ap-0_v@MNUl0#CB+T;#+Bj?Lj26s zCnp(QtW#>Z9R@exSM0U?)1^ok?4!9&Pgu}*KMTnU;U&*3d@%GWt`6GO-Q69=MvZja zSi6V=g^?!kF>ujB!CIiaf4?1k)$598QDT?)j?}WCT@U$J_3*1#zr{H^IyQ}r@SuF4 zA*E+#Iv{%;@w{;1!a&jS4d8<)Ro+O`xV|oH`|l zA|(U^ye)6ua09Zru4t2TJ%Bg;=FL+m)#(`-`+48i`O8V{*)u*lX*x3vDjXXdo6*cN zFvGF0U!zdFi~~DWxb#aRD?1ybtoOSk`z$7TIFFcl(Y{a7e!;Q(+p30=wr_k4@ z#pPutVl6<6G$yG+Fnp^Cw#QEJAE|SH{6uZS#-5mxvW1EtKk@SRz5|kh%M_%Ucaf?= zU-k0v$VEx;3S`gS0s^W|flXnw18AM!udK|4IP(jrFC39fJC4zF2w7@X19-@G>pPwt z2{rw=PhS3sJ*Y4_yH3k8GBLe+E9_O91sYqvHK+<)1o~!znmzzDs+86b35 zS637~qzzE2-62#+7k~V?<@z2f5vn#eHUqh;G%oKR%V2OaZpWbjShitsv;VC&tqRqHfB%47BeX$gBwPi5s{H#@iLG!wY4{~zr^!f2$Ds> zw7HFLK@v<^o#&t0O4HfW)=QZi#rILU?9#lh+8`fAuknc!JlRVANrZkb2#&?`Pn;Yb6SK3o zUj|%xBP&ZEweA4OQY*mNqTl~#rF#ksMT?K$i+`BN#tvX0ZY$K_%g-5&Je1ty-ZZ^| zg+~K>@kUaTT24;RUP8*D9vbhcD5U; zuoaP$le;PBw9&dDFk`@_X7ouaEq1@-nnR~XdG7Qg{Rt6MI)Cz>L~+rR<+(ddO&{d3 z%m85=ne6AW2nBC9#;n4|K;vJ7s-~8fOUK;%r`n`1AjOR=VBukZx*J) z#ddFw)-AHU2|n!oM~|euW&m>tlZaY}apOke4I4IOFEnf0L6&^rzN22Ya3zSb0igYP zd!;(P-|se@d--xG28N5xD|WDB`SJJ(3TkU>6R#D_gOh{ozI}HARj0V}-gsE1*K=}y z1tb~Qj^NeV{Vrfk`~CqKxr>*Vx4X9&F9776U}bIX^I4)i6c}g%=x>_AYYW$GXoLh6 z{TFxoU%GT0kU(d5cQg!~+MidysQno=_!((BB{Ek?s8akWro{4xUx?S&R>%-benRZxIl{`2Q-NB0vJ z#?6n2Cub`R^G1>nJal_Qt*57l6)V-Rpbf!D`UJ393$Wv(`dlHQN3?PvnL7b<6vv## zQsUCtk%p;_ZKC&E5p~Yp%uT%^$~&ovCM4p>;pPs_q?FAEx?B4DIbOehjiaRWm%#yX zai;e6_QK=$HtywN!8L^ga;qN#AUgHf^CKOUgr(1o>|Odc$OI{p6A@k}S_T&{UR+*T zU%faRk%sa!?%&#!G6Ay@uLW!HUBhKw$PY9Dx~Xy*6eCd(mlD&{BeBzVfMN{|De0h< zuOhQqSZf?PZMctd02Vd0wH<&OUGJIPa$+v*CiKN&Ua%2?F#&%We(joTf=={^c3Tnn zgzfR$W8hYv4;HG2kI!IyiqHSM-OSe4*A<|T0m}SII8soCAI}W=KB}yw0O*PVQ}C-2 z&U9ZW?J`|GC`mAa349dtA@hV_HRL)p@$#2|yXw%eBJ5j~l$4fi_G6O4FCd_Kbd3c4byR)wj=vj&~I)Fs;zKi`1yd8D*cZ)j-|{vzG%TZ!C|>s+-`_|q<+1N9&lB&jVK}Ky!Pz5y-|UBy zltWJwbY*?MnIM@ZdDU9YeJPW8o2%ma_KAdl5Anr-WNKSkW%aV|aFhoDxZd_QTvEu; zRUvLEg2MusoSCfsd=i+~-oI7k9 z#miOVtyP=O%KyBR-c~O|sMUIgc1)exc15G#d-sD%&JSRl*_}ThkDz3~Fwth*;lJC1 z#vw%#$(wL!A64gH!7nVkAA~=SVIfhI?Tg&Wao1(_49w87WMk(uy^(8PVe`Uy?_<9O z!JFs}jr;qZOxwO+`V8Cc@?r8=q?Vn(>1b`OsKECLS1PjV)wl-6Zz7Ic+bt%MAu_Ae zhtcs-e;I$kY8nuAFYk_%9S?gm!|*ick;`{_TevO-y`!Wzg)?t;q6%kh{_W7*b)s9s zepKz;0Ngy6)zu^CS?<{wf3}Z3qj9df4pl}|f+Iw=Q9COfa3 zGT!-*RmXH-^b0i+x+^p z^1XNFP~|`p<7bq?&h0?dx7=BtG;4)H^tN&AsZ?ANJ~_cRhdW1J4@-vVG}3#qEV8}a zk|8c6)WSdH=Mb9`U(woB9BxSdxs_U*Z0}ZiZCJu*2Pu8W(K88-!yCs81f->h4YE>+ zZ#ILdBqo$_N1nf~>}BrXktV?--;_v1U1)LAfiyFCXu2gFt(fiAMcDn zP%`l~{Q}AD#aSofep3y|&@?0|>e-8Lh{<}UA1mD4x3h9kBup$QO{1O5K}y)4Y>+B0 z+P6RH$&qYL*2MX^TvBb=UN73`sfrsNN}bolHH29N$MY#v0!AMSsYdBhUfqdbk{~c2 z`W_uS(?apX;cUA;80N^B6)c-a>hq{wPoz6esx}pIxH{k&&GAhba0HpaTB3ZYbSIS8 zoJx7dg`|ad+tNPYHFjKxMUfUj%AMZhn;Ug_iUrmf$5gcFw66KbxE0CCv@g@g9+5ai z!$h@KmMWmYA5uKo*ulSl;UN1v(po}|{4axddKCm#)y{(7Ln*FyWr4KP`n$cucxw02 z!fOhGG%M78ZJqQly=Z@4$HGV*1ghgDaHY+Xjansrjz~7}i`Snn|A?Y{Ps*b6h%|iQ zq<;bxbUXQ?w?PR$)_TCk(e$GuPrzL&% zw%eR09*bSKE`Ji+Yee6i{>^K{)cyGcflUUoXE?^0*mkH~%@8<$>K*|}u>+DCOjSw> zB98~h#lAS;asBZgpPa?{H`)f_bWEh!U17$Z(n75UR!NGS4pJQF?Mg=$Kd7g=Y|5g# z{$hq~MME8qT`;-pgSI;(iy7OCWAvqcLw4(mtn4Dh)sfe@xk?^VA8K<*vX=-6dUR?0 zc+n3NjmQ#(ktOmdf0**wu~R!e49as={@A!k`s{0WQ3Oypm}5x3EJ5DNKxMw$u*|&3 zq+XuK;6Zf5VcRpOyagZq{I}D^P1`yASiNGWaqZ1)Ci&N&7S8^TO;MxweAd>sOLa=7 zs2MS=|xpWI;nJJx9+1fOrje`|q4R<9+_tqLSba7o;V1IcK zr^<&D%Q6j(>?P~rxq-X>a7~WIj*zEmsGSQoaQ@?RowV0AWZg0mlZ>@xtI;k6R3ij+wQr)P6F6TMfe0|%InBIvu-gU~sVFAiMkWr&S zwnJFn0TQ_rZ<^OVtPLuO$Hj|Mi!%q}w61`WqI%niL_#^>3Av})$0a4=b#-<4u#&W| zL@m<+meUo?#%zPyQ%kyx15Ann3I|=X{Q(B}G$8dd8TX+kIXF0A$|V=1`966=M;t>g zrADk(neZ*=Kz9=@yy5=7+6uUS1(A*xCU9cd8e zMp2QS@84%|RSnU%z0ol-uX+<L01lTQvo{C{pdLplRB^B!AsD0=i4%{yH4uw-@m&> zMRlA;F)G@R-lZl_9A;}2HIT4-|Nd^BJ%#MDAM#QE2YkUTcjkIr9Lp{d5!azjA-;#e zU(%{^85D&0pxniPfPktWTcP<2!%dNH6gr1Nw>g~DGdVH|aE0(CafWPZHEJ}#C|IZD zWOc054b0b;{{>W}j<#q%=ov2vqcLRQ0kyh$CSt@;@aWaGf6vo*2KpX5R~shzN9;@W zza97Ynq)`sl_m{f?uU_qL7>3+$oTj;Ib@&vs6G&s^8j}=H1H4!;x8B@!Va&^tGi&1 z&GGbUwwH}8&w6{~q1*X|sF+cgW9%fU*AEHsS!{r6kPC@l^+A^!Wrj8^CU2vadkn;= z>I;Y64Fm=E@86%jzrML=dZ|v}ov$3fl zgC3zvO-s`za58gqa}c#e_Q0DGc-&bC%Wbi_7^kH!DJl7BVnPk`H}`Opj6j_`3p_R$1f&iC(%5AeE{PSoFp;Ad!PfUkPK81sA) zSFiR19y$wPjbMVYu^&U%oGKSrn|A46>B&d&VC(EBU_3kxn=_w^zM~8?J>Q>nqI=7Y zPn%Tj`DHtI^^1*A7#pKD*Rj8^^MBAfbl~8@SBNjAKZHTfqMKcY;-C(_D$4(ng=Y6N z5IDSxAmbeD_1bx_3Cd4nv6K|!jvk~w$aS*~G`kdTOl0$Ih6O{>tkEd*Agc%bLO_r`zg2j$&{jqcU{S6Og7`=l4VP*eMZ9M7Cd9igCN(!$)_i!KZ4 zxd$wzrK?UT=SCI)y?)zfpQh=_5{raED%@_rCmIzI6pz}x0PETYV&@*#E;3P*Olx`m zoTaz7_p#Sx^yrkvp@6kj8Cxs>fk&hGILimAzoF_6Z-<8o^*6SOvr?RDxu7j6iWn)m zKL@IK8{9rDbWdt(YFkbz0v98x^8S4_H#Z3sbkrCcpY;O=s^&vSdwU*=#mefn-xQ1) zk0QbjW;{@u4uXmvf+3})Mg5Xj3siVLR)3wt5G-d#EwF~Or%qAZ+S>jHfMMIbIUMi_ z<>gDPAttQHFq5d@H_wmaA9~FHfm>WR6O0O(fFaFg{`diNd`; zW9z!%KO9<0{)=RSmgM_A&&AaD`2_IA4ZwXAF0bqbbl)!9v;_i8?7N%7+hpnAKLbvf4&012`(# zo&f4%w;kXJ4Gjgdt!Zq`0pQ`}%v#?HCjAyhTr0+bY-q+a3B150GpJb`G4reec7x}y z8OvD)LBP()1SGw-1Iw=Ypd7HIbI=BrTZyw6sx0kmhe3*h133 z)EGQDOUUEe85Fu(^xu#_I$54L(L6A)83M{99YhZSXudrp3g_qNLjc%HTK6~l{{a3| z<6aJaS4&AnLo^^Nb5U)_0Z{q&ZI!Yqy?lOr5^58a!NDzFwc7yGj!eybXyk*8HwBU0 z-pwr*P>O)CFdZIQ8WLQzpv^i?omxO>ajgGGHy@IwfH?YN4 zSc;9$&RXB)BQe%Ng*g4d1!2fd*RM_CD69lX!MjfHimzv7#R6oXKqf#vzhtfl zq=(=_kB^OoAmZId;xb};{2`tg@YrBfCuHaDo&XVF1x3Y)e^CGIuJ5JASBOIRA$mjT z@m;O0JwU*bu=L!h@^ZDXu-(KC^he~69qj;A%!kMcsyG0c0kkeI=x%3=j69KKP2Qt0=<1d54q-_VW{u@vx)M!Gkd} zHcs-by>pY6uc4!(gVQp(@Kdq^qu$Y@cX2$vLaQj|-B#K@oJ+SsPJR;n?=ad>x=u>) znZjtg_tBrhIX+T;=MXp{L7D@==%?(KQEkn^-57O8TL7P_S%sf7-#3`OFDNKzYHz1QzeQ2oRR04$bYp>W6s}co`(y;(HM;Khu3)-$ z8;j8I6O!bs)L(AwX;}#&O$5)C_FFXsazibr37b@WsYLbH+Oix12$Scgv_K(e1qO|s zOU((SyE@rL!VoDg?`5FYw?zh3BXUdn?7ZQfnF!7q0TT_sYb4v+u!b9otPZ7KsJ5jd zP%@mPuVb~#aVKBq_u0`t`~xHn8=j`~f<`3UBnrm|9iH9)`7sI%8?mPE6TGC7sQDPf zou4bu=vBE-eytyQUCBY2Yhd(Z z_2tyGb^FeZ#;fM2W15WF&t=w(H+nq)UI$pKSVA^+NlOoyw%%9@Owk=Yng4QcNuFP9 zm0CDkhn1BThxd+TF=mIsrvEhlD|xBklWzxCUVF^{KOm9Rp?`-?7wv1ZA;puKnSD5? z2*Qc@_FJt@HUU73s*dfrNN;|La{QJ-%+^4)qu-Af7a?uI!T&I(taUIyc?H;qxQ~Ej4P_; zxq-D|fd%m`TtM4mtW#_Z^(-^SWPLNj!^TeaqyckC<&4pf!Kek-EW z;y@X%pk(pj7nabS#vdQMlk3HC)izoHKP+hf{@BnLLscgg!g6z)KGRQ*4C5(KVwzZD ztEN6ZNU(~an5?bSb6VO3kHBncFGtQKhaN#*0bt+G+!@Sj`8o4cD*rR`^m8zEw7lQT_w4*?rS%0%ZM@vI>Jcrnle)UifICOU?OQeJBaR*x^Q?n9oz z&c+sUzPyn&;#DT1v`QSc~sZu(09k0g3Frjb|@!5Q(r@I^U_DwinH=*}r zk8_C71WuK(6!fX)Fl|2!AHycRGttATuR`TQWLo&@((>{|B8W6&MJbVrgsdc8!BcQ% zc2)*W1|kb00E&+tgL7ie#2uwV_Zf*caU!DZAu=XX2%@}7f$=yxD0HN4hXc99QW%kV zsAGt!>c=6pDbSpG`6uOgP*B6eqsY3D9!ETTcJKF;Ny(tX#qZkys{H&cR&-|kKuj?M z32l4|(tsH2U%!5}L-fLPvU>~W(5TRG*T9Szz=ldt8nSEg?u6$f`URW^nx_k8IR?^977^TXoxH>E>&2Wy?gi=2NcBJLttLPuc*kg|NJ`& z5`*Hutju^YbN@F(1NodfXcef+MZUq@gen(PAxS_L{z5NfmmpEPU=j0x>m0*Ki!)C4 zkps~0W*~tNaTBL_XH!!s$|^kVrxJv}i5D;s&Y5HeUuM;-K;8BRoYtc3>7UW_OF zf7lvWdm+;1O`Gx`84!)L`&Cu9>*`=5aRTlm=*zxnA-&OSLcbsQi11xdl{hV$UG@5M;m z>>`GKx|*BA@Bl>VG=}c6esTj{!+Q^G8NE^;?#bDLL}7c3E~8bv12GRVz#Z~v7jfRe2K-3gDUXO*WCXwVN=cGHrbsr08BBPD4&gi82J$7 ziJ?+Ub?nePCSo=%|Kcdx_e42xnGLZKW$X+8qX;*;hsMW2gFuWV+RwLw*AL)XyMh^$Z>8?2jR|cW z;5HixP5^E%W;$=5n&QJu1`H(PP+!0%f*HxQ1@Mai0Dqs)dE!szZ3=9tbKBq?p=-rg zgxsx^4pEzGeu;dA8kI9TeC^>DB7IG6E3cnoJr)zS!B@`&u&1+;M=AmqKOr z0?yj?lK^s?-@V(WmnzW&J+a%_hWRh;Ugl|fczUYhn-T8Yr8f0E_#!w3Xy=zU|DZ;c zX+g~M;TcC^_7d@vv1~sH@|f&qW@f{W+;2S;CK2E=iYUnF5FynQ+bbGr{6~ybs+~T) z69PpgzqbVk2NNT)fZIcXmJydY6Nr{MF)M?>MMol>kl=w31{5si?8$dee3$^&gxtF) zk}7F^;vtJ56&~|J6>zvJA3RX^@Q?b20$jJDCedc3x z(5ZJDfhGX?ONR$F49XLL4BYq{`NgvD42cend|lYjhR9 zUUt|SlQvV-XoIxDM`LV!oC=EoLgGi18AK=F_xn4`Plv_6i;i@5(j$-&t^Svwt9gGL zI5Kwt1wsc_Fq*KU#~s>r2I&MhLXeExurwwc?QpU=L#h)25+ z%5Tr}Iud1=?^H_X;pG*Eh3<7A9NsZ=H4jUMG1RJDn0G=h5C*my!6o?eu2!yLZBeh< zWss3%=jO(Yg9?^a-0%o$$KpzZIdJZyD3_E~M{n;&1cia3x9}Pugm*}~WtMjMCYrCw zAvnp;CNxB!*m1y%xbIA;TOmbu3aGcog$pe>ylZ^0<2}#-+3P;Kjlf;Nx51Z($$`6b z2e6W>$Xy7&4kB_pwh6(M9QR4K>N;{sLmsyek>V5%FXGN(sIn3Qf3oLdkoypq zjf{)f%|YkhJ+A7sGM?Z)A#2w5KST$F9-ZxNV~mI0qoAX>gQY4D;zfi>b{oEu5g>}9 zk0y*Mx^4TbPsdhqnrdm$L5edJvt1l8H1fBK}Zi?osX?j75Vs(Tz99F^cXKwQgk zE>_D-7Hzy(Zhf5m)gn}tc|fjrAfLFQs1?_W(nF@*Whb8g|NnmuM_rL&z#!xpVBH&v zbPn=7NG*%G*tbhP_7rrGQq0ibD&<3miUY6x-+#D7|J$%w{-{IY=vGG({yCy~RHIzY HF6{pSDR4M+ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer-members.html new file mode 100644 index 00000000..4a874ae7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer-members.html @@ -0,0 +1,132 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +

+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Optimizer Member List
+
+
+ +

This is the complete list of members for rtabmap::Optimizer, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeBACorrespondences(const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())rtabmap::Optimizer
create(const ParametersMap &parameters)rtabmap::Optimizerstatic
create(Optimizer::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Optimizerstatic
epsilon() constrtabmap::Optimizerinline
getConnectedGraph(int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) constrtabmap::Optimizer
gravitySigma() constrtabmap::Optimizerinline
isAvailable(Optimizer::Type type)rtabmap::Optimizerstatic
isCovarianceIgnored() constrtabmap::Optimizerinline
isRobust() constrtabmap::Optimizerinline
isSlam2d() constrtabmap::Optimizerinline
iterations() constrtabmap::Optimizerinline
kTypeCeres enum valuertabmap::Optimizer
kTypeCVSBA enum valuertabmap::Optimizer
kTypeG2O enum valuertabmap::Optimizer
kTypeGTSAM enum valuertabmap::Optimizer
kTypeTORO enum valuertabmap::Optimizer
kTypeUndef enum valuertabmap::Optimizer
landmarksIgnored() constrtabmap::Optimizerinline
optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizervirtual
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::Optimizervirtual
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::Optimizer
optimizeIncremental(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
Optimizer(int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma()) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
Optimizer(const ParametersMap &parameters) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
parseParameters(const ParametersMap &parameters)rtabmap::Optimizervirtual
priorsIgnored() constrtabmap::Optimizerinline
setCovarianceIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setEpsilon(double epsilon) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setGravitySigma(float value) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setIterations(int iterations) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setLandmarksIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setPriorsIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setRobust(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setSlam2d(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
type() const =0rtabmap::Optimizerpure virtual
Type enum namertabmap::Optimizer
~Optimizer() (defined in rtabmap::Optimizer)rtabmap::Optimizerinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer.html b/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer.html new file mode 100644 index 00000000..c117e974 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer.html @@ -0,0 +1,1421 @@ + + + + + + + + +RTAB-Map: rtabmap::Optimizer Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Abstract base for pose-graph and bundle-adjustment optimizers. + More...

+ +

#include <Optimizer.h>

+
+Inheritance diagram for rtabmap::Optimizer:
+
+
Inheritance graph
+ + + + + + + + + + + + + +
[legend]
+ + + + + +

+Public Types

enum  Type {
+  kTypeUndef = -1 +, kTypeTORO = 0 +, kTypeG2O = 1 +, kTypeGTSAM = 2 +,
+  kTypeCeres = 3 +, kTypeCVSBA = 4 +
+ }
 Graph-optimizer back-end identifier. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void getConnectedGraph (int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) const
 Extracts the connected component reachable from fromId.
 
virtual Type type () const =0
 Returns the concrete back-end identifier (one of Type).
 
virtual void parseParameters (const ParametersMap &parameters)
 Reads shared knobs from parameters and applies them to this instance.
 
std::map< int, Transform > optimizeIncremental (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization that grows the graph one node at a time.
 
std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization (single shot).
 
virtual std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization with marginal covariance of rootId.
 
virtual std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
 
std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA wrapper that derives camera models and correspondences from signatures.
 
+std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA convenience wrapper: like the overload above but ignores the refined 3D points and observation map.
 
Transform optimizeBA (const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Refine a single two-frame link via BA.
 
void computeBACorrespondences (const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())
 Build BA correspondences (3D points + per-frame observations) from signatures.
 
Getters for tunables shared across back-ends.
int iterations () const
 Max solver iterations.
 
bool isSlam2d () const
 True if optimizing in SE(2) instead of SE(3).
 
bool isCovarianceIgnored () const
 If true, all edges share an identity information matrix.
 
double epsilon () const
 Convergence threshold on cost decrease.
 
bool isRobust () const
 If true, use a robust kernel / switchable factors against bad loop closures.
 
bool priorsIgnored () const
 If true, unary priors on poses are dropped.
 
bool landmarksIgnored () const
 If true, landmark/marker observations are dropped.
 
float gravitySigma () const
 Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it.
 
Setters mirroring the corresponding getters.
void setIterations (int iterations)
 
void setSlam2d (bool enabled)
 
void setCovarianceIgnored (bool enabled)
 
void setEpsilon (double epsilon)
 
void setRobust (bool enabled)
 
void setPriorsIgnored (bool enabled)
 
void setLandmarksIgnored (bool enabled)
 
void setGravitySigma (float value)
 
+ + + + + + + + + + +

+Static Public Member Functions

static bool isAvailable (Optimizer::Type type)
 Returns whether type was compiled in (its third-party dependency was found).
 
static Optimizer * create (const ParametersMap &parameters)
 Factory: build an optimizer from a ParametersMap.
 
+static Optimizer * create (Optimizer::Type type, const ParametersMap &parameters=ParametersMap())
 Factory: build an optimizer of a specific type. Caller owns the result.
 
+ + + + + +

+Protected Member Functions

+ Optimizer (int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma())
 
+ Optimizer (const ParametersMap &parameters)
 
+

Detailed Description

+

Abstract base for pose-graph and bundle-adjustment optimizers.

+

Optimizer is a factory + interface in front of several third-party back-ends (TORO, g2o, GTSAM, Ceres, cvsba). Use create() to instantiate one based on the Optimizer/Strategy parameter; use isAvailable() to check whether a given back-end was compiled in.

+

Two families of methods are exposed:

    +
  • Pose-graph optimization (optimize / optimizeIncremental) — refines poses given relative-pose constraints. Subclasses override optimize() with covariance output.
  • +
  • Bundle adjustment (optimizeBA) — jointly refines poses and 3D points using reprojection error. Subclasses override the lowest-level overload; the others are convenience wrappers that fill in models/correspondences from Signature data.
  • +
+

Common knobs (iterations, robust kernels, 2D-vs-3D, etc.) are configured through parseParameters() or per-attribute setters and apply to whichever back-end is selected.

+ +

Definition at line 87 of file Optimizer.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::Optimizer::Type
+
+ +

Graph-optimizer back-end identifier.

+ + + + + + + +
Enumerator
kTypeUndef 

Unspecified / invalid.

+
kTypeTORO 

TORO (tree-based relaxation).

+
kTypeG2O 

g2o (general graph optimization, supports BA).

+
kTypeGTSAM 

GTSAM (factor graphs, iSAM2-style incremental).

+
kTypeCeres 

Ceres Solver (nonlinear least squares, supports BA).

+
kTypeCVSBA 

cvsba (sparse bundle adjustment only).

+
+ +

Definition at line 91 of file Optimizer.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ ~Optimizer()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::Optimizer::~Optimizer ()
+
+inlinevirtual
+
+ +

Definition at line 135 of file Optimizer.h.

+ +
+
+

Member Function Documentation

+ +

◆ isAvailable()

+ +
+
+ + + + + +
+ + + + + + + + +
static bool rtabmap::Optimizer::isAvailable (Optimizer::Type type)
+
+static
+
+ +

Returns whether type was compiled in (its third-party dependency was found).

+

kTypeUndef is treated as unavailable. create() falls back through this check to pick the first available back-end when the requested one is missing.

+ +
+
+ +

◆ create()

+ +
+
+ + + + + +
+ + + + + + + + +
static Optimizer * rtabmap::Optimizer::create (const ParametersMap & parameters)
+
+static
+
+ +

Factory: build an optimizer from a ParametersMap.

+

Reads Optimizer/Strategy from parameters; falls back to the default strategy if the chosen back-end isn't compiled in. Caller owns the returned pointer.

+ +
+
+ +

◆ getConnectedGraph()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Optimizer::getConnectedGraph (int fromId,
const std::map< int, Transform > & posesIn,
const std::multimap< int, Link > & linksIn,
std::map< int, Transform > & posesOut,
std::multimap< int, Link > & linksOut 
) const
+
+ +

Extracts the connected component reachable from fromId.

+

Walks linksIn breadth-first starting at fromId and copies every visited pose (from posesIn) and every traversed link into posesOut / linksOut. Use this to isolate the subgraph that actually affects fromId before calling optimize(), since the back-ends require a single connected component.

+ +
+
+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Type rtabmap::Optimizer::type () const
+
+pure virtual
+
+ +

Returns the concrete back-end identifier (one of Type).

+ +

Implemented in rtabmap::OptimizerCeres, rtabmap::OptimizerCVSBA, rtabmap::OptimizerG2O, rtabmap::OptimizerGTSAM, and rtabmap::OptimizerTORO.

+ +
+
+ +

◆ iterations()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Optimizer::iterations () const
+
+inline
+
+ +

Max solver iterations.

+ +

Definition at line 142 of file Optimizer.h.

+ +
+
+ +

◆ isSlam2d()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Optimizer::isSlam2d () const
+
+inline
+
+ +

True if optimizing in SE(2) instead of SE(3).

+ +

Definition at line 143 of file Optimizer.h.

+ +
+
+ +

◆ isCovarianceIgnored()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Optimizer::isCovarianceIgnored () const
+
+inline
+
+ +

If true, all edges share an identity information matrix.

+ +

Definition at line 144 of file Optimizer.h.

+ +
+
+ +

◆ epsilon()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::Optimizer::epsilon () const
+
+inline
+
+ +

Convergence threshold on cost decrease.

+ +

Definition at line 145 of file Optimizer.h.

+ +
+
+ +

◆ isRobust()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Optimizer::isRobust () const
+
+inline
+
+ +

If true, use a robust kernel / switchable factors against bad loop closures.

+ +

Definition at line 146 of file Optimizer.h.

+ +
+
+ +

◆ priorsIgnored()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Optimizer::priorsIgnored () const
+
+inline
+
+ +

If true, unary priors on poses are dropped.

+ +

Definition at line 147 of file Optimizer.h.

+ +
+
+ +

◆ landmarksIgnored()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Optimizer::landmarksIgnored () const
+
+inline
+
+ +

If true, landmark/marker observations are dropped.

+ +

Definition at line 148 of file Optimizer.h.

+ +
+
+ +

◆ gravitySigma()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Optimizer::gravitySigma () const
+
+inline
+
+ +

Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it.

+ +

Definition at line 149 of file Optimizer.h.

+ +
+
+ +

◆ setIterations()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Optimizer::setIterations (int iterations)
+
+inline
+
+ +

Definition at line 154 of file Optimizer.h.

+ +
+
+ +

◆ setSlam2d()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Optimizer::setSlam2d (bool enabled)
+
+inline
+
+ +

Definition at line 155 of file Optimizer.h.

+ +
+
+ +

◆ setCovarianceIgnored()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Optimizer::setCovarianceIgnored (bool enabled)
+
+inline
+
+ +

Definition at line 156 of file Optimizer.h.

+ +
+
+ +

◆ setEpsilon()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Optimizer::setEpsilon (double epsilon)
+
+inline
+
+ +

Definition at line 157 of file Optimizer.h.

+ +
+
+ +

◆ setRobust()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Optimizer::setRobust (bool enabled)
+
+inline
+
+ +

Definition at line 158 of file Optimizer.h.

+ +
+
+ +

◆ setPriorsIgnored()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Optimizer::setPriorsIgnored (bool enabled)
+
+inline
+
+ +

Definition at line 159 of file Optimizer.h.

+ +
+
+ +

◆ setLandmarksIgnored()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Optimizer::setLandmarksIgnored (bool enabled)
+
+inline
+
+ +

Definition at line 160 of file Optimizer.h.

+ +
+
+ +

◆ setGravitySigma()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Optimizer::setGravitySigma (float value)
+
+inline
+
+ +

Definition at line 161 of file Optimizer.h.

+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::Optimizer::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Reads shared knobs from parameters and applies them to this instance.

+

Subclasses override to additionally read back-end-specific keys (e.g. g2o/Solver, GTSAM/Optimizer); they should call this base implementation first.

+ +

Reimplemented in rtabmap::OptimizerCeres, rtabmap::OptimizerG2O, and rtabmap::OptimizerGTSAM.

+ +
+
+ +

◆ optimizeIncremental()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::map< int, Transform > rtabmap::Optimizer::optimizeIncremental (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & constraints,
std::list< std::map< int, Transform > > * intermediateGraphes = 0,
double * finalError = 0,
int * iterationsDone = 0 
)
+
+ +

Pose-graph optimization that grows the graph one node at a time.

+

Inserts poses in poses iteration order, propagating odometry edges (Neighbor / NeighborMerged) directly and triggering a call to optimize() whenever a loop closure is added. A final full optimize() pass anchors at rootId. Useful for warm-starting heavily-deformed initial guesses where a single-shot optimize() can diverge.

+
Parameters
+ + + + + + + +
rootIdPose whose absolute transform is held fixed.
posesInitial poses keyed by id.
constraintsRelative-pose constraints (see Link::Type).
intermediateGraphesOptional: appended per outer iteration for debug/visualization.
finalErrorOptional: written with the solver's final cost.
iterationsDoneOptional: written with the solver's actual iteration count.
+
+
+
Returns
Refined poses (same key set as poses), or empty on failure.
+ +
+
+ +

◆ optimize() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::map< int, Transform > rtabmap::Optimizer::optimize (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & constraints,
std::list< std::map< int, Transform > > * intermediateGraphes = 0,
double * finalError = 0,
int * iterationsDone = 0 
)
+
+ +

Pose-graph optimization (single shot).

+

Convenience overload that discards the output covariance. See the covariance-returning overload below for parameter docs.

+ +
+
+ +

◆ optimize() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::Optimizer::optimize (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & constraints,
cv::Mat & outputCovariance,
std::list< std::map< int, Transform > > * intermediateGraphes = 0,
double * finalError = 0,
int * iterationsDone = 0 
)
+
+virtual
+
+ +

Pose-graph optimization with marginal covariance of rootId.

+

This is the primary back-end entry point — concrete subclasses override it. The base implementation just emits an error.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed during optimization.
posesInitial pose estimates.
constraintsRelative-pose constraints between pose ids (and optionally to landmarks).
outputCovarianceOutput: 6x6 covariance of the last optimized pose w.r.t. rootId (3x3 for 2D mode). Filled only if the back-end supports it.
intermediateGraphesOptional: appended at each iteration for debug/visualization.
finalErrorOptional: written with the solver's final cost.
iterationsDoneOptional: written with the solver's actual iteration count.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented in rtabmap::OptimizerCeres, rtabmap::OptimizerG2O, rtabmap::OptimizerGTSAM, and rtabmap::OptimizerTORO.

+ +
+
+ +

◆ optimizeBA() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::Optimizer::optimizeBA (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & links,
const std::map< int, std::vector< CameraModel > > & models,
std::map< int, cv::Point3f > & points3DMap,
const std::map< int, std::map< int, FeatureBA > > & wordReferences,
std::set< int > * outliers = 0 
)
+
+virtual
+
+ +

Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).

+

Concrete subclasses (g2o, Ceres, cvsba) override this; the base implementation errors out. The other optimizeBA() overloads ultimately funnel here.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed. If negative, ALL poses other than the (positive) lowest id are held fixed.
posesInitial pose estimates keyed by frame id.
linksEdges used to define the BA problem topology.
modelsCamera model(s) per frame; for stereo, Tx must be set on the model (= -baseline*fx). Multi-camera rigs have multiple entries per frame.
points3DMapIn/out: world 3D points keyed by word id; refined on return.
wordReferencesObservations: <wordId, <frameId, FeatureBA>>. See FeatureBA.
outliersOptional output: word ids dropped by the back-end's outlier rejection.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented in rtabmap::OptimizerCeres, rtabmap::OptimizerCVSBA, rtabmap::OptimizerG2O, and rtabmap::OptimizerGTSAM.

+ +
+
+ +

◆ optimizeBA() [2/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::map< int, Transform > rtabmap::Optimizer::optimizeBA (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & links,
const std::map< int, Signature > & signatures,
std::map< int, cv::Point3f > & points3DMap,
std::map< int, std::map< int, FeatureBA > > & wordReferences,
bool rematchFeatures = false,
const ParametersMap & registrationParameters = ParametersMap() 
)
+
+ +

BA wrapper that derives camera models and correspondences from signatures.

+

Builds models per frame from each Signature's SensorData (mono or stereo, with stereo-baseline encoded in Tx), calls computeBACorrespondences() to populate points3DMap / wordReferences from the signatures' words, then delegates to the back-end overload above.

+
Parameters
+ + + +
rematchFeaturesIf true, re-match descriptors across linked frames before building correspondences (more accurate, more expensive).
registrationParametersForwarded to RegistrationVis when re-matching.
+
+
+ +
+
+ +

◆ optimizeBA() [3/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Transform rtabmap::Optimizer::optimizeBA (const Link & link,
const CameraModel & model,
std::map< int, cv::Point3f > & points3DMap,
const std::map< int, std::map< int, FeatureBA > > & wordReferences,
std::set< int > * outliers = 0 
)
+
+ +

Refine a single two-frame link via BA.

+

Sets the from frame at identity and the to frame at link.transform(), then runs BA over the supplied 3D points and observations. Returns the refined relative transform, or link.transform() unchanged on failure.

+ +
+
+ +

◆ computeBACorrespondences()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Optimizer::computeBACorrespondences (const std::map< int, Transform > & poses,
const std::multimap< int, Link > & links,
const std::map< int, Signature > & signatures,
std::map< int, cv::Point3f > & points3DMap,
std::map< int, std::map< int, FeatureBA > > & wordReferences,
bool rematchFeatures = false,
bool useLinkTransformAsGuess = false,
ParametersMap registrationParameters = ParametersMap() 
)
+
+ +

Build BA correspondences (3D points + per-frame observations) from signatures.

+

For each link, matches words between the two signatures with RegistrationVis, triangulates / lifts depth into world coordinates using the frames' initial poses, and populates points3DMap (one entry per word id) and wordReferences (one entry per (word, frame) observation).

+
Parameters
+ + + + +
rematchFeaturesIf true, descriptors are re-matched between frames instead of relying on pre-existing word ids — more robust to feature drift.
useLinkTransformAsGuessIf true, the link's transform seeds the PnP guess instead of estimating it from scratch.
registrationParametersForwarded to RegistrationVis (estimation type, inlier counts, NNDR, etc.).
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA-members.html new file mode 100644 index 00000000..303ce747 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA-members.html @@ -0,0 +1,136 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OptimizerCVSBA Member List
+
+
+ +

This is the complete list of members for rtabmap::OptimizerCVSBA, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::OptimizerCVSBA)rtabmap::OptimizerCVSBAstatic
computeBACorrespondences(const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())rtabmap::Optimizer
create(const ParametersMap &parameters)rtabmap::Optimizerstatic
create(Optimizer::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Optimizerstatic
epsilon() constrtabmap::Optimizerinline
getConnectedGraph(int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) constrtabmap::Optimizer
gravitySigma() constrtabmap::Optimizerinline
isAvailable(Optimizer::Type type)rtabmap::Optimizerstatic
isCovarianceIgnored() constrtabmap::Optimizerinline
isRobust() constrtabmap::Optimizerinline
isSlam2d() constrtabmap::Optimizerinline
iterations() constrtabmap::Optimizerinline
kTypeCeres enum valuertabmap::Optimizer
kTypeCVSBA enum valuertabmap::Optimizer
kTypeG2O enum valuertabmap::Optimizer
kTypeGTSAM enum valuertabmap::Optimizer
kTypeTORO enum valuertabmap::Optimizer
kTypeUndef enum valuertabmap::Optimizer
landmarksIgnored() constrtabmap::Optimizerinline
optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizervirtual
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::OptimizerCVSBAvirtual
rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
rtabmap::Optimizer::optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::Optimizer
optimizeIncremental(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
Optimizer(int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma()) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
Optimizer(const ParametersMap &parameters) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
OptimizerCVSBA(int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored()) (defined in rtabmap::OptimizerCVSBA)rtabmap::OptimizerCVSBAinline
OptimizerCVSBA(const ParametersMap &parameters) (defined in rtabmap::OptimizerCVSBA)rtabmap::OptimizerCVSBAinline
parseParameters(const ParametersMap &parameters)rtabmap::Optimizervirtual
priorsIgnored() constrtabmap::Optimizerinline
setCovarianceIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setEpsilon(double epsilon) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setGravitySigma(float value) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setIterations(int iterations) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setLandmarksIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setPriorsIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setRobust(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setSlam2d(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
Type enum namertabmap::Optimizer
type() constrtabmap::OptimizerCVSBAinlinevirtual
~Optimizer() (defined in rtabmap::Optimizer)rtabmap::Optimizerinlinevirtual
~OptimizerCVSBA() (defined in rtabmap::OptimizerCVSBA)rtabmap::OptimizerCVSBAinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA.html b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA.html new file mode 100644 index 00000000..7672fafe --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA.html @@ -0,0 +1,458 @@ + + + + + + + + +RTAB-Map: rtabmap::OptimizerCVSBA Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OptimizerCVSBA Class Reference
+
+
+
+Inheritance diagram for rtabmap::OptimizerCVSBA:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OptimizerCVSBA:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 OptimizerCVSBA (int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored())
 
 OptimizerCVSBA (const ParametersMap &parameters)
 
virtual Type type () const
 Returns the concrete back-end identifier (one of Type).
 
virtual std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
 
- Public Member Functions inherited from rtabmap::Optimizer
void getConnectedGraph (int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) const
 Extracts the connected component reachable from fromId.
 
virtual void parseParameters (const ParametersMap &parameters)
 Reads shared knobs from parameters and applies them to this instance.
 
std::map< int, Transform > optimizeIncremental (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization that grows the graph one node at a time.
 
std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization (single shot).
 
virtual std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization with marginal covariance of rootId.
 
std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA wrapper that derives camera models and correspondences from signatures.
 
+std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA convenience wrapper: like the overload above but ignores the refined 3D points and observation map.
 
Transform optimizeBA (const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Refine a single two-frame link via BA.
 
void computeBACorrespondences (const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())
 Build BA correspondences (3D points + per-frame observations) from signatures.
 
int iterations () const
 Max solver iterations.
 
bool isSlam2d () const
 True if optimizing in SE(2) instead of SE(3).
 
bool isCovarianceIgnored () const
 If true, all edges share an identity information matrix.
 
double epsilon () const
 Convergence threshold on cost decrease.
 
bool isRobust () const
 If true, use a robust kernel / switchable factors against bad loop closures.
 
bool priorsIgnored () const
 If true, unary priors on poses are dropped.
 
bool landmarksIgnored () const
 If true, landmark/marker observations are dropped.
 
float gravitySigma () const
 Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it.
 
void setIterations (int iterations)
 
void setSlam2d (bool enabled)
 
void setCovarianceIgnored (bool enabled)
 
void setEpsilon (double epsilon)
 
void setRobust (bool enabled)
 
void setPriorsIgnored (bool enabled)
 
void setLandmarksIgnored (bool enabled)
 
void setGravitySigma (float value)
 
+ + + + + + + + + + + + + +

+Static Public Member Functions

+static bool available ()
 
- Static Public Member Functions inherited from rtabmap::Optimizer
static bool isAvailable (Optimizer::Type type)
 Returns whether type was compiled in (its third-party dependency was found).
 
static Optimizer * create (const ParametersMap &parameters)
 Factory: build an optimizer from a ParametersMap.
 
+static Optimizer * create (Optimizer::Type type, const ParametersMap &parameters=ParametersMap())
 Factory: build an optimizer of a specific type. Caller owns the result.
 
+ + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Optimizer
enum  Type {
+  kTypeUndef = -1 +, kTypeTORO = 0 +, kTypeG2O = 1 +, kTypeGTSAM = 2 +,
+  kTypeCeres = 3 +, kTypeCVSBA = 4 +
+ }
 Graph-optimizer back-end identifier. More...
 
- Protected Member Functions inherited from rtabmap::Optimizer
+ Optimizer (int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma())
 
+ Optimizer (const ParametersMap &parameters)
 
+

Detailed Description

+
+

Definition at line 35 of file OptimizerCVSBA.h.

+

Constructor & Destructor Documentation

+ +

◆ OptimizerCVSBA() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::OptimizerCVSBA::OptimizerCVSBA (int iterations = Parameters::defaultOptimizerIterations(),
bool slam2d = Parameters::defaultRegForce3DoF(),
bool covarianceIgnored = Parameters::defaultOptimizerVarianceIgnored() 
)
+
+inline
+
+ +

Definition at line 41 of file OptimizerCVSBA.h.

+ +
+
+ +

◆ OptimizerCVSBA() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::OptimizerCVSBA::OptimizerCVSBA (const ParametersMap & parameters)
+
+inline
+
+ +

Definition at line 46 of file OptimizerCVSBA.h.

+ +
+
+ +

◆ ~OptimizerCVSBA()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::OptimizerCVSBA::~OptimizerCVSBA ()
+
+inlinevirtual
+
+ +

Definition at line 48 of file OptimizerCVSBA.h.

+ +
+
+

Member Function Documentation

+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Type rtabmap::OptimizerCVSBA::type () const
+
+inlinevirtual
+
+ +

Returns the concrete back-end identifier (one of Type).

+ +

Implements rtabmap::Optimizer.

+ +

Definition at line 50 of file OptimizerCVSBA.h.

+ +
+
+ +

◆ optimizeBA()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::OptimizerCVSBA::optimizeBA (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & links,
const std::map< int, std::vector< CameraModel > > & models,
std::map< int, cv::Point3f > & points3DMap,
const std::map< int, std::map< int, FeatureBA > > & wordReferences,
std::set< int > * outliers = 0 
)
+
+virtual
+
+ +

Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).

+

Concrete subclasses (g2o, Ceres, cvsba) override this; the base implementation errors out. The other optimizeBA() overloads ultimately funnel here.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed. If negative, ALL poses other than the (positive) lowest id are held fixed.
posesInitial pose estimates keyed by frame id.
linksEdges used to define the BA problem topology.
modelsCamera model(s) per frame; for stereo, Tx must be set on the model (= -baseline*fx). Multi-camera rigs have multiple entries per frame.
points3DMapIn/out: world 3D points keyed by word id; refined on return.
wordReferencesObservations: <wordId, <frameId, FeatureBA>>. See FeatureBA.
outliersOptional output: word ids dropped by the back-end's outlier rejection.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.map new file mode 100644 index 00000000..eb0e5b5b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.md5 new file mode 100644 index 00000000..96935c03 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.md5 @@ -0,0 +1 @@ +d13302c03cebb72e285ebd73f677b22a \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7b418abf8f411528980fd6bd88bad4f04c3c1daa GIT binary patch literal 5265 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__inherit__graph.md5 new file mode 100644 index 00000000..96935c03 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__inherit__graph.md5 @@ -0,0 +1 @@ +d13302c03cebb72e285ebd73f677b22a \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCVSBA__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7b418abf8f411528980fd6bd88bad4f04c3c1daa GIT binary patch literal 5265 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OptimizerCeres Member List
+
+
+ +

This is the complete list of members for rtabmap::OptimizerCeres, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::OptimizerCeres)rtabmap::OptimizerCeresstatic
computeBACorrespondences(const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())rtabmap::Optimizer
create(const ParametersMap &parameters)rtabmap::Optimizerstatic
create(Optimizer::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Optimizerstatic
epsilon() constrtabmap::Optimizerinline
getConnectedGraph(int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) constrtabmap::Optimizer
gravitySigma() constrtabmap::Optimizerinline
isAvailable(Optimizer::Type type)rtabmap::Optimizerstatic
isCovarianceIgnored() constrtabmap::Optimizerinline
isRobust() constrtabmap::Optimizerinline
isSlam2d() constrtabmap::Optimizerinline
iterations() constrtabmap::Optimizerinline
kTypeCeres enum valuertabmap::Optimizer
kTypeCVSBA enum valuertabmap::Optimizer
kTypeG2O enum valuertabmap::Optimizer
kTypeGTSAM enum valuertabmap::Optimizer
kTypeTORO enum valuertabmap::Optimizer
kTypeUndef enum valuertabmap::Optimizer
landmarksIgnored() constrtabmap::Optimizerinline
optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::OptimizerCeresvirtual
rtabmap::Optimizer::optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::OptimizerCeresvirtual
rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
rtabmap::Optimizer::optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::Optimizer
optimizeIncremental(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
Optimizer(int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma()) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
Optimizer(const ParametersMap &parameters) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
OptimizerCeres(int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon()) (defined in rtabmap::OptimizerCeres)rtabmap::OptimizerCeresinline
OptimizerCeres(const ParametersMap &parameters) (defined in rtabmap::OptimizerCeres)rtabmap::OptimizerCeres
parseParameters(const ParametersMap &parameters)rtabmap::OptimizerCeresvirtual
priorsIgnored() constrtabmap::Optimizerinline
setCovarianceIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setEpsilon(double epsilon) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setGravitySigma(float value) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setIterations(int iterations) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setLandmarksIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setPriorsIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setRobust(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setSlam2d(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
type() constrtabmap::OptimizerCeresinlinevirtual
Type enum namertabmap::Optimizer
~Optimizer() (defined in rtabmap::Optimizer)rtabmap::Optimizerinlinevirtual
~OptimizerCeres() (defined in rtabmap::OptimizerCeres)rtabmap::OptimizerCeresinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres.html b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres.html new file mode 100644 index 00000000..89dd584d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres.html @@ -0,0 +1,552 @@ + + + + + + + + +RTAB-Map: rtabmap::OptimizerCeres Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OptimizerCeres Class Reference
+
+
+
+Inheritance diagram for rtabmap::OptimizerCeres:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OptimizerCeres:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 OptimizerCeres (int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon())
 
+ OptimizerCeres (const ParametersMap &parameters)
 
virtual Type type () const
 Returns the concrete back-end identifier (one of Type).
 
virtual void parseParameters (const ParametersMap &parameters)
 Reads shared knobs from parameters and applies them to this instance.
 
virtual std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization with marginal covariance of rootId.
 
virtual std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
 
- Public Member Functions inherited from rtabmap::Optimizer
void getConnectedGraph (int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) const
 Extracts the connected component reachable from fromId.
 
std::map< int, Transform > optimizeIncremental (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization that grows the graph one node at a time.
 
std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization (single shot).
 
std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA wrapper that derives camera models and correspondences from signatures.
 
+std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA convenience wrapper: like the overload above but ignores the refined 3D points and observation map.
 
Transform optimizeBA (const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Refine a single two-frame link via BA.
 
void computeBACorrespondences (const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())
 Build BA correspondences (3D points + per-frame observations) from signatures.
 
int iterations () const
 Max solver iterations.
 
bool isSlam2d () const
 True if optimizing in SE(2) instead of SE(3).
 
bool isCovarianceIgnored () const
 If true, all edges share an identity information matrix.
 
double epsilon () const
 Convergence threshold on cost decrease.
 
bool isRobust () const
 If true, use a robust kernel / switchable factors against bad loop closures.
 
bool priorsIgnored () const
 If true, unary priors on poses are dropped.
 
bool landmarksIgnored () const
 If true, landmark/marker observations are dropped.
 
float gravitySigma () const
 Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it.
 
void setIterations (int iterations)
 
void setSlam2d (bool enabled)
 
void setCovarianceIgnored (bool enabled)
 
void setEpsilon (double epsilon)
 
void setRobust (bool enabled)
 
void setPriorsIgnored (bool enabled)
 
void setLandmarksIgnored (bool enabled)
 
void setGravitySigma (float value)
 
+ + + + + + + + + + + + + +

+Static Public Member Functions

+static bool available ()
 
- Static Public Member Functions inherited from rtabmap::Optimizer
static bool isAvailable (Optimizer::Type type)
 Returns whether type was compiled in (its third-party dependency was found).
 
static Optimizer * create (const ParametersMap &parameters)
 Factory: build an optimizer from a ParametersMap.
 
+static Optimizer * create (Optimizer::Type type, const ParametersMap &parameters=ParametersMap())
 Factory: build an optimizer of a specific type. Caller owns the result.
 
+ + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Optimizer
enum  Type {
+  kTypeUndef = -1 +, kTypeTORO = 0 +, kTypeG2O = 1 +, kTypeGTSAM = 2 +,
+  kTypeCeres = 3 +, kTypeCVSBA = 4 +
+ }
 Graph-optimizer back-end identifier. More...
 
- Protected Member Functions inherited from rtabmap::Optimizer
+ Optimizer (int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma())
 
+ Optimizer (const ParametersMap &parameters)
 
+

Detailed Description

+
+

Definition at line 35 of file OptimizerCeres.h.

+

Constructor & Destructor Documentation

+ +

◆ OptimizerCeres()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::OptimizerCeres::OptimizerCeres (int iterations = Parameters::defaultOptimizerIterations(),
bool slam2d = Parameters::defaultRegForce3DoF(),
bool covarianceIgnored = Parameters::defaultOptimizerVarianceIgnored(),
double epsilon = Parameters::defaultOptimizerEpsilon() 
)
+
+inline
+
+ +

Definition at line 41 of file OptimizerCeres.h.

+ +
+
+ +

◆ ~OptimizerCeres()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::OptimizerCeres::~OptimizerCeres ()
+
+inlinevirtual
+
+ +

Definition at line 52 of file OptimizerCeres.h.

+ +
+
+

Member Function Documentation

+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Type rtabmap::OptimizerCeres::type () const
+
+inlinevirtual
+
+ +

Returns the concrete back-end identifier (one of Type).

+ +

Implements rtabmap::Optimizer.

+ +

Definition at line 54 of file OptimizerCeres.h.

+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OptimizerCeres::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Reads shared knobs from parameters and applies them to this instance.

+

Subclasses override to additionally read back-end-specific keys (e.g. g2o/Solver, GTSAM/Optimizer); they should call this base implementation first.

+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+ +

◆ optimize()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::OptimizerCeres::optimize (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & constraints,
cv::Mat & outputCovariance,
std::list< std::map< int, Transform > > * intermediateGraphes = 0,
double * finalError = 0,
int * iterationsDone = 0 
)
+
+virtual
+
+ +

Pose-graph optimization with marginal covariance of rootId.

+

This is the primary back-end entry point — concrete subclasses override it. The base implementation just emits an error.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed during optimization.
posesInitial pose estimates.
constraintsRelative-pose constraints between pose ids (and optionally to landmarks).
outputCovarianceOutput: 6x6 covariance of the last optimized pose w.r.t. rootId (3x3 for 2D mode). Filled only if the back-end supports it.
intermediateGraphesOptional: appended at each iteration for debug/visualization.
finalErrorOptional: written with the solver's final cost.
iterationsDoneOptional: written with the solver's actual iteration count.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+ +

◆ optimizeBA()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::OptimizerCeres::optimizeBA (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & links,
const std::map< int, std::vector< CameraModel > > & models,
std::map< int, cv::Point3f > & points3DMap,
const std::map< int, std::map< int, FeatureBA > > & wordReferences,
std::set< int > * outliers = 0 
)
+
+virtual
+
+ +

Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).

+

Concrete subclasses (g2o, Ceres, cvsba) override this; the base implementation errors out. The other optimizeBA() overloads ultimately funnel here.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed. If negative, ALL poses other than the (positive) lowest id are held fixed.
posesInitial pose estimates keyed by frame id.
linksEdges used to define the BA problem topology.
modelsCamera model(s) per frame; for stereo, Tx must be set on the model (= -baseline*fx). Multi-camera rigs have multiple entries per frame.
points3DMapIn/out: world 3D points keyed by word id; refined on return.
wordReferencesObservations: <wordId, <frameId, FeatureBA>>. See FeatureBA.
outliersOptional output: word ids dropped by the back-end's outlier rejection.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.map new file mode 100644 index 00000000..980f7274 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.md5 new file mode 100644 index 00000000..f9275d1f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.md5 @@ -0,0 +1 @@ +1d44d14f3acbc2c49c4bfcea1084e2da \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe4c16ea473f1dda45ca8f3d4651f8894d4f0ca GIT binary patch literal 4677 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.map new file mode 100644 index 00000000..980f7274 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.md5 new file mode 100644 index 00000000..f9275d1f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.md5 @@ -0,0 +1 @@ +1d44d14f3acbc2c49c4bfcea1084e2da \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerCeres__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe4c16ea473f1dda45ca8f3d4651f8894d4f0ca GIT binary patch literal 4677 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O-members.html new file mode 100644 index 00000000..9ce7f211 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O-members.html @@ -0,0 +1,139 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OptimizerG2O Member List
+
+
+ +

This is the complete list of members for rtabmap::OptimizerG2O, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::OptimizerG2O)rtabmap::OptimizerG2Ostatic
computeBACorrespondences(const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())rtabmap::Optimizer
create(const ParametersMap &parameters)rtabmap::Optimizerstatic
create(Optimizer::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Optimizerstatic
epsilon() constrtabmap::Optimizerinline
getConnectedGraph(int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) constrtabmap::Optimizer
gravitySigma() constrtabmap::Optimizerinline
isAvailable(Optimizer::Type type)rtabmap::Optimizerstatic
isCholmodAvailable() (defined in rtabmap::OptimizerG2O)rtabmap::OptimizerG2Ostatic
isCovarianceIgnored() constrtabmap::Optimizerinline
isCSparseAvailable() (defined in rtabmap::OptimizerG2O)rtabmap::OptimizerG2Ostatic
isRobust() constrtabmap::Optimizerinline
isSlam2d() constrtabmap::Optimizerinline
iterations() constrtabmap::Optimizerinline
kTypeCeres enum valuertabmap::Optimizer
kTypeCVSBA enum valuertabmap::Optimizer
kTypeG2O enum valuertabmap::Optimizer
kTypeGTSAM enum valuertabmap::Optimizer
kTypeTORO enum valuertabmap::Optimizer
kTypeUndef enum valuertabmap::Optimizer
landmarksIgnored() constrtabmap::Optimizerinline
loadGraph(const std::string &fileName, std::map< int, Transform > &poses, std::multimap< int, Link > &edgeConstraints) (defined in rtabmap::OptimizerG2O)rtabmap::OptimizerG2Ostatic
optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::OptimizerG2Ovirtual
rtabmap::Optimizer::optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::OptimizerG2Ovirtual
rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
rtabmap::Optimizer::optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::Optimizer
optimizeIncremental(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
Optimizer(int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma()) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
Optimizer(const ParametersMap &parameters) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
OptimizerG2O(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::OptimizerG2O)rtabmap::OptimizerG2O
parseParameters(const ParametersMap &parameters)rtabmap::OptimizerG2Ovirtual
priorsIgnored() constrtabmap::Optimizerinline
saveGraph(const std::string &fileName, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints) (defined in rtabmap::OptimizerG2O)rtabmap::OptimizerG2O
setCovarianceIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setEpsilon(double epsilon) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setGravitySigma(float value) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setIterations(int iterations) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setLandmarksIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setPriorsIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setRobust(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setSlam2d(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
type() constrtabmap::OptimizerG2Oinlinevirtual
Type enum namertabmap::Optimizer
~Optimizer() (defined in rtabmap::Optimizer)rtabmap::Optimizerinlinevirtual
~OptimizerG2O() (defined in rtabmap::OptimizerG2O)rtabmap::OptimizerG2Oinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O.html b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O.html new file mode 100644 index 00000000..e93add16 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O.html @@ -0,0 +1,512 @@ + + + + + + + + +RTAB-Map: rtabmap::OptimizerG2O Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OptimizerG2O Class Reference
+
+
+
+Inheritance diagram for rtabmap::OptimizerG2O:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OptimizerG2O:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OptimizerG2O (const ParametersMap &parameters=ParametersMap())
 
virtual Type type () const
 Returns the concrete back-end identifier (one of Type).
 
virtual void parseParameters (const ParametersMap &parameters)
 Reads shared knobs from parameters and applies them to this instance.
 
virtual std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization with marginal covariance of rootId.
 
virtual std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
 
+bool saveGraph (const std::string &fileName, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints)
 
- Public Member Functions inherited from rtabmap::Optimizer
void getConnectedGraph (int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) const
 Extracts the connected component reachable from fromId.
 
std::map< int, Transform > optimizeIncremental (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization that grows the graph one node at a time.
 
std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization (single shot).
 
std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA wrapper that derives camera models and correspondences from signatures.
 
+std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA convenience wrapper: like the overload above but ignores the refined 3D points and observation map.
 
Transform optimizeBA (const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Refine a single two-frame link via BA.
 
void computeBACorrespondences (const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())
 Build BA correspondences (3D points + per-frame observations) from signatures.
 
int iterations () const
 Max solver iterations.
 
bool isSlam2d () const
 True if optimizing in SE(2) instead of SE(3).
 
bool isCovarianceIgnored () const
 If true, all edges share an identity information matrix.
 
double epsilon () const
 Convergence threshold on cost decrease.
 
bool isRobust () const
 If true, use a robust kernel / switchable factors against bad loop closures.
 
bool priorsIgnored () const
 If true, unary priors on poses are dropped.
 
bool landmarksIgnored () const
 If true, landmark/marker observations are dropped.
 
float gravitySigma () const
 Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it.
 
void setIterations (int iterations)
 
void setSlam2d (bool enabled)
 
void setCovarianceIgnored (bool enabled)
 
void setEpsilon (double epsilon)
 
void setRobust (bool enabled)
 
void setPriorsIgnored (bool enabled)
 
void setLandmarksIgnored (bool enabled)
 
void setGravitySigma (float value)
 
+ + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static bool available ()
 
+static bool isCSparseAvailable ()
 
+static bool isCholmodAvailable ()
 
+static bool loadGraph (const std::string &fileName, std::map< int, Transform > &poses, std::multimap< int, Link > &edgeConstraints)
 
- Static Public Member Functions inherited from rtabmap::Optimizer
static bool isAvailable (Optimizer::Type type)
 Returns whether type was compiled in (its third-party dependency was found).
 
static Optimizer * create (const ParametersMap &parameters)
 Factory: build an optimizer from a ParametersMap.
 
+static Optimizer * create (Optimizer::Type type, const ParametersMap &parameters=ParametersMap())
 Factory: build an optimizer of a specific type. Caller owns the result.
 
+ + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Optimizer
enum  Type {
+  kTypeUndef = -1 +, kTypeTORO = 0 +, kTypeG2O = 1 +, kTypeGTSAM = 2 +,
+  kTypeCeres = 3 +, kTypeCVSBA = 4 +
+ }
 Graph-optimizer back-end identifier. More...
 
- Protected Member Functions inherited from rtabmap::Optimizer
+ Optimizer (int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma())
 
+ Optimizer (const ParametersMap &parameters)
 
+

Detailed Description

+
+

Definition at line 37 of file OptimizerG2O.h.

+

Constructor & Destructor Documentation

+ +

◆ ~OptimizerG2O()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::OptimizerG2O::~OptimizerG2O ()
+
+inlinevirtual
+
+ +

Definition at line 52 of file OptimizerG2O.h.

+ +
+
+

Member Function Documentation

+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Type rtabmap::OptimizerG2O::type () const
+
+inlinevirtual
+
+ +

Returns the concrete back-end identifier (one of Type).

+ +

Implements rtabmap::Optimizer.

+ +

Definition at line 54 of file OptimizerG2O.h.

+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OptimizerG2O::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Reads shared knobs from parameters and applies them to this instance.

+

Subclasses override to additionally read back-end-specific keys (e.g. g2o/Solver, GTSAM/Optimizer); they should call this base implementation first.

+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+ +

◆ optimize()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::OptimizerG2O::optimize (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & constraints,
cv::Mat & outputCovariance,
std::list< std::map< int, Transform > > * intermediateGraphes = 0,
double * finalError = 0,
int * iterationsDone = 0 
)
+
+virtual
+
+ +

Pose-graph optimization with marginal covariance of rootId.

+

This is the primary back-end entry point — concrete subclasses override it. The base implementation just emits an error.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed during optimization.
posesInitial pose estimates.
constraintsRelative-pose constraints between pose ids (and optionally to landmarks).
outputCovarianceOutput: 6x6 covariance of the last optimized pose w.r.t. rootId (3x3 for 2D mode). Filled only if the back-end supports it.
intermediateGraphesOptional: appended at each iteration for debug/visualization.
finalErrorOptional: written with the solver's final cost.
iterationsDoneOptional: written with the solver's actual iteration count.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+ +

◆ optimizeBA()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::OptimizerG2O::optimizeBA (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & links,
const std::map< int, std::vector< CameraModel > > & models,
std::map< int, cv::Point3f > & points3DMap,
const std::map< int, std::map< int, FeatureBA > > & wordReferences,
std::set< int > * outliers = 0 
)
+
+virtual
+
+ +

Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).

+

Concrete subclasses (g2o, Ceres, cvsba) override this; the base implementation errors out. The other optimizeBA() overloads ultimately funnel here.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed. If negative, ALL poses other than the (positive) lowest id are held fixed.
posesInitial pose estimates keyed by frame id.
linksEdges used to define the BA problem topology.
modelsCamera model(s) per frame; for stereo, Tx must be set on the model (= -baseline*fx). Multi-camera rigs have multiple entries per frame.
points3DMapIn/out: world 3D points keyed by word id; refined on return.
wordReferencesObservations: <wordId, <frameId, FeatureBA>>. See FeatureBA.
outliersOptional output: word ids dropped by the back-end's outlier rejection.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.map new file mode 100644 index 00000000..5079dd23 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.md5 new file mode 100644 index 00000000..7daa5d9d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.md5 @@ -0,0 +1 @@ +7eaec6d0e8425a59d91b25c9b2549101 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c6dbc1de5f86ada4bc386a40cd728353e01f3b4e GIT binary patch literal 4674 zcmd6r`9D{{5ajr)2XSpm0^lL}#i#$bsiLQK$kEy6$s zvA@4Ri>^a-AVV2i$cEJ&%esowzwg*#d!LFa)^&d`xdwI3)}S(;VY1j{GLqt<fzRF<>n^DEN&~GKkD!3jFJ9LDUqRXYGYHfA*r3y+>B{_|DIP$3bE00B#zb4FtxIx zk&|oSv9qb0cc1wfQ&nHjX&U;zN{VyfK;_tkmY%+IWvJA5@3)<9p_z=VEbryZG;uJl zuE3vRaqs*Vc@-7WO#$oJ;9x~OhSS5tqsp;^y7_RW6kY%P#f$2|4f~1K2(B7jU)S%+ zCdWH>dJb(`LKQewLgSkPH?X{E+|tqv#(64Q{{Av(Hn!@3^&6B_RMorGTdZg_R8>_K zoU~kJ_SY{s7gx$f7I8N*?}Z;THK~33wxG(JJD zaSaV}^Ln#1$@#00^^d4HCXiaTx1|=mW1~#_q6}IoNp`oF=4h{}^ zv!a>3H05b$Hw$iBEo`-kr2~09Tz>P~%EaVk&yO11k+Oue^ka|FD)kQ1Yr_|#Z_P^h zhlhvJ`QSHL2!@B}0fbvXK)_>i+`H9qcYVC*YF=k&=NuSf&39*Oqm^s~N&WT9sl4Sj zDO>LnCq`aKb!@B9a8qMF!kBFmOtq7%YiG;8ySsZrS{mZWi7y%+gH=yTPS#Ubr&w)W zl!r0fU9_(>M?)pZq4bZ{K#n~agp*IBogd$`<{#?Mw$q*`~Rfw z0I^H{_z_!X{{ao=U~_w$5`qcZqFi5J-v@HJHYQCMm7UE#IyQC=H6fou70l91B;KZ_ zD>$Gay?!kyYV(#7$Z_qSB1+@!pSQ`Y6>W%PRRrKjK&Sy?uD0U=LyI&ild8yg+I zJQ3D4Fo-TKE$ynVt(B3vcCEd)*WD!ia5YX*W4TopWckeM>ch#Vz}fPKDW_E}UIZ$( zos^^G=;V~|OFBOI`(shL+vZkMlN~xuH+pRBM!l_>8R7kV#kC(bG^JLRv2k%UugvaL z{w3uq_d@x^#ONEme|E8XH%pbF{AaF;i(gtDE_WV(lX(!T60klNQ(P=`CK*pC6j~MZ z_cpMXnuqNVj<> =^XK_em}C@CqYXH!&%Q%<;nc^`iDKH>jU-D^K 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.map new file mode 100644 index 00000000..5079dd23 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.md5 new file mode 100644 index 00000000..7daa5d9d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.md5 @@ -0,0 +1 @@ +7eaec6d0e8425a59d91b25c9b2549101 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerG2O__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c6dbc1de5f86ada4bc386a40cd728353e01f3b4e GIT binary patch literal 4674 zcmd6r`9D{{5ajr)2XSpm0^lL}#i#$bsiLQK$kEy6$s zvA@4Ri>^a-AVV2i$cEJ&%esowzwg*#d!LFa)^&d`xdwI3)}S(;VY1j{GLqt<fzRF<>n^DEN&~GKkD!3jFJ9LDUqRXYGYHfA*r3y+>B{_|DIP$3bE00B#zb4FtxIx zk&|oSv9qb0cc1wfQ&nHjX&U;zN{VyfK;_tkmY%+IWvJA5@3)<9p_z=VEbryZG;uJl zuE3vRaqs*Vc@-7WO#$oJ;9x~OhSS5tqsp;^y7_RW6kY%P#f$2|4f~1K2(B7jU)S%+ zCdWH>dJb(`LKQewLgSkPH?X{E+|tqv#(64Q{{Av(Hn!@3^&6B_RMorGTdZg_R8>_K zoU~kJ_SY{s7gx$f7I8N*?}Z;THK~33wxG(JJD zaSaV}^Ln#1$@#00^^d4HCXiaTx1|=mW1~#_q6}IoNp`oF=4h{}^ zv!a>3H05b$Hw$iBEo`-kr2~09Tz>P~%EaVk&yO11k+Oue^ka|FD)kQ1Yr_|#Z_P^h zhlhvJ`QSHL2!@B}0fbvXK)_>i+`H9qcYVC*YF=k&=NuSf&39*Oqm^s~N&WT9sl4Sj zDO>LnCq`aKb!@B9a8qMF!kBFmOtq7%YiG;8ySsZrS{mZWi7y%+gH=yTPS#Ubr&w)W zl!r0fU9_(>M?)pZq4bZ{K#n~agp*IBogd$`<{#?Mw$q*`~Rfw z0I^H{_z_!X{{ao=U~_w$5`qcZqFi5J-v@HJHYQCMm7UE#IyQC=H6fou70l91B;KZ_ zD>$Gay?!kyYV(#7$Z_qSB1+@!pSQ`Y6>W%PRRrKjK&Sy?uD0U=LyI&ild8yg+I zJQ3D4Fo-TKE$ynVt(B3vcCEd)*WD!ia5YX*W4TopWckeM>ch#Vz}fPKDW_E}UIZ$( zos^^G=;V~|OFBOI`(shL+vZkMlN~xuH+pRBM!l_>8R7kV#kC(bG^JLRv2k%UugvaL z{w3uq_d@x^#ONEme|E8XH%pbF{AaF;i(gtDE_WV(lX(!T60klNQ(P=`CK*pC6j~MZ z_cpMXnuqNVj<> =^XK_em}C@CqYXH!&%Q%<;nc^`iDKH>jU-D^K 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM-members.html new file mode 100644 index 00000000..bf04b649 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM-members.html @@ -0,0 +1,135 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OptimizerGTSAM Member List
+
+
+ +

This is the complete list of members for rtabmap::OptimizerGTSAM, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::OptimizerGTSAM)rtabmap::OptimizerGTSAMstatic
computeBACorrespondences(const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())rtabmap::Optimizer
create(const ParametersMap &parameters)rtabmap::Optimizerstatic
create(Optimizer::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Optimizerstatic
epsilon() constrtabmap::Optimizerinline
getConnectedGraph(int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) constrtabmap::Optimizer
gravitySigma() constrtabmap::Optimizerinline
isAvailable(Optimizer::Type type)rtabmap::Optimizerstatic
isCovarianceIgnored() constrtabmap::Optimizerinline
isRobust() constrtabmap::Optimizerinline
isSlam2d() constrtabmap::Optimizerinline
iterations() constrtabmap::Optimizerinline
kTypeCeres enum valuertabmap::Optimizer
kTypeCVSBA enum valuertabmap::Optimizer
kTypeG2O enum valuertabmap::Optimizer
kTypeGTSAM enum valuertabmap::Optimizer
kTypeTORO enum valuertabmap::Optimizer
kTypeUndef enum valuertabmap::Optimizer
landmarksIgnored() constrtabmap::Optimizerinline
optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::OptimizerGTSAMvirtual
rtabmap::Optimizer::optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::OptimizerGTSAMvirtual
rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
rtabmap::Optimizer::optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::Optimizer
optimizeIncremental(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
Optimizer(int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma()) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
Optimizer(const ParametersMap &parameters) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
OptimizerGTSAM(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::OptimizerGTSAM)rtabmap::OptimizerGTSAM
parseParameters(const ParametersMap &parameters)rtabmap::OptimizerGTSAMvirtual
priorsIgnored() constrtabmap::Optimizerinline
setCovarianceIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setEpsilon(double epsilon) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setGravitySigma(float value) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setIterations(int iterations) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setLandmarksIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setPriorsIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setRobust(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setSlam2d(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
Type enum namertabmap::Optimizer
type() constrtabmap::OptimizerGTSAMinlinevirtual
~Optimizer() (defined in rtabmap::Optimizer)rtabmap::Optimizerinlinevirtual
~OptimizerGTSAM() (defined in rtabmap::OptimizerGTSAM)rtabmap::OptimizerGTSAMvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM.html b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM.html new file mode 100644 index 00000000..18a596e0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM.html @@ -0,0 +1,473 @@ + + + + + + + + +RTAB-Map: rtabmap::OptimizerGTSAM Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OptimizerGTSAM Class Reference
+
+
+
+Inheritance diagram for rtabmap::OptimizerGTSAM:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OptimizerGTSAM:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ OptimizerGTSAM (const ParametersMap &parameters=ParametersMap())
 
virtual Type type () const
 Returns the concrete back-end identifier (one of Type).
 
virtual void parseParameters (const ParametersMap &parameters)
 Reads shared knobs from parameters and applies them to this instance.
 
virtual std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization with marginal covariance of rootId.
 
virtual std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
 
- Public Member Functions inherited from rtabmap::Optimizer
void getConnectedGraph (int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) const
 Extracts the connected component reachable from fromId.
 
std::map< int, Transform > optimizeIncremental (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization that grows the graph one node at a time.
 
std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization (single shot).
 
std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA wrapper that derives camera models and correspondences from signatures.
 
+std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA convenience wrapper: like the overload above but ignores the refined 3D points and observation map.
 
Transform optimizeBA (const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Refine a single two-frame link via BA.
 
void computeBACorrespondences (const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())
 Build BA correspondences (3D points + per-frame observations) from signatures.
 
int iterations () const
 Max solver iterations.
 
bool isSlam2d () const
 True if optimizing in SE(2) instead of SE(3).
 
bool isCovarianceIgnored () const
 If true, all edges share an identity information matrix.
 
double epsilon () const
 Convergence threshold on cost decrease.
 
bool isRobust () const
 If true, use a robust kernel / switchable factors against bad loop closures.
 
bool priorsIgnored () const
 If true, unary priors on poses are dropped.
 
bool landmarksIgnored () const
 If true, landmark/marker observations are dropped.
 
float gravitySigma () const
 Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it.
 
void setIterations (int iterations)
 
void setSlam2d (bool enabled)
 
void setCovarianceIgnored (bool enabled)
 
void setEpsilon (double epsilon)
 
void setRobust (bool enabled)
 
void setPriorsIgnored (bool enabled)
 
void setLandmarksIgnored (bool enabled)
 
void setGravitySigma (float value)
 
+ + + + + + + + + + + + + +

+Static Public Member Functions

+static bool available ()
 
- Static Public Member Functions inherited from rtabmap::Optimizer
static bool isAvailable (Optimizer::Type type)
 Returns whether type was compiled in (its third-party dependency was found).
 
static Optimizer * create (const ParametersMap &parameters)
 Factory: build an optimizer from a ParametersMap.
 
+static Optimizer * create (Optimizer::Type type, const ParametersMap &parameters=ParametersMap())
 Factory: build an optimizer of a specific type. Caller owns the result.
 
+ + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Optimizer
enum  Type {
+  kTypeUndef = -1 +, kTypeTORO = 0 +, kTypeG2O = 1 +, kTypeGTSAM = 2 +,
+  kTypeCeres = 3 +, kTypeCVSBA = 4 +
+ }
 Graph-optimizer back-end identifier. More...
 
- Protected Member Functions inherited from rtabmap::Optimizer
+ Optimizer (int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma())
 
+ Optimizer (const ParametersMap &parameters)
 
+

Detailed Description

+
+

Definition at line 39 of file OptimizerGTSAM.h.

+

Member Function Documentation

+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Type rtabmap::OptimizerGTSAM::type () const
+
+inlinevirtual
+
+ +

Returns the concrete back-end identifier (one of Type).

+ +

Implements rtabmap::Optimizer.

+ +

Definition at line 48 of file OptimizerGTSAM.h.

+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::OptimizerGTSAM::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Reads shared knobs from parameters and applies them to this instance.

+

Subclasses override to additionally read back-end-specific keys (e.g. g2o/Solver, GTSAM/Optimizer); they should call this base implementation first.

+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+ +

◆ optimize()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::OptimizerGTSAM::optimize (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & constraints,
cv::Mat & outputCovariance,
std::list< std::map< int, Transform > > * intermediateGraphes = 0,
double * finalError = 0,
int * iterationsDone = 0 
)
+
+virtual
+
+ +

Pose-graph optimization with marginal covariance of rootId.

+

This is the primary back-end entry point — concrete subclasses override it. The base implementation just emits an error.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed during optimization.
posesInitial pose estimates.
constraintsRelative-pose constraints between pose ids (and optionally to landmarks).
outputCovarianceOutput: 6x6 covariance of the last optimized pose w.r.t. rootId (3x3 for 2D mode). Filled only if the back-end supports it.
intermediateGraphesOptional: appended at each iteration for debug/visualization.
finalErrorOptional: written with the solver's final cost.
iterationsDoneOptional: written with the solver's actual iteration count.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+ +

◆ optimizeBA()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::OptimizerGTSAM::optimizeBA (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & links,
const std::map< int, std::vector< CameraModel > > & models,
std::map< int, cv::Point3f > & points3DMap,
const std::map< int, std::map< int, FeatureBA > > & wordReferences,
std::set< int > * outliers = 0 
)
+
+virtual
+
+ +

Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).

+

Concrete subclasses (g2o, Ceres, cvsba) override this; the base implementation errors out. The other optimizeBA() overloads ultimately funnel here.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed. If negative, ALL poses other than the (positive) lowest id are held fixed.
posesInitial pose estimates keyed by frame id.
linksEdges used to define the BA problem topology.
modelsCamera model(s) per frame; for stereo, Tx must be set on the model (= -baseline*fx). Multi-camera rigs have multiple entries per frame.
points3DMapIn/out: world 3D points keyed by word id; refined on return.
wordReferencesObservations: <wordId, <frameId, FeatureBA>>. See FeatureBA.
outliersOptional output: word ids dropped by the back-end's outlier rejection.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.map new file mode 100644 index 00000000..cae31210 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.md5 new file mode 100644 index 00000000..2a005582 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.md5 @@ -0,0 +1 @@ +dc9fafae756ba5f6f57bb083b6ba9a55 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..24355271d7d5ec6160f9697f2349a2033e76766f GIT binary patch literal 5228 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 QK7^<|QCIl#*fjWm0Ks<_jQ{`u literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.map new file mode 100644 index 00000000..cae31210 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.md5 new file mode 100644 index 00000000..2a005582 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.md5 @@ -0,0 +1 @@ +dc9fafae756ba5f6f57bb083b6ba9a55 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerGTSAM__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..24355271d7d5ec6160f9697f2349a2033e76766f GIT binary patch literal 5228 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 QK7^<|QCIl#*fjWm0Ks<_jQ{`u literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO-members.html new file mode 100644 index 00000000..c3d35f60 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO-members.html @@ -0,0 +1,138 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::OptimizerTORO Member List
+
+
+ +

This is the complete list of members for rtabmap::OptimizerTORO, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available() (defined in rtabmap::OptimizerTORO)rtabmap::OptimizerTOROstatic
computeBACorrespondences(const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())rtabmap::Optimizer
create(const ParametersMap &parameters)rtabmap::Optimizerstatic
create(Optimizer::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Optimizerstatic
epsilon() constrtabmap::Optimizerinline
getConnectedGraph(int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) constrtabmap::Optimizer
gravitySigma() constrtabmap::Optimizerinline
isAvailable(Optimizer::Type type)rtabmap::Optimizerstatic
isCovarianceIgnored() constrtabmap::Optimizerinline
isRobust() constrtabmap::Optimizerinline
isSlam2d() constrtabmap::Optimizerinline
iterations() constrtabmap::Optimizerinline
kTypeCeres enum valuertabmap::Optimizer
kTypeCVSBA enum valuertabmap::Optimizer
kTypeG2O enum valuertabmap::Optimizer
kTypeGTSAM enum valuertabmap::Optimizer
kTypeTORO enum valuertabmap::Optimizer
kTypeUndef enum valuertabmap::Optimizer
landmarksIgnored() constrtabmap::Optimizerinline
loadGraph(const std::string &fileName, std::map< int, Transform > &poses, std::multimap< int, Link > &edgeConstraints) (defined in rtabmap::OptimizerTORO)rtabmap::OptimizerTOROstatic
optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::OptimizerTOROvirtual
rtabmap::Optimizer::optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::Optimizervirtual
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())rtabmap::Optimizer
optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)rtabmap::Optimizer
optimizeIncremental(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)rtabmap::Optimizer
Optimizer(int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma()) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
Optimizer(const ParametersMap &parameters) (defined in rtabmap::Optimizer)rtabmap::Optimizerprotected
OptimizerTORO(int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon()) (defined in rtabmap::OptimizerTORO)rtabmap::OptimizerTOROinline
OptimizerTORO(const ParametersMap &parameters) (defined in rtabmap::OptimizerTORO)rtabmap::OptimizerTOROinline
parseParameters(const ParametersMap &parameters)rtabmap::Optimizervirtual
priorsIgnored() constrtabmap::Optimizerinline
saveGraph(const std::string &fileName, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints) (defined in rtabmap::OptimizerTORO)rtabmap::OptimizerTORO
setCovarianceIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setEpsilon(double epsilon) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setGravitySigma(float value) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setIterations(int iterations) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setLandmarksIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setPriorsIgnored(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setRobust(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
setSlam2d(bool enabled) (defined in rtabmap::Optimizer)rtabmap::Optimizerinline
type() constrtabmap::OptimizerTOROinlinevirtual
Type enum namertabmap::Optimizer
~Optimizer() (defined in rtabmap::Optimizer)rtabmap::Optimizerinlinevirtual
~OptimizerTORO() (defined in rtabmap::OptimizerTORO)rtabmap::OptimizerTOROinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO.html b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO.html new file mode 100644 index 00000000..a1091d34 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO.html @@ -0,0 +1,470 @@ + + + + + + + + +RTAB-Map: rtabmap::OptimizerTORO Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::OptimizerTORO Class Reference
+
+
+
+Inheritance diagram for rtabmap::OptimizerTORO:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::OptimizerTORO:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 OptimizerTORO (int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon())
 
 OptimizerTORO (const ParametersMap &parameters)
 
virtual Type type () const
 Returns the concrete back-end identifier (one of Type).
 
virtual std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization with marginal covariance of rootId.
 
+bool saveGraph (const std::string &fileName, const std::map< int, Transform > &poses, const std::multimap< int, Link > &edgeConstraints)
 
- Public Member Functions inherited from rtabmap::Optimizer
void getConnectedGraph (int fromId, const std::map< int, Transform > &posesIn, const std::multimap< int, Link > &linksIn, std::map< int, Transform > &posesOut, std::multimap< int, Link > &linksOut) const
 Extracts the connected component reachable from fromId.
 
virtual void parseParameters (const ParametersMap &parameters)
 Reads shared knobs from parameters and applies them to this instance.
 
std::map< int, Transform > optimizeIncremental (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization that grows the graph one node at a time.
 
std::map< int, Transform > optimize (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)
 Pose-graph optimization (single shot).
 
virtual std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Bundle adjustment: jointly refine poses and 3D points (back-end-level entry point).
 
std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA wrapper that derives camera models and correspondences from signatures.
 
+std::map< int, Transform > optimizeBA (int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())
 BA convenience wrapper: like the overload above but ignores the refined 3D points and observation map.
 
Transform optimizeBA (const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)
 Refine a single two-frame link via BA.
 
void computeBACorrespondences (const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, bool useLinkTransformAsGuess=false, ParametersMap registrationParameters=ParametersMap())
 Build BA correspondences (3D points + per-frame observations) from signatures.
 
int iterations () const
 Max solver iterations.
 
bool isSlam2d () const
 True if optimizing in SE(2) instead of SE(3).
 
bool isCovarianceIgnored () const
 If true, all edges share an identity information matrix.
 
double epsilon () const
 Convergence threshold on cost decrease.
 
bool isRobust () const
 If true, use a robust kernel / switchable factors against bad loop closures.
 
bool priorsIgnored () const
 If true, unary priors on poses are dropped.
 
bool landmarksIgnored () const
 If true, landmark/marker observations are dropped.
 
float gravitySigma () const
 Std-dev (rad) of the gravity prior on roll/pitch; 0 disables it.
 
void setIterations (int iterations)
 
void setSlam2d (bool enabled)
 
void setCovarianceIgnored (bool enabled)
 
void setEpsilon (double epsilon)
 
void setRobust (bool enabled)
 
void setPriorsIgnored (bool enabled)
 
void setLandmarksIgnored (bool enabled)
 
void setGravitySigma (float value)
 
+ + + + + + + + + + + + + + + +

+Static Public Member Functions

+static bool available ()
 
+static bool loadGraph (const std::string &fileName, std::map< int, Transform > &poses, std::multimap< int, Link > &edgeConstraints)
 
- Static Public Member Functions inherited from rtabmap::Optimizer
static bool isAvailable (Optimizer::Type type)
 Returns whether type was compiled in (its third-party dependency was found).
 
static Optimizer * create (const ParametersMap &parameters)
 Factory: build an optimizer from a ParametersMap.
 
+static Optimizer * create (Optimizer::Type type, const ParametersMap &parameters=ParametersMap())
 Factory: build an optimizer of a specific type. Caller owns the result.
 
+ + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Optimizer
enum  Type {
+  kTypeUndef = -1 +, kTypeTORO = 0 +, kTypeG2O = 1 +, kTypeGTSAM = 2 +,
+  kTypeCeres = 3 +, kTypeCVSBA = 4 +
+ }
 Graph-optimizer back-end identifier. More...
 
- Protected Member Functions inherited from rtabmap::Optimizer
+ Optimizer (int iterations=Parameters::defaultOptimizerIterations(), bool slam2d=Parameters::defaultRegForce3DoF(), bool covarianceIgnored=Parameters::defaultOptimizerVarianceIgnored(), double epsilon=Parameters::defaultOptimizerEpsilon(), bool robust=Parameters::defaultOptimizerRobust(), bool priorsIgnored=Parameters::defaultOptimizerPriorsIgnored(), bool landmarksIgnored=Parameters::defaultOptimizerLandmarksIgnored(), float gravitySigma=Parameters::defaultOptimizerGravitySigma())
 
+ Optimizer (const ParametersMap &parameters)
 
+

Detailed Description

+
+

Definition at line 35 of file OptimizerTORO.h.

+

Constructor & Destructor Documentation

+ +

◆ OptimizerTORO() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::OptimizerTORO::OptimizerTORO (int iterations = Parameters::defaultOptimizerIterations(),
bool slam2d = Parameters::defaultRegForce3DoF(),
bool covarianceIgnored = Parameters::defaultOptimizerVarianceIgnored(),
double epsilon = Parameters::defaultOptimizerEpsilon() 
)
+
+inline
+
+ +

Definition at line 47 of file OptimizerTORO.h.

+ +
+
+ +

◆ OptimizerTORO() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::OptimizerTORO::OptimizerTORO (const ParametersMap & parameters)
+
+inline
+
+ +

Definition at line 53 of file OptimizerTORO.h.

+ +
+
+ +

◆ ~OptimizerTORO()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::OptimizerTORO::~OptimizerTORO ()
+
+inlinevirtual
+
+ +

Definition at line 55 of file OptimizerTORO.h.

+ +
+
+

Member Function Documentation

+ +

◆ type()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Type rtabmap::OptimizerTORO::type () const
+
+inlinevirtual
+
+ +

Returns the concrete back-end identifier (one of Type).

+ +

Implements rtabmap::Optimizer.

+ +

Definition at line 57 of file OptimizerTORO.h.

+ +
+
+ +

◆ optimize()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::map< int, Transform > rtabmap::OptimizerTORO::optimize (int rootId,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & constraints,
cv::Mat & outputCovariance,
std::list< std::map< int, Transform > > * intermediateGraphes = 0,
double * finalError = 0,
int * iterationsDone = 0 
)
+
+virtual
+
+ +

Pose-graph optimization with marginal covariance of rootId.

+

This is the primary back-end entry point — concrete subclasses override it. The base implementation just emits an error.

+
Parameters
+ + + + + + + + +
rootIdPose to hold fixed during optimization.
posesInitial pose estimates.
constraintsRelative-pose constraints between pose ids (and optionally to landmarks).
outputCovarianceOutput: 6x6 covariance of the last optimized pose w.r.t. rootId (3x3 for 2D mode). Filled only if the back-end supports it.
intermediateGraphesOptional: appended at each iteration for debug/visualization.
finalErrorOptional: written with the solver's final cost.
iterationsDoneOptional: written with the solver's actual iteration count.
+
+
+
Returns
Refined poses, or empty on failure.
+ +

Reimplemented from rtabmap::Optimizer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.map new file mode 100644 index 00000000..01df31b4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.md5 new file mode 100644 index 00000000..98d734b4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.md5 @@ -0,0 +1 @@ +116611f80c7a69254321adea56f89125 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6b71f43f7df3214c6dacb633b3053538a81b2987 GIT binary patch literal 4589 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 kfmaCqr4y + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__inherit__graph.md5 new file mode 100644 index 00000000..98d734b4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__inherit__graph.md5 @@ -0,0 +1 @@ +116611f80c7a69254321adea56f89125 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1OptimizerTORO__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6b71f43f7df3214c6dacb633b3053538a81b2987 GIT binary patch literal 4589 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 kfmaCqr4y + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer__inherit__graph.md5 new file mode 100644 index 00000000..3043b73f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer__inherit__graph.md5 @@ -0,0 +1 @@ +83fdef5d521fe8f94dd66ee8295f2b65 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Optimizer__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..27363cfbc7ed31e9b8190b04479cf3454f03cf29 GIT binary patch literal 20157 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::ParamEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::ParamEvent, including all inherited members.

+ + + + + + + + + +
getClassName() constrtabmap::ParamEventinlinevirtual
getCode() constUEventinline
getParameters() const (defined in rtabmap::ParamEvent)rtabmap::ParamEventinline
ParamEvent(const ParametersMap &parameters) (defined in rtabmap::ParamEvent)rtabmap::ParamEventinline
ParamEvent(const std::string &parameterKey, const std::string &parameterValue) (defined in rtabmap::ParamEvent)rtabmap::ParamEventinline
UEvent(int code=0)UEventinlineprotected
~ParamEvent() (defined in rtabmap::ParamEvent)rtabmap::ParamEventinline
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent.html new file mode 100644 index 00000000..4e642074 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent.html @@ -0,0 +1,294 @@ + + + + + + + + +RTAB-Map: rtabmap::ParamEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::ParamEvent Class Reference
+
+
+ +

#include <ParamEvent.h>

+
+Inheritance diagram for rtabmap::ParamEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::ParamEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + +

+Public Member Functions

 ParamEvent (const ParametersMap &parameters)
 
 ParamEvent (const std::string &parameterKey, const std::string &parameterValue)
 
virtual std::string getClassName () const
 
const ParametersMap & getParameters () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+

The parameters event. This event is used to send parameters across the threads.

+ +

Definition at line 41 of file ParamEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ ParamEvent() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::ParamEvent::ParamEvent (const ParametersMap & parameters)
+
+inline
+
+ +

Definition at line 44 of file ParamEvent.h.

+ +
+
+ +

◆ ParamEvent() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::ParamEvent::ParamEvent (const std::string & parameterKey,
const std::string & parameterValue 
)
+
+inline
+
+ +

Definition at line 45 of file ParamEvent.h.

+ +
+
+ +

◆ ~ParamEvent()

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::ParamEvent::~ParamEvent ()
+
+inline
+
+ +

Definition at line 49 of file ParamEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::ParamEvent::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 50 of file ParamEvent.h.

+ +
+
+ +

◆ getParameters()

+ +
+
+ + + + + +
+ + + + + + + +
const ParametersMap & rtabmap::ParamEvent::getParameters () const
+
+inline
+
+ +

Definition at line 52 of file ParamEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.map new file mode 100644 index 00000000..57e4b8ef --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.md5 new file mode 100644 index 00000000..2ede6095 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.md5 @@ -0,0 +1 @@ +86c880cd42c1f8bdb5e1791a4459f201 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..72cf756d9f130942280984072a78445800bc1912 GIT binary patch literal 3690 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.map new file mode 100644 index 00000000..57e4b8ef --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.md5 new file mode 100644 index 00000000..2ede6095 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.md5 @@ -0,0 +1 @@ +86c880cd42c1f8bdb5e1791a4459f201 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1ParamEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..72cf756d9f130942280984072a78445800bc1912 GIT binary patch literal 3690 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Parameters-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Parameters-members.html new file mode 100644 index 00000000..e7978b7c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Parameters-members.html @@ -0,0 +1,119 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Parameters Member List
+
+
+ +

This is the complete list of members for rtabmap::Parameters, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
createDefaultWorkingDirectory() (defined in rtabmap::Parameters)rtabmap::Parametersstatic
deserialize(const std::string &parameters) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
filterParameters(const ParametersMap &parameters, const std::string &group, bool remove=false)rtabmap::Parametersstatic
getBackwardCompatibilityMap()rtabmap::Parametersstatic
getDefaultDatabaseName() (defined in rtabmap::Parameters)rtabmap::Parametersstatic
getDefaultOdometryParameters(bool stereo=false, bool vis=true, bool icp=false) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
getDefaultParameters()rtabmap::Parametersinlinestatic
getDefaultParameters(const std::string &group) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
getDescription(const std::string &paramKey)rtabmap::Parametersstatic
getRemovedParameters()rtabmap::Parametersstatic
getType(const std::string &paramKey)rtabmap::Parametersstatic
getVersion() (defined in rtabmap::Parameters)rtabmap::Parametersstatic
isFeatureParameter(const std::string &param) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
parse(const ParametersMap &parameters, const std::string &key, bool &value) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
parse(const ParametersMap &parameters, const std::string &key, int &value) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
parse(const ParametersMap &parameters, const std::string &key, unsigned int &value) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
parse(const ParametersMap &parameters, const std::string &key, float &value) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
parse(const ParametersMap &parameters, const std::string &key, double &value) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
parse(const ParametersMap &parameters, const std::string &key, std::string &value) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
parse(const ParametersMap &parameters, ParametersMap &parametersOut) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
parseArguments(int argc, char *argv[], bool onlyParameters=false) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
readINI(const std::string &configFile, ParametersMap &parameters, bool modifiedOnly=false) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
readINIStr(const std::string &configContent, ParametersMap &parameters, bool modifiedOnly=false) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
serialize(const ParametersMap &parameters) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
showUsage() (defined in rtabmap::Parameters)rtabmap::Parametersstatic
writeINI(const std::string &configFile, const ParametersMap &parameters) (defined in rtabmap::Parameters)rtabmap::Parametersstatic
~Parameters() (defined in rtabmap::Parameters)rtabmap::Parametersvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Parameters.html b/preview/pr-1492/api/latest/classrtabmap_1_1Parameters.html new file mode 100644 index 00000000..1aab737f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Parameters.html @@ -0,0 +1,363 @@ + + + + + + + + +RTAB-Map: rtabmap::Parameters Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::Parameters Class Reference
+
+
+ +

#include <Parameters.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static const ParametersMap & getDefaultParameters ()
 
static std::string getType (const std::string &paramKey)
 
static std::string getDescription (const std::string &paramKey)
 
+static bool parse (const ParametersMap &parameters, const std::string &key, bool &value)
 
+static bool parse (const ParametersMap &parameters, const std::string &key, int &value)
 
+static bool parse (const ParametersMap &parameters, const std::string &key, unsigned int &value)
 
+static bool parse (const ParametersMap &parameters, const std::string &key, float &value)
 
+static bool parse (const ParametersMap &parameters, const std::string &key, double &value)
 
+static bool parse (const ParametersMap &parameters, const std::string &key, std::string &value)
 
+static void parse (const ParametersMap &parameters, ParametersMap &parametersOut)
 
+static const char * showUsage ()
 
+static ParametersMap parseArguments (int argc, char *argv[], bool onlyParameters=false)
 
+static std::string getVersion ()
 
+static std::string getDefaultDatabaseName ()
 
+static std::string serialize (const ParametersMap &parameters)
 
+static ParametersMap deserialize (const std::string &parameters)
 
+static bool isFeatureParameter (const std::string &param)
 
+static ParametersMap getDefaultOdometryParameters (bool stereo=false, bool vis=true, bool icp=false)
 
+static ParametersMap getDefaultParameters (const std::string &group)
 
static ParametersMap filterParameters (const ParametersMap &parameters, const std::string &group, bool remove=false)
 
+static void readINI (const std::string &configFile, ParametersMap &parameters, bool modifiedOnly=false)
 
+static void readINIStr (const std::string &configContent, ParametersMap &parameters, bool modifiedOnly=false)
 
+static void writeINI (const std::string &configFile, const ParametersMap &parameters)
 
static const std::map< std::string, std::pair< bool, std::string > > & getRemovedParameters ()
 
static const ParametersMap & getBackwardCompatibilityMap ()
 
+static std::string createDefaultWorkingDirectory ()
 
+

Detailed Description

+

Class Parameters. This class is used to manage all custom parameters we want in the application. It was designed to be very easy to add a new parameter (just by adding one line of code). The macro PARAM(PREFIX, NAME, TYPE, DEFAULT_VALUE) is used to create a parameter in this class. A parameter can be accessed after by Parameters::defaultPARAMETERNAME() for the default value, Parameters::kPARAMETERNAME for his key (parameter name). The class provides also a general map containing all the parameter's key and default value. This map can be accessed anywhere in the application by Parameters::getDefaultParameters(); Example:

//Defining a parameter in this class with the macro PARAM:
+
PARAM(Video, ImageWidth, int, 640);
+
+
// Now from anywhere in the application (Parameters is a singleton)
+
int width = Parameters::defaultVideoImageWidth(); // theDefaultValue = 640
+
std::string theKey = Parameters::kVideoImageWidth(); // theKey = "Video/ImageWidth"
+
std::string strValue = Util::value(Parameters::getDefaultParameters(), theKey); // strValue = "640"
+
static const ParametersMap & getDefaultParameters()
Definition Parameters.h:978
+
See also
getDefaultParameters() TODO Add a detailed example with simple classes
+ +

Definition at line 170 of file Parameters.h.

+

Member Function Documentation

+ +

◆ getDefaultParameters()

+ +
+
+ + + + + +
+ + + + + + + +
static const ParametersMap & rtabmap::Parameters::getDefaultParameters ()
+
+inlinestatic
+
+

Get default parameters

+ +

Definition at line 978 of file Parameters.h.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string rtabmap::Parameters::getType (const std::string & paramKey)
+
+static
+
+

Get parameter type

+ +
+
+ +

◆ getDescription()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string rtabmap::Parameters::getDescription (const std::string & paramKey)
+
+static
+
+

Get parameter description

+ +
+
+ +

◆ filterParameters()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static ParametersMap rtabmap::Parameters::filterParameters (const ParametersMap & parameters,
const std::string & group,
bool remove = false 
)
+
+static
+
+

If remove=false: keep only parameters of the specified group. If remove=true: remove parameters of the specified group.

+ +
+
+ +

◆ getRemovedParameters()

+ +
+
+ + + + + +
+ + + + + + + +
static const std::map< std::string, std::pair< bool, std::string > > & rtabmap::Parameters::getRemovedParameters ()
+
+static
+
+

Get removed parameters (backward compatibility) <OldKeyName, <isEqual, NewKeyName> >, when isEqual=true, the old value can be safely copied to new parameter

+ +
+
+ +

◆ getBackwardCompatibilityMap()

+ +
+
+ + + + + +
+ + + + + + + +
static const ParametersMap & rtabmap::Parameters::getBackwardCompatibilityMap ()
+
+static
+
+

<NewKeyName, OldKeyName>

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ParticleFilter-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1ParticleFilter-members.html new file mode 100644 index 00000000..27c0dbbb --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ParticleFilter-members.html @@ -0,0 +1,95 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::ParticleFilter Member List
+
+
+ +

This is the complete list of members for rtabmap::ParticleFilter, including all inherited members.

+ + + + +
filter(double val) (defined in rtabmap::ParticleFilter)rtabmap::ParticleFilterinline
init(double initValue=0.0f) (defined in rtabmap::ParticleFilter)rtabmap::ParticleFilterinline
ParticleFilter(unsigned int nParticles=200, double noise=0.1, double lambda=10.0, double initValue=0.0) (defined in rtabmap::ParticleFilter)rtabmap::ParticleFilterinline
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ParticleFilter.html b/preview/pr-1492/api/latest/classrtabmap_1_1ParticleFilter.html new file mode 100644 index 00000000..aef05e45 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ParticleFilter.html @@ -0,0 +1,216 @@ + + + + + + + + +RTAB-Map: rtabmap::ParticleFilter Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::ParticleFilter Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

 ParticleFilter (unsigned int nParticles=200, double noise=0.1, double lambda=10.0, double initValue=0.0)
 
void init (double initValue=0.0f)
 
double filter (double val)
 
+

Detailed Description

+
+

Definition at line 115 of file ParticleFilter.h.

+

Constructor & Destructor Documentation

+ +

◆ ParticleFilter()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::ParticleFilter::ParticleFilter (unsigned int nParticles = 200,
double noise = 0.1,
double lambda = 10.0,
double initValue = 0.0 
)
+
+inline
+
+ +

Definition at line 118 of file ParticleFilter.h.

+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::ParticleFilter::init (double initValue = 0.0f)
+
+inline
+
+ +

Definition at line 128 of file ParticleFilter.h.

+ +
+
+ +

◆ filter()

+ +
+
+ + + + + +
+ + + + + + + + +
double rtabmap::ParticleFilter::filter (double val)
+
+inline
+
+ +

Definition at line 133 of file ParticleFilter.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ProgressState-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1ProgressState-members.html new file mode 100644 index 00000000..8d638d17 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ProgressState-members.html @@ -0,0 +1,97 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::ProgressState Member List
+
+
+ +

This is the complete list of members for rtabmap::ProgressState, including all inherited members.

+ + + + + + +
callback(const std::string &msg) const (defined in rtabmap::ProgressState)rtabmap::ProgressStateinlinevirtual
isCanceled() const (defined in rtabmap::ProgressState)rtabmap::ProgressStateinline
ProgressState() (defined in rtabmap::ProgressState)rtabmap::ProgressStateinline
setCanceled(bool canceled) (defined in rtabmap::ProgressState)rtabmap::ProgressStateinline
~ProgressState() (defined in rtabmap::ProgressState)rtabmap::ProgressStateinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1ProgressState.html b/preview/pr-1492/api/latest/classrtabmap_1_1ProgressState.html new file mode 100644 index 00000000..02d5f2c7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1ProgressState.html @@ -0,0 +1,247 @@ + + + + + + + + +RTAB-Map: rtabmap::ProgressState Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::ProgressState Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

virtual bool callback (const std::string &msg) const
 
void setCanceled (bool canceled)
 
bool isCanceled () const
 
+

Detailed Description

+
+

Definition at line 35 of file ProgressState.h.

+

Constructor & Destructor Documentation

+ +

◆ ProgressState()

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::ProgressState::ProgressState ()
+
+inline
+
+ +

Definition at line 38 of file ProgressState.h.

+ +
+
+ +

◆ ~ProgressState()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::ProgressState::~ProgressState ()
+
+inlinevirtual
+
+ +

Definition at line 45 of file ProgressState.h.

+ +
+
+

Member Function Documentation

+ +

◆ callback()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool rtabmap::ProgressState::callback (const std::string & msg) const
+
+inlinevirtual
+
+ +

Definition at line 39 of file ProgressState.h.

+ +
+
+ +

◆ setCanceled()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::ProgressState::setCanceled (bool canceled)
+
+inline
+
+ +

Definition at line 47 of file ProgressState.h.

+ +
+
+ +

◆ isCanceled()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::ProgressState::isCanceled () const
+
+inline
+
+ +

Definition at line 51 of file ProgressState.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1PythonInterface-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1PythonInterface-members.html new file mode 100644 index 00000000..09f8c4e1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1PythonInterface-members.html @@ -0,0 +1,95 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::PythonInterface Member List
+
+
+ +

This is the complete list of members for rtabmap::PythonInterface, including all inherited members.

+ + + + +
instance(const std::string &caller="") (defined in rtabmap::PythonInterface)rtabmap::PythonInterfacestatic
operator=(const PythonInterface &)=delete (defined in rtabmap::PythonInterface)rtabmap::PythonInterface
PythonInterface(const PythonInterface &)=delete (defined in rtabmap::PythonInterface)rtabmap::PythonInterface
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1PythonInterface.html b/preview/pr-1492/api/latest/classrtabmap_1_1PythonInterface.html new file mode 100644 index 00000000..4399b87e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1PythonInterface.html @@ -0,0 +1,118 @@ + + + + + + + + +RTAB-Map: rtabmap::PythonInterface Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::PythonInterface Class Reference
+
+
+ +

#include <PythonInterface.h>

+ + + + + + +

+Public Member Functions

+ PythonInterface (const PythonInterface &)=delete
 
+PythonInterface & operator= (const PythonInterface &)=delete
 
+ + + +

+Static Public Member Functions

+static PythonInterface & instance (const std::string &caller="")
 
+

Detailed Description

+

Process-wide singleton owning the embedded Python interpreter. Call PythonInterface::instance() from the main thread (typically near the top of main()) before any Python-using class is constructed.

+ +

Definition at line 28 of file PythonInterface.h.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Registration-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Registration-members.html new file mode 100644 index 00000000..21c442f4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Registration-members.html @@ -0,0 +1,123 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Registration Member List
+
+
+ +

This is the complete list of members for rtabmap::Registration, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canUseGuess() constrtabmap::Registration
canUseGuessImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
computeTransformation(const Signature &from, const Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) constrtabmap::Registration
computeTransformation(const SensorData &from, const SensorData &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) constrtabmap::Registration
computeTransformationImpl(Signature &from, Signature &to, Transform guess, RegistrationInfo &info) const =0rtabmap::Registrationprotectedpure virtual
computeTransformationMod(Signature &from, Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) constrtabmap::Registration
COVARIANCE_ANGULAR_EPSILONrtabmap::Registrationstatic
COVARIANCE_LINEAR_EPSILONrtabmap::Registrationstatic
create(const ParametersMap &parameters)rtabmap::Registrationstatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Registrationstatic
force3DoF() constrtabmap::Registrationinline
getMinGeometryCorrespondencesRatio() constrtabmap::Registration
getMinGeometryCorrespondencesRatioImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
getMinVisualCorrespondences() constrtabmap::Registration
getMinVisualCorrespondencesImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
isImageRequired() constrtabmap::Registration
isImageRequiredImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
isScanRequired() constrtabmap::Registration
isScanRequiredImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
isUserDataRequired() constrtabmap::Registration
isUserDataRequiredImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
kTypeIcp enum value (defined in rtabmap::Registration)rtabmap::Registration
kTypeUndef enum value (defined in rtabmap::Registration)rtabmap::Registration
kTypeVis enum value (defined in rtabmap::Registration)rtabmap::Registration
kTypeVisIcp enum value (defined in rtabmap::Registration)rtabmap::Registration
parseParameters(const ParametersMap &parameters)rtabmap::Registrationvirtual
Registration(const ParametersMap &parameters=ParametersMap(), Registration *child=0)rtabmap::Registrationprotected
repeatOnce() constrtabmap::Registrationinline
setChildRegistration(Registration *child)rtabmap::Registration
Type enum namertabmap::Registration
~Registration() (defined in rtabmap::Registration)rtabmap::Registrationvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Registration.html b/preview/pr-1492/api/latest/classrtabmap_1_1Registration.html new file mode 100644 index 00000000..a084b253 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Registration.html @@ -0,0 +1,605 @@ + + + + + + + + +RTAB-Map: rtabmap::Registration Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Abstract base for registering two observations (visual, ICP, or both). + More...

+ +

#include <Registration.h>

+
+Inheritance diagram for rtabmap::Registration:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+ + + + + +

+Public Types

enum  Type { kTypeUndef = -1 +, kTypeVis = 0 +, kTypeIcp = 1 +, kTypeVisIcp = 2 + }
 Registration strategy selected by Reg/Strategy. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual void parseParameters (const ParametersMap &parameters)
 Parses Reg/RepeatOnce, Reg/Force3DoF and forwards to child_ if set.
 
+bool isImageRequired () const
 True if images are needed (parent or child).
 
+bool isScanRequired () const
 True if laser scans are needed (parent or child).
 
+bool isUserDataRequired () const
 True if user data is needed (parent or child).
 
+bool canUseGuess () const
 True if the strategy can refine an initial guess (parent or child).
 
+int getMinVisualCorrespondences () const
 Minimum visual inliers required (max of parent and child thresholds).
 
+float getMinGeometryCorrespondencesRatio () const
 Minimum geometry inlier ratio required (max of parent and child thresholds).
 
bool repeatOnce () const
 
bool force3DoF () const
 
+void setChildRegistration (Registration *child)
 Replaces child_; takes ownership of child.
 
+Transform computeTransformation (const Signature &from, const Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
 Registers from to to using immutable signatures (copied internally).
 
+Transform computeTransformation (const SensorData &from, const SensorData &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
 Registers two SensorData observations (wrapped as signatures).
 
+Transform computeTransformationMod (Signature &from, Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
 Registers from to to; signatures may be modified by the implementation.
 
+ + + + + + + +

+Static Public Member Functions

+static Registration * create (const ParametersMap &parameters)
 Creates a registration from Reg/Strategy in parameters. Caller owns the pointer.
 
+static Registration * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates a registration of type (may be adjusted, e.g. to kTypeVis). Caller owns the pointer.
 
+ + + + + + + +

+Static Public Attributes

static double COVARIANCE_LINEAR_EPSILON
 Minimum diagonal value for linear covariance (m²).
 
static double COVARIANCE_ANGULAR_EPSILON
 Minimum diagonal value for angular covariance (rad²).
 
+ + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+ Registration (const ParametersMap &parameters=ParametersMap(), Registration *child=0)
 child is owned and deleted in the destructor.
 
virtual Transform computeTransformationImpl (Signature &from, Signature &to, Transform guess, RegistrationInfo &info) const =0
 Strategy-specific registration.
 
virtual bool isImageRequiredImpl () const
 
virtual bool isScanRequiredImpl () const
 
virtual bool isUserDataRequiredImpl () const
 
virtual bool canUseGuessImpl () const
 
virtual int getMinVisualCorrespondencesImpl () const
 
virtual float getMinGeometryCorrespondencesRatioImpl () const
 
+

Detailed Description

+

Abstract base for registering two observations (visual, ICP, or both).

+

Factory create() builds RegistrationVis, RegistrationIcp, or RegistrationVisIcp from Reg/Strategy in a ParametersMap.

+

computeTransformation() wraps signatures and delegates to computeTransformationMod(), which calls computeTransformationImpl() on the concrete strategy, optionally chains a child_ registration (e.g. ICP after visual), applies Reg/Force3DoF, and may repeat once with the first result as guess when Reg/RepeatOnce is enabled.

+

Requirement queries (isImageRequired(), isScanRequired(), etc.) OR-combine with the child when the parent returns false. Minimum correspondence thresholds take the maximum between parent and child.

+
See also
RegistrationVis
+
+RegistrationIcp
+
+RegistrationInfo
+ +

Definition at line 60 of file Registration.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::Registration::Type
+
+ +

Registration strategy selected by Reg/Strategy.

+ +

Definition at line 64 of file Registration.h.

+ +
+
+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::Registration::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Parses Reg/RepeatOnce, Reg/Force3DoF and forwards to child_ if set.

+ +

Reimplemented in rtabmap::RegistrationIcp, and rtabmap::RegistrationVis.

+ +
+
+ +

◆ repeatOnce()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Registration::repeatOnce () const
+
+inline
+
+
Returns
Value of Reg/RepeatOnce.
+ +

Definition at line 102 of file Registration.h.

+ +
+
+ +

◆ force3DoF()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Registration::force3DoF () const
+
+inline
+
+
Returns
Value of Reg/Force3DoF.
+ +

Definition at line 104 of file Registration.h.

+ +
+
+ +

◆ computeTransformationImpl()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual Transform rtabmap::Registration::computeTransformationImpl (Signature & from,
Signature & to,
Transform guess,
RegistrationInfo & info 
) const
+
+protectedpure virtual
+
+ +

Strategy-specific registration.

+

May modify from and to; a child_ registration reuses those changes.

+ +

Implemented in rtabmap::RegistrationIcp, and rtabmap::RegistrationVis.

+ +
+
+ +

◆ isImageRequiredImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::Registration::isImageRequiredImpl () const
+
+inlineprotectedvirtual
+
+ +

Definition at line 144 of file Registration.h.

+ +
+
+ +

◆ isScanRequiredImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::Registration::isScanRequiredImpl () const
+
+inlineprotectedvirtual
+
+ +

Definition at line 145 of file Registration.h.

+ +
+
+ +

◆ isUserDataRequiredImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::Registration::isUserDataRequiredImpl () const
+
+inlineprotectedvirtual
+
+ +

Definition at line 146 of file Registration.h.

+ +
+
+ +

◆ canUseGuessImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::Registration::canUseGuessImpl () const
+
+inlineprotectedvirtual
+
+ +

Definition at line 147 of file Registration.h.

+ +
+
+ +

◆ getMinVisualCorrespondencesImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int rtabmap::Registration::getMinVisualCorrespondencesImpl () const
+
+inlineprotectedvirtual
+
+ +

Definition at line 148 of file Registration.h.

+ +
+
+ +

◆ getMinGeometryCorrespondencesRatioImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual float rtabmap::Registration::getMinGeometryCorrespondencesRatioImpl () const
+
+inlineprotectedvirtual
+
+ +

Definition at line 149 of file Registration.h.

+ +
+
+

Member Data Documentation

+ +

◆ COVARIANCE_LINEAR_EPSILON

+ +
+
+ + + + + +
+ + + + +
double rtabmap::Registration::COVARIANCE_LINEAR_EPSILON
+
+static
+
+ +

Minimum diagonal value for linear covariance (m²).

+ +

Definition at line 71 of file Registration.h.

+ +
+
+ +

◆ COVARIANCE_ANGULAR_EPSILON

+ +
+
+ + + + + +
+ + + + +
double rtabmap::Registration::COVARIANCE_ANGULAR_EPSILON
+
+static
+
+ +

Minimum diagonal value for angular covariance (rad²).

+ +

Definition at line 73 of file Registration.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp-members.html new file mode 100644 index 00000000..a24790fb --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp-members.html @@ -0,0 +1,134 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RegistrationIcp Member List
+
+
+ +

This is the complete list of members for rtabmap::RegistrationIcp, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
available(IcpStrategy strategy)rtabmap::RegistrationIcpstatic
canUseGuess() constrtabmap::Registration
canUseGuessImpl() const (defined in rtabmap::RegistrationIcp)rtabmap::RegistrationIcpinlineprotectedvirtual
computeTransformation(const Signature &from, const Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) constrtabmap::Registration
computeTransformation(const SensorData &from, const SensorData &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) constrtabmap::Registration
computeTransformationImpl(Signature &from, Signature &to, Transform guess, RegistrationInfo &info) constrtabmap::RegistrationIcpprotectedvirtual
computeTransformationMod(Signature &from, Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) constrtabmap::Registration
COVARIANCE_ANGULAR_EPSILONrtabmap::Registrationstatic
COVARIANCE_LINEAR_EPSILONrtabmap::Registrationstatic
create(const ParametersMap &parameters)rtabmap::Registrationstatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Registrationstatic
force3DoF() constrtabmap::Registrationinline
getMinGeometryCorrespondencesRatio() constrtabmap::Registration
getMinGeometryCorrespondencesRatioImpl() const (defined in rtabmap::RegistrationIcp)rtabmap::RegistrationIcpinlineprotectedvirtual
getMinVisualCorrespondences() constrtabmap::Registration
getMinVisualCorrespondencesImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
IcpStrategy enum namertabmap::RegistrationIcp
isImageRequired() constrtabmap::Registration
isImageRequiredImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
isScanRequired() constrtabmap::Registration
isScanRequiredImpl() const (defined in rtabmap::RegistrationIcp)rtabmap::RegistrationIcpinlineprotectedvirtual
isUserDataRequired() constrtabmap::Registration
isUserDataRequiredImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
kIcpCCCoreLib enum valuertabmap::RegistrationIcp
kIcpEnd enum valuertabmap::RegistrationIcp
kIcpPCL enum valuertabmap::RegistrationIcp
kIcpPointMatcher enum valuertabmap::RegistrationIcp
kIcpUndef enum valuertabmap::RegistrationIcp
kTypeIcp enum value (defined in rtabmap::Registration)rtabmap::Registration
kTypeUndef enum value (defined in rtabmap::Registration)rtabmap::Registration
kTypeVis enum value (defined in rtabmap::Registration)rtabmap::Registration
kTypeVisIcp enum value (defined in rtabmap::Registration)rtabmap::Registration
parseParameters(const ParametersMap &parameters)rtabmap::RegistrationIcpvirtual
Registration(const ParametersMap &parameters=ParametersMap(), Registration *child=0)rtabmap::Registrationprotected
RegistrationIcp(const ParametersMap &parameters=ParametersMap(), Registration *child=0) (defined in rtabmap::RegistrationIcp)rtabmap::RegistrationIcp
RegistrationIcp(IcpStrategy strategy, const ParametersMap &parameters=ParametersMap(), Registration *child=0) (defined in rtabmap::RegistrationIcp)rtabmap::RegistrationIcp
repeatOnce() constrtabmap::Registrationinline
setChildRegistration(Registration *child)rtabmap::Registration
strategyName(IcpStrategy strategy)rtabmap::RegistrationIcpstatic
Type enum namertabmap::Registration
~Registration() (defined in rtabmap::Registration)rtabmap::Registrationvirtual
~RegistrationIcp() (defined in rtabmap::RegistrationIcp)rtabmap::RegistrationIcpvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp.html b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp.html new file mode 100644 index 00000000..f636ca70 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp.html @@ -0,0 +1,481 @@ + + + + + + + + +RTAB-Map: rtabmap::RegistrationIcp Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for rtabmap::RegistrationIcp:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RegistrationIcp:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + +

+Public Types

enum  IcpStrategy {
+  kIcpUndef = -1 +, kIcpPCL = 0 +, kIcpPointMatcher = 1 +, kIcpCCCoreLib = 2 +,
+  kIcpEnd = 3 +
+ }
 
- Public Types inherited from rtabmap::Registration
enum  Type { kTypeUndef = -1 +, kTypeVis = 0 +, kTypeIcp = 1 +, kTypeVisIcp = 2 + }
 Registration strategy selected by Reg/Strategy. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ RegistrationIcp (const ParametersMap &parameters=ParametersMap(), Registration *child=0)
 
+ RegistrationIcp (IcpStrategy strategy, const ParametersMap &parameters=ParametersMap(), Registration *child=0)
 
virtual void parseParameters (const ParametersMap &parameters)
 Parses Reg/RepeatOnce, Reg/Force3DoF and forwards to child_ if set.
 
- Public Member Functions inherited from rtabmap::Registration
+bool isImageRequired () const
 True if images are needed (parent or child).
 
+bool isScanRequired () const
 True if laser scans are needed (parent or child).
 
+bool isUserDataRequired () const
 True if user data is needed (parent or child).
 
+bool canUseGuess () const
 True if the strategy can refine an initial guess (parent or child).
 
+int getMinVisualCorrespondences () const
 Minimum visual inliers required (max of parent and child thresholds).
 
+float getMinGeometryCorrespondencesRatio () const
 Minimum geometry inlier ratio required (max of parent and child thresholds).
 
bool repeatOnce () const
 
bool force3DoF () const
 
+void setChildRegistration (Registration *child)
 Replaces child_; takes ownership of child.
 
+Transform computeTransformation (const Signature &from, const Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
 Registers from to to using immutable signatures (copied internally).
 
+Transform computeTransformation (const SensorData &from, const SensorData &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
 Registers two SensorData observations (wrapped as signatures).
 
+Transform computeTransformationMod (Signature &from, Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
 Registers from to to; signatures may be modified by the implementation.
 
+ + + + + + + + + + + + + + +

+Static Public Member Functions

static bool available (IcpStrategy strategy)
 Returns true if strategy is built into this rtabmap binary.
 
+static const char * strategyName (IcpStrategy strategy)
 Human-readable name for strategy ("PCL", "libpointmatcher", "CCCoreLib", or "Unknown").
 
- Static Public Member Functions inherited from rtabmap::Registration
+static Registration * create (const ParametersMap &parameters)
 Creates a registration from Reg/Strategy in parameters. Caller owns the pointer.
 
+static Registration * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates a registration of type (may be adjusted, e.g. to kTypeVis). Caller owns the pointer.
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual Transform computeTransformationImpl (Signature &from, Signature &to, Transform guess, RegistrationInfo &info) const
 Strategy-specific registration.
 
virtual bool isScanRequiredImpl () const
 
virtual bool canUseGuessImpl () const
 
virtual float getMinGeometryCorrespondencesRatioImpl () const
 
- Protected Member Functions inherited from rtabmap::Registration
+ Registration (const ParametersMap &parameters=ParametersMap(), Registration *child=0)
 child is owned and deleted in the destructor.
 
virtual bool isImageRequiredImpl () const
 
virtual bool isUserDataRequiredImpl () const
 
virtual int getMinVisualCorrespondencesImpl () const
 
+ + + + + + + + +

+Additional Inherited Members

- Static Public Attributes inherited from rtabmap::Registration
static double COVARIANCE_LINEAR_EPSILON
 Minimum diagonal value for linear covariance (m²).
 
static double COVARIANCE_ANGULAR_EPSILON
 Minimum diagonal value for angular covariance (rad²).
 
+

Detailed Description

+
+

Definition at line 39 of file RegistrationIcp.h.

+

Member Enumeration Documentation

+ +

◆ IcpStrategy

+ +
+
+ + + + + + +
Enumerator
kIcpUndef 

Undefined / invalid type.

+
kIcpPCL 

Point Cloud Library.

+
kIcpPointMatcher 

libpointmatcher.

+
kIcpCCCoreLib 

CCCoreLib (Cloud Compare).

+
kIcpEnd 

Sentinel: always keep last. Used to iterate through strategies.

+
+ +

Definition at line 42 of file RegistrationIcp.h.

+ +
+
+

Member Function Documentation

+ +

◆ available()

+ +
+
+ + + + + +
+ + + + + + + + +
static bool rtabmap::RegistrationIcp::available (IcpStrategy strategy)
+
+static
+
+ +

Returns true if strategy is built into this rtabmap binary.

+

kPCL is always available; kPointMatcher requires the RTABMAP_POINTMATCHER build flag; kCCCoreLib requires RTABMAP_CCCORELIB.

+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::RegistrationIcp::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Parses Reg/RepeatOnce, Reg/Force3DoF and forwards to child_ if set.

+ +

Reimplemented from rtabmap::Registration.

+ +
+
+ +

◆ computeTransformationImpl()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual Transform rtabmap::RegistrationIcp::computeTransformationImpl (Signature & from,
Signature & to,
Transform guess,
RegistrationInfo & info 
) const
+
+protectedvirtual
+
+ +

Strategy-specific registration.

+

May modify from and to; a child_ registration reuses those changes.

+ +

Implements rtabmap::Registration.

+ +
+
+ +

◆ isScanRequiredImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::RegistrationIcp::isScanRequiredImpl () const
+
+inlineprotectedvirtual
+
+ +

Reimplemented from rtabmap::Registration.

+ +

Definition at line 79 of file RegistrationIcp.h.

+ +
+
+ +

◆ canUseGuessImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::RegistrationIcp::canUseGuessImpl () const
+
+inlineprotectedvirtual
+
+ +

Reimplemented from rtabmap::Registration.

+ +

Definition at line 80 of file RegistrationIcp.h.

+ +
+
+ +

◆ getMinGeometryCorrespondencesRatioImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual float rtabmap::RegistrationIcp::getMinGeometryCorrespondencesRatioImpl () const
+
+inlineprotectedvirtual
+
+ +

Reimplemented from rtabmap::Registration.

+ +

Definition at line 81 of file RegistrationIcp.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.map new file mode 100644 index 00000000..bdc65c1e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.md5 new file mode 100644 index 00000000..ddcbc215 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.md5 @@ -0,0 +1 @@ +bf9f86accf8f6067972da042b62c8a71 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c066f6f227c2fc309c54d9b9b8012d440d684962 GIT binary patch literal 5431 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 Nm@-_c@UcbEzW{A~ + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__inherit__graph.md5 new file mode 100644 index 00000000..ddcbc215 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__inherit__graph.md5 @@ -0,0 +1 @@ +bf9f86accf8f6067972da042b62c8a71 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationIcp__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c066f6f227c2fc309c54d9b9b8012d440d684962 GIT binary patch literal 5431 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 Nm@-_c@UcbEzW{A~ + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RegistrationInfo Member List
+
+ + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationInfo.html b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationInfo.html new file mode 100644 index 00000000..eb9eee6b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationInfo.html @@ -0,0 +1,594 @@ + + + + + + + + +RTAB-Map: rtabmap::RegistrationInfo Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RegistrationInfo Class Reference
+
+
+ +

Statistics and diagnostics returned by Registration. + More...

+ +

#include <RegistrationInfo.h>

+ + + + + +

+Public Member Functions

RegistrationInfo copyWithoutData () const
 Copies scalar metrics and covariance; omits correspondence ID vectors.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

cv::Mat covariance
 
std::string rejectedMsg
 
double totalTime
 
int inliers
 
float inliersRatio
 
float inliersMeanDistance
 
float inliersDistribution
 
std::vector< int > inliersIDs
 
int matches
 
float variance
 
std::vector< int > matchesIDs
 
std::vector< int > projectedIDs
 
std::vector< int > inliersPerCam
 
std::vector< int > matchesPerCam
 
float icpInliersRatio
 
float icpTranslation
 
float icpRotation
 
float icpStructuralComplexity
 
float icpStructuralDistribution
 
int icpCorrespondences
 
float icpRMS
 
int icpIterations
 
+

Detailed Description

+

Statistics and diagnostics returned by Registration.

+

Filled by RegistrationVis and/or RegistrationIcp during Registration::computeTransformation(). The 6×6 covariance matrix is clamped to Registration::COVARIANCE_LINEAR_EPSILON and Registration::COVARIANCE_ANGULAR_EPSILON on the diagonal when empty or too small.

+

Visual fields are set by RegistrationVis; ICP fields by RegistrationIcp. In a combined Vis+ICP pipeline, both sets may be populated in the same object.

+ +

Definition at line 47 of file RegistrationInfo.h.

+

Constructor & Destructor Documentation

+ +

◆ RegistrationInfo()

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::RegistrationInfo::RegistrationInfo ()
+
+inline
+
+ +

Definition at line 50 of file RegistrationInfo.h.

+ +
+
+

Member Function Documentation

+ +

◆ copyWithoutData()

+ +
+
+ + + + + +
+ + + + + + + +
RegistrationInfo rtabmap::RegistrationInfo::copyWithoutData () const
+
+inline
+
+ +

Copies scalar metrics and covariance; omits correspondence ID vectors.

+ +

Definition at line 71 of file RegistrationInfo.h.

+ +
+
+

Member Data Documentation

+ +

◆ covariance

+ +
+
+ + + + +
cv::Mat rtabmap::RegistrationInfo::covariance
+
+

6×6 registration uncertainty (CV_64FC1).

+ +

Definition at line 95 of file RegistrationInfo.h.

+ +
+
+ +

◆ rejectedMsg

+ +
+
+ + + + +
std::string rtabmap::RegistrationInfo::rejectedMsg
+
+

Reason the registration was rejected, if any.

+ +

Definition at line 96 of file RegistrationInfo.h.

+ +
+
+ +

◆ totalTime

+ +
+
+ + + + +
double rtabmap::RegistrationInfo::totalTime
+
+

Total registration time (seconds).

+ +

Definition at line 97 of file RegistrationInfo.h.

+ +
+
+ +

◆ inliers

+ +
+
+ + + + +
int rtabmap::RegistrationInfo::inliers
+
+

Number of visual inliers.

+ +

Definition at line 100 of file RegistrationInfo.h.

+ +
+
+ +

◆ inliersRatio

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::inliersRatio
+
+

Ratio of inliers to matches.

+ +

Definition at line 101 of file RegistrationInfo.h.

+ +
+
+ +

◆ inliersMeanDistance

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::inliersMeanDistance
+
+

Mean reprojection or descriptor distance of inliers.

+ +

Definition at line 102 of file RegistrationInfo.h.

+ +
+
+ +

◆ inliersDistribution

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::inliersDistribution
+
+

Spatial spread of inliers in the image.

+ +

Definition at line 103 of file RegistrationInfo.h.

+ +
+
+ +

◆ inliersIDs

+ +
+
+ + + + +
std::vector<int> rtabmap::RegistrationInfo::inliersIDs
+
+

Indices of inlier keypoints.

+ +

Definition at line 104 of file RegistrationInfo.h.

+ +
+
+ +

◆ matches

+ +
+
+ + + + +
int rtabmap::RegistrationInfo::matches
+
+

Total visual matches before outlier rejection.

+ +

Definition at line 105 of file RegistrationInfo.h.

+ +
+
+ +

◆ variance

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::variance
+
+

Estimated variance of the visual constraint.

+ +

Definition at line 106 of file RegistrationInfo.h.

+ +
+
+ +

◆ matchesIDs

+ +
+
+ + + + +
std::vector<int> rtabmap::RegistrationInfo::matchesIDs
+
+

Indices of all matches.

+ +

Definition at line 107 of file RegistrationInfo.h.

+ +
+
+ +

◆ projectedIDs

+ +
+
+ + + + +
std::vector<int> rtabmap::RegistrationInfo::projectedIDs
+
+

Source ("from") feature IDs used in projection.

+ +

Definition at line 108 of file RegistrationInfo.h.

+ +
+
+ +

◆ inliersPerCam

+ +
+
+ + + + +
std::vector<int> rtabmap::RegistrationInfo::inliersPerCam
+
+

Inlier count per camera (multi-camera).

+ +

Definition at line 109 of file RegistrationInfo.h.

+ +
+
+ +

◆ matchesPerCam

+ +
+
+ + + + +
std::vector<int> rtabmap::RegistrationInfo::matchesPerCam
+
+

Match count per camera (multi-camera).

+ +

Definition at line 110 of file RegistrationInfo.h.

+ +
+
+ +

◆ icpInliersRatio

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::icpInliersRatio
+
+

Ratio of ICP inlier correspondences.

+ +

Definition at line 113 of file RegistrationInfo.h.

+ +
+
+ +

◆ icpTranslation

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::icpTranslation
+
+

Translation component of the ICP correction (m).

+ +

Definition at line 114 of file RegistrationInfo.h.

+ +
+
+ +

◆ icpRotation

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::icpRotation
+
+

Rotation component of the ICP correction (rad).

+ +

Definition at line 115 of file RegistrationInfo.h.

+ +
+
+ +

◆ icpStructuralComplexity

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::icpStructuralComplexity
+
+

Structural complexity of the scan overlap.

+ +

Definition at line 116 of file RegistrationInfo.h.

+ +
+
+ +

◆ icpStructuralDistribution

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::icpStructuralDistribution
+
+

Distribution of structural features in the overlap.

+ +

Definition at line 117 of file RegistrationInfo.h.

+ +
+
+ +

◆ icpCorrespondences

+ +
+
+ + + + +
int rtabmap::RegistrationInfo::icpCorrespondences
+
+

Number of ICP point correspondences.

+ +

Definition at line 118 of file RegistrationInfo.h.

+ +
+
+ +

◆ icpRMS

+ +
+
+ + + + +
float rtabmap::RegistrationInfo::icpRMS
+
+

Root-mean-square error of ICP correspondences (m).

+ +

Definition at line 119 of file RegistrationInfo.h.

+ +
+
+ +

◆ icpIterations

+ +
+
+ + + + +
int rtabmap::RegistrationInfo::icpIterations
+
+

Number of ICP iterations actually performed (-1 if unavailable from backend).

+ +

Definition at line 120 of file RegistrationInfo.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis-members.html new file mode 100644 index 00000000..b2c83ee4 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis-members.html @@ -0,0 +1,132 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RegistrationVis Member List
+
+
+ +

This is the complete list of members for rtabmap::RegistrationVis, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canUseGuess() constrtabmap::Registration
canUseGuessImpl() const (defined in rtabmap::RegistrationVis)rtabmap::RegistrationVisinlineprotectedvirtual
computeTransformation(const Signature &from, const Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) constrtabmap::Registration
computeTransformation(const SensorData &from, const SensorData &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) constrtabmap::Registration
computeTransformationImpl(Signature &from, Signature &to, Transform guess, RegistrationInfo &info) constrtabmap::RegistrationVisprotectedvirtual
computeTransformationMod(Signature &from, Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) constrtabmap::Registration
COVARIANCE_ANGULAR_EPSILONrtabmap::Registrationstatic
COVARIANCE_LINEAR_EPSILONrtabmap::Registrationstatic
create(const ParametersMap &parameters)rtabmap::Registrationstatic
create(Type &type, const ParametersMap &parameters=ParametersMap())rtabmap::Registrationstatic
force3DoF() constrtabmap::Registrationinline
getDetector() constrtabmap::RegistrationVisinline
getEstimationType() constrtabmap::RegistrationVisinline
getInlierDistance() constrtabmap::RegistrationVisinline
getIterations() constrtabmap::RegistrationVisinline
getMinGeometryCorrespondencesRatio() constrtabmap::Registration
getMinGeometryCorrespondencesRatioImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
getMinInliers() constrtabmap::RegistrationVisinline
getMinVisualCorrespondences() constrtabmap::Registration
getMinVisualCorrespondencesImpl() const (defined in rtabmap::RegistrationVis)rtabmap::RegistrationVisinlineprotectedvirtual
getNNDR() constrtabmap::RegistrationVisinline
getNNType() constrtabmap::RegistrationVisinline
isImageRequired() constrtabmap::Registration
isImageRequiredImpl() const (defined in rtabmap::RegistrationVis)rtabmap::RegistrationVisinlineprotectedvirtual
isScanRequired() constrtabmap::Registration
isScanRequiredImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
isUserDataRequired() constrtabmap::Registration
isUserDataRequiredImpl() const (defined in rtabmap::Registration)rtabmap::Registrationinlineprotectedvirtual
kTypeIcp enum value (defined in rtabmap::Registration)rtabmap::Registration
kTypeUndef enum value (defined in rtabmap::Registration)rtabmap::Registration
kTypeVis enum value (defined in rtabmap::Registration)rtabmap::Registration
kTypeVisIcp enum value (defined in rtabmap::Registration)rtabmap::Registration
parseParameters(const ParametersMap &parameters)rtabmap::RegistrationVisvirtual
Registration(const ParametersMap &parameters=ParametersMap(), Registration *child=0)rtabmap::Registrationprotected
RegistrationVis(const ParametersMap &parameters=ParametersMap(), Registration *child=0)rtabmap::RegistrationVis
repeatOnce() constrtabmap::Registrationinline
setChildRegistration(Registration *child)rtabmap::Registration
Type enum namertabmap::Registration
~Registration() (defined in rtabmap::Registration)rtabmap::Registrationvirtual
~RegistrationVis() (defined in rtabmap::RegistrationVis)rtabmap::RegistrationVisvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis.html b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis.html new file mode 100644 index 00000000..66e75ed1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis.html @@ -0,0 +1,617 @@ + + + + + + + + +RTAB-Map: rtabmap::RegistrationVis Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RegistrationVis Class Reference
+
+
+ +

Visual registration between two signatures using features and geometry. + More...

+ +

#include <RegistrationVis.h>

+
+Inheritance diagram for rtabmap::RegistrationVis:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RegistrationVis:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ RegistrationVis (const ParametersMap &parameters=ParametersMap(), Registration *child=0)
 child is owned and deleted in the destructor.
 
virtual void parseParameters (const ParametersMap &parameters)
 Parses Vis/ and feature parameters; recreates feature detectors.
 
float getInlierDistance () const
 
int getIterations () const
 
int getMinInliers () const
 
int getNNType () const
 
float getNNDR () const
 
int getEstimationType () const
 
const Feature2D * getDetector () const
 
- Public Member Functions inherited from rtabmap::Registration
+bool isImageRequired () const
 True if images are needed (parent or child).
 
+bool isScanRequired () const
 True if laser scans are needed (parent or child).
 
+bool isUserDataRequired () const
 True if user data is needed (parent or child).
 
+bool canUseGuess () const
 True if the strategy can refine an initial guess (parent or child).
 
+int getMinVisualCorrespondences () const
 Minimum visual inliers required (max of parent and child thresholds).
 
+float getMinGeometryCorrespondencesRatio () const
 Minimum geometry inlier ratio required (max of parent and child thresholds).
 
bool repeatOnce () const
 
bool force3DoF () const
 
+void setChildRegistration (Registration *child)
 Replaces child_; takes ownership of child.
 
+Transform computeTransformation (const Signature &from, const Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
 Registers from to to using immutable signatures (copied internally).
 
+Transform computeTransformation (const SensorData &from, const SensorData &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
 Registers two SensorData observations (wrapped as signatures).
 
+Transform computeTransformationMod (Signature &from, Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const
 Registers from to to; signatures may be modified by the implementation.
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual Transform computeTransformationImpl (Signature &from, Signature &to, Transform guess, RegistrationInfo &info) const
 Strategy-specific registration.
 
virtual bool isImageRequiredImpl () const
 
virtual bool canUseGuessImpl () const
 
virtual int getMinVisualCorrespondencesImpl () const
 
- Protected Member Functions inherited from rtabmap::Registration
+ Registration (const ParametersMap &parameters=ParametersMap(), Registration *child=0)
 child is owned and deleted in the destructor.
 
virtual bool isScanRequiredImpl () const
 
virtual bool isUserDataRequiredImpl () const
 
virtual float getMinGeometryCorrespondencesRatioImpl () const
 
+ + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Registration
enum  Type { kTypeUndef = -1 +, kTypeVis = 0 +, kTypeIcp = 1 +, kTypeVisIcp = 2 + }
 Registration strategy selected by Reg/Strategy. More...
 
- Static Public Member Functions inherited from rtabmap::Registration
+static Registration * create (const ParametersMap &parameters)
 Creates a registration from Reg/Strategy in parameters. Caller owns the pointer.
 
+static Registration * create (Type &type, const ParametersMap &parameters=ParametersMap())
 Creates a registration of type (may be adjusted, e.g. to kTypeVis). Caller owns the pointer.
 
- Static Public Attributes inherited from rtabmap::Registration
static double COVARIANCE_LINEAR_EPSILON
 Minimum diagonal value for linear covariance (m²).
 
static double COVARIANCE_ANGULAR_EPSILON
 Minimum diagonal value for angular covariance (rad²).
 
+

Detailed Description

+

Visual registration between two signatures using features and geometry.

+

Extracts and matches features (Feature2D), then estimates motion with Vis/EstimationType (3D→3D, 3D→2D PnP, or 2D→2D epipolar). Supports RGB-D (CameraModel + depth), stereo (StereoCameraModel), optical flow, GMS, and optional Python matchers when built with Python support.

+

Can chain a child_ registration (e.g. RegistrationIcp in Registration::kTypeVisIcp). Feature-related Vis/ parameters are mapped to Kp/ for Feature2D::create().

+
See also
Registration
+
+RegistrationInfo
+ +

Definition at line 60 of file RegistrationVis.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::RegistrationVis::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Parses Vis/ and feature parameters; recreates feature detectors.

+ +

Reimplemented from rtabmap::Registration.

+ +
+
+ +

◆ getInlierDistance()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::RegistrationVis::getInlierDistance () const
+
+inline
+
+
Returns
Vis/InlierDistance (m).
+ +

Definition at line 71 of file RegistrationVis.h.

+ +
+
+ +

◆ getIterations()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::RegistrationVis::getIterations () const
+
+inline
+
+
Returns
Vis/Iterations (RANSAC iterations).
+ +

Definition at line 73 of file RegistrationVis.h.

+ +
+
+ +

◆ getMinInliers()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::RegistrationVis::getMinInliers () const
+
+inline
+
+
Returns
Vis/MinInliers.
+ +

Definition at line 75 of file RegistrationVis.h.

+ +
+
+ +

◆ getNNType()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::RegistrationVis::getNNType () const
+
+inline
+
+
Returns
Vis/CorNNType nearest-neighbor strategy.
+ +

Definition at line 77 of file RegistrationVis.h.

+ +
+
+ +

◆ getNNDR()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::RegistrationVis::getNNDR () const
+
+inline
+
+
Returns
Vis/CorNNDR ratio test threshold.
+ +

Definition at line 79 of file RegistrationVis.h.

+ +
+
+ +

◆ getEstimationType()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::RegistrationVis::getEstimationType () const
+
+inline
+
+
Returns
Vis/EstimationType (0: 3D→3D, 1: PnP, 2: epipolar).
+ +

Definition at line 81 of file RegistrationVis.h.

+ +
+
+ +

◆ getDetector()

+ +
+
+ + + + + +
+ + + + + + + +
const Feature2D * rtabmap::RegistrationVis::getDetector () const
+
+inline
+
+
Returns
Feature detector used for the “from” signature.
+ +

Definition at line 84 of file RegistrationVis.h.

+ +
+
+ +

◆ computeTransformationImpl()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual Transform rtabmap::RegistrationVis::computeTransformationImpl (Signature & from,
Signature & to,
Transform guess,
RegistrationInfo & info 
) const
+
+protectedvirtual
+
+ +

Strategy-specific registration.

+

May modify from and to; a child_ registration reuses those changes.

+ +

Implements rtabmap::Registration.

+ +
+
+ +

◆ isImageRequiredImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::RegistrationVis::isImageRequiredImpl () const
+
+inlineprotectedvirtual
+
+ +

Reimplemented from rtabmap::Registration.

+ +

Definition at line 93 of file RegistrationVis.h.

+ +
+
+ +

◆ canUseGuessImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::RegistrationVis::canUseGuessImpl () const
+
+inlineprotectedvirtual
+
+ +

Reimplemented from rtabmap::Registration.

+ +

Definition at line 94 of file RegistrationVis.h.

+ +
+
+ +

◆ getMinVisualCorrespondencesImpl()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int rtabmap::RegistrationVis::getMinVisualCorrespondencesImpl () const
+
+inlineprotectedvirtual
+
+ +

Reimplemented from rtabmap::Registration.

+ +

Definition at line 95 of file RegistrationVis.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.map new file mode 100644 index 00000000..34d852a1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.md5 new file mode 100644 index 00000000..2e84a00d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.md5 @@ -0,0 +1 @@ +e236542c7fee780c3f6bc053887d8092 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0409ea40b2dc325b335cf4d7d47af5fb712af2b9 GIT binary patch literal 5449 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 A{r~^~ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.map new file mode 100644 index 00000000..34d852a1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.md5 new file mode 100644 index 00000000..2e84a00d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.md5 @@ -0,0 +1 @@ +e236542c7fee780c3f6bc053887d8092 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RegistrationVis__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0409ea40b2dc325b335cf4d7d47af5fb712af2b9 GIT binary patch literal 5449 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 A{r~^~ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.map new file mode 100644 index 00000000..7730222e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.md5 new file mode 100644 index 00000000..51195a56 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.md5 @@ -0,0 +1 @@ +b30715b65b7b0cc9301c97a01c2610fb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Registration__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a5829dff23df89def3c753dc74cf0e70e2aa52ed GIT binary patch literal 9537 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 x_ZzysDm0PVYxUmMq^I@2ZyRAgO + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + + +
+
rtabmap::Rtabmap Member List
+
+
+ +

This is the complete list of members for rtabmap::Rtabmap, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addLink(const Link &link)rtabmap::Rtabmap
addNodesToRepublish(const std::vector< int > &ids)rtabmap::Rtabmap
adjustLikelihood(std::map< int, float > &likelihood) constrtabmap::Rtabmap
cleanupLocalGrids(const std::map< int, Transform > &mapPoses, const cv::Mat &map, float xMin, float yMin, float cellSize, int cropRadius=1, bool filterScans=false)rtabmap::Rtabmap
clearPath(int status)rtabmap::Rtabmap
close(bool databaseSaved=true, const std::string &ouputDatabasePath="")rtabmap::Rtabmap
computePath(int targetNode, bool global)rtabmap::Rtabmap
computePath(const Transform &targetPose, float tolerance=-1.0f)rtabmap::Rtabmap
deleteLastLocation()rtabmap::Rtabmap
detectMoreLoopClosures(float clusterRadiusMax=0.5f, float clusterAngle=M_PI/6.0f, int iterations=1, bool intraSession=true, bool interSession=true, const ProgressState *state=0, float clusterRadiusMin=0.0f, int toFromMapId=-1)rtabmap::Rtabmap
dumpData() constrtabmap::Rtabmap
dumpPrediction() constrtabmap::Rtabmap
exportPoses(const std::string &path, bool optimized, bool global, int format)rtabmap::Rtabmap
generateDOTGraph(const std::string &path, int id=0, int margin=5)rtabmap::Rtabmap
get3DMap(std::map< int, Signature > &signatures, std::map< int, Transform > &poses, std::multimap< int, Link > &constraints, bool optimized, bool global) constrtabmap::Rtabmap
getForwardWMPoses(int fromId, int maxNearestNeighbors, float radius, int maxDiffID) constrtabmap::Rtabmap
getGoalReachedRadius() constrtabmap::Rtabmapinline
getGraph(std::map< int, Transform > &poses, std::multimap< int, Link > &constraints, bool optimized, bool global, std::map< int, Signature > *signatures=0, bool withImages=false, bool withScan=false, bool withUserData=false, bool withGrid=false, bool withWords=true, bool withGlobalDescriptors=true) constrtabmap::Rtabmap
getHighestHypothesisId() constrtabmap::Rtabmapinline
getHighestHypothesisValue() constrtabmap::Rtabmapinline
getInformation(const cv::Mat &covariance) constrtabmap::Rtabmap
getLastLocalizationPose() constrtabmap::Rtabmapinline
getLastLocationId() constrtabmap::Rtabmap
getLastProcessTime() constrtabmap::Rtabmapinline
getLocalConstraints() constrtabmap::Rtabmapinline
getLocalOptimizedPoses() constrtabmap::Rtabmapinline
getLocalRadius() constrtabmap::Rtabmapinline
getLoopClosureId() constrtabmap::Rtabmapinline
getLoopClosureValue() constrtabmap::Rtabmapinline
getMapCorrection() constrtabmap::Rtabmapinline
getMemory() constrtabmap::Rtabmapinline
getMemoryThreshold() constrtabmap::Rtabmapinline
getNodesInRadius(const Transform &pose, float radius, int k=0, std::map< int, float > *distsSqr=0)rtabmap::Rtabmap
getNodesInRadius(int nodeId, float radius, int k=0, std::map< int, float > *distsSqr=0)rtabmap::Rtabmap
getParameters() constrtabmap::Rtabmapinline
getPath() constrtabmap::Rtabmapinline
getPathCurrentGoalId() constrtabmap::Rtabmap
getPathCurrentGoalIndex() constrtabmap::Rtabmapinline
getPathCurrentIndex() constrtabmap::Rtabmapinline
getPathNextNodes() constrtabmap::Rtabmap
getPathNextPoses() constrtabmap::Rtabmap
getPaths(const std::map< int, Transform > &poses, const Transform &target, int maxGraphDepth=0) constrtabmap::Rtabmap
getPathStatus() constrtabmap::Rtabmapinline
getPathTransformToGoal() constrtabmap::Rtabmapinline
getPose(int locationId) constrtabmap::Rtabmap
getSignatureCopy(int id, bool images, bool scan, bool userData, bool occupancyGrid, bool withWords, bool withGlobalDescriptors) constrtabmap::Rtabmap
getStatistics() constrtabmap::Rtabmap
getSTM() constrtabmap::Rtabmap
getSTMSize() constrtabmap::Rtabmap
getTimeThreshold() constrtabmap::Rtabmapinline
getTotalMemSize() constrtabmap::Rtabmap
getWeights() constrtabmap::Rtabmap
getWM() constrtabmap::Rtabmap
getWMSize() constrtabmap::Rtabmap
getWorkingDir() constrtabmap::Rtabmapinline
globalBundleAdjustment(int optimizerType=1, bool rematchFeatures=true, int iterations=0, float pixelVariance=0.0f)rtabmap::Rtabmap
init(const ParametersMap &parameters, const std::string &databasePath="", bool loadDatabaseParameters=false)rtabmap::Rtabmap
init(const std::string &configFile="", const std::string &databasePath="", bool loadDatabaseParameters=false)rtabmap::Rtabmap
isIDsGenerated() constrtabmap::Rtabmap
isInSTM(int locationId) constrtabmap::Rtabmap
isRGBDMode() constrtabmap::Rtabmapinline
kVhEpipolar enum valuertabmap::Rtabmap
kVhNone enum valuertabmap::Rtabmap
kVhUndef enum valuertabmap::Rtabmap
labelLocation(int id, const std::string &label)rtabmap::Rtabmap
parseParameters(const ParametersMap &parameters)rtabmap::Rtabmap
process(const SensorData &data, Transform odomPose, const cv::Mat &odomCovariance=cv::Mat::eye(6, 6, CV_64FC1), const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())rtabmap::Rtabmap
process(const SensorData &data, Transform odomPose, float odomLinearVariance, float odomAngularVariance, const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())rtabmap::Rtabmap
process(const cv::Mat &image, int id=0, const std::map< std::string, float > &externalStats=std::map< std::string, float >())rtabmap::Rtabmap
refineLinks()rtabmap::Rtabmap
rejectLastLoopClosure()rtabmap::Rtabmap
resetMemory()rtabmap::Rtabmap
Rtabmap() (defined in rtabmap::Rtabmap)rtabmap::Rtabmap
setDummyDictionary(bool enabled=true)rtabmap::Rtabmap
setInitialPose(const Transform &initialPose)rtabmap::Rtabmap
setMemoryThreshold(int maxMemoryAllowed)rtabmap::Rtabmap
setOptimizedPoses(const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints)rtabmap::Rtabmap
setTimeThreshold(float maxTimeAllowed)rtabmap::Rtabmap
setUserData(int id, const cv::Mat &data)rtabmap::Rtabmap
setWorkingDirectory(std::string path)rtabmap::Rtabmap
triggerNewMap()rtabmap::Rtabmap
VhStrategy enum namertabmap::Rtabmap
~Rtabmap() (defined in rtabmap::Rtabmap)rtabmap::Rtabmapvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Rtabmap.html b/preview/pr-1492/api/latest/classrtabmap_1_1Rtabmap.html new file mode 100644 index 00000000..2cee6994 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Rtabmap.html @@ -0,0 +1,2755 @@ + + + + + + + + +RTAB-Map: rtabmap::Rtabmap Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::Rtabmap Class Reference
+
+
+ +

Top-level RTAB-Map SLAM pipeline (mapping, localization and loop closure). + More...

+ +

#include <Rtabmap.h>

+ + + + + +

+Public Types

enum  VhStrategy { kVhNone +, kVhEpipolar +, kVhUndef + }
 Loop-closure verification strategy. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool process (const SensorData &data, Transform odomPose, const cv::Mat &odomCovariance=cv::Mat::eye(6, 6, CV_64FC1), const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())
 Main RTAB-Map iteration: ingests one sensor frame and updates the map.
 
bool process (const SensorData &data, Transform odomPose, float odomLinearVariance, float odomAngularVariance, const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())
 Convenience overload: builds a diagonal covariance from scalar variances.
 
bool process (const cv::Mat &image, int id=0, const std::map< std::string, float > &externalStats=std::map< std::string, float >())
 Appearance-only convenience overload (loop-closure detection without odometry).
 
void init (const ParametersMap &parameters, const std::string &databasePath="", bool loadDatabaseParameters=false)
 Initializes Rtabmap with parameters and a database.
 
void init (const std::string &configFile="", const std::string &databasePath="", bool loadDatabaseParameters=false)
 Initializes Rtabmap from a configuration file and a database.
 
void close (bool databaseSaved=true, const std::string &ouputDatabasePath="")
 Closes Rtabmap and releases the underlying Memory.
 
const std::string & getWorkingDir () const
 
bool isRGBDMode () const
 
int getLoopClosureId () const
 
float getLoopClosureValue () const
 
int getHighestHypothesisId () const
 
float getHighestHypothesisValue () const
 
int getLastLocationId () const
 
std::list< int > getWM () const
 
std::set< int > getSTM () const
 
int getWMSize () const
 
int getSTMSize () const
 
std::map< int, int > getWeights () const
 
int getTotalMemSize () const
 
double getLastProcessTime () const
 
bool isInSTM (int locationId) const
 
bool isIDsGenerated () const
 
const Statistics & getStatistics () const
 
const std::map< int, Transform > & getLocalOptimizedPoses () const
 
const std::multimap< int, Link > & getLocalConstraints () const
 
Transform getPose (int locationId) const
 
Transform getMapCorrection () const
 
const Memory * getMemory () const
 
float getGoalReachedRadius () const
 
float getLocalRadius () const
 
const Transform & getLastLocalizationPose () const
 
float getTimeThreshold () const
 
void setTimeThreshold (float maxTimeAllowed)
 Sets the per-iteration time budget (ms).
 
int getMemoryThreshold () const
 
void setMemoryThreshold (int maxMemoryAllowed)
 Sets the maximum number of signatures kept in WM (0 = unbounded).
 
void setInitialPose (const Transform &initialPose)
 Sets the localization prior pose used to seed the next process() call (localization mode only).
 
int triggerNewMap ()
 Starts a new map session (next process() will create a fresh map id).
 
bool labelLocation (int id, const std::string &label)
 Assigns or clears a label on signature id.
 
bool setUserData (int id, const cv::Mat &data)
 Attaches user data to signature id, compressing it on the fly if needed.
 
void generateDOTGraph (const std::string &path, int id=0, int margin=5)
 Writes a Graphviz DOT file of the pose graph.
 
void exportPoses (const std::string &path, bool optimized, bool global, int format)
 Exports the current pose graph to a text file.
 
void resetMemory ()
 Clears all in-memory state and resets the database.
 
+void dumpPrediction () const
 Dumps the Bayes-filter prediction matrix to a file in the working directory.
 
+void dumpData () const
 Dumps the Memory state (signatures, words, dictionary) to the working directory.
 
+void parseParameters (const ParametersMap &parameters)
 Re-parses parameters and propagates them to owned sub-objects (Memory, BayesFilter, Optimizer, ...).
 
const ParametersMap & getParameters () const
 
void setWorkingDirectory (std::string path)
 Sets the working directory used for dumps, logs and temporary files.
 
void rejectLastLoopClosure ()
 Removes the loop-closure link added at the last process() iteration.
 
void deleteLastLocation ()
 Deletes the most recent (non-intermediate) location from the map.
 
void setOptimizedPoses (const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints)
 Replaces the current optimized poses and constraints with externally provided ones.
 
Signature getSignatureCopy (int id, bool images, bool scan, bool userData, bool occupancyGrid, bool withWords, bool withGlobalDescriptors) const
 Returns a copy of signature id with optional payloads attached.
 
+RTABMAP_DEPRECATED void get3DMap (std::map< int, Signature > &signatures, std::map< int, Transform > &poses, std::multimap< int, Link > &constraints, bool optimized, bool global) const
 Deprecated: use getGraph() instead with withImages=true, withScan=true, withUserData=true and withGrid=true.
 
void getGraph (std::map< int, Transform > &poses, std::multimap< int, Link > &constraints, bool optimized, bool global, std::map< int, Signature > *signatures=0, bool withImages=false, bool withScan=false, bool withUserData=false, bool withGrid=false, bool withWords=true, bool withGlobalDescriptors=true) const
 Extracts a full snapshot of the current pose graph.
 
std::map< int, Transform > getNodesInRadius (const Transform &pose, float radius, int k=0, std::map< int, float > *distsSqr=0)
 Returns optimized poses within a metric radius of pose.
 
std::map< int, Transform > getNodesInRadius (int nodeId, float radius, int k=0, std::map< int, float > *distsSqr=0)
 Returns optimized poses within a metric radius of node nodeId.
 
int detectMoreLoopClosures (float clusterRadiusMax=0.5f, float clusterAngle=M_PI/6.0f, int iterations=1, bool intraSession=true, bool interSession=true, const ProgressState *state=0, float clusterRadiusMin=0.0f, int toFromMapId=-1)
 Post-processing: searches for additional loop closures over the existing graph.
 
bool globalBundleAdjustment (int optimizerType=1, bool rematchFeatures=true, int iterations=0, float pixelVariance=0.0f)
 Runs a global bundle adjustment over the optimized graph.
 
int cleanupLocalGrids (const std::map< int, Transform > &mapPoses, const cv::Mat &map, float xMin, float yMin, float cellSize, int cropRadius=1, bool filterScans=false)
 Filters spurious obstacles from every node's local grid using a reference 2D map.
 
int refineLinks ()
 Re-runs registration on every link of the current graph and updates the ones that converge.
 
bool addLink (const Link &link)
 Adds an external link to the map.
 
+cv::Mat getInformation (const cv::Mat &covariance) const
 Converts an odometry covariance into an information matrix, clipping by Memory::getOdomMaxInf() when Parameters::kRGBDLoopCovLimited() is enabled.
 
void addNodesToRepublish (const std::vector< int > &ids)
 Marks node ids whose data should be re-emitted on the next process().
 
void setDummyDictionary (bool enabled=true)
 Loads the visual word dictionary as ids only, without descriptors.
 
int getPathStatus () const
 
void clearPath (int status)
 Clears the current path and sets its terminal status.
 
bool computePath (int targetNode, bool global)
 Plans a path from the current location to node targetNode.
 
bool computePath (const Transform &targetPose, float tolerance=-1.0f)
 Plans a path in the current optimized map toward a metric goal pose.
 
const std::vector< std::pair< int, Transform > > & getPath () const
 
std::vector< std::pair< int, Transform > > getPathNextPoses () const
 
std::vector< int > getPathNextNodes () const
 
int getPathCurrentGoalId () const
 
unsigned int getPathCurrentIndex () const
 
unsigned int getPathCurrentGoalIndex () const
 
const Transform & getPathTransformToGoal () const
 
std::map< int, Transform > getForwardWMPoses (int fromId, int maxNearestNeighbors, float radius, int maxDiffID) const
 Returns optimized poses of WM nodes located in front of fromId.
 
std::map< int, std::map< int, Transform > > getPaths (const std::map< int, Transform > &poses, const Transform &target, int maxGraphDepth=0) const
 Segments a set of optimized poses into paths connected by neighbor links.
 
void adjustLikelihood (std::map< int, float > &likelihood) const
 Applies the standard RTAB-Map likelihood adjustment.
 
+

Detailed Description

+

Top-level RTAB-Map SLAM pipeline (mapping, localization and loop closure).

+

Rtabmap orchestrates the full SLAM iteration. Each new sensor observation passed to process() goes through the steps described below.

+
1. Memory update
+

Done via Memory::update(): a new Signature is added to STM, the oldest STM entry is promoted to WM if STM is full, and rehearsal compares the new signature to the previous STM signature.

+

When the robot barely moved since the previous frame (odometry displacement below Parameters::kRGBDLinearUpdate() and Parameters::kRGBDAngularUpdate()), the iteration is flagged as a "small displacement":

    +
  • If a loop closure or localization was already accepted on a recent iteration, appearance-based global loop-closure detection and proximity detection by space are both skipped to avoid wasting work while the robot is stationary at an already-known location (only retrieval runs).
  • +
  • Otherwise (no recent loop closure / localization), both still run normally so a first-time loop closure can still be detected from a standstill.
  • +
+

In either case, at the end of the iteration, if no loop closure, proximity detection or landmark observation latched onto the new node, it is deleted from Memory so the map does not grow while the robot is idle.

+

Rehearsal still runs first, so visually similar consecutive idle frames may also be merged into the previous STM signature (its weight is incremented and the new signature is discarded) when the similarity exceeds Parameters::kMemRehearsalSimilarity().

+
2. Loop-closure hypothesis
+

Scored via Memory::computeLikelihood() and the recursive BayesFilter (prior + observation update).

+
3. Hypothesis selection
+

The highest posterior is compared against the loop-closure threshold (Parameters::kRtabmapLoopThr()); if accepted, the loop-closure link is added and the pose graph is re-optimized by Optimizer.

+

In RGB-D mode, two extra checks must pass before the link is committed:

    +
  • a valid geometric transform must be computed between the two candidate nodes by the registration pipeline (visual + optional ICP, see Memory::computeTransform());
  • +
  • the resulting transform must not be rejected by the graph-optimization consistency check (see Parameters::kRGBDOptimizeMaxError()).
  • +
+

The optimization used by the consistency check depends on the operating mode:

    +
  • In mapping mode, optimizeCurrentMap() re-optimizes the local map around the current signature including the new link, then graph::computeMaxGraphErrors() measures the worst per-link residual / its standard deviation. If the ratio exceeds Parameters::kRGBDOptimizeMaxError(), the loop closure(s) added this iteration are removed from Memory.
  • +
  • In localization mode, optimization is run on a sub-graph composed of the odometry cache (Parameters::kRGBDMaxOdomCacheSize()), the newly added localization link and pose priors fixing the map nodes (weighted by Parameters::kRGBDLocalizationPriorInf()). The same error-ratio check is applied; on failure the localization is rejected for this iteration but the persisted map and its links are left untouched.
  • +
+

In both modes, if the same link is rejected twice in a row, repairGraph() may also be attempted (within Parameters::kRGBDOptimizeMaxErrorRepairRadius()) to drop the offending link instead of the new candidate.

+

If either RGB-D check fails, the candidate is discarded and no link is added.

+
4. Retrieval
+

Once a loop-closure hypothesis is selected, neighbors of the matched node are brought back from LTM into WM via Memory::reactivateSignatures(), so the next iteration can compare against them too. Up to Parameters::kRtabmapMaxRetrieved() nodes are pulled per iteration; nodes around the current path or local pose may also be retrieved (capped by Parameters::kRtabmapMaxLocalRetrieved()).

+

Retrieval (and the related node immunization) is only active when memory management is enabled, i.e. when Parameters::kRtabmapTimeThr() or Parameters::kRtabmapMemoryThr() is non-zero.

+
5. Proximity detection (RGB-D mode)
+

Visual and scan-based local matches to nearby nodes, used in addition to the appearance-based loop closure.

+

Candidate proximity links go through the same two RGB-D gates as loop closures above: a valid geometric transform must be computed by the registration pipeline, and the transform must not be rejected by the graph-optimization consistency check.

+
6. Transfer (WM to LTM)
+

At the end of the iteration, if the iteration exceeded the configured time budget (Parameters::kRtabmapTimeThr()) or WM exceeded its size budget (Parameters::kRtabmapMemoryThr()), Memory::forget() moves the oldest low-frequency signatures from WM to LTM (immunized nodes – retrieved neighbors, the last localization node, etc. – are kept in WM).

+

Transfer is skipped when both thresholds are 0 (memory management disabled).

+
7. Map / localization output
+

Optimized poses, current map correction and statistics are made available to callers via the getters below.

+
Operating modes
+

Selected by Parameters::kMemIncrementalMemory() (see Memory::isIncremental()):

    +
  • Mapping: STM and WM grow; loop closures update the optimized graph.
  • +
  • Localization: STM/WM are frozen; the current node is matched against the persisted map and only getLastLocalizationPose() is updated.
  • +
+
Path planning
+

Rtabmap also exposes basic graph-based path planning in RGB-D mode (computePath(), getPath(), getPathStatus()), used by the GUI to navigate between mapped locations.

+

When memory management is enabled (see step 4 Retrieval and step 6 Transfer), the retrieval step also pulls nodes along the currently planned path back from LTM into WM (capped by Parameters::kRtabmapMaxLocalRetrieved()) so the robot is able to re-localize against upcoming waypoints as it follows the path, even when those nodes had been transferred out of WM earlier.

+
See also
Memory
+
+BayesFilter
+
+Optimizer
+
+Parameters
+ +

Definition at line 193 of file Rtabmap.h.

+

Member Enumeration Documentation

+ +

◆ VhStrategy

+ +
+
+ +

Loop-closure verification strategy.

+ + + + +
Enumerator
kVhNone 

No verification: the highest hypothesis above threshold is accepted.

+
kVhEpipolar 

Epipolar geometry verification (mostly historical, RGB-only mode).

+
kVhUndef 

Sentinel – undefined.

+
+ +

Definition at line 197 of file Rtabmap.h.

+ +
+
+

Member Function Documentation

+ +

◆ process() [1/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool rtabmap::Rtabmap::process (const SensorData & data,
Transform odomPose,
const cv::Mat & odomCovariance = cv::Mat::eye(6, 6, CV_64FC1),
const std::vector< float > & odomVelocity = std::vector< float >(),
const std::map< std::string, float > & externalStats = std::map< std::string, float >() 
)
+
+ +

Main RTAB-Map iteration: ingests one sensor frame and updates the map.

+

Adds data to Memory, runs the Bayes filter on the current likelihood, selects a loop-closure hypothesis if any, performs proximity detection, re-optimizes the graph as needed, and refreshes getStatistics() and getLastLocalizationPose().

+
Parameters
+ + + + + + +
dataSensor data for this frame (images, scan, user data, ...).
odomPoseOdometry pose; must be non-null in RGB-D SLAM mode. Pass a null Transform to fall back to appearance-only mode.
odomCovariance6x6 odometry covariance (default: identity).
odomVelocityOptional 6-vector (vx, vy, vz, vroll, vpitch, vyaw).
externalStatsExtra named statistics to record in the database for this iteration.
+
+
+
Returns
True if data was added to the map (i.e. an update() succeeded).
+ +
+
+ +

◆ process() [2/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool rtabmap::Rtabmap::process (const SensorData & data,
Transform odomPose,
float odomLinearVariance,
float odomAngularVariance,
const std::vector< float > & odomVelocity = std::vector< float >(),
const std::map< std::string, float > & externalStats = std::map< std::string, float >() 
)
+
+ +

Convenience overload: builds a diagonal covariance from scalar variances.

+

The 6x6 odometry covariance is constructed as diag(odomLinearVariance, odomLinearVariance, odomLinearVariance, +odomAngularVariance, odomAngularVariance, odomAngularVariance).

+ +
+
+ +

◆ process() [3/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool rtabmap::Rtabmap::process (const cv::Mat & image,
int id = 0,
const std::map< std::string, float > & externalStats = std::map< std::string, float >() 
)
+
+ +

Appearance-only convenience overload (loop-closure detection without odometry).

+

Equivalent to processing image alone, with no odometry pose. Useful for offline loop-closure benchmarking on image sequences.

+
Parameters
+ + + + +
imageRGB or grayscale frame.
idOptional frame id (0 = auto-generated).
externalStatsExtra named statistics to record in the database for this iteration.
+
+
+ +
+
+ +

◆ init() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Rtabmap::init (const ParametersMap & parameters,
const std::string & databasePath = "",
bool loadDatabaseParameters = false 
)
+
+ +

Initializes Rtabmap with parameters and a database.

+
Parameters
+ + + + +
parametersParameters overriding default parameters and database parameters (see loadDatabaseParameters).
databasePathDatabase input/output path. If empty, an in-memory database is used. If set and the file does not exist, it is created empty; if it exists, nodes and the visual word vocabulary are loaded into working memory.
loadDatabaseParametersIf true and an existing database is opened, the parameters stored inside the database are loaded and applied to this Rtabmap instance (then overridden by parameters).
+
+
+ +
+
+ +

◆ init() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Rtabmap::init (const std::string & configFile = "",
const std::string & databasePath = "",
bool loadDatabaseParameters = false 
)
+
+ +

Initializes Rtabmap from a configuration file and a database.

+
Parameters
+ + + + +
configFileConfiguration file (*.ini) overriding default parameters and database parameters (see loadDatabaseParameters).
databasePathDatabase input/output path; same semantics as the other init().
loadDatabaseParametersIf true and an existing database is opened, the parameters stored inside the database are loaded and applied first, then overridden by values from configFile.
+
+
+ +
+
+ +

◆ close()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::Rtabmap::close (bool databaseSaved = true,
const std::string & ouputDatabasePath = "" 
)
+
+ +

Closes Rtabmap and releases the underlying Memory.

+
Parameters
+ + + +
databaseSavedIf true, the in-memory state is flushed to the database; if false, in-memory changes are discarded.
ouputDatabasePathIf non-empty, the database is copied to this path on close. If a database on disk was initially created/loaded on a different path, it will be updated with the latest changes and renamed to the output path.
+
+
+ +
+
+ +

◆ getWorkingDir()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::Rtabmap::getWorkingDir () const
+
+inline
+
+
Returns
Working directory used for dumps, log files and temporary outputs.
+ +

Definition at line 297 of file Rtabmap.h.

+ +
+
+ +

◆ isRGBDMode()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Rtabmap::isRGBDMode () const
+
+inline
+
+
Returns
True if RGB-D SLAM mode is enabled (Parameters::kRGBDEnabled()).
+ +

Definition at line 299 of file Rtabmap.h.

+ +
+
+ +

◆ getLoopClosureId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Rtabmap::getLoopClosureId () const
+
+inline
+
+
Returns
Id of the loop-closure hypothesis accepted at the last process() iteration, or 0 if none.
+ +

Definition at line 301 of file Rtabmap.h.

+ +
+
+ +

◆ getLoopClosureValue()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Rtabmap::getLoopClosureValue () const
+
+inline
+
+
Returns
Posterior probability of the accepted loop-closure hypothesis, or 0 if none.
+ +

Definition at line 303 of file Rtabmap.h.

+ +
+
+ +

◆ getHighestHypothesisId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Rtabmap::getHighestHypothesisId () const
+
+inline
+
+
Returns
Id of the highest-posterior hypothesis at the last iteration (whether or not it was accepted).
+ +

Definition at line 305 of file Rtabmap.h.

+ +
+
+ +

◆ getHighestHypothesisValue()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Rtabmap::getHighestHypothesisValue () const
+
+inline
+
+
Returns
Posterior of the highest-posterior hypothesis at the last iteration.
+ +

Definition at line 307 of file Rtabmap.h.

+ +
+
+ +

◆ getLastLocationId()

+ +
+
+ + + + + + + +
int rtabmap::Rtabmap::getLastLocationId () const
+
+
Returns
Id of the last non-intermediate signature added to the map (0 if none).
+ +
+
+ +

◆ getWM()

+ +
+
+ + + + + + + +
std::list< int > rtabmap::Rtabmap::getWM () const
+
+
Returns
Working memory ids ordered as in Memory::getWorkingMem().
+ +
+
+ +

◆ getSTM()

+ +
+
+ + + + + + + +
std::set< int > rtabmap::Rtabmap::getSTM () const
+
+
Returns
Short-term memory ids.
+ +
+
+ +

◆ getWMSize()

+ +
+
+ + + + + + + +
int rtabmap::Rtabmap::getWMSize () const
+
+
Returns
Working memory size (number of WM signatures).
+ +
+
+ +

◆ getSTMSize()

+ +
+
+ + + + + + + +
int rtabmap::Rtabmap::getSTMSize () const
+
+
Returns
Short-term memory size (number of STM signatures).
+ +
+
+ +

◆ getWeights()

+ +
+
+ + + + + + + +
std::map< int, int > rtabmap::Rtabmap::getWeights () const
+
+
Returns
Per-signature weights (rehearsal counts) for WM and STM.
+ +
+
+ +

◆ getTotalMemSize()

+ +
+
+ + + + + + + +
int rtabmap::Rtabmap::getTotalMemSize () const
+
+
Returns
Total number of signatures across WM, STM and LTM.
+ +
+
+ +

◆ getLastProcessTime()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::Rtabmap::getLastProcessTime () const
+
+inline
+
+
Returns
Wall-clock duration of the last process() call, in seconds.
+ +

Definition at line 323 of file Rtabmap.h.

+ +
+
+ +

◆ isInSTM()

+ +
+
+ + + + + + + + +
bool rtabmap::Rtabmap::isInSTM (int locationId) const
+
+
Returns
True if locationId is currently in short-term memory.
+ +
+
+ +

◆ isIDsGenerated()

+ +
+
+ + + + + + + +
bool rtabmap::Rtabmap::isIDsGenerated () const
+
+
Returns
True if signature ids are auto-generated (vs. taken from SensorData::id()).
+ +
+
+ +

◆ getStatistics()

+ +
+
+ + + + + + + +
const Statistics & rtabmap::Rtabmap::getStatistics () const
+
+
Returns
Statistics produced by the last process() iteration.
+ +
+
+ +

◆ getLocalOptimizedPoses()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Transform > & rtabmap::Rtabmap::getLocalOptimizedPoses () const
+
+inline
+
+
Returns
Optimized poses of the current local map (last graph optimization result).
+ +

Definition at line 331 of file Rtabmap.h.

+ +
+
+ +

◆ getLocalConstraints()

+ +
+
+ + + + + +
+ + + + + + + +
const std::multimap< int, Link > & rtabmap::Rtabmap::getLocalConstraints () const
+
+inline
+
+
Returns
Constraints (links) of the current local map.
+ +

Definition at line 333 of file Rtabmap.h.

+ +
+
+ +

◆ getPose()

+ +
+
+ + + + + + + + +
Transform rtabmap::Rtabmap::getPose (int locationId) const
+
+
Returns
Optimized pose of locationId in the current local map (identity if not present).
+ +
+
+ +

◆ getMapCorrection()

+ +
+
+ + + + + +
+ + + + + + + +
Transform rtabmap::Rtabmap::getMapCorrection () const
+
+inline
+
+
Returns
Transform mapping odometry frame to the optimized map frame.
+

This is the correction applied to incoming odometry poses so they align with the latest graph optimization output. Updated whenever a loop closure or proximity detection re-optimizes the graph.

+

In ROS terms, this corresponds to the standard /map -> /odom TF transform published by SLAM systems: composing it with the live odometry pose (/odom -> /base_link) yields the robot pose in the map frame.

+ +

Definition at line 349 of file Rtabmap.h.

+ +
+
+ +

◆ getMemory()

+ +
+
+ + + + + +
+ + + + + + + +
const Memory * rtabmap::Rtabmap::getMemory () const
+
+inline
+
+
Returns
Owned Memory (may be null before init()).
+ +

Definition at line 351 of file Rtabmap.h.

+ +
+
+ +

◆ getGoalReachedRadius()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Rtabmap::getGoalReachedRadius () const
+
+inline
+
+
Returns
Radius (meters) under which the current path goal is considered reached.
+ +

Definition at line 353 of file Rtabmap.h.

+ +
+
+ +

◆ getLocalRadius()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Rtabmap::getLocalRadius () const
+
+inline
+
+
Returns
Local radius (meters) used by proximity detection and path planning queries.
+ +

Definition at line 355 of file Rtabmap.h.

+ +
+
+ +

◆ getLastLocalizationPose()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Rtabmap::getLastLocalizationPose () const
+
+inline
+
+
Returns
Last localized pose in the map frame.
+

In localization mode, this is the corrected odometry pose of the last processed frame. In mapping mode, this is the last pose returned by getLocalOptimizedPoses().

+ +

Definition at line 363 of file Rtabmap.h.

+ +
+
+ +

◆ getTimeThreshold()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Rtabmap::getTimeThreshold () const
+
+inline
+
+
Returns
Maximum allowed processing time per process() call, in milliseconds.
+
See also
Parameters::kRtabmapTimeThr()
+ +

Definition at line 369 of file Rtabmap.h.

+ +
+
+ +

◆ setTimeThreshold()

+ +
+
+ + + + + + + + +
void rtabmap::Rtabmap::setTimeThreshold (float maxTimeAllowed)
+
+ +

Sets the per-iteration time budget (ms).

+

Drives how aggressively WM is transferred to LTM to keep iterations under the threshold. 0 disables the time bound.

+
Note
This setting and setMemoryThreshold() are the only two switches that enable RTAB-Map's memory management (WM-to-LTM transfer, retrieval and node immunization). When both are 0, memory management is disabled and all signatures stay in working memory.
+
See also
Parameters::kRtabmapTimeThr()
+ +
+
+ +

◆ getMemoryThreshold()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Rtabmap::getMemoryThreshold () const
+
+inline
+
+
Returns
Maximum allowed WM size (number of signatures).
+
See also
Parameters::kRtabmapMemoryThr()
+ +

Definition at line 388 of file Rtabmap.h.

+ +
+
+ +

◆ setMemoryThreshold()

+ +
+
+ + + + + + + + +
void rtabmap::Rtabmap::setMemoryThreshold (int maxMemoryAllowed)
+
+ +

Sets the maximum number of signatures kept in WM (0 = unbounded).

+
Note
This setting and setTimeThreshold() are the only two switches that enable RTAB-Map's memory management (WM-to-LTM transfer, retrieval and node immunization). When both are 0, memory management is disabled and all signatures stay in working memory.
+
See also
Parameters::kRtabmapMemoryThr()
+ +
+
+ +

◆ setInitialPose()

+ +
+
+ + + + + + + + +
void rtabmap::Rtabmap::setInitialPose (const Transform & initialPose)
+
+ +

Sets the localization prior pose used to seed the next process() call (localization mode only).

+

Tells RTAB-Map where the robot is currently located in the map frame, so that the very next call to process() can align incoming odometry with the persisted map without waiting for a loop closure. Typical use cases: restoring localization after a session restart, applying an external pose estimate (e.g. from a GPS or a known starting point), or recovering from "kidnapped robot" situations.

+

This call only stages state; it does not itself produce a non-identity getMapCorrection(). The alignment between the odometry frame and the map frame is performed on the next process() call, which consumes initialPose together with the incoming odometry pose. Two branches are taken depending on Parameters::kRGBDOptimizeFromGraphEnd():

    +
  • false (default): getMapCorrection() is set so that the live odometry pose is shifted to land on initialPose in the map frame (the optimized map is left untouched).
  • +
  • true: every optimized node pose is rigidly transformed so that the map itself moves to align with initialPose (the map correction stays close to identity).
  • +
+

The transform applied is restricted by SLAM dimensionality: 3-DoF (x, y, yaw) for 2D SLAM, 4-DoF (x, y, z, yaw) when gravity is available (IMU orientation or Memory::isOdomGravityUsed()) and Parameters::kOptimizerGravitySigma() is non-zero, full 6-DoF otherwise.

+

Side effects on the staged state:

    +
  • getLastLocalizationPose() is replaced by initialPose; the localization covariance, the last localization node id and the odometry cache used for loop-closure rejection are all cleared.
  • +
  • getMapCorrection() is reset to identity and any backup is cleared.
  • +
  • If the current map has not been optimized yet (no entries in getLocalOptimizedPoses()) and a last working signature exists, the map is optimized around that signature so the next process() has something to localize against.
  • +
+

After the next process() consumes the prior, the nearest optimized node to initialPose is recorded as the last localization node.

+
Parameters
+ + +
initialPoseRobot pose in the map frame.
+
+
+
Note
No-op (with warning) in mapping mode.
+
See also
Parameters::kMemIncrementalMemory()
+
+Parameters::kRGBDOptimizeFromGraphEnd()
+ +
+
+ +

◆ triggerNewMap()

+ +
+
+ + + + + + + +
int rtabmap::Rtabmap::triggerNewMap ()
+
+ +

Starts a new map session (next process() will create a fresh map id).

+

In mapping mode, this increments the map id, clears the local optimized graph and resets the Bayes filter. In localization mode, it resets the map correction, the localization node and the odometry cache; if Parameters::kRtabmapRestartAtOrigin() is enabled, the last localization pose is reset to identity.

+
Returns
The new map id (mapping mode), or -1 (localization mode).
+ +
+
+ +

◆ labelLocation()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::Rtabmap::labelLocation (int id,
const std::string & label 
)
+
+ +

Assigns or clears a label on signature id.

+
Returns
True if the label was applied.
+ +
+
+ +

◆ setUserData()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::Rtabmap::setUserData (int id,
const cv::Mat & data 
)
+
+ +

Attaches user data to signature id, compressing it on the fly if needed.

+

The format is detected automatically: a single-row CV_8UC1 matrix is treated as already-compressed data and stored as-is; anything else is considered raw and compressed before being stored.

+
Note
If you pass one-dimensional unsigned 8-bit raw data, transpose it so it has multiple rows (not multiple columns), otherwise it will be misdetected as already compressed.
+
Parameters
+ + + +
idTarget signature id (must be in WM/STM or LTM).
dataRaw or pre-compressed user data.
+
+
+
Returns
True if the data was attached.
+ +
+
+ +

◆ generateDOTGraph()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Rtabmap::generateDOTGraph (const std::string & path,
int id = 0,
int margin = 5 
)
+
+ +

Writes a Graphviz DOT file of the pose graph.

+
Parameters
+ + + + +
pathOutput file path.
idIf non-zero, root the graph at id; otherwise use the last signature.
marginMaximum graph depth around id to include.
+
+
+ +
+
+ +

◆ exportPoses()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Rtabmap::exportPoses (const std::string & path,
bool optimized,
bool global,
int format 
)
+
+ +

Exports the current pose graph to a text file.

+

Forwards to graph::exportPoses() after collecting either the optimized or the raw odometry poses (and the matching constraints when needed).

+
Parameters
+ + + + + +
pathOutput file path.
optimizedIf true, export optimized poses; otherwise raw odometry poses.
globalIf true, include nodes from LTM as well; otherwise only WM/STM.
formatOutput format code; see graph::exportPoses() for the full list of supported values (raw, RGBD-SLAM/TUM, KITTI, TORO, g2o, ...).
+
+
+
See also
graph::exportPoses()
+ +
+
+ +

◆ resetMemory()

+ +
+
+ + + + + + + +
void rtabmap::Rtabmap::resetMemory ()
+
+ +

Clears all in-memory state and resets the database.

+

In incremental mode, also clears the persisted map. In read-only memory mode, resets the in-memory state but leaves the database untouched.

+ +
+
+ +

◆ getParameters()

+ +
+
+ + + + + +
+ + + + + + + +
const ParametersMap & rtabmap::Rtabmap::getParameters () const
+
+inline
+
+
Returns
Current effective parameter map.
+ +

Definition at line 526 of file Rtabmap.h.

+ +
+
+ +

◆ setWorkingDirectory()

+ +
+
+ + + + + + + + +
void rtabmap::Rtabmap::setWorkingDirectory (std::string path)
+
+ +

Sets the working directory used for dumps, logs and temporary files.

+

Can also be configured through Parameters::kRtabmapWorkingDirectory() in the parameter map passed to init() or parseParameters().

+
See also
Parameters::kRtabmapWorkingDirectory()
+ +
+
+ +

◆ rejectLastLoopClosure()

+ +
+
+ + + + + + + +
void rtabmap::Rtabmap::rejectLastLoopClosure ()
+
+ +

Removes the loop-closure link added at the last process() iteration.

+

Looks at the last non-intermediate signature in STM and erases any Link::kGlobalClosure, Link::kLocalSpaceClosure, Link::kLocalTimeClosure or Link::kUserClosure attached to it. The current optimized map is updated accordingly.

+ +
+
+ +

◆ deleteLastLocation()

+ +
+
+ + + + + + + +
void rtabmap::Rtabmap::deleteLastLocation ()
+
+ +

Deletes the most recent (non-intermediate) location from the map.

+

Used by tools to undo the very last process() iteration. In mapping mode, the optimized graph is recomputed without the deleted node.

+
Note
Locations whose neighbors include intermediate nodes are not supported.
+ +
+
+ +

◆ setOptimizedPoses()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::Rtabmap::setOptimizedPoses (const std::map< int, Transform > & poses,
const std::multimap< int, Link > & constraints 
)
+
+ +

Replaces the current optimized poses and constraints with externally provided ones.

+

Useful when graph optimization is performed outside of Rtabmap.

+
Warning
No consistency check is performed against the current Memory state: poses and constraints overwrite the internal containers verbatim. The caller is responsible for ensuring that every id in poses (and every endpoint of every link in constraints) belongs to a signature currently in STM or WM (see Memory::isInSTM() / Memory::isInWM()). Passing poses for ids that are no longer loaded will leave dangling entries that may confuse subsequent process() calls.
+ +
+
+ +

◆ getSignatureCopy()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Signature rtabmap::Rtabmap::getSignatureCopy (int id,
bool images,
bool scan,
bool userData,
bool occupancyGrid,
bool withWords,
bool withGlobalDescriptors 
) const
+
+ +

Returns a copy of signature id with optional payloads attached.

+

Loads from WM/STM if present, otherwise from LTM. Selectively populates the returned Signature with images, scan, user data, occupancy grid, visual words and global descriptors.

+ +
+
+ +

◆ getGraph()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Rtabmap::getGraph (std::map< int, Transform > & poses,
std::multimap< int, Link > & constraints,
bool optimized,
bool global,
std::map< int, Signature > * signatures = 0,
bool withImages = false,
bool withScan = false,
bool withUserData = false,
bool withGrid = false,
bool withWords = true,
bool withGlobalDescriptors = true 
) const
+
+ +

Extracts a full snapshot of the current pose graph.

+
Parameters
+ + + + + + + + + + + + +
posesOutput: pose for every selected node.
constraintsOutput: links between selected nodes.
optimizedIf true, return optimized poses; otherwise raw odometry poses.
globalIf true, include nodes from LTM as well; otherwise only WM/STM.
signaturesOptional output: a copy of each node's Signature (with the payloads requested by the with* flags).
withImagesAttach compressed RGB/depth images to signatures.
withScanAttach laser scan blob.
withUserDataAttach user data blob.
withGridAttach occupancy grid cells.
withWordsAttach visual words (id, keypoints, 3D points, descriptors).
withGlobalDescriptorsAttach global descriptors.
+
+
+ +
+
+ +

◆ getNodesInRadius() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::map< int, Transform > rtabmap::Rtabmap::getNodesInRadius (const Transform & pose,
float radius,
int k = 0,
std::map< int, float > * distsSqr = 0 
)
+
+ +

Returns optimized poses within a metric radius of pose.

+
Parameters
+ + + + + +
poseQuery pose in the map frame.
radiusSearch radius in meters (0 falls back to Parameters::kRGBDLocalRadius()).
kIf non-zero, also cap the result to the k nearest neighbors.
distsSqrOptional output: per-id squared distance to pose.
+
+
+
Returns
Nodes (and possibly landmarks) within the radius, mapped to their pose. Landmarks have a negative id.
+ +
+
+ +

◆ getNodesInRadius() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::map< int, Transform > rtabmap::Rtabmap::getNodesInRadius (int nodeId,
float radius,
int k = 0,
std::map< int, float > * distsSqr = 0 
)
+
+ +

Returns optimized poses within a metric radius of node nodeId.

+
Parameters
+ + + + + +
nodeIdQuery node id. Pass 0 to query around the latest node. A negative id requests neighbors of the corresponding landmark.
radiusSearch radius in meters (0 falls back to Parameters::kRGBDLocalRadius()).
kIf non-zero, cap the result to the k nearest neighbors.
distsSqrOptional output: per-id squared distance to nodeId.
+
+
+
Returns
Nodes (and possibly landmarks) within the radius.
+ +
+
+ +

◆ detectMoreLoopClosures()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rtabmap::Rtabmap::detectMoreLoopClosures (float clusterRadiusMax = 0.5f,
float clusterAngle = M_PI/6.0f,
int iterations = 1,
bool intraSession = true,
bool interSession = true,
const ProgressState * state = 0,
float clusterRadiusMin = 0.0f,
int toFromMapId = -1 
)
+
+ +

Post-processing: searches for additional loop closures over the existing graph.

+

Clusters nearby optimized poses and runs registration between candidates that are not yet linked. New links are added to Memory and the graph is re-optimized.

+
Note
The registration approach used here is the one configured in Memory via Parameters::kRegStrategy() (0=Vis, 1=Icp, 2=VisIcp), so the quality and sensor requirements of this pass mirror the live loop-closure pipeline.
+
+Candidate cluster pairs whose ids differ by less than Parameters::kMemSTMSize(), or that are already reachable from each other within that many graph hops, are filtered out. This prevents trivial "loop closures" between temporally or topologically adjacent nodes.
+
Parameters
+ + + + + + + + + +
clusterRadiusMaxMaximum metric distance (m) between two candidate nodes.
clusterAngleMaximum angular distance (rad) between two candidate nodes.
iterationsNumber of refinement passes.
intraSessionInclude loop closures within the same map session.
interSessionInclude loop closures between different map sessions.
stateOptional progress sink; cancellation requests are honored.
clusterRadiusMinMinimum metric distance (m); pairs closer than this are considered already linked through neighbor links.
toFromMapIdIf >=0, restrict candidate pairs to nodes belonging to this map id.
+
+
+
Returns
Number of loop closures added, or -1 on error (e.g. not in RGB-D mode, no optimizer iterations).
+ +
+
+ +

◆ globalBundleAdjustment()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool rtabmap::Rtabmap::globalBundleAdjustment (int optimizerType = 1,
bool rematchFeatures = true,
int iterations = 0,
float pixelVariance = 0.0f 
)
+
+ +

Runs a global bundle adjustment over the optimized graph.

+
Parameters
+ + + + + +
optimizerTypeBackend optimizer (e.g. 1=g2o); availability depends on what RTAB-Map was built with.
rematchFeaturesIf true, re-match visual features between connected nodes before BA (otherwise reuse existing word-id correspondences).
iterationsSolver iterations (0 falls back to Parameters::kOptimizerIterations()).
pixelVariancePixel reprojection variance used by the cost (0 falls back to Parameters::kOptimizerPixelVariance()).
+
+
+
Returns
True if BA was run and improved poses were stored.
+ +
+
+ +

◆ cleanupLocalGrids()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int rtabmap::Rtabmap::cleanupLocalGrids (const std::map< int, Transform > & mapPoses,
const cv::Mat & map,
float xMin,
float yMin,
float cellSize,
int cropRadius = 1,
bool filterScans = false 
)
+
+ +

Filters spurious obstacles from every node's local grid using a reference 2D map.

+

Thin wrapper around Memory::cleanupLocalGrids(); see that method for the exact filtering rule and the meaning of cropRadius and filterScans.

+
Returns
Number of (node, grid or scan) modifications, or -1 on error.
+ +
+
+ +

◆ refineLinks()

+ +
+
+ + + + + + + +
int rtabmap::Rtabmap::refineLinks ()
+
+ +

Re-runs registration on every link of the current graph and updates the ones that converge.

+

Useful after parameter changes to refresh stored transforms.

+
Note
The registration approach is the one configured in Memory via Parameters::kRegStrategy() (0=Vis, 1=Icp, 2=VisIcp). For each link, the link's existing relative transform (the constraint produced by the current optimized local graph) is passed as the initial guess to Memory::computeTransform(), so links already close to convergence are refined locally rather than re-estimated from scratch.
+
Returns
Number of links refined, or -1 if not in RGB-D mode.
+ +
+
+ +

◆ addLink()

+ +
+
+ + + + + + + + +
bool rtabmap::Rtabmap::addLink (const Link & link)
+
+ +

Adds an external link to the map.

+

The link's "from" and "to" endpoints must exist in memory (incremental mode) or in the optimized poses (localization mode). RGB-D mode only.

+
Returns
True if the link was added.
+ +
+
+ +

◆ addNodesToRepublish()

+ +
+
+ + + + + + + + +
void rtabmap::Rtabmap::addNodesToRepublish (const std::vector< int > & ids)
+
+ +

Marks node ids whose data should be re-emitted on the next process().

+

The requested signatures are attached to the Statistics object produced by the next process() call (via the same mechanism as the regular "last signature +data"), so consumers reading getStatistics() pick them up alongside the normal output. Up to Parameters::kRtabmapMaxRepublished() ids are emitted per iteration; any leftover ids stay queued for subsequent iterations until they are republished or fall out of the current graph.

+

Pass an empty vector to clear the request set. Requires Parameters::kRtabmapMaxRepublished() > 0 and Parameters::kRtabmapPublishLastSignature() = true.

+ +
+
+ +

◆ setDummyDictionary()

+ +
+
+ + + + + + + + +
void rtabmap::Rtabmap::setDummyDictionary (bool enabled = true)
+
+ +

Loads the visual word dictionary as ids only, without descriptors.

+

With a dummy dictionary, init() populates VWDictionary with placeholder VisualWord objects carrying an empty descriptor, and the dictionary update (FLANN index construction) is skipped. This makes opening a large database much faster and lighter in RAM when the word descriptors are not needed, e.g. to inspect or post-process an existing map rather than to localize in it.

+

The dummy dictionary is silently disabled if the database has no words, or if the dictionary has to be rebuilt from the nodes because it was not saved properly.

+
Parameters
+ + +
enabledTrue to load ids only, false to load the full dictionary (default).
+
+
+
Note
Must be called before init(); an error is logged and the call ignored once the memory exists.
+
Warning
Incompatible with mapping: adding new nodes asserts in Memory::createSignature(). Loop closure detection also cannot match new observations against a descriptor-less dictionary.
+
See also
Memory::setDummyDictionary()
+ +
+
+ +

◆ getPathStatus()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Rtabmap::getPathStatus () const
+
+inline
+
+
Returns
Current path status: -1 = failed, 0 = idle / executing, 1 = success.
+ +

Definition at line 776 of file Rtabmap.h.

+ +
+
+ +

◆ clearPath()

+ +
+
+ + + + + + + + +
void rtabmap::Rtabmap::clearPath (int status)
+
+ +

Clears the current path and sets its terminal status.

+
Parameters
+ + +
status-1 = failed, 0 = idle / executing, 1 = success.
+
+
+ +
+
+ +

◆ computePath() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::Rtabmap::computePath (int targetNode,
bool global 
)
+
+ +

Plans a path from the current location to node targetNode.

+

RGB-D mode only (requires Parameters::kRGBDEnabled() = true).

+
Parameters
+ + + +
targetNodeDestination node id (positive) or landmark id (negative).
globalIf true, also search nodes in LTM; otherwise only the current optimized map.
+
+
+
Returns
True if a path was computed; the result is available via getPath().
+
See also
Parameters::kRGBDEnabled()
+ +
+
+ +

◆ computePath() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::Rtabmap::computePath (const Transform & targetPose,
float tolerance = -1.0f 
)
+
+ +

Plans a path in the current optimized map toward a metric goal pose.

+
Parameters
+ + + +
targetPoseGoal pose in the map frame.
toleranceGoal-acceptance tolerance (meters). A negative value falls back to Parameters::kRGBDLocalRadius(); 0 means infinite tolerance.
+
+
+
Returns
True if a path was computed.
+ +
+
+ +

◆ getPath()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< std::pair< int, Transform > > & rtabmap::Rtabmap::getPath () const
+
+inline
+
+
Returns
The currently planned path as a sequence of (node id, pose) waypoints.
+ +

Definition at line 805 of file Rtabmap.h.

+ +
+
+ +

◆ getPathNextPoses()

+ +
+
+ + + + + + + +
std::vector< std::pair< int, Transform > > rtabmap::Rtabmap::getPathNextPoses () const
+
+
Returns
Upcoming waypoints (from the current path index onward).
+ +
+
+ +

◆ getPathNextNodes()

+ +
+
+ + + + + + + +
std::vector< int > rtabmap::Rtabmap::getPathNextNodes () const
+
+
Returns
Upcoming node ids (from the current path index onward).
+ +
+
+ +

◆ getPathCurrentGoalId()

+ +
+
+ + + + + + + +
int rtabmap::Rtabmap::getPathCurrentGoalId () const
+
+
Returns
Id of the current intermediate path goal (the node currently being chased).
+ +
+
+ +

◆ getPathCurrentIndex()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int rtabmap::Rtabmap::getPathCurrentIndex () const
+
+inline
+
+
Returns
Index of the current waypoint in getPath().
+ +

Definition at line 813 of file Rtabmap.h.

+ +
+
+ +

◆ getPathCurrentGoalIndex()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int rtabmap::Rtabmap::getPathCurrentGoalIndex () const
+
+inline
+
+
Returns
Index of the current intermediate goal in getPath().
+ +

Definition at line 815 of file Rtabmap.h.

+ +
+
+ +

◆ getPathTransformToGoal()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Rtabmap::getPathTransformToGoal () const
+
+inline
+
+
Returns
Transform from the final waypoint pose to the requested goal pose.
+ +

Definition at line 817 of file Rtabmap.h.

+ +
+
+ +

◆ getForwardWMPoses()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::map< int, Transform > rtabmap::Rtabmap::getForwardWMPoses (int fromId,
int maxNearestNeighbors,
float radius,
int maxDiffID 
) const
+
+ +

Returns optimized poses of WM nodes located in front of fromId.

+

Candidates are first gathered around fromId, then STM nodes are excluded, the survivors are cropped to a forward-facing box of width radius (1 m behind, radius ahead, +/-radius laterally), and a KdTree radius search keeps the maxNearestNeighbors closest poses in that box.

+
Note
Mapping vs. localization mode differs only in how the initial candidate set is built:
    +
  • In mapping mode (incremental), candidates are produced by a graph-radius walk from fromId: nodes reachable within maxDiffID graph hops AND within radius meters in the optimized poses.
  • +
  • In localization mode, the graph-hop restriction is ignored: every optimized pose within radius meters of fromId is considered. The forward-box crop and KdTree radius search that follow are identical in both modes.
  • +
+
+
Parameters
+ + + + + +
fromIdReference node (must be in Memory and getLocalOptimizedPoses()).
maxNearestNeighborsCap on the number of nodes returned.
radiusMaximum metric distance from fromId (meters).
maxDiffIDMaximum graph depth from fromId in mapping mode (0 = unlimited). Ignored in localization mode.
+
+
+ +
+
+ +

◆ getPaths()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::map< int, std::map< int, Transform > > rtabmap::Rtabmap::getPaths (const std::map< int, Transform > & poses,
const Transform & target,
int maxGraphDepth = 0 
) const
+
+ +

Segments a set of optimized poses into paths connected by neighbor links.

+

Designed to be called on the result of a radius search around target (a set of poses already constrained to be metrically close to the goal). Within that radius, the method partitions the poses into one or more "paths" where each path is a connected component reachable from its starting node using only neighbor (sequential) links – loop-closure links, landmark links and intermediate nodes are not used to traverse between members. Paths are produced one at a time, each starting from the still-unclaimed pose nearest to target; a candidate is added to the current path only if it has at least one neighbor link to a node already in the path.

+

Used internally by proximity detection by space (see Parameters::kRGBDProximityBySpace()) in two independent stages, each iterating over the segmented paths:

    +
  • One-to-one (visual registration): runs registration between the current node and at most one node per neighbor-connected path, avoiding redundant attempts against nearby members of the same local trajectory.
  • +
  • One-to-many (scan matching, enabled when Parameters::kRGBDProximityPathMaxNeighbors() > 0): on each path, neighboring nodes are assembled around the nearest pose on the path (up to the configured count, walked forward and backward) and their laser scans are merged for an ICP registration against the current scan. The neighbor-link-only structure of each path is what makes this assembly geometrically consistent.
  • +
+
Parameters
+ + + + +
posesCandidate nodes with their optimized poses (typically pre-filtered to a radius around target).
targetReference pose used to order paths: each path's starting node is the still-unclaimed pose closest to target.
maxGraphDepthMaximum graph depth traversed from the starting node when gathering candidates for a path (0 = unlimited).
+
+
+
Returns
Map from the starting node id of each path to its (node id -> pose) chain.
+ +
+
+ +

◆ adjustLikelihood()

+ +
+
+ + + + + + + + +
void rtabmap::Rtabmap::adjustLikelihood (std::map< int, float > & likelihood) const
+
+ +

Applies the standard RTAB-Map likelihood adjustment.

+

Normalizes raw likelihoods using mean and standard deviation across non-null values. Real-place entries with value <= mean + stdDev are clamped to 1.0; only entries above that threshold are scaled. The virtual place (the first key in likelihood, representing the "new place" hypothesis) is then set so that its likelihood reflects how peaked the real distribution is.

+

The exact formulas are selected by Parameters::kRtabmapVirtualPlaceLikelihoodRatio() (default 0, Angeli PhD formulation):

+
    +
  • Ratio = 0 (mean / std-dev formulation):
      +
    • Real place above threshold: (value - (stdDev - epsilon)) / mean
    • +
    • Virtual place: mean / stdDev + 1 (when stdDev is non-trivial and a maximum exists; otherwise 2). The virtual place "wins" when the real-place distribution is flat (small stdDev relative to mean).
    • +
    +
  • +
  • Ratio != 0 (z-score formulation):
      +
    • Real place above threshold: (value - mean) / stdDev (i.e. the z-score).
    • +
    • Virtual place: stdDev / (max - mean) + 1 (when max > mean; otherwise 2). The virtual place "wins" when no real candidate stands out far above the mean.
    • +
    +
  • +
+

In both formulations a low virtual-place likelihood favors a real-place loop closure on the next Bayes update; a high one favors the "new place" hypothesis.

+
See also
Parameters::kRtabmapVirtualPlaceLikelihoodRatio()
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree-members.html new file mode 100644 index 00000000..105e3683 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree-members.html @@ -0,0 +1,107 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapColorOcTree Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapColorOcTree, including all inherited members.

+ + + + + + + + + + + + + + + + +
averageNodeColor(const octomap::OcTreeKey &key, uint8_t r, uint8_t g, uint8_t b) (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTree
averageNodeColor(float x, float y, float z, uint8_t r, uint8_t g, uint8_t b) (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTreeinline
create() constrtabmap::RtabmapColorOcTreeinline
getTreeType() const (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTreeinline
integrateNodeColor(const octomap::OcTreeKey &key, uint8_t r, uint8_t g, uint8_t b) (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTree
integrateNodeColor(float x, float y, float z, uint8_t r, uint8_t g, uint8_t b) (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTreeinline
isNodeCollapsible(const RtabmapColorOcTreeNode *node) const (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTreevirtual
pruneNode(RtabmapColorOcTreeNode *node)rtabmap::RtabmapColorOcTreevirtual
RtabmapColorOcTree(double resolution)rtabmap::RtabmapColorOcTree
RtabmapColorOcTreeMemberInitrtabmap::RtabmapColorOcTreeprotectedstatic
setNodeColor(const octomap::OcTreeKey &key, uint8_t r, uint8_t g, uint8_t b) (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTree
setNodeColor(float x, float y, float z, uint8_t r, uint8_t g, uint8_t b) (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTreeinline
updateInnerOccupancy() (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTree
updateInnerOccupancyRecurs(RtabmapColorOcTreeNode *node, unsigned int depth) (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTreeprotected
~RtabmapColorOcTree() (defined in rtabmap::RtabmapColorOcTree)rtabmap::RtabmapColorOcTreeinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree.html new file mode 100644 index 00000000..042ce232 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree.html @@ -0,0 +1,499 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapColorOcTree Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapColorOcTree Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapColorOcTree:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapColorOcTree:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + +

+Classes

class  StaticMemberInitializer
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ RtabmapColorOcTree (double resolution)
 Default constructor, sets resolution of leafs.
 
RtabmapColorOcTree * create () const
 
std::string getTreeType () const
 
virtual bool pruneNode (RtabmapColorOcTreeNode *node)
 
+virtual bool isNodeCollapsible (const RtabmapColorOcTreeNode *node) const
 
+RtabmapColorOcTreeNode * setNodeColor (const octomap::OcTreeKey &key, uint8_t r, uint8_t g, uint8_t b)
 
RtabmapColorOcTreeNode * setNodeColor (float x, float y, float z, uint8_t r, uint8_t g, uint8_t b)
 
+RtabmapColorOcTreeNode * averageNodeColor (const octomap::OcTreeKey &key, uint8_t r, uint8_t g, uint8_t b)
 
RtabmapColorOcTreeNode * averageNodeColor (float x, float y, float z, uint8_t r, uint8_t g, uint8_t b)
 
+RtabmapColorOcTreeNode * integrateNodeColor (const octomap::OcTreeKey &key, uint8_t r, uint8_t g, uint8_t b)
 
RtabmapColorOcTreeNode * integrateNodeColor (float x, float y, float z, uint8_t r, uint8_t g, uint8_t b)
 
+void updateInnerOccupancy ()
 
+ + + +

+Protected Member Functions

+void updateInnerOccupancyRecurs (RtabmapColorOcTreeNode *node, unsigned int depth)
 
+ + + + +

+Static Protected Attributes

static StaticMemberInitializer RtabmapColorOcTreeMemberInit
 static member to ensure static initialization (only once)
 
+

Detailed Description

+
+

Definition at line 87 of file OctoMap.h.

+

Constructor & Destructor Documentation

+ +

◆ ~RtabmapColorOcTree()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::RtabmapColorOcTree::~RtabmapColorOcTree ()
+
+inlinevirtual
+
+ +

Definition at line 92 of file OctoMap.h.

+ +
+
+

Member Function Documentation

+ +

◆ create()

+ +
+
+ + + + + +
+ + + + + + + +
RtabmapColorOcTree * rtabmap::RtabmapColorOcTree::create () const
+
+inline
+
+

virtual constructor: creates a new object of same type (Covariant return type requires an up-to-date compiler)

+ +

Definition at line 96 of file OctoMap.h.

+ +
+
+ +

◆ getTreeType()

+ +
+
+ + + + + +
+ + + + + + + +
std::string rtabmap::RtabmapColorOcTree::getTreeType () const
+
+inline
+
+ +

Definition at line 98 of file OctoMap.h.

+ +
+
+ +

◆ pruneNode()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool rtabmap::RtabmapColorOcTree::pruneNode (RtabmapColorOcTreeNode * node)
+
+virtual
+
+

Prunes a node when it is collapsible. This overloaded version only considers the node occupancy for pruning, different colors of child nodes are ignored.

Returns
true if pruning was successful
+ +
+
+ +

◆ setNodeColor()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RtabmapColorOcTreeNode * rtabmap::RtabmapColorOcTree::setNodeColor (float x,
float y,
float z,
uint8_t r,
uint8_t g,
uint8_t b 
)
+
+inline
+
+ +

Definition at line 114 of file OctoMap.h.

+ +
+
+ +

◆ averageNodeColor()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RtabmapColorOcTreeNode * rtabmap::RtabmapColorOcTree::averageNodeColor (float x,
float y,
float z,
uint8_t r,
uint8_t g,
uint8_t b 
)
+
+inline
+
+ +

Definition at line 126 of file OctoMap.h.

+ +
+
+ +

◆ integrateNodeColor()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RtabmapColorOcTreeNode * rtabmap::RtabmapColorOcTree::integrateNodeColor (float x,
float y,
float z,
uint8_t r,
uint8_t g,
uint8_t b 
)
+
+inline
+
+ +

Definition at line 138 of file OctoMap.h.

+ +
+
+

Member Data Documentation

+ +

◆ RtabmapColorOcTreeMemberInit

+ +
+
+ + + + + +
+ + + + +
StaticMemberInitializer rtabmap::RtabmapColorOcTree::RtabmapColorOcTreeMemberInit
+
+staticprotected
+
+ +

static member to ensure static initialization (only once)

+ +

Definition at line 171 of file OctoMap.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/global_map/OctoMap.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode-members.html new file mode 100644 index 00000000..841e26ec --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode-members.html @@ -0,0 +1,112 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapColorOcTreeNode Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapColorOcTreeNode, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
createChild(unsigned int i) (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
expandNode() (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
getChild(unsigned int i) (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
getChild(unsigned int i) const (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
getNodeRefId() const (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNodeinline
getOccupancyType() const (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNodeinline
getPointRef() const (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNodeinline
kTypeEmpty enum value (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
kTypeGround enum value (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
kTypeObstacle enum value (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
kTypeUnknown enum value (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
OccupancyType enum name (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
pruneNode() (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
RtabmapColorOcTree (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNodefriend
RtabmapColorOcTreeNode() (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNodeinline
RtabmapColorOcTreeNode(const RtabmapColorOcTreeNode &rhs) (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNodeinline
setNodeRefId(int nodeRefId) (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNodeinline
setOccupancyType(char type) (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNodeinline
setPointRef(const octomap::point3d &point) (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNodeinline
updateOccupancyTypeChildren() (defined in rtabmap::RtabmapColorOcTreeNode)rtabmap::RtabmapColorOcTreeNode
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode.html new file mode 100644 index 00000000..5948f76e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode.html @@ -0,0 +1,434 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapColorOcTreeNode Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapColorOcTreeNode Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapColorOcTreeNode:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapColorOcTreeNode:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + +

+Public Types

enum  OccupancyType { kTypeUnknown =-1 +, kTypeEmpty =0 +, kTypeGround =1 +, kTypeObstacle =100 + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RtabmapColorOcTreeNode (const RtabmapColorOcTreeNode &rhs)
 
void setNodeRefId (int nodeRefId)
 
void setOccupancyType (char type)
 
void setPointRef (const octomap::point3d &point)
 
int getNodeRefId () const
 
int getOccupancyType () const
 
const octomap::point3d & getPointRef () const
 
+RtabmapColorOcTreeNode * getChild (unsigned int i)
 
+const RtabmapColorOcTreeNode * getChild (unsigned int i) const
 
+bool pruneNode ()
 
+void expandNode ()
 
+bool createChild (unsigned int i)
 
+void updateOccupancyTypeChildren ()
 
+ + + +

+Friends

class RtabmapColorOcTree
 
+

Detailed Description

+
+

Definition at line 53 of file OctoMap.h.

+

Member Enumeration Documentation

+ +

◆ OccupancyType

+ +
+
+ + + + +
enum rtabmap::RtabmapColorOcTreeNode::OccupancyType
+
+ +

Definition at line 56 of file OctoMap.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ RtabmapColorOcTreeNode() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::RtabmapColorOcTreeNode::RtabmapColorOcTreeNode ()
+
+inline
+
+ +

Definition at line 61 of file OctoMap.h.

+ +
+
+ +

◆ RtabmapColorOcTreeNode() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::RtabmapColorOcTreeNode::RtabmapColorOcTreeNode (const RtabmapColorOcTreeNode & rhs)
+
+inline
+
+ +

Definition at line 62 of file OctoMap.h.

+ +
+
+

Member Function Documentation

+ +

◆ setNodeRefId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::RtabmapColorOcTreeNode::setNodeRefId (int nodeRefId)
+
+inline
+
+ +

Definition at line 64 of file OctoMap.h.

+ +
+
+ +

◆ setOccupancyType()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::RtabmapColorOcTreeNode::setOccupancyType (char type)
+
+inline
+
+ +

Definition at line 65 of file OctoMap.h.

+ +
+
+ +

◆ setPointRef()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::RtabmapColorOcTreeNode::setPointRef (const octomap::point3d & point)
+
+inline
+
+ +

Definition at line 66 of file OctoMap.h.

+ +
+
+ +

◆ getNodeRefId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::RtabmapColorOcTreeNode::getNodeRefId () const
+
+inline
+
+ +

Definition at line 67 of file OctoMap.h.

+ +
+
+ +

◆ getOccupancyType()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::RtabmapColorOcTreeNode::getOccupancyType () const
+
+inline
+
+ +

Definition at line 68 of file OctoMap.h.

+ +
+
+ +

◆ getPointRef()

+ +
+
+ + + + + +
+ + + + + + + +
const octomap::point3d & rtabmap::RtabmapColorOcTreeNode::getPointRef () const
+
+inline
+
+ +

Definition at line 69 of file OctoMap.h.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ RtabmapColorOcTree

+ +
+
+ + + + + +
+ + + + +
friend class RtabmapColorOcTree
+
+friend
+
+ +

Definition at line 59 of file OctoMap.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/global_map/OctoMap.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.map new file mode 100644 index 00000000..f5b1f0da --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.md5 new file mode 100644 index 00000000..31d9beb2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.md5 @@ -0,0 +1 @@ +71d4d37230a14e6a3e17c92118e6d144 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4727c2122bb5fff060cefd2fd89987c0c77e9231 GIT binary patch literal 6138 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__inherit__graph.md5 new file mode 100644 index 00000000..31d9beb2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__inherit__graph.md5 @@ -0,0 +1 @@ +71d4d37230a14e6a3e17c92118e6d144 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTreeNode__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4727c2122bb5fff060cefd2fd89987c0c77e9231 GIT binary patch literal 6138 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapColorOcTree::StaticMemberInitializer Member List
+
+ + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree_1_1StaticMemberInitializer.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree_1_1StaticMemberInitializer.html new file mode 100644 index 00000000..ef065a89 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree_1_1StaticMemberInitializer.html @@ -0,0 +1,136 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapColorOcTree::StaticMemberInitializer Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapColorOcTree::StaticMemberInitializer Class Reference
+
+
+ +

#include <OctoMap.h>

+ + + + +

+Public Member Functions

void ensureLinking ()
 
+

Detailed Description

+

Static member object which ensures that this OcTree's prototype ends up in the classIDMapping only once. You need this as a static member in any derived octree class in order to read .ot files through the AbstractOcTree factory. You should also call ensureLinking() once from the constructor.

+ +

Definition at line 159 of file OctoMap.h.

+

Member Function Documentation

+ +

◆ ensureLinking()

+ +
+
+ + + + + +
+ + + + + + + +
void rtabmap::RtabmapColorOcTree::StaticMemberInitializer::ensureLinking ()
+
+inline
+
+

Dummy function to ensure that MSVC does not drop the StaticMemberInitializer, causing this tree failing to register. Needs to be called from the constructor of this octree.

+ +

Definition at line 168 of file OctoMap.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/global_map/OctoMap.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.map new file mode 100644 index 00000000..78bdb253 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.md5 new file mode 100644 index 00000000..641e02dd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.md5 @@ -0,0 +1 @@ +6e82c06adfafcad8224f03f82ec56f76 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4a83dd1bd81b51a58218515fc118ac659684d0f9 GIT binary patch literal 18242 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__inherit__graph.md5 new file mode 100644 index 00000000..72d92c9c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__inherit__graph.md5 @@ -0,0 +1 @@ +2597b27f903bfd1b29c3041cd5eea5cd \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapColorOcTree__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7be2faa1815d3afca7cee7479b11a1463b937727 GIT binary patch literal 8280 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapEvent, including all inherited members.

+ + + + + + + + +
getClassName() constrtabmap::RtabmapEventinlinevirtual
getCode() constUEventinline
getStats() const (defined in rtabmap::RtabmapEvent)rtabmap::RtabmapEventinline
RtabmapEvent(const Statistics &stats) (defined in rtabmap::RtabmapEvent)rtabmap::RtabmapEventinline
UEvent(int code=0)UEventinlineprotected
~RtabmapEvent() (defined in rtabmap::RtabmapEvent)rtabmap::RtabmapEventinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent.html new file mode 100644 index 00000000..ce6ac3af --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent.html @@ -0,0 +1,251 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapEvent Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + +

+Public Member Functions

 RtabmapEvent (const Statistics &stats)
 
const Statistics & getStats () const
 
virtual std::string getClassName () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+
+

Definition at line 42 of file RtabmapEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ RtabmapEvent()

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::RtabmapEvent::RtabmapEvent (const Statistics & stats)
+
+inline
+
+ +

Definition at line 45 of file RtabmapEvent.h.

+ +
+
+ +

◆ ~RtabmapEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::RtabmapEvent::~RtabmapEvent ()
+
+inlinevirtual
+
+ +

Definition at line 49 of file RtabmapEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getStats()

+ +
+
+ + + + + +
+ + + + + + + +
const Statistics & rtabmap::RtabmapEvent::getStats () const
+
+inline
+
+ +

Definition at line 50 of file RtabmapEvent.h.

+ +
+
+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::RtabmapEvent::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 51 of file RtabmapEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap-members.html new file mode 100644 index 00000000..12d3faa6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap-members.html @@ -0,0 +1,102 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapEvent3DMap Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapEvent3DMap, including all inherited members.

+ + + + + + + + + + + +
getClassName() constrtabmap::RtabmapEvent3DMapinlinevirtual
getCode() constUEventinline
getConstraints() const (defined in rtabmap::RtabmapEvent3DMap)rtabmap::RtabmapEvent3DMapinline
getPoses() const (defined in rtabmap::RtabmapEvent3DMap)rtabmap::RtabmapEvent3DMapinline
getSignatures() const (defined in rtabmap::RtabmapEvent3DMap)rtabmap::RtabmapEvent3DMapinline
RtabmapEvent3DMap(int codeError=0) (defined in rtabmap::RtabmapEvent3DMap)rtabmap::RtabmapEvent3DMapinline
RtabmapEvent3DMap(const std::map< int, Signature > &signatures, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints) (defined in rtabmap::RtabmapEvent3DMap)rtabmap::RtabmapEvent3DMapinline
UEvent(int code=0)UEventinlineprotected
~RtabmapEvent3DMap() (defined in rtabmap::RtabmapEvent3DMap)rtabmap::RtabmapEvent3DMapinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap.html new file mode 100644 index 00000000..cf0b7fc9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap.html @@ -0,0 +1,355 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapEvent3DMap Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapEvent3DMap Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapEvent3DMap:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapEvent3DMap:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 RtabmapEvent3DMap (int codeError=0)
 
 RtabmapEvent3DMap (const std::map< int, Signature > &signatures, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints)
 
const std::map< int, Signature > & getSignatures () const
 
const std::map< int, Transform > & getPoses () const
 
const std::multimap< int, Link > & getConstraints () const
 
virtual std::string getClassName () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+
+

Definition at line 172 of file RtabmapEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ RtabmapEvent3DMap() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::RtabmapEvent3DMap::RtabmapEvent3DMap (int codeError = 0)
+
+inline
+
+ +

Definition at line 175 of file RtabmapEvent.h.

+ +
+
+ +

◆ RtabmapEvent3DMap() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapEvent3DMap::RtabmapEvent3DMap (const std::map< int, Signature > & signatures,
const std::map< int, Transform > & poses,
const std::multimap< int, Link > & constraints 
)
+
+inline
+
+ +

Definition at line 177 of file RtabmapEvent.h.

+ +
+
+ +

◆ ~RtabmapEvent3DMap()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::RtabmapEvent3DMap::~RtabmapEvent3DMap ()
+
+inlinevirtual
+
+ +

Definition at line 187 of file RtabmapEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getSignatures()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Signature > & rtabmap::RtabmapEvent3DMap::getSignatures () const
+
+inline
+
+ +

Definition at line 189 of file RtabmapEvent.h.

+ +
+
+ +

◆ getPoses()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Transform > & rtabmap::RtabmapEvent3DMap::getPoses () const
+
+inline
+
+ +

Definition at line 190 of file RtabmapEvent.h.

+ +
+
+ +

◆ getConstraints()

+ +
+
+ + + + + +
+ + + + + + + +
const std::multimap< int, Link > & rtabmap::RtabmapEvent3DMap::getConstraints () const
+
+inline
+
+ +

Definition at line 191 of file RtabmapEvent.h.

+ +
+
+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::RtabmapEvent3DMap::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 193 of file RtabmapEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.map new file mode 100644 index 00000000..b8b951d5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.md5 new file mode 100644 index 00000000..e00a7f6b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.md5 @@ -0,0 +1 @@ +d3e3fa26003e31cdd40622b0d90d4052 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d15e86a598e67807c55d099c3f119c3fd14d86dd GIT binary patch literal 4353 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 U33}lTzG*UNR;0s#vw(*OVf literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.map new file mode 100644 index 00000000..b8b951d5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.md5 new file mode 100644 index 00000000..e00a7f6b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.md5 @@ -0,0 +1 @@ +d3e3fa26003e31cdd40622b0d90d4052 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent3DMap__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d15e86a598e67807c55d099c3f119c3fd14d86dd GIT binary patch literal 4353 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 U33}lTzG*UNR;0s#vw(*OVf literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd-members.html new file mode 100644 index 00000000..fbc9b35f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd-members.html @@ -0,0 +1,130 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapEventCmd Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapEventCmd, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cmd enum name (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
d enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
dummy enum name (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
getClassName() constrtabmap::RtabmapEventCmdinlinevirtual
getCmd() const (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
getCode() constUEventinline
getParameters() const (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
kCmdCancelGoal enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdCleanDataBuffer enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdClose enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdDumpMemory enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdDumpPrediction enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdExportPoses enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdGenerateDOTGraph enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdGoal enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdInit enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdLabel enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdPause enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdPublish3DMap enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdRemoveLabel enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdRepublishData enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdResetMemory enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdResume enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdTriggerNewMap enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdUndef enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
kCmdUpdateParams enum value (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmd
RtabmapEventCmd(Cmd cmd, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
RtabmapEventCmd(Cmd cmd, const UVariant &value1, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
RtabmapEventCmd(Cmd cmd, const UVariant &value1, const UVariant &value2, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
RtabmapEventCmd(Cmd cmd, const UVariant &value1, const UVariant &value2, const UVariant &value3, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
RtabmapEventCmd(Cmd cmd, const UVariant &value1, const UVariant &value2, const UVariant &value3, const UVariant &value4, const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
UEvent(int code=0)UEventinlineprotected
value1() const (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
value2() const (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
value3() const (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
value4() const (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinline
~RtabmapEventCmd() (defined in rtabmap::RtabmapEventCmd)rtabmap::RtabmapEventCmdinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd.html new file mode 100644 index 00000000..70547c2b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd.html @@ -0,0 +1,693 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapEventCmd Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapEventCmd Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapEventCmd:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapEventCmd:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + +

+Public Types

enum  dummy { d + }
 
enum  Cmd {
+  kCmdUndef +, kCmdInit +, kCmdResetMemory +, kCmdClose +,
+  kCmdUpdateParams +, kCmdDumpMemory +, kCmdDumpPrediction +, kCmdGenerateDOTGraph +,
+  kCmdExportPoses +, kCmdCleanDataBuffer +, kCmdPublish3DMap +, kCmdRepublishData +,
+  kCmdTriggerNewMap +, kCmdPause +, kCmdResume +, kCmdGoal +,
+  kCmdCancelGoal +, kCmdLabel +, kCmdRemoveLabel +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RtabmapEventCmd (Cmd cmd, const ParametersMap &parameters=ParametersMap())
 
 RtabmapEventCmd (Cmd cmd, const UVariant &value1, const ParametersMap &parameters=ParametersMap())
 
 RtabmapEventCmd (Cmd cmd, const UVariant &value1, const UVariant &value2, const ParametersMap &parameters=ParametersMap())
 
 RtabmapEventCmd (Cmd cmd, const UVariant &value1, const UVariant &value2, const UVariant &value3, const ParametersMap &parameters=ParametersMap())
 
 RtabmapEventCmd (Cmd cmd, const UVariant &value1, const UVariant &value2, const UVariant &value3, const UVariant &value4, const ParametersMap &parameters=ParametersMap())
 
Cmd getCmd () const
 
const UVariant & value1 () const
 
const UVariant & value2 () const
 
const UVariant & value3 () const
 
const UVariant & value4 () const
 
const ParametersMap & getParameters () const
 
virtual std::string getClassName () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+
+

Definition at line 57 of file RtabmapEvent.h.

+

Member Enumeration Documentation

+ +

◆ dummy

+ +
+
+ + + + +
enum rtabmap::RtabmapEventCmd::dummy
+
+ +

Definition at line 60 of file RtabmapEvent.h.

+ +
+
+ +

◆ Cmd

+ +
+
+ + + + +
enum rtabmap::RtabmapEventCmd::Cmd
+
+ +

Definition at line 61 of file RtabmapEvent.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ RtabmapEventCmd() [1/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapEventCmd::RtabmapEventCmd (Cmd cmd,
const ParametersMap & parameters = ParametersMap() 
)
+
+inline
+
+ +

Definition at line 83 of file RtabmapEvent.h.

+ +
+
+ +

◆ RtabmapEventCmd() [2/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapEventCmd::RtabmapEventCmd (Cmd cmd,
const UVariant & value1,
const ParametersMap & parameters = ParametersMap() 
)
+
+inline
+
+ +

Definition at line 87 of file RtabmapEvent.h.

+ +
+
+ +

◆ RtabmapEventCmd() [3/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapEventCmd::RtabmapEventCmd (Cmd cmd,
const UVariant & value1,
const UVariant & value2,
const ParametersMap & parameters = ParametersMap() 
)
+
+inline
+
+ +

Definition at line 92 of file RtabmapEvent.h.

+ +
+
+ +

◆ RtabmapEventCmd() [4/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapEventCmd::RtabmapEventCmd (Cmd cmd,
const UVariant & value1,
const UVariant & value2,
const UVariant & value3,
const ParametersMap & parameters = ParametersMap() 
)
+
+inline
+
+ +

Definition at line 98 of file RtabmapEvent.h.

+ +
+
+ +

◆ RtabmapEventCmd() [5/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapEventCmd::RtabmapEventCmd (Cmd cmd,
const UVariant & value1,
const UVariant & value2,
const UVariant & value3,
const UVariant & value4,
const ParametersMap & parameters = ParametersMap() 
)
+
+inline
+
+ +

Definition at line 105 of file RtabmapEvent.h.

+ +
+
+ +

◆ ~RtabmapEventCmd()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::RtabmapEventCmd::~RtabmapEventCmd ()
+
+inlinevirtual
+
+ +

Definition at line 114 of file RtabmapEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getCmd()

+ +
+
+ + + + + +
+ + + + + + + +
Cmd rtabmap::RtabmapEventCmd::getCmd () const
+
+inline
+
+ +

Definition at line 115 of file RtabmapEvent.h.

+ +
+
+ +

◆ value1()

+ +
+
+ + + + + +
+ + + + + + + +
const UVariant & rtabmap::RtabmapEventCmd::value1 () const
+
+inline
+
+ +

Definition at line 117 of file RtabmapEvent.h.

+ +
+
+ +

◆ value2()

+ +
+
+ + + + + +
+ + + + + + + +
const UVariant & rtabmap::RtabmapEventCmd::value2 () const
+
+inline
+
+ +

Definition at line 118 of file RtabmapEvent.h.

+ +
+
+ +

◆ value3()

+ +
+
+ + + + + +
+ + + + + + + +
const UVariant & rtabmap::RtabmapEventCmd::value3 () const
+
+inline
+
+ +

Definition at line 119 of file RtabmapEvent.h.

+ +
+
+ +

◆ value4()

+ +
+
+ + + + + +
+ + + + + + + +
const UVariant & rtabmap::RtabmapEventCmd::value4 () const
+
+inline
+
+ +

Definition at line 120 of file RtabmapEvent.h.

+ +
+
+ +

◆ getParameters()

+ +
+
+ + + + + +
+ + + + + + + +
const ParametersMap & rtabmap::RtabmapEventCmd::getParameters () const
+
+inline
+
+ +

Definition at line 122 of file RtabmapEvent.h.

+ +
+
+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::RtabmapEventCmd::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 124 of file RtabmapEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.map new file mode 100644 index 00000000..df8561dd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.md5 new file mode 100644 index 00000000..74bf282e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.md5 @@ -0,0 +1 @@ +28f3d36d491e86d398394c7de7864713 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b86690893c6db2b0ac28a7bb546c0622c1b27059 GIT binary patch literal 4128 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.map new file mode 100644 index 00000000..df8561dd --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.md5 new file mode 100644 index 00000000..74bf282e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.md5 @@ -0,0 +1 @@ +28f3d36d491e86d398394c7de7864713 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventCmd__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b86690893c6db2b0ac28a7bb546c0622c1b27059 GIT binary patch literal 4128 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit-members.html new file mode 100644 index 00000000..ca877333 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit-members.html @@ -0,0 +1,110 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapEventInit Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapEventInit, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
d enum value (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInit
dummy enum name (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInit
getClassName() constrtabmap::RtabmapEventInitinlinevirtual
getCode() constUEventinline
getInfo() const (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInitinline
getStatus() const (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInitinline
kClosed enum value (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInit
kClosing enum value (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInit
kError enum value (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInit
kInfo enum value (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInit
kInitialized enum value (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInit
kInitializing enum value (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInit
RtabmapEventInit(Status status, const std::string &info=std::string()) (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInitinline
RtabmapEventInit(const std::string &info) (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInitinline
Status enum name (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInit
UEvent(int code=0)UEventinlineprotected
~RtabmapEventInit() (defined in rtabmap::RtabmapEventInit)rtabmap::RtabmapEventInitinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit.html new file mode 100644 index 00000000..ffc5babe --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit.html @@ -0,0 +1,371 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapEventInit Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapEventInit Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapEventInit:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapEventInit:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + +

+Public Types

enum  dummy { d + }
 
enum  Status {
+  kInitializing +, kInitialized +, kClosing +, kClosed +,
+  kInfo +, kError +
+ }
 
+ + + + + + + + + + + + + + +

+Public Member Functions

 RtabmapEventInit (Status status, const std::string &info=std::string())
 
 RtabmapEventInit (const std::string &info)
 
Status getStatus () const
 
const std::string & getInfo () const
 
virtual std::string getClassName () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+
+

Definition at line 135 of file RtabmapEvent.h.

+

Member Enumeration Documentation

+ +

◆ dummy

+ +
+
+ + + + +
enum rtabmap::RtabmapEventInit::dummy
+
+ +

Definition at line 138 of file RtabmapEvent.h.

+ +
+
+ +

◆ Status

+ +
+
+ + + + +
enum rtabmap::RtabmapEventInit::Status
+
+ +

Definition at line 139 of file RtabmapEvent.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ RtabmapEventInit() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapEventInit::RtabmapEventInit (Status status,
const std::string & info = std::string() 
)
+
+inline
+
+ +

Definition at line 149 of file RtabmapEvent.h.

+ +
+
+ +

◆ RtabmapEventInit() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::RtabmapEventInit::RtabmapEventInit (const std::string & info)
+
+inline
+
+ +

Definition at line 156 of file RtabmapEvent.h.

+ +
+
+ +

◆ ~RtabmapEventInit()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::RtabmapEventInit::~RtabmapEventInit ()
+
+inlinevirtual
+
+ +

Definition at line 165 of file RtabmapEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getStatus()

+ +
+
+ + + + + +
+ + + + + + + +
Status rtabmap::RtabmapEventInit::getStatus () const
+
+inline
+
+ +

Definition at line 162 of file RtabmapEvent.h.

+ +
+
+ +

◆ getInfo()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::RtabmapEventInit::getInfo () const
+
+inline
+
+ +

Definition at line 163 of file RtabmapEvent.h.

+ +
+
+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::RtabmapEventInit::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 166 of file RtabmapEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.map new file mode 100644 index 00000000..eca85389 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.md5 new file mode 100644 index 00000000..f4649cb5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.md5 @@ -0,0 +1 @@ +9842f404a1959dd038b2f25d066c34c8 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8c84aec5c7c7ba7416501fc3d9ee2a7c1494d733 GIT binary patch literal 3863 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__inherit__graph.md5 new file mode 100644 index 00000000..f4649cb5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__inherit__graph.md5 @@ -0,0 +1 @@ +9842f404a1959dd038b2f25d066c34c8 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEventInit__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8c84aec5c7c7ba7416501fc3d9ee2a7c1494d733 GIT binary patch literal 3863 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__coll__graph.md5 new file mode 100644 index 00000000..dff5b920 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__coll__graph.md5 @@ -0,0 +1 @@ +f75098e2245b7633fb08db955d9c901d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8ada95ecb7c1ee334a517350d3905844d773ca58 GIT binary patch literal 3614 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.map new file mode 100644 index 00000000..9dbd06ee --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.md5 new file mode 100644 index 00000000..dff5b920 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.md5 @@ -0,0 +1 @@ +f75098e2245b7633fb08db955d9c901d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8ada95ecb7c1ee334a517350d3905844d773ca58 GIT binary patch literal 3614 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent-members.html new file mode 100644 index 00000000..5c222135 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent-members.html @@ -0,0 +1,104 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapGlobalPathEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapGlobalPathEvent, including all inherited members.

+ + + + + + + + + + + + + +
getClassName() constrtabmap::RtabmapGlobalPathEventinlinevirtual
getCode() constUEventinline
getGoal() const (defined in rtabmap::RtabmapGlobalPathEvent)rtabmap::RtabmapGlobalPathEventinline
getGoalLabel() const (defined in rtabmap::RtabmapGlobalPathEvent)rtabmap::RtabmapGlobalPathEventinline
getPlanningTime() const (defined in rtabmap::RtabmapGlobalPathEvent)rtabmap::RtabmapGlobalPathEventinline
getPoses() const (defined in rtabmap::RtabmapGlobalPathEvent)rtabmap::RtabmapGlobalPathEventinline
RtabmapGlobalPathEvent() (defined in rtabmap::RtabmapGlobalPathEvent)rtabmap::RtabmapGlobalPathEventinline
RtabmapGlobalPathEvent(int goalId, const std::vector< std::pair< int, Transform > > &poses, double planningTime) (defined in rtabmap::RtabmapGlobalPathEvent)rtabmap::RtabmapGlobalPathEventinline
RtabmapGlobalPathEvent(int goalId, const std::string &goalLabel, const std::vector< std::pair< int, Transform > > &poses, double planningTime) (defined in rtabmap::RtabmapGlobalPathEvent)rtabmap::RtabmapGlobalPathEventinline
UEvent(int code=0)UEventinlineprotected
~RtabmapGlobalPathEvent() (defined in rtabmap::RtabmapGlobalPathEvent)rtabmap::RtabmapGlobalPathEventinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent.html new file mode 100644 index 00000000..8c9208ea --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent.html @@ -0,0 +1,433 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapGlobalPathEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapGlobalPathEvent Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapGlobalPathEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapGlobalPathEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RtabmapGlobalPathEvent (int goalId, const std::vector< std::pair< int, Transform > > &poses, double planningTime)
 
 RtabmapGlobalPathEvent (int goalId, const std::string &goalLabel, const std::vector< std::pair< int, Transform > > &poses, double planningTime)
 
int getGoal () const
 
const std::string & getGoalLabel () const
 
double getPlanningTime () const
 
const std::vector< std::pair< int, Transform > > & getPoses () const
 
virtual std::string getClassName () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+
+

Definition at line 201 of file RtabmapEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ RtabmapGlobalPathEvent() [1/3]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::RtabmapGlobalPathEvent::RtabmapGlobalPathEvent ()
+
+inline
+
+ +

Definition at line 204 of file RtabmapEvent.h.

+ +
+
+ +

◆ RtabmapGlobalPathEvent() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapGlobalPathEvent::RtabmapGlobalPathEvent (int goalId,
const std::vector< std::pair< int, Transform > > & poses,
double planningTime 
)
+
+inline
+
+ +

Definition at line 207 of file RtabmapEvent.h.

+ +
+
+ +

◆ RtabmapGlobalPathEvent() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapGlobalPathEvent::RtabmapGlobalPathEvent (int goalId,
const std::string & goalLabel,
const std::vector< std::pair< int, Transform > > & poses,
double planningTime 
)
+
+inline
+
+ +

Definition at line 214 of file RtabmapEvent.h.

+ +
+
+ +

◆ ~RtabmapGlobalPathEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::RtabmapGlobalPathEvent::~RtabmapGlobalPathEvent ()
+
+inlinevirtual
+
+ +

Definition at line 224 of file RtabmapEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getGoal()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::RtabmapGlobalPathEvent::getGoal () const
+
+inline
+
+ +

Definition at line 225 of file RtabmapEvent.h.

+ +
+
+ +

◆ getGoalLabel()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::RtabmapGlobalPathEvent::getGoalLabel () const
+
+inline
+
+ +

Definition at line 226 of file RtabmapEvent.h.

+ +
+
+ +

◆ getPlanningTime()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::RtabmapGlobalPathEvent::getPlanningTime () const
+
+inline
+
+ +

Definition at line 227 of file RtabmapEvent.h.

+ +
+
+ +

◆ getPoses()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< std::pair< int, Transform > > & rtabmap::RtabmapGlobalPathEvent::getPoses () const
+
+inline
+
+ +

Definition at line 228 of file RtabmapEvent.h.

+ +
+
+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::RtabmapGlobalPathEvent::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 229 of file RtabmapEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.map new file mode 100644 index 00000000..72c7cf9f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.md5 new file mode 100644 index 00000000..0f8a7ec5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.md5 @@ -0,0 +1 @@ +2e2de4c6fda1893459272ad27b69a405 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d088d1e6a5d1d5b1ff368851b028a34fb4ffbb41 GIT binary patch literal 4687 zcmchbc|25a`^U#qSqdQ~Te7DVvNo2!&5-OOTXxD)LNWFkD*KXT$v$?GeHTW^*kWXx zEMtj`U6wH!gWv7>>v>+k-`~I2yk^dMopbK{+;gt$`h4EkiO|b*xk>Fb0*{YS)>t}U{e*`@vd zZMd4Ma3sHG3I9FTXmfkjW*fWmN|CyxX0H{KdIcaOPN$B%mnP2MfN8M>nR`S~?l*Y8$feG^2q#Wx|y*2H>$u!Is>&n&+ zxowYSMD6!k`z0Q3c()2lNwMk->ubiPrS(}KZF5)!Y^f#PG{?rGb_MHROw#_Nu1*J* zUt-ymB#I9BU}EJPf;`yUszx6&2Jum6=^)fUVR!RBeG2c4;yAzgud{RICe}#ACK#H~ z+S}K6G3%B!X3YpiS}{8FNdog1CQ)rF{%rAk%Coul5K3!%J1jrJpufNWy12M@hLW#= zSpG<oy@_j6jqxQV;wscXa05fbp6+hQ>`=Z|gT<}w?d@G$9SEkG*|O|L z!0r!qQmehaz4NnYT+yBEr$9>4&UeK+eovMf85#NWcRqIYw^tKye2=P~T@HRXQ_9xO z3bp?36WW#Q{kjJLr%`CPrlogT=D& z@O;lvi}E28yh&HVDo{IVGd9)Z^b8DJ{#JT-4`p7yeCaaXoYH!HxEVlHocS@+*VotK zTJHhU<1lytBzB|MI@i5>hi-0gIGll*c@fg;oA!*R$u&X=rKL z52WAuo+{h7`Tluo0eaA^!96>jmsjMK0#v&|JEcA1g6OBRGOTO8^vhqWA3l5tC{PUe zTY>w@dKC(NeC$7ujS)Ak2yz}S*w;1z^IKV6!IxWi{eBgfloUGdLVHz7DLq#`mW_|E zTo0X+(lg!SPr@sDZ{(GfFot#fcz*D0HlBsKIxjEp0M&>_QI=6eR$g8LF`4!1wQJ#= z(hj?ir*}MzKPQ5amRF68JOVL2coBA)=as_s;5MOP*kx_lwg1|o(d{9m(&)i1&oUDr z^{1t>dJye2(7>bStyab26n6>#wBuVSzS5)A$``DsMEH3i@jbgY>L*+3kHx~04l3Vx zipQlrqSW7&MN&ei>@Q_4)a^s+%2bhADL$M|uC5}e&FiIvCAkPXQTujCZKbN2wulu( zpNlo_;Q|*yL`o7=)^#T2<_m|r1Ypyuf8Q~EJn_QzJQtn{dJoXs` z9H+HwFVk85{8+t{Yv`Jk4LH8@Dk2j9wV>@XT3(iZV_}BLDd{hlP%sVl$*)Nyrf878 zgcrLQe(x$jqoihK62`S^P*N=Um`_*}#Ul~~Zr1%={ZUoHmJr#@jmy)$wI%=ZOE5aG zI-X;B(-Y8}{Qn;LPHeS8kw#5SoKyF#@5|g*QjlFWcQSIE^{V}$!-~?^T%W`s56%(#-cV9~ zRz`~8GXh&ALJP!L+Vm+h#*;)M)zsAdO(1i^K9554nAq%UoLyYjYAvw;nRG6yA?`bi z{pl*mi6w_<`qxt&=5;P}-y$xc^o|i9N%vO$_2DhIC`wX02%|@jST0BY& zM3G!nbJyCuK)29cr8!1U(a|4ez{w$`d~dk1EM zW20HYgViJ;Q`rRtv>*G_%+0x(!`@a^-G;$n4|H{bAb5~BEM;^$p4GB(b5E{Pf%4VX z)_%ic*)CmLG>q-EYnyXt;pHuL3t3%Rac{KHPL_O~l@)l?I1u55c638be?de6k6*>> z_+x0nN^C}pjVRPOHHY<2NfyAq%dxXjXz_|egqK;^9_ zH|NIv{}s(G&m7<5Ei{6!qD-0)5Z0oFdT58Pcf3kRf9E|tJ$LVvW5yEI{rwfe;=8*a zpYw3yU5v+`RUWOqkUW;8z-j*0wMd^ zxbzp_@n1T5x9PmnQl_ZR_SN#%GCtI<39-zwDLg6)Fi0~Vic7!K0rb^pr(fP5Nf-uM zBbA~(g+X!$c@PJb*^xhf{Alaq3)DuTFeVThHa0fX8mEWonb>j+C31bT{sKFDu)*0N zz(CT@Lqe@dqiD<*bYZ4nWQL-*fsv7#k&zL4XXUvijYYFh+$lO{7FO2R1lPi>te~kW zi`JD*To&)U>1N+};9ba&R??WcN)zeg4dbOiZ%@xZ8%>+9)_zKrhZGeRWdkG_9Ms29 zx3#8yiM&HYLl3mIPk*VqpC<2yb&>N}=w>~!+p#iBEiW%Q*ZMU1nSl7=LcMDDx%PWS z!_R8{)=7St(6XqCr%#{O)Yp5gjED&c3i_^9c0syvI3n<8ni&rA1|he!G^VCT205{~ z=)l7qb_A7`P0WNUDvI5@<*+f;sB}!-fdEGg`}NBXwH0N(6t+e-Hx8UY-o1JAW&^<$ z28VAdo&?;{4A?R#t;OEN8`L9mtK-(M&S*|)Y`NSNE-OUx#*M!6woL$Z&Q4BWfmJ0Z zcY}x6GL0J;5Rs8#KXEgur@icDRxQPWTfkVOPK-=g_zYkHW8+H@k@$$7cu_-Z>$^?} z2M31_DJeyIlRL7WFO~tm!L_u`0qFqv_G8t3#dhf&&UXA~r9H`c-AhqeSXd!LxA^nt z{SLmP+3ILeFETPRK4%=3hw^!p{Srb$X@AYnA3h#CnjpkGcKn=}=#3Lp508y?r0g!A zO6Bk*A>7?1A>hdt=H|XFC=h97jyaHa;@>4|)jQ&@=w?9GfC5~K3IUG~jq^2DCF3)t zErX_6A*ltna%nACj?{uVuO_IdI;|DhQul zUKp#WsCaOgem8V&Z7EsGes?}_>9H@U$NBa8nK8YqJPPhXfMWfS8`v0b01l8Ps0F|a z2atxRo^{xaEaM_lHePvn>;oD4yAZFp3rB}#OOzPjh*jFAM+a;(#Hvs}p)QZ3U(RE* z6LNBL-iR3%KrCrM-3SQ@?V6Xju5T0_gl^rVWD&n`F~cvl2M3?NWzi5c`b=0{obmIh zroKK4Aa_w=;gH^5&3C+t*oK$$%_`n|Yi4$Kc0kw`7kc7P)6oG8O{b~lmyy|hj^ED` zbU|n6WNeg+QDZ5)gQk zp3V~)6=jAAxRa5Qaq`F2qAvOJPV5=EnVY9suU{!qS!yi%g68GDu9Dju9UYyLTF^3k z=Mq_6P3?@Bm>6YC*;Dx}sNv3ht&a`9J0hH%oZ4uWj2k9p?&}k>?d|Q|0|N!1=h)r# zM5<_gyp<0?5S(P;;83@<&Bj#ujm_W5Q1afeXqldvcq||wkPJm!Z)S23$d=Lz zU(0<-7ADKf%PPpygkOCUtqVnkncD{Nl37vJr1tz{^EoFF7Rn-UJoVG<;yE-tZisa;EE4P3>r8^aVq-QPPmp!XqOv+)% zEt|{r?<^bKUxQ)*=G|N4JnXZW;<%d@>AgPD2^6cSxcDSlflGjXEOhkQ@7cDu3Ovlr zywGm|#+x%Qvvg=-g9S$t#0;<9yqRBAq#(oH*}3}G!<&N$a}!TbnVG*>`D@p%T@@8|^x@E7dZOo4 z0W9UAkdVv(f!?9uzT@-bm zZ+LJJGz~nEbC<*i(KZh>HGh%t*2IAf#S=e&|DFXK%Qv%{Y0AjQklkirU=V-}&MXvM z#G!H7@UZT_zTAR>P*7+X(A}JxbyrwgTYIuO-J-HnQd&9+S3psHTBbY#3x}75l#~J< zB&jPYfN3aP7hrh)`AlX12Gk*xL&8c(S=q8RS;cG3R7S@hXeC8DSr>34n#U@a#7da0tKPaR0_opP!)bP z_8Lhh($ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.map new file mode 100644 index 00000000..72c7cf9f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.md5 new file mode 100644 index 00000000..0f8a7ec5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.md5 @@ -0,0 +1 @@ +2e2de4c6fda1893459272ad27b69a405 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGlobalPathEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d088d1e6a5d1d5b1ff368851b028a34fb4ffbb41 GIT binary patch literal 4687 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent-members.html new file mode 100644 index 00000000..19244d9e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent-members.html @@ -0,0 +1,98 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapGoalStatusEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapGoalStatusEvent, including all inherited members.

+ + + + + + + +
getClassName() constrtabmap::RtabmapGoalStatusEventinlinevirtual
getCode() constUEventinline
RtabmapGoalStatusEvent(int status) (defined in rtabmap::RtabmapGoalStatusEvent)rtabmap::RtabmapGoalStatusEventinline
UEvent(int code=0)UEventinlineprotected
~RtabmapGoalStatusEvent() (defined in rtabmap::RtabmapGoalStatusEvent)rtabmap::RtabmapGoalStatusEventinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent.html new file mode 100644 index 00000000..ce9075e0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent.html @@ -0,0 +1,222 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapGoalStatusEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapGoalStatusEvent Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapGoalStatusEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapGoalStatusEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + +

+Public Member Functions

 RtabmapGoalStatusEvent (int status)
 
virtual std::string getClassName () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+
+

Definition at line 253 of file RtabmapEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ RtabmapGoalStatusEvent()

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::RtabmapGoalStatusEvent::RtabmapGoalStatusEvent (int status)
+
+inline
+
+ +

Definition at line 256 of file RtabmapEvent.h.

+ +
+
+ +

◆ ~RtabmapGoalStatusEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::RtabmapGoalStatusEvent::~RtabmapGoalStatusEvent ()
+
+inlinevirtual
+
+ +

Definition at line 259 of file RtabmapEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::RtabmapGoalStatusEvent::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 260 of file RtabmapEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.map new file mode 100644 index 00000000..44bb2a6b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.md5 new file mode 100644 index 00000000..3d2c37ae --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.md5 @@ -0,0 +1 @@ +4d6e6759f0c9a32c8971cceef23085a1 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..be0e145f94993e9e5dfdd1f086ab76f158ae3dc8 GIT binary patch literal 4920 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.map new file mode 100644 index 00000000..44bb2a6b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.md5 new file mode 100644 index 00000000..3d2c37ae --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.md5 @@ -0,0 +1 @@ +4d6e6759f0c9a32c8971cceef23085a1 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapGoalStatusEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..be0e145f94993e9e5dfdd1f086ab76f158ae3dc8 GIT binary patch literal 4920 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent-members.html new file mode 100644 index 00000000..7d876ae9 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent-members.html @@ -0,0 +1,100 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapLabelErrorEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapLabelErrorEvent, including all inherited members.

+ + + + + + + + + +
getClassName() constrtabmap::RtabmapLabelErrorEventinlinevirtual
getCode() constUEventinline
id() const (defined in rtabmap::RtabmapLabelErrorEvent)rtabmap::RtabmapLabelErrorEventinline
label() const (defined in rtabmap::RtabmapLabelErrorEvent)rtabmap::RtabmapLabelErrorEventinline
RtabmapLabelErrorEvent(int id, const std::string &label) (defined in rtabmap::RtabmapLabelErrorEvent)rtabmap::RtabmapLabelErrorEventinline
UEvent(int code=0)UEventinlineprotected
~RtabmapLabelErrorEvent() (defined in rtabmap::RtabmapLabelErrorEvent)rtabmap::RtabmapLabelErrorEventinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent.html new file mode 100644 index 00000000..1e1dfa5f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent.html @@ -0,0 +1,290 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapLabelErrorEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapLabelErrorEvent Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapLabelErrorEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapLabelErrorEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + +

+Public Member Functions

 RtabmapLabelErrorEvent (int id, const std::string &label)
 
int id () const
 
const std::string & label () const
 
virtual std::string getClassName () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+
+

Definition at line 237 of file RtabmapEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ RtabmapLabelErrorEvent()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::RtabmapLabelErrorEvent::RtabmapLabelErrorEvent (int id,
const std::string & label 
)
+
+inline
+
+ +

Definition at line 240 of file RtabmapEvent.h.

+ +
+
+ +

◆ ~RtabmapLabelErrorEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::RtabmapLabelErrorEvent::~RtabmapLabelErrorEvent ()
+
+inlinevirtual
+
+ +

Definition at line 244 of file RtabmapEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ id()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::RtabmapLabelErrorEvent::id () const
+
+inline
+
+ +

Definition at line 245 of file RtabmapEvent.h.

+ +
+
+ +

◆ label()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::RtabmapLabelErrorEvent::label () const
+
+inline
+
+ +

Definition at line 246 of file RtabmapEvent.h.

+ +
+
+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::RtabmapLabelErrorEvent::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 247 of file RtabmapEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.map new file mode 100644 index 00000000..02bc9b12 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.md5 new file mode 100644 index 00000000..325604df --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.md5 @@ -0,0 +1 @@ +305f7cec803123ec4bae24b768a45270 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5c7ee980bc62efb2466b8ab18f9f4e0389b9c9e6 GIT binary patch literal 4519 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 HIz|5nvk8_c literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.map new file mode 100644 index 00000000..02bc9b12 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.md5 new file mode 100644 index 00000000..325604df --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.md5 @@ -0,0 +1 @@ +305f7cec803123ec4bae24b768a45270 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapLabelErrorEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..5c7ee980bc62efb2466b8ab18f9f4e0389b9c9e6 GIT binary patch literal 4519 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 HIz|5nvk8_c literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread-members.html new file mode 100644 index 00000000..59365e7a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread-members.html @@ -0,0 +1,152 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RtabmapThread Member List
+
+
+ +

This is the complete list of members for rtabmap::RtabmapThread, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
clearBufferedData() (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThread
close(bool databaseSaved, const std::string &databasePath="")rtabmap::RtabmapThread
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
createIntermediateNodes(bool enabled) (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThread
currentThreadId() (defined in UThread)UThreadinlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
getCreateIntermediateNodes() const (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThreadinline
getDataBufferSize() const (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThreadinline
getDetectorRate() const (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThreadinline
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
handleEvent(UEvent *anEvent)rtabmap::RtabmapThreadprotectedvirtual
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
isCreating() constUThread
isIdle() constUThread
isKilled() constUThread
isRunning() constUThread
join(bool killFirst=false)UThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
kStateDetecting enum value (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThread
kStateProcessCommand enum value (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThread
post(UEvent *event, bool async=true) constUEventsSenderprotected
Priority enum nameUThread
registerToEventsManager() (defined in UEventsHandler)UEventsHandler
RtabmapThread(Rtabmap *rtabmap) (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThread
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
setAffinity(int cpu=0)UThread
setDataBufferSize(unsigned int bufferSize) (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThread
setDetectorRate(float rate) (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThread
setPriority(Priority priority)UThread
start()UThread
State enum name (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
UEventsHandler()UEventsHandlerinlineprotected
UEventsSender() (defined in UEventsSender)UEventsSenderinline
unregisterFromEventsManager() (defined in UEventsHandler)UEventsHandler
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~RtabmapThread() (defined in rtabmap::RtabmapThread)rtabmap::RtabmapThreadvirtual
~UEventsHandler()UEventsHandlerprotectedvirtual
~UEventsSender() (defined in UEventsSender)UEventsSendervirtual
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread.html b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread.html new file mode 100644 index 00000000..14f95c55 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread.html @@ -0,0 +1,443 @@ + + + + + + + + +RTAB-Map: rtabmap::RtabmapThread Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RtabmapThread Class Reference
+
+
+
+Inheritance diagram for rtabmap::RtabmapThread:
+
+
Inheritance graph
+ + + + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::RtabmapThread:
+
+
Collaboration graph
+ + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + +

+Public Types

enum  State { kStateDetecting +, kStateProcessCommand + }
 
- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ RtabmapThread (Rtabmap *rtabmap)
 
+void clearBufferedData ()
 
+void setDetectorRate (float rate)
 
+void setDataBufferSize (unsigned int bufferSize)
 
+void createIntermediateNodes (bool enabled)
 
float getDetectorRate () const
 
unsigned int getDataBufferSize () const
 
bool getCreateIntermediateNodes () const
 
void close (bool databaseSaved, const std::string &databasePath="")
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
- Public Member Functions inherited from UEventsHandler
+void registerToEventsManager ()
 
+void unregisterFromEventsManager ()
 
+ + + + + + + + + + + +

+Protected Member Functions

virtual bool handleEvent (UEvent *anEvent)
 
- Protected Member Functions inherited from UEventsHandler
 UEventsHandler ()
 
virtual ~UEventsHandler ()
 
- Protected Member Functions inherited from UEventsSender
void post (UEvent *event, bool async=true) const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+
+

Definition at line 51 of file RtabmapThread.h.

+

Member Enumeration Documentation

+ +

◆ State

+ +
+
+ + + + +
enum rtabmap::RtabmapThread::State
+
+ +

Definition at line 56 of file RtabmapThread.h.

+ +
+
+

Member Function Documentation

+ +

◆ getDetectorRate()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::RtabmapThread::getDetectorRate () const
+
+inline
+
+ +

Definition at line 71 of file RtabmapThread.h.

+ +
+
+ +

◆ getDataBufferSize()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int rtabmap::RtabmapThread::getDataBufferSize () const
+
+inline
+
+ +

Definition at line 72 of file RtabmapThread.h.

+ +
+
+ +

◆ getCreateIntermediateNodes()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::RtabmapThread::getCreateIntermediateNodes () const
+
+inline
+
+ +

Definition at line 73 of file RtabmapThread.h.

+ +
+
+ +

◆ close()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::RtabmapThread::close (bool databaseSaved,
const std::string & databasePath = "" 
)
+
+

Close rtabmap. This will delete rtabmap object if set.

Parameters
+ + + +
databaseSavedtrue=database saved, false=database discarded.
databasePathoutput database file name, ignored if Db/Sqlite3InMemory=false (opened database is then overwritten).
+
+
+ +
+
+ +

◆ handleEvent()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool rtabmap::RtabmapThread::handleEvent (UEvent * event)
+
+protectedvirtual
+
+

Method called by the UEventsManager to handle an event. Important : this method must do a minimum of work because the faster the dispatching loop is done; the faster the events are received. If a handling function takes too much time, the events list can grow faster than it is emptied. The event can be modified.

Returns
"true" to notify UEventsManager that this handler took ownership of the event (meaning it must delete it). The event will not be dispatched to next handlers.
+
+"false" to let event be dispatched to next handlers (default behavior). UEventsManager will take care of deleting the event.
+ +

Implements UEventsHandler.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.map new file mode 100644 index 00000000..39494b8d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.md5 new file mode 100644 index 00000000..6127fa93 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.md5 @@ -0,0 +1 @@ +ffc6920860101476a1dd68ce3a997aac \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..27f75f018bb08b8c9247886adcfe3dec442be72d GIT binary patch literal 11958 zcmZvi1yt2hx8Ml{K_#W6lnxO=k&sSlL8(hhr$|YI2uezabY2iC>5>u=kPbn*ySw4- z`>i+gW@gPYx%VIE?6dQ?ci;;pncKK`anaDwZp%KGR7FEW=YaoL-oS#tWh`!Z!#`Mt z@-mWWSEyfUbvaRJX!p=$CBrt3M9B+9Hq(jEmoDJL+VAH zBuAYbM^nMK*owl6H%0vyv3cccgeT>4tf~m@z=8tgyYiNLV#Yv*Hi6VB+FT3iioOR? z3iUm$&2z82xtAQ2x_>OW*Y71iPP0hJ{-571!ESGV#&T$TNM@CD1of@U_~TK>k_Weod|et23eE4P_s3=qcy5Ip?ElFsTWWNj6hX(W#Co70Ce)ywHBW;$Dz_Rg z6lL#QANWkk%lB?w)5kW)uqEh;^}p|pm6;>bN=p&x;Z}W56g!Bi5eeBO>;h#^6xr2- zUYURN^ZRZ$C!IJ%KuxV!`);Gk^Q=N~t&Q`rLL|Y)X7We;eTh&1%0AJNAl#2O8QIwW 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�rL!{@w71tvfaS#*w8 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 + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__inherit__graph.md5 new file mode 100644 index 00000000..6127fa93 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__inherit__graph.md5 @@ -0,0 +1 @@ +ffc6920860101476a1dd68ce3a997aac \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1RtabmapThread__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..27f75f018bb08b8c9247886adcfe3dec442be72d GIT binary patch literal 11958 zcmZvi1yt2hx8Ml{K_#W6lnxO=k&sSlL8(hhr$|YI2uezabY2iC>5>u=kPbn*ySw4- z`>i+gW@gPYx%VIE?6dQ?ci;;pncKK`anaDwZp%KGR7FEW=YaoL-oS#tWh`!Z!#`Mt z@-mWWSEyfUbvaRJX!p=$CBrt3M9B+9Hq(jEmoDJL+VAH zBuAYbM^nMK*owl6H%0vyv3cccgeT>4tf~m@z=8tgyYiNLV#Yv*Hi6VB+FT3iioOR? z3iUm$&2z82xtAQ2x_>OW*Y71iPP0hJ{-571!ESGV#&T$TNM@CD1of@U_~TK>k_Weod|et23eE4P_s3=qcy5Ip?ElFsTWWNj6hX(W#Co70Ce)ywHBW;$Dz_Rg z6lL#QANWkk%lB?w)5kW)uqEh;^}p|pm6;>bN=p&x;Z}W56g!Bi5eeBO>;h#^6xr2- zUYURN^ZRZ$C!IJ%KuxV!`);Gk^Q=N~t&Q`rLL|Y)X7We;eTh&1%0AJNAl#2O8QIwW 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�rL!{@w71tvfaS#*w8 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::RvlCodec Member List
+
+
+ +

This is the complete list of members for rtabmap::RvlCodec, including all inherited members.

+ + + + +
CompressRVL(const uint16_t *input, unsigned char *output, int numPixels) (defined in rtabmap::RvlCodec)rtabmap::RvlCodec
DecompressRVL(const unsigned char *input, uint16_t *output, int numPixels) (defined in rtabmap::RvlCodec)rtabmap::RvlCodec
RvlCodec() (defined in rtabmap::RvlCodec)rtabmap::RvlCodec
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1RvlCodec.html b/preview/pr-1492/api/latest/classrtabmap_1_1RvlCodec.html new file mode 100644 index 00000000..cb28eac2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1RvlCodec.html @@ -0,0 +1,108 @@ + + + + + + + + +RTAB-Map: rtabmap::RvlCodec Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::RvlCodec Class Reference
+
+
+ + + + + + +

+Public Member Functions

+int CompressRVL (const uint16_t *input, unsigned char *output, int numPixels)
 
+void DecompressRVL (const unsigned char *input, uint16_t *output, int numPixels)
 
+

Detailed Description

+
+

Definition at line 14 of file rvl_codec.h.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SIFT-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT-members.html new file mode 100644 index 00000000..ade8906c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT-members.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SIFT Member List
+
+
+ +

This is the complete list of members for rtabmap::SIFT, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::SIFT)rtabmap::SIFTinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::SIFTvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::SIFT)rtabmap::SIFTvirtual
SIFT(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::SIFT)rtabmap::SIFT
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~SIFT() (defined in rtabmap::SIFT)rtabmap::SIFTvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SIFT.html b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT.html new file mode 100644 index 00000000..b70492f0 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT.html @@ -0,0 +1,343 @@ + + + + + + + + +RTAB-Map: rtabmap::SIFT Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SIFT Class Reference
+
+
+ +

SIFT detector and descriptor (optional GPU / CudaSift). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::SIFT:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::SIFT:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ SIFT (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

SIFT detector and descriptor (optional GPU / CudaSift).

+ +

Definition at line 348 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::SIFT::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::SIFT::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 355 of file Features2d.h.

+ +
+
+ +

◆ isGpuAvailable()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::SIFT::isGpuAvailable () const
+
+overridevirtual
+
+ +

Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.

+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.map new file mode 100644 index 00000000..640719da --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.md5 new file mode 100644 index 00000000..f89ec220 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.md5 @@ -0,0 +1 @@ +90ab4dd941835dc75c8392627f4bedf1 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..441462125d998c8a7cb9ccebcfad25b661d91365 GIT binary patch literal 3963 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__inherit__graph.md5 new file mode 100644 index 00000000..f89ec220 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__inherit__graph.md5 @@ -0,0 +1 @@ +90ab4dd941835dc75c8392627f4bedf1 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SIFT__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..441462125d998c8a7cb9ccebcfad25b661d91365 GIT binary patch literal 3963 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SURF Member List
+
+
+ +

This is the complete list of members for rtabmap::SURF, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::SURF)rtabmap::SURFinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::SURFvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::SURF)rtabmap::SURFvirtual
SURF(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::SURF)rtabmap::SURF
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~SURF() (defined in rtabmap::SURF)rtabmap::SURFvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF.html b/preview/pr-1492/api/latest/classrtabmap_1_1SURF.html new file mode 100644 index 00000000..3cfcb7dc --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF.html @@ -0,0 +1,347 @@ + + + + + + + + +RTAB-Map: rtabmap::SURF Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SURF Class Reference
+
+
+ +

SURF detector and descriptor (non-free / xfeatures2d depending on OpenCV build). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::SURF:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::SURF:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ SURF (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

SURF detector and descriptor (non-free / xfeatures2d depending on OpenCV build).

+ +

Definition at line 320 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::SURF::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::SURF::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 327 of file Features2d.h.

+ +
+
+ +

◆ isGpuAvailable()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::SURF::isGpuAvailable () const
+
+overridevirtual
+
+ +

Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.

+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY-members.html new file mode 100644 index 00000000..3f234102 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY-members.html @@ -0,0 +1,147 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SURF_DAISY Member List
+
+
+ +

This is the complete list of members for rtabmap::SURF_DAISY, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::SURF_DAISY)rtabmap::SURF_DAISYinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::SURFvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::SURF_DAISY)rtabmap::SURF_DAISYvirtual
SURF(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::SURF)rtabmap::SURF
SURF_DAISY(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::SURF_DAISY)rtabmap::SURF_DAISY
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~SURF() (defined in rtabmap::SURF)rtabmap::SURFvirtual
~SURF_DAISY() (defined in rtabmap::SURF_DAISY)rtabmap::SURF_DAISYvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY.html b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY.html new file mode 100644 index 00000000..6a3d11ef --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: rtabmap::SURF_DAISY Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SURF_DAISY Class Reference
+
+
+ +

SURF detector + DAISY descriptors (OpenCV 3+ xfeatures2d). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::SURF_DAISY:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::SURF_DAISY:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ SURF_DAISY (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::SURF
+ SURF (const ParametersMap &parameters=ParametersMap())
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

SURF detector + DAISY descriptors (OpenCV 3+ xfeatures2d).

+ +

Definition at line 747 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::SURF_DAISY::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::SURF.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::SURF_DAISY::getType () const
+
+inlineoverridevirtual
+
+ +

Reimplemented from rtabmap::SURF.

+ +

Definition at line 754 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.map new file mode 100644 index 00000000..6c810ebf --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.md5 new file mode 100644 index 00000000..7889bd87 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.md5 @@ -0,0 +1 @@ +223cb1c6f64173bd177a88a87270c568 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3bee643356023093ffad3f47249167ac00580c5e GIT binary patch literal 6732 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 CooOBb literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.map new file mode 100644 index 00000000..6c810ebf --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.md5 new file mode 100644 index 00000000..7889bd87 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.md5 @@ -0,0 +1 @@ +223cb1c6f64173bd177a88a87270c568 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__DAISY__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3bee643356023093ffad3f47249167ac00580c5e GIT binary patch literal 6732 zcmc(kcT`jDmd4|!Qltt>FVaCk1f(O1BE2YLBuJ6otAt(@=>h^uM?jD!(j|dFK#*!^ zkxuBnhF(LNm$~cSHEYfPGmx^@$;mly*?T{~{UqY4whF~HrfU!gghEYKNf*4AgC~-N z2)r7(Gz^0`A~OvYCCK^3e-=9b69mF^Nli&n&nta>++SZ0es;dK$VfyT_v$)UX&zdz zFUZTu@5aSA;#_Md?u>m%+X0mlsS0)--6)m1%&BPN4qEAvj?XUSbjr z&6-nIe9~Bbop{0T{H_(Fb@g>C2C4wIp?NsG+pqhmuE*Lq{U}|W528qY<>FCYsfI); znwibqdvk-6MA!nRQ0=|5P|=NeIcY~6&%ItZ;CN-4PK($Bj@S|oW4I+M8aFjHRpM}) zWL;fd9X0Q$XI1c++UGM#d6pMvbI^ANu7@G~)-!>p0}jgzv_3abnw7@;g8N__Ry z)JQEYEgdH6U`Xv;u`cqG{8pF!wUJ>QZYS))$t74KtkQ~Nd3o8w((=-A+wjgvsPVrO?dB_%~#MyA|r%S<_%DR(u$q=eGf*SDgwvK)c1 zI@+GEuC3h}wJ&{UXsD^L&mai>@oRLH>FpOePXx|dV?8D&MwuY*e|%5p!RbBrz!TBS zMC5n%iI#>+Gx5^S9y86Py3d~r2ncZ8y7hK3!&e(=W!I zGW++g)6=&#g^-a_QAv4;w8pSv{^n}nin$~tZu0T*ji1%k)saw8%%2?XkTczDUlMI? zX(@M`S6}E#Q*n2{hsWbtiF27d*=CxW9{v6MH(Au2h?JCccw~gp@5c85yVhvtwqNfq zU*Z=OE>;NW1Fm41Qa{dJs^V`F1u6th(KYx2O8 zEfppvrrl#1w>gsM`Pvf4#)pT8?)oaL5M;lZx%vCb$~U!b2PZo{JAVXAH@l=J?^<`K zQ?})(2@l`04EG(Yedv&lF?8Z=O5*HVj)}XbPR`kiZ=VZrFiIF(!1l+KF ze}CW2!r~i#GL(YZ0+u*GHTC+aH1M>@_?&}-WBX!m+5=V&Z}O~2^B~r@}!AOWN8q+{YP-SJ&r4SaBX^;qtvK&aLL{gR`&XxUs2EE zZhN}dTzecVqOhc7;fv=4hlt2WOp-`nZ|_5pE?r$+`Y_lfY8I9sQu!=$9zwqRYgl0d zfv|d3>pWRMJUo2YteIq7mY$yedr^_rV17UOZx0)D6&KM+wNtgGg z0SSvAuZ5R>x$m2p8E{0VnaiTTB8{IOmX;%_9RwqZEeGPKbW&oK!5@WN6jy?2@$k>ZrgKe z@7MS7hD`*_zjJ3G7DYbzT&zpt4h7II2B5Vz`N00+Y( zBeTDLRisD7*ojMqf^Y$Mq%MY%ja5T_6cj8$SzB6KG?VYXQ(^c29L+4{ar@VUvqP?( z#U4Ic+0?DsHqYVuT2R+i*t~<&(^rl(i2vEc{TyK(a-qXRt)OXp{S z=OmPrtvx*-dwZYK(9+f#s(2FCxUO&2yu7^Jze}2% zCx8Cj3>JBFZ;ywcKO8w3@XC|;YZ1J;t?kX(iFXW(Og5Rfp5Bdooy@`YoU*c5Q1v)D zIX4du`0m~N3|40QXfe}MnljG?L)CIFxrN`&Ne&4KxhEyH+NE{L&d%;|IX|0W z+dqHQ)ipHs?3_z`z_g#fdWFf;N{ia}-dlMQ!z!l?>Lvn#Aj0tQ@EBIRd>t?U{{4G) zb#?OB$6+gYW%oP;qIL6lZ#7*OehoxzC>48m9GA-G)>dOzS8>-tHd=Ojd;4&2$b@2a z(sR;ZT2@w9SND;tt0-h}aIhMMnps@5z8kXk#B(0 zm7Nv!@S8i3*jqoJh*CjdO|P8MmdiB3+SJx&id#zIS6gT~=x*o)>pzvhZYD10)&2M8 zZh#R=E-o=q*}x#R(0)1LC)Kyj#sgc`0iMJ=xkIRVYD|U0naZ9o>BvTaNlhjpb3RVI zLC>-Q)%ACeKST&a?3{Zl9B9txK5;^Rq{Wzc>)En*cw%NH+ID7JJ@RxMjCKB7`j3!Oqz&ZufI z!`(~B9JhFip$SahiFR-t2Qf)W12)7%7&?`tJVFg2Z+GvP zRJ&>?9vg&*a5m@hiZhdrEZNgQ+vN|H62}_CidF`c!nJG~lPZ|0-)rI;#+Cko(|+7D ze1Xm+DJQjcOpXkGL2R;6#GQg$OZp^`1`c+JiOXR%ADNxhX?mB9kkMRu?j`m(anZ7U zhDtv*PMVf1lJAiaf5yN0B!c??hoi37jX_si&-pb(cqR!9y2}SopIa^K`a}s~ z`uhI<_1M!3T*+7|s7g*|09hf7t+EW(LbzYO&nqlk+(!7R8jePzNhv82N<%>@FwSN( z?f)^WaZwKA3JX$DJdo~;L5%uyO(nIFk&(SN_pV&IqL2E_c0n31UfkqTj{1egK10@L zWxZWku)^0YvZ41uf-A>!|8p5Axq!ge>S_jvy}dmiwR#66O$kzKRZ>{*_RZ_puUkoT z_UT%LOF51<=V~M!PQ9lRGKz$Kk$Dr^#vYg+8F>wyuMIMY>cPof=lUaFP*3ZQSBm-v z2e$!?EIA%*V?=VGMI#7DW(W@HY~7VAafO&T2Wuk@Q0LvdcYddPLjbiHe%hLvn?JU) zvg%=Vp&#GpxFaO=t)_;Not?cqUFNZ+B~NZ{ZhwD&?3XVT50#Xz%+Jq*O30x`19;`| z=;$kynJq&(=WA9L1Tao0C9B=f%%GrueiRooike-40L4rP!u0kn1TAiAYinEUk67!& z;czyYFH4Q*hs(`_Lqbf!{LAV9y!rY2cVIA&i=jCKb|WabAiaojb4SN=Vk>rN=%tkL zz`($m?*{s0-8qm;MrOo@nWtv`ah>a|a=_s*t*rnk`J(!F zgoSw&6pRnvf7LAv|M+oZKUr2zZgzhD3HU=Ez~!pfACtSB9J+#X8rsnC00MYGDp^}I zQ{l^UU;b*MiQm?fL=h8hA0L#{I5tP+f}s=@74@J{8X!6V61`Un^WQRCcb}a2$=|;Z zR*FknIypG_3gG=`g?d7U)v-gyzR`e6Q@`neg2KtgRbEwf^{#$~lrtN^S1`8-*V)$V zOiYnsVJbrwS>(9;LXdy zaVcS?^=?RLsIH!#MTG)@Q76FUjCWtZ#m-w|65}#5VxUEqr^kDT$Hz3x%$N`|dRZx# zVm&>**!1+y?=Ol})znM}zP|vn-Ds1R7+Bo4;E@+DUS3pWALfW~8vi5SBmX-~@x2Qi z{v-$c^!fA0=H@y0&V{wLAIRv+N^uY{sQG$-!V0=Xx3CO}91?y7gJJvoE&eLV(a_Od zXc{C*#DrH&EFR$Ag;q2KoEH4}ac>yNSt7^d(4}Jg`;+%wrXaL@+T8!b1ZKw^?nr6c z$m6v0ew!2I{;qVI*sHkApX}(HCC}IH|_(r;1KbPXj)v^gG(V z!%kRNx^6v_c0?dl+7I2SKRdQxTVIa|4}ZNm)#!J!)do5sSNxcaao{QZ{W_3x@0kd` ziyoq;reY-(v>{horVC4;Nf!gulN(9Emb$ZfOzq z-FKJ>AUMW<`ebWoX9mE#x~68UmD$;4sh0yZQ4vv5{ax1JeDCGlBoZnrYfPeW`h&m> z5J5}bk*&vIHh@hOk@7B657C4I);-d@_Jcnp32RGDcLW75sPk`M-$TaDMZ5hY%X120MsH|8=EqBMl{eeMqz`W?SFa3 zt~a|sx*&{yBZp+=4m`0W>!7kdWPAec3sSODY3M$l@8jew+?8FjYwrRzR<;0YoOE>Q z1nn7|j;;SR_Pp<2F>!k3oY3<~BdPDX-t8B*I{QPjlf&a`3)bxzi$gLR?~OKf^tqrq z+4VPO;_;@GVz=H*)(IU^9;1!!14huy=#2G$7uVoFC{dW2VmlJ)BLaXTj%Oye_XJ@h zjN#U=$e7Rs=W(Zu*pxd}{qYPyojjluETE_5kbHkM*`9N0GVM;9ghBJ?CKjdeu7`r+ z&qG(GiV=z2GjW!#D(%ex3xs4~P&JxLo-)zx?W|_aCZD5t1!zGV%Fp_(7#;yso_)0n=xMQM-Gq30%D7?V$b8Fw0WFjUGFp~Yf>c+ ztVU3$#Tq^lni_WEy2%7HgZAjTTT^pLa=6aR0-#UTF}#t#iR7D;xcz(^gH!j+0Ut|$I7d4q6Puuq5&WE z_}yyI75BUtOk*`9qmKFTAy@EO-SM#x6Eic#Ao6ID612db2C=usz5~l8hlB3Tf1;1> z#s=b=tGfC%l^B+Cz#&azP!77_lDjx|bHiE>VbJznbmfLdV|2F#1&?<7bOdhS&IZaZ zA|k@8lM$7f$qo^GSz__`o0^h}%Btf5uvfO*xjs^}u~Gg4C@%wFx$)n0URz5GiZjq^ zIPRxY-%N%tep)B+_<0z7qAn0}gdK16Kv6?re6ciG}Nnv5c zeR*1|F60yb2S%xBX-Bi{=LI<9M9T@USqdU@hF`Qg@>tV#*6V@Kex^w}48KJprHY`% zP2JrwnSp01QBmYZ;m%JqHOawMX2GE578WWjF?2xx80Edn6w^v61D2Oj?x`(VKXUIoztAUn< zhK;RzuH#eOxAOp3FVMja7Qa#f-7_$cUN3Z}pnL~`<^mkt#E3Kie26S665QI_0@M+o zkkC?PKg1wzMegeAit_j92Obo#K}1Kbm6eHzDOp|vQX|4#@X<`m2W}po>1|vRBLKE5 zL_{9;@{SG;pw+#ot)G*URzrqw0D8Gl;6I-Q`UeKe&D$u0f`Z)5-GDm-^dUvUo(^pC z9M}-Y!Cou_Fy+KO@rD!Li>xQ7r=UpBfTq=I`ETyEevaJm>ldkK)h8fZ9h2Z@M@i6PrNJ8J6c zO}~G?2b!`u_{v!n^ykKaZB|xR^pQ@iU?Nd$_eU-K5iOwY^z`(sKVA_8-q6 zXM_#lLNtRNVN~#|?uco$p!dLHvA}=I(uLP)B&dhv=ktLB>C&!`Hmcg&Rl)oLcTts> zmjepE;Ii>mAoCU=j=@@7;DNb07x1uJCMMXxC;_j7{S<{|QYjo};f4HmD!A2zULnY> zt*wDXHeHa2eJNTwARu6oxFiAXdk_!WeXxH=bDwm)fc56;=_xguH*d09zI^TF%a;(a z8jymLlDu!$)N3wI#m3GqTPIUN9&rEo_aiG_Ia(ySvM)di zRUMs0u<|H@wk{LrT9D2{CN*wPkYmSd1<)ce87x6x7u1!@PLT?@*|oLK&J^)W)gJ3i zVN~qA5)uiZm6+Ms_y{B&m{3GG;0%9-u2KbJ(m`(?Xi3;#zi{_}uXx{wFBIPy5nbbV zBnAQ7d)dh^+qlLpBtJ92p!5PyadoO2Hsn*S1TmZ5TWf1;yLlh;URO|08V+||#I7YE z1`xZ~sj1%<7Yl>y&H^g*S-a{lrvQe#raxmqFf|?yU@f*`p55A;?!M={Y74D@NyzzJ|5fg8=}ko4)( z@4&Mi_7bC7Wh*P*mnDWA{QLzP63N*;p!7gXjf?GZJ~b#*DzIzPKwATRRzL-}`1ry= z#Q}CMgyBJeJXqO<<_Ow*l9F!oe{L!qFL4o3vHh?&*PN{PPXP`XF!#O!>rJC=G7%8t zMJ--@aNYrolVk;d*?8_{r^YJEyKg}`2CWsyY38*ear4(sR<$j3pzJ<4+oA#{Yg?J= zZ~bz!s~_+0Go(p5=hfF|fD4G(_47x5_^^jayKDLnsFyOphX-DFr42TlQlxD3Z$n^U z<^J;8nkE1}Mn*Hm}DS)U7{>QtGlarY(ALz|3EeG&t zeA?-%pywf`V&mrI%+@gP9R-LpQtK&VSH*Nu_Wk`~GE*h}wzX(f`eeRe0dpk#*%wE|Q>I|9)ic1kw|q^lUU$pMjr;AZkyvl}aAH4*D;9 CooOBb literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK-members.html new file mode 100644 index 00000000..3232f35b --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK-members.html @@ -0,0 +1,147 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SURF_FREAK Member List
+
+
+ +

This is the complete list of members for rtabmap::SURF_FREAK, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::SURF_FREAK)rtabmap::SURF_FREAKinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::SURFvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::SURF_FREAK)rtabmap::SURF_FREAKvirtual
SURF(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::SURF)rtabmap::SURF
SURF_FREAK(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::SURF_FREAK)rtabmap::SURF_FREAK
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~SURF() (defined in rtabmap::SURF)rtabmap::SURFvirtual
~SURF_FREAK() (defined in rtabmap::SURF_FREAK)rtabmap::SURF_FREAKvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK.html b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK.html new file mode 100644 index 00000000..c7623689 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: rtabmap::SURF_FREAK Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SURF_FREAK Class Reference
+
+
+ +

SURF detector + FREAK descriptors. + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::SURF_FREAK:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::SURF_FREAK:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ SURF_FREAK (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
- Public Member Functions inherited from rtabmap::SURF
+ SURF (const ParametersMap &parameters=ParametersMap())
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

SURF detector + FREAK descriptors.

+ +

Definition at line 559 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::SURF_FREAK::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::SURF.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::SURF_FREAK::getType () const
+
+inlineoverridevirtual
+
+ +

Reimplemented from rtabmap::SURF.

+ +

Definition at line 566 of file Features2d.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.map new file mode 100644 index 00000000..442aca12 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.md5 new file mode 100644 index 00000000..269b5b41 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.md5 @@ -0,0 +1 @@ +420b9b70d686f5fdea869302f8c06b14 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a30dfd99b35c2217472f26e1afab01656c130 GIT binary patch literal 6620 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 + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__inherit__graph.md5 new file mode 100644 index 00000000..269b5b41 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__inherit__graph.md5 @@ -0,0 +1 @@ +420b9b70d686f5fdea869302f8c06b14 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__FREAK__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a30dfd99b35c2217472f26e1afab01656c130 GIT binary patch literal 6620 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__coll__graph.md5 new file mode 100644 index 00000000..cbe85f74 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__coll__graph.md5 @@ -0,0 +1 @@ +bfe210593c625a739dd30ab626aa8a7e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f72f9f3f9588aca26aa2151e9f5fd9015f75dd26 GIT binary patch literal 4255 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 XoidKeF$)3zIFM+nLRD}Nt={|}UmtIr literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.map new file mode 100644 index 00000000..e9f22d1f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.md5 new file mode 100644 index 00000000..0ffcc7f3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.md5 @@ -0,0 +1 @@ +329488b715667a6a6f20c7c0205e835e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SURF__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7765d3864f11703997d8c8ce37b006ed31fcb7 GIT binary patch literal 10424 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 + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SensorCapture Member List
+
+
+ +

This is the complete list of members for rtabmap::SensorCapture, including all inherited members.

+ + + + + + + + + + + + + + + +
captureData(SensorCaptureInfo *info=0)=0rtabmap::SensorCaptureprotectedpure virtual
getFrameRate() constrtabmap::SensorCaptureinline
getLocalTransform() constrtabmap::SensorCaptureinline
getNextSeqID()rtabmap::SensorCaptureinlineprotected
getPose(double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)rtabmap::SensorCaptureinlinevirtual
getSerial() const =0rtabmap::SensorCapturepure virtual
init(const std::string &calibrationFolder=".", const std::string &cameraName="")=0rtabmap::SensorCapturepure virtual
odomProvided() constrtabmap::SensorCaptureinlinevirtual
resetTimer()rtabmap::SensorCapture
SensorCapture(float frameRate=0, const Transform &localTransform=Transform::getIdentity())rtabmap::SensorCaptureprotected
setFrameRate(float frameRate)rtabmap::SensorCaptureinline
setLocalTransform(const Transform &localTransform)rtabmap::SensorCaptureinline
takeData(SensorCaptureInfo *info=0)rtabmap::SensorCapture
~SensorCapture()rtabmap::SensorCapturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture.html b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture.html new file mode 100644 index 00000000..a68c03f6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture.html @@ -0,0 +1,748 @@ + + + + + + + + +RTAB-Map: rtabmap::SensorCapture Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SensorCapture Class Referenceabstract
+
+
+ +

Abstract base class for sensor data capture (cameras, lidars, etc.) + More...

+ +

#include <SensorCapture.h>

+
+Inheritance diagram for rtabmap::SensorCapture:
+
+
Inheritance graph
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual ~SensorCapture ()
 Virtual destructor.
 
SensorData takeData (SensorCaptureInfo *info=0)
 Captures sensor data with frame rate control.
 
virtual bool init (const std::string &calibrationFolder=".", const std::string &cameraName="")=0
 Initializes the sensor.
 
virtual std::string getSerial () const =0
 Returns the sensor's serial number or unique identifier.
 
virtual bool odomProvided () const
 Checks if the sensor provides odometry poses.
 
virtual bool getPose (double stamp, Transform &pose, cv::Mat &covariance, double maxWaitTime=0.06)
 Gets the sensor's pose estimate at a specific timestamp.
 
float getFrameRate () const
 Returns the target frame rate.
 
const Transform & getLocalTransform () const
 Returns the local transform from base frame to sensor frame.
 
void setFrameRate (float frameRate)
 Sets the target frame rate.
 
void setLocalTransform (const Transform &localTransform)
 Sets the local transform from base frame to sensor frame.
 
void resetTimer ()
 Resets the frame rate timer.
 
+ + + + + + + + + + +

+Protected Member Functions

 SensorCapture (float frameRate=0, const Transform &localTransform=Transform::getIdentity())
 Protected constructor.
 
virtual SensorData captureData (SensorCaptureInfo *info=0)=0
 Pure virtual method to capture sensor data.
 
int getNextSeqID ()
 Gets the next sequence ID.
 
+

Detailed Description

+

Abstract base class for sensor data capture (cameras, lidars, etc.)

+

SensorCapture provides a unified interface for capturing sensor data from various sensor types including cameras (RGB-D, stereo, mono) and lidars. It handles frame rate control, local transform management, and provides a common API for sensor initialization and data capture.

+

The class implements the Template Method pattern:

    +
  • takeData() handles frame rate control and timing, then calls the pure virtual captureData() method implemented by derived classes
  • +
  • Derived classes must implement captureData() to perform the actual sensor capture
  • +
+

Key features:

    +
  • Frame rate control: Automatic throttling to maintain target frame rate
  • +
  • Local transform: Transform from robot base frame to sensor frame
  • +
  • Capture timing: Tracks capture time and provides it via SensorCaptureInfo
  • +
  • Sequence IDs: Automatic sequence number generation for captured data
  • +
+

Derived classes include:

    +
  • Camera: Base class for all camera types (RGB-D, stereo, mono, file readers, etc.)
  • +
  • Lidar: Base class for lidar sensors
  • +
+
Note
This is an abstract class. Use concrete implementations like CameraRGBD, CameraStereo, LidarVLP16, etc., or create custom derived classes.
+
See also
Camera
+
+Lidar
+
+SensorData
+
+SensorCaptureInfo
+
+SensorCaptureThread
+ +

Definition at line 78 of file SensorCapture.h.

+

Constructor & Destructor Documentation

+ +

◆ SensorCapture()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::SensorCapture::SensorCapture (float frameRate = 0,
const Transform & localTransform = Transform::getIdentity() 
)
+
+protected
+
+ +

Protected constructor.

+

Creates a SensorCapture instance with the specified frame rate and local transform. This constructor is protected because SensorCapture is an abstract base class and should not be instantiated directly.

+
Parameters
+ + + +
frameRateTarget frame rate in Hz (0 = unlimited, capture as fast as possible)
localTransformTransform from base frame to sensor frame (default: identity)
+
+
+ +
+
+

Member Function Documentation

+ +

◆ takeData()

+ +
+
+ + + + + + + + +
SensorData rtabmap::SensorCapture::takeData (SensorCaptureInfo * info = 0)
+
+ +

Captures sensor data with frame rate control.

+

This method handles frame rate throttling and timing, then calls the pure virtual captureData() method to perform the actual capture.

+

The method:

    +
  • Enforces the target frame rate by sleeping if necessary
  • +
  • Measures capture time and stores it in SensorCaptureInfo
  • +
  • Assigns sequence IDs to captured data
  • +
  • Warns if the target frame rate cannot be reached
  • +
+
Parameters
+ + +
infoOptional pointer to SensorCaptureInfo to fill with capture metadata (ID, timestamp, capture time). If null, no info is filled.
+
+
+
Returns
SensorData containing the captured sensor data
+
Note
If frame rate is 0, data is captured as fast as possible without throttling.
+
+The returned SensorData should have rectified images if calibration was loaded.
+
See also
captureData()
+ +
+
+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::SensorCapture::init (const std::string & calibrationFolder = ".",
const std::string & cameraName = "" 
)
+
+pure virtual
+
+ +

Initializes the sensor.

+

Pure virtual method that must be implemented by derived classes to initialize the sensor hardware or data source. This typically involves:

    +
  • Opening device connections or file streams
  • +
  • Loading camera calibration parameters
  • +
  • Configuring sensor settings
  • +
+
Parameters
+ + + +
calibrationFolderDirectory path where calibration files are located (default: current directory ".")
cameraNameBase name of the camera for loading calibration files (default: empty string)
+
+
+
Returns
True if initialization was successful, false otherwise
+
Note
Must be called before calling takeData() or captureData()
+ +

Implemented in rtabmap::CameraDepthAI, rtabmap::CameraFreenect, rtabmap::CameraFreenect2, rtabmap::CameraImages, rtabmap::CameraK4A, rtabmap::CameraK4W2, rtabmap::CameraMyntEye, rtabmap::CameraOpenni, rtabmap::CameraOpenNI2, rtabmap::CameraOpenNICV, rtabmap::CameraOrbbecSDK, rtabmap::CameraRealSense, rtabmap::CameraRealSense2, rtabmap::CameraRGBDImages, rtabmap::CameraSeerSense, rtabmap::CameraStereoDC1394, rtabmap::CameraStereoFlyCapture2, rtabmap::CameraStereoImages, rtabmap::CameraStereoTara, rtabmap::CameraStereoVideo, rtabmap::CameraStereoZed, rtabmap::CameraStereoZedOC, rtabmap::CameraVideo, rtabmap::DBReader, and rtabmap::LidarVLP16.

+ +
+
+ +

◆ getSerial()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::SensorCapture::getSerial () const
+
+pure virtual
+
+
+ +

◆ odomProvided()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::SensorCapture::odomProvided () const
+
+inlinevirtual
+
+ +

Checks if the sensor provides odometry poses.

+

Some sensors (e.g., visual-inertial cameras) can provide pose estimates directly. This method indicates whether the sensor supports pose queries.

+
Returns
True if the sensor provides odometry poses, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
getPose()
+ +

Reimplemented in rtabmap::CameraImages, rtabmap::CameraMyntEye, rtabmap::CameraRealSense, rtabmap::CameraRealSense2, rtabmap::CameraSeerSense, rtabmap::CameraStereoZed, and rtabmap::DBReader.

+ +

Definition at line 152 of file SensorCapture.h.

+ +
+
+ +

◆ getPose()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool rtabmap::SensorCapture::getPose (double stamp,
Transform & pose,
cv::Mat & covariance,
double maxWaitTime = 0.06 
)
+
+inlinevirtual
+
+ +

Gets the sensor's pose estimate at a specific timestamp.

+

Queries the sensor for its pose estimate at the given timestamp. This is typically used for sensors that provide visual-inertial odometry or other pose estimation capabilities.

+
Parameters
+ + + + + +
stampTimestamp in seconds for which to query the pose
[out]poseOutput transform representing the sensor pose
[out]covarianceOutput covariance matrix (6x6) representing twist uncertainty
maxWaitTimeMaximum time in seconds to wait for pose data (default: 0.06)
+
+
+
Returns
True if pose was successfully retrieved, false otherwise
+
Note
Default implementation returns false. Derived classes should override if they support pose estimation.
+
See also
odomProvided()
+ +

Reimplemented in rtabmap::CameraSeerSense, rtabmap::CameraStereoZed, rtabmap::CameraRealSense2, and rtabmap::DBReader.

+ +

Definition at line 172 of file SensorCapture.h.

+ +
+
+ +

◆ getFrameRate()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::SensorCapture::getFrameRate () const
+
+inline
+
+ +

Returns the target frame rate.

+
Returns
Frame rate in Hz (0 = unlimited, capture as fast as possible)
+ +

Definition at line 180 of file SensorCapture.h.

+ +
+
+ +

◆ getLocalTransform()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::SensorCapture::getLocalTransform () const
+
+inline
+
+ +

Returns the local transform from base frame to sensor frame.

+
Returns
Const reference to the local transform
+ +

Definition at line 186 of file SensorCapture.h.

+ +
+
+ +

◆ setFrameRate()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorCapture::setFrameRate (float frameRate)
+
+inline
+
+ +

Sets the target frame rate.

+

Controls how often takeData() will capture data. The method will throttle captures to maintain the target rate.

+
Parameters
+ + +
frameRateTarget frame rate in Hz (0 = unlimited, capture as fast as possible)
+
+
+
Note
Setting frame rate to 0 disables throttling and captures as fast as possible.
+ +

Definition at line 200 of file SensorCapture.h.

+ +
+
+ +

◆ setLocalTransform()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorCapture::setLocalTransform (const Transform & localTransform)
+
+inline
+
+ +

Sets the local transform from base frame to sensor frame.

+

The local transform represents the pose of the sensor relative to the robot's base frame. This is used to transform sensor data into the robot's coordinate system.

+
Parameters
+ + +
localTransformTransform from base frame to sensor frame
+
+
+ +

Definition at line 210 of file SensorCapture.h.

+ +
+
+ +

◆ resetTimer()

+ +
+
+ + + + + + + +
void rtabmap::SensorCapture::resetTimer ()
+
+ +

Resets the frame rate timer.

+

Resets the internal timer used for frame rate control. This is useful when starting a new capture session or after a pause.

+ +
+
+ +

◆ captureData()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual SensorData rtabmap::SensorCapture::captureData (SensorCaptureInfo * info = 0)
+
+protectedpure virtual
+
+ +

Pure virtual method to capture sensor data.

+

This method must be implemented by derived classes to perform the actual sensor data capture. It is called by takeData() after frame rate throttling.

+

The returned SensorData should:

    +
  • Have rectified images if calibration was loaded during init()
  • +
  • Include proper timestamps
  • +
  • Contain valid sensor data (images, depth, laser scans, etc.)
  • +
+
Parameters
+ + +
infoOptional pointer to SensorCaptureInfo to fill with capture metadata. The base class will fill ID, timestamp, and capture time, but derived classes can add additional information.
+
+
+
Returns
SensorData containing the captured sensor data
+
Note
If capture fails, return an empty SensorData (id=0, stamp=0.0).
+
+RGB and depth images should be already rectified if calibration was loaded.
+
See also
takeData()
+ +

Implemented in rtabmap::LidarVLP16.

+ +
+
+ +

◆ getNextSeqID()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::SensorCapture::getNextSeqID ()
+
+inlineprotected
+
+ +

Gets the next sequence ID.

+

Returns and increments the internal sequence counter. This is used to assign unique sequence numbers to captured data.

+
Returns
Next sequence ID (starts at 1, increments with each call)
+ +

Definition at line 264 of file SensorCapture.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo-members.html new file mode 100644 index 00000000..1f532b2e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo-members.html @@ -0,0 +1,111 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SensorCaptureInfo Member List
+
+ + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo.html b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo.html new file mode 100644 index 00000000..1f7eb361 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo.html @@ -0,0 +1,572 @@ + + + + + + + + +RTAB-Map: rtabmap::SensorCaptureInfo Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SensorCaptureInfo Class Reference
+
+
+ +

Metadata structure for sensor data capture and processing. + More...

+ +

#include <SensorCaptureInfo.h>

+
+Collaboration diagram for rtabmap::SensorCaptureInfo:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + +

+Public Member Functions

 SensorCaptureInfo ()
 Default constructor.
 
virtual ~SensorCaptureInfo ()
 Virtual destructor.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

std::string cameraName
 Camera/sensor name identifier.
 
int id
 Capture ID (typically matches SensorData ID)
 
double stamp
 Timestamp in seconds (typically matches SensorData stamp)
 
float timeCapture
 Time to capture data from the sensor (seconds)
 
float timeDeskewing
 Time for laser scan deskewing (seconds)
 
float timeDisparity
 Time to compute stereo disparity (seconds)
 
float timeMirroring
 Time for image mirroring/flipping (seconds)
 
float timeStereoExposureCompensation
 Time for stereo exposure compensation (seconds)
 
float timeImageDecimation
 Time for image decimation/downsampling (seconds)
 
float timeHistogramEqualization
 Time for histogram equalization (seconds)
 
float timeScanFromDepth
 Time to convert depth image to laser scan (seconds)
 
float timeUndistortDepth
 Time to undistort depth image (seconds)
 
float timeBilateralFiltering
 Time for bilateral filtering of depth (seconds)
 
float timeTotal
 Total processing time (seconds)
 
Transform odomPose
 Odometry pose at the time of capture (in odometry coordinate frame)
 
cv::Mat odomCovariance
 Odometry twist covariance matrix (6x6, CV_64FC1). Default: identity matrix.
 
std::vector< float > odomVelocity
 6DOF odometry velocity [vx, vy, vz, vroll, vpitch, vyaw] (m/s, rad/s)
 
+

Detailed Description

+

Metadata structure for sensor data capture and processing.

+

SensorCaptureInfo contains metadata about sensor data capture, including timing information for various processing steps, camera identification, and odometry information. This information is typically attached to SensorEvent objects to provide context about how the sensor data was captured and processed.

+

The class tracks timing for various processing stages:

    +
  • Capture: Time to capture data from the sensor
  • +
  • Processing: Time for various image processing steps (deskewing, disparity, mirroring, exposure compensation, decimation, histogram equalization, etc.)
  • +
  • Depth processing: Time for depth-related operations (scan from depth, undistort depth, bilateral filtering)
  • +
  • Total: Total processing time
  • +
+

Odometry information includes:

    +
  • Pose: The odometry pose at the time of capture
  • +
  • Covariance: Uncertainty of the odometry twist (6x6 matrix)
  • +
  • Velocity: 6DOF velocity vector [vx, vy, vz, vroll, vpitch, vyaw]
  • +
+
Note
All timing values are in seconds (float).
+
+The odometry covariance matrix is initialized to identity by default.
+
See also
SensorEvent
+
+SensorData
+ +

Definition at line 64 of file SensorCaptureInfo.h.

+

Constructor & Destructor Documentation

+ +

◆ SensorCaptureInfo()

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::SensorCaptureInfo::SensorCaptureInfo ()
+
+inline
+
+ +

Default constructor.

+

Initializes all fields to default values:

    +
  • cameraName: empty string
  • +
  • id: 0
  • +
  • stamp: 0.0
  • +
  • All timing fields: 0.0f
  • +
  • odomPose: null transform
  • +
  • odomCovariance: 6x6 identity matrix
  • +
  • odomVelocity: empty vector
  • +
+ +

Definition at line 80 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ ~SensorCaptureInfo()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::SensorCaptureInfo::~SensorCaptureInfo ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 102 of file SensorCaptureInfo.h.

+ +
+
+

Member Data Documentation

+ +

◆ cameraName

+ +
+
+ + + + +
std::string rtabmap::SensorCaptureInfo::cameraName
+
+ +

Camera/sensor name identifier.

+ +

Definition at line 104 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ id

+ +
+
+ + + + +
int rtabmap::SensorCaptureInfo::id
+
+ +

Capture ID (typically matches SensorData ID)

+ +

Definition at line 105 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ stamp

+ +
+
+ + + + +
double rtabmap::SensorCaptureInfo::stamp
+
+ +

Timestamp in seconds (typically matches SensorData stamp)

+ +

Definition at line 106 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeCapture

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeCapture
+
+ +

Time to capture data from the sensor (seconds)

+ +

Definition at line 109 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeDeskewing

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeDeskewing
+
+ +

Time for laser scan deskewing (seconds)

+ +

Definition at line 110 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeDisparity

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeDisparity
+
+ +

Time to compute stereo disparity (seconds)

+ +

Definition at line 111 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeMirroring

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeMirroring
+
+ +

Time for image mirroring/flipping (seconds)

+ +

Definition at line 112 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeStereoExposureCompensation

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeStereoExposureCompensation
+
+ +

Time for stereo exposure compensation (seconds)

+ +

Definition at line 113 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeImageDecimation

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeImageDecimation
+
+ +

Time for image decimation/downsampling (seconds)

+ +

Definition at line 114 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeHistogramEqualization

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeHistogramEqualization
+
+ +

Time for histogram equalization (seconds)

+ +

Definition at line 115 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeScanFromDepth

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeScanFromDepth
+
+ +

Time to convert depth image to laser scan (seconds)

+ +

Definition at line 116 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeUndistortDepth

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeUndistortDepth
+
+ +

Time to undistort depth image (seconds)

+ +

Definition at line 117 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeBilateralFiltering

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeBilateralFiltering
+
+ +

Time for bilateral filtering of depth (seconds)

+ +

Definition at line 118 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ timeTotal

+ +
+
+ + + + +
float rtabmap::SensorCaptureInfo::timeTotal
+
+ +

Total processing time (seconds)

+ +

Definition at line 119 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ odomPose

+ +
+
+ + + + +
Transform rtabmap::SensorCaptureInfo::odomPose
+
+ +

Odometry pose at the time of capture (in odometry coordinate frame)

+ +

Definition at line 122 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ odomCovariance

+ +
+
+ + + + +
cv::Mat rtabmap::SensorCaptureInfo::odomCovariance
+
+ +

Odometry twist covariance matrix (6x6, CV_64FC1). Default: identity matrix.

+ +

Definition at line 123 of file SensorCaptureInfo.h.

+ +
+
+ +

◆ odomVelocity

+ +
+
+ + + + +
std::vector<float> rtabmap::SensorCaptureInfo::odomVelocity
+
+ +

6DOF odometry velocity [vx, vy, vz, vroll, vpitch, vyaw] (m/s, rad/s)

+ +

Definition at line 124 of file SensorCaptureInfo.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.map new file mode 100644 index 00000000..d534dd64 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.md5 new file mode 100644 index 00000000..3f7b9e08 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.md5 @@ -0,0 +1 @@ +42df1b3b486aff70ed73c08ec3cc7905 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureInfo__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..de0a6a9b1ef78c192cc9be6b017da4c17b3172c9 GIT binary patch literal 6246 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread-members.html new file mode 100644 index 00000000..c7012106 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread-members.html @@ -0,0 +1,166 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SensorCaptureThread Member List
+
+
+ +

This is the complete list of members for rtabmap::SensorCaptureThread, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
camera()rtabmap::SensorCaptureThreadinline
Create(const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Create(unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const (defined in UThreadC< void >)UThreadC< void >inline
currentThreadId() (defined in UThread)UThreadinlinestatic
Detach(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
disableBilateralFiltering()rtabmap::SensorCaptureThreadinline
disableFeatureDetection()rtabmap::SensorCaptureThread
disableIMUFiltering()rtabmap::SensorCaptureThread
enableBilateralFiltering(float sigmaS, float sigmaR)rtabmap::SensorCaptureThread
enableFeatureDetection(const ParametersMap &parameters=ParametersMap())rtabmap::SensorCaptureThread
enableIMUFiltering(int filteringStrategy=1, const ParametersMap &parameters=ParametersMap(), bool baseFrameConversion=false)rtabmap::SensorCaptureThread
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Exit() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
getThreadHandle() const (defined in UThread)UThreadinline
getThreadId() const (defined in UThread)UThreadinline
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handle typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
Handler typedef (defined in UThreadC< void >)UThreadC< void >
isCapturing() constrtabmap::SensorCaptureThreadinline
isCreating() constUThread
isIdle() constUThread
isKilled() constUThread
isPaused() constrtabmap::SensorCaptureThreadinline
isRunning() constUThread
join(bool killFirst=false)UThread
Join(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
Kill(const Handle &H) (defined in UThreadC< void >)UThreadC< void >inlinestatic
kill()UThread
kPAboveNormal enum value (defined in UThread)UThread
kPBelowNormal enum value (defined in UThread)UThread
kPLow enum value (defined in UThread)UThread
kPNormal enum value (defined in UThread)UThread
kPRealTime enum value (defined in UThread)UThread
lidar()rtabmap::SensorCaptureThreadinline
odomProvided() constrtabmap::SensorCaptureThread
odomSensor()rtabmap::SensorCaptureThreadinline
post(UEvent *event, bool async=true) constUEventsSenderprotected
postUpdate(SensorData *data, SensorCaptureInfo *info=0) constrtabmap::SensorCaptureThread
Priority enum nameUThread
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
Self() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
SensorCaptureThread(Camera *camera, const ParametersMap &parameters=ParametersMap())rtabmap::SensorCaptureThread
SensorCaptureThread(Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())rtabmap::SensorCaptureThread
SensorCaptureThread(Lidar *lidar, const ParametersMap &parameters=ParametersMap())rtabmap::SensorCaptureThread
SensorCaptureThread(Lidar *lidar, Camera *camera, const ParametersMap &parameters=ParametersMap())rtabmap::SensorCaptureThread
SensorCaptureThread(Lidar *lidar, SensorCapture *odomSensor, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())rtabmap::SensorCaptureThread
SensorCaptureThread(Lidar *lidar, Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())rtabmap::SensorCaptureThread
setAffinity(int cpu=0)UThread
setColorOnly(bool colorOnly)rtabmap::SensorCaptureThreadinline
setDistortionModel(const std::string &path)rtabmap::SensorCaptureThread
setFrameRate(float frameRate)rtabmap::SensorCaptureThread
setHistogramMethod(int histogramMethod)rtabmap::SensorCaptureThreadinline
setImageDecimation(int decimation)rtabmap::SensorCaptureThreadinline
setImageRate(float frameRate)rtabmap::SensorCaptureThreadinline
setMirroringEnabled(bool enabled)rtabmap::SensorCaptureThreadinline
setOdomAsGroundTruth(bool enabled)rtabmap::SensorCaptureThreadinline
setPriority(Priority priority)UThread
setScanParameters(bool fromDepth, int downsampleStep, float rangeMin, float rangeMax, float voxelSize, int normalsK, float normalsRadius, bool forceGroundNormalsUp, bool deskewing)rtabmap::SensorCaptureThread
setScanParameters(bool fromDepth, int downsampleStep=1, float rangeMin=0.0f, float rangeMax=0.0f, float voxelSize=0.0f, int normalsK=0, float normalsRadius=0.0f, float groundNormalsUp=0.0f, bool deskewing=false)rtabmap::SensorCaptureThread
setStereoExposureCompensation(bool enabled)rtabmap::SensorCaptureThreadinline
setStereoToDepth(bool enabled)rtabmap::SensorCaptureThreadinline
start()UThread
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
TestCancel() (defined in UThreadC< void >)UThreadC< void >inlineprotectedstatic
UEventsSender() (defined in UEventsSender)UEventsSenderinline
UThread(Priority priority=kPNormal)UThread
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
UThreadC() (defined in UThreadC< void >)UThreadC< void >inlineprotected
~SensorCaptureThread()rtabmap::SensorCaptureThreadvirtual
~UEventsSender() (defined in UEventsSender)UEventsSendervirtual
~UThread()UThreadvirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
~UThreadC() (defined in UThreadC< void >)UThreadC< void >inlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread.html b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread.html new file mode 100644 index 00000000..5be825c3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread.html @@ -0,0 +1,1617 @@ + + + + + + + + +RTAB-Map: rtabmap::SensorCaptureThread Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SensorCaptureThread Class Reference
+
+
+ +

Thread-based sensor data capture and event posting for RTAB-Map. + More...

+ +

#include <SensorCaptureThread.h>

+
+Inheritance diagram for rtabmap::SensorCaptureThread:
+
+
Inheritance graph
+ + + + + + + + + +
[legend]
+
+Collaboration diagram for rtabmap::SensorCaptureThread:
+
+
Collaboration graph
+ + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SensorCaptureThread (Camera *camera, const ParametersMap &parameters=ParametersMap())
 Constructor for camera-only capture.
 
 SensorCaptureThread (Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())
 Constructor for camera with odometry sensor.
 
 SensorCaptureThread (Lidar *lidar, const ParametersMap &parameters=ParametersMap())
 Constructor for lidar-only capture.
 
 SensorCaptureThread (Lidar *lidar, Camera *camera, const ParametersMap &parameters=ParametersMap())
 Constructor for lidar with camera.
 
 SensorCaptureThread (Lidar *lidar, SensorCapture *odomSensor, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())
 Constructor for lidar with odometry sensor.
 
 SensorCaptureThread (Lidar *lidar, Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())
 Constructor for lidar with camera and odometry sensor.
 
virtual ~SensorCaptureThread ()
 Virtual destructor.
 
void setMirroringEnabled (bool enabled)
 Enables or disables image mirroring (horizontal flip)
 
void setStereoExposureCompensation (bool enabled)
 Enables or disables stereo exposure compensation.
 
void setColorOnly (bool colorOnly)
 Sets whether to capture color images only (skip depth)
 
void setImageDecimation (int decimation)
 Sets image decimation factor.
 
void setHistogramMethod (int histogramMethod)
 Sets histogram equalization method.
 
void setStereoToDepth (bool enabled)
 Enables or disables stereo-to-depth conversion.
 
void setFrameRate (float frameRate)
 Sets the target frame rate for capture.
 
RTABMAP_DEPRECATED void setImageRate (float frameRate)
 Sets the target image capture rate (deprecated)
 
void setDistortionModel (const std::string &path)
 Sets the depth distortion model file path.
 
void setOdomAsGroundTruth (bool enabled)
 Sets whether odometry poses should be treated as ground truth.
 
void enableBilateralFiltering (float sigmaS, float sigmaR)
 Enables bilateral filtering for depth images.
 
void disableBilateralFiltering ()
 Disables bilateral filtering.
 
void enableIMUFiltering (int filteringStrategy=1, const ParametersMap &parameters=ParametersMap(), bool baseFrameConversion=false)
 Enables IMU data filtering.
 
+void disableIMUFiltering ()
 Disables IMU data filtering.
 
void enableFeatureDetection (const ParametersMap &parameters=ParametersMap())
 Enables automatic feature detection on captured images.
 
+void disableFeatureDetection ()
 Disables automatic feature detection.
 
RTABMAP_DEPRECATED void setScanParameters (bool fromDepth, int downsampleStep, float rangeMin, float rangeMax, float voxelSize, int normalsK, float normalsRadius, bool forceGroundNormalsUp, bool deskewing)
 Sets lidar scan processing parameters (deprecated)
 
void setScanParameters (bool fromDepth, int downsampleStep=1, float rangeMin=0.0f, float rangeMax=0.0f, float voxelSize=0.0f, int normalsK=0, float normalsRadius=0.0f, float groundNormalsUp=0.0f, bool deskewing=false)
 Sets lidar scan processing parameters.
 
void postUpdate (SensorData *data, SensorCaptureInfo *info=0) const
 Post-processing hook called before posting SensorEvent.
 
bool isPaused () const
 Checks if the capture thread is paused.
 
bool isCapturing () const
 Checks if the capture thread is actively capturing.
 
bool odomProvided () const
 Checks if odometry is provided by the sensors.
 
Camera * camera ()
 Returns the camera pointer.
 
SensorCapture * odomSensor ()
 Returns the odometry sensor pointer.
 
Lidar * lidar ()
 Returns the lidar pointer.
 
- Public Member Functions inherited from UThread
 UThread (Priority priority=kPNormal)
 
virtual ~UThread ()
 
void start ()
 
void kill ()
 
void join (bool killFirst=false)
 
void setPriority (Priority priority)
 
void setAffinity (int cpu=0)
 
bool isCreating () const
 
bool isRunning () const
 
bool isIdle () const
 
bool isKilled () const
 
Handle getThreadHandle () const
 
unsigned long getThreadId () const
 
- Public Member Functions inherited from UThreadC< void >
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
int Create (unsigned long &ThreadId, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false) const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from UThread
enum  Priority {
+  kPLow +, kPBelowNormal +, kPNormal +, kPAboveNormal +,
+  kPRealTime +
+ }
 
- Public Types inherited from UThreadC< void >
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
typedef THREAD_HANDLE Handle
 
typedef void(* Handler) ()
 
- Static Public Member Functions inherited from UThread
static unsigned long currentThreadId ()
 
- Static Public Member Functions inherited from UThreadC< void >
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (Handle H)
 
static int Kill (Handle H)
 
static int Detach (Handle H)
 
static int Create (const Handler &Function, Handle *const &H=0, const bool &CreateDetached=false, const unsigned int &StackSize=0, const bool &CancelEnable=false, const bool &CancelAsync=false)
 
static int Join (const Handle &H)
 
static int Kill (const Handle &H)
 
static int Detach (const Handle &H)
 
- Protected Member Functions inherited from UEventsSender
void post (UEvent *event, bool async=true) const
 
- Static Protected Member Functions inherited from UThreadC< void >
static void Exit ()
 
static void TestCancel ()
 
static Handle Self ()
 
static void Exit ()
 
static void TestCancel ()
 
static int Self ()
 
+

Detailed Description

+

Thread-based sensor data capture and event posting for RTAB-Map.

+

SensorCaptureThread is a multi-threaded class that continuously captures sensor data from cameras and/or lidars in a background thread. It processes the data, optionally applies filtering and transformations, and posts SensorEvent events to registered handlers through RTAB-Map's event system.

+

The class supports various sensor configurations:

    +
  • Camera-only: Single or multiple cameras for RGB-D or stereo imaging
  • +
  • Lidar-only: Single lidar for 3D point cloud capture
  • +
  • Camera + Lidar: Combined visual and range sensing
  • +
  • With odometry: Optional odometry sensor for pose estimation and deskewing
  • +
+

Key features:

    +
  • Automatic data synchronization: Synchronizes camera and lidar data by timestamp
  • +
  • Deskewing: Corrects lidar scans using odometry poses
  • +
  • Image processing: Supports mirroring, decimation, histogram equalization, stereo-to-depth conversion
  • +
  • Depth filtering: Optional bilateral filtering for depth images
  • +
  • IMU filtering: Optional IMU data filtering and fusion
  • +
  • Feature detection: Optional automatic feature detection on captured images
  • +
  • Frame rate control: Configurable capture rate
  • +
  • Event-driven architecture: Posts SensorEvent events for downstream processing
  • +
+

The class inherits from UThread (for threading) and UEventsSender (for event posting).

+
Note
Ownership of Camera, Lidar, and SensorCapture pointers is transferred to this class.
+
+The thread must be started with start() and stopped with kill() or join().
+
Warning
Thread Safety: All configuration parameters (setters) should be called before starting the thread with start(). Changing configuration after the thread is started is not thread-safe and may lead to race conditions or undefined behavior. If you need to change parameters at runtime, stop the thread first, modify the configuration, then restart it.
+
See also
Camera
+
+Lidar
+
+SensorCapture
+
+SensorEvent
+
+SensorData
+
+UThread
+
+UEventsSender
+ +

Definition at line 97 of file SensorCaptureThread.h.

+

Constructor & Destructor Documentation

+ +

◆ SensorCaptureThread() [1/6]

+ +
+
+ + + + + + + + + + + + + + + + + + +
rtabmap::SensorCaptureThread::SensorCaptureThread (Camera * camera,
const ParametersMap & parameters = ParametersMap() 
)
+
+ +

Constructor for camera-only capture.

+

Creates a SensorCaptureThread that captures images from a single camera. The camera can be RGB-D, stereo, or mono.

+
Parameters
+ + + +
cameraPointer to the camera to capture from (ownership transferred)
parametersOptional parameters map for configuration
+
+
+
Note
The camera pointer is owned by this class and will be deleted on destruction.
+ +
+
+ +

◆ SensorCaptureThread() [2/6]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorCaptureThread::SensorCaptureThread (Camera * camera,
SensorCapture * odomSensor,
const Transform & extrinsics,
double poseTimeOffset = 0.0,
float poseScaleFactor = 1.0f,
double poseWaitTime = 0.1,
const ParametersMap & parameters = ParametersMap() 
)
+
+ +

Constructor for camera with odometry sensor.

+

Creates a SensorCaptureThread that captures images from a camera and uses an odometry sensor for pose estimation. The odometry sensor can be the same as the camera or a different sensor.

+
Parameters
+ + + + + + + + +
cameraPointer to the camera to capture images from (ownership transferred)
odomSensorPointer to the odometry sensor for pose estimation (can be the same as camera)
extrinsicsStatic transform from odometry sensor's left lens frame to camera's left lens frame (without optical rotation applied)
poseTimeOffsetTime offset in seconds to add to data timestamp when querying pose (default: 0.0)
poseScaleFactorScale factor to apply to pose translation (default: 1.0, no scaling)
poseWaitTimeMaximum time in seconds to wait for pose data (default: 0.1)
parametersOptional parameters map for configuration
+
+
+
Note
If odomAsGt is set to true via setOdomAsGroundTruth(), the odometry pose will be used as ground truth instead of odometry.
+ +
+
+ +

◆ SensorCaptureThread() [3/6]

+ +
+
+ + + + + + + + + + + + + + + + + + +
rtabmap::SensorCaptureThread::SensorCaptureThread (Lidar * lidar,
const ParametersMap & parameters = ParametersMap() 
)
+
+ +

Constructor for lidar-only capture.

+

Creates a SensorCaptureThread that captures 3D point clouds from a lidar.

+
Parameters
+ + + +
lidarPointer to the lidar to capture scans from (ownership transferred)
parametersOptional parameters map for configuration
+
+
+
Note
The lidar pointer is owned by this class and will be deleted on destruction.
+ +
+
+ +

◆ SensorCaptureThread() [4/6]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorCaptureThread::SensorCaptureThread (Lidar * lidar,
Camera * camera,
const ParametersMap & parameters = ParametersMap() 
)
+
+ +

Constructor for lidar with camera.

+

Creates a SensorCaptureThread that captures both lidar scans and camera images. If the camera provides pose information, it can be used for deskewing lidar scans.

+
Parameters
+ + + + +
lidarPointer to the lidar to capture scans from (ownership transferred)
cameraPointer to the camera to capture images from (ownership transferred). If the camera provides pose, it can be used for deskewing.
parametersOptional parameters map for configuration
+
+
+ +
+
+ +

◆ SensorCaptureThread() [5/6]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorCaptureThread::SensorCaptureThread (Lidar * lidar,
SensorCapture * odomSensor,
double poseTimeOffset = 0.0,
float poseScaleFactor = 1.0f,
double poseWaitTime = 0.1,
const ParametersMap & parameters = ParametersMap() 
)
+
+ +

Constructor for lidar with odometry sensor.

+

Creates a SensorCaptureThread that captures lidar scans and uses an odometry sensor for pose estimation and deskewing. The odometry sensor can be the same as the lidar or a different sensor.

+
Parameters
+ + + + + + + +
lidarPointer to the lidar to capture scans from (ownership transferred)
odomSensorPointer to the odometry sensor for pose estimation and deskewing (can be the same as lidar)
poseTimeOffsetTime offset in seconds to add to data timestamp when querying pose (default: 0.0)
poseScaleFactorScale factor to apply to pose translation (default: 1.0, no scaling)
poseWaitTimeMaximum time in seconds to wait for pose data (default: 0.1)
parametersOptional parameters map for configuration
+
+
+
Note
Deskewing is enabled by default when an odometry sensor is provided. Use setScanParameters() to configure deskewing behavior.
+
+The lidar's local transform should be set as the extrinsics between odometry sensor's frame and lidar's frame.
+ +
+
+ +

◆ SensorCaptureThread() [6/6]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorCaptureThread::SensorCaptureThread (Lidar * lidar,
Camera * camera,
SensorCapture * odomSensor,
const Transform & extrinsics,
double poseTimeOffset = 0.0,
float poseScaleFactor = 1.0f,
double poseWaitTime = 0.1,
const ParametersMap & parameters = ParametersMap() 
)
+
+ +

Constructor for lidar with camera and odometry sensor.

+

Creates a SensorCaptureThread that captures both lidar scans and camera images, and uses an odometry sensor for pose estimation and deskewing. This is the most comprehensive configuration, supporting multi-modal sensing with pose correction.

+
Parameters
+ + + + + + + + + +
lidarPointer to the lidar to capture scans from (ownership transferred)
cameraPointer to the camera to capture images from (ownership transferred)
odomSensorPointer to the odometry sensor for pose estimation and deskewing (can be the same as camera or lidar)
extrinsicsStatic transform from odometry frame to camera frame (without optical rotation applied)
poseTimeOffsetTime offset in seconds to add to data timestamp when querying pose (default: 0.0)
poseScaleFactorScale factor to apply to pose translation (default: 1.0, no scaling)
poseWaitTimeMaximum time in seconds to wait for pose data (default: 0.1)
parametersOptional parameters map for configuration
+
+
+
Note
The camera and lidar data are synchronized by timestamp, with the camera frame being at least as recent as the lidar frame.
+
+The lidar's local transform should be set as the extrinsics between odometry sensor's frame and lidar's frame.
+ +
+
+ +

◆ ~SensorCaptureThread()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::SensorCaptureThread::~SensorCaptureThread ()
+
+virtual
+
+ +

Virtual destructor.

+

Stops the capture thread if running and deletes owned sensor pointers.

+ +
+
+

Member Function Documentation

+ +

◆ setMirroringEnabled()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorCaptureThread::setMirroringEnabled (bool enabled)
+
+inline
+
+ +

Enables or disables image mirroring (horizontal flip)

+
Parameters
+ + +
enabledTrue to enable mirroring, false to disable
+
+
+ +

Definition at line 245 of file SensorCaptureThread.h.

+ +
+
+ +

◆ setStereoExposureCompensation()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorCaptureThread::setStereoExposureCompensation (bool enabled)
+
+inline
+
+ +

Enables or disables stereo exposure compensation.

+

When enabled, adjusts exposure between left and right stereo cameras to improve matching quality.

+
Parameters
+ + +
enabledTrue to enable exposure compensation, false to disable
+
+
+ +

Definition at line 255 of file SensorCaptureThread.h.

+ +
+
+ +

◆ setColorOnly()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorCaptureThread::setColorOnly (bool colorOnly)
+
+inline
+
+ +

Sets whether to capture color images only (skip depth)

+
Parameters
+ + +
colorOnlyTrue to capture color only, false to capture both color and depth
+
+
+ +

Definition at line 261 of file SensorCaptureThread.h.

+ +
+
+ +

◆ setImageDecimation()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorCaptureThread::setImageDecimation (int decimation)
+
+inline
+
+ +

Sets image decimation factor.

+

Decimation reduces image resolution by skipping pixels. A decimation of N means every Nth pixel is kept (e.g., 2 = half resolution, 4 = quarter resolution).

+
Parameters
+ + +
decimationDecimation factor (1 = no decimation, 2 = half resolution, etc.)
+
+
+ +

Definition at line 271 of file SensorCaptureThread.h.

+ +
+
+ +

◆ setHistogramMethod()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorCaptureThread::setHistogramMethod (int histogramMethod)
+
+inline
+
+ +

Sets histogram equalization method.

+

Controls the type of histogram equalization applied to captured images. Histogram equalization improves image contrast by redistributing pixel intensities.

+
Parameters
+ + +
histogramMethodHistogram equalization method:
    +
  • 0 = None (disabled)
  • +
  • 1 = Standard histogram equalization (cv::equalizeHist)
  • +
  • 2 = CLAHE - Contrast Limited Adaptive Histogram Equalization (cv::createCLAHE)
  • +
+
+
+
+
Note
For color images, histogram equalization is applied only to the luminance channel (Y in YCrCb color space).
+
+For stereo images, histogram equalization is applied to both left and right images.
+ +

Definition at line 287 of file SensorCaptureThread.h.

+ +
+
+ +

◆ setStereoToDepth()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorCaptureThread::setStereoToDepth (bool enabled)
+
+inline
+
+ +

Enables or disables stereo-to-depth conversion.

+

When enabled, converts stereo images to depth images using dense stereo matching.

+
Parameters
+ + +
enabledTrue to enable stereo-to-depth conversion, false to disable
+
+
+ +

Definition at line 296 of file SensorCaptureThread.h.

+ +
+
+ +

◆ setFrameRate()

+ +
+
+ + + + + + + + +
void rtabmap::SensorCaptureThread::setFrameRate (float frameRate)
+
+ +

Sets the target frame rate for capture.

+

Controls how often the capture loop runs. A frame rate of 0 means capture as fast as possible.

+
Parameters
+ + +
frameRateTarget frame rate in Hz (0 = unlimited)
+
+
+ +
+
+ +

◆ setImageRate()

+ +
+
+ + + + + +
+ + + + + + + + +
RTABMAP_DEPRECATED void rtabmap::SensorCaptureThread::setImageRate (float frameRate)
+
+inline
+
+ +

Sets the target image capture rate (deprecated)

+
Deprecated:
Use setFrameRate() instead
+ +

Definition at line 312 of file SensorCaptureThread.h.

+ +
+
+ +

◆ setDistortionModel()

+ +
+
+ + + + + + + + +
void rtabmap::SensorCaptureThread::setDistortionModel (const std::string & path)
+
+ +

Sets the depth distortion model file path.

+

Loads a discrete depth distortion model from the specified file path. This is used to correct systematic depth errors at longer ranges using the CLAMS (Calibration, Localization, And Mapping System) approach.

+

The distortion model is typically created using RTAB-Map's depth calibration tool, which uses visual odometry and 3D mapping to generate ground truth depth for calibration.

+
Parameters
+ + +
pathPath to the distortion model file
+
+
+
See also
https://github.com/introlab/rtabmap/wiki/Depth-Calibration for detailed instructions on how to create and use depth distortion models
+ +
+
+ +

◆ setOdomAsGroundTruth()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorCaptureThread::setOdomAsGroundTruth (bool enabled)
+
+inline
+
+ +

Sets whether odometry poses should be treated as ground truth.

+

When enabled, odometry poses from the odometry sensor are stored as ground truth poses instead of odometry poses in the SensorData.

+
Parameters
+ + +
enabledTrue to use odometry as ground truth, false to use as odometry
+
+
+ +

Definition at line 340 of file SensorCaptureThread.h.

+ +
+
+ +

◆ enableBilateralFiltering()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::SensorCaptureThread::enableBilateralFiltering (float sigmaS,
float sigmaR 
)
+
+ +

Enables bilateral filtering for depth images.

+

Bilateral filtering reduces noise in depth images while preserving edges.

+
Parameters
+ + + +
sigmaSSpatial standard deviation (pixels)
sigmaRRange standard deviation (depth units)
+
+
+ +
+
+ +

◆ disableBilateralFiltering()

+ +
+
+ + + + + +
+ + + + + + + +
void rtabmap::SensorCaptureThread::disableBilateralFiltering ()
+
+inline
+
+ +

Disables bilateral filtering.

+ +

Definition at line 355 of file SensorCaptureThread.h.

+ +
+
+ +

◆ enableIMUFiltering()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::SensorCaptureThread::enableIMUFiltering (int filteringStrategy = 1,
const ParametersMap & parameters = ParametersMap(),
bool baseFrameConversion = false 
)
+
+ +

Enables IMU data filtering.

+

Enables filtering and fusion of IMU data from the sensor. The filtering strategy determines how IMU data is processed to estimate orientation.

+
Parameters
+ + + + +
filteringStrategyFiltering strategy:
    +
  • 0 = Madgwick filter (requires RTAB-Map built with RTABMAP_MADGWICK option)
  • +
  • 1 = Complementary filter (default)
  • +
+
parametersOptional parameters map for IMU filter configuration
baseFrameConversionIf true, converts IMU data to base frame
+
+
+
Note
If Madgwick filter is requested but RTAB-Map is not built with the option enabled, the Complementary filter will be used instead.
+
See also
IMUFilter
+ +
+
+ +

◆ enableFeatureDetection()

+ +
+
+ + + + + + + + +
void rtabmap::SensorCaptureThread::enableFeatureDetection (const ParametersMap & parameters = ParametersMap())
+
+ +

Enables automatic feature detection on captured images.

+

When enabled, automatically detects and extracts visual features (keypoints, descriptors) from captured images.

+
Parameters
+ + +
parametersOptional parameters map for feature detector configuration. Parameters from the "Vis/" group (e.g., Vis/FeatureType, Vis/MaxFeatures) are automatically converted to "Kp/" parameters internally. If both Vis/ and Kp/ parameters are provided, Vis/ parameters take precedence.
+
+
+
Note
The function converts Vis/ parameters to Kp/ parameters before creating the Feature2D detector.
+ +
+
+ +

◆ setScanParameters() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RTABMAP_DEPRECATED void rtabmap::SensorCaptureThread::setScanParameters (bool fromDepth,
int downsampleStep,
float rangeMin,
float rangeMax,
float voxelSize,
int normalsK,
float normalsRadius,
bool forceGroundNormalsUp,
bool deskewing 
)
+
+ +

Sets lidar scan processing parameters (deprecated)

+
Deprecated:
Use the new version with groundNormalsUp parameter instead
+

Use the new version with groundNormalsUp parameter:

    +
  • groundNormalsUp=0.8 for forceGroundNormalsUp=True
  • +
  • groundNormalsUp=0.0 for forceGroundNormalsUp=False
  • +
+ +
+
+ +

◆ setScanParameters() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::SensorCaptureThread::setScanParameters (bool fromDepth,
int downsampleStep = 1,
float rangeMin = 0.0f,
float rangeMax = 0.0f,
float voxelSize = 0.0f,
int normalsK = 0,
float normalsRadius = 0.0f,
float groundNormalsUp = 0.0f,
bool deskewing = false 
)
+
+ +

Sets lidar scan processing parameters.

+

Configures how lidar scans are processed, including conversion from depth images, filtering, normal estimation, and deskewing.

+
Parameters
+ + + + + + + + + + +
fromDepthIf true, generate scans from depth images instead of raw lidar data
downsampleStepDownsampling step:
    +
  • If fromDepth is true: Image decimation step for depth images (1 = no decimation, 2 = every other pixel in both dimensions, etc.)
  • +
  • If fromDepth is false: Point skipping step for laser scan data (1 = no skipping, 2 = every other point, etc.)
  • +
+
rangeMinMinimum range in meters (points closer are filtered out, 0 = no minimum)
rangeMaxMaximum range in meters (points farther are filtered out, 0 = no maximum)
voxelSizeVoxel size in meters for downsampling (0 = no voxelization)
normalsKNumber of neighbors for K-nearest neighbors normal estimation (0 = no normals)
normalsRadiusRadius in meters for radius-based normal estimation (0 = use K-nearest)
groundNormalsUpThreshold for forcing ground normals upward (0.0-1.0, 0.8 = strong, 0.0 = disabled)
deskewingIf true, apply deskewing using odometry poses
+
+
+ +
+
+ +

◆ postUpdate()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::SensorCaptureThread::postUpdate (SensorData * data,
SensorCaptureInfo * info = 0 
) const
+
+ +

Post-processing hook called before posting SensorEvent.

+

This method is called after all processing is complete but before the SensorEvent is posted. Derived classes can override this to perform additional processing or modifications to the data.

+
Parameters
+ + + +
dataPointer to the processed sensor data (can be modified)
infoPointer to the sensor capture info (can be modified, may be null)
+
+
+ +
+
+ +

◆ isPaused()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::SensorCaptureThread::isPaused () const
+
+inline
+
+ +

Checks if the capture thread is paused.

+
Returns
True if paused (not running), false if running
+ +

Definition at line 469 of file SensorCaptureThread.h.

+ +
+
+ +

◆ isCapturing()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::SensorCaptureThread::isCapturing () const
+
+inline
+
+ +

Checks if the capture thread is actively capturing.

+
Returns
True if capturing (running), false if not running
+ +

Definition at line 475 of file SensorCaptureThread.h.

+ +
+
+ +

◆ odomProvided()

+ +
+
+ + + + + + + +
bool rtabmap::SensorCaptureThread::odomProvided () const
+
+ +

Checks if odometry is provided by the sensors.

+
Returns
True if an odometry sensor is configured, false otherwise
+ +
+
+ +

◆ camera()

+ +
+
+ + + + + +
+ + + + + + + +
Camera * rtabmap::SensorCaptureThread::camera ()
+
+inline
+
+ +

Returns the camera pointer.

+
Returns
Pointer to the camera (null if not set). Valid until SensorCaptureThread is deleted.
+ +

Definition at line 487 of file SensorCaptureThread.h.

+ +
+
+ +

◆ odomSensor()

+ +
+
+ + + + + +
+ + + + + + + +
SensorCapture * rtabmap::SensorCaptureThread::odomSensor ()
+
+inline
+
+ +

Returns the odometry sensor pointer.

+
Returns
Pointer to the odometry sensor (null if not set). Valid until SensorCaptureThread is deleted.
+ +

Definition at line 493 of file SensorCaptureThread.h.

+ +
+
+ +

◆ lidar()

+ +
+
+ + + + + +
+ + + + + + + +
Lidar * rtabmap::SensorCaptureThread::lidar ()
+
+inline
+
+ +

Returns the lidar pointer.

+
Returns
Pointer to the lidar (null if not set). Valid until SensorCaptureThread is deleted.
+ +

Definition at line 499 of file SensorCaptureThread.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.map new file mode 100644 index 00000000..3367f11e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.md5 new file mode 100644 index 00000000..b569d1da --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.md5 @@ -0,0 +1 @@ +c3591c70239d3706cac3c4c234c63d6b \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9bbc532e3f5a17335e60d5a18d038652fe374a63 GIT binary patch literal 9602 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.map new file mode 100644 index 00000000..3367f11e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.md5 new file mode 100644 index 00000000..b569d1da --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.md5 @@ -0,0 +1 @@ +c3591c70239d3706cac3c4c234c63d6b \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCaptureThread__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9bbc532e3f5a17335e60d5a18d038652fe374a63 GIT binary patch literal 9602 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.map new file mode 100644 index 00000000..ccc1d967 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.map @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.md5 new file mode 100644 index 00000000..6733a402 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.md5 @@ -0,0 +1 @@ +1fd499c5dc390fc0c5deb0ff559d5bc4 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SensorCapture__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb4f268f1fbbcfea39c7d84555a553eed6951f5 GIT binary patch literal 139601 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorData-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1SensorData-members.html new file mode 100644 index 00000000..e789fa93 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorData-members.html @@ -0,0 +1,182 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +

+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SensorData Member List
+
+
+ +

This is the complete list of members for rtabmap::SensorData, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addEnvSensor(const EnvSensor &sensor)rtabmap::SensorDatainline
addGlobalDescriptor(const GlobalDescriptor &descriptor)rtabmap::SensorDatainline
cameraModels() constrtabmap::SensorDatainline
clearCompressedData(bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true)rtabmap::SensorData
clearGlobalDescriptors()rtabmap::SensorDatainline
clearRawData(bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true)rtabmap::SensorData
depthConfidenceCompressed() constrtabmap::SensorDatainline
depthConfidenceRaw() constrtabmap::SensorDatainline
depthOrRightCompressed() constrtabmap::SensorDatainline
depthOrRightRaw() constrtabmap::SensorDatainline
depthRaw() constrtabmap::SensorDatainline
descriptors() constrtabmap::SensorDatainline
envSensors() constrtabmap::SensorDatainline
getMemoryUsed() constrtabmap::SensorData
globalDescriptors() constrtabmap::SensorDatainline
globalPose() constrtabmap::SensorDatainline
globalPoseCovariance() constrtabmap::SensorDatainline
gps() constrtabmap::SensorDatainline
gridCellSize() constrtabmap::SensorDatainline
gridEmptyCellsCompressed() constrtabmap::SensorDatainline
gridEmptyCellsRaw() constrtabmap::SensorDatainline
gridGroundCellsCompressed() constrtabmap::SensorDatainline
gridGroundCellsRaw() constrtabmap::SensorDatainline
gridObstacleCellsCompressed() constrtabmap::SensorDatainline
gridObstacleCellsRaw() constrtabmap::SensorDatainline
gridViewPoint() constrtabmap::SensorDatainline
groundTruth() constrtabmap::SensorDatainline
id() constrtabmap::SensorDatainline
imageCompressed() constrtabmap::SensorDatainline
imageRaw() constrtabmap::SensorDatainline
imu() constrtabmap::SensorDatainline
isPointVisibleFromCameras(const cv::Point3f &pt) constrtabmap::SensorData
isValid() constrtabmap::SensorDatainline
keypoints() constrtabmap::SensorDatainline
keypoints3D() constrtabmap::SensorDatainline
landmarks() constrtabmap::SensorDatainline
laserScanCompressed() constrtabmap::SensorDatainline
laserScanRaw() constrtabmap::SensorDatainline
rightRaw() constrtabmap::SensorDatainline
SensorData()rtabmap::SensorData
SensorData(const cv::Mat &image, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())rtabmap::SensorData
SensorData(const cv::Mat &image, const CameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
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())rtabmap::SensorData
SensorData(const IMU &imu, int id=0, double stamp=0.0)rtabmap::SensorData
setCameraModel(const CameraModel &model)rtabmap::SensorDatainline
setCameraModels(const std::vector< CameraModel > &models)rtabmap::SensorDatainline
setDepthOrRightRaw(const cv::Mat &image) (defined in rtabmap::SensorData)rtabmap::SensorData
setEnvSensors(const EnvSensors &sensors)rtabmap::SensorDatainline
setFeatures(const std::vector< cv::KeyPoint > &keypoints, const std::vector< cv::Point3f > &keypoints3D, const cv::Mat &descriptors)rtabmap::SensorData
setGlobalDescriptors(const std::vector< GlobalDescriptor > &descriptors)rtabmap::SensorDatainline
setGlobalPose(const Transform &pose, const cv::Mat &covariance)rtabmap::SensorDatainline
setGPS(const GPS &gps)rtabmap::SensorDatainline
setGroundTruth(const Transform &pose)rtabmap::SensorDatainline
setId(int id)rtabmap::SensorDatainline
setImageRaw(const cv::Mat &image) (defined in rtabmap::SensorData)rtabmap::SensorData
setIMU(const IMU &imu)rtabmap::SensorData
setLandmarks(const Landmarks &landmarks)rtabmap::SensorDatainline
setLaserScan(const LaserScan &laserScan, bool clearPreviousData=true)rtabmap::SensorData
setLaserScanRaw(const LaserScan &scan) (defined in rtabmap::SensorData)rtabmap::SensorData
setOccupancyGrid(const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint)rtabmap::SensorData
setRGBDImage(const cv::Mat &rgb, const cv::Mat &depth, const CameraModel &model, bool clearPreviousData=true)rtabmap::SensorData
setRGBDImage(const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &depth_confidence, const CameraModel &model, bool clearPreviousData=true) (defined in rtabmap::SensorData)rtabmap::SensorData
setRGBDImage(const cv::Mat &rgb, const cv::Mat &depth, const std::vector< CameraModel > &models, bool clearPreviousData=true) (defined in rtabmap::SensorData)rtabmap::SensorData
setRGBDImage(const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &depth_confidence, const std::vector< CameraModel > &models, bool clearPreviousData=true) (defined in rtabmap::SensorData)rtabmap::SensorData
setStamp(double stamp)rtabmap::SensorDatainline
setStereoCameraModel(const StereoCameraModel &stereoCameraModel)rtabmap::SensorDatainline
setStereoCameraModels(const std::vector< StereoCameraModel > &stereoCameraModels)rtabmap::SensorDatainline
setStereoImage(const cv::Mat &left, const cv::Mat &right, const StereoCameraModel &stereoCameraModel, bool clearPreviousData=true) (defined in rtabmap::SensorData)rtabmap::SensorData
setStereoImage(const cv::Mat &left, const cv::Mat &right, const std::vector< StereoCameraModel > &stereoCameraModels, bool clearPreviousData=true) (defined in rtabmap::SensorData)rtabmap::SensorData
setUserData(const cv::Mat &userData, bool clearPreviousData=true)rtabmap::SensorData
setUserDataRaw(const cv::Mat &data) (defined in rtabmap::SensorData)rtabmap::SensorData
stamp() constrtabmap::SensorDatainline
stereoCameraModels() constrtabmap::SensorDatainline
uncompressData()rtabmap::SensorData
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)rtabmap::SensorData
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) constrtabmap::SensorData
userDataCompressed() const (defined in rtabmap::SensorData)rtabmap::SensorDatainline
userDataRaw() const (defined in rtabmap::SensorData)rtabmap::SensorDatainline
~SensorData()rtabmap::SensorDatavirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorData.html b/preview/pr-1492/api/latest/classrtabmap_1_1SensorData.html new file mode 100644 index 00000000..d21ffc75 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorData.html @@ -0,0 +1,3691 @@ + + + + + + + + +RTAB-Map: rtabmap::SensorData Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SensorData Class Reference
+
+
+ +

Container class for all sensor data captured at a specific time. + More...

+ +

#include <SensorData.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SensorData ()
 Default constructor.
 
 SensorData (const cv::Mat &image, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
 Appearance-only constructor.
 
 SensorData (const cv::Mat &image, const CameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
 Mono camera constructor.
 
 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.
 
 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.
 
 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.
 
 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.
 
 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.
 
 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.
 
 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 &left, const cv::Mat &right, const StereoCameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())
 Stereo camera constructor.
 
 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 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.
 
 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.
 
 SensorData (const IMU &imu, int id=0, double stamp=0.0)
 IMU-only constructor.
 
+virtual ~SensorData ()
 Virtual destructor.
 
bool isValid () const
 Checks if the sensor data is valid.
 
int id () const
 Returns the sensor data ID.
 
void setId (int id)
 Sets the sensor data ID.
 
double stamp () const
 Returns the timestamp.
 
void setStamp (double stamp)
 Sets the timestamp.
 
const cv::Mat & imageCompressed () const
 Returns the compressed RGB/grayscale image.
 
const cv::Mat & depthOrRightCompressed () const
 Returns the compressed depth or right stereo image.
 
const cv::Mat & depthConfidenceCompressed () const
 Returns the compressed depth confidence map.
 
const LaserScan & laserScanCompressed () const
 Returns the compressed laser scan.
 
const cv::Mat & imageRaw () const
 Returns the raw RGB/grayscale image.
 
const cv::Mat & depthOrRightRaw () const
 Returns the raw depth or right stereo image.
 
const cv::Mat & depthConfidenceRaw () const
 Returns the raw depth confidence map.
 
const LaserScan & laserScanRaw () const
 Returns the raw laser scan.
 
void setRGBDImage (const cv::Mat &rgb, const cv::Mat &depth, const CameraModel &model, bool clearPreviousData=true)
 
+void setRGBDImage (const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &depth_confidence, const CameraModel &model, bool clearPreviousData=true)
 
+void setRGBDImage (const cv::Mat &rgb, const cv::Mat &depth, const std::vector< CameraModel > &models, bool clearPreviousData=true)
 
+void setRGBDImage (const cv::Mat &rgb, const cv::Mat &depth, const cv::Mat &depth_confidence, const std::vector< CameraModel > &models, bool clearPreviousData=true)
 
+void setStereoImage (const cv::Mat &left, const cv::Mat &right, const StereoCameraModel &stereoCameraModel, bool clearPreviousData=true)
 
+void setStereoImage (const cv::Mat &left, const cv::Mat &right, const std::vector< StereoCameraModel > &stereoCameraModels, bool clearPreviousData=true)
 
void setLaserScan (const LaserScan &laserScan, bool clearPreviousData=true)
 
void setCameraModel (const CameraModel &model)
 Sets a single camera model (clears previous models)
 
void setCameraModels (const std::vector< CameraModel > &models)
 Sets multiple camera models.
 
void setStereoCameraModel (const StereoCameraModel &stereoCameraModel)
 Sets a single stereo camera model (clears previous models)
 
void setStereoCameraModels (const std::vector< StereoCameraModel > &stereoCameraModels)
 Sets multiple stereo camera models.
 
cv::Mat depthRaw () const
 Returns the depth image (convenience method)
 
cv::Mat rightRaw () const
 Returns the right stereo image (convenience method)
 
+RTABMAP_DEPRECATED void setImageRaw (const cv::Mat &image)
 
+RTABMAP_DEPRECATED void setDepthOrRightRaw (const cv::Mat &image)
 
+RTABMAP_DEPRECATED void setLaserScanRaw (const LaserScan &scan)
 
+RTABMAP_DEPRECATED void setUserDataRaw (const cv::Mat &data)
 
void uncompressData ()
 Uncompresses all compressed data in-place.
 
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 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)
 
const std::vector< CameraModel > & cameraModels () const
 Returns the camera models.
 
const std::vector< StereoCameraModel > & stereoCameraModels () const
 Returns the stereo camera models.
 
void setUserData (const cv::Mat &userData, bool clearPreviousData=true)
 
const cv::Mat & userDataRaw () const
 
const cv::Mat & userDataCompressed () const
 
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 & gridGroundCellsRaw () const
 Returns raw ground cells.
 
const cv::Mat & gridGroundCellsCompressed () const
 Returns compressed ground cells.
 
const cv::Mat & gridObstacleCellsRaw () const
 Returns raw obstacle cells.
 
const cv::Mat & gridObstacleCellsCompressed () const
 Returns compressed obstacle cells.
 
const cv::Mat & gridEmptyCellsRaw () const
 Returns raw empty cells.
 
const cv::Mat & gridEmptyCellsCompressed () const
 Returns compressed empty cells.
 
float gridCellSize () const
 Returns the occupancy grid cell size.
 
const cv::Point3f & gridViewPoint () const
 Returns the occupancy grid viewpoint.
 
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)
 
const std::vector< cv::KeyPoint > & keypoints () const
 Returns the 2D keypoints.
 
const std::vector< cv::Point3f > & keypoints3D () const
 Returns the 3D keypoints.
 
const cv::Mat & descriptors () const
 Returns the feature descriptors.
 
void addGlobalDescriptor (const GlobalDescriptor &descriptor)
 Adds a global descriptor.
 
void setGlobalDescriptors (const std::vector< GlobalDescriptor > &descriptors)
 Sets all global descriptors.
 
void clearGlobalDescriptors ()
 Clears all global descriptors.
 
const std::vector< GlobalDescriptor > & globalDescriptors () const
 Returns all global descriptors.
 
void setGroundTruth (const Transform &pose)
 Sets the ground truth pose.
 
const Transform & groundTruth () const
 Returns the ground truth pose.
 
void setGlobalPose (const Transform &pose, const cv::Mat &covariance)
 Sets the global pose with covariance.
 
const Transform & globalPose () const
 Returns the global pose.
 
const cv::Mat & globalPoseCovariance () const
 Returns the global pose covariance.
 
void setGPS (const GPS &gps)
 Sets GPS data.
 
const GPS & gps () const
 Returns GPS data.
 
void setIMU (const IMU &imu)
 Sets IMU data.
 
const IMU & imu () const
 Returns IMU data.
 
void setEnvSensors (const EnvSensors &sensors)
 Sets all environmental sensors.
 
void addEnvSensor (const EnvSensor &sensor)
 Adds a single environmental sensor.
 
const EnvSensors & envSensors () const
 Returns all environmental sensors.
 
void setLandmarks (const Landmarks &landmarks)
 Sets landmarks.
 
const Landmarks & landmarks () const
 Returns landmarks.
 
unsigned long getMemoryUsed () const
 Computes the memory usage of this sensor data.
 
void clearCompressedData (bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true)
 
void clearRawData (bool images=true, bool scan=true, bool userData=true, bool occupancyGrid=true)
 
int isPointVisibleFromCameras (const cv::Point3f &pt) const
 Checks if a 3D point is visible from any camera.
 
+

Detailed Description

+

Container class for all sensor data captured at a specific time.

+

SensorData is a comprehensive container class that holds all types of sensor data captured at a specific timestamp, including:

+
    +
  • Visual data: RGB images, depth images, stereo image pairs (left/right)
  • +
  • 3D data: Laser scans, 3D point clouds
  • +
  • Camera models: Mono camera models, stereo camera models (single or multiple)
  • +
  • Features: Keypoints, 3D keypoints, descriptors
  • +
  • Global descriptors: Scene-level descriptors for place recognition
  • +
  • Sensor fusion: IMU data, GPS data, environmental sensors
  • +
  • Metadata: Ground truth poses, global poses with covariance, landmarks
  • +
  • User data: Custom data matrices
  • +
  • Occupancy grids: Ground, obstacle, and empty cells
  • +
+

The class supports both raw and compressed data formats:

    +
  • Raw data: Uncompressed images, depth maps, laser scans
  • +
  • Compressed data: JPEG-compressed images, compressed depth, compressed scans
  • +
+

Data compression is automatically detected when setting data:

    +
  • A matrix of type CV_8UC1 with 1 row is considered compressed
  • +
  • Use uncompressData() to decompress compressed data
  • +
+

The class supports multiple sensor configurations:

    +
  • Appearance-only: Single RGB image
  • +
  • Mono: RGB image with camera model
  • +
  • RGB-D: RGB + depth with camera model(s)
  • +
  • Stereo: Left + right images with stereo camera model(s)
  • +
  • IMU-only: IMU data without images
  • +
  • Multi-camera: Multiple camera models (RGB-D or stereo)
  • +
  • Combined: Any combination with laser scans, IMU, GPS, etc.
  • +
+
Note
If id=0 is provided to constructors, an ID is automatically generated.
+
+The class manages memory efficiently by storing either raw or compressed data (or both), allowing for memory optimization in large datasets.
+
See also
CameraModel
+
+StereoCameraModel
+
+LaserScan
+
+IMU
+
+GPS
+
+SensorEvent
+ +

Definition at line 96 of file SensorData.h.

+

Constructor & Destructor Documentation

+ +

◆ SensorData() [1/16]

+ +
+
+ + + + + + + +
rtabmap::SensorData::SensorData ()
+
+ +

Default constructor.

+

Creates an empty SensorData object with all fields initialized to default values. The ID will be 0 (invalid), and no sensor data will be present.

+ +
+
+ +

◆ SensorData() [2/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::SensorData (const cv::Mat & image,
int id = 0,
double stamp = 0.0,
const cv::Mat & userData = cv::Mat() 
)
+
+ +

Appearance-only constructor.

+

Creates a SensorData object with a single RGB or grayscale image. No camera model is provided, so this is suitable for appearance-based place recognition without 3D reconstruction.

+
Parameters
+ + + + + +
imageRGB or grayscale image (CV_8UC1 or CV_8UC3)
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+ +
+
+ +

◆ SensorData() [3/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::SensorData (const cv::Mat & image,
const CameraModel & cameraModel,
int id = 0,
double stamp = 0.0,
const cv::Mat & userData = cv::Mat() 
)
+
+ +

Mono camera constructor.

+

Creates a SensorData object with a single RGB or grayscale image and a mono camera model for 3D projection.

+
Parameters
+ + + + + + +
imageRGB or grayscale image (CV_8UC1 or CV_8UC3)
cameraModelCamera model for the image
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+ +
+
+ +

◆ SensorData() [4/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with RGB and depth images and a camera model.

+
Parameters
+ + + + + + + +
rgbRGB or grayscale image (CV_8UC1 or CV_8UC3)
depthDepth image (CV_16UC1 for millimeters or CV_32FC1 for meters)
cameraModelCamera model for RGB-D projection
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+ +
+
+ +

◆ SensorData() [5/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with RGB, depth, and depth confidence images.

+
Parameters
+ + + + + + + + +
rgbRGB or grayscale image (CV_8UC1 or CV_8UC3)
depthDepth image (CV_16UC1 for millimeters or CV_32FC1 for meters)
depth_confidenceDepth confidence map (CV_8UC1, typically 0-100)
cameraModelCamera model for RGB-D projection
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+ +
+
+ +

◆ SensorData() [6/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with RGB, depth, camera model, and laser scan.

+
Parameters
+ + + + + + + + +
laserScan2D or 3D laser scan
rgbRGB or grayscale image (CV_8UC1 or CV_8UC3)
depthDepth image (CV_16UC1 for millimeters or CV_32FC1 for meters)
cameraModelCamera model for RGB-D projection
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+ +
+
+ +

◆ SensorData() [7/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with RGB, depth, depth confidence, camera model, and laser scan.

+
Parameters
+ + + + + + + + + +
laserScan2D or 3D laser scan
rgbRGB or grayscale image (CV_8UC1 or CV_8UC3)
depthDepth image (CV_16UC1 for millimeters or CV_32FC1 for meters)
depthConfidenceDepth confidence map (CV_8UC1)
cameraModelCamera model for RGB-D projection
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+ +
+
+ +

◆ SensorData() [8/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with RGB, depth, and multiple camera models. rgb and depth images should contain stitched images from multiple cameras. All stitched images should have the same resolution.

+
Parameters
+ + + + + + + +
rgbRGB or grayscale image (CV_8UC1 or CV_8UC3)
depthDepth image (CV_16UC1 for millimeters or CV_32FC1 for meters)
cameraModelsVector of camera models
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+
Example: Stitching two camera images horizontally
#include <rtabmap/core/Camera.h>
+
#include <opencv2/imgproc/imgproc.hpp>
+
+
// Assume camera1 and camera2 are Camera* instances
+
Camera* camera1 = ...; // First camera
+
Camera* camera2 = ...; // Second camera
+
+
// Capture SensorData from both cameras
+
SensorData data1 = camera1->takeImage();
+
SensorData data2 = camera2->takeImage();
+
+
// Extract images and depth
+
cv::Mat image1 = data1.imageRaw(); // 640x480
+
cv::Mat depth1 = data1.depthOrRightRaw(); // 640x480
+
cv::Mat image2 = data2.imageRaw(); // 640x480
+
cv::Mat depth2 = data2.depthOrRightRaw(); // 640x480
+
+
// Stitch images horizontally
+
cv::Mat stitchedRgb;
+
cv::hconcat(image1, image2, stitchedRgb); // Result: 1280x480
+
+
cv::Mat stitchedDepth;
+
cv::hconcat(depth1, depth2, stitchedDepth); // Result: 1280x480
+
+
// Get camera models from both SensorData objects
+
std::vector<CameraModel> models = data1.cameraModels();
+
std::vector<CameraModel> models2 = data2.cameraModels();
+
models.insert(models.end(), models2.begin(), models2.end());
+
+
// Create SensorData with stitched images
+
SensorData stitchedData(stitchedRgb, stitchedDepth, models, 0, data1.stamp());
+ +
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
+
const cv::Mat & depthOrRightRaw() const
Returns the raw depth or right stereo image.
Definition SensorData.h:573
+
double stamp() const
Returns the timestamp.
Definition SensorData.h:527
+
const std::vector< CameraModel > & cameraModels() const
Returns the camera models.
Definition SensorData.h:724
+
const cv::Mat & imageRaw() const
Returns the raw RGB/grayscale image.
Definition SensorData.h:566
+
+ +
+
+ +

◆ SensorData() [9/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with RGB, depth, depth confidence, and multiple camera models.

+
Parameters
+ + + + + + + + +
rgbRGB or grayscale image (CV_8UC1 or CV_8UC3)
depthDepth image (CV_16UC1 for millimeters or CV_32FC1 for meters)
depthConfidenceDepth confidence map (CV_8UC1)
cameraModelsVector of camera models
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+
See also
SensorData(const cv::Mat&, const cv::Mat&, const std::vector<CameraModel>&, int, double, const cv::Mat&) for an example of stitching images from multiple cameras.
+ +
+
+ +

◆ SensorData() [10/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with RGB, depth, multiple camera models, and laser scan.

+
Parameters
+ + + + + + + + +
laserScan2D or 3D laser scan
rgbRGB or grayscale image (CV_8UC1 or CV_8UC3)
depthDepth image (CV_16UC1 for millimeters or CV_32FC1 for meters)
cameraModelsVector of camera models
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+
See also
SensorData(const cv::Mat&, const cv::Mat&, const std::vector<CameraModel>&, int, double, const cv::Mat&) for an example of stitching images from multiple cameras.
+ +
+
+ +

◆ SensorData() [11/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with RGB, depth, depth confidence, multiple camera models, and laser scan.

+
Parameters
+ + + + + + + + + +
laserScan2D or 3D laser scan
rgbRGB or grayscale image (CV_8UC1 or CV_8UC3)
depthDepth image (CV_16UC1 for millimeters or CV_32FC1 for meters)
depthConfidenceDepth confidence map (CV_8UC1)
cameraModelsVector of camera models
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+
See also
SensorData(const cv::Mat&, const cv::Mat&, const std::vector<CameraModel>&, int, double, const cv::Mat&) for an example of stitching images from multiple cameras.
+ +
+
+ +

◆ SensorData() [12/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with left and right stereo images and a stereo camera model.

+
Parameters
+ + + + + + + +
leftLeft stereo image (CV_8UC1 or CV_8UC3)
rightRight stereo image (CV_8UC1 or CV_8UC3)
cameraModelStereo camera model for disparity computation
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+ +
+
+ +

◆ SensorData() [13/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with left and right stereo images, stereo camera model, and laser scan.

+
Parameters
+ + + + + + + + +
laserScan2D or 3D laser scan
leftLeft stereo image (CV_8UC1 or CV_8UC3)
rightRight stereo image (CV_8UC1 or CV_8UC3)
cameraModelStereo camera model for disparity computation
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+ +
+
+ +

◆ SensorData() [14/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with left and right stereo images and multiple stereo camera models.

+
Parameters
+ + + + + + + +
rgbLeft stereo image (CV_8UC1 or CV_8UC3)
depthRight stereo image (CV_8UC1 or CV_8UC3)
cameraModelsVector of stereo camera models
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+
See also
SensorData(const cv::Mat&, const cv::Mat&, const std::vector<CameraModel>&, int, double, const cv::Mat&) for an example of stitching images from multiple cameras.
+ +
+
+ +

◆ SensorData() [15/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::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.

+

Creates a SensorData object with left and right stereo images, multiple stereo camera models, and laser scan.

+
Parameters
+ + + + + + + + +
laserScan2D or 3D laser scan
rgbLeft stereo image (CV_8UC1 or CV_8UC3)
depthRight stereo image (CV_8UC1 or CV_8UC3)
cameraModelsVector of stereo camera models
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
userDataOptional user-defined data matrix
+
+
+ +
+
+ +

◆ SensorData() [16/16]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorData::SensorData (const IMU & imu,
int id = 0,
double stamp = 0.0 
)
+
+ +

IMU-only constructor.

+

Creates a SensorData object with only IMU data (no images). Useful for IMU-only odometry or sensor fusion scenarios.

+
Parameters
+ + + + +
imuIMU data (accelerometer, gyroscope, orientation)
idSensor data ID (0 to auto-generate)
stampTimestamp in seconds
+
+
+ +
+
+

Member Function Documentation

+ +

◆ isValid()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::SensorData::isValid () const
+
+inline
+
+ +

Checks if the sensor data is valid.

+

Returns true if the sensor data contains at least one of:

    +
  • Valid ID (> 0) or non-zero stamp
  • +
  • Images (raw or compressed)
  • +
  • Depth/right images (raw or compressed)
  • +
  • Depth confidence (raw or compressed)
  • +
  • Laser scan (raw or compressed)
  • +
  • Camera models (mono or stereo)
  • +
  • User data (raw or compressed)
  • +
  • Keypoints and descriptors
  • +
  • IMU data
  • +
+
Returns
True if the sensor data contains any valid information, false otherwise
+ +

Definition at line 485 of file SensorData.h.

+ +
+
+ +

◆ id()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::SensorData::id () const
+
+inline
+
+ +

Returns the sensor data ID.

+
Returns
The unique sensor data ID (0 if invalid/uninitialized)
+ +

Definition at line 515 of file SensorData.h.

+ +
+
+ +

◆ setId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setId (int id)
+
+inline
+
+ +

Sets the sensor data ID.

+
Parameters
+ + +
idThe unique sensor data ID
+
+
+ +

Definition at line 521 of file SensorData.h.

+ +
+
+ +

◆ stamp()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::SensorData::stamp () const
+
+inline
+
+ +

Returns the timestamp.

+
Returns
Timestamp in seconds (typically seconds since epoch)
+ +

Definition at line 527 of file SensorData.h.

+ +
+
+ +

◆ setStamp()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setStamp (double stamp)
+
+inline
+
+ +

Sets the timestamp.

+
Parameters
+ + +
stampTimestamp in seconds
+
+
+ +

Definition at line 533 of file SensorData.h.

+ +
+
+ +

◆ imageCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::imageCompressed () const
+
+inline
+
+ +

Returns the compressed RGB/grayscale image.

+
Returns
Compressed image (CV_8UC1 with 1 row, JPEG/PNG-compressed bytes)
+
Note
Use Compression::uncompressImage() to uncompress the image.
+ +

Definition at line 540 of file SensorData.h.

+ +
+
+ +

◆ depthOrRightCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::depthOrRightCompressed () const
+
+inline
+
+ +

Returns the compressed depth or right stereo image.

+
Returns
Compressed depth/right image (CV_8UC1 with 1 row, compressed bytes)
+
Note
Use Compression::uncompressImage() to uncompress the image.
+ +

Definition at line 547 of file SensorData.h.

+ +
+
+ +

◆ depthConfidenceCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::depthConfidenceCompressed () const
+
+inline
+
+ +

Returns the compressed depth confidence map.

+
Returns
Compressed depth confidence (CV_8UC1 with 1 row, compressed bytes)
+
Note
Use Compression::uncompressData() to uncompress the data.
+ +

Definition at line 554 of file SensorData.h.

+ +
+
+ +

◆ laserScanCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
const LaserScan & rtabmap::SensorData::laserScanCompressed () const
+
+inline
+
+ +

Returns the compressed laser scan.

+
Returns
Compressed laser scan
+ +

Definition at line 560 of file SensorData.h.

+ +
+
+ +

◆ imageRaw()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::imageRaw () const
+
+inline
+
+ +

Returns the raw RGB/grayscale image.

+
Returns
Raw image (CV_8UC1 for grayscale or CV_8UC3 for RGB)
+ +

Definition at line 566 of file SensorData.h.

+ +
+
+ +

◆ depthOrRightRaw()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::depthOrRightRaw () const
+
+inline
+
+ +

Returns the raw depth or right stereo image.

+
Returns
Raw depth (CV_16UC1 for millimeters or CV_32FC1 for meters) or right stereo image (CV_8UC1 or CV_8UC3)
+ +

Definition at line 573 of file SensorData.h.

+ +
+
+ +

◆ depthConfidenceRaw()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::depthConfidenceRaw () const
+
+inline
+
+ +

Returns the raw depth confidence map.

+
Returns
Raw depth confidence (CV_8UC1, typically 0-100)
+ +

Definition at line 579 of file SensorData.h.

+ +
+
+ +

◆ laserScanRaw()

+ +
+
+ + + + + +
+ + + + + + + +
const LaserScan & rtabmap::SensorData::laserScanRaw () const
+
+inline
+
+ +

Returns the raw laser scan.

+
Returns
Raw laser scan (2D or 3D)
+ +

Definition at line 585 of file SensorData.h.

+ +
+
+ +

◆ setRGBDImage()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::setRGBDImage (const cv::Mat & rgb,
const cv::Mat & depth,
const CameraModel & model,
bool clearPreviousData = true 
)
+
+

Set image data. Detect automatically if raw or compressed. A matrix of type CV_8UC1 with 1 row is considered as compressed.

Parameters
+ + +
clearPreviousData,clearprevious raw and compressed images before setting the new ones.
+
+
+ +
+
+ +

◆ setLaserScan()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::setLaserScan (const LaserScan & laserScan,
bool clearPreviousData = true 
)
+
+

Set laser scan data. Detect automatically if raw or compressed. A matrix of type CV_8UC1 with 1 row is considered as compressed.

Parameters
+ + +
clearPreviousData,clearprevious raw and compressed scans before setting the new one.
+
+
+ +
+
+ +

◆ setCameraModel()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setCameraModel (const CameraModel & model)
+
+inline
+
+ +

Sets a single camera model (clears previous models)

+
Parameters
+ + +
modelCamera model to set
+
+
+ +

Definition at line 610 of file SensorData.h.

+ +
+
+ +

◆ setCameraModels()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setCameraModels (const std::vector< CameraModel > & models)
+
+inline
+
+ +

Sets multiple camera models.

+
Parameters
+ + +
modelsVector of camera models
+
+
+ +

Definition at line 616 of file SensorData.h.

+ +
+
+ +

◆ setStereoCameraModel()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setStereoCameraModel (const StereoCameraModel & stereoCameraModel)
+
+inline
+
+ +

Sets a single stereo camera model (clears previous models)

+
Parameters
+ + +
stereoCameraModelStereo camera model to set
+
+
+ +

Definition at line 622 of file SensorData.h.

+ +
+
+ +

◆ setStereoCameraModels()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setStereoCameraModels (const std::vector< StereoCameraModel > & stereoCameraModels)
+
+inline
+
+ +

Sets multiple stereo camera models.

+
Parameters
+ + +
stereoCameraModelsVector of stereo camera models
+
+
+ +

Definition at line 628 of file SensorData.h.

+ +
+
+ +

◆ depthRaw()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Mat rtabmap::SensorData::depthRaw () const
+
+inline
+
+ +

Returns the depth image (convenience method)

+

Returns the depth image if _depthOrRightRaw contains depth data (not a right stereo image). Depth images are CV_16UC1 or CV_32FC1, while right stereo images are CV_8UC1 or CV_8UC3.

+
Returns
Depth image if available, empty Mat if right stereo image or empty
+ +

Definition at line 639 of file SensorData.h.

+ +
+
+ +

◆ rightRaw()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Mat rtabmap::SensorData::rightRaw () const
+
+inline
+
+ +

Returns the right stereo image (convenience method)

+

Returns the right stereo image if _depthOrRightRaw contains stereo data (not a depth image). Right stereo images are CV_8UC1 or CV_8UC3, while depth images are CV_16UC1 or CV_32FC1.

+
Returns
Right stereo image if available, empty Mat if depth image or empty
+ +

Definition at line 650 of file SensorData.h.

+ +
+
+ +

◆ uncompressData() [1/2]

+ +
+
+ + + + + + + +
void rtabmap::SensorData::uncompressData ()
+
+ +

Uncompresses all compressed data in-place.

+

Decompresses all compressed images, depth, laser scans, and user data, storing the results in the raw data members. This modifies the object.

+ +
+
+ +

◆ uncompressData() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::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.

+

Decompresses compressed data and stores results in the provided output buffers. If a buffer pointer is null, that data type is skipped. The raw fields of the object is updated with the uncompressed data so that consecutive calls with same field should not trigger a uncompression again.

+
Parameters
+ + + + + + + + + +
imageRawOutput buffer for uncompressed RGB/grayscale image
depthOrRightRawOutput buffer for uncompressed depth or right stereo image
laserScanRawOutput buffer for uncompressed laser scan
userDataRawOutput buffer for uncompressed user data
groundCellsRawOutput buffer for uncompressed ground occupancy grid cells
obstacleCellsRawOutput buffer for uncompressed obstacle occupancy grid cells
emptyCellsRawOutput buffer for uncompressed empty occupancy grid cells
depthConfidenceRawOutput buffer for uncompressed depth confidence
+
+
+ +
+
+ +

◆ uncompressDataConst()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::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)

+

Same as uncompressData() but does not modify the object's internal state.

+
Parameters
+ + + + + + + + + +
imageRawOutput buffer for uncompressed RGB/grayscale image
depthOrRightRawOutput buffer for uncompressed depth or right stereo image
laserScanRawOutput buffer for uncompressed laser scan
userDataRawOutput buffer for uncompressed user data
groundCellsRawOutput buffer for uncompressed ground occupancy grid cells
obstacleCellsRawOutput buffer for uncompressed obstacle occupancy grid cells
emptyCellsRawOutput buffer for uncompressed empty occupancy grid cells
depthConfidenceRawOutput buffer for uncompressed depth confidence
+
+
+ +
+
+ +

◆ cameraModels()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< CameraModel > & rtabmap::SensorData::cameraModels () const
+
+inline
+
+ +

Returns the camera models.

+
Returns
Const reference to vector of mono camera models
+ +

Definition at line 724 of file SensorData.h.

+ +
+
+ +

◆ stereoCameraModels()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< StereoCameraModel > & rtabmap::SensorData::stereoCameraModels () const
+
+inline
+
+ +

Returns the stereo camera models.

+
Returns
Const reference to vector of stereo camera models
+ +

Definition at line 730 of file SensorData.h.

+ +
+
+ +

◆ setUserData()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::setUserData (const cv::Mat & userData,
bool clearPreviousData = true 
)
+
+

Set user data. Detect automatically if raw or compressed. If raw, the data is compressed too. A matrix of type CV_8UC1 with 1 row is considered as compressed. If you have one dimension unsigned 8 bits raw data, make sure to transpose it (to have multiple rows instead of multiple columns) in order to be detected as not compressed.

Parameters
+ + +
clearPreviousData,clearprevious raw and compressed user data before setting the new one.
+
+
+ +
+
+ +

◆ userDataRaw()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::userDataRaw () const
+
+inline
+
+ +

Definition at line 741 of file SensorData.h.

+ +
+
+ +

◆ userDataCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::userDataCompressed () const
+
+inline
+
+ +

Definition at line 742 of file SensorData.h.

+ +
+
+ +

◆ setOccupancyGrid()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::setOccupancyGrid (const cv::Mat & ground,
const cv::Mat & obstacles,
const cv::Mat & empty,
float cellSize,
const cv::Point3f & viewPoint 
)
+
+ +

Sets occupancy grid data.

+

Sets the occupancy grid with ground, obstacle, and empty cells. The data is automatically detected as raw or compressed. If raw, it will be compressed automatically.

+
Parameters
+ + + + + + +
groundGround cells matrix
obstaclesObstacle cells matrix
emptyEmpty cells matrix
cellSizeSize of each grid cell in meters
viewPointViewpoint/origin of the occupancy grid (3D point)
+
+
+ +
+
+ +

◆ gridGroundCellsRaw()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::gridGroundCellsRaw () const
+
+inline
+
+ +

Returns raw ground cells.

+
Returns
Const reference to raw ground cells matrix
+ +

Definition at line 767 of file SensorData.h.

+ +
+
+ +

◆ gridGroundCellsCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::gridGroundCellsCompressed () const
+
+inline
+
+ +

Returns compressed ground cells.

+
Returns
Const reference to compressed ground cells matrix
+
Note
Use Compression::uncompressData() to uncompress the data.
+ +

Definition at line 774 of file SensorData.h.

+ +
+
+ +

◆ gridObstacleCellsRaw()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::gridObstacleCellsRaw () const
+
+inline
+
+ +

Returns raw obstacle cells.

+
Returns
Const reference to raw obstacle cells matrix
+ +

Definition at line 780 of file SensorData.h.

+ +
+
+ +

◆ gridObstacleCellsCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::gridObstacleCellsCompressed () const
+
+inline
+
+ +

Returns compressed obstacle cells.

+
Returns
Const reference to compressed obstacle cells matrix
+
Note
Use Compression::uncompressData() to uncompress the data.
+ +

Definition at line 787 of file SensorData.h.

+ +
+
+ +

◆ gridEmptyCellsRaw()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::gridEmptyCellsRaw () const
+
+inline
+
+ +

Returns raw empty cells.

+
Returns
Const reference to raw empty cells matrix
+ +

Definition at line 793 of file SensorData.h.

+ +
+
+ +

◆ gridEmptyCellsCompressed()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::gridEmptyCellsCompressed () const
+
+inline
+
+ +

Returns compressed empty cells.

+
Returns
Const reference to compressed empty cells matrix
+
Note
Use Compression::uncompressData() to uncompress the data.
+ +

Definition at line 800 of file SensorData.h.

+ +
+
+ +

◆ gridCellSize()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::SensorData::gridCellSize () const
+
+inline
+
+ +

Returns the occupancy grid cell size.

+
Returns
Cell size in meters
+ +

Definition at line 806 of file SensorData.h.

+ +
+
+ +

◆ gridViewPoint()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Point3f & rtabmap::SensorData::gridViewPoint () const
+
+inline
+
+ +

Returns the occupancy grid viewpoint.

+
Returns
Const reference to viewpoint/origin 3D point
+ +

Definition at line 812 of file SensorData.h.

+ +
+
+ +

◆ setFeatures()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::setFeatures (const std::vector< cv::KeyPoint > & keypoints,
const std::vector< cv::Point3f > & keypoints3D,
const cv::Mat & descriptors 
)
+
+ +

Sets visual features (keypoints, 3D points, descriptors)

+

Sets the visual features extracted from the images. All arrays must have matching sizes (one keypoint per 3D point and descriptor).

+
Parameters
+ + + + +
keypoints2D keypoints in image coordinates
keypoints3D3D points corresponding to keypoints (in base_link frame)
descriptorsFeature descriptors matrix (one row per keypoint)
+
+
+ +
+
+ +

◆ keypoints()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< cv::KeyPoint > & rtabmap::SensorData::keypoints () const
+
+inline
+
+ +

Returns the 2D keypoints.

+
Returns
Const reference to vector of 2D keypoints
+ +

Definition at line 830 of file SensorData.h.

+ +
+
+ +

◆ keypoints3D()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< cv::Point3f > & rtabmap::SensorData::keypoints3D () const
+
+inline
+
+ +

Returns the 3D keypoints.

+
Returns
Const reference to vector of 3D points (in base_link frame)
+ +

Definition at line 836 of file SensorData.h.

+ +
+
+ +

◆ descriptors()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::descriptors () const
+
+inline
+
+ +

Returns the feature descriptors.

+
Returns
Const reference to descriptors matrix (one row per keypoint)
+ +

Definition at line 842 of file SensorData.h.

+ +
+
+ +

◆ addGlobalDescriptor()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::addGlobalDescriptor (const GlobalDescriptor & descriptor)
+
+inline
+
+ +

Adds a global descriptor.

+
Parameters
+ + +
descriptorGlobal descriptor to add
+
+
+ +

Definition at line 848 of file SensorData.h.

+ +
+
+ +

◆ setGlobalDescriptors()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setGlobalDescriptors (const std::vector< GlobalDescriptor > & descriptors)
+
+inline
+
+ +

Sets all global descriptors.

+
Parameters
+ + +
descriptorsVector of global descriptors
+
+
+ +

Definition at line 854 of file SensorData.h.

+ +
+
+ +

◆ clearGlobalDescriptors()

+ +
+
+ + + + + +
+ + + + + + + +
void rtabmap::SensorData::clearGlobalDescriptors ()
+
+inline
+
+ +

Clears all global descriptors.

+ +

Definition at line 859 of file SensorData.h.

+ +
+
+ +

◆ globalDescriptors()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< GlobalDescriptor > & rtabmap::SensorData::globalDescriptors () const
+
+inline
+
+ +

Returns all global descriptors.

+
Returns
Const reference to vector of global descriptors
+ +

Definition at line 865 of file SensorData.h.

+ +
+
+ +

◆ setGroundTruth()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setGroundTruth (const Transform & pose)
+
+inline
+
+ +

Sets the ground truth pose.

+
Parameters
+ + +
poseGround truth transform (for evaluation purposes)
+
+
+ +

Definition at line 871 of file SensorData.h.

+ +
+
+ +

◆ groundTruth()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::SensorData::groundTruth () const
+
+inline
+
+ +

Returns the ground truth pose.

+
Returns
Const reference to ground truth transform
+ +

Definition at line 877 of file SensorData.h.

+ +
+
+ +

◆ setGlobalPose()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::setGlobalPose (const Transform & pose,
const cv::Mat & covariance 
)
+
+inline
+
+ +

Sets the global pose with covariance.

+
Parameters
+ + + +
poseGlobal pose transform
covariancePose covariance matrix (6x6, CV_64FC1)
+
+
+ +

Definition at line 884 of file SensorData.h.

+ +
+
+ +

◆ globalPose()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::SensorData::globalPose () const
+
+inline
+
+ +

Returns the global pose.

+
Returns
Const reference to global pose transform
+ +

Definition at line 890 of file SensorData.h.

+ +
+
+ +

◆ globalPoseCovariance()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::SensorData::globalPoseCovariance () const
+
+inline
+
+ +

Returns the global pose covariance.

+
Returns
Const reference to pose covariance matrix (6x6, CV_64FC1)
+ +

Definition at line 896 of file SensorData.h.

+ +
+
+ +

◆ setGPS()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setGPS (const GPS & gps)
+
+inline
+
+ +

Sets GPS data.

+
Parameters
+ + +
gpsGPS data (latitude, longitude, altitude, etc.)
+
+
+ +

Definition at line 902 of file SensorData.h.

+ +
+
+ +

◆ gps()

+ +
+
+ + + + + +
+ + + + + + + +
const GPS & rtabmap::SensorData::gps () const
+
+inline
+
+ +

Returns GPS data.

+
Returns
Const reference to GPS data
+ +

Definition at line 908 of file SensorData.h.

+ +
+
+ +

◆ setIMU()

+ +
+
+ + + + + + + + +
void rtabmap::SensorData::setIMU (const IMU & imu)
+
+ +

Sets IMU data.

+
Parameters
+ + +
imuIMU data (accelerometer, gyroscope, orientation)
+
+
+
Warning
Asserts that all orientation, angular velocity and linear acceleration values are finite.
+ +
+
+ +

◆ imu()

+ +
+
+ + + + + +
+ + + + + + + +
const IMU & rtabmap::SensorData::imu () const
+
+inline
+
+ +

Returns IMU data.

+
Returns
Const reference to IMU data
+ +

Definition at line 922 of file SensorData.h.

+ +
+
+ +

◆ setEnvSensors()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setEnvSensors (const EnvSensors & sensors)
+
+inline
+
+ +

Sets all environmental sensors.

+
Parameters
+ + +
sensorsMap of environmental sensor types to sensor data
+
+
+ +

Definition at line 928 of file SensorData.h.

+ +
+
+ +

◆ addEnvSensor()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::addEnvSensor (const EnvSensor & sensor)
+
+inline
+
+ +

Adds a single environmental sensor.

+
Parameters
+ + +
sensorEnvironmental sensor to add
+
+
+ +

Definition at line 934 of file SensorData.h.

+ +
+
+ +

◆ envSensors()

+ +
+
+ + + + + +
+ + + + + + + +
const EnvSensors & rtabmap::SensorData::envSensors () const
+
+inline
+
+ +

Returns all environmental sensors.

+
Returns
Const reference to map of environmental sensors
+ +

Definition at line 940 of file SensorData.h.

+ +
+
+ +

◆ setLandmarks()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::SensorData::setLandmarks (const Landmarks & landmarks)
+
+inline
+
+ +

Sets landmarks.

+
Parameters
+ + +
landmarksMap of landmark IDs to landmark data
+
+
+
Note
Landmark IDs should be positive and non-zero.
+ +

Definition at line 947 of file SensorData.h.

+ +
+
+ +

◆ landmarks()

+ +
+
+ + + + + +
+ + + + + + + +
const Landmarks & rtabmap::SensorData::landmarks () const
+
+inline
+
+ +

Returns landmarks.

+
Returns
Const reference to map of landmarks
+ +

Definition at line 953 of file SensorData.h.

+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + + + +
unsigned long rtabmap::SensorData::getMemoryUsed () const
+
+ +

Computes the memory usage of this sensor data.

+

Calculates the approximate memory footprint including all images, laser scans, features, descriptors, and other data structures.

+
Returns
Memory usage in bytes
+ +
+
+ +

◆ clearCompressedData()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::clearCompressedData (bool images = true,
bool scan = true,
bool userData = true,
bool occupancyGrid = true 
)
+
+

Clear compressed rgb/depth (left/right) images, compressed laser scan and compressed user data. Raw data are kept is set.

+ +
+
+ +

◆ clearRawData()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::SensorData::clearRawData (bool images = true,
bool scan = true,
bool userData = true,
bool occupancyGrid = true 
)
+
+

Clear raw rgb/depth (left/right) images, raw laser scan and raw user data. Compressed data are kept is set.

+ +
+
+ +

◆ isPointVisibleFromCameras()

+ +
+
+ + + + + + + + +
int rtabmap::SensorData::isPointVisibleFromCameras (const cv::Point3f & pt) const
+
+ +

Checks if a 3D point is visible from any camera.

+

Projects the 3D point into all camera models and checks if it falls within the image bounds.

+
Parameters
+ + +
pt3D point in robot frame (base_link)
+
+
+
Returns
Camera index (>=0) of the first camera found with the point visible, -1 if the point is not visible by any camera.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent-members.html new file mode 100644 index 00000000..6db3c50a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent-members.html @@ -0,0 +1,108 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SensorEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::SensorEvent, including all inherited members.

+ + + + + + + + + + + + + + + + + +
cameraName() constrtabmap::SensorEventinline
Code enum namertabmap::SensorEvent
data() constrtabmap::SensorEventinline
getClassName() constrtabmap::SensorEventinlinevirtual
getCode() constUEventinline
info() constrtabmap::SensorEventinline
kCodeData enum valuertabmap::SensorEvent
kCodeNoMoreImages enum valuertabmap::SensorEvent
SensorEvent(const cv::Mat &image, int seq=0, double stamp=0.0, const std::string &cameraName=std::string())rtabmap::SensorEventinline
SensorEvent()rtabmap::SensorEventinline
SensorEvent(const SensorData &data)rtabmap::SensorEventinline
SensorEvent(const SensorData &data, const std::string &cameraName)rtabmap::SensorEventinline
SensorEvent(const SensorData &data, const SensorCaptureInfo &sensorCaptureInfo)rtabmap::SensorEventinline
UEvent(int code=0)UEventinlineprotected
~SensorEvent()rtabmap::SensorEventinlinevirtual
~UEvent() (defined in UEvent)UEventinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent.html new file mode 100644 index 00000000..65cba588 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent.html @@ -0,0 +1,603 @@ + + + + + + + + +RTAB-Map: rtabmap::SensorEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SensorEvent Class Reference
+
+
+ +

Event class for sensor data communication in RTAB-Map's event system. + More...

+ +

#include <SensorEvent.h>

+
+Inheritance diagram for rtabmap::SensorEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::SensorEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + +

+Public Types

enum  Code { kCodeData +, kCodeNoMoreImages + }
 Event codes for SensorEvent. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SensorEvent (const cv::Mat &image, int seq=0, double stamp=0.0, const std::string &cameraName=std::string())
 Constructor from a single image.
 
 SensorEvent ()
 Constructor for end-of-stream event.
 
 SensorEvent (const SensorData &data)
 Constructor from SensorData.
 
 SensorEvent (const SensorData &data, const std::string &cameraName)
 Constructor from SensorData with camera name.
 
 SensorEvent (const SensorData &data, const SensorCaptureInfo &sensorCaptureInfo)
 Constructor from SensorData with full capture info.
 
const SensorData & data () const
 Returns the sensor data contained in this event.
 
const std::string & cameraName () const
 Returns the camera name.
 
const SensorCaptureInfo & info () const
 Returns the sensor capture information.
 
virtual ~SensorEvent ()
 Virtual destructor.
 
virtual std::string getClassName () const
 Returns the class name for event identification.
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+

Event class for sensor data communication in RTAB-Map's event system.

+

SensorEvent is an event class that extends UEvent and is used to communicate sensor data (images, depth, laser scans, etc.) through RTAB-Map's event-driven architecture. It is typically posted by sensor capture threads and handled by event handlers (e.g., RtabmapThread, DataRecorder, CalibrationDialog).

+

The class supports two event codes:

    +
  • kCodeData: Indicates that new sensor data is available
  • +
  • kCodeNoMoreImages: Indicates that the sensor stream has ended (end of file, camera disconnected, etc.)
  • +
+

SensorEvent carries:

    +
  • SensorData: The actual sensor data (images, depth, scans, camera models, etc.)
  • +
  • SensorCaptureInfo: Metadata about the capture (camera name, timing information, odometry pose, etc.)
  • +
+
Note
This class is part of RTAB-Map's event system. Handlers should check the event code and class name before processing the event.
+
See also
UEvent
+
+SensorData
+
+SensorCaptureInfo
+
+UEventsHandler
+
+UEventsManager
+ +

Definition at line 63 of file SensorEvent.h.

+

Member Enumeration Documentation

+ +

◆ Code

+ +
+
+ + + + +
enum rtabmap::SensorEvent::Code
+
+ +

Event codes for SensorEvent.

+ + + +
Enumerator
kCodeData 

Event code indicating new sensor data is available.

+
kCodeNoMoreImages 

Event code indicating the sensor stream has ended.

+
+ +

Definition at line 71 of file SensorEvent.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ SensorEvent() [1/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::SensorEvent::SensorEvent (const cv::Mat & image,
int seq = 0,
double stamp = 0.0,
const std::string & cameraName = std::string() 
)
+
+inline
+
+ +

Constructor from a single image.

+

Creates a SensorEvent with kCodeData containing a single image. This is a convenience constructor for simple image-only sensor data.

+
Parameters
+ + + + + +
imageThe image to include in the sensor data
seqSequence number (default: 0)
stampTimestamp in seconds (default: 0.0)
cameraNameOptional camera name identifier (default: empty)
+
+
+ +

Definition at line 88 of file SensorEvent.h.

+ +
+
+ +

◆ SensorEvent() [2/5]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::SensorEvent::SensorEvent ()
+
+inline
+
+ +

Constructor for end-of-stream event.

+

Creates a SensorEvent with kCodeNoMoreImages to signal that the sensor stream has ended (e.g., end of file, camera disconnected).

+
Note
This constructor does not include any sensor data.
+ +

Definition at line 103 of file SensorEvent.h.

+ +
+
+ +

◆ SensorEvent() [3/5]

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::SensorEvent::SensorEvent (const SensorData & data)
+
+inline
+
+ +

Constructor from SensorData.

+

Creates a SensorEvent with kCodeData containing the provided SensorData.

+
Parameters
+ + +
dataThe sensor data to include in the event
+
+
+ +

Definition at line 115 of file SensorEvent.h.

+ +
+
+ +

◆ SensorEvent() [4/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::SensorEvent::SensorEvent (const SensorData & data,
const std::string & cameraName 
)
+
+inline
+
+ +

Constructor from SensorData with camera name.

+

Creates a SensorEvent with kCodeData containing the provided SensorData and camera name.

+
Parameters
+ + + +
dataThe sensor data to include in the event
cameraNameCamera name identifier
+
+
+ +

Definition at line 130 of file SensorEvent.h.

+ +
+
+ +

◆ SensorEvent() [5/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::SensorEvent::SensorEvent (const SensorData & data,
const SensorCaptureInfo & sensorCaptureInfo 
)
+
+inline
+
+ +

Constructor from SensorData with full capture info.

+

Creates a SensorEvent with kCodeData containing the provided SensorData and complete sensor capture information (camera name, timing, odometry, etc.).

+
Parameters
+ + + +
dataThe sensor data to include in the event
sensorCaptureInfoComplete sensor capture information
+
+
+ +

Definition at line 146 of file SensorEvent.h.

+ +
+
+ +

◆ ~SensorEvent()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::SensorEvent::~SensorEvent ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 185 of file SensorEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ data()

+ +
+
+ + + + + +
+ + + + + + + +
const SensorData & rtabmap::SensorEvent::data () const
+
+inline
+
+ +

Returns the sensor data contained in this event.

+

Returns the SensorData object containing images, depth, laser scans, camera models, and other sensor information.

+
Returns
Const reference to the sensor data
+ +

Definition at line 161 of file SensorEvent.h.

+ +
+
+ +

◆ cameraName()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::SensorEvent::cameraName () const
+
+inline
+
+ +

Returns the camera name.

+

Returns the camera name identifier from the sensor capture info.

+
Returns
Const reference to the camera name string
+ +

Definition at line 170 of file SensorEvent.h.

+ +
+
+ +

◆ info()

+ +
+
+ + + + + +
+ + + + + + + +
const SensorCaptureInfo & rtabmap::SensorEvent::info () const
+
+inline
+
+ +

Returns the sensor capture information.

+

Returns the complete sensor capture information including camera name, timing information, odometry pose, covariance, and other metadata.

+
Returns
Const reference to the sensor capture info
+ +

Definition at line 180 of file SensorEvent.h.

+ +
+
+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::SensorEvent::getClassName () const
+
+inlinevirtual
+
+ +

Returns the class name for event identification.

+

Returns "SensorEvent" to allow event handlers to identify this event type.

+
Returns
Class name string "SensorEvent"
+ +

Implements UEvent.

+ +

Definition at line 194 of file SensorEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.map new file mode 100644 index 00000000..1800c8b5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.md5 new file mode 100644 index 00000000..b5fe59ae --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.md5 @@ -0,0 +1 @@ +23610fe71f38dabc17e82f31a37fd248 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..31db2728df42aa199c8a4aada340645a07373075 GIT binary patch literal 4084 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 Y1r5CT#bLHou*O473@r4k^;}>42d_~vBLDyZ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.map new file mode 100644 index 00000000..1800c8b5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.md5 new file mode 100644 index 00000000..b5fe59ae --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.md5 @@ -0,0 +1 @@ +23610fe71f38dabc17e82f31a37fd248 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SensorEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..31db2728df42aa199c8a4aada340645a07373075 GIT binary patch literal 4084 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 Y1r5CT#bLHou*O473@r4k^;}>42d_~vBLDyZ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Signature-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Signature-members.html new file mode 100644 index 00000000..662abda5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Signature-members.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Signature Member List
+
+
+ +

This is the complete list of members for rtabmap::Signature, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addLandmark(const Link &landmark)rtabmap::Signature
addLink(const Link &link)rtabmap::Signature
addLinks(const std::list< Link > &links)rtabmap::Signature
addLinks(const std::map< int, Link > &links)rtabmap::Signature
changeLinkIds(int idFrom, int idTo)rtabmap::Signature
changeWordsRef(int oldWordId, int activeWordId)rtabmap::Signature
compareTo(const Signature &signature) constrtabmap::Signature
getGroundTruthPose() constrtabmap::Signatureinline
getInvalidWordsCount() constrtabmap::Signatureinline
getLabel() constrtabmap::Signatureinline
getLandmarks() constrtabmap::Signatureinline
getLinks() constrtabmap::Signatureinline
getMemoryUsed(bool withSensorData=true) constrtabmap::Signature
getPose() constrtabmap::Signatureinline
getPoseCovariance() constrtabmap::Signature
getStamp() constrtabmap::Signatureinline
getVelocity() constrtabmap::Signatureinline
getWeight() constrtabmap::Signatureinline
getWords() constrtabmap::Signatureinline
getWords3() constrtabmap::Signatureinline
getWordsChanged() constrtabmap::Signatureinline
getWordsDescriptors() constrtabmap::Signatureinline
getWordsKpts() constrtabmap::Signatureinline
hasLink(int idTo, Link::Type type=Link::kUndef) constrtabmap::Signature
id() constrtabmap::Signatureinline
isBadSignature() constrtabmap::Signature
isEnabled() constrtabmap::Signatureinline
isLinksModified() constrtabmap::Signatureinline
isModified() constrtabmap::Signatureinline
isSaved() constrtabmap::Signatureinline
mapId() constrtabmap::Signatureinline
removeAllWords()rtabmap::Signature
removeLandmark(int landmarkId)rtabmap::Signature
removeLandmarks()rtabmap::Signature
removeLink(int idTo)rtabmap::Signature
removeLinks(bool keepSelfReferringLinks=false)rtabmap::Signature
removeVirtualLinks()rtabmap::Signature
sensorData()rtabmap::Signatureinline
sensorData() constrtabmap::Signatureinline
setEnabled(bool enabled)rtabmap::Signatureinline
setGroundTruthPose(const Transform &pose)rtabmap::Signatureinline
setLabel(const std::string &label)rtabmap::Signatureinline
setModified(bool modified)rtabmap::Signatureinline
setPose(const Transform &pose)rtabmap::Signatureinline
setSaved(bool saved)rtabmap::Signatureinline
setVelocity(float vx, float vy, float vz, float vroll, float vpitch, float vyaw)rtabmap::Signatureinline
setWeight(int weight)rtabmap::Signatureinline
setWords(const std::multimap< int, int > &words, const std::vector< cv::KeyPoint > &keypoints, const std::vector< cv::Point3f > &words3, const cv::Mat &descriptors)rtabmap::Signature
setWordsDescriptors(const cv::Mat &descriptors)rtabmap::Signature
Signature()rtabmap::Signature
Signature(int id, int mapId=-1, int weight=0, double stamp=0.0, const std::string &label=std::string(), const Transform &pose=Transform(), const Transform &groundTruthPose=Transform(), const SensorData &sensorData=SensorData())rtabmap::Signature
Signature(const SensorData &data)rtabmap::Signature
~Signature()rtabmap::Signaturevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Signature.html b/preview/pr-1492/api/latest/classrtabmap_1_1Signature.html new file mode 100644 index 00000000..87ff9372 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Signature.html @@ -0,0 +1,1980 @@ + + + + + + + + +RTAB-Map: rtabmap::Signature Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::Signature Class Reference
+
+
+ +

Represents a node in RTAB-Map's pose graph. + More...

+ +

#include <Signature.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Signature ()
 Default constructor.
 
 Signature (int id, int mapId=-1, int weight=0, double stamp=0.0, const std::string &label=std::string(), const Transform &pose=Transform(), const Transform &groundTruthPose=Transform(), const SensorData &sensorData=SensorData())
 Constructor with explicit parameters.
 
 Signature (const SensorData &data)
 Constructor from sensor data.
 
+virtual ~Signature ()
 Virtual destructor.
 
float compareTo (const Signature &signature) const
 Compares this signature to another signature.
 
bool isBadSignature () const
 Checks if this signature is considered "bad".
 
int id () const
 Returns the signature ID.
 
int mapId () const
 Returns the map ID.
 
void setWeight (int weight)
 Sets the weight/importance of this signature.
 
int getWeight () const
 Returns the weight/importance of this signature.
 
void setLabel (const std::string &label)
 Sets a label/name for this signature.
 
const std::string & getLabel () const
 Returns the label/name of this signature.
 
double getStamp () const
 Returns the timestamp of this signature.
 
void addLinks (const std::list< Link > &links)
 Adds multiple links from a list.
 
void addLinks (const std::map< int, Link > &links)
 Adds multiple links from a map.
 
void addLink (const Link &link)
 Adds a single link to this signature.
 
bool hasLink (int idTo, Link::Type type=Link::kUndef) const
 Checks if this signature has a link to a target signature.
 
void changeLinkIds (int idFrom, int idTo)
 Changes all link target IDs from one value to another.
 
void removeLinks (bool keepSelfReferringLinks=false)
 Removes all links from this signature.
 
void removeLink (int idTo)
 Removes a specific link to a target signature.
 
void removeVirtualLinks ()
 Removes all virtual links from this signature.
 
void addLandmark (const Link &landmark)
 Adds a landmark observation to this signature.
 
const std::map< int, Link > & getLandmarks () const
 Returns all landmark observations.
 
+void removeLandmarks ()
 Removes all landmark observations.
 
void removeLandmark (int landmarkId)
 Removes a specific landmark observation.
 
void setSaved (bool saved)
 Sets whether this signature has been saved to the database.
 
void setModified (bool modified)
 Sets the modification flag for this signature.
 
const std::multimap< int, Link > & getLinks () const
 Returns all links from this signature.
 
bool isSaved () const
 Checks if this signature has been saved to the database.
 
bool isModified () const
 Checks if this signature has been modified.
 
bool isLinksModified () const
 Checks if the links have been modified.
 
void removeAllWords ()
 Removes all visual words from this signature.
 
void changeWordsRef (int oldWordId, int activeWordId)
 Changes visual word references from one word ID to another.
 
void setWords (const std::multimap< int, int > &words, const std::vector< cv::KeyPoint > &keypoints, const std::vector< cv::Point3f > &words3, const cv::Mat &descriptors)
 Sets all visual words for this signature.
 
bool isEnabled () const
 Checks if this signature is enabled.
 
void setEnabled (bool enabled)
 Sets whether this signature is enabled.
 
const std::multimap< int, int > & getWords () const
 Returns the visual words map.
 
const std::vector< cv::KeyPoint > & getWordsKpts () const
 Returns the keypoints associated with visual words.
 
int getInvalidWordsCount () const
 Returns the count of invalid visual words.
 
const std::map< int, int > & getWordsChanged () const
 Returns the word ID change mapping.
 
const cv::Mat & getWordsDescriptors () const
 Returns the feature descriptors for visual words.
 
void setWordsDescriptors (const cv::Mat &descriptors)
 Sets the feature descriptors for visual words.
 
void setPose (const Transform &pose)
 Sets the pose of this signature.
 
void setGroundTruthPose (const Transform &pose)
 Sets the ground truth pose for evaluation.
 
void setVelocity (float vx, float vy, float vz, float vroll, float vpitch, float vyaw)
 Sets the velocity of this signature.
 
const std::vector< cv::Point3f > & getWords3 () const
 Returns the 3D points of visual words.
 
const Transform & getPose () const
 Returns the pose of this signature.
 
cv::Mat getPoseCovariance () const
 Gets the pose covariance matrix.
 
const Transform & getGroundTruthPose () const
 Returns the ground truth pose.
 
const std::vector< float > & getVelocity () const
 Returns the velocity of this signature.
 
SensorData & sensorData ()
 Returns mutable access to the sensor data.
 
const SensorData & sensorData () const
 Returns const access to the sensor data.
 
unsigned long getMemoryUsed (bool withSensorData=true) const
 Computes the memory usage of this signature.
 
+

Detailed Description

+

Represents a node in RTAB-Map's pose graph.

+

The Signature class is a fundamental building block of RTAB-Map's graph-based mapping system. Each signature represents a unique location or pose in the map and contains:

+
    +
  • Visual words: Bag-of-words representation using visual features (keypoints, descriptors, 3D points) for place recognition
  • +
  • Links: Connections to other signatures (neighbors, loop closures, landmarks)
  • +
  • Pose information: Current pose, ground truth pose, velocity
  • +
  • Sensor data: Images, depth, laser scans, etc. captured at this location
  • +
  • Metadata: ID, map ID, timestamp, label, weight, modification flags
  • +
+

Signatures are used for:

    +
  • Place recognition: Comparing signatures to detect loop closures
  • +
  • Graph construction: Building the pose graph through links
  • +
  • Localization: Matching current observations to stored signatures
  • +
  • Mapping: Storing sensor data, visual features and local occupancy grid for each location
  • +
+

The class tracks modification state to optimize database updates, and provides methods to manage visual words, links, landmarks, and pose information.

+
Note
Signatures are typically managed by the Memory class, which handles storage, retrieval, and graph operations.
+
See also
Link
+
+SensorData
+
+Memory
+ +

Definition at line 83 of file Signature.h.

+

Constructor & Destructor Documentation

+ +

◆ Signature() [1/3]

+ +
+
+ + + + + + + +
rtabmap::Signature::Signature ()
+
+ +

Default constructor.

+

Creates an empty signature with invalid ID (0), default map ID (-1), and all fields initialized to default values.

+ +
+
+ +

◆ Signature() [2/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::Signature::Signature (int id,
int mapId = -1,
int weight = 0,
double stamp = 0.0,
const std::string & label = std::string(),
const Transform & pose = Transform(),
const Transform & groundTruthPose = Transform(),
const SensorData & sensorData = SensorData() 
)
+
+ +

Constructor with explicit parameters.

+

Creates a signature with the specified parameters. The sensor data ID will be automatically set to match the signature ID if not already set.

+
Parameters
+ + + + + + + + + +
idUnique signature ID (must be > 0 for valid signature)
mapIdMap ID this signature belongs to (default: -1 for no map)
weightWeight/importance of this signature (default: 0)
stampTimestamp in seconds (default: 0.0)
labelOptional label/name for this signature (default: empty)
poseCurrent pose of the signature (default: identity null transform)
groundTruthPoseGround truth pose for evaluation (default: null transform)
sensorDataSensor data captured at this location (default: empty)
+
+
+
Note
The signature is marked as modified and not saved by default.
+ +
+
+ +

◆ Signature() [3/3]

+ +
+
+ + + + + + + + +
rtabmap::Signature::Signature (const SensorData & data)
+
+ +

Constructor from sensor data.

+

Creates a signature from sensor data. The signature ID is taken from the sensor data ID, and the ground truth pose is extracted from the sensor data if available.

+
Parameters
+ + +
dataSensor data to create signature from
+
+
+
Note
The signature pose is initialized to identity transform.
+ +
+
+

Member Function Documentation

+ +

◆ compareTo()

+ +
+
+ + + + + + + + +
float rtabmap::Signature::compareTo (const Signature & signature) const
+
+ +

Compares this signature to another signature.

+

Computes a similarity score between this signature and another signature based on their visual words. The comparison uses bag-of-words matching to determine how similar the two locations are.

+
Parameters
+ + +
signatureThe signature to compare against
+
+
+
Returns
Similarity score between 0.0 and 1.0, where 1.0 means 100% similarity
+
Note
This method is used for loop closure detection and place recognition.
+ +
+
+ +

◆ isBadSignature()

+ +
+
+ + + + + + + +
bool rtabmap::Signature::isBadSignature () const
+
+ +

Checks if this signature is considered "bad".

+

A signature is considered bad if it has no valid visual words (all words are invalid or the signature has no words at all). Bad signatures cannot be used for place recognition.

+
Returns
True if the signature has no valid visual words, false otherwise
+ +
+
+ +

◆ id()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Signature::id () const
+
+inline
+
+ +

Returns the signature ID.

+
Returns
The unique signature ID (0 if invalid/uninitialized)
+ +

Definition at line 168 of file Signature.h.

+ +
+
+ +

◆ mapId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Signature::mapId () const
+
+inline
+
+ +

Returns the map ID.

+
Returns
The map ID this signature belongs to (-1 if no map assigned)
+ +

Definition at line 174 of file Signature.h.

+ +
+
+ +

◆ setWeight()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Signature::setWeight (int weight)
+
+inline
+
+ +

Sets the weight/importance of this signature.

+

The weight represents the importance or priority of this signature, typically set by Rehearsal mechanism (see Memory::rehearsal). Higher weights may be used to prioritize certain signatures during memory management or loop closure detection.

+
Parameters
+ + +
weightThe weight value
+
+
+
Note
Marks the signature as modified if the weight changes. A signature already flagged as modified stays modified.
+ +

Definition at line 189 of file Signature.h.

+ +
+
+ +

◆ getWeight()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Signature::getWeight () const
+
+inline
+
+ +

Returns the weight/importance of this signature.

+
Returns
The weight value
+ +

Definition at line 195 of file Signature.h.

+ +
+
+ +

◆ setLabel()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Signature::setLabel (const std::string & label)
+
+inline
+
+ +

Sets a label/name for this signature.

+

Labels are optional text identifiers that can be used to tag or categorize signatures (e.g., "room1", "corridor", "entrance").

+
Parameters
+ + +
labelThe label string
+
+
+
Note
Marks the signature as modified if the label changes. A signature already flagged as modified stays modified.
+ +

Definition at line 208 of file Signature.h.

+ +
+
+ +

◆ getLabel()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::Signature::getLabel () const
+
+inline
+
+ +

Returns the label/name of this signature.

+
Returns
The label string (empty if not set)
+ +

Definition at line 214 of file Signature.h.

+ +
+
+ +

◆ getStamp()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::Signature::getStamp () const
+
+inline
+
+ +

Returns the timestamp of this signature.

+
Returns
Timestamp in seconds (typically seconds since epoch)
+ +

Definition at line 220 of file Signature.h.

+ +
+
+ +

◆ addLinks() [1/2]

+ +
+
+ + + + + + + + +
void rtabmap::Signature::addLinks (const std::list< Link > & links)
+
+ +

Adds multiple links from a list.

+

Adds all links from the provided list to this signature's link collection.

+
Parameters
+ + +
linksList of links to add
+
+
+
Note
Each link must have from() equal to this signature's ID.
+
+Automatically marks links as modified.
+
See also
addLink()
+ +
+
+ +

◆ addLinks() [2/2]

+ +
+
+ + + + + + + + +
void rtabmap::Signature::addLinks (const std::map< int, Link > & links)
+
+ +

Adds multiple links from a map.

+

Adds all links from the provided map to this signature's link collection.

+
Parameters
+ + +
linksMap of target IDs to links
+
+
+
Note
Each link must have from() equal to this signature's ID.
+
+The map's keys are the target IDs (to() values of the links).
+
+Automatically marks links as modified.
+
See also
addLink()
+ +
+
+ +

◆ addLink()

+ +
+
+ + + + + + + + +
void rtabmap::Signature::addLink (const Link & link)
+
+ +

Adds a single link to this signature.

+

Adds a link connecting this signature to another signature. The link represents a constraint in the pose graph (e.g., neighbor, loop closure).

+
Parameters
+ + +
linkThe link to add
+
+
+
Note
The link's from() must equal this signature's ID.
+
+The link's to() must be different from this signature's ID (except for self-referring links like pose priors or gravity).
+
+Duplicate links to the same target are not allowed (assertion failure).
+
+Automatically marks links as modified.
+ +
+
+ +

◆ hasLink()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::Signature::hasLink (int idTo,
Link::Type type = Link::kUndef 
) const
+
+ +

Checks if this signature has a link to a target signature.

+
Parameters
+ + + +
idToTarget signature ID (0 to check for any link of the specified type)
typeLink type to check for (default: Link::kUndef to check any type)
+
+
+
Returns
True if a matching link exists, false otherwise
+ +
+
+ +

◆ changeLinkIds()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::Signature::changeLinkIds (int idFrom,
int idTo 
)
+
+ +

Changes all link target IDs from one value to another.

+

Updates all links that point to idFrom to point to idTo instead. This is useful when merging or reorganizing the graph.

+
Parameters
+ + + +
idFromOriginal target ID
idToNew target ID
+
+
+
Note
Automatically marks links as modified.
+ +
+
+ +

◆ removeLinks()

+ +
+
+ + + + + + + + +
void rtabmap::Signature::removeLinks (bool keepSelfReferringLinks = false)
+
+ +

Removes all links from this signature.

+
Parameters
+ + +
keepSelfReferringLinksIf true, preserves self-referring links (pose priors, gravity) that have from() == to()
+
+
+
Note
Automatically marks links as modified.
+ +
+
+ +

◆ removeLink()

+ +
+
+ + + + + + + + +
void rtabmap::Signature::removeLink (int idTo)
+
+ +

Removes a specific link to a target signature.

+
Parameters
+ + +
idToTarget signature ID of the link to remove
+
+
+
Note
Automatically marks links as modified.
+ +
+
+ +

◆ removeVirtualLinks()

+ +
+
+ + + + + + + +
void rtabmap::Signature::removeVirtualLinks ()
+
+ +

Removes all virtual links from this signature.

+

Virtual links are links of type Link::kVirtualClosure.

+
Note
Automatically marks links as modified.
+ +
+
+ +

◆ addLandmark()

+ +
+
+ + + + + + + + +
void rtabmap::Signature::addLandmark (const Link & landmark)
+
+ +

Adds a landmark observation to this signature.

+

Landmarks are persistent features in the environment that can be observed from multiple locations. This method adds a link representing the observation of a landmark from this signature's location.

+
Parameters
+ + +
landmarkLink representing the landmark observation
+
+
+
Note
Landmark IDs are typically negative to distinguish them from regular nodes.
+ +
+
+ +

◆ getLandmarks()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Link > & rtabmap::Signature::getLandmarks () const
+
+inline
+
+ +

Returns all landmark observations.

+
Returns
Const reference to the map of landmark IDs to landmark links
+ +

Definition at line 332 of file Signature.h.

+ +
+
+ +

◆ removeLandmark()

+ +
+
+ + + + + + + + +
void rtabmap::Signature::removeLandmark (int landmarkId)
+
+ +

Removes a specific landmark observation.

+
Parameters
+ + +
landmarkIdThe landmark ID to remove
+
+
+ +
+
+ +

◆ setSaved()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Signature::setSaved (bool saved)
+
+inline
+
+ +

Sets whether this signature has been saved to the database.

+
Parameters
+ + +
savedTrue if saved, false otherwise
+
+
+ +

Definition at line 349 of file Signature.h.

+ +
+
+ +

◆ setModified()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Signature::setModified (bool modified)
+
+inline
+
+ +

Sets the modification flag for this signature.

+

Marks the signature as modified (or unmodified). When set to true, also marks links as modified.

+
Parameters
+ + +
modifiedTrue if modified, false otherwise
+
+
+ +

Definition at line 359 of file Signature.h.

+ +
+
+ +

◆ getLinks()

+ +
+
+ + + + + +
+ + + + + + + +
const std::multimap< int, Link > & rtabmap::Signature::getLinks () const
+
+inline
+
+ +

Returns all links from this signature.

+
Returns
Const reference to the multimap of target IDs to links
+ +

Definition at line 365 of file Signature.h.

+ +
+
+ +

◆ isSaved()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Signature::isSaved () const
+
+inline
+
+ +

Checks if this signature has been saved to the database.

+
Returns
True if saved, false otherwise
+ +

Definition at line 371 of file Signature.h.

+ +
+
+ +

◆ isModified()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Signature::isModified () const
+
+inline
+
+ +

Checks if this signature has been modified.

+

Returns true if either the signature data or links have been modified.

+
Returns
True if modified, false otherwise
+ +

Definition at line 380 of file Signature.h.

+ +
+
+ +

◆ isLinksModified()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Signature::isLinksModified () const
+
+inline
+
+ +

Checks if the links have been modified.

+
Returns
True if links are modified, false otherwise
+ +

Definition at line 386 of file Signature.h.

+ +
+
+ +

◆ removeAllWords()

+ +
+
+ + + + + + + +
void rtabmap::Signature::removeAllWords ()
+
+ +

Removes all visual words from this signature.

+

Clears all visual words, keypoints, 3D points, and descriptors. The signature will be disabled after this operation.

+ +
+
+ +

◆ changeWordsRef()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::Signature::changeWordsRef (int oldWordId,
int activeWordId 
)
+
+ +

Changes visual word references from one word ID to another.

+

Updates all occurrences of oldWordId to activeWordId in the visual words. This is used when words are merged or reorganized in the dictionary.

+
Parameters
+ + + +
oldWordIdThe original word ID to replace
activeWordIdThe new word ID to use
+
+
+
Note
Tracks word ID changes in _wordsChanged for reference.
+ +
+
+ +

◆ setWords()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Signature::setWords (const std::multimap< int, int > & words,
const std::vector< cv::KeyPoint > & keypoints,
const std::vector< cv::Point3f > & words3,
const cv::Mat & descriptors 
)
+
+ +

Sets all visual words for this signature.

+

Sets the complete visual word representation including word IDs, keypoints, 3D points, and descriptors. All arrays must have matching sizes.

+
Parameters
+ + + + + +
wordsMultimap of word IDs to keypoint indices (allows duplicate words). The keypoint indices match the keypoints, points and descriptors.
keypointsVector of 2D keypoints in image coordinates. The keypoints must be in the same order as the words.
words3Vector of 3D points in base_link frame (with localTransform applied). The points must be in the same order as the words.
descriptorsFeature descriptors matrix (one row per word). The descriptors must be in the same order as the words.
+
+
+
Note
The signature is disabled after setting words (must be explicitly enabled).
+
+Invalid words (ID <= 0) are counted in _invalidWordsCount.
+
+All arrays must have the same size (number of words).
+ +
+
+ +

◆ isEnabled()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Signature::isEnabled () const
+
+inline
+
+ +

Checks if this signature is enabled.

+

Enabled signatures can be used for place recognition and loop closure detection. More explicitly, it means that the signature is registered to the VWDictionary (see Memory::enableWordsRef).

+
Returns
True if enabled, false otherwise
+ +

Definition at line 436 of file Signature.h.

+ +
+
+ +

◆ setEnabled()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Signature::setEnabled (bool enabled)
+
+inline
+
+ +

Sets whether this signature is enabled.

+
Parameters
+ + +
enabledTrue to enable, false to disable
+
+
+ +

Definition at line 442 of file Signature.h.

+ +
+
+ +

◆ getWords()

+ +
+
+ + + + + +
+ + + + + + + +
const std::multimap< int, int > & rtabmap::Signature::getWords () const
+
+inline
+
+ +

Returns the visual words map.

+

Returns a multimap of word IDs to keypoint indices. The multimap allows duplicate word IDs (a word can appear multiple times in the signature).

+
Returns
Const reference to the words multimap
+ +

Definition at line 452 of file Signature.h.

+ +
+
+ +

◆ getWordsKpts()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< cv::KeyPoint > & rtabmap::Signature::getWordsKpts () const
+
+inline
+
+ +

Returns the keypoints associated with visual words.

+
Returns
Const reference to the vector of 2D keypoints
+ +

Definition at line 458 of file Signature.h.

+ +
+
+ +

◆ getInvalidWordsCount()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Signature::getInvalidWordsCount () const
+
+inline
+
+ +

Returns the count of invalid visual words.

+

Invalid words are those with ID <= 0. These words cannot be used for place recognition. However, they are still used for transform estimation after loop closures are detected with the valid words.

+
Returns
Number of invalid words
+ +

Definition at line 469 of file Signature.h.

+ +
+
+ +

◆ getWordsChanged()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, int > & rtabmap::Signature::getWordsChanged () const
+
+inline
+
+ +

Returns the word ID change mapping.

+

Returns a map of old word IDs to new word IDs, tracking changes made through changeWordsRef().

+
Returns
Const reference to the word ID change map
+ +

Definition at line 479 of file Signature.h.

+ +
+
+ +

◆ getWordsDescriptors()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::Signature::getWordsDescriptors () const
+
+inline
+
+ +

Returns the feature descriptors for visual words.

+
Returns
Const reference to the descriptors matrix (one row per word)
+ +

Definition at line 485 of file Signature.h.

+ +
+
+ +

◆ setWordsDescriptors()

+ +
+
+ + + + + + + + +
void rtabmap::Signature::setWordsDescriptors (const cv::Mat & descriptors)
+
+ +

Sets the feature descriptors for visual words.

+

Updates the descriptors matrix. The number of rows must match the number of visual words.

+
Parameters
+ + +
descriptorsDescriptors matrix (one row per word)
+
+
+ +
+
+ +

◆ setPose()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Signature::setPose (const Transform & pose)
+
+inline
+
+ +

Sets the pose of this signature.

+

The pose represents the position and orientation of this signature in the odometry coordinate frame. To get the pose in map coordinate frame, use the map correction transform computed by graph optimization and apply it to this pose.

+
Parameters
+ + +
poseThe transform representing the pose in the odometry coordinate frame.
+
+
+
// Get pose in map coordinate frame
+
Statistics stats;
+
Transform poseInMapFrame = stats.mapCorrection() * signature.getPose();
+
// poseInMapFrame is the pose in map coordinate frame
+
// signature.getPose() returns the pose in odometry coordinate frame
+
Collects and manages runtime statistics for RTAB-Map.
Definition Statistics.h:108
+
const Transform & mapCorrection() const
Returns the map correction transform.
Definition Statistics.h:657
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
See also
Statistics::mapCorrection()
+
+getPose()
+ +

Definition at line 519 of file Signature.h.

+ +
+
+ +

◆ setGroundTruthPose()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Signature::setGroundTruthPose (const Transform & pose)
+
+inline
+
+ +

Sets the ground truth pose for evaluation.

+

Ground truth poses are used for evaluating localization accuracy and comparing against the estimated pose.

+
Parameters
+ + +
poseThe ground truth transform
+
+
+ +

Definition at line 529 of file Signature.h.

+ +
+
+ +

◆ setVelocity()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::Signature::setVelocity (float vx,
float vy,
float vz,
float vroll,
float vpitch,
float vyaw 
)
+
+inline
+
+ +

Sets the velocity of this signature.

+

Sets the 6DOF velocity (linear and angular) at the time this signature was captured.

+
Parameters
+ + + + + + + +
vxLinear velocity in x direction (m/s)
vyLinear velocity in y direction (m/s)
vzLinear velocity in z direction (m/s)
vrollAngular velocity around x axis (rad/s)
vpitchAngular velocity around y axis (rad/s)
vyawAngular velocity around z axis (rad/s)
+
+
+ +

Definition at line 544 of file Signature.h.

+ +
+
+ +

◆ getWords3()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< cv::Point3f > & rtabmap::Signature::getWords3 () const
+
+inline
+
+ +

Returns the 3D points of visual words.

+

Returns the 3D coordinates of visual words in the base_link frame (with localTransform applied).

+
Returns
Const reference to the vector of 3D points
+ +

Definition at line 562 of file Signature.h.

+ +
+
+ +

◆ getPose()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Signature::getPose () const
+
+inline
+
+ +

Returns the pose of this signature.

+
Returns
Const reference to the pose transform in the odometry coordinate frame.
+
See also
setPose() for an example of how to get the pose in map coordinate frame.
+ +

Definition at line 569 of file Signature.h.

+ +
+
+ +

◆ getPoseCovariance()

+ +
+
+ + + + + + + +
cv::Mat rtabmap::Signature::getPoseCovariance () const
+
+ +

Gets the pose covariance matrix.

+

Gets the covariance matrix representing the uncertainty between the current pose and the previous pose (e.g, from the odometry link with the previous signature).

+
Returns
6x6 covariance matrix (3x3 for translation, 3x3 for rotation)
+ +
+
+ +

◆ getGroundTruthPose()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Signature::getGroundTruthPose () const
+
+inline
+
+ +

Returns the ground truth pose.

+
Returns
Const reference to the ground truth transform
+ +

Definition at line 585 of file Signature.h.

+ +
+
+ +

◆ getVelocity()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< float > & rtabmap::Signature::getVelocity () const
+
+inline
+
+ +

Returns the velocity of this signature.

+
Returns
Const reference to the velocity vector [vx, vy, vz, vroll, vpitch, vyaw]
+ +

Definition at line 591 of file Signature.h.

+ +
+
+ +

◆ sensorData() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
SensorData & rtabmap::Signature::sensorData ()
+
+inline
+
+ +

Returns mutable access to the sensor data.

+
Returns
Reference to the sensor data
+ +

Definition at line 597 of file Signature.h.

+ +
+
+ +

◆ sensorData() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
const SensorData & rtabmap::Signature::sensorData () const
+
+inline
+
+ +

Returns const access to the sensor data.

+
Returns
Const reference to the sensor data
+ +

Definition at line 603 of file Signature.h.

+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + + + + +
unsigned long rtabmap::Signature::getMemoryUsed (bool withSensorData = true) const
+
+ +

Computes the memory usage of this signature.

+

Calculates the approximate memory footprint of this signature, including visual words, links, sensor data, and other internal structures.

+
Parameters
+ + +
withSensorDataIf true, includes sensor data in the calculation
+
+
+
Returns
Memory usage in bytes
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Statistics-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Statistics-members.html new file mode 100644 index 00000000..ee8c7c7a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Statistics-members.html @@ -0,0 +1,152 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Statistics Member List
+
+
+ +

This is the complete list of members for rtabmap::Statistics, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addSignatureData(const Signature &data)rtabmap::Statisticsinline
addStatistic(const std::string &name, float value)rtabmap::Statistics
constraints() constrtabmap::Statisticsinline
currentGoalId() constrtabmap::Statisticsinline
data() constrtabmap::Statisticsinline
defaultData()rtabmap::Statisticsstatic
deserializeData(const std::string &data)rtabmap::Statisticsstatic
extended() constrtabmap::Statisticsinline
getLastSignatureData() constrtabmap::Statisticsinline
getSignaturesData() constrtabmap::Statisticsinline
labels() constrtabmap::Statisticsinline
likelihood() constrtabmap::Statisticsinline
localizationCovariance() constrtabmap::Statisticsinline
localPath() constrtabmap::Statisticsinline
loopClosureId() constrtabmap::Statisticsinline
loopClosureMapId() constrtabmap::Statisticsinline
loopClosureTransform() constrtabmap::Statisticsinline
mapCorrection() constrtabmap::Statisticsinline
odomCacheConstraints() constrtabmap::Statisticsinline
odomCachePoses() constrtabmap::Statisticsinline
poses() constrtabmap::Statisticsinline
posterior() constrtabmap::Statisticsinline
proximityDetectionId() constrtabmap::Statisticsinline
proximityDetectionMapId() constrtabmap::Statisticsinline
rawLikelihood() constrtabmap::Statisticsinline
reducedIds() constrtabmap::Statisticsinline
refImageId() constrtabmap::Statisticsinline
refImageMapId() constrtabmap::Statisticsinline
serializeData(const std::map< std::string, float > &data)rtabmap::Statisticsstatic
setConstraints(const std::multimap< int, Link > &constraints)rtabmap::Statisticsinline
setCurrentGoalId(int goal)rtabmap::Statisticsinline
setExtended(bool extended)rtabmap::Statisticsinline
setLabels(const std::map< int, std::string > &labels)rtabmap::Statisticsinline
setLastSignatureData(const Signature &data)rtabmap::Statistics
setLikelihood(const std::map< int, float > &likelihood)rtabmap::Statisticsinline
setLocalizationCovariance(const cv::Mat &covariance)rtabmap::Statisticsinline
setLocalPath(const std::vector< int > &localPath)rtabmap::Statisticsinline
setLoopClosureId(int id)rtabmap::Statisticsinline
setLoopClosureMapId(int id)rtabmap::Statisticsinline
setLoopClosureTransform(const Transform &loopClosureTransform)rtabmap::Statisticsinline
setMapCorrection(const Transform &mapCorrection)rtabmap::Statisticsinline
setOdomCacheConstraints(const std::multimap< int, Link > &constraints)rtabmap::Statisticsinline
setOdomCachePoses(const std::map< int, Transform > &poses)rtabmap::Statisticsinline
setPoses(const std::map< int, Transform > &poses)rtabmap::Statisticsinline
setPosterior(const std::map< int, float > &posterior)rtabmap::Statisticsinline
setProximityDetectionId(int id)rtabmap::Statisticsinline
setProximityDetectionMapId(int id)rtabmap::Statisticsinline
setRawLikelihood(const std::map< int, float > &rawLikelihood)rtabmap::Statisticsinline
setReducedIds(const std::map< int, int > &reducedIds)rtabmap::Statisticsinline
setRefImageId(int id)rtabmap::Statisticsinline
setRefImageMapId(int id)rtabmap::Statisticsinline
setSignaturesData(const std::map< int, Signature > &data)rtabmap::Statisticsinline
setStamp(double stamp)rtabmap::Statisticsinline
setWeights(const std::map< int, int > &weights)rtabmap::Statisticsinline
setWmState(const std::vector< int > &state)rtabmap::Statisticsinline
stamp() constrtabmap::Statisticsinline
Statistics()rtabmap::Statistics
weights() constrtabmap::Statisticsinline
wmState() constrtabmap::Statisticsinline
~Statistics()rtabmap::Statisticsvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Statistics.html b/preview/pr-1492/api/latest/classrtabmap_1_1Statistics.html new file mode 100644 index 00000000..a10f804a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Statistics.html @@ -0,0 +1,2266 @@ + + + + + + + + +RTAB-Map: rtabmap::Statistics Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::Statistics Class Reference
+
+
+ +

Collects and manages runtime statistics for RTAB-Map. + More...

+ +

#include <Statistics.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Statistics ()
 Default constructor.
 
+virtual ~Statistics ()
 Virtual destructor.
 
void addStatistic (const std::string &name, float value)
 Adds a statistic value to the data map.
 
void setExtended (bool extended)
 Sets whether extended statistics mode is enabled.
 
void setRefImageId (int id)
 Sets the reference image ID (current/last processed signature ID)
 
void setRefImageMapId (int id)
 Sets the reference image map ID.
 
void setLoopClosureId (int id)
 Sets the loop closure detection ID.
 
void setLoopClosureMapId (int id)
 Sets the loop closure map ID.
 
void setProximityDetectionId (int id)
 Sets the proximity detection ID.
 
void setProximityDetectionMapId (int id)
 Sets the proximity detection map ID.
 
void setStamp (double stamp)
 Sets the timestamp for these statistics.
 
RTABMAP_DEPRECATED void setLastSignatureData (const Signature &data)
 Sets the last signature data (deprecated)
 
void addSignatureData (const Signature &data)
 Adds signature data to the statistics.
 
void setSignaturesData (const std::map< int, Signature > &data)
 Sets all signature data at once.
 
void setPoses (const std::map< int, Transform > &poses)
 Sets the pose graph (node poses)
 
void setConstraints (const std::multimap< int, Link > &constraints)
 Sets the constraint graph (links between nodes)
 
void setMapCorrection (const Transform &mapCorrection)
 Sets the map correction transform.
 
void setLoopClosureTransform (const Transform &loopClosureTransform)
 Sets the loop closure transform.
 
void setLocalizationCovariance (const cv::Mat &covariance)
 Sets the localization covariance matrix.
 
void setLabels (const std::map< int, std::string > &labels)
 Sets node labels.
 
void setWeights (const std::map< int, int > &weights)
 Sets node weights.
 
void setPosterior (const std::map< int, float > &posterior)
 Sets posterior probabilities for loop closure hypotheses.
 
void setLikelihood (const std::map< int, float > &likelihood)
 Sets likelihood values for loop closure hypotheses.
 
void setRawLikelihood (const std::map< int, float > &rawLikelihood)
 Sets raw likelihood values (before normalization)
 
void setLocalPath (const std::vector< int > &localPath)
 Sets the local path (sequence of node IDs)
 
void setCurrentGoalId (int goal)
 Sets the current goal node ID.
 
void setReducedIds (const std::map< int, int > &reducedIds)
 Sets the reduced IDs mapping.
 
void setWmState (const std::vector< int > &state)
 Sets the working memory state.
 
void setOdomCachePoses (const std::map< int, Transform > &poses)
 Sets odometry cache poses.
 
void setOdomCacheConstraints (const std::multimap< int, Link > &constraints)
 Sets odometry cache constraints.
 
bool extended () const
 Returns whether extended statistics mode is enabled.
 
int refImageId () const
 Returns the reference image ID.
 
int refImageMapId () const
 Returns the reference image map ID.
 
int loopClosureId () const
 Returns the loop closure detection ID.
 
int loopClosureMapId () const
 Returns the loop closure map ID.
 
int proximityDetectionId () const
 Returns the proximity detection ID.
 
int proximityDetectionMapId () const
 Returns the proximity detection map ID.
 
double stamp () const
 Returns the timestamp.
 
const Signature & getLastSignatureData () const
 Returns the last signature data.
 
const std::map< int, Signature > & getSignaturesData () const
 Returns all signature data.
 
const std::map< int, Transform > & poses () const
 Returns the pose graph.
 
const std::multimap< int, Link > & constraints () const
 Returns the constraint graph.
 
const Transform & mapCorrection () const
 Returns the map correction transform.
 
const Transform & loopClosureTransform () const
 Returns the loop closure transform.
 
const cv::Mat & localizationCovariance () const
 Returns the localization covariance matrix.
 
const std::map< int, std::string > & labels () const
 Returns node labels.
 
const std::map< int, int > & weights () const
 Returns node weights.
 
const std::map< int, float > & posterior () const
 Returns posterior probabilities.
 
const std::map< int, float > & likelihood () const
 Returns likelihood values.
 
const std::map< int, float > & rawLikelihood () const
 Returns raw likelihood values.
 
const std::vector< int > & localPath () const
 Returns the local path.
 
int currentGoalId () const
 Returns the current goal node ID.
 
const std::map< int, int > & reducedIds () const
 Returns the reduced IDs mapping.
 
const std::vector< int > & wmState () const
 Returns the working memory state.
 
const std::map< int, Transform > & odomCachePoses () const
 Returns odometry cache poses.
 
const std::multimap< int, Link > & odomCacheConstraints () const
 Returns odometry cache constraints.
 
const std::map< std::string, float > & data () const
 Returns the statistics data map.
 
+ + + + + + + + + + +

+Static Public Member Functions

static const std::map< std::string, float > & defaultData ()
 Returns the default statistics data map.
 
static std::string serializeData (const std::map< std::string, float > &data)
 Serializes a statistics data map to a string.
 
static std::map< std::string, float > deserializeData (const std::string &data)
 Deserializes a statistics data map from a string.
 
+

Detailed Description

+

Collects and manages runtime statistics for RTAB-Map.

+

The Statistics class provides a comprehensive system for collecting, storing, and managing various runtime statistics about RTAB-Map's operation. Statistics are organized into groups such as:

    +
  • Loop: Loop closure detection, hypothesis validation, optimization errors
  • +
  • Proximity: Proximity-based detection statistics
  • +
  • Memory: Working memory size, database usage, signature management
  • +
  • Timing: Performance measurements for various operations
  • +
  • Keypoint: Visual word dictionary and feature statistics
  • +
  • Gt: Ground truth comparison statistics
  • +
+

Statistics are stored in a map with keys in the format "Group/Name/Unit" (e.g., "Timing/Total time/ms"). This hierarchical naming allows for easy categorization and plotting.

+

The class supports two modes:

    +
  • Basic mode (extended() == false): Only stores loop closure and last signature ID fields
  • +
  • Extended mode (extended() == true): Stores all available statistics including poses, constraints, likelihoods, posteriors, and detailed timing information
  • +
+

Statistics can be serialized to/from strings for storage in databases or transmission over networks.

+
Note
Statistics are typically created by RTAB-Map's core components (Rtabmap, Memory, etc.) and can be retrieved for analysis, visualization, or debugging purposes.
+ +

Definition at line 107 of file Statistics.h.

+

Constructor & Destructor Documentation

+ +

◆ Statistics()

+ +
+
+ + + + + + + +
rtabmap::Statistics::Statistics ()
+
+ +

Default constructor.

+

Creates a new Statistics object in basic mode (extended = false). Initializes all ID fields to 0 or -1, and timestamp to 0.0.

+
Note
The first Statistics object constructed will initialize the default data map.
+ +
+
+

Member Function Documentation

+ +

◆ defaultData()

+ +
+
+ + + + + +
+ + + + + + + +
static const std::map< std::string, float > & rtabmap::Statistics::defaultData ()
+
+static
+
+ +

Returns the default statistics data map.

+

Returns a map containing all predefined statistics with their default values (0.0). This map is initialized when the first Statistics object is constructed.

+
Returns
Const reference to the default statistics data map
+ +
+
+ +

◆ serializeData()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string rtabmap::Statistics::serializeData (const std::map< std::string, float > & data)
+
+static
+
+ +

Serializes a statistics data map to a string.

+

Converts a statistics data map into a serialized string format suitable for storage or transmission. The format is: "key1:value1;key2:value2;..." where values are formatted as numbers with dots (not commas) as decimal separators (independent of the system's locale).

+
Parameters
+ + +
dataThe statistics data map to serialize
+
+
+
Returns
Serialized string representation of the data
+
Note
Empty maps result in empty strings
+
See also
deserializeData()
+ +
+
+ +

◆ deserializeData()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::map< std::string, float > rtabmap::Statistics::deserializeData (const std::string & data)
+
+static
+
+ +

Deserializes a statistics data map from a string.

+

Parses a serialized statistics string back into a data map. The string format should be: "key1:value1;key2:value2;..." as produced by serializeData().

+
Parameters
+ + +
dataThe serialized string to parse
+
+
+
Returns
Deserialized statistics data map
+
Note
Invalid entries (missing colons, malformed values) are silently skipped
+
See also
serializeData()
+ +
+
+ +

◆ addStatistic()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::Statistics::addStatistic (const std::string & name,
float value 
)
+
+ +

Adds a statistic value to the data map.

+

Adds or updates a statistic in the internal data map. The name should follow the format "Group/Name/Unit" (e.g., "Timing/Total time/ms").

+
Parameters
+ + + +
nameThe statistic name in the format "Group/Name/Unit"
valueThe statistic value to store
+
+
+
Note
If a statistic with the same name already exists, it will be overwritten.
+
+Use the static methods generated by RTABMAP_STATS() to get standardized names:
statistics.addStatistic(Statistics::kTimingTotal(), 500.0f);
+
+ +
+
+ +

◆ setExtended()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setExtended (bool extended)
+
+inline
+
+ +

Sets whether extended statistics mode is enabled.

+

In basic mode (extended = false), only loop closure and last signature ID fields are filled. In extended mode (extended = true), all available statistics including poses, constraints, likelihoods, posteriors, and detailed timing information are stored.

+
Parameters
+ + +
extendedTrue to enable extended mode, false for basic mode
+
+
+ +

Definition at line 367 of file Statistics.h.

+ +
+
+ +

◆ setRefImageId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setRefImageId (int id)
+
+inline
+
+ +

Sets the reference image ID (current/last processed signature ID)

+
Parameters
+ + +
idThe signature ID
+
+
+ +

Definition at line 373 of file Statistics.h.

+ +
+
+ +

◆ setRefImageMapId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setRefImageMapId (int id)
+
+inline
+
+ +

Sets the reference image map ID.

+
Parameters
+ + +
idThe map ID associated with the reference image
+
+
+ +

Definition at line 379 of file Statistics.h.

+ +
+
+ +

◆ setLoopClosureId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setLoopClosureId (int id)
+
+inline
+
+ +

Sets the loop closure detection ID.

+
Parameters
+ + +
idThe signature ID where a loop closure was detected (0 if none)
+
+
+ +

Definition at line 385 of file Statistics.h.

+ +
+
+ +

◆ setLoopClosureMapId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setLoopClosureMapId (int id)
+
+inline
+
+ +

Sets the loop closure map ID.

+
Parameters
+ + +
idThe map ID associated with the loop closure
+
+
+ +

Definition at line 391 of file Statistics.h.

+ +
+
+ +

◆ setProximityDetectionId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setProximityDetectionId (int id)
+
+inline
+
+ +

Sets the proximity detection ID.

+
Parameters
+ + +
idThe signature ID where proximity was detected (0 if none)
+
+
+ +

Definition at line 397 of file Statistics.h.

+ +
+
+ +

◆ setProximityDetectionMapId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setProximityDetectionMapId (int id)
+
+inline
+
+ +

Sets the proximity detection map ID.

+
Parameters
+ + +
idThe map ID associated with the proximity detection
+
+
+ +

Definition at line 403 of file Statistics.h.

+ +
+
+ +

◆ setStamp()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setStamp (double stamp)
+
+inline
+
+ +

Sets the timestamp for these statistics.

+
Parameters
+ + +
stampThe timestamp (typically in seconds since epoch)
+
+
+ +

Definition at line 409 of file Statistics.h.

+ +
+
+ +

◆ setLastSignatureData()

+ +
+
+ + + + + + + + +
RTABMAP_DEPRECATED void rtabmap::Statistics::setLastSignatureData (const Signature & data)
+
+ +

Sets the last signature data (deprecated)

+
Deprecated:
Use addSignatureData() instead
+

This method is deprecated. Use addSignatureData() instead, which allows storing multiple signatures.

+ +
+
+ +

◆ addSignatureData()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::addSignatureData (const Signature & data)
+
+inline
+
+ +

Adds signature data to the statistics.

+

Adds a signature to the internal signatures data map. Multiple signatures can be stored, indexed by their ID.

+
Parameters
+ + +
dataThe signature to add
+
+
+
Note
If a signature with the same ID already exists, it will be overwritten.
+ +

Definition at line 430 of file Statistics.h.

+ +
+
+ +

◆ setSignaturesData()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setSignaturesData (const std::map< int, Signature > & data)
+
+inline
+
+ +

Sets all signature data at once.

+
Parameters
+ + +
dataMap of signature IDs to Signature objects
+
+
+ +

Definition at line 436 of file Statistics.h.

+ +
+
+ +

◆ setPoses()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setPoses (const std::map< int, Transform > & poses)
+
+inline
+
+ +

Sets the pose graph (node poses)

+

Sets the complete pose graph, mapping node IDs to their Transform poses. Used in extended mode for visualization and analysis.

+
Parameters
+ + +
posesMap of node IDs to their poses
+
+
+ +

Definition at line 446 of file Statistics.h.

+ +
+
+ +

◆ setConstraints()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setConstraints (const std::multimap< int, Link > & constraints)
+
+inline
+
+ +

Sets the constraint graph (links between nodes)

+

Sets the complete constraint graph, mapping node IDs to their Link constraints. Used in extended mode for visualization and analysis.

+
Parameters
+ + +
constraintsMultimap of node IDs to their links (a node can have multiple links)
+
+
+ +

Definition at line 456 of file Statistics.h.

+ +
+
+ +

◆ setMapCorrection()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setMapCorrection (const Transform & mapCorrection)
+
+inline
+
+ +

Sets the map correction transform.

+

The map correction transform represents the transformation from the map fixed frame to the odometry fixed frame. This transform is typically updated after graph optimization to transform the odometry pose in map frame.

+
Parameters
+ + +
mapCorrectionThe pose of odometry frame in map coordinate system
+
+
+ +

Definition at line 467 of file Statistics.h.

+ +
+
+ +

◆ setLoopClosureTransform()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setLoopClosureTransform (const Transform & loopClosureTransform)
+
+inline
+
+ +

Sets the loop closure transform.

+

The transform between the current pose and the loop closure pose.

+
Parameters
+ + +
loopClosureTransformThe loop closure transform
+
+
+ +

Definition at line 476 of file Statistics.h.

+ +
+
+ +

◆ setLocalizationCovariance()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setLocalizationCovariance (const cv::Mat & covariance)
+
+inline
+
+ +

Sets the localization covariance matrix.

+

The covariance matrix representing the uncertainty in the current localization estimate.

+
Parameters
+ + +
covarianceThe covariance matrix (typically 6x6 for 3D pose)
+
+
+ +

Definition at line 485 of file Statistics.h.

+ +
+
+ +

◆ setLabels()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setLabels (const std::map< int, std::string > & labels)
+
+inline
+
+ +

Sets node labels.

+
Parameters
+ + +
labelsMap of node IDs to their string labels
+
+
+ +

Definition at line 491 of file Statistics.h.

+ +
+
+ +

◆ setWeights()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setWeights (const std::map< int, int > & weights)
+
+inline
+
+ +

Sets node weights.

+
Parameters
+ + +
weightsMap of node IDs to their integer weights
+
+
+ +

Definition at line 497 of file Statistics.h.

+ +
+
+ +

◆ setPosterior()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setPosterior (const std::map< int, float > & posterior)
+
+inline
+
+ +

Sets posterior probabilities for loop closure hypotheses.

+
Parameters
+ + +
posteriorMap of node IDs to their posterior probabilities
+
+
+ +

Definition at line 504 of file Statistics.h.

+ +
+
+ +

◆ setLikelihood()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setLikelihood (const std::map< int, float > & likelihood)
+
+inline
+
+ +

Sets likelihood values for loop closure hypotheses.

+

Likelihood values represent how well each hypothesis matches the current observation.

+
Parameters
+ + +
likelihoodMap of node IDs to their likelihood values
+
+
+ +

Definition at line 513 of file Statistics.h.

+ +
+
+ +

◆ setRawLikelihood()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setRawLikelihood (const std::map< int, float > & rawLikelihood)
+
+inline
+
+ +

Sets raw likelihood values (before normalization)

+
Parameters
+ + +
rawLikelihoodMap of node IDs to their raw likelihood values
+
+
+ +

Definition at line 519 of file Statistics.h.

+ +
+
+ +

◆ setLocalPath()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setLocalPath (const std::vector< int > & localPath)
+
+inline
+
+ +

Sets the local path (sequence of node IDs)

+

The local path represents the sequence of next nodes to visit for path planning.

+
Parameters
+ + +
localPathVector of node IDs in order of next nodes to visit
+
+
+ +

Definition at line 528 of file Statistics.h.

+ +
+
+ +

◆ setCurrentGoalId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setCurrentGoalId (int goal)
+
+inline
+
+ +

Sets the current goal node ID.

+
Parameters
+ + +
goalThe goal node ID (0 if no goal)
+
+
+ +

Definition at line 534 of file Statistics.h.

+ +
+
+ +

◆ setReducedIds()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setReducedIds (const std::map< int, int > & reducedIds)
+
+inline
+
+ +

Sets the reduced IDs mapping.

+

Maps original node IDs to reduced IDs, used for memory optimization.

+
Parameters
+ + +
reducedIdsMap of original IDs to reduced IDs
+
+
+ +

Definition at line 543 of file Statistics.h.

+ +
+
+ +

◆ setWmState()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setWmState (const std::vector< int > & state)
+
+inline
+
+ +

Sets the working memory state.

+

The working memory state is a vector of node IDs currently in working memory.

+
Parameters
+ + +
stateVector of node IDs in working memory
+
+
+ +

Definition at line 552 of file Statistics.h.

+ +
+
+ +

◆ setOdomCachePoses()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setOdomCachePoses (const std::map< int, Transform > & poses)
+
+inline
+
+ +

Sets odometry cache poses.

+

Cached odometry poses during localization mode.

+
Parameters
+ + +
posesMap of node IDs to their cached odometry poses
+
+
+ +

Definition at line 561 of file Statistics.h.

+ +
+
+ +

◆ setOdomCacheConstraints()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::Statistics::setOdomCacheConstraints (const std::multimap< int, Link > & constraints)
+
+inline
+
+ +

Sets odometry cache constraints.

+

Cached odometry constraints (links) between nodes.

+
Parameters
+ + +
constraintsMultimap of node IDs to their cached odometry links
+
+
+ +

Definition at line 570 of file Statistics.h.

+ +
+
+ +

◆ extended()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Statistics::extended () const
+
+inline
+
+ +

Returns whether extended statistics mode is enabled.

+
Returns
True if extended mode, false if basic mode
+ +

Definition at line 578 of file Statistics.h.

+ +
+
+ +

◆ refImageId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Statistics::refImageId () const
+
+inline
+
+ +

Returns the reference image ID.

+
Returns
The signature ID (0 if not set)
+ +

Definition at line 584 of file Statistics.h.

+ +
+
+ +

◆ refImageMapId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Statistics::refImageMapId () const
+
+inline
+
+ +

Returns the reference image map ID.

+
Returns
The map ID (-1 if not set)
+ +

Definition at line 590 of file Statistics.h.

+ +
+
+ +

◆ loopClosureId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Statistics::loopClosureId () const
+
+inline
+
+ +

Returns the loop closure detection ID.

+
Returns
The signature ID where loop closure was detected (0 if none)
+ +

Definition at line 596 of file Statistics.h.

+ +
+
+ +

◆ loopClosureMapId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Statistics::loopClosureMapId () const
+
+inline
+
+ +

Returns the loop closure map ID.

+
Returns
The map ID associated with the loop closure (-1 if not set)
+ +

Definition at line 602 of file Statistics.h.

+ +
+
+ +

◆ proximityDetectionId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Statistics::proximityDetectionId () const
+
+inline
+
+ +

Returns the proximity detection ID.

+
Returns
The signature ID where proximity was detected (0 if none)
+ +

Definition at line 608 of file Statistics.h.

+ +
+
+ +

◆ proximityDetectionMapId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Statistics::proximityDetectionMapId () const
+
+inline
+
+ +

Returns the proximity detection map ID.

+
Returns
The map ID associated with the proximity detection (-1 if not set)
+ +

Definition at line 614 of file Statistics.h.

+ +
+
+ +

◆ stamp()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::Statistics::stamp () const
+
+inline
+
+ +

Returns the timestamp.

+
Returns
The timestamp (0.0 if not set)
+ +

Definition at line 620 of file Statistics.h.

+ +
+
+ +

◆ getLastSignatureData()

+ +
+
+ + + + + +
+ + + + + + + +
const Signature & rtabmap::Statistics::getLastSignatureData () const
+
+inline
+
+ +

Returns the last signature data.

+

Returns the most recently added signature (by ID). If no signatures are stored, returns a dummy empty signature.

+
Returns
Reference to the last signature data
+ +

Definition at line 630 of file Statistics.h.

+ +
+
+ +

◆ getSignaturesData()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Signature > & rtabmap::Statistics::getSignaturesData () const
+
+inline
+
+ +

Returns all signature data.

+
Returns
Const reference to the map of signature IDs to Signature objects
+ +

Definition at line 636 of file Statistics.h.

+ +
+
+ +

◆ poses()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Transform > & rtabmap::Statistics::poses () const
+
+inline
+
+ +

Returns the pose graph.

+
Returns
Const reference to the map of node IDs to poses
+ +

Definition at line 642 of file Statistics.h.

+ +
+
+ +

◆ constraints()

+ +
+
+ + + + + +
+ + + + + + + +
const std::multimap< int, Link > & rtabmap::Statistics::constraints () const
+
+inline
+
+ +

Returns the constraint graph.

+
Returns
Const reference to the multimap of node IDs to links
+ +

Definition at line 648 of file Statistics.h.

+ +
+
+ +

◆ mapCorrection()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Statistics::mapCorrection () const
+
+inline
+
+ +

Returns the map correction transform.

+

Returns the transform from the map fixed frame to the odometry fixed frame.

+
Returns
Const reference to the map correction transform
+ +

Definition at line 657 of file Statistics.h.

+ +
+
+ +

◆ loopClosureTransform()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::Statistics::loopClosureTransform () const
+
+inline
+
+ +

Returns the loop closure transform.

+
Returns
Const reference to the loop closure transform
+ +

Definition at line 663 of file Statistics.h.

+ +
+
+ +

◆ localizationCovariance()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::Statistics::localizationCovariance () const
+
+inline
+
+ +

Returns the localization covariance matrix.

+
Returns
Const reference to the covariance matrix (may be empty)
+ +

Definition at line 669 of file Statistics.h.

+ +
+
+ +

◆ labels()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, std::string > & rtabmap::Statistics::labels () const
+
+inline
+
+ +

Returns node labels.

+
Returns
Const reference to the map of node IDs to labels
+ +

Definition at line 675 of file Statistics.h.

+ +
+
+ +

◆ weights()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, int > & rtabmap::Statistics::weights () const
+
+inline
+
+ +

Returns node weights.

+
Returns
Const reference to the map of node IDs to weights
+ +

Definition at line 681 of file Statistics.h.

+ +
+
+ +

◆ posterior()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, float > & rtabmap::Statistics::posterior () const
+
+inline
+
+ +

Returns posterior probabilities.

+
Returns
Const reference to the map of node IDs to posterior probabilities
+ +

Definition at line 687 of file Statistics.h.

+ +
+
+ +

◆ likelihood()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, float > & rtabmap::Statistics::likelihood () const
+
+inline
+
+ +

Returns likelihood values.

+
Returns
Const reference to the map of node IDs to likelihood values
+ +

Definition at line 693 of file Statistics.h.

+ +
+
+ +

◆ rawLikelihood()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, float > & rtabmap::Statistics::rawLikelihood () const
+
+inline
+
+ +

Returns raw likelihood values.

+
Returns
Const reference to the map of node IDs to raw likelihood values
+ +

Definition at line 699 of file Statistics.h.

+ +
+
+ +

◆ localPath()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< int > & rtabmap::Statistics::localPath () const
+
+inline
+
+ +

Returns the local path.

+
Returns
Const reference to the vector of node IDs
+ +

Definition at line 705 of file Statistics.h.

+ +
+
+ +

◆ currentGoalId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Statistics::currentGoalId () const
+
+inline
+
+ +

Returns the current goal node ID.

+
Returns
The goal node ID (0 if no goal)
+ +

Definition at line 711 of file Statistics.h.

+ +
+
+ +

◆ reducedIds()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, int > & rtabmap::Statistics::reducedIds () const
+
+inline
+
+ +

Returns the reduced IDs mapping.

+
Returns
Const reference to the map of original IDs to reduced IDs
+ +

Definition at line 717 of file Statistics.h.

+ +
+
+ +

◆ wmState()

+ +
+
+ + + + + +
+ + + + + + + +
const std::vector< int > & rtabmap::Statistics::wmState () const
+
+inline
+
+ +

Returns the working memory state.

+
Returns
Const reference to the vector of node IDs in working memory
+ +

Definition at line 723 of file Statistics.h.

+ +
+
+ +

◆ odomCachePoses()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, Transform > & rtabmap::Statistics::odomCachePoses () const
+
+inline
+
+ +

Returns odometry cache poses.

+
Returns
Const reference to the map of node IDs to cached odometry poses
+ +

Definition at line 729 of file Statistics.h.

+ +
+
+ +

◆ odomCacheConstraints()

+ +
+
+ + + + + +
+ + + + + + + +
const std::multimap< int, Link > & rtabmap::Statistics::odomCacheConstraints () const
+
+inline
+
+ +

Returns odometry cache constraints.

+
Returns
Const reference to the multimap of node IDs to cached odometry links
+ +

Definition at line 735 of file Statistics.h.

+ +
+
+ +

◆ data()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< std::string, float > & rtabmap::Statistics::data () const
+
+inline
+
+ +

Returns the statistics data map.

+

Returns the map containing all plottable statistics in the format "Group/Name/Unit" -> value. This is the main data structure for storing numeric statistics.

+
Returns
Const reference to the statistics data map
+
Note
Use addStatistic() to add values to this map
+
+Use serializeData() to convert this map to a string for storage
+ +

Definition at line 748 of file Statistics.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Stereo-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Stereo-members.html new file mode 100644 index 00000000..ff9de8b5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Stereo-members.html @@ -0,0 +1,104 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Stereo Member List
+
+
+ +

This is the complete list of members for rtabmap::Stereo, including all inherited members.

+ + + + + + + + + + + + + +
computeCorrespondences(const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, std::vector< unsigned char > &status) constrtabmap::Stereovirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Stereostatic
isGpuEnabled() constrtabmap::Stereoinlinevirtual
iterations() constrtabmap::Stereoinline
maxDisparity() constrtabmap::Stereoinline
maxLevel() constrtabmap::Stereoinline
minDisparity() constrtabmap::Stereoinline
parseParameters(const ParametersMap &parameters)rtabmap::Stereovirtual
Stereo(const ParametersMap &parameters=ParametersMap())rtabmap::Stereo
winSize() constrtabmap::Stereoinline
winSSD() constrtabmap::Stereoinline
~Stereo()rtabmap::Stereoinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Stereo.html b/preview/pr-1492/api/latest/classrtabmap_1_1Stereo.html new file mode 100644 index 00000000..c21533cf --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Stereo.html @@ -0,0 +1,581 @@ + + + + + + + + +RTAB-Map: rtabmap::Stereo Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::Stereo Class Reference
+
+
+ +

Sparse stereo matching using block matching. + More...

+ +

#include <Stereo.h>

+
+Inheritance diagram for rtabmap::Stereo:
+
+
Inheritance graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Stereo (const ParametersMap &parameters=ParametersMap())
 Constructor.
 
virtual ~Stereo ()
 Virtual destructor.
 
virtual void parseParameters (const ParametersMap &parameters)
 Parse parameters from a parameters map.
 
virtual std::vector< cv::Point2f > computeCorrespondences (const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, std::vector< unsigned char > &status) const
 Compute stereo correspondences using block matching.
 
cv::Size winSize () const
 Get the search window size.
 
int iterations () const
 Get the number of iterations.
 
int maxLevel () const
 Get the maximum pyramid level.
 
float minDisparity () const
 Get the minimum disparity value.
 
float maxDisparity () const
 Get the maximum disparity value.
 
bool winSSD () const
 Check if SSD (Sum of Squared Differences) is used.
 
virtual bool isGpuEnabled () const
 Check if GPU acceleration is enabled.
 
+ + + + +

+Static Public Member Functions

static Stereo * create (const ParametersMap &parameters=ParametersMap())
 Factory method to create a Stereo instance.
 
+

Detailed Description

+

Sparse stereo matching using block matching.

+

This class implements sparse stereo matching to find corresponding feature points between stereo image pairs using block matching with a search window. Unlike dense stereo matching, this class works with sparse feature points rather than computing disparity for every pixel.

+

The algorithm uses a pyramidal approach for efficiency, searching for correspondences within a specified disparity range using either SAD (Sum of Absolute Differences) or SSD (Sum of Squared Differences) as the matching cost.

+
Note
Input images must be grayscale (CV_8UC1).
+
See also
StereoOpticalFlow for an alternative implementation using optical flow
+
+StereoDense for dense stereo matching
+ +

Definition at line 55 of file Stereo.h.

+

Constructor & Destructor Documentation

+ +

◆ Stereo()

+ +
+
+ + + + + + + + +
rtabmap::Stereo::Stereo (const ParametersMap & parameters = ParametersMap())
+
+ +

Constructor.

+

Initializes a Stereo instance with default parameter values and then parses the provided parameters map to override defaults.

+
Parameters
+ + +
parametersOptional parameters map containing configuration values. If empty, default values are used.
+
+
+ +
+
+ +

◆ ~Stereo()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::Stereo::~Stereo ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 87 of file Stereo.h.

+ +
+
+

Member Function Documentation

+ +

◆ create()

+ +
+
+ + + + + +
+ + + + + + + + +
static Stereo * rtabmap::Stereo::create (const ParametersMap & parameters = ParametersMap())
+
+static
+
+ +

Factory method to create a Stereo instance.

+

Creates a Stereo instance based on the stereo optical flow parameter in the provided parameters map. If optical flow is enabled, creates a StereoOpticalFlow instance; otherwise, creates a standard Stereo instance.

+
Parameters
+ + +
parametersParameters map containing configuration values. The Parameters::kStereoOpticalFlow() parameter determines which implementation to create.
+
+
+
Returns
Pointer to the created Stereo instance (caller owns the memory). Returns StereoOpticalFlow if optical flow is enabled, otherwise Stereo.
+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::Stereo::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Parse parameters from a parameters map.

+

Updates the algorithm's configuration based on the provided parameters map. Supported parameters:

    +
  • Parameters::kStereoWinWidth() - Search window width
  • +
  • Parameters::kStereoWinHeight() - Search window height
  • +
  • Parameters::kStereoIterations() - Number of iterations
  • +
  • Parameters::kStereoMaxLevel() - Maximum pyramid level
  • +
  • Parameters::kStereoMinDisparity() - Minimum disparity value
  • +
  • Parameters::kStereoMaxDisparity() - Maximum disparity value
  • +
  • Parameters::kStereoSSD() - Use SSD instead of SAD
  • +
+
Parameters
+ + +
parametersParameters map containing configuration values
+
+
+ +

Reimplemented in rtabmap::StereoOpticalFlow.

+ +
+
+ +

◆ computeCorrespondences()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::vector< cv::Point2f > rtabmap::Stereo::computeCorrespondences (const cv::Mat & leftImage,
const cv::Mat & rightImage,
const std::vector< cv::Point2f > & leftCorners,
std::vector< unsigned char > & status 
) const
+
+virtual
+
+ +

Compute stereo correspondences using block matching.

+

Finds corresponding points in the right stereo image for the given points in the left stereo image using block matching with a search window. The algorithm uses a pyramidal approach for efficiency.

+
Parameters
+ + + + + +
leftImageLeft stereo image (must be CV_8UC1 grayscale)
rightImageRight stereo image (must be CV_8UC1 grayscale)
leftCornersInput vector of feature points in the left image
statusOutput vector indicating which correspondences are valid (1) or invalid (0). The size matches leftCorners.size().
+
+
+
Returns
Vector of corresponding points in the right image. The size matches leftCorners.size(). Invalid correspondences may have coordinates outside the image bounds.
+
Note
Both input images must be grayscale (CV_8UC1).
+
+The algorithm searches for correspondences within the disparity range [minDisparity(), maxDisparity()] and uses a search window of size winSize().
+ +

Reimplemented in rtabmap::StereoOpticalFlow.

+ +
+
+ +

◆ winSize()

+ +
+
+ + + + + +
+ + + + + + + +
cv::Size rtabmap::Stereo::winSize () const
+
+inline
+
+ +

Get the search window size.

+
Returns
Search window size as cv::Size(winWidth_, winHeight_)
+ +

Definition at line 154 of file Stereo.h.

+ +
+
+ +

◆ iterations()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Stereo::iterations () const
+
+inline
+
+ +

Get the number of iterations.

+
Returns
Number of iterations for the matching algorithm
+ +

Definition at line 160 of file Stereo.h.

+ +
+
+ +

◆ maxLevel()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Stereo::maxLevel () const
+
+inline
+
+ +

Get the maximum pyramid level.

+
Returns
Maximum pyramid level used in the pyramidal approach
+ +

Definition at line 166 of file Stereo.h.

+ +
+
+ +

◆ minDisparity()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Stereo::minDisparity () const
+
+inline
+
+ +

Get the minimum disparity value.

+
Returns
Minimum disparity value to search (in pixels)
+ +

Definition at line 172 of file Stereo.h.

+ +
+
+ +

◆ maxDisparity()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Stereo::maxDisparity () const
+
+inline
+
+ +

Get the maximum disparity value.

+
Returns
Maximum disparity value to search (in pixels)
+ +

Definition at line 178 of file Stereo.h.

+ +
+
+ +

◆ winSSD()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::Stereo::winSSD () const
+
+inline
+
+ +

Check if SSD (Sum of Squared Differences) is used.

+
Returns
true if SSD is used, false if SAD (Sum of Absolute Differences) is used
+ +

Definition at line 184 of file Stereo.h.

+ +
+
+ +

◆ isGpuEnabled()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::Stereo::isGpuEnabled () const
+
+inlinevirtual
+
+ +

Check if GPU acceleration is enabled.

+
Returns
Always returns false for the base Stereo class
+ +

Reimplemented in rtabmap::StereoOpticalFlow.

+ +

Definition at line 190 of file Stereo.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/Stereo.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM-members.html new file mode 100644 index 00000000..3b113004 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM-members.html @@ -0,0 +1,104 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::StereoBM Member List
+
+
+ +

This is the complete list of members for rtabmap::StereoBM, including all inherited members.

+ + + + + + + + + + + + + +
computeDisparity(const cv::Mat &leftImage, const cv::Mat &rightImage) constrtabmap::StereoBMvirtual
create(const ParametersMap &parameters)rtabmap::StereoDensestatic
create(StereoDense::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::StereoDensestatic
kTypeBM enum valuertabmap::StereoDense
kTypeSGBM enum valuertabmap::StereoDense
parseParameters(const ParametersMap &parameters)rtabmap::StereoBMvirtual
StereoBM(int blockSize, int numDisparities)rtabmap::StereoBM
StereoBM(const ParametersMap &parameters=ParametersMap())rtabmap::StereoBM
StereoDense(const ParametersMap &parameters=ParametersMap())rtabmap::StereoDenseinlineprotected
Type enum namertabmap::StereoDense
~StereoBM()rtabmap::StereoBMinlinevirtual
~StereoDense()rtabmap::StereoDenseinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM.html b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM.html new file mode 100644 index 00000000..be6d1484 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM.html @@ -0,0 +1,363 @@ + + + + + + + + +RTAB-Map: rtabmap::StereoBM Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::StereoBM Class Reference
+
+
+ +

Block Matching algorithm for dense stereo matching. + More...

+ +

#include <StereoBM.h>

+
+Inheritance diagram for rtabmap::StereoBM:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::StereoBM:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 StereoBM (int blockSize, int numDisparities)
 Constructor with explicit block size and number of disparities.
 
 StereoBM (const ParametersMap &parameters=ParametersMap())
 Constructor with parameters map.
 
virtual ~StereoBM ()
 Virtual destructor.
 
virtual void parseParameters (const ParametersMap &parameters)
 Parse parameters from a parameters map.
 
virtual cv::Mat computeDisparity (const cv::Mat &leftImage, const cv::Mat &rightImage) const
 Compute disparity map from stereo image pair.
 
- Public Member Functions inherited from rtabmap::StereoDense
virtual ~StereoDense ()
 Virtual destructor.
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::StereoDense
enum  Type { kTypeBM = 0 +, kTypeSGBM = 1 + }
 Enumeration of available stereo matching algorithm types. More...
 
- Static Public Member Functions inherited from rtabmap::StereoDense
static StereoDense * create (const ParametersMap &parameters)
 Factory method to create a StereoDense instance from parameters.
 
static StereoDense * create (StereoDense::Type type, const ParametersMap &parameters=ParametersMap())
 Factory method to create a StereoDense instance of a specific type.
 
- Protected Member Functions inherited from rtabmap::StereoDense
 StereoDense (const ParametersMap &parameters=ParametersMap())
 Protected constructor.
 
+

Detailed Description

+

Block Matching algorithm for dense stereo matching.

+

This class implements the Block Matching (BM) algorithm for computing disparity maps from stereo image pairs.

+
Note
This class wraps OpenCV's cv::StereoBM implementation.
+
See also
StereoSGBM for a more accurate but slower alternative
+ +

Definition at line 47 of file StereoBM.h.

+

Constructor & Destructor Documentation

+ +

◆ StereoBM() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
rtabmap::StereoBM::StereoBM (int blockSize,
int numDisparities 
)
+
+ +

Constructor with explicit block size and number of disparities.

+
Parameters
+ + + +
blockSizeSize of the block window for matching (must be odd, typically 5-21)
numDisparitiesNumber of disparity levels to search (must be divisible by 16)
+
+
+ +
+
+ +

◆ StereoBM() [2/2]

+ +
+
+ + + + + + + + +
rtabmap::StereoBM::StereoBM (const ParametersMap & parameters = ParametersMap())
+
+ +

Constructor with parameters map.

+

Creates a StereoBM instance and initializes it from the provided parameters map.

+
Parameters
+ + +
parametersParameters map containing configuration values
+
+
+ +
+
+ +

◆ ~StereoBM()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::StereoBM::~StereoBM ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 69 of file StereoBM.h.

+ +
+
+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::StereoBM::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Parse parameters from a parameters map.

+

Updates the algorithm's configuration based on the provided parameters map. Supported parameters:

    +
  • Parameters::kStereoBMBlockSize()
  • +
  • Parameters::kStereoBMMinDisparity()
  • +
  • Parameters::kStereoBMNumDisparities()
  • +
  • Parameters::kStereoBMPreFilterSize()
  • +
  • Parameters::kStereoBMPreFilterCap()
  • +
  • Parameters::kStereoBMUniquenessRatio()
  • +
  • Parameters::kStereoBMTextureThreshold()
  • +
  • Parameters::kStereoBMSpeckleWindowSize()
  • +
  • Parameters::kStereoBMSpeckleRange()
  • +
  • Parameters::kStereoBMDisp12MaxDiff()
  • +
+
Parameters
+ + +
parametersParameters map containing configuration values
+
+
+ +

Reimplemented from rtabmap::StereoDense.

+ +
+
+ +

◆ computeDisparity()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual cv::Mat rtabmap::StereoBM::computeDisparity (const cv::Mat & leftImage,
const cv::Mat & rightImage 
) const
+
+virtual
+
+ +

Compute disparity map from stereo image pair.

+

Computes a disparity map using the Block Matching algorithm. The images must have the same size and be either grayscale (CV_8UC1) or color (CV_8UC3). Color images are automatically converted to grayscale.

+
Parameters
+ + + +
leftImageLeft stereo image (CV_8UC1 or CV_8UC3)
rightImageRight stereo image (CV_8UC1 or CV_8UC3), must have same size as leftImage
+
+
+
Returns
Disparity map as a 16-bit signed integer image (CV_16SC1)
+
Note
The disparity values are stored as fixed-point numbers with 4 fractional bits. To get the actual disparity, divide by 16.
+ +

Implements rtabmap::StereoDense.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/stereo/StereoBM.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.map new file mode 100644 index 00000000..154994a5 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.md5 new file mode 100644 index 00000000..d3a5b30e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.md5 @@ -0,0 +1 @@ +4ba0f69779a58d73257cf8deb27d6255 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8f567b5aa4b95ea94a1fe12d766606155783e6b2 GIT binary patch literal 4967 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__inherit__graph.md5 new file mode 100644 index 00000000..d3a5b30e --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__inherit__graph.md5 @@ -0,0 +1 @@ +4ba0f69779a58d73257cf8deb27d6255 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1StereoBM__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8f567b5aa4b95ea94a1fe12d766606155783e6b2 GIT binary patch literal 4967 zcmd6r_di?lzsHZAnlWliLu*uREsD}c%vLFi+KJYRz17~kidsccrPQubtr>e3T~;YY zs1>VfRDD10y^s6L{Ri$NkK~*@lAM#zd%RxH_a|2Ot~wnxCp82?bebAyJ#efAPbU~9 zcwI&6mV*N&_O?12Iz4;jx4ce;AZBh&^eqG5oQ+(21O4%--cvz%SZGKBCmvanFPC3T z$w)0CI7%T`*X?hO!|_yCwhlhR<-WOX;^u%G-&lN$G_fU`JK%U8SCoet*1(c)!6~@g zk(eg~R`9n!7}7nMVdSA9h(ARA{n_Qo5sw$U$_oB2`_xb*sz6tWg*p;t&rtlR`=x5U z8Anvs1Q%Xch=*THY*SfuZOGJ6f>t^ilNtQyjs}a?Ye_MJP0-(M_0LhL0?)9zx~pB? z-5ib!zgtgTTzO72G)G~ z@7Q;5h4Jsn$>cs8Kf{9u4_rMxyLuA2YOvkZ2S-QPKbte`N&#}t-y6rK=e=lVq@=`6 z>R|Kp^BOuj(WrvKUW zDk^f98C6k20sjt{DR&`A`Sh=J(BTrBV!#2MgoMPnHQ@R|Kr23=(zu2+RY2QeJPIDx z*eG}D(xng#dqh+e79U3O_`R2xm#V9)gsDZduOulM+4g1=k?-2Iv(bRjo&HIr3g{cQPeH6S%LZkdu=? z1$jxGm@vlL+iQxMf9Tquyq{~@AGRN(gsO;kG8~*7K@(=Nc?HXYyOGU={`-GDc4Gm4dW$;ON!#fed zOP8K9UQ~nQaJZjDqRzKU^V`%kG}A*W_wS#d-#sj^KF5o$Fk}Y5a9{q&BO@>qz*&1) zRFq#4QFY&pKp>obh?-*E9nO|L2c_iXe4n5AR$#5)$N&* z)~>q*?S_w^Kc}8J+S*bT=)#PQj9TRDO=g^w_?gZfpLZxx^xJv((AKuFv5}pFgJa^I z%LTOrb`qdUY&dCIm)S0mz3nme3%|Zf(}sim;%8=fLV}bMCyh-_!+RGne-E}Dv-9#U zaB^|o)76Da4W@*j*t~i327&^Q_I|lKc1F=zPjho~Ly$u~r;?J=!CW|lg!6Z~gX80i z5)yEi)-q_T%Feu*k(5b=Y#}iCv zRK3E_+#CL^rVWnxH}}hsaG3o0Y_ai5^G;&hDZNr2L#aVrNr})Rfq<$o^m$KwVkIRx zxa5vjSHFlvLWAj|;Taih#X5QPKpzec5AmNrGouQs(`KqMopT!-bl}&Q^^2`Qtl1^8 z=-1d4`aD%tRSiu|Ox0J>cr;&$fpFvd_xRpkD(l`Skp{w%W@5HJ1||gj&=76!6Q0gr zpI=M5&fV;LD78oYaRF$2cve;x{#e4Mb9vWoYwp(i^t-bqvr9dM-OW=<1ga6%d;H^~ zlJ`1$Sa|q6k(fk6Mu`*_rk0eHoT$dAME_-15n)}(c4-YQE4%Xd?_W4OdraCDqYga2 zU@*`p?xP5#udg4gRpfBr(#-4*P^4F~zea|K`TP6(L6@bbq%gHK5P}fOL3ciV`lJEY z(iDVH3eXUA?ynRW5YQJ&Mm4o(??|H2SF37mV>*;<=HcIrP+Jb=1h}q z_33hAMQLd)P~%n6qi0(DnwpxtOG`^5febwoht55NcWN^)i&JgH9!AP%-zxB=NX;Gg zebCp}x3U2jnjz=Ox||alm({^hlKHa_d*b+* zGQ`udD(};Elh`bH3ayp1cvpvJUE%4rOnFX6eYjxYz@i|_p0}b|@y3GAGcjf!ZQnm9 zTM+pP`g}g%)%Wg3i}!j**^TBBu*x<8ea6 zHivy1>Ce~38mFio&~7nAg?9hAuY(V7HovHqk&l&Oe8t2IIeNZ1puM$tn#&(H8yCB# zE13hCWL?PqF2202nzQf zhzPM8-tyMz{Vja6`}?rs(t@ZR9SsN6-kvaq9r)zY^`5HpF@HXG(*}lDlu%1LmwAoU zWl!T~72IHGrti2dl>{Ok4V4y;n9D0pib4HSn>`heH9N3;yk9Gre^EM8T31qEj_myZ zi<9s%OJA4x?sztJDcW7)CT&#e#D_52XQBN{W7EmaEL}Z4-X^I8bFaca%(YD~=%NF@^$J9lopWW1$j>x9*+k=iFJv_>PbmUp9utvoOJKk zXDZ+tfS@|SDM_=OpPbuI^0@f;`StaL;$i`yK{4IffP?wya#x)kxlk@yXQYS-Ee3-r z-$>+=-J0?Ff$!)b{SkERl+-(0h;>E;iinEd)6*kOR0|i>d2zEyk5^or0r2cojY~pe zVrouKqU=$jEiE^IVbSit9<$RmF`=fSq5}3%zjF}|%hxL%edl61F*QXB4GawAkJ%wv zP?=dr;|d!R;UmBo3PIXeY(_o&Gy5Q4BT*j zWhJJ`hse3-_j~oe*$2;aK)WjjK%tG=T|E7z!%U>C*TnT06GNM8KgI;`DQUY^n-c~EKTD57W~D9$fdB_6S-Lp) zNzm4rIK4Y^WQf9?foB4jEPZ<|PpH#$!x_uAwzgJOR+W~LbV|qt|7*5rLGz8po64$L z%Yg9=gy3$>j5r&$Y8ZggB#K#Yo@e|TB zv$ASDWWiE^{YPv}zpE|8_ooUbXJ?n$`VePtH2*tVgI;LU0D%P4^=K*khfZ66n)aR^ zH8^UI64bOWl|xN84cPAh-BZAJ5aa=i^8#$mXZ(bwe|=nFiS|9-e_=| zrUZ-&ZiGmR{_@4(%h#`%y_GS_U1YL`gmn+?->pst*tv6|xw$+DMca}b0i~XsYSM5_~gWPs=-updw+x&h#fkV1@c=^wE?*$)W;!NTL zTe>2>U$7|5tiy{!?}&~Ll&`OEwTJZFB;%*!Kg5eyuF!zqeyUZ(F7GMywzl?chXC9M z|KrC6ZEbD#YYr^aI(BwKZ$Pi)=F)*#vH8!e|2moduh)LlxBsj)*VVD`CBuLtf;mZI zb@yj?e5O*MJa8@Aqw+UzfJTuiB#w&Gkdp#{Wnp8xC@4q;;_B+^I?8p+lz{nCa&K#A zCk#js=$W&711$u(@^-Ki%Ik4dOXQ^R@bEBe3*ve7=n)JCyQ!f8Q*bd7P6LjsVqt;U z+1=gVnpXkWj);z~{d~1Z?;J>^_pxpU!7I9;RNwzh6Dtf=3UmYZ&7$Nz4_#Xggf|@7 z#Loji?x?f>{NkARp1c|uGB;;iri(fc#g`^&sk;HY@N^9iSB#Hn>rTBMXA2Rh0m4ND z5UKWmnMEaoEku-IL02fZ0Mzhcpr^@@B7)dzSa!qE+ + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::StereoCameraModel Member List
+
+
+ +

This is the complete list of members for rtabmap::StereoCameraModel, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
baseline() constrtabmap::StereoCameraModelinline
computeDepth(float disparity) constrtabmap::StereoCameraModel
computeDisparity(float depth) constrtabmap::StereoCameraModel
computeDisparity(unsigned short depth) constrtabmap::StereoCameraModel
deserialize(const std::vector< unsigned char > &data)rtabmap::StereoCameraModel
deserialize(const unsigned char *data, unsigned int dataSize)rtabmap::StereoCameraModel
E() constrtabmap::StereoCameraModelinline
F() constrtabmap::StereoCameraModelinline
getLeftSuffix() constrtabmap::StereoCameraModelinline
getRightSuffix() constrtabmap::StereoCameraModelinline
initRectificationMap()rtabmap::StereoCameraModelinline
isRectificationMapInitialized() constrtabmap::StereoCameraModelinline
isValidForProjection() constrtabmap::StereoCameraModelinline
isValidForRectification() constrtabmap::StereoCameraModelinline
left() constrtabmap::StereoCameraModelinline
load(const std::string &directory, const std::string &cameraName, bool ignoreStereoTransform=true, bool initRectificationMaps=true)rtabmap::StereoCameraModel
localTransform() constrtabmap::StereoCameraModelinline
name() constrtabmap::StereoCameraModelinline
R() constrtabmap::StereoCameraModelinline
right() constrtabmap::StereoCameraModelinline
roi(const cv::Rect &roi)rtabmap::StereoCameraModel
save(const std::string &directory, bool ignoreStereoTransform=true) constrtabmap::StereoCameraModel
saveStereoTransform(const std::string &directory) constrtabmap::StereoCameraModel
scale(double scale)rtabmap::StereoCameraModel
serialize() constrtabmap::StereoCameraModel
setImageSize(const cv::Size &size)rtabmap::StereoCameraModelinline
setLocalTransform(const Transform &transform)rtabmap::StereoCameraModelinline
setName(const std::string &name, const std::string &leftSuffix="left", const std::string &rightSuffix="right")rtabmap::StereoCameraModel
StereoCameraModel()rtabmap::StereoCameraModelinline
StereoCameraModel(const std::string &name, const cv::Size &imageSize1, const cv::Mat &K1, const cv::Mat &D1, const cv::Mat &R1, const cv::Mat &P1, const cv::Size &imageSize2, const cv::Mat &K2, const cv::Mat &D2, const cv::Mat &R2, const cv::Mat &P2, const cv::Mat &R, const cv::Mat &T, const cv::Mat &E, const cv::Mat &F, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0))rtabmap::StereoCameraModel
StereoCameraModel(const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const cv::Mat &R=cv::Mat(), const cv::Mat &T=cv::Mat(), const cv::Mat &E=cv::Mat(), const cv::Mat &F=cv::Mat())rtabmap::StereoCameraModel
StereoCameraModel(const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const Transform &extrinsics)rtabmap::StereoCameraModel
StereoCameraModel(double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))rtabmap::StereoCameraModel
StereoCameraModel(const std::string &name, double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))rtabmap::StereoCameraModel
stereoTransform() constrtabmap::StereoCameraModel
T() constrtabmap::StereoCameraModelinline
~StereoCameraModel()rtabmap::StereoCameraModelinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoCameraModel.html b/preview/pr-1492/api/latest/classrtabmap_1_1StereoCameraModel.html new file mode 100644 index 00000000..ea9a90eb --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoCameraModel.html @@ -0,0 +1,1679 @@ + + + + + + + + +RTAB-Map: rtabmap::StereoCameraModel Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::StereoCameraModel Class Reference
+
+
+ +

A class representing a calibrated stereo camera system. + More...

+ +

#include <StereoCameraModel.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 StereoCameraModel ()
 Default constructor. Creates an empty stereo model with default suffixes ("left", "right").
 
 StereoCameraModel (const std::string &name, const cv::Size &imageSize1, const cv::Mat &K1, const cv::Mat &D1, const cv::Mat &R1, const cv::Mat &P1, const cv::Size &imageSize2, const cv::Mat &K2, const cv::Mat &D2, const cv::Mat &R2, const cv::Mat &P2, const cv::Mat &R, const cv::Mat &T, const cv::Mat &E, const cv::Mat &F, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0))
 Constructs a StereoCameraModel from detailed intrinsic and extrinsic parameters for both cameras.
 
 StereoCameraModel (const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const cv::Mat &R=cv::Mat(), const cv::Mat &T=cv::Mat(), const cv::Mat &E=cv::Mat(), const cv::Mat &F=cv::Mat())
 Constructs a StereoCameraModel from two individual camera models and optional stereo extrinsic parameters.
 
 StereoCameraModel (const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const Transform &extrinsics)
 Constructs a StereoCameraModel from two camera models and an extrinsic Transform between them.
 
 StereoCameraModel (double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))
 Minimal constructor using focal lengths and baseline only.
 
 StereoCameraModel (const std::string &name, double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))
 Minimal constructor that also sets a name, required if we want to save it to a file.
 
virtual ~StereoCameraModel ()
 Destructor.
 
bool isValidForProjection () const
 Returns true if both left and right models are valid for projection and the baseline is positive.
 
bool isValidForRectification () const
 Returns true if both left and right models are valid for rectification.
 
void initRectificationMap ()
 Initializes the rectification maps for both cameras.
 
bool isRectificationMapInitialized () const
 Returns true if rectification maps are initialized.
 
void setName (const std::string &name, const std::string &leftSuffix="left", const std::string &rightSuffix="right")
 Sets the camera name and optional image suffixes for the left and right cameras.
 
const std::string & name () const
 Gets the camera name.
 
void setImageSize (const cv::Size &size)
 Sets the image size for both left and right cameras.
 
bool load (const std::string &directory, const std::string &cameraName, bool ignoreStereoTransform=true, bool initRectificationMaps=true)
 Loads stereo camera calibration data from disk.
 
bool save (const std::string &directory, bool ignoreStereoTransform=true) const
 Saves stereo camera calibration data to disk.
 
bool saveStereoTransform (const std::string &directory) const
 Saves stereo extrinsic parameters to a YAML file in ROS format.
 
std::vector< unsigned char > serialize () const
 Serializes the stereo camera model into a byte vector.
 
unsigned int deserialize (const std::vector< unsigned char > &data)
 Deserializes stereo camera model data from a byte vector.
 
unsigned int deserialize (const unsigned char *data, unsigned int dataSize)
 Deserializes stereo camera model data from a raw byte array.
 
double baseline () const
 Returns the stereo baseline in meters.
 
float computeDepth (float disparity) const
 Computes the depth (Z coordinate) from a given disparity value.
 
float computeDisparity (float depth) const
 Computes the disparity value from a given depth.
 
float computeDisparity (unsigned short depth) const
 Computes the disparity value from a depth given in unsigned short format (millimeters).
 
const cv::Mat & R () const
 Stereo extrinsic rotation matrix.
 
const cv::Mat & T () const
 Stereo extrinsic translation vector.
 
const cv::Mat & E () const
 Essential matrix.
 
const cv::Mat & F () const
 Fundamental matrix.
 
void scale (double scale)
 Scales both cameras' calibration by a factor.
 
void roi (const cv::Rect &roi)
 Applies region-of-interest (ROI) cropping to both cameras.
 
void setLocalTransform (const Transform &transform)
 Sets the local transform from left camera to robot base.
 
const Transform & localTransform () const
 Gets the local transform from left camera to robot base.
 
Transform stereoTransform () const
 Returns the stereo transform (left camera relative to right camera coordinate system).
 
const CameraModel & left () const
 Returns the left camera model.
 
const CameraModel & right () const
 Returns the right camera model.
 
const std::string & getLeftSuffix () const
 Gets the suffix used for the left camera calibration file.
 
const std::string & getRightSuffix () const
 Gets the suffix used for the right camera calibration file.
 
+

Detailed Description

+

A class representing a calibrated stereo camera system.

+

This class encapsulates the calibration data and operations associated with a stereo camera setup, including intrinsic and extrinsic parameters for both left and right cameras, stereo rectification, and methods for computing depth or disparity from stereo images.

+

It relies internally on two CameraModel instances for the left and right cameras.

+

Typical uses include:

    +
  • Stereo rectification
  • +
  • Stereo disparity-to-depth conversion
  • +
  • Saving and loading stereo camera calibration data
  • +
  • Projecting or reprojecting points
  • +
+
See also
CameraModel
+ +

Definition at line 53 of file StereoCameraModel.h.

+

Constructor & Destructor Documentation

+ +

◆ StereoCameraModel() [1/6]

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::StereoCameraModel::StereoCameraModel ()
+
+inline
+
+ +

Default constructor. Creates an empty stereo model with default suffixes ("left", "right").

+ +

Definition at line 59 of file StereoCameraModel.h.

+ +
+
+ +

◆ StereoCameraModel() [2/6]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::StereoCameraModel::StereoCameraModel (const std::string & name,
const cv::Size & imageSize1,
const cv::Mat & K1,
const cv::Mat & D1,
const cv::Mat & R1,
const cv::Mat & P1,
const cv::Size & imageSize2,
const cv::Mat & K2,
const cv::Mat & D2,
const cv::Mat & R2,
const cv::Mat & P2,
const cv::Mat & R,
const cv::Mat & T,
const cv::Mat & E,
const cv::Mat & F,
const Transform & localTransform = Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0) 
)
+
+ +

Constructs a StereoCameraModel from detailed intrinsic and extrinsic parameters for both cameras.

+

Initializes the stereo camera model by specifying the calibration parameters for the left and right cameras, along with the stereo extrinsic parameters.

+
Parameters
+ + + + + + + + + + + + + + + + + +
nameName identifier for the stereo camera.
imageSize1Image size (width, height) of the left camera.
K1Intrinsic camera matrix (3x3, CV_64FC1) for the left camera.
D1Distortion coefficients for the left camera.
R1Rectification matrix (3x3, CV_64FC1) for the left camera.
P1Projection matrix (3x4, CV_64FC1) for the left camera.
imageSize2Image size (width, height) of the right camera.
K2Intrinsic camera matrix (3x3, CV_64FC1) for the right camera.
D2Distortion coefficients for the right camera.
R2Rectification matrix (3x3, CV_64FC1) for the right camera.
P2Projection matrix (3x4, CV_64FC1) for the right camera.
RRotation matrix (3x3, CV_64FC1) representing the rotation from left to right camera coordinate system. Can be empty if unknown.
TTranslation vector (3x1, CV_64FC1) representing the translation from left to right camera coordinate system. Can be empty if unknown.
EEssential matrix (3x3, CV_64FC1) encoding the stereo camera epipolar geometry. Can be empty if unknown.
FFundamental matrix (3x3, CV_64FC1) encoding the stereo camera epipolar constraints. Can be empty if unknown.
localTransformThe local transform associated with the stereo camera model.
+
+
+
Note
All matrices must have correct sizes and types as specified. The rectification and projection matrices (R1, P1, R2, P2) are used to define the stereo rectification parameters. The rotation and translation (R, T) define the relative pose between the cameras.
+ +
+
+ +

◆ StereoCameraModel() [3/6]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::StereoCameraModel::StereoCameraModel (const std::string & name,
const CameraModel & leftCameraModel,
const CameraModel & rightCameraModel,
const cv::Mat & R = cv::Mat(),
const cv::Mat & T = cv::Mat(),
const cv::Mat & E = cv::Mat(),
const cv::Mat & F = cv::Mat() 
)
+
+ +

Constructs a StereoCameraModel from two individual camera models and optional stereo extrinsic parameters.

+

This constructor initializes the stereo camera model by assigning the provided left and right camera models. If the stereo extrinsics (R, T) are provided and valid, stereo rectification will be attempted—provided both cameras are valid for rectification and their image dimensions match.

+

Each camera model will automatically have its name updated using the name parameter and default suffixes ("left", "right").

+
Parameters
+ + + + + + + + +
nameThe base name for the stereo camera model.
leftCameraModelThe camera model representing the left camera.
rightCameraModelThe camera model representing the right camera.
R(Optional) Rotation matrix of the left camera relative to the right camera coordinate system (3x3, CV_64FC1).
T(Optional) Translation vector of the left camera relative to the right camera coordinate system (3x1, CV_64FC1).
E(Optional) Essential matrix between the two cameras (3x3, CV_64FC1).
F(Optional) Fundamental matrix between the two cameras (3x3, CV_64FC1).
+
+
+
Exceptions
+ + + +
UExceptionif any of the provided matrices (R, T, E, F) are non-empty and not of the expected type/shape.
UExceptionif R and T are provided but the camera models are not valid for rectification.
+
+
+
Note
Stereo rectification is only attempted if both R and T are non-empty, the cameras are valid, and their image sizes match.
+
See also
updateStereoRectification()
+ +
+
+ +

◆ StereoCameraModel() [4/6]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::StereoCameraModel::StereoCameraModel (const std::string & name,
const CameraModel & leftCameraModel,
const CameraModel & rightCameraModel,
const Transform & extrinsics 
)
+
+ +

Constructs a StereoCameraModel from two camera models and an extrinsic Transform between them.

+

This constructor sets up a stereo camera model using the given left and right camera models along with an optional 3D transform (extrinsics) representing the pose of the left camera relative to the right camera coordinate system.

+

If a valid (non-null) transform is provided, the corresponding rotation and translation matrices are extracted and stored as the stereo extrinsic parameters. Stereo rectification will be attempted if both camera models are valid for rectification and their image sizes match.

+

Each camera model will be renamed using the provided name and default suffixes ("left", "right").

+
Parameters
+ + + + + +
nameBase name for the stereo camera model.
leftCameraModelCamera model for the left camera.
rightCameraModelCamera model for the right camera.
extrinsics(Optional) Transform of the left camera relative to the right camera coordinate system. If null, no extrinsics are used.
+
+
+
Exceptions
+ + +
UExceptionif extrinsics is not null and either camera model is not valid for rectification.
+
+
+
Note
Stereo rectification is performed only when extrinsics is valid and both camera models are rectifiable with matching image dimensions.
+
See also
updateStereoRectification()
+ +
+
+ +

◆ StereoCameraModel() [5/6]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::StereoCameraModel::StereoCameraModel (double fx,
double fy,
double cx,
double cy,
double baseline,
const Transform & localTransform = Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0),
const cv::Size & imageSize = cv::Size(0, 0) 
)
+
+ +

Minimal constructor using focal lengths and baseline only.

+

Creates a simplified stereo camera model using only the essential intrinsic parameters and baseline. This constructor assumes the images are already rectified and both cameras have the same intrinsic parameters.

+
Parameters
+ + + + + + + + +
fxFocal length in x direction (pixels).
fyFocal length in y direction (pixels).
cxPrincipal point x coordinate (pixels).
cyPrincipal point y coordinate (pixels).
baselineStereo baseline distance in meters.
localTransformLocal transform from camera to robot base frame (default: optical rotation).
imageSizeImage size (width, height). Optional, can be set later.
+
+
+
Note
This constructor creates a simplified model suitable for rectified stereo pairs. For full calibration with distortion, use the constructors that accept camera matrices.
+ +
+
+ +

◆ StereoCameraModel() [6/6]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::StereoCameraModel::StereoCameraModel (const std::string & name,
double fx,
double fy,
double cx,
double cy,
double baseline,
const Transform & localTransform = Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0),
const cv::Size & imageSize = cv::Size(0, 0) 
)
+
+ +

Minimal constructor that also sets a name, required if we want to save it to a file.

+

Same as the minimal constructor but also sets the camera name, which is required when saving the calibration to disk.

+
Parameters
+ + + + + + + + + +
nameCamera name identifier (used for saving calibration files).
fxFocal length in x direction (pixels).
fyFocal length in y direction (pixels).
cxPrincipal point x coordinate (pixels).
cyPrincipal point y coordinate (pixels).
baselineStereo baseline distance in meters.
localTransformLocal transform from camera to robot base frame (default: optical rotation).
imageSizeImage size (width, height). Optional, can be set later.
+
+
+
Note
Use this constructor when you plan to save the calibration to a file.
+ +
+
+ +

◆ ~StereoCameraModel()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::StereoCameraModel::~StereoCameraModel ()
+
+inlinevirtual
+
+ +

Destructor.

+ +

Definition at line 219 of file StereoCameraModel.h.

+ +
+
+

Member Function Documentation

+ +

◆ isValidForProjection()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::StereoCameraModel::isValidForProjection () const
+
+inline
+
+ +

Returns true if both left and right models are valid for projection and the baseline is positive.

+ +

Definition at line 224 of file StereoCameraModel.h.

+ +
+
+ +

◆ isValidForRectification()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::StereoCameraModel::isValidForRectification () const
+
+inline
+
+ +

Returns true if both left and right models are valid for rectification.

+ +

Definition at line 229 of file StereoCameraModel.h.

+ +
+
+ +

◆ initRectificationMap()

+ +
+
+ + + + + +
+ + + + + + + +
void rtabmap::StereoCameraModel::initRectificationMap ()
+
+inline
+
+ +

Initializes the rectification maps for both cameras.

+ +

Definition at line 234 of file StereoCameraModel.h.

+ +
+
+ +

◆ isRectificationMapInitialized()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::StereoCameraModel::isRectificationMapInitialized () const
+
+inline
+
+ +

Returns true if rectification maps are initialized.

+ +

Definition at line 239 of file StereoCameraModel.h.

+ +
+
+ +

◆ setName()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void rtabmap::StereoCameraModel::setName (const std::string & name,
const std::string & leftSuffix = "left",
const std::string & rightSuffix = "right" 
)
+
+ +

Sets the camera name and optional image suffixes for the left and right cameras.

+

Updates the stereo camera model name and the suffixes used for identifying left and right camera calibration files. The suffixes are used when loading/saving calibration data from disk.

+
Parameters
+ + + + +
nameBase name for the stereo camera model.
leftSuffixSuffix for the left camera (default: "left"). Used in filenames like "cameraName_left.yaml".
rightSuffixSuffix for the right camera (default: "right"). Used in filenames like "cameraName_right.yaml".
+
+
+
Note
The suffixes are used by load() and save() methods to construct filenames for each camera.
+ +
+
+ +

◆ name()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::StereoCameraModel::name () const
+
+inline
+
+ +

Gets the camera name.

+ +

Definition at line 258 of file StereoCameraModel.h.

+ +
+
+ +

◆ setImageSize()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::StereoCameraModel::setImageSize (const cv::Size & size)
+
+inline
+
+ +

Sets the image size for both left and right cameras.

+ +

Definition at line 263 of file StereoCameraModel.h.

+ +
+
+ +

◆ load()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool rtabmap::StereoCameraModel::load (const std::string & directory,
const std::string & cameraName,
bool ignoreStereoTransform = true,
bool initRectificationMaps = true 
)
+
+ +

Loads stereo camera calibration data from disk.

+

This method loads the intrinsic parameters for both the left and right cameras from files in the specified directory, using the provided camera name and internal suffixes. If ignoreStereoTransform is false, it also attempts to load the stereo extrinsic parameters (rotation, translation, essential, and fundamental matrices) from a YAML file.

+

The stereo extrinsics are expected in the file: directory/cameraName_pose.yaml, following the ROS calibration format.

+
Parameters
+ + + + + +
directoryThe directory where the calibration files are located.
cameraNameThe base name of the stereo camera (used to derive filenames).
ignoreStereoTransformIf true, skips loading stereo extrinsic parameters.
initRectificationMapsSet to false to skip building the (potentially large) left/right rectification maps when rectification won't be used (saves time and memory).
+
+
+
Returns
true if loading is successful, false otherwise.
+
See also
save(), saveStereoTransform(), CameraModel::initRectificationMap()
+ +
+
+ +

◆ save()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::StereoCameraModel::save (const std::string & directory,
bool ignoreStereoTransform = true 
) const
+
+ +

Saves stereo camera calibration data to disk.

+

This method saves the intrinsic parameters of both left and right cameras to the specified directory. If ignoreStereoTransform is false, it also saves the stereo extrinsic parameters (rotation, translation, essential, and fundamental matrices) in a ROS-compatible YAML file named cameraName_pose.yaml.

+
Parameters
+ + + +
directoryThe directory where calibration files should be saved.
ignoreStereoTransformIf true, skips saving stereo extrinsic parameters.
+
+
+
Returns
true if saving was successful, false otherwise.
+
See also
load(), saveStereoTransform()
+ +
+
+ +

◆ saveStereoTransform()

+ +
+
+ + + + + + + + +
bool rtabmap::StereoCameraModel::saveStereoTransform (const std::string & directory) const
+
+ +

Saves stereo extrinsic parameters to a YAML file in ROS format.

+

This method exports the stereo transform, including rotation, translation, essential, and fundamental matrices, into a YAML file named cameraName_pose.yaml located in the specified directory. The file format is compatible with ROS camera calibration tools.

+
Parameters
+ + +
directoryThe target directory for saving the calibration file.
+
+
+
Returns
true if saving was successful, false if required matrices are missing or invalid.
+
Warning
If extrinsics (R_, T_, E_, F_) are empty or invalid, nothing will be saved and a warning is printed.
+
See also
load(), save()
+ +
+
+ +

◆ serialize()

+ +
+
+ + + + + + + +
std::vector< unsigned char > rtabmap::StereoCameraModel::serialize () const
+
+ +

Serializes the stereo camera model into a byte vector.

+

This method serializes the left and right camera models along with the stereo extrinsic parameters (rotation matrix R_, translation vector T_, essential matrix E_, and fundamental matrix F_) into a contiguous byte array. The serialization format starts with a fixed-size integer header containing version info, stereo type, matrix sizes, and serialized data sizes, followed by the actual matrices and serialized camera data.

+

The serialized data can later be restored using the corresponding deserialize() method.

+
Returns
A vector of unsigned char containing the serialized stereo camera data.
+ +
+
+ +

◆ deserialize() [1/2]

+ +
+
+ + + + + + + + +
unsigned int rtabmap::StereoCameraModel::deserialize (const std::vector< unsigned char > & data)
+
+ +

Deserializes stereo camera model data from a byte vector.

+

This method wraps the pointer-based deserialize() and attempts to restore the stereo camera model from the given serialized byte vector.

+
Parameters
+ + +
dataThe vector of bytes containing previously serialized stereo camera model data.
+
+
+
Returns
The number of bytes read from the data if successful, 0 otherwise.
+
See also
deserialize(const unsigned char*, unsigned int)
+ +
+
+ +

◆ deserialize() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
unsigned int rtabmap::StereoCameraModel::deserialize (const unsigned char * data,
unsigned int dataSize 
)
+
+ +

Deserializes stereo camera model data from a raw byte array.

+

This method reconstructs the stereo camera model from the provided serialized data buffer. It expects the data format to match the one produced by serialize(), including a header with version info, matrix sizes, and data sizes, followed by the serialized extrinsic matrices and serialized left and right camera data.

+

The method performs various sanity checks on data sizes and matrix dimensions and will fail if the data format or sizes are inconsistent.

+
Parameters
+ + + +
dataPointer to the raw serialized data buffer.
dataSizeSize in bytes of the data buffer.
+
+
+
Returns
The number of bytes consumed during deserialization if successful, or 0 on failure.
+
Warning
The stereo camera model is reset to a default empty state before deserialization.
+
+If the serialized data type is not stereo (type != 1), deserialization will fail.
+
See also
serialize()
+ +
+
+ +

◆ baseline()

+ +
+
+ + + + + +
+ + + + + + + +
double rtabmap::StereoCameraModel::baseline () const
+
+inline
+
+ +

Returns the stereo baseline in meters.

+

Computes the baseline distance between the left and right cameras using the projection matrices. The baseline is calculated as the difference in x-translation (Tx) normalized by the focal length.

+
Returns
The baseline distance in meters. Returns 0.0 if focal lengths are invalid or zero.
+
Note
The baseline is a physical distance and is essential for depth computation from disparity.
+ +

Definition at line 378 of file StereoCameraModel.h.

+ +
+
+ +

◆ computeDepth()

+ +
+
+ + + + + + + + +
float rtabmap::StereoCameraModel::computeDepth (float disparity) const
+
+ +

Computes the depth (Z coordinate) from a given disparity value.

+

Uses the stereo camera model parameters to convert disparity to depth using the formula:

+\[
+    \text{depth} = \frac{\text{baseline} \times f_x}{\text{disparity} + (c_{x_{right}} - c_{x_{left}})}
+\] +

+

where ( f_x ) is the focal length of the left camera and ( c_x ) are principal points.

+
Parameters
+ + +
disparityThe disparity value (difference in pixel coordinates between left and right images).
+
+
+
Returns
The computed depth in the same unit as the baseline (typically meters). Returns 0 if disparity is zero or if the model is not valid for projection.
+
Note
This function requires the stereo camera to be valid for projection (i.e., calibrated and rectified).
+ +
+
+ +

◆ computeDisparity() [1/2]

+ +
+
+ + + + + + + + +
float rtabmap::StereoCameraModel::computeDisparity (float depth) const
+
+ +

Computes the disparity value from a given depth.

+

Converts depth back to disparity using the inverse formula:

+\[
+    \text{disparity} = \frac{\text{baseline} \times f_x}{\text{depth}} - (c_{x_{right}} - c_{x_{left}})
+\] +

+
Parameters
+ + +
depthDepth value in the same unit as the baseline (typically meters).
+
+
+
Returns
The computed disparity in pixels. Returns 0 if depth is zero or if the model is not valid for projection.
+
Note
This function requires the stereo camera to be valid for projection (i.e., calibrated and rectified).
+ +
+
+ +

◆ computeDisparity() [2/2]

+ +
+
+ + + + + + + + +
float rtabmap::StereoCameraModel::computeDisparity (unsigned short depth) const
+
+ +

Computes the disparity value from a depth given in unsigned short format (millimeters).

+

Converts depth expressed as an unsigned short (in millimeters) to disparity. The depth is first converted to meters before computing disparity using the formula:

+\[
+    \text{disparity} = \frac{\text{baseline} \times f_x}{\text{depth (meters)}} - (c_{x_{right}} - c_{x_{left}})
+\] +

+
Parameters
+ + +
depthDepth value in millimeters as an unsigned short.
+
+
+
Returns
The computed disparity in pixels. Returns 0 if depth is zero or if the model is not valid for projection.
+
Note
This function requires the stereo camera to be valid for projection (i.e., calibrated and rectified).
+ +
+
+ +

◆ R()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::StereoCameraModel::R () const
+
+inline
+
+ +

Stereo extrinsic rotation matrix.

+ +

Definition at line 430 of file StereoCameraModel.h.

+ +
+
+ +

◆ T()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::StereoCameraModel::T () const
+
+inline
+
+ +

Stereo extrinsic translation vector.

+ +

Definition at line 431 of file StereoCameraModel.h.

+ +
+
+ +

◆ E()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::StereoCameraModel::E () const
+
+inline
+
+ +

Essential matrix.

+ +

Definition at line 432 of file StereoCameraModel.h.

+ +
+
+ +

◆ F()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::StereoCameraModel::F () const
+
+inline
+
+ +

Fundamental matrix.

+ +

Definition at line 433 of file StereoCameraModel.h.

+ +
+
+ +

◆ scale()

+ +
+
+ + + + + + + + +
void rtabmap::StereoCameraModel::scale (double scale)
+
+ +

Scales both cameras' calibration by a factor.

+

Scales the intrinsic parameters (focal lengths, principal points) and image sizes of both left and right cameras by the given scale factor. This is useful when working with downscaled or upscaled images.

+
Parameters
+ + +
scaleScaling factor (> 0). For example, use 0.5 to downscale or 2.0 to upscale.
+
+
+
Note
The baseline is not scaled, as it represents a physical distance between cameras.
+
+Only valid camera models are scaled. Invalid models are left unchanged.
+ +
+
+ +

◆ roi()

+ +
+
+ + + + + + + + +
void rtabmap::StereoCameraModel::roi (const cv::Rect & roi)
+
+ +

Applies region-of-interest (ROI) cropping to both cameras.

+

Adjusts both camera models for a region of interest by shifting the principal points and updating the image sizes. This is useful when working with cropped or subwindowed images.

+
Parameters
+ + +
roiRegion of interest rectangle. The top-left corner defines the offset for principal points.
+
+
+
Note
The principal points (cx, cy) are adjusted by subtracting the ROI's top-left coordinates.
+
+The image size is set to the ROI size.
+
+Only valid camera models are adjusted. Invalid models are left unchanged.
+ +
+
+ +

◆ setLocalTransform()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::StereoCameraModel::setLocalTransform (const Transform & transform)
+
+inline
+
+ +

Sets the local transform from left camera to robot base.

+ +

Definition at line 466 of file StereoCameraModel.h.

+ +
+
+ +

◆ localTransform()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::StereoCameraModel::localTransform () const
+
+inline
+
+ +

Gets the local transform from left camera to robot base.

+ +

Definition at line 471 of file StereoCameraModel.h.

+ +
+
+ +

◆ stereoTransform()

+ +
+
+ + + + + + + +
Transform rtabmap::StereoCameraModel::stereoTransform () const
+
+ +

Returns the stereo transform (left camera relative to right camera coordinate system).

+

The stereo transform brings points given in the first (left) camera's coordinate system to points in the second (right) camera's coordinate system. In more technical terms, it performs a change of basis from the first camera's coordinate system to the second camera's coordinate system. Due to its duality, it is equivalent to the position of the first camera with respect to the second camera coordinate system.

+
Returns
Transform from left camera to right camera coordinate system. Returns identity if R_ or T_ are empty.
+
Note
The transform is constructed from the stereo extrinsic parameters R_ and T_.
+
Example:
For a stereo camera with a baseline of 15 cm, where the right camera is positioned to the right of the left camera, the x value of the returned Transform would be -0.15 (negative because it represents the position of the left camera in the right camera's coordinate system).
StereoCameraModel stereo(...);
+
Transform transform = stereo.stereoTransform();
+
// If baseline is 0.15 m, transform.x() would be approximately -0.15
+
A class representing a calibrated stereo camera system.
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
+ +
+
+ +

◆ left()

+ +
+
+ + + + + +
+ + + + + + + +
const CameraModel & rtabmap::StereoCameraModel::left () const
+
+inline
+
+ +

Returns the left camera model.

+ +

Definition at line 502 of file StereoCameraModel.h.

+ +
+
+ +

◆ right()

+ +
+
+ + + + + +
+ + + + + + + +
const CameraModel & rtabmap::StereoCameraModel::right () const
+
+inline
+
+ +

Returns the right camera model.

+ +

Definition at line 506 of file StereoCameraModel.h.

+ +
+
+ +

◆ getLeftSuffix()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::StereoCameraModel::getLeftSuffix () const
+
+inline
+
+ +

Gets the suffix used for the left camera calibration file.

+ +

Definition at line 511 of file StereoCameraModel.h.

+ +
+
+ +

◆ getRightSuffix()

+ +
+
+ + + + + +
+ + + + + + + +
const std::string & rtabmap::StereoCameraModel::getRightSuffix () const
+
+inline
+
+ +

Gets the suffix used for the right camera calibration file.

+ +

Definition at line 515 of file StereoCameraModel.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense-members.html new file mode 100644 index 00000000..ef4ce3a3 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense-members.html @@ -0,0 +1,101 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::StereoDense Member List
+
+
+ +

This is the complete list of members for rtabmap::StereoDense, including all inherited members.

+ + + + + + + + + + +
computeDisparity(const cv::Mat &leftImage, const cv::Mat &rightImage) const =0rtabmap::StereoDensepure virtual
create(const ParametersMap &parameters)rtabmap::StereoDensestatic
create(StereoDense::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::StereoDensestatic
kTypeBM enum valuertabmap::StereoDense
kTypeSGBM enum valuertabmap::StereoDense
parseParameters(const ParametersMap &parameters)rtabmap::StereoDenseinlinevirtual
StereoDense(const ParametersMap &parameters=ParametersMap())rtabmap::StereoDenseinlineprotected
Type enum namertabmap::StereoDense
~StereoDense()rtabmap::StereoDenseinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense.html b/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense.html new file mode 100644 index 00000000..6a3b764c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense.html @@ -0,0 +1,426 @@ + + + + + + + + +RTAB-Map: rtabmap::StereoDense Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Abstract base class for dense stereo matching algorithms. + More...

+ +

#include <StereoDense.h>

+
+Inheritance diagram for rtabmap::StereoDense:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+ + + + + +

+Public Types

enum  Type { kTypeBM = 0 +, kTypeSGBM = 1 + }
 Enumeration of available stereo matching algorithm types. More...
 
+ + + + + + + + + + +

+Public Member Functions

virtual ~StereoDense ()
 Virtual destructor.
 
virtual void parseParameters (const ParametersMap &parameters)
 Parse parameters from a parameters map.
 
virtual cv::Mat computeDisparity (const cv::Mat &leftImage, const cv::Mat &rightImage) const =0
 Compute disparity map from stereo image pair.
 
+ + + + + + + +

+Static Public Member Functions

static StereoDense * create (const ParametersMap &parameters)
 Factory method to create a StereoDense instance from parameters.
 
static StereoDense * create (StereoDense::Type type, const ParametersMap &parameters=ParametersMap())
 Factory method to create a StereoDense instance of a specific type.
 
+ + + + +

+Protected Member Functions

 StereoDense (const ParametersMap &parameters=ParametersMap())
 Protected constructor.
 
+

Detailed Description

+

Abstract base class for dense stereo matching algorithms.

+

This class provides the interface for dense stereo matching algorithms that compute disparity maps from stereo image pairs. It uses a factory pattern to create specific implementations (Block Matching or Semi-Global Block Matching).

+

The disparity map is a 16-bit signed integer image (CV_16SC1) where each pixel value represents the horizontal displacement between corresponding pixels in the left and right stereo images. Higher disparity values indicate closer objects.

+
Note
Both input images must have the same size and be either grayscale (CV_8UC1) or color (CV_8UC3). Color images are automatically converted to grayscale.
+ +

Definition at line 53 of file StereoDense.h.

+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum rtabmap::StereoDense::Type
+
+ +

Enumeration of available stereo matching algorithm types.

+ + + +
Enumerator
kTypeBM 

Block Matching algorithm (faster, less accurate)

+
kTypeSGBM 

Semi-Global Block Matching algorithm (slower, more accurate)

+
+ +

Definition at line 59 of file StereoDense.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ ~StereoDense()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::StereoDense::~StereoDense ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 93 of file StereoDense.h.

+ +
+
+ +

◆ StereoDense()

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::StereoDense::StereoDense (const ParametersMap & parameters = ParametersMap())
+
+inlineprotected
+
+ +

Protected constructor.

+
Parameters
+ + +
parametersOptional parameters map for initialization
+
+
+ +

Definition at line 129 of file StereoDense.h.

+ +
+
+

Member Function Documentation

+ +

◆ create() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
static StereoDense * rtabmap::StereoDense::create (const ParametersMap & parameters)
+
+static
+
+ +

Factory method to create a StereoDense instance from parameters.

+

Creates a StereoDense instance based on the stereo dense strategy parameter in the provided parameters map. The strategy is determined by the Parameters::kStereoDenseStrategy() parameter.

+
Parameters
+ + +
parametersParameters map containing configuration values
+
+
+
Returns
Pointer to the created StereoDense instance (caller owns the memory)
+
See also
create(Type, const ParametersMap&)
+ +
+
+ +

◆ create() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static StereoDense * rtabmap::StereoDense::create (StereoDense::Type type,
const ParametersMap & parameters = ParametersMap() 
)
+
+static
+
+ +

Factory method to create a StereoDense instance of a specific type.

+

Creates a StereoDense instance of the specified type with the given parameters.

+
Parameters
+ + + +
typeThe type of stereo matching algorithm to create
parametersOptional parameters map containing configuration values
+
+
+
Returns
Pointer to the created StereoDense instance (caller owns the memory)
+
See also
create(const ParametersMap&)
+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::StereoDense::parseParameters (const ParametersMap & parameters)
+
+inlinevirtual
+
+ +

Parse parameters from a parameters map.

+

Updates the algorithm's configuration based on the provided parameters map. Derived classes should override this method to parse their specific parameters.

+
Parameters
+ + +
parametersParameters map containing configuration values
+
+
+ +

Reimplemented in rtabmap::StereoBM, and rtabmap::StereoSGBM.

+ +

Definition at line 103 of file StereoDense.h.

+ +
+
+ +

◆ computeDisparity()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual cv::Mat rtabmap::StereoDense::computeDisparity (const cv::Mat & leftImage,
const cv::Mat & rightImage 
) const
+
+pure virtual
+
+ +

Compute disparity map from stereo image pair.

+

Computes a disparity map from the given left and right stereo images. The images must have the same size and be either grayscale (CV_8UC1) or color (CV_8UC3). Color images are automatically converted to grayscale.

+
Parameters
+ + + +
leftImageLeft stereo image (CV_8UC1 or CV_8UC3)
rightImageRight stereo image (CV_8UC1 or CV_8UC3), must have same size as leftImage
+
+
+
Returns
Disparity map as a 16-bit signed integer image (CV_16SC1)
+
Note
The disparity values are stored as fixed-point numbers with 4 fractional bits. To get the actual disparity, divide by 16.
+
+Invalid disparities are typically represented by negative values or zero.
+ +

Implemented in rtabmap::StereoBM, and rtabmap::StereoSGBM.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.map new file mode 100644 index 00000000..aaa7ca62 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.md5 new file mode 100644 index 00000000..fa375e5f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.md5 @@ -0,0 +1 @@ +b03f09303c9a2b43674589b33087fc93 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1StereoDense__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b9e09afa11be5ddf56af4e52cb081a5584e2e464 GIT binary patch literal 7453 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 Vzt`)+;C&~Kih`zmg{=Ae{{hCT4X*$I literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow-members.html new file mode 100644 index 00000000..0627bfc8 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow-members.html @@ -0,0 +1,110 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::StereoOpticalFlow Member List
+
+
+ +

This is the complete list of members for rtabmap::StereoOpticalFlow, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
computeCorrespondences(const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, std::vector< unsigned char > &status) constrtabmap::StereoOpticalFlowvirtual
create(const ParametersMap &parameters=ParametersMap())rtabmap::Stereostatic
epsilon() constrtabmap::StereoOpticalFlowinline
errorThreshold() const (defined in rtabmap::StereoOpticalFlow)rtabmap::StereoOpticalFlowinline
isGpuEnabled() constrtabmap::StereoOpticalFlowvirtual
iterations() constrtabmap::Stereoinline
maxDisparity() constrtabmap::Stereoinline
maxLevel() constrtabmap::Stereoinline
minDisparity() constrtabmap::Stereoinline
minEigThreshold() const (defined in rtabmap::StereoOpticalFlow)rtabmap::StereoOpticalFlowinline
parseParameters(const ParametersMap &parameters)rtabmap::StereoOpticalFlowvirtual
Stereo(const ParametersMap &parameters=ParametersMap())rtabmap::Stereo
StereoOpticalFlow(const ParametersMap &parameters=ParametersMap())rtabmap::StereoOpticalFlow
usingMinEigenVals() const (defined in rtabmap::StereoOpticalFlow)rtabmap::StereoOpticalFlowinline
winSize() constrtabmap::Stereoinline
winSSD() constrtabmap::Stereoinline
~Stereo()rtabmap::Stereoinlinevirtual
~StereoOpticalFlow()rtabmap::StereoOpticalFlowinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow.html b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow.html new file mode 100644 index 00000000..bfba51e6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow.html @@ -0,0 +1,497 @@ + + + + + + + + +RTAB-Map: rtabmap::StereoOpticalFlow Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::StereoOpticalFlow Class Reference
+
+
+ +

Sparse stereo matching using optical flow. + More...

+ +

#include <Stereo.h>

+
+Inheritance diagram for rtabmap::StereoOpticalFlow:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::StereoOpticalFlow:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 StereoOpticalFlow (const ParametersMap &parameters=ParametersMap())
 Constructor.
 
virtual ~StereoOpticalFlow ()
 Virtual destructor.
 
virtual void parseParameters (const ParametersMap &parameters)
 Parse parameters from a parameters map.
 
virtual std::vector< cv::Point2f > computeCorrespondences (const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, std::vector< unsigned char > &status) const
 Compute stereo correspondences using optical flow.
 
float epsilon () const
 Get the convergence threshold (epsilon)
 
virtual bool isGpuEnabled () const
 Check if GPU acceleration is enabled.
 
bool usingMinEigenVals () const
 
float minEigThreshold () const
 
float errorThreshold () const
 
- Public Member Functions inherited from rtabmap::Stereo
 Stereo (const ParametersMap &parameters=ParametersMap())
 Constructor.
 
virtual ~Stereo ()
 Virtual destructor.
 
cv::Size winSize () const
 Get the search window size.
 
int iterations () const
 Get the number of iterations.
 
int maxLevel () const
 Get the maximum pyramid level.
 
float minDisparity () const
 Get the minimum disparity value.
 
float maxDisparity () const
 Get the maximum disparity value.
 
bool winSSD () const
 Check if SSD (Sum of Squared Differences) is used.
 
+ + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from rtabmap::Stereo
static Stereo * create (const ParametersMap &parameters=ParametersMap())
 Factory method to create a Stereo instance.
 
+

Detailed Description

+

Sparse stereo matching using optical flow.

+

This class implements sparse stereo matching using optical flow (Lucas-Kanade) to find corresponding feature points between stereo image pairs. It extends the base Stereo class with optical flow-based matching, which can be more robust than simple block matching, especially for textured regions.

+

The algorithm uses pyramidal Lucas-Kanade optical flow to track feature points from the left image to the right image, then filters the results based on disparity constraints.

+
Note
Input images must be grayscale (CV_8UC1).
+
+GPU acceleration is available if RTAB-Map is built with OpenCV CUDA support.
+
See also
Stereo for block matching-based implementation
+ +

Definition at line 219 of file Stereo.h.

+

Constructor & Destructor Documentation

+ +

◆ StereoOpticalFlow()

+ +
+
+ + + + + + + + +
rtabmap::StereoOpticalFlow::StereoOpticalFlow (const ParametersMap & parameters = ParametersMap())
+
+ +

Constructor.

+

Initializes a StereoOpticalFlow instance with default parameter values and then parses the provided parameters map to override defaults.

+
Parameters
+ + +
parametersOptional parameters map containing configuration values. If empty, default values are used.
+
+
+ +
+
+ +

◆ ~StereoOpticalFlow()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::StereoOpticalFlow::~StereoOpticalFlow ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 235 of file Stereo.h.

+ +
+
+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::StereoOpticalFlow::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Parse parameters from a parameters map.

+

Updates the algorithm's configuration based on the provided parameters map. First calls the base class parseParameters(), then parses optical flow-specific parameters:

    +
  • Parameters::kStereoEps() - Convergence threshold for optical flow
  • +
  • Parameters::kStereoGpu() - Enable GPU acceleration (requires OpenCV CUDA)
  • +
+
Parameters
+ + +
parametersParameters map containing configuration values
+
+
+
Note
If GPU is enabled but RTAB-Map is not built with OpenCV CUDA support, GPU will be automatically disabled and an error message will be logged.
+ +

Reimplemented from rtabmap::Stereo.

+ +
+
+ +

◆ computeCorrespondences()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual std::vector< cv::Point2f > rtabmap::StereoOpticalFlow::computeCorrespondences (const cv::Mat & leftImage,
const cv::Mat & rightImage,
const std::vector< cv::Point2f > & leftCorners,
std::vector< unsigned char > & status 
) const
+
+virtual
+
+ +

Compute stereo correspondences using optical flow.

+

Finds corresponding points in the right stereo image for the given points in the left stereo image using pyramidal Lucas-Kanade optical flow. The results are filtered based on disparity constraints (minDisparity to maxDisparity).

+
Parameters
+ + + + + +
leftImageLeft stereo image (must be CV_8UC1 grayscale)
rightImageRight stereo image (must be CV_8UC1 grayscale)
leftCornersInput vector of feature points in the left image
statusOutput vector indicating which correspondences are valid (1) or invalid (0). The size matches leftCorners.size().
+
+
+
Returns
Vector of corresponding points in the right image. The size matches leftCorners.size(). Invalid correspondences may have coordinates outside the image bounds.
+
Note
Both input images must be grayscale (CV_8UC1).
+
+If GPU is enabled, the GPU version of this method is called automatically.
+ +

Reimplemented from rtabmap::Stereo.

+ +
+
+ +

◆ epsilon()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::StereoOpticalFlow::epsilon () const
+
+inline
+
+ +

Get the convergence threshold (epsilon)

+
Returns
Convergence threshold for optical flow iteration termination
+ +

Definition at line 302 of file Stereo.h.

+ +
+
+ +

◆ isGpuEnabled()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::StereoOpticalFlow::isGpuEnabled () const
+
+virtual
+
+ +

Check if GPU acceleration is enabled.

+

Returns whether GPU acceleration is currently enabled for optical flow computation. GPU acceleration requires OpenCV CUDA support to be compiled in.

+
Returns
true if GPU is enabled and available, false otherwise
+ +

Reimplemented from rtabmap::Stereo.

+ +
+
+ +

◆ usingMinEigenVals()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::StereoOpticalFlow::usingMinEigenVals () const
+
+inline
+
+ +

Definition at line 314 of file Stereo.h.

+ +
+
+ +

◆ minEigThreshold()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::StereoOpticalFlow::minEigThreshold () const
+
+inline
+
+ +

Definition at line 315 of file Stereo.h.

+ +
+
+ +

◆ errorThreshold()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::StereoOpticalFlow::errorThreshold () const
+
+inline
+
+ +

Definition at line 316 of file Stereo.h.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • corelib/include/rtabmap/core/Stereo.h
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.map new file mode 100644 index 00000000..85b85d5d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.md5 new file mode 100644 index 00000000..238bfdea --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.md5 @@ -0,0 +1 @@ +7fbee604ef6e8a90464bec5145b3213a \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..55720184ae14580d03171ce4f2e934475d1d9289 GIT binary patch literal 5164 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 DEKpK* literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.map new file mode 100644 index 00000000..85b85d5d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.md5 new file mode 100644 index 00000000..238bfdea --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.md5 @@ -0,0 +1 @@ +7fbee604ef6e8a90464bec5145b3213a \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1StereoOpticalFlow__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..55720184ae14580d03171ce4f2e934475d1d9289 GIT binary patch literal 5164 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 DEKpK* literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM-members.html new file mode 100644 index 00000000..9feb2187 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM-members.html @@ -0,0 +1,103 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::StereoSGBM Member List
+
+
+ +

This is the complete list of members for rtabmap::StereoSGBM, including all inherited members.

+ + + + + + + + + + + + +
computeDisparity(const cv::Mat &leftImage, const cv::Mat &rightImage) constrtabmap::StereoSGBMvirtual
create(const ParametersMap &parameters)rtabmap::StereoDensestatic
create(StereoDense::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::StereoDensestatic
kTypeBM enum valuertabmap::StereoDense
kTypeSGBM enum valuertabmap::StereoDense
parseParameters(const ParametersMap &parameters)rtabmap::StereoSGBMvirtual
StereoDense(const ParametersMap &parameters=ParametersMap())rtabmap::StereoDenseinlineprotected
StereoSGBM(const ParametersMap &parameters=ParametersMap())rtabmap::StereoSGBM
Type enum namertabmap::StereoDense
~StereoDense()rtabmap::StereoDenseinlinevirtual
~StereoSGBM()rtabmap::StereoSGBMinlinevirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM.html b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM.html new file mode 100644 index 00000000..672b6a5d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM.html @@ -0,0 +1,325 @@ + + + + + + + + +RTAB-Map: rtabmap::StereoSGBM Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::StereoSGBM Class Reference
+
+
+ +

Semi-Global Block Matching algorithm for dense stereo matching. + More...

+ +

#include <StereoSGBM.h>

+
+Inheritance diagram for rtabmap::StereoSGBM:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::StereoSGBM:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 StereoSGBM (const ParametersMap &parameters=ParametersMap())
 Constructor with parameters map.
 
virtual ~StereoSGBM ()
 Virtual destructor.
 
virtual void parseParameters (const ParametersMap &parameters)
 Parse parameters from a parameters map.
 
virtual cv::Mat computeDisparity (const cv::Mat &leftImage, const cv::Mat &rightImage) const
 Compute disparity map from stereo image pair.
 
- Public Member Functions inherited from rtabmap::StereoDense
virtual ~StereoDense ()
 Virtual destructor.
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::StereoDense
enum  Type { kTypeBM = 0 +, kTypeSGBM = 1 + }
 Enumeration of available stereo matching algorithm types. More...
 
- Static Public Member Functions inherited from rtabmap::StereoDense
static StereoDense * create (const ParametersMap &parameters)
 Factory method to create a StereoDense instance from parameters.
 
static StereoDense * create (StereoDense::Type type, const ParametersMap &parameters=ParametersMap())
 Factory method to create a StereoDense instance of a specific type.
 
- Protected Member Functions inherited from rtabmap::StereoDense
 StereoDense (const ParametersMap &parameters=ParametersMap())
 Protected constructor.
 
+

Detailed Description

+

Semi-Global Block Matching algorithm for dense stereo matching.

+

This class implements the Semi-Global Block Matching (SGBM) algorithm for computing disparity maps from stereo image pairs.

+

SGBM generally produces more accurate results than Block Matching, especially in textureless regions and areas with repetitive patterns, but is computationally more expensive.

+
Note
This class wraps OpenCV's cv::StereoSGBM implementation.
+
See also
StereoBM for a faster but less accurate alternative
+ +

Definition at line 51 of file StereoSGBM.h.

+

Constructor & Destructor Documentation

+ +

◆ StereoSGBM()

+ +
+
+ + + + + + + + +
rtabmap::StereoSGBM::StereoSGBM (const ParametersMap & parameters = ParametersMap())
+
+ +

Constructor with parameters map.

+

Creates a StereoSGBM instance and initializes it from the provided parameters map.

+
Parameters
+ + +
parametersParameters map containing configuration values
+
+
+ +
+
+ +

◆ ~StereoSGBM()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::StereoSGBM::~StereoSGBM ()
+
+inlinevirtual
+
+ +

Virtual destructor.

+ +

Definition at line 65 of file StereoSGBM.h.

+ +
+
+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::StereoSGBM::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Parse parameters from a parameters map.

+

Updates the algorithm's configuration based on the provided parameters map. Supported parameters:

    +
  • Parameters::kStereoSGBMBlockSize()
  • +
  • Parameters::kStereoSGBMMinDisparity()
  • +
  • Parameters::kStereoSGBMNumDisparities()
  • +
  • Parameters::kStereoSGBMPreFilterCap()
  • +
  • Parameters::kStereoSGBMUniquenessRatio()
  • +
  • Parameters::kStereoSGBMSpeckleWindowSize()
  • +
  • Parameters::kStereoSGBMSpeckleRange()
  • +
  • Parameters::kStereoSGBMP1()
  • +
  • Parameters::kStereoSGBMP2()
  • +
  • Parameters::kStereoSGBMDisp12MaxDiff()
  • +
  • Parameters::kStereoSGBMMode()
  • +
+
Parameters
+ + +
parametersParameters map containing configuration values
+
+
+ +

Reimplemented from rtabmap::StereoDense.

+ +
+
+ +

◆ computeDisparity()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual cv::Mat rtabmap::StereoSGBM::computeDisparity (const cv::Mat & leftImage,
const cv::Mat & rightImage 
) const
+
+virtual
+
+ +

Compute disparity map from stereo image pair.

+

Computes a disparity map using the Semi-Global Block Matching algorithm. The images must have the same size and be either grayscale (CV_8UC1) or color (CV_8UC3). Color images are automatically converted to grayscale.

+
Parameters
+ + + +
leftImageLeft stereo image (CV_8UC1 or CV_8UC3)
rightImageRight stereo image (CV_8UC1 or CV_8UC3), must have same size as leftImage
+
+
+
Returns
Disparity map as a 16-bit signed integer image (CV_16SC1)
+
Note
The disparity values are stored as fixed-point numbers with 4 fractional bits. To get the actual disparity, divide by 16.
+ +

Implements rtabmap::StereoDense.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.map new file mode 100644 index 00000000..e5f84490 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.md5 new file mode 100644 index 00000000..628b3d42 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.md5 @@ -0,0 +1 @@ +a678e8268349eb31e30c9ea2538b3a29 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c184f47870d29dc32fc7e9fa1fc610298a31af0e GIT binary patch literal 5265 zcmcJTby(9;xW^|bprq0usW1Vh8Pd`r0s;<+(UMY94j5n%juHtOsdR@hkrI)HDP1Ea zMt6sBkN3HM+CP%d5z^71OlPd)KJj}&z0crLPi1}S2*>G z!4rw~LvUx^LVSM{!yFy)g@Wkbsj*!6U~()pHYaU1alDV?vhvijuwM`M25oqp3~0wCMJnhrc@!P>-NKplF01|! zs0}X<4;CcHovL@yG9*U)M3?R!M_`b4fzykJ0lo(qE2>}>?pTf6H{PjmFJFDKh@PLf zRY=g1Knk~L+(z--ySF~~+j}@oz>t5)HbHAY=uqv0%8QXbSAx&^*`h*<5nAO1<4qZ# z$f_#wIF}XwVpVPt)_&ZL2*qS$Ymo^fI~^SzLbp)k&F9P?NaIhtaP84-S%rm8<E9EP4kARZL7+NU7OdEQM)kX`6qBkTXkr-EqH|{}UxS zHM7*0m2b$uwzjr)aA3DH--%0?V}(NV6o+7XNiKH3dwSH1hLW9+PD5K-RKB{5w~6)0 zHlH2u7L=7iVKBI3qs5Nnjfv?^?~aysN)BKaFIUOP-ybZAz5nr0Bq< zrl#T|nZ=F>DQ+D-J&S~2DXCJPp;+gUosW%YA?4-5Fc*AFf6haxfFofiZ1RsE55Ohr z0Ri=WPotuu>UV$3&@nKGIt|`Qyk{C(S66q#9$)2{DvSK!_Wd|CI2ZyiHPbXUW=?^* z%z}mB3@O>!x1ZHdS@S}nyK@{DNoQvPaU#AO6P=40LBG{GP=h&U1_sJ-I73ZMjf%QD zv9L`W#Zo9)?F2XU6TW3w-|S7Q{;U&f%` z(q!l4#HOW1Y2{c0TjNqBd+t;R1_s`~ef!Qrd_3Lk+}!bTPmqqedAj~|%2)ezWa#VH zMA2+Aq1Dxr-5-UZoScy0i3u~9+Y}BMB1zbasPSZ|%-zRlV_=k6M@y?~mz?1)jjxi5 z%3F7DZ~7vmGKR6SF>WYS{W2+OgyeL9!TkJuI5-&BTNDh*FBdu~6 z6@3^Lna zI%(3+M5zUgO6hK?MbeCab)j8eUgqZFQk19M8vD1JfeJ?QCty9+=g?tmwgmSZb~HUTp!M5==)O7+=4B9h^|9 zXy}^1zyJ0|-6p!h{}6pR<*$32hlda4&srxmzp(J`3ONH=Wpa&YCOA^-!TPxWTJ?(s zEfKdV*(?upzh$1B;*r&m>gwvF@#*v2s>Z(u<65Wba{iY&1rfE`gFL*vXnFxS#Zw&E zZ8+HNo%OWtf995zHM=h@jUF9+TH&><@A2nni0iJNsi}ZCOO*9+p#g=_zOhE+Z%i5 z&K;WQ=;+LX0!>FZ2ZyCy)L}?EPS%qAhsRvozTYE9N4^wEx7@0#_|Q<2DwBItQ&Vaq zRY3^i(a}+1*NOW&8S*8AS4c?(6zXbgt=-&WGBPqABM^wm;8qGUGQICgj}n58nmP0h z4ON~!O2AeV>D#cdxQq<9Y;4*s(DpEd_$#_;%;cM`ge9+)dD6URYy3HA!7%%D&K%kK09 zoyRqYQL`dO`ohQ%tOn0@{Juqk4Xl1-W} zL95l&tsx{WE$#7ml88-wh76&yTHd52F)@*Wg@q;l&>&5Rw09M?Hr>cUN=m90!~O_~ zL}pa&$L~&`5hRPv8CYpB?yRm{!Vb!E3(5ROdYNix10w!c%Qy0C2BBV`u$&7qXy z5)yptt*xzwMn-e1tInd-TwGjlLqa_EmLBJ7W0aJXh&((zKtbalN2V>8=xS(?0kaod zG@370x=u<1qxz?AAFPcvCrdcLoQsky$6^}SN&N&!53Q zfEzmp3k-~_UD^Kp`Qw{o#c6F`|1uWTq6K{PGbj`aA`MtvMMXt8@a!c>CrvFaeIG;V z#ip(4JE~fdO(B(_ zPam-eVw04t4vaw=P5dGf7825Rz~Tk>6A}_;f4m}A6Z*@;!!z6aSvj+`RL88rZz#V6 zl?rkNZPOn8Zgr&WkZG|kiggxL8CWf0Z+T#LZLCtwTdp-SJe)?xXKe{)=SKd3>pMc6 zfq?-%*B(QjrZbW!OUBjG8o{UvN_Ku(+2*$VX}>xdS8_^<>f^_;_q|sPKTan6{HYWh z7kBIY?`BX02-}F=#h#R#7dlw%*RSZ*)SFqV(+k}nRb5?6^Gi#=&-pJ=R&LtKc2uPp z?^yQ6VK$2@nQv$Y36GCOl7_r~{kkcUlbLfKcejEm8^go!M!d4c`n_G^Q;L4vVel;@ z64Rz;#p=3$nR2KfwlK@0;p}y7yzwQe%JjhrkFPqT7&#Z!rAku82-SYrK@eefMkLE+ zey;n8ePuU^X$;T6-)*R7qj8OXzR;uDYp?(Cj~<Nc z9f%3R=nQH+NFFP$Y9d$aJ)6#~tE9d9rl7q))(%EX9(^_H+PQkpPeS7plEK^iqniCf z*_dB%^Z#i6s8LQ(<9T@=bVxSd)Ni}2A(ry)D~#}|t+zraxcQz$;$I^VlIxCkV&$C5 zqvZ5G+)HPqTqYrCDP9@PlPK{@W`{~UUdt8lpDax{DgU>X?_in=;4g`Z2t+QqctcA$ zl~%FCr~S&W#CIXPFLK>gf6?*_*W}&3ocRk~b7(Ts91Om&>D@BGYqK&#=;4L1TtVE8 z^h3Sj|6FqGvZvm@pZ1T!E9rI6*X-Qc7}EF07GxZp(ekOt>#rGcWg6Vf4+s|zWiR?0 z=f`^dU#0#pKl~SYX^1_%OX6tvu9frG|KY6v=Zmz@Lk{EP<8=Wu7W?08<7Qq7+lo

~g?|(l{GwK;3HlW-PfszE5(ciz?Ck8L?dc#F z2N##9urN}L_tNM$k6Y>K>7c#zPfTco)>lzcQNQ)m_rl9(t}UwS>(?E;a~U(Uw17Ya z_>Z?`rV|FBLNp88^8zfJ87?se7tbs#fZoLB;^JZmhiCRVZ0+obvJ~YdrM0i! zq@CGW=msnqO3g8q6Rqeem(0r6q?dEIvgi7$5}zlI}0hy0^BsMf|?5=epVxaF|F|NuAF2 z!Y4)H(b0DE9kE>!R#sL4`$I-(jH!vq{g+#u;5}~!GKg7N%x$#%)jL|KJ{%sJlEMnM z4OttnrjAlm_VN;skvm}WKip`w6z=WsR|2-YdiCmUUS5`{eZY$P=H}5QCHMCC_wSm0 zdp|Q{`7b^~DOvx)z{*fj{*cqk>MC-(m9ev<;|Cs}yt3ld7R}aOkKB#l_Ct@!+Zh_h zcP2qHPzTI{f`au&vk{0cfES~9Jd2zI01KcXAft^zjh(WfU4F4?rvmO4VWI%|Q|{2m z4MK(P5!-H!`yV9$qC+km!NjCgTbESh;AVB*l_*XjBv> zfN!-NeL&7gU_ebxO_38n6nK@8vAVMIw82jTbP#C%fLq6KvGE(A2R5e~o=<;Idr}1F za{*1lzAsZ1a<;4+WW73E(xu$H>~+`Td+PE)-rV~7~V6SXB=%1Q5=|ca$mSkr@I3 z=;w27t%-F$JQ5A*WoQy+JC%T_e~Jb|EZVxr~a0|Uwrmn;zh=q#oFA~Ta4 zh{#?C@%Y32l?i*>w2TMWmA zWztwv)93aB(`wfW#{ph`0fFtUtsiY|Bqi{NC{#nAH(Oj`p99!bm(2YD85?XCyr=?; zl~^f*7bT3OzCw@D`uO;0V?;yv400h`85d_^Y%)GHEG$l*}%wmW7!py8NtwiR`!MEp%4Q{PdnrlzJ@ZrQ!PdU!nko5vgp z$PL8KKOzU&9>FNohCiuO@0EwE6CYq>K7M2bU@RtTgGAPRVcK}Km=z$ZlVk~YQC=S4vVZd85EQdNGDVT9;ezyDW!C(RalGz=^MQ&~=P+v1^YuZ*; zT#SNd!X}r9fp`Ti?lq{W7z_re)tT8@>m9B`wICa%9`Yak{rdd_0~nxE%+1Y#O}_+P z1lHHrZyg>=V!|qH+P}C>%by>$E9{Kg#C+~^xFa9{1}0j@hnMld|q*YD@y4UnO&tEu7R2##L((;T+j zaVtg-4$rN(2n`M0`AIHhX>V^YO8pP>)zt?;ll1TqVH7fNX>Sh$gP#8c`aG?im5LZ3 z0(p5ulapCM^>lD`CDbgY8%%vZ%^c|NjsPvl$;s)TYy>@$iGsx1#^$&$CNO(`4$!t) zolg{S4JZjP!ktE(V{)xvrdw6@ZJ(v1m4yH$&2kz%6ZWT(Y-&x9~q{ZOP}-C>Vz!k;e^#+_8J)adz;cp|E{FIlqQ;^VL`l sKh+Yr1Wcm6(0Ekm%;Q#;t literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.map new file mode 100644 index 00000000..e5f84490 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.md5 new file mode 100644 index 00000000..628b3d42 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.md5 @@ -0,0 +1 @@ +a678e8268349eb31e30c9ea2538b3a29 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1StereoSGBM__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c184f47870d29dc32fc7e9fa1fc610298a31af0e GIT binary patch literal 5265 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

~g?|(l{GwK;3HlW-PfszE5(ciz?Ck8L?dc#F z2N##9urN}L_tNM$k6Y>K>7c#zPfTco)>lzcQNQ)m_rl9(t}UwS>(?E;a~U(Uw17Ya z_>Z?`rV|FBLNp88^8zfJ87?se7tbs#fZoLB;^JZmhiCRVZ0+obvJ~YdrM0i! zq@CGW=msnqO3g8q6Rqeem(0r6q?dEIvgi7$5}zlI}0hy0^BsMf|?5=epVxaF|F|NuAF2 z!Y4)H(b0DE9kE>!R#sL4`$I-(jH!vq{g+#u;5}~!GKg7N%x$#%)jL|KJ{%sJlEMnM z4OttnrjAlm_VN;skvm}WKip`w6z=WsR|2-YdiCmUUS5`{eZY$P=H}5QCHMCC_wSm0 zdp|Q{`7b^~DOvx)z{*fj{*cqk>MC-(m9ev<;|Cs}yt3ld7R}aOkKB#l_Ct@!+Zh_h zcP2qHPzTI{f`au&vk{0cfES~9Jd2zI01KcXAft^zjh(WfU4F4?rvmO4VWI%|Q|{2m z4MK(P5!-H!`yV9$qC+km!NjCgTbESh;AVB*l_*XjBv> zfN!-NeL&7gU_ebxO_38n6nK@8vAVMIw82jTbP#C%fLq6KvGE(A2R5e~o=<;Idr}1F za{*1lzAsZ1a<;4+WW73E(xu$H>~+`Td+PE)-rV~7~V6SXB=%1Q5=|ca$mSkr@I3 z=;w27t%-F$JQ5A*WoQy+JC%T_e~Jb|EZVxr~a0|Uwrmn;zh=q#oFA~Ta4 zh{#?C@%Y32l?i*>w2TMWmA zWztwv)93aB(`wfW#{ph`0fFtUtsiY|Bqi{NC{#nAH(Oj`p99!bm(2YD85?XCyr=?; zl~^f*7bT3OzCw@D`uO;0V?;yv400h`85d_^Y%)GHEG$l*}%wmW7!py8NtwiR`!MEp%4Q{PdnrlzJ@ZrQ!PdU!nko5vgp z$PL8KKOzU&9>FNohCiuO@0EwE6CYq>K7M2bU@RtTgGAPRVcK}Km=z$ZlVk~YQC=S4vVZd85EQdNGDVT9;ezyDW!C(RalGz=^MQ&~=P+v1^YuZ*; zT#SNd!X}r9fp`Ti?lq{W7z_re)tT8@>m9B`wICa%9`Yak{rdd_0~nxE%+1Y#O}_+P z1lHHrZyg>=V!|qH+P}C>%by>$E9{Kg#C+~^xFa9{1}0j@hnMld|q*YD@y4UnO&tEu7R2##L((;T+j zaVtg-4$rN(2n`M0`AIHhX>V^YO8pP>)zt?;ll1TqVH7fNX>Sh$gP#8c`aG?im5LZ3 z0(p5ulapCM^>lD`CDbgY8%%vZ%^c|NjsPvl$;s)TYy>@$iGsx1#^$&$CNO(`4$!t) zolg{S4JZjP!ktE(V{)xvrdw6@ZJ(v1m4yH$&2kz%6ZWT(Y-&x9~q{ZOP}-C>Vz!k;e^#+_8J)adz;cp|E{FIlqQ;^VL`l sKh+Yr1Wcm6(0Ekm%;Q#;t literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.map new file mode 100644 index 00000000..2c1a2b5c --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.md5 new file mode 100644 index 00000000..65b97558 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.md5 @@ -0,0 +1 @@ +efda575e405e167f4caf2f1e078df9ab \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1Stereo__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad7723de59d68fc12d24c8229844b7e0a7be8cd GIT binary patch literal 5200 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat-members.html new file mode 100644 index 00000000..1a5bfe02 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat-members.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +

+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SuperPointRpautrat Member List
+
+
+ +

This is the complete list of members for rtabmap::SuperPointRpautrat, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::SuperPointRpautrat)rtabmap::SuperPointRpautratinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::SuperPointRpautratvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::SuperPointRpautrat)rtabmap::SuperPointRpautratvirtual
SuperPointRpautrat(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::SuperPointRpautrat)rtabmap::SuperPointRpautrat
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~SuperPointRpautrat() (defined in rtabmap::SuperPointRpautrat)rtabmap::SuperPointRpautratvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat.html b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat.html new file mode 100644 index 00000000..ab1ad8c1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat.html @@ -0,0 +1,343 @@ + + + + + + + + +RTAB-Map: rtabmap::SuperPointRpautrat Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SuperPointRpautrat Class Reference
+
+
+ +

SuperPoint (rpautrat) via Torch + Python (RTAB-Map must be built with libtorch and Python support). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::SuperPointRpautrat:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::SuperPointRpautrat:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ SuperPointRpautrat (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

SuperPoint (rpautrat) via Torch + Python (RTAB-Map must be built with libtorch and Python support).

+ +

Definition at line 697 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::SuperPointRpautrat::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::SuperPointRpautrat::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 704 of file Features2d.h.

+ +
+
+ +

◆ isGpuAvailable()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::SuperPointRpautrat::isGpuAvailable () const
+
+overridevirtual
+
+ +

Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.

+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.map new file mode 100644 index 00000000..59dc9f43 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.md5 new file mode 100644 index 00000000..fca65446 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.md5 @@ -0,0 +1 @@ +26051ec20215e946edc293df79292fcb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2136e49d14a283103137440864f9a296f2c41886 GIT binary patch literal 5178 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.map new file mode 100644 index 00000000..59dc9f43 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.md5 new file mode 100644 index 00000000..fca65446 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.md5 @@ -0,0 +1 @@ +26051ec20215e946edc293df79292fcb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointRpautrat__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2136e49d14a283103137440864f9a296f2c41886 GIT binary patch literal 5178 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch-members.html new file mode 100644 index 00000000..0b8ab30d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch-members.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::SuperPointTorch Member List
+
+
+ +

This is the complete list of members for rtabmap::SuperPointTorch, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
computeRoi(const cv::Mat &image, const std::string &roiRatios)rtabmap::Feature2Dstatic
computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
create(const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())rtabmap::Feature2Dstatic
Feature2D(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::Feature2D)rtabmap::Feature2Dprotected
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDepth(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)rtabmap::Feature2Dstatic
filterKeypointsByDisparity(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
generateDescriptors(const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
generateKeypoints(const cv::Mat &image, const cv::Mat &mask=cv::Mat())rtabmap::Feature2D
generateKeypoints3D(const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) constrtabmap::Feature2D
getGridCols() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getGridRows() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMaxFeatures() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getMinDepth() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getParameters() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinlinevirtual
getSSC() const (defined in rtabmap::Feature2D)rtabmap::Feature2Dinline
getType() const override (defined in rtabmap::SuperPointTorch)rtabmap::SuperPointTorchinlinevirtual
isAvailable(Feature2D::Type type)rtabmap::Feature2Dstatic
isGpuAvailable() const overridertabmap::SuperPointTorchvirtual
kFeatureBrisk enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureEnd enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureFastFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttBrief enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureGfttOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureKaze enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrb enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureOrbOctree enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeaturePyDetector enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSift enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointRpautrat enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSuperPointTorch enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurf enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfDaisy enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureSurfFreak enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
kFeatureUndef enum value (defined in rtabmap::Feature2D)rtabmap::Feature2D
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
limitKeypoints(const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false) (defined in rtabmap::Feature2D)rtabmap::Feature2Dstatic
parseParameters(const ParametersMap &parameters) override (defined in rtabmap::SuperPointTorch)rtabmap::SuperPointTorchvirtual
SuperPointTorch(const ParametersMap &parameters=ParametersMap()) (defined in rtabmap::SuperPointTorch)rtabmap::SuperPointTorch
Type enum namertabmap::Feature2D
typeName(Type type)rtabmap::Feature2Dinlinestatic
~Feature2D() (defined in rtabmap::Feature2D)rtabmap::Feature2Dvirtual
~SuperPointTorch() (defined in rtabmap::SuperPointTorch)rtabmap::SuperPointTorchvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch.html b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch.html new file mode 100644 index 00000000..a7676d7d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch.html @@ -0,0 +1,343 @@ + + + + + + + + +RTAB-Map: rtabmap::SuperPointTorch Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::SuperPointTorch Class Reference
+
+
+ +

SuperPoint via LibTorch (RTAB-Map must be built with libtorch support). + More...

+ +

#include <Features2d.h>

+
+Inheritance diagram for rtabmap::SuperPointTorch:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::SuperPointTorch:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ SuperPointTorch (const ParametersMap &parameters=ParametersMap())
 
virtual void parseParameters (const ParametersMap &parameters) override
 
virtual Feature2D::Type getType () const override
 
virtual bool isGpuAvailable () const override
 Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.
 
- Public Member Functions inherited from rtabmap::Feature2D
int getMaxFeatures () const
 
bool getSSC () const
 
float getMinDepth () const
 
float getMaxDepth () const
 
int getGridRows () const
 
int getGridCols () const
 
+std::vector< cv::KeyPoint > generateKeypoints (const cv::Mat &image, const cv::Mat &mask=cv::Mat())
 Detects keypoints in a grayscale image (CV_8UC1); optional depth or 8U mask.
 
+cv::Mat generateDescriptors (const cv::Mat &image, std::vector< cv::KeyPoint > &keypoints) const
 Computes descriptors for keypoints (may shrink the list in some detectors).
 
+std::vector< cv::Point3f > generateKeypoints3D (const SensorData &data, const std::vector< cv::KeyPoint > &keypoints) const
 Back-projects keypoints to 3D using depth or stereo in data.
 
virtual const ParametersMap & getParameters () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from rtabmap::Feature2D
enum  Type {
+  kFeatureUndef =-1 +, kFeatureSurf =0 +, kFeatureSift =1 +, kFeatureOrb =2 +,
+  kFeatureFastFreak =3 +, kFeatureFastBrief =4 +, kFeatureGfttFreak =5 +, kFeatureGfttBrief =6 +,
+  kFeatureBrisk =7 +, kFeatureGfttOrb =8 +, kFeatureKaze =9 +, kFeatureOrbOctree =10 +,
+  kFeatureSuperPointTorch =11 +, kFeatureSurfFreak =12 +, kFeatureGfttDaisy =13 +, kFeatureSurfDaisy =14 +,
+  kFeaturePyDetector =15 +, kFeatureSuperPointRpautrat =16 +, kFeatureEnd +
+ }
 Built-in detector/descriptor strategy (Kp/DetectorStrategy). More...
 
- Static Public Member Functions inherited from rtabmap::Feature2D
static std::string typeName (Type type)
 
+static Feature2D * create (const ParametersMap &parameters=ParametersMap())
 Creates a detector from Kp/DetectorStrategy in parameters. Caller owns the pointer.
 
+static Feature2D * create (Feature2D::Type type, const ParametersMap &parameters=ParametersMap())
 Creates a detector of the given type. Caller owns the pointer.
 
+static bool isAvailable (Feature2D::Type type)
 Returns true if type is available (RTAB-Map is built with it).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &depth, float minDepth, float maxDepth)
 Keeps keypoints whose depth at (u,v) is in (minDepth, maxDepth).
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &depth, float minDepth, float maxDepth)
 
+static void filterKeypointsByDepth (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, std::vector< cv::Point3f > &keypoints3D, float minDepth, float maxDepth)
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, const cv::Mat &disparity, float minDisparity)
 Keeps keypoints with stereo disparity ≥ minDisparity.
 
+static void filterKeypointsByDisparity (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, const cv::Mat &disparity, float minDisparity)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 Reduces keypoint count (by response or SSC spatial distribution).
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (std::vector< cv::KeyPoint > &keypoints, std::vector< cv::Point3f > &keypoints3D, cv::Mat &descriptors, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize=cv::Size(), bool ssc=false)
 
+static void limitKeypoints (const std::vector< cv::KeyPoint > &keypoints, std::vector< bool > &inliers, int maxKeypoints, const cv::Size &imageSize, int gridRows, int gridCols, bool ssc=false)
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::string &roiRatios)
 ROI from Kp/RoiRatios string ("left top right bottom" fractions).
 
+static cv::Rect computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 
- Protected Member Functions inherited from rtabmap::Feature2D
+ Feature2D (const ParametersMap &parameters=ParametersMap())
 
+

Detailed Description

+

SuperPoint via LibTorch (RTAB-Map must be built with libtorch support).

+ +

Definition at line 673 of file Features2d.h.

+

Member Function Documentation

+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::SuperPointTorch::parseParameters (const ParametersMap & parameters)
+
+overridevirtual
+
+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+ +

◆ getType()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Feature2D::Type rtabmap::SuperPointTorch::getType () const
+
+inlineoverridevirtual
+
+ +

Implements rtabmap::Feature2D.

+ +

Definition at line 680 of file Features2d.h.

+ +
+
+ +

◆ isGpuAvailable()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool rtabmap::SuperPointTorch::isGpuAvailable () const
+
+overridevirtual
+
+ +

Returns true when a GPU/CUDA code path could be used by this detector on this host: i.e. the build was compiled with the matching GPU support AND a CUDA-capable device is detected at runtime. This is a capability probe – it does NOT reflect whether the current instance is actually configured to run on GPU (that depends on per-detector parameters like SURF/GpuVersion). Defaults to false; subclasses with a GPU backend override it.

+ +

Reimplemented from rtabmap::Feature2D.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.map new file mode 100644 index 00000000..465e50a6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.md5 new file mode 100644 index 00000000..da5b6595 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.md5 @@ -0,0 +1 @@ +63d2a3cb047db0eda916333705f15cbb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..caca382cc96ce61dfaaefe5ed7626b199778ca6f GIT binary patch literal 5094 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 Nr^=d2Rf^{C{}a7vp5y=k literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.map new file mode 100644 index 00000000..465e50a6 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.md5 new file mode 100644 index 00000000..da5b6595 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.md5 @@ -0,0 +1 @@ +63d2a3cb047db0eda916333705f15cbb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1SuperPointTorch__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..caca382cc96ce61dfaaefe5ed7626b199778ca6f GIT binary patch literal 5094 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 Nr^=d2Rf^{C{}a7vp5y=k literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Transform-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1Transform-members.html new file mode 100644 index 00000000..57a54817 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Transform-members.html @@ -0,0 +1,176 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::Transform Member List
+
+
+ +

This is the complete list of members for rtabmap::Transform, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
canParseString(const std::string &string)rtabmap::Transformstatic
clone() constrtabmap::Transform
data() constrtabmap::Transforminline
data() (defined in rtabmap::Transform)rtabmap::Transforminline
dataMatrix() constrtabmap::Transforminline
fromEigen3d(const Eigen::Affine3d &matrix) (defined in rtabmap::Transform)rtabmap::Transformstatic
fromEigen3d(const Eigen::Isometry3d &matrix) (defined in rtabmap::Transform)rtabmap::Transformstatic
fromEigen3d(const Eigen::Matrix< double, 3, 4 > &matrix) (defined in rtabmap::Transform)rtabmap::Transformstatic
fromEigen3f(const Eigen::Affine3f &matrix) (defined in rtabmap::Transform)rtabmap::Transformstatic
fromEigen3f(const Eigen::Isometry3f &matrix) (defined in rtabmap::Transform)rtabmap::Transformstatic
fromEigen3f(const Eigen::Matrix< float, 3, 4 > &matrix) (defined in rtabmap::Transform)rtabmap::Transformstatic
fromEigen4d(const Eigen::Matrix4d &matrix) (defined in rtabmap::Transform)rtabmap::Transformstatic
fromEigen4f(const Eigen::Matrix4f &matrix)rtabmap::Transformstatic
fromString(const std::string &string)rtabmap::Transformstatic
getAngle(const Transform &t) constrtabmap::Transform
getClosestTransform(const std::map< double, Transform > &tfBuffer, const double &stamp, double *stampDiff)rtabmap::Transformstatic
getDistance(const Transform &t) constrtabmap::Transform
getDistanceSquared(const Transform &t) constrtabmap::Transform
getEulerAngles(float &roll, float &pitch, float &yaw) constrtabmap::Transform
getIdentity()rtabmap::Transformstatic
getNorm() constrtabmap::Transform
getNormSquared() constrtabmap::Transform
getQuaterniond() const (defined in rtabmap::Transform)rtabmap::Transform
getQuaternionf() const (defined in rtabmap::Transform)rtabmap::Transform
getTransform(const std::map< double, Transform > &tfBuffer, const double &stamp)rtabmap::Transformstatic
getTranslation(float &x, float &y, float &z) constrtabmap::Transform
getTranslationAndEulerAngles(float &x, float &y, float &z, float &roll, float &pitch, float &yaw) constrtabmap::Transform
interpolate(float t, const Transform &other) constrtabmap::Transform
inverse() constrtabmap::Transform
is3DoF() constrtabmap::Transform
is4DoF() constrtabmap::Transform
isIdentity() constrtabmap::Transform
isInvertible() constrtabmap::Transform
isNull() constrtabmap::Transform
normalizeRotation()rtabmap::Transform
o14() constrtabmap::Transforminline
o24() constrtabmap::Transforminline
o34() constrtabmap::Transforminline
opengl_T_rtabmap()rtabmap::Transforminlinestatic
operator!=(const Transform &t) const (defined in rtabmap::Transform)rtabmap::Transform
operator()(int row, int col) (defined in rtabmap::Transform)rtabmap::Transforminline
operator()(int row, int col) const (defined in rtabmap::Transform)rtabmap::Transforminline
operator*(const Transform &t) constrtabmap::Transform
operator*=(const Transform &t) (defined in rtabmap::Transform)rtabmap::Transform
operator==(const Transform &t) const (defined in rtabmap::Transform)rtabmap::Transform
operator[](int index) (defined in rtabmap::Transform)rtabmap::Transforminline
operator[](int index) const (defined in rtabmap::Transform)rtabmap::Transforminline
prettyPrint() constrtabmap::Transform
r11() constrtabmap::Transforminline
r12() const (defined in rtabmap::Transform)rtabmap::Transforminline
r13() const (defined in rtabmap::Transform)rtabmap::Transforminline
r21() const (defined in rtabmap::Transform)rtabmap::Transforminline
r22() const (defined in rtabmap::Transform)rtabmap::Transforminline
r23() const (defined in rtabmap::Transform)rtabmap::Transforminline
r31() const (defined in rtabmap::Transform)rtabmap::Transforminline
r32() const (defined in rtabmap::Transform)rtabmap::Transforminline
r33() const (defined in rtabmap::Transform)rtabmap::Transforminline
rotation() constrtabmap::Transform
rotationMatrix() constrtabmap::Transform
rtabmap_T_opengl()rtabmap::Transforminlinestatic
setIdentity()rtabmap::Transform
setNull()rtabmap::Transform
size() constrtabmap::Transforminline
theta() constrtabmap::Transform
to3DoF() constrtabmap::Transform
to4DoF() constrtabmap::Transform
toEigen3d() const (defined in rtabmap::Transform)rtabmap::Transform
toEigen3f() const (defined in rtabmap::Transform)rtabmap::Transform
toEigen4d() const (defined in rtabmap::Transform)rtabmap::Transform
toEigen4f() const (defined in rtabmap::Transform)rtabmap::Transform
Transform()rtabmap::Transform
Transform(float r11, float r12, float r13, float o14, float r21, float r22, float r23, float o24, float r31, float r32, float r33, float o34)rtabmap::Transform
Transform(const cv::Mat &transformationMatrix)rtabmap::Transform
Transform(float x, float y, float z, float roll, float pitch, float yaw)rtabmap::Transform
Transform(float x, float y, float z, float qx, float qy, float qz, float qw)rtabmap::Transform
Transform(float x, float y, float theta)rtabmap::Transform
translation() constrtabmap::Transform
translationMatrix() constrtabmap::Transform
x()rtabmap::Transforminline
x() const (defined in rtabmap::Transform)rtabmap::Transforminline
y()rtabmap::Transforminline
y() const (defined in rtabmap::Transform)rtabmap::Transforminline
z()rtabmap::Transforminline
z() const (defined in rtabmap::Transform)rtabmap::Transforminline
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1Transform.html b/preview/pr-1492/api/latest/classrtabmap_1_1Transform.html new file mode 100644 index 00000000..bd41e9e7 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1Transform.html @@ -0,0 +1,1610 @@ + + + + + + + + +RTAB-Map: rtabmap::Transform Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::Transform Class Reference
+
+
+ +

Represents a 3D rigid body transformation (rotation + translation). + More...

+ +

#include <Transform.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ Transform ()
 Default constructor. Initializes to a null (all zeros) transform.
 
 Transform (float r11, float r12, float r13, float o14, float r21, float r22, float r23, float o24, float r31, float r32, float r33, float o34)
 Constructor from rotation matrix elements and translation components.
 
 Transform (const cv::Mat &transformationMatrix)
 Constructs a Transform from a 3x4 OpenCV matrix.
 
 Transform (float x, float y, float z, float roll, float pitch, float yaw)
 Constructs a Transform from position and Euler angles (in radians).
 
 Transform (float x, float y, float z, float qx, float qy, float qz, float qw)
 Constructs a Transform from position and quaternion.
 
+ Transform (float x, float y, float theta)
 Constructs a 2D Transform (x, y, theta).
 
+Transform clone () const
 Returns a deep copy of the transform.
 
float r11 () const
 Rotation matrix element at row 1, col 1.
 
float r12 () const
 
float r13 () const
 
float r21 () const
 
float r22 () const
 
float r23 () const
 
float r31 () const
 
float r32 () const
 
float r33 () const
 
float o14 () const
 Translation x.
 
float o24 () const
 Translation y.
 
float o34 () const
 Translation z.
 
float & operator[] (int index)
 
const float & operator[] (int index) const
 
float & operator() (int row, int col)
 
const float & operator() (int row, int col) const
 
+bool isNull () const
 Checks whether the transform is null (all zeros).
 
+bool isIdentity () const
 Checks whether the transform is identity.
 
+void setNull ()
 Sets the transform to null (zero matrix).
 
+void setIdentity ()
 Sets the transform to the identity transform.
 
const cv::Mat & dataMatrix () const
 Returns the internal OpenCV matrix (3x4).
 
const float * data () const
 Returns a pointer to the raw data (12 floats).
 
float * data ()
 
int size () const
 Returns the number of float elements (always 12).
 
float & x ()
 Translation getters/setters.
 
float & y ()
 Translation y.
 
float & z ()
 Translation z.
 
const float & x () const
 
const float & y () const
 
const float & z () const
 
+float theta () const
 Returns 2D orientation (theta) in radians.
 
+bool isInvertible () const
 Returns whether the transform is invertible.
 
+Transform inverse () const
 Returns the inverse of the transform.
 
+Transform rotation () const
 Returns only the rotation component.
 
+Transform translation () const
 Returns only the translation component.
 
+Transform to3DoF () const
 Converts to 3 DoF (x, y, theta).
 
+Transform to4DoF () const
 Converts to 4 DoF (x, y, z, yaw).
 
+bool is3DoF () const
 Checks if the transform is 3 DoF (no pitch/roll).
 
+bool is4DoF () const
 Checks if the transform is 4 DoF (no pitch).
 
+cv::Mat rotationMatrix () const
 Returns the 3x3 rotation matrix (cv::Mat).
 
+cv::Mat translationMatrix () const
 Returns the 3x1 translation matrix (cv::Mat).
 
+void getTranslationAndEulerAngles (float &x, float &y, float &z, float &roll, float &pitch, float &yaw) const
 Extracts translation and Euler angles (radians).
 
+void getEulerAngles (float &roll, float &pitch, float &yaw) const
 Extracts Euler angles (roll, pitch, yaw).
 
+void getTranslation (float &x, float &y, float &z) const
 Extracts translation only.
 
+float getAngle (const Transform &t) const
 Returns angular difference (in radians) with another transform.
 
+float getNorm () const
 Returns the Euclidean norm of the translation vector.
 
+float getNormSquared () const
 Returns the squared norm of the translation vector.
 
+float getDistance (const Transform &t) const
 Returns the Euclidean distance to another transform.
 
+float getDistanceSquared (const Transform &t) const
 Returns the squared distance to another transform.
 
Transform interpolate (float t, const Transform &other) const
 Interpolates between this and another transform.
 
+void normalizeRotation ()
 Normalizes the rotation matrix.
 
+std::string prettyPrint () const
 Returns a string representation of the transform.
 
+Transform operator* (const Transform &t) const
 Operator overloads.
 
+Transform & operator*= (const Transform &t)
 
+bool operator== (const Transform &t) const
 
+bool operator!= (const Transform &t) const
 
+Eigen::Matrix4f toEigen4f () const
 
+Eigen::Matrix4d toEigen4d () const
 
+Eigen::Affine3f toEigen3f () const
 
+Eigen::Affine3d toEigen3d () const
 
+Eigen::Quaternionf getQuaternionf () const
 
+Eigen::Quaterniond getQuaterniond () const
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static Transform getIdentity ()
 Returns identity transform.
 
+static Transform fromEigen4f (const Eigen::Matrix4f &matrix)
 Converts from Eigen representations.
 
+static Transform fromEigen4d (const Eigen::Matrix4d &matrix)
 
+static Transform fromEigen3f (const Eigen::Affine3f &matrix)
 
+static Transform fromEigen3d (const Eigen::Affine3d &matrix)
 
+static Transform fromEigen3f (const Eigen::Isometry3f &matrix)
 
+static Transform fromEigen3d (const Eigen::Isometry3d &matrix)
 
+static Transform fromEigen3f (const Eigen::Matrix< float, 3, 4 > &matrix)
 
+static Transform fromEigen3d (const Eigen::Matrix< double, 3, 4 > &matrix)
 
static Transform opengl_T_rtabmap ()
 Returns the transform from RTAB-Map to OpenGL coordinate system.
 
static Transform rtabmap_T_opengl ()
 Returns the transform from OpenGL to RTAB-Map coordinate system.
 
static Transform fromString (const std::string &string)
 Parses a transform from a string representation. Supported formats:
 
+static bool canParseString (const std::string &string)
 Checks if a string can be parsed into a transform.
 
static Transform getTransform (const std::map< double, Transform > &tfBuffer, const double &stamp)
 Retrieves the transform to a given timestamp.
 
static RTABMAP_DEPRECATED Transform getClosestTransform (const std::map< double, Transform > &tfBuffer, const double &stamp, double *stampDiff)
 
+

Detailed Description

+

Represents a 3D rigid body transformation (rotation + translation).

+

This class provides an abstraction over 3D transformations using a 3x4 matrix representation, with utilities for conversion to/from Eigen and OpenCV formats, interpolation, inversion, DoF reduction, and distance calculations. It is fundamental to pose estimation and motion handling within the RTAB-Map framework.

+

The underlying data is stored in a cv::Mat (3x4, CV_32FC1), representing a rotation matrix and translation vector.

+ +

Definition at line 52 of file Transform.h.

+

Constructor & Destructor Documentation

+ +

◆ Transform() [1/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::Transform::Transform (float r11,
float r12,
float r13,
float o14,
float r21,
float r22,
float r23,
float o24,
float r31,
float r32,
float r33,
float o34 
)
+
+ +

Constructor from rotation matrix elements and translation components.

+
Parameters
+ + + +
r11...r33Rotation matrix components.
o14,o24,o34Translation vector components.
+
+
+ +
+
+ +

◆ Transform() [2/4]

+ +
+
+ + + + + + + + +
rtabmap::Transform::Transform (const cv::Mat & transformationMatrix)
+
+ +

Constructs a Transform from a 3x4 OpenCV matrix.

+
Parameters
+ + +
transformationMatrixA 3x4 CV_32FC1 matrix.
+
+
+ +
+
+ +

◆ Transform() [3/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::Transform::Transform (float x,
float y,
float z,
float roll,
float pitch,
float yaw 
)
+
+ +

Constructs a Transform from position and Euler angles (in radians).

+
Parameters
+ + + +
x,y,zTranslation components.
roll,pitch,yawEuler rotation angles (ZYX-convention).
+
+
+ +
+
+ +

◆ Transform() [4/4]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::Transform::Transform (float x,
float y,
float z,
float qx,
float qy,
float qz,
float qw 
)
+
+ +

Constructs a Transform from position and quaternion.

+
Parameters
+ + + +
x,y,zTranslation components.
qx,qy,qz,qwQuaternion rotation components.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ r11()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::r11 () const
+
+inline
+
+ +

Rotation matrix element at row 1, col 1.

+ +

Definition at line 96 of file Transform.h.

+ +
+
+ +

◆ r12()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::r12 () const
+
+inline
+
+ +

Definition at line 97 of file Transform.h.

+ +
+
+ +

◆ r13()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::r13 () const
+
+inline
+
+ +

Definition at line 98 of file Transform.h.

+ +
+
+ +

◆ r21()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::r21 () const
+
+inline
+
+ +

Definition at line 99 of file Transform.h.

+ +
+
+ +

◆ r22()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::r22 () const
+
+inline
+
+ +

Definition at line 100 of file Transform.h.

+ +
+
+ +

◆ r23()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::r23 () const
+
+inline
+
+ +

Definition at line 101 of file Transform.h.

+ +
+
+ +

◆ r31()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::r31 () const
+
+inline
+
+ +

Definition at line 102 of file Transform.h.

+ +
+
+ +

◆ r32()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::r32 () const
+
+inline
+
+ +

Definition at line 103 of file Transform.h.

+ +
+
+ +

◆ r33()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::r33 () const
+
+inline
+
+ +

Definition at line 104 of file Transform.h.

+ +
+
+ +

◆ o14()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::o14 () const
+
+inline
+
+ +

Translation x.

+ +

Definition at line 106 of file Transform.h.

+ +
+
+ +

◆ o24()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::o24 () const
+
+inline
+
+ +

Translation y.

+ +

Definition at line 107 of file Transform.h.

+ +
+
+ +

◆ o34()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::Transform::o34 () const
+
+inline
+
+ +

Translation z.

+ +

Definition at line 108 of file Transform.h.

+ +
+
+ +

◆ operator[]() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
float & rtabmap::Transform::operator[] (int index)
+
+inline
+
+ +

Definition at line 110 of file Transform.h.

+ +
+
+ +

◆ operator[]() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
const float & rtabmap::Transform::operator[] (int index) const
+
+inline
+
+ +

Definition at line 111 of file Transform.h.

+ +
+
+ +

◆ operator()() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
float & rtabmap::Transform::operator() (int row,
int col 
)
+
+inline
+
+ +

Definition at line 112 of file Transform.h.

+ +
+
+ +

◆ operator()() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
const float & rtabmap::Transform::operator() (int row,
int col 
) const
+
+inline
+
+ +

Definition at line 113 of file Transform.h.

+ +
+
+ +

◆ dataMatrix()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::Transform::dataMatrix () const
+
+inline
+
+ +

Returns the internal OpenCV matrix (3x4).

+ +

Definition at line 136 of file Transform.h.

+ +
+
+ +

◆ data() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
const float * rtabmap::Transform::data () const
+
+inline
+
+ +

Returns a pointer to the raw data (12 floats).

+ +

Definition at line 140 of file Transform.h.

+ +
+
+ +

◆ data() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
float * rtabmap::Transform::data ()
+
+inline
+
+ +

Definition at line 141 of file Transform.h.

+ +
+
+ +

◆ size()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::Transform::size () const
+
+inline
+
+ +

Returns the number of float elements (always 12).

+ +

Definition at line 146 of file Transform.h.

+ +
+
+ +

◆ x() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
float & rtabmap::Transform::x ()
+
+inline
+
+ +

Translation getters/setters.

+

Translation x

+ +

Definition at line 149 of file Transform.h.

+ +
+
+ +

◆ y() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
float & rtabmap::Transform::y ()
+
+inline
+
+ +

Translation y.

+ +

Definition at line 150 of file Transform.h.

+ +
+
+ +

◆ z() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
float & rtabmap::Transform::z ()
+
+inline
+
+ +

Translation z.

+ +

Definition at line 151 of file Transform.h.

+ +
+
+ +

◆ x() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
const float & rtabmap::Transform::x () const
+
+inline
+
+ +

Definition at line 152 of file Transform.h.

+ +
+
+ +

◆ y() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
const float & rtabmap::Transform::y () const
+
+inline
+
+ +

Definition at line 153 of file Transform.h.

+ +
+
+ +

◆ z() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
const float & rtabmap::Transform::z () const
+
+inline
+
+ +

Definition at line 154 of file Transform.h.

+ +
+
+ +

◆ interpolate()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Transform rtabmap::Transform::interpolate (float t,
const Transform & other 
) const
+
+ +

Interpolates between this and another transform.

+
Parameters
+ + + +
tInterpolation factor [0, 1].
otherTarget transform.
+
+
+ +
+
+ +

◆ opengl_T_rtabmap()

+ +
+
+ + + + + +
+ + + + + + + +
static Transform rtabmap::Transform::opengl_T_rtabmap ()
+
+inlinestatic
+
+ +

Returns the transform from RTAB-Map to OpenGL coordinate system.

+
Note
Coordinate systems:
    +
  • OpenGL: x → right, y → up, z → out of the screen (toward viewer).
  • +
  • RTAB-Map: x → forward, y → left, z → up.
  • +
+
+ +

Definition at line 289 of file Transform.h.

+ +
+
+ +

◆ rtabmap_T_opengl()

+ +
+
+ + + + + +
+ + + + + + + +
static Transform rtabmap::Transform::rtabmap_T_opengl ()
+
+inlinestatic
+
+ +

Returns the transform from OpenGL to RTAB-Map coordinate system.

+
Note
Coordinate systems:
    +
  • OpenGL: x → right, y → up, z → out of the screen (toward viewer).
  • +
  • RTAB-Map: x → forward, y → left, z → up.
  • +
+
+ +

Definition at line 299 of file Transform.h.

+ +
+
+ +

◆ fromString()

+ +
+
+ + + + + +
+ + + + + + + + +
static Transform rtabmap::Transform::fromString (const std::string & string)
+
+static
+
+ +

Parses a transform from a string representation. Supported formats:

+
    +
  • (3 values) "x y z"
  • +
  • (6 values) "x y z roll pitch yaw" (ZYX-Euler convention)
  • +
  • (7 values) "x y z qx qy qz qw"
  • +
  • (9 values, 3x3 rotation) "r11 r12 r13 r21 r22 r23 r31 r32 r33"
  • +
+

(12 values, 3x4 rotation) "r11 r12 r13 tx r21 r22 r23 ty r31 r32 r33 tz"

+ +
+
+ +

◆ getTransform()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static Transform rtabmap::Transform::getTransform (const std::map< double, Transform > & tfBuffer,
const double & stamp 
)
+
+static
+
+ +

Retrieves the transform to a given timestamp.

+
Parameters
+ + + +
tfBufferBuffer of timestamped transforms.
stampRequested timestamp.
+
+
+
Returns
transform at the requested timestamp, interpolated if it doesn't fall on a transform with the exact same timestamp in the buffer. If the timestamp is older than the oldest timestamp or newer than the latest timestamp in the buffer, a null transform is returned and a warning message is generated.
+ +
+
+ +

◆ getClosestTransform()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static RTABMAP_DEPRECATED Transform rtabmap::Transform::getClosestTransform (const std::map< double, Transform > & tfBuffer,
const double & stamp,
double * stampDiff 
)
+
+static
+
+
Deprecated:
Use getTransform() instead.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1TransformStamped-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1TransformStamped-members.html new file mode 100644 index 00000000..b845eafc --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1TransformStamped-members.html @@ -0,0 +1,95 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::TransformStamped Member List
+
+
+ +

This is the complete list of members for rtabmap::TransformStamped, including all inherited members.

+ + + + +
stamp() const (defined in rtabmap::TransformStamped)rtabmap::TransformStampedinline
transform() const (defined in rtabmap::TransformStamped)rtabmap::TransformStampedinline
TransformStamped(const Transform &transform, const double &stamp) (defined in rtabmap::TransformStamped)rtabmap::TransformStampedinline
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1TransformStamped.html b/preview/pr-1492/api/latest/classrtabmap_1_1TransformStamped.html new file mode 100644 index 00000000..a92716e2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1TransformStamped.html @@ -0,0 +1,208 @@ + + + + + + + + +RTAB-Map: rtabmap::TransformStamped Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::TransformStamped Class Reference
+
+
+ +

Associates a transform with a timestamp. + More...

+ +

#include <Transform.h>

+ + + + + + + + +

+Public Member Functions

 TransformStamped (const Transform &transform, const double &stamp)
 
const Transform & transform () const
 
const double & stamp () const
 
+

Detailed Description

+

Associates a transform with a timestamp.

+ +

Definition at line 352 of file Transform.h.

+

Constructor & Destructor Documentation

+ +

◆ TransformStamped()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rtabmap::TransformStamped::TransformStamped (const Transform & transform,
const double & stamp 
)
+
+inline
+
+ +

Definition at line 355 of file Transform.h.

+ +
+
+

Member Function Documentation

+ +

◆ transform()

+ +
+
+ + + + + +
+ + + + + + + +
const Transform & rtabmap::TransformStamped::transform () const
+
+inline
+
+ +

Definition at line 359 of file Transform.h.

+ +
+
+ +

◆ stamp()

+ +
+
+ + + + + +
+ + + + + + + +
const double & rtabmap::TransformStamped::stamp () const
+
+inline
+
+ +

Definition at line 360 of file Transform.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent-members.html new file mode 100644 index 00000000..7859e4c1 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent-members.html @@ -0,0 +1,99 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::UserDataEvent Member List
+
+
+ +

This is the complete list of members for rtabmap::UserDataEvent, including all inherited members.

+ + + + + + + + +
data() const (defined in rtabmap::UserDataEvent)rtabmap::UserDataEventinline
getClassName() constrtabmap::UserDataEventinlinevirtual
getCode() constUEventinline
UEvent(int code=0)UEventinlineprotected
UserDataEvent(const cv::Mat &data) (defined in rtabmap::UserDataEvent)rtabmap::UserDataEventinline
~UEvent() (defined in UEvent)UEventinlinevirtual
~UserDataEvent() (defined in rtabmap::UserDataEvent)rtabmap::UserDataEventinline
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent.html b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent.html new file mode 100644 index 00000000..9a294d3d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent.html @@ -0,0 +1,254 @@ + + + + + + + + +RTAB-Map: rtabmap::UserDataEvent Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::UserDataEvent Class Reference
+
+
+ +

#include <UserDataEvent.h>

+
+Inheritance diagram for rtabmap::UserDataEvent:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for rtabmap::UserDataEvent:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + +

+Public Member Functions

 UserDataEvent (const cv::Mat &data)
 
virtual std::string getClassName () const
 
const cv::Mat & data () const
 
- Public Member Functions inherited from UEvent
int getCode () const
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from UEvent
 UEvent (int code=0)
 
+

Detailed Description

+

The user data event.

+ +

Definition at line 40 of file UserDataEvent.h.

+

Constructor & Destructor Documentation

+ +

◆ UserDataEvent()

+ +
+
+ + + + + +
+ + + + + + + + +
rtabmap::UserDataEvent::UserDataEvent (const cv::Mat & data)
+
+inline
+
+ +

Definition at line 43 of file UserDataEvent.h.

+ +
+
+ +

◆ ~UserDataEvent()

+ +
+
+ + + + + +
+ + + + + + + +
rtabmap::UserDataEvent::~UserDataEvent ()
+
+inline
+
+ +

Definition at line 47 of file UserDataEvent.h.

+ +
+
+

Member Function Documentation

+ +

◆ getClassName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string rtabmap::UserDataEvent::getClassName () const
+
+inlinevirtual
+
+

This method is used to get the class name of the event. For example, if a class MouseEvent inherits from UEvent, it must return the "MouseEvent" string.

Returns
the class name
+ +

Implements UEvent.

+ +

Definition at line 48 of file UserDataEvent.h.

+ +
+
+ +

◆ data()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::UserDataEvent::data () const
+
+inline
+
+ +

Definition at line 50 of file UserDataEvent.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.map b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.map new file mode 100644 index 00000000..2012223d --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.md5 new file mode 100644 index 00000000..a22c3218 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.md5 @@ -0,0 +1 @@ +fbe4874b0beb1b671a3d9cf8f5a5b851 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..21a37ba00527eafe10ccad5ac3cbf0c376cf6516 GIT binary patch literal 4033 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 + + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__inherit__graph.md5 b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__inherit__graph.md5 new file mode 100644 index 00000000..a22c3218 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__inherit__graph.md5 @@ -0,0 +1 @@ +fbe4874b0beb1b671a3d9cf8f5a5b851 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__inherit__graph.png b/preview/pr-1492/api/latest/classrtabmap_1_1UserDataEvent__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..21a37ba00527eafe10ccad5ac3cbf0c376cf6516 GIT binary patch literal 4033 zcmcgvcTkhxwhcuLRTLDYBZwfk)aB&_IGRwyk_G?g z`$^Z!k7B4Ad3<1s8k8Hu`l`IyS;ziqt#e~{tsD~na@k#OCPXx*b{zauWDoshd$7Gy zZq+`Abx@J>hQqOSP6>72J?V1l=o1BJaV6F$uz5T#8#C3U_3e0GdJhNVzD=6Wf=plP6fAg zC80w4*;54Fd|^6|R`MmQAW{Ub8CcvftEJ|rhKPxYt^ zfOTI6F1gP(B}LG)ZEc{5Va6s9${e*+j87~tn1rRcr3hH7hRRonG4p&N$P z4&xFNnOU_ppc=NeSJaQUStQzzr2G2%TK1Pw>vOG~p_7xwAPlqCKv@~b0c*l^J(rSC z6k;ymY^eO4KUJt6N-ilkS6@@JbA;(Zpm(`>vy z)#+3E1UWc3#_`I5+r?0NdKO?~ZY~P(I@x z#l^+nrl-pUY}wc2Y-{p=tUzgLYs}m2^hZ)mtb$XuV=vXf@%n8CtD=+TW(8`?1cKh( zyU>-D6F_V*qV#a3(2)W`;|y&l}+?t%L@v}y7%C4 zxL^1z87C$R3JQCB`%Pd|>pF3rTmziEafu#4V)a#E|67r#t$`O!Fm3Zyad!m3R#{nD zk-UYk`{Opq}0@jXShL>JOZse?nSgTWE~qDn`(H* zDIy|5O-)@q0}4|Ya*712QE_qh)1O>)vlT{vC5ptn*DuBo<%klQ6z^IxDLQZe9?ez@ z&Z@1I2EGW~iQ~I@^V3XVZvrn-4guLDkqkrTo4f?-oQ56Or)qGM_hB%85s~Qk@2`{_ zizX!{HGTd}AsMvii99BoP*PD%ke!CI`#N5pomgspvHQ@}^sctHb^;lO>tj|a92pro z+t#!^kof}--`m^UR&s)P`ubkIa^-#RPUX!0{{DGRPB)Ak^2om@fp^}C`=N4xqM%DI zLs(&eGc%8WI z^Wkt;tWe_`o?1USSKNov_zI-sk-Vey3|7`9l_4x;HYg1r_9Y}Q)|@rM2ya|yAx%AG zD{#^IWH%Z0zSjeN*(4OIt`h+8C?!0SBi{VV znPH7E)~+5ilXb~t2xAeJGrm4D{aG)x?1AZ4|0(S`r-=`brKxYb4<>Xz5-#NPT-(XN zRn?gE&#T&-fCQpMXe`&IAOvc~Ifi>1Qo_CSp&v zSNraK*}XCKFVl9K<%&XS%4jCB6sP}Z)&HQ`|K>u=^HZ;pX5Y0m(U`3qnV8WlQlzVI z+lM;l9friUSza+mf&o%j4oA6phyrRlht$3>eoBFS{`1=It~DBtX98@qHaX`8Jvus~ zspo@nxYpO#t2TUB{5O#8nnv&m2)qQCS3)zu>;iMx)k`_$pZ{E2i%n0*So@Mpg~i2t zhKJAb^75j0Kr2vEQf}_-@VrHS@9%eZc7}Wz9AxzHAR=)CzlXh6XAw^C-o0aw?}@DZ zWy84b<~E|aNyb>&$)TcSV>!#kdFai|%vv@(=~Z@T;eG@(g6K&4r+Xkv*6qQ;@vlhU zYSSATxl`cU=NxXhuZ(?&R<^ORF}-nVb#2X%^^Cf@`qA<6iy$>XR)m>G z((Z0=S66|#I?c9aCprCQYbbtRnuti5lM^p2OlW8y+yRZ0SwXUe>b^Gaw`SEPw z+E!O_W##f*>kI0$XYC}}*LhepA6QuE+1UwbXlMX>AUB67&yflW3e4JqJ~z*G$FlVe z3>21>M1xVcqj<8lwT0yUSQ(5cE-x>vuTKRN4ZY)rsg$z)3MK3Q`t2`z{rcwC*2CdX ztrJJWG=kKJI|Knq$;7d-hrsvI6`%2miKO&&9TTp zdUe&+GKi%8&%#334izdjRU72tPC-(0v(jXx#eG2k35W7muYTx73h8BOd3#IiB=9(N zgr8|@ZdUU=!Vl*WcfD5i%*-y&2k&z825nL(SscEtYii0!P(R7wR`yd+u}tav8qX=e zxxM|>wk9z-S<}|mwn|n#h62r1T3IQis%jBTYCSzU#Oa&ePrG3l;_>X61E$gsPJ%)|Qs+?QI`0VlY)!_<{trE7H;rgPmNSKNk`ZppuuD*Uwhy2%|b{3N!?JWxLsn4Sy{+#O0mRnbku|dF#{5EW!tRubmKL?n8?JZ2l_UWj5H~%WxS+avyH#&V zLql3;rzW~B4|(7sWRN>>a(pNvEX;TPI$daXHdm2B-VmrJ7Y`9A514_0P89~eGImw% z^ay_8!iB(!eM1IQsI8sd1l2YlnM?*_(x(0iEiLW4;^J=`q`f_V@>@l}b<;ZuJbD@$ zVI1KZ8SLb7MaKblA0=)eBOt$hlWlNuvDw+UZd*et{O=P2yUzXlv0V#9nAHp` z8yo!eBpBVm$SEi3J|zhX1{4$j_3JTdX_tVC4LBxacwJkhq@-N=dg3{CKrVq!X|>b@ zMWxrkul=42IwUk^E5d0~`d)Qd|5a$XhP6OMhx5&8T=efLDM-xwpUcZdxqiyiVA_T5 z?DK&JUS3{)PB1Qe+#0mGxoQ19O)OjWMVd$3{_E1x>mXTC2?=|T z>o_9?4%w!y>>+J!ZJ~Ax#QvmbfhZQp*Y56`XESm@$u;?tt^h1YML{8vy)*k`Wea-^ z_4SIi^gPq~IBst*FAeBBaT8->@2y2xgU5WOzGKJ{Nr#S(ZoNTNOw0ig^R2^@CeUV1 zdBF`5(5lUfbB%XliOo%+4P8n1{Rv^f}1tY_o6dJn}GJ%)DU=x3XHg(A-i{5f2*6 zb9vyhtE=nOCzlj}8KT#!i#{_eYvCL^AvSg)-3s}xxjDiLzFl^3M1~iqCi3!lfgH2uwO+G6ZOsXuq zySiS2RsdI@jGHdW2P*WJZsdcuyPqz8o|*a9lP4TquNl{B^4^#`aAPo#MvwWPA3sty zH$ArlgY$xOm3(7>Yz1HlT>m=+mX{qtQ_d~aHa5zSj*h-fOY>gpzX(Ffkg}tZXx&ae z*uWEs20%6gS6EqDe=aR`mp(3IR|`@YQOjgxU?|Mb4=ppPvXx}NtEcx^;z!_gyMu#+ zk+Jb#?dakn5+5J0n<*WUDr!=iuK6aeUA?yiKA#h!E0l784ePW2XKU%ZmbNyQJMSdU z1lmDf!vrj6I(Z@xL}R#)MQ}+)#fOrTm43keOn%RaWZnra9UbNEuLjL=aSY4DdGmx@ zuu~NvQO74I{SI|x6DAOmf_;~7@`f80+&NxopBGe}%GZm_V+Ahy`Ozk)xSZ(n!Tw#0 zT2`^x>9pBjg&8EzwVj(3`>Q!6P=kKOjqRgXU + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::VWDictionary Member List
+
+
+ +

This is the complete list of members for rtabmap::VWDictionary, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_totalActiveReferencesrtabmap::VWDictionaryprotected
_visualWordsrtabmap::VWDictionaryprotected
addNewWords(const cv::Mat &descriptors, int signatureId)rtabmap::VWDictionaryvirtual
addWord(VisualWord *vw)rtabmap::VWDictionaryvirtual
addWordRef(int wordId, int signatureId)rtabmap::VWDictionary
clear(bool printWarningsIfNotEmpty=true)rtabmap::VWDictionary
convert32FToBin(const cv::Mat &descriptorsIn, bool byteToFloat=true)rtabmap::VWDictionarystatic
convertBinTo32F(const cv::Mat &descriptorsIn, bool byteToFloat=true)rtabmap::VWDictionarystatic
deleteUnusedWords()rtabmap::VWDictionary
deserializeIndex(const std::vector< unsigned char > &data)rtabmap::VWDictionary
deserializeIndex(const unsigned char *data, size_t size)rtabmap::VWDictionary
exportDictionary(const char *fileNameReferences, const char *fileNameDescriptors) constrtabmap::VWDictionary
findNN(const std::list< VisualWord * > &vws) constrtabmap::VWDictionary
findNN(const cv::Mat &descriptors) constrtabmap::VWDictionary
getIndexedWordsCount() constrtabmap::VWDictionary
getIndexMemoryUsed() constrtabmap::VWDictionary
getLastIndexedWordId() constrtabmap::VWDictionary
getMemoryUsed() constrtabmap::VWDictionary
getNextId()rtabmap::VWDictionaryprotected
getNndrRatio() constrtabmap::VWDictionaryinline
getNNStrategy() constrtabmap::VWDictionaryinline
getNotIndexedWordsCount() constrtabmap::VWDictionaryinline
getTotalActiveReferences() constrtabmap::VWDictionaryinline
getUnusedWord(int id) constrtabmap::VWDictionary
getUnusedWordIds() constrtabmap::VWDictionary
getUnusedWords() constrtabmap::VWDictionary
getUnusedWordsSize() constrtabmap::VWDictionaryinline
getVisualWords() constrtabmap::VWDictionaryinline
getWord(int id) constrtabmap::VWDictionary
ID_INVALIDrtabmap::VWDictionarystatic
ID_STARTrtabmap::VWDictionarystatic
isIncremental() constrtabmap::VWDictionaryinline
isIncrementalFlann() constrtabmap::VWDictionaryinline
isModified() constrtabmap::VWDictionary
kNNBruteForce enum valuertabmap::VWDictionary
kNNBruteForceGPU enum valuertabmap::VWDictionary
kNNFlannKdTree enum valuertabmap::VWDictionary
kNNFlannLSH enum valuertabmap::VWDictionary
kNNFlannNaive enum valuertabmap::VWDictionary
kNNUndef enum valuertabmap::VWDictionary
NNStrategy enum namertabmap::VWDictionary
nnStrategyName(NNStrategy strategy)rtabmap::VWDictionaryinlinestatic
parseParameters(const ParametersMap &parameters)rtabmap::VWDictionaryvirtual
removeAllWordRef(int wordId, int signatureId)rtabmap::VWDictionary
removeWords(const std::vector< VisualWord * > &words)rtabmap::VWDictionary
serializeIndex() constrtabmap::VWDictionary
setFixedDictionary(const std::string &dictionaryPath)rtabmap::VWDictionary
setIncrementalDictionary()rtabmap::VWDictionary
setLastWordId(int id)rtabmap::VWDictionaryinline
setNNStrategy(NNStrategy strategy)rtabmap::VWDictionary
update()rtabmap::VWDictionaryvirtual
VWDictionary(const ParametersMap &parameters=ParametersMap())rtabmap::VWDictionary
~VWDictionary()rtabmap::VWDictionaryvirtual
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1VWDictionary.html b/preview/pr-1492/api/latest/classrtabmap_1_1VWDictionary.html new file mode 100644 index 00000000..c4fa87b2 --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1VWDictionary.html @@ -0,0 +1,1671 @@ + + + + + + + + +RTAB-Map: rtabmap::VWDictionary Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

Manages a dictionary of visual words for visual place recognition and loop closure detection. + More...

+ +

#include <VWDictionary.h>

+ + + + + +

+Public Types

enum  NNStrategy {
+  kNNFlannNaive +, kNNFlannKdTree +, kNNFlannLSH +, kNNBruteForce +,
+  kNNBruteForceGPU +, kNNUndef +
+ }
 Nearest neighbor search strategies for descriptor matching. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 VWDictionary (const ParametersMap &parameters=ParametersMap())
 Constructor.
 
virtual ~VWDictionary ()
 Destructor.
 
virtual void parseParameters (const ParametersMap &parameters)
 Parse and apply parameters from a parameters map.
 
virtual void update ()
 Update the search index with newly added words.
 
virtual std::list< int > addNewWords (const cv::Mat &descriptors, int signatureId)
 Add new visual words from descriptors.
 
virtual void addWord (VisualWord *vw)
 Add an existing visual word to the dictionary.
 
std::vector< int > findNN (const std::list< VisualWord * > &vws) const
 Find nearest neighbor visual word IDs for a list of visual words.
 
std::vector< int > findNN (const cv::Mat &descriptors) const
 Find nearest neighbor visual word IDs for descriptors.
 
bool addWordRef (int wordId, int signatureId)
 Add a reference from a visual word to a signature.
 
void removeAllWordRef (int wordId, int signatureId)
 Remove all references from a visual word to a signature.
 
const VisualWord * getWord (int id) const
 Get a visual word by ID.
 
VisualWord * getUnusedWord (int id) const
 Get an unused visual word by ID.
 
void setLastWordId (int id)
 Set the last word ID (used when loading from database)
 
const std::map< int, VisualWord * > & getVisualWords () const
 Get all visual words.
 
float getNndrRatio () const
 Get the Nearest Neighbor Distance Ratio (NNDR) threshold.
 
unsigned int getNotIndexedWordsCount () const
 Get the count of words not yet indexed in the search tree.
 
int getLastIndexedWordId () const
 Get the ID of the last indexed word.
 
int getTotalActiveReferences () const
 Get the total number of active word-to-signature references.
 
unsigned int getIndexedWordsCount () const
 Get the count of words currently indexed in the search tree.
 
unsigned int getIndexMemoryUsed () const
 Get the memory used by the search index.
 
unsigned long getMemoryUsed () const
 Get the total memory used by the dictionary.
 
bool setNNStrategy (NNStrategy strategy)
 Set the nearest neighbor search strategy.
 
NNStrategy getNNStrategy () const
 Get the current nearest neighbor search strategy.
 
bool isIncremental () const
 Check if the dictionary is in incremental mode.
 
bool isIncrementalFlann () const
 Check if FLANN index is updated incrementally.
 
void setIncrementalDictionary ()
 Set the dictionary to incremental mode.
 
void setFixedDictionary (const std::string &dictionaryPath)
 Set the dictionary to fixed mode and load from file.
 
bool isModified () const
 Check if the dictionary has been modified since last save.
 
std::vector< unsigned char > serializeIndex () const
 Serialize the search index to a byte vector.
 
bool deserializeIndex (const std::vector< unsigned char > &data)
 Deserialize the search index from a byte vector.
 
bool deserializeIndex (const unsigned char *data, size_t size)
 Deserialize the search index from raw bytes.
 
void exportDictionary (const char *fileNameReferences, const char *fileNameDescriptors) const
 Export the dictionary to files.
 
void clear (bool printWarningsIfNotEmpty=true)
 Clear all visual words and reset the dictionary.
 
std::vector< VisualWord * > getUnusedWords () const
 Get all unused visual words.
 
std::vector< int > getUnusedWordIds () const
 Get IDs of all unused visual words.
 
unsigned int getUnusedWordsSize () const
 Get the count of unused visual words.
 
void removeWords (const std::vector< VisualWord * > &words)
 Remove words from the dictionary.
 
void deleteUnusedWords ()
 Delete all unused visual words.
 
+ + + + + + + + + + +

+Static Public Member Functions

static std::string nnStrategyName (NNStrategy strategy)
 Get the name of a nearest neighbor strategy.
 
static cv::Mat convertBinTo32F (const cv::Mat &descriptorsIn, bool byteToFloat=true)
 Convert binary descriptors to 32-bit float format.
 
static cv::Mat convert32FToBin (const cv::Mat &descriptorsIn, bool byteToFloat=true)
 Convert 32-bit float descriptors to binary format.
 
+ + + + + + + +

+Static Public Attributes

static const int ID_START
 Starting ID for visual words (typically 1)
 
static const int ID_INVALID
 Invalid visual word ID (typically 0)
 
+ + + + +

+Protected Member Functions

int getNextId ()
 Get the next available visual word ID.
 
+ + + + + + + +

+Protected Attributes

std::map< int, VisualWord * > _visualWords
 Map of visual word ID to VisualWord pointer.
 
int _totalActiveReferences
 Total count of active word-to-signature references.
 
+

Detailed Description

+

Manages a dictionary of visual words for visual place recognition and loop closure detection.

+

The VWDictionary class maintains a collection of visual words (feature descriptors) and provides efficient nearest neighbor search capabilities. It supports both incremental and fixed dictionary modes:

    +
  • Incremental mode: New visual words are added dynamically as new images are processed
  • +
  • Fixed mode: A pre-computed dictionary is loaded from a file
  • +
+

The class uses various nearest neighbor search strategies (FLANN, brute force, GPU-accelerated) to match descriptors efficiently. It tracks word references to signatures (images) and manages unused words for memory optimization.

+
Note
Visual words are identified by unique integer IDs starting from VWDictionary::ID_START
+ +

Definition at line 65 of file VWDictionary.h.

+

Member Enumeration Documentation

+ +

◆ NNStrategy

+ +
+
+ +

Nearest neighbor search strategies for descriptor matching.

+ + + + + + + +
Enumerator
kNNFlannNaive 

FLANN naive search (exhaustive)

+
kNNFlannKdTree 

FLANN kd-tree index (fast for high-dimensional descriptors)

+
kNNFlannLSH 

FLANN Locality-Sensitive Hashing (ideal for binary descriptors)

+
kNNBruteForce 

Brute force CPU search.

+
kNNBruteForceGPU 

Brute force GPU-accelerated search (requires CUDA)

+
kNNUndef 

Undefined strategy.

+
+ +

Definition at line 72 of file VWDictionary.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ VWDictionary()

+ +
+
+ + + + + + + + +
rtabmap::VWDictionary::VWDictionary (const ParametersMap & parameters = ParametersMap())
+
+ +

Constructor.

+
Parameters
+ + +
parametersOptional parameters map to configure the dictionary
+
+
+ +
+
+ +

◆ ~VWDictionary()

+ +
+
+ + + + + +
+ + + + + + + +
virtual rtabmap::VWDictionary::~VWDictionary ()
+
+virtual
+
+ +

Destructor.

+

Clears all visual words and releases resources.

+ +
+
+

Member Function Documentation

+ +

◆ nnStrategyName()

+ +
+
+ + + + + +
+ + + + + + + + +
static std::string rtabmap::VWDictionary::nnStrategyName (NNStrategy strategy)
+
+inlinestatic
+
+ +

Get the name of a nearest neighbor strategy.

+
Parameters
+ + +
strategyThe strategy enum value
+
+
+
Returns
String representation of the strategy name
+ +

Definition at line 96 of file VWDictionary.h.

+ +
+
+ +

◆ parseParameters()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::VWDictionary::parseParameters (const ParametersMap & parameters)
+
+virtual
+
+ +

Parse and apply parameters from a parameters map.

+
Parameters
+ + +
parametersParameters map containing configuration values
+
+
+ +
+
+ +

◆ update()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void rtabmap::VWDictionary::update ()
+
+virtual
+
+ +

Update the search index with newly added words.

+

This method rebuilds the nearest neighbor search index (FLANN, etc.) to include any words that were added but not yet indexed.

+ +
+
+ +

◆ addNewWords()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual std::list< int > rtabmap::VWDictionary::addNewWords (const cv::Mat & descriptors,
int signatureId 
)
+
+virtual
+
+ +

Add new visual words from descriptors.

+
Parameters
+ + + +
descriptorsMatrix of descriptors (one row per descriptor)
signatureIdID of the signature (image) these descriptors belong to
+
+
+
Returns
List of visual word IDs that were added or matched
+

For each descriptor, either matches it to an existing visual word (using nearest neighbor search with NNDR ratio) or creates a new visual word.

+
Note
If the dictionary is not incremental (fixed), NNDR is not applied and the closest existing visual word ID is always returned. If the dictionary is incremental, a new visual word is created if NNDR validation passes; otherwise, a reference to an existing visual word is added.
+ +
+
+ +

◆ addWord()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void rtabmap::VWDictionary::addWord (VisualWord * vw)
+
+virtual
+
+ +

Add an existing visual word to the dictionary.

+
Parameters
+ + +
vwPointer to the visual word to add (ownership is transferred)
+
+
+
Note
The dictionary takes ownership of the VisualWord object
+ +
+
+ +

◆ findNN() [1/2]

+ +
+
+ + + + + + + + +
std::vector< int > rtabmap::VWDictionary::findNN (const std::list< VisualWord * > & vws) const
+
+ +

Find nearest neighbor visual word IDs for a list of visual words.

+
Parameters
+ + +
vwsList of visual words to match
+
+
+
Returns
Vector of visual word IDs (one per input visual word)
+
Note
If the dictionary is not incremental (fixed), NNDR is not applied and the closest visual word ID is always returned. If the dictionary is incremental, a valid visual word ID is returned only if NNDR validation passes.
+ +
+
+ +

◆ findNN() [2/2]

+ +
+
+ + + + + + + + +
std::vector< int > rtabmap::VWDictionary::findNN (const cv::Mat & descriptors) const
+
+ +

Find nearest neighbor visual word IDs for descriptors.

+
Parameters
+ + +
descriptorsMatrix of descriptors (one row per descriptor)
+
+
+
Returns
Vector of visual word IDs (one per descriptor)
+
Note
If the dictionary is not incremental (fixed), NNDR is not applied and the closest visual word ID is always returned. If the dictionary is incremental, a valid visual word ID is returned only if NNDR validation passes.
+ +
+
+ +

◆ addWordRef()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::VWDictionary::addWordRef (int wordId,
int signatureId 
)
+
+ +

Add a reference from a visual word to a signature.

+
Parameters
+ + + +
wordIdID of the visual word
signatureIdID of the signature (image)
+
+
+
Returns
true if the word exists in the dictionary and the reference has been added, false otherwise
+

Tracks which signatures use which visual words. If the word was unused, it is removed from the unused words list.

+ +
+
+ +

◆ removeAllWordRef()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::VWDictionary::removeAllWordRef (int wordId,
int signatureId 
)
+
+ +

Remove all references from a visual word to a signature.

+
Parameters
+ + + +
wordIdID of the visual word
signatureIdID of the signature (image)
+
+
+

If the word has no more references after this operation, it is added to the unused words list.

+ +
+
+ +

◆ getWord()

+ +
+
+ + + + + + + + +
const VisualWord * rtabmap::VWDictionary::getWord (int id) const
+
+ +

Get a visual word by ID.

+
Parameters
+ + +
idVisual word ID
+
+
+
Returns
Pointer to the visual word, or nullptr if not found
+ +
+
+ +

◆ getUnusedWord()

+ +
+
+ + + + + + + + +
VisualWord * rtabmap::VWDictionary::getUnusedWord (int id) const
+
+ +

Get an unused visual word by ID.

+
Parameters
+ + +
idVisual word ID
+
+
+
Returns
Pointer to the unused visual word, or nullptr if not found or not unused
+
Note
Ownership of the returned visual word still belongs to the dictionary. To transfer ownership to the caller, removeWords() must be called on this word.
+ +
+
+ +

◆ setLastWordId()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::VWDictionary::setLastWordId (int id)
+
+inline
+
+ +

Set the last word ID (used when loading from database)

+
Parameters
+ + +
idLast word ID
+
+
+ +

Definition at line 232 of file VWDictionary.h.

+ +
+
+ +

◆ getVisualWords()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, VisualWord * > & rtabmap::VWDictionary::getVisualWords () const
+
+inline
+
+ +

Get all visual words.

+
Returns
Map of visual word ID to VisualWord pointer
+ +

Definition at line 238 of file VWDictionary.h.

+ +
+
+ +

◆ getNndrRatio()

+ +
+
+ + + + + +
+ + + + + + + +
float rtabmap::VWDictionary::getNndrRatio () const
+
+inline
+
+ +

Get the Nearest Neighbor Distance Ratio (NNDR) threshold.

+
Returns
NNDR ratio value
+

The NNDR ratio is used to determine if a descriptor matches an existing visual word. If the ratio of distances to the first and second nearest neighbors is below this threshold, a match is accepted.

+
Note
The NNDR method was introduced in "Distinctive Image Features +from Scale-Invariant Keypoints" by David Lowe (IJCV 2004).
+ +

Definition at line 251 of file VWDictionary.h.

+ +
+
+ +

◆ getNotIndexedWordsCount()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int rtabmap::VWDictionary::getNotIndexedWordsCount () const
+
+inline
+
+ +

Get the count of words not yet indexed in the search tree.

+
Returns
Number of words waiting to be indexed
+ +

Definition at line 257 of file VWDictionary.h.

+ +
+
+ +

◆ getLastIndexedWordId()

+ +
+
+ + + + + + + +
int rtabmap::VWDictionary::getLastIndexedWordId () const
+
+ +

Get the ID of the last indexed word.

+
Returns
Last indexed word ID, or 0 if no words are indexed
+ +
+
+ +

◆ getTotalActiveReferences()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::VWDictionary::getTotalActiveReferences () const
+
+inline
+
+ +

Get the total number of active word-to-signature references.

+
Returns
Total count of active references
+ +

Definition at line 269 of file VWDictionary.h.

+ +
+
+ +

◆ getIndexedWordsCount()

+ +
+
+ + + + + + + +
unsigned int rtabmap::VWDictionary::getIndexedWordsCount () const
+
+ +

Get the count of words currently indexed in the search tree.

+
Returns
Number of indexed words
+ +
+
+ +

◆ getIndexMemoryUsed()

+ +
+
+ + + + + + + +
unsigned int rtabmap::VWDictionary::getIndexMemoryUsed () const
+
+ +

Get the memory used by the search index.

+
Returns
Memory usage in kilobytes
+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + + + +
unsigned long rtabmap::VWDictionary::getMemoryUsed () const
+
+ +

Get the total memory used by the dictionary.

+
Returns
Memory usage in bytes
+ +
+
+ +

◆ setNNStrategy()

+ +
+
+ + + + + + + + +
bool rtabmap::VWDictionary::setNNStrategy (NNStrategy strategy)
+
+ +

Set the nearest neighbor search strategy.

+
Parameters
+ + +
strategyThe strategy to use
+
+
+
Returns
true if the search tree was re-initialized (strategy changed), false otherwise
+

Changing the strategy will rebuild the search index if words are already indexed.

+ +
+
+ +

◆ getNNStrategy()

+ +
+
+ + + + + +
+ + + + + + + +
NNStrategy rtabmap::VWDictionary::getNNStrategy () const
+
+inline
+
+ +

Get the current nearest neighbor search strategy.

+
Returns
The current NNStrategy
+ +

Definition at line 302 of file VWDictionary.h.

+ +
+
+ +

◆ isIncremental()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::VWDictionary::isIncremental () const
+
+inline
+
+ +

Check if the dictionary is in incremental mode.

+
Returns
true if incremental, false if fixed
+ +

Definition at line 308 of file VWDictionary.h.

+ +
+
+ +

◆ isIncrementalFlann()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::VWDictionary::isIncrementalFlann () const
+
+inline
+
+ +

Check if FLANN index is updated incrementally.

+
Returns
true if incremental FLANN updates are enabled
+ +

Definition at line 314 of file VWDictionary.h.

+ +
+
+ +

◆ setIncrementalDictionary()

+ +
+
+ + + + + + + +
void rtabmap::VWDictionary::setIncrementalDictionary ()
+
+ +

Set the dictionary to incremental mode.

+

In incremental mode, new visual words can be added dynamically. This cannot be called if a fixed dictionary is already loaded.

+ +
+
+ +

◆ setFixedDictionary()

+ +
+
+ + + + + + + + +
void rtabmap::VWDictionary::setFixedDictionary (const std::string & dictionaryPath)
+
+ +

Set the dictionary to fixed mode and load from file.

+
Parameters
+ + +
dictionaryPathPath to the dictionary file (.txt or .db format)
+
+
+

Loads a pre-computed dictionary from a file. The dictionary file format in txt format should be: one line per visual word, with word ID followed by descriptor values. This cannot be called if words are already in the dictionary.

+ +
+
+ +

◆ isModified()

+ +
+
+ + + + + + + +
bool rtabmap::VWDictionary::isModified () const
+
+ +

Check if the dictionary has been modified since last save.

+
Returns
true if modified, false otherwise
+ +
+
+ +

◆ serializeIndex()

+ +
+
+ + + + + + + +
std::vector< unsigned char > rtabmap::VWDictionary::serializeIndex () const
+
+ +

Serialize the search index to a byte vector.

+
Returns
Serialized index data
+ +
+
+ +

◆ deserializeIndex() [1/2]

+ +
+
+ + + + + + + + +
bool rtabmap::VWDictionary::deserializeIndex (const std::vector< unsigned char > & data)
+
+ +

Deserialize the search index from a byte vector.

+
Parameters
+ + +
dataSerialized index data
+
+
+
Returns
true if deserialization was successful, false otherwise
+ +
+
+ +

◆ deserializeIndex() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool rtabmap::VWDictionary::deserializeIndex (const unsigned char * data,
size_t size 
)
+
+ +

Deserialize the search index from raw bytes.

+
Parameters
+ + + +
dataPointer to serialized index data
sizeSize of the data in bytes
+
+
+
Returns
true if deserialization was successful, false otherwise
+ +
+
+ +

◆ exportDictionary()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void rtabmap::VWDictionary::exportDictionary (const char * fileNameReferences,
const char * fileNameDescriptors 
) const
+
+ +

Export the dictionary to files.

+
Parameters
+ + + +
fileNameReferencesPath to file for word-to-signature references
fileNameDescriptorsPath to file for visual word descriptors
+
+
+

Exports the dictionary in a format that can be loaded later.

+ +
+
+ +

◆ clear()

+ +
+
+ + + + + + + + +
void rtabmap::VWDictionary::clear (bool printWarningsIfNotEmpty = true)
+
+ +

Clear all visual words and reset the dictionary.

+
Parameters
+ + +
printWarningsIfNotEmptyIf true, print warnings if dictionary is not empty
+
+
+

Deletes all visual words and releases all resources.

+ +
+
+ +

◆ getUnusedWords()

+ +
+
+ + + + + + + +
std::vector< VisualWord * > rtabmap::VWDictionary::getUnusedWords () const
+
+ +

Get all unused visual words.

+
Returns
Vector of pointers to unused visual words
+

Unused words are visual words that have no references to any signatures.

+
Note
Ownership of the returned visual words still belongs to the dictionary. To transfer ownership to the caller, removeWords() must be called on these words.
+ +
+
+ +

◆ getUnusedWordIds()

+ +
+
+ + + + + + + +
std::vector< int > rtabmap::VWDictionary::getUnusedWordIds () const
+
+ +

Get IDs of all unused visual words.

+
Returns
Vector of unused word IDs
+ +
+
+ +

◆ getUnusedWordsSize()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int rtabmap::VWDictionary::getUnusedWordsSize () const
+
+inline
+
+ +

Get the count of unused visual words.

+
Returns
Number of unused words
+ +

Definition at line 399 of file VWDictionary.h.

+ +
+
+ +

◆ removeWords()

+ +
+
+ + + + + + + + +
void rtabmap::VWDictionary::removeWords (const std::vector< VisualWord * > & words)
+
+ +

Remove words from the dictionary.

+
Parameters
+ + +
wordsVector of visual word pointers to remove
+
+
+
Note
The caller is responsible for deleting the VisualWord objects
+ +
+
+ +

◆ deleteUnusedWords()

+ +
+
+ + + + + + + +
void rtabmap::VWDictionary::deleteUnusedWords ()
+
+ +

Delete all unused visual words.

+

Removes and deletes visual words that have no references to any signatures.

+ +
+
+ +

◆ convertBinTo32F()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static cv::Mat rtabmap::VWDictionary::convertBinTo32F (const cv::Mat & descriptorsIn,
bool byteToFloat = true 
)
+
+static
+
+ +

Convert binary descriptors to 32-bit float format.

+
Parameters
+ + + +
descriptorsInInput descriptors (CV_8UC1 for binary, or CV_32FC1 for float)
byteToFloatConversion mode:
    +
  • If true: Simple type conversion from CV_8UC1 to CV_32FC1 using OpenCV's convertTo(). Each byte value becomes a float value (output dimensions unchanged).
  • +
  • If false: Bit-by-bit expansion for binary descriptors (e.g., ORB, BRIEF). Each input byte (8 bits) is expanded into 8 float values (0.0f or 1.0f), one per bit. Output has 8x the number of columns (e.g., 32 bytes -> 256 floats).
  • +
+
+
+
+
Returns
Descriptors in 32-bit float format (CV_32FC1)
+ +
+
+ +

◆ convert32FToBin()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static cv::Mat rtabmap::VWDictionary::convert32FToBin (const cv::Mat & descriptorsIn,
bool byteToFloat = true 
)
+
+static
+
+ +

Convert 32-bit float descriptors to binary format.

+
Parameters
+ + + +
descriptorsInInput descriptors (CV_32FC1)
byteToFloatConversion mode:
    +
  • If true: Simple type conversion from CV_32FC1 to CV_8UC1 using OpenCV's convertTo(). Each float value becomes a byte value (output dimensions unchanged).
  • +
  • If false: Bit-by-bit packing for binary descriptors. Each group of 8 float values (0.0f or 1.0f) is packed into 1 byte (8 bits), one bit per float. Input must have columns divisible by 8. Output has 1/8 the number of columns (e.g., 256 floats -> 32 bytes).
  • +
+
+
+
+
Returns
Descriptors in binary format (CV_8UC1)
+ +
+
+ +

◆ getNextId()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::VWDictionary::getNextId ()
+
+protected
+
+ +

Get the next available visual word ID.

+
Returns
Next unique word ID
+ +
+
+

Member Data Documentation

+ +

◆ ID_START

+ +
+
+ + + + + +
+ + + + +
const int rtabmap::VWDictionary::ID_START
+
+static
+
+ +

Starting ID for visual words (typically 1)

+ +

Definition at line 84 of file VWDictionary.h.

+ +
+
+ +

◆ ID_INVALID

+ +
+
+ + + + + +
+ + + + +
const int rtabmap::VWDictionary::ID_INVALID
+
+static
+
+ +

Invalid visual word ID (typically 0)

+ +

Definition at line 89 of file VWDictionary.h.

+ +
+
+ +

◆ _visualWords

+ +
+
+ + + + + +
+ + + + +
std::map<int, VisualWord *> rtabmap::VWDictionary::_visualWords
+
+protected
+
+ +

Map of visual word ID to VisualWord pointer.

+
Note
All visual words (used and unused) are stored here
+ +

Definition at line 456 of file VWDictionary.h.

+ +
+
+ +

◆ _totalActiveReferences

+ +
+
+ + + + + +
+ + + + +
int rtabmap::VWDictionary::_totalActiveReferences
+
+protected
+
+ +

Total count of active word-to-signature references.

+
Note
Used to track all references for updating common signatures
+ +

Definition at line 462 of file VWDictionary.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1VisualWord-members.html b/preview/pr-1492/api/latest/classrtabmap_1_1VisualWord-members.html new file mode 100644 index 00000000..cc42eb1a --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1VisualWord-members.html @@ -0,0 +1,103 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap::VisualWord Member List
+
+
+ +

This is the complete list of members for rtabmap::VisualWord, including all inherited members.

+ + + + + + + + + + + + +
addRef(int signatureId)rtabmap::VisualWord
getDescriptor() constrtabmap::VisualWordinline
getMemoryUsed() constrtabmap::VisualWord
getReferences() constrtabmap::VisualWordinline
getTotalReferences() constrtabmap::VisualWordinline
id() constrtabmap::VisualWordinline
isSaved() constrtabmap::VisualWordinline
removeAllRef(int signatureId)rtabmap::VisualWord
setSaved(bool saved)rtabmap::VisualWordinline
VisualWord(int id, const cv::Mat &descriptor, int signatureId=0)rtabmap::VisualWord
~VisualWord()rtabmap::VisualWord
+ + + + diff --git a/preview/pr-1492/api/latest/classrtabmap_1_1VisualWord.html b/preview/pr-1492/api/latest/classrtabmap_1_1VisualWord.html new file mode 100644 index 00000000..84244a2f --- /dev/null +++ b/preview/pr-1492/api/latest/classrtabmap_1_1VisualWord.html @@ -0,0 +1,449 @@ + + + + + + + + +RTAB-Map: rtabmap::VisualWord Class Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
rtabmap::VisualWord Class Reference
+
+
+ +

Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model. + More...

+ +

#include <VisualWord.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 VisualWord (int id, const cv::Mat &descriptor, int signatureId=0)
 Constructor.
 
+ ~VisualWord ()
 Destructor.
 
void addRef (int signatureId)
 Adds a reference to this word for the given signature ID.
 
int removeAllRef (int signatureId)
 Removes all references to this word for the given signature ID.
 
unsigned long getMemoryUsed () const
 Estimates the memory used by this visual word in bytes.
 
int getTotalReferences () const
 Returns the total number of references (across all signatures).
 
int id () const
 Returns the ID of this visual word.
 
const cv::Mat & getDescriptor () const
 Returns the feature descriptor of this word.
 
const std::map< int, int > & getReferences () const
 Returns the references of this word.
 
bool isSaved () const
 Checks if the word has been saved to the database.
 
void setSaved (bool saved)
 Sets the saved flag for the word.
 
+

Detailed Description

+

Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model.

+

A VisualWord holds a unique identifier, its descriptor (usually a feature vector from an image), and a record of where (in which signatures/images) it was observed. This is a key component in loop closure detection and visual place recognition in RTAB-Map.

+

The word keeps track of references (signature IDs) where it appears, and how many times it was observed in each signature. It also tracks whether the word has been saved to a database.

+ +

Definition at line 49 of file VisualWord.h.

+

Constructor & Destructor Documentation

+ +

◆ VisualWord()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rtabmap::VisualWord::VisualWord (int id,
const cv::Mat & descriptor,
int signatureId = 0 
)
+
+ +

Constructor.

+
Parameters
+ + + + +
idUnique ID of the visual word.
descriptorThe descriptor associated with the word (e.g., ORB, SIFT).
signatureIdOptional signature ID where the word is first observed.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ addRef()

+ +
+
+ + + + + + + + +
void rtabmap::VisualWord::addRef (int signatureId)
+
+ +

Adds a reference to this word for the given signature ID.

+
Parameters
+ + +
signatureIdID of the signature in which this word is observed.
+
+
+ +
+
+ +

◆ removeAllRef()

+ +
+
+ + + + + + + + +
int rtabmap::VisualWord::removeAllRef (int signatureId)
+
+ +

Removes all references to this word for the given signature ID.

+
Parameters
+ + +
signatureIdID of the signature from which references will be removed.
+
+
+
Returns
Number of references removed.
+ +
+
+ +

◆ getMemoryUsed()

+ +
+
+ + + + + + + +
unsigned long rtabmap::VisualWord::getMemoryUsed () const
+
+ +

Estimates the memory used by this visual word in bytes.

+
Returns
Size in bytes.
+ +
+
+ +

◆ getTotalReferences()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::VisualWord::getTotalReferences () const
+
+inline
+
+ +

Returns the total number of references (across all signatures).

+
Returns
Number of total references.
+ +

Definition at line 88 of file VisualWord.h.

+ +
+
+ +

◆ id()

+ +
+
+ + + + + +
+ + + + + + + +
int rtabmap::VisualWord::id () const
+
+inline
+
+ +

Returns the ID of this visual word.

+
Returns
Word ID.
+ +

Definition at line 94 of file VisualWord.h.

+ +
+
+ +

◆ getDescriptor()

+ +
+
+ + + + + +
+ + + + + + + +
const cv::Mat & rtabmap::VisualWord::getDescriptor () const
+
+inline
+
+ +

Returns the feature descriptor of this word.

+
Returns
The OpenCV matrix descriptor.
+ +

Definition at line 100 of file VisualWord.h.

+ +
+
+ +

◆ getReferences()

+ +
+
+ + + + + +
+ + + + + + + +
const std::map< int, int > & rtabmap::VisualWord::getReferences () const
+
+inline
+
+ +

Returns the references of this word.

+
Returns
A map of (signature ID, occurrence count).
+ +

Definition at line 106 of file VisualWord.h.

+ +
+
+ +

◆ isSaved()

+ +
+
+ + + + + +
+ + + + + + + +
bool rtabmap::VisualWord::isSaved () const
+
+inline
+
+ +

Checks if the word has been saved to the database.

+
Returns
True if saved, false otherwise.
+ +

Definition at line 112 of file VisualWord.h.

+ +
+
+ +

◆ setSaved()

+ +
+
+ + + + + +
+ + + + + + + + +
void rtabmap::VisualWord::setSaved (bool saved)
+
+inline
+
+ +

Sets the saved flag for the word.

+
Parameters
+ + +
savedTrue if the word has been saved to the database.
+
+
+ +

Definition at line 118 of file VisualWord.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/preview/pr-1492/api/latest/closed.png b/preview/pr-1492/api/latest/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/deprecated.html b/preview/pr-1492/api/latest/deprecated.html new file mode 100644 index 00000000..2858463d --- /dev/null +++ b/preview/pr-1492/api/latest/deprecated.html @@ -0,0 +1,108 @@ + + + + + + + + +RTAB-Map: Deprecated List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Deprecated List
+
+
+
+
Member rtabmap::CameraEvent
+
Use SensorEvent instead
+
Member rtabmap::CameraInfo
+
Use SensorCaptureInfo instead
+
Member rtabmap::CameraThread
+
Use SensorCaptureThread instead
+
Member rtabmap::LaserScan::LaserScan (const LaserScan &data, Format format, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity())
+
Use constructor without format argument.
+
Member rtabmap::LaserScan::LaserScan (const LaserScan &data, int maxPoints, float maxRange, Format format, const Transform &localTransform=Transform::getIdentity())
+
Use constructor without format argument.
+
Member rtabmap::Odometry::previousVelocityTransform () const
+
Use getVelocityGuess() instead.
+
Member rtabmap::SensorCaptureThread::setImageRate (float frameRate)
+
Use setFrameRate() instead
+
Member rtabmap::SensorCaptureThread::setScanParameters (bool fromDepth, int downsampleStep, float rangeMin, float rangeMax, float voxelSize, int normalsK, float normalsRadius, bool forceGroundNormalsUp, bool deskewing)
+
Use the new version with groundNormalsUp parameter instead
+
Member rtabmap::Statistics::setLastSignatureData (const Signature &data)
+
Use addSignatureData() instead
+
Member rtabmap::Transform::getClosestTransform (const std::map< double, Transform > &tfBuffer, const double &stamp, double *stampDiff)
+
Use getTransform() instead.
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_000004_000021.html b/preview/pr-1492/api/latest/dir_000004_000021.html new file mode 100644 index 00000000..e67714fc --- /dev/null +++ b/preview/pr-1492/api/latest/dir_000004_000021.html @@ -0,0 +1,86 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core -> utilite Relation + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+

core → utilite Relation

File in corelib/include/rtabmap/coreIncludes file in utilite
EpipolarGeometry.hinclude / rtabmap / utilite / UStl.h
Landmark.hinclude / rtabmap / utilite / UConversion.h
Landmark.hinclude / rtabmap / utilite / ULogger.h
Landmark.hinclude / rtabmap / utilite / UMath.h
Memory.hinclude / rtabmap / utilite / UStl.h
OdometryEvent.hinclude / rtabmap / utilite / ULogger.h
OdometryEvent.hinclude / rtabmap / utilite / UMath.h
Parameters.hinclude / rtabmap / utilite / UConversion.h
ParticleFilter.hinclude / rtabmap / utilite / ULogger.h
ParticleFilter.hinclude / rtabmap / utilite / UMath.h
ProgressState.hinclude / rtabmap / utilite / ULogger.h
RtabmapEvent.hinclude / rtabmap / utilite / UVariant.h
Statistics.hinclude / rtabmap / utilite / UStl.h
impl / LocalMapMaker.hppinclude / rtabmap / utilite / ULogger.h
impl / util3d_surface.hppinclude / rtabmap / utilite / UConversion.h
+ + + + diff --git a/preview/pr-1492/api/latest/dir_000008_000021.html b/preview/pr-1492/api/latest/dir_000008_000021.html new file mode 100644 index 00000000..c1d51410 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_000008_000021.html @@ -0,0 +1,86 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/impl -> utilite Relation + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+

impl → utilite Relation

File in corelib/include/rtabmap/core/implIncludes file in utilite
LocalMapMaker.hppinclude / rtabmap / utilite / ULogger.h
util3d_surface.hppinclude / rtabmap / utilite / UConversion.h
+ + + + diff --git a/preview/pr-1492/api/latest/dir_000010_000021.html b/preview/pr-1492/api/latest/dir_000010_000021.html new file mode 100644 index 00000000..496d4b9a --- /dev/null +++ b/preview/pr-1492/api/latest/dir_000010_000021.html @@ -0,0 +1,86 @@ + + + + + + + + +RTAB-Map: corelib/include -> utilite Relation + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+

include → utilite Relation

File in corelib/includeIncludes file in utilite
rtabmap / core / EpipolarGeometry.hinclude / rtabmap / utilite / UStl.h
rtabmap / core / Landmark.hinclude / rtabmap / utilite / UConversion.h
rtabmap / core / Landmark.hinclude / rtabmap / utilite / ULogger.h
rtabmap / core / Landmark.hinclude / rtabmap / utilite / UMath.h
rtabmap / core / impl / LocalMapMaker.hppinclude / rtabmap / utilite / ULogger.h
rtabmap / core / Memory.hinclude / rtabmap / utilite / UStl.h
rtabmap / core / OdometryEvent.hinclude / rtabmap / utilite / ULogger.h
rtabmap / core / OdometryEvent.hinclude / rtabmap / utilite / UMath.h
rtabmap / core / Parameters.hinclude / rtabmap / utilite / UConversion.h
rtabmap / core / ParticleFilter.hinclude / rtabmap / utilite / ULogger.h
rtabmap / core / ParticleFilter.hinclude / rtabmap / utilite / UMath.h
rtabmap / core / ProgressState.hinclude / rtabmap / utilite / ULogger.h
rtabmap / core / RtabmapEvent.hinclude / rtabmap / utilite / UVariant.h
rtabmap / core / Statistics.hinclude / rtabmap / utilite / UStl.h
rtabmap / core / impl / util3d_surface.hppinclude / rtabmap / utilite / UConversion.h
+ + + + diff --git a/preview/pr-1492/api/latest/dir_000017_000021.html b/preview/pr-1492/api/latest/dir_000017_000021.html new file mode 100644 index 00000000..f4a6d70e --- /dev/null +++ b/preview/pr-1492/api/latest/dir_000017_000021.html @@ -0,0 +1,86 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap -> utilite Relation + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+

rtabmap → utilite Relation

File in corelib/include/rtabmapIncludes file in utilite
core / EpipolarGeometry.hinclude / rtabmap / utilite / UStl.h
core / Landmark.hinclude / rtabmap / utilite / UConversion.h
core / Landmark.hinclude / rtabmap / utilite / ULogger.h
core / Landmark.hinclude / rtabmap / utilite / UMath.h
core / impl / LocalMapMaker.hppinclude / rtabmap / utilite / ULogger.h
core / Memory.hinclude / rtabmap / utilite / UStl.h
core / OdometryEvent.hinclude / rtabmap / utilite / ULogger.h
core / OdometryEvent.hinclude / rtabmap / utilite / UMath.h
core / Parameters.hinclude / rtabmap / utilite / UConversion.h
core / ParticleFilter.hinclude / rtabmap / utilite / ULogger.h
core / ParticleFilter.hinclude / rtabmap / utilite / UMath.h
core / ProgressState.hinclude / rtabmap / utilite / ULogger.h
core / RtabmapEvent.hinclude / rtabmap / utilite / UVariant.h
core / Statistics.hinclude / rtabmap / utilite / UStl.h
core / impl / util3d_surface.hppinclude / rtabmap / utilite / UConversion.h
+ + + + diff --git a/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f.html b/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f.html new file mode 100644 index 00000000..e4d52e13 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f.html @@ -0,0 +1,101 @@ + + + + + + + + +RTAB-Map: corelib Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
corelib Directory Reference
+
+
+
+Directory dependency graph for corelib:
+
+
corelib
+ + + + + + + +
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.map b/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.map new file mode 100644 index 00000000..6a74c814 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.md5 b/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.md5 new file mode 100644 index 00000000..a60337aa --- /dev/null +++ b/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.md5 @@ -0,0 +1 @@ +9e321c63f5d682a981e36f479132ee3e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.png b/preview/pr-1492/api/latest/dir_04d49acea3c42cab2afcd35cb2f2a48f_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..86ff0d1c947937acf7e57dc52f7461f4f84ff1a7 GIT binary patch literal 3708 zcmai1cQ71W*I$t+D@vk99xbBx5Nxny5#8z~T7)REh+e{ys7Wjlb@g6$i7wb>qd!W5 zsEbt|Eqd>)*YnQz&G*Omyz|bTd(Lm>{?6Rr+&OdZIUn?N)u@52KmY(ht)Z@BaP3F0 zcNhiPwPj7QcD{CGFSXQE09SvnoaW*L0Dwk9L*=QFf5s*uz|!cD*u6XMr^KR!PwY_O zp<~?iEuZBs>=ZfXsn87QV;agf-7gk#u&%j(`RLr)wBm61*YvoGNJT^ZUtb!RTH>Af z1>XzJg>Hzi5Z~odxV=fe7dfymHgKA?e+j4A%i7OGdeLx((?KY>{)73gn&jIp?K(L! zDpj78)k$G1lxVO!Rqr}wm=?^YC0A19T%Ksqr-i}M)oTmX-JlTo(L$E#awqSX&>?b7 zS0V6-H^+lsq3LcLiZ|qOZh!FayQt7E9VfO6EV~t@t#JZQ@GZxqOL~aoT|q8y-rT$Y z1e$`NhvH}0=}rS>WB&5zirpnc92S_{x!j*3fH~%UzVarRc%GN*Hh(~`9ZWwFSClQ%)w&idEua}#6$*{6a!wS%Y$wG+D%K898&ex z^5UXOM-yU9G`}Bqr0sKju)Wv0Z;7Rg!e>C+PR&HEqlG+hQihKl?ecqiel|JIe%N(v z2t0+v`xHajc|;D6gbIp~8nPUHNm{#3X(lffOUDyFoG-}UTXl}}bdna6kx4P+vy1*D z1it+Fr~1n8_;$+%Ive|7YistumCMPcFD}|25$mHeGBVnTFJHn}yf-*fe=NU^eS57% zcl@jM(sc|^J)SjP!O-=S<VJ=bWw1fMlvY`8oo&xMwywKelzF~dM zc%(-d-X?D0B-d)Bi~um~eN2Y9$XE`6e>I!EGcQ@9Uqcg29wTgdOi)xT2>I>w96Xhk zxG1E33ga&o&}cB;&q>2Dn&ymPYRan(eCG1rl&ri65nqB` zHa*53Z^`-l`{y~cBJRuBZe4WBf2#DU&dbW8X3&<`0RO?x5FSkVzlX(f2Kk4!=^+FcHmTs z*a`EhjKOIj(Ig`SVc8t?E+l3{D}m`sRr!iDGj?q6XQo`=+@Q>cHK3`%BzeG=)rk32UuANX+4a-OM|veP?CN~^gR=yT)Rlt{c+CrP1D zXuT^z`^5|T$+{3qeu{ydR%LvxM726cZdg=~QR~9PeCf-WxH#Hp`SF=@^)+7IzVFjy zR#IFown2rWJ%hH~;w(V8aa6P9`|xn84EcM8W9=d`jBDCUFmHkCjk!4`I2@c-6z{=} zKy76eZeJ{4RTVkgzbaZ-TehAkNEE!CROCFZj`>L>q(_6X=SR}~G0(<-#krGyEiRZ_ z+O&F^-ecd^K8*hJ$+c8%Uc-1FYwK^vP+iRjJUqw`HnC#WI(^B|1SIlZSnGW5+TP9% z|HZeOq3EIC5Y+0K@}>(lqoC1oUSghZ7+*A~KJI&tBXE4h-f?~rCS2d_V(j;8*zM}k zwV;Fy@5V~8*-2_yuQe9LjWp8FU%Zj)J*HGs>(V>LI^8X`+he#&TAkso^LcgE!CG_4 zB51niYZRs5@q3%a>1j*A1u3hfSC>?E^&^RyAdjhU+cFoVH@2p-(dhd^rsX1!j4>YE z)TX8~)ivx}D?U4OBo|pbVISfC7T;67TGF!U8ewjov(BJ(N-{djngtSe;5hvz*^arGdo$-R0XO6dq^_O z*8)957_lF_X#T4EbisP)en$I8M9A>Rx2^IzYOXf56S!?X63IDTvN!%u0=lb|l3izTO z!52fzEhqQs_2@M6AjD>;7hN&GZh_t)x73A68-ZJVB$^r+MHNjj;6^-NwLW0FLLh4f z45;-#3+U3Z?5NK+t>*Cr5p{?vDKqXV6Q+G8Yz^@af6Z<2TcQJZ_Rz}syNwyIw{8um z&-p5NcuH40o(H02LBlJDSGL{BqelDuPPBoj#|yk74tHK&kdwX8Ih9N)U*ql8lGa>>Y?T~*;{*+-J2J&zkBpm_vEATO~vCIfY?}? zo8*dd2?<{DL=$3dWCYc6HQeeZ9*>uw5=@n_QzTKkcl&R~P-kJsl0`6)8zw*Bm;5>P zv(lgFkfqFd?y6UXMABPgEhjH=76S%XbL~~ML8%VeDVV|fZqCNT1saP74*KZG^yva8 zWjBI0I`Mgx&$>xKauZ#>5`-uG=R+gNZ|(mF`txjv&p0N8QmW*>O=87>3uQ6nP#m3|&&VydA3a@V&;QYG3{^+f!qFhJd$C z7E;LZY?p=)BEvN)GBry65s1zjmRr?)Bw*m9`Do9SCHkB1xU`9{-`8o~@zqSx%Zvf# zs>v|TGyM*A=iHbym$1I6(#bun$fbh69Ww%faC6M>mO$hmfd2RAPtg0H7T~{u^h>Re zORg^pq;*>5WSI9?yiHW$Ou33Kl7lRsD^I9r(x=RI>dfNvAgJ2hv?+6H@<>{u`MTTK ziJ!)lllbMbFGOAnNuhc|a z17#+?Rd7TJs=D85Jv|k!^|fj{(kNl)EGzF#Cup#Vrw1_qmUvTV@?-Kb<q`j;) zb_jQ!vBL>gQ&i%VM#_Y&$f*+UCYI!|IT`MXuFY*aCFu~ZF=;3xkzM?2KbY2sI@MKA zd!PbBHHR{?Lns8dBry&o)N(mTZ8HKp#hyj)J9ol<#nvYEm>$1eY-R7_5>ZC^(PV z(`B6;lFh1lZD+5E00*=8&ywCsIi?|Cl}=CFz8Zhj1D#cpsEdr{{5i@Q1h+_fb&3ja zMls}`5uKB$gjco%a*%@G4O~VZZkQHQFoqVH0XvIA1r9Uu4iTQ=Y-p)m6fVjp@vmMs zw5Oi%Z5Q-jnMq=$RuZp~t!;0av+(i}!(dO@No(3;%5x)U$gLNHW?kh1Ib9I}YZbA?^3azgnmsl~3{5qYx9V7HZ_Ioh0T6hoo7Ug&FWEQ@&LBxXK$@ix|r-m+ok*+3WCYWr^Fgi~8 z)4-z6Zg2oW$!_4>rs1nhv9Y4T;pVu$FPt{L#D2Tft;#z`WywH5nMWny%XK!_XfmT> z*{oj-wFQicDo;pYXh*{!54q?AYtVXiF2iXY$)bYQZgwNSWZ2y!h2us{a{)NqpTU<= zkPG%S0%)v9uL#H27rp^WNW5Fi5>3_SC8Pf1dwhEo3wQ%py0r@FrV#_gNnc`2IaXI? zPR>*HHLmMxeO$PsV?kjR?yc=^?L@yD2-cAY zyvu%R($v+S5p84YCG2z4jWqx%Dwt8(=EbSkT|s^A2w>7sXGDM5)Hu)@6IiE?Y1KQz zZxDh<(54(=t>1el{ISi=ebczg5XLnHY)C;Q>SXCCoKX^&m*1YfWO z1Qg1$QLY)+jjWbI;$A^xuuz62R)#cKf6#-LH!+% zZ|v`WxB)H19=5YCj>YxnLo!RlODO)i%>KLZmcfx + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/Win32 Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Win32 Directory Reference
+
+
+
+Directory dependency graph for Win32:
+
+
utilite/include/rtabmap/utilite/Win32
+ + + + +
+ + + + + + +

+Files

 UThreadC.h
 
 UWin32.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.map b/preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.map new file mode 100644 index 00000000..6eb5f6fe --- /dev/null +++ b/preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.md5 b/preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.md5 new file mode 100644 index 00000000..bf572a20 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.md5 @@ -0,0 +1 @@ +d5e7147f1447f72a72ca3b5f13bd281d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.png b/preview/pr-1492/api/latest/dir_0ba908baca6d808b21359711c92b5f16_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..d13a33524df82368f381596ec60dba66c8e83561 GIT binary patch literal 2000 zcmV;>2QT=EP)Ub>8cO!9wf!H~|q?su%2_>R(;#KA!c>BY=iEJ0$ z-Nxna_xX$6=icY;IbWV<+kNhH0YV5Ngb+dqA%qY@2qA@i|zh)6LiEbZfcx z(Q36jxyto=eIgxiUytxPm|+;@maW^FaS2nb?sH(@51e(>*0nHP<*s==GfnE&tw>!2%>MeoPTY_6=^Fs~4 z*6Lsw1{=T1hB9I}{QZ0or-_8gRN%mt+E14rep6ECprX8t*U)LLj+_ly$lj2JoUgt{ za7YLaA3BJc(_chU$w~P64X{@e+UeD+H@v(aJI<#L!S~e8l9Rn2ixz7!GHetik{*~m zWh#`BQP{tCk3-Mf-){h3NloLtp5Boz-BTTfVHi|aUPk(yWTekYZc`Q%G`Mr#)I$(_ zsGgn@m|I%d*9^m;wzigi?e5Nhu(`huH#axP<^ITAz7pdTCi1S|*#tlQ4jUGVg9rBE z^5s8KUtbTsb}e+IcZ-11QUc}9t%{HIIQXOd-bD`HQLCNuAn9VIHE4>80b}w4QfA*W}!?ILIdd6J5 zKKCuWGyg3F4U%K#j6_I%9>-{9ls%j05H$5BNHq0E?n9vp49%yC5Y49&izrkPqEJPM zLKPvJPZc5RsUk$73XDDGQ+Zt`1Ug=JKx{#m3CVpZR1u<3MTkNbAzqt-mDB zM?F=9oOa_`Q5U%p+L4ATo`h8D!?{mWQzK3k7b*eR{FBCMp{`lI!da&htOW}{Kx9-5 z=RWt$r_Q(aJT&}@kkjw`9jbT|2@_oBMzxE7{EodpI`_+@(?gX?eL5V1#K*az((o%n zG@mL$)Kf)BbfG>!MujckZ0_v0VKY&$PtD%&1;U1hwAq%kAq!G(36ACe%x*KATi_@2 zM&3_{0RTtxj7XaG;1B7jC@(|W>{l=(P>vyia=e=IGODYuu;nIG0TQQ9#6W);LKFd5 zxZrIxHa75VopttDpDNf;)tWd|RFtEts*>GiG#a2#1jA^^XSbCcFUIZLx1o%*ZQ;_U zjX9V!c`AN6`5TTJiqYKMjM*tkZ26kipJ47AZ{zIwOW3u0ABs$ccyFQ2*9DwHu%Rjx z!I1g-vH`ZXwxY;n#CwaDz;I8fMngWr!otzBXDHq)+Lq1gMSk8LB+p!H=-7;Lb^e3iIpNWk0R4`2Y zFYQ;aR%83NEf_a0!D?Nm!U8-sER;v998b`psx@&i{u0|1DQQNw7+hpEsAPfrO( zj11$f$H(V!_HT)&Cjhj0c@=0;83Y82fxIT3T+lsUtUgJw9FiF}~k( z5Q7E<*r|n%A?ThuV1OKfL4$GR$RYf4q6AUVDgbweWrHCf2E#E#MaRIy!-My^+}zwC z^Yz8N1@EG&suJbpWo+4JYgc3K+Ev)I?=V6`pXPloM-z0Y0H9XKVtv-<2n-BF-@bhT z0HIGmgX`C7uxIzK4nI%1w6?Y)HF+k^p8XZK%w|+oRpOHsndm2zAt-1F0AN|B7MnNa zV*i0WC=|hVX%iQhSf8ra#Nk>^4LkG#cb=xAjEupxni{AzwujoSTQ^LbJ_GN}e-i-% z{qVwbYBV-B;K#j((Y#r(|8aa%8BATDf+YT+W%pU7g1^>vMgb9;S zTi4QV`?ejHZwxq+XKeG@P*~FDb$3tCHuc5Fk4Jp`c#C!Q?AgoWxrI*fJ(WB>3RQ$C zR1u>2R1u<{Dnb;hz=(Q2)m3%L=lvF$3Q%Mk>+I9I6zZuWMTkNb7?+q&bv5+7Ut$r3Dnb;h2-)r8L-m!vaq8p=tL6RuOyysKz{=IbRQl-1QyVXS|mo8o?8WX2lXRVx$=RTegLI@#*5JCtc igb+dqA%qa(bpHa&>I7=U7CBh}0000 + + + + + + + +RTAB-Map: build-docs/corelib Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
corelib Directory Reference
+
+
+
+Directory dependency graph for corelib:
+
+
build-docs/corelib
+ + + + + +
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.map b/preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.map new file mode 100644 index 00000000..356ca947 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.md5 b/preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.md5 new file mode 100644 index 00000000..bef4b79b --- /dev/null +++ b/preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.md5 @@ -0,0 +1 @@ +d8136a09034a1fc045ac71ae7c656988 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.png b/preview/pr-1492/api/latest/dir_21f2edb779785a2efd6396476d03a0e2_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..acb7b61bb3e839987e398ed65313d72169ce9cad GIT binary patch literal 3343 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 dm + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/camera Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
camera Directory Reference
+
+
+
+Directory dependency graph for camera:
+
+
corelib/include/rtabmap/core/camera
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 CameraDepthAI.h
 
 CameraFreenect.h
 
 CameraFreenect2.h
 
 CameraImages.h
 
 CameraK4A.h
 
 CameraK4W2.h
 
 CameraMyntEye.h
 
 CameraOpenni.h
 
 CameraOpenNI2.h
 
 CameraOpenNICV.h
 
 CameraOrbbecSDK.h
 
 CameraRealSense.h
 
 CameraRealSense2.h
 
 CameraRGBDImages.h
 
 CameraSeerSense.h
 
 CameraStereoDC1394.h
 
 CameraStereoFlyCapture2.h
 
 CameraStereoImages.h
 
 CameraStereoTara.h
 
 CameraStereoVideo.h
 
 CameraStereoZed.h
 
 CameraStereoZedOC.h
 
 CameraVideo.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.map b/preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.map new file mode 100644 index 00000000..e681bad2 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.md5 b/preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.md5 new file mode 100644 index 00000000..f1415be5 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.md5 @@ -0,0 +1 @@ +b0a806d284557908beb7eee30a3d5e68 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.png b/preview/pr-1492/api/latest/dir_249903c078ca6be5fe8a43d73ba57f0e_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..0c441ecf744efbc8ce926055c6e11674597b542a GIT binary patch literal 1842 zcmV-22hI42P)W#agLED}n;T9onkV@x!YL za{Hs< zIWxJWq@=KZ~l)5J?3!5 z`*zQ9^}5+&Z(Qcv&hPH-;?l(qyXSPoshzIZ>kmwgOIU0#bm3Y}jSU>BJcPku7;$z! zuDl@Oeq+auBQP-dKhB&(LiaM0!>6!fWr5xIQI1IHDkPz+kc6&661oaG^^px6f6f%{ zU|AXxC23TZ>3di6>eY#V`4SGVVKqayUR z1^Lu}R>xo7eV@Aev!qT>qxxST1F-U`JUTl&`S{<*IQmg7CX)kH*!E*+XXZl4N=iCca51$M#hX8 zV+|Z2COXzS)-NJLYyJC$3#|Y=kQhTqkRKsIeoUMYKv!2MZEY9abQj8Us^H=Ybh=1x z-MU3bjeae&wdV6~@8r!YGHn*I&j#=Gzd(&vOI(&S5ID4+02@@u`{|4>>uixnr z5nASC&*Nw7*U)&jfzHnV^7g(r`LOCRQBl#%oS8{+(FVS_bP1Em$kyUb{NRUkm=qQ^ z==rke=J3qZt2uwJ3A6bIbtgXM$-Jf9ym?dMyK@h(4;|q3H{K-qffN?!F5tn`Bu;)- z$LvS40NDFh836$S%$_xa?`35W9v;qXukW>czCC}~OI%z$OBXLBK32z;;*IkBUGB=vMLOcJ`6aYa2{ zLiaKkJ4~E9b#kLK=aA4rdn8Iy{j_hiH){a`n2IFRpa4uk0Q6 z?=R!MzrJfTzp|p7T`&BGhNf0#%y@|0MLC>nYNWdMI7dIKp{lBq56TZ&j~_~}nLGQ_ z4COjJjmL&=G`3T9q=HvodxM0;Bmx5iS@BdpbF$~z9H-G}m^Lkyf`WBa9jUMxD_Fap z)ahvi1dQb;%kt>y>E^lTe@$?3Ffp-H$;x_^`jd6Q*S%&cE6RE4_j`zpjAGol@syPA zqNSyUhKA3r=Ulyd9S@~Hj7Fmw@^yF`kFBTM>m>v5w?hYc^pS_rhKCXopXNvGVo(CVqbY`1=Rg{F~YQ6)^N(GXwk64D~uZjmPfvfxTqzbot9KS)IR}&0C)3 zOk)dIuHE3d=XcZF+dJa*`g_eZHJiA4-E8wGJ3Ht0fdl%}xZ^sM;IX0G>m_6U%1mEh zALGZ5=l=V@!SPRyvFFv7onCLay=L5T9gd9p-=`1OOGc-Qq@;8gtMZozGyB0GiS|a)8_5YEIX>y)>K;`Fd5226kn6yvWa1m z&{ar6S0SmVtB~w;6_U`sjMURr$QAW;#h-?)t*NHAX0Fo9iUDM&tB_(lU7mG!EHreY zBI_s?x_tHOIXt$WF5E}{Pgfxc-OG&ndb+rq^m`X0BB860gsws^`<#BU!$jSQV}p)Q z4v!%1!SBj^H_aaor~AG4+qrXRhL4X=;b7wyi>0=-wDfl}-#zn%5JCtcgb+dqA%qY@ g2qA + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/optimizer Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
optimizer Directory Reference
+
+
+
+Directory dependency graph for optimizer:
+
+
corelib/include/rtabmap/core/optimizer
+ + + + +
+ + + + + + + + + + + + +

+Files

 OptimizerCeres.h
 
 OptimizerCVSBA.h
 
 OptimizerG2O.h
 
 OptimizerGTSAM.h
 
 OptimizerTORO.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.map b/preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.map new file mode 100644 index 00000000..9e949ff3 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.md5 b/preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.md5 new file mode 100644 index 00000000..5c49c583 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.md5 @@ -0,0 +1 @@ +6bd5bc10a172b33c510ab3dfb0576046 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.png b/preview/pr-1492/api/latest/dir_3587399b7774227770d0fd39c2d22121_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..5eca5d86c9d381ef542ca0c14273a7a05c2626b2 GIT binary patch literal 2369 zcmZ8jc{CJk7oY5gVX_Tb#!R6!WoOEaGL}M?A!99#*2_A=bR3RGS9Ae~M=P(nI0FFS+BVSDz8;+Y^V>Z$i_cP=tKO|*iID}7k*P5` zQ^Rn+Xpb2~OP@2A73PRKjCM}b*7SNN8x42-Iqt014$#Z2yl!wBYsel`W{LH<0Tj(* zv#|%fM!8x~LX+?5O5fzR*IEDFuUN2?y`i}?GvMz>QGi5(F< z)*3pY$~-+R$4qD>*HG*ylq8|KhO6rs}m&9&xPzidwlb+TfOeIGxF~X~7o;tqV0C#kH z>G}Js0P-p;`MOv)eHL4_c7v0n_wpDem1P)%1UBdZPjrDKL?_3iTHc-gg!o~&-Q#Zg zMU?6JEj)}FiPQ0OQn!KwnL4~IL`Azekb3eAcynO49OY-w!J7@0Rnnnnp@j^?Ga=L zFb||NN+@EW6}%oA%0&`YV1&-0fQ*rpe@0#vI-l)D8(}i9++UaB7L@Av!YTOlN<#O#T9U$HyMd zav#Zr`edjvbg7fBWZfvurr|y7)SK@k%0KwvdxsKW!W+hXd_*K8LoU)4&%z%Bu_x_o zwtT7Op~Q{1J#~$pGlCQp7V2pgc_uk1593jntG-!{5v~DRYh6Lswfja${-7ApcM1Om zwtO=A8lLgU5mxm3ca--9uJ6yW`$m_WuF+O(L}EA!T3V!RAXU;E7%6AvGw@3ed4mg! z)2!AcllV)&gz$e&dG!B{7UYL&b+l2qeWa$N(f4;~SkHptS0~lxQ0m^_l1T&^pSyQ; zrmjT@2{Q=U46$Dj$aJXt zMIhsVhmSA$2~^@`YG}9MyUwOXP->Y$4|9JRoB(VRnd_`)cy$1YzsL--*sIU6SN}g|6=5)}89r1J~;xSG@8R>awx> znwO8+*7p|^f7WwIZJ=uoj;zFm|Jf8yR#RtKxg|NMs7MPi1dB5U+D7|%0cN(gECA7Y z=d<5)ImDJ|OCuqfL}FjJ-&^@VajuUhCP6l~enX?9Y^87P86U_BXR;caH`k%Fh3Nv^ zvZiaCfW^h?TA#@#%gFduQ(uG8ILH(wUU^eE6WPL$UbrrCCr|S?qxIF94vwpMy4V z$?HXFX=(SzS~8i}|AAKPwj^mT<#JfU`#Jo&Pz1t8D0U_vqpHq$bg=RnEFclHFz|e5 z{KA${ov{c28F1?O{{H^znqOzI1HZMk^(}gf4lqoM`w#E44h*mG_zdY~29g*mA}gy< zPgKaNysWQ(5%Gbuj~?4(=iYY@6>JtYxaY4)7JqoS14AN_@Y`d&$ceSr^6nSr+2iuO zzqg?Mw9p2g4KRSBnhGUKr#o}|I1N>LiPEcsE5*+?m8eX$eYGM2iPsp}A}ma<^u) zNXA~!jM;>eZr1*%e~mdz&CktCD+B?*j--2CKAV`em>eQ9h7;MZFdG0PK`x_J#_0Fn zH*yl|obf9gjV~8UJkdPZOPf#syTcvjd&BmLnRhflw{TsX{bqAmpx9Dun@Cnpa_>8a zrquO-@JZDc*X|&q;d5&cJG-yV1nTf`jSfO2Xx{`M5U}aT7f1VIqxp#bW$ph4 ejemviKO&}m(r95L#YpB%1TfGu(XGVXiv9;c268$8 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51.html b/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51.html new file mode 100644 index 00000000..287c4909 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51.html @@ -0,0 +1,105 @@ + + + + + + + + +RTAB-Map: build-docs/corelib/src/include/rtabmap Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap Directory Reference
+
+
+
+Directory dependency graph for rtabmap:
+
+
build-docs/corelib/src/include/rtabmap
+ + + + + +
+ + + + +

+Directories

 core
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.map b/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.map new file mode 100644 index 00000000..c26f8bbc --- /dev/null +++ b/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.md5 b/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.md5 new file mode 100644 index 00000000..a007cb50 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.md5 @@ -0,0 +1 @@ +b68310e898efc701dd945702770af396 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.png b/preview/pr-1492/api/latest/dir_449b2e54cbad5b668a24993c3878cc51_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..529270656a3b5cc4b8e770481c9c5dd028c7b1d9 GIT binary patch literal 3226 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 NfU$uoybR_P@juz>6*2$- literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec.html b/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec.html new file mode 100644 index 00000000..70b51f99 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec.html @@ -0,0 +1,99 @@ + + + + + + + + +RTAB-Map: build-docs/corelib/src/include Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
include Directory Reference
+
+
+
+Directory dependency graph for include:
+
+
build-docs/corelib/src/include
+ + + + + +
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.map b/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.map new file mode 100644 index 00000000..1f8ed0ec --- /dev/null +++ b/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.md5 b/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.md5 new file mode 100644 index 00000000..b993993f --- /dev/null +++ b/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.md5 @@ -0,0 +1 @@ +5f9f2b5bef9458a46321b7fae81f8d6d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.png b/preview/pr-1492/api/latest/dir_55226059184c2c5c345e42665cf98aec_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4a00959f28493e636d6e17eff7b033db03816a GIT binary patch literal 3223 zcmaJ^XH-+m7CuPtBuMX7r7I8+6fY7&lOjYwkS38(1jJB6D4`==35XOyP$?n^0z$yh zr3xZaLyLh6k&cFPRp5p7?vMM{dh52}+5iCqJi?Nm)p><5R&5WSH@yYXyP=*5lj%y}ReK@*cV=mMlzAMhO9WsSro@RhU zI^wCXo-{)HXZ3IQH!s;E5A0cbX9|bGt!2)bZxNJB=-vF{;-0XQGuJPi z{n!rZ^hv64ppK1UtUPymZgOp{s3M2`4bUqE7g4P!K>A-=v)PNvXlWUlBHPOGuR|8H z;FmBMtlAyBhdh4#%gE5s+_T!(tez_0hMje%)*+sFEr(rNy34&hi6Nm_9xPaORZK_-PrCMV ztJ#75dj86vbD+y%yGPdf=j+)T9IC`6ar|ED44}E*`FT2n#4AOwh6FGDrmaiJGjyggpXL|+6hvA}67sju54|Y_JbU{VTs;h#dMC%^R($yN+a^n>*Eu#e6}JH& z-p|T?%!C+vP@UKFXe`?(UxEX$w>h1bm4y)1$xB6Hm&ow}s`^Ulz9Y-M60KdEmyZoh zrh}%4)3?{lvF%^Ju=nCDzm9xfY`Tx{tsvha<%efXjQPUU_MIg}k zq>4?Jn?sk*Z2$Pd40QL3MdjuSO@y~{EiW$vQ8y|lSA&MA2Wn%d)ZECjw+I+M8|Qo= z+cbV;L?7)x9NvV-dl3UyXK()48jO$M=BAXeYOto*CN4-nI;-ZK4*8Sq?7)>QAL0AtSgV(SVj0qz}r%^}rE7xHP+gTq%<@8Y*_ ze^w3gyr37Ez$Q8Aw&~~IO4kk9d{$k}H9kJzF_R&x$)u3YX2zdr;Ovk*nh92N{7JW9 zBSQD`EnBkBB$KB)lVuib`wJ6X0A!J)lWEuJ4N3A=b5_P1$X)MugxFY_y%g?}rg9c~ z<~Y~x8nwW^o#>XtL~%Rw40bcsq*NA~DF^*GgwoM&C%LdY28G4Z%&9Jnx3qWMNoxGh z{K>$C4X+T0W>`7aD*mzl^I&7rG6Grr{{1xx8<0@LNVHo<1Q#LBA)I7XU~Dqc3x~p# z16@1ai((TOpr@XX7dE#RHv1bNCvNh#dR9Pez_|t5J9-G@9X+_C)0mA9-|A1ysu630 z-noWNZ(#_>%6MJMF4z;X2;qd@w z@j_Mxvr(oaR#(O1QlB+R_e7fpy!Iz?YeMjXM?!Iqt2Ow8BPW630vIOZee5Td;2dLO za#{q#h)_b8q@JYqiC_9DCbEou{llZ)snq%}XH``vKPRV(7(^7^LG>&$EEKH9sl?d( zPp13Y3moR!y1&;&Ve(3gR(R8pX6NCaMIAifowP545t2{bFN=)whrr0U z9A?mWATXOU^WK>FWQB@v0b zoImR|kcUr(hP+-KVGf+`os$T~U$m-#_YE{Zct2Yp|0_EuXYp>2(Ae0lXYhK#y3%QW zQ{hWF!9PRbaJZ-V^!&yf~~XWv!1aD{vt zKHGPhTPq`7ONI4O7n zl2;pPc`@$z?(r#$jX6oeeOBHw<#v>NndfpqaDdTuH*wLYP639QY5o4n9n>WR9IAhBH) zuHJ~0&#DV87;}d}*2*^iuHkvmMS(B1n0`2QT^$gMI7J6E`ptE(j_e%;wN;h|oKvAMavCq)t( z@t)(u2g5$?B2FX{3AeSC{&RA%D(}pN+vjx97}|k~uy=5{-Md%CQgp?rF2WGbaGH&A z*yUqvTADH&yPTj78tCj~dT#0RrHx|3lehq=c}{7YKa+UT{0dCVyNCJN(H5=xeS-s@ zHHWz%)lS-P03({(3`hEedtX1Y4(*K~jk*Q~gaMwZDy@%0L+9^N*Z}~ALLD&b(c#yV zEmlq^OBp0~_4Wz?q~*=@_Ggl(O=%*2J3wiWgZ)jLYUQRDj%mInc@|u_=5r3m$25Mp6Va#RxGwVl_ z3bGPO@nwyw#OWz=bIDcSQp~$xE>4LVT@oxPdpV#bc%N(B&||r#ralIb$1h)0S63ga z@D9=`vzj78!aq0E)coP=t32kdS#4)qLP#;I?5)Nwytb_@hAVtsT6#S#4^ARcDCN_U z8>=_EliVLs2Wy#p*EbyI&pkQS5%=?rl9G~@on2YzErpg;nSijJ@nNWTOA|d1d9eQz z7SWWPIOfCrT){m3|Ob1sb3{ia_K?UH@de28;uY6{}L zMOotb(BPBTOH+Nsg$j??Q7X~exJY5C!$Jn24`H2^)u%BNMrG+)np|k73T=7zSXGX5 zU%H4it!LYv!>r~6H3&L=r|uaztb&?C(OttGtks*&HTCtKwQEkV3FL+T&tIpZUqQ1vu+ensPkgmOk_{iKUw)hm7}DN8c- zn@xFTW!Luyd}%~3@kseD1OW6K8Y%F;kz3Nra!sj({!Z) zYh|ge(*i;Jb&iGJ3-|$@-FJLM{jq=V-rWpC#l}Bu;ZboBy4O+9g>8_A?QhKP#Rkkf z*9a@zPzG~HGHY@BE4lnqrbQ;dptom2e6El(>FWF@{b+l8k1i@Pj~8$bb$6>n4zyx?C#N*dssr*6#|fM4s41lcWb3GZ}JbGTWU8Ii%HPCIB7W zr`9cTi7hl&l;$VWZ+x9SL7qs8W(u^iR2~fm@g?V#USW7|NhMlp=1>lKev!gh$FU}z z`Rr{I!Cvxi(*-+%f06T9#73KOS9e?gy3OAv+hKfpU;*oA!4D?8gZTKySMRbduWNx0 zlZqiVrSm#GUIsPDHuDcuydq5*!GfC=f7gf|G|kVIJ`w&@mDP&0J?L~Ty(0&KK^lh$ zEDjC|>WUiCPjF7?-?=ZsU}vXgpc_hCVYyCsEw=B&O(7*t! zxBeInG@b?;dhoZjQw~w9l!l_!FjMK+f#HF%wQvk~kR$$wf16dm-^FR zQ>f>8LA8Z>eGh61X{9I{`~RvI*xILx>;Z+PWrQYrc(6rgeM2no+YT}`*LwQ5`S^6v z;mm!kqM~BeX4i|Lax;XrYA~INhea9}=|d jxnuDb`Y(-Yb;RvNk?#?e(1@qqGyoGr3uyIK*O>nRcWw-& literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441.html b/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441.html new file mode 100644 index 00000000..c6e2270b --- /dev/null +++ b/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441.html @@ -0,0 +1,99 @@ + + + + + + + + +RTAB-Map: utilite/include Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
include Directory Reference
+
+
+
+Directory dependency graph for include:
+
+
utilite/include
+ + + + + +
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.map b/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.map new file mode 100644 index 00000000..bd2fdb4c --- /dev/null +++ b/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.md5 b/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.md5 new file mode 100644 index 00000000..b39c7191 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.md5 @@ -0,0 +1 @@ +802f27bae285a9a5c0559309e4d2d2fb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.png b/preview/pr-1492/api/latest/dir_5807fd1f37f21884b665e4f5337b2441_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..dbaf3dbf379d4e992909f398cd7386caa1215189 GIT binary patch literal 3327 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501.html b/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501.html new file mode 100644 index 00000000..3a065247 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501.html @@ -0,0 +1,106 @@ + + + + + + + + +RTAB-Map: build-docs/corelib/src/include/rtabmap/core Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
core Directory Reference
+
+
+
+Directory dependency graph for core:
+
+
build-docs/corelib/src/include/rtabmap/core
+ + + + +
+ + + + + + +

+Files

 rtabmap_core_export.h
 
 Version.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.map b/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.map new file mode 100644 index 00000000..cc4eaedc --- /dev/null +++ b/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.md5 b/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.md5 new file mode 100644 index 00000000..f21bd795 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.md5 @@ -0,0 +1 @@ +0631fc64391276580e58d01ecb0ad2eb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.png b/preview/pr-1492/api/latest/dir_623bdbaac6fe9b3f6f5de21b17f93501_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..0366c8e85dddc70405d7b3595330e104af398a98 GIT binary patch literal 2010 zcmV<02POE4P)>Pg z_7+PAnlCgt>~kP4g*F(D0v(O*&z-Hr;i3aB^(k?wH5oE*Zy)&j-tvPheNbou3)BQ* z>9Um$?*j%xp>c@I(AwJCppZ+^)MOU>P(;CHXrrCzp>=jzppZ*pGS!QHDBN)AmfvVJ zE*j`Lg}9&KGfg3vBKPfGn4LTWYLyJyAQb>0esT;Haw)P6n*abI8YL8RDby+%Qj(_Q z@S%fteH9iQKvF_HLWBMBQ06>b`2Rzz^)v7FojWiqaTmey`&GGAf=MI`{_hEt2$?58TUQFW+o)|DZl-WyV&W9YW7Q29gB;b z%zS)gZ0A4TWG3?^_Tk6-*|>4z*qO>2w~RU1SAFAuS$_V0{%-lV7`7rTEPPOPJv}{< zmY#vsKmP?^fAvM*e)KsAkBEd)rNV35U&rwuf57?bbGGu$`W$F9LGTXFMa=%S*q zigL=cGZQP@>{Yxm(8^$b}{|%F9nZKj;Si5GAzWkPwIEj4^C`^(9Q38jC=G zUnt~K6crZO-Qxc~c$L3DCQR_^Q%9*(+Wz+R91o>Z)u;XV@#Asz>Q%RnDFjhM8#Cs& z#RZAP{tylp9Kic~@{qUZL)4m@(bC$DwDb&I@9F7NufD#{_V?vWm(bPK35_Pmsbdmj zOlOIH%P*BqfRB$1r^`-(v0raQJ3B4#@bG|4CPQy;FFwux7+-yP#I9{l_7>FE*5LBx z%h<4f4W`eSiO7jMr;bC6F`XrPXaJx$ZpHd_&q3wqg>1tn%wLd+#H3`TrX(On7lxw3 z|KN^0=h(H&eDGmB^3VcIn;Hv?#e%%u`%NIOoYimP9 zs2Zm$s$IGqT9;;wMx)dJ`w=nI$k0$|0;Bab0r~p+qNTOld4&hlYJq;UAS09}{}WVHX`U2?~XB;EHh1dYa&&?Rf2Fp@$rH zYuCSsGA0D$RWXJnpJenB+Sj=_X|O1tA4@30&#A_L<>!!P!9T% zGIEI%8eJYaMElb?L^F*;6q>+jJ&i-Oo;FHx5n4w_J6_nh4)K#?5D}_I)|zL~)zt~$ z*F9n@pID0Mi6MyAY4OyPPvFXxE4H?&DGAt`qsM*s-VJS#3j6<^kIqgDUf8$}Q{ti! zu2tjV2j`=q!6eq{4H*}qJ-Ko@%1)Nzqfb6VX;~GfOpV8}?~VchmOZu@?d|P2`u%Zy z^KA*t=0>buwX9G35BBcHrY+g1H8o@Yf<;)pYB_4oSEHcl3zVHX3!N?sk1ozcZ*Q*{ zr#EDxJzNh~V`Br394^F9C(02X5eWcT`q**+KwVueii?k-w5$?pbszxX)onYFk~AF` zo0}1!Rs#T5tXPei35fuJrY19r3JY+ivc}fNko__uLIY7*S%KKtIH6B*$VU8nn#oj; zv17*~EIh)l%xrFihldBW+ECkj5#f=xGOOU=-}ZQ0x8L3x69I)>3WZz>m7fExXP;h$vsIO7Z*Rk%-S6V_BZm+c7LMfP6l_?x1{a%~VKz5n z$;=-n=sGKoYlAWFX scWO@vA%qY@2qA + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/lidar Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
lidar Directory Reference
+
+
+
+Directory dependency graph for lidar:
+
+
corelib/include/rtabmap/core/lidar
+ + + + +
+ + + + +

+Files

 LidarVLP16.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.map b/preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.map new file mode 100644 index 00000000..ded4f537 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.md5 b/preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.md5 new file mode 100644 index 00000000..7a939e7a --- /dev/null +++ b/preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.md5 @@ -0,0 +1 @@ +631ebd2bf32a26b9869a33bfdf89be02 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.png b/preview/pr-1492/api/latest/dir_65d456be8cef94751a4d1b4df815a100_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..6035c7b4587778a38e8a77ae6386e3b57ce716f2 GIT binary patch literal 1692 zcmV;N24ne&P)d}Wlh%I`hlS&CTKDG!FIkkN9Pdj?x}= z>gs9{9kmM4QLB1v&&5SH@CPt}m>l9H5(yj~rKrAJ)oa<&OH0IW*?^jw`*4&>5gxG$vu68>bx3*<^aqUNxO^9xTd=V&$+PP9{UBX8^|WDj zh$G!7AjVNZjH7@UM*%U80%9Bm#5iUzmJSw!_I?oQMgcL70%9Bm#5f9waTE~aC?Lj} z38~C+Tz*SSvxm%e(m?Icpi*2^0MGZQOerlb)jA1G8|p!f6Xlk7Rb>U9JZToADbb7` zZ3|a7cZ0VhNoS+`0P$)v^eo)^Q2L!^#+Dh+d;sAzw&<^=l#H@LHW`i~}r%y%U zS?w>LFg45uq)DH^1_NfF&DOMCzRTFVU=$|PgN7=T2}pB@d-?Juk`m+L>g)*5$ugv+ z?tn_A;>&Xn?1PQ96>O}n;3jjz+L+a7Yir}ndz;6~B9jS7)1Is}T)Ox>3eW$BlCp9< zZfwN;d)0jTSFxM;Nm`dmui{zTn|Va9Y0hJ1k;w-1(~rlIn6wS=UcaKA}BBbE)(owV{HXL-x+9bYC>067r)Mb=dl_>aZ!QJ7Xs>Hl08Tw zkzmZ2vHW`z0HCAeZ!|SG@tTKK;$A6!iF7jn*J(+9|8Y(Ct#!*0wqx(SyG^ph|!Fw#5yLLhHqd(r{UB5AOoWLK|=rq#5f9w zaTE~aC?LjBK#Vi^iK?#0vUI)D+0^R`B`6??L~=DEJWS9(iq&<$#MJA{ + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/impl Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
impl Directory Reference
+
+
+
+Directory dependency graph for impl:
+
+
corelib/include/rtabmap/core/impl
+ + + + + + + +
+ + + + + + + + + + +

+Files

 LocalMapMaker.hpp
 
 util3d.hpp
 
 util3d_mapping.hpp
 
 util3d_surface.hpp
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.map b/preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.map new file mode 100644 index 00000000..0d5986b1 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.md5 b/preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.md5 new file mode 100644 index 00000000..18a9b81f --- /dev/null +++ b/preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.md5 @@ -0,0 +1 @@ +7aed099ac606a338064ef9bb6d63b322 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.png b/preview/pr-1492/api/latest/dir_67ee77bab1d00e5527b3ba66cff8b822_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef1a0cfea054de40ef7c600c8adff9e85958fe2 GIT binary patch literal 3066 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 + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/Posix Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Posix Directory Reference
+
+
+
+Directory dependency graph for Posix:
+
+
utilite/include/rtabmap/utilite/Posix
+ + + + +
+ + + + +

+Files

 UThreadC.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.map b/preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.map new file mode 100644 index 00000000..ba1e67bf --- /dev/null +++ b/preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.md5 b/preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.md5 new file mode 100644 index 00000000..0c22461e --- /dev/null +++ b/preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.md5 @@ -0,0 +1 @@ +d891851e24803b50cfa771f9a4f716f9 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.png b/preview/pr-1492/api/latest/dir_6fc574af21c01044bbfc485d931ba1b6_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc7a7061431c73ed58c8fd04cf5eb199e94f476 GIT binary patch literal 1824 zcmYjS2{ap68;vSK8(K`qZj@m7mGHH* zu$jOI1ijRivX%qG?w%5`c4W;nGPoaD<;l0yrs`tivFSb z^1FP)g%1i#*!H#x{g;edK<%~QYFG1(SswJGA9qO{mV)yQ@7F#fLqkI!IBwhyvAl;X zh5*y#CnB&Av?LD$#8mu_6=GL`@D$4RTn#SR6dP-tVR@Mq^St4Y$w|SGn&q`#fE(B? z{1iTg`7006vsOu6JL!nf=_#6cBbOIynklG=Dt3!FV=BG zn0ITHpY7H3At}_>m@IBY(qS7PNN=AHBrualp#6~%Lt(_Hf7m=Mnn-5!&4jF{G1jRf zRkT}N3nv4hk#c--w=G^qjW39Jv@%@$|3yDAF25fr8c{txf^KWGt0iI0_xdfb?mC>M zzX@wEx#nb|bo)zB^@j321Od5ELqv{b*kG8Z@VJz8$q3pau{xnzp}2RWIH*W0$SB-( ze-Hys3?dpU&RgC7jxBD+{jN_3!&O$fT<8o6)U<=fSDD7kLJ6$kPl{&Ye=@NGm~jMSodC1G4PoRtDVUJ*FMCdsRkxBaUVmojovMpX>i@omu~g zbLqAckAoWb?RXQ&ny|KZ9TAM|EfEtFho1dX82##1cfI!<3gx^e$J=srB$hXGyf60I z>-aEEXr+DS2CC9;G~Hb5E(gtTDkrDL6L}Ax+1FQDS#w$=L<0~;Bj+bdhr0%bs07R- zl0@Z`JRjWo(9zKe)qm35Q@%aHtznI8xM$f;d~_tCTFh^vOuWr4MrBa#Em1;bXAJ?; z%)JE?d$Q3(XECl9V2 zk3#OZPoHaQcj-2mb%d~k7lz%DxE=AKp}%bGE-ElQ`TqFnv&$o`w5YB*Q~q{na?9Q~ zKORZ)ve8q`t7tSD;f@=x3%OkT#zF90*o?V|sC+qV-CITV=Nz4bUexT)@aSmQn$vLp z`52SN$3dd3W!ZOkF!u+6?+Sz^RK*pG=!RR-D%$ zjXzDQ#NW?cJYT)RdDlyZ_sfhbTr1*i*xGfJyteP_NldCg?~lvyeVqhSj`TgnI~J#* zrFkZ5kCq>4|-nzb|aiHTCo5{*x(-@N{pwftbU+~Fk*=(OXNOeB^D#y z(>M2gx^^}jiumL>$-lpeLWCjD(yxvOk1hrwvgY`yc7 + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/stereo Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stereo Directory Reference
+
+
+
+Directory dependency graph for stereo:
+
+
corelib/include/rtabmap/core/stereo
+ + + + +
+ + + + + + + + +

+Files

 StereoBM.h
 
 stereoRectifyFisheye.h
 
 StereoSGBM.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.map b/preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.map new file mode 100644 index 00000000..6eae75e0 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.md5 b/preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.md5 new file mode 100644 index 00000000..cd325707 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.md5 @@ -0,0 +1 @@ +baf663b8057bfb3799d78984e09c8820 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.png b/preview/pr-1492/api/latest/dir_7b07a0fe62d0fac6129c48e2cb6c7633_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..962858c15c1690f32223f98dbeaff616ba1af859 GIT binary patch literal 1761 zcmV<71|Io|P)w~&E z{W3V?(MUC!OnLoc;-)$aRk*{mP<7t?D8h4%jScMka%YMs>yS`Y=BHXKB_&6n@MIkl zss>4@8YH1=kc6s19$lxJ&E{#YuG56_I^;-gXsBn!@}(r*5>Irbfy~DjasK={0Dk@D z7v|1>h`4?c#Kjm{IDa;0&z`mS9ho+i=WrKb94oEBURY!iHg3g&1$W|&(F^uC_r>nUwhj>!owr%ug{#R1YkgXH2NTa^g;gg?ioNs zLp@bhXRgs+Tw5NUD76QpF_KG{E>UTzxNM|`g@x1H+)PbPwLQ2BOS!$x?z(>uP!SPE zbUGa;Pgm2kXU}WD0}AMHBQ-ocf;-bE@YtjCC_7n7ef=N2vpJVtJ9p5hPZX)CX)Ig% zI6v3bVYSw}9UU%I zfb|=4Nf=pDu-VUlKE5(l98%G z5~|90V?MRRhB|swD(}6!rM*9f*M)?J@zAWfPU}6o(qTgtj;T7-4eMVc>6UoHL-b^% z-$C)wA^>L3n#s|kLKZEYi$2JoabrdRxUAjaPQ3?LH6+wXwV{@uKE=wc6|CQ|iE@h- zbIuw*{^$b$-pbuV;-Dm6eSHJJ{ocgxJzoQ~sdmHF)_Z764GFbT?UUqwojcRHa~Hbb z(4DT=Ur+MjAtVnT;&A!eS}R|CzP(lLhU`_ViH;1RwDh>WcEg-G3m7u=_BQqD)-8bi z{DTx0m)hH(e_<_YDarg?SLg6S=JuxA`P9hBKD?Q`8B^9Xj2@NBV~@_Gq@>v4@@=i% za5eQF+FCNML8EQUc_d*#GijQ*?;STgF`r0@*~a7&47Eg8(j5qr-p>5 zH2r*P>agMT=n=%UsgsG03}M}CuaNupHUa_y0a&~wlRbNO6K1&4e)j85?FLtU+^Heq z32!`~s@lVEmo8mcyd;ywORhXuJoNSyzCB#j>b=0g?wE7dV9r@{#XbiPeRtV=uKL^* z9L$>=-?_?9-@a5kQib~@R1K0)HAv=DHAqIP21%$Y4T3-S+AkUw7O z&H5A>sT!o%NcFw{`d+SAuilDmM`}K(Qajdskmpm?Nq$o`NJ3Q^P0y$LDyjD?u1G@F zAPH52yms^9r&=q8M-Dq|4+#w?>DIy0-$nn%#s-JWw3Wy6ssFsr%F0U7>2wZ@Pn;?% zEf_O;#LJG_rN8t3LI@#*5JCtcgb+dqA%qY@2*v#c(%dNd9}nr<00000NkvXXu0mjf D#v^Zg literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/dir_7c77c469ef71e5893c1567cf621a9d83.html b/preview/pr-1492/api/latest/dir_7c77c469ef71e5893c1567cf621a9d83.html new file mode 100644 index 00000000..97be115d --- /dev/null +++ b/preview/pr-1492/api/latest/dir_7c77c469ef71e5893c1567cf621a9d83.html @@ -0,0 +1,89 @@ + + + + + + + + +RTAB-Map: utilite Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
utilite Directory Reference
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2.html b/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2.html new file mode 100644 index 00000000..21e3b254 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2.html @@ -0,0 +1,161 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
utilite Directory Reference
+
+
+
+Directory dependency graph for utilite:
+
+
utilite/include/rtabmap/utilite
+ + + + + + +
+ + + + + + +

+Directories

 Posix
 
 Win32
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 UConversion.h
 Some conversion functions.
 
 UDestroyer.h
 
 UDirectory.h
 
 UEvent.h
 
 UEventsHandler.h
 
 UEventsManager.h
 
 UEventsSender.h
 
 UException.h
 
 UFile.h
 
 ULogger.h
 ULogger class and convenient macros.
 
 UMath.h
 Basic mathematics functions.
 
 UMutex.h
 
 UObjDeletionThread.h
 
 UProcessInfo.h
 UProcessInfo class for getting process information.
 
 USemaphore.h
 
 UStl.h
 Wrappers of STL for convenient functions.
 
 UThread.h
 
 UThreadC.h
 
 UThreadNode.h
 
 UtiLite.h
 
 UTimer.h
 
 UVariant.h
 UVariant class for storing and converting between different data types.
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.map b/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.map new file mode 100644 index 00000000..2c190196 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.md5 b/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.md5 new file mode 100644 index 00000000..6f2842e2 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.md5 @@ -0,0 +1 @@ +be94ac6119fdea116f99e9f5f514efdf \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.png b/preview/pr-1492/api/latest/dir_85e098119c0e838040cd00f42e29c3c2_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..3451528816856ca7c7f31bd2181391ca655e7a28 GIT binary patch literal 4337 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 Nx>`n>b?S(y{{THV9GU + + + + + + + +RTAB-Map: corelib/include/rtabmap/core Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
core Directory Reference
+
+
+
+Directory dependency graph for core:
+
+
corelib/include/rtabmap/core
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +

+Directories

 camera
 
 clams
 
 global_map
 
 impl
 
 lidar
 
 odometry
 
 optimizer
 
 stereo
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 BayesFilter.h
 
 Camera.h
 
 CameraEvent.h
 
 CameraInfo.h
 
 CameraModel.h
 
 CameraRGB.h
 
 CameraRGBD.h
 
 CameraStereo.h
 
 CameraThread.h
 
 Compression.h
 
 DBDriver.h
 
 DBDriverSqlite3.h
 
 DBReader.h
 
 EnvSensor.h
 
 EpipolarGeometry.h
 
 Features2d.h
 
 FlannIndex.h
 
 GainCompensator.h
 
 GeodeticCoords.h
 
 GlobalDescriptor.h
 
 GlobalDescriptorExtractor.h
 
 GlobalMap.h
 
 GPS.h
 
 Graph.h
 
 Image.h
 
 IMU.h
 
 IMUFilter.h
 
 IMUThread.h
 
 Landmark.h
 
 LaserScan.h
 
 LASWriter.h
 
 Lidar.h
 
 Link.h
 
 LocalGrid.h
 
 LocalGridMaker.h
 
 MarkerDetector.h
 
 Memory.h
 
 OccupancyGrid.h
 
 OctoMap.h
 
 Odometry.h
 
 OdometryEvent.h
 
 OdometryInfo.h
 
 OdometryThread.h
 
 Optimizer.h
 
 Parameters.h
 
 ParamEvent.h
 
 ParticleFilter.h
 
 PDALWriter.h
 
 ProgressState.h
 
 PythonInterface.h
 
 Recovery.h
 
 Registration.h
 
 RegistrationIcp.h
 
 RegistrationInfo.h
 
 RegistrationVis.h
 
 Rtabmap.h
 
 RtabmapEvent.h
 
 RtabmapThread.h
 
 rvl_codec.h
 
 SensorCapture.h
 
 SensorCaptureInfo.h
 
 SensorCaptureThread.h
 
 SensorData.h
 
 SensorEvent.h
 
 Signature.h
 
 Statistics.h
 
 Stereo.h
 
 StereoCameraModel.h
 
 StereoDense.h
 
 Transform.h
 
 UserDataEvent.h
 
 util2d.h
 
 util3d.h
 
 util3d_correspondences.h
 
 util3d_features.h
 
 util3d_filtering.h
 
 util3d_mapping.h
 
 util3d_motion_estimation.h
 
 util3d_registration.h
 
 util3d_surface.h
 
 util3d_transforms.h
 
 VisualWord.h
 
 VWDictionary.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.map b/preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.map new file mode 100644 index 00000000..eb3c4635 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.md5 b/preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.md5 new file mode 100644 index 00000000..f27cf386 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.md5 @@ -0,0 +1 @@ +a666ade49b489d11bd349109bda74494 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.png b/preview/pr-1492/api/latest/dir_884419f21456e80aa47bc1d0c2ab0140_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..ebee19460753244ed38771eaf73e0893d59cab91 GIT binary patch literal 13895 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/dir_8c6d2b7fb0f1009468191a56b06a1387.html b/preview/pr-1492/api/latest/dir_8c6d2b7fb0f1009468191a56b06a1387.html new file mode 100644 index 00000000..90cac2b9 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_8c6d2b7fb0f1009468191a56b06a1387.html @@ -0,0 +1,89 @@ + + + + + + + + +RTAB-Map: build-docs Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
build-docs Directory Reference
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51.html b/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51.html new file mode 100644 index 00000000..913d232d --- /dev/null +++ b/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51.html @@ -0,0 +1,108 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/clams Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
clams Directory Reference
+
+
+
+Directory dependency graph for clams:
+
+
corelib/include/rtabmap/core/clams
+ + + + +
+ + + + + + + + +

+Files

 discrete_depth_distortion_model.h
 
 frame_projector.h
 
 slam_calibrator.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.map b/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.map new file mode 100644 index 00000000..957d4c3c --- /dev/null +++ b/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.md5 b/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.md5 new file mode 100644 index 00000000..3bef2203 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.md5 @@ -0,0 +1 @@ +ff62e57f7c7008ac2b73d17c23a370c0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.png b/preview/pr-1492/api/latest/dir_b3c8af46e4c1aa88d96b6d1863f8ab51_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..949bea3033db894f571aa9f3e9268e821d77a481 GIT binary patch literal 1967 zcmYjS2{ap67f!Xvga{g~JxB*dmFlQ9#!_i#Q2SOvER9wdik6hxiqNQ98njf?R%+K; z$66w!wnSS?iJdB97cx~%CjK-3Idk55_dEB#`_6gid*3}@vaJmg43Y)`008jC3l{b~ z4B_nnpa3tD?dh#N5b*gEX#wCKtQReBG64WVzl#>8j^TN$6A`vq{<4A_>y5OaxgLqC zUbXCp1SvlO@rCp!DGOp*;`l4aa$m-hUc7C}AZa}=E__6?fu<@s$7PU|Y*SE)1R&1i zVb9CDX(e4+)z6PLRq&Aw&C~0x`v@J*Oe_5zJ@VTqv!2c;Y6et%@Si|d=Tpv?0G-F1 z5ic;yQav>3D=Urm#lnRglJ?_^m=;f14#z+7zWaw25r%BE!h5WDYEG##0>6+G$&c z_zZlyU0F$>;@lF7hbBAwmQIt0!hj%9bXT$ie^Gg{WxRW;;oUWFTG>^gFjgd6GuxLw z8M-o6FIW)OI23^IaLc_w*TX#nTfeQX?o?MiZK|9(vtOAVw8ctOZLyEr>7gLp6?Lvi zEPTv^OKN!obboy_qwV4%EH#@5h84DrcJen+tI)ShfPu5(-aO!3N^9Secz1#8Q}9tT zIR&D9Jx36rpz;H#p>Zl*;SzbeJ$`0EInk`)P_E#aJ)a1?HkRgh**feuBcm1tCp=WoKRSl@$#)nO5@*Sz>x14MNuaYuLkC9?l~!b5N?}>~QuM2zT}4n(LJ5-~r&Fr6y0Wr~+GQ6x6pKO^ z(@ti_&uBg&^9U0W5&5vUpbFaB-k<<)H8&{8ilqy^n{Qd9QG4|trIdb^gc%*Xe`(K$ zJ82xwTva{h;&0%{Hz%wXo35*BB~R3fc)-&YC=*`vyc_OFKVf-*H9G%Rk^gJaCqs9v zES-+NU^>{oZYsKFHs%c_9Y}w9Ul9#iwUS4FWkmQFx&$$u56d_NXY}1YA}g1VjgogJ z_aSaeVxrajeAR4HP!egurtK{Vh;iQ*km(io2qi(^&5C+iR&!(&*~p#U;9{@X+ka|! zPV2_zTsImILb5xqJJ45xb68rvytmDZRgdQ~C77Z+yX4kZnLJ+tI%D_WvB7j)zj34U zThm=1j~J8JKA66Ixwz%!k~@r>Q+520l+=0RSJ+OUohUj#5O6k;xf$rJsAME8r1Y(w z>VOxkLh~dB+p;OJuxQEeQ-VX`*bk^*oSK#0RWz(Zsde0z*t6{$H zuJ7DsF*jEOjm!-ejYc&H#Qq+WHJ_TeYq#ESc+DloyO#oJqYG*3yh9Xt+0m zaXnfPGrf7#+t>HuFGp42*a)lapX1{c+@;6xbLXgwyT?h*_{UO}ZDV5s+Z}M?2ve-Z zNI?F%r)aW8j?Ot~XXkO@)l;W5&=`!MkkFsu;aD`aqD9&3RdI0D^WqUE(SC@`z=YS2 zc{PTLgy*pe4ulxWO#0 zr`+92J?kmj9N3_s8yQ2hM90HJG!4grY90v zr47c^meWH0YNjNIUMJJFOE90%muZW0Y1@mD%Jl;w%4xR$_XRjq8EI>ri9EQxPi*g( z8G(J@-nq~5)uvdFqYH%IbK_)24DUyePyJv+Uup64wd + + + + + + + +RTAB-Map: build-docs/corelib/src Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
src Directory Reference
+
+
+
+Directory dependency graph for src:
+
+
build-docs/corelib/src
+ + + + + +
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.map b/preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.map new file mode 100644 index 00000000..95c338c4 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.md5 b/preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.md5 new file mode 100644 index 00000000..03837467 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.md5 @@ -0,0 +1 @@ +b805bb00cab149d795ae143589b1f950 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.png b/preview/pr-1492/api/latest/dir_ca74fa0ef74cdae9a74fcd374d99516a_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..f1a6cc8b685b46ad981f8ef401a7418c8e3f00c2 GIT binary patch literal 3114 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab.html b/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab.html new file mode 100644 index 00000000..b474577e --- /dev/null +++ b/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab.html @@ -0,0 +1,105 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap Directory Reference
+
+
+
+Directory dependency graph for rtabmap:
+
+
utilite/include/rtabmap
+ + + + + +
+ + + + +

+Directories

 utilite
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.map b/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.map new file mode 100644 index 00000000..b1894bf7 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.md5 b/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.md5 new file mode 100644 index 00000000..160401df --- /dev/null +++ b/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.md5 @@ -0,0 +1 @@ +6568d3dbed3f29eee5c6105c2a992685 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.png b/preview/pr-1492/api/latest/dir_d5b9494e18cb3ada3ef427a965bb34ab_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..8330bf9aa761abed06b46432a34c5cd7def80d30 GIT binary patch literal 3267 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 + + + + + + + +RTAB-Map: corelib/include Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
include Directory Reference
+
+
+
+Directory dependency graph for include:
+
+
corelib/include
+ + + + + + + + +
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.map b/preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.map new file mode 100644 index 00000000..9462ad2b --- /dev/null +++ b/preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.md5 b/preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.md5 new file mode 100644 index 00000000..276c0a8f --- /dev/null +++ b/preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.md5 @@ -0,0 +1 @@ +11aa81ee325a7beb262f83c26502c7f6 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.png b/preview/pr-1492/api/latest/dir_e996b11fd4b3a747423759b16a8ba4a6_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..215d623f8f08d71499f4b5205da1c3403eedc1e0 GIT binary patch literal 4936 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 + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/global_map Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
global_map Directory Reference
+
+
+
+Directory dependency graph for global_map:
+
+
corelib/include/rtabmap/core/global_map
+ + + + +
+ + + + + + + + + + +

+Files

 CloudMap.h
 
 GridMap.h
 
 OccupancyGrid.h
 
 OctoMap.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.map b/preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.map new file mode 100644 index 00000000..6f6f72f8 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.md5 b/preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.md5 new file mode 100644 index 00000000..3a98149a --- /dev/null +++ b/preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.md5 @@ -0,0 +1 @@ +c514a86f3c5f8a59fa04cff6e11b5d5d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.png b/preview/pr-1492/api/latest/dir_ee30f6c257683889c7b4a28a79d90ef3_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..d438b25c6f8f3294d2cfb88a280f3e11bb21d420 GIT binary patch literal 2216 zcmZuzcQhN`9#7SZ@l(`Rqd$Akh|$v6)rb+Rw$^Tisy(9UQ`*Q+YM1z#jT+SwO2w#M z)TTwO)+*v5L6vyvdHw76-nr-A?>YC}d(QWB?q}RoD@#*$7C{yO0Kjf;W@JOFxwPrW z%=l}^N*hcoj9wO|Mu78Q<8Q*t=Kuh+tGUq)cx1s2G0H0Q=t|$-5wBoRsTTwE9ep$W z5?VsUO2`6lUB$~#^0#A6Qb{Ubim?jGi_ZEII$+!}Z~`}W3564%Ei*B`HAzON<;z7T zLIg)SftUHacSO@)@Xvd9ohWeZ#|?v%Mh$;Wam(28brae{S5-CEw|TYTRBkuxuOv1=&q* zKnrtD6dleDEI~O+yxX8J2HXlPx!SiL!@gIwx0T0_mk^#xW9e_n+@zDbEO~)D4U+&g zHt$F-QHUO8f$FDl);Md$=sr~&_j&DcL?Yf9Tx$Xf>o9BinnI-0OK}^501AcDn$ei} z=mH@mV&_JGvTA|;c~)_djTfCdQq+8CJMTF9J!ezo^=JZC5lQT>6TcV|_CPGsNUR8n zoq^QbqCrA+P(=Gc{?J4F^4H6;%XVwZjzevP7(l-Z0YemR9eF=j->>grW?+DndVHFV zXs^+jJoh_yi|5h9oYphkttED>K@oe?y_9>g2g;Y-lzcirfGaG4r40>bDnwC>7gTupz*KUte84JC+_zYZ!1YGb!!t>B+L-V-<}e z<@pxKw1iIuR~HvQT3NYTQ0OWmchq&*7&NkCZ#-;x?q=ayzI_*73uR>Uuz$!VKjHT0 z?q};)RaO1hqI30Y+S}zMy#g)^Y$Ae5^8%##X2Ud)K*C}xc-Akb{*IfJanmzfX_%F> zbJwZ`pZS>7^N4MnW<}}k`}@2=m57Ddd-v{{J#jbkHwPxAut|pQFalOqxc&Y7JZ>9- zn-GgW9UV7fa|;dEKk2K_E)?YE_%F6y+k3QY6KCI#XzaMvXLR#W+G!qn8%8wpR<>sTfFDl9W*IyznX}ZhI$;u<1C&hW9Q0_Hwp*pf%Wo(EZ8qE=JLfTVq zc5?faHJI}(Tg%sd>g?xR0p4R)%OXXwIEqfTvh&A`t`tC|H}z^)MTqGGn3dBWvCU(6 zZ&R8H$XW!UHbXENe0QIc$4)+5F`H&=W1qc)ZR1j;Hp1AxZX-f6e!zx~?qs6ef-if^&Ghxm!KU=NN@i62zb{c$0zrj3 zVLsn*e0h43m_pq~&49syfxI#Yys%#G#P%LqSTjH5E7COOk1MGKI#&p8BZ-gSM3VQr z7Z$MQ#mnE;&wplwp(qH_@l|Fiw}g|ht@2guaOY}r#HcWJtux+$_E)|IjEpa4ACMmp~D&`T;&f@?^SP;!58(f zzaPzAq{*5`+SeE0RpP7Wu_R_m-D2}@dIippU`dE!XGi_^TZmzalsIvIM=^0vHSA1gq-!!KsJpAkV(M616;+C}#?dt(BH?}mYg?J?X E2b69()Bpeg literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691.html b/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691.html new file mode 100644 index 00000000..caaeaa60 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691.html @@ -0,0 +1,138 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/odometry Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
odometry Directory Reference
+
+
+
+Directory dependency graph for odometry:
+
+
corelib/include/rtabmap/core/odometry
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 OdometryCuVSLAM.h
 
 OdometryDVO.h
 
 OdometryF2F.h
 
 OdometryF2M.h
 
 OdometryFLOAM.h
 
 OdometryFovis.h
 
 OdometryLIOSAM.h
 
 OdometryLOAM.h
 
 OdometryMono.h
 
 OdometryMSCKF.h
 
 OdometryOkvis.h
 
 OdometryOpen3D.h
 
 OdometryOpenVINS.h
 
 OdometryORBSLAM2.h
 
 OdometryORBSLAM3.h
 
 OdometryVINS.h
 
 OdometryVINSFusion.h
 
 OdometryViso2.h
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.map b/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.map new file mode 100644 index 00000000..427c936b --- /dev/null +++ b/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.md5 b/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.md5 new file mode 100644 index 00000000..e79c906f --- /dev/null +++ b/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.md5 @@ -0,0 +1 @@ +788f1de2c7b02830dd15dff0f5101162 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.png b/preview/pr-1492/api/latest/dir_fbc3350978c71aef49f2eeb1c9d88691_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..5b0ccc2fe140c23d7a92e6384a29bd323853bf9b GIT binary patch literal 2403 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 + + + + + + + +RTAB-Map: corelib/include/rtabmap Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
rtabmap Directory Reference
+
+
+
+Directory dependency graph for rtabmap:
+
+
corelib/include/rtabmap
+ + + + + + + + +
+ + + + +

+Directories

 core
 
+
+ + + + diff --git a/preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.map b/preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.map new file mode 100644 index 00000000..acfc0041 --- /dev/null +++ b/preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.md5 b/preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.md5 new file mode 100644 index 00000000..25c33a3b --- /dev/null +++ b/preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.md5 @@ -0,0 +1 @@ +45de911aa4175280c531ced901491927 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.png b/preview/pr-1492/api/latest/dir_ff01f7bc5399ccf9ff1cc91d1f45726a_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..993f3133dfbbf268e0cdaaccb73fab2384549012 GIT binary patch literal 4531 zcmZ`-byQSe*B-jNK^Pc7MMd-8l)7Y)S)}11srOW z&Tsg=@As|ukMBKq-F@!5Yp;FxI{TjeJkN=Js;x>v%1R0V04UVel%HYeHSAqVOnCdG zik84mgw~p>%7B~OE5D;O4FI6AS65ch_sQN}^flApxF$Lneoylbhshd)8`ko%wc#D- z>a#4*-ia}{?;BAm8d8;2kZLA@AFCf7U{$d5+yf}u} z(0?!w-wH+WsE2z>Ep8g@c`zB0ai?(CLzxYx_+w)BfIVtO)a2YLipKO%Z1{5wOts2@ zY;t7&)B6~p>{x*uh?}D?arcF3IjD{>zWaVej8tCmkZI$LxFded&U4vTGB^5q4-)rG zdD4DiT9Ypk(q#t(%!J{u1phl8UUKvkhct%E& zGCy}oBBGkQbs*Qo`5;cc(yqwrB+qcf^FR;uPdqw{z^l%_v-LvMJE>iPh{(pM=x8EF zep6DWguaPRmt6-fgb3Si4|o3Lr-BzZ%*vj>;YB&~NcUWQ(E!waZXs9K`aE${3i7CD z#9VHB3nusk(Z(`S)VKr$o1;}GZ^k9C8HgRbI5`ZXP+#8Z)-sDenA(}i&$o>4FU_jo z`gUJ^tWI@a)wGiFJdH>F;Dk!v&=#6-JZ;|~oc=Z|h*2^BF4C1!3 zN>E=bcX}X7Zy_jt;kwtZG9}IT>7l0UdFkotxk)ACCzXXVAO36z)5XcIiuxeKrT4z1 zF~()%p$|vE0oTrK2ifDtcKOq25xZk@dWP*MyGl`%{RNRE18O=w#hRJIfxqd~S;$L{ zM=@){s*-f&e9@M|>8tvNcYpoJ4ZXTJo;rRtCIEh7P?p)B7;TE|OCO|5$;*tUOkuBe zI`hxilMYbkPvnq=_qQo`FD|kN`>&|fzuI2s8-J>=AMvxpPrh(;^~{QUq`)S*JW%Tr zY%j*D6%>eDSFh6p;RN)kel39MZ<<1MKE-O5#Z-l0%?|PZ?gwGGGU=D2|1+;1q$nPg zKvEdoWVut=t(ar!!>o9o5l5w{akb>$8i(+K2Soz8ds(4x4?o{}V*?m|v_1>Nk;-vN z<_)}!XO*V2{IaNYrFltk&iX#6l8nNUKu4#>6xe^)YM~YOkn#^(MR{VDn2nT_=bkBg z%`Ho#h?>!y#kI=L>BL?+A?dxC%_m+Z+F51jx%$q6)%>QBDSaOsnq{9C-qf-{XA5!~3Dff7_o$s{)lBz{ zo5x>X%Cu_MJ`9j63>Rfh03R&MVe9Okxq5IK041`+*7&`gECwCOL~LP^5zIC2 z$|MAWK&ZGrd>FBB0ED2YYq-TXIJ>z)x@KnZg=|q`5(<^8a|%l_*4L|Fg+^LhIKey< zRW-l+#L)F+TZtmOq2>`HLMQZ7{5fF--y`j32JjS#wE`S@+izBrsv2&rCJUxl*4N?g zx|9HB$k7e;OdSKj^4ID0!7+)v*Dsv|hXwp$3N|WlD%UCt8Is_1`W~bLx7mYB222`b zp>vzIdv1w=%y{WNLQ2-KbS0wEhF6?$C^vxfHOhaa#hzN!O*pH!&+4qM7rO%sb{tr= zbHSl4nNZkqwy$jDK*%SkUKf z<9lt7Qn4ZtI;V!ec>lVQCQdsLJPfW*w$c^>&Y({M{RQTqc;+#ukC~shQrC zs+6U-ElN?b+ihK~!sOyR?4Epa#VH-DvO;R_C*fljJZTA9u(s=RvKVd&+{!Y7Q|hRDs$` zfk0C4cBjimQA>z;C|&|I9&}{`U@$U9R#ujq7aR7VP^cZBMpNgkyU*op7mYT1wwOj} zQ}JKsf)huYR!Vk_zLOtd9HaiYhwfC-+0!gA0+Qb!<4rh-vtCFbOCSsu%+h2}vYN!4 zg+$Zmdg+h6j($JJ3E`s$d<>j7G&{fY&Q^oq-7Aed{y8ek8F7Z!pU8f}ArKyh1GuMi zjT`=9;_z=rDom@m_C7qg+U|}e(t0oYc{tSPycJw!Dnl|%>B~apBL@BLJ-BshEYyG= zVPEv4lwVEd+k)&cq_ZW=)Sa2jOnT#+Ewbv*F4Zfo)&}euA120zM`u#~aj!dAs%f(R z`Az6aaQkt0Z!f|1HO}cl_{r#1?7bD>2)&$KC)i(tDKGd~q`iX;HoRvJzU~oG_JTi> z_6iE4w6P%+vmc?3XBz5R=IU8qTO;eR2p;w{mMW2by5QG$A#xBIOYAgD+D{c6|44~X z%40j$i~SQGz`7sR{c~La?04``Ej1!&IH?z=BWowsia%;Q81U2`+?+MZ*9QI#qv za;o|WW}Yt_u@=G;RhUVs}2l*@5$#<64}czLe06d_b)*Jy~z1@3G;F? zxE#3*T^FU-tmeD#B&*EoIp&*OT47rLmTA$&g4mvaSd|d$GOxGWDapvx1@>($E*{)N zu%lPd8-2aKhFH`d1&t6vat6ZkUZj}<_or0$#QmoTfp0a6hy&!fAH%5a(ay_2BFlUALdy&;wsU948gmN5D^bZ_#;xw5m3D^w$Xs!{3;LYFF6w zkPs#>9tZHzc&cX>3%(sik5O3QDt`r%p;-?+%DI00xy ztK_o>zx`(Pu3ekCac}Wn-i4lq6}} zr>aAOn;Y-HVZmDcDIF?DY?h+PNYk%rU8NkTPg0bhCJ3k`NlItlkZ19|6#+_%~A|0B1ciAQpq zL>+`2M&S&98?-c`X^OiHz$g4>PBja>r9`J$wX8zC@vk><2{Y)tV$m&k@vU(@Qt(R# z&Dmyw>U+5Bw3+-70K!V1c5eKvg}J*S28e=Uqt(<%qL9Y`Yd{O>GLxFx%!J+?x8~@} z={q3!Yjx1m7WqK5#I}?+2?VXqK~lFEUTKGDSk@mQ#JC7>Lj=nC`f>_pY9esf2_s4e)Xy0p*=t@U6Xm;Dcfix~ z0}+5-eFANDtb4$DFXwh*GVN@tQlxH8zhtsy5L)rGI`0bXy$0yf>oVaW5w%Bgagy#X z9i$c$OyN3Oyt9w>nQ`Q8zTO*4D6fcc#64Y(S4h?URTpzd2+rom#US77ZAJ<%Cy+~P z1{IJ}GC|c+lP%ASp6s1l(B>U$#Bp8_^%5LJBKv=2UmEwQXr6pP=N=hJ3<%4Gc=IeL zldq+Q4RSyMc-5*N@~tn@+V)@Zh61waf8`^tH>Zs9c9-UC@$lS!Uh_W1KmbuGKL$E; zbpfm2E`X~JH_V7cM3713(-U_@A_;(F&lJGSkHaWyoVJs+)?s^@c1MAyBC!YihrD8j zf+F1pggcRl*waz&4Z-jMxKaehWd#OSCrNj6?5VItWyf`QD^{7-U;mOYR}@!Wn6)qg zDmS9Is^Q9>3OQu3%dM1mnfapgj6bU>yzcFOy+BOCCck-Ow(kME$IZ!fyam3INBL)! z7*0l0p4ws5m#yY$0`|GqPHY z3eNXLNSqq|;UH&w1R&B&`Z64q#{s%9*sO-Tn>2fgm!RGyV4;1)!F;qPn7lyB6FN4u z>z)bq>aMPaH>wbaE-c)EvoOSq6k4O^!otEf_~Lf7bI1yzg^?c)e>LxuaXmHm`HK+K zfAC%CxcP)jo%ZqyPuTk>=y2~Zy!VREpk(NY9`OGcQNb9DilHIl^=aXlt4&qPw{vE8 z2<00O(UdHAVnQW8Z5tcwp&gc)F4r2~QY9=a>IP$F5=csU6(gA9)2>M*<}^c$$`Y4s zq`Gq`lbw@IvjF;hsJ+!uQI#Zu6=Gfs__rb{Eb9U`GZK1m_y^iwHZ&z8>uyQe7NH?% zrl?|2{>BIj^6&i@=l@p+{tppQL>+euHtXo&!yXFoNUJOyX0{QsV6_v?zlW~*- + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/clams/discrete_depth_distortion_model.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
discrete_depth_distortion_model.h
+
+
+
1/*
+
2Copyright (c) 2013, Alex Teichman and Stephen Miller (Stanford University)
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the <organization> nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26
+
27RTAB-Map integration: Mathieu Labbe
+
28*/
+
29
+
30#ifndef DISCRETE_DEPTH_DISTORTION_MODEL_H
+
31#define DISCRETE_DEPTH_DISTORTION_MODEL_H
+
32
+
33#include <assert.h>
+
34#include <vector>
+
35#include <set>
+
36#include <Eigen/Core>
+
37#include <opencv2/opencv.hpp>
+
38#include <rtabmap/utilite/UMutex.h>
+
39#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
40
+
41namespace clams
+
42{
+
+
43 class RTABMAP_CORE_EXPORT DiscreteFrustum
+
44 {
+
45 public:
+
46 DiscreteFrustum(int smoothing = 1, double bin_depth = 1.0, double max_dist = 10.0);
+
49 void addExample(double ground_truth, double measurement);
+
50 int index(double z) const;
+
51 void undistort(double* z) const;
+
52 void interpolatedUndistort(double* z) const;
+
53 void serialize(std::ostream& out, bool ascii) const;
+
54 void deserialize(std::istream& in, bool ascii);
+
55
+
56 protected:
+
57 double max_dist_;
+
58 int num_bins_;
+
59 double bin_depth_;
+
60 Eigen::VectorXf counts_;
+
61 Eigen::VectorXf total_numerators_;
+
62 Eigen::VectorXf total_denominators_;
+
63 Eigen::VectorXf multipliers_;
+
64
+ +
66 };
+
+
67
+
+
68 class RTABMAP_CORE_EXPORT DiscreteDepthDistortionModel
+
69 {
+
70 public:
+
71 // returns all divisors of num
+
72 static std::set<size_t> getDivisors(const size_t &num);
+
73
+
74 // returns divisor from divisors closest to ref
+
75 static size_t getClosestToRef(const std::set<size_t> &divisors, const double &ref);
+
76
+
77 // sets bin_width and bin_height to appropriate values
+
78 static void getBinSize(const size_t &width, const size_t &height, size_t &bin_width, size_t &bin_height);
+
79
+
80 public:
+ +
82 width_(0),
+
83 height_(0),
+
84 bin_width_(0),
+
85 bin_height_(0),
+
86 bin_depth_(0),
+
87 num_bins_x_(0),
+
88 num_bins_y_(0),
+
89 training_samples_(0)
+
90 {}
+ +
92 DiscreteDepthDistortionModel(int width, int height, int bin_width = 8, int bin_height = 6, double bin_depth = 2.0, int smoothing = 1, double max_depth = 10.0);
+ + +
95 void undistort(cv::Mat & depth) const;
+
98 size_t accumulate(const cv::Mat& ground_truth, const cv::Mat& measurement);
+
99 void addExample(int v, int u, double ground_truth, double measurement);
+
100 void save(const std::string& path) const;
+
101 void load(const std::string& path);
+
102 void serialize(std::ostream& out, bool ascii) const;
+
103 void deserialize(std::istream& in, bool ascii);
+
104 cv::Mat visualize(const std::string& path = "") const;
+
105
+
106 int getWidth() const {return width_;}
+
107 int getHeight() const {return height_;}
+
108 size_t getTrainingSamples() const {return training_samples_;}
+
109 bool isValid() const
+
110 {
+
111 return !frustums_.empty();
+
112 }
+
113
+
114 protected:
+ + + + + +
125 int num_bins_x_;
+
126 int num_bins_y_;
+
128 std::vector< std::vector<DiscreteFrustum*> > frustums_;
+
129
+
130 size_t training_samples_;
+
131
+
132 void deleteFrustums();
+
133 DiscreteFrustum& frustum(int y, int x);
+
134 const DiscreteFrustum& frustum(int y, int x) const;
+
135
+
136 UMutex mutex_;
+
137 };
+
+
138
+
139} // namespace clams
+
140
+
141#endif // DISCRETE_DEPTH_DISTORTION_MODEL_H
+ + +
double bin_depth_
Depth of each bin in meters.
+
std::vector< std::vector< DiscreteFrustum * > > frustums_
frustums_[y][x]
+ + +
size_t accumulate(const cv::Mat &ground_truth, const cv::Mat &measurement)
+ + + +
void addExample(double ground_truth, double measurement)
+
+ + + + diff --git a/preview/pr-1492/api/latest/doc.svg b/preview/pr-1492/api/latest/doc.svg new file mode 100644 index 00000000..0b928a53 --- /dev/null +++ b/preview/pr-1492/api/latest/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/docd.svg b/preview/pr-1492/api/latest/docd.svg new file mode 100644 index 00000000..ac18b275 --- /dev/null +++ b/preview/pr-1492/api/latest/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/doxygen.css b/preview/pr-1492/api/latest/doxygen.css new file mode 100644 index 00000000..009a9b55 --- /dev/null +++ b/preview/pr-1492/api/latest/doxygen.css @@ -0,0 +1,2045 @@ +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/preview/pr-1492/api/latest/doxygen.svg b/preview/pr-1492/api/latest/doxygen.svg new file mode 100644 index 00000000..79a76354 --- /dev/null +++ b/preview/pr-1492/api/latest/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/dynsections.js b/preview/pr-1492/api/latest/dynsections.js new file mode 100644 index 00000000..9b281563 --- /dev/null +++ b/preview/pr-1492/api/latest/dynsections.js @@ -0,0 +1,199 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+'…'+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ +$(document).ready(function() { + $('.code,.codeRef').each(function() { + $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ]; + $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); + }); +}); diff --git a/preview/pr-1492/api/latest/examples.html b/preview/pr-1492/api/latest/examples.html new file mode 100644 index 00000000..1776a5e2 --- /dev/null +++ b/preview/pr-1492/api/latest/examples.html @@ -0,0 +1,88 @@ + + + + + + + + +RTAB-Map: Examples + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Examples
+
+ + + + + diff --git a/preview/pr-1492/api/latest/files.html b/preview/pr-1492/api/latest/files.html new file mode 100644 index 00000000..a80e4eef --- /dev/null +++ b/preview/pr-1492/api/latest/files.html @@ -0,0 +1,284 @@ + + + + + + + + +RTAB-Map: File List + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234567]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 ▼ build-docs
 ▼ corelib
 ▼ src
 ► include
 ▼ corelib
 ▼ include
 ▼ rtabmap
 ► core
 ▼ utilite
 ▼ include
 ▼ rtabmap
 ► utilite
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/folderclosed.svg b/preview/pr-1492/api/latest/folderclosed.svg new file mode 100644 index 00000000..b04bed2e --- /dev/null +++ b/preview/pr-1492/api/latest/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/folderclosedd.svg b/preview/pr-1492/api/latest/folderclosedd.svg new file mode 100644 index 00000000..52f0166a --- /dev/null +++ b/preview/pr-1492/api/latest/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/folderopen.svg b/preview/pr-1492/api/latest/folderopen.svg new file mode 100644 index 00000000..f6896dd2 --- /dev/null +++ b/preview/pr-1492/api/latest/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/folderopend.svg b/preview/pr-1492/api/latest/folderopend.svg new file mode 100644 index 00000000..2d1f06e7 --- /dev/null +++ b/preview/pr-1492/api/latest/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/frame__projector_8h_source.html b/preview/pr-1492/api/latest/frame__projector_8h_source.html new file mode 100644 index 00000000..fa80a62f --- /dev/null +++ b/preview/pr-1492/api/latest/frame__projector_8h_source.html @@ -0,0 +1,190 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/clams/frame_projector.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
frame_projector.h
+
+
+
1/*
+
2Copyright (c) 2013, Alex Teichman and Stephen Miller (Stanford University)
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the <organization> nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26
+
27RTAB-Map integration: Mathieu Labbe
+
28*/
+
29
+
30#ifndef FRAME_PROJECTOR_H
+
31#define FRAME_PROJECTOR_H
+
32
+
33#include <pcl/point_cloud.h>
+
34#include <pcl/point_types.h>
+
35#include <opencv2/core/core.hpp>
+
36#include <rtabmap/core/CameraModel.h>
+
37
+
38#define MAX_MULT 1.3
+
39#define MIN_MULT 0.7
+
40
+
41namespace clams
+
42{
+
43
+
+ +
48 {
+
49 public:
+ +
51 u_(0),
+
52 v_(0),
+
53 z_(0.0f) {}
+
54
+
55 int u_;
+
56 int v_;
+
57 float z_; // in meters
+
58 };
+
+
59
+
+
62 class RTABMAP_CORE_EXPORT FrameProjector
+
63 {
+
64 public:
+
65 // For storing z values in meters. This is not Euclidean distance.
+
66 typedef std::vector< std::vector< std::vector<double> > > RangeIndex;
+
67
+ +
69
+
70 RangeIndex cloudToRangeIndex(const pcl::PointCloud<pcl::PointXYZ>::Ptr & pcd) const;
+ +
75 const pcl::PointCloud<pcl::PointXYZ>::Ptr & map,
+
76 const rtabmap::Transform & transform,
+
77 const cv::Mat & measurement,
+
78 double coneRadius = 0.02,
+
79 double coneStdevThresh = 0.03) const;
+
80
+
81 pcl::PointXYZ project(const ProjectivePoint& ppt) const;
+
82 ProjectivePoint reproject(const pcl::PointXYZ& pt) const;
+
83
+
84 protected:
+
85 bool coneFit(const cv::Size& imageSize, const RangeIndex& rindex,
+
86 int uc, int vc, double radius, double measurement_depth,
+
87 double* mean, double* stdev) const;
+
88
+
89 private:
+ +
91 };
+
+
92
+
93} // namespace clams
+
94
+
95#endif // FRAME_PROJECTOR_H
+ +
cv::Mat estimateMapDepth(const pcl::PointCloud< pcl::PointXYZ >::Ptr &map, const rtabmap::Transform &transform, const cv::Mat &measurement, double coneRadius=0.02, double coneStdevThresh=0.03) const
+ +
Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
Definition CameraModel.h:53
+
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
+
+ + + + diff --git a/preview/pr-1492/api/latest/functions.html b/preview/pr-1492/api/latest/functions.html new file mode 100644 index 00000000..cb19d9d4 --- /dev/null +++ b/preview/pr-1492/api/latest/functions.html @@ -0,0 +1,91 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- _ -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_a.html b/preview/pr-1492/api/latest/functions_a.html new file mode 100644 index 00000000..7fda1e65 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_a.html @@ -0,0 +1,119 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_b.html b/preview/pr-1492/api/latest/functions_b.html new file mode 100644 index 00000000..85fee9ed --- /dev/null +++ b/preview/pr-1492/api/latest/functions_b.html @@ -0,0 +1,93 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_c.html b/preview/pr-1492/api/latest/functions_c.html new file mode 100644 index 00000000..d5e7549c --- /dev/null +++ b/preview/pr-1492/api/latest/functions_c.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_d.html b/preview/pr-1492/api/latest/functions_d.html new file mode 100644 index 00000000..ab40cba3 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_d.html @@ -0,0 +1,117 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_e.html b/preview/pr-1492/api/latest/functions_e.html new file mode 100644 index 00000000..f9cc63f5 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_e.html @@ -0,0 +1,108 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_enum.html b/preview/pr-1492/api/latest/functions_enum.html new file mode 100644 index 00000000..0750f430 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_enum.html @@ -0,0 +1,92 @@ + + + + + + + + +RTAB-Map: Class Members - Enumerations + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enums with links to the class documentation for each member:
+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_eval.html b/preview/pr-1492/api/latest/functions_eval.html new file mode 100644 index 00000000..c5fe24bd --- /dev/null +++ b/preview/pr-1492/api/latest/functions_eval.html @@ -0,0 +1,178 @@ + + + + + + + + +RTAB-Map: Class Members - Enumerator + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the class documentation for each member:
+ +

- k -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_f.html b/preview/pr-1492/api/latest/functions_f.html new file mode 100644 index 00000000..e9bea7e3 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_f.html @@ -0,0 +1,110 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func.html b/preview/pr-1492/api/latest/functions_func.html new file mode 100644 index 00000000..314dd19c --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func.html @@ -0,0 +1,116 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- a -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_b.html b/preview/pr-1492/api/latest/functions_func_b.html new file mode 100644 index 00000000..7a5a1e0c --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_b.html @@ -0,0 +1,90 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- b -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_c.html b/preview/pr-1492/api/latest/functions_func_c.html new file mode 100644 index 00000000..5b9d08fd --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_c.html @@ -0,0 +1,140 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- c -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_d.html b/preview/pr-1492/api/latest/functions_func_d.html new file mode 100644 index 00000000..a437800c --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_d.html @@ -0,0 +1,115 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- d -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_e.html b/preview/pr-1492/api/latest/functions_func_e.html new file mode 100644 index 00000000..a55a5993 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_e.html @@ -0,0 +1,107 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- e -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_f.html b/preview/pr-1492/api/latest/functions_func_f.html new file mode 100644 index 00000000..70fa08b3 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_f.html @@ -0,0 +1,108 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- f -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_g.html b/preview/pr-1492/api/latest/functions_func_g.html new file mode 100644 index 00000000..e07c2c74 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_g.html @@ -0,0 +1,282 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- g -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_h.html b/preview/pr-1492/api/latest/functions_func_h.html new file mode 100644 index 00000000..aa70e282 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_h.html @@ -0,0 +1,90 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_i.html b/preview/pr-1492/api/latest/functions_func_i.html new file mode 100644 index 00000000..7ab1d30f --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_i.html @@ -0,0 +1,173 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- i -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_j.html b/preview/pr-1492/api/latest/functions_func_j.html new file mode 100644 index 00000000..47b1da4f --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_j.html @@ -0,0 +1,88 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- j -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_k.html b/preview/pr-1492/api/latest/functions_func_k.html new file mode 100644 index 00000000..a05e7478 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_k.html @@ -0,0 +1,91 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- k -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_l.html b/preview/pr-1492/api/latest/functions_func_l.html new file mode 100644 index 00000000..5f4159bb --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_l.html @@ -0,0 +1,124 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_m.html b/preview/pr-1492/api/latest/functions_func_m.html new file mode 100644 index 00000000..2001c15d --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_m.html @@ -0,0 +1,96 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- m -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_n.html b/preview/pr-1492/api/latest/functions_func_n.html new file mode 100644 index 00000000..9670ede2 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_n.html @@ -0,0 +1,90 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- n -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_o.html b/preview/pr-1492/api/latest/functions_func_o.html new file mode 100644 index 00000000..47265569 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_o.html @@ -0,0 +1,105 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- o -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_p.html b/preview/pr-1492/api/latest/functions_func_p.html new file mode 100644 index 00000000..d1e5eb49 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_p.html @@ -0,0 +1,103 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- p -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_r.html b/preview/pr-1492/api/latest/functions_func_r.html new file mode 100644 index 00000000..2916bf89 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_r.html @@ -0,0 +1,131 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- r -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_s.html b/preview/pr-1492/api/latest/functions_func_s.html new file mode 100644 index 00000000..57c8c3c4 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_s.html @@ -0,0 +1,235 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- s -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_t.html b/preview/pr-1492/api/latest/functions_func_t.html new file mode 100644 index 00000000..43644d26 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_t.html @@ -0,0 +1,120 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- t -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_u.html b/preview/pr-1492/api/latest/functions_func_u.html new file mode 100644 index 00000000..39495ed1 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_u.html @@ -0,0 +1,110 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- u -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_v.html b/preview/pr-1492/api/latest/functions_func_v.html new file mode 100644 index 00000000..4f2ecc20 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_v.html @@ -0,0 +1,90 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- v -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_w.html b/preview/pr-1492/api/latest/functions_func_w.html new file mode 100644 index 00000000..f3a54b1e --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_w.html @@ -0,0 +1,90 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- w -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_x.html b/preview/pr-1492/api/latest/functions_func_x.html new file mode 100644 index 00000000..225417d8 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_x.html @@ -0,0 +1,87 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- x -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_y.html b/preview/pr-1492/api/latest/functions_func_y.html new file mode 100644 index 00000000..495b8d8e --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_y.html @@ -0,0 +1,87 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- y -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_z.html b/preview/pr-1492/api/latest/functions_func_z.html new file mode 100644 index 00000000..7969f0e3 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_z.html @@ -0,0 +1,87 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- z -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_func_~.html b/preview/pr-1492/api/latest/functions_func_~.html new file mode 100644 index 00000000..8cf2ffcc --- /dev/null +++ b/preview/pr-1492/api/latest/functions_func_~.html @@ -0,0 +1,107 @@ + + + + + + + + +RTAB-Map: Class Members - Functions + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- ~ -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_g.html b/preview/pr-1492/api/latest/functions_g.html new file mode 100644 index 00000000..13dca53d --- /dev/null +++ b/preview/pr-1492/api/latest/functions_g.html @@ -0,0 +1,283 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_h.html b/preview/pr-1492/api/latest/functions_h.html new file mode 100644 index 00000000..011036a2 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_h.html @@ -0,0 +1,91 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_i.html b/preview/pr-1492/api/latest/functions_i.html new file mode 100644 index 00000000..c3be55b3 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_i.html @@ -0,0 +1,190 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_j.html b/preview/pr-1492/api/latest/functions_j.html new file mode 100644 index 00000000..5b79f787 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_j.html @@ -0,0 +1,88 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- j -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_k.html b/preview/pr-1492/api/latest/functions_k.html new file mode 100644 index 00000000..eb56e23b --- /dev/null +++ b/preview/pr-1492/api/latest/functions_k.html @@ -0,0 +1,188 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- k -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_l.html b/preview/pr-1492/api/latest/functions_l.html new file mode 100644 index 00000000..2d0fad25 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_l.html @@ -0,0 +1,128 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_m.html b/preview/pr-1492/api/latest/functions_m.html new file mode 100644 index 00000000..e1b42eff --- /dev/null +++ b/preview/pr-1492/api/latest/functions_m.html @@ -0,0 +1,99 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_n.html b/preview/pr-1492/api/latest/functions_n.html new file mode 100644 index 00000000..f10f9803 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_n.html @@ -0,0 +1,91 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_o.html b/preview/pr-1492/api/latest/functions_o.html new file mode 100644 index 00000000..b954d80d --- /dev/null +++ b/preview/pr-1492/api/latest/functions_o.html @@ -0,0 +1,109 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_p.html b/preview/pr-1492/api/latest/functions_p.html new file mode 100644 index 00000000..c6fb9dd5 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_p.html @@ -0,0 +1,105 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_r.html b/preview/pr-1492/api/latest/functions_r.html new file mode 100644 index 00000000..eee45621 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_r.html @@ -0,0 +1,133 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_rela.html b/preview/pr-1492/api/latest/functions_rela.html new file mode 100644 index 00000000..e0cbbec8 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_rela.html @@ -0,0 +1,85 @@ + + + + + + + + +RTAB-Map: Class Members - Related Symbols + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented related symbols with links to the class documentation for each member:
+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_s.html b/preview/pr-1492/api/latest/functions_s.html new file mode 100644 index 00000000..c303e6c2 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_s.html @@ -0,0 +1,235 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_t.html b/preview/pr-1492/api/latest/functions_t.html new file mode 100644 index 00000000..cd5aca57 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_t.html @@ -0,0 +1,139 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_u.html b/preview/pr-1492/api/latest/functions_u.html new file mode 100644 index 00000000..cb4252bb --- /dev/null +++ b/preview/pr-1492/api/latest/functions_u.html @@ -0,0 +1,111 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_v.html b/preview/pr-1492/api/latest/functions_v.html new file mode 100644 index 00000000..6d71ee88 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_v.html @@ -0,0 +1,93 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_vars.html b/preview/pr-1492/api/latest/functions_vars.html new file mode 100644 index 00000000..50f94a4f --- /dev/null +++ b/preview/pr-1492/api/latest/functions_vars.html @@ -0,0 +1,236 @@ + + + + + + + + +RTAB-Map: Class Members - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the class documentation for each member:
+ +

- _ -

+ + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+ + +

- w -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_w.html b/preview/pr-1492/api/latest/functions_w.html new file mode 100644 index 00000000..1bae76bf --- /dev/null +++ b/preview/pr-1492/api/latest/functions_w.html @@ -0,0 +1,91 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_x.html b/preview/pr-1492/api/latest/functions_x.html new file mode 100644 index 00000000..723d7e73 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_x.html @@ -0,0 +1,87 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- x -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_y.html b/preview/pr-1492/api/latest/functions_y.html new file mode 100644 index 00000000..435ec706 --- /dev/null +++ b/preview/pr-1492/api/latest/functions_y.html @@ -0,0 +1,87 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- y -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_z.html b/preview/pr-1492/api/latest/functions_z.html new file mode 100644 index 00000000..942f946f --- /dev/null +++ b/preview/pr-1492/api/latest/functions_z.html @@ -0,0 +1,87 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- z -

+
+ + + + diff --git a/preview/pr-1492/api/latest/functions_~.html b/preview/pr-1492/api/latest/functions_~.html new file mode 100644 index 00000000..78a7b0ef --- /dev/null +++ b/preview/pr-1492/api/latest/functions_~.html @@ -0,0 +1,107 @@ + + + + + + + + +RTAB-Map: Class Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+ + + + diff --git a/preview/pr-1492/api/latest/global__map_2OccupancyGrid_8h_source.html b/preview/pr-1492/api/latest/global__map_2OccupancyGrid_8h_source.html new file mode 100644 index 00000000..4688f0df --- /dev/null +++ b/preview/pr-1492/api/latest/global__map_2OccupancyGrid_8h_source.html @@ -0,0 +1,171 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/global_map/OccupancyGrid.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OccupancyGrid.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef CORELIB_SRC_OCCUPANCYGRID_H_
+
29#define CORELIB_SRC_OCCUPANCYGRID_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <rtabmap/core/GlobalMap.h>
+
34
+
35#include <pcl/point_cloud.h>
+
36#include <pcl/point_types.h>
+
37
+
38namespace rtabmap {
+
39
+
+
40class RTABMAP_CORE_EXPORT OccupancyGrid : public GlobalMap
+
41{
+
42public:
+
43 OccupancyGrid(const LocalGridCache * cache, const ParametersMap & parameters = ParametersMap());
+
44 void setMap(const cv::Mat & map, float xMin, float yMin, float cellSize, const std::map<int, Transform> & poses);
+
45 float getMinMapSize() const {return minMapSize_;}
+
46
+
47 virtual void clear();
+
48
+
49 cv::Mat getMap(float & xMin, float & yMin) const;
+
50 cv::Mat getProbMap(float & xMin, float & yMin) const;
+
51
+
52 unsigned long getMemoryUsed() const;
+
53
+
54protected:
+
55 virtual void assemble(const std::list<std::pair<int, Transform> > & newPoses);
+
56
+
57private:
+
58 cv::Mat map_;
+
59 cv::Mat mapInfo_;
+
60
+
61 float minMapSize_;
+
62 bool erode_;
+
63 float footprintRadius_;
+
64};
+
+
65
+
66}
+
67
+
68#endif /* CORELIB_SRC_OCCUPANCYGRID_H_ */
+
Abstract base for assembling per-node LocalGrid data into a global map.
Definition GlobalMap.h:56
+
Cache of LocalGrid entries keyed by map node id.
Definition LocalGrid.h:98
+ +
unsigned long getMemoryUsed() const
Approximate memory used by assembled-node bookkeeping (bytes).
+
virtual void assemble(const std::list< std::pair< int, Transform > > &newPoses)
Subclass hook: merge newPoses into the global map; call addAssembledNode().
+
virtual void clear()
Clears assembled nodes and grid bounds; does not clear LocalGridCache.
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/global__map_2OctoMap_8h_source.html b/preview/pr-1492/api/latest/global__map_2OctoMap_8h_source.html new file mode 100644 index 00000000..b928141c --- /dev/null +++ b/preview/pr-1492/api/latest/global__map_2OctoMap_8h_source.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/global_map/OctoMap.h Source File + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
OctoMap.h
+
+
+
1/*
+
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
+
3All rights reserved.
+
4
+
5Redistribution and use in source and binary forms, with or without
+
6modification, are permitted provided that the following conditions are met:
+
7 * Redistributions of source code must retain the above copyright
+
8 notice, this list of conditions and the following disclaimer.
+
9 * Redistributions in binary form must reproduce the above copyright
+
10 notice, this list of conditions and the following disclaimer in the
+
11 documentation and/or other materials provided with the distribution.
+
12 * Neither the name of the Universite de Sherbrooke nor the
+
13 names of its contributors may be used to endorse or promote products
+
14 derived from this software without specific prior written permission.
+
15
+
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26*/
+
27
+
28#ifndef SRC_OCTOMAP_H_
+
29#define SRC_OCTOMAP_H_
+
30
+
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
+
32
+
33#include <octomap/ColorOcTree.h>
+
34#include <octomap/OcTreeKey.h>
+
35
+
36#include <pcl/pcl_base.h>
+
37#include <pcl/point_types.h>
+
38
+
39#include <rtabmap/core/Transform.h>
+
40#include <rtabmap/core/Parameters.h>
+
41#include <rtabmap/core/GlobalMap.h>
+
42
+
43#include <map>
+
44#include <unordered_set>
+
45#include <string>
+
46#include <queue>
+
47
+
48namespace rtabmap {
+
49
+
50// forward declaraton for "friend"
+
51class RtabmapColorOcTree;
+
52
+
+
53class RtabmapColorOcTreeNode : public octomap::ColorOcTreeNode
+
54{
+
55public:
+
56 enum OccupancyType {kTypeUnknown=-1, kTypeEmpty=0, kTypeGround=1, kTypeObstacle=100};
+
57
+
58public:
+
59 friend class RtabmapColorOcTree; // needs access to node children (inherited)
+
60
+
61 RtabmapColorOcTreeNode() : ColorOcTreeNode(), nodeRefId_(0), type_(kTypeUnknown) {}
+
62 RtabmapColorOcTreeNode(const RtabmapColorOcTreeNode& rhs) : ColorOcTreeNode(rhs), nodeRefId_(rhs.nodeRefId_), type_(rhs.type_) {}
+
63
+
64 void setNodeRefId(int nodeRefId) {nodeRefId_ = nodeRefId;}
+
65 void setOccupancyType(char type) {type_=type;}
+
66 void setPointRef(const octomap::point3d & point) {pointRef_ = point;}
+
67 int getNodeRefId() const {return nodeRefId_;}
+
68 int getOccupancyType() const {return type_;}
+
69 const octomap::point3d & getPointRef() const {return pointRef_;}
+
70
+
71 // following methods defined for octomap < 1.8 compatibility
+
72 RtabmapColorOcTreeNode* getChild(unsigned int i);
+
73 const RtabmapColorOcTreeNode* getChild(unsigned int i) const;
+
74 bool pruneNode();
+
75 void expandNode();
+
76 bool createChild(unsigned int i);
+
77
+
78 void updateOccupancyTypeChildren();
+
79
+
80private:
+
81 int nodeRefId_;
+
82 int type_; // -1=undefined, 0=empty, 100=obstacle, 1=ground
+
83 octomap::point3d pointRef_;
+
84};
+
+
85
+
86// Same as official ColorOctree but using RtabmapColorOcTreeNode, which is inheriting ColorOcTreeNode
+
+
87class RtabmapColorOcTree : public octomap::OccupancyOcTreeBase <RtabmapColorOcTreeNode> {
+
88
+
89 public:
+
91 RtabmapColorOcTree(double resolution);
+
92 virtual ~RtabmapColorOcTree() {}
+
93
+
96 RtabmapColorOcTree* create() const {return new RtabmapColorOcTree(resolution); }
+
97
+
98 std::string getTreeType() const {return "ColorOcTree";} // same type as ColorOcTree to be compatible with ROS OctoMap msg
+
99
+ +
107
+
108 virtual bool isNodeCollapsible(const RtabmapColorOcTreeNode* node) const;
+
109
+
110 // set node color at given key or coordinate. Replaces previous color.
+
111 RtabmapColorOcTreeNode* setNodeColor(const octomap::OcTreeKey& key, uint8_t r,
+
112 uint8_t g, uint8_t b);
+
113
+
114 RtabmapColorOcTreeNode* setNodeColor(float x, float y,
+
115 float z, uint8_t r,
+
116 uint8_t g, uint8_t b) {
+
117 octomap::OcTreeKey key;
+
118 if (!this->coordToKeyChecked(octomap::point3d(x,y,z), key)) return NULL;
+
119 return setNodeColor(key,r,g,b);
+
120 }
+
121
+
122 // integrate color measurement at given key or coordinate. Average with previous color
+
123 RtabmapColorOcTreeNode* averageNodeColor(const octomap::OcTreeKey& key, uint8_t r,
+
124 uint8_t g, uint8_t b);
+
125
+
126 RtabmapColorOcTreeNode* averageNodeColor(float x, float y,
+
127 float z, uint8_t r,
+
128 uint8_t g, uint8_t b) {
+
129 octomap:: OcTreeKey key;
+
130 if (!this->coordToKeyChecked(octomap::point3d(x,y,z), key)) return NULL;
+
131 return averageNodeColor(key,r,g,b);
+
132 }
+
133
+
134 // integrate color measurement at given key or coordinate. Average with previous color
+
135 RtabmapColorOcTreeNode* integrateNodeColor(const octomap::OcTreeKey& key, uint8_t r,
+
136 uint8_t g, uint8_t b);
+
137
+
138 RtabmapColorOcTreeNode* integrateNodeColor(float x, float y,
+
139 float z, uint8_t r,
+
140 uint8_t g, uint8_t b) {
+
141 octomap::OcTreeKey key;
+
142 if (!this->coordToKeyChecked(octomap::point3d(x,y,z), key)) return NULL;
+
143 return integrateNodeColor(key,r,g,b);
+
144 }
+
145
+
146 // update inner nodes, sets color to average child color
+
147 void updateInnerOccupancy();
+
148
+
149 protected:
+
150 void updateInnerOccupancyRecurs(RtabmapColorOcTreeNode* node, unsigned int depth);
+
151
+
+ +
160 public:
+ +
162
+
168 void ensureLinking() {};
+
169 };
+
+ +
172
+
173 };
+
+
174
+
+
175class RTABMAP_CORE_EXPORT OctoMap : public GlobalMap {
+
176public:
+
177 OctoMap(const LocalGridCache * cache, const ParametersMap & parameters = ParametersMap());
+
178
+
179 const RtabmapColorOcTree * octree() const {return octree_;}
+
180
+
181 pcl::PointCloud<pcl::PointXYZRGB>::Ptr createCloud(
+
182 unsigned int treeDepth = 0,
+
183 std::vector<int> * obstacleIndices = 0,
+
184 std::vector<int> * emptyIndices = 0,
+
185 std::vector<int> * groundIndices = 0,
+
186 bool originalRefPoints = true,
+
187 std::vector<int> * frontierIndices = 0,
+
188 std::vector<double> * cloudProb = 0) const;
+
189
+
190 cv::Mat createProjectionMap(
+
191 float & xMin,
+
192 float & yMin,
+
193 float & gridCellSize,
+
194 float minGridSize = 0.0f,
+
195 unsigned int treeDepth = 0);
+
196
+
197 bool writeBinary(const std::string & path);
+
198
+
199 virtual ~OctoMap();
+
200 virtual void clear();
+
201 virtual unsigned long getMemoryUsed() const;
+
202
+
203 bool hasColor() const {return hasColor_;}
+
204
+
205 static std::unordered_set<octomap::OcTreeKey, octomap::OcTreeKey::KeyHash> findEmptyNode(RtabmapColorOcTree* octree_, unsigned int treeDepth, octomap::point3d startPosition);
+
206 static void floodFill(RtabmapColorOcTree* octree_, unsigned int treeDepth,octomap::point3d startPosition, std::unordered_set<octomap::OcTreeKey, octomap::OcTreeKey::KeyHash> & EmptyNodes,std::queue<octomap::point3d>& positionToExplore);
+
207 static bool isNodeVisited(std::unordered_set<octomap::OcTreeKey,octomap::OcTreeKey::KeyHash> const & EmptyNodes,octomap::OcTreeKey const key);
+
208 static octomap::point3d findCloseEmpty(RtabmapColorOcTree* octree_, unsigned int treeDepth,octomap::point3d startPosition);
+
209 static bool isValidEmpty(RtabmapColorOcTree* octree_, unsigned int treeDepth,octomap::point3d startPosition);
+
210
+
211protected:
+
212 virtual void assemble(const std::list<std::pair<int, Transform> > & newPoses);
+
213
+
214private:
+
215 void updateMinMax(const octomap::point3d & point);
+
216
+
217private:
+
218 RtabmapColorOcTree * octree_;
+
219 bool hasColor_;
+
220 float rangeMax_;
+
221 bool rayTracing_;
+
222 unsigned int emptyFloodFillDepth_;
+
223};
+
+
224
+
225} /* namespace rtabmap */
+
226
+
227#endif /* SRC_OCTOMAP_H_ */
+
Abstract base for assembling per-node LocalGrid data into a global map.
Definition GlobalMap.h:56
+
Cache of LocalGrid entries keyed by map node id.
Definition LocalGrid.h:98
+ +
virtual void clear()
Clears assembled nodes and grid bounds; does not clear LocalGridCache.
+
virtual unsigned long getMemoryUsed() const
Approximate memory used by assembled-node bookkeeping (bytes).
+
virtual void assemble(const std::list< std::pair< int, Transform > > &newPoses)
Subclass hook: merge newPoses into the global map; call addAssembledNode().
+ + + + +
RtabmapColorOcTree(double resolution)
Default constructor, sets resolution of leafs.
+
static StaticMemberInitializer RtabmapColorOcTreeMemberInit
static member to ensure static initialization (only once)
Definition OctoMap.h:171
+
RtabmapColorOcTree * create() const
Definition OctoMap.h:96
+
virtual bool pruneNode(RtabmapColorOcTreeNode *node)
+ +
+ + + + diff --git a/preview/pr-1492/api/latest/globals.html b/preview/pr-1492/api/latest/globals.html new file mode 100644 index 00000000..0e469d3c --- /dev/null +++ b/preview/pr-1492/api/latest/globals.html @@ -0,0 +1,156 @@ + + + + + + + + +RTAB-Map: File Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented file members with links to the documentation:
+ +

- u -

+
+ + + + diff --git a/preview/pr-1492/api/latest/globals_defs.html b/preview/pr-1492/api/latest/globals_defs.html new file mode 100644 index 00000000..6e1bfe2f --- /dev/null +++ b/preview/pr-1492/api/latest/globals_defs.html @@ -0,0 +1,90 @@ + + + + + + + + +RTAB-Map: File Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+
+ + + + diff --git a/preview/pr-1492/api/latest/globals_enum.html b/preview/pr-1492/api/latest/globals_enum.html new file mode 100644 index 00000000..636f0a1e --- /dev/null +++ b/preview/pr-1492/api/latest/globals_enum.html @@ -0,0 +1,85 @@ + + + + + + + + +RTAB-Map: File Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enums with links to the documentation:
+
+ + + + diff --git a/preview/pr-1492/api/latest/globals_func.html b/preview/pr-1492/api/latest/globals_func.html new file mode 100644 index 00000000..9764e081 --- /dev/null +++ b/preview/pr-1492/api/latest/globals_func.html @@ -0,0 +1,149 @@ + + + + + + + + +RTAB-Map: File Members + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- u -

+
+ + + + diff --git a/preview/pr-1492/api/latest/graph_legend.html b/preview/pr-1492/api/latest/graph_legend.html new file mode 100644 index 00000000..e3e0242a --- /dev/null +++ b/preview/pr-1492/api/latest/graph_legend.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Graph Legend + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/graph_legend.md5 b/preview/pr-1492/api/latest/graph_legend.md5 new file mode 100644 index 00000000..da515da9 --- /dev/null +++ b/preview/pr-1492/api/latest/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/preview/pr-1492/api/latest/graph_legend.png b/preview/pr-1492/api/latest/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..15bf62a2f49d3dcd38283293de89b3390e2981b5 GIT binary patch literal 23370 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/group__ComputeNormalsComplexity.html b/preview/pr-1492/api/latest/group__ComputeNormalsComplexity.html new file mode 100644 index 00000000..ed27ce9c --- /dev/null +++ b/preview/pr-1492/api/latest/group__ComputeNormalsComplexity.html @@ -0,0 +1,131 @@ + + + + + + + + +RTAB-Map: Compute Structural Complexity of a Point Cloud with Normals + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Compute Structural Complexity of a Point Cloud with Normals
+
+
+ +

Computes the complexity of surface normals in a point cloud using PCA. +More...

+ + + + + + + + + + + + + + + + + +

+Functions

+float RTABMAP_CORE_EXPORT rtabmap::util3d::computeNormalsComplexity (const LaserScan &scan, const Transform &t=Transform::getIdentity(), cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)
 Computes the complexity of surface normals in a point cloud of type LaserScan.
 
+float RTABMAP_CORE_EXPORT rtabmap::util3d::computeNormalsComplexity (const pcl::PointCloud< pcl::Normal > &normals, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)
 Computes the complexity of surface normals in a point cloud of type pcl::Normal.
 
+float RTABMAP_CORE_EXPORT rtabmap::util3d::computeNormalsComplexity (const pcl::PointCloud< pcl::PointNormal > &cloud, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)
 Computes the complexity of surface normals in a point cloud of type pcl::PointNormal.
 
+float RTABMAP_CORE_EXPORT rtabmap::util3d::computeNormalsComplexity (const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)
 Computes the complexity of surface normals in a point cloud of type pcl::PointXYZINormal.
 
+float RTABMAP_CORE_EXPORT rtabmap::util3d::computeNormalsComplexity (const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)
 Computes the complexity of surface normals in a point cloud of type pcl::PointXYZRGBNormal.
 
+

Detailed Description

+

Computes the complexity of surface normals in a point cloud using PCA.

+

This function performs a Principal Component Analysis (PCA) on the normals of a point cloud and returns a scalar measure of their spread (complexity). A low value indicates that normals are aligned (e.g., flat surface), while a high value indicates variation in orientation (e.g., curved or rough surface).

+

If a transformation is provided, the normals are rotated accordingly before PCA. The result is normalized to lie between 0 and 1, where 0 represents minimal complexity (the normals are confined to a lower-dimensional subspace, e.g. a flat surface) and 1 represents maximal complexity (the normal directions are isotropic).

+
Parameters
+ + + + + + + +
cloudThe input point cloud or laser scan containing normals (pcl::PointNormal), or simply normals.
tThe transform to apply to the normals (only the rotation is used).
is2dSet to true if the data is 2D (normals will be analyzed in 2D space).
pcaEigenVectors(Optional) Output matrix containing the eigenvectors computed by PCA.
pcaEigenValues(Optional) Output matrix containing the eigenvalues computed by PCA.
centeredWhen true (default), use covariance PCA (centered at mean). Use false for the uncentered second-moment matrix M = (1/N) sum(n_i * n_i^T), which measures span of normal directions and correctly identifies degeneracy even when there are only N (rather than N+1) distinct viewpoint-flipped normal directions in N-D space.
+
+
+
Returns
A float value between 0 and 1 representing the complexity of the normal distribution. Returns 0 if not enough valid normals are available.
+
Note
Invalid normals (containing NaN or Inf) are automatically filtered out. The result is the smallest eigenvalue (2nd in 2D, 3rd in 3D) scaled by the number of dimensions (2 or 3), so that it is normalized against the unit-norm normals.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__ComputeVarianceAndCorrespondences.html b/preview/pr-1492/api/latest/group__ComputeVarianceAndCorrespondences.html new file mode 100644 index 00000000..5dba412e --- /dev/null +++ b/preview/pr-1492/api/latest/group__ComputeVarianceAndCorrespondences.html @@ -0,0 +1,132 @@ + + + + + + + + +RTAB-Map: Compute Variance and Correspondences of Two Point Clouds + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Compute Variance and Correspondences of Two Point Clouds
+
+
+ +

Computes the geometric variance and number of valid correspondences between two point clouds. +More...

+ + + + + + + + + + + + + + +

+Functions

+void RTABMAP_CORE_EXPORT rtabmap::util3d::computeVarianceAndCorrespondences (const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudB, double maxCorrespondenceDistance, double maxCorrespondenceAngle, double &variance, int &correspondencesOut, bool reciprocal)
 Compute with variance and correspondences of pcl::PointNormal point cloud type.
 
+void RTABMAP_CORE_EXPORT rtabmap::util3d::computeVarianceAndCorrespondences (const pcl::PointCloud< pcl::PointXYZINormal >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointXYZINormal >::ConstPtr &cloudB, double maxCorrespondenceDistance, double maxCorrespondenceAngle, double &variance, int &correspondencesOut, bool reciprocal)
 Compute with variance and correspondences of pcl::PointXYZINormal point cloud type.
 
+void RTABMAP_CORE_EXPORT rtabmap::util3d::computeVarianceAndCorrespondences (const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloudB, double maxCorrespondenceDistance, double &variance, int &correspondencesOut, bool reciprocal)
 Compute with variance and correspondences of pcl::PointXYZ point cloud type.
 
+void RTABMAP_CORE_EXPORT rtabmap::util3d::computeVarianceAndCorrespondences (const pcl::PointCloud< pcl::PointXYZI >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointXYZI >::ConstPtr &cloudB, double maxCorrespondenceDistance, double &variance, int &correspondencesOut, bool reciprocal)
 Compute with variance and correspondences of pcl::PointXYZI point cloud type.
 
+

Detailed Description

+

Computes the geometric variance and number of valid correspondences between two point clouds.

+

This function estimates correspondences between two point clouds and computes a variance measure (based on squared median error) for the inlier correspondences. Optionally filters correspondences by normal alignment angle if the point cloud has normals.

+

The correspondence estimation uses PCL's reciprocal correspondence logic by default. The target and source clouds are automatically chosen based on their sizes (the larger becomes the target to ensure optimal matching behavior).

+
Parameters
+ + + + + + + + +
cloudAFirst input point cloud (used interchangeably with cloudB for matching).
cloudBSecond input point cloud.
maxCorrespondenceDistanceMaximum allowable Euclidean distance between correspondences.
maxCorrespondenceAngleMaximum angle (in radians) between normals for correspondences to be considered valid. If ≤ 0, angle filtering is disabled.
[out]varianceOutput variance value (estimated using 2.1981 × median squared distance of inliers).
[out]correspondencesOutOutput number of correspondences that passed all filters (distance and optional angle).
reciprocalIf true, use reciprocal correspondences.
+
+
+
Note
This function chooses the target/source roles based on cloud size (the larger becomes the target).
+
+The normal comparison is only applied if maxCorrespondenceAngle > 0.
+
+The computed variance is based on a robust estimator using the median squared distance of correspondences.
+
See also
pcl::registration::CorrespondenceEstimation
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__CropBox.html b/preview/pr-1492/api/latest/group__CropBox.html new file mode 100644 index 00000000..83be1d33 --- /dev/null +++ b/preview/pr-1492/api/latest/group__CropBox.html @@ -0,0 +1,167 @@ + + + + + + + + +RTAB-Map: Crop Box Filtering + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Crop Box Filtering
+
+
+ +

Filters points from a point cloud using a 3D crop box. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PCLPointCloud2::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PCLPointCloud2 and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZ and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointNormal and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZRGB and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZRGBNormal and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZI and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZINormal and returns filtered indices.
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZ and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointNormal and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZRGB and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZI and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZINormal and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::cropBox (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
 Performs crop box filtering on a point cloud of type pcl::PointXYZRGBNormal and returns a new point cloud of the filtered points.
 
+

Detailed Description

+

Filters points from a point cloud using a 3D crop box.

+

This function applies a PCL CropBox filter to retain or exclude points from the input point cloud that lie within a specified 3D axis-aligned bounding box, optionally transformed by a 3D transformation. The filter can be applied to the entire cloud or limited to a subset via input indices.

+
Parameters
+ + + + + + + +
cloudA pointer to the input point cloud to be filtered.
indicesA pointer to a vector of point indices that restricts the filtering to a subset of the cloud. Pass nullptr to apply the filter to all points in the cloud.
minThe minimum (corner) boundary of the crop box, as an Eigen 4D vector (x, y, z, _).
maxThe maximum (corner) boundary of the crop box, as an Eigen 4D vector (x, y, z, _).
transformA transformation to be applied to the crop box (not the cloud). If the transform is null or identity, no transformation is applied.
negativeIf true, the filter will exclude points inside the box; if false, it will include only those inside.
+
+
+
Returns
The indices corresponding to the points that passed the filter, or the new filtered point cloud otherwise.
+
Exceptions
+ + +
Assertionfailure if any of min[x] >= max[x], min[y] >= max[y], or min[z] >= max[z].
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__ExtractClusters.html b/preview/pr-1492/api/latest/group__ExtractClusters.html new file mode 100644 index 00000000..90b86ef4 --- /dev/null +++ b/preview/pr-1492/api/latest/group__ExtractClusters.html @@ -0,0 +1,147 @@ + + + + + + + + +RTAB-Map: Point Cloud Cluster Extraction + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Point Cloud Cluster Extraction
+
+
+ +

Performs Euclidean cluster extraction on a point cloud. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT rtabmap::util3d::extractClusters (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
 Extract clusters from point cloud of type pcl::PointXYZ.
 
+std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT rtabmap::util3d::extractClusters (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
 Extract clusters from point cloud of type pcl::PointXYZRGB.
 
+std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT rtabmap::util3d::extractClusters (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
 Extract clusters from point cloud of type pcl::PointXYZ inside provided indices.
 
+std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT rtabmap::util3d::extractClusters (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
 Extract clusters from point cloud of type pcl::PointNormal inside provided indices.
 
+std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT rtabmap::util3d::extractClusters (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
 Extract clusters from point cloud of type pcl::PointXYZRGB inside provided indices.
 
+std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT rtabmap::util3d::extractClusters (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
 Extract clusters from point cloud of type pcl::PointXYZRGBNormal inside provided indices.
 
+std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT rtabmap::util3d::extractClusters (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
 Extract clusters from point cloud of type pcl::PointXYZI inside provided indices.
 
+std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT rtabmap::util3d::extractClusters (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
 Extract clusters from point cloud of type pcl::PointXYZ.
 
+

Detailed Description

+

Performs Euclidean cluster extraction on a point cloud.

+

This function uses PCL's Euclidean clustering algorithm to segment the input point cloud into clusters based on spatial proximity. It optionally considers a subset of indices within the cloud, and returns the list of clusters as vectors of point indices.

+

Additionally, it can return the index of the largest cluster found.

+
Parameters
+ + + + + + + +
cloudThe input point cloud from which clusters will be extracted.
indicesOptional pointer to a list of indices to consider for clustering. If empty, the full cloud is used.
clusterToleranceThe spatial distance threshold for clustering. Points within this distance are considered part of the same cluster.
minClusterSizeThe minimum number of points required for a valid cluster.
maxClusterSizeThe maximum number of points allowed in a cluster.
biggestClusterIndexOptional output pointer. If not null, it will be set to the index of the largest cluster in the output.
+
+
+
Returns
A vector of indices, where each element contains the indices of one extracted cluster.
+
Note
Internally, this uses a KdTree for spatial searches and pcl::EuclideanClusterExtraction for segmentation.
+
+The order of clusters in the output is not guaranteed to reflect size or position.
+
+If no clusters are found, the output vector will be empty and biggestClusterIndex will be set to -1.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__ExtractIndices.html b/preview/pr-1492/api/latest/group__ExtractIndices.html new file mode 100644 index 00000000..c654205d --- /dev/null +++ b/preview/pr-1492/api/latest/group__ExtractIndices.html @@ -0,0 +1,154 @@ + + + + + + + + +RTAB-Map: Point Cloud Indices Extraction + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Point Cloud Indices Extraction
+
+
+ +

Extracts a subset of points from a point cloud based on specified indices. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)
 Extract indices from point cloud of type pcl::PointXYZ.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)
 Extract indices from point cloud of type pcl::PointNormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)
 Extract indices from point cloud of type pcl::PointXYZRGB.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)
 Extract indices from point cloud of type pcl::PointXYZRGBNormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)
 Extract indices from point cloud of type pcl::PointXYZI.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)
 Extract indices from point cloud of type pcl::PointXYZINormal.
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)
 Extract points from point cloud of type pcl::PointXYZ with corresponding indices.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)
 Extract points from point cloud of type pcl::PointXYZRGB with corresponding indices.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)
 Extract points from point cloud of type pcl::PointXYZRGBNormal with corresponding indices.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)
 Extract points from point cloud of type pcl::PointXYZI with corresponding indices.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::extractIndices (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)
 Extract points from point cloud of type pcl::PointXYZINormal with corresponding indices.
 
+

Detailed Description

+

Extracts a subset of points from a point cloud based on specified indices.

+

This function filters the input point cloud by extracting the points corresponding to the provided set of indices. The negative parameter determines whether to extract the points listed in the indices (if negative is false) or to exclude the points listed in the indices (if negative is true).

+

The function uses PCL's ExtractIndices to perform the extraction and returns the resulting set of indices as a shared pointer to a vector of integers.

+
Parameters
+ + + + +
cloudThe input point cloud from which to extract points.
indicesA pointer to the indices specifying the points to be extracted (or excluded).
negativeIf true, the points specified by indices are excluded; otherwise, they are included.
+
+
+
Returns
A vector of indices representing the extracted points (or remaining points if negative is true), or a new point cloud with the corresponding points.
+
Note
This function uses PCL's ExtractIndices filter to extract or remove the points based on the provided indices.
+
+The returned output indices correspond to the points that are either extracted or excluded from the input cloud.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__FrustumFiltering.html b/preview/pr-1492/api/latest/group__FrustumFiltering.html new file mode 100644 index 00000000..f24d3be6 --- /dev/null +++ b/preview/pr-1492/api/latest/group__FrustumFiltering.html @@ -0,0 +1,135 @@ + + + + + + + + +RTAB-Map: Frustum Filtering + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Frustum Filtering
+
+
+ +

Filters points from a point cloud based on a camera frustum. +More...

+ + + + + + + + + + + +

+Functions

+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::frustumFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)
 Performs frustum filtering on a point cloud of type pcl::PointXYZ and returns filtered indices.
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::frustumFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)
 Performs frustum filtering on a point cloud of type pcl::PointXYZ and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::frustumFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)
 Performs frustum filtering on a point cloud of type pcl::PointXYZRGB and returns a new point cloud of the filtered points.
 
+

Detailed Description

+

Filters points from a point cloud based on a camera frustum.

+

This function uses PCL's FrustumCulling filter to include or exclude points from a 3D point cloud that lie within a specified camera frustum. The frustum is defined by vertical and horizontal field of view angles, near and far clipping planes, and the camera pose. It can optionally apply filtering on a subset of points specified by indices.

+
Note
This assumes the pose includes the optical rotation of the camera (X right, Y down, Z forward).
+
Parameters
+ + + + + + + + + +
cloudA pointer to the input point cloud to be filtered.
indicesA pointer to the subset of indices in the point cloud to consider for filtering. Pass nullptr to apply the filter to the full cloud.
cameraPoseThe transformation representing the camera pose in world coordinates. This defines the position and orientation of the frustum.
horizontalFOVThe horizontal field of view in degrees (e.g., computed as atan((image width/2)/fx) * 2).
verticalFOVThe vertical field of view in degrees (e.g., atan((image height/2)/fy) * 2).
nearClipPlaneDistanceThe distance from the camera to the near clipping plane.
farClipPlaneDistanceThe distance from the camera to the far clipping plane.
negativeIf true, the filter will exclude points inside the frustum. If false, it will include only those inside.
+
+
+
Returns
The indices representing the points that passed the filter, or a new filtered point cloud.
+
Exceptions
+ + +
Assertionfailure if:
    +
  • horizontalFOV <= 0 or verticalFOV <= 0,
  • +
  • farClipPlaneDistance <= nearClipPlaneDistance,
  • +
  • cameraPose is null.
  • +
+
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__LaserScan2dFromPointCloud.html b/preview/pr-1492/api/latest/group__LaserScan2dFromPointCloud.html new file mode 100644 index 00000000..dbbab401 --- /dev/null +++ b/preview/pr-1492/api/latest/group__LaserScan2dFromPointCloud.html @@ -0,0 +1,140 @@ + + + + + + + + +RTAB-Map: PCL to 2D LaserScan + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
PCL to 2D LaserScan
+
+
+ +

Converts various PCL point cloud types into a unified 2D LaserScan format. +More...

+ + + + + + + + + + + + + + + + + + + + +

+Functions

+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScan2dFromPointCloud (const pcl::PointCloud< pcl::PointXYZ > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 PointXYZ → LaserScan::kXY
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScan2dFromPointCloud (const pcl::PointCloud< pcl::PointXYZI > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 PointXYZI → LaserScan::kXYI (x, y, intensity)
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScan2dFromPointCloud (const pcl::PointCloud< pcl::PointNormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 PointNormal → LaserScan::kXYNormal (x, y, nx, ny, nz)
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScan2dFromPointCloud (const pcl::PointCloud< pcl::PointXYZ > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)
 PointXYZ + Normal → LaserScan::kXYNormal (x, y, nx, ny, nz)
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScan2dFromPointCloud (const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 PointXYZINormal → LaserScan::kXYINormal (x, y, inensity, nx, ny, nz)
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScan2dFromPointCloud (const pcl::PointCloud< pcl::PointXYZI > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)
 PointXYZI + Normal → LaserScan::kXYINormal (x, y, inensity, nx, ny, nz)
 
+

Detailed Description

+

Converts various PCL point cloud types into a unified 2D LaserScan format.

+

Returns only XY data, with optional intensity and/or normals.

+

+Output:

+ +
Parameters
+ + + + + +
cloudThe input cloud (2D assumed).
normalsOptional normal cloud.
transformOptional transformation to apply.
filterNaNsWhether to ignore invalid points.
+
+
+
Returns
A 2D LaserScan.
+
See also
laserScanFromPointCloud() for 3D extraction.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__LaserScanFromPointCloud.html b/preview/pr-1492/api/latest/group__LaserScanFromPointCloud.html new file mode 100644 index 00000000..307ae5a0 --- /dev/null +++ b/preview/pr-1492/api/latest/group__LaserScanFromPointCloud.html @@ -0,0 +1,239 @@ + + + + + + + + +RTAB-Map: PCL to 3D LaserScan + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
PCL to 3D LaserScan
+
+
+ +

Converts various PCL point cloud types into a unified LaserScan format. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZ > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZ → (x, y, z) → LaserScan::kXYZ
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZ > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZ → (x, y, z) → LaserScan::kXYZ
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointNormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointNormal → (x, y, z, nx, ny, nz) → LaserScan::kXYZNormal
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointNormal > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointNormal → (x, y, z, nx, ny, nz) → LaserScan::kXYZNormal
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZ > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointNormal → (x, y, z, nx, ny, nz) → LaserScan::kXYZNormal
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZRGB → (x, y, z, rgb) → LaserScan::kXYZRGB
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZRGB → (x, y, z, rgb) → LaserScan::kXYZRGB
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZI > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZI → (x, y, z, intensity) → LaserScan::kXYZI
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZI > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZI → (x, y, z, intensity) → LaserScan::kXYZI
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< rtabmap::PointXYZIRT > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 rtabmap::PointXYZIRT → (x, y, z, intensity, ring time) → LaserScan::kXYZIRT
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< rtabmap::PointXYZIRT > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)
 rtabmap::PointXYZIRT → (x, y, z, intensity, ring time) → LaserScan::kXYZIRT
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZRGBNormal → (x, y, z, rgb, nx, ny, nz) → LaserScan::kXYZRGBNormal
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZRGBNormal → (x, y, z, rgb, nx, ny, nz) → LaserScan::kXYZRGBNormal
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZRGBNormal → (x, y, z, rgb, nx, ny, nz) → LaserScan::kXYZRGBNormal
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZI > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZINormal → (x, y, z, intensity, nx, ny, nz) → LaserScan::kXYZINormal
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZINormal → (x, y, z, intensity, nx, ny, nz) → LaserScan::kXYZINormal
 
+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanFromPointCloud (const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)
 pcl::PointXYZINormal → (x, y, z, intensity, nx, ny, nz) → LaserScan::kXYZINormal
 
template<typename PointCloud2T >
LaserScan rtabmap::util3d::laserScanFromPointCloud (const PointCloud2T &cloud, bool filterNaNs=true, bool is2D=false, const Transform &transform=Transform())
 Convert pcl::PCLPointCloud2 to rtabmap::LaserScan with all supported fields (see rtabmap::LaserScan::Format)
 
+

Detailed Description

+

Converts various PCL point cloud types into a unified LaserScan format.

+

These functions extract laser scan data from 3D point clouds, optionally applying a transform and filtering invalid points. Depending on the input type, output data may include position (x, y, z), intensity, color, and/or surface normals.

+

+Supported input types and corresponding output data:

+ +
Parameters
+ + + + + + +
cloudThe input PCL point cloud.
indicesOptional subset of indices to use from the point cloud.
normalsOptional normal cloud if not included in point type.
transformOptional rigid body transform to apply to the points.
filterNaNsWhether to ignore invalid or NaN points.
+
+
+
Returns
A LaserScan object containing scan data in appropriate format.
+
See also
laserScan2dFromPointCloud() for 2D-only extraction.
+

Function Documentation

+ +

◆ laserScanFromPointCloud()

+ +
+
+
+template<typename PointCloud2T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LaserScan rtabmap::util3d::laserScanFromPointCloud (const PointCloud2T & cloud,
bool filterNaNs,
bool is2D,
const Transform & transform 
)
+
+ +

Convert pcl::PCLPointCloud2 to rtabmap::LaserScan with all supported fields (see rtabmap::LaserScan::Format)

+ +

Definition at line 37 of file util3d.hpp.

+ +
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__LaserScanToPointCloud.html b/preview/pr-1492/api/latest/group__LaserScanToPointCloud.html new file mode 100644 index 00000000..16ea149d --- /dev/null +++ b/preview/pr-1492/api/latest/group__LaserScanToPointCloud.html @@ -0,0 +1,138 @@ + + + + + + + + +RTAB-Map: LaserScan to PCL + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
LaserScan to PCL
+
+
+ +

Functions to convert LaserScan data to various PCL point cloud formats. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::PCLPointCloud2::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointCloud2 (const LaserScan &laserScan, const Transform &transform=Transform())
 Convert rtabmap::LaserScan to pcl::PCLPointCloud2 with all supported fields (see rtabmap::LaserScan::Format)
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointCloud (const LaserScan &laserScan, const Transform &transform=Transform())
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointCloudNormal (const LaserScan &laserScan, const Transform &transform=Transform())
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointCloudRGB (const LaserScan &laserScan, const Transform &transform=Transform(), unsigned char r=100, unsigned char g=100, unsigned char b=100)
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointCloudI (const LaserScan &laserScan, const Transform &transform=Transform(), float intensity=0.0f)
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointCloudRGBNormal (const LaserScan &laserScan, const Transform &transform=Transform(), unsigned char r=100, unsigned char g=100, unsigned char b=100)
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointCloudINormal (const LaserScan &laserScan, const Transform &transform=Transform(), float intensity=0.0f)
 
+pcl::PointXYZ RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPoint (const LaserScan &laserScan, int index)
 
+pcl::PointNormal RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointNormal (const LaserScan &laserScan, int index)
 
+pcl::PointXYZRGB RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointRGB (const LaserScan &laserScan, int index, unsigned char r=100, unsigned char g=100, unsigned char b=100)
 
+pcl::PointXYZI RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointI (const LaserScan &laserScan, int index, float intensity)
 
+pcl::PointXYZRGBNormal RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointRGBNormal (const LaserScan &laserScan, int index, unsigned char r, unsigned char g, unsigned char b)
 
+pcl::PointXYZINormal RTABMAP_CORE_EXPORT rtabmap::util3d::laserScanToPointINormal (const LaserScan &laserScan, int index, float intensity)
 
+

Detailed Description

+

Functions to convert LaserScan data to various PCL point cloud formats.

+

These functions convert an instance of rtabmap::LaserScan to different PCL point cloud types, optionally applying a spatial transform. Missing data such as RGB and intensity are handled with default values. If the input LaserScan is 2D, as PCL doesn't have standard format that is just 2D, Z will be set to zero. If the input LaserScan doesn't have normals but the output does, the normals are set to zeros.

+

laserScanToPoint() functions convert a single point from the LaserScan at the specificied index.

+
+ + + + diff --git a/preview/pr-1492/api/latest/group__PassThrough.html b/preview/pr-1492/api/latest/group__PassThrough.html new file mode 100644 index 00000000..c6b3be1c --- /dev/null +++ b/preview/pr-1492/api/latest/group__PassThrough.html @@ -0,0 +1,163 @@ + + + + + + + + +RTAB-Map: Pass-through Filtering + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Pass-through Filtering
+
+
+ +

Filters points from the input point cloud using a pass-through filter along a specified axis. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZ and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZRGB and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZI and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointNormal and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZRGBNormal and returns filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZINormal and returns filtered indices.
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZ and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZRGB and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZI and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointNormal and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZRGBNormal and returns a new point cloud of the filtered points.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::passThrough (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)
 Performs pass-through filtering on a point cloud of type pcl::PointXYZINormal and returns a new point cloud of the filtered points.
 
+

Detailed Description

+

Filters points from the input point cloud using a pass-through filter along a specified axis.

+

This function applies a PCL PassThrough filter to include or exclude points in the input cloud that fall within a specified range along a given axis (x, y, or z). It supports optional filtering using a subset of point indices and can perform either inclusive or exclusive filtering depending on the negative flag.

+
Parameters
+ + + + + + + +
cloudA pointer to the input point cloud to be filtered.
indicesA pointer to the indices specifying which points in the cloud to consider for filtering. Pass nullptr to apply the filter to the entire cloud.
axisThe axis ("x", "y", or "z") along which the filtering will be applied.
minThe minimum limit of the pass-through filter (inclusive by default).
maxThe maximum limit of the pass-through filter (inclusive by default). Must be greater than min.
negativeIf true, the filter will exclude points within the limits; if false, it will include only those within.
+
+
+
Returns
The indices representing the points that passed the filter if indices are passed to the function, or the new filtered point cloud otherwise.
+
Exceptions
+ + +
Assertionfailure if max <= min or if axis is not "x", "y", or "z".
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__PointCloudDownSampling.html b/preview/pr-1492/api/latest/group__PointCloudDownSampling.html new file mode 100644 index 00000000..ed145845 --- /dev/null +++ b/preview/pr-1492/api/latest/group__PointCloudDownSampling.html @@ -0,0 +1,145 @@ + + + + + + + + +RTAB-Map: Point Cloud Downsampling + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Point Cloud Downsampling
+
+
+ +

Downsamples a point cloud or LaserScan by keeping only every N-th point. +More...

+ + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+LaserScan RTABMAP_CORE_EXPORT rtabmap::util3d::downsample (const LaserScan &cloud, int step)
 Downsamples a LaserScan.
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::downsample (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, int step)
 Downsamples a point cloud of type pcl::PointXYZ.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::downsample (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, int step)
 Downsamples a point cloud of type pcl::PointXYZRGB.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::downsample (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, int step)
 Downsamples a point cloud of type pcl::PointXYZI.
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::downsample (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, int step)
 Downsamples a point cloud of type pcl::PointNormal.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::downsample (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, int step)
 Downsamples a point cloud of type pcl::PointXYZRGBNormal.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::downsample (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, int step)
 Downsamples a point cloud of type pcl::PointXYZINormal.
 
+

Detailed Description

+

Downsamples a point cloud or LaserScan by keeping only every N-th point.

+

This function downsamples a point cloud based on a specified step size. The method adapts based on whether the cloud is organized (2D) or unorganized (1D), and whether it's structured like a depth image or LiDAR scan.

+
    +
  • For unorganized point clouds: Every step-th point is retained linearly.
  • +
  • For organized point clouds with LiDAR-like layout (e.g., 2048x64): Downsampling is performed along the "long" dimension, preserving the ring structure.
  • +
  • For depth-image-like organized clouds (e.g., 640x480): Downsampling is performed in both row and column directions, similar to image decimation. Step size must divide both width and height exactly.
  • +
+
Parameters
+ + + +
cloudThe input point cloud to downsample.
stepThe decimation step. Must be greater than 0.
+
+
+
Returns
A new point cloud containing only the sampled points.
+
Note
If step <= 1 or the cloud has fewer points than step, the function returns a copy of the input cloud.
+
Exceptions
+ + +
Assertionfailure if step <= 0 or, in the case of depth-image-style clouds, if the width and height are not divisible by step.
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__PointCloudRangeFiltering.html b/preview/pr-1492/api/latest/group__PointCloudRangeFiltering.html new file mode 100644 index 00000000..cb32820e --- /dev/null +++ b/preview/pr-1492/api/latest/group__PointCloudRangeFiltering.html @@ -0,0 +1,130 @@ + + + + + + + + +RTAB-Map: Range Filtering of PCL Point Clouds + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Range Filtering of PCL Point Clouds
+
+
+ +

Filters a point cloud based on a minimum and maximum Euclidean range. +More...

+ + + + + + + + + + + + + + +

+Functions

+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::rangeFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)
 Filters a point cloud of type pcl::PointXYZ.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::rangeFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)
 Filters a point cloud of type pcl::PointXYZRGB.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::rangeFiltering (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)
 Filters a point cloud of type pcl::PointNormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::rangeFiltering (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)
 Filters a point cloud of type pcl::PointXYZRGBNormal.
 
+

Detailed Description

+

Filters a point cloud based on a minimum and maximum Euclidean range.

+

This templated function computes the squared Euclidean distance of each point in the given point cloud and returns indices of points whose distance falls within the specified range limits. If no indices are provided, the entire cloud is evaluated.

+
Parameters
+ + + + + +
cloudThe input point cloud to be filtered.
indicesThe subset of point indices to evaluate. If empty, the full cloud is used.
rangeMinMinimum distance threshold. Points closer than this are excluded.
rangeMaxMaximum distance threshold. Points farther than this are excluded.
+
+
+
Returns
pcl::IndicesPtr Pointer to a vector of indices that passed the range filter.
+
Note
Both rangeMin and rangeMax must be non-negative. If both are zero, no filtering is applied.
+
Exceptions
+ + +
Assertionfailure if rangeMin or rangeMax is negative.
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__PointCloudSplitRangeFiltering.html b/preview/pr-1492/api/latest/group__PointCloudSplitRangeFiltering.html new file mode 100644 index 00000000..86ff9be8 --- /dev/null +++ b/preview/pr-1492/api/latest/group__PointCloudSplitRangeFiltering.html @@ -0,0 +1,124 @@ + + + + + + + + +RTAB-Map: Split Range Filtering of PCL Point Clouds + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Split Range Filtering of PCL Point Clouds
+
+
+ +

Splits a point cloud into two groups based on a distance threshold. +More...

+ + + + + + + + + + + + + + +

+Functions

+void RTABMAP_CORE_EXPORT rtabmap::util3d::rangeSplitFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)
 Splits a point cloud of type pcl::PointXYZ.
 
+void RTABMAP_CORE_EXPORT rtabmap::util3d::rangeSplitFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)
 Splits a point cloud of type pcl::PointXYZRGB.
 
+void RTABMAP_CORE_EXPORT rtabmap::util3d::rangeSplitFiltering (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)
 Splits a point cloud of type pcl::PointNormal.
 
+void RTABMAP_CORE_EXPORT rtabmap::util3d::rangeSplitFiltering (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)
 Splits a point cloud of type pcl::PointXYZRGBNormal.
 
+

Detailed Description

+

Splits a point cloud into two groups based on a distance threshold.

+

This function divides the input point cloud (or a subset specified by indices) into two sets of indices: points closer than the given range (closeIndices) and points farther than or equal to the range (farIndices), using Euclidean distance.

+
Parameters
+ + + + + + +
cloudThe input point cloud.
indicesThe subset of point indices to consider. If empty, the full cloud is used.
rangeThe distance threshold in meters used to classify points as "close" or "far".
[out]closeIndicesOutput indices for points with distance < range.
[out]farIndicesOutput indices for points with distance >= range.
+
+
+
Note
The function resets and fills both output index containers. If the input cloud is empty, both outputs will also be empty.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__PointNormalFiltering.html b/preview/pr-1492/api/latest/group__PointNormalFiltering.html new file mode 100644 index 00000000..126f65af --- /dev/null +++ b/preview/pr-1492/api/latest/group__PointNormalFiltering.html @@ -0,0 +1,146 @@ + + + + + + + + +RTAB-Map: Point Normal Filtering + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Point Normal Filtering
+
+
+ +

Filters points in a point cloud based on the angle between their estimated surface normals and a given reference normal. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::normalFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
 Point normal filtering for point cloud of type pcl::PointXYZ.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::normalFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
 Point normal filtering for point cloud of type pcl::PointXYZRGB.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::normalFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
 Point normal filtering for point cloud of type pcl::PointXYZ.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::normalFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
 Point normal filtering for point cloud of type pcl::PointXYZRGB.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::normalFiltering (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
 Point normal filtering for point cloud of type pcl::PointXYZI.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::normalFiltering (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
 Point normal filtering for point cloud of type pcl::PointNormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::normalFiltering (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
 Point normal filtering for point cloud of type pcl::PointXYZRGBNormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::normalFiltering (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
 Point normal filtering for point cloud of type pcl::PointXYZINormal.
 
+

Detailed Description

+

Filters points in a point cloud based on the angle between their estimated surface normals and a given reference normal.

+

This function estimates surface normals for each point (or subset of points) in the input point cloud, and retains only those points whose normals are within angleMax radians from the given reference normal.

+

If groundNormalsUp is set, normals that are facing significantly downward (based on the Z-axis) may be flipped to point upwards before comparison, especially useful for handling sensors like Velodyne where some road-facing rays produce downward normals.

+
Parameters
+ + + + + + + + +
cloudThe input point cloud to process. If the input cloud type doesn't have normals, the normals will be computed using normalKSearh and viewpoint parameters.
indicesOptional subset of indices in cloud to consider. If empty, the entire cloud is used.
angleMaxMaximum allowed angle (in radians) between estimated normals and the given reference normal.
normalThe reference normal vector to compare against (must be normalized).
normalKSearchNumber of nearest neighbors used for normal estimation, when input cloud doesn't have normals.
viewpointThe viewpoint position to be used in normal estimation (can affect direction of normals).
groundNormalsUpThreshold used to detect and flip ground-facing normals (set to 0.0f to disable). If the Z component of a normal is less than -groundNormalsUp and the corresponding point is below the viewpoint, the normal will be flipped.
+
+
+
Returns
The indices of points whose normals are within angleMax of the reference normal.
+
Note
This function uses PCL's NormalEstimationOMP for efficient multi-threaded normal estimation when input cloud doesn't have normals.
+
+Normal flipping is typically used to correct misoriented normals on flat ground surfaces.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__ProportionalRadiusFiltering.html b/preview/pr-1492/api/latest/group__ProportionalRadiusFiltering.html new file mode 100644 index 00000000..e4287b26 --- /dev/null +++ b/preview/pr-1492/api/latest/group__ProportionalRadiusFiltering.html @@ -0,0 +1,166 @@ + + + + + + + + +RTAB-Map: Proportional Radius Filtering + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Proportional Radius Filtering
+
+
+ +

Performs proportional radius outlier filtering using viewpoint-dependent adaptive radii. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZ.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointNormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZRGB.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZRGBNormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZI.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZINormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZ with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointNormal with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZRGB with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZRGBNormal with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZI with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::proportionalRadiusFiltering (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
 Proportional radius filtering for point cloud of type pcl::PointXYZINormal with indices.
 
+

Detailed Description

+

Performs proportional radius outlier filtering using viewpoint-dependent adaptive radii.

+

This function filters a point cloud by performing a radius search for each point, where the radius is proportional to the distance from a known viewpoint. A point is retained only if it has at least one neighbor within the computed radius, and all neighbors lie within an adjusted radius from their own viewpoints, scaled by neighborScale.

+

This method is useful in 3D reconstruction and SLAM where density can vary with distance from the sensor, and traditional fixed-radius filtering is insufficient.

+
Parameters
+ + + + + + + +
cloudThe input point cloud.
indicesThe subset of indices to process. If empty, the entire cloud is processed.
viewpointIndicesA vector mapping each point index in the cloud to its associated viewpoint ID. Must be the same size as the input cloud.
viewpointsA map from viewpoint IDs to 3D poses (transforms) representing sensor positions.
factorA scaling factor used to determine the radius search distance based on viewpoint distance. Must be greater than 0. Setting it higher will filter points farther from the more accurate points (but processing time will be also higher).
neighborScaleA scaling factor applied to neighbors' viewpoint-based radius. Must be ≥ 1. Setting it higher will accept more noisy points close to the more accurate points (but processing time will be also higher).
+
+
+
Returns
A vector of indices of the points that passed the filtering criteria.
+
Note
    +
  • A KdTree is used for neighbor search.
  • +
  • Points with no valid neighbors within the proportional radius are removed.
  • +
  • For a point to be kept, all its neighbors (except itself) must also lie within their own scaled proportional radius (factor * distance_to_own_viewpoint * neighborScale).
  • +
  • OpenMP is used to parallelize the full-cloud version for performance.
  • +
  • The function throws exceptions to enforce internal assumptions (e.g., input sizes and valid viewpoint mappings).
  • +
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__RadiusFiltering.html b/preview/pr-1492/api/latest/group__RadiusFiltering.html new file mode 100644 index 00000000..a8ffa5c0 --- /dev/null +++ b/preview/pr-1492/api/latest/group__RadiusFiltering.html @@ -0,0 +1,157 @@ + + + + + + + + +RTAB-Map: Radius Filtering + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Radius Filtering
+
+
+ +

Filters points based on the number of neighbors within a given radius. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZ.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointNormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZRGB.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZRGBNormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZI.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZINormal.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZ with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointNormal with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZRGB with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZRGBNormal with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZI with indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::radiusFiltering (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)
 Radius filtering for point cloud of type pcl::PointXYZINormal with indices.
 
+

Detailed Description

+

Filters points based on the number of neighbors within a given radius.

+

This function performs a radius-based outlier filtering on a point cloud. It returns a set of point indices where each corresponding point has more than minNeighborsInRadius neighboring points within the specified radiusSearch.

+

If an input index list is provided (indices is non-empty), the filtering is applied only to those points. Otherwise, the function processes the entire cloud.

+
Parameters
+ + + + + +
cloudThe input point cloud.
indicesAn optional vector of indices specifying the subset of points to process.
radiusSearchThe radius within which to search for neighboring points.
minNeighborsInRadiusThe minimum number of neighbors required within the radius for a point to be retained.
+
+
+
Returns
A vector of indices of points that passed the filtering criteria.
+
Note
Uses a KdTree for efficient neighbor search. The +1 in minNeighborsInRadius + 1 accounts for the point itself being included in the neighbor list.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__RandomSampling.html b/preview/pr-1492/api/latest/group__RandomSampling.html new file mode 100644 index 00000000..345c05ad --- /dev/null +++ b/preview/pr-1492/api/latest/group__RandomSampling.html @@ -0,0 +1,135 @@ + + + + + + + + +RTAB-Map: Random Sampling + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Random Sampling
+
+
+ +

Randomly samples a subset of points from the input point cloud. +More...

+ + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::randomSampling (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, int samples)
 Performs random sampling on a point cloud of type pcl::PointXYZ.
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::randomSampling (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, int samples)
 Performs random sampling on a point cloud of type pcl::PointNormal.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::randomSampling (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, int samples)
 Performs random sampling on a point cloud of type pcl::PointXYZRGB.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::randomSampling (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, int samples)
 Performs random sampling on a point cloud of type pcl::PointXYZRGBNormal.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::randomSampling (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, int samples)
 Performs random sampling on a point cloud of type pcl::PointXYZI.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::randomSampling (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, int samples)
 Performs random sampling on a point cloud of type pcl::PointXYZINormal.
 
+

Detailed Description

+

Randomly samples a subset of points from the input point cloud.

+

This function uses the PCL (Point Cloud Library) RandomSample filter to randomly select a specified number of points from the input cloud. It ensures the number of samples is greater than zero and returns a new point cloud containing the sampled points.

+
Parameters
+ + + +
cloudA pointer to the input point cloud from which to sample points.
samplesThe number of points to randomly sample from the input cloud. Must be > 0.
+
+
+
Returns
A pointer to a new point cloud containing the randomly sampled points.
+
Exceptions
+ + +
Assertionfailure if samples <= 0.
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__RemoveNaNFromPointCloud.html b/preview/pr-1492/api/latest/group__RemoveNaNFromPointCloud.html new file mode 100644 index 00000000..98475223 --- /dev/null +++ b/preview/pr-1492/api/latest/group__RemoveNaNFromPointCloud.html @@ -0,0 +1,121 @@ + + + + + + + + +RTAB-Map: Remove NaN Points from a Point Cloud + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Remove NaN Points from a Point Cloud
+
+
+ +

Removes NaN (Not-a-Number) points from an organized point cloud. +More...

+ + + + + + + + + + + + + + +

+Functions

+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::removeNaNFromPointCloud (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud)
 Remove NaN points from a point cloud of type pcl::PointXYZ.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::removeNaNFromPointCloud (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud)
 Remove NaN points from a point cloud of type pcl::PointXYZRGB.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::removeNaNFromPointCloud (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud)
 Remove NaN points from a point cloud of type pcl::PointXYZI.
 
+pcl::PCLPointCloud2::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::removeNaNFromPointCloud (const pcl::PCLPointCloud2::Ptr &cloud)
 Remove NaN points from a point cloud of type pcl::PCLPointCloud2.
 
+

Detailed Description

+

Removes NaN (Not-a-Number) points from an organized point cloud.

+

This function takes a pointer to an organized PCL point cloud and returns a new dense point cloud with all NaN points removed. It uses the PCL function pcl::removeNaNFromPointCloud to perform the filtering.

+
Note
If the input cloud is already dense, no filtering happens and a copy of the input cloud is returned.
+
Parameters
+ + +
cloudThe organized input point cloud containing possible NaN values.
+
+
+
Returns
A new dense point cloud with NaN points removed.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__RemoveNaNNormalsFromPointCloud.html b/preview/pr-1492/api/latest/group__RemoveNaNNormalsFromPointCloud.html new file mode 100644 index 00000000..fc4f8395 --- /dev/null +++ b/preview/pr-1492/api/latest/group__RemoveNaNNormalsFromPointCloud.html @@ -0,0 +1,116 @@ + + + + + + + + +RTAB-Map: Remove NaN Points from a Point Cloud + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Remove NaN Points from a Point Cloud
+
+
+ +

Removes points with NaN normal values from a point cloud. +More...

+ + + + + + + + + + + +

+Functions

+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::removeNaNNormalsFromPointCloud (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud)
 Removes points with NaN normal values from a point cloud of type pcl::PointNormal.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::removeNaNNormalsFromPointCloud (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud)
 Removes points with NaN normal values from a point cloud of type pcl::PointXYZRGBNormal.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::removeNaNNormalsFromPointCloud (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud)
 Removes points with NaN normal values from a point cloud of type pcl::PointXYZINormal.
 
+

Detailed Description

+

Removes points with NaN normal values from a point cloud.

+

This function filters out all points in the input point cloud whose normal components contain NaN (Not-a-Number) values. It uses the PCL utility function pcl::removeNaNNormalsFromPointCloud to perform the filtering operation.

+
Parameters
+ + +
cloudThe input point cloud, which may contain NaN normal values.
+
+
+
Returns
A new point cloud with all NaN normals removed.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__RoiComputation.html b/preview/pr-1492/api/latest/group__RoiComputation.html new file mode 100644 index 00000000..14b17b6a --- /dev/null +++ b/preview/pr-1492/api/latest/group__RoiComputation.html @@ -0,0 +1,273 @@ + + + + + + + + +RTAB-Map: Region of Interest (ROI) Computation + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Region of Interest (ROI) Computation
+
+
+ + + + + + + + + + + + + + +

+Functions

cv::Rect RTABMAP_CORE_EXPORT rtabmap::util2d::computeRoi (const cv::Mat &image, const std::string &roiRatios)
 Computes a region of interest (ROI) in the image using string-defined ratios.
 
cv::Rect RTABMAP_CORE_EXPORT rtabmap::util2d::computeRoi (const cv::Size &imageSize, const std::string &roiRatios)
 Computes a region of interest (ROI) from an image size and a string of ratios.
 
cv::Rect RTABMAP_CORE_EXPORT rtabmap::util2d::computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
 Computes a region of interest (ROI) in the image using float vector-defined ratios.
 
cv::Rect RTABMAP_CORE_EXPORT rtabmap::util2d::computeRoi (const cv::Size &imageSize, const std::vector< float > &roiRatios)
 Computes a region of interest (ROI) using float ratios and the image size.
 
+

Detailed Description

+

Functions to compute the ROI in an image using ratio-based cropping.

+

Function Documentation

+ +

◆ computeRoi() [1/4]

+ +
+
+ + + + + + + + + + + + + + + + + + +
cv::Rect RTABMAP_CORE_EXPORT rtabmap::util2d::computeRoi (const cv::Mat & image,
const std::string & roiRatios 
)
+
+ +

Computes a region of interest (ROI) in the image using string-defined ratios.

+
Parameters
+ + + +
imageInput image.
roiRatiosA string of 4 space-separated float values representing the ROI ratios:
    +
  • left, right, top, bottom.
  • +
  • Each ratio should be between 0 and 1.
  • +
  • For example, "0.1 0.1 0.2 0.2" removes 10% from the left/right and 20% from the top/bottom.
  • +
+
+
+
+
Returns
A cv::Rect defining the ROI, or an empty rectangle if input is invalid.
+ +
+
+ +

◆ computeRoi() [2/4]

+ +
+
+ + + + + + + + + + + + + + + + + + +
cv::Rect RTABMAP_CORE_EXPORT rtabmap::util2d::computeRoi (const cv::Size & imageSize,
const std::string & roiRatios 
)
+
+ +

Computes a region of interest (ROI) from an image size and a string of ratios.

+
Parameters
+ + + +
imageSizeThe size of the image (width x height).
roiRatiosA string with 4 space-separated float values indicating cropping ratios:
    +
  • left, right, top, bottom.
  • +
+
+
+
+
Returns
The computed ROI rectangle.
+ +
+
+ +

◆ computeRoi() [3/4]

+ +
+
+ + + + + + + + + + + + + + + + + + +
cv::Rect RTABMAP_CORE_EXPORT rtabmap::util2d::computeRoi (const cv::Mat & image,
const std::vector< float > & roiRatios 
)
+
+ +

Computes a region of interest (ROI) in the image using float vector-defined ratios.

+
Parameters
+ + + +
imageInput image.
roiRatiosA vector of 4 float values (left, right, top, bottom) representing the ROI.
    +
  • Each value should be between 0 and 1.
  • +
+
+
+
+
Returns
A cv::Rect defining the cropped region.
+ +
+
+ +

◆ computeRoi() [4/4]

+ +
+
+ + + + + + + + + + + + + + + + + + +
cv::Rect RTABMAP_CORE_EXPORT rtabmap::util2d::computeRoi (const cv::Size & imageSize,
const std::vector< float > & roiRatios 
)
+
+ +

Computes a region of interest (ROI) using float ratios and the image size.

+
Parameters
+ + + +
imageSizeThe size of the image (width x height).
roiRatiosA vector of 4 float values representing ratios for cropping:
    +
  • [left, right, top, bottom].
  • +
  • Each must be in the range [0, 1), and valid (i.e., left + right < 1, top + bottom < 1).
  • +
+
+
+
+
Returns
The computed ROI rectangle.
+ +
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__SubtractFiltering.html b/preview/pr-1492/api/latest/group__SubtractFiltering.html new file mode 100644 index 00000000..5cd9c66c --- /dev/null +++ b/preview/pr-1492/api/latest/group__SubtractFiltering.html @@ -0,0 +1,149 @@ + + + + + + + + +RTAB-Map: Subtract Filtering + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Subtract Filtering
+
+
+ +

Filters a point cloud by removing points that have a sufficient number of neighbors within a given radius in a second point cloud. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZ >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointXYZ, returning filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointXYZRGB, returning filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointNormal >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointNormal, returning filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointXYZINormal, returning filtered indices.
 
+pcl::IndicesPtr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointXYZRGBNormal, returning filtered indices.
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZ >::Ptr &subtractCloud, float radiusSearch, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointXYZ, returning a new filtered point cloud.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &subtractCloud, float radiusSearch, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointXYZRGB, returning a new filtered point cloud.
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::PointCloud< pcl::PointNormal >::Ptr &subtractCloud, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointNormal, returning a new filtered point cloud.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &subtractCloud, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointXYZINormal, returning a new filtered point cloud.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::subtractFiltering (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &subtractCloud, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)
 Subtract filtering for point cloud of type pcl::PointXYZRGBNormal, returning a new filtered point cloud.
 
+

Detailed Description

+

Filters a point cloud by removing points that have a sufficient number of neighbors within a given radius in a second point cloud.

+

This function performs a radius-based subtraction filter between two point clouds. It searches the subtractCloud for neighbors around each point in the cloud, and retains only those points from cloud (or from the indices subset of it) that have fewer than minNeighborsInRadius neighbors within the radiusSearch radius in subtractCloud.

+
Parameters
+ + + + + + + +
cloudThe input point cloud to filter.
indicesThe indices of the input point cloud to consider. If empty, the entire cloud is used.
subtractCloudThe point cloud to search against for neighboring points.
subtractIndicesOptional indices to use from the subtractCloud. If empty, the whole cloud is used.
radiusSearchThe radius within which to search for neighbors in the subtractCloud.
minNeighborsInRadiusMinimum number of neighbors required within radiusSearch to consider a point in cloud as not filtered out. Points with fewer neighbors are kept.
+
+
+
Returns
The indices of points from cloud that passed the filter, or the new filtered point cloud otherwise.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__TransformPoint.html b/preview/pr-1492/api/latest/group__TransformPoint.html new file mode 100644 index 00000000..5f3f9d58 --- /dev/null +++ b/preview/pr-1492/api/latest/group__TransformPoint.html @@ -0,0 +1,139 @@ + + + + + + + + +RTAB-Map: Transform a single point + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Transform a single point
+
+
+ +

Transforms various point types using the given transform. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+cv::Point3f RTABMAP_CORE_EXPORT rtabmap::util3d::transformPoint (const cv::Point3f &pt, const Transform &transform)
 Transforms cv::Point3f point type.
 
+cv::Point3d RTABMAP_CORE_EXPORT rtabmap::util3d::transformPoint (const cv::Point3d &pt, const Transform &transform)
 Transforms cv::Point3d point type.
 
+pcl::PointXYZ RTABMAP_CORE_EXPORT rtabmap::util3d::transformPoint (const pcl::PointXYZ &pt, const Transform &transform)
 Transforms pcl::PointXYZ point type.
 
+pcl::PointXYZI RTABMAP_CORE_EXPORT rtabmap::util3d::transformPoint (const pcl::PointXYZI &pt, const Transform &transform)
 Transforms pcl::PointXYZI point type.
 
+pcl::PointXYZRGB RTABMAP_CORE_EXPORT rtabmap::util3d::transformPoint (const pcl::PointXYZRGB &pt, const Transform &transform)
 Transforms pcl::PointXYZRGB point type.
 
+pcl::PointNormal RTABMAP_CORE_EXPORT rtabmap::util3d::transformPoint (const pcl::PointNormal &point, const Transform &transform)
 Transforms pcl::PointNormal point type.
 
+pcl::PointXYZRGBNormal RTABMAP_CORE_EXPORT rtabmap::util3d::transformPoint (const pcl::PointXYZRGBNormal &point, const Transform &transform)
 Transforms pcl::PointXYZRGBNormal point type.
 
+pcl::PointXYZINormal RTABMAP_CORE_EXPORT rtabmap::util3d::transformPoint (const pcl::PointXYZINormal &point, const Transform &transform)
 Transforms pcl::PointXYZINormal point type.
 
+

Detailed Description

+

Transforms various point types using the given transform.

+
    +
  • For types with normal, the normal is transformed appriopriatly.
  • +
+
Parameters
+ + + +
ptThe input point.
transformThe transform to apply.
+
+
+
Returns
A new point with the transform applied.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__TransformPointcloud.html b/preview/pr-1492/api/latest/group__TransformPointcloud.html new file mode 100644 index 00000000..e0f32c84 --- /dev/null +++ b/preview/pr-1492/api/latest/group__TransformPointcloud.html @@ -0,0 +1,157 @@ + + + + + + + + +RTAB-Map: Transform PCL Point Clouds + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Transform PCL Point Clouds
+
+
+ +

Transforms various PCL point cloud types using the given transform. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Transform &transform)
 Transforms pcl::PointXYZ point cloud type.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const Transform &transform)
 Transforms pcl::PointXYZI point cloud type.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const Transform &transform)
 Transforms pcl::PointXYZRGB point cloud type.
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const Transform &transform)
 Transforms pcl::PointNormal point cloud type.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const Transform &transform)
 Transforms pcl::PointXYZRGBNormal point cloud type.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const Transform &transform)
 Transforms pcl::PointXYZINormal point cloud type.
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)
 Transforms pcl::PointXYZ point cloud type with specified indices.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)
 Transforms pcl::PointXYZI point cloud type with specified indices.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)
 Transforms pcl::PointXYZRGB point cloud type with specified indices.
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)
 Transforms pcl::PointNormal point cloud type with specified indices.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)
 Transforms pcl::PointXYZRGBNormal point cloud type with specified indices.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::transformPointCloud (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)
 Transforms pcl::PointXYZINormal point cloud type with specified indices.
 
+

Detailed Description

+

Transforms various PCL point cloud types using the given transform.

+
    +
  • For types with normals, the normals are transformed appriopriatly.
  • +
  • If indices are provided, the returned point cloud contains only points matching the indices.
  • +
+
Parameters
+ + + + +
cloudThe input point cloud.
indicesOptional subset of indices of the points to transform.
transformThe transform to apply.
+
+
+
Returns
A new point cloud with the transform applied.
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__UtiLite.html b/preview/pr-1492/api/latest/group__UtiLite.html new file mode 100644 index 00000000..37f1807d --- /dev/null +++ b/preview/pr-1492/api/latest/group__UtiLite.html @@ -0,0 +1,233 @@ + + + + + + + + +RTAB-Map: UtiLite + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
UtiLite
+
+
+

+Introduction

+

UtiLite is a simple library to create small cross-platform applications using threads, events-based communication and a powerful logger. The first three sections show the core classes of the library, then last sections show some useful functions added through time.

+

UtiLite provides a utility application called uResourceGenerator to generate resources to include in an executable. For example:

$ ./uresourcegenerator DatabaseSchema.sql
+

This will generate a HEX file "DatabaseSchema_sql.h" which can be included in source files. Data of the file is global and can be accessed by the generated const char * DATABASESCHEMA_SQL.

#include "DatabaseSchema_sql.h"
+
...
+
std::string hex = DATABASESCHEMA_SQL;
+
// Assuming there are only ASCII characters, we can directly convert to a string:
+
std::string schema = uHex2Str(hex);
+
// For binary data:
+
std::vector<char> bytes = uHex2Bytes(hex);
+
std::string UTILITE_EXPORT uHex2Str(const std::string &hex)
+
std::vector< char > UTILITE_EXPORT uHex2Bytes(const std::string &hex)
+

A generated FindUtiLite.cmake is also provided for easy linking with the library.

+

+ULogger

+

The ULogger can be used anywhere in the application to log messages (formated like a printf). The logger can be set (ULogger::setType()) to print in a file or in the console (with colors depending on the severity). Convenient macros are given, working like a printf(), as UDEBUG(), UINFO(), UWARN(), UERROR(), UFATAL(), UASSERT(). Small example:

...
+
UINFO("A simple message with number %d", 42);
+
UDEBUG("A debug message");
+
...
+
#define UDEBUG(...)
Definition ULogger.h:59
+

This will print: [Severity] (Time) File:Line:Function() "The message"

[ INFO] (2010-09-25 18:08:20) main.cpp:18::main() A simple message with number 42
+
[DEBUG] (2010-09-25 18:08:20) main.cpp:18::main() A debug message
+

+UEventsManager, UEventsHandler, UEvent

+

The events-based communication framework helps to communicate between objects/threads. The UEventsManager is a singleton with which we can post events anywhere in the application by calling UEventsManager::post(). All UEventsHandler will then receive the event with their protected function UEventsHandler::handleEvent(). Handlers are added to UEventsManager by calling UEventsManager::addHandler(). The UEvent provides an abstract class to implement any event implementations. The only requirement is that the event must implements UEvent::getClassName() to know the event's type.

...
+
MyHandler handler; // MyHandler is an implementation of UEventsHandler
+ +
UEventsManager::post(new MyEvent()); // MyEvent is an implementation of UEvent
+
// The UEventsHandler::handleEvent() of "handler" will then be called by the UEventsManager's events dispatching thread.
+
...
+
static void addHandler(UEventsHandler *handler)
+
static void post(UEvent *event, bool async=true, const UEventsSender *sender=0)
+

Look at the full example in page of UEventsHandler on how communication works with threads (UThread).

+

+UThread, UMutex, USemaphore

+

The multi-threading framework use a UThread as an abstract class to implement a thread in object-style. Reimplement UThread::mainLoop() then call UThread::start() to start the main loop of the thread. Threads can be joined by calling UThread::join() and killed by calling UThread::kill(). Classes UMutex and USemaphore provide blocking mechanisms to protect data between threads.

...
+
MyThread t; // MyThread is an implementation of UThread
+
t.start();
+
t.join(); // Wait the thread to finish
+
...
+

+UTimer

+

A useful class to compute processing time:

+

+UDirectory, UFile

+

For files and directories manipulations :

+

+Convenient use of STL

+

The library provides some simple wrappers of the STL like:

    +
  • uUniqueKeys() to get unique keys from a std::multimap,
  • +
  • uKeys() to get all keys of a std::multimap or std::map,
  • +
  • uValues() to get all values of a std::multimap or std::map,
  • +
  • uValue() to get the value of a key (with a default argument if the key is not found),
  • +
  • uTake() to take the value of a key (with a default argument if the key is not found),
  • +
  • uIteratorAt() to get iterator at a specified position in a std::list,
  • +
  • uValueAt() to get value at a specified position in a std::list,
  • +
  • uContains() to know if a key/value exists in a std::multimap, std::map, std::list,
  • +
  • uInsert() to insert a value in a std::map and overwriting the value if the key already exists,
  • +
  • uListToVector(),
  • +
  • uVectorToList(),
  • +
  • uAppend() to append a list to another list,
  • +
  • uIndexOf() to get index of a value in a std::list,
  • +
  • uSplit() to split a string into a std::list of strings on the specified separator.
  • +
+

+Basic mathematic operations

+

A library of basic array manipulations:

+

+Conversion

+

A library of convenient functions to convert some data into another like:

+

+UProcessInfo

+

This class can be used to get the process memory usage: UProcessInfo::getMemoryUsage().

+

+Qt Widgets (libutilite_qt.so : OPTIONAL)

+

If Qt is found on the system, the UtiLite Qt library (libutilite_qt.so, libutilite_qt.dll) with useful widgets is built. Use class UPlot to create a plot like MATLAB, and incrementally add new values like a scope. USpectrogram is used to show audio frequency frames.

    +
  • UPlot,
  • +
  • USpectrogram,
  • +
  • UImageView.
    + +
    +
    + +
    +
  • +
+

+Audio stuff (libutilite_audio.so : OPTIONAL)

+

If FMOD is found on the system, the UtiLite audio library is built (libutilite_audio.so, libutilite_audio.dll). It is a wrapper of FMOD methods with a convenient interface to extract audio frames.

    +
  • UAudioCapture,
  • +
  • UAudioCaptureFile,
  • +
  • UAudioCaptureMic,
  • +
  • UAudioCaptureFFT,
  • +
  • UAudioPlayer,
  • +
  • UAudioPlayerTone,
  • +
  • UWav,
  • +
  • UMp3Encoder (only if Lame is also found on the system).
  • +
+

+OpenCV stuff (libutilite_cv.so : OPTIONAL)

+

If OpenCV is found on the system, the UtiLite cv library is built (libutilite_cv.so, libutilite_cv.dll). It provides image capture classes used to read from a webcam, a video file or a directory of images. If UtiLite is also built with Qt, a convenient function uCvMat2QImage() can be used to convert a cv::Mat image to a QImage.

    +
  • UVideoCapture,
  • +
  • UImageFolderCapture,
  • +
  • UColorTable,
  • +
  • uCvMat2QImage() (only if Qt is also found on the system).
  • +
+
+ + + + diff --git a/preview/pr-1492/api/latest/group__VoxelFiltering.html b/preview/pr-1492/api/latest/group__VoxelFiltering.html new file mode 100644 index 00000000..b6289521 --- /dev/null +++ b/preview/pr-1492/api/latest/group__VoxelFiltering.html @@ -0,0 +1,164 @@ + + + + + + + + +RTAB-Map: Voxel Filtering + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Voxel Filtering
+
+
+ +

Performs voxel grid downsampling on a point cloud with optional index filtering. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointNormal on provided indices.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZRGB on provided indices.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZRGBNormal on provided indices.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZI on provided indices.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZINormal on provided indices.
 
+pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ.
 
+pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointNormal.
 
+pcl::PointCloud< pcl::PointXYZRGB >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZRGB.
 
+pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZRGBNormal.
 
+pcl::PointCloud< pcl::PointXYZI >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZI.
 
+pcl::PointCloud< pcl::PointXYZINormal >::Ptr RTABMAP_CORE_EXPORT rtabmap::util3d::voxelize (const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, float voxelSize)
 Performs voxel grid downsampling on a point cloud of type pcl::PointXYZINormal.
 
+

Detailed Description

+

Performs voxel grid downsampling on a point cloud with optional index filtering.

+

This function downsamples a point cloud using a voxel grid filter. It optionally accepts a set of point indices to limit the operation to a subset of the cloud. For very large point clouds or very small voxel sizes that would cause integer index overflow in the voxel grid structure, the function automatically partitions the space into smaller regions and applies the voxel filtering recursively.

+
Parameters
+ + + + +
cloudThe input point cloud to be voxelized.
indices(Optional) A shared pointer to a vector of indices indicating which points to consider. If empty, the entire cloud is used.
voxelSizeThe voxel (leaf) size for downsampling. Must be greater than zero.
+
+
+
Returns
A new downsampled point cloud as a shared pointer.
+
Note
If the computed voxel grid exceeds 32-bit integer capacity, the function splits the bounding volume into smaller regions (using a quadtree or octree-like subdivision depending on the Z-axis span) and processes each region recursively.
+
+If the cloud is not dense and no indices are provided, a warning is issued and an empty cloud is returned.
+
Exceptions
+ + +
Assertionfailure if voxelSize <= 0.
+
+
+
See also
pcl::VoxelGrid, util3d::cropBox
+
+ + + + diff --git a/preview/pr-1492/api/latest/hierarchy.html b/preview/pr-1492/api/latest/hierarchy.html new file mode 100644 index 00000000..c695ecce --- /dev/null +++ b/preview/pr-1492/api/latest/hierarchy.html @@ -0,0 +1,277 @@ + + + + + + + + +RTAB-Map: Class Hierarchy + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Crtabmap::BayesFilterRecursive Bayesian filter for loop-closure hypothesis estimation in RTAB-Map
 Crtabmap::CameraModelRepresents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection, rectification, and transformation
 ►Coctomap::ColorOcTreeNode
 Cclams::DiscreteDepthDistortionModel
 Cclams::DiscreteFrustum
 Crtabmap::EnvSensorSingle environmental measurement (type, value, timestamp)
 Crtabmap::EpipolarGeometry
 ►Crtabmap::Feature2DAbstract 2D feature detector and descriptor extractor for visual SLAM
 Crtabmap::FeatureBAA single bundle adjustment feature observation: one keypoint seen in one frame
 Crtabmap::FlannIndex
 Cclams::FrameProjector
 Crtabmap::GainCompensator
 Crtabmap::GeodeticCoordsWGS84 geodetic latitude, longitude and altitude with coordinate conversions
 Crtabmap::GlobalDescriptor
 Crtabmap::GlobalDescriptorExtractor
 ►Crtabmap::GlobalMapAbstract base for assembling per-node LocalGrid data into a global map
 Crtabmap::GPSWGS84 GPS fix attached to a sensor sample or graph node
 Crtabmap::IMUInertial measurement sample (ROS sensor_msgs/Imu-like fields)
 Crtabmap::IMUFilterFuses gyroscope and accelerometer samples into an orientation quaternion
 Crtabmap::LandmarkOptimized pose of a visual landmark (e.g. ArUco/AprilTag) in the map
 Crtabmap::LaserScanRepresents 2D or 3D laser scan data with support for multiple point data formats
 Crtabmap::LinkDirected constraint between two nodes in RTAB-Map's pose graph
 Crtabmap::LocalGridLocal occupancy grid cells for one map node (ground, obstacles, empty)
 Crtabmap::LocalGridCacheCache of LocalGrid entries keyed by map node id
 Crtabmap::LocalGridMakerBuilds per-node local occupancy grids from laser scans or depth clouds
 Crtabmap::MarkerDetector
 Crtabmap::MarkerInfo
 Crtabmap::graph::MaxGraphErrorsLargest pose-graph constraint violations after optimization
 Crtabmap::MemoryThree-tiered memory management (STM, WM, LTM) for RTAB-Map
 ►Coctomap::OccupancyOcTreeBase
 ►Crtabmap::OdometryAbstract base class for visual, lidar and visual-inertial odometry backends
 Crtabmap::OdometryInfo
 ►Crtabmap::OptimizerAbstract base for pose-graph and bundle-adjustment optimizers
 Crtabmap::Parameters
 Crtabmap::ParticleFilter
 Crtabmap::PointXYZIRTThis namespace contains 3D point cloud processing utilities
 Crtabmap::PointXYZIT
 Crtabmap::ProgressState
 Cclams::ProjectivePoint
 Crtabmap::PythonInterface
 ►Crtabmap::RegistrationAbstract base for registering two observations (visual, ICP, or both)
 Crtabmap::RegistrationInfoStatistics and diagnostics returned by Registration
 Crtabmap::RtabmapTop-level RTAB-Map SLAM pipeline (mapping, localization and loop closure)
 ►Cstd::runtime_error
 Crtabmap::RvlCodec
 ►Crtabmap::SensorCaptureAbstract base class for sensor data capture (cameras, lidars, etc.)
 Crtabmap::SensorCaptureInfoMetadata structure for sensor data capture and processing
 Crtabmap::SensorDataContainer class for all sensor data captured at a specific time
 Crtabmap::SignatureRepresents a node in RTAB-Map's pose graph
 Crtabmap::RtabmapColorOcTree::StaticMemberInitializer
 Crtabmap::StatisticsCollects and manages runtime statistics for RTAB-Map
 ►Crtabmap::StereoSparse stereo matching using block matching
 Crtabmap::StereoCameraModelA class representing a calibrated stereo camera system
 ►Crtabmap::StereoDenseAbstract base class for dense stereo matching algorithms
 Crtabmap::TransformRepresents a 3D rigid body transformation (rotation + translation)
 Crtabmap::TransformStampedAssociates a transform with a timestamp
 CUDestroyer< T >
 CUDestroyer< UEventsManager >
 CUDestroyer< ULogger >
 CUDirectory
 ►CUEvent
 ►CUEventsSender
 CUFile
 CULogger
 CUMutex
 CUProcessInfoClass for getting information about the current process
 CUScopeMutex
 CUSemaphore
 CUThreadC< Thread_T >
 ►CUThreadC< void >
 CUTimer
 CUVariantA variant type that can hold values of different types
 Crtabmap::VisualWordRepresents a visual word (feature descriptor) used in the bag-of-words (BoW) model
 ►Cpcl::VLPGrabber
 Crtabmap::VWDictionaryManages a dictionary of visual words for visual place recognition and loop closure detection
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/index.html b/preview/pr-1492/api/latest/index.html new file mode 100644 index 00000000..93e494fb --- /dev/null +++ b/preview/pr-1492/api/latest/index.html @@ -0,0 +1,85 @@ + + + + + + + + +RTAB-Map: Main Page + + + + + + + + + + + + +
+
+ + + + + + +
+
RTAB-Map 0.23.10 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
RTAB-Map Documentation
+
+
+
+ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_0.map b/preview/pr-1492/api/latest/inherit_graph_0.map new file mode 100644 index 00000000..b21a8730 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_0.md5 b/preview/pr-1492/api/latest/inherit_graph_0.md5 new file mode 100644 index 00000000..4e7be787 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_0.md5 @@ -0,0 +1 @@ +c8b7a96b208a5d844dc080429993d48e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_0.png b/preview/pr-1492/api/latest/inherit_graph_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4838470427425952d82591c3bf563f043ae9d6a5 GIT binary patch literal 3234 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_1.map b/preview/pr-1492/api/latest/inherit_graph_1.map new file mode 100644 index 00000000..c7651e41 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_1.md5 b/preview/pr-1492/api/latest/inherit_graph_1.md5 new file mode 100644 index 00000000..a0194cc4 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_1.md5 @@ -0,0 +1 @@ +82bcf205ccb3a913b8e31c19422a7562 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_1.png b/preview/pr-1492/api/latest/inherit_graph_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1b6fb74088a9d23fdf33a08fdbed6e568d3c5b90 GIT binary patch literal 1833 zcmV+^2iEwBP)aE<)XJ;R7TEX24!;o7qO@IzNu^f z*!jTVIWNES`<~zVZO=L502B&^LZMJ76bj}44C7j%)oLXS!{miS423dR7>&leu60qa z6%51VF${C(??|FhLWcijcX0LU)zC_zP(py&Y=+Tj^w>7lqrym@oLHja7yi9(@3Q&ZDi%bStDa1imy zJ~%jtrAwFM@ZrPw@#6!hGANrr=j9+N zDQT{y0hpP-a4=`vn0xo`L8H;2yu2K@Zr$?Q@8rpoU|AMLMMcnPH0bW`c52sZwYYot zE_j|tNl6LxdOgO*#$Ym;P*qih?c2Abxw+ZNrmwFL8jS{9w{8W`^Z5GptI*cm+>E_@ z_j)Y@fJ7nz%d*(CX%je(gUMvViWMuMR;z_RuG<)2K7GYQtJUKE{rfN&3@9xvMQ3NH z&|j@qqpYk97cXAK)YKFJ;OyD67#SHsV`C#&mW5ugckgE(wtDQlXU`rO z3r)B{*>4 z03JVn3;_7}@gs_gim+~FO z0M2I*e?EQ1!)!J~qtPHHCI-ij9YbbjCeEBWgWB3!uq=!H`}d=*tqoOGRRDm>%1R_B zC!?&a3gwv9 zH8nLPP(FYDOroNqNLN>vQ~l)RBq4;5_3PIYqtWQq-e52gjYcDs<#IV`XlM}1?d|OZ z0I^!FLS02g1v!2CG$DkL=g*&$goFh0?b|n@-EOxF&u`zpB~P9_@mek}E+$8h9(B_- zJUmPQ5R=K|HVt(b2?Wu?Te&6B8sRCWgFv^@^p&4vvdoc8RiSFiS{ z!5{u&JX3;M=ec0k$)1#ygz4#NeEIUl?*Yhew<9kv5Bv7*1IKYlNJzkg2M?UKF~F}y z^Hp}Gsi_I)&!5NO;2>_?xPivTM!bCa5+adkW|IQY+1ZKs_;{>YvnD8?fy5&!>UY=^ z6BEHO4C?Fa5gQxp)GsqL6M*~t1F->q@7eunaFiWe3;>v%oD68bB9X}B`uH2q)4cqx z^K6;*o?R-HLMD@e=Xp#|PXqY%>*o5m7XVnTR@iJdG&D4zw6qiog~I6&GZO{|2GG&b zf#~RHX>V`Gg$ox@S67Gm^XCWUGnjY)Kt@IeWHK50`}TX#%wgmh|*=^z`%y7T z+qco(-Hp`LRIFXQ7Q1)v#N~K=6JAon=i*f1FB}gO^ zD3wYS6cnJgwiZj4ECCSM0kx&21uV-#rBWd|IT;+s;oP}%;CVi1pTWcf_!YmFmKHpG z_zU11jQJ0)W9dN+pSxWB1`LJ2u;$xa9{0oWA=EfflcLZMJ76bgkxiD3Q% Xh?_p~^%Ras00000NkvXXu0mjfV@r82 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_10.map b/preview/pr-1492/api/latest/inherit_graph_10.map new file mode 100644 index 00000000..a3ad7f3b --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_10.map @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_10.md5 b/preview/pr-1492/api/latest/inherit_graph_10.md5 new file mode 100644 index 00000000..4858d3bb --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_10.md5 @@ -0,0 +1 @@ +cb08852286b2bc3481501c24c44990b2 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_10.png b/preview/pr-1492/api/latest/inherit_graph_10.png new file mode 100644 index 0000000000000000000000000000000000000000..c25502b32232f833218588835b35e374fc7a5c1b GIT binary patch literal 65937 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

~cRCe8J8 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_11.map b/preview/pr-1492/api/latest/inherit_graph_11.map new file mode 100644 index 00000000..849d6e71 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_11.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_11.md5 b/preview/pr-1492/api/latest/inherit_graph_11.md5 new file mode 100644 index 00000000..2d6b2d0e --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_11.md5 @@ -0,0 +1 @@ +9ebe412ea4c86caaaa7571cf008bde31 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_11.png b/preview/pr-1492/api/latest/inherit_graph_11.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3de7c61fcb65413d39b8e117cf9f413246ef7c GIT binary patch literal 1966 zcmV;f2T}NmP)DM`GfIn#(9)VrGKSR{z!B>9cpT7oQ|znVl5PkOQ;zs0RuH7C140B zGs2w$x8d`1{lx4ziW|Yh2c>VgdzrqI$rKP2iN~Nq%X=$lX zVlPz<7p@^aJsl@co`ha|b(i?C_}$ zpO{f5lOa1h8=ak<(ChUWA0J0oR~K&Gx`l@iA3`J&p}M*nSFc`$Mx()s6)Uh|!v^H% z=VRy2ovc_B6BDSYsDROE#HLM~aP8VPL`Ft3c``FI@$utFbar+kHZ~Rtg#ur`d_i?} zHO9xsap=$?cg$8#iwFEa$gx-^ly-@0oG?_MSa^ zNOW{GNlQy(KCP{-WOQ_tgoK0;yW^v?rz+>cMsj&-LTng7#ti#R8$mePI7WG^F1^) z6iG=*FquqDAD_=>zOP!f3SnVkh>3||^;xY}pXH2=jYVv1EHiH327qnbwy~ZWg+d`r zCKG06W^nQ1Mb=ynhl8%JF2u#fd8KVJEIb$9=vcUhxw$#?_4T2$vJy(A66emH0{}dI z`V^CslgP=*VPcrgW;8W5IXqV`7N40hIG7!Z!(sm+$Y!%4H8mB-j~|CzE=PEHI9|Sd z>2RA~Xr%czm&;qtR%fR4RRDM!&tA+hZt}qx3%v%A2 z!GNBg9uyQ5uwG#m6%|3HQekj#&|^Kk!Ea`qe>j&&BshEaECd1p_U+pTKA(@2loas! ze1wICIUFYx3Lz4SAQp>}o}P}Xsw!;Wym?U?e35gp8({SGa&j_w zJRbV``VbTp2#$jETG`*FEkY~8xme;b*_Y+$rnEg2jfbm%vm&E)Odx2%Wf&!0b&wzf86 zwOYyd@84Nt^Kr(<$B9m-BR_upaGPgrY>d2l^M*CYWHOPSo*q`8yPS!MiR96vM=o=E z+Q1l%Mu&X%^!N7@tyW8Z{rcrF=1v z(P$)UwVJ5aYSPluLOy-^#Ka?nkdBTH(%0ALG-h{qH!&KGZr8sMcN-X=nDL*?ycsD= zgF7<@)Nj+2KO4XO9QaScU@$DV1j_%QS4K*}K+Q-A7^oR30RuH7C19Xtqy!8uchhpY zd?|HMD2`?%gtP%Tv + + diff --git a/preview/pr-1492/api/latest/inherit_graph_12.md5 b/preview/pr-1492/api/latest/inherit_graph_12.md5 new file mode 100644 index 00000000..efc8e1a5 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_12.md5 @@ -0,0 +1 @@ +343d0bbedb9b127920a309861f31c24a \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_12.png b/preview/pr-1492/api/latest/inherit_graph_12.png new file mode 100644 index 0000000000000000000000000000000000000000..b95305b43cd36c3d7b4ea1ce0edbd270c68b0922 GIT binary patch literal 1965 zcmV;e2U7TnP)0%8$h8@C=?2XLZK`zjHN-N(MTDFiE)P*%AXA(r0K?u z8z1M}mRSZd3=_jJ%wJ0&@DISeSHK<0T!ILLX+%3bY1nsscQ#IGP>n`|#Kc6jwY7ocIE;>tqN}S57cN}D&6_t79v+U0iVB=MbqdYR&G7Q_ z!n$?qkd>8%ZQHg9a*dCV2%O&Gys6~^mOQSI+T=@VAG~eNJ>gVb91vG z*Rf;AAQFk7(P+@q(*u=C#lIr3EQ>>j4#D5wA9;CsXlrZ3_U+qo;=~E0q@*ArApzOh z*?95d1)p!Rnk>s=|Ni|pYxec^p{1pTkGCBEERN{O&d!FfuP^fQ^6=%$7bGPmIqbJ& zvG}~aJXBX#BO@aN3WWk085x4}&z?PtqM{`CM8oTG|bUKoil_kiNot@2( zr>3TeL?R(~@80G8rKP33|MBC;1OVyp@8@kPDJkU4nKMqS`QgI{^77?N-fuaMi;E*` z*RCb8v9bK)*|TT7KPoDUR9060l%C?^Vt)Mb<3|F3eEs^>A%9$4oZz{z7jHBgiIFDU-{k65VynkqDhBRvB_}77goFeV6cj|t%gb$Et37ga zb4gB4PO4=;I&BRqm&+H8>F(~v)vH(0-QA6`u`w8pMo1(QL5xzV05C4^pXAU^AIaPOB-C$pmkomSX_ex^=5y4H^~}_FHo>|NK>}RsjG^ zCKJExSj=yUt$3r+2wz`cY}~k!_eVuV@yDH=otT-K!O^2f1^F0;L04B7f`Wno0N1Zy zhg2%XmMvRQP*7m=+J6P7HR!Ts!c+_+yisawYz#3mG1#|nAGBI6mM>q9hYufGy~WRO zuDP+lzrW4AmSb1cTntCoppNRXcTJA?9gP=@#h9F&#N^~8e0_ZZ2((t?x^xK<5fKOu4#xNI-+8}CB*MLW_fS_?hrqx< zD3waAUcDNH*ZE}W~S>z|H>vwuh$c!(P(A= z^yw3M{`|RMk^Sb)8`9L&L`)_V85kH4_~!DAj*b$RWy!a1-|W^go6V%Lu~87y+1W|n zzI`jO*{c~D8A)#6zHPJSVw)s`!C+NyJ{-r9&!0a#tjF>iXJ=eXo zctQx7n3y0O$C1IoK{7QpMH(6!$n^BIKyzPTAJOaeWMpK7x4nP=p0u>I2;xRYMo2?L z0~sG5w>c*ZVQZ6QwK&Pi$w_4x=C42Heo(nwj-sL>tB+SGON&;k1tBD@va(We!?H(x z7f+#B;y{W0fMT6|@E00000NkvXXu0mjfa#F($ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_13.map b/preview/pr-1492/api/latest/inherit_graph_13.map new file mode 100644 index 00000000..e7f19339 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_13.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_13.md5 b/preview/pr-1492/api/latest/inherit_graph_13.md5 new file mode 100644 index 00000000..36a541b8 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_13.md5 @@ -0,0 +1 @@ +e7039d22dab52a4ebd58da4a01256416 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_13.png b/preview/pr-1492/api/latest/inherit_graph_13.png new file mode 100644 index 0000000000000000000000000000000000000000..11607177babf2fe85ee068f18f79ee20fb604445 GIT binary patch literal 2427 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_14.map b/preview/pr-1492/api/latest/inherit_graph_14.map new file mode 100644 index 00000000..bc120a30 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_14.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_14.md5 b/preview/pr-1492/api/latest/inherit_graph_14.md5 new file mode 100644 index 00000000..57922053 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_14.md5 @@ -0,0 +1 @@ +29c8e93d2f4f973d938cfe995d0783f7 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_14.png b/preview/pr-1492/api/latest/inherit_graph_14.png new file mode 100644 index 0000000000000000000000000000000000000000..efcee5d8a971748645d0d6193138a030e0f4d73d GIT binary patch literal 2652 zcmYLLcQ~8-7k{l#n_4BdPNZ&2xhiG|nk!Z>ReMWCtj4HuZJL_7xJs#_tt!!<*@{-E zJ$s2Aid$mFOi`EL+rRGfj`KX{`+VPV&S#u7OA90)wM zEB0z~_oaS+onFksX>+u3Mf}u}k`jF7*OiE327INrb)^yDg(Og1)g-{Mpo3VJ=1yuy zD+zZFAa3w>p{yJnBHPKsRI(A6N=3X_LSMQF@fiQwtaWL!30D$g)u@` zxR<`U`RwPi2@?5bax(SZyLU)tc0obf)2C1U2KtUrDO;89dsymHPIh*j=3F>iT3Xr= z_b(6V3`TdUQOd~d?32^e7wM^RsXCFSu!498`o~v8ph^at{Q}gYxVW@ZLd|46qJ>D z?&PT$V6m#>HBPrjS9k31XTE;@`l>h*jTTT)Pzc;d*=Q>^(6D;lQ zI5U>mV-6x)_3wLmU9@ddm%o9nD#?K$@q5wxJKeI1y1H{UTX}h68?+YjCfvMVgC6WkW;mE&oY< z3)PIbZ&eIjLPOQ1b;3us$RI?_(P;6*h_ipcA2EA+xXdc7k57LvA|6>-@Z-+D<-2eJ zG;#!y@n~;Q({H8`J1VxOD&^IK$iG)ZKL8VJ=KYbi1@O-t%j3@LhB34 zG&V%L>!o|duRCu9qQb&7nOii%)>Z&7KfmFt(R(_3FsBcHo^32ICwCIW%j)Wg3}XMc zla+|QWyaArH#4PdE)fkb5qFrqSTq_9{NYSO>gxl5oPq)?_&SjNJwrnf zAQX>x_xI;5)WnH>7EMFY*Vf|m^To9?I&v=F37=6Wky*>Wq!t&;%zlcMm64I*;^A4^ zBnnV6PB|`57>#Od~Rpc4-8Z@G%^ZeZruCa z-K{7u&jPZxIdFj${8NzILJ|_GAh7mAxOsSlgoWeV+Vm3>6WiwJWx?vG0Mk)E%|h(e@)~y^JRhl6%7)%SlAz^J}v%p{ofJl0hnYlDpX+yTKv$HF&sGxLounoh%Lu*_< zW#l_Yo-;N!79@1?YfRSNH&PLsp{nMZXBQR{4%R0+z@q10cQL`^Zxu%@7o^N7+bmk~ z|5IIET|T<1a(s5YejO7KAO;oDkmRehy#{JX==!*79JYP9tqo{sX!!E%cGyPOFA}_< zZ7E5NPEDEF)i?_6PZ2I$xM1ex<#o$r`gRt&%UAtxkno_IW&d7vk=W~b;NaKbfWcxb zz(Ig#hEBiYL=MjewE^Mb;UUHZJ>R;DIyN(N2PELw$cR4J5gR7%qYS3u>FMbY97TfI zi?Aa(SAb@6Lo!`Vx2vn`b!+Q02L}iG7Oh2~no>*~*9|WJ0cvlFv=nxdmvoc&#vMM4`CxTybRr7CqoIt5%`EMesT?CV^d)T`s zCSAmV1j=6z?L|0+DgmWoeb|447{&F(=TIDfm~)xZV{i@}7XdS43q*~fYyAHK-H#V* literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_15.map b/preview/pr-1492/api/latest/inherit_graph_15.map new file mode 100644 index 00000000..05e4ad82 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_15.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_15.md5 b/preview/pr-1492/api/latest/inherit_graph_15.md5 new file mode 100644 index 00000000..c56baa07 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_15.md5 @@ -0,0 +1 @@ +3813b5a5285e207ee8587e80db413e57 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_15.png b/preview/pr-1492/api/latest/inherit_graph_15.png new file mode 100644 index 0000000000000000000000000000000000000000..126bcbac53e8b76e76a353eb431629d587d1cb2c GIT binary patch literal 2544 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 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_16.md5 b/preview/pr-1492/api/latest/inherit_graph_16.md5 new file mode 100644 index 00000000..3774e441 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_16.md5 @@ -0,0 +1 @@ +48a8448b3cecb6038497b9998c4e5644 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_16.png b/preview/pr-1492/api/latest/inherit_graph_16.png new file mode 100644 index 0000000000000000000000000000000000000000..157461e64b25609da43f09ddb7d92088574660c4 GIT binary patch literal 3419 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 CXJMQG literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_17.map b/preview/pr-1492/api/latest/inherit_graph_17.map new file mode 100644 index 00000000..7ae29345 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_17.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_17.md5 b/preview/pr-1492/api/latest/inherit_graph_17.md5 new file mode 100644 index 00000000..bad8f1c5 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_17.md5 @@ -0,0 +1 @@ +3959e8c10a3df2925dd719793fd85906 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_17.png b/preview/pr-1492/api/latest/inherit_graph_17.png new file mode 100644 index 0000000000000000000000000000000000000000..6465bc91435274b93471b3f17e757fb8dccf7bef GIT binary patch literal 14158 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_18.map b/preview/pr-1492/api/latest/inherit_graph_18.map new file mode 100644 index 00000000..e1d9e781 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_18.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_18.md5 b/preview/pr-1492/api/latest/inherit_graph_18.md5 new file mode 100644 index 00000000..3f6a68cb --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_18.md5 @@ -0,0 +1 @@ +24ed708d6d4ff60dc8d9086bd54965ed \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_18.png b/preview/pr-1492/api/latest/inherit_graph_18.png new file mode 100644 index 0000000000000000000000000000000000000000..50155e9cdcc3d0108dbccec74ab32eb558b58878 GIT binary patch literal 1763 zcmV<91|0c`P)#Q)?W@zuU@4wq{_-ob0?w4Tn=o#56LH{-RNXdxc4V z#*WQE$RJZoY4j!|dKaSfLL*vS41>TZs~5#KHFw%(qnSzM#&D6ixtU;D&wX*(VMm?a zt6O^Wd_dUqd!GHizjMCqd4A^z@bK{P@bK`g1_W~hG)<=o1cJhqD28YG2!%pVTU%Ri zWNh8sMFN4KP#_Te_3O&wi6uXN{J0O`kI2|Olf$&NwZ*+4p4igX)&_=Q=Ea38Pz%p5 zhBtW)z?-}VSXCy|G>xZEpRRNnza6W}WUJMRPoF-mbQ!-LQM>EqqSxzj?AS3JJa{l( z603$_Fo=$h4wy_P1cO0P6oumAVw9JcLnIOb04`j(fLE_x0RSWt39_@ZaqiqXY}v8} z05Cm0ja#>F!E83;+qZ8hC@4TxRTZRC>9XsKo5>8rVArl)@k+mH7#SHsNl6K|Zruu< zP6vvj;Pra(`0-yg9iYB!NEZ!Cnux2x*EY?5ZA9?M`vdz1_uYRapOj))oP55 zjiI)-7E-AceSLi>Dk_50>0EY=F)^8@X_S?f!Dh38VHku$A-sF{4$aNY=;-J`R#p~T zT3XQ1(170FUI>LkP!t8NR*OA*_Hc52`SJx#O-*n(9N4yP8!leFh~(sCR%ieI{dn`{ z4Qw_W6bc0l1_MS$M$ppIf>0=g^73+MG#WPF&opV8Mrmm&7=~F;(`YoJySp2A@7`T- zeCpIGq^GB&r>6%(p^%d|5D0LtEiEk#d-v`I0OaN6K`xiWWHMpLjvaXN3xlnr^on{r&yy`pB`z8O zsnu$7`SRtMX^xJLlD@t^c0O|a;>8OBfPDP;k)7}9=^@3%#q3|00|yRp?vc@GBm#ke z3=IttLI`>G>={uil|(ESlcJ&`($LUAMn^}ZUdKYTwziVW%F52Up2qA<&dtsJ>6+o; zVYIfkVt9BMQ&Us$`FxPcWSlkO?Fs-A5)zP`n~R~LAvTtgk->i6ym>Pc6BCh^md1%i zZj;N^R45csC=~2`g(%&TFYX@?KxR0m11II zf*pH29{Bx!G&VM(tgHgs|@rNYgdH*x6DA!KA^AR{9KZnqoR+1YG^6K4DN?a0c?f=niZ z%jLqgYuBJuDwkA4W@hHHH5Y5VfPWgr_3PK;oM66aT86O{CRA+K>lDvHRlCx%LXo$Rj|DF?DOfx4ZhupbyC#vRR zjaMYIv$MqMbP|ijLfmdQ`TqSoXWrp(%&TiIGcz;9;c$@GuU`|t-@oYEg^1R8#l+ + + diff --git a/preview/pr-1492/api/latest/inherit_graph_19.md5 b/preview/pr-1492/api/latest/inherit_graph_19.md5 new file mode 100644 index 00000000..b608be8a --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_19.md5 @@ -0,0 +1 @@ +1b7f54632a2820f45deaf0c520cdc93b \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_19.png b/preview/pr-1492/api/latest/inherit_graph_19.png new file mode 100644 index 0000000000000000000000000000000000000000..aff3b62706949ef0dc9b65c558c8ab96e573c183 GIT binary patch literal 2779 zcmYLLc{r4P7aqGNdkTYihc`@FGDG%djBTpPmKaMDvPGiB7G68ArBTTq22F?|%|wiC ztT9ECc+q4RiZBsl`JTS-yT0#wp67S2>-poH^E>B0_qkJTFqVQ~2p9wc30hmB>;O9i zd~kkV;9R(qAt?YDNqzn^ zT;N3H84>;`jYxs`vk(7({>+2>9$iHjsx@5Aa$R;J-b*OlT=V3&B?_j zDj|{F*Js7V78Mm)VK5eMZn6u5dGTC)LhZf1$pZ}@-Qc~giJ;#eIXOA;`T5`)$FxUE zmk3mfn9`8uCJz+i9{m5Zp;rne)Pz!!J7^Rv4Hk$ITt*6aw7R-2hasgP0id)@p6^YRpBk z)P!^kg^`aRhvxbpEiKRsP^fao51`Y@ZmPzH<8&O?b}5RnM9r{;Up^UZr7$SuwsKYpD1FNm~slarsHimKb2 z$B}tK+qXvj>&7(kW|(OZZhfYkD>MAZ6vxY#FMmvRaNW6cryZx!{{H=gbElxtxX88X z>DcZxiL%z#r)fMqJi%*JD)nse3<^M``{3TIc4i?52S*Ey8qS`kC5wO)bB$w+M&(YP zyh;B2gdB{L1@^&Ny>IRU2?PQF`$CC$wR=YXi; zzp3pvaU32*d3kx^raKeOK8VQ31cYLWFuiOGt)S-SW`%R-Bnq?xkvDIu>FMh?F^&u< zyj0K$8L?{9zM0vR3d z-EM4dHdD)?(P&(;v9TJE4Bs0!%pxLo@wfE}jzT`l=R^UF_u(|0x{HmX(3dY?o^;cJ z64={okFYhT%7(3g;b>`P-UX<+l0td%)G+c>&{GOUyXwV@xr|B@iI^-bx8bor{}^3y zXS$Q8K$q{0yb?5GXX8&l1VmF(pxm+AT3P&Izt{3>?JeJzt_&~DEOZ4SNByc0`ZmDb zhS7Ut=wqV801dwIA1`KFJ~(N6_pVmZw=@ZLs|q_?A0H)kCWB!Xy2kvIjJ>E=lv$ls z^Bt0j6+A&?CQ8#;(IB&VVBfGMzG46!}z@z$`A z{`Y3p;L<%(YQrCEg8R9=v=mH6BynBi4S`-Ex$}swyHld&Jkl|_v95m&`zDykw}*a- zN*)@r2@4A=X>Db~yfq|$45+us!(d={cXyyizm}^>jmbm1SW6(&Ctd2t)>coi zTui$0!7p03%ifnnslLRy#l_ii@{O;nt388x@EVWR)l~q`x=;m$($STy;^GJPM2xc` z$|()K;9aFofjQKt8kgSY1Ls%1qNKyVECnF6wkK71K5Az^ zMQv(J-vf%j2=0 zO@8C;p(Aupa8A*^E&6j%+m4?U=t7=mH;fmwM%_LMJAIn%T1L`^dk>m8I-US1n`w8} zQ@Kvzf5J#XFxc7ZP37{~wB*uQ_`0Eq+SKmD--myQmADC_G->fHU01pKcO1k9n^ Zf$#yg!`xKHZUa!OAZv3Bsuqch`xjq~OfUcd literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_2.map b/preview/pr-1492/api/latest/inherit_graph_2.map new file mode 100644 index 00000000..3dc6f992 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_2.md5 b/preview/pr-1492/api/latest/inherit_graph_2.md5 new file mode 100644 index 00000000..159891d0 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_2.md5 @@ -0,0 +1 @@ +fe278f92e5f1ae5a093447f51311472c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_2.png b/preview/pr-1492/api/latest/inherit_graph_2.png new file mode 100644 index 0000000000000000000000000000000000000000..fed5adc08232389fce8fb269be1361c50710ce9a GIT binary patch literal 2056 zcmV+j2>17iP)1 z2DEYx%qJn~{APFNvopW$&TIiF6bgkxp-?CkiZz&t0l8c*U>IieY{*b3_M%p+|2;A0 zGBLm~%w~pR{`Gg1D3obqJDJD1apQ(_RVb8c(9qBTwOVbqj`NpYC={nblbJGSpvg>` zGdMk&l}aTv8jZ8Np-`Nk%#DqW=;`Tkb~ltMG8b<$7T;#f7tWqNi@LfxlbA#zL4JPz zEE!GaPe*rmcLW6mAu}@*%a<>ocAIj!9NymE4)Iec6xh9cH{#;r9Max&nfJ-8)9J8m z*)p6wd6JEJd3nvE(PaK~93CDeZ_ulgSVj6~)%e<#KG_z8$Tt zt!Qd$f}fusR4NrZJ3CQWScvc6zhm#-y+}<>WzVUttwm8$5x#!?ija^HWM^k%@#4h* zfRd6DXfzt!yLZoQ82|(V0b*ieCb`PxawH}uqN%9~TCEnDnVER{^r^%B$H(u{qemDT z8bV}bBr-BGz~k}EI);UX!N3v)2oDd(;lqbfUS5v!@^Z7srlzJsrBdPI#fwG1UQ z#PQ?D(bUw0ty{O^+_`f|PEJNbLIRE+J&G4EUH}04`uY$X8;gK|0Gv8?3X2vkLV9{S z+g?{!7iw#3Etaj((9i&xOa@n1SDZe58f(|Cb+|tOT)uo6Sy@?#iHX6HBS)aoXmIf0 zL5p51R;&P*%f-OJfJINGQi=Thd?Y0$At50FDwPV^+1YFx6ZbN<94yUoN=gb=ty+bo zq$H?RD#+z>0I=D=IcJA+?AWnAX=!Q1UcP<%MqFH6$g^k9OyWO&{2+u7vT@@^qE@Rd zp084=h)gD9%fZ3HBqt|_EkAzzm;fN%-Q8>~IXRhJx^#&ULP&FSGvV|3sJN^~z#-$BrGu$H#|6M@O@N&!0bMT{1Ea(Bkd482|tLI@%vB240LZf<6e@95}2QBe^(Iyzu9 z8qwR^J82^#6bjkTOO`Bwo0}U10)a`)U@!mxf`fyRo}P}7kPt*fL?9|E3MnZm?6H1+ ze(>}2vseazO`A5EteFD?1KH2(*ROY~e_LA{Mn*<(=FAzBHW-FMdwVr?jV)N$BICSU`6bc3Sd_Ky`%1j>9z(0d%tvr$Z z{Cr%!dKEgI4mWS!L|$GVT3cJe<#O%121{#Z0B~{n?+`h|-^0TL48!33`SVz?V1Y^9 zpO4=0FC3rG$C@>3;Njt6(bLn@6QiS}FdB{Q-eGWXkgc1lLw|q2)j6JcefIYMr?VrN z@tRpE6hbT(BR4k}V`F0g{<&LEeBA{A-QC?792`VWP7V?i6CsgEpw((;)PG}RBc42Y z0v?Zt(9lpQ6bk6|diKs&Qc{8g2M(~uPb^ObXZVXmB8bIe)Ya7?IyxFLF)@gYj6_RI zi%G(cf8oNy!X_oMxip->2^R0^R`Xz@{HFW%nXxPJXQ1Ofr1 zQYoUMqL7u9g{4cE0+`tb@Nf8Yxm=W%mZGAf0=~Y!kVqt0xpE~weE4AZlVu`29uLLE z#khO-E<_>`0s;b1QBi^7;$m<(lc(I4gRMCp-xNniMnb7nPPu=lG1U#=IAddD zM5oh{(a}*huGMPEmoHyTj@9e+-@9#H>+u8uOw6siW%aV&T{RttYtE-FD*VmKb;bD`wHAicn zzkdB9uV23=Z{EBiBO@awbrOk$+`4tkZU;gv&oLo{eE$5IR99Dn`gAPwn8ixgU{#B_(zKWHRk=#+4GH{pdje= z`q|cS3iQrQnKRI2rpy^=GE?RZG?^)L2Aa&2IfKQw8488sZ+cKDGiFjU6GC1B*gFd@ m6bgkxp-?Ck3WY*(BL4yRBp2`ozl&-B0000 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_20.md5 b/preview/pr-1492/api/latest/inherit_graph_20.md5 new file mode 100644 index 00000000..7238faef --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_20.md5 @@ -0,0 +1 @@ +c818de6033da7cd5e9f98a9ce9c029e3 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_20.png b/preview/pr-1492/api/latest/inherit_graph_20.png new file mode 100644 index 0000000000000000000000000000000000000000..afd8fabfa54540bd5a0c6a72e0f708ac5e64ea74 GIT binary patch literal 1461 zcmV;m1xosfP)t!=#($NHi}($hw$~z=c{EugZ#n zbZogR>66OQxhw*&gj~DmA{e~AFRLyDK_oC+);7v+bQ*#VamF+&BTCwNuXgb4BTLVk zZ=T=Pd7ks|{GW6F`*?N+8X6iJ8X6kw0bO!J5QHL~PFIzSVKml`Uayb1-R|ehbDNTj zbUIy?PN)0(_l>2YCh>UuU*NChxfGKVxZUoo52T?kZnv9ID3p@d=U^6%-;8GR20$}; z1F)`476gI5zP?FVlI#AdUZ zCr_Rz>SkwWsjjZZYPBlz&CSg`eE2Y>Z$m=^Jv}|D%$PNkL!l7SXf#{x*9~vpyy5NJ zw~9C%4%6A$si^aKJcPqxo<4o5$PWz-F+Dw<(%0|zGcz-z%8aU*EC>RRA3sJEMe6G6 zFq_SU!(ndTyouRt#_4ndaP{g{%w{u3jvS$-rGr%#{e`0?X-yq9}6x`gO|7%c-xg=lOHR6F4qix_E^ zo#WN3S6D0-u3Wi7Lqh|#wY8i%bB1Tnp2_`I(hLTJ*zNX=np0C#ym;|Ku1}8Bv2EKn zY&IKr@7@KVr>BRVJ9ko9S-FP0ym~S|@%mNlc01RuU6bSO+qYvfnJ}Bpa;~hbOg^?) zEPVX<5s$~i!Gj0od}CuHq9_7TQ&Yp9J$vx^d^9&V1K@Nzxp3hE0C{OIXAyqVOHXGH|)pBieoC&AXiN#_;6h-dbxg&p?U22TwEj?jZ#=xsHj=~YR}Klr=p^Q(a}*kXEYk+V}rrK)~#D*gA=)hg$30# zi;IgXE-seOC&!s6EiI*_q=ehIZ}alyOME^b{r&wZb$Y#?cs!nxkH_Qa_3Erlsx4ld zHYr~(I-T+luEoVgs;a7xBngMZ!HpX?uv)Er`SL|kx7?saTu@Muv2Svm4b9ck*4Bp0 z<-%^avt`Scv^7OVMJWr`*RNlho10_z?%ivi0kXJV@7S?}`T2P{jzl87fB&A2jt=VT z>Zq)&O#3kX-o1PBP51l#1Ofq$9zD9M8Pw2R&El2dIPfdfCKvl6O(Tqk3**=TQX$LI4=US3XDR~J^R6{FFJ(P(69YKpS5GI_yC zU^1E5w{IVXg@ufajBxALElNvES2aUPNy(ZuSF?B}*t~hOVkb$*#fujiA0KD$-o2Pi zCg$hoSz21c>-AzV7=G=7f0owP*2c4E&q}{SAP|tE(P&D3dU{$K92}HFp^%UxoM ze!sM^uprIM%qY$!`h5EINeTvoQY;qxq0Wa7AEbeS0Y%N|=%_S4KCa09NOS-G{nGvW z_cLlvPEJZgLqi$k;o)J0-th3SG%+!e_CCd8v6Oie%+1Y7fj~eChr`m+(o))*mFVv7 zmReg||H+EU|7Q{={|RI=d0job*2oT7`%eD9@cQ-ZT#t}-w0H6bKr?v*pqab@&`jO{ zXeMs}GH%xnhvRq7p^-&WOqL|c4>aXq77Z29>-CXb&!C~9p`oFnk)Hnm=5b~-1s)x0 P00000NkvXXu0mjfy1?vA literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_21.map b/preview/pr-1492/api/latest/inherit_graph_21.map new file mode 100644 index 00000000..92a2cea7 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_21.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_21.md5 b/preview/pr-1492/api/latest/inherit_graph_21.md5 new file mode 100644 index 00000000..b2978e6a --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_21.md5 @@ -0,0 +1 @@ +5bd60494daed79edc4662f0d7b64916f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_21.png b/preview/pr-1492/api/latest/inherit_graph_21.png new file mode 100644 index 0000000000000000000000000000000000000000..3c181372da7cc14517b4641e093b2f7554de795d GIT binary patch literal 1875 zcmV-Z2dwysP)^EOQBi^R_IAIxrKP1T0nNpo z|I^UW0O03D*tv6O&>B}tFM_`MSSl8a1$*}FiB$L%!~6H|@%{UEmhEsjpwVcMmzT%* zbvhj!4hK9Q59|1zo*qaf62G`cqY;ILg{-(qNl7?;`ZVKPzkWRcEGRT!<@6#fVxuSu zB_$=WTCK2HEbw~0a5x;eefu^ZJ$eMOSPZRJiz`>Ipu4*pF)=YnOG`s_bv5?w+sBIa z_3Kw$yLJsWn+;pHZbf5bBa)Jmm^=p$9>j+aA7Hgwk(!zcwOWmjA3s8?)xzubqP)Bu za=Dy|7b+)3Q7A4hhQ(qDm{YIU!(cGr>C>kH?Ld^5m*er{#~2(OL|R%Je*E|WolXae zqM*@e7JZ)id_JU7sh?k^QlY4*2t`Fjerq>w+z8kU0BCP-$Fpb8Ff}y=i9~|4XU`%w zHkLUr^Lu*k+&S#uzkkuS17RAYX0sX9)zyfLi$h&q9n@+yQc_ZI`0!z<)oM@_1ptuC zC$GXLrm6buQRs#U? z^YgKJ^JcWQwV|S-0>IC!_`-z?001tRi^9S}3=Iu|&*uXGIyySg+1ZJ`d-sMVr(7;) zjYD5M7%G(tGMNl&wHo*C-GfS{3VBQ@T3cK3?%g}azIpRzz!5wju~_Wai;0N|+`4rO zJv}|l2+qyT#m0>r@#)hiY}v8}fPYVyO4!7fm6a88Pk(&eYUYq^71a>%Mj{($mu+ z6bf9>*t@HokdIxd+_Yuy_@ySCK8E4))5H1-Hw@= z8Js_Vp5^CoIB+-|jM#pqr@uqk#I|Y`I~0e*{)dw3>1pKTKnj$!~9< zXSPuIo}+|>1aLSUT)uo6t5>gPt<4{ozCB$k5qtHKkdT1!@o~l;8XCgH!~~j}nov?w zg6!;USS%L5;~qYI$TZ(*G{R&u;lP0di>e_UIrVxyDl03Qy}tHB9653XU0q#hYHA9) zCqF+Qdc7WQx0~^4G#c=DJnY)F>zDF`!nYSfp%7xR7`?r{$j!}#R4Ro;B7x0jLqbAA zSaJp;Vy`~rayjbi>d@BKhRn=NG&eV+pr8N(fdB%504|pc85tR@*9O4P(I6I!k(`{2 zzP>)(xpN2U>FJBAK`0b1Ip<=&Aj}aP8yoUYR9|0@fq?;R+qMlNkqG1C~=dnFfhRKEtGS|jve%qCr^Ur92^{^dwP0;+BTbwmCt6g(N3o`;CUJy9rdes zj6Wi;y`{15OG8%@(j0OiY23xPl&5C{YUfk0Sh{sWR${(DSWp>_ZO N002ovPDHLkV1l*lffWD% literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_22.map b/preview/pr-1492/api/latest/inherit_graph_22.map new file mode 100644 index 00000000..742b537b --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_22.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_22.md5 b/preview/pr-1492/api/latest/inherit_graph_22.md5 new file mode 100644 index 00000000..1764bcef --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_22.md5 @@ -0,0 +1 @@ +8d1660d7b6fbc7e9375bf0fa72e09f1f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_22.png b/preview/pr-1492/api/latest/inherit_graph_22.png new file mode 100644 index 0000000000000000000000000000000000000000..55b90e18456c0de35a9ecd7e9233cc579ed0f512 GIT binary patch literal 1657 zcmV-<28Q{GP)=aV{(tYvm~ z7QMZ_`1|+os_KfpFQS>yXf)#8yLVzupEX>&b`7nqtx~74rV-7AJkP`H^@=rp)-XIg z47b}YbsB4$l+Ov5g27-wO-&7khK9iNJOY6LK7amC>kuDk?%-TN|!lzm9={ z0m$WY?A*B%_4V~Qbm&mbTvJn1xOwv?TrL;(?%j)~rY0zrNeYmGwY0Rr z<#M65wH2E;Z(g(xOQxZr;r|ydT%e_()9ENbKc8;hxZ zA|e_d9wv_CsHdlg?%%&p3Wb8~c6-b`TefT=v)N3qU%#f4Cr?sgVIhS=A)$ZUwrzCp z-aUHr<_#ShJFt=3J@f?c29$&z?QP`1tm*W5?+7 z<;zLyl8&}gsifxSX6o+lrcpym*oHdOeMgkEdge7~0$0siC3aAJI%0zY%)9o;o@@7QD}5 zu~2<|eat-P&z~3Cp-_laDiyta`BLaNnM^|e+qZ8C0C_wfA$I!oX)>G58Pojw^(%e& z@ImO0Z!cuRbhMkAnuPZE@81QJdA(ke%jGmOG9vWbY_-8cxHy0%(B|`uH{reL%#HdHIy=-i3gj%hJ)9J*94I9#0f4XGsV6t&zte<7F*gxn5 zgF%#+mxG94G#X(xn^9F&g+G7(#EhF?uxNYh)~zY$jc<#gxg65fPL;nxp}@?{3}$9# zQs$ZL{!G*(elG#QWHKQViQvkWD z4<4j_f2MO%sZ{9g?S^)>Cz<>78atastOv7 z1_uuwghr!5US3|peOj#+MMXu>>-9K%_%NEAn^9a`ysR8Dq519GH+=l~Q5YNF27s=v zE>u=l#=LTJa?;XH#imW0@a)+$+`W4j#l^+gy?Zz2=H`}FhbZaRBNa-e5*)|D?RMkL znKR-&G+)laWN>hhyk2iY{Kty=LrM?P${fQeR(R%$U*9QTp=bOH6Db&FIN5mF8jx6PL?H9LFWRqF>(AS#OkZI7}SJ z(e(7R5SyN!CZ6ZX=krl06e5n}Xm)m1w0b1l%lO#T)D&?XM?RmAmV&6K + + diff --git a/preview/pr-1492/api/latest/inherit_graph_23.md5 b/preview/pr-1492/api/latest/inherit_graph_23.md5 new file mode 100644 index 00000000..a37f7597 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_23.md5 @@ -0,0 +1 @@ +3436e66d64ed0d0df9f207264c577907 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_23.png b/preview/pr-1492/api/latest/inherit_graph_23.png new file mode 100644 index 0000000000000000000000000000000000000000..b70d3025c35e5b1bc2bbdedaea1dc62c1b0c1c83 GIT binary patch literal 2056 zcmV+j2>17iP)QK*&l7|k@) z*^~$+H1lP&{s=Vak3d8Nv52gPM^qG}ERdqq>86{CQ!7DDd`-7}0n2%wKOVeko6cqG z{5_rz2={fJb6?- z{@rJ5Jc-3(g|Jwxe{Ww}l-dC4od#u_*|H{-NF;du`t??Y z-!a_2eH%qZMb=IO0I;yIfJcuWAvQJ^7cX8!VPPS3I-RxCT9-9n(fln+r4qrx!CMu6 z$I#i?iJw1zT00E@Kuk;wMn^}Hm6Zh!hl7@u76^qxba!`KJ2kUxN)w93Vnjtnp`)V% zN~IFBv$N>y>q9|70iHa00)aq);^JcDx~=d0T0SWjCnm!qVl1QQbz2nYy3R#q1F?%m6bS65e~ zrltluoerU)p-4|phn=0>sx?nYNWhynZy=Y;5fl^z0Emi;LUwkxK~B}x)u^qlg;uLY zY-}v9T)AR#ouZ?op;D=!P$yp2M-UAb?dMmo3b1$6bd9JCc@s{9vK-KkjZ3l zb#=vs3l|`h$siVs0RSSA2r`)rd3ky8_4P$`bTpcq4Zh$YD=P~&HZ~B8#TXbEKxk+v z^Gl;pD3F$x1{W6>q^72#qoV^65fRAF&PGg33?d^Vk(`{2PoF+9@z&E+C=^IYNLW*I zXlMv>xty7AY@5TJ_W1ZXPM$moPft(Wym=FQ_Uu7gS{ifjy?ghNnVE_3@Ngt0C855) z9#^kkU9;xF!NG8Lc1A-(1D2MSn0dc9wNxs_jT<*`{P=NPyLJtAb#=N?khHY4FyqGd znKNfhp4}2{l}bgNoSewQ!U8isH#bKJA!K@bn%LRd5v5YejA^x6VsCFx1_lP0yp46= zy?aM|e0+$LlM@jNg(N2@hYSu55<&?1{{1_#wY4Sh-@iAwXMTQu-CS4na&vPT``fo~ z1OSOHYHMpvmgCDckaN!!NDNz(W6J1YvY=);O6EAH#aw&J9iE| z9uHMjRXBhCJoI`!bUGdO@8AE&xdP^E{WomcD;f@mgX!sM#vUFX#>~tN^7Hc%6%~b` zprBPhW|x+jYC}0}hGs=Y1>)l3n7PLGMz!19+tJX_06RN71O^5| zB9TC&(Lk%!!pqAG0)YUnt*tn5;snCO!x0)93bk4d4u`X<-qh3-9zJ}Cg@pyi*VEI3 z$;nB$xw(PQ=R+V6Kq{3&uh#U7#bSFv17+fUT=7NdqW@)fXn4VqtT$Sun;~zJ{!ux%ggJpH7z-qR903( zrBWIA%F4>jYIC_MGZNF;)djSXJDdPg2gVlPhbuihKCj2L}(u9<)XRRjOQQwX!yOS;36aG^$-pf(8 zANos3u{yK~DOQIzA;s#@CZt#$+JqFVv*zhoB9Uxo9+X{-NfQ!6ngCq3LN1hD0GrJo mwssB_3WY+UP$-n0$A1APU2hwXe3ktG0000 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_24.md5 b/preview/pr-1492/api/latest/inherit_graph_24.md5 new file mode 100644 index 00000000..4f6c6186 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_24.md5 @@ -0,0 +1 @@ +0cb70146e7fd077a7bd09173971cd9af \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_24.png b/preview/pr-1492/api/latest/inherit_graph_24.png new file mode 100644 index 0000000000000000000000000000000000000000..2f734562865e2f27ad67a2f33a1034bb3e387ccd GIT binary patch literal 1455 zcmV;g1yK5lP)_eob%oJopUxYFfcGMFfjNN5Hb^@D3%C}>xg0YCc-d#6S1Mp7DbWa z;oXlx(P$J|mNA>nbai!Mu~@S1f9K8} zVzC%LpO2k8cdo#Z?C7$L%d$*MOACdCg?PPQBuQf5zI|M{Z~;k@5JeFHr_+ffNpy8} zQC?n-!{K0bbTqBj_3PI$nM{bH$lJGXIez@OcIC*j%+;$`DJm+Wt*wnnBtlJ14ILdF zT)cRZy1F`ATU&YZM-LsW~}0$+KtAwE3CwQapeDoayQ5G_BUwR<>>1 zMq67OA3uJ?;czV4FO^E+@p$O(@297yM;D_($7Q^^xtY$+PA%TGYZo?~jgu!&YPqtq zGHtu2riQOyzvB1%)0X>&h6W@_0^sb~vm7{ZfPsMlnwpw`f3KEn*RBCzGMPAc?i^E7 zQmCMeVn3&-1-MdUoOpr__nVFfvY&NIOsj8~dwhIdj zsjRGIe0*HXS*=!Wd(WOdY~Q|JGkPHxkH>Y>v{)=@%WP)6QfxMxw!L@nUI60pxMp@o zM+X**g=jR2$z)o!PBwIV8sD-d{d*$_>3^stlS!(pt5H=Ix7*FFTeqmKt>ydo?`iY? zYt%wqR8*9+Zf2YhO+8tvUx4oJZhrp!iP!5zRaITJ^Y-esd-rZWefp%uQ&UrX{`{Hl z?r!Sq>#3@$LQ#}O`}OtpX(vAv3K0&6Ieq%{s(R2vGY|-H>Cz=_Zf2}EX0w@*kr6_n z5SK4sCY4I*Ry%L6UQVYIuh+}KzyRgt<@kI)YHMq;TCG^ERwgGWDJv^m^x9&x*(fb7 z#cVb+Ha5oX+qXG<`0%QFICSXHZ)^U_1KPuf4~a&jX}P|>zE$-MP+VM0Fc`#cx6{(;HSu9uT5SFSX;TrPDbgu`KVW@ctl{{8#+>f^_cRYg&>+}PNd8VZHfcs#C7 zPfw?fE!0UQ5~?iA>fGGik~&|$d{G}gdXzS2e0*Ge{rYuUZYj-*iVF3?g9kY^-@SXM zK7IN$XB>;g)L<~U=#xw)RYg(M4_3%Csli}S{r2r!*75oIc{Laes z!r`#$a=CtO{a=mQe=-YZ|6f?j><#tXxIuo&+dcbFA@g4Qf5y17HxY)}n+U_~O@v|g zCc-d#6Or?2-0gO+WgiA>z#_9%RSf}+>(GmVfq{X6fq{Vm@DEXyW4;H!H{AdL002ov JPDHLkV1j6;*uMY( literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_25.map b/preview/pr-1492/api/latest/inherit_graph_25.map new file mode 100644 index 00000000..72d0efe7 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_25.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_25.md5 b/preview/pr-1492/api/latest/inherit_graph_25.md5 new file mode 100644 index 00000000..3ab63767 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_25.md5 @@ -0,0 +1 @@ +d28003c621c92a4560d1ae9dde56f3cd \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_25.png b/preview/pr-1492/api/latest/inherit_graph_25.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe6f7371d04e9975a3809f9ce775a623bfdcf1c GIT binary patch literal 2054 zcmV+h2>JJkP)m- znr1-;*{j1#|CIGd1tE%%_GUdP8Ho{Qh~i7-Zstp9YEceTsdVZro!idym-lg-(^Ye7 z-46_Qe&?Lu?|bh3vYm4`fQN^NhlhuUhiADXFbvQ%?J5umLKi~}&))|{QHuQh{KlCv zTf;#Dfgn^M5d7DAvUvVxbUIxrfd9;l8JTXH{QUd{7sT^-lb@dtmSv6N)FNo%`N!c+ z$76MP)A3lHC1pCArt$pw^Tn32EJ#mJM@2=2RcZ|l4Iw-{93vwm7Rk4yOedGiF*rE5 z*fN#{Z{EB?e}BJ4a?NL8wOWmuni@<^O5s4jxDwnjE;_?sHg~ab#)jW9fe3FLReTB5)u+%V`F1-9!=A5adEMl&IL0a%d!Xw z30bK0ONQ3gR;bnL#g>7do*qO*L}1;zbx2N5hDanrUtb@dJ$r_dk`k1am6@EodGlr~ zDz%X5XqrZBY%H3ao58Xy#>U3*{{4Ggx^xLeMMd!P@E#+9ABRjPLrY5wHf-2{bLY-s?b@|mogF)NpslS9&CSga3WZ=820cAJ$j!~g z*w`2n5)vShNVt6S)ud?}F)=YL_ZafpeD0mCrJ%*^EaWilC#9zBY{z(6D=C84~$ z9OdQZW?!pm6bc3E>+5mm%o#nyP2=R`Wb$5ldwU!057W}paP#I(Bqk;zARqvViHT;d z_qRz&N!fe&@L}>R`1$#ffgVSDG!oknXXgpk3(K|)cK z-q@|l->(^PenIbPQkEEoelo)!gvgM$NH zU0wBJGrvy$w5Cufgit8t`VHH2t(BrE1O^6jv5=4uXfzu1^z>k2VgiH^Y}v9!Z=QpL zgW0+b=O~p*h(sa)fUmDF7={7MvN(D2q~7?s?p1epH&(7(32$$2E*2adJnwpc1&cj0 zv9;CruRx&x2Nsn|h0xGY5JHfenu_e~Y(zyx;pfkvdgEpqX1YD|>%lOuVS6EJ{tiw~ zPS9vHP^na0Y>szyC4YXSAtk1s8)jf@mj}KO@T7?%cUT`sIXJ>?mhr`d$&uF~i zy_$)mqa!9JCNMEE!Nm-(&!4hj&*>Z;9WgXC#I+R)1%`)*k(HH&*w|PE1qIFeV{l<% zA-Bkeh6Xe>HDUYq?Z2hL5;cp9i}g0rhHX=LczD3w-5po1T;XClIXUq3^n|;+JH%o! zyu7?1lgXgfY5@Qp9UXZ6`nB1*r&+OL1!OWAE?l@^^t^4_=;q?-=?OPCH(bAd9RQ%y z>2U4ZwO`6H9}D)#L?V$OBO?Qk9zBAuuP<)gxPhpsD2T;kh{a;`_V&WZ$H(Y#gQuq_ zyu7^N;^Kmijt=DHlXIx*@N4+Z)1FX9HF5L{P)V=IY=}$HIadV0i$?d zUmvNft0OGSaF@8?>zmFqHa14&ayj|-?c1DnMn*oxFSZj!aEW8C@f- zR!cs7_&{1)TZu-aFqcorsJ_Xyy + + diff --git a/preview/pr-1492/api/latest/inherit_graph_26.md5 b/preview/pr-1492/api/latest/inherit_graph_26.md5 new file mode 100644 index 00000000..4b894ed5 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_26.md5 @@ -0,0 +1 @@ +3d8ba6d7ef3982f82750fa36622e73fa \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_26.png b/preview/pr-1492/api/latest/inherit_graph_26.png new file mode 100644 index 0000000000000000000000000000000000000000..9beca5787dff6b3ec056b8828eaa7e22dde1a8d3 GIT binary patch literal 2609 zcmV-13eNS3P)<=jKz>RCtl_t5SPV~E!#}Qa9IR(;sqSa!eXFH17Y<76+sugAYo-Hgo!OTp|t$o zKi-$~a$0(kTiN?QpQK5j>-YOR&-t}|PR{`t3gs9?4-Zd?o-^Ei z9@xG5G+9zoQm|pe21G|kPnX23V9%aCkV>UUO-*&T74-DFI$?CPQRo zB;w-Y;Njt6cbrP4f9X$8kb4W@`f=njE{rmTE@#004l$4;XtjzA% z*Is*VLR!y1|2&eClHlj(ht}3s?Ao;pyLRouh7B7g8;)ChJGIMn(o2 z8ym4?$r9|}zaNVhE#h=muU?HCH*TPzp#f5<6j@nWXlZG|kt0XY+uMt{xH!be$8+;J z(^RQcShsE+bUNL*n#IM%sHmvG$&)9?EjxmUP*6|+wOS2<< z7cS7d@4ib4g@T5LhPZYgA0PVm+i&TYUw)xC-+YsnE?r6y5fOCm+&Rk6&nJ;cM76cG z+?P*hYD#m2@ujoq5u++0ddPA-|Yq_93QUVr^{Dl9B?I4&zI zixLwPdGjPCC2{4Up&^n;By{T3DXu*|J)LX+_19ks0JXQbb9EaxZlui2%qi3S^Upu& z^5x51yLH)KQgn89l29n*^;N6Y0D=Hkws zJLv1{Lq|u4%?5Az^5xunZ*Omeg@xhPty^53TrTI{FI>0~bLY;5pPwJEZtTy6$!bca zQr_3Lb=gs@LZJ}LmM!DzR<2wLv)PQ6mKF>S4uXjA)?07!#?75O*Ja<2yd-OXKx-v{rZT-i1gc!qTNnxw^5N=kc`c#c$7lb91x9*a09YD2RLi z?6c2unq6I87#<$RXP8!He9aQpUc1Ox=w_2ep3mK2_z{HX*2{tdW&eSHWI569-s zn~{=|f@hw22Ib}DxO9nkgCg&Q9xX3eu)yxT*5&EYoCpgREP&Z;Mqgha=FguG0C@cP zG1q1?nP9P4U^E)x2JMOV-btR z7#tkL;NT!cA`t-o@d*hD!TkC2p;oIoEo+?l_wn(u8~Z5s)>SMPLm&`f-@bjEzfr~} z@?@B{|0%>`F}l0ExpI4ZJ03rNjP&$$tY5z#%a<=7_hziZ!a{Blv|26d>gup+)v5`3 zmm7boCFTeZ} z7cXAqjjgJxLQPGLQ~!=)cZNctKyYv{u3o*0$jC@UMMWVZA_9$#jS!2)PZg^@rtOk! ze0)4U{q$4({PWKU4GqQN!-uhU?OMp?a>(U!==FMpgoM~!&I}3)LU3>}BoYalo12lH zosCyteRV<}6bi+pHT8Nuu3Wjo^|dYoKxt_yu3x{-t1B!l#7{r{gbzRb5NFSxg~ejQ z$jAsvN=mpZHm6UYMtpoc{Qdpm>+6e=krA9fe;zWK%q8Dr*}Z!=yu7@yb?a7mdwWAB zlfhsxz-Tn$;K73~A2Tm6FC05|4DY}HK8_zhj{g3BgopDVui3qOH#|K(k&uu8kw}Ea zix;DguSYqr;~D{{8z@TU*Q96g4+DlUA!GgTX)#A3o%@jn32C+e`KJ_4N1Oe>>DM z8jVy_Q^V_X>((v0d-pD{&XJ~4siYGpPT19Sw$W~EY$T0FWAp0k>mwo}lgUIkZ{DOo z{`iB2hlg#Bk;P)6d-v{9Q&SU}&1RQ<>vTGL@Zf>Xd}gzmZr;2}TCJA!dOcYz7Kg{s z-dqC%1EkaGsI#+^hK7bnqtTGbWa9N19v-HqrY5>_gnmR(RKxU8*Q5(Zpq2Xu>yhM%>T>t6k%auNJ~q@M<0FUZYzu# z=0DF492X%CMk$W3n0!7UKorSM<^7wyW0bU!C){L3 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_27.md5 b/preview/pr-1492/api/latest/inherit_graph_27.md5 new file mode 100644 index 00000000..1382d24f --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_27.md5 @@ -0,0 +1 @@ +458a04428d0ab2316278430b2ef5ab0e \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_27.png b/preview/pr-1492/api/latest/inherit_graph_27.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe4ef5a96cf740993b9eb33a882498d7b762611 GIT binary patch literal 2654 zcmV-k3ZeChP)myK^l^uKv02b)QCi@M#TWeNFHci zkwF9#MFWZovHFi&;ufM}qqtH12@xZ~7?m^_tqQHkVpv3?5S2!Rmc?M{aNi&AF^_2} zR0P4_yPu>9_uMmQnai1(bK3zZ6bgkxp-?Ck3Z?%r<^q;w-57=m7>Zyhl;4d=B&thG zOMB5>W@oO%FiZf$Fn|BPuqc$FqqDO!3&6j+%Pfkbi?p<~K@W&R8A{U9(xBC9E##sh zh=oEK*3hD$P|To3L7|v2tcrqVSv-FHc&NkpBZ!NOLvC*FZ}HXG*a)dq3WLEgDE5cj zx(}2yOK#vj4!*RS#A%a;MM)mMQTjYj0>=cA*eV?g|wGu+mF(261^CI$~5 zJ{&Cb!-li0%OWHs1X``ON1sZi61lm#$jHd(aoih( z5GWK1JbCg248tHOC}=e>e;<0i9^v8PShsGSO>vvEWy=;!n>G!P9zB9c z^uGrHmSv&W>#eTU?%lhQm6e6y;9vv?2Lk{&j>GBGr}6aZQ@FXgVg35`7XBh4B5>{6 zHGKT|5fX_69LGVSP=IAwoH}(%p!>7AoIZUT#l^))O-+S^g9Ea&vvKd;6eSNWN)hfJrA^3(JiHV6AF=7N*mPJiX4FUrL`75zTqd{zJES#L2uzmY> z6crU=>C&axw{IWTtXYGQkPt*gMdA7L=e)hXd}=frY}&NRs?XZmTD*Goiq|(E_eNY? z98R1#fz_*5BP1jQa=9FdiHZDtN=gcL?AU=hbLL?4=FP~-$w5v|j?L$)i@LfxJb(Ti zNl8h9g6P7@$;s+k&6qL6qCeTbeLJpPxq=NFHemMb+1RjQgN0282M5SxGF-ZJ2>_6r zn~TYlCu8p1xfZ&%=E89t;^N|vk&%I8$Bx0l!2yR4A4Wn#0;EzYwr<^u+}vD2JU!(z z;6z79hi}`qjrPo5AvJ3FG+>&dro--w-^9m&tn7aZ5t)@D=O^XAPX3Wb6YLP&moJ^?^JeE7i6 zKYH|tELyaP|8&pSJl^iM>g(%?NF*YqrKSA5QmG^W$k(r5`J4|PJV?sQ%80YGGcg*C zBq%6|T)upnqchEGV8D6`e}Dfzb*ieWaPi_rR8>`>wY3%X_4ROZ zaS`ZrztY&-+r!`A9~Bi9yv)gsB=x3_~3f&~i}2#y;wW{k~on;)as>miXy006$ezL3l1 z&}y|vNJtRq_qJB=-o3-9QKJM`+rdk(Za((;o(`DD3QnrWi)} z1KifuRs;kDVB^M(h>3}TgM$O^-@k8h8}0rN-8Jrh`!~01J{}C8{lUq}2_};Xt*xyX zKYly_psA^epEDYb;5ZHjg8>sKPV86QUCf+06XV8>Ltb7U{QUd?0M5?NaCUZv$z-z7 zH(#snI669_y}cdn?d=#fY7_v=^V6N!*jTJzzaBex?!@TPqb=rb%_TWG8CS1fMSOfb z&Ye34hGF37=m>^kkd&0f$I?ajqU|l8{xE1;vW||9Xl!ic$8~jeXliOga&j_4Lqjol z?%W=KjFq0A&M$&mtwv#CA(ky$)~^@_!lzQH6f~OVV{3SMdBMZO11C?OU~MhOR=i6>o2EOr1Iv zXV0Dm0CaYC;>?*dR`tWe!jPAjhveks9_MY%#l^)1`T6-!tJT=Lbt^cIgO`^Ve0+RR zP*8wHixxpDl_D@O5XHsCaCCJ1sl0xMLEDm*$z+I+kH_7+cj4>ni`3LqtX#Pgo}QlY z^z=k+Z7pWboN2M0>FwJmzUQs`?RIe&dSQdn>TL+ zvh?(H+`M@cYuB#DojZ5HaU423JCT{0$v4BdZ{LPYCd1UJQ{n9FjLyzZ+`D%V5{bm7 zxVw{>mwfUTh#bR8$b`4=+VYq(%I@;RW5D;Mf z^%}8Q45?IVb>7xB0Dwu8CPAfAAvib~YuB!YQmI5%Ru(pG+JsA&F2U8+6*V+3D#pFVve&z?OKG)m>=m|8cA7M z8F~BmE$Qg!usBB?$C3B%-;r#2)soMjKU>%{nM|attc!=Dh%gLhlq5iW#&hC=@ejQBWvm(4wGF%%DXZL1`sg>u}~<#9g#>>H`FmuC=?2XLZMJ7lz$fg20BR9(Wp`|tN;K2 M07*qoM6N<$f}VvhYXATM literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_28.map b/preview/pr-1492/api/latest/inherit_graph_28.map new file mode 100644 index 00000000..26f0fdff --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_28.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_28.md5 b/preview/pr-1492/api/latest/inherit_graph_28.md5 new file mode 100644 index 00000000..5a850ea3 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_28.md5 @@ -0,0 +1 @@ +2bc8d9db7593ddcf5636855dad5e00b2 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_28.png b/preview/pr-1492/api/latest/inherit_graph_28.png new file mode 100644 index 0000000000000000000000000000000000000000..0bcfcc7fe8060ac5b2abf9e377b36bd8a2170907 GIT binary patch literal 2387 zcmV-Z39R;sP)wUAqI#8Mc@ZRS@+N7gqD_8 zW$3+kKfk)y-uvC}S^KQE=kyd{Fc=I5gTY`h7>wVC(+$XEGG~tCmQ92i24lPt2n5aP z>FGs7W0tyuIF4J!aopeIXN$p@I0gm=vH|>SXlz(f43eInKIVoPjEN*YJsm2QYFJz_ z0bUpkvxXG~gP{W}3I;<5vnmRiOonIAo=vn3vxDVjd@-w{c=zrd+S=MC+J@P|@-n`R zSy4nsN8{qp`6O^XAQiMx#MSMh0Xu*|1_U z#m~@O#>dAG%lGNir%_f`hO=kS!p_bP4<0Jbq#GBS{# zpAU}Xuy*ZQL_|c4n6H&9R}Mc(|AeThsNkJDchaxm<>f`wr%$INM~+Z_em*G_3KEG# zl$4Z23Wb7HDiskCm6w;3LZP7i{Cqlf>J-`A+mlkM)Y6$cbt7_R`}@lqklqplRa%GC2p}A~pYa=f&FS>d2 zCiVCCQ%p<@NhA_#X=x!MqSVw>nm>O&UAc0Fa&mG=DwR@jaPWwFfq{V(7Z*2dAM^6^ z2mm!TH5t{etgO_#$Hx4~<#KXza-wtR&e4Mh4=6M=lyY-(4eIUMwToO`T`4Ooi*DSw zK|-OB5)u+dJU&yoc<~}dMMeEHW<{Z!WQjyVSFc_jab9X_Dn&#@XzA?Ov4d~-^z@LE zlM~&!bBFJj%jJCklP6CI05vx^^RZ2vHc?7S%BZc`*w{#K-n`-ab=!kQQBhGrvu4er z-rinXyLK&IzI<74QJCUKHGS8$2K5XTMRj#G0U)JPX_B_?9vhqU{rh*aw6vsxf|ySuyf>b14Ckw75O z%6EQ#K3Q5?l3J}cczmW}s3=C|>k|NYdwUxlQ(Ie$ix)4Vwzd{sU0rBxZH1GQlhzm? zA0Pg;wY4?8y}eOgUCqZtA`$<3`t<3rwY7z_v$IxAtyYiPnnIxvLZOiF*KH57aN$CT z#bTT|aRSA~#kha}KAt~+{#!ZFm&>H2BnX8)}-Md$7EXQ%E zsi}dBi;F=$ef;?G0{~!SV`H-RP>ju)I&~_D2!4KkTK%@RwtD^4*49EG5Mc4*#eB@y z*BAZ${iv&}gG3_vrQJLKl(qNqsg z0Y$A7daylh+BAc@y6v%8(^O(&Vh|o4j@`R=!^XzuxBckm5&-0KIj&v1hCO@s;LMpb z;5ZKU_V(a74*T})!{o`6wZ?mTdXA{4j~6dqV9Jy!aCdh{eSN)AZQa}(^YiuVS7TO9 z^XJbYm&^aik3O87oKR3u0Hsoi$jC@&G#ZG-Vt9CXpt!gg%a<>QR4RqPzdy>#%3yDA zZ<6jHPo6x%(W6I^n3#x3lO~y@t-Hs@=7>ZhczAdqIXM{`jRpWvRaJ%J;$nk(E-o%O zapD9YOG`_Go12^7PpZ*k%!(o`EDWissqpvrM{H~?#9}dmf`T9tiQwz&3z0~q_hZw| z%?%zN9*{^RShZ>u($dnfaN)w=@-P}}HZ?Wj?c2BfSl#wetgNgcl}a&V#*9DmV+cn_ zM<^5u)Ya8t%a$z|7#Kiyb~YY8dW5-i=fcOw2eW6-Mngjb{}sy++1c5UN~Q4g^TV7u za}XUJjl+izBRM%40AOKZVN_dpkB!Z-u&}`0yLVAoSctiE=VH;KMcA@s3uexosaMa+ z$_lq`-NN6$%Bt zeEE`!ii)VAp+T>IW7~U`4@T=)j7C!O(#f1%sgjD+&ff2ZMK?qNAh7(+7iL zHVi8YB2oefnE)>g#<(L82%0C_1B1a}Fc=I5gTeUU;@{X9G0O9jWa0n-002ovPDHLk FV1hbPo8SNd literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_29.map b/preview/pr-1492/api/latest/inherit_graph_29.map new file mode 100644 index 00000000..718acf4f --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_29.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_29.md5 b/preview/pr-1492/api/latest/inherit_graph_29.md5 new file mode 100644 index 00000000..50923511 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_29.md5 @@ -0,0 +1 @@ +46100444b4e6387ec5366a24a55e8056 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_29.png b/preview/pr-1492/api/latest/inherit_graph_29.png new file mode 100644 index 0000000000000000000000000000000000000000..78971d37064884d493ad1bd49016d155bd5ef952 GIT binary patch literal 2126 zcmV-U2(kBxP)Xc%`B=g0xYYmTu_G$k~w8B3Gs}XOO?{_m3A3ZaOn_ zx##VC{@Q)r*RJb(F20;|ZYRLP!otGB!otGB@@r7G0h*?_P!zRmCB(4&d2l$K{?gLY z=Gie<+a!vjc2N}d_wSR%@+UJrJzWFfU$bL#OgTeoX{o~nvHaPTmX<=N)6I!}qm`E7bU4FY%FD|U9UTpsOy=-jPGw51RtuBKw9+!1 zj+LHEV`C$-v$H|dG?YrE!}~eRlnR9c4<9~sRC%W%D=P~Ui3A#r#wu}s^mK5!+(p-;X&NyxF=%gZ zhgPcvpU+2LULFJj0djJ3P*YO_LI}FLx{#EV1i4%eLI}#r%1~cl4~n7?85y~3@0-hV zr_^e-kjZ3lb8|yRMh4VsH8yYFjM&&%sMTuFGz|bqNJxNMtwvs69=31aj+mGjG&fuQ z!i3DsOt`qXfTn5m^z=Y17Gr#ToavL6mIf~`FQlfXqOGkB`}glhc6K)6;^H8cN+Fla z@%;I7rrwWwYPDJ%J9f-&&%VAsynOkR$+ukt0FTE*LP7$rUAqPVsH>~Ph7B7K8X7uh zR*TUydzRa_ZDaPPrlz1&Dp6fsjr{z4@OV62xNrey&YXcnB0+L;GV1E;aP;WWMb(>~ zBbUqJ?(UA%)Kq->^a(LBF^t~O&`|8yu>)$g8vFL`0{|$MN?g2n5wWqckV>UctJTQN z%$#eEFHLnkdP2kUS7W7_ta`Nk;!CMb>wn6v;O}5JK^*B zd&!FzFPMGXbwor2$;-Rz z(9jU! za=ApO(=oYbvzfTLxsjfp9=r7-A|k9}B9VyX=H@c%_wU~m0Oa%M&x8;{PMkPF6bc2i zZ!(z(hr_X&Lw$WcadmYiX0v(0>zz$WNeM|wN%@bh2bbmX4FJKx!9UFD?(RlONeQ~U zyJ4|dFfcFxKA&%uGyCr1=H`ar;9zuhbulr2e}Crlx^?T|;o*TTTeeum%x3el^%MvM z5C{a!zU_L3pr9ZKg+de-7NVu41-EbCMnglxl4da9EVHw-ArJ`A-rf!u7Z(6PS63G% zCMIzD^l7VHilSgJ7~t#cYqy>)0RaKb=k@E?0|3lsGxHi_dkq{8$Li1%78Zud$w?TE zMudcf{IK6bESo7^U9C$|l=VL#Su7Up+O-QwNl8#B6yWiAxOeZ~oX7WUL(Qzcyu9qz zwOu=+=VD1qOG9E}B2Jz>iB+psEm@E4ECE2JQlX-v0vQ<@xN_wRD2jrorza?i!r8ND z;qLBkl|TD2JzqUr7Mi0iUS3|9oScNkV!_(AYXJbm!^6zpui~)Nx2LBkhK7cib$@?9 zhKGltQmGIf9gWb?(0PB1FE1}=Ow!cUgx1zpgolSONyBpVym|8`5)%`dT-)_*4j(>@ zhK2^HRH|RnGar0DA5We8_5K(w^9V9%aCkVqsDi^b6E_3-rc zTvXkqAQTGW>+6fc!a^oiP*8w?fB@$1{3|%jlrt~%VzC%Xr4mA+5K&Q4@b~veSXdbR z{r%zL;W6iX0RaIB3=Bj_NC*xbIDmqJ0t5vGElI<2^jyqAX9g~p3yDO+JpPud#~$9^ z-q2_?FdB_Ga^wi6r>9X;&0x(Ax%w9#B4T`j~_o; z?akB~9UUcFt(FW94ldYdWMqUqefrcYr>m=rynXxDDz;Ehkw`>t+_+)4=Z_9LdcB@G zRM;{&I5b&rjW5sgMeOePZ(>+9({Rfes@Om>>1hSOifJ@jYdPh zefvfTA*8#zn-~m+IoB~hK2AD2JIU+UugS#3#Jn?D2zv*eWijPHnHf{E{C@12(y4y? zW?=!A@$~&qrM9BkHRwxv|QwIwR z!yHo*LYe@?uYeYoKM)Rw)4$RhSXfwCSXfwCSpNU`FKU!w`hdH9$N&HU07*qoM6N<$ Ef-A`cegFUf literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_3.map b/preview/pr-1492/api/latest/inherit_graph_3.map new file mode 100644 index 00000000..96999910 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_3.md5 b/preview/pr-1492/api/latest/inherit_graph_3.md5 new file mode 100644 index 00000000..6164ba4c --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_3.md5 @@ -0,0 +1 @@ +9e855ab209483330f05cfae2bc909592 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_3.png b/preview/pr-1492/api/latest/inherit_graph_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f79ac646bc683e6aee1085c66f80c3b84bf8e5 GIT binary patch literal 2245 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 T-E)I~00000NkvXXu0mjf17JuO literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_30.map b/preview/pr-1492/api/latest/inherit_graph_30.map new file mode 100644 index 00000000..d3c821e9 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_30.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_30.md5 b/preview/pr-1492/api/latest/inherit_graph_30.md5 new file mode 100644 index 00000000..2c51d643 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_30.md5 @@ -0,0 +1 @@ +e7eefdb9ea83a770417ca96d7e6c8a45 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_30.png b/preview/pr-1492/api/latest/inherit_graph_30.png new file mode 100644 index 0000000000000000000000000000000000000000..77e936181fd2c12f5900c67cb67f33acaebad6f7 GIT binary patch literal 1920 zcmV-`2Y>j9P)=~Q4>>kL?wlhq>NgWrI18_1*MD8 zO!Fck!b%MX5oMNFBAS$0YP`IenifTqLCMTN%QPdmBvOeKOlR7KfAV>+Jao2cxwfXg z=X15^d4A{lv)^~yIXeds5D*X$5D*X$_+1!Fhgz-P$S_QdE1D5leuzY(fs&Gv<{y3T zmWvpMiD4M#pFh`@z;b4GcJ@AiBR~4AL^VfANr}@N5?J1pl$5|=Fj)CTF6c$zFGmoS zfWr|)CE#$Dl&I8dHJ&|t=IS;Cev>67s`mDF3=Ivrx($Kf#A%{RO-;pwqVQD?5hX`(V13>X|7bXNK$LswT9j7B303JQ4s($Z2G zjYhn9@xn!&xsG}Nr&)#9}cD3k$h5BO@a?eE2ZR%E}NB5U_X=EJR95%Fz=i zPS9eAh=?FxUthX(=@MzRTGHusB$LVL?Af!V)9J`yFc1+@S63J5bUM;%wNy}0KoW_B z^m;un&#G0cC^t8k>gwuf|Ni~NvMfzbPI7TSKR>#5?HbkB*VDFb+bBFdoD>QLRaaNj zjT<+})6`L{wK-M{>EG>g(&t z+uNJ>UTHKM+Prx)-MV#)>gwu9sZ`R@qeprDEOy4Uv@{9|3Zlx&O1g9B4oRg_I&nk?D=S;@IE_X_ zDwT?t=lJpCoIN=?N&f!+bno6hE}oNu73fisItp=;qCvR-zgi86mM)%zem+h|Fd)d3boxhYug@nsI1o zh(sb0uP3cmOYZLOWHy_*oR<4@;J^XO%*^C$mSw51uyEe@%@*^C${|0001z1&`O`Hf zlL^Je#W0ynn3$Nr;NT$q{r!1sqN1X>*B%}oh>VOxPfri$lgVVPciU$uKps}%$x2C732h-EjIDPsw&(AOn zj7B2@0|OU5qse4~NF>76ty{TxbaXUkW@gaa+Y7l|4#0YU($mwCl$3;v7cZizsR{l4 z{YXwuwwlWx940DvcYZ2{;XeQ|F)@Ldm>3*8b_}VhsaUykB_2L}h~{SA4Q`$w=4>Ay zpLz3I+Rmu?tDHP}63NNQICbh2R;*ZI6_-dPU>FAH&Ygp&rzbBK9v(jLObgBEOknlu)c}Ce(NQiohvok4+O-S5zP_lgu0~Bw4UQZ+V%N;JaN5xIKvYze&6|;BWo6tZ>-BoHwY4EOHrB2l98t5Xs*3jswzPlb(4j+U zY-~hMPL9nu%d!X!4Ml5fD|YPI0i{w2g+hVO&Q3@q61!$(Sr&nTfymF#=X`m2c?by! z;lBB7!7vQc($aAC>Q&U%)*>Y(#jg6caGI!+l9Hg&XrNFike;3nmSqti9}k&KhUn;M z$Ye5jd3jkK7ZMVJ(9lrG<#O!ay&HLXc?b&&v#SS3)a>u?M@vf!x7O1B5wTbdrBaDC zYu4C|yScgH{{8!CXlTHuO`8xE6@~Td*W=^Ik8pEyvuj4NSd5B_3Y3?ZgJoF+2M42} zp#c>Y6%dIQ-d>eT1(V5y;NV~=6bifQ{}T3`sJFGX(cs{qmH*SHPt?@Z#5*y4_wF6( z^?EX!&Gh;6XI^YB&-nN_wYRs^@bK`0b;icV==t;Kyfr;NJ@o$ld!BEhnh_BZbocJv zd29acM7^`KlRL?_WO#Vks=qn<`}?V_t&P5Z{pyezr>3T;yStm-zI{v6)6)y)oMU!& zmI4C^k1*SAPP_i`dv$w6wG!J3AYG zetr(k{l6F0>({Sc-GWPS=F=cc>L~?*zXL&30uDzIm4L$$L?z&G1W^e%oO!SQQd3j^ zWFG>55muriB0Yda7xW^q3=xS$1Fr5tKtMo1KtMp?Z{$CEifR~qzhqtj0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_31.md5 b/preview/pr-1492/api/latest/inherit_graph_31.md5 new file mode 100644 index 00000000..5b3a486d --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_31.md5 @@ -0,0 +1 @@ +069f3f53f67f715324f2caeb90bfd5de \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_31.png b/preview/pr-1492/api/latest/inherit_graph_31.png new file mode 100644 index 0000000000000000000000000000000000000000..d5085ca29a05b099c5d2028ed514a66b06893ea5 GIT binary patch literal 93180 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 gy5vldi{?F1S(&UA6| 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_32.map b/preview/pr-1492/api/latest/inherit_graph_32.map new file mode 100644 index 00000000..2c6ceb37 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_32.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_32.md5 b/preview/pr-1492/api/latest/inherit_graph_32.md5 new file mode 100644 index 00000000..97b44927 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_32.md5 @@ -0,0 +1 @@ +1d6b78a8ee3192b1e77d3d9ae9959370 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_32.png b/preview/pr-1492/api/latest/inherit_graph_32.png new file mode 100644 index 0000000000000000000000000000000000000000..8652e9e4460fbabc8c075574d881995eb140ab97 GIT binary patch literal 2451 zcmV;E32gR>P)xxlv4=#b&Xh>0^vT0-s5zq)xN)bdT%XvOLVP1x^2`%;E zy}wU$?!9x)|I9g^%-jyZU@#aA27|$1FpPX%F4ol0|$_jk^&nW8-vF)*quBiBm~c& zKR1;7zY4WljhL7i`1tt1%gYP<_U%JiS(&kA4T!#K6c!eS`1triuYdXSB|JSn;p^** zg$oxBJN`fztjSd>6>4f~4CVf>p{%S7&d$!r$jHFPjT<48$xvTk52;j&^z?LN%j*|? z)u^zr5as3NgI-@(R|j)*^I^vwEP8odk;!E6_Vz|zULI5`6&f2GQBqQZlP6E&%9Sf{ za&kgKLIT3W!;zhx4WUp7J3BiB1_ol;vSmD9zkdC~;lqbfP*8x`vu7hBA_7yUOyT0J zT)7fOMMcQV%Y#@fMs##E%FD}FMdXdGltk_V(@DF?a4)1M%fO3BK~ijE&YPMMjRq);fx z!NGwJ95_GzS+RDvOnly>doH;{Jo;;z&ix<$}@kRaFFlGBPrBu1RBKBMF55UbSi!g@%Umv`(2ag<@l4DLp-% z)~;PkQmK@y$J(`P$=lnT6bc1ZR8$Nq|G|)$m`FiEL3a(-q?#hA%3kFR6bgASVM~@QL3?{U%FD~) z;^Okhxfd4~qphtCd-v|;X%YwoC@Cp{y}iAT-Y$C9a@Ve1@b~w}(W6I^m6e66sw$nw zt)4hKI&#O8Cr{?CN7rLucLtmPP|;hHj~&Z*B@pmGaBOO7f}5Kg0s;aM5)y(56DHvC z3x4`t4~OB4%IApFbbw=H|%A$bhr6GjC3*RHCV=2}_qQg^7s? zT3TAr($WG`Q&XLo6DLkYdwV;Ynwnr?VF3WBudnCkhLXFbr6mLc0S+EK$i?iU>&MpD z`8{j7V#NwrSy|!Uy?c1@-~l#m+BD$x=}%iv2Als-G1%^krKKg*YBgt9S68FHz8;a0 zk?{8RhO4V@WVfpgq@bK_}ySqCI3JPFpX$e5LMtva=2(WYKPMkV*3J)JX zL{L!BkTmtDRp0q{$6$X3`TP50&z?QFfB!z5ot+UM9}h1tFE}_jz`?-*RaI4(KYu>7 zS}pH9M@L6EIXS`F+8UoeeL`$(EauLgJ0uMfiDcL@tE#H-_U&74ZBP5)!GjeQ*+N;5@#ebxG&VL;Zf-99`0=CPI1LRA^!oK{-kRd#Vk#>uRM%E`&0pFe-<%=N5MU$yM)>?C`8dy0#T)0rzMDB#8I>7%2ggA@t{H8(dC z5m9MrDV3Cz==kX`|G{9;-If0`T}{sDpBFD)(D?D=sjjZh*i!n$;JYh~(Tk_2C*Hn& zi$jMFVbY{Y#+LKP{NFcuety2OCH(dL*S`$?t3I`5Fbn}}a>l5KH92F{!S0aJ z81?kIyAl!-GLkwN41=N5`~y%XC6QDp RA*TQU002ovPDHLkV1n9hy(9nt literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_33.map b/preview/pr-1492/api/latest/inherit_graph_33.map new file mode 100644 index 00000000..5e1a85b4 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_33.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_33.md5 b/preview/pr-1492/api/latest/inherit_graph_33.md5 new file mode 100644 index 00000000..c6fa3806 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_33.md5 @@ -0,0 +1 @@ +c171cd6afbb1a0ead15be4997650ae4f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_33.png b/preview/pr-1492/api/latest/inherit_graph_33.png new file mode 100644 index 0000000000000000000000000000000000000000..c124ac8ae460557303b4651e6472c23f0815083b GIT binary patch literal 20161 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_34.map b/preview/pr-1492/api/latest/inherit_graph_34.map new file mode 100644 index 00000000..f0fc5afb --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_34.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_34.md5 b/preview/pr-1492/api/latest/inherit_graph_34.md5 new file mode 100644 index 00000000..2c93b617 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_34.md5 @@ -0,0 +1 @@ +85b9a9717eef31ce712a061d6dedb71c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_34.png b/preview/pr-1492/api/latest/inherit_graph_34.png new file mode 100644 index 0000000000000000000000000000000000000000..d68ed8230ea893f4be796554f05f20e33bb9e6a5 GIT binary patch literal 1802 zcmV+l2le=gP)!lkFSEk9%t(YqcytG+K+^wphYMWvGp{54{jHg6Jt& z^g)`9B9Nk2F&vR-5kX(X1!WLfe;%XkosX1cO2J_V%KtrUsWUUxrqzMQv>@ zjvqgcwzf8iL?SF%vIHe1B`_L|VY$A3{fZMOPQdH+V#SITC@(KZc6K&jXTydK=r! z9fiSQKv`KCBoYZuo;(@#tR{3Q5ke8Q-!-o%J?%cW4Gu332mX>bc zvu6(_f=;KStgI}ms;Z)vmKJh4oupQ)>FCj;Yd?!t%_SGlwcGE2*ieiMDLnLK=;R#>dC`_4)JX)7i6U>CT-yR9IL@IXO9GFc|2@ zjT>~~!Uf9A%%s-VRzByS)~v3srsd0*^ZSM4jT<*oSy>rB{`vDKiN#{Ne*Jn}wI}v% zaBwiLm_&PEx7%sivSoDX(j{tYY9f=#MBBG-CnBPkFJDGItI1-bY4`bjB$Z0()TvYS z;K2i`uC6AF#gdSZ>gwvKw6yf^q?vT$K@kz<=jT&>ef^|ycDtQQN=m}=?B2bbACHfZ zlR}}OYuB#v>lGCh{QCX-_Xz+E3=HsdTeohd%F4Br+tG2Lj@x&z3gW=&}l1L=H`G|-{Mn)(jBZJ<&c|$~zXBAJ3P;Zf@?Bd;0qNP*+!nzP>($LLmeK0VouTuswRcp8uSYk%8RY zT=@Ndeon1c^PjV_vLKa8p;Riv=0-+FW~`=4rGiSO;@5>^0BCG%L|0cA#>U3b)6;{R zni^;{nz(8U`xZ}3B0cc?{rK_Y2M!)Q7?y+MIP~`RV(HSQ5E5_9MD04A4tw|RMP6PW z)~s0rqtS?M+qOmIo(?l+(pj^@Q*m7Q3s#{}2*t(4*tKgHY&IKYG8t~)zKyoFuoqs! z4EB3GZ{EC^d4=O-)SQaK!b0rdzaKK03@cZzgj_CxsHlM1Y=&O1kNPq}eSJM|8kfrjx7&^N>(@_9!%Wm{XlTIBojdux!ZGmA z#i^j60CKrJq1w~Yn+O_>23oBa&!0cX+O=z8GMQj77~u7Kd9A{;iYG?Mix)5O=+Prc zBogH3=fh^Rp{J)O;sG!nl4eqi#R9wC4uipfef#!7qtRf~rcF?*)hH?|f?BPHR4R># zTeWHxv|26l^YgK8-8!5;eHyD*ub!5MnW)*{-;eh8c7CsL{HL}5G-fKqVlf&U8*%sU zT`XR_7<#=P3l}cL+qZA|C!FxC;)xNWP$+Qz{COyqN)#0p!Duw%(4j+EuwcO->5s~E zE>3Q@n*xDA#QcX3AE>ppHS8Dgo}M0Zxm+|dGD06eehgdtohKL!Qb$Jzeg6D;(mJD~ zqx9s-ldwI0zn@;cdKES|SxuczM^~;~iCJ^1i<8&uji?uI?O1(FBqrV-5E1qF_mkW0 zrm?ZHh_z^EHCaq7?eE{er}p-C8X6jkSeuHZ-tPa){5B~g^~5r1TK(^y!HC9;-R}RZ zbai#5S^{GV*prlz_Arw&(jI0~M%u$n%1C>dNf~KR%-g-qX8SjFFc>k3Fewqa0PIMC s76t<%k!T>*8W;=)gTY`h7z`o*2hrR0>CO$uWdHyG07*qoM6N<$g8h<*DgXcg literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_35.map b/preview/pr-1492/api/latest/inherit_graph_35.map new file mode 100644 index 00000000..6fd922fa --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_35.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_35.md5 b/preview/pr-1492/api/latest/inherit_graph_35.md5 new file mode 100644 index 00000000..cc671ebf --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_35.md5 @@ -0,0 +1 @@ +0f17347667cd615431bdb32847291d43 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_35.png b/preview/pr-1492/api/latest/inherit_graph_35.png new file mode 100644 index 0000000000000000000000000000000000000000..6b2f5e9d519b8ff5b421d40f063bd43f83eabbd6 GIT binary patch literal 1913 zcmV-<2Zs2GP)M^gvJX@jOZIlFd*KTn1~2UyB6w23o22Ff{E5r;KD?aX!o3WY+UP$(1%<^LN-9AH^Cfnk`;=`cf~cta+W_3QQe z_VKYW@gRm_G8u;X``@!gp-AV?pFi~g{u&>1DdI8odVRnRQ7FEk*XzM?oJ(9b4PGb| zze0nXI(`_T9DJ?BUb8~aZ<(>*bRm4W45nsN1nQj|FhcCtR z`t@rJ3=9NB*PprliO0JWQ>CP&1Uq-`#MZ4_10@j@oI7_89UUD2fLXIeZK z$&)AHa5!-D=1n|!@Bn7B88c_j^f{lqbz8Y|rN8XDFy8+dF)=Zcbc5v@`=y9kmPKA( z9!w?^IF7^c@G!c&yHQnDh1<7pL#Cz>{#>VnGn>TO9n>TM@GMSK+lmwklhj;JZp}M*n!^6Yavu6(q z3JUmq-ZWX3MQ&~`IF56xSyxww=H_PHy?fVf8vqg#5|Evp4FE__Pe*)wJX%{@@$~6a zui8@9t+cchIXOAV$;shA+tAQ}#>Ph2?RM)(}87K06;-O0dzVYE?>Tk<;$02`}XZ)YRnG z&(*6}apue!WM^mN$dMyxZf?eb0|zF)p#No}J@BqwyWD#9rYD~B(xpo!dGU$j;^N&$ zj~*qykdl%@%F4A^0)X`Q_w%v*{Csld$`!w9e*E~6ynOkR?-#eXY}q21dtF@}VHk#3tyW3eQr2zt z>eb}dty_c;LcV?bM#93v$g^k91Y<@=M_tC+Y&H@e9!@xpFMb~O-&7YdU`N2 zGJ?UuL6?JrMx){1M?^#*H8mAhtCf!_l}i5o?Afys85xO$gakp%ZnyhQGbt$vNl8h3 zzqkzm_4W1W?CgZY;ef?rK~+^1R4SDuZ7J(E9*e~SLI~EbT`P!3Mn<}fwOXzC_3IZ- zpFS;!GYo_7?rtnxxDWuaX3ZMGo;W!<*(XoF>iIfnZ}_cx#KgqJ z!0B{iXlRH(fO$fpP=H|=T)1!nGiJ;X^o{=+_p~SWhS;lAJ@K5UO2F{cHf@@e2Y+bR)zxAD{{8$|aU1ww z5u~T5L!nUkq%B6gZeo;5CDdv)Dl04DbUFe2=i6C)n+yO{DizdfH99&vkd>8%?Cfl4 zwOVv_b@4u@g4k=I^*j-<*a_wV0FOG^t96BDsw#R}}*yVvb~ zX}MgE`uci2dh`g1iHXo?G?+JU9zJ~d0J&W5)r+rQ1Fa{S$sFtq1_K!!9CV3)`t*sk zwzdj3`WB0Yw6(PnyWLI(1_lIuV|j*$hl$Z>BwxRNols|JXo$45vErjXD29>$q=x= zokNAr&d%w!K$#-+o0t;v&?2UUJhX@@ArCELO2|Wtm=f}MygN}+Qu1&5pim}_OA!-7 z+5qgC1}_wfS7b6-|8#qxP$(1%g+ifFf{lLwHEIDLdNet000000NkvXXu0mjfN{_85 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_36.map b/preview/pr-1492/api/latest/inherit_graph_36.map new file mode 100644 index 00000000..96ba2f80 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_36.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_36.md5 b/preview/pr-1492/api/latest/inherit_graph_36.md5 new file mode 100644 index 00000000..17d4c0e6 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_36.md5 @@ -0,0 +1 @@ +8099b5ce9e40ad21b5261b2a5091575d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_36.png b/preview/pr-1492/api/latest/inherit_graph_36.png new file mode 100644 index 0000000000000000000000000000000000000000..4113aed57bac6419930f16b23fd1b6533e37c159 GIT binary patch literal 2518 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_37.map b/preview/pr-1492/api/latest/inherit_graph_37.map new file mode 100644 index 00000000..c15b8161 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_37.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_37.md5 b/preview/pr-1492/api/latest/inherit_graph_37.md5 new file mode 100644 index 00000000..72ee68b6 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_37.md5 @@ -0,0 +1 @@ +edadd76bb4dc0b8e0b59f00e664c72e6 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_37.png b/preview/pr-1492/api/latest/inherit_graph_37.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a7c9f524821030fed75928192a39592e4bd7fe GIT binary patch literal 2351 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 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_38.md5 b/preview/pr-1492/api/latest/inherit_graph_38.md5 new file mode 100644 index 00000000..f391837a --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_38.md5 @@ -0,0 +1 @@ +4ea0d780ae25c110c34ea6a509b6677d \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_38.png b/preview/pr-1492/api/latest/inherit_graph_38.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9f2b5cac5a0b4dd3d1ba69ea097d4829d826d8 GIT binary patch literal 2420 zcmV-)35)iLP)VuCRS z1yN&SG%89kG%5jHh{VKz25>h)@JvKqN**ViA0zWIS~>PBI5CQ-i8pvVEit8KEF08DXFmM z+!)P8JRZ-R$K(C|=VUP$x}&SBD+|ECdd_K?yqlz?B)tn_Fmy>$QWE5Hxz;@209qJ~ zKMFHBW7NY;&KUKKD3gbTgy7MmM~0Tc7-ftolb4i~puWD|&@vdK4855=EG!K7@88!~ z`Vqr{0|y|HNFb3&5D*Z6h=>R@G&C4mmd;Qrl}JcPKww}X)~;QPxVSj9w6t*X;q>`W zdqZy~m&@f)C=~iiKVqn;sKBI2lOUB!5gHnb{QP`)dwb*i_wR<5rW4k!TZfdC6s%gc z3R|{pL2GL(e0+Sk_;C9Cr@hhVJNZxu2?;?!KmeXSdj`2&j<&Woyng)}v9YnZaNz=+ zot<&^>{%Q-bO?ooh2Zn~u(7d0aBwjE{QT5%ef#zehYue{d3iY;92^i45rIjQCUJHC z`s*(|fBqcLo;`!LwKb$tDQaqJaQ5t3w6(Qi!-fqA3JT)#4OBBEBm^s0u7q4J@3m$| zMh5QOxr6ld^j^mRAQFinkw^dlbLPx}m6a6=3JS1f$r7!z*|TR47A#nR^XJbaH#ZkN z9uNNh{s;~Z=JIuRb|OAL9t8yj5Q#+Cym>Ri!^4r2lLMhp*lW&(3m4-0_3OBC;|5w< zTHx#Ji`~0-Lm&_U0E&u=keHZ=&!0bI_Uzf%zkfe0EG+tsefjbQ4<0-~QBe^*Jv{*c z0RaIB4-W?b9654i$bIf>4}gC4>y*&Y(79yvNX zQh0bc<>lp(TrMXfqKb+N%FD~6+}vD>kB=vzP)IVFOf8SOxj98eMNv*p4y|6jn#5u; zsZ=U1K4HQHI(hOW-MV#)=FOW&uCA`+>+4I`u3e*Z=gyIdi3t@H6mU6zw`NRC4B6Y; zbL%z7OP4OC-Me>ln-XHKb9N_KX3l#-G{IXO8bkw_>oFp!9d6bc2I znwrwFW5?*;y?YcB6GK5kK?BBADixWVo72&wN9pI!pIUu?`SRtE``p)_{`3!)#Kc4j z4GsOb-b~)J(L_WZ9v+mMn%eI^sZ>hA!NF>Iwr<_Zja4cYSz21sl`B`ccw}TG7r%S= zE&-t0+FEXI-MV!Y6&0nkn(yDgrzcOIaB^{QUV7d-v{DTf^h= z@cQ*@`1|`~$BrGCJ$p8Me0<>N=ZE#{*8>3D+}!$%0l=a~i}2#b3)I!sp{%S77cX9f zi;D~7a=BVBdNPK{0^x3|OF+Z&rUZ9-UB7|hJf zaP#I(6c(y|Fs5eE?(w*BQjg1Ymv$JvV;K5<_S#!@| z^#2ZedtDItsKtwmE)6Cxuc5fBgnPfyQYKc-1dP34*@lgUtAT#O}4mJCaS zE^20EWMJdQjoezzG4Q{O=bSlnv<$9^SS*IEtu0QRIKj=u#l^wN$qBZ$wwOMBIz%E7 z&YU>|0O;!K!s*ke2h8d0?2M;RpJM*}`H)B?@b&dYd3ia6LLo{^OY!jGLkI){czAdq zEG!I_m6d32ZtgeM*w~0ur%pksRC2Xmy?TX)h6Y$!SpgVcpEdUkr2lu(o5_QMf*_Sj z;p^**ojZ3zEEZ$gvSn~|bcC0e7aScOVQOlswa>}P3C_;W@bK`!;>C**7Z(Q?7nfma z&_&G;A3mU{sEAvuIUXtkfdFY~X}EatBE(`b92^{Q`}S?5rKN$-=R+V6AT>1=F)=Z4 zadCm2ogF$lIsj<@T6SY(WQ44&EZn|*8&juFg{P+{CQqJ>ckkZ8$jAtmmX=6JNPtKr zf|r*U{QUf|Z{I#loH()Hn7O$*6bc1wY;54>=7w3bX2HY513^JS+zZxl`mDKUApJUL zI2X_2;$l)L6k79jb#+uwP@s09sI06cnM}rAvUj!`US3Y6 zrKQx=)T9+3YM=YsGm!p)(Ch2UKbdZmk0kQ*^Qo?`j)?wiur+Je(25l+46JJ8qxaVp zhVHPiuz;VRAA~|7K7Ra&DO08(J3HIZvi`CB-UTg~9l3_ + + diff --git a/preview/pr-1492/api/latest/inherit_graph_39.md5 b/preview/pr-1492/api/latest/inherit_graph_39.md5 new file mode 100644 index 00000000..21b558c4 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_39.md5 @@ -0,0 +1 @@ +298401f54e6586606173edb261891af0 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_39.png b/preview/pr-1492/api/latest/inherit_graph_39.png new file mode 100644 index 0000000000000000000000000000000000000000..c4679f3497342140f215d3606b346734b29037ee GIT binary patch literal 2375 zcmV-N3Apx&P)eMzK~#90?V4*yR9zRx|KlaZGSdu_%&=@mEE>a-vY`gbF3_Y!SsH#2 z#}o^M2rW|@ib%WosiG3HtNFetUb;{;G-QLNGlM!6j?)xnMp|j(rJ@>J?}vxZ+ZpFp zI_XpU_v!4t)?Vv>_TKAw_Hh6PgTY`h7z_r3!Ehe}>kheG9wHD3Vn;&^gE3l^l$89} zy3fnHLm&{u3Iu}x{2oaR#+bo*aeU|W>C^6&!eER6v|24nN=j_nJbtql2IF4?D-H(3 z4y-sB3_Fae;*iVbxPANfXv-LN{^WTmEiHviCPQj!>S#-G%9tt+tyYV!uCCFRG3xxO z^PpC%k(-+fxm=E{tgO+N;}o|QM@B{lZr;4g&CNNMcu?uMVA->~ESF6{oF<7be| z<&eo_XliPLPNzeEe?QvV+E7?nh;!%8Au=)&Cr_Tlo;`bT|Neb=cz9sOj2TExO~uls zOL?(AeE5KZf&#R(v>-e@9C>+p2nq_~@~m9B5)U6fL{n1}LPJBLP$*zBnQ-#tN%Z&k zWAots?ONz`I-5Dm%F1y4`gL5seA#9j0761SAeBl101Fl@z_e-8 zpjNBV)6;`{_wMnY(mg#r*tl^cN=r*|{``5H^8^5&K7GRe{rjQSY7rb9jJuy+N~I#5PDeyUdcB@hDitY} zN-8ccCVzi_s;{r-#qsm=qka4KQB6$^#mC2!NF<`qpFeZlAa8GPGMP-A{n)W%G;iKKA|iVH__57-5{tzY6cj{7MMZS|`gKZ3NFcFT%*Dve z%%oYfX3^!#m+8WV3ltg}O1pOL;@y*@@z$Ch`P{+U*sUfLUN{NYy zcK3u*sicI21d_>Qq*AHq*|TRZtxtY_J_QE{(}@!&sH&=pl9H0Bwzk$K4X&WkXlUEE zZRFPC_;Ip{h@zvTskF4z;W&jtL8+;!yf|rTXIJ-zB zqT|Ppb8TDmBo>P)FE5X4cXV_R0DAlOEp>Huk%xx|PlHmaBrh*7GMmj#$J^5E%->pL zPfrhddwX+*LPTUXn`zv*aonc2wI{Z3-%c4B8RUo`*QdL?o4mZd=0CubL~z%WCr<_dn9XK%c6P$U!-IFAUA%ZPEEWq) zCKIBgqaBX_{<`RDK3o0(V|7zv111&OqhV#vuDHK-=DKBU%ngx0RgD2tVC5+6*g_!B@$uo==FXkVU0d%7 zYn-i5U|=8y2M5vH+l#=!z+ciZ9NhM`%HQ7~Jv}{K`{m1*c>n%A^7Hc{lgSVh69b)2 zH)LFCX(_i^>+9>G(P$7C7xzmVMj~ffSsCw1Z`}s|e;{A5U;(c%fPXetW@aW1A3lug z>T0B?r}OOA^W+SXNQAJkFdR8@gzGCRDndj=#E3jCZDFlZBoZMqG7^oAjaas98KhDv zBoYZ)T3UwOzayNjk5DK?WMm`?3JNedI0)dMzb1{1jU%SP5pFAvKa)!6JH!fYeg!AXmLnIO*JUkrNu3f{WOPAo` z;hyER*68W!iHeE}T)TD+)2B~IOiT=>PMwP9&!5B7)6?a+&eq4%(-Y<8<*2Kx!}RIX zF@OGiY}v8}Q>IKAF%3V(uN=rV8Vz-Jb`I%(_39O=)oR|MskOD0>g(&tY&O&D*ROfD z?{WJ3`$?9Omim?WMZ9I-ZZgV4x>Yp78n{bn)UvyE&a5$Xi-khUBy6 z+qZ8N78XXu#l<%5*7Ib2pM!&gq*AHq0OxczI@ zznSmF;ZAPdx<%v1kEibLZnx%P{5-$qYZb#badB~IXlTIRy?cioDj8#&zrHw{o15Jl z|4;pO?cczd`c*E2F_vJ(!C=^d6$gW12UZ*mh8H%yX1uYB)gTY`h7z_r3!C?F~{10B9?$y!Ag4O^4002ovPDHLkV1h=fp56ce literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_4.map b/preview/pr-1492/api/latest/inherit_graph_4.map new file mode 100644 index 00000000..dc9344eb --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_4.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_4.md5 b/preview/pr-1492/api/latest/inherit_graph_4.md5 new file mode 100644 index 00000000..788cf85c --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_4.md5 @@ -0,0 +1 @@ +004d5bf0d1d266190fa4e72fe7684e7b \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_4.png b/preview/pr-1492/api/latest/inherit_graph_4.png new file mode 100644 index 0000000000000000000000000000000000000000..12caad98ed1dab90df92756d81dc5640f1f77ff2 GIT binary patch literal 5924 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_40.map b/preview/pr-1492/api/latest/inherit_graph_40.map new file mode 100644 index 00000000..1a217620 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_40.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_40.md5 b/preview/pr-1492/api/latest/inherit_graph_40.md5 new file mode 100644 index 00000000..b79d6ba7 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_40.md5 @@ -0,0 +1 @@ +e0307e85759bbc40284987ba5992eb53 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_40.png b/preview/pr-1492/api/latest/inherit_graph_40.png new file mode 100644 index 0000000000000000000000000000000000000000..92a8f9e7eba261af9b197d04824e027771a06620 GIT binary patch literal 8644 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 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_41.md5 b/preview/pr-1492/api/latest/inherit_graph_41.md5 new file mode 100644 index 00000000..16546e5e --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_41.md5 @@ -0,0 +1 @@ +89e3eadd35696e67484f5247377ca2ec \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_41.png b/preview/pr-1492/api/latest/inherit_graph_41.png new file mode 100644 index 0000000000000000000000000000000000000000..338d10f7f10a1a28082071f9b1de7190ab6ed781 GIT binary patch literal 2555 zcmVQgBA_J@QIudGaQYNAMj=6o z5{p$N8V!nLXp9C?V>B9qqT+zVXPi)QBsMX%ico5jZCilaIYt{w54bn zZrs18?!DGo>wnfcE8V+2Ex=$f7z_r3!C){L-3QNnLN1q!cs$<3o)E)e^dv;2IdbGk zP20IX=1x2wZz7M!`?vdKF&MpuXaMKiPPA)~UmQAgsLRzb7`+9BLSb>9-_1H0jQ=ZG zgD@C2U=6}x*q~Q6h+HnmojZ4WS_Y#Rla-Z)$jC^<#l>|?zFyTJMMXuZtE=m28NH5# zgaqW}<@L0T9@n8(tC5_X47ps6goK1{$=PKMqEIMs^XAR23g2s3zkWSrG8tqt8UFd_ zAFNun3KbO<4$UE#%Mlb5WS6g_>TW4cXLQ)Z`t|E^@Zdqa{qNqriz!p4V9uO57&mU5 z!*tl9%Nj(h)xuyfbXE9XgHES|ySqD-N+l8#6Y=idJA{UYqPDiyVL5_=g5crdVVAF? z>TW4cXLQ(uPNze4b+z68A3uJ?fB^#>mfs$%eh<`B z=gyrte*8H6{QQufo{o(hH{!vA2jKJh7&&qz;^N{E9v*HI>)W?)*t&HqN=r-ONAS-JQ!bb?Q`+2C69gUcn7%pB%IpuOWX3d%f ztyXI>=b1BSke8Q-)2B~c90PzzB!WyP0{}!sM8L(x1^4gY$ASe5IG@XxFXPIUEBNx| z3&O&}uzK}s2m}HEKub#t_U_#awOS34NQA|U7b7`2896yQ5DJAzNJzlUnKLnS=1c%U zK|ujBGBWV)-8%#Y1!3K~b#QZY!?tbPEY{up`m9;A26yh9V)2Ey44dik;X3w6Dl9Cb>6&1n5!vmW)Z-%F*r`7w&n*YX)8*$;n1rQM`D=QHj z8;hk&mv*SZ;l#(sM=e{nj5>ozQ*vQ!j4<1Z=_Uxf+ z*RIio2@@zFAb`Tc!sz0~i*)$#VRCkMCbe44#r)Hpsi~`u*{hFJbH*X%Lq@*}3=gXHb>EXkNoZWmp zZQ3*%K72S$o;;bxjT=XPp|gf9L!g8XCCQmg;Wl`gBwmOL5xjsH>|ZKA&$=i~Rh2 z>eHtW8I49R@1{+gID1V^jmddgY7krgD_5>0g+jsE?a^Q_)*8eiODq5g3=HhhN3Yi- zBO?QPy&eq>4KNrC?bfs*AtBuBzJ2>5Ffb66m6hC_SS;pV4;nNGE-o$*i9{xIMx)VT zIXyi+O_l`aV*r>iVFD5p6Y>82d!(eKn5?TSD=X35+>Etr*P0x|&w}P3>g9dFdB{A64so~_}i=DPjFa+^yy<7ipMj3P`II?0TU-q zL~Lv<6bc1gU0reY>Qy{=@W8~c?alpbJaFJZt8vZ8U6HdR+U`N5QYiug0uU7yg@}j< z2!%rMcsy*_umR4_&L+nN1O%YAwiZ8r{6J%4Bl`90XHkziyLRoujvYIo)9G;Z=uzz4 zxf5k&WpHwGvRaR}*T-KREiEl*XlQ_&n;QV&^XJc;&E7cXbjIIa4SzzH zeTpR%3i0XFCvN=u^=o|o{25!eY(ZpXBtk+$pw(*I9ha4r#oZtpjRu8J=3h7Sh+RU)%YA|Nfn{S}hq22GVFWtm}fmf~2_(bUvLPo6xX^73+OZf-WQndfb7Z6%dT#eKkF zUb~L`^?E&3RaLb+4_g}S#o8vl-GVPZK0b=a&ZpVK8jK z8ic{Hfz?m3to=_AgYh@fu0e=Mga7`+9E0&!@xObY!C){L3 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_42.md5 b/preview/pr-1492/api/latest/inherit_graph_42.md5 new file mode 100644 index 00000000..389ef88f --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_42.md5 @@ -0,0 +1 @@ +1b945cd39b3c105e28823c713a6b1a06 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_42.png b/preview/pr-1492/api/latest/inherit_graph_42.png new file mode 100644 index 0000000000000000000000000000000000000000..afda1b3ef9c4e2c5e08408463c22a221418b7685 GIT binary patch literal 1355 zcmV-R1+@B!P)FMcA9iKDW+S*_+7+^3MP+wn< zTeof@91e^29F(@7aEb)oO*=Y{uN&9C)5bJRZm5;v(+fzYn+D4UI;FzP>(mbade5%a_Q@%fqQt zr_kKojGCGn(OKWVeM47Q7lOecN=r*|=gu9Jl#~c@E?>Tkw{PEKZf*{0wHi*R6U)oX z=lR;wk2LP7WL-6N03Ltd|!IF6(C_IC1m zy~Oi85fOz#A@X{?xWMK$DY`R8>_)6%`e9@!~}q9UY}7PoB{6G{N~LY0wCn@?%g}d)Z$n8{eH69Y?RSv`?=smMCZ<(qk(~eq|Z5>PHJv$7M*kB z#tmV-y}eCJrIJQQMuhdw&Q4){YHErAP&679=B{47N)Cr3Z829?R_N8MSHgPY*l0A; z$&)AP(xppu{``45apDBITrNr0;#VYVwzRyB0)S4ZOSvZ!iQv(rM~Fls*xK4cEEa=O zsTA$e>-ECxW5M_fqgz7{C+>`>gxU|hjhdo9v;TEYuALmiQ_~Z z$Km?*>*(t066T~*i-Str+i0SurY79JeH&wAW2mgGL~m~|OePaJjswSWSY2Jk*|TTy z6OYF! z5D3thFJF?z`TF%M&CJY*_AD$c(9+V9Xf9bytyW8egM<6VOm#sB27|le5fSk`PmxGO zQnmOM8NZGG&2|dRq^B0ink}dPHp)m_#y+$CE#~Lv4?BgNk?C5n-)v0Qux4YjhBX_L zHLTf~tYOW@WX-;}QM=uq%{-VRU{|vdkq_g^48t%C!!XPt`ya4U5%@_5*7*Pc N002ovPDHLkV1j*jrON;S literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_43.map b/preview/pr-1492/api/latest/inherit_graph_43.map new file mode 100644 index 00000000..11093c91 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_43.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_43.md5 b/preview/pr-1492/api/latest/inherit_graph_43.md5 new file mode 100644 index 00000000..07e1144c --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_43.md5 @@ -0,0 +1 @@ +0de559a06a9376f61156bcf162289364 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_43.png b/preview/pr-1492/api/latest/inherit_graph_43.png new file mode 100644 index 0000000000000000000000000000000000000000..15fb6611aa934236faf26ca5f3290db5332f998f GIT binary patch literal 4261 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 V^i;Y~g8w@}+UgI~-mBQZ_%CKD`5*uQ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_44.map b/preview/pr-1492/api/latest/inherit_graph_44.map new file mode 100644 index 00000000..92510449 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_44.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_44.md5 b/preview/pr-1492/api/latest/inherit_graph_44.md5 new file mode 100644 index 00000000..5589312e --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_44.md5 @@ -0,0 +1 @@ +6b956f4021dfdea3edda507b1036a083 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_44.png b/preview/pr-1492/api/latest/inherit_graph_44.png new file mode 100644 index 0000000000000000000000000000000000000000..22ee983adb5f3bc89f4166d075a57e3aa299e47a GIT binary patch literal 2423 zcmZWrc{r478-FR$V6xR=LSs20ONc|0Y-1Sv7(z&l5t3~z$%Krp2~#*lzK}thCX9WF ztjSVLBZZUX7|k$5_Kv0Vo^yTQU*G*+@BLiYdp-Ac|K9t#f4}=7V;rnRAutF40HW4t z3oN)6g0HgBA<*Z}8U};QA)Kw11@QBq=W%;QE&v?Xu(mLBiG8$GK*ZSnJpOu`*c$ku zJm1n8`vyO>fIEpI7l@}y>!xardk_ZR!<#09vSdn)2^itm_@5;r9({(EU;+nb!aoU? z$~@>ea)){~CnpC&{A-=45@9HN9h$z@krbRU7xsis=fQ5>Dl*P0;hj`dqfH;j{di$* zV?%N|HMZiM%oH9nfu4)fIPk9<4%3e^FAQAw$5_B-Ro+Lf~M@_EKimzj!sAx5>ABp{6O@PN=` zrzMip$yv+J&%Z5qF6J?VAtr_Dnw*63Cjn;yhVk#OhJ>V|l}UCdlR?Ze-##67c6Rm% z7=Cm%c6VFH#@5!?-(R4{U8Kc}(%WmHXJFtr&ng#!K&ZTUTW3|N?varrSX#ZKJ=ucv z{JDnL%bP8Z#{msZ&6&A50bpfw^HAOpDj~s`pPwI|jmEgU-!8Sf%lZLH<=@}mM>{z5 zHAl?q6;+tRJ5vrzhVN{KVBRP4%<*_-`M3b_2mP?qoZGeJ%aJ{wB?kQ zl|3#gDH%zk(`a4o#4Se1AHVf=MxVj;3IUg)Cw8`$UsF*TUpO4W8uv^P6C!MBvH>ii zB^oXCsIX96LZbU=UGPV(YZJ8s-rn9q!oo;b*JDan$`ZakX`EhnkuX%QB8@!L~{k@&2wx*@oS!7?P4ASWQd2&XE zu*`4Qq^;3tpTOaKo#e%dy7b0NUS9oO$$~+|h4(Zzc)TfM<{+;Q1FH*T>XlneCeu{) z4sJa=Hy63Su|YO3fp2VVq)=5?x4-)#w6f7c0Bd|4T~JVPJ1L1T+on9qs{|v4L?W>l zE}%YlBszjY)}f(V$fkyd3&D=@5vy$L+PIAcdV7FffFOAwS0(XGMQyEwier(5zyGfu z9v+y>mybk7Mp{znboIRnCQ~d|#nBRl5?Gr39=p!TRG2c)sF z@!P+dLHfOVmAcu|(o#}aCrN0LEjCF^%gz>GTw0os9XWsoQzH-vM$qU<%S+JoWX?#j z-}cH3JjLg)_4)YCO*;1)cYWhwxuNXW6Ye1VFWR*MApdZ!cInv7f9j%;c9~<_JFba8PJ4EGHUrL3+Jl$DizSY_5GV<5Dp)4}^(GkyT)=Le<;=Y7!J-rfeb z35px*>%H7}r8;4s+p4`!NJ<`vkB>hnDA?2AFXY#k*+qA&*7hHik~K+?J#^?$bJV=V z15M8~b+;`%I95PO?*^;md*w=6Rh3p*Ma56%+RxC0uW%F+i)G_XIn6Ej7FZ`?Smrm6~uq>{kNm?qAv8vXRi&c?>3|Hbv?m(NOFPFZ_<%PUn- zsid~p@1&WXf+xATk}a{{sjhFs)eZH>>>k2%rb?$Tu^=U!Z gx1`kn8ft6z1hmtDKd2Il2X9h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_45.md5 b/preview/pr-1492/api/latest/inherit_graph_45.md5 new file mode 100644 index 00000000..ea1b543e --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_45.md5 @@ -0,0 +1 @@ +131b12a2c8a48c34beb8910ad7bc8f5c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_45.png b/preview/pr-1492/api/latest/inherit_graph_45.png new file mode 100644 index 0000000000000000000000000000000000000000..cc6ccbecab0fcec61c6c756f4354ca437b882557 GIT binary patch literal 140734 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%0Dm=2T)iDyrFFAaO>0* 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 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_46.md5 b/preview/pr-1492/api/latest/inherit_graph_46.md5 new file mode 100644 index 00000000..07e80a73 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_46.md5 @@ -0,0 +1 @@ +41b0046a3d05d24e41f2ec68d386759f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_46.png b/preview/pr-1492/api/latest/inherit_graph_46.png new file mode 100644 index 0000000000000000000000000000000000000000..fee07e0d031954187eeb0ed5618b425b592b66d1 GIT binary patch literal 2630 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 ZVE;T)RXl7h0WO9hi{EhQa%12CD!7 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_47.map b/preview/pr-1492/api/latest/inherit_graph_47.map new file mode 100644 index 00000000..a0bd4554 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_47.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_47.md5 b/preview/pr-1492/api/latest/inherit_graph_47.md5 new file mode 100644 index 00000000..de0318ee --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_47.md5 @@ -0,0 +1 @@ +5c7414fa3956e7a6cac166a79535e175 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_47.png b/preview/pr-1492/api/latest/inherit_graph_47.png new file mode 100644 index 0000000000000000000000000000000000000000..97151b55773b38118dda08ea695df2e0ad045e87 GIT binary patch literal 2240 zcmV;x2tW6UP)r+JWMteKKBql=g2&^z z^LV`f{!K^>#+XdptiQN?`SSFJ!eER-d3iZ9GBQS$@&9ow4928k&B~ZFux4e<8D>?p zhK7dX*|TRe9R_2TGOL=kyu2K3ZEZ6h24j{o=54^=A`*$PW5*8o`1nkhi&;T`e?KxZ zGVtovD+~?}V$GU0h=_=Qk&)3%hc+rPF)?`a<_&l}9`y9|AP@-P?(PnMe}5Pn8ft83 zCh9wFJF8SGg;J@UF7va7ojZ3TGcyx@etrlE2|-U!4?H|PW;(1fsjRGosi`Rv6B7{~ z9gWqiSL4c+E3mh>M{RAb#&%|+zEiTZhK7d1*Vh*n6%~+5rReSLMSXoeQd3iL?bgVV`C#OUc89j-d_0o`y(JAfU`G|&(P3NY~8vQQmJ%QpE)@> zC@3gEc6RoNaYsi7o;-Piva&L`xw!!Ve0_Zp8yleOT)K1#U%q^Si;D{mA3ltQ3l{C?pdT6FPbFBo!4EkytDy8yg#njg2L-SWHr>l!%BbD=SGX7E@7C z5uHDOo{Wr)sHCJs&5og=AtfdzQeIvjZQHhuY;A36U|@igFIu#S&YnF>`T6;@X3ZLM za&jV1Pfxmc?;fS6r<0zZ9u*fCb2k6hXG%&6SzB9k`oE6{1_sE`(2!1?I6;GhgQMmq zDJhATEn7yJnVFQAmq*^--n4u7ZZ-d=rlypZmPQ2y1+;zpb`lDOL`0-iDoI~opOTZ4 z>G9*ol#-G{0RaKr+K7k!Je;PrS%)XU)zy`SeqoczWlZZ&AQjxB%E;ThZasH1UJ<7>HefmTIsJ*?N zWHK2U7#L80e?KSh>+2&TqPDg+;`8|Cz=MG&G>EuMbM45(0rhP3PCoDFEo|>cZLC8Fh7a+?S68F8wG}d%4A-w;hohq-q*5t5 zIyx{oIEaG>532d&@p!1OuZNYD6#&4_&W@8UUc49ppi-$I6bfU| z%*+gCW@gy3WeY4VEph+;efatLfyd+F$dMz^)6-MacXD#l=owC*K8=$nPolE25?8NY zMQUm)s;a7BY;24lKYpOEuaA3&?ds|R0JYeM*JUi8KYxw|3l_lM-d>};O}4&&!?fK7 z7#SIH-&O!r$0-4xaKJ-DS<>H!G;YRCKba}_{_=4 zL117Yr~CW(>({S1ckUee`};Y0ZEY>u+uLDgW(HeZTR1p4;LV#iShsE+yuH2Q>FEi% zT&~g8*4wvl@$~6a=;-Lc)zuXukq8Qf0xFdXwzjsgva-UNGiNycw6rwX+1YVBwx$#o z7UI;YQ;3O)!Mu6%G|Jm#>-#rM+dXSQKmekmqHzEIeXLx$5*IF9z~;@HVPj(h8yg!m zH#cL&iWT_&{kz&aJ3Bi#I5__OE?5H#eiKtc=tBeQaoG z2&Ga9OG`^ES+WFtJ|7B&0)c^n2nYy(mX;QBb91qG?_Q**r(?;IC1`4DLQqf;w6wG) zj9(xSAR!?EAt51Hx^yXOYin`n&>`+s;nuBN*t2I3?%cV9p`juC{P`1i@7@KUKmHz+ zo0|)nOoqY1LA-ze9$H#jNKQ^hR8*A4d7Er~rF(~PmoHzc>D1NL(Ytr=)aJ(XDHICn z=FOX9`kd&1MfCqenOrWXw{PE4S6A1lIcjchCW%BsJv}|+KGV?95Q)WNwL{gXPoJo) ztc=>*+eg^_{{1^uS65R_P0ffKiP7pJm&-{k7SoFtFQ~M%ls3>%{r_88^BGUg1dSs8N%)~t*<18Y{s zoPjkfW6m(Gq7!xw0S&66wfd34{!eB5M3 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_48.md5 b/preview/pr-1492/api/latest/inherit_graph_48.md5 new file mode 100644 index 00000000..0f25c424 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_48.md5 @@ -0,0 +1 @@ +3a61db015a99d44230a94253af7797c6 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_48.png b/preview/pr-1492/api/latest/inherit_graph_48.png new file mode 100644 index 0000000000000000000000000000000000000000..de0976ab2691318f7ad9f2e1add2af8fd7f218d7 GIT binary patch literal 2054 zcmV+h2>JJkP)!lWiNv|MRUO+OqtR%@h^p%dDA_y(o3j%ZKWAnvge` z5!P(5FM(guP#lJsVNv)+lavUo$EPeUqfi>CtbAE$l=%{oPIEfbX*wLf9M6aQ>B6~b z*6pU%_4{-k$8lcAah&J*XS>er0ysE0I5;>sI5>WFcncjenarEVlcA=jX0_YkurX^&bS*6{7#tj2?KV~vg+hVq>gv^Q zV@+W*(aGg!b zr_pGj)9GxLe$5acACHof5=f;|oH=s_ zE1^^>5fc*whGEdz*@?@SFN0wiC=?0+Kze#Q7>2=t0|$_toQ%4Xet4BQrA-fBp3r6bc1~hK8V4tC5tHgxJ_vl$Dj4<@;VunM{U9j~*>r zv#hKPCr_TVYJd6i1<#*9M{#j6l9G}T6BC1+oE)gtYIgj>uh*HG8ClHl$K12>b#DvxT zd-3800N~-nhd6!uG~(joke{EA>FH@JyT1aYq@*OAJ9mzL1c^jK9v&W)laoWWwY8*D zsYoOe(S-{aNTpJdMx!AjqBn2ekV>VZ+S*#WcI_Go1Oig4)n<9z-Q6iGD~l>CD=9WM zmI4C<$z(FI@r@fdQht6uJ%0R{cJJOzp`oD^9UV;%9z39%H*XT3&!>il1~%uvt(lvf zO924^?D+Y%$z&pTcXzsU=@Ly(Pg`A^UAuNsad9zgCnqPlp3b#*nx#l?|CB3aga-o1Ngb=`$RA=T8>usO6^Edij>(NU}WH#j&* zN~Mzg{r#z=q=YIfD~VwkN=Qgpo*@2DVPPSqq@?`UW}-WP{=AtlA|irHOG}r$PpMQ= za&od+p0j7qvbM=&A}=p5x_kF78_&qdVB=4pJ|zI8)oNK^e0)4*Wo4~c&7PhfdiClR z8((PG*4C0(EG9QMH;RgiqV)81>gnlWTxPMtahxm*r6H#byORpI4JvlkG|1oO?_uwlcZc^BHY zsJR@3LLr1gA&wqB3SVDeR8&+TEiKJ#j6fj3)YKGACKJ}JTW7WQQgd3)e5~E;S}RcP*4y;LP8J`5rIR84k0fu4`Q+Sr+Qe4n!UZfXl!g`$IiFi-QA(n>EP?@3yDO6 z9Xoa)A|e8biHS%|Oth%u?Cgxv(o*E+=0YqM!{6T@Q&Up_EWas!c0LQ&9RM;jGf_}b zfUvMI1Ox_QZ*MO(H#gJx__)>hQrPtL`YZEIboQdYzMlH~`-$iuvBt&4(XnI4>{j2N*!=X$ zu{_qVUyptJ_CX*Jps%kFTefULMMcGGw`EuUc+s`Cw%WDc_U+s8;ll^J)?90>skclx z{tP(Lao8PBbR2ev6CH=$;Y7z_cNRUp%H?u<_QCN7VIevqQUmyV6?)|c$vj6}9 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_49.map b/preview/pr-1492/api/latest/inherit_graph_49.map new file mode 100644 index 00000000..6fc5256d --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_49.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_49.md5 b/preview/pr-1492/api/latest/inherit_graph_49.md5 new file mode 100644 index 00000000..1d2fc3ae --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_49.md5 @@ -0,0 +1 @@ +4cf42be0d1f5030cc1091bbde87a2c68 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_49.png b/preview/pr-1492/api/latest/inherit_graph_49.png new file mode 100644 index 0000000000000000000000000000000000000000..0c9e7a25b29cf635021586deb1aa4a58a936e40e GIT binary patch literal 1791 zcmVy#DB~v zZJX;gq5`9$$=0Dk2c8*55~1aHV1X53og`^nZnh+v7zJkLhL&1uQ7HF!@c(@Aoz6|& zrrGm5+H*h8b>H_MF5bP*_6}e$7z_r3!C?Gph76jG^F#Bm%E5na4^kyI)b?c2AHDk>`I*|TSYJTjS#8X6kN zXf#q$Q4yUxcaBC!M+J3STU*I!G*Ur90dX8hZnvAdy1J;myqwf(H8nRk3vvdksnu%f z-o1N%Yc@AGlSZSNcRV&WMgYiawF+`hPEHaL(UmJ#7QGMtG#tm#g9i`zbry?-Dk>`I z(4j+QG#Ufe^wkp)wY9ZTMMVV_7Z+1YOH07qi=nEjiu8JYnXkV>a)qG0vh2jt}B;P>y}d>xMC5Fa0plP6E&)vH&?%ge)s3l~sQQi8(5LTI&Gbai#{`2y9n z*=#s=?3mx0A3uJC)oSI}&mPCc#UU;(4jmmGn3|g6*KF9Z0RT{1TDs_c@TckR?ZwE* z2mrwCc4Pnk{n)W%2Tq?pjrHr-gX6fM^#D*?TZ>btPGQfUJve^+INICW(ca#^VD7N6 zlq;M}CZjWF&In=(g@T%znikZV&1R~stQ6$YYPJ0M*RNkBkx1yyojd%z(P-r7A3b_R z0BC4vh>w+&l#t0}3R%s;!9lWEEd0Fh`03N9l$Mr8v9YnFR4VDxrAst8IJm5Rm`}5J z?_O$bY$PHghr>a!v9aX!dii;e#}l;v%a<<{9UVRAYX9TMkAS&@#oraq?@wEcB|SYo z;F^Jf0W>r;U|?VX9*+kumut>_MP_Cu|2ifn2I=YP=74Dv_I;i_+54p!H6t6GSAq*8~8uSiJ1qfe6{5Av#*-E6bWjN{|u{pR%@hofdNBqk=Jpr8P)t*uB%NI+X#+r0e+)6+ul zX@;v;ucEK74;;tAVzFTN?%kN4o(@XCY11Z5PfrU@)4}FmE@3;RZrr#LU%!6k$3sIy z7#|;p(P%_bQ4umTGhw&e=jfW6ns@_rcXy+wrw0cQ9$Zonp{Uu?(t`5xa(?aX@z~fH zu3ftZuh+}ZzkT}_qobopOiWzzKKN>U>Fw=BM@I+Nty>3$LIH!p0H@Q*zlT72sZ@&8 z)Kt{g*78PjI-Pj=@@2r>%Oz}vo4GO0$;m-=bv05_QjnjY52;j&tgI|ZrBaB+;yJpV zJ9i>AH5Cel0tXHpKwVuO($dnF)I%t020ApjTrOg_2P$(48Xf)7hG)vwG zUyUyki3Iia^+-xeLRMB5a&vQ0Q&WS@n>PogkBW-I-Me?u+1ZJ0+qNMiBLhc{9Kn_? zTLR_|IZHV-^z`(Q%jKFAA08g2=g*&$-EQY&PN$Q)ySr&(VuD6SMg(&+dA@)DPBxp3 z#>U1LtTQ<|Nu8aYf;Ij9{q*kLJ3(xrnlhP;Zr{G`w`QP21JS<+jn}VVQ*UoCjgOBn zdmrZ0*zI=u{Q0wB&8JVF$ZE9;zQ$RMetLSE-oJlOeSLj2H8mA82xzojzPJ|X*Bqxh{{gUsAkj%>;fnwO002ovPDHLkV1h@0aQpxO literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_5.map b/preview/pr-1492/api/latest/inherit_graph_5.map new file mode 100644 index 00000000..5fe908ce --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_5.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_5.md5 b/preview/pr-1492/api/latest/inherit_graph_5.md5 new file mode 100644 index 00000000..9a210914 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_5.md5 @@ -0,0 +1 @@ +f59e04d816a0007ec1abec0e08355826 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_5.png b/preview/pr-1492/api/latest/inherit_graph_5.png new file mode 100644 index 0000000000000000000000000000000000000000..63e0335a29648f256b084c8db0e908100d065553 GIT binary patch literal 5726 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 + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_50.md5 b/preview/pr-1492/api/latest/inherit_graph_50.md5 new file mode 100644 index 00000000..a3c59b87 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_50.md5 @@ -0,0 +1 @@ +72b5a90c1ec42de36bc2402d7afccf13 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_50.png b/preview/pr-1492/api/latest/inherit_graph_50.png new file mode 100644 index 0000000000000000000000000000000000000000..aeae315b3ee7f84119807c943a557c05b52c23b6 GIT binary patch literal 4678 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 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_51.md5 b/preview/pr-1492/api/latest/inherit_graph_51.md5 new file mode 100644 index 00000000..2c0fccb1 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_51.md5 @@ -0,0 +1 @@ +e7c1856dc3990067029ec4fe58aef9d6 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_51.png b/preview/pr-1492/api/latest/inherit_graph_51.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe9ae98b7076356c173a2dd93410f26a79df01b GIT binary patch literal 2605 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 Lb_lAeSJM9gY}^Vj literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_52.map b/preview/pr-1492/api/latest/inherit_graph_52.map new file mode 100644 index 00000000..d7e897d5 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_52.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_52.md5 b/preview/pr-1492/api/latest/inherit_graph_52.md5 new file mode 100644 index 00000000..9d11021a --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_52.md5 @@ -0,0 +1 @@ +d9eb3f18ab389fb0f3d4b92c673c7a58 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_52.png b/preview/pr-1492/api/latest/inherit_graph_52.png new file mode 100644 index 0000000000000000000000000000000000000000..4b5e6be9bc3435c833dcce81a79d73bba35a1813 GIT binary patch literal 8155 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 F{{SdT7GVGY literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_53.map b/preview/pr-1492/api/latest/inherit_graph_53.map new file mode 100644 index 00000000..737eb374 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_53.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_53.md5 b/preview/pr-1492/api/latest/inherit_graph_53.md5 new file mode 100644 index 00000000..4fb4282f --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_53.md5 @@ -0,0 +1 @@ +86a930e1d3e3856297f4c66b059ada97 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_53.png b/preview/pr-1492/api/latest/inherit_graph_53.png new file mode 100644 index 0000000000000000000000000000000000000000..81f0d95b0bb12ce6ed44721052dbba142350ed10 GIT binary patch literal 1844 zcmV-42g~@0P)dZ7EI66 zr%#cdo{sG7>;HB#p+=*DN~JeZ`ANJv0UO%2M*%JBU8 za|ne(Y}l{?d3kwAOH1=v>-+cbsI08S%a<>)apOjmmzN_ZCWfn%k&%H{uU?_8tqoGC z6necL-QC@&sj0!x&=7KSbD>tNx%GZmQ=`#f&z?Q7+wIfVG?`3jXlOuvef^Yp@~y*~ zHESRii@BUeqk+fc;d)Y3RD{OH#@}k$yLT_z+uPCF+6sw8g43r@Ln@U50GgYdQCnM! zPoF*^DJcmhB_&w7awW>j%5dk-9S{+mPA85WIfDHBd=L@p>gr%Nn;{SgkeQk3bHC{S zy%iM|!DKScxyM1LprGJ?$BrGNxu8%eC^|Zt&YnF>X0w?r77NK_GAb=CC5y#EcDtR3 zh&nnt$YQaO*=(jumo8CMR2124HlKAOBO^(t)6xC=_bEF&o8)pi4G#}<b;A5U=LzyZq7 z&kxv>{{H@1X^Dx6q3Y^tYG`PnoSYm|C=^6QX$B$E7TpZQc*VDCY*GMXrQgLzdj2h?DKB^iyz89%4j>nSfU&u5*^H(pUu!HqwB_>cflZ*MP` z+rNK5>2$iF)qMZ{JvB8oapV5+1k;(&zbCWNQeIxp#eIE!1b_wx2B^KgogyM4=*N#A z+_=~4<&ICBI6+#imW%uQ`$;Gi`e-$q%_I_u$m8(@)EJB&2O^LOgLY4tn3(w6IWCtA zwY9Zyxm@siy>PqTkVqsxbCQ#jx#Q)_mm@JT5l*L*%gJOi?l?L+8sXvLShsGSPtN1< z1g)l2D&>9-r;BI8zbCWN5+5JW9j{)!8UWz&c%V=yP*_-qq@*P5+_@8JX=ylk@L<5& zE|&{Jp%B}*Z|8C;DJd8o9YuF{HJiA_xMi<+H*pY$k)&QH|Aci7pbYKAR=hB zTIh5-WMyUH=g*%$^ZZZFxVN_#gM)*p zsHlKSr9yIY^0Y6rjYcD93Y*P_mX;Qzr>DY%25Fn6$LCklXE^lK=4G16i$BZg)&X2%WDw{LxNGu2cm6m?Eht`P-h%=KLoZ8yh2w#p1IW>FevG=H_M^7#Q$b*X43iS6A1RdLttv z)Y;iduV25WU%!6&j7_I;zCE4|A>AGS%}kh(5qbidaFJh^8B2jh^#=w%Xm4-lTf&lu zT?rYy!%WEF9cDrX?=TZGc!!yg!8-wW$6Bp+A$2g8FjGuOL^c4qJZNDo0fa(fFW(v% i3 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_54.md5 b/preview/pr-1492/api/latest/inherit_graph_54.md5 new file mode 100644 index 00000000..4dda236c --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_54.md5 @@ -0,0 +1 @@ +cca5ad3301f6732a8cd0bb44861d4258 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_54.png b/preview/pr-1492/api/latest/inherit_graph_54.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d07ac08f7874e88f0cc756db3070067e1b002f GIT binary patch literal 2527 zcmZ8jc|26>8$WTg#pT+QO4C@f#g(-XCVQ5#T;Wa(AydLNvSk_R+GWo!OeGPG(Uk3u zGSjs-7?NEXhHMQPg!}sE_s8!&pYy)wbIyC7&-;9z@AG}0Bs&{30X``{2!aGG%n?Yi zj)5D_!v$u@%r+IwTxcsZ1axqCmA5|4h9KS?3xttlSn+bvO>2kiB9yW`+54g?$*1{v zR1YAI&;^vvzGm9xj}ultDcv z&8yB&@iUUko}iTxhRdec!{RQTT5Y-kSC_2Jiz}+lXU+Euz7*y15=GkCK?T;sPt)#r zs_;_|R9=iq@*g7?rjhG~Vw?yTaA9w6@6^WBn7pAO$HY!F!ptnAF~{BrgHbXzHvTv{ z86X~GDrjzs!{IpY-@kvjGwa0*<@Z#oiCi{$bTqtbE|ss*Rb{dzJbq;*fWSV{L_PY#m)0s-&dU60zBZjzG0Xr(H=AKclSNgI14ZE-vD%<=&0G zzC)XsNPF|wJbLiSRUy6v$n*dusr+vEmL*=8#ppeux^*_4NYu>A$|41!(Xd}Qj?B)^ zLeQmB^48G@xp{fwIyyQo7kthu{ZWT-a1a3>WkmThi;7ap%Vl!%^EoB=B0cLL;YZ=Z zyzkNK$;rv(j*2uIEv~RoN?JGgmp|&<<6ghkMk0|9A3lsNE|y-~jv_TTpViZo0$7f$ zZ|?2h{WkVmP*zr!z1n_IAGsBvqpKSfBz_*1`s&s1qGDp?-d+I<3k&wz3@5Pi5tt@o zMqn@)j-_p9orJ*M=*}~$cKmT%Lq$b^$z+nkSx?C9Ewf2p5xIY8w9KMxbGTg%-QA|? z&QyA8YU&Z9^7S_9&dyE+1%+61ct@#zYX6+$8+oG<`uyt^uQ2GzvR?^)k&arDHY>Bh#!Gjk+7{^)sB%ViYm zluv)D03?*snV6Bm4SkzxpQ>v0u&m{NE(=|XVhd%Q(l?HbyoigBZ@?}&fBN(Zf+8X! z0vCtQdHeWu(CK2CnVFn-_6QDkUnQ~GIcZf;9!>ndu-X$Kb<$?%AXEYr%F zZ@_Bh7iz}f;8WY1E8}mzE-hJ+$>flO{d;c%XE;VjN9~=R#phYJUZ)JA9zC%s>8c$$ zz4gkUu9%#Zq+XcKU@(ks1_cLKeEsTeX>0p*Z7uLSi**(T%eB1n{hzug z!OtL2q)2{2LHPz3YrX{B;^Jarq90)51?-~Z+i;fLpUt6Z7j7ZVecTTOU898vBnCo40-0eTnQdNNKMA_D?ceE|#u ze-N1S-fFI)tCPKHC#0lEXbB04?8`Fcb#h?luMn25=!Bz`#UdVc`W3iQT3eeo$T)dX90Vs2i=`Jh)X;rWm<$F*pR%dBBDhz~Z<>;y zFR>N=lf4c>L{|YrL&IB>Eywrw_j&mEI(}}m8X`9RD;t0p`5O07w&inOZcU{qEx&H1d3MhY1ss0H|{J`{EPzYA!2n0fASy={<>4GYfpbhRFAHRv-+%sG5iT$Pj!LD%1xiaxW26afZKuM+!^d6s z8r~2kP2j?wQ*HM?)q8Tv*%T*sbyVt|9OjD3Y_mdxv{Y^4Ll-6 zZmF`PSbM41z`$5bJg&LL(*>~5{{@JlmdmM+Z2!VL|}92IlPQC?nW0V$X* zInGW__MxF#fJ6{F2wXG>DTU)_%qI@MLnGYUtb#-@Zgx!2uTZ;#EFh0z+HV?e1 zuBhmkZmd6__JrY5Nwc%C;1v@WN4mKc#r^8A)nOOH@7Rq37@q^DY`eGXpO9h2L>@FD!Z7b_QjMBplxBi+<|>Jw{v&DG$1VL zGkfQy>~1f`!-Z$~7XO0;kNEb(l4!vDIW!{*2f!9Gn` W^dFYLRzG#vxLI7WLDU(0;Qj+Hd-7TU literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_55.map b/preview/pr-1492/api/latest/inherit_graph_55.map new file mode 100644 index 00000000..b67ab8be --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_55.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_55.md5 b/preview/pr-1492/api/latest/inherit_graph_55.md5 new file mode 100644 index 00000000..7d94560b --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_55.md5 @@ -0,0 +1 @@ +4a6a640c1e8b24bbf98d4eed4c34bccb \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_55.png b/preview/pr-1492/api/latest/inherit_graph_55.png new file mode 100644 index 0000000000000000000000000000000000000000..a48c37db224114e75114d59428c3c0efba282bef GIT binary patch literal 2385 zcmV-X39j~uP)og3s4UU~ibMgI2nq$1MJv(@%=>}#zP&&J zeam7pzfX70%$##(?!R|t?kzx}P$(1%g+igsFP!lPi9}+<;c&LiM=}%&m&$jGSD zxADd|;&3?II2_KubC(u{@;^pLNAm#e)wfL$sg8_{j9E{JLeVE9BLhmMa)O;Z54lh% zzXcU3Wx+#5N?GtMD3MAe5)>8|&UYGrH8PnD4<0<2*Bp9#dm$7GF)%P-6n_g!qzZ)s zU0q%CorckwOX1Yj)uFSqb53FzLaWuHyu2L0e*H3vzgZKhR4T>8hYx4V{emDaE)J=w zsgu?vBqZR>nKJ;!RtPsYx4BFW0FaxT3$a+tvgPOJLnsuYv9Xb{jgF4O&(9A}o;;cB z6lcV&iBzdnLZwp8miq;PlamuppFTa|iShO8SDZh89-B9B1^~FZxxvcHYR>apvt|vh zU%!sNzCOm5mzRg8rX~~=6fm~Bx;i|1^avX^Y?$*LXM#~gDv?NV_wHTD<#GfD20|zl zqPe*lXU?2~P$+~^(9jU>-Mh!~nVp>tYin!l-n|>Z#O1!GrUqiM82|k950a9S@a@|-rf%=vy{vbI zJv}`T3WZRs)ia($9b30>80EDUnF90>^t*tBUAf`WojRmJ)OhWPk+ELyY(5{U%w z-@nI>9Xp`aYMD5(v9YkQus}>q4C?Fa;p5|jzB0E&x?;p5{2VC)B#oScl1kPrj}1VApABR)Rf;JtQnaY0N>46a?fhKPs= z2m}H|L_|!QkI{&VirN<)9Zh}*S65eZx~{q_eY=Y2)eXNiJW$Ob8*Qp`n2+Tegf04h}N)YPFiVUcGuXDJ(2x z%I)p#1OVyl>zmPd^kWf1$b}0Rh@+z;A%u`imoAa8urQ`wNl6LOXf(vs)Rf%6f1h-9 zbrCL?%Nk!%Q4!(sc%;9-pP4WHd#zHb2$#zxjg5_rEhi_303ba*J(K2ai1hSy5)~Eo zp9w!UV~Ly3=TFFH=`X@Od;hDxQHuvhc&@L;YNFJ25jpN}_h-Y_i>c^M)d_LUW-EsBmRh&9?3YnRi2o4U0rKRPh zbKvUgirCm#xVgDu`}Xbd_V&h}J$t5}I6Y=E9({a#d=M8GhmMX86c-o6&(9A4AQFjC zTwDw;mkX^{i=8`n;>C*>;BvXxvSka?-^B@bJL$<;!7VVS(Y{VP^je zfZ2NJ&xiiKHa9oN(9jTuhK3m1`1$;QnYGisxw$!ddwZF3dwV8{sI9HVu3fwSCOz!2$mM{;;>VhnJTZ?CtGgYHB*6pQEEAoSd8>5D4Jw>x;8z&%)W+ z`HyliM$D-WPCCrY%n%U~fx^N<)`4j};f@q`=wP8Ee%Nz`y{hsHkAI zdGqECX>Dy~*`|u=>gq~v+_+&d=5z-q9o^mCq_nh@3=9lRs8cGHq@$yQW&8B$6RD}G zne=ec-``K3KYvbodV0vv&=4stEhWEx{hHBuCW|#NFhEL6OG#T>8_V9@+)PSKONmyi zW!be_EqV3o6=`Z}V#OuI@Vy=!93)Dml5}--5sgMOso&`^bZ|0?NdIPZBBjhfhD5rc zzTHzOlVP-1P=6~84Gr_10%aQLla#XHp(3R$c&JDz3mz&`%7TZAl(OJ4c)FkN`!j_y zS4 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_56.md5 b/preview/pr-1492/api/latest/inherit_graph_56.md5 new file mode 100644 index 00000000..646b831b --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_56.md5 @@ -0,0 +1 @@ +010162e97b12666ce50cc0a624fcd97b \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_56.png b/preview/pr-1492/api/latest/inherit_graph_56.png new file mode 100644 index 0000000000000000000000000000000000000000..c94d919345d5075d43fec5f0c5b241bf50c41ed2 GIT binary patch literal 2576 zcmX|Dc{o&iADS=qdf){%r(nEsY+zcG48KUzx~qA(*s0@6 zRQ4`89(Vm}WaO{+jXJW+=3FtZR72_A`3cn&_JW?HqoWN}?T+^#JWO?ceVrGT$X+m? znx4+2(JI`J)-ezfrf4?oK zs5m`XLCVLTKQBt5P~PjEzarSlP2cee+DaR-8uwXr)Rrq(_I--W+c-5 ztd)gDY<9M2WK@)<@5mpg5C~ZehQ8@>^QMfN8cZcS*@Lceoy#OmqT_Q_bv1}>a%t%p z1qTIgG~GL0hn`*@Jrk9I@bvV2@b<=)W`7wQ8vt#mraMDS#gTPdwuEP$*PREal0oSByAJDCHM_-Ovtxo+M&G8*_ZC<#4Ohz|i>IdC z>gwxD`wFpHPo606@2SrKQCW$;X0`pw1dFu4w^IQo!9Q?&b%KDNN5^eSYgW`dLklqNSy!g}M3HUvM})AFHjM1+l(*^|Xgm z{cX6hvGLZYJb8Kfprzq+y)_r3*CwGyDY)>hMNv3>c4p>5W+uG#-XVi7j6hg!Z*SxA zLAz_$1z<3_;zF+OckhaS{tVaB(J4<&g{hZc%oG_@UXrUfk4Qp_H=jWMj#L%*Wln_YGtKrx+I3` z`=wDvMg|}V`m*Z;3WWlQo*ZL_GzTwB%=P4QLjYWV-^b%*BqSs>0_S>&5xeWtrjXZ@ z?6|v;q(TE8IGe+X^FZt9to(smd+vaHBxGAbob>@@VrpwE?D8@cDlRS#x!>A)abC(G zQWsKGUd}5fCPrRtYP1JK&Be`K>-$A#W^S&yzW(7(;x6<1C-&f*#KS$L&>Ggis=Pfn4BD2SSa=C-eE8OU;Co!>FXS71KlCQC-FSSeR-roH~N<@sAOhdo&W{M z-X!Jg!evd<<1NZ?!NEGEHp=%4kq%Gn-n@GkOQ$2i{9wqcs;b8n6cqgZ{XeYd(&;5F zEvFkA8p7Q%i=q%1LI(!w_PDZg+NYXtE`7Tw``NaWld6l0i-xu~rzLP+NL)OjBSk!< z^046gKTWEa5>CvnT!2{H+fzYZWROU%gM$PAz`(&hO@f;nQt<*H6=uk4TUXaS&1)g) zJmx}ZW1Y`ut&c-P*E^C$|Ea5sZE8aIp@jGW5BxRx8VWnDb)>Pe5dsku6ciB=kv?~h zplBkMo16QoB~TG}>5``Zq@g6sOfDACI#O1)e{>W!IX|}FTY!NC?cfo$S71&~PT$6u zwC5e|?XSnj8I>)vFGl=)k8nX_b<`xSWdTMc~5>VVgM8)Rzc4r))U^7#9Z8MWIG$hKy!?U)rF_2_VAW(n;BqZ=v zRaF&PEBzC-7mPPCS!^AT-v9ZvCs+H;+qdk6{u0fwjT>rCjWAi0R7eq^-S4XtQi>!7 z-p1x+yPIZbx@1a(SzMIlrk1un3tCqYOs8un8Mz@92ptuzqjohpOC;A9evrgc{p!;u=bTRuKpF9@rb3rU-Alf zLjwl=|Nf$psr^&mY9`fy#PoBhXR%y04(x;QM7#vVGUAaK?{pJffO4~y%>BPT>i0S| bxp{A~Oy|XW9jF0V@gU~LMEo + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_57.md5 b/preview/pr-1492/api/latest/inherit_graph_57.md5 new file mode 100644 index 00000000..f79cae54 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_57.md5 @@ -0,0 +1 @@ +3e48b9e1580dfc78e3f19c830291a4a8 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_57.png b/preview/pr-1492/api/latest/inherit_graph_57.png new file mode 100644 index 0000000000000000000000000000000000000000..98fbe274b2d64c30d2956f3b7724586902cb11d3 GIT binary patch literal 3722 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 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_58.md5 b/preview/pr-1492/api/latest/inherit_graph_58.md5 new file mode 100644 index 00000000..51bd471d --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_58.md5 @@ -0,0 +1 @@ +ba6e61461b8c5e3cddafe301896010d3 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_58.png b/preview/pr-1492/api/latest/inherit_graph_58.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3f3010db627c9064f809f8daa1a454de74dbc5 GIT binary patch literal 2196 zcmV;F2y6F=P)@128Z!FfcGMFfdR*8!|F7xD-YCt%Vqde?BZ0Yq-3; z{69b1*gtooD9VqbsN26!7Q=c%sZ{<6;NXuowIupZd3pKYE{I`$QC?n-&dyFXJ8KQJ zF#OA4l89l|FiFI)YM3NqST#%%F{~PmyR(%LA0LmnxHv>cMylAOqN0$Vo{q4vFaSV) zem>gT+CWhhjEsz6Z*LDjKR?99#lhU%To+Q1nVE^m$Vh~Qgy>|xwPtQ^4naXd8vS~D zdU*8c(Qj0wj!u%OwY3!i0Rd|EmX;QThKADZ?(S~b*w`Q^CkJzLa~K*L!nJGHAdyJW z(9i&PclT9m>Fn%;udnZ_=lPv{{rVL(H8n6XF+pr>tcs7#Wn02CD!p|7tG#l^)C3Wdnd z&ISNvWMtsZojZ_7Bsg&30GgVbKnOuaMFnDGV-Xh@hpMV7dj8wDZzCrsM@5fZE=OQs zAl|)uw=9i|#r%3}TgM$MiA|fD>NRW|{ z0RZUe=s;>}Dhvz^AQp?UefxG~XJ@0Nqy!NW5!k@MPUC7PN1&70dSS*H{n;TxgevRhlW&{QX>g>EmM@Qquix+5a zZibDG4U&_S;q2^;!oouI_xI~8&Z3A!qS(WS50jPP=;%l;U%sqnx3#q;QmK?~2L}g} zW5+fEOAC?96?k7Yc;}xw*M2 zeJF}TUtb?WLPC(0l?6{vPx$-$W6z#Fh>3~O8pFfGgZ|&&-wzgx1s@+D+UD!)i~0F^ zynXu?US3|v&dx?cLITd7J&R}0p5gub_ee}k1OTlXot&K1Vgf)!L<9y02T@yFi!Wck zASo#c;o;#hHa6C(e>F@`Pot)$2G!NokjZ3-kB`^ss;84A;&Qq8@Zp1sZFY7R6B85Q z@pxLtH#IfE)YKGiZf+PD7yw04C@3gUD+s?o5=u%+aPHhWba!{7va%Az#l?8_>J{|# z^fVTlZ1(>Tb;E`Yn4h1=%*+fdEGz&3larIQ4*>S=-3u!#E7a7~ptiOa2M->keU_G% zS~dP0695DP0R#d8K7amLqh}f_4VQ9<%P`5O!V~h zU}|a#z+V^m`^u&XKA#UKCnsFGbcwcIym%2?w{E3Z5sIR46&xA3sJ~TAI!iXi#3 zT#muPL0DK=z}eYZZ8`7m?uJ}02SrgZG&F?0y*<6#S&ZS~VT_H9fzRiw-9aNGBN!PO zfwQx-+SYhvp-`Z|zaJDu!PV7OO)nt?E-o%O zdh{rcA3we#jhbSvmN#$SfX!xu&*$rO-sSMWPeJ~aN~O#Dp6FMwwzh_~wY5h7jvYHz zG#`)0(^yk+I2>>|oJD;O4i0c|aG=|o9;y2J`q;K@o5uK!jg1%|A6I*awH%Gw9^=2t zQhL`4ohH%0iGBO_K_-*o)TvWT-WUu_5^1Edv2m>>tQ*$+jWxsihe;xaRl_6^!>VDD zh+)+*NyM;fH15taGc$ju4u*A%S`raLS^&hYffj~!0E@*MUTX~u3=9km3=9naME(n! Win-u=@w3PP0000 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_59.md5 b/preview/pr-1492/api/latest/inherit_graph_59.md5 new file mode 100644 index 00000000..496baefe --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_59.md5 @@ -0,0 +1 @@ +13a87814de9d5b8861d296238ec0312c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_59.png b/preview/pr-1492/api/latest/inherit_graph_59.png new file mode 100644 index 0000000000000000000000000000000000000000..83aeea5dbfe5e6b62277a41971d36f787e0fa381 GIT binary patch literal 3128 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_6.map b/preview/pr-1492/api/latest/inherit_graph_6.map new file mode 100644 index 00000000..03c39226 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_6.md5 b/preview/pr-1492/api/latest/inherit_graph_6.md5 new file mode 100644 index 00000000..45d75840 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_6.md5 @@ -0,0 +1 @@ +25d3d36220774787042295462e175836 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_6.png b/preview/pr-1492/api/latest/inherit_graph_6.png new file mode 100644 index 0000000000000000000000000000000000000000..b6983a01a79a900980c655bc82d5974c84613ce7 GIT binary patch literal 2107 zcmV-B2*me^P)A(-*YOVlA8XJX__D^7AXoVb?ESxp+<^5k!7&_ z+H{y!s9jW=MPU9B1R~A|g~*7kAf;*3O`SqsDl@IrO4HPChUfX?$G(rd=%$ah z{ph?v*ynRDpEu{c-Oky*0EI%KP$(1%g<@PdnhAzsTsRy~kTJwiC}w76!&0fVWns=- zvlEBI3F2@#w|<{23guts=jW>d>|2=AGN}rwRJ!JZD3parrBWyq3az}E5wuV!%YvGe zV)9UvQcNC`GAY9_c=+(4v1R6xEKt>z{$yJ(Xpnohihh1g+hVAz`(Vd-elVl)ABQi2F@axwv$Ye4^M@OT+ zz8+CgQO1_1rccF&4I2Oe{{H?;jy07%Tosct41>71ICOM$K%r1zdU_gteSIh@Dneyt zC478*P+D4wGiT1ArKJUCW@d16bAwPQL`X=8+FY}eYfLZQ%Ev#P2J zb#-;PapQ*07yw*cTp$n#000pY5qR|I5$@f)$C`904YzLHLSthiN=i!D`6ebNkeHZ= zii!%jxw!!VYHDgwTU(2%sVVUJd}L*1!NS4<03egeP*zrk43|oOiYYc+xhe7b?%`)Et+09apDBR!oqYL$3Rx)Oe&YlAruN>X=#b$$B#oI zkzmuNP1w74FC-EP7={4=Bqb$5B9S03FAv+dZ^xcJd(hIN_6rzta&o}sa=|bR1_lPe z=kxLN=TEjydU`tS?Cg-1mWGaw4upq?tS}q_UfK*geEICdhkr1I!s5VbZN(vkQ z`0;}{IXRJ=H*d1-`T6;5dwqR90YHX_huK_0LIOE=?%b-?eDmfFdG_oX+pZb!+O>-~ zJ3Eum&`=T_984S>9LRwK2gvvD-woCfA0JP0b933)%gc+Dl#~!c2$`6eAQl!DM4?cy z?UR#}#M07|3=9mA&dyF^V`D?Ue*Ma}&&kV>V<%*-@MgIFv^Qc@BwT)2RyrX~yx4dLLyg8+cu-d@bj&Ee$9lWH|N z91i;W`Vbu*jr8<%`1|`KI5-#~At6XiOw_4Qg}1jiR)Rh)?(XgY4D-TrST&QHo2yU7 z;ix}gH8V4Vpr9ZmCnrNB62ZpC26yh<(fYVwXfRc5XJ@zQyqfV^)YOOOneW@TZzw1z zKxSs9K^nrt!(nf4kK4Czqo$??`}XZ)>)YDeg2Un9^y$-Bw{D$UUDZcvad9y&Uc88| zt}a}=b`3>EMdczAdipFe*_ettgU z;^M&L@pL{+P*G9Anx?tA8EtKCh>VO}k%rZ%SyffVzN_hqb3V}cXKA#VzQVCmITeP>geI4TteHtwmjynb53yJbFE20b-n|>1o}LH{41}krC#5rAwEvb?ep@X;_V#hFqMgtE(Xp2oM??3U_yR)YsReyu5r_8iYb2 z`uqFg;o$*3pU>vGTrR4st8w@4U2NXG89W{j8#ivm;NT#*TrQlPoN(pJ6}Y&#ATTfx zAt52i&d!E|gTso}Y$2L^s87ppVWB zNk&FS)Y??@Oixb}xm->@efqRyovEoQ^5n@AwLZPQz2wD<7izhsYWn*6lIz#6FIrRI z#Yw4Dl7@x`($LUA9zT9eoHjk- zlNy`*_wN&HYilw-K5lF&Mq|xy_mq_r85s$gOoqI?JoYS0`IkT5q@A6e#+E>z{L+I- zJq1Of=z^M*V)9UvQcNCdQi{n#O-eC&7QNkzM55oRgF;ypEt3*LngQ%Lf))w|W@cu? l#@0ZgP$(1%g+ifd@(;6as9yy>3WNXv002ovPDHLkV1nL710MhY literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_60.map b/preview/pr-1492/api/latest/inherit_graph_60.map new file mode 100644 index 00000000..66074809 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_60.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_60.md5 b/preview/pr-1492/api/latest/inherit_graph_60.md5 new file mode 100644 index 00000000..f4f48fb2 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_60.md5 @@ -0,0 +1 @@ +e4a90514e942227f6be5ec1605589e42 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_60.png b/preview/pr-1492/api/latest/inherit_graph_60.png new file mode 100644 index 0000000000000000000000000000000000000000..3e3bc6e8798ad1f5ab6cb04464aa39f60365b9de GIT binary patch literal 2397 zcmV-j38MCiP)&lUEzZe|Hs;p;Q@(FD+rAGy{*i7eq z7orjhLNuar%w#cRF54V4WQl$m)o3!ZsENaU!0BFGoI>nC=hz~OTH_ola}<1;lYqUR z561hk7Fu4*HqI|;()(QJ+~w^9^}5KvuRjnnCDH)aU27KP#; zgDQT-fJGI*V!)z`Uol`&#jhB!^h)tBTC|9=vNFH+xpU`IUS6(W7Zem=wOV=Mg%_AT zdp4PwnQY&_om;nV^@a=pa&mGwc<^Aa-S3}5S3KUfZCfa%{cGu!;y-@;IQ8}Qe(jZ& zm0Z1gRllyOsUapNhIih1hqY_hGG)pXwr}5##bV*~>C?R-g%c-EaP8W)Ub$DOxOM9m zyLRnj?_R&7Xq~QjeE$6TKG7KpoK7cu_wMEH-Mf80SIDc&+ zESooP#%i^amzM`XR#p~Ye)%PZg@wHK+G`v>d>9d-q@;ue3l^|&;X-!q+^OGx&z?Q3 zTD8hYkH_P|X0vhW(xpymY;Vqoxp(g#2M-=($&w|E9z7bT(@9KBOb^`+OrV?r+S=ME zDk@^moH^v><>7L z3~bo2f$HjNE?>S3z`O6h%lh@}v0ANUW@b`eUQT*?Isgp~4cKfpo_z92RUZKW5;5*+bJw8Br7Wmxc@`PiWMsuGGqw(`T0Ek^wZ?!C>lEQc}W&3m0^qyLRoOv9Xc3xVWGiJDL;V)TvXfTel9A$wYpBJ{F6G zUw{3Tii!$sHd~*19Vlmj?CfkxOH0Yf$RIg6nZ=72bL7Yoy?}$oyX(oryz#~x{PfdL zR8&+D6B9#5Mg|E932fZBk-ECNKJ^EO!?7ScJ6pO!TwI)N-MZDUeblH?;&eLo>zOlW z%9=H6{Q8|ab4CEEtgIA|$0K23VRGWc2|eE2+$=+e3=y~6EvHVMl3~M!$(=iQ^!V-D zxApf)NlCJE=T4vdKl98pKJzv-G>E}qkmJXX>uukD`>hNfJXo5Wn?*$A_19mQf`S4) zo|u>@+qP{J5ecfXy*Wih^7HcrkflqPN>x>rpAUiPsmH-`zIyel7z_qEefqQ>-@SXc z0CN5M^`PTtc)8sZjhdy&YU@Oh=_;?s=ucm2g~`+ojVL2Iuwh= zqQ@WZd+yx1fbs5n5{R2OZ?bRSK1xeVak*S9TC}KFSI1r{ezV!^^G_E*OG^uljg7>{ z#s(dK`0!yOBO|d`EL^y70Zr4`uwes3hYt1W_h6YUDk|dr_ur?criL9mcCdN#W`6nQ z7X}R)gr@mDs0zT~!T(Qn#E22JwY72k_HCk~q5x=WYSLo>FTVI9BS(&8-@bj6m6b7n z{(L=VG#Z0yd~{BL)YMc`Q&ai#&p+9{dpE_!#W)-e=FXi+s<*Tp0qO`P>^73+?efC*0GBVh|e?P;A z4-cAWSLl^J|EyWF`26$FeNI`5i;EdKawN&g$pOb6IBj~Q-@=E;&Eqkwpc8f&1SZ4-3r`aQ9k+P6TNS+cuzffKyGd>Z@u*v zlO|1~wzih< zipgY>)YMd&I(4dy88b%AX0sF*7mL^H)%(@f)=ElBikM6$Nl8hO#~*)O^7HfM-o1Nr z<;oR#<&{^&WHQNf&pjtmQBksf{d#@ujvYH>`0(K}ZQ3-+&CL~&`+LpLKKsl^OGQP6 z#Ky+T`0?Xq+_-TPA0IE()zv|e{|Zj&JbwN@3%*AI2;Q! zP21C*N18nz4{o=csHi9s5)%BDxSE<8JRT34rV$<<&X_S{^wX2}xP19C4Gj$>CMNp* z<=5BOQ(s?CLPCPy5#g09SGaibA`uZ0OrAWM>gsA@V`CXLYLrjE*49?)>gv!mjq&5h z`{@-C#*G`t>eZ`RyLN4tGlbm)*oMn+0wV`G0y2?;v_;G1v0>2C=kXX3<(0UwPB7XP==@4xUW6#a!Ne#L-A6~AJ@qKaQJ zU{S@d7_fAB+LM!$6G|NlMac0hei5kz7WRV{g+ifFC=?2XLZMJ7dX4`9QdxA@a)r*a P00000NkvXXu0mjf+#S0= literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_61.map b/preview/pr-1492/api/latest/inherit_graph_61.map new file mode 100644 index 00000000..2888f196 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_61.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_61.md5 b/preview/pr-1492/api/latest/inherit_graph_61.md5 new file mode 100644 index 00000000..7d1e367c --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_61.md5 @@ -0,0 +1 @@ +04cdfe50703d5c6b0f430976cf272c2f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_61.png b/preview/pr-1492/api/latest/inherit_graph_61.png new file mode 100644 index 0000000000000000000000000000000000000000..2c45589ea762019ef49e9e79b38eb70b6677c21e GIT binary patch literal 1616 zcmV-W2Cw;vP)5vFZq`RT32o@ShShuZG z6yGSK875Ln_KF(#DTFp5KZNv@HA#%3*AHUmT&483$_&erVk;|xn%nh!koMeb^VaTW z?%}?EpLQMRaUR!y=YPj}ox4CnLPA19;`bo@7|6@ZixLFkkI4}8Z^mpkpZPI1<;Q>^ z2!9BI@Soo!N#ZYzZO(U2oH#MDQX~NA>gvL5HU}J&{bnr^KY?UU2qT#j!bs+XFd=Eq z_U+qgZEc-w8Iw*>%*o8m#A31d#W!r&;Iqi3rKRX}I##V(#kzIt$j!~AzP_GMpFa7_ z%gf6nAt50c(gIRgSjeSImnN)!un3Ad9UUDE3=H_i+uPfD^X85Bx~HdyIdkT)fB$}p zi;GE0N}|5Lp18O;9zJ~N%}Yo~VE+91!H^aZo6W}H;NXPS4;G{T&zUHqqN330bl&Uy z{Ctv=lgZA`#%i?!BimYPYAUIzslZ4ltzW;MyLazmv)L#vE@t)W)mSVRnwy&$8X7{Y z)v{~XF2cgXytOSB3l}b2;KPRxY}&Mm&6_uK@Zdr0b~{y7RWvj-pwVcktE)p4Ma*V1 zSFc`05CrskJvli!-daCuP^naeg@tka_;GKJ)9EB5BZHGCPqJXaf?r;%Nq^?ZWHQRi z%INCq;^oVi0NlBA$EV}Ey1K~8$zkf$sThq$;^X5vaNqzXB_-%|I&yP!X>Dy~>(;H_ zITaNZ?AWn`#Kc6hv$JVwX`!X1g^Y|0R4Nte>FHEfR+5*O2aNn6YHDgoPfsT;Ese^` zO7`s8GpdH7q9RNt6TQ8?-kgSp1{@AYP>g{|=$t^r#KZvb>eVZvqoV`nWMyTsckf;R z-oJm(kt0Xw=;-i1n^ICzm^*haeSLi>6bh=UsS_Q?CKEe%?hM+x z1jQVgOoqqf@r!#r9%Qnyo73rZ0x)C7j8SuzE?w&V{P^)>TrL;8cklMe5d;Cd-A-g= zB%&y?a^*^&@$m5QfVH1Id4fzPBQY`28(Xnr1;fL`JbU(xWy_ZNX@HS#GZ+jUI&_G( zwl@0v``NN(%b4GHyadIZsHiBPZ3y7&*RMDnj!`?|uUx-=ors7C;^N{)&6zUge^M0+ z1%e<@R#wLJ>C=7k;^X6a_wF5Tx0|7%A!g5>?N>_>d|$@Tnl+2z;bA_1{>;poGl7xr z{5}>)1HhU!YfvhcoI7_8i^ammjT?RPf0dv-bM$&Wjg5^yC!pHeT9is9%aBn*8ag{WNl8gTr_-U;YU%FoMxju!Xwf1x8VwZ{6}a7Q z03JPhL}zCwFkBQx7(b(9CQmORGZE9-b-o1OcTrT?h`jE@z96o#) zqtQ6-`^n{Unwpx(%F4oIGNDqbc>er3+qP{(E|(*d$vA!bGzNo#=;&zX&6|hEx;jpsIz?t?CTGr^!R>bA@pw3U_UxG3a!yVT<>lopT(}Ue zR{Qgd_cP?@=Wi+~C=mY%4u?auTCJkpZWmoHm*04Icei-s#trf2&70z_Terj)FJ1(! zW3$=B*RNlDudPMFt@+IU$k1S;>V94{l?sGx7gd;EB5sCh{MCfK4Sv|17cfS zn`pDyys>ZJzKQqm-xnV|c;KghGz}h)M^vlTVr^}0Kz(CjwOYl3f&y{E&G|QS`SN8k zA|gU`I2`|I{@(LhDcZ8v=>Zk<1BU zBy&O-$(#^IGAD!?^|V%4Sok}2NCd#o98nb8fj=ifi-d%PgoK2|B=KL-T#SHXdE3AM O0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_62.md5 b/preview/pr-1492/api/latest/inherit_graph_62.md5 new file mode 100644 index 00000000..9cad3b72 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_62.md5 @@ -0,0 +1 @@ +2951f09e5f7dde3f4ba613a68ba78b02 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_62.png b/preview/pr-1492/api/latest/inherit_graph_62.png new file mode 100644 index 0000000000000000000000000000000000000000..37d7b806c4de3fab0553d8be0d0799ee898fc9a7 GIT binary patch literal 67576 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_63.map b/preview/pr-1492/api/latest/inherit_graph_63.map new file mode 100644 index 00000000..4d375d2c --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_63.map @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_63.md5 b/preview/pr-1492/api/latest/inherit_graph_63.md5 new file mode 100644 index 00000000..15aeb368 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_63.md5 @@ -0,0 +1 @@ +b865fcfe67fc2ecfb65626cad98692ba \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_63.png b/preview/pr-1492/api/latest/inherit_graph_63.png new file mode 100644 index 0000000000000000000000000000000000000000..14074599880603e6c9178c30fd91fd95e497ef5b GIT binary patch literal 51271 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_64.map b/preview/pr-1492/api/latest/inherit_graph_64.map new file mode 100644 index 00000000..33128352 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_64.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_64.md5 b/preview/pr-1492/api/latest/inherit_graph_64.md5 new file mode 100644 index 00000000..f92b909a --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_64.md5 @@ -0,0 +1 @@ +322350dd3c401fa4ad13b91a56842c3c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_64.png b/preview/pr-1492/api/latest/inherit_graph_64.png new file mode 100644 index 0000000000000000000000000000000000000000..58b766b7b92c8bfc821017f1b96ef68f3b415f20 GIT binary patch literal 786 zcmV+t1MU2YP)?>2K~!jg?Upf1>rfbmpOdPHpru6wr5zNcLBv5EL;}qyb`vhwK^>$Z z6hV+uTm@YO9fi2K6@)-t`WJdjK~X0~s6z*JP;rz(ywmM%npW{PH_dP!=y2Yo-+A+L z^5p}GL?Zc%XcUskWJCxt*9kLTpeRbkFpOXIT36#uLWnsb#Hn|-yv4FC6ZlcDIYRh@ zVHp42kk=T7!TI^QLsvTB#dpXMkRbp*4k49FkQ}G(Pmj#RU%!51#DpN(f6! zOXPAnhrYPDXnU|sCWEf)wqGWb0U()7GCe)*hMjNI@)P+Tip3(DraAONp}@kzLT!D0 zea+zDAR8MSH7y(t19U6^a4CfE5Q#+4b={$-QYjLN1c^kV<$rUz9A{@|yuH1lX&RfG zn{;<~x9!O{J>jb!u(Pv6I-N$>b=KC_$mjDcFE6{Yx92CpG)*oqFKg@F-QA|IQa!J) zuk7vZQ7jf~uT4B2XJ}}M`}=!FM@QT8 zoct%x^|;a#=I7_hX0tp#KGw9u!$U%$5Hm9~ZP$;*VoXd-P%4#($K&X_j;3i`U0o3j z2HURh%1KD4)7;(NF+M(ys;a!ayil!H$!4>JLZPfI ztPltU+OF?P2t7SLoSd9+aBx7mTxMWkfU&VLy1MM;_xJbd>+5S;Y}M23J2 z0gxd8G6X<|0LT!4Pv(U6^>r_ObQDJjA0HnD;AaQCc!HuRl}>w*NF@H|H<>5HtO@Mi Q + + diff --git a/preview/pr-1492/api/latest/inherit_graph_65.md5 b/preview/pr-1492/api/latest/inherit_graph_65.md5 new file mode 100644 index 00000000..69b49e6c --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_65.md5 @@ -0,0 +1 @@ +c87716ee0340bba436924067748efb13 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_65.png b/preview/pr-1492/api/latest/inherit_graph_65.png new file mode 100644 index 0000000000000000000000000000000000000000..2e3a90ec22941fe2023a27327984c2d0b6fb4464 GIT binary patch literal 1228 zcmV;-1T*`IP) zcB2(s6_FwmK?^Rtpn`517oj48RumUq6}l?HOBPk6UWp48qtH~T8Z|L?Ar60x8rvq` z{&{xuz31b6-a}LPJ$jHcC6vFX9NlA%D5QImUQOtFwv$M1Bcr5&QKoEpSf*|x> zOi4G2z~&zD{{8#VmU2U|*=%%ncAlt-7hKE#3fbHcBAXjRWOGA^Y;Fh%in&Ikk-@=1 zzxcCf&-nD|ll1)d?OQrJI)X9fwIC?w4i68ryu9oew_2^NtgJ}S6B856&(8;A%4@-u z*%l5C4ltX|6c!dzR8)k;V)4;E9uJL;jT96VP+nfn$jAseIXP@>Y@AC67#tkr)vH%L zefpH<=4RY(x1^PnlrS_jL~U&?Po6yC%aNDYyqwRUKlAS0JNEbYF_}z! z|Nfn(rX~PhzkZF)W}~L2hF`ya@#4h`78VvHg97Pwb#-)gbzw4@h>3}zwY8P8u`zmk z4-ca@n~i~i0V*pidGqEC4OX(}q`tnM;o)Hn1_J=u+1bR##gwvC^%WFzMN!1-_4>uVUN52;c;}g&okbKy($dnTSY~D>9*>9l`FXatw~2^|kc&%nO6`5W@ct2b5l}M&e84p35vNIjmGE21+crj%a0#F&}y{- z^Y7fbgU91xb8{1=QVAUX+m1AaLcz|?4!gU%+`4rOfc5otDPN^h1=IyWpsK2hh=>TE zx&OQT!^4BSkc09<%g@iJr>6&p!y(05T3U#TiXt^NHDJD8uSciTN&726Lqh|JiHYcR zI+Bu-&}cNYx3>d_E26EfO&S|W*X#A%zki?6(NVIqv&qTHAuB73@$qp~D%C&te;Psg zsVXZgnVXyA-o1MyCMM!^I&r(*^z`%)6&2+(w!gohZ{NQ8#4HvI-QC?7jYj(V`q_!6)9J)+x1&@liI0!>TV@jz6F8ktzr3`x zG$JD-al75j&dwqT0tpETe)%q!i>aw8;^N}4+wJ7$=CZZ5CGG2hbb!UhMOIf=(d+fx zzI|JY+iW(pS}k|)-ut0000 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_66.md5 b/preview/pr-1492/api/latest/inherit_graph_66.md5 new file mode 100644 index 00000000..dd605757 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_66.md5 @@ -0,0 +1 @@ +42461f05a403cbfbd625ea1bfb15251c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_66.png b/preview/pr-1492/api/latest/inherit_graph_66.png new file mode 100644 index 0000000000000000000000000000000000000000..907994c7f84f2f6ffd1abb1b11cc7fb34aff2cdd GIT binary patch literal 1245 zcmV<31S0#1P)TaK~!jg?V4XmlU*FgKhKtsV2lw(#=Mv#4C^AoKM;aX38Ht>9~UMp z!fiD04@1I>gcTWu;!PJLr(O!ZL|(W-H!?~wo$X>l&~s6#B&OzH6pT&Jd(r!jo;G{m z^wF1Ip3l{Of6h6-^WAfv!#Nx1=;-L^>=fxoM_pZ=MUtd*|3xvs8$yVY?(XhS-}?^y zm?TNkIZ2Y9>|a^GHFn^S?;R|gZkN3Qq-x;^toz`#I=Q{rP=z?mDE~v)nf@+K| zsK#g_=+&!N>F@7P@n5`nkx(dfBt-D zMeh-s2s%1C%JlSfihpEegqfL{r2Xd28x%#Mv$Io`7YGDU6osLopD6om&5 z9w5sy9*-xP*Wcfd!{MN+s)~+|4&w1R05dZ)l$V#Q`t0fH!QpVQxw)yy{PtbYtgI|* zYHH}}>H;7X3UTDf5sHe6QgUCtdd1SxQqunV^(!x4ydaTCaQX6OjvqfxRaF%}pD+1^ z+_`gy=H_N(S?0!#8-zk3YHMo&$j;8DqN0N8>S|V2R(SpTHBC)Tcsw4AMx!S4+xDci zmv}rL%F4>{`F!~Oe$~_UZ^_Tk=g^@;oIH6FS(X7SYXSglsPUN1vKL)6yR^7idp?%lgbadEL`bJIjngTcVo)>evtYikRGA$1X)I(3S? zygb_5+lfRXJbU(x!NI{@*YWP%JL2&;Uawc>mm~>AQLtLA0CaVAVX;^!EG(q4v2oYq zevc-CS}YdT<^$iB=fc7QIXO9L+uXc)lWW(m(a_L9W@cvk;tm`jkw_%%_4RdCT$0q6 zWhRpeNs?%3Y2o0(gR0o+)2EZ4A3l7D&1NGOi!nAfrs)%^$vd>7qJqA@KGlxf+1ZKN zY^I=~AZ?pVmo70lILPhWx3}%rYPG6%{y-q0iknO(78e(jc3xf{`T6-oA`wbUOOa)n zl9Cc)u^1+k34not0eX6R2nK`PzkeUQ-L861?-or2ZEkMn!i5W*IB|l)!a{5|8-Bl^ zzP>)pW^>v$85tSKvdrPbhqvvwwY8N;j~;R6%o%Jp8*_7Ws(4LJ4L+Zbl9H0-#`5&( zQ-Z-DIXO8L6%}#p*fAz1CNLU}OiWC0{rYu!dwa>v&85D+o`Qk`91e#TGNi}pbXL1u zF0m6978b<#__$CMMa1Lrlz1!_6CXZ&NZah4&iA2Qw{JhxM*bw1x zSk?FR^t2cr9v0DPRMl>3YD$cckBimS)uiwJ`}bmOY)qB6y1FXD;jma=U;m}Kx?C>d zbULel)Gy`6-syB!OOo_NzYqO6ZnqmDggp=ls4kfGv%JRWf@+K|sK)4mYK$(Z#^{1- zj4r6gYi=j literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_67.map b/preview/pr-1492/api/latest/inherit_graph_67.map new file mode 100644 index 00000000..feee3c2c --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_67.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_67.md5 b/preview/pr-1492/api/latest/inherit_graph_67.md5 new file mode 100644 index 00000000..f3ea0400 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_67.md5 @@ -0,0 +1 @@ +56e9af97162084dc7e0c347a841c095c \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_67.png b/preview/pr-1492/api/latest/inherit_graph_67.png new file mode 100644 index 0000000000000000000000000000000000000000..74ef1ca8c8adfb4f0613c8ae3ff97b9a4b59019c GIT binary patch literal 1593 zcmV-92FCe`P)8d+utKd2!7c(b=%y}QBf1Ic)IdqR2?-+UXEJLpNGtK?6s58?!~Ut;_gtKFcFtU; zC#N39^Savi^ZD|8KVLrV`#d}k$Ye5^OePBkX=cD+FeFNnl(ihi$o@TrLh+l~Z2td0 zV_`EVNs^Q$Nz$)NSC(ucyk4&r_~oCmfTsS%Y&I`?L9&H0o6Yp~^##Ng%TSAKk;zRB zL2^?=klfTIa`Wa*3JMA+D=S;{wPt-#k_At9cQ>R9#&i*REZg_xuMB9*~!p$DTcV z$jr=K#LE5S|Of6#!43JfWqfh0)Pb($mwat*vGC>eX}RW-=HI6c!d@x7)GVY{bXMbN>8! z)~{dBxpU{RTCE5n7#tj=w6v6piVB1fbMEVBE$f3)TwEMVr4pCR1%S zo;*ovYAVN$9izFqnZ0}WvU~S#8XFs_t*!N4qoJXJs;Vk7Gc!4S_%IzE9dvYb0C3^L z1!`()(ChV-mzUGo*~!6!2LTuv86h_}myH`Ya^l1ZR<2x0Wo6}@x$m*rY*bWK5D^i< z(W6Hh9UY~xun>Tfk`lIT*@8}|qp`7(+}vD%IrkM*Mx(Ll$dM!B-`KEWgSdM2YCt?L zE>2i17TC-3Sa=C;`r4oI8eZIKc?H1wT;bM4rSlI1$5g8dNK7an~ z%TG*92qDA|bKl!XT3VW@udnxw-@JJv05LW;CWH{8s;WwuOs0A7Yra}qT7=PPygRdp zK{!irsGKeVY03WeXp z#kOtRn4X?yXlRJ9U%w)RAUiwTZ;cfzR?y$y&(zcur%#{u%Sn>N%a%UAlA$tyW7?QWBdsZ6YNlg@%R(JRT1K0|Nu}_V%LDXh=y( zp|`h}9XocQ*Xzm2$)Uf$pQxxPo<4ob{rmS(sZ?ZSWMDFx7#JA9?RNh#7YuXlYoUVj zPpzq`;q~j+Bqt}M)oO9MTue<((c0QdbaeDjUst74aqHGCii?Z6bLS2oj|Z>U%iX(o zeaHIk+qWqxDM77P6BieU*XyOdy&a`eiPdW5(4j+IzkZ#Bgan3%hbb*BMX6L0A0JOc zLj&dI<*3zaUc7igO-&6kF)>U|PR^POhWYGkAp*_}qtRF-Nz$+Kr?>yUKR>-$Ef$O4 z_f+}aZwQi`8iM4eh9J4AAxLg&2$Gu`g5;)#Ai1d_Xx2AMCX;C?>yQOeKvRVfkAeR! rLoKqOpin4&TkaZUGMP*!3st`ZDRO4W)D2bf00000NkvXXu0mjfs6iWI literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_68.map b/preview/pr-1492/api/latest/inherit_graph_68.map new file mode 100644 index 00000000..c910d6bf --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_68.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_68.md5 b/preview/pr-1492/api/latest/inherit_graph_68.md5 new file mode 100644 index 00000000..bce11bc9 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_68.md5 @@ -0,0 +1 @@ +9ecf6bb178160d018ecdd3187da7604b \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_68.png b/preview/pr-1492/api/latest/inherit_graph_68.png new file mode 100644 index 0000000000000000000000000000000000000000..cfab3d5ca3553bab086486cb1918e73ea07ef8a4 GIT binary patch literal 1995 zcmV;+2Q>JJP)#Q*Rr`znf-RF3k#AQ)CJnDo)ZB{S;b6WuZ2;G|IAU zDH@cBMNxtUMP^FTt6WPWNPf=?4VI9Vh-IexBTXzFq+uZ@+jN?W)6MI7@!+Y`v_C(W zJ)V+7 zw*elH_ZN@H`+H#|ar{PpZ1xPdZ{PmCQaFAKI-L$mrE=Cj{sL>^_=9j}FCsXz7ZIG< ziwMr_MTASt-oJl8YHDhn;wdR9sI9GK+T-KnxOwv?($dn9oScl3k`fFL54%Fbyg75` z3}iAH8X6i{@qvK>Y~8vQyLRpRrTKDla`5=^V^>O?H!d-|rKJUZeSJ>x=H_Pf_xCgH zl#~?Qy?Yl)NlD1c%EHLV2x4PnT_IuKw70jzXf&d{yqpzRDwQxAjd=0m#V^gL*X!}= z(tMIYH;-EQ6wiPqpGTki4zej zDk_kcmWK57bW~PWvaVAo6nOaXA&QEMkd%~!f`S5=&1R>$Gcz+Gm&z^)P&yNUI2i@;eb-9ghHWkTF<_H`=HnBnYPJff=njE=;$aeUAhFL(TJ;8uR|uk4%VD1l?s`enQ%B9Kefj{V!_N72m}xa1bFh~3G8+|6JNPt!_CbN z3WWkaJw1qvi^JsPBmm&z#fvB`EQCxZLsnK6YHMqek&(gD=;h^w0|ySEqM`x-P+MDz zwQJX6v{F+6^4d}n6}MkLt|qj>~=f$?%j)Z>()Uom!r72n0Z*fr$HzbB0fGI zX=!N~9v+5Hr$c^zKJxPN;O6Ewuf3m>5s}4WA$NCoYHVy|%`rAMMgs!_#OL#=rKN>6m%F<= zS*=zgB9cfXbnMtMrr&0>kx(e4s;Vj)92}%2OO}vcuV?zLRx5dUcu-GI4-paV+_{s^ zpFd9>9UbK7=SP#1lN28xPb!s))M_=YSh0eoOC%D})2C0F_Q#JO2>=ZZ4G|GhbaXUT zR#r0oKcj(&NG_LCLP7$G#bUZ~CdE z=YKgowr$&nj*brW_4VQP>({t5f~VV>gsCj*|P@@hXcdI!|?U>WsUdo@qyiL$LQ!N zbL`I?p*}u7%s8vn%DT>KwZg~82j1S^;PH4kd-g1rEnCJK6A=;Nq%Su&7Y7d>#L1H< z;pyo)>zdu&-C5~qY;26x&*QN_DE_R5l9Cbx2M5DoFrc-y6`M9~n)Uww1efIO`1p7{ zc<_K#eU_J(W7Vovh>3{-0GQ2Yl$DiXe0-c4^Y-mqm`o;!L?VQQgdi*|3`IpnOhMAw z*$ItCgV4}Wh{a-*mXX7^Cm6b95ot>Q|l}bq@5|LCYrPZrf zQ+|FvIUEim`jWF}W44@KUtdoGfq*0u2?YfO(V;_!SUFpzQjtI)pxD@0%FWIFp@#SG z-;=MeFI87pGxtbMO{K)d#9#8_dpX-BX3t=;SV*hYlF?|Ssi~=1$JlH(G8hch*4D;s z%-1*^4(jgiruO!B<{_A2a&nS7Iy&ghn>SALOC%DyfB!yx{`{GAIvttK=2`Fm;ll^g zYPB>nGQx@*3|l>_5qj*^8a;na#Z$Uqra18vk$L&Ye56R{k7c z_`flGrt0UI8}1liL~v#=A~>@b5uDkJh&cdH>fEEr84h{|u d4h{|g{|4;V@=$LzU&jCd002ovPDHLkV1iw!&;I}b literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_69.map b/preview/pr-1492/api/latest/inherit_graph_69.map new file mode 100644 index 00000000..7d2b6be2 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_69.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_69.md5 b/preview/pr-1492/api/latest/inherit_graph_69.md5 new file mode 100644 index 00000000..8b195876 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_69.md5 @@ -0,0 +1 @@ +94f9e09f28be73ab429702edb13c7355 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_69.png b/preview/pr-1492/api/latest/inherit_graph_69.png new file mode 100644 index 0000000000000000000000000000000000000000..7df03d91d93865b71e4785ac2f19b247199233d1 GIT binary patch literal 1851 zcmV-B2gLY^P)|L5q2gfG*Anr}lWCu%BGLb^(l!eWjZJSCRG zbf)#i3d5X2t8Xg`A_z?=qA;F{jKH80f}m+_OGnn`3qqPW)9I$e@NM_=A-ward?{x> zjPv_+?*Db&_qncJJNJF<4B+A6;o;%o@dnI%L9JFtG7OWp7QyiRJ}k@j*3{HA&DH$p zJ24EC#xTske=jVamEd-}9|QPjuI5qHS!!x(Ry`n|l~Geu1Cz<*p|fic3(qRU7u5&h zi|T{$MO^~5T8&q)UafT)zXe~^B`_L|7#J8>>o9%`uM{;WCkOTQ^&YxXsYF9V109c# zkK_9F>o{`c2o4`U44qB~r_0nw&qLSi_2}>Kr(>m3iQBhtL!nTh zpr8PwqoYVqPxnR$Jabs^cdECs+wFMq;sxHldxzB2Q~*GBb~eh(%Q=4a_4RoA^eLQ9 zCuA}iN=r*25C{PLIN$c~-;a+UKcc0j1<}#b&}y~l>gvMHn>R5wHin}|k0LiWm#$Y) zQGuqWCa^3Ei9`aGN`>9KcT>Ast%h7Khsk7u*=)w<&6}aoXs}_!2I}+u`*&QrbO}bI z5n{0zm6erX=#DUWWt#1nD52M5#Zix)4VtgH+f85t-jC_qC)1CAd*PVGjc5hqWc zgh(VpNl6J>T3V2qnThi9awwHb$mMbr78c^|+qZO1Zf-8LS}iIoE0L6x1cgF@rluy& zn)&(p@bmM7TCGNRcQ<4*873zusgFjZK|nwNN=i!b?b|mf6bfoPb?Ou@U%re(hYmq5 zmqV-7;@r7&ob^>I6@)?|PMN!{k<`}K z(s5&BBS}a|Ac28_Bt1QyR8&-uFJHb8LI@ci9wq{TfS61s>hEwkh)^gb-QC@U5JHlZ zlSx%o6}3Nq{+s|Hy}i9uQ!16@!i5V9#;Vn7iAtrS#}gA1L@XAQ2M-=l zyGEm-_OD;R5&&dyaF7fP3=o!ONpo{ECr5vOf8uaB=={>sQfgmLp39}Wx|$Rf6+N0? zL$7SVEX%^}c6;baa9aB?NID7Ui zXAOp7(B9sTn3xyVQnXby*ijypO!P+eV(j*bqvTrSvbHi*Sy z&OK(20{{>Tg-A(Bfz@iIT3lQlyfn{0j*s+7!ckbMY>FH^7b#-Ce zwrv1_l#~=|w_2^s%5x=nrKpjSk(`DI0463TV7J>56&2;-9}y9Oh=>RrJa`Zii3Crc zJb^-?0K+gifBrlI0s=VxiHV8ynqjzqEX^O!#pQA#EiDasd3h)_J9G z24pfB%w{t}LPGv1uHN2WjEsz+s;Uav+1W@JS@7_H!Ha13#Mk5&-8d~(8Gcz;f_3PJUe0-d0larIAt*woG z`t->o@A>nWljm|-)kbNSu&^+Mg@rBZBNPgel$5lnPgGRYFVEuHt$dc?;9%_9wTq)k zrBaW1a~qwIkPvLzw8_IKFffodHjCYpWm#loWNHkV=YwKEv;C1*X)d%5=>Vxn_^+EWe`XGE!eUJsa-{RupzZnOQ7x5@6Aw&=0=o-Yr p^9Qgj+q>2=@bK{P@bLI5{{iEn-(enn>gE6d002ovPDHLkV1gHvf!Y87 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_7.map b/preview/pr-1492/api/latest/inherit_graph_7.map new file mode 100644 index 00000000..6cc481b8 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_7.md5 b/preview/pr-1492/api/latest/inherit_graph_7.md5 new file mode 100644 index 00000000..bc30b8f0 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_7.md5 @@ -0,0 +1 @@ +105460e6ea5eaa4e9447f11fdf5e89db \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_7.png b/preview/pr-1492/api/latest/inherit_graph_7.png new file mode 100644 index 0000000000000000000000000000000000000000..df9d82f3228c4b840074e303a9fb18c5d2b8cfb9 GIT binary patch literal 2200 zcmV;J2xs?+P)uK~#90?V4#w)L$3JzcVhGl}kk>x#ZG}sih!khSUUQ8c9%*p!7nT zv_zElGD9Jv#L#*p)l_Dw)t|~tjnI)n6U}8Zmq<;*h0-C@aj9H8&x;3tkK?3{Ig|b$ z@8{L;o^$7%@45HPkGYot7z_r3!C){L48~lBH{Ku?i!FIP-sag5!(eC&iA3_xc$@xs z1CPhs%;WJM{~bvThR&F}*+;o~^QLa4Fc>|}yu8_#!O#(%ot+SgMCk7B)@XiMSQv70aD_w=3Q*?KCBQY@%`}gn1u3ftj5fOpX z($d+MHEm9xJ`Isb1er{xVpk{>*tTsO{QUf8Ntt%gS+mRKani-5p|P`g**6{d$&^X@?2# z*{6e8EQY_oKPoFLA(zY1+uMu!`g&Zsas~J9-Gh^p6OxjWaPHhWl$4Z!&*#I&#sS$tu@Om0 zN$BnEML<9R0s{lNcvIyRi^bTzdpG2A`EPTkr>7$)CkJV1X}=u@2M1&A+O^2d%>|$T zzjsG?csP1`dNkHB-MRoEBO?RPpFc-;cQ?Gfy%8B12?GOz-|oq=W5Mkw_qwO2Omt;Opy);NW1+KQc0c#Kc4t78b(N z(h@;IL2A7-Sq(bp@ZrM;LPA1lI=H&JlDWA#UAlCMq*5u#WHJ&61a#)i8Is9lB$vyH zh^V@{nq)E=Nu^RsNJt=4Q&TD~E>?-NWXTeWiHV`i%uL#|XAcR5LK+wt;QULME~Tqi zuToZ47H!(JiCkP<$lKeSo<4m_w{G1cBO@a!Dk|b)&NS!c%a_UC-kzI3cHGj^LI5Z? zH+RzY(L}>^>xzwyB|AGix_kF7WoBlQNF<^I2M$cQCklmPN*z0Q?xgeQ&r?`f7)3=z z5fM>lW+u72yHi$H7A;z|NTseLM~;xay*;I+rP2NS_sQDYnogcP$@#@%F|Av-jvhaL zOt){}rZsEU5CHo6^{YlTczSx0L?W4VZO2nyUQQt)A*9o0kBp2|vAMguQ*v_hq@Rn8 zjiun=V3jzB4jtmg0|NtOVPQcJA3o&#(b3VI|K-b<1b|vwTRGd_y?ZGpCPr&Ho12^I z&6_uzf9$xRpnw2SQ&ZEVb!wtvI(2n+c9MaC0rwIiB2p@qWN2tepFVx!VvgUFsdS7s zdu?qktz5a11_uYp*VmWs+_|IH>laXh2_IAKKg7VPRpRGRMQigL^hKG=!U* z8|v!nIGaEq;GWIR&0%b83`PQ?24>tSMI0;yCA zS69~=X_!u3rlzLg@pw3U_AHEyj8uGMn``WzXsTnBqeqV-C@2UK5fNCpaG{#t%*+hK z!^7z7>w}4j2>_t0tBdm)8XBU%zaRbm{hY?J>#S)F+C*o!F{Y-b=ILJhXIwuq09=WKCtad32WgsrVD9335DWo3oy*RKNre*OA|YuB#LsD_!Mvt|zr z3`A^fEWEwF5f&B(p->1vKR*Zr0(g0OK_C!tKLf_%=;#P1CnvbOyJP$I?TCwugR`^q zA8F7=&X$%Il{@qC<5Q33_^ZGg^yL3=9k)5{a;E*|G`!si~<*NlAfFD1?K91G2NT zk(!zcKA#T*0|TU_q#!;%9?s6ru(Pwn@bK`AYS21=azHIFFQ@kQb~XFw&!4HNs7U1y z^5Me=DlRT2rBX?4ZEY&P(Kx-my;MYj(!Gfi*j0-Z0^9OlWB6-_*fi=p40XC!%5i0kfcm!C){L3 + + diff --git a/preview/pr-1492/api/latest/inherit_graph_70.md5 b/preview/pr-1492/api/latest/inherit_graph_70.md5 new file mode 100644 index 00000000..ca6f57a5 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_70.md5 @@ -0,0 +1 @@ +a97e84af1c268af5ba88f309f9d2a909 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_70.png b/preview/pr-1492/api/latest/inherit_graph_70.png new file mode 100644 index 0000000000000000000000000000000000000000..d3881035d8695583c00d325613a6b1b2a1df2108 GIT binary patch literal 2004 zcmV;_2P^oAP)2UK~#90?b>@tlkFP^@b5DZEisp+q&br!4~3?X7>MOC3M(9?WYV@^ zo&!PifTl*KLjQyn5tIWV5$XMrXn_=2n39@p!w!O{7@~o*nr&vL8+!l#cz-^xbDRD2 z-8|&|`D?rGJ+Vt%I!{Kls5D3`k z?(Xi`x^=5jY|gJ=zff9Q3WY)ePft%26%}FEu3Z5B-oM7g#GtFI3reLDmo8mGR8$n| z>+8|b&;XrIhlq#>WM*c>8M1nng_Tb8uE9md< zx7oY^fRvP!_|()?vJ^f(KIG1wJ0|fRJ9ZG6OlA^~i;E*kNl7O0;NW0VSXjtD|NQwg z0YJWf{mPDKW@fVEV`F2)!NGwjl}a|I)oO{Oqa#tNRAzH6DJdaRsgw{xh+3^C91e$k z{P>X_udS_R=WJ4(?Xf*Kl_FmGtez#Y% zxBn+)9*+lxVNg&|U~+R47#N6&i3x;#BRn3|fx)YKGv zyjH7a&k+<91Q!<ReXYvqwiqqqepdYPFh; zRa8{K)zuZDp`q58!YqG(f9&7CA8+5jMPy_o1OfpfA|mkq{d@3uJPZ#HI!or|bD%s-$0s`Re?Ty>FZv*)IN_6YiEp~jK- zmDss+CsZmGBoYbi?Cjw0?~fBFPQcI44}N}r7#bQvP*4!`dOZNZ!NCC!9y~x?TpX&a ztMT*aPlSgX|CK*4FAw(i_7I6g;BvX}^76vq;2=UnLvi=+U5mN-`}?E3yc}g^Wzc9e zHmkuxD^U|`x_ + + diff --git a/preview/pr-1492/api/latest/inherit_graph_71.md5 b/preview/pr-1492/api/latest/inherit_graph_71.md5 new file mode 100644 index 00000000..3d279135 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_71.md5 @@ -0,0 +1 @@ +2d04869dc54aa7046738b1973548c217 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_71.png b/preview/pr-1492/api/latest/inherit_graph_71.png new file mode 100644 index 0000000000000000000000000000000000000000..a3568191dccd46505c0a62c779f117e25fc9f6cb GIT binary patch literal 1042 zcmV+t1nv8YP)|`7l!m&@>%!xm^Ff*QBYFD2n<)QPe-VvsG9m zlgTXrf4$ezLVUyJa(%g>Lc`^9!SDB{>2w~v{O=G$B!Czq0mKjq@U23$+wJgpJo&cq zX)?Z@Kf}Pl08Azm`uqC@y3uHa#bQBscQkii3I!m`>{pjcjdc7V}sT5A9lh>D*mr+($hWYt<002e3-uYWwTS?f-IYdJI6*NsltJU)3 zii!%z<#K@rydGzR!2pB7006LBt&L0s;8_e$33wptG|xyWf}9YQmhJp5pHA zjvt?#oM3Wt5^}j56B82%1On*l>cYap0*po@dV70eu~=|;c*w6=Sy_R@;eb}F#pviL zJRT2*hK2++M@B|aTwILl>1i}KH)riTCr@HF*zI=A&CLOL?VWnP9+5}{N~ID2u)Dj9 zy}doOx3}Zr;Q_0wtMGcgd~48XG^nhs#P#(xYHMo&0A{lpOG`_{JQ4|!rfDRT$uvEg zOoFDfd)Vvi>-o|(#bS_k4z>5MNwE>TtrDpiQv2U$5tvOdjN^_#GalW zxZQ3Gb7p@6bc0t3dJwy zH8nMTsHa}GQ(HlKc{w^dIs}?pt^Tl24_*oanx-T9_8=l6BJ!R234Q + + diff --git a/preview/pr-1492/api/latest/inherit_graph_72.md5 b/preview/pr-1492/api/latest/inherit_graph_72.md5 new file mode 100644 index 00000000..eb100282 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_72.md5 @@ -0,0 +1 @@ +bf4338a0bd7801a27a91cf6f1a4ef087 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_72.png b/preview/pr-1492/api/latest/inherit_graph_72.png new file mode 100644 index 0000000000000000000000000000000000000000..22e01bce3fc1a80f170a67eaa44531b519704121 GIT binary patch literal 1083 zcmV-B1jPG^P)iK~!jg?U+v}bZZ>PKWCDZB(Y!`Wn)Y-V|b-lO-L*Z$-Q?BsmaV7 zSxHjtEC|A%^0oD~ z2m}K2z;8cm5hj1f?RNk2hQ1nZw;PYg6QQdS*%Wo2dM zquY2DNldm_EG#ZAM(DM*wIKuA+uIo(9ep;xr>BRZp`mw;ZMWOW&(D8X?sJHu$m;5< zWc5HIlef3GIXXIu&^I?XIX*rHAUivo!NEZuA0NYFE-o$@9v&tyFYjGr=jZ2>mX`Le z+~@FkJe-`INLCMI+%D?t>$$tTV|jTwOrM>dMXgp-US3XDR~IIeiIS2MY&IL~>+4~$ zcDtRWr6pW07gbeNtgWp@Y!}hgSYBSHzrP=|*^DTP92^_~(BI$B-rgQVLqnKMCR$rt zC7HWyCdbFeW3^hDn3xFDr>3TGI2;IqfYoZn<#N%}(}Tfaz-%_Nwe{nKy0f!`&1NGu zHkP)wHga-u*xlU?trj4v8qLkk#KpzY($d1|=_zKj8GyRFI@D@4H8nN3TrTW(yCide z@x=El5Ji!1-@dWGzfVR+1{)h2_2lN1#dh4iMTCc3-3 zUmPQv8cwH^&dyE%a&vRhXf&LkpOc-PO+rEfI-L%a$t2aZr7>BhQV|FQBJ@BYfJ*ga zu^5d;3JMCCo}Ol4V1S8<3975BNli@!!0YugK0c1u>&5T)b8>PLvELev##eiZriMMf&>ssI08y_VzX`KPKko?;_e7f)H`}7}dM?B8kZr6&1|Q&4vAy zM@B|SN=l-jpdc*PVzJ=&`)O!sK&@6&R#pbU;o%`yS6B4*_EJ?Jr55LQTHK54Xf2kTU#3o3kw(w2FAw5qRx#Phr{u^ z)9DN literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_8.map b/preview/pr-1492/api/latest/inherit_graph_8.map new file mode 100644 index 00000000..bdb4b5f2 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_8.md5 b/preview/pr-1492/api/latest/inherit_graph_8.md5 new file mode 100644 index 00000000..36dba29c --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_8.md5 @@ -0,0 +1 @@ +5426009c6b2806aea088d3d8e4de55c7 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_8.png b/preview/pr-1492/api/latest/inherit_graph_8.png new file mode 100644 index 0000000000000000000000000000000000000000..1c652a6c2bdef6b6d928ea4d14a542ef1c8df139 GIT binary patch literal 2296 zcmXw52Q-^&ACFO7q>U}a2ytsv&3wis2tF(5wLYy`4XQTnHA^XCL@%{dSH+0!swhLlj(_|Eyxd*1gs=RNQHJkS5Po`2Q_2P-JQ6h8z4f!bJGIDxSS z+$cUC@Z>#}Uj_yqKRYW6$nnWlNv|t_K=@j0EX-VD%UR{Y)-GNWBgZ=4FpVJ8)B2!{ z`l}7f*^~z5B6fW#KAoazXegB>PKqI6T&}SjH0{O}oGXNL2joSFqx-}ino_DBjdF#Q zSMu{4`HlHVLIYZZB_~);|7p0{7kK~a7JaH5ehW*!pe)Ltj%6F@+d(-~ObLU_h&_?p z z`{EFy&q$24no&_*q>6SrPN~LJ{>eSP@T2dV%E_=YTk8kz#O38>6Jx<=a`+k51S(%T zwp>4wGb}7@UI{7U`S|)TXf%3!Ykhsat-XEj`axM49PjT>rqK}5(a~)WA6mM*OTL{(zN)uZRyd2>+1Yt*ZOzoymR}Z=$R{Eqg2&_KF&NpR zqM~uS+z1^2*DJ!^8iUl$4Z5A~{GT5^?H9wbhG-1>)Xb{MyC_ z79~t>Y7&6M;iV+f!1{FE@~2NDLmrOK@~|g^gIvN{c*{u|%}7*2Vr8u0tXe0Bsg)J) z)YMedRBlO$gp`z&ym(Ik%9p&-Qa&#)uhkD9$nEXIU15uU2enQriHV8Z@A|pw8yc2> zY`&>)ZOzEdg+iW8Pm4Tw@Zel-Rh5EK@)4q-pdcb5!W553iHeH8p5eWi_}euF^LU?_lZ% zRRvX5euaF#OP4Nf|NNO@jY>6@hd_4OY%`QFQcFuHARu7->sPG5zml384kx&}x+)Lj zV=OL0d3kv!rlzzF0qYC~!xYfBvAMatv60PWy6^7po*>fS->-egoK1de43IG6cp4vVzb$jva-Xy zH}@+k6ds@+@U3rBQpJ~xI7!H(s1N*A)z!;eTg1vr`4h;uW~tIIPDZMliQ&A*FeFdCp`qc{NZ|Pw#Ag ze*U?8MMYv`V`CS;8Rc7B>?UH=9KcSekM@43Eq{qcnV8&PceJ(j+w-BvTSD@BdojZw zS60l=`}ETMNyf&;HI0qg>ppXsKei-ayng+wgM&kJiHoZL`?DyN=F#EdAvXjrBcqfC zi`w139L1VLQVj!Ef&irG0_Ov1(^oZ#$X%(-gB_>TmI8QR?a<*BD4{Zf;X$QLL-0n1(may%T?2ipvRw zLUUbL&WDB*KE^jcBzT4sdwY8`Gc!#sEl*`CVLX1&@$ezJr3D%j6SKCy zPHt<1d3$@mi_p)^$+>;^uJHKr$cJe4!;TJJPkOwVy}kXTF_Rt;V%*>1y1~b*MzqhBUrIk`sg92$aFg(ly;$t?>z`y{P z>f+*3+1V*>bqB$&)e1=u@b;EHI6QL3sZ29x=SJdeF`2&?rZFy&-bABNqf*@bFV~qf8NHkiELZS5O@+c}++Xsi$)T<~fo0^+* zjf+c2bS)>eC1T`&FPQWMy@ka^cn^sr1teHmSI4Wat{&0t38v^@T9QjjO3EuJFgG*f z;N;?p{QTDVYETflr$?HDg9E(x_)p2m3evy;4q#yR#Atx(g=AzV&uw;hck4%g6s*A9 z%uY`~mAL;C3h3l2*_ZBfWEWLYIy;L2LF&{qf`WNFpO>irS_FXAR8^%~*E(tI>yK`D z5OvUK%OO84xU{r~b6`}|U0TAF`L1xA=;&|l2B_5p@(hz{y|J+|Iy5wtjRCmTfPEw$ z9hCVmWhNyjn>4hx2JpAYmHqXX62M?}kZ=YMl6#VAGI-5$vVGFh+Im#wG~wIlrLRUc zpem4k7rShg=l{H*%#B>V?&c=G$>CMDcm5uBw$pg^Sio*4snA5=@c#$)DSPW|oSDd7 z1?T^r;Z1I{O^0E{*ja~SB^0uTbLsf^Ti98*qmtm0hT)`dct+Vh^CL~b!m3Yk3bZm1 N8%qa^R;+L8e*wzWLgWAd literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherit_graph_9.map b/preview/pr-1492/api/latest/inherit_graph_9.map new file mode 100644 index 00000000..35d76785 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/preview/pr-1492/api/latest/inherit_graph_9.md5 b/preview/pr-1492/api/latest/inherit_graph_9.md5 new file mode 100644 index 00000000..2905ddb5 --- /dev/null +++ b/preview/pr-1492/api/latest/inherit_graph_9.md5 @@ -0,0 +1 @@ +8bd89557bc704e3f6ca29fc9c102879f \ No newline at end of file diff --git a/preview/pr-1492/api/latest/inherit_graph_9.png b/preview/pr-1492/api/latest/inherit_graph_9.png new file mode 100644 index 0000000000000000000000000000000000000000..e18fca4b3d33464a675a4e568f104ae455b17b12 GIT binary patch literal 2346 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 QivR!s07*qoM6N<$f^qG9*Z=?k literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/inherits.html b/preview/pr-1492/api/latest/inherits.html new file mode 100644 index 00000000..189c566f --- /dev/null +++ b/preview/pr-1492/api/latest/inherits.html @@ -0,0 +1,673 @@ + + + + + + + + +RTAB-Map: Class Hierarchy + + + + + + + + + + + + +

+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+
+ + + + diff --git a/preview/pr-1492/api/latest/jquery.js b/preview/pr-1492/api/latest/jquery.js new file mode 100644 index 00000000..1dffb65b --- /dev/null +++ b/preview/pr-1492/api/latest/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/preview/pr-1492/api/latest/menu.js b/preview/pr-1492/api/latest/menu.js new file mode 100644 index 00000000..b0b26936 --- /dev/null +++ b/preview/pr-1492/api/latest/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/preview/pr-1492/api/latest/menudata.js b/preview/pr-1492/api/latest/menudata.js new file mode 100644 index 00000000..5e0c5465 --- /dev/null +++ b/preview/pr-1492/api/latest/menudata.js @@ -0,0 +1,157 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Topics",url:"topics.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"b",url:"namespacemembers.html#index_b"}, +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"d",url:"namespacemembers.html#index_d"}, +{text:"e",url:"namespacemembers.html#index_e"}, +{text:"f",url:"namespacemembers.html#index_f"}, +{text:"g",url:"namespacemembers.html#index_g"}, +{text:"h",url:"namespacemembers.html#index_h"}, +{text:"i",url:"namespacemembers.html#index_i"}, +{text:"l",url:"namespacemembers.html#index_l"}, +{text:"n",url:"namespacemembers.html#index_n"}, +{text:"o",url:"namespacemembers.html#index_o"}, +{text:"r",url:"namespacemembers.html#index_r"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"u",url:"namespacemembers.html#index_u"}]}, +{text:"Functions",url:"namespacemembers_func.html",children:[ +{text:"b",url:"namespacemembers_func.html#index_b"}, +{text:"c",url:"namespacemembers_func.html#index_c"}, +{text:"d",url:"namespacemembers_func.html#index_d"}, +{text:"e",url:"namespacemembers_func.html#index_e"}, +{text:"f",url:"namespacemembers_func.html#index_f"}, +{text:"g",url:"namespacemembers_func.html#index_g"}, +{text:"h",url:"namespacemembers_func.html#index_h"}, +{text:"i",url:"namespacemembers_func.html#index_i"}, +{text:"n",url:"namespacemembers_func.html#index_n"}, +{text:"o",url:"namespacemembers_func.html#index_o"}, +{text:"r",url:"namespacemembers_func.html#index_r"}, +{text:"s",url:"namespacemembers_func.html#index_s"}, +{text:"u",url:"namespacemembers_func.html#index_u"}]}, +{text:"Variables",url:"namespacemembers_vars.html"}, +{text:"Typedefs",url:"namespacemembers_type.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"_",url:"functions.html#index__5F"}, +{text:"a",url:"functions_a.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"j",url:"functions_j.html#index_j"}, +{text:"k",url:"functions_k.html#index_k"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"x",url:"functions_x.html#index_x"}, +{text:"y",url:"functions_y.html#index_y"}, +{text:"z",url:"functions_z.html#index_z"}, +{text:"~",url:"functions_~.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func_b.html#index_b"}, +{text:"c",url:"functions_func_c.html#index_c"}, +{text:"d",url:"functions_func_d.html#index_d"}, +{text:"e",url:"functions_func_e.html#index_e"}, +{text:"f",url:"functions_func_f.html#index_f"}, +{text:"g",url:"functions_func_g.html#index_g"}, +{text:"h",url:"functions_func_h.html#index_h"}, +{text:"i",url:"functions_func_i.html#index_i"}, +{text:"j",url:"functions_func_j.html#index_j"}, +{text:"k",url:"functions_func_k.html#index_k"}, +{text:"l",url:"functions_func_l.html#index_l"}, +{text:"m",url:"functions_func_m.html#index_m"}, +{text:"n",url:"functions_func_n.html#index_n"}, +{text:"o",url:"functions_func_o.html#index_o"}, +{text:"p",url:"functions_func_p.html#index_p"}, +{text:"r",url:"functions_func_r.html#index_r"}, +{text:"s",url:"functions_func_s.html#index_s"}, +{text:"t",url:"functions_func_t.html#index_t"}, +{text:"u",url:"functions_func_u.html#index_u"}, +{text:"v",url:"functions_func_v.html#index_v"}, +{text:"w",url:"functions_func_w.html#index_w"}, +{text:"x",url:"functions_func_x.html#index_x"}, +{text:"y",url:"functions_func_y.html#index_y"}, +{text:"z",url:"functions_func_z.html#index_z"}, +{text:"~",url:"functions_func_~.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"_",url:"functions_vars.html#index__5F"}, +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"g",url:"functions_vars.html#index_g"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"v",url:"functions_vars.html#index_v"}, +{text:"w",url:"functions_vars.html#index_w"}]}, +{text:"Enumerations",url:"functions_enum.html"}, +{text:"Enumerator",url:"functions_eval.html",children:[ +{text:"k",url:"functions_eval.html#index_k"}]}, +{text:"Related Symbols",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"u",url:"globals.html#index_u"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"u",url:"globals_func.html#index_u"}]}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}, +{text:"Examples",url:"examples.html"}]} diff --git a/preview/pr-1492/api/latest/minus.svg b/preview/pr-1492/api/latest/minus.svg new file mode 100644 index 00000000..f70d0c1a --- /dev/null +++ b/preview/pr-1492/api/latest/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/preview/pr-1492/api/latest/minusd.svg b/preview/pr-1492/api/latest/minusd.svg new file mode 100644 index 00000000..5f8e8796 --- /dev/null +++ b/preview/pr-1492/api/latest/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/preview/pr-1492/api/latest/namespacegraph.html b/preview/pr-1492/api/latest/namespacegraph.html new file mode 100644 index 00000000..5d376036 --- /dev/null +++ b/preview/pr-1492/api/latest/namespacegraph.html @@ -0,0 +1,98 @@ + + + + + + + + +RTAB-Map: graph Namespace Reference + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    graph Namespace Reference
    +
    +
    + +

    Pose-graph I/O, trajectory metrics, link utilities, and path planning. +More...

    +

    Detailed Description

    +

    Pose-graph I/O, trajectory metrics, link utilities, and path planning.

    +

    Functions operate on maps of signature ids to Transform poses and Link constraints (typically stored as std::multimap<int, Link> keyed by the source node id).

    +

    Main groups:

      +
    • I/O: exportPoses(), importPoses(), exportGPS()
    • +
    • Evaluation: calcKittiSequenceErrors(), calcRelativeErrors(), calcRMSE(), computeMaxGraphErrors()
    • +
    • Links: findLink(), findLinks(), filterLinks(), filterDuplicateLinks()
    • +
    • Spatial queries: findNearestNode(), findNearestNodes(), frustumPosesFiltering(), radiusPosesFiltering()
    • +
    • Planning: computePath(), computePathLength(), getPaths()
    • +
    +
    + + + + diff --git a/preview/pr-1492/api/latest/namespacemembers.html b/preview/pr-1492/api/latest/namespacemembers.html new file mode 100644 index 00000000..48ddacb9 --- /dev/null +++ b/preview/pr-1492/api/latest/namespacemembers.html @@ -0,0 +1,181 @@ + + + + + + + + +RTAB-Map: Namespace Members + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - b -

    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - l -

    + + +

    - n -

    + + +

    - o -

    + + +

    - r -

    + + +

    - s -

    + + +

    - u -

    +
    + + + + diff --git a/preview/pr-1492/api/latest/namespacemembers_func.html b/preview/pr-1492/api/latest/namespacemembers_func.html new file mode 100644 index 00000000..e8fc1ba9 --- /dev/null +++ b/preview/pr-1492/api/latest/namespacemembers_func.html @@ -0,0 +1,172 @@ + + + + + + + + +RTAB-Map: Namespace Members + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace functions with links to the namespaces they belong to:
    + +

    - b -

    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - n -

    + + +

    - o -

    + + +

    - r -

    + + +

    - s -

    + + +

    - u -

    +
    + + + + diff --git a/preview/pr-1492/api/latest/namespacemembers_type.html b/preview/pr-1492/api/latest/namespacemembers_type.html new file mode 100644 index 00000000..fc52bd6d --- /dev/null +++ b/preview/pr-1492/api/latest/namespacemembers_type.html @@ -0,0 +1,86 @@ + + + + + + + + +RTAB-Map: Namespace Members + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace typedefs with links to the namespaces they belong to:
    +
    + + + + diff --git a/preview/pr-1492/api/latest/namespacemembers_vars.html b/preview/pr-1492/api/latest/namespacemembers_vars.html new file mode 100644 index 00000000..5c3f6f87 --- /dev/null +++ b/preview/pr-1492/api/latest/namespacemembers_vars.html @@ -0,0 +1,87 @@ + + + + + + + + +RTAB-Map: Namespace Members + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace variables with links to the namespaces they belong to:
    +
    + + + + diff --git a/preview/pr-1492/api/latest/namespacertabmap.html b/preview/pr-1492/api/latest/namespacertabmap.html new file mode 100644 index 00000000..dbe6bc61 --- /dev/null +++ b/preview/pr-1492/api/latest/namespacertabmap.html @@ -0,0 +1,1412 @@ + + + + + + + + +RTAB-Map: rtabmap Namespace Reference + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    rtabmap Namespace Reference
    +
    +
    + + + + + +

    +Namespaces

    namespace  util2d
     This namespace contains 2D image processing utilities.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  BayesFilter
     Recursive Bayesian filter for loop-closure hypothesis estimation in RTAB-Map. More...
     
    class  BRISK
     BRISK detector and descriptor. More...
     
    class  Camera
     
    class  CameraDepthAI
     
    class  CameraFreenect
     
    class  CameraFreenect2
     
    class  CameraImages
     
    class  CameraK4A
     
    class  CameraK4W2
     
    class  CameraModel
     Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection, rectification, and transformation. More...
     
    class  CameraMyntEye
     
    class  CameraOpenni
     OpenNI driver for cameras like Kinect for Xbox 360. More...
     
    class  CameraOpenNI2
     
    class  CameraOpenNICV
     
    class  CameraOrbbecSDK
     
    class  CameraRealSense
     
    class  CameraRealSense2
     
    class  CameraRGBDImages
     
    class  CameraSeerSense
     
    class  CameraStereoDC1394
     
    class  CameraStereoFlyCapture2
     
    class  CameraStereoImages
     
    class  CameraStereoTara
     
    class  CameraStereoVideo
     
    class  CameraStereoZed
     
    class  CameraStereoZedOC
     
    class  CameraVideo
     
    class  CloudMap
     
    class  CompressionThread
     Background thread to compress or uncompress images and generic matrices. More...
     
    class  DBDriver
     Abstract database driver for RTAB-Map maps (signatures, links, words, statistics). More...
     
    class  DBDriverSqlite3
     SQLite3 implementation of DBDriver for RTAB-Map map databases. More...
     
    class  DBReader
     
    class  EnvSensor
     Single environmental measurement (type, value, timestamp). More...
     
    class  EpipolarGeometry
     
    class  FAST
     FAST corner detector only (no descriptor). More...
     
    class  FAST_BRIEF
     FAST corners + BRIEF descriptors. More...
     
    class  FAST_FREAK
     FAST corners + FREAK descriptors. More...
     
    class  Feature2D
     Abstract 2D feature detector and descriptor extractor for visual SLAM. More...
     
    class  FeatureBA
     A single bundle adjustment feature observation: one keypoint seen in one frame. More...
     
    class  FlannIndex
     
    class  GainCompensator
     
    class  GeodeticCoords
     WGS84 geodetic latitude, longitude and altitude with coordinate conversions. More...
     
    class  GFTT
     Good-features-to-track detector (Shi–Tomasi / Harris). More...
     
    class  GFTT_BRIEF
     GFTT corners + BRIEF descriptors. More...
     
    class  GFTT_DAISY
     GFTT corners + DAISY descriptors (OpenCV 3+ xfeatures2d). More...
     
    class  GFTT_FREAK
     GFTT corners + FREAK descriptors. More...
     
    class  GFTT_ORB
     GFTT corners + ORB descriptors (common default when SURF is unavailable). More...
     
    class  GlobalDescriptor
     
    class  GlobalDescriptorExtractor
     
    class  GlobalMap
     Abstract base for assembling per-node LocalGrid data into a global map. More...
     
    class  GPS
     WGS84 GPS fix attached to a sensor sample or graph node. More...
     
    class  GridMap
     
    class  IMU
     Inertial measurement sample (ROS sensor_msgs/Imu-like fields). More...
     
    class  IMUEvent
     UEvent carrying an IMU sample and timestamp. More...
     
    class  IMUFilter
     Fuses gyroscope and accelerometer samples into an orientation quaternion. More...
     
    class  IMUThread
     Background thread that replays IMU measurements from a CSV file. More...
     
    class  KAZE
     KAZE detector and descriptor (OpenCV 3+). More...
     
    class  Landmark
     Optimized pose of a visual landmark (e.g. ArUco/AprilTag) in the map. More...
     
    class  LaserScan
     Represents 2D or 3D laser scan data with support for multiple point data formats. More...
     
    class  Lidar
     
    class  LidarVLP16
     
    class  Link
     Directed constraint between two nodes in RTAB-Map's pose graph. More...
     
    class  LocalGrid
     Local occupancy grid cells for one map node (ground, obstacles, empty). More...
     
    class  LocalGridCache
     Cache of LocalGrid entries keyed by map node id. More...
     
    class  LocalGridMaker
     Builds per-node local occupancy grids from laser scans or depth clouds. More...
     
    class  MarkerDetector
     
    class  MarkerInfo
     
    class  Memory
     Three-tiered memory management (STM, WM, LTM) for RTAB-Map. More...
     
    class  OccupancyGrid
     
    class  OctoMap
     
    class  Odometry
     Abstract base class for visual, lidar and visual-inertial odometry backends. More...
     
    class  OdometryCuVSLAM
     
    class  OdometryDVO
     
    class  OdometryEvent
     
    class  OdometryF2F
     
    class  OdometryF2M
     
    class  OdometryFLOAM
     
    class  OdometryFovis
     
    class  OdometryInfo
     
    class  OdometryLIOSAM
     
    class  OdometryLOAM
     
    class  OdometryMono
     
    class  OdometryMSCKF
     
    class  OdometryOkvis
     
    class  OdometryOpen3D
     
    class  OdometryOpenVINS
     
    class  OdometryORBSLAM2
     
    class  OdometryORBSLAM3
     
    class  OdometryResetEvent
     
    class  OdometryThread
     
    class  OdometryVINSFusion
     
    class  OdometryViso2
     
    class  Optimizer
     Abstract base for pose-graph and bundle-adjustment optimizers. More...
     
    class  OptimizerCeres
     
    class  OptimizerCVSBA
     
    class  OptimizerG2O
     
    class  OptimizerGTSAM
     
    class  OptimizerTORO
     
    class  ORB
     ORB detector and descriptor (optional GPU). More...
     
    class  ORBOctree
     ORB with octree spatial distribution (RTAB-Map must be built with OCTREE enabled). More...
     
    class  Parameters
     
    class  ParamEvent
     
    class  ParticleFilter
     
    struct  PointXYZIRT
     This namespace contains 3D point cloud processing utilities. More...
     
    struct  PointXYZIT
     
    class  ProgressState
     
    class  PythonInterface
     
    class  Registration
     Abstract base for registering two observations (visual, ICP, or both). More...
     
    class  RegistrationIcp
     
    class  RegistrationInfo
     Statistics and diagnostics returned by Registration. More...
     
    class  RegistrationVis
     Visual registration between two signatures using features and geometry. More...
     
    class  Rtabmap
     Top-level RTAB-Map SLAM pipeline (mapping, localization and loop closure). More...
     
    class  RtabmapColorOcTree
     
    class  RtabmapColorOcTreeNode
     
    class  RtabmapEvent
     
    class  RtabmapEvent3DMap
     
    class  RtabmapEventCmd
     
    class  RtabmapEventInit
     
    class  RtabmapGlobalPathEvent
     
    class  RtabmapGoalStatusEvent
     
    class  RtabmapLabelErrorEvent
     
    class  RtabmapThread
     
    class  RvlCodec
     
    class  SensorCapture
     Abstract base class for sensor data capture (cameras, lidars, etc.) More...
     
    class  SensorCaptureInfo
     Metadata structure for sensor data capture and processing. More...
     
    class  SensorCaptureThread
     Thread-based sensor data capture and event posting for RTAB-Map. More...
     
    class  SensorData
     Container class for all sensor data captured at a specific time. More...
     
    class  SensorEvent
     Event class for sensor data communication in RTAB-Map's event system. More...
     
    class  SIFT
     SIFT detector and descriptor (optional GPU / CudaSift). More...
     
    class  Signature
     Represents a node in RTAB-Map's pose graph. More...
     
    class  Statistics
     Collects and manages runtime statistics for RTAB-Map. More...
     
    class  Stereo
     Sparse stereo matching using block matching. More...
     
    class  StereoBM
     Block Matching algorithm for dense stereo matching. More...
     
    class  StereoCameraModel
     A class representing a calibrated stereo camera system. More...
     
    class  StereoDense
     Abstract base class for dense stereo matching algorithms. More...
     
    class  StereoOpticalFlow
     Sparse stereo matching using optical flow. More...
     
    class  StereoSGBM
     Semi-Global Block Matching algorithm for dense stereo matching. More...
     
    class  SuperPointRpautrat
     SuperPoint (rpautrat) via Torch + Python (RTAB-Map must be built with libtorch and Python support). More...
     
    class  SuperPointTorch
     SuperPoint via LibTorch (RTAB-Map must be built with libtorch support). More...
     
    class  SURF
     SURF detector and descriptor (non-free / xfeatures2d depending on OpenCV build). More...
     
    class  SURF_DAISY
     SURF detector + DAISY descriptors (OpenCV 3+ xfeatures2d). More...
     
    class  SURF_FREAK
     SURF detector + FREAK descriptors. More...
     
    class  Transform
     Represents a 3D rigid body transformation (rotation + translation). More...
     
    class  TransformStamped
     Associates a transform with a timestamp. More...
     
    class  UserDataEvent
     
    class  VisualWord
     Represents a visual word (feature descriptor) used in the bag-of-words (BoW) model. More...
     
    class  VWDictionary
     Manages a dictionary of visual words for visual place recognition and loop closure detection. More...
     
    + + + + + + + + + + + +

    +Typedefs

    typedef std::map< EnvSensor::Type, EnvSensor > EnvSensors
     Map of environmental readings keyed by EnvSensor::Type (at most one per type).
     
    typedef std::map< int, Landmark > Landmarks
     Map of landmark id → Landmark (typically positive keys).
     
    typedef std::map< std::string, std::string > ParametersMap
     
    typedef std::pair< std::string, std::string > ParametersPair
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    RTABMAP_CORE_EXPORT std::ostream & operator<< (std::ostream &os, const CameraModel &model)
     Stream operator for printing a camera model to an output stream.
     
    +std::vector< unsigned char > RTABMAP_CORE_EXPORT compressImage (const cv::Mat &image, const std::string &format=".png")
     Encodes image to a byte buffer (OpenCV imencode or RVL for depth).
     
    +cv::Mat RTABMAP_CORE_EXPORT compressImage2 (const cv::Mat &image, const std::string &format=".png")
     Same as compressImage() but returns a CV_8UC1 row matrix.
     
    +cv::Mat RTABMAP_CORE_EXPORT uncompressImage (const cv::Mat &bytes)
     Decodes compressed image bytes to a @cv::Mat.
     
    +cv::Mat RTABMAP_CORE_EXPORT uncompressImage (const std::vector< unsigned char > &bytes)
     Decodes compressed image bytes to a @cv::Mat.
     
    +std::vector< unsigned char > RTABMAP_CORE_EXPORT compressData (const cv::Mat &data)
     Compresses a matrix with zlib; appends rows, cols and type at the end.
     
    +cv::Mat RTABMAP_CORE_EXPORT compressData2 (const cv::Mat &data)
     Same as compressData() but returns a CV_8UC1 row matrix.
     
    +cv::Mat RTABMAP_CORE_EXPORT uncompressData (const cv::Mat &bytes)
     Restores a matrix compressed with compressData() or compressData2().
     
    +cv::Mat RTABMAP_CORE_EXPORT uncompressData (const std::vector< unsigned char > &bytes)
     Restores a matrix compressed with compressData() or compressData2().
     
    +cv::Mat RTABMAP_CORE_EXPORT uncompressData (const unsigned char *bytes, unsigned long size)
     Restores a matrix from a raw compressed buffer.
     
    +cv::Mat RTABMAP_CORE_EXPORT compressString (const std::string &str)
     Compresses a null-terminated string using compressData2().
     
    +std::string RTABMAP_CORE_EXPORT uncompressString (const cv::Mat &bytes)
     Decompresses a string produced by compressString().
     
    std::string RTABMAP_CORE_EXPORT compressedDepthFormat (const cv::Mat &bytes)
     Detects the compression format of depth image bytes.
     
    std::string RTABMAP_CORE_EXPORT compressedDepthFormat (const std::vector< unsigned char > &bytes)
     
    std::string RTABMAP_CORE_EXPORT compressedDepthFormat (const unsigned char *bytes, size_t size)
     
    + RTABMAP_DEPRECATED (typedef SensorData Image, "rtabmap::Image class is renamed to rtabmap::SensorData, use the last one instead.")
     
    int RTABMAP_CORE_EXPORT saveLASFile (const std::string &filePath, const pcl::PointCloud< pcl::PointXYZ > &cloud, const std::vector< int > &cameraIds=std::vector< int >())
     Writes a PCL point cloud to a LAS/LAZ file (requires RTAB-Map built with libLAS).
     
    int RTABMAP_CORE_EXPORT saveLASFile (const std::string &filePath, const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const std::vector< int > &cameraIds=std::vector< int >(), const std::vector< float > &intensities=std::vector< float >())
     Writes a colored point cloud to LAS/LAZ, with optional intensity and camera ids.
     
    int RTABMAP_CORE_EXPORT saveLASFile (const std::string &filePath, const pcl::PointCloud< pcl::PointXYZI > &cloud, const std::vector< int > &cameraIds=std::vector< int >())
     Writes a point cloud with intensity channel to LAS/LAZ.
     
    std::vector< double > cumSum (const std::vector< double > &v)
     
    std::vector< double > resample (const std::vector< double > &p, const std::vector< double > &w, bool normalizeWeights=false)
     
    +std::string getPDALSupportedWriters ()
     
    +int savePDALFile (const std::string &filePath, const pcl::PointCloud< pcl::PointXYZ > &cloud, const std::vector< int > &cameraIds=std::vector< int >(), bool binary=false)
     
    +int savePDALFile (const std::string &filePath, const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const std::vector< int > &cameraIds=std::vector< int >(), bool binary=false, const std::vector< float > &intensities=std::vector< float >())
     
    +int savePDALFile (const std::string &filePath, const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const std::vector< int > &cameraIds=std::vector< int >(), bool binary=false, const std::vector< float > &intensities=std::vector< float >())
     
    +int savePDALFile (const std::string &filePath, const pcl::PointCloud< pcl::PointXYZI > &cloud, const std::vector< int > &cameraIds=std::vector< int >(), bool binary=false)
     
    +int savePDALFile (const std::string &filePath, const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const std::vector< int > &cameraIds=std::vector< int >(), bool binary=false)
     
    +std::string RTABMAP_CORE_EXPORT getPythonTraceback ()
     
    bool RTABMAP_CORE_EXPORT databaseRecovery (const std::string &corruptedDatabase, bool keepCorruptedDatabase=true, std::string *errorMsg=0, ProgressState *progressState=0)
     
    void icvGetRectanglesFisheye (const CvMat *cameraMatrix, const CvMat *distCoeffs, const CvMat *R, const CvMat *newCameraMatrix, CvSize imgSize, cv::Rect_< float > &inner, cv::Rect_< float > &outer)
     
    void cvStereoRectifyFisheye (const CvMat *_cameraMatrix1, const CvMat *_cameraMatrix2, const CvMat *_distCoeffs1, const CvMat *_distCoeffs2, CvSize imageSize, const CvMat *matR, const CvMat *matT, CvMat *_R1, CvMat *_R2, CvMat *_P1, CvMat *_P2, CvMat *matQ, int flags, double alpha, CvSize newImgSize)
     
    void stereoRectifyFisheye (cv::InputArray _cameraMatrix1, cv::InputArray _distCoeffs1, cv::InputArray _cameraMatrix2, cv::InputArray _distCoeffs2, cv::Size imageSize, cv::InputArray _Rmat, cv::InputArray _Tmat, cv::OutputArray _Rmat1, cv::OutputArray _Rmat2, cv::OutputArray _Pmat1, cv::OutputArray _Pmat2, cv::OutputArray _Qmat, int flags, double alpha, cv::Size newImageSize)
     
    RTABMAP_CORE_EXPORT std::ostream & operator<< (std::ostream &os, const StereoCameraModel &model)
     Outputs a textual representation of the StereoCameraModel to the given output stream.
     
    +RTABMAP_CORE_EXPORT std::ostream & operator<< (std::ostream &os, const Transform &s)
     Output stream operator for Transform.
     
    + + + + + + + + + + +

    +Variables

    RTABMAP_DEPRECATED typedef SensorCaptureInfo CameraInfo
     Backward compatibility typedef.
     
    RTABMAP_DEPRECATED typedef SensorCaptureThread CameraThread
     Backward compatibility typedef.
     
    RTABMAP_DEPRECATED typedef SensorEvent CameraEvent
     Backward compatibility typedef.
     
    +

    Detailed Description

    +

    Typedef Documentation

    + +

    ◆ EnvSensors

    + +
    +
    + + + + +
    typedef std::map<EnvSensor::Type, EnvSensor> rtabmap::EnvSensors
    +
    + +

    Map of environmental readings keyed by EnvSensor::Type (at most one per type).

    + +

    Definition at line 114 of file EnvSensor.h.

    + +
    +
    + +

    ◆ Landmarks

    + +
    +
    + + + + +
    typedef std::map<int, Landmark> rtabmap::Landmarks
    +
    + +

    Map of landmark id → Landmark (typically positive keys).

    + +

    Definition at line 113 of file Landmark.h.

    + +
    +
    + +

    ◆ ParametersMap

    + +
    +
    + + + + +
    typedef std::map<std::string, std::string> rtabmap::ParametersMap
    +
    + +

    Definition at line 43 of file Parameters.h.

    + +
    +
    + +

    ◆ ParametersPair

    + +
    +
    + + + + +
    typedef std::pair<std::string, std::string> rtabmap::ParametersPair
    +
    + +

    Definition at line 44 of file Parameters.h.

    + +
    +
    +

    Function Documentation

    + +

    ◆ operator<<() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    RTABMAP_CORE_EXPORT std::ostream & rtabmap::operator<< (std::ostream & os,
    const CameraModel & model 
    )
    +
    + +

    Stream operator for printing a camera model to an output stream.

    +

    This function outputs the name, image size, and camera matrices (K, D, R, P) along with the local transformation.

    +

    Example output:

    Name: camera1
    +
    Size: 640x480
    +
    K= [fx, 0, cx;
    +
    0, fy, cy;
    +
    0, 0, 1]
    +
    D= [...]
    +
    R= [...]
    +
    P= [...]
    +
    LocalTransform= [...]
    +
    Parameters
    + + + +
    osOutput stream.
    modelCamera model to print.
    +
    +
    +
    Returns
    The modified output stream.
    + +
    +
    + +

    ◆ compressedDepthFormat() [1/3]

    + +
    +
    + + + + + + + + +
    std::string RTABMAP_CORE_EXPORT rtabmap::compressedDepthFormat (const cv::Mat & bytes)
    +
    + +

    Detects the compression format of depth image bytes.

    +
    Returns
    ".rvl" if the buffer has an RVL signature, otherwise ".png".
    + +
    +
    + +

    ◆ compressedDepthFormat() [2/3]

    + +
    +
    + + + + + + + + +
    std::string RTABMAP_CORE_EXPORT rtabmap::compressedDepthFormat (const std::vector< unsigned char > & bytes)
    +
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    + +
    +
    + +

    ◆ compressedDepthFormat() [3/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::string RTABMAP_CORE_EXPORT rtabmap::compressedDepthFormat (const unsigned char * bytes,
    size_t size 
    )
    +
    +

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    + +
    +
    + +

    ◆ saveLASFile() [1/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int RTABMAP_CORE_EXPORT rtabmap::saveLASFile (const std::string & filePath,
    const pcl::PointCloud< pcl::PointXYZ > & cloud,
    const std::vector< int > & cameraIds = std::vector< int >() 
    )
    +
    + +

    Writes a PCL point cloud to a LAS/LAZ file (requires RTAB-Map built with libLAS).

    +

    Output uses 1 mm XYZ scale (0.001). The file extension (.las or .laz) selects uncompressed or compressed output when libLAS LAZ support is available.

    +
    Parameters
    + + + + +
    filePathOutput path (.las or .laz).
    cloudInput point cloud.
    cameraIdsOptional per-point camera/signature ids (stored as point source ID); must be empty or the same length as cloud.
    +
    +
    +
    Returns
    0 on success, 1 on error (e.g. LAZ not supported).
    + +
    +
    + +

    ◆ saveLASFile() [2/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int RTABMAP_CORE_EXPORT rtabmap::saveLASFile (const std::string & filePath,
    const pcl::PointCloud< pcl::PointXYZRGB > & cloud,
    const std::vector< int > & cameraIds = std::vector< int >(),
    const std::vector< float > & intensities = std::vector< float >() 
    )
    +
    + +

    Writes a colored point cloud to LAS/LAZ, with optional intensity and camera ids.

    +
    Parameters
    + + + + + +
    filePathOutput path (.las or .laz).
    cloudRGB point cloud (8-bit channels mapped to 16-bit LAS color).
    cameraIdsOptional per-point ids (same length as cloud or empty).
    intensitiesOptional per-point intensities (same length as cloud or empty).
    +
    +
    +
    Returns
    0 on success, 1 on error.
    + +
    +
    + +

    ◆ saveLASFile() [3/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int RTABMAP_CORE_EXPORT rtabmap::saveLASFile (const std::string & filePath,
    const pcl::PointCloud< pcl::PointXYZI > & cloud,
    const std::vector< int > & cameraIds = std::vector< int >() 
    )
    +
    + +

    Writes a point cloud with intensity channel to LAS/LAZ.

    +
    Parameters
    + + + + +
    filePathOutput path (.las or .laz).
    cloudXYZI point cloud (coordinates and intensity written).
    cameraIdsOptional per-point ids (same length as cloud or empty).
    +
    +
    +
    Returns
    0 on success, 1 on error.
    + +
    +
    + +

    ◆ cumSum()

    + +
    +
    + + + + + + + + +
    std::vector< double > rtabmap::cumSum (const std::vector< double > & v)
    +
    + +

    Definition at line 53 of file ParticleFilter.h.

    + +
    +
    + +

    ◆ resample()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    std::vector< double > rtabmap::resample (const std::vector< double > & p,
    const std::vector< double > & w,
    bool normalizeWeights = false 
    )
    +
    + +

    Definition at line 65 of file ParticleFilter.h.

    + +
    +
    + +

    ◆ databaseRecovery()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    bool RTABMAP_CORE_EXPORT rtabmap::databaseRecovery (const std::string & corruptedDatabase,
    bool keepCorruptedDatabase = true,
    std::string * errorMsg = 0,
    ProgressState * progressState = 0 
    )
    +
    +

    Return true on success. The database is renamed to "*.backup.db" before recovering.

    Parameters
    + + + + + +
    corruptedDatabasedatabase to recover
    keepCorruptedDatabaseif false and on recovery success, the backup database is removed
    errorMsgerror message if the function returns false
    progressStateA ProgressState object used to get status of the recovery process
    +
    +
    + +
    +
    + +

    ◆ icvGetRectanglesFisheye()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void rtabmap::icvGetRectanglesFisheye (const CvMat * cameraMatrix,
    const CvMat * distCoeffs,
    const CvMat * R,
    const CvMat * newCameraMatrix,
    CvSize imgSize,
    cv::Rect_< float > & inner,
    cv::Rect_< float > & outer 
    )
    +
    + +

    Definition at line 935 of file stereoRectifyFisheye.h.

    + +
    +
    + +

    ◆ cvStereoRectifyFisheye()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void rtabmap::cvStereoRectifyFisheye (const CvMat * _cameraMatrix1,
    const CvMat * _cameraMatrix2,
    const CvMat * _distCoeffs1,
    const CvMat * _distCoeffs2,
    CvSize imageSize,
    const CvMat * matR,
    const CvMat * matT,
    CvMat * _R1,
    CvMat * _R2,
    CvMat * _P1,
    CvMat * _P2,
    CvMat * matQ,
    int flags,
    double alpha,
    CvSize newImgSize 
    )
    +
    + +

    Definition at line 980 of file stereoRectifyFisheye.h.

    + +
    +
    + +

    ◆ stereoRectifyFisheye()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void rtabmap::stereoRectifyFisheye (cv::InputArray _cameraMatrix1,
    cv::InputArray _distCoeffs1,
    cv::InputArray _cameraMatrix2,
    cv::InputArray _distCoeffs2,
    cv::Size imageSize,
    cv::InputArray _Rmat,
    cv::InputArray _Tmat,
    cv::OutputArray _Rmat1,
    cv::OutputArray _Rmat2,
    cv::OutputArray _Pmat1,
    cv::OutputArray _Pmat2,
    cv::OutputArray _Qmat,
    int flags,
    double alpha,
    cv::Size newImageSize 
    )
    +
    + +

    Definition at line 1190 of file stereoRectifyFisheye.h.

    + +
    +
    + +

    ◆ operator<<() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    RTABMAP_CORE_EXPORT std::ostream & rtabmap::operator<< (std::ostream & os,
    const StereoCameraModel & model 
    )
    +
    + +

    Outputs a textual representation of the StereoCameraModel to the given output stream.

    +

    This operator prints the details of the stereo camera model including:

      +
    • The left camera parameters.
    • +
    • The right camera parameters.
    • +
    • The stereo extrinsic matrices: Rotation (R), Translation (T), Essential (E), and Fundamental (F).
    • +
    • The baseline distance between the two cameras.
    • +
    +
    Parameters
    + + + +
    osThe output stream to write to.
    modelThe StereoCameraModel instance to output.
    +
    +
    +
    Returns
    A reference to the output stream after writing the model information.
    + +
    +
    +

    Variable Documentation

    + +

    ◆ CameraInfo

    + +
    +
    + + + + +
    RTABMAP_DEPRECATED typedef SensorCaptureInfo rtabmap::CameraInfo
    +
    + +

    Backward compatibility typedef.

    +
    Deprecated:
    Use SensorCaptureInfo instead
    +

    CameraInfo is deprecated. Use SensorCaptureInfo instead.

    + +

    Definition at line 133 of file SensorCaptureInfo.h.

    + +
    +
    + +

    ◆ CameraThread

    + +
    +
    + + + + +
    RTABMAP_DEPRECATED typedef SensorCaptureThread rtabmap::CameraThread
    +
    + +

    Backward compatibility typedef.

    +
    Deprecated:
    Use SensorCaptureThread instead
    +

    CameraThread is deprecated. Use SensorCaptureThread instead.

    + +

    Definition at line 565 of file SensorCaptureThread.h.

    + +
    +
    + +

    ◆ CameraEvent

    + +
    +
    + + + + +
    RTABMAP_DEPRECATED typedef SensorEvent rtabmap::CameraEvent
    +
    + +

    Backward compatibility typedef.

    +
    Deprecated:
    Use SensorEvent instead
    +

    CameraEvent is deprecated. Use SensorEvent instead.

    + +

    Definition at line 207 of file SensorEvent.h.

    + +
    +
    +
    + + + + diff --git a/preview/pr-1492/api/latest/namespacertabmap_1_1util2d.html b/preview/pr-1492/api/latest/namespacertabmap_1_1util2d.html new file mode 100644 index 00000000..a2a1f3b2 --- /dev/null +++ b/preview/pr-1492/api/latest/namespacertabmap_1_1util2d.html @@ -0,0 +1,1724 @@ + + + + + + + + +RTAB-Map: rtabmap::util2d Namespace Reference + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    rtabmap::util2d Namespace Reference
    +
    +
    + +

    This namespace contains 2D image processing utilities. +More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    float RTABMAP_CORE_EXPORT ssd (const cv::Mat &windowLeft, const cv::Mat &windowRight)
     Computes the Sum of Squared Differences (SSD) between two image patches.
     
    float RTABMAP_CORE_EXPORT sad (const cv::Mat &windowLeft, const cv::Mat &windowRight)
     Computes the Sum of Absolute Differences (SAD) between two image patches.
     
    std::vector< cv::Point2f > RTABMAP_CORE_EXPORT calcStereoCorrespondences (const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, std::vector< unsigned char > &status, cv::Size winSize=cv::Size(6, 3), int maxLevel=3, int iterations=5, float minDisparity=0.0f, float maxDisparity=64.0f, bool ssdApproach=true)
     Computes stereo correspondences between left and right images using a pyramidal window-based matching approach.
     
    void RTABMAP_CORE_EXPORT calcOpticalFlowPyrLKStereo (cv::InputArray _prevImg, cv::InputArray _nextImg, cv::InputArray _prevPts, cv::InputOutputArray _nextPts, cv::OutputArray _status, cv::OutputArray _err, cv::Size winSize=cv::Size(15, 3), int maxLevel=3, cv::TermCriteria criteria=cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 30, 0.01), int flags=0, double minEigThreshold=1e-4)
     Computes sparse optical flow using a pyramidal Lucas-Kanade method constrained to the x-axis.
     
    cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoImages (const cv::Mat &leftImage, const cv::Mat &rightImage, const ParametersMap &parameters=ParametersMap())
     Computes the disparity map from a pair of stereo images.
     
    cv::Mat RTABMAP_CORE_EXPORT depthFromDisparity (const cv::Mat &disparity, float fx, float baseline, int type=CV_32FC1)
     Converts a disparity map to a depth map using stereo camera parameters.
     
    cv::Mat RTABMAP_CORE_EXPORT depthFromStereoImages (const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, float fx, float baseline, int flowWinSize=9, int flowMaxLevel=4, int flowIterations=20, double flowEps=0.02)
     Computes a depth map from stereo image pairs using optical flow tracking.
     
    cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoCorrespondences (const cv::Size &disparitySize, const std::vector< cv::Point2f > &leftCorners, const std::vector< cv::Point2f > &rightCorners, const std::vector< unsigned char > &mask)
     Computes a disparity map from stereo correspondences between two images.
     
    cv::Mat RTABMAP_CORE_EXPORT depthFromStereoCorrespondences (const cv::Mat &leftImage, const std::vector< cv::Point2f > &leftCorners, const std::vector< cv::Point2f > &rightCorners, const std::vector< unsigned char > &mask, float fx, float baseline)
     Computes a sparse depth map from corresponding stereo feature points.
     
    cv::Mat RTABMAP_CORE_EXPORT cvtDepthFromFloat (const cv::Mat &depth32F)
     Converts a 32-bit float depth image (in meters) to a 16-bit unsigned depth image (in millimeters).
     
    cv::Mat RTABMAP_CORE_EXPORT cvtDepthToFloat (const cv::Mat &depth16U)
     Converts a 16-bit unsigned depth image (in millimeters) to a 32-bit float depth image (in meters).
     
    float RTABMAP_CORE_EXPORT getDepth (const cv::Mat &depthImage, float x, float y, bool smoothing, float depthErrorRatio=0.02f, bool estWithNeighborsIfNull=false)
     Retrieves a depth value from a depth image at a subpixel coordinate.
     
    cv::Rect RTABMAP_CORE_EXPORT computeRoi (const cv::Mat &image, const std::string &roiRatios)
     Computes a region of interest (ROI) in the image using string-defined ratios.
     
    cv::Rect RTABMAP_CORE_EXPORT computeRoi (const cv::Size &imageSize, const std::string &roiRatios)
     Computes a region of interest (ROI) from an image size and a string of ratios.
     
    cv::Rect RTABMAP_CORE_EXPORT computeRoi (const cv::Mat &image, const std::vector< float > &roiRatios)
     Computes a region of interest (ROI) in the image using float vector-defined ratios.
     
    cv::Rect RTABMAP_CORE_EXPORT computeRoi (const cv::Size &imageSize, const std::vector< float > &roiRatios)
     Computes a region of interest (ROI) using float ratios and the image size.
     
    cv::Mat RTABMAP_CORE_EXPORT decimate (const cv::Mat &image, int d)
     Downsamples an image by a given decimation factor.
     
    cv::Mat RTABMAP_CORE_EXPORT interpolate (const cv::Mat &image, int factor, float depthErrorRatio=0.02f)
     Upsamples a depth image using bilinear interpolation with depth consistency check.
     
    cv::Mat RTABMAP_CORE_EXPORT registerDepth (const cv::Mat &depth, const cv::Mat &depthK, const cv::Size &colorSize, const cv::Mat &colorK, const rtabmap::Transform &transform)
     Registers a depth image to a different camera frame (typically RGB).
     
    +cv::Mat RTABMAP_CORE_EXPORT registerDepth (const cv::Mat &depth, const cv::Mat &confidence, const cv::Mat &depthK, const cv::Size &colorSize, const cv::Mat &colorK, const rtabmap::Transform &transform, cv::Mat &registeredConfidence)
     
    cv::Mat RTABMAP_CORE_EXPORT fillDepthHoles (const cv::Mat &depth, int maximumHoleSize=1, float errorRatio=0.02f)
     Fills holes in the depth image using linear interpolation.
     
    void RTABMAP_CORE_EXPORT fillRegisteredDepthHoles (cv::Mat &depthRegistered, bool vertical, bool horizontal, bool fillDoubleHoles=false)
     Fill holes in a registered depth image using linear interpolation.
     
    cv::Mat RTABMAP_CORE_EXPORT fastBilateralFiltering (const cv::Mat &depth, float sigmaS=15.0f, float sigmaR=0.05f, bool earlyDivision=false)
     Applies a 2D fast bilateral filter to a depth image.
     
    void RTABMAP_CORE_EXPORT depthBleedingFiltering (cv::Mat &depth, float maxDepthError)
     Filters out depth bleeding artifacts in a depth image.
     
    cv::Mat RTABMAP_CORE_EXPORT brightnessAndContrastAuto (const cv::Mat &src, const cv::Mat &mask, float clipLowHistPercent=0, float clipHighHistPercent=0, float *alphaOut=0, float *betaOut=0)
     Automatic brightness and contrast optimization with optional histogram clipping.
     
    cv::Mat RTABMAP_CORE_EXPORT exposureFusion (const std::vector< cv::Mat > &images)
     Performs exposure fusion on a set of input images.
     
    void RTABMAP_CORE_EXPORT HSVtoRGB (float *r, float *g, float *b, float h, float s, float v)
     Converts a color from HSV (Hue, Saturation, Value) to RGB.
     
    void RTABMAP_CORE_EXPORT NMS (const std::vector< cv::KeyPoint > &ptsIn, const cv::Mat &descriptorsIn, std::vector< cv::KeyPoint > &ptsOut, cv::Mat &descriptorsOut, int dist_thresh, int img_width, int img_height)
     Applies Non-Maximum Suppression (NMS) to a set of keypoints.
     
    std::vector< int > RTABMAP_CORE_EXPORT SSC (const std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, float tolerance, int cols, int rows, const std::vector< int > &indx={})
     Applies the SSC (Suppression via Square Covering) algorithm to spatially select keypoints.
     
    bool RTABMAP_CORE_EXPORT rotateImagesUpsideUpIfNecessary (CameraModel &model, cv::Mat &rgb, cv::Mat &depth)
     Rotates the input RGB and depth images to make them appear upright based on the camera's roll angle.
     
    +

    Detailed Description

    +

    This namespace contains 2D image processing utilities.

    +

    Function Documentation

    + +

    ◆ ssd()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    float RTABMAP_CORE_EXPORT rtabmap::util2d::ssd (const cv::Mat & windowLeft,
    const cv::Mat & windowRight 
    )
    +
    + +

    Computes the Sum of Squared Differences (SSD) between two image patches.

    +

    This function calculates the pixel-wise squared differences between corresponding elements in two input windows and accumulates the result into a single score. It supports grayscale 8-bit, 32-bit float, and 16-bit 2-channel short images (e.g., optical flow or stereo blocks).

    +
    Parameters
    + + + +
    windowLeftLeft input image patch.
    windowRightRight input image patch (must be the same size and type as windowLeft).
    +
    +
    +
    Returns
    The SSD score (a lower score indicates higher similarity).
    +
    Exceptions
    + + +
    Assertionfailure if the input types or dimensions don't match.
    +
    +
    +

    Supported types:

      +
    • CV_8UC1 (grayscale image)
    • +
    • CV_32FC1 (floating-point grayscale)
    • +
    • CV_16SC2 (2-channel signed short vectors; average of both channels used)
    • +
    + +
    +
    + +

    ◆ sad()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    float RTABMAP_CORE_EXPORT rtabmap::util2d::sad (const cv::Mat & windowLeft,
    const cv::Mat & windowRight 
    )
    +
    + +

    Computes the Sum of Absolute Differences (SAD) between two image patches.

    +

    This function calculates the absolute pixel intensity difference between two windows and accumulates the result. It supports grayscale 8-bit, 32-bit float, and 16-bit 2-channel short images.

    +
    Parameters
    + + + +
    windowLeftLeft input image patch.
    windowRightRight input image patch (must match windowLeft in size and type).
    +
    +
    +
    Returns
    The SAD score (a lower score indicates greater similarity).
    +
    Exceptions
    + + +
    Assertionfailure if the input types or dimensions are incompatible.
    +
    +
    +

    Supported types:

      +
    • CV_8UC1 (grayscale image)
    • +
    • CV_32FC1 (floating-point grayscale)
    • +
    • CV_16SC2 (2-channel signed short vectors; average of both channels used)
    • +
    + +
    +
    + +

    ◆ calcStereoCorrespondences()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    std::vector< cv::Point2f > RTABMAP_CORE_EXPORT rtabmap::util2d::calcStereoCorrespondences (const cv::Mat & leftImage,
    const cv::Mat & rightImage,
    const std::vector< cv::Point2f > & leftCorners,
    std::vector< unsigned char > & status,
    cv::Size winSize = cv::Size(6, 3),
    int maxLevel = 3,
    int iterations = 5,
    float minDisparity = 0.0f,
    float maxDisparity = 64.0f,
    bool ssdApproach = true 
    )
    +
    + +

    Computes stereo correspondences between left and right images using a pyramidal window-based matching approach.

    +

    This function estimates the right image positions of a set of corners detected in the left image using block matching. It supports both Sum of Absolute Differences (SAD) and Sum of Squared Differences (SSD) as the matching criteria, and uses a coarse-to-fine strategy over an image pyramid for robustness and subpixel accuracy.

    +
    Parameters
    + + + + + + + + + + + +
    leftImageThe left image (grayscale 8 bits or CV_8UC1).
    rightImageThe right image (same type and size as leftImage).
    leftCornersThe list of 2D points in the left image for which correspondences are to be found.
    [out]statusOutput status vector indicating the success of correspondence for each point. (1: valid correspondence found, 0: no valid match)
    winSizeThe size of the search window (should be odd). Will be made odd internally if not. Minimum size is 3.
    maxLevelThe maximum level of the image pyramid to use for coarse-to-fine search.
    iterationsNumber of iterations for subpixel refinement (gradient descent-like search).
    minDisparityFMinimum allowed disparity (float). Defines search range.
    maxDisparityFMaximum allowed disparity (float). Defines search range.
    ssdApproachIf true, uses SSD (Sum of Squared Differences) as matching cost. If false, uses SAD (Sum of Absolute Differences).
    +
    +
    +
    Returns
    A vector of 2D points corresponding to leftCorners but in the right image. The size of the output matches the input leftCorners. Invalid or rejected points are flagged in status.
    +
    Note
    - Both input images must be rectified (i.e., correspondences lie along epipolar lines).
      +
    • This function modifies the search window to ensure it is odd-sized (required for accurate matching).
    • +
    • Subpixel accuracy is achieved using iterative matching and local refinement.
    • +
    • The disparity range is adaptive and refined at each pyramid level.
    • +
    • For accurate results, ensure good quality corner detection and well-rectified input images.
    • +
    +
    +
    See also
    cv::buildOpticalFlowPyramid, cv::getRectSubPix
    + +
    +
    + +

    ◆ calcOpticalFlowPyrLKStereo()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void RTABMAP_CORE_EXPORT rtabmap::util2d::calcOpticalFlowPyrLKStereo (cv::InputArray _prevImg,
    cv::InputArray _nextImg,
    cv::InputArray _prevPts,
    cv::InputOutputArray _nextPts,
    cv::OutputArray _status,
    cv::OutputArray _err,
    cv::Size winSize = cv::Size(15, 3),
    int maxLevel = 3,
    cv::TermCriteria criteria = cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 30, 0.01),
    int flags = 0,
    double minEigThreshold = 1e-4 
    )
    +
    + +

    Computes sparse optical flow using a pyramidal Lucas-Kanade method constrained to the x-axis.

    +

    This function is a customized version of OpenCV's cv::calcOpticalFlowPyrLK, modified specifically for stereo matching scenarios. It assumes that the prevImg is the left stereo image and nextImg is the right stereo image. The optical flow is computed only along the x-axis (i.e., horizontal direction), which is typically valid in rectified stereo image pairs.

    +
    Note
    The key modification to the original Lucas-Kanade implementation is the following: Instead of computing the flow in both x and y directions, the y-displacement is forced to zero:
    // Original:
    +
    cv::Point2f delta((float)((A12*b2 - A22*b1) * D), (float)((A12*b1 - A11*b2) * D));
    +
    +
    // Modified:
    +
    cv::Point2f delta((float)((A12*b2 - A22*b1) * D), 0);
    +
    This ensures that flow estimation is constrained along the epipolar lines (x-direction only).
    +
    Parameters
    + + + + + + + + + + + + +
    _prevImgInput image from the previous frame (or left stereo image). Supports pyramid or raw image.
    _nextImgInput image from the next frame (or right stereo image). Supports pyramid or raw image.
    _prevPtsVector of 2D points for which the flow needs to be found (in prevImg).
    _nextPtsOutput vector of 2D points containing the calculated new positions (in nextImg). If OPTFLOW_USE_INITIAL_FLOW is passed, it should contain initial guesses.
    _statusOutput status vector. Each element is set to 1 if flow for the corresponding features has been found, 0 otherwise.
    _errOptional output vector. Contains error or min eigenvalue values (depending on flags).
    winSizeSize of the search window at each pyramid level.
    maxLevel0-based maximal pyramid level number. If set to 0, pyramids are not used (single level).
    criteriaTermination criteria for iterative search algorithm (maxCount and/or epsilon).
    flagsOperation flags:
      +
    • OPTFLOW_USE_INITIAL_FLOW: Use initial nextPts values.
    • +
    • OPTFLOW_LK_GET_MIN_EIGENVALS: Output minimum eigenvalues instead of error.
    • +
    +
    minEigThresholdMinimum eigenvalue threshold for rejecting unstable flow vectors.
    +
    +
    +
    See also
    cv::calcOpticalFlowPyrLK
    +
    +https://github.com/opencv/opencv/blob/4.x/modules/video/src/lkpyramid.cpp
    + +
    +
    + +

    ◆ disparityFromStereoImages()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::disparityFromStereoImages (const cv::Mat & leftImage,
    const cv::Mat & rightImage,
    const ParametersMap & parameters = ParametersMap() 
    )
    +
    + +

    Computes the disparity map from a pair of stereo images.

    +

    This function calculates a dense disparity map from the provided left and right stereo images. It assumes that the stereo pair is rectified and of the same size. The left image can be either grayscale (CV_8UC1) or color (CV_8UC3), while the right image must be grayscale (CV_8UC1).

    +

    If the left image is in color, it is first converted to grayscale before disparity computation. The actual disparity computation is delegated to a StereoDense object created using the provided parameters.

    +
    Parameters
    + + + + +
    leftImageThe left image of the stereo pair. Can be grayscale or BGR color.
    rightImageThe right image of the stereo pair. Must be grayscale.
    parametersA map of parameters used to configure the stereo matching algorithm.
    +
    +
    +
    Returns
    A cv::Mat representing the computed disparity map. Some algorithms, like StereoBM or StereoSGBM compute 16-bit fixed-point disparity map (CV_16SC1) (where each disparity value has 4 fractional bits), whereas other algorithms output 32-bit floating-point (CV_32FC1) disparity map.
    +
    Exceptions
    + + +
    Assertionfailure if:
      +
    • Either image is empty.
    • +
    • Image sizes do not match.
    • +
    • Image types are incompatible.
    • +
    +
    +
    +
    +
    Note
    The returned disparity map contains disparity values for each pixel in the left image. Pixels with no match may be set to 0 or a negative value depending on the stereo algorithm.
    +
    See also
    rtabmap::StereoDense
    + +
    +
    + +

    ◆ depthFromDisparity()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::depthFromDisparity (const cv::Mat & disparity,
    float fx,
    float baseline,
    int type = CV_32FC1 
    )
    +
    + +

    Converts a disparity map to a depth map using stereo camera parameters.

    +

    This function takes a disparity map and computes a corresponding depth map using the formula:

    +\[ \text{depth} = \frac{\text{baseline} \times \text{focal length}}{\text{disparity}} \] +

    +
      +
    • Disparity values of 0 or less are ignored (depth is left as 0).
    • +
    • For CV_16UC1 depth type, depth is scaled to millimeters (i.e., multiplied by 1000).
    • +
    • Values that exceed the 16-bit unsigned max value (65535) are counted and ignored.
    • +
    +
    Parameters
    + + + + + +
    disparityThe input disparity map (CV_32FC1 or CV_16SC1).
    fxThe focal length in pixels (typically from camera intrinsic parameters).
    baselineThe distance between the stereo cameras in meters.
    typeThe desired output depth image type: CV_32FC1 (meters) or CV_16UC1 (millimeters).
    +
    +
    +
    Returns
    A depth image of the same resolution as the input disparity map.
    +
    Warning
    Logs a warning if any computed depth values exceed the maximum allowed by the CV_16UC1 format (65535 mm).
    +
    Exceptions
    + + +
    Assertionfailure if the disparity map is empty, has unsupported type, or output type is invalid.
    +
    +
    + +
    +
    + +

    ◆ depthFromStereoImages()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::depthFromStereoImages (const cv::Mat & leftImage,
    const cv::Mat & rightImage,
    const std::vector< cv::Point2f > & leftCorners,
    float fx,
    float baseline,
    int flowWinSize = 9,
    int flowMaxLevel = 4,
    int flowIterations = 20,
    double flowEps = 0.02 
    )
    +
    + +

    Computes a depth map from stereo image pairs using optical flow tracking.

    +

    This function estimates the depth of features tracked between the left and right rectified stereo images by computing sparse optical flow (via Lucas-Kanade) between provided feature points in the left image. It uses stereo triangulation based on the tracked correspondences and known camera intrinsics.

    +
    Parameters
    + + + + + + + + + + +
    leftImageGrayscale rectified left image (CV_8UC1).
    rightImageGrayscale rectified right image (CV_8UC1), must be same size as leftImage.
    leftCornersFeature points (e.g., corners) detected in the left image.
    fxFocal length of the camera in pixels (must be > 0).
    baselineDistance between the left and right camera centers in meters (must be > 0).
    flowWinSizeWindow size used for optical flow (e.g., 15 for 15x15).
    flowMaxLevelMaximum pyramid level for optical flow.
    flowIterationsMaximum number of iterations for the iterative search algorithm in optical flow.
    flowEpsDesired accuracy for optical flow termination criteria.
    +
    +
    +
    Returns
    A depth map (CV_32FC1) with the same size as the input images. Pixels corresponding to successfully tracked features have valid depth values, while others are zero.
    +
    See also
    cv::calcOpticalFlowPyrLK, rtabmap::util2d::depthFromStereoCorrespondences
    + +
    +
    + +

    ◆ disparityFromStereoCorrespondences()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::disparityFromStereoCorrespondences (const cv::Size & disparitySize,
    const std::vector< cv::Point2f > & leftCorners,
    const std::vector< cv::Point2f > & rightCorners,
    const std::vector< unsigned char > & mask 
    )
    +
    + +

    Computes a disparity map from stereo correspondences between two images.

    +

    This function calculates the disparity map based on the given stereo correspondences (the left and right corners of features) and stores the resulting disparity values in a matrix. The disparity for each point is computed as the horizontal difference between the corresponding points in the left and right images. The function also accepts a mask to specify which points to include in the disparity computation.

    +
    Parameters
    + + + + + +
    [in]disparitySizeThe size of the output disparity map.
    [in]leftCornersThe list of points in the left image where features are detected.
    [in]rightCornersThe list of points in the right image corresponding to the points in leftCorners.
    [in]maskA vector of flags indicating which correspondences to use for the disparity computation. An empty vector means all correspondences are included.
    +
    +
    +
    Returns
    A cv::Mat of type CV_32FC1 representing the computed disparity map. Each pixel value corresponds to the disparity (horizontal difference between left and right image points) at that location.
    +
    Note
    The disparity is computed as the horizontal difference between corresponding points in the left and right images, specifically the difference in the x-coordinates of the points.
    +
    +The disparity map is returned in floating point format, where the value represents the disparity in pixels.
    +
    Warning
    The function checks that all points are within the bounds of the disparity map.
    + +
    +
    + +

    ◆ depthFromStereoCorrespondences()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::depthFromStereoCorrespondences (const cv::Mat & leftImage,
    const std::vector< cv::Point2f > & leftCorners,
    const std::vector< cv::Point2f > & rightCorners,
    const std::vector< unsigned char > & mask,
    float fx,
    float baseline 
    )
    +
    + +

    Computes a sparse depth map from corresponding stereo feature points.

    +

    This function uses known corresponding 2D feature points from rectified stereo images to estimate depth via triangulation, using the disparity between matched points. The computed depth values are placed into a depth map at the locations of the left image points.

    +
    Parameters
    + + + + + + + +
    leftImageThe left rectified grayscale image (used for image size reference).
    leftCornersFeature points detected in the left image.
    rightCornersCorresponding feature points in the right image (same size as leftCorners).
    maskOptional binary mask indicating which correspondences are valid (1 = valid). If empty, all correspondences are considered valid.
    fxFocal length of the camera in pixels (must be > 0).
    baselineDistance between the stereo cameras in meters (must be > 0).
    +
    +
    +
    Returns
    A sparse depth map (CV_32FC1) of the same size as the input image. Pixels corresponding to valid matches will contain depth values (in meters), while all others remain zero.
    +
    Note
    It assumes stereo images are rectified and only x-axis disparity is present.
    +
    See also
    rtabmap::util2d::depthFromStereoImages
    + +
    +
    + +

    ◆ cvtDepthFromFloat()

    + +
    +
    + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::cvtDepthFromFloat (const cv::Mat & depth32F)
    +
    + +

    Converts a 32-bit float depth image (in meters) to a 16-bit unsigned depth image (in millimeters).

    +

    This function converts each valid depth value from meters to millimeters (by multiplying by 1000.0) and stores it as an unsigned 16-bit integer. Depth values outside the valid range (greater than 65535 mm) are clipped to zero and counted. A warning is printed if such values are found.

    +
    Parameters
    + + +
    depth32FInput depth image of type CV_32FC1, where depth is in meters. May be empty.
    +
    +
    +
    Returns
    A 16-bit unsigned depth image (CV_16UC1) in millimeters. Returns an empty matrix if input is empty.
    +
    Warning
    If depth values exceed 65535 mm, they are ignored and a warning is issued.
    +
    Note
    It's assumed that the input image is in meters (commonly used format for 32-bit depth maps). If it’s already in millimeters, do not use this function.
    +
    See also
    rtabmap::util2d::cvtDepthToFloat()
    + +
    +
    + +

    ◆ cvtDepthToFloat()

    + +
    +
    + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::cvtDepthToFloat (const cv::Mat & depth16U)
    +
    + +

    Converts a 16-bit unsigned depth image (in millimeters) to a 32-bit float depth image (in meters).

    +

    This function converts each depth value from millimeters to meters by dividing by 1000.0. Useful when working with floating point depth operations or to standardize depth formats for computation or storage.

    +
    Parameters
    + + +
    depth16UInput depth image of type CV_16UC1, where depth is in millimeters. May be empty.
    +
    +
    +
    Returns
    A 32-bit float depth image (CV_32FC1) with depth values in meters. Returns an empty matrix if input is empty.
    +
    Note
    Use this function when you want to convert from 16-bit mm format to floating point meter format.
    +
    See also
    rtabmap::util2d::cvtDepthFromFloat()
    + +
    +
    + +

    ◆ getDepth()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    float RTABMAP_CORE_EXPORT rtabmap::util2d::getDepth (const cv::Mat & depthImage,
    float x,
    float y,
    bool smoothing,
    float depthErrorRatio = 0.02f,
    bool estWithNeighborsIfNull = false 
    )
    +
    + +

    Retrieves a depth value from a depth image at a subpixel coordinate.

    +

    This function samples the depth value from a depth image (either in 16-bit unsigned integers representing millimeters or 32-bit floats representing meters) at a floating-point (x, y) coordinate. The value can be optionally smoothed using a weighted neighborhood, and fallback estimation from neighbors is possible if the depth at the target pixel is invalid or zero.

    +
    Parameters
    + + + + + + + +
    depthImageInput depth image. Must be of type CV_16UC1 (depth in mm) or CV_32FC1 (depth in meters).
    xThe subpixel X-coordinate in the image.
    yThe subpixel Y-coordinate in the image.
    smoothingIf true, apply a weighted 3x3 smoothing around the pixel.
    depthErrorRatioMaximum acceptable depth difference ratio used during smoothing and fallback estimation.
    estWithNeighborsIfNullIf true, and the target pixel has an invalid depth, estimate it from valid neighboring pixels.
    +
    +
    +
    Returns
    The depth value at the given (x, y) location (in meters), or 0 if it cannot be determined.
    +
    Note
      +
    • The function applies bounds checking on the input coordinates.
    • +
    • If smoothing is enabled, a weighted average using a 3x3 kernel is computed.
    • +
    • If estWithNeighborsIfNull is enabled and the pixel has no valid depth, the value is estimated from 4-connected neighbors using consistency constraints based on depthErrorRatio.
    • +
    • Pixels with zero or invalid (NaN/Inf) depth are ignored in estimation and smoothing.
    • +
    +
    + +
    +
    + +

    ◆ decimate()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::decimate (const cv::Mat & image,
    int d 
    )
    +
    + +

    Downsamples an image by a given decimation factor.

    +

    If the image is a depth image (CV_32FC1 or CV_16UC1), it ensures that decimation is done precisely without interpolation. For other types, OpenCV's resize with INTER_AREA is used.

    +
    Parameters
    + + + +
    imageThe input image to decimate.
    decimationThe downsampling factor (must be >= 1).
    +
    +
    +
    Returns
    The decimated image. If the decimation factor is 1 or the image is empty, the original image is returned.
    +
    Note
    For depth images, the image size must be divisible by the decimation factor.
    +
    Exceptions
    + + +
    Assertionfailure if decimation is < 1 or size mismatch for depth images.
    +
    +
    + +
    +
    + +

    ◆ interpolate()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::interpolate (const cv::Mat & image,
    int factor,
    float depthErrorRatio = 0.02f 
    )
    +
    + +

    Upsamples a depth image using bilinear interpolation with depth consistency check.

    +

    Performs a depth-aware interpolation for CV_32FC1 or CV_16UC1 types. It checks whether the surrounding four corner values are consistent within a depthErrorRatio, and if so, performs bilinear interpolation. For other image types, OpenCV's resize is used.

    +
    Parameters
    + + + + +
    imageThe input image to interpolate.
    factorThe interpolation factor (must be >= 1).
    depthErrorRatioAcceptable ratio of depth difference to allow interpolation.
    +
    +
    +
    Returns
    The interpolated image. If the factor is 1 or the image is empty, the original image is returned.
    +
    Note
    This function is intended for depth images. If corners have invalid or inconsistent depth values, interpolation is skipped at that patch.
    +
    Exceptions
    + + +
    Assertionfailure if factor < 1 or invalid parameters.
    +
    +
    + +
    +
    + +

    ◆ registerDepth()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::registerDepth (const cv::Mat & depth,
    const cv::Mat & depthK,
    const cv::Size & colorSize,
    const cv::Mat & colorK,
    const rtabmap::Transform & transform 
    )
    +
    + +

    Registers a depth image to a different camera frame (typically RGB).

    +

    This function aligns the given depth image to the coordinate frame of an RGB camera using the intrinsic parameters of both cameras and the extrinsic transformation between them. The output is a depth image aligned to the RGB image dimensions and field of view.

    +

    The function assumes the depth is either in meters (CV_32FC1) or in millimeters (CV_16UC1), and it returns a registered depth image in the same format.

    +
    Parameters
    + + + + + + +
    depthThe input depth image (type CV_16UC1 in mm or CV_32FC1 in meters).
    depthKIntrinsic matrix of the depth camera (3x3, type CV_64FC1).
    colorSizeSize of the target RGB image (the output will match this size).
    colorKIntrinsic matrix of the RGB camera (3x3, type CV_64FC1).
    transformTransform from the RGB camera frame to depth camera frame.
    +
    +
    +
    Returns
    A depth image registered to the RGB image space, with the same type as the input depth.
    +
    Exceptions
    + + +
    Assertionfailure if input validation fails (e.g., empty image, incorrect types or sizes).
    +
    +
    +
    Note
    If multiple depth points project to the same RGB pixel, the closest one is kept. This helps with occlusion handling when registering sparse/depth data.
    + +
    +
    + +

    ◆ fillDepthHoles()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::fillDepthHoles (const cv::Mat & depth,
    int maximumHoleSize = 1,
    float errorRatio = 0.02f 
    )
    +
    + +

    Fills holes in the depth image using linear interpolation.

    +

    This function iterates through the depth image and fills in holes (missing depth values) by interpolating from surrounding valid depth values. It considers both horizontal and vertical neighbors to interpolate missing data. The maximum hole size and the error ratio are used to control the filling process. The function works with both 16-bit (mm) and 32-bit (meters) depth images.

    +
    Parameters
    + + + + +
    depthThe input depth image (CV_16UC1 or CV_32FC1).
    maximumHoleSizeThe maximum size of a hole to be filled, in pixels.
    errorRatioThe ratio used to calculate the allowed depth error for interpolation.
    +
    +
    +
    Returns
    A new depth image with holes filled.
    +
    Note
    The input depth image must be of type CV_16UC1 (depth in millimeters) or CV_32FC1 (depth in meters). The filled output is of the same type as the input.
    + +
    +
    + +

    ◆ fillRegisteredDepthHoles()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void RTABMAP_CORE_EXPORT rtabmap::util2d::fillRegisteredDepthHoles (cv::Mat & depthRegistered,
    bool vertical,
    bool horizontal,
    bool fillDoubleHoles = false 
    )
    +
    + +

    Fill holes in a registered depth image using linear interpolation.

    +

    This function attempts to fill invalid (zero-valued) pixels in a registered depth image by looking at neighboring pixels in vertical and/or horizontal directions. Optionally, it can also fill "double holes" (gaps of two consecutive pixels) if fillDoubleHoles is enabled.

    +

    The interpolation is only performed if the depth difference between the neighbors is within 1% of their average, to avoid introducing invalid depth values.

    +
    Parameters
    + + + + + +
    [in,out]registeredDepthThe input/output registered depth image (CV_16UC1). Modified in-place to fill in missing depth values.
    verticalIf true, the function tries to fill holes in vertical direction.
    horizontalIf true, the function tries to fill holes in horizontal direction.
    fillDoubleHolesIf true, the function also attempts to fill two-pixel wide holes by linearly interpolating between values spaced by two pixels.
    +
    +
    +
    Note
    This function assumes that the depth image contains unsigned 16-bit values, where a value of 0 represents an invalid or missing depth value. Pixels on the contour are not interpolated.
    +
    Warning
    The input matrix must be of type CV_16UC1, or the function will trigger an assertion failure.
    +
    See also
    rtabmap::util2d::registerDepth(), rtabmap::util2d::fillDepthHoles()
    + +
    +
    + +

    ◆ fastBilateralFiltering()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::fastBilateralFiltering (const cv::Mat & depth,
    float sigmaS = 15.0f,
    float sigmaR = 0.05f,
    bool earlyDivision = false 
    )
    +
    + +

    Applies a 2D fast bilateral filter to a depth image.

    +

    This function is a 2D adaptation of the pcl::FastBilateralFiltering algorithm. It processes a depth image (either CV_32FC1 or CV_16UC1) using a bilateral filter with spatial and range standard deviations sigmaS and sigmaR. The method includes optimizations such as early division and efficient 3D grid accumulation with smoothing.

    +
    Parameters
    + + + + + +
    depthInput depth image. Must be of type CV_32FC1 (meters) or CV_16UC1 (millimeters).
    sigmaSSpatial standard deviation. Controls the amount of smoothing in the image plane.
    sigmaRRange standard deviation. Controls the amount of smoothing in the depth (z) dimension.
    earlyDivisionIf true, applies early normalization to improve performance.
    +
    +
    +
    Returns
    Filtered depth image as a CV_32FC1 Mat. If the input image is empty or contains no valid depth, an empty Mat is returned.
    +
    Note
    This implementation relies on an auxiliary 3D data structure and uses trilinear interpolation for reconstructing smoothed values. Pixels with non-finite or invalid depths are ignored.
    +
    Warning
    The result is always a CV_32FC1 image, even if the input is CV_16UC1. If input depth's valid pixels have all exact same value, the result will be retruned with all zeros (issue from the original implementation).
    + +
    +
    + +

    ◆ depthBleedingFiltering()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void RTABMAP_CORE_EXPORT rtabmap::util2d::depthBleedingFiltering (cv::Mat & depth,
    float maxDepthError 
    )
    +
    + +

    Filters out depth bleeding artifacts in a depth image.

    +

    This function sets depth values to zero (invalid) if their value significantly differs from both neighboring pixels in either horizontal or vertical direction. It works on depth images of type CV_32FC1 (32-bit float, in meters) or CV_16UC1 (16-bit unsigned int, in millimeters).

    +

    The function also ignores the image border by setting the first and last rows and columns to zero.

    +
    Parameters
    + + + +
    depthInput/output depth image. Must be of type CV_32FC1 or CV_16UC1. The filtering is done in-place.
    maxDepthErrorMaximum allowed depth difference between a pixel and its neighbors before it is considered invalid and filtered out. For CV_32FC1, this value is in meters; for CV_16UC1, it's converted to millimeters.
    +
    +
    + +
    +
    + +

    ◆ brightnessAndContrastAuto()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::brightnessAndContrastAuto (const cv::Mat & src,
    const cv::Mat & mask,
    float clipLowHistPercent = 0,
    float clipHighHistPercent = 0,
    float * alphaOut = 0,
    float * betaOut = 0 
    )
    +
    + +

    Automatic brightness and contrast optimization with optional histogram clipping.

    +

    This function automatically adjusts the brightness and contrast of the input image based on its histogram. It optionally clips a percentage of the darkest and brightest parts of the histogram to reduce the influence of outliers (similar to "auto levels" in photo editors).

    +
    Parameters
    + + + + + + + +
    [in]srcInput image. Must be of type CV_8UC1 (grayscale), CV_8UC3 (BGR), or CV_8UC4 (BGRA).
    [in]maskOptional mask. Only non-zero mask pixels are considered in histogram computation.
    [in]clipLowHistPercentPercentage of the lowest histogram range to clip. Use 0 to disable.
    [in]clipHighHistPercentPercentage of the highest histogram range to clip. Use 0 to disable.
    [out]alphaOutOptional pointer to store the computed alpha (contrast scale factor).
    [out]betaOutOptional pointer to store the computed beta (brightness shift factor).
    +
    +
    +
    Returns
    A new image with automatically adjusted brightness and contrast. The image will have the same size and number of channels as the input.
    +
    Note
    For BGRA input images, the alpha (transparency) channel is preserved and not modified.
    +
    See also
    Original discussion: https://answers.opencv.org/question/75510/how-to-make-auto-adjustmentsbrightness-and-contrast-for-image-android-opencv-image-correction/
    + +
    +
    + +

    ◆ exposureFusion()

    + +
    +
    + + + + + + + + +
    cv::Mat RTABMAP_CORE_EXPORT rtabmap::util2d::exposureFusion (const std::vector< cv::Mat > & images)
    +
    + +

    Performs exposure fusion on a set of input images.

    +

    This function blends multiple images with different exposures into a single well-exposed image using the Mertens exposure fusion algorithm. It leverages OpenCV's createMergeMertens() method (available in OpenCV 3 and above).

    +
    Parameters
    + + +
    imagesA vector of input images (typically CV_8UC3) to be fused. All images should have the same size and type.
    +
    +
    +
    Returns
    A fused color image (CV_8UC3) with enhanced exposure. If OpenCV version is below 3, the function returns a clone of the first image in the input vector.
    +
    Note
    The output image is normalized to 8-bit color (0–255). Exposure fusion requires OpenCV 3.0 or later.
    +
    Warning
    If OpenCV version is lower than 3, exposure fusion is not performed and a warning is issued.
    + +
    +
    + +

    ◆ HSVtoRGB()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void RTABMAP_CORE_EXPORT rtabmap::util2d::HSVtoRGB (float * r,
    float * g,
    float * b,
    float h,
    float s,
    float v 
    )
    +
    + +

    Converts a color from HSV (Hue, Saturation, Value) to RGB.

    +

    This function takes HSV color values and converts them to their corresponding RGB representation using standard sector-based color conversion.

    +
    Parameters
    + + + + + + + +
    [out]rPointer to a float where the resulting red component (0.0–1.0) will be stored.
    [out]gPointer to a float where the resulting green component (0.0–1.0) will be stored.
    [out]bPointer to a float where the resulting blue component (0.0–1.0) will be stored.
    [in]hHue angle in degrees (0–360). Defines the color type.
    [in]sSaturation (0.0–1.0). 0 is grayscale, 1 is full color.
    [in]vValue (brightness) (0.0–1.0). 0 is black, 1 is full brightness.
    +
    +
    +
    Note
    This function assumes h is in degrees. If s is 0, the resulting color is grayscale, with R=G=B=V.
    +
    Warning
    The output RGB values are in the 0.0 to 1.0 range, not 0–255.
    + +
    +
    + +

    ◆ NMS()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void RTABMAP_CORE_EXPORT rtabmap::util2d::NMS (const std::vector< cv::KeyPoint > & ptsIn,
    const cv::Mat & descriptorsIn,
    std::vector< cv::KeyPoint > & ptsOut,
    cv::Mat & descriptorsOut,
    int dist_thresh,
    int img_width,
    int img_height 
    )
    +
    + +

    Applies Non-Maximum Suppression (NMS) to a set of keypoints.

    +

    This function filters a set of input keypoints by applying a grid-based non-maximum suppression (NMS) algorithm. It retains only the strongest keypoints (based on response value) while ensuring that no two retained points are within a certain distance from each other.

    +
    Parameters
    + + + + + + + + +
    [in]ptsInInput vector of keypoints.
    [in]descriptorsInCorresponding descriptors for the input keypoints. Can be empty.
    [out]ptsOutOutput vector of keypoints after NMS filtering.
    [out]descriptorsOutOutput descriptors corresponding to the filtered keypoints.
    [in]dist_threshMinimum allowed distance between retained keypoints (suppression radius).
    [in]img_widthWidth of the image on which the keypoints are based.
    [in]img_heightHeight of the image on which the keypoints are based.
    +
    +
    +
    Note
    Keypoints are suppressed if they are within dist_thresh pixels of a stronger keypoint.
    +
    +If descriptorsIn is empty, descriptor output will remain empty.
    +
    +Assumes all keypoints lie within the image dimensions provided.
    + +
    +
    + +

    ◆ SSC()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    std::vector< int > RTABMAP_CORE_EXPORT rtabmap::util2d::SSC (const std::vector< cv::KeyPoint > & keypoints,
    int maxKeypoints,
    float tolerance,
    int cols,
    int rows,
    const std::vector< int > & indx = {} 
    )
    +
    + +

    Applies the SSC (Suppression via Square Covering) algorithm to spatially select keypoints.

    +

    This function selects a subset of keypoints that are uniformly distributed across the image using a square covering method and binary search optimization to achieve a desired number of keypoints.

    +
    Parameters
    + + + + + + + +
    [in]keypointsInput vector of keypoints to select from.
    [in]maxKeypointsDesired upper bound on the number of output keypoints. The internal target is first reduced by round(maxKeypoints * tolerance) so the result is always less than or equal to this value.
    [in]toleranceRelative tolerance applied to the reduced target (e.g., 0.1 allows ±10% of the reduced target, not of maxKeypoints).
    [in]colsWidth of the image in pixels.
    [in]rowsHeight of the image in pixels.
    [in]indxOptional vector of indices to use instead of the original keypoints ordering. If provided, should be the same size as keypoints. This allows for applying SSC to a pre-sorted subset (e.g., top-N keypoints).
    +
    +
    +
    Returns
    A vector of indices corresponding to the selected keypoints in the input keypoints vector.
    +
    Note
    The algorithm operates by covering the image with a grid of cells and retaining the most confident keypoint in each uncovered cell while suppressing nearby keypoints within a computed square radius.
    +
    +Uses binary search to find the optimal suppression radius so the number of selected keypoints is within [effectiveMax * (1 - tolerance), effectiveMax * (1 + tolerance)], where effectiveMax = maxKeypoints - round(maxKeypoints * tolerance).
    +
    +Works best when keypoints are pre-sorted by response strength (e.g., strongest first).
    +
    +If the indx vector is provided, the returned indices refer to the original list, not just indx.
    + +
    +
    + +

    ◆ rotateImagesUpsideUpIfNecessary()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    bool RTABMAP_CORE_EXPORT rtabmap::util2d::rotateImagesUpsideUpIfNecessary (CameraModel & model,
    cv::Mat & rgb,
    cv::Mat & depth 
    )
    +
    + +

    Rotates the input RGB and depth images to make them appear upright based on the camera's roll angle.

    +

    This function uses the camera's extrinsic parameters to determine if the captured image is rotated (e.g., sideways or upside-down), and rotates it appropriately (by 90°, 180°, or 270°) to correct orientation. It also updates the associated camera model to reflect the new transformation and adjusted image size.

    +
    Parameters
    + + + + +
    [in,out]modelThe camera model associated with the images. It will be updated to reflect the new orientation.
    [in,out]rgbThe RGB image to be rotated if necessary.
    [in,out]depthThe depth image to be rotated if necessary.
    +
    +
    +
    Returns
    True if the images were rotated, false if no rotation was needed or the pitch angle is too large for a reliable decision.
    +
    Note
    The function:
      +
    • Ignores rotation if pitch > π/4 (too ambiguous to determine "up").
    • +
    • Assumes roll is responsible for rotation (i.e., sideways capture).
    • +
    • Applies necessary rotation and updates the camera intrinsics accordingly.
    • +
    • Supports image types: RGB and depth must be valid OpenCV cv::Mat.
    • +
    • Respects image transparency and depth values during rotation.
    • +
    +
    +
    Warning
    This function assumes that the camera's local transform includes the standard optical rotation.
    +
    See also
    rtabmap::CameraModel, cv::transpose, cv::flip
    + +
    +
    +
    + + + + diff --git a/preview/pr-1492/api/latest/namespaces.html b/preview/pr-1492/api/latest/namespaces.html new file mode 100644 index 00000000..72da78bf --- /dev/null +++ b/preview/pr-1492/api/latest/namespaces.html @@ -0,0 +1,240 @@ + + + + + + + + +RTAB-Map: Namespace List + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NgraphPose-graph I/O, trajectory metrics, link utilities, and path planning
     ►Nrtabmap
    +
    +
    + + + + diff --git a/preview/pr-1492/api/latest/nav_f.png b/preview/pr-1492/api/latest/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/nav_fd.png b/preview/pr-1492/api/latest/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/nav_g.png b/preview/pr-1492/api/latest/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/open.png b/preview/pr-1492/api/latest/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + + +RTAB-Map: Related Pages + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    + + + + diff --git a/preview/pr-1492/api/latest/plus.svg b/preview/pr-1492/api/latest/plus.svg new file mode 100644 index 00000000..07520165 --- /dev/null +++ b/preview/pr-1492/api/latest/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/plusd.svg b/preview/pr-1492/api/latest/plusd.svg new file mode 100644 index 00000000..0c65bfe9 --- /dev/null +++ b/preview/pr-1492/api/latest/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/rtabmap__core__export_8h_source.html b/preview/pr-1492/api/latest/rtabmap__core__export_8h_source.html new file mode 100644 index 00000000..2fd95039 --- /dev/null +++ b/preview/pr-1492/api/latest/rtabmap__core__export_8h_source.html @@ -0,0 +1,137 @@ + + + + + + + + +RTAB-Map: build-docs/corelib/src/include/rtabmap/core/rtabmap_core_export.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    rtabmap_core_export.h
    +
    +
    +
    1
    +
    2#ifndef RTABMAP_CORE_EXPORT_H
    +
    3#define RTABMAP_CORE_EXPORT_H
    +
    4
    +
    5#ifdef RTABMAP_CORE_STATIC_DEFINE
    +
    6# define RTABMAP_CORE_EXPORT
    +
    7# define RTABMAP_CORE_NO_EXPORT
    +
    8#else
    +
    9# ifndef RTABMAP_CORE_EXPORT
    +
    10# ifdef rtabmap_core_EXPORTS
    +
    11 /* We are building this library */
    +
    12# define RTABMAP_CORE_EXPORT __attribute__((visibility("default")))
    +
    13# else
    +
    14 /* We are using this library */
    +
    15# define RTABMAP_CORE_EXPORT __attribute__((visibility("default")))
    +
    16# endif
    +
    17# endif
    +
    18
    +
    19# ifndef RTABMAP_CORE_NO_EXPORT
    +
    20# define RTABMAP_CORE_NO_EXPORT __attribute__((visibility("hidden")))
    +
    21# endif
    +
    22#endif
    +
    23
    +
    24#ifndef RTABMAP_DEPRECATED
    +
    25# define RTABMAP_DEPRECATED __attribute__ ((__deprecated__))
    +
    26#endif
    +
    27
    +
    28#ifndef RTABMAP_DEPRECATED_EXPORT
    +
    29# define RTABMAP_DEPRECATED_EXPORT RTABMAP_CORE_EXPORT RTABMAP_DEPRECATED
    +
    30#endif
    +
    31
    +
    32#ifndef RTABMAP_DEPRECATED_NO_EXPORT
    +
    33# define RTABMAP_DEPRECATED_NO_EXPORT RTABMAP_CORE_NO_EXPORT RTABMAP_DEPRECATED
    +
    34#endif
    +
    35
    +
    36/* NOLINTNEXTLINE(readability-avoid-unconditional-preprocessor-if) */
    +
    37#if 0 /* DEFINE_NO_DEPRECATED */
    +
    38# ifndef RTABMAP_CORE_NO_DEPRECATED
    +
    39# define RTABMAP_CORE_NO_DEPRECATED
    +
    40# endif
    +
    41#endif
    +
    42
    +
    43#endif /* RTABMAP_CORE_EXPORT_H */
    +
    + + + + diff --git a/preview/pr-1492/api/latest/rvl__codec_8h_source.html b/preview/pr-1492/api/latest/rvl__codec_8h_source.html new file mode 100644 index 00000000..8c1b7415 --- /dev/null +++ b/preview/pr-1492/api/latest/rvl__codec_8h_source.html @@ -0,0 +1,135 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/rvl_codec.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    rvl_codec.h
    +
    +
    +
    1// The following code is a C++ wrapper of the code presented by
    +
    2// Andrew D. Wilson in "Fast Lossless Depth Image Compression" at SIGCHI'17.
    +
    3// The original code is licensed under the MIT License.
    +
    4
    +
    5#ifndef RVL_CODEC_H_
    +
    6#define RVL_CODEC_H_
    +
    7
    +
    8#include <cstdint>
    +
    9#include "rtabmap/core/rtabmap_core_export.h"
    +
    10
    +
    11namespace rtabmap
    +
    12{
    +
    13
    +
    +
    14class RTABMAP_CORE_EXPORT RvlCodec {
    +
    15public:
    +
    16 RvlCodec();
    +
    17 // Compress input data into output. The size of output can be equal to (1.5 * numPixels + 4) in the worst case.
    +
    18 int CompressRVL(const uint16_t * input, unsigned char * output, int numPixels);
    +
    19 // Decompress input data into output. The size of output must be equal to numPixels.
    +
    20 void DecompressRVL(const unsigned char * input, uint16_t * output, int numPixels);
    +
    21
    +
    22private:
    +
    23 RvlCodec(const RvlCodec &);
    +
    24 RvlCodec & operator=(const RvlCodec &);
    +
    25
    +
    26 void EncodeVLE(int value);
    +
    27 int DecodeVLE();
    +
    28
    +
    29 int *buffer_;
    +
    30 int *pBuffer_;
    +
    31 int word_;
    +
    32 int nibblesWritten_;
    +
    33};
    +
    +
    34
    +
    35} // namespace rtabmap
    +
    36
    +
    37#endif // RVL_CODEC_H_
    + + +
    + + + + diff --git a/preview/pr-1492/api/latest/search/all_0.js b/preview/pr-1492/api/latest/search/all_0.js new file mode 100644 index 00000000..052e8a6c --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['2d_20laserscan_0',['PCL to 2D LaserScan',['../group__LaserScan2dFromPointCloud.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_1.js b/preview/pr-1492/api/latest/search/all_1.js new file mode 100644 index 00000000..06713a9c --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['3d_20laserscan_0',['PCL to 3D LaserScan',['../group__LaserScanFromPointCloud.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_10.js b/preview/pr-1492/api/latest/search/all_10.js new file mode 100644 index 00000000..8b82e481 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_10.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['mainloop_0',['mainloop',['../classrtabmap_1_1CompressionThread.html#a4948c2a9c84ee4e15699f08c2d4bac22',1,'rtabmap::CompressionThread::mainLoop()'],['../classUEventDispatcher.html#ad1aa4dc2ee29a9bfe5ee0422ad1c97f0',1,'UEventDispatcher::mainLoop()'],['../classUEventsManager.html#a7eec8b7a675e7093064f147a9f62bfb9',1,'UEventsManager::mainLoop()']]], + ['makedir_1',['makeDir',['../classUDirectory.html#a8d84cde6736b614a4396f16113f4d365',1,'UDirectory']]], + ['mapcorrection_2',['mapCorrection',['../classrtabmap_1_1Statistics.html#a775992631cd8d976a94ea6c1560dad0d',1,'rtabmap::Statistics']]], + ['mapid_3',['mapId',['../classrtabmap_1_1Signature.html#ac6a75872fb4cb64bd088794df6e897bb',1,'rtabmap::Signature']]], + ['markerdetector_4',['MarkerDetector',['../classrtabmap_1_1MarkerDetector.html',1,'rtabmap']]], + ['markerinfo_5',['MarkerInfo',['../classrtabmap_1_1MarkerInfo.html',1,'rtabmap']]], + ['matches_6',['matches',['../classrtabmap_1_1RegistrationInfo.html#a5dd0548e61c157636449fb607869f3a8',1,'rtabmap::RegistrationInfo']]], + ['matchesids_7',['matchesIDs',['../classrtabmap_1_1RegistrationInfo.html#aa7a148863f31e6556f483b7d932a40dc',1,'rtabmap::RegistrationInfo']]], + ['matchespercam_8',['matchesPerCam',['../classrtabmap_1_1RegistrationInfo.html#ab79de88af655e987d8232d5b86d7ad82',1,'rtabmap::RegistrationInfo']]], + ['mathematic_20operations_9',['Basic mathematic operations',['../group__UtiLite.html#math',1,'']]], + ['maxdisparity_10',['maxDisparity',['../classrtabmap_1_1Stereo.html#a83319186c8c434ad0482d2eb911ecd31',1,'rtabmap::Stereo']]], + ['maxgrapherrors_11',['MaxGraphErrors',['../structrtabmap_1_1graph_1_1MaxGraphErrors.html',1,'rtabmap::graph']]], + ['maxlevel_12',['maxLevel',['../classrtabmap_1_1Stereo.html#a3834923d75c9453e885bea01cb5ecfa5',1,'rtabmap::Stereo']]], + ['memory_13',['memory',['../classrtabmap_1_1Memory.html',1,'rtabmap::Memory'],['../classrtabmap_1_1Memory.html#a24d451cdf46a9cc04cce995142a101d4',1,'rtabmap::Memory::Memory(const ParametersMap &parameters=ParametersMap())']]], + ['memorychanged_14',['memoryChanged',['../classrtabmap_1_1Memory.html#a8720df55fa6f8be933827808d364f20a',1,'rtabmap::Memory']]], + ['merge_15',['merge',['../classrtabmap_1_1Link.html#a953a029f601d7ca3efbb12ca22da4542',1,'rtabmap::Link']]], + ['mindisparity_16',['minDisparity',['../classrtabmap_1_1Stereo.html#aaeec1e0e5470b1b1268b4e04bff81742',1,'rtabmap::Stereo']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_11.js b/preview/pr-1492/api/latest/search/all_11.js new file mode 100644 index 00000000..cc6e0033 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_11.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['name_0',['name',['../classrtabmap_1_1StereoCameraModel.html#ae759fe4ff0862f5305cf85257e0367a1',1,'rtabmap::StereoCameraModel::name()'],['../classrtabmap_1_1CameraModel.html#aa152828f20e1cf0ffab7bb25178191b5',1,'rtabmap::CameraModel::name()']]], + ['nan_20points_20from_20a_20point_20cloud_1',['nan points from a point cloud',['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['nms_2',['NMS',['../namespacertabmap_1_1util2d.html#aafa9a426c8e7dd0359adf40e1b45ee1c',1,'rtabmap::util2d']]], + ['nnstrategy_3',['NNStrategy',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655',1,'rtabmap::VWDictionary']]], + ['nnstrategyname_4',['nnStrategyName',['../classrtabmap_1_1VWDictionary.html#a7092a6a6af93772ce89793c5e54a17cc',1,'rtabmap::VWDictionary']]], + ['normal_20filtering_5',['Point Normal Filtering',['../group__PointNormalFiltering.html',1,'']]], + ['normalfiltering_6',['normalfiltering',['../group__PointNormalFiltering.html#gabfeacf2f8a261abd98a9c6728f02324b',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#gae3831a32e21738a381ea789e9e3e3996',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#ga91fd9701dea9ebc4b7265b12b357aba1',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#ga96711db9864b121ab9e2bcbf2cf44658',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#gad821858315d7e1e1868d6314d65a9f89',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#ga5c15577ccd70487c3ccd53c16b00648b',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#gad37b605f0f26190c95450c878ca51ece',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#ga7c7e3de2ff24fc3aadfb3eb0ae05314d',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)']]], + ['normalizerotation_7',['normalizeRotation',['../classrtabmap_1_1Transform.html#acbdd19971643c7400cb59055ec64d3cf',1,'rtabmap::Transform']]], + ['normals_8',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['now_9',['now',['../classUTimer.html#ad10fce2a4901bf5d6a460ca7b158cb3a',1,'UTimer']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_12.js b/preview/pr-1492/api/latest/search/all_12.js new file mode 100644 index 00000000..c3cb3e3e --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_12.js @@ -0,0 +1,68 @@ +var searchData= +[ + ['o14_0',['o14',['../classrtabmap_1_1Transform.html#adbdb9063808e63830cbcbd99e1e84d3d',1,'rtabmap::Transform']]], + ['o24_1',['o24',['../classrtabmap_1_1Transform.html#aa68c9c3b75ad7b66ca8bbf66742b0cc5',1,'rtabmap::Transform']]], + ['o34_2',['o34',['../classrtabmap_1_1Transform.html#a39184351ff5625030b6d1019c0e3d93f',1,'rtabmap::Transform']]], + ['obstaclecells_3',['obstacleCells',['../classrtabmap_1_1LocalGrid.html#abe290c60168557fb899914f53e4ad1a1',1,'rtabmap::LocalGrid']]], + ['occupancygrid_4',['OccupancyGrid',['../classrtabmap_1_1OccupancyGrid.html',1,'rtabmap']]], + ['octomap_5',['OctoMap',['../classrtabmap_1_1OctoMap.html',1,'rtabmap']]], + ['odomcacheconstraints_6',['odomCacheConstraints',['../classrtabmap_1_1Statistics.html#a44b7a6c4d5b8bd58efcce2fdf3f2a9fd',1,'rtabmap::Statistics']]], + ['odomcacheposes_7',['odomCachePoses',['../classrtabmap_1_1Statistics.html#a8d88d70935ef4e110cd2c92b07ed74b2',1,'rtabmap::Statistics']]], + ['odomcovariance_8',['odomCovariance',['../classrtabmap_1_1SensorCaptureInfo.html#a8f5b899e1120bc8e68cdfd1b46327107',1,'rtabmap::SensorCaptureInfo']]], + ['odometry_9',['odometry',['../classrtabmap_1_1Odometry.html#af2d9cf4c207d6628b0890064a385856b',1,'rtabmap::Odometry::Odometry()'],['../classrtabmap_1_1Odometry.html',1,'rtabmap::Odometry']]], + ['odometrycuvslam_10',['OdometryCuVSLAM',['../classrtabmap_1_1OdometryCuVSLAM.html',1,'rtabmap']]], + ['odometrydvo_11',['OdometryDVO',['../classrtabmap_1_1OdometryDVO.html',1,'rtabmap']]], + ['odometryevent_12',['OdometryEvent',['../classrtabmap_1_1OdometryEvent.html',1,'rtabmap']]], + ['odometryf2f_13',['OdometryF2F',['../classrtabmap_1_1OdometryF2F.html',1,'rtabmap']]], + ['odometryf2m_14',['OdometryF2M',['../classrtabmap_1_1OdometryF2M.html',1,'rtabmap']]], + ['odometryfloam_15',['OdometryFLOAM',['../classrtabmap_1_1OdometryFLOAM.html',1,'rtabmap']]], + ['odometryfovis_16',['OdometryFovis',['../classrtabmap_1_1OdometryFovis.html',1,'rtabmap']]], + ['odometryinfo_17',['OdometryInfo',['../classrtabmap_1_1OdometryInfo.html',1,'rtabmap']]], + ['odometryliosam_18',['OdometryLIOSAM',['../classrtabmap_1_1OdometryLIOSAM.html',1,'rtabmap']]], + ['odometryloam_19',['OdometryLOAM',['../classrtabmap_1_1OdometryLOAM.html',1,'rtabmap']]], + ['odometrymono_20',['OdometryMono',['../classrtabmap_1_1OdometryMono.html',1,'rtabmap']]], + ['odometrymsckf_21',['OdometryMSCKF',['../classrtabmap_1_1OdometryMSCKF.html',1,'rtabmap']]], + ['odometryokvis_22',['OdometryOkvis',['../classrtabmap_1_1OdometryOkvis.html',1,'rtabmap']]], + ['odometryopen3d_23',['OdometryOpen3D',['../classrtabmap_1_1OdometryOpen3D.html',1,'rtabmap']]], + ['odometryopenvins_24',['OdometryOpenVINS',['../classrtabmap_1_1OdometryOpenVINS.html',1,'rtabmap']]], + ['odometryorbslam2_25',['OdometryORBSLAM2',['../classrtabmap_1_1OdometryORBSLAM2.html',1,'rtabmap']]], + ['odometryorbslam3_26',['OdometryORBSLAM3',['../classrtabmap_1_1OdometryORBSLAM3.html',1,'rtabmap']]], + ['odometryresetevent_27',['OdometryResetEvent',['../classrtabmap_1_1OdometryResetEvent.html',1,'rtabmap']]], + ['odometrythread_28',['OdometryThread',['../classrtabmap_1_1OdometryThread.html',1,'rtabmap']]], + ['odometryvinsfusion_29',['OdometryVINSFusion',['../classrtabmap_1_1OdometryVINSFusion.html',1,'rtabmap']]], + ['odometryviso2_30',['OdometryViso2',['../classrtabmap_1_1OdometryViso2.html',1,'rtabmap']]], + ['odompose_31',['odomPose',['../classrtabmap_1_1SensorCaptureInfo.html#a5c086f941e4fa816ec608779ac03f640',1,'rtabmap::SensorCaptureInfo']]], + ['odomprovided_32',['odomprovided',['../classrtabmap_1_1CameraRealSense2.html#a3b5aa7434457e09cbc6f01b985440183',1,'rtabmap::CameraRealSense2::odomProvided()'],['../classrtabmap_1_1CameraRealSense.html#a1ce069a366db4c98fe757acca7bf5b79',1,'rtabmap::CameraRealSense::odomProvided()'],['../classrtabmap_1_1CameraMyntEye.html#abc869cbd8b1106374a1f8734715d965d',1,'rtabmap::CameraMyntEye::odomProvided()'],['../classrtabmap_1_1CameraStereoZed.html#ac57ca4d52b5a0a3c3911ffa4a139564c',1,'rtabmap::CameraStereoZed::odomProvided()'],['../classrtabmap_1_1DBReader.html#a24351b1eb5776a83548a1d972e489dba',1,'rtabmap::DBReader::odomProvided()'],['../classrtabmap_1_1SensorCapture.html#aee217767808a9df9c63a27b284461c89',1,'rtabmap::SensorCapture::odomProvided()'],['../classrtabmap_1_1SensorCaptureThread.html#a88269150d6fd6fd39685fe9e926d98e6',1,'rtabmap::SensorCaptureThread::odomProvided()'],['../classrtabmap_1_1CameraSeerSense.html#aa3bfa6e619c5845d4994809281c9a4b5',1,'rtabmap::CameraSeerSense::odomProvided()'],['../classrtabmap_1_1CameraImages.html#aea0811d6305eec32fda10f46344c825f',1,'rtabmap::CameraImages::odomProvided()']]], + ['odomsensor_33',['odomSensor',['../classrtabmap_1_1SensorCaptureThread.html#a0f4e3814d203ded5735ebb7abba1451e',1,'rtabmap::SensorCaptureThread']]], + ['odomvelocity_34',['odomVelocity',['../classrtabmap_1_1SensorCaptureInfo.html#a5f544019df408896fed21c48fb3c0197',1,'rtabmap::SensorCaptureInfo']]], + ['of_20a_20point_20cloud_20with_20normals_35',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['of_20interest_20roi_20computation_36',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]], + ['of_20pcl_20point_20clouds_37',['of pcl point clouds',['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds']]], + ['of_20stl_38',['Convenient use of STL',['../group__UtiLite.html#stl',1,'']]], + ['of_20two_20point_20clouds_39',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]], + ['openconnection_40',['openConnection',['../classrtabmap_1_1DBDriver.html#ac6c0a2260ba2c3cc030136c9609142f5',1,'rtabmap::DBDriver']]], + ['opencv_20stuff_20libutilite_5fcv_20so_20_3a_20optional_41',['OpenCV stuff (libutilite_cv.so : OPTIONAL)',['../group__UtiLite.html#cvLib',1,'']]], + ['opengl_5ft_5frtabmap_42',['opengl_T_rtabmap',['../classrtabmap_1_1Transform.html#abd5f003e72ad31ebc9124385030fce59',1,'rtabmap::Transform']]], + ['operations_43',['Basic mathematic operations',['../group__UtiLite.html#math',1,'']]], + ['operator_2a_44',['operator*',['../classrtabmap_1_1Transform.html#a4d70ff21bbb61cd65c2d00130d8f84a7',1,'rtabmap::Transform']]], + ['operator_2b_45',['operator+',['../classrtabmap_1_1LaserScan.html#ab952e27e94b2fa942efe98ea651f4475',1,'rtabmap::LaserScan']]], + ['operator_2b_3d_46',['operator+=',['../classrtabmap_1_1LaserScan.html#af9f9a32f97cfbac321fc2509f0d1bd04',1,'rtabmap::LaserScan']]], + ['operator_3c_3c_47',['operator<<',['../namespacertabmap.html#aef0e1f1b121a9199e7511becbc8f1e32',1,'rtabmap::operator<<(std::ostream &os, const Transform &s)'],['../namespacertabmap.html#a6138748ef83b742105e47c9275885e4a',1,'rtabmap::operator<<(std::ostream &os, const StereoCameraModel &model)'],['../namespacertabmap.html#a087b7a1b89acb679edee23883653f1a7',1,'rtabmap::operator<<(std::ostream &os, const CameraModel &model)']]], + ['opticalrotation_48',['opticalRotation',['../classrtabmap_1_1CameraModel.html#a0853af9d0117565311da4ffc3965f8d2',1,'rtabmap::CameraModel']]], + ['optimize_49',['optimize',['../classrtabmap_1_1OptimizerTORO.html#a025b40902f0ea048bdbfee9ed4ebc0f3',1,'rtabmap::OptimizerTORO::optimize()'],['../classrtabmap_1_1OptimizerGTSAM.html#a4905d84cfc59516eef21ea89064c31ba',1,'rtabmap::OptimizerGTSAM::optimize()'],['../classrtabmap_1_1OptimizerG2O.html#a9400bdf57331af310cf6b02e661d0a03',1,'rtabmap::OptimizerG2O::optimize()'],['../classrtabmap_1_1OptimizerCeres.html#ab988decf55da4a8821931855ddaa1c1a',1,'rtabmap::OptimizerCeres::optimize()'],['../classrtabmap_1_1Optimizer.html#af59c8340394268f9a1eb76fd5709f2c3',1,'rtabmap::Optimizer::optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)'],['../classrtabmap_1_1Optimizer.html#a7e3aff943e77603493a358ff522fa2dc',1,'rtabmap::Optimizer::optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)']]], + ['optimizeba_50',['optimizeba',['../classrtabmap_1_1Optimizer.html#a038e8df970ab744f6f4ba7027f62b263',1,'rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)'],['../classrtabmap_1_1Optimizer.html#a2f7cbdebed9787ffa6b0b30536dfa1a0',1,'rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())'],['../classrtabmap_1_1Optimizer.html#aab99f045516162944ad68fdabacb53dc',1,'rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())'],['../classrtabmap_1_1Optimizer.html#ad6b32a9697837f03941773f6a5bbf91c',1,'rtabmap::Optimizer::optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)'],['../classrtabmap_1_1OptimizerCeres.html#a5057dd09f74610f3092bb597f6af0413',1,'rtabmap::OptimizerCeres::optimizeBA()'],['../classrtabmap_1_1OptimizerCVSBA.html#ad6ff3fec8e75ab76290da5763022a903',1,'rtabmap::OptimizerCVSBA::optimizeBA()'],['../classrtabmap_1_1OptimizerG2O.html#a17edfbaeee93d32153782f61212a88f0',1,'rtabmap::OptimizerG2O::optimizeBA()'],['../classrtabmap_1_1OptimizerGTSAM.html#a7a2033a466505f8c2191b8329b5b342c',1,'rtabmap::OptimizerGTSAM::optimizeBA()']]], + ['optimizeincremental_51',['optimizeIncremental',['../classrtabmap_1_1Optimizer.html#a278f42e0d250085ac6fe9ed425627acf',1,'rtabmap::Optimizer']]], + ['optimizer_52',['Optimizer',['../classrtabmap_1_1Optimizer.html',1,'rtabmap']]], + ['optimizerceres_53',['OptimizerCeres',['../classrtabmap_1_1OptimizerCeres.html',1,'rtabmap']]], + ['optimizercvsba_54',['OptimizerCVSBA',['../classrtabmap_1_1OptimizerCVSBA.html',1,'rtabmap']]], + ['optimizerg2o_55',['OptimizerG2O',['../classrtabmap_1_1OptimizerG2O.html',1,'rtabmap']]], + ['optimizergtsam_56',['OptimizerGTSAM',['../classrtabmap_1_1OptimizerGTSAM.html',1,'rtabmap']]], + ['optimizertoro_57',['OptimizerTORO',['../classrtabmap_1_1OptimizerTORO.html',1,'rtabmap']]], + ['optional_58',['optional',['../group__UtiLite.html#audioLib',1,'Audio stuff (libutilite_audio.so : OPTIONAL)'],['../group__UtiLite.html#cvLib',1,'OpenCV stuff (libutilite_cv.so : OPTIONAL)'],['../group__UtiLite.html#qtLib',1,'Qt Widgets (libutilite_qt.so : OPTIONAL)']]], + ['orb_59',['ORB',['../classrtabmap_1_1ORB.html',1,'rtabmap']]], + ['orboctree_60',['ORBOctree',['../classrtabmap_1_1ORBOctree.html',1,'rtabmap']]], + ['orientation_61',['orientation',['../classrtabmap_1_1IMU.html#a2160e6d59e4f9e3ffc84a2b7d62bdabd',1,'rtabmap::IMU']]], + ['orientationcovariance_62',['orientationCovariance',['../classrtabmap_1_1IMU.html#ab7668040b92bfa5532c5e1c19ddbf429',1,'rtabmap::IMU']]], + ['output_20data_3a_63',['Supported input types and corresponding output data:',['../group__LaserScanFromPointCloud.html#autotoc_md0',1,'']]], + ['output_3a_64',['Output:',['../group__LaserScan2dFromPointCloud.html#autotoc_md1',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_13.js b/preview/pr-1492/api/latest/search/all_13.js new file mode 100644 index 00000000..365a96ed --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_13.js @@ -0,0 +1,47 @@ +var searchData= +[ + ['p_0',['P',['../classrtabmap_1_1CameraModel.html#acda5d9c4eeeaaad69e950f5ea630430a',1,'rtabmap::CameraModel']]], + ['parameters_1',['Parameters',['../classrtabmap_1_1Parameters.html',1,'rtabmap']]], + ['paramevent_2',['ParamEvent',['../classrtabmap_1_1ParamEvent.html',1,'rtabmap']]], + ['parseparameters_3',['parseparameters',['../classrtabmap_1_1Rtabmap.html#a5a461ed88e83d2dbebee819ab6690e7a',1,'rtabmap::Rtabmap::parseParameters()'],['../classrtabmap_1_1VWDictionary.html#a89893faef6c96e3b19bfeab86094af81',1,'rtabmap::VWDictionary::parseParameters()'],['../classrtabmap_1_1StereoDense.html#ac2f693ca52897501450f2bda985c5cf5',1,'rtabmap::StereoDense::parseParameters()'],['../classrtabmap_1_1StereoSGBM.html#a73934f5953650089ac337316f3d3137c',1,'rtabmap::StereoSGBM::parseParameters()'],['../classrtabmap_1_1StereoBM.html#ab3960fcf495a6dcacfab58ed144b4cc7',1,'rtabmap::StereoBM::parseParameters()'],['../classrtabmap_1_1StereoOpticalFlow.html#aac2df770eba89ed2607c024c91d82c78',1,'rtabmap::StereoOpticalFlow::parseParameters()'],['../classrtabmap_1_1Stereo.html#a405d17f179327670251fca395728584b',1,'rtabmap::Stereo::parseParameters()'],['../classrtabmap_1_1RegistrationVis.html#a6560046940995044d7a51cb0066d420e',1,'rtabmap::RegistrationVis::parseParameters()'],['../classrtabmap_1_1RegistrationIcp.html#abd60fffd946201723c35beebc7bfea6a',1,'rtabmap::RegistrationIcp::parseParameters()'],['../classrtabmap_1_1Registration.html#a0f409a8f0973667ef1687fe102bbf930',1,'rtabmap::Registration::parseParameters()'],['../classrtabmap_1_1OptimizerGTSAM.html#a9ac24a2315e15b16270151c3aae9d8f0',1,'rtabmap::OptimizerGTSAM::parseParameters()'],['../classrtabmap_1_1OptimizerG2O.html#a07b598444b99584b6f2bed6baca5e8bb',1,'rtabmap::OptimizerG2O::parseParameters()'],['../classrtabmap_1_1OptimizerCeres.html#aaa1128eeb38451086c7abd58ae6142ac',1,'rtabmap::OptimizerCeres::parseParameters()'],['../classrtabmap_1_1Memory.html#abbf54d2a34838cc13ce98d41a9991918',1,'rtabmap::Memory::parseParameters()'],['../classrtabmap_1_1LocalGridMaker.html#a6395948673108c87dd371cb7b4a29026',1,'rtabmap::LocalGridMaker::parseParameters()'],['../classrtabmap_1_1IMUFilter.html#a26022384205491695e5fbea349e6363a',1,'rtabmap::IMUFilter::parseParameters()'],['../classrtabmap_1_1DBDriverSqlite3.html#ab1933c0cad6c69c3ae788854731cdeec',1,'rtabmap::DBDriverSqlite3::parseParameters()'],['../classrtabmap_1_1DBDriver.html#a3c73e045d9bdf8cad1c58efc9d930427',1,'rtabmap::DBDriver::parseParameters()'],['../classrtabmap_1_1Optimizer.html#a0a942bd7902c8d2f9444b8eba6a648a3',1,'rtabmap::Optimizer::parseParameters()'],['../classrtabmap_1_1BayesFilter.html#a6d7d48b32c853f46eee9290d5c82cd28',1,'rtabmap::BayesFilter::parseParameters()']]], + ['particlefilter_4',['ParticleFilter',['../classrtabmap_1_1ParticleFilter.html',1,'rtabmap']]], + ['pass_20through_20filtering_5',['Pass-through Filtering',['../group__PassThrough.html',1,'']]], + ['passthrough_6',['passthrough',['../group__PassThrough.html#ga551c7a9b75aaf6f087f81e52f326e182',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga7bfc95ed4f7fca124b00707708223473',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gafe76c7bd4f68d8fe1518509564bf1f3d',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gad8ced1799837b05e34ec4bd871a129ba',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga18c88abdd186757533cd7c9e825f540f',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga2d23fe7a7205247ae3152525d19a18ec',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga9c4f395f1105d3c36861e922108bfbf0',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gadb551e7530b9fa63b588e11704827b7b',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gad674cecbb2b80e50ad8680265dd50905',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga4cef6e6f7cb447719417f118ff4e367d',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gaa6907857c69443b1bd879fcf6beef8a9',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gab942c5914142128bce518c869f49f94d',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)']]], + ['pcl_7',['LaserScan to PCL',['../group__LaserScanToPointCloud.html',1,'']]], + ['pcl_20point_20clouds_8',['pcl point clouds',['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds'],['../group__TransformPointcloud.html',1,'Transform PCL Point Clouds']]], + ['pcl_20to_202d_20laserscan_9',['PCL to 2D LaserScan',['../group__LaserScan2dFromPointCloud.html',1,'']]], + ['pcl_20to_203d_20laserscan_10',['PCL to 3D LaserScan',['../group__LaserScanFromPointCloud.html',1,'']]], + ['point_11',['Transform a single point',['../group__TransformPoint.html',1,'']]], + ['point_20cloud_12',['point cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['point_20cloud_20cluster_20extraction_13',['Point Cloud Cluster Extraction',['../group__ExtractClusters.html',1,'']]], + ['point_20cloud_20downsampling_14',['Point Cloud Downsampling',['../group__PointCloudDownSampling.html',1,'']]], + ['point_20cloud_20indices_20extraction_15',['Point Cloud Indices Extraction',['../group__ExtractIndices.html',1,'']]], + ['point_20cloud_20with_20normals_16',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['point_20clouds_17',['point clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'Compute Variance and Correspondences of Two Point Clouds'],['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds'],['../group__TransformPointcloud.html',1,'Transform PCL Point Clouds']]], + ['point_20normal_20filtering_18',['Point Normal Filtering',['../group__PointNormalFiltering.html',1,'']]], + ['points_20from_20a_20point_20cloud_19',['points from a point cloud',['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['pointxyzirt_20',['PointXYZIRT',['../structrtabmap_1_1PointXYZIRT.html',1,'rtabmap']]], + ['pointxyzit_21',['PointXYZIT',['../structrtabmap_1_1PointXYZIT.html',1,'rtabmap']]], + ['pose_22',['pose',['../classrtabmap_1_1Landmark.html#ac6bfc77e153b0877c4c1cc3d97327a88',1,'rtabmap::Landmark']]], + ['poses_23',['poses',['../classrtabmap_1_1Statistics.html#acb80fff8690d88228ebda369e0e06289',1,'rtabmap::Statistics']]], + ['post_24',['post',['../classUEventsManager.html#a956353a8006abe2edb0be2e1fc1846cb',1,'UEventsManager::post()'],['../classUEventsSender.html#ab03886c42164f2f9bf89fd3da641526f',1,'UEventsSender::post()']]], + ['posterior_25',['posterior',['../classrtabmap_1_1Statistics.html#ac50fb91120fdc16266460678088ac12f',1,'rtabmap::Statistics']]], + ['postupdate_26',['postUpdate',['../classrtabmap_1_1SensorCaptureThread.html#a43cb04de41b589b3f6069fff553a4dd7',1,'rtabmap::SensorCaptureThread']]], + ['prettyprint_27',['prettyPrint',['../classrtabmap_1_1Transform.html#a61ff0bf933e0e7f220f20745df3d0818',1,'rtabmap::Transform']]], + ['previousstamp_28',['previousStamp',['../classrtabmap_1_1Odometry.html#a36aa5447b7791c88a2799c99923be393',1,'rtabmap::Odometry']]], + ['previousvelocitytransform_29',['previousVelocityTransform',['../classrtabmap_1_1Odometry.html#a35d69a27271b798da6640295a98b9785',1,'rtabmap::Odometry']]], + ['priority_30',['Priority',['../classUThread.html#a731ef4dd5a8d15abcc06e7cfa53cd153',1,'UThread']]], + ['priorsignored_31',['priorsIgnored',['../classrtabmap_1_1Optimizer.html#aeebd0d5575ab7e9f492b095c05ddb237',1,'rtabmap::Optimizer']]], + ['probability_32',['probability',['../classrtabmap_1_1GlobalMap.html#a54fd556aa295938077539e85b2be829a',1,'rtabmap::GlobalMap']]], + ['process_33',['process',['../classrtabmap_1_1Rtabmap.html#a35cf8fd93f77d1c148ae6d3107725750',1,'rtabmap::Rtabmap::process(const cv::Mat &image, int id=0, const std::map< std::string, float > &externalStats=std::map< std::string, float >())'],['../classrtabmap_1_1Rtabmap.html#a91cedf4574a557cadf6daded489e4dbe',1,'rtabmap::Rtabmap::process(const SensorData &data, Transform odomPose, float odomLinearVariance, float odomAngularVariance, const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())'],['../classrtabmap_1_1Rtabmap.html#ad7f085b6ae0fd3c7077c500c028fd5c3',1,'rtabmap::Rtabmap::process(const SensorData &data, Transform odomPose, const cv::Mat &odomCovariance=cv::Mat::eye(6, 6, CV_64FC1), const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())'],['../classrtabmap_1_1Odometry.html#a4fcbe67de2ec6f23829e3962ee586315',1,'rtabmap::Odometry::process(SensorData &data, const Transform &guess, OdometryInfo *info=0)'],['../classrtabmap_1_1Odometry.html#a0c2d39ed9b76c2c411a9e62e16e3bce1',1,'rtabmap::Odometry::process(SensorData &data, OdometryInfo *info=0)']]], + ['progressstate_34',['ProgressState',['../classrtabmap_1_1ProgressState.html',1,'rtabmap']]], + ['project_35',['project',['../classrtabmap_1_1CameraModel.html#a01de9a3cdc993275b2fbcf21d6e29833',1,'rtabmap::CameraModel']]], + ['projectedids_36',['projectedIDs',['../classrtabmap_1_1RegistrationInfo.html#aa81f7ffab8e77dfc5240fd7e9a587498',1,'rtabmap::RegistrationInfo']]], + ['projectivepoint_37',['ProjectivePoint',['../classclams_1_1ProjectivePoint.html',1,'clams']]], + ['proportional_20radius_20filtering_38',['Proportional Radius Filtering',['../group__ProportionalRadiusFiltering.html',1,'']]], + ['proportionalradiusfiltering_39',['proportionalradiusfiltering',['../group__ProportionalRadiusFiltering.html#ga5382e5aa1b2db5ee59cda070d02030f7',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga3ce176a96606fd506d3ff28a0a4cdc2a',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga76e80e9da74feba84271c52b06065b7f',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga5e6659182a671665d293afb05461bdbd',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gac755f189d29b0ed14e48e7f241103176',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gaa3e3f8d0bdc8bfa7e070b7ef73541ddb',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gacdc66ecd05ab55d9c3eba62846f1cc5d',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga0b1bda3085510fd29162d6f511f14903',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga532ecb60ddd5c72d6c2930648da37621',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga9def3599aeff33e3d2a733020f713310',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gac355ea4ecf36de86425b3dcd7794b4e1',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gad54efb4e02c820af7d480c157a7c5ae8',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)']]], + ['proximitydetectionid_40',['proximityDetectionId',['../classrtabmap_1_1Statistics.html#a0aeff90b40410ef769e63ef6b000328b',1,'rtabmap::Statistics']]], + ['proximitydetectionmapid_41',['proximityDetectionMapId',['../classrtabmap_1_1Statistics.html#ae973bc5dc35b89888a67d5e416536c53',1,'rtabmap::Statistics']]], + ['prunenode_42',['pruneNode',['../classrtabmap_1_1RtabmapColorOcTree.html#aea61a0ef99b3c56ecf5178c6d6eeb847',1,'rtabmap::RtabmapColorOcTree']]], + ['pythoninterface_43',['PythonInterface',['../classrtabmap_1_1PythonInterface.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_14.js b/preview/pr-1492/api/latest/search/all_14.js new file mode 100644 index 00000000..98e6d251 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['qt_20widgets_20libutilite_5fqt_20so_20_3a_20optional_0',['Qt Widgets (libutilite_qt.so : OPTIONAL)',['../group__UtiLite.html#qtLib',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_15.js b/preview/pr-1492/api/latest/search/all_15.js new file mode 100644 index 00000000..95646acc --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_15.js @@ -0,0 +1,78 @@ +var searchData= +[ + ['r_0',['r',['../classrtabmap_1_1StereoCameraModel.html#a7afd347afb3909a2039f154b3a048035',1,'rtabmap::StereoCameraModel::R()'],['../classrtabmap_1_1CameraModel.html#ad763246258ddf02c27873c2536901781',1,'rtabmap::CameraModel::R()']]], + ['r11_1',['r11',['../classrtabmap_1_1Transform.html#a1ea4c945ccf717677606fc7fe0331ccf',1,'rtabmap::Transform']]], + ['radius_20filtering_2',['radius filtering',['../group__ProportionalRadiusFiltering.html',1,'Proportional Radius Filtering'],['../group__RadiusFiltering.html',1,'Radius Filtering']]], + ['radiusfiltering_3',['radiusfiltering',['../group__RadiusFiltering.html#ga8fde7163c8ede34584e464909f8410cd',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gada185029395a374e08162d2b357406a8',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gafba9a36653f1314aa968966f5e8f8df6',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gadc01992dd4ebc7fe77f40e423ba83f95',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gaa6e6e945a27057824168aa287670d641',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gae6562a12f695af7fc210043c85afeebc',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga9e4ddb084f4c00934f65f30d8b466047',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga4a5c1b3dd17782eed6ff342a27ab9dde',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga3b3ef1e4b2893810542c6c2be871fa16',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga21f5957a6c6b8dd2ca7e559ed8a82d08',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga4f7bd9bc6922f17815109375fc11367b',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gaa1328e1ba793b44a450fe90e4e99fa35',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)']]], + ['random_20sampling_4',['Random Sampling',['../group__RandomSampling.html',1,'']]], + ['randomsampling_5',['randomsampling',['../group__RandomSampling.html#ga8dadcd7fb9beedc839b54079c6e84701',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#gaf323d2f6db341f7dd83893297b1f9693',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#ga5e31a5d57029fddd20e5d57ecdfb1184',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#gac4f1ee370a918987a847d5d604601837',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#ga7738134d7dec8f178a927dfe69fcb15a',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#gad6269088b589b735fd87e07d11bf2547',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, int samples)']]], + ['range_20filtering_20of_20pcl_20point_20clouds_6',['range filtering of pcl point clouds',['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds']]], + ['rangefiltering_7',['rangefiltering',['../group__PointCloudRangeFiltering.html#gaeff3b4153a78703ce5be9c64f8243596',1,'rtabmap::util3d::rangeFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)'],['../group__PointCloudRangeFiltering.html#ga954c38903497ffa168e9d58afc47078e',1,'rtabmap::util3d::rangeFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)'],['../group__PointCloudRangeFiltering.html#gaf1867021c847f77f561a96e4823a16bd',1,'rtabmap::util3d::rangeFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)'],['../group__PointCloudRangeFiltering.html#ga2a2226e27b4203d04293f84bf8032e3f',1,'rtabmap::util3d::rangeFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)']]], + ['rangesplitfiltering_8',['rangesplitfiltering',['../group__PointCloudSplitRangeFiltering.html#gac9564b3cf8c8be2f80a20655f70af4f0',1,'rtabmap::util3d::rangeSplitFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)'],['../group__PointCloudSplitRangeFiltering.html#ga843adb51ad7882fc8c6b8d00f4663c3b',1,'rtabmap::util3d::rangeSplitFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)'],['../group__PointCloudSplitRangeFiltering.html#ga99d6429ac043d37bdef871158739557e',1,'rtabmap::util3d::rangeSplitFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)'],['../group__PointCloudSplitRangeFiltering.html#ga2dfe5eefc31a50912297f6341eae4446',1,'rtabmap::util3d::rangeSplitFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)']]], + ['rawlikelihood_9',['rawLikelihood',['../classrtabmap_1_1Statistics.html#a472f50deace411e1fbbef95f4fb698de',1,'rtabmap::Statistics']]], + ['reactivatesignatures_10',['reactivateSignatures',['../classrtabmap_1_1Memory.html#aa244b8581684b85e35d2056cf972e377',1,'rtabmap::Memory']]], + ['rectifydepth_11',['rectifyDepth',['../classrtabmap_1_1CameraModel.html#a22cf7f5b49ef0cd8be08755010f6acb5',1,'rtabmap::CameraModel']]], + ['rectifyimage_12',['rectifyImage',['../classrtabmap_1_1CameraModel.html#a17219cf5cf82d224f2a7ed5af01fa236',1,'rtabmap::CameraModel']]], + ['reducedids_13',['reducedIds',['../classrtabmap_1_1Statistics.html#a8c1e9a5c04232909f62447656d6bcbce',1,'rtabmap::Statistics']]], + ['reducenode_14',['reduceNode',['../classrtabmap_1_1Memory.html#ac9e6bfaf161d4bd1a9f99d2352492a1d',1,'rtabmap::Memory']]], + ['refimageid_15',['refImageId',['../classrtabmap_1_1Statistics.html#a4ba41e262e2af21bfb2c9d1b6e493d6d',1,'rtabmap::Statistics']]], + ['refimagemapid_16',['refImageMapId',['../classrtabmap_1_1Statistics.html#a45abfdd8f164e0c457d64b80919d5052',1,'rtabmap::Statistics']]], + ['refinelinks_17',['refineLinks',['../classrtabmap_1_1Rtabmap.html#a6650c241bd6a89f66718ce7a227dfe10',1,'rtabmap::Rtabmap']]], + ['region_20of_20interest_20roi_20computation_18',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]], + ['registercurrentthread_19',['registerCurrentThread',['../classULogger.html#a9e0fa0a0e32b03f89d08668e7c0b4664',1,'ULogger']]], + ['registerdepth_20',['registerDepth',['../namespacertabmap_1_1util2d.html#a48a7e15282f392e77561dd96ed3320f9',1,'rtabmap::util2d']]], + ['registration_21',['registration',['../classrtabmap_1_1Registration.html#a7d0ff4149da7f5839308ff543932b067',1,'rtabmap::Registration::Registration()'],['../classrtabmap_1_1Registration.html',1,'rtabmap::Registration']]], + ['registrationicp_22',['RegistrationIcp',['../classrtabmap_1_1RegistrationIcp.html',1,'rtabmap']]], + ['registrationinfo_23',['RegistrationInfo',['../classrtabmap_1_1RegistrationInfo.html',1,'rtabmap']]], + ['registrationvis_24',['registrationvis',['../classrtabmap_1_1RegistrationVis.html',1,'rtabmap::RegistrationVis'],['../classrtabmap_1_1RegistrationVis.html#aa845f7fbbfc8fc340dba96a2a6550d03',1,'rtabmap::RegistrationVis::RegistrationVis()']]], + ['rejectedmsg_25',['rejectedMsg',['../classrtabmap_1_1RegistrationInfo.html#af47520f216ad7259cfcc07254c4daa96',1,'rtabmap::RegistrationInfo']]], + ['rejectlastloopclosure_26',['rejectLastLoopClosure',['../classrtabmap_1_1Rtabmap.html#ab04bd616db9107a705faf5b3395a73d3',1,'rtabmap::Rtabmap']]], + ['release_27',['release',['../classUSemaphore.html#a693b35a08fd5363b14f3a220081814b5',1,'USemaphore']]], + ['remove_20nan_20points_20from_20a_20point_20cloud_28',['remove nan points from a point cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['removeallref_29',['removeAllRef',['../classrtabmap_1_1VisualWord.html#a63364292bdd9921668187b16c2e0457e',1,'rtabmap::VisualWord']]], + ['removeallvirtuallinks_30',['removeAllVirtualLinks',['../classrtabmap_1_1Memory.html#a838b48bb9c2e6ccfe4f916ea2b2d00fd',1,'rtabmap::Memory']]], + ['removeallwordref_31',['removeAllWordRef',['../classrtabmap_1_1VWDictionary.html#ac4a70358ca2db8e63c67a30383a1d34b',1,'rtabmap::VWDictionary']]], + ['removeallwords_32',['removeAllWords',['../classrtabmap_1_1Signature.html#aac24301e6aff593fdcd679485b2c0e0e',1,'rtabmap::Signature']]], + ['removedir_33',['removeDir',['../classUDirectory.html#a78d8896627c8675a19b0c6fe6d9e274a',1,'UDirectory']]], + ['removehandler_34',['removeHandler',['../classUEventsManager.html#a10d4b359f630aa9387e77f8baefcc07c',1,'UEventsManager']]], + ['removelandmark_35',['removeLandmark',['../classrtabmap_1_1Signature.html#a6fe5edded7922a34c3f52e71e8be458d',1,'rtabmap::Signature']]], + ['removelandmarks_36',['removeLandmarks',['../classrtabmap_1_1Signature.html#aa482e98fb247d40368a9aaa838fe3a5a',1,'rtabmap::Signature']]], + ['removelink_37',['removelink',['../classrtabmap_1_1Signature.html#abbd9806c2b20182217d2269c7398541e',1,'rtabmap::Signature::removeLink()'],['../classrtabmap_1_1Memory.html#a3fcaa79a33d63f7e383d05868b1316e3',1,'rtabmap::Memory::removeLink()'],['../classrtabmap_1_1DBDriver.html#a7c3c7536423a956e74d3f609ee814717',1,'rtabmap::DBDriver::removeLink()']]], + ['removelinks_38',['removeLinks',['../classrtabmap_1_1Signature.html#a8d3e01853af1365fce62dd460dea816f',1,'rtabmap::Signature']]], + ['removenanfrompointcloud_39',['removenanfrompointcloud',['../group__RemoveNaNFromPointCloud.html#ga307cddc4476370cc25e5f67fd13af865',1,'rtabmap::util3d::removeNaNFromPointCloud(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud)'],['../group__RemoveNaNFromPointCloud.html#ga2c98d8e54fff76606352c87edc378c31',1,'rtabmap::util3d::removeNaNFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud)'],['../group__RemoveNaNFromPointCloud.html#ga30ecdbed3fd26b750dcb0e63ea8c68b1',1,'rtabmap::util3d::removeNaNFromPointCloud(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud)'],['../group__RemoveNaNFromPointCloud.html#gab8b441e9acbafb0f36a0f4567e9535d6',1,'rtabmap::util3d::removeNaNFromPointCloud(const pcl::PCLPointCloud2::Ptr &cloud)']]], + ['removenannormalsfrompointcloud_40',['removenannormalsfrompointcloud',['../group__RemoveNaNNormalsFromPointCloud.html#ga3813dba7a0841937f37d9ecdaf526748',1,'rtabmap::util3d::removeNaNNormalsFromPointCloud(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud)'],['../group__RemoveNaNNormalsFromPointCloud.html#gafeeebb45de9c3cb8ac353f3cf867bc41',1,'rtabmap::util3d::removeNaNNormalsFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud)'],['../group__RemoveNaNNormalsFromPointCloud.html#ga42b9cf0558f56e1b00bd9ab1e2f1d0e6',1,'rtabmap::util3d::removeNaNNormalsFromPointCloud(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud)']]], + ['removerawdata_41',['removeRawData',['../classrtabmap_1_1Memory.html#acab72b1076370287ac28a1d464d480f0',1,'rtabmap::Memory']]], + ['removevirtuallinks_42',['removevirtuallinks',['../classrtabmap_1_1Signature.html#a328419f90f9dd8113dee4e38c9e30367',1,'rtabmap::Signature::removeVirtualLinks()'],['../classrtabmap_1_1Memory.html#aa77fb0f90185a274b3e9d0c609ce14ed',1,'rtabmap::Memory::removeVirtualLinks()']]], + ['removewords_43',['removeWords',['../classrtabmap_1_1VWDictionary.html#a7a506e15bf83d16cc98aaa34057216f4',1,'rtabmap::VWDictionary']]], + ['rename_44',['rename',['../classUFile.html#a725e2edf4b5f603bfc688e96c76858d4',1,'UFile::rename(const std::string &oldFilePath, const std::string &newFilePath)'],['../classUFile.html#a4918a111f92f2fdb7406fbd1661a1587',1,'UFile::rename(const std::string &newName)']]], + ['repeatonce_45',['repeatOnce',['../classrtabmap_1_1Registration.html#a7a9163259eaebff421953e194a623864',1,'rtabmap::Registration']]], + ['reproject_46',['reproject',['../classrtabmap_1_1CameraModel.html#a637a730717e42939449cd9f09e20db26',1,'rtabmap::CameraModel::reproject(float x, float y, float z, float &u, float &v) const'],['../classrtabmap_1_1CameraModel.html#a99204ef1a884478cf45b1503432b235b',1,'rtabmap::CameraModel::reproject(float x, float y, float z, int &u, int &v) const']]], + ['reset_47',['reset',['../classrtabmap_1_1OdometryMSCKF.html#a3be4ada7eebf234c87a3127a85988d97',1,'rtabmap::OdometryMSCKF::reset()'],['../classrtabmap_1_1OdometryF2M.html#a7a4b7219e339bbea7761601027f192d2',1,'rtabmap::OdometryF2M::reset()'],['../classrtabmap_1_1OdometryMono.html#a9574ccc748b5c4f664c059d460742457',1,'rtabmap::OdometryMono::reset()'],['../classrtabmap_1_1OdometryLOAM.html#a6acc7b4f164a8915ada550ba7c23ac0e',1,'rtabmap::OdometryLOAM::reset()'],['../classrtabmap_1_1OdometryLIOSAM.html#a7f72dbc28081ae774303dbf2d8cb5535',1,'rtabmap::OdometryLIOSAM::reset()'],['../classrtabmap_1_1OdometryFovis.html#a0175e1e923673028f1d647aaa185447c',1,'rtabmap::OdometryFovis::reset()'],['../classrtabmap_1_1OdometryFLOAM.html#a85105e691f68317b2816566cb7440e46',1,'rtabmap::OdometryFLOAM::reset()'],['../classULogger.html#a007b617547d616325e58003eb4352a19',1,'ULogger::reset()'],['../classrtabmap_1_1OdometryF2F.html#a7fb0eb46ed5b40e15299bc40b5cd4eb5',1,'rtabmap::OdometryF2F::reset()'],['../classrtabmap_1_1OdometryDVO.html#aa20fb31a7bf255caa1f13b0b69b2ee65',1,'rtabmap::OdometryDVO::reset()'],['../classrtabmap_1_1OdometryCuVSLAM.html#a4cb0a09fc8eb184b2e0d915980b02742',1,'rtabmap::OdometryCuVSLAM::reset()'],['../classrtabmap_1_1Odometry.html#a0ea20c39ae597a21e896b706662bb31c',1,'rtabmap::Odometry::reset()'],['../classrtabmap_1_1IMUFilter.html#a45b68e2127fc5a687ef6b7920bf9b39b',1,'rtabmap::IMUFilter::reset()'],['../classrtabmap_1_1BayesFilter.html#ad415ee334d31eebc3685e61862f32573',1,'rtabmap::BayesFilter::reset()'],['../classrtabmap_1_1OdometryOpen3D.html#a21fecb34185676d02d92c7ad18f13970',1,'rtabmap::OdometryOpen3D::reset()'],['../classrtabmap_1_1OdometryOpenVINS.html#abbf8f6be20990f3e39ad23325d72b41b',1,'rtabmap::OdometryOpenVINS::reset()'],['../classrtabmap_1_1OdometryORBSLAM2.html#ab127fac7aae296a68a9bf68ab02ffbbc',1,'rtabmap::OdometryORBSLAM2::reset()'],['../classrtabmap_1_1OdometryORBSLAM3.html#a57626265fa4c23fab95140ca9c1f8f93',1,'rtabmap::OdometryORBSLAM3::reset()'],['../classrtabmap_1_1OdometryVINSFusion.html#aa2fdb97067ad27d76c6315125a513ed3',1,'rtabmap::OdometryVINSFusion::reset()'],['../classrtabmap_1_1OdometryViso2.html#ad442b8186b72e220feace5fb0b0fec5c',1,'rtabmap::OdometryViso2::reset()'],['../classrtabmap_1_1OdometryOkvis.html#a81f51ca0b6f3b48f9e6a6e0e2d7b7118',1,'rtabmap::OdometryOkvis::reset()']]], + ['resetmemory_48',['resetMemory',['../classrtabmap_1_1Rtabmap.html#af12ae46226f33adf8c4cafbe1bcf544c',1,'rtabmap::Rtabmap']]], + ['resettimer_49',['resetTimer',['../classrtabmap_1_1SensorCapture.html#afa9923bb4a3b88e6dbf4c8ae7f060437',1,'rtabmap::SensorCapture']]], + ['restart_50',['restart',['../classUTimer.html#aa4db57cf682a403fba8ddf95d268d2a6',1,'UTimer']]], + ['rewind_51',['rewind',['../classUDirectory.html#aba596118c893215cf1a2981196864dca',1,'UDirectory']]], + ['right_52',['right',['../classrtabmap_1_1StereoCameraModel.html#ab8061141407d8cc55d7f83211708af85',1,'rtabmap::StereoCameraModel']]], + ['rightraw_53',['rightRaw',['../classrtabmap_1_1SensorData.html#aaa7408cb13ea2cbe33438e007b80de30',1,'rtabmap::SensorData']]], + ['roi_54',['roi',['../classrtabmap_1_1CameraModel.html#a2ff3290299c36b64ee880db2386f898f',1,'rtabmap::CameraModel::roi()'],['../classrtabmap_1_1StereoCameraModel.html#ac2fb1c489ae60bd7e4c104515db3c3a9',1,'rtabmap::StereoCameraModel::roi()']]], + ['roi_20computation_55',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]], + ['rotateimagesupsideupifnecessary_56',['rotateImagesUpsideUpIfNecessary',['../namespacertabmap_1_1util2d.html#a1577494ad9730181d5b768ca8237d5dd',1,'rtabmap::util2d']]], + ['rotation_57',['rotation',['../classrtabmap_1_1Transform.html#aeed78122de7f78a13641802b964d9631',1,'rtabmap::Transform']]], + ['rotationmatrix_58',['rotationMatrix',['../classrtabmap_1_1Transform.html#a23dfabecb7b2ad9c6a7fdcde08d900ab',1,'rtabmap::Transform']]], + ['rotvariance_59',['rotVariance',['../classrtabmap_1_1Link.html#a00cecebc9adf3ee5afb66d6ad63871e4',1,'rtabmap::Link']]], + ['rtabmap_60',['rtabmap',['../namespacertabmap.html',1,'rtabmap'],['../classrtabmap_1_1Rtabmap.html',1,'rtabmap::Rtabmap']]], + ['rtabmap_3a_3autil2d_61',['util2d',['../namespacertabmap_1_1util2d.html',1,'rtabmap']]], + ['rtabmap_5ft_5fopengl_62',['rtabmap_T_opengl',['../classrtabmap_1_1Transform.html#aa58ff702a149c05c930195d1ce42012e',1,'rtabmap::Transform']]], + ['rtabmapcoloroctree_63',['rtabmapcoloroctree',['../classrtabmap_1_1RtabmapColorOcTree.html',1,'rtabmap::RtabmapColorOcTree'],['../classrtabmap_1_1RtabmapColorOcTree.html#a357d9dd5513df9a4185d84f97c1d5a3f',1,'rtabmap::RtabmapColorOcTree::RtabmapColorOcTree(double resolution)']]], + ['rtabmapcoloroctreememberinit_64',['RtabmapColorOcTreeMemberInit',['../classrtabmap_1_1RtabmapColorOcTree.html#aa365df57ec5726f1d9ccff0c50a1cfbd',1,'rtabmap::RtabmapColorOcTree']]], + ['rtabmapcoloroctreenode_65',['RtabmapColorOcTreeNode',['../classrtabmap_1_1RtabmapColorOcTreeNode.html',1,'rtabmap']]], + ['rtabmapevent_66',['RtabmapEvent',['../classrtabmap_1_1RtabmapEvent.html',1,'rtabmap']]], + ['rtabmapevent3dmap_67',['RtabmapEvent3DMap',['../classrtabmap_1_1RtabmapEvent3DMap.html',1,'rtabmap']]], + ['rtabmapeventcmd_68',['RtabmapEventCmd',['../classrtabmap_1_1RtabmapEventCmd.html',1,'rtabmap']]], + ['rtabmapeventinit_69',['RtabmapEventInit',['../classrtabmap_1_1RtabmapEventInit.html',1,'rtabmap']]], + ['rtabmapglobalpathevent_70',['RtabmapGlobalPathEvent',['../classrtabmap_1_1RtabmapGlobalPathEvent.html',1,'rtabmap']]], + ['rtabmapgoalstatusevent_71',['RtabmapGoalStatusEvent',['../classrtabmap_1_1RtabmapGoalStatusEvent.html',1,'rtabmap']]], + ['rtabmaplabelerrorevent_72',['RtabmapLabelErrorEvent',['../classrtabmap_1_1RtabmapLabelErrorEvent.html',1,'rtabmap']]], + ['rtabmapthread_73',['RtabmapThread',['../classrtabmap_1_1RtabmapThread.html',1,'rtabmap']]], + ['rvlcodec_74',['RvlCodec',['../classrtabmap_1_1RvlCodec.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_16.js b/preview/pr-1492/api/latest/search/all_16.js new file mode 100644 index 00000000..a8118730 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_16.js @@ -0,0 +1,174 @@ +var searchData= +[ + ['sad_0',['sad',['../namespacertabmap_1_1util2d.html#a4cd865b8edc489f950b0c1b5e1a0c992',1,'rtabmap::util2d']]], + ['sampling_1',['Random Sampling',['../group__RandomSampling.html',1,'']]], + ['save_2',['save',['../classrtabmap_1_1CameraModel.html#ab5ec6010459c4e642e162dc8914bccb9',1,'rtabmap::CameraModel::save()'],['../classrtabmap_1_1StereoCameraModel.html#abfafd0a24795186f3bf623082663b4cd',1,'rtabmap::StereoCameraModel::save()']]], + ['save2dmap_3',['save2dmap',['../classrtabmap_1_1Memory.html#ac96fffe9fde99f7c74a06bbc5727be6b',1,'rtabmap::Memory::save2DMap()'],['../classrtabmap_1_1DBDriver.html#a5bed0d1f92c1cc864dedf99b99a44037',1,'rtabmap::DBDriver::save2DMap(const cv::Mat &map, float xMin, float yMin, float cellSize) const']]], + ['saveflannindex_4',['saveFlannIndex',['../classrtabmap_1_1DBDriver.html#a33c2abff50e61f35efbbdbe530963fea',1,'rtabmap::DBDriver']]], + ['savelasfile_5',['savelasfile',['../namespacertabmap.html#ad59cb4c65fba713c1a622904c5229198',1,'rtabmap::saveLASFile(const std::string &filePath, const pcl::PointCloud< pcl::PointXYZI > &cloud, const std::vector< int > &cameraIds=std::vector< int >())'],['../namespacertabmap.html#af174f507bee7dde4f9d45044d7bee8ea',1,'rtabmap::saveLASFile(const std::string &filePath, const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const std::vector< int > &cameraIds=std::vector< int >(), const std::vector< float > &intensities=std::vector< float >())'],['../namespacertabmap.html#a264208396318e0ecfe2af8f3aafe0374',1,'rtabmap::saveLASFile(const std::string &filePath, const pcl::PointCloud< pcl::PointXYZ > &cloud, const std::vector< int > &cameraIds=std::vector< int >())']]], + ['savelocationdata_6',['saveLocationData',['../classrtabmap_1_1Memory.html#a93119d10342db4a55c77b180cb249453',1,'rtabmap::Memory']]], + ['saveoptimizedmesh_7',['saveoptimizedmesh',['../classrtabmap_1_1DBDriver.html#a22d5643353b8d49bcc94c5a4abbc9a39',1,'rtabmap::DBDriver::saveOptimizedMesh()'],['../classrtabmap_1_1Memory.html#a7e16d27512d0daf17b9dbb17aab3b201',1,'rtabmap::Memory::saveOptimizedMesh(const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) const']]], + ['saveoptimizedposes_8',['saveoptimizedposes',['../classrtabmap_1_1Memory.html#ab7a2da56bb12845f0370a20a9497dfe0',1,'rtabmap::Memory::saveOptimizedPoses()'],['../classrtabmap_1_1DBDriver.html#ab91ad40e4273485e5f0951fac32c22e4',1,'rtabmap::DBDriver::saveOptimizedPoses()']]], + ['savepreviewimage_9',['savepreviewimage',['../classrtabmap_1_1Memory.html#affdd654e385b61306a2ac2ea91d13b85',1,'rtabmap::Memory::savePreviewImage()'],['../classrtabmap_1_1DBDriver.html#a8323a53d20e4ade6b1c7b268c473a170',1,'rtabmap::DBDriver::savePreviewImage()']]], + ['savestatistics_10',['saveStatistics',['../classrtabmap_1_1Memory.html#afbcfc92dc9bbc344ab106d2f21d93aaf',1,'rtabmap::Memory']]], + ['savestereotransform_11',['saveStereoTransform',['../classrtabmap_1_1StereoCameraModel.html#a1d016f499dbcce889ce7b7062c83b660',1,'rtabmap::StereoCameraModel']]], + ['scale_12',['scale',['../classrtabmap_1_1StereoCameraModel.html#a264d57ca1e0f6b41d03ffe1d89afc382',1,'rtabmap::StereoCameraModel']]], + ['scaled_13',['scaled',['../classrtabmap_1_1CameraModel.html#aecf2e87f260558dbf631e4803e1ed986',1,'rtabmap::CameraModel']]], + ['segmentcloud_14',['segmentCloud',['../classrtabmap_1_1LocalGridMaker.html#ad54b92f6d04b76a550483a7a68f45bda',1,'rtabmap::LocalGridMaker']]], + ['sensorcapture_15',['sensorcapture',['../classrtabmap_1_1SensorCapture.html',1,'rtabmap::SensorCapture'],['../classrtabmap_1_1SensorCapture.html#adf4b1dfd8e5b45b8eecf938a92dbae94',1,'rtabmap::SensorCapture::SensorCapture()']]], + ['sensorcaptureinfo_16',['sensorcaptureinfo',['../classrtabmap_1_1SensorCaptureInfo.html',1,'rtabmap::SensorCaptureInfo'],['../classrtabmap_1_1SensorCaptureInfo.html#a8f315fb6fe3a16b77e3252d66088db09',1,'rtabmap::SensorCaptureInfo::SensorCaptureInfo()']]], + ['sensorcapturethread_17',['sensorcapturethread',['../classrtabmap_1_1SensorCaptureThread.html#a2a64df180f19d0a2ea9a8d66ea58fc42',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Lidar *lidar, Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#a590aee9497d8a3b6e14b68e1e17f9c6a',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Lidar *lidar, SensorCapture *odomSensor, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#a9cf0e883ace51a2a656395327beb74e5',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Lidar *lidar, Camera *camera, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#a834d1e5c389e7ef8eb23bf1361916ae2',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Lidar *lidar, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#a76ad33a55009b7a7f7ec51acccbe0492',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#acae15b44b2fb05da9421dc88ff0be75c',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Camera *camera, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html',1,'rtabmap::SensorCaptureThread']]], + ['sensordata_18',['sensordata',['../classrtabmap_1_1SensorData.html#aead598774e0cb15375828a2965b3ab80',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#a52b215e8d320bbcbd464e3b7181a077b',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#a87424cc9915dababe9aa3bc418e85197',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ac06b8207850c5412cc52f5f0e0e4ba7b',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ad34a0a4ca3eac4a1c91fb7fb5068fb04',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1Signature.html#a0e7b1874613a7438ec1b2d9aa2634da8',1,'rtabmap::Signature::sensorData() const'],['../classrtabmap_1_1Signature.html#a24c257c2ff3fe156910ac82c41de8738',1,'rtabmap::Signature::sensorData()'],['../classrtabmap_1_1SensorData.html#a25efb0e7904a3daa7f4ee7cd814a24ff',1,'rtabmap::SensorData::SensorData(const IMU &imu, int id=0, double stamp=0.0)'],['../classrtabmap_1_1SensorData.html#a6ccaccf892f950b0caa03c07de3eab98',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#abdd07b6e248e165959468bb31897bc20',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#a1534d36fee45c3df70679438ec9d00a3',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ae0370b88671bb41812c2d39fd0cfc3ce',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ada69a11125b0b3072add73a3a2f1b5f2',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#a72a0250435fc194b1189241d4a47254d',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ae4498a6d017e83202dfe86618e91fa57',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ab6201ea27482207308f000bd4cc90081',1,'rtabmap::SensorData::SensorData(const cv::Mat &image, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())'],['../classrtabmap_1_1SensorData.html#a941f907890fe9e0e9becec0a665581cd',1,'rtabmap::SensorData::SensorData()'],['../classrtabmap_1_1SensorData.html#a14f7a5c64b5d27842cb654e247d1fd20',1,'rtabmap::SensorData::SensorData(const cv::Mat &image, const CameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())'],['../classrtabmap_1_1SensorData.html',1,'rtabmap::SensorData']]], + ['sensorevent_19',['sensorevent',['../classrtabmap_1_1SensorEvent.html',1,'rtabmap::SensorEvent'],['../classrtabmap_1_1SensorEvent.html#a1e35f9e5433d00628dd51876bc74fec5',1,'rtabmap::SensorEvent::SensorEvent(const SensorData &data, const SensorCaptureInfo &sensorCaptureInfo)'],['../classrtabmap_1_1SensorEvent.html#a1a47910aed70809eabfc195ca2515f85',1,'rtabmap::SensorEvent::SensorEvent(const SensorData &data, const std::string &cameraName)'],['../classrtabmap_1_1SensorEvent.html#a6e120cf7c4aea9201462c9cbb224b787',1,'rtabmap::SensorEvent::SensorEvent(const SensorData &data)'],['../classrtabmap_1_1SensorEvent.html#aef6624e43c3f7f29684072782a377e20',1,'rtabmap::SensorEvent::SensorEvent()'],['../classrtabmap_1_1SensorEvent.html#aa6c0584b85a70fe240f745c759948591',1,'rtabmap::SensorEvent::SensorEvent(const cv::Mat &image, int seq=0, double stamp=0.0, const std::string &cameraName=std::string())']]], + ['separator_20',['separator',['../classUDirectory.html#a66750846a899e436808d4eadbcafced0',1,'UDirectory']]], + ['serialize_21',['serialize',['../classrtabmap_1_1CameraModel.html#a5724619c7ac8c796fd8c63660e398082',1,'rtabmap::CameraModel::serialize()'],['../classrtabmap_1_1StereoCameraModel.html#a4eab6254ef808719ca2d0543c89e0722',1,'rtabmap::StereoCameraModel::serialize()']]], + ['serializedata_22',['serializeData',['../classrtabmap_1_1Statistics.html#ab34cfba17216b060f57e106d7c169685',1,'rtabmap::Statistics']]], + ['serializeindex_23',['serializeIndex',['../classrtabmap_1_1VWDictionary.html#a2864c406b3792dbfb7c8c334b6e44d41',1,'rtabmap::VWDictionary']]], + ['setaffinity_24',['setAffinity',['../classUThread.html#aabcf31acae6ca5b8503ec320acbc11f8',1,'UThread']]], + ['setaltitude_25',['setAltitude',['../classrtabmap_1_1GeodeticCoords.html#afe3c631b5f01246840f8591fc8dc834e',1,'rtabmap::GeodeticCoords']]], + ['setbuffered_26',['setBuffered',['../classULogger.html#ab981daf077b8afbf49c7bd185aa3b273',1,'ULogger']]], + ['setcachesize_27',['setCacheSize',['../classrtabmap_1_1DBDriverSqlite3.html#afc148e17cf8cc6ed4565c5519b06fc5c',1,'rtabmap::DBDriverSqlite3']]], + ['setcameramodel_28',['setCameraModel',['../classrtabmap_1_1SensorData.html#ad8ae172220b7bfffeb09bb1eac60f28f',1,'rtabmap::SensorData']]], + ['setcameramodels_29',['setCameraModels',['../classrtabmap_1_1SensorData.html#af841bbc9ea6de17124f8c871fa5d0719',1,'rtabmap::SensorData']]], + ['setchildregistration_30',['setChildRegistration',['../classrtabmap_1_1Registration.html#ac105402feeb2ec6551235296604145aa',1,'rtabmap::Registration']]], + ['setcoloronly_31',['setColorOnly',['../classrtabmap_1_1SensorCaptureThread.html#a6308c79599bd90b77d243febff024a15',1,'rtabmap::SensorCaptureThread']]], + ['setconstraints_32',['setConstraints',['../classrtabmap_1_1Statistics.html#ac4761222db6faee6c34c53c1d4d00ec2',1,'rtabmap::Statistics']]], + ['setcurrentgoalid_33',['setCurrentGoalId',['../classrtabmap_1_1Statistics.html#a845a35143a149c9670fb46938594fcb9',1,'rtabmap::Statistics']]], + ['setdbinmemory_34',['setDbInMemory',['../classrtabmap_1_1DBDriverSqlite3.html#a0722fcddc772af1cc03a7fe8b410d137',1,'rtabmap::DBDriverSqlite3']]], + ['setdistortionmodel_35',['setDistortionModel',['../classrtabmap_1_1SensorCaptureThread.html#aa7f6dcffcd6646994c2a87d8b888edcc',1,'rtabmap::SensorCaptureThread']]], + ['setdoomed_36',['setDoomed',['../classUDestroyer.html#aa3f030225d28ac7ad7059b9b64bde837',1,'UDestroyer']]], + ['setdualmode_37',['setDualMode',['../classrtabmap_1_1CameraRealSense2.html#ad9a5218ed20bad24c020a18e2ed0b12c',1,'rtabmap::CameraRealSense2']]], + ['setdummydictionary_38',['setdummydictionary',['../classrtabmap_1_1Rtabmap.html#a4d351e3f5ef809460afbb5a7702a500d',1,'rtabmap::Rtabmap::setDummyDictionary()'],['../classrtabmap_1_1Memory.html#a655f123daec9e4e50e322db9f3bbd6db',1,'rtabmap::Memory::setDummyDictionary()']]], + ['setenabled_39',['setEnabled',['../classrtabmap_1_1Signature.html#a51a08cbabd87eb0fd5045ffdb4cb3c00',1,'rtabmap::Signature']]], + ['setenvsensors_40',['setEnvSensors',['../classrtabmap_1_1SensorData.html#ab3a5ebf180d5f2f106877b78aee6d1d1',1,'rtabmap::SensorData']]], + ['seteventlevel_41',['setEventLevel',['../classULogger.html#ac0705dc7bc5da07ce27351eb6519e942',1,'ULogger']]], + ['setextended_42',['setExtended',['../classrtabmap_1_1Statistics.html#a938202c5836ba75d8eb06b0317712d06',1,'rtabmap::Statistics']]], + ['setfeatures_43',['setFeatures',['../classrtabmap_1_1SensorData.html#ad083f0a1e7769ff62183a0fa47279ae3',1,'rtabmap::SensorData']]], + ['setfixeddictionary_44',['setFixedDictionary',['../classrtabmap_1_1VWDictionary.html#a5f3712744b9f7beb5da186a842f7d74a',1,'rtabmap::VWDictionary']]], + ['setframerate_45',['setframerate',['../classrtabmap_1_1SensorCaptureThread.html#a416f1596701d6b9dbd8512cd1c617788',1,'rtabmap::SensorCaptureThread::setFrameRate()'],['../classrtabmap_1_1SensorCapture.html#a1e195970f52334094174783c5fd06456',1,'rtabmap::SensorCapture::setFrameRate()']]], + ['setglobaldescriptors_46',['setGlobalDescriptors',['../classrtabmap_1_1SensorData.html#ab6f18f2eb0340c8f6e800a695424bbbe',1,'rtabmap::SensorData']]], + ['setglobalpose_47',['setGlobalPose',['../classrtabmap_1_1SensorData.html#a72f0ce5a2989f478149f5cf2d5a36556',1,'rtabmap::SensorData']]], + ['setgps_48',['setGPS',['../classrtabmap_1_1SensorData.html#ad09e3e0fc1f60d233d81288a4cf8f56a',1,'rtabmap::SensorData']]], + ['setgroundtruth_49',['setGroundTruth',['../classrtabmap_1_1SensorData.html#a7051ea8c13bafd7eaffb5f5a93064808',1,'rtabmap::SensorData']]], + ['setgroundtruthpose_50',['setGroundTruthPose',['../classrtabmap_1_1Signature.html#aa8be86850b1277ce7c5eb4a5998e35e9',1,'rtabmap::Signature']]], + ['sethistogrammethod_51',['setHistogramMethod',['../classrtabmap_1_1SensorCaptureThread.html#a3e55c70032141f75802b2339c102c063',1,'rtabmap::SensorCaptureThread']]], + ['setid_52',['setId',['../classrtabmap_1_1SensorData.html#a4d0f4615a747eaef142b51a1ab1e5527',1,'rtabmap::SensorData']]], + ['setidentity_53',['setIdentity',['../classrtabmap_1_1Transform.html#afe833cfcd56f2f147091e7d309dadb36',1,'rtabmap::Transform']]], + ['setimagedecimation_54',['setImageDecimation',['../classrtabmap_1_1SensorCaptureThread.html#a74383f4e31ed642520511eb822ed1d89',1,'rtabmap::SensorCaptureThread']]], + ['setimagerate_55',['setImageRate',['../classrtabmap_1_1SensorCaptureThread.html#a2a40e01eb8e61aae54feeb1458efb88e',1,'rtabmap::SensorCaptureThread']]], + ['setimagesize_56',['setimagesize',['../classrtabmap_1_1CameraModel.html#a43fd48b917ca145876024859f8565931',1,'rtabmap::CameraModel::setImageSize()'],['../classrtabmap_1_1StereoCameraModel.html#a898c2eff7bfc4977703f8edb86ca1187',1,'rtabmap::StereoCameraModel::setImageSize()']]], + ['setimu_57',['setIMU',['../classrtabmap_1_1SensorData.html#a2297bfc9d81c077852d8f832231ba139',1,'rtabmap::SensorData']]], + ['setincrementaldictionary_58',['setIncrementalDictionary',['../classrtabmap_1_1VWDictionary.html#ab14ef6e8fb979dce23f9a40a1faf8dff',1,'rtabmap::VWDictionary']]], + ['setinfmatrix_59',['setInfMatrix',['../classrtabmap_1_1Link.html#a3a82104ae4195beff134811a3a19d939',1,'rtabmap::Link']]], + ['setinitialpose_60',['setInitialPose',['../classrtabmap_1_1Rtabmap.html#a9a9321531773f37cd5d7740495ede47f',1,'rtabmap::Rtabmap']]], + ['setjournalmode_61',['setJournalMode',['../classrtabmap_1_1DBDriverSqlite3.html#ae3c445bedd62088bb20e76eda6cfe64d',1,'rtabmap::DBDriverSqlite3']]], + ['setlabel_62',['setLabel',['../classrtabmap_1_1Signature.html#aa6dc3ad065ae2fd29afbbe69429f3a7b',1,'rtabmap::Signature']]], + ['setlabels_63',['setLabels',['../classrtabmap_1_1Statistics.html#aaa519c598aa7a56eda73653ab34d6b48',1,'rtabmap::Statistics']]], + ['setlandmarks_64',['setLandmarks',['../classrtabmap_1_1SensorData.html#af0873bbd79209dca371792e94e020e14',1,'rtabmap::SensorData']]], + ['setlaserscan_65',['setLaserScan',['../classrtabmap_1_1SensorData.html#a8fc1c848518793a1fe65c47a3ff729b0',1,'rtabmap::SensorData']]], + ['setlastsignaturedata_66',['setLastSignatureData',['../classrtabmap_1_1Statistics.html#ae5de0aae15a10ed18cc30c2656bd4d6a',1,'rtabmap::Statistics']]], + ['setlastwordid_67',['setLastWordId',['../classrtabmap_1_1VWDictionary.html#af0b676e13c7dba437147520335289e97',1,'rtabmap::VWDictionary']]], + ['setlatitude_68',['setLatitude',['../classrtabmap_1_1GeodeticCoords.html#a9113dd2d169f83e68b1dd0b12f8f24da',1,'rtabmap::GeodeticCoords']]], + ['setlevel_69',['setLevel',['../classULogger.html#ad8589bdaabddc1e9a260b890b1cf312e',1,'ULogger']]], + ['setlikelihood_70',['setLikelihood',['../classrtabmap_1_1Statistics.html#a8988eb66288df6a4d676b3cbd7b3a7ff',1,'rtabmap::Statistics']]], + ['setlocalizationcovariance_71',['setLocalizationCovariance',['../classrtabmap_1_1Statistics.html#a747aee7cd90f8318de6d0b82bedcd971',1,'rtabmap::Statistics']]], + ['setlocalpath_72',['setLocalPath',['../classrtabmap_1_1Statistics.html#a3c80bf518d943d9b86e5088a9269b455',1,'rtabmap::Statistics']]], + ['setlocaltransform_73',['setlocaltransform',['../classrtabmap_1_1CameraModel.html#aa1325c971f17d371553c3f75be7aeece',1,'rtabmap::CameraModel::setLocalTransform()'],['../classrtabmap_1_1StereoCameraModel.html#aee77882ceca428a560f5fd3713a330fb',1,'rtabmap::StereoCameraModel::setLocalTransform()'],['../classrtabmap_1_1SensorCapture.html#a0ea4e217047c234bcfcb9866e36ea7c0',1,'rtabmap::SensorCapture::setLocalTransform()']]], + ['setlongitude_74',['setLongitude',['../classrtabmap_1_1GeodeticCoords.html#aac1f8d7bcf0aff48aa8c7aefa91c72d3',1,'rtabmap::GeodeticCoords']]], + ['setloopclosureid_75',['setLoopClosureId',['../classrtabmap_1_1Statistics.html#a19272faba1c28279bb565464afa84645',1,'rtabmap::Statistics']]], + ['setloopclosuremapid_76',['setLoopClosureMapId',['../classrtabmap_1_1Statistics.html#a3b92ac9f165c77b2cc92f3fc6d7242cd',1,'rtabmap::Statistics']]], + ['setloopclosuretransform_77',['setLoopClosureTransform',['../classrtabmap_1_1Statistics.html#ac323334656165fd230cbe396836c6939',1,'rtabmap::Statistics']]], + ['setmapcorrection_78',['setMapCorrection',['../classrtabmap_1_1Statistics.html#a6a70e49f42639395a89edbde4659bf88',1,'rtabmap::Statistics']]], + ['setmemorythreshold_79',['setMemoryThreshold',['../classrtabmap_1_1Rtabmap.html#a6915ee0137b949837addcb5d3ac1646c',1,'rtabmap::Rtabmap']]], + ['setmirroringenabled_80',['setMirroringEnabled',['../classrtabmap_1_1SensorCaptureThread.html#a1cfabc2a5451ffe913f5691b80de514d',1,'rtabmap::SensorCaptureThread']]], + ['setmodified_81',['setModified',['../classrtabmap_1_1Signature.html#a245c8af68f7adec3813e3b062395769f',1,'rtabmap::Signature']]], + ['setname_82',['setname',['../classrtabmap_1_1CameraModel.html#a402a407fa2bca721087a6deda24cc10d',1,'rtabmap::CameraModel::setName()'],['../classrtabmap_1_1StereoCameraModel.html#adc404f0be63eedd0e0a9d6d5b5b36a94',1,'rtabmap::StereoCameraModel::setName()']]], + ['setnnstrategy_83',['setNNStrategy',['../classrtabmap_1_1VWDictionary.html#af60e271facb40ff668c4bc24cff1b9cc',1,'rtabmap::VWDictionary']]], + ['setnull_84',['setNull',['../classrtabmap_1_1Transform.html#af0020cf4093b8b1a3d1f68ee657b3662',1,'rtabmap::Transform']]], + ['setobj_85',['setObj',['../classUObjDeletionThread.html#a3a54e762b9f21750fe724bf78b48c653',1,'UObjDeletionThread']]], + ['setoccupancygrid_86',['setOccupancyGrid',['../classrtabmap_1_1SensorData.html#a5c12949c62c65281bade9ffcc681462b',1,'rtabmap::SensorData']]], + ['setodomasgroundtruth_87',['setOdomAsGroundTruth',['../classrtabmap_1_1SensorCaptureThread.html#a5a6a9ad20c75150f86ef479fe74ae6f7',1,'rtabmap::SensorCaptureThread']]], + ['setodomcacheconstraints_88',['setOdomCacheConstraints',['../classrtabmap_1_1Statistics.html#ae3d58759c1cc237b2e297c2c5f608725',1,'rtabmap::Statistics']]], + ['setodomcacheposes_89',['setOdomCachePoses',['../classrtabmap_1_1Statistics.html#a6032903dc163f7bc5d36c0520ccdfcef',1,'rtabmap::Statistics']]], + ['setoptimizedposes_90',['setOptimizedPoses',['../classrtabmap_1_1Rtabmap.html#a7a841702b925777620714fce7b41fd69',1,'rtabmap::Rtabmap']]], + ['setpath_91',['setPath',['../classUDirectory.html#aadfc0f6dfedc74bb6ef67dc87d6441f4',1,'UDirectory']]], + ['setpose_92',['setPose',['../classrtabmap_1_1Signature.html#aca4bf5db794637f0780f6eb2139a16f0',1,'rtabmap::Signature']]], + ['setposes_93',['setPoses',['../classrtabmap_1_1Statistics.html#acf7df1c7a8958a24988239fc40ece1ea',1,'rtabmap::Statistics']]], + ['setposterior_94',['setPosterior',['../classrtabmap_1_1Statistics.html#a915bb9bd90193a92f565f56024d61586',1,'rtabmap::Statistics']]], + ['setpredictionlc_95',['setPredictionLC',['../classrtabmap_1_1BayesFilter.html#a3255a54c1d2fc5b9a6db91fb38d591ae',1,'rtabmap::BayesFilter']]], + ['setprintcolored_96',['setPrintColored',['../classULogger.html#a773d95354adfe1fd1296f3b2f09668d3',1,'ULogger']]], + ['setprintendline_97',['setPrintEndline',['../classULogger.html#aa7cd59599601cdb214c6cb4df103dca0',1,'ULogger']]], + ['setprintlevel_98',['setPrintLevel',['../classULogger.html#a4a97457a98a02f60580e6f3c93f83d7a',1,'ULogger']]], + ['setprintthreadid_99',['setPrintThreadId',['../classULogger.html#a071b4484d0020a87760bbe282175724a',1,'ULogger']]], + ['setprinttime_100',['setPrintTime',['../classULogger.html#a2142b47257ecf1f2561afa8353eae411',1,'ULogger']]], + ['setprintwhere_101',['setPrintWhere',['../classULogger.html#af5a2e0f11770fcb457c1859c9f8b5ec3',1,'ULogger']]], + ['setprintwherefullpath_102',['setPrintWhereFullPath',['../classULogger.html#a2784b7a88339964e2a1c2b3436245bfc',1,'ULogger']]], + ['setpriority_103',['setPriority',['../classUThread.html#a80418be3a80a01ddd05a863b58787b43',1,'UThread']]], + ['setproximitydetectionid_104',['setProximityDetectionId',['../classrtabmap_1_1Statistics.html#a25b8a9b50054a80dc09423b6fe9f68ff',1,'rtabmap::Statistics']]], + ['setproximitydetectionmapid_105',['setProximityDetectionMapId',['../classrtabmap_1_1Statistics.html#a5e6df533a3c7a70d0391f7fe129e5eef',1,'rtabmap::Statistics']]], + ['setrate_106',['setRate',['../classrtabmap_1_1IMUThread.html#a3b646ffce1964e2ab6bc314dc4b27deb',1,'rtabmap::IMUThread']]], + ['setrawlikelihood_107',['setRawLikelihood',['../classrtabmap_1_1Statistics.html#a20a3634b3fbd36d86b1803f7427b105f',1,'rtabmap::Statistics']]], + ['setreducedids_108',['setReducedIds',['../classrtabmap_1_1Statistics.html#abf88d8f411f811549d91d29a5b78d308',1,'rtabmap::Statistics']]], + ['setrefimageid_109',['setRefImageId',['../classrtabmap_1_1Statistics.html#a4fa0c5aafea26effea2ed63d5bf3a31f',1,'rtabmap::Statistics']]], + ['setrefimagemapid_110',['setRefImageMapId',['../classrtabmap_1_1Statistics.html#a39895f500676995e2cc830169b80c7ca',1,'rtabmap::Statistics']]], + ['setresolution_111',['setResolution',['../classrtabmap_1_1CameraVideo.html#a7c8c8e9d343f78fdd17aad2db34dbecb',1,'rtabmap::CameraVideo']]], + ['setrgbdimage_112',['setRGBDImage',['../classrtabmap_1_1SensorData.html#a203770ef217dfdc67b98ca593b2cab24',1,'rtabmap::SensorData']]], + ['setsaved_113',['setsaved',['../classrtabmap_1_1Signature.html#a02c5d305492e3534e3799b8b7c78d912',1,'rtabmap::Signature::setSaved()'],['../classrtabmap_1_1VisualWord.html#a58f7ff50ca24f1586bf3fdf5999d6184',1,'rtabmap::VisualWord::setSaved()']]], + ['setscanparameters_114',['setscanparameters',['../classrtabmap_1_1SensorCaptureThread.html#a40f1016ea142c6117ffb080f64b4a854',1,'rtabmap::SensorCaptureThread::setScanParameters(bool fromDepth, int downsampleStep, float rangeMin, float rangeMax, float voxelSize, int normalsK, float normalsRadius, bool forceGroundNormalsUp, bool deskewing)'],['../classrtabmap_1_1SensorCaptureThread.html#a00a7a0e4f5277f6c6ed53bf832624c00',1,'rtabmap::SensorCaptureThread::setScanParameters(bool fromDepth, int downsampleStep=1, float rangeMin=0.0f, float rangeMax=0.0f, float voxelSize=0.0f, int normalsK=0, float normalsRadius=0.0f, float groundNormalsUp=0.0f, bool deskewing=false)']]], + ['setsignaturesdata_115',['setSignaturesData',['../classrtabmap_1_1Statistics.html#ad23568ea07d4ad167fcbd83a9083a2ef',1,'rtabmap::Statistics']]], + ['setstamp_116',['setstamp',['../classrtabmap_1_1SensorData.html#a5c0844e94d3fff50a8bfec2decf2f94c',1,'rtabmap::SensorData::setStamp()'],['../classrtabmap_1_1Statistics.html#a12bfc3ce8eb232a6ac3942af504bedef',1,'rtabmap::Statistics::setStamp()']]], + ['setstereocameramodel_117',['setStereoCameraModel',['../classrtabmap_1_1SensorData.html#ab2f74509af5e3f56d1c4d5e31c0c6003',1,'rtabmap::SensorData']]], + ['setstereocameramodels_118',['setStereoCameraModels',['../classrtabmap_1_1SensorData.html#ab4e6b5d917155b94d8b4b6242fe56c6e',1,'rtabmap::SensorData']]], + ['setstereoexposurecompensation_119',['setStereoExposureCompensation',['../classrtabmap_1_1SensorCaptureThread.html#a2c43f41518d914f2a3ae6959abcde989',1,'rtabmap::SensorCaptureThread']]], + ['setstereotodepth_120',['setStereoToDepth',['../classrtabmap_1_1SensorCaptureThread.html#ae0658121bc03f0eafd469ee114bc61f8',1,'rtabmap::SensorCaptureThread']]], + ['setsynchronous_121',['setSynchronous',['../classrtabmap_1_1DBDriverSqlite3.html#a187e2bbb52ae7f32a0fc79540f0f104b',1,'rtabmap::DBDriverSqlite3']]], + ['settempstore_122',['setTempStore',['../classrtabmap_1_1DBDriverSqlite3.html#a8f4adea749a2d30340715002056f9062',1,'rtabmap::DBDriverSqlite3']]], + ['settimethreshold_123',['setTimeThreshold',['../classrtabmap_1_1Rtabmap.html#a80add8fadd488d0c7781c249abea0d5d',1,'rtabmap::Rtabmap']]], + ['settreadidfilter_124',['setTreadIdFilter',['../classULogger.html#ada44d4afa869f1f9eab174a28c8a1acd',1,'ULogger']]], + ['settype_125',['setType',['../classULogger.html#a0fe73ce7c193ff399bca16b8d4d4cabb',1,'ULogger']]], + ['setuserdata_126',['setuserdata',['../classrtabmap_1_1Memory.html#aff18f08be0a7951f508276e341759f5c',1,'rtabmap::Memory::setUserData()'],['../classrtabmap_1_1Rtabmap.html#a037ddb5d737e0466d7610b88d8429bd6',1,'rtabmap::Rtabmap::setUserData()'],['../classrtabmap_1_1SensorData.html#accb5f254667af3074993a073a4e1f072',1,'rtabmap::SensorData::setUserData()']]], + ['setvelocity_127',['setVelocity',['../classrtabmap_1_1Signature.html#a1e48a2cde44ad1ecc2daaf5e8245e86a',1,'rtabmap::Signature']]], + ['setweight_128',['setWeight',['../classrtabmap_1_1Signature.html#a28cc9f0c8d553a24ef9e5227be1c99fe',1,'rtabmap::Signature']]], + ['setweights_129',['setWeights',['../classrtabmap_1_1Statistics.html#a918d447083cfcea3ab040e985461ae45',1,'rtabmap::Statistics']]], + ['setwmstate_130',['setWmState',['../classrtabmap_1_1Statistics.html#aa43870ba13369f23c122bff62f6654c8',1,'rtabmap::Statistics']]], + ['setwords_131',['setWords',['../classrtabmap_1_1Signature.html#a6fb8d04c4c2c8ee6f82d1eb65fd750a4',1,'rtabmap::Signature']]], + ['setwordsdescriptors_132',['setWordsDescriptors',['../classrtabmap_1_1Signature.html#a80565e1439be473d9c783d5c624b1a02',1,'rtabmap::Signature']]], + ['setworkingdirectory_133',['setWorkingDirectory',['../classrtabmap_1_1Rtabmap.html#a25028c3e8d8018c03f47f06150d76eab',1,'rtabmap::Rtabmap']]], + ['shareto_134',['shareTo',['../classrtabmap_1_1LocalGridCache.html#a6350523acd5ce71be45cd653071837fc',1,'rtabmap::LocalGridCache']]], + ['sift_135',['SIFT',['../classrtabmap_1_1SIFT.html',1,'rtabmap']]], + ['signature_136',['signature',['../classrtabmap_1_1Signature.html#a8e079b11910a45639a792158c40693ad',1,'rtabmap::Signature::Signature()'],['../classrtabmap_1_1Signature.html#aa3367bba5b890341238d93e642f847a7',1,'rtabmap::Signature::Signature(int id, int mapId=-1, int weight=0, double stamp=0.0, const std::string &label=std::string(), const Transform &pose=Transform(), const Transform &groundTruthPose=Transform(), const SensorData &sensorData=SensorData())'],['../classrtabmap_1_1Signature.html#af106b6a37909c236e22f5cac6150ce62',1,'rtabmap::Signature::Signature(const SensorData &data)'],['../classrtabmap_1_1Signature.html',1,'rtabmap::Signature']]], + ['single_20point_137',['Transform a single point',['../group__TransformPoint.html',1,'']]], + ['size_138',['size',['../classrtabmap_1_1Landmark.html#acba351c01c619a0d78e52e7bfca94111',1,'rtabmap::Landmark::size()'],['../classrtabmap_1_1Transform.html#a2cdd55b67e206a287e7bf4d248fb5256',1,'rtabmap::Transform::size()']]], + ['so_20_3a_20optional_139',['so : optional',['../group__UtiLite.html#audioLib',1,'Audio stuff (libutilite_audio.so : OPTIONAL)'],['../group__UtiLite.html#cvLib',1,'OpenCV stuff (libutilite_cv.so : OPTIONAL)'],['../group__UtiLite.html#qtLib',1,'Qt Widgets (libutilite_qt.so : OPTIONAL)']]], + ['split_20range_20filtering_20of_20pcl_20point_20clouds_140',['Split Range Filtering of PCL Point Clouds',['../group__PointCloudSplitRangeFiltering.html',1,'']]], + ['ssc_141',['SSC',['../namespacertabmap_1_1util2d.html#aa6957971e17f27bb066efe036d80fd46',1,'rtabmap::util2d']]], + ['ssd_142',['ssd',['../namespacertabmap_1_1util2d.html#a179e07ca5bc9581ff4782ae8f9d33521',1,'rtabmap::util2d']]], + ['stamp_143',['stamp',['../classrtabmap_1_1SensorCaptureInfo.html#ab9f52d419f810e3044f56583ed230902',1,'rtabmap::SensorCaptureInfo::stamp'],['../classrtabmap_1_1EnvSensor.html#a1bbcf9a834523dd2e91ef1ab8d31d5e4',1,'rtabmap::EnvSensor::stamp()'],['../classrtabmap_1_1GPS.html#a8620d60c593c641eb3be44ae41bec799',1,'rtabmap::GPS::stamp()'],['../classrtabmap_1_1SensorData.html#a566e5600bc0369f2f88ff0c597cefcfb',1,'rtabmap::SensorData::stamp()'],['../classrtabmap_1_1Statistics.html#a24a86b496c06f7d027ebb803b0ce70dd',1,'rtabmap::Statistics::stamp()']]], + ['start_144',['start',['../classUTimer.html#a10f628d8be04474d13c04b07c0426200',1,'UTimer::start()'],['../classUThread.html#a051e9adcf24f92b9c8e31acd06bad88c',1,'UThread::start()']]], + ['startdeletion_145',['startDeletion',['../classUObjDeletionThread.html#a2b4e12d9f11684b1378bb77a1a3c54b3',1,'UObjDeletionThread']]], + ['staticmemberinitializer_146',['StaticMemberInitializer',['../classrtabmap_1_1RtabmapColorOcTree_1_1StaticMemberInitializer.html',1,'rtabmap::RtabmapColorOcTree']]], + ['statistics_147',['statistics',['../classrtabmap_1_1Statistics.html#a5f5bf8e57410944ec46be25a5bf8ab46',1,'rtabmap::Statistics::Statistics()'],['../classrtabmap_1_1Statistics.html',1,'rtabmap::Statistics']]], + ['stereo_148',['stereo',['../classrtabmap_1_1Stereo.html#a1031c68f4e66690da216718382af0ab3',1,'rtabmap::Stereo::Stereo()'],['../classrtabmap_1_1Stereo.html',1,'rtabmap::Stereo']]], + ['stereobm_149',['stereobm',['../classrtabmap_1_1StereoBM.html#a33ff25f4afacce93201f509b78e5ca6f',1,'rtabmap::StereoBM::StereoBM(int blockSize, int numDisparities)'],['../classrtabmap_1_1StereoBM.html#a74970c7517eec90828dd03510c3e3db0',1,'rtabmap::StereoBM::StereoBM(const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1StereoBM.html',1,'rtabmap::StereoBM']]], + ['stereocameramodel_150',['stereocameramodel',['../classrtabmap_1_1StereoCameraModel.html#ae91c2717319f3cd7b6f40768e5adbb9f',1,'rtabmap::StereoCameraModel::StereoCameraModel(const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const cv::Mat &R=cv::Mat(), const cv::Mat &T=cv::Mat(), const cv::Mat &E=cv::Mat(), const cv::Mat &F=cv::Mat())'],['../classrtabmap_1_1StereoCameraModel.html#a8e3a5c32e13727545f2d22dda05c96b0',1,'rtabmap::StereoCameraModel::StereoCameraModel(const std::string &name, double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))'],['../classrtabmap_1_1StereoCameraModel.html#a0bdbbaa6e3ab315b0c5fce03247cea6c',1,'rtabmap::StereoCameraModel::StereoCameraModel(double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))'],['../classrtabmap_1_1StereoCameraModel.html#a76bab07a51033de989fc522064ede024',1,'rtabmap::StereoCameraModel::StereoCameraModel(const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const Transform &extrinsics)'],['../classrtabmap_1_1StereoCameraModel.html#a1887639053ef5c09c3f650b5a7f280d8',1,'rtabmap::StereoCameraModel::StereoCameraModel(const std::string &name, const cv::Size &imageSize1, const cv::Mat &K1, const cv::Mat &D1, const cv::Mat &R1, const cv::Mat &P1, const cv::Size &imageSize2, const cv::Mat &K2, const cv::Mat &D2, const cv::Mat &R2, const cv::Mat &P2, const cv::Mat &R, const cv::Mat &T, const cv::Mat &E, const cv::Mat &F, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0))'],['../classrtabmap_1_1StereoCameraModel.html#a179ffcbc49ff3a281ef33cb4381e061c',1,'rtabmap::StereoCameraModel::StereoCameraModel()'],['../classrtabmap_1_1StereoCameraModel.html',1,'rtabmap::StereoCameraModel']]], + ['stereocameramodels_151',['stereoCameraModels',['../classrtabmap_1_1SensorData.html#ab02d686ac7ef8b389655e913768b4d87',1,'rtabmap::SensorData']]], + ['stereodense_152',['stereodense',['../classrtabmap_1_1StereoDense.html#a57f0c431678a2c9db1b5f7dd46cbf49f',1,'rtabmap::StereoDense::StereoDense()'],['../classrtabmap_1_1StereoDense.html',1,'rtabmap::StereoDense']]], + ['stereoopticalflow_153',['stereoopticalflow',['../classrtabmap_1_1StereoOpticalFlow.html#a85173879ab911862112710fa1c94d8c5',1,'rtabmap::StereoOpticalFlow::StereoOpticalFlow()'],['../classrtabmap_1_1StereoOpticalFlow.html',1,'rtabmap::StereoOpticalFlow']]], + ['stereosgbm_154',['stereosgbm',['../classrtabmap_1_1StereoSGBM.html#ab7f04d815235b6ab8178e8572602dcd1',1,'rtabmap::StereoSGBM::StereoSGBM()'],['../classrtabmap_1_1StereoSGBM.html',1,'rtabmap::StereoSGBM']]], + ['stereotransform_155',['stereoTransform',['../classrtabmap_1_1StereoCameraModel.html#a506f83654d7f772a3743d24869c05742',1,'rtabmap::StereoCameraModel']]], + ['stl_156',['Convenient use of STL',['../group__UtiLite.html#stl',1,'']]], + ['stop_157',['stop',['../classUTimer.html#a6a517d6f5f6e6c28b9392d04be22a320',1,'UTimer']]], + ['strategyname_158',['strategyName',['../classrtabmap_1_1RegistrationIcp.html#aef9238a37e0b70c9368b2e20cfe7df12',1,'rtabmap::RegistrationIcp']]], + ['structural_20complexity_20of_20a_20point_20cloud_20with_20normals_159',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['stuff_20libutilite_5faudio_20so_20_3a_20optional_160',['Audio stuff (libutilite_audio.so : OPTIONAL)',['../group__UtiLite.html#audioLib',1,'']]], + ['stuff_20libutilite_5fcv_20so_20_3a_20optional_161',['OpenCV stuff (libutilite_cv.so : OPTIONAL)',['../group__UtiLite.html#cvLib',1,'']]], + ['subtract_20filtering_162',['Subtract Filtering',['../group__SubtractFiltering.html',1,'']]], + ['subtractfiltering_163',['subtractfiltering',['../group__SubtractFiltering.html#ga49d4f22e20984d271bb4c3240018eeed',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#ga69fb3ae457d192fd2c12631b0b5adf60',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZ >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#ga74d28899131bcb449b4d243a556c53aa',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gaf2bca73b4dc564bb6b2b7b779c718373',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &subtractCloud, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gaafd6fae4cac4f182d79e4507226165ef',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &subtractCloud, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#ga68cd453fcda96d2dba733650879f5d54',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::PointCloud< pcl::PointNormal >::Ptr &subtractCloud, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gad2840d4057963b7cb29c02ee15fca895',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &subtractCloud, float radiusSearch, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gae14131d7ab09a650fb1411a8252e5526',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZ >::Ptr &subtractCloud, float radiusSearch, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#ga1879c56f82037789aed799c484fb883a',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gad92c79e9320d8eae62053d01bb8ba9df',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointNormal >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)']]], + ['superpointrpautrat_164',['SuperPointRpautrat',['../classrtabmap_1_1SuperPointRpautrat.html',1,'rtabmap']]], + ['superpointtorch_165',['SuperPointTorch',['../classrtabmap_1_1SuperPointTorch.html',1,'rtabmap']]], + ['supported_20formats_3a_166',['Supported Formats:',['../util3d__transforms_8h.html#autotoc_md3',1,'']]], + ['supported_20input_20types_20and_20corresponding_20output_20data_3a_167',['Supported input types and corresponding output data:',['../group__LaserScanFromPointCloud.html#autotoc_md0',1,'']]], + ['surf_168',['SURF',['../classrtabmap_1_1SURF.html',1,'rtabmap']]], + ['surf_5fdaisy_169',['SURF_DAISY',['../classrtabmap_1_1SURF__DAISY.html',1,'rtabmap']]], + ['surf_5ffreak_170',['SURF_FREAK',['../classrtabmap_1_1SURF__FREAK.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_17.js b/preview/pr-1492/api/latest/search/all_17.js new file mode 100644 index 00000000..9d61002d --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_17.js @@ -0,0 +1,60 @@ +var searchData= +[ + ['t_0',['T',['../classrtabmap_1_1StereoCameraModel.html#a82d60ddca8d0cdbe939b043ed02334b6',1,'rtabmap::StereoCameraModel']]], + ['takedata_1',['takeData',['../classrtabmap_1_1SensorCapture.html#aca06c645212a7501a246ea593406bcaf',1,'rtabmap::SensorCapture']]], + ['theta_2',['theta',['../classrtabmap_1_1Transform.html#acc7f19107da9b048a43497f93dd39582',1,'rtabmap::Transform']]], + ['through_20filtering_3',['Pass-through Filtering',['../group__PassThrough.html',1,'']]], + ['timebilateralfiltering_4',['timeBilateralFiltering',['../classrtabmap_1_1SensorCaptureInfo.html#a0052a472c18e314445e2af75f11e3fe2',1,'rtabmap::SensorCaptureInfo']]], + ['timecapture_5',['timeCapture',['../classrtabmap_1_1SensorCaptureInfo.html#a14653b32350b0e5437d0effd8af03ddd',1,'rtabmap::SensorCaptureInfo']]], + ['timedeskewing_6',['timeDeskewing',['../classrtabmap_1_1SensorCaptureInfo.html#a94779ab38ab44408fd81df43338a03dd',1,'rtabmap::SensorCaptureInfo']]], + ['timedisparity_7',['timeDisparity',['../classrtabmap_1_1SensorCaptureInfo.html#ae7178e4a406254614a227904c08035a7',1,'rtabmap::SensorCaptureInfo']]], + ['timehistogramequalization_8',['timeHistogramEqualization',['../classrtabmap_1_1SensorCaptureInfo.html#aa5b8ab859cae2ef8b71b2768c9119204',1,'rtabmap::SensorCaptureInfo']]], + ['timeimagedecimation_9',['timeImageDecimation',['../classrtabmap_1_1SensorCaptureInfo.html#ad270963d02944fa0e93751304d7a14ae',1,'rtabmap::SensorCaptureInfo']]], + ['timemirroring_10',['timeMirroring',['../classrtabmap_1_1SensorCaptureInfo.html#a2e95b64dd13e9960460965f7121dc948',1,'rtabmap::SensorCaptureInfo']]], + ['timescanfromdepth_11',['timeScanFromDepth',['../classrtabmap_1_1SensorCaptureInfo.html#a0903975d22d60fe339a18c7f3f114934',1,'rtabmap::SensorCaptureInfo']]], + ['timestereoexposurecompensation_12',['timeStereoExposureCompensation',['../classrtabmap_1_1SensorCaptureInfo.html#a319070f2296632120e1101bf8ea18cda',1,'rtabmap::SensorCaptureInfo']]], + ['timetotal_13',['timeTotal',['../classrtabmap_1_1SensorCaptureInfo.html#a974419b0d05f9c56db0ec40258b56535',1,'rtabmap::SensorCaptureInfo']]], + ['timeundistortdepth_14',['timeUndistortDepth',['../classrtabmap_1_1SensorCaptureInfo.html#afddf554ad1f8a400d3c96c3ec1be61bf',1,'rtabmap::SensorCaptureInfo']]], + ['to_202d_20laserscan_15',['PCL to 2D LaserScan',['../group__LaserScan2dFromPointCloud.html',1,'']]], + ['to_203d_20laserscan_16',['PCL to 3D LaserScan',['../group__LaserScanFromPointCloud.html',1,'']]], + ['to_20pcl_17',['LaserScan to PCL',['../group__LaserScanToPointCloud.html',1,'']]], + ['to3dof_18',['to3DoF',['../classrtabmap_1_1Transform.html#a3a1b7b3d9f2db760b8eff9f3f90cd405',1,'rtabmap::Transform']]], + ['to4dof_19',['to4DoF',['../classrtabmap_1_1Transform.html#a9b0c23cbc2d0938b8da638930cb109de',1,'rtabmap::Transform']]], + ['tobool_20',['toBool',['../classUVariant.html#aef09280be48b33bcc066de2a636be31f',1,'UVariant']]], + ['tochar_21',['toChar',['../classUVariant.html#aa2efe71a7dbf953c26134281c815c489',1,'UVariant']]], + ['tochararray_22',['toCharArray',['../classUVariant.html#ae51189767aa02abd8a538b183f95f993',1,'UVariant']]], + ['todouble_23',['toDouble',['../classUVariant.html#a4c4ce1241a89ab635c0cdb04b3f3b0e9',1,'UVariant']]], + ['todoublearray_24',['toDoubleArray',['../classUVariant.html#a2b36afe6bf8f22f4e46d31596a2bbf74',1,'UVariant']]], + ['toenu_5fwgs84_25',['toENU_WGS84',['../classrtabmap_1_1GeodeticCoords.html#aedf48d8bfb2c8c181b1382919bf7b44c',1,'rtabmap::GeodeticCoords']]], + ['tofloat_26',['toFloat',['../classUVariant.html#a193ad2132d39551e780f813f38b174f1',1,'UVariant']]], + ['tofloatarray_27',['toFloatArray',['../classUVariant.html#acf89922efcc2fc0bea692623c8de4f8c',1,'UVariant']]], + ['togeocentric_5fwgs84_28',['toGeocentric_WGS84',['../classrtabmap_1_1GeodeticCoords.html#ae92c7ff2c0b5c5a41902bdfd589d5c10',1,'rtabmap::GeodeticCoords']]], + ['togeodeticcoords_29',['toGeodeticCoords',['../classrtabmap_1_1GPS.html#a2eeb2607721870789914f12688cbc375',1,'rtabmap::GPS']]], + ['toint_30',['toInt',['../classUVariant.html#aad652810c6faa5e0497049157b5b2a10',1,'UVariant']]], + ['tointarray_31',['toIntArray',['../classUVariant.html#a8ee57d98adc4f8c2798c3ba1b86f54b1',1,'UVariant']]], + ['toshort_32',['toShort',['../classUVariant.html#acd84cd8b255640810073c10331cf13b6',1,'UVariant']]], + ['toshortarray_33',['toShortArray',['../classUVariant.html#abae96c1d3abc90aea321a460d63250cb',1,'UVariant']]], + ['tostr_34',['toStr',['../classUVariant.html#a67cc47b07b28108ae018790073541438',1,'UVariant']]], + ['totaltime_35',['totalTime',['../classrtabmap_1_1RegistrationInfo.html#a52c83dd2b8f59c4ed360dc0eadc5de57',1,'rtabmap::RegistrationInfo']]], + ['touchar_36',['toUChar',['../classUVariant.html#a1791fbefb946a8803f87f5049135eea7',1,'UVariant']]], + ['touchararray_37',['toUCharArray',['../classUVariant.html#ab7346a22ad30fb42e3b0e1750f6ba8e6',1,'UVariant']]], + ['touint_38',['toUInt',['../classUVariant.html#aa129ebd6447838c1584145e843e6c4e8',1,'UVariant']]], + ['touintarray_39',['toUIntArray',['../classUVariant.html#ad0aa83f26922b59194e69312ee771173',1,'UVariant']]], + ['toushort_40',['toUShort',['../classUVariant.html#a5e6282c19acb4de5a29f55143d451f60',1,'UVariant']]], + ['toushortarray_41',['toUShortArray',['../classUVariant.html#a40b1bccc560ab55190d3608ea0115bb2',1,'UVariant']]], + ['transform_42',['transform',['../classrtabmap_1_1Transform.html',1,'rtabmap::Transform'],['../classrtabmap_1_1Transform.html#af434ccbc426920a1b35ecbf4eec226e7',1,'rtabmap::Transform::Transform(float x, float y, float theta)'],['../classrtabmap_1_1Transform.html#af471c17a5e411db55813b766727830f4',1,'rtabmap::Transform::Transform(float x, float y, float z, float qx, float qy, float qz, float qw)'],['../classrtabmap_1_1Transform.html#a1023adcd1e5d65647e6eda50160c3474',1,'rtabmap::Transform::Transform(float x, float y, float z, float roll, float pitch, float yaw)'],['../classrtabmap_1_1Transform.html#a82b851897ce2ca729d62fb92dcc48b9f',1,'rtabmap::Transform::Transform(const cv::Mat &transformationMatrix)'],['../classrtabmap_1_1Transform.html#a9b89b8bbe9cd75986bcb1ba6ceb5b9cd',1,'rtabmap::Transform::Transform(float r11, float r12, float r13, float o14, float r21, float r22, float r23, float o24, float r31, float r32, float r33, float o34)'],['../classrtabmap_1_1Transform.html#ac3654d3f6802d4b0c17b6110d1eda71a',1,'rtabmap::Transform::Transform()']]], + ['transform_20a_20single_20point_43',['Transform a single point',['../group__TransformPoint.html',1,'']]], + ['transform_20pcl_20point_20clouds_44',['Transform PCL Point Clouds',['../group__TransformPointcloud.html',1,'']]], + ['transformpoint_45',['transformpoint',['../group__TransformPoint.html#gad98c1e7ba04edb9a57c5557d88360afd',1,'rtabmap::util3d::transformPoint(const pcl::PointNormal &point, const Transform &transform)'],['../group__TransformPoint.html#gae272348c0353fe96683680b981a6b0fa',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZINormal &point, const Transform &transform)'],['../group__TransformPoint.html#ga8cf51597b74c589365d2e0e2272bea70',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZRGBNormal &point, const Transform &transform)'],['../group__TransformPoint.html#ga88b4f827a105254bf08bdae73cebdbe9',1,'rtabmap::util3d::transformPoint(const cv::Point3f &pt, const Transform &transform)'],['../group__TransformPoint.html#ga4910f2b937d405bd529772c33d477ca4',1,'rtabmap::util3d::transformPoint(const cv::Point3d &pt, const Transform &transform)'],['../group__TransformPoint.html#ga2ad96e68847f315e6d5df18d3219f308',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZ &pt, const Transform &transform)'],['../group__TransformPoint.html#ga7bfb9d7e10b81cd3b5e3f164081388be',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZI &pt, const Transform &transform)'],['../group__TransformPoint.html#ga90e6ffecb159bdff5afc75e16ab1fe19',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZRGB &pt, const Transform &transform)']]], + ['transformpointcloud_46',['transformpointcloud',['../group__TransformPointcloud.html#ga00514f671b8dbcc343ff481aa7c36367',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#ga47713c64205eb83460cfeec9a7bb6659',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#ga46b86abad0f4aa2ba7f191da0e07ba69',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga7a573f91887b29ec4ff2ef6355df4473',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga18eb2c9ec062b5453bf7c97128d89018',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga310e525344813377f2d470d47b7c4d51',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga1387b7a1d5280ed3596331f93fc56484',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#gac60701fa37d61f3cbe6f462da7576e73',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga59e54f906ba844eb8780946e57b0e271',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#ga2a621fc8ab625cd4003b4f26e0ce3b52',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#ga797f466a165622e08dda14cdaccb5df6',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#gac7c95eba604afe62ab897df62d862220',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)']]], + ['transformstamped_47',['TransformStamped',['../classrtabmap_1_1TransformStamped.html',1,'rtabmap']]], + ['translation_48',['translation',['../classrtabmap_1_1Transform.html#aeeb0bbe0e84a9e46f63086c3ff4d4e0e',1,'rtabmap::Transform']]], + ['translationmatrix_49',['translationMatrix',['../classrtabmap_1_1Transform.html#a6a7bb81847554509d1128238860c047e',1,'rtabmap::Transform']]], + ['transvariance_50',['transVariance',['../classrtabmap_1_1Link.html#a3c4344c01b4f32a8b4a957b979fea84e',1,'rtabmap::Link']]], + ['triggernewmap_51',['triggerNewMap',['../classrtabmap_1_1Rtabmap.html#a4ab6de2be120bbda75577911d52346d4',1,'rtabmap::Rtabmap']]], + ['two_20point_20clouds_52',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]], + ['tx_53',['Tx',['../classrtabmap_1_1CameraModel.html#a6f6dc18af13a777e89a75725ef3e8ab4',1,'rtabmap::CameraModel']]], + ['type_54',['type',['../classrtabmap_1_1EnvSensor.html#abae79475fe7e568269a4b4ef4c5a7d24',1,'rtabmap::EnvSensor::type()'],['../classrtabmap_1_1Feature2D.html#a7453189891e489bbcff1f2c971d04fde',1,'rtabmap::Feature2D::Type'],['../classrtabmap_1_1IMUFilter.html#a1332e06cbd6b83c0532e6d71523cdb83',1,'rtabmap::IMUFilter::Type'],['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91e',1,'rtabmap::Link::Type'],['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849',1,'rtabmap::Odometry::Type'],['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16',1,'rtabmap::Optimizer::Type'],['../classrtabmap_1_1Registration.html#ae693713cd8b7ece4b147eae99880b849',1,'rtabmap::Registration::Type'],['../classrtabmap_1_1StereoDense.html#a54329152938c4ca1f259dcb8fa7d8803',1,'rtabmap::StereoDense::Type'],['../classULogger.html#aab74fc95f6494a3a2137d9094fe100d8',1,'ULogger::Type'],['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bd',1,'UVariant::Type'],['../classrtabmap_1_1IMUFilter.html#ab6dc95a6f031745a33599646e75ff9f6',1,'rtabmap::IMUFilter::type()'],['../classrtabmap_1_1Optimizer.html#aa2be82e1f986b1beae103148be7cd520',1,'rtabmap::Optimizer::type()'],['../classrtabmap_1_1OptimizerCeres.html#ad6d6c0a0cdbea0ee5082d3aaa94d8e7a',1,'rtabmap::OptimizerCeres::type()'],['../classrtabmap_1_1OptimizerCVSBA.html#afbf58e60900671630e0974a13e49b2b0',1,'rtabmap::OptimizerCVSBA::type()'],['../classrtabmap_1_1OptimizerG2O.html#af69edaad65a7f7f936fa99f8c617e10b',1,'rtabmap::OptimizerG2O::type()'],['../classrtabmap_1_1OptimizerGTSAM.html#a422fe2960e4b71832e2108d5ab2aee46',1,'rtabmap::OptimizerGTSAM::type()'],['../classrtabmap_1_1OptimizerTORO.html#a965efb877ac5edd3b6cda43983096a64',1,'rtabmap::OptimizerTORO::type()'],['../classUVariant.html#a4fa9e6607b2d99ba03d09bd39f42da4f',1,'UVariant::type()'],['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30f',1,'rtabmap::EnvSensor::Type']]], + ['typename_55',['typename',['../classrtabmap_1_1Feature2D.html#a98050ef4da598e5b35bc32317bc58b84',1,'rtabmap::Feature2D::typeName()'],['../classrtabmap_1_1Link.html#a1fb9569f6435b5a1c800a935b08f0159',1,'rtabmap::Link::typeName()']]], + ['types_20and_20corresponding_20output_20data_3a_56',['Supported input types and corresponding output data:',['../group__LaserScanFromPointCloud.html#autotoc_md0',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_18.js b/preview/pr-1492/api/latest/search/all_18.js new file mode 100644 index 00000000..88fc15ca --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_18.js @@ -0,0 +1,126 @@ +var searchData= +[ + ['uappend_0',['uAppend',['../UStl_8h.html#a472c2e123cd6eb04165b2d3461a634d3',1,'UStl.h']]], + ['uascii2hex_1',['uAscii2Hex',['../UConversion_8h.html#a6c8b49faa5c59294f350dda7152f66a4',1,'UConversion.h']]], + ['uassert_2',['UASSERT',['../ULogger_8h.html#ab3436168e27946669bbd4c76e4c4007e',1,'ULogger.h']]], + ['ubool2str_3',['uBool2Str',['../UConversion_8h.html#ad80132c4fed005af5c96b39fca453ce6',1,'UConversion.h']]], + ['ubytes2hex_4',['uBytes2Hex',['../UConversion_8h.html#a51c595b50bcb99186160a9e18df13c60',1,'UConversion.h']]], + ['ubytes2str_5',['uBytes2Str',['../UConversion_8h.html#a00c1115896f3da7c7c025ccbe651c0a3',1,'UConversion.h']]], + ['ucontains_6',['ucontains',['../UStl_8h.html#a4cad7064de642559152c873f2ca9a471',1,'uContains(const std::list< V > &list, const V &value): UStl.h'],['../UStl_8h.html#a601d3abba756f3a7a666d463080d159c',1,'uContains(const std::map< K, V > &map, const K &key): UStl.h'],['../UStl_8h.html#a078a72c8c7cf5821d67140f3d38f27e0',1,'uContains(const std::multimap< K, V > &map, const K &key): UStl.h']]], + ['uconversion_2eh_7',['UConversion.h',['../UConversion_8h.html',1,'']]], + ['udebug_8',['UDEBUG',['../ULogger_8h.html#a9104cb408bf9019db2a2c4476835db4a',1,'ULogger.h']]], + ['udestroyer_9',['udestroyer',['../classUDestroyer.html#abbc66cb8c688f1c93e87ea9aa46e58ee',1,'UDestroyer::UDestroyer()'],['../classUDestroyer.html',1,'UDestroyer< T >']]], + ['udestroyer_3c_20ueventsmanager_20_3e_10',['UDestroyer< UEventsManager >',['../classUDestroyer.html',1,'']]], + ['udestroyer_3c_20ulogger_20_3e_11',['UDestroyer< ULogger >',['../classUDestroyer.html',1,'']]], + ['udirectory_12',['udirectory',['../classUDirectory.html#ac2063a33161b07a0c9e841cc1ee5fcaf',1,'UDirectory::UDirectory()'],['../classUDirectory.html',1,'UDirectory']]], + ['udirectory_20ufile_13',['UDirectory, UFile',['../group__UtiLite.html#filedir',1,'']]], + ['uerror_14',['UERROR',['../ULogger_8h.html#a1249ddbc4c9cc43be53048c08dda129b',1,'ULogger.h']]], + ['uevent_15',['uevent',['../classUEvent.html',1,'UEvent'],['../classUEvent.html#a662b610c2e9ebaae5e91ed5ea1dcef34',1,'UEvent::UEvent()'],['../group__UtiLite.html#eventsmanager',1,'UEventsManager, UEventsHandler, UEvent']]], + ['ueventdispatcher_16',['UEventDispatcher',['../classUEventDispatcher.html',1,'']]], + ['ueventshandler_17',['ueventshandler',['../classUEventsHandler.html',1,'UEventsHandler'],['../classUEventsHandler.html#abfe2ba3d1fb92e59aff1978cbc21d134',1,'UEventsHandler::UEventsHandler()']]], + ['ueventshandler_20uevent_18',['UEventsManager, UEventsHandler, UEvent',['../group__UtiLite.html#eventsmanager',1,'']]], + ['ueventsmanager_19',['ueventsmanager',['../classUEventsManager.html',1,'UEventsManager'],['../classUEventsHandler.html#a977152b27d4c918d79a2db23ed85bfa6',1,'UEventsHandler::UEventsManager']]], + ['ueventsmanager_20ueventshandler_20uevent_20',['UEventsManager, UEventsHandler, UEvent',['../group__UtiLite.html#eventsmanager',1,'']]], + ['ueventssender_21',['UEventsSender',['../classUEventsSender.html',1,'']]], + ['uexception_22',['UException',['../classUException.html',1,'']]], + ['ufatal_23',['UFATAL',['../ULogger_8h.html#aabc10368a622911d56a4dd5a4b461385',1,'ULogger.h']]], + ['ufile_24',['ufile',['../group__UtiLite.html#filedir',1,'UDirectory, UFile'],['../classUFile.html',1,'UFile'],['../classUFile.html#a19572c749b383b5fc15aca3615cdc682',1,'UFile::UFile()']]], + ['uformat_25',['uFormat',['../UConversion_8h.html#a59ad5e2b3368d3dd19d73a24159388ce',1,'UConversion.h']]], + ['uformatv_26',['uFormatv',['../UConversion_8h.html#a9b62bc055b0d262a21af6b9e00b6db5f',1,'UConversion.h']]], + ['uhamming_27',['uHamming',['../UMath_8h.html#add815f68a7ad0f18c667311826a85a52',1,'UMath.h']]], + ['uhex2ascii_28',['uHex2Ascii',['../UConversion_8h.html#a03dfb0596b84e5673061561a1388b4ee',1,'UConversion.h']]], + ['uhex2bytes_29',['uhex2bytes',['../UConversion_8h.html#aafb2c6939780df0241eb35ab4fc8b91b',1,'uHex2Bytes(const std::string &hex): UConversion.h'],['../UConversion_8h.html#ab4e6aa72e322c619e4bbaf5b98dba9d3',1,'uHex2Bytes(const char *hex, int hexLen): UConversion.h']]], + ['uhex2str_30',['uHex2Str',['../UConversion_8h.html#a6d66453336bccd040539ac9905a9c409',1,'UConversion.h']]], + ['uindexof_31',['uIndexOf',['../UStl_8h.html#ad3918a32500de71ba8bb7aab99dccf46',1,'UStl.h']]], + ['uinfo_32',['UINFO',['../ULogger_8h.html#a5b63c9a1441181723754c0c6084231a8',1,'ULogger.h']]], + ['uinsert_33',['uinsert',['../UStl_8h.html#ac9c9d1520c7facb601ae56cab3762b41',1,'uInsert(std::map< K, V > &map, const std::pair< K, V > &pair): UStl.h'],['../UStl_8h.html#af516369e4f6b3977e543dfadbc50dc31',1,'uInsert(std::map< K, V > &map, const std::map< K, V > &items): UStl.h']]], + ['uisdigit_34',['uIsDigit',['../UStl_8h.html#ad24f845084c84b60614bb789e0d1966a',1,'UStl.h']]], + ['uisfinite_35',['uIsFinite',['../UMath_8h.html#abc9c1a676bf1b33a7d2bc0452a04fed3',1,'UMath.h']]], + ['uisinteger_36',['uIsInteger',['../UStl_8h.html#afa021f46be20f6e6c2e5210eced0ae0e',1,'UStl.h']]], + ['uisnan_37',['uIsNan',['../UMath_8h.html#a0ce262f6e3a80f7efafc73052600d309',1,'UMath.h']]], + ['uisnumber_38',['uIsNumber',['../UStl_8h.html#a5ed24437c4b893ed09886ea64ea33ba0',1,'UStl.h']]], + ['uiteratorat_39',['uiteratorat',['../UStl_8h.html#aca319f475b50c21cd5a1ad7e13b45d68',1,'uIteratorAt(const std::vector< V > &v, const unsigned int &pos): UStl.h'],['../UStl_8h.html#aee9c8ca5f61ce7b0d778a092e4dd7d16',1,'uIteratorAt(std::vector< V > &v, const unsigned int &pos): UStl.h'],['../UStl_8h.html#a06a98a13ef2041e0553e6c8a61c81b9e',1,'uIteratorAt(const std::set< V > &set, const unsigned int &pos): UStl.h'],['../UStl_8h.html#a14d41e1a496b95a083f98d1b6c3d829b',1,'uIteratorAt(std::set< V > &set, const unsigned int &pos): UStl.h'],['../UStl_8h.html#a89bf42f074b0882296f02e7b7e7f03ce',1,'uIteratorAt(const std::list< V > &list, const unsigned int &pos): UStl.h'],['../UStl_8h.html#aa8bd447989a2ac6dbd4537cabdb9b8a2',1,'uIteratorAt(std::list< V > &list, const unsigned int &pos): UStl.h']]], + ['ujoin_40',['uJoin',['../UStl_8h.html#a2a1ab992e6cc8d3057000847eea5b2e0',1,'UStl.h']]], + ['ukeys_41',['ukeys',['../UStl_8h.html#a1f58dc31a71daf05032ea06518098021',1,'uKeys(const std::map< K, V > &m): UStl.h'],['../UStl_8h.html#aa67c880cc8f27c9270c7bd4bdce62ca7',1,'uKeys(const std::multimap< K, V > &mm): UStl.h']]], + ['ukeyslist_42',['ukeyslist',['../UStl_8h.html#a07de105144c60cbf3d96725c2587ab61',1,'uKeysList(const std::map< K, V > &m): UStl.h'],['../UStl_8h.html#ae6db6e3e229492a7d62f310705eda986',1,'uKeysList(const std::multimap< K, V > &mm): UStl.h']]], + ['ukeysset_43',['uKeysSet',['../UStl_8h.html#adc7941aec77b49687c0cb79be23eb539',1,'UStl.h']]], + ['ulisttovector_44',['uListToVector',['../UStl_8h.html#a85cf086e57dd289775cf2fd7c82a6ffe',1,'UStl.h']]], + ['ulocalmaxima_45',['ulocalmaxima',['../UMath_8h.html#a2feb416e779b88c4a6a849d609222c99',1,'uLocalMaxima(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#a321ec84227fff8bf26aa85b0d3be5bb7',1,'uLocalMaxima(const std::vector< T > &v): UMath.h']]], + ['ulogevent_46',['ulogevent',['../classULogEvent.html',1,'ULogEvent'],['../classULogEvent.html#aa403fb381a5bfd2986f08c10f0b1b24e',1,'ULogEvent::ULogEvent()']]], + ['ulogger_47',['ulogger',['../classULogger.html',1,'ULogger'],['../group__UtiLite.html#logger',1,'ULogger']]], + ['ulogger_2eh_48',['ULogger.h',['../ULogger_8h.html',1,'']]], + ['umath_2eh_49',['UMath.h',['../UMath_8h.html',1,'']]], + ['umax_50',['umax',['../UMath_8h.html#a387b43468da220548d025010be075476',1,'uMax(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#a0aef304a0891fafcef581dcfbf3ac792',1,'uMax(const std::vector< T > &v): UMath.h'],['../UMath_8h.html#a429cc62f1ca3c7a00e0062301ae60bcc',1,'uMax(const std::vector< T > &v, unsigned int &index): UMath.h'],['../UMath_8h.html#a1362990d0ce7f09ef735292cc480fa23',1,'uMax(const T *v, unsigned int size, unsigned int &index): UMath.h']]], + ['umax3_51',['uMax3',['../UMath_8h.html#a601a7e18acb1512a60cd8ef248271c85',1,'UMath.h']]], + ['umean_52',['umean',['../UMath_8h.html#a7376638ab6047306c66a357153a47196',1,'uMean(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#aa4e1e6cf3df49d68d95bbe9981d1600e',1,'uMean(const std::list< T > &list): UMath.h'],['../UMath_8h.html#a8c8cd8ce7b3d8f32847bb57e9f73a625',1,'uMean(const std::vector< T > &v): UMath.h']]], + ['umeansquarederror_53',['umeansquarederror',['../UMath_8h.html#a28770817787def2a9165ed070fa17a54',1,'uMeanSquaredError(const T *x, unsigned int sizeX, const T *y, unsigned int sizeY): UMath.h'],['../UMath_8h.html#a319bcffddfeab66d5cbb729fa56dd361',1,'uMeanSquaredError(const std::vector< T > &x, const std::vector< T > &y): UMath.h']]], + ['umin_54',['umin',['../UMath_8h.html#aeb0652d64e72d115d751f8186ac9016e',1,'uMin(const std::vector< T > &v): UMath.h'],['../UMath_8h.html#a68e11ea992520b98d4e688f8853b5dc4',1,'uMin(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#a99bd3bc365630c1760432cf810ea5831',1,'uMin(const std::vector< T > &v, unsigned int &index): UMath.h'],['../UMath_8h.html#aa37a66d04825a8834648dbe931bd57e6',1,'uMin(const T *v, unsigned int size, unsigned int &index): UMath.h']]], + ['umin3_55',['uMin3',['../UMath_8h.html#ad653f26bbf08ce113b5a69a49bb4e41d',1,'UMath.h']]], + ['uminmax_56',['uminmax',['../UMath_8h.html#af5f7ebda9d440043cd3c57037e81318b',1,'uMinMax(const std::vector< T > &v, T &min, T &max): UMath.h'],['../UMath_8h.html#af9bfdafb6da16f9c6f4691a6d951538b',1,'uMinMax(const T *v, unsigned int size, T &min, T &max, unsigned int &indexMin, unsigned int &indexMax): UMath.h'],['../UMath_8h.html#a23b93249fbe3eebc9d95104f4f8cafff',1,'uMinMax(const std::vector< T > &v, T &min, T &max, unsigned int &indexMin, unsigned int &indexMax): UMath.h'],['../UMath_8h.html#a9cc051a73d402e69919d8fcea51c3098',1,'uMinMax(const T *v, unsigned int size, T &min, T &max): UMath.h']]], + ['umultimaptomap_57',['uMultimapToMap',['../UStl_8h.html#af9a778651477107bcba607087c3e02ea',1,'UStl.h']]], + ['umultimaptomapunique_58',['uMultimapToMapUnique',['../UStl_8h.html#ac65e613c42858a01f5d4f29446f53cd6',1,'UStl.h']]], + ['umutex_59',['umutex',['../classUMutex.html#a292198fffdbd7d0d5a550946f156f70e',1,'UMutex::UMutex()'],['../classUMutex.html',1,'UMutex']]], + ['umutex_20usemaphore_60',['UThread, UMutex, USemaphore',['../group__UtiLite.html#thread',1,'']]], + ['uncompressdata_61',['uncompressdata',['../namespacertabmap.html#a696fffaafe542bfb49fc9ab0da2c66b9',1,'rtabmap::uncompressData()'],['../classrtabmap_1_1SensorData.html#a8c3364f43f7c0a57261720408a088158',1,'rtabmap::SensorData::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)'],['../classrtabmap_1_1SensorData.html#aa356c9d5e9e7ea55ccdbe99c215bcb52',1,'rtabmap::SensorData::uncompressData()'],['../namespacertabmap.html#aa15a9e946d6571254fc3c808b624e6cd',1,'rtabmap::uncompressData(const std::vector< unsigned char > &bytes)'],['../namespacertabmap.html#a5b02b6a5cd3c620aff7e76c05f78b20f',1,'rtabmap::uncompressData(const unsigned char *bytes, unsigned long size)']]], + ['uncompressdataconst_62',['uncompressDataConst',['../classrtabmap_1_1SensorData.html#a2e0be45871fa8dbce1c3cf727953358f',1,'rtabmap::SensorData']]], + ['uncompressimage_63',['uncompressimage',['../namespacertabmap.html#a462f181a147c9f5315f70b0cd89210e5',1,'rtabmap::uncompressImage(const cv::Mat &bytes)'],['../namespacertabmap.html#af56ea8b86f7a873959588d35a7ede187',1,'rtabmap::uncompressImage(const std::vector< unsigned char > &bytes)']]], + ['uncompressstring_64',['uncompressString',['../namespacertabmap.html#a811701fc1452e49e82fcab8d4476832f',1,'rtabmap']]], + ['uncompressuserdata_65',['uncompressUserData',['../classrtabmap_1_1Link.html#adb075101cafb535fc4a9b74f7afae521',1,'rtabmap::Link']]], + ['uncompressuserdataconst_66',['uncompressUserDataConst',['../classrtabmap_1_1Link.html#ac425a90800494da64512011315c47e62',1,'rtabmap::Link']]], + ['unlock_67',['unlock',['../classUMutex.html#a4c5b4e04ad4e2f0eda2e8d4325d45d38',1,'UMutex']]], + ['unorm_68',['unorm',['../UMath_8h.html#a6b6fbb2032ce05eeacdb1b0bc87627e8',1,'uNorm(const T &x1, const T &x2, const T &x3): UMath.h'],['../UMath_8h.html#ab5e611c29307d8733cfaebc68bed1ac6',1,'uNorm(const std::vector< T > &v): UMath.h'],['../UMath_8h.html#abe92bd5cba3860759c40c322ab1ac995',1,'uNorm(const T &x1, const T &x2): UMath.h']]], + ['unormalize_69',['uNormalize',['../UMath_8h.html#a2f843f6f6bf0bd59b527aaa8c4731612',1,'UMath.h']]], + ['unormsquared_70',['unormsquared',['../UMath_8h.html#aeed14782b35224f70db6b5435dce06a1',1,'uNormSquared(const std::vector< T > &v): UMath.h'],['../UMath_8h.html#aea5fd5d0bd9afdb11c765584c89a5f8f',1,'uNormSquared(const T &x1, const T &x2): UMath.h'],['../UMath_8h.html#a0a3b6871504f5a745f8769492f45871c',1,'uNormSquared(const T &x1, const T &x2, const T &x3): UMath.h']]], + ['unumber2str_71',['unumber2str',['../UConversion_8h.html#a7d269614a35d90f2ee7eb1204bca0856',1,'uNumber2Str(float number, int precision=6, bool fixed=false): UConversion.h'],['../UConversion_8h.html#a863753727325d89d62a941b1e28ec080',1,'uNumber2Str(double number, int precision=6, bool fixed=false): UConversion.h'],['../UConversion_8h.html#ab3a674443d1d17328488398497380eb0',1,'uNumber2Str(int number): UConversion.h'],['../UConversion_8h.html#aa2bbc65658f335e92631e9f1d091a698',1,'uNumber2Str(unsigned int number): UConversion.h']]], + ['uobjdeletedevent_72',['UObjDeletedEvent',['../classUObjDeletedEvent.html',1,'']]], + ['uobjdeletionthread_73',['uobjdeletionthread',['../classUObjDeletionThread.html',1,'UObjDeletionThread< T >'],['../classUObjDeletionThread.html#a860499bd0467d2cc0fb467b124d085e0',1,'UObjDeletionThread::UObjDeletionThread()']]], + ['update_74',['update',['../classUDirectory.html#ab738cea12207aea77c7a0581c57d6008',1,'UDirectory::update()'],['../classrtabmap_1_1Memory.html#aae43fd080c6bc9773fa58f1c36e6684f',1,'rtabmap::Memory::update()'],['../classrtabmap_1_1VWDictionary.html#a844ae27eb6d1f0674c8f7777451812c5',1,'rtabmap::VWDictionary::update()'],['../classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee',1,'rtabmap::Memory::update()'],['../classrtabmap_1_1IMUFilter.html#ab02c81af3543cfb1d53b4a0b064a0363',1,'rtabmap::IMUFilter::update()'],['../classrtabmap_1_1GlobalMap.html#aa21a1e3baba94ded5663a8057a3b8cd6',1,'rtabmap::GlobalMap::update()']]], + ['updateage_75',['updateAge',['../classrtabmap_1_1Memory.html#a76fd8c93220c16fac5843ccc2c0bec3c',1,'rtabmap::Memory']]], + ['updatecalibration_76',['updateCalibration',['../classrtabmap_1_1DBDriver.html#a6d59931a9496cf1b23568f79fc421cc1',1,'rtabmap::DBDriver']]], + ['updatedepthimage_77',['updateDepthImage',['../classrtabmap_1_1DBDriver.html#a3a02d595356e2dd0ed8b8933a6c4e811',1,'rtabmap::DBDriver']]], + ['updatelaserscan_78',['updateLaserScan',['../classrtabmap_1_1DBDriver.html#a7d167e53d447d77dd3fe35665f8a661b',1,'rtabmap::DBDriver']]], + ['updatelink_79',['updatelink',['../classrtabmap_1_1DBDriver.html#a94eb69c07a44343c008654b1401dce80',1,'rtabmap::DBDriver::updateLink()'],['../classrtabmap_1_1Memory.html#a7c7f80937a35204cb5b44faec8e99736',1,'rtabmap::Memory::updateLink()']]], + ['updateoccupancygrid_80',['updateOccupancyGrid',['../classrtabmap_1_1DBDriver.html#a2f5e8e0b367e49cfbba7c96b28306a61',1,'rtabmap::DBDriver']]], + ['uprocessinfo_81',['uprocessinfo',['../classUProcessInfo.html#a9786bfe4f14bb80ddf206904f12d8f9b',1,'UProcessInfo::UProcessInfo()'],['../group__UtiLite.html#processinfo',1,'UProcessInfo'],['../classUProcessInfo.html',1,'UProcessInfo']]], + ['uprocessinfo_2eh_82',['UProcessInfo.h',['../UProcessInfo_8h.html',1,'']]], + ['ureplacechar_83',['ureplacechar',['../UConversion_8h.html#a214297200ebabb7a349fb203103d72ef',1,'uReplaceChar(const std::string &str, char before, const std::string &after): UConversion.h'],['../UConversion_8h.html#ac17caccd78f21956b7ddb78aa0c0c438',1,'uReplaceChar(const std::string &str, char before, char after): UConversion.h']]], + ['uresourcegenerator_84',['uResourceGenerator',['../uResourceGeneratorPage.html',1,'']]], + ['uscopemutex_85',['UScopeMutex',['../classUScopeMutex.html',1,'']]], + ['use_20of_20stl_86',['Convenient use of STL',['../group__UtiLite.html#stl',1,'']]], + ['usemaphore_87',['usemaphore',['../classUSemaphore.html',1,'USemaphore'],['../classUSemaphore.html#ad991738e68e0a2baaec46ab27296cbe6',1,'USemaphore::USemaphore()'],['../group__UtiLite.html#thread',1,'UThread, UMutex, USemaphore']]], + ['userdataevent_88',['UserDataEvent',['../classrtabmap_1_1UserDataEvent.html',1,'rtabmap']]], + ['usign_89',['uSign',['../UMath_8h.html#a6e100ed2031a529679a93b9b4bf818af',1,'UMath.h']]], + ['usplit_90',['uSplit',['../UStl_8h.html#ab1862437019327ce8419569e3c2ea90f',1,'UStl.h']]], + ['usplitnumchar_91',['uSplitNumChar',['../UStl_8h.html#a4045d74e1a84cde1489a754375c1d55e',1,'UStl.h']]], + ['ustl_2eh_92',['UStl.h',['../UStl_8h.html',1,'']]], + ['ustr2bool_93',['uStr2Bool',['../UConversion_8h.html#abb8205ea44ccbebab8cf064fed0c7c1b',1,'UConversion.h']]], + ['ustr2bytes_94',['uStr2Bytes',['../UConversion_8h.html#aa320ef94bde5dd6f9e6ebdb986fc5ca6',1,'UConversion.h']]], + ['ustr2double_95',['uStr2Double',['../UConversion_8h.html#a9e8508b95f98ab3da0d942ee7d6b2105',1,'UConversion.h']]], + ['ustr2float_96',['uStr2Float',['../UConversion_8h.html#aaa5c2c8be40ec84e20bc6967b6b9b46a',1,'UConversion.h']]], + ['ustr2int_97',['uStr2Int',['../UConversion_8h.html#a3cd287c149717691ee36fcd593940f68',1,'UConversion.h']]], + ['ustrcontains_98',['uStrContains',['../UStl_8h.html#ab4e2c55d7930e99514a2315a2c6b4f82',1,'UStl.h']]], + ['ustrnumcmp_99',['uStrNumCmp',['../UStl_8h.html#af48fdad882d4429e4044372589503da1',1,'UStl.h']]], + ['usum_100',['usum',['../UMath_8h.html#af15f0fa694931f0f99ba640d52539b09',1,'uSum(const std::vector< T > &v): UMath.h'],['../UMath_8h.html#a86599e95ecdc91ce2d9497985d5d642b',1,'uSum(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#a81a1c24c0229e6c4dc8d8e09497ad114',1,'uSum(const std::list< T > &list): UMath.h']]], + ['usumsquared_101',['usumsquared',['../UMath_8h.html#a94be0f1c509db2f294048e6d5b16a522',1,'uSumSquared(const std::vector< T > &v, T subtract=T()): UMath.h'],['../UMath_8h.html#aeb6a6517666687e509617e6bfaf274d3',1,'uSumSquared(const T *v, unsigned int size, T subtract=T()): UMath.h']]], + ['utake_102',['uTake',['../UStl_8h.html#a6242bd5879bd7f06b8de6498650aa3b7',1,'UStl.h']]], + ['uthread_103',['uthread',['../classUThread.html#a05a92f95e2a8900f27b09ddf907b97be',1,'UThread::UThread()'],['../classUThread.html',1,'UThread']]], + ['uthread_20umutex_20usemaphore_104',['UThread, UMutex, USemaphore',['../group__UtiLite.html#thread',1,'']]], + ['uthreadc_105',['UThreadC',['../classUThreadC.html',1,'']]], + ['uthreadc_3c_20void_20_3e_106',['UThreadC< void >',['../classUThreadC_3_01void_01_4.html',1,'']]], + ['utilite_107',['UtiLite',['../group__UtiLite.html',1,'']]], + ['utimer_108',['utimer',['../group__UtiLite.html#timer',1,'UTimer'],['../classUTimer.html',1,'UTimer']]], + ['utolowercase_109',['uToLowerCase',['../UConversion_8h.html#a426b88c678e06f77912c006ba02805ec',1,'UConversion.h']]], + ['utouppercase_110',['uToUpperCase',['../UConversion_8h.html#adc98c4d87bc7c13b7fc5b5504f457105',1,'UConversion.h']]], + ['uuniquekeys_111',['uUniqueKeys',['../UStl_8h.html#a62335030b4c0d80f80e7c4a21721c05e',1,'UStl.h']]], + ['uvalue_112',['uValue',['../UStl_8h.html#a155cd26667d2f88ee05dd3d819ae8182',1,'UStl.h']]], + ['uvalueat_113',['uvalueat',['../UStl_8h.html#af9a13d96ccaf6094128eb350d0253d22',1,'uValueAt(const std::list< V > &list, const unsigned int &pos): UStl.h'],['../UStl_8h.html#a27a0f94be07c53df9827b082eb107337',1,'uValueAt(std::list< V > &list, const unsigned int &pos): UStl.h']]], + ['uvalues_114',['uvalues',['../UStl_8h.html#a745b929c605a3d6b0014dff0c9c2a314',1,'uValues(const std::multimap< K, V > &mm): UStl.h'],['../UStl_8h.html#a3514dc64eabe675042a4d1b7d8770910',1,'uValues(const std::multimap< K, V > &mm, const K &key): UStl.h'],['../UStl_8h.html#a081a7dd08a9962ee1651eb4ddb01729e',1,'uValues(const std::map< K, V > &m): UStl.h']]], + ['uvalueslist_115',['uvalueslist',['../UStl_8h.html#a9419324b5c47549d954313582e69dc5c',1,'uValuesList(const std::multimap< K, V > &mm): UStl.h'],['../UStl_8h.html#ab5ea404864ed672cca3a05435786f4be',1,'uValuesList(const std::map< K, V > &m): UStl.h']]], + ['uvariance_116',['uvariance',['../UMath_8h.html#add45b750bab7251ba196079289f17d7d',1,'uVariance(const T *v, unsigned int size, T meanV): UMath.h'],['../UMath_8h.html#aa6ea127b567072434a5616bcc1c1f6e3',1,'uVariance(const std::list< T > &list, const T &m): UMath.h'],['../UMath_8h.html#a0aa8de7d20731bcae07d956256e293f6',1,'uVariance(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#a8d443d065900ca7096d08c9431fef71f',1,'uVariance(const std::vector< T > &v, const T &m): UMath.h']]], + ['uvariant_117',['uvariant',['../classUVariant.html#a7ecbf63121fc31f094534293a05af6f3',1,'UVariant::UVariant(const std::vector< short > &value)'],['../classUVariant.html#a0c4434b8a0e3d8d5a13967196ef75c9d',1,'UVariant::UVariant(const char *value)'],['../classUVariant.html',1,'UVariant'],['../classUVariant.html#a0f29e416edccd2af78192288bb7ca884',1,'UVariant::UVariant(const std::string &value)'],['../classUVariant.html#a77de7639a21b4002f6c4c8f765db9748',1,'UVariant::UVariant(const std::vector< signed char > &value)'],['../classUVariant.html#a709722d8603fdb5208f5853073c0557b',1,'UVariant::UVariant(const std::vector< unsigned char > &value)'],['../classUVariant.html#ad5517ddcc64a521f2bb6079d568a6029',1,'UVariant::UVariant(const std::vector< double > &value)'],['../classUVariant.html#a30476f11f550fdb86f97f30f9a34d042',1,'UVariant::UVariant(const unsigned int &value)'],['../classUVariant.html#abb4dcb9be13b81f672c2012e09234be9',1,'UVariant::UVariant(const std::vector< float > &value)'],['../classUVariant.html#ad71bbca096fb06dfe1009105c6546c78',1,'UVariant::UVariant(const std::vector< unsigned int > &value)'],['../classUVariant.html#a2054869e20d561d129fa2cfbd0dbe923',1,'UVariant::UVariant(const std::vector< int > &value)'],['../classUVariant.html#af210833caf9715d7678fb6d64dddf599',1,'UVariant::UVariant()'],['../classUVariant.html#a98f1bc68af62d433f2946cab87fc520c',1,'UVariant::UVariant(const bool &value)'],['../classUVariant.html#ae0939524a0c68004804381492aaab285',1,'UVariant::UVariant(const signed char &value)'],['../classUVariant.html#a66f79ef197d7a9fb87781073b44ed426',1,'UVariant::UVariant(const unsigned char &value)'],['../classUVariant.html#a5253c21485672e2e20149db1661ffc64',1,'UVariant::UVariant(const short &value)'],['../classUVariant.html#a3f893e4ec4714cb594e88eb6ee421a0b',1,'UVariant::UVariant(const unsigned short &value)'],['../classUVariant.html#a896511df83bbcc6d2892902b83495bae',1,'UVariant::UVariant(const int &value)'],['../classUVariant.html#a66b347ecdbdcd3b9bb6675d3a5040e26',1,'UVariant::UVariant(const std::vector< unsigned short > &value)'],['../classUVariant.html#aae15560cd7d827b4df20ca93e73e488d',1,'UVariant::UVariant(const float &value)'],['../classUVariant.html#a17a521fb10da7564bf5104c717ea977c',1,'UVariant::UVariant(const double &value)']]], + ['uvariant_2eh_118',['UVariant.h',['../UVariant_8h.html',1,'']]], + ['uvectortolist_119',['uVectorToList',['../UStl_8h.html#a5a5fb7b34b8c3adb63d641358b7a7e1b',1,'UStl.h']]], + ['uwarn_120',['UWARN',['../ULogger_8h.html#ab5a739ad9340455e46eaa570f8223d9a',1,'ULogger.h']]], + ['uxmatch_121',['uxmatch',['../UMath_8h.html#a726f4662efa078be30f5320bbb994c7a',1,'uXMatch(const std::vector< T > &vA, const std::vector< T > &vB, unsigned int index, UXMatchMethod method): UMath.h'],['../UMath_8h.html#ac616ce0471d2e35fafd59d88021ccab3',1,'uXMatch(const T *vA, const T *vB, unsigned int sizeA, unsigned int sizeB, unsigned int index, UXMatchMethod method): UMath.h'],['../UMath_8h.html#a4694c7d40749b5cb09c596d232720192',1,'uXMatch(const std::vector< T > &vA, const std::vector< T > &vB, UXMatchMethod method): UMath.h'],['../UMath_8h.html#a913829c5228fabff88e4918111c1d424',1,'uXMatch(const T *vA, const T *vB, unsigned int sizeA, unsigned int sizeB, UXMatchMethod method): UMath.h']]], + ['uxmatchmethod_122',['UXMatchMethod',['../UMath_8h.html#ae24d0d5b3a1d44ae8c5e50bb86a15cba',1,'UMath.h']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_19.js b/preview/pr-1492/api/latest/search/all_19.js new file mode 100644 index 00000000..d4af5064 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_19.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['value_0',['value',['../classrtabmap_1_1EnvSensor.html#a27b343c9be68fd326c10157102bb750f',1,'rtabmap::EnvSensor::value()'],['../classUSemaphore.html#a840fadefd8bc873c8bdf34c90d180a3b',1,'USemaphore::value()']]], + ['variance_1',['variance',['../classrtabmap_1_1RegistrationInfo.html#a95b6903a7b750f9ada14000dc37800dc',1,'rtabmap::RegistrationInfo']]], + ['variance_20and_20correspondences_20of_20two_20point_20clouds_2',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]], + ['verticalfov_3',['verticalFOV',['../classrtabmap_1_1CameraModel.html#af6226e43afcb69259b137bbe50099537',1,'rtabmap::CameraModel']]], + ['vhstrategy_4',['VhStrategy',['../classrtabmap_1_1Rtabmap.html#afa134603fb0835b84f269e48e7ab568c',1,'rtabmap::Rtabmap']]], + ['viewpoint_5',['viewPoint',['../classrtabmap_1_1LocalGrid.html#aa8f5a6219144d584cde0fe6b565ac0bb',1,'rtabmap::LocalGrid']]], + ['visualword_6',['visualword',['../classrtabmap_1_1VisualWord.html#a64ce7c97214265e24e00e3888b85f967',1,'rtabmap::VisualWord::VisualWord()'],['../classrtabmap_1_1VisualWord.html',1,'rtabmap::VisualWord']]], + ['voxel_20filtering_7',['Voxel Filtering',['../group__VoxelFiltering.html',1,'']]], + ['voxelize_8',['voxelize',['../group__VoxelFiltering.html#gab2a9294812a8c0fcaed92d0f119eaa31',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#gac6809e08656312d793ce34e828e33998',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#ga751ff8adfdf8e6f824a7bef0d4630044',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#gab974887ed7faf7685d6c8c181827b2c2',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#ga8fce5075a28203045c3865b1d068c084',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#ga3ea1e68d63d45c84d2c3b6b3bcac4653',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#gaf5726b462426b56425604343e51a79c3',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#gac5158ba02fc61bfa503967ddd5ec319d',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#gaebeee3702499e5f8d692ecd0bc48029b',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#gabf0201c1253022d7ce8278fc44998530',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#ga94af1db82b1faffff875a9902d44285b',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)']]], + ['vwdictionary_9',['vwdictionary',['../classrtabmap_1_1VWDictionary.html#ada3980b520d8411a1ebb3ce14e2f8734',1,'rtabmap::VWDictionary::VWDictionary()'],['../classrtabmap_1_1VWDictionary.html',1,'rtabmap::VWDictionary']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_1a.js b/preview/pr-1492/api/latest/search/all_1a.js new file mode 100644 index 00000000..d55cddbe --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_1a.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['weights_0',['weights',['../classrtabmap_1_1Statistics.html#ab29fce77b8debf381356e27ac039fafc',1,'rtabmap::Statistics']]], + ['widgets_20libutilite_5fqt_20so_20_3a_20optional_1',['Qt Widgets (libutilite_qt.so : OPTIONAL)',['../group__UtiLite.html#qtLib',1,'']]], + ['width_5f_2',['width_',['../classclams_1_1DiscreteDepthDistortionModel.html#a7de0c7b8a5db34270645b6454f74392c',1,'clams::DiscreteDepthDistortionModel']]], + ['winsize_3',['winSize',['../classrtabmap_1_1Stereo.html#a5474ebbc178bcc29ebaff3d9d4e22e54',1,'rtabmap::Stereo']]], + ['winssd_4',['winSSD',['../classrtabmap_1_1Stereo.html#aed372a471e6d3ea72713e239709da978',1,'rtabmap::Stereo']]], + ['with_20normals_5',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['wmstate_6',['wmState',['../classrtabmap_1_1Statistics.html#a0b0bb69d788a142a7b51ae2e916798b6',1,'rtabmap::Statistics']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_1b.js b/preview/pr-1492/api/latest/search/all_1b.js new file mode 100644 index 00000000..c0185b90 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_1b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x_0',['x',['../classrtabmap_1_1Transform.html#a5173dd4491ea0796180d1eb0f88a6762',1,'rtabmap::Transform']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_1c.js b/preview/pr-1492/api/latest/search/all_1c.js new file mode 100644 index 00000000..cd805c0e --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_1c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['y_0',['y',['../classrtabmap_1_1Transform.html#acbb0afe7eb39181f85c2f9734352d6a9',1,'rtabmap::Transform']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_1d.js b/preview/pr-1492/api/latest/search/all_1d.js new file mode 100644 index 00000000..5b6894d4 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_1d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['z_0',['z',['../classrtabmap_1_1Transform.html#af90acc40bed06ab96468fd17585f1944',1,'rtabmap::Transform']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_1e.js b/preview/pr-1492/api/latest/search/all_1e.js new file mode 100644 index 00000000..7c8fe2df --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_1e.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['_7ecameramodel_0',['~CameraModel',['../classrtabmap_1_1CameraModel.html#af6f35e5071ef0070d3fae3ebaa33ce4c',1,'rtabmap::CameraModel']]], + ['_7esensorcapture_1',['~SensorCapture',['../classrtabmap_1_1SensorCapture.html#a0578f6540ecdf8c4b3b747d511ecb625',1,'rtabmap::SensorCapture']]], + ['_7esensorcaptureinfo_2',['~SensorCaptureInfo',['../classrtabmap_1_1SensorCaptureInfo.html#a31eca8aee2a61df0d35d91edbc54ac53',1,'rtabmap::SensorCaptureInfo']]], + ['_7esensorcapturethread_3',['~SensorCaptureThread',['../classrtabmap_1_1SensorCaptureThread.html#af8133c1b2332568c4699282f59c141c9',1,'rtabmap::SensorCaptureThread']]], + ['_7esensordata_4',['~SensorData',['../classrtabmap_1_1SensorData.html#a94f4e8970ae34d652100dce131cc9e44',1,'rtabmap::SensorData']]], + ['_7esensorevent_5',['~SensorEvent',['../classrtabmap_1_1SensorEvent.html#a2794fb8f052c08efdfd4b379e359fecb',1,'rtabmap::SensorEvent']]], + ['_7esignature_6',['~Signature',['../classrtabmap_1_1Signature.html#a67c41f31ff6fd72815190cc1bbba9569',1,'rtabmap::Signature']]], + ['_7estatistics_7',['~Statistics',['../classrtabmap_1_1Statistics.html#af7ecfdb141de651d094d28a2d035dca0',1,'rtabmap::Statistics']]], + ['_7estereo_8',['~Stereo',['../classrtabmap_1_1Stereo.html#aca70a15916baf916d6d66c93dad6b3d5',1,'rtabmap::Stereo']]], + ['_7estereobm_9',['~StereoBM',['../classrtabmap_1_1StereoBM.html#a6d5e4ac8698669323dff297c01f7ee4b',1,'rtabmap::StereoBM']]], + ['_7estereocameramodel_10',['~StereoCameraModel',['../classrtabmap_1_1StereoCameraModel.html#afaa6d8cf4c9b503cc8c8a03fb25ecdf3',1,'rtabmap::StereoCameraModel']]], + ['_7estereodense_11',['~StereoDense',['../classrtabmap_1_1StereoDense.html#a5c720eb11114c19540d30886cb0ba1e6',1,'rtabmap::StereoDense']]], + ['_7estereoopticalflow_12',['~StereoOpticalFlow',['../classrtabmap_1_1StereoOpticalFlow.html#afa38ce6868f4bf0388559f81ff917a97',1,'rtabmap::StereoOpticalFlow']]], + ['_7estereosgbm_13',['~StereoSGBM',['../classrtabmap_1_1StereoSGBM.html#a1568e99913769d8442c6013a7adc8796',1,'rtabmap::StereoSGBM']]], + ['_7eueventshandler_14',['~UEventsHandler',['../classUEventsHandler.html#a15ac2bf243e938c411fac0dff7db2f51',1,'UEventsHandler']]], + ['_7euobjdeletionthread_15',['~UObjDeletionThread',['../classUObjDeletionThread.html#a44e27bada40a7fdb67ebad9270da8192',1,'UObjDeletionThread']]], + ['_7euprocessinfo_16',['~UProcessInfo',['../classUProcessInfo.html#a4b4a0da3c612692790191b914e37b1a4',1,'UProcessInfo']]], + ['_7euthread_17',['~UThread',['../classUThread.html#a437580d224111e60cbe2626f0e4cb12e',1,'UThread']]], + ['_7euvariant_18',['~UVariant',['../classUVariant.html#aeeaef6c17460567dec089740e276f50a',1,'UVariant']]], + ['_7evisualword_19',['~VisualWord',['../classrtabmap_1_1VisualWord.html#adc2dc719d2e6ed06ff92a2370d9955b2',1,'rtabmap::VisualWord']]], + ['_7evwdictionary_20',['~VWDictionary',['../classrtabmap_1_1VWDictionary.html#af7f669f103368e30e31a028efbcac89d',1,'rtabmap::VWDictionary']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_2.js b/preview/pr-1492/api/latest/search/all_2.js new file mode 100644 index 00000000..59dba1b3 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_3a_20optional_0',[': optional',['../group__UtiLite.html#audioLib',1,'Audio stuff (libutilite_audio.so : OPTIONAL)'],['../group__UtiLite.html#cvLib',1,'OpenCV stuff (libutilite_cv.so : OPTIONAL)'],['../group__UtiLite.html#qtLib',1,'Qt Widgets (libutilite_qt.so : OPTIONAL)']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_3.js b/preview/pr-1492/api/latest/search/all_3.js new file mode 100644 index 00000000..387717ab --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_3.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['_5fdbdriver_0',['_dbDriver',['../classrtabmap_1_1Memory.html#a6110b0ea8a7b35bae46083f2ce66e148',1,'rtabmap::Memory']]], + ['_5fppdb_1',['_ppDb',['../classrtabmap_1_1DBDriverSqlite3.html#a073748d5c4dac2e01966147c022ea943',1,'rtabmap::DBDriverSqlite3']]], + ['_5ftotalactivereferences_2',['_totalActiveReferences',['../classrtabmap_1_1VWDictionary.html#a5222c6a21307f0e4b9346c87db166b44',1,'rtabmap::VWDictionary']]], + ['_5fversion_3',['_version',['../classrtabmap_1_1DBDriverSqlite3.html#a0aa18124e40d2ac53e0e1b450d7399b8',1,'rtabmap::DBDriverSqlite3']]], + ['_5fvisualwords_4',['_visualWords',['../classrtabmap_1_1VWDictionary.html#adcb4739e09e27b20125880e9d3026383',1,'rtabmap::VWDictionary']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_4.js b/preview/pr-1492/api/latest/search/all_4.js new file mode 100644 index 00000000..0cf6d6dc --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_4.js @@ -0,0 +1,42 @@ +var searchData= +[ + ['a_20point_20cloud_0',['a point cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['a_20point_20cloud_20with_20normals_1',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['a_20single_20point_2',['Transform a single point',['../group__TransformPoint.html',1,'']]], + ['accumulate_3',['accumulate',['../classclams_1_1DiscreteDepthDistortionModel.html#ab9b7555fbf710706d7b94dfcb9ed6399',1,'clams::DiscreteDepthDistortionModel']]], + ['acquire_4',['acquire',['../classUSemaphore.html#a1128f81a47324e6de3946a7719c24223',1,'USemaphore']]], + ['acquiretry_5',['acquireTry',['../classUSemaphore.html#a51a925279a04a54aea3583c4399a744b',1,'USemaphore']]], + ['add_6',['add',['../classrtabmap_1_1LocalGridCache.html#a765142f021aa580bcfdd84545ebc044f',1,'rtabmap::LocalGridCache::add(int nodeId, const LocalGrid &localGrid)'],['../classrtabmap_1_1LocalGridCache.html#a2e83e9c0c11051b5da84bf04b603a99b',1,'rtabmap::LocalGridCache::add(int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint=cv::Point3f(0, 0, 0))']]], + ['addassemblednode_7',['addAssembledNode',['../classrtabmap_1_1GlobalMap.html#a0b95370df2582da48ff0e1e405cccda2',1,'rtabmap::GlobalMap']]], + ['addednodes_8',['addedNodes',['../classrtabmap_1_1GlobalMap.html#a98c2c10030cfa64c1b72d17f046243f4',1,'rtabmap::GlobalMap']]], + ['addenvsensor_9',['addEnvSensor',['../classrtabmap_1_1SensorData.html#a1006dbcfb640b599f0587af3b0ba46ae',1,'rtabmap::SensorData']]], + ['addexample_10',['addExample',['../classclams_1_1DiscreteFrustum.html#aef183fc7d90c0a6ba3245bccf9fbb616',1,'clams::DiscreteFrustum']]], + ['addglobaldescriptor_11',['addGlobalDescriptor',['../classrtabmap_1_1SensorData.html#acc0ac26f01ad9f5185f80f8f09da252e',1,'rtabmap::SensorData']]], + ['addhandler_12',['addHandler',['../classUEventsManager.html#a3bb033062e4a0eb59efdf5f84d170388',1,'UEventsManager']]], + ['addlandmark_13',['addLandmark',['../classrtabmap_1_1Signature.html#a71621ac6411f778342c23fbc4e695a12',1,'rtabmap::Signature']]], + ['addlink_14',['addlink',['../classrtabmap_1_1DBDriver.html#acfb5fed58aad744050c392a8d346926b',1,'rtabmap::DBDriver::addLink()'],['../classrtabmap_1_1Memory.html#a4140effa4830fbe679a51e975f0021a1',1,'rtabmap::Memory::addLink()'],['../classrtabmap_1_1Rtabmap.html#aef03c0d6ee1ef5646ba11be5dbe9faa5',1,'rtabmap::Rtabmap::addLink()'],['../classrtabmap_1_1Signature.html#a3bb2e6a8de8e615e51385c4113630f93',1,'rtabmap::Signature::addLink(const Link &link)']]], + ['addlinks_15',['addlinks',['../classrtabmap_1_1Signature.html#aa8513c4ecb77c38b95610834c66e893e',1,'rtabmap::Signature::addLinks(const std::list< Link > &links)'],['../classrtabmap_1_1Signature.html#af92465ad9cbfab36ffbc6d372781170c',1,'rtabmap::Signature::addLinks(const std::map< int, Link > &links)']]], + ['addnewwords_16',['addNewWords',['../classrtabmap_1_1VWDictionary.html#a2998a6b11e102a2253ac592acf076841',1,'rtabmap::VWDictionary']]], + ['addnodestorepublish_17',['addNodesToRepublish',['../classrtabmap_1_1Rtabmap.html#a0d2caf505525f635bda914e73aa59232',1,'rtabmap::Rtabmap']]], + ['addref_18',['addRef',['../classrtabmap_1_1VisualWord.html#a5826c6a57f9115e6766bb60e2628fe30',1,'rtabmap::VisualWord']]], + ['addsignaturedata_19',['addSignatureData',['../classrtabmap_1_1Statistics.html#a55748a17bc6348a83dc184fb1b2631fd',1,'rtabmap::Statistics']]], + ['addstatistic_20',['addStatistic',['../classrtabmap_1_1Statistics.html#a24d85beaf52fd03ad67c6d9d417efd79',1,'rtabmap::Statistics']]], + ['addstatistics_21',['addStatistics',['../classrtabmap_1_1DBDriver.html#a4dbccd0dabf72da724488692b1713832',1,'rtabmap::DBDriver']]], + ['addword_22',['addWord',['../classrtabmap_1_1VWDictionary.html#ad464ad961b0e4d4cd6dd7895e9ff3d59',1,'rtabmap::VWDictionary']]], + ['addwordref_23',['addWordRef',['../classrtabmap_1_1VWDictionary.html#aea2f0d043d043df37258dc225c62edec',1,'rtabmap::VWDictionary']]], + ['adjustlikelihood_24',['adjustLikelihood',['../classrtabmap_1_1Rtabmap.html#aad648f09bb04b193907528987ccda413',1,'rtabmap::Rtabmap']]], + ['allnodesinwm_25',['allNodesInWM',['../classrtabmap_1_1Memory.html#a2098205b805bde66a4a57906a8ca95f5',1,'rtabmap::Memory']]], + ['altitude_26',['altitude',['../classrtabmap_1_1GeodeticCoords.html#a3a0d110deb25400137d4fe552742970a',1,'rtabmap::GeodeticCoords::altitude()'],['../classrtabmap_1_1GPS.html#a50ae4bb38ab5dc1fef49ff367b602adc',1,'rtabmap::GPS::altitude()']]], + ['and_20correspondences_20of_20two_20point_20clouds_27',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]], + ['and_20corresponding_20output_20data_3a_28',['Supported input types and corresponding output data:',['../group__LaserScanFromPointCloud.html#autotoc_md0',1,'']]], + ['angular_29',['angular',['../structrtabmap_1_1graph_1_1MaxGraphErrors.html#a08918b252e5814477beff38b423df39b',1,'rtabmap::graph::MaxGraphErrors']]], + ['angularlink_30',['angularLink',['../structrtabmap_1_1graph_1_1MaxGraphErrors.html#a95dc5269dfe47ed56b315cebe3389ab6',1,'rtabmap::graph::MaxGraphErrors']]], + ['angularratio_31',['angularRatio',['../structrtabmap_1_1graph_1_1MaxGraphErrors.html#a97bead9a8191f2746e2586a965ca3c80',1,'rtabmap::graph::MaxGraphErrors']]], + ['angularvelocity_32',['angularVelocity',['../classrtabmap_1_1IMU.html#ad0160a803d2005f3f4db27c402e6bceb',1,'rtabmap::IMU']]], + ['angularvelocitycovariance_33',['angularVelocityCovariance',['../classrtabmap_1_1IMU.html#a660c82c641525ff24aefa7e03ebf7d4a',1,'rtabmap::IMU']]], + ['assemble_34',['assemble',['../classrtabmap_1_1OctoMap.html#ac74a308322f3162307bfe73bfd60c2dd',1,'rtabmap::OctoMap::assemble()'],['../classrtabmap_1_1GlobalMap.html#ae622850e2447bf1cc3e99ee9dcd4b65f',1,'rtabmap::GlobalMap::assemble()'],['../classrtabmap_1_1OccupancyGrid.html#a4e83e17bca353cd46097c14779119ffd',1,'rtabmap::OccupancyGrid::assemble()'],['../classrtabmap_1_1GridMap.html#a57ad9df30e61345ec23a45bcda0f2e93',1,'rtabmap::GridMap::assemble()'],['../classrtabmap_1_1CloudMap.html#a58b2f9f2a99fe3ab14ba73603e3d4f68',1,'rtabmap::CloudMap::assemble()']]], + ['assemblednodes_35',['assembledNodes',['../classrtabmap_1_1GlobalMap.html#a7fc3f43e65401d3842419066242e081d',1,'rtabmap::GlobalMap']]], + ['asyncsave_36',['asyncsave',['../classrtabmap_1_1DBDriver.html#a88eee22aa9707a6993f734fe29f6af5d',1,'rtabmap::DBDriver::asyncSave(VisualWord *vw)'],['../classrtabmap_1_1DBDriver.html#ad1510e157f3ab8df3284528369a6d88f',1,'rtabmap::DBDriver::asyncSave(Signature *s)']]], + ['audio_20stuff_20libutilite_5faudio_20so_20_3a_20optional_37',['Audio stuff (libutilite_audio.so : OPTIONAL)',['../group__UtiLite.html#audioLib',1,'']]], + ['available_38',['available',['../classrtabmap_1_1RegistrationIcp.html#a892ab46eff4e5b0b16bee7d93fa3ba56',1,'rtabmap::RegistrationIcp']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_5.js b/preview/pr-1492/api/latest/search/all_5.js new file mode 100644 index 00000000..86475d76 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_5.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['backwardcompatibility_0',['backwardcompatibility',['../classrtabmap_1_1LaserScan.html#aafea81eab365a2fc2b4f90d8deceafc9',1,'rtabmap::LaserScan::backwardCompatibility(const cv::Mat &oldScanFormat, int maxPoints=0, int maxRange=0, const Transform &localTransform=Transform::getIdentity())'],['../classrtabmap_1_1LaserScan.html#a61e1fefc6554dd6fc1da3c2e5aeefd0c',1,'rtabmap::LaserScan::backwardCompatibility(const cv::Mat &oldScanFormat, float minRange, float maxRange, float angleMin, float angleMax, float angleInc, const Transform &localTransform=Transform::getIdentity())']]], + ['baseline_1',['baseline',['../classrtabmap_1_1StereoCameraModel.html#a8dc48f95fcf68eb81da96941f778535f',1,'rtabmap::StereoCameraModel']]], + ['basic_20mathematic_20operations_2',['Basic mathematic operations',['../group__UtiLite.html#math',1,'']]], + ['bayesfilter_3',['bayesfilter',['../classrtabmap_1_1BayesFilter.html',1,'rtabmap::BayesFilter'],['../classrtabmap_1_1BayesFilter.html#a2955edc4b79110b5bd1bd03f1616056e',1,'rtabmap::BayesFilter::BayesFilter()']]], + ['bearing_4',['bearing',['../classrtabmap_1_1GPS.html#a9285c1d2e97f83dc0b8df3666b912169',1,'rtabmap::GPS']]], + ['behavior_3a_5',['Behavior:',['../util3d__transforms_8h.html#autotoc_md2',1,'']]], + ['bin_5fdepth_5f_6',['bin_depth_',['../classclams_1_1DiscreteDepthDistortionModel.html#a1bd63eed7f9ca2759dcf4975b4f2f951',1,'clams::DiscreteDepthDistortionModel']]], + ['bin_5fheight_5f_7',['bin_height_',['../classclams_1_1DiscreteDepthDistortionModel.html#ae74671d8a3dd71c5fa3f3b44d163ba0c',1,'clams::DiscreteDepthDistortionModel']]], + ['bin_5fwidth_5f_8',['bin_width_',['../classclams_1_1DiscreteDepthDistortionModel.html#acbc26d0d0feddc1a7f27eca81b39dd20',1,'clams::DiscreteDepthDistortionModel']]], + ['box_20filtering_9',['Crop Box Filtering',['../group__CropBox.html',1,'']]], + ['brightnessandcontrastauto_10',['brightnessAndContrastAuto',['../namespacertabmap_1_1util2d.html#a89ec90b2659c764ba22b5c36d729c8f8',1,'rtabmap::util2d']]], + ['brisk_11',['BRISK',['../classrtabmap_1_1BRISK.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_6.js b/preview/pr-1492/api/latest/search/all_6.js new file mode 100644 index 00000000..a3414e3e --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_6.js @@ -0,0 +1,117 @@ +var searchData= +[ + ['cache_0',['cache',['../classrtabmap_1_1GlobalMap.html#a632f06ccce72bce66a9fd38d37f23b80',1,'rtabmap::GlobalMap']]], + ['calcopticalflowpyrlkstereo_1',['calcOpticalFlowPyrLKStereo',['../namespacertabmap_1_1util2d.html#a3d01284751a6b46770a28a7f63576600',1,'rtabmap::util2d']]], + ['calcstereocorrespondences_2',['calcStereoCorrespondences',['../namespacertabmap_1_1util2d.html#a53e2ae078c4c5c997fda9f1b6d1dda33',1,'rtabmap::util2d']]], + ['camera_3',['camera',['../classrtabmap_1_1Camera.html',1,'rtabmap::Camera'],['../classrtabmap_1_1SensorCaptureThread.html#ad6750f6280bdcbb386a051ba9cc36857',1,'rtabmap::SensorCaptureThread::camera()'],['../classrtabmap_1_1Camera.html#aaae7434ffa5e54f5006355779d335dd3',1,'rtabmap::Camera::Camera()']]], + ['cameradepthai_4',['CameraDepthAI',['../classrtabmap_1_1CameraDepthAI.html',1,'rtabmap']]], + ['cameraevent_5',['CameraEvent',['../namespacertabmap.html#a02e773b48c5ac372ce67fe4e040d835d',1,'rtabmap']]], + ['camerafreenect_6',['CameraFreenect',['../classrtabmap_1_1CameraFreenect.html',1,'rtabmap']]], + ['camerafreenect2_7',['CameraFreenect2',['../classrtabmap_1_1CameraFreenect2.html',1,'rtabmap']]], + ['cameraimages_8',['CameraImages',['../classrtabmap_1_1CameraImages.html',1,'rtabmap']]], + ['cameraindex_9',['cameraIndex',['../classrtabmap_1_1FeatureBA.html#a8db953b6f93249d5c28c25073cd4e095',1,'rtabmap::FeatureBA']]], + ['camerainfo_10',['CameraInfo',['../namespacertabmap.html#ac1143b629394a895ca246d256dbc6038',1,'rtabmap']]], + ['camerak4a_11',['CameraK4A',['../classrtabmap_1_1CameraK4A.html',1,'rtabmap']]], + ['camerak4w2_12',['CameraK4W2',['../classrtabmap_1_1CameraK4W2.html',1,'rtabmap']]], + ['cameramodel_13',['cameramodel',['../classrtabmap_1_1CameraModel.html',1,'rtabmap::CameraModel'],['../classrtabmap_1_1CameraModel.html#a745c2d60ef6b460ca380aebd55b5d61c',1,'rtabmap::CameraModel::CameraModel(const std::string &name, double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))'],['../classrtabmap_1_1CameraModel.html#aadb6b19ea8a94f3f6719ea0233196c34',1,'rtabmap::CameraModel::CameraModel(double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))'],['../classrtabmap_1_1CameraModel.html#a4810e60f3af95b73a61879aa97201695',1,'rtabmap::CameraModel::CameraModel(const std::string &name, const cv::Size &imageSize, const cv::Mat &K, const cv::Mat &D, const cv::Mat &R, const cv::Mat &P, const Transform &localTransform=opticalRotation())'],['../classrtabmap_1_1CameraModel.html#adad6652a711eecc9a50e544f14d276cd',1,'rtabmap::CameraModel::CameraModel()']]], + ['cameramodels_14',['cameraModels',['../classrtabmap_1_1SensorData.html#a6ace7b2b8ebae5f7ab18e159fe6e8a92',1,'rtabmap::SensorData']]], + ['cameramynteye_15',['CameraMyntEye',['../classrtabmap_1_1CameraMyntEye.html',1,'rtabmap']]], + ['cameraname_16',['cameraname',['../classrtabmap_1_1SensorCaptureInfo.html#a8f4c2fb07970cb40bf2fe7ad19743d23',1,'rtabmap::SensorCaptureInfo::cameraName'],['../classrtabmap_1_1SensorEvent.html#adaf11817f3e0338ab63b1e8fee4a3c01',1,'rtabmap::SensorEvent::cameraName()']]], + ['cameraopenni_17',['CameraOpenni',['../classrtabmap_1_1CameraOpenni.html',1,'rtabmap']]], + ['cameraopenni2_18',['CameraOpenNI2',['../classrtabmap_1_1CameraOpenNI2.html',1,'rtabmap']]], + ['cameraopennicv_19',['CameraOpenNICV',['../classrtabmap_1_1CameraOpenNICV.html',1,'rtabmap']]], + ['cameraorbbecsdk_20',['CameraOrbbecSDK',['../classrtabmap_1_1CameraOrbbecSDK.html',1,'rtabmap']]], + ['camerarealsense_21',['CameraRealSense',['../classrtabmap_1_1CameraRealSense.html',1,'rtabmap']]], + ['camerarealsense2_22',['CameraRealSense2',['../classrtabmap_1_1CameraRealSense2.html',1,'rtabmap']]], + ['camerargbdimages_23',['CameraRGBDImages',['../classrtabmap_1_1CameraRGBDImages.html',1,'rtabmap']]], + ['cameraseersense_24',['CameraSeerSense',['../classrtabmap_1_1CameraSeerSense.html',1,'rtabmap']]], + ['camerastereodc1394_25',['CameraStereoDC1394',['../classrtabmap_1_1CameraStereoDC1394.html',1,'rtabmap']]], + ['camerastereoflycapture2_26',['CameraStereoFlyCapture2',['../classrtabmap_1_1CameraStereoFlyCapture2.html',1,'rtabmap']]], + ['camerastereoimages_27',['CameraStereoImages',['../classrtabmap_1_1CameraStereoImages.html',1,'rtabmap']]], + ['camerastereotara_28',['CameraStereoTara',['../classrtabmap_1_1CameraStereoTara.html',1,'rtabmap']]], + ['camerastereovideo_29',['CameraStereoVideo',['../classrtabmap_1_1CameraStereoVideo.html',1,'rtabmap']]], + ['camerastereozed_30',['CameraStereoZed',['../classrtabmap_1_1CameraStereoZed.html',1,'rtabmap']]], + ['camerastereozedoc_31',['CameraStereoZedOC',['../classrtabmap_1_1CameraStereoZedOC.html',1,'rtabmap']]], + ['camerathread_32',['CameraThread',['../namespacertabmap.html#acd001e2ea3d2e44d9e24faab74d36324',1,'rtabmap']]], + ['cameravideo_33',['CameraVideo',['../classrtabmap_1_1CameraVideo.html',1,'rtabmap']]], + ['canparsestring_34',['canParseString',['../classrtabmap_1_1Transform.html#af44657c8360a79a67e538f25027df639',1,'rtabmap::Transform']]], + ['canprocessasyncimu_35',['canprocessasyncimu',['../classrtabmap_1_1Odometry.html#a7a1c1e4598528a4e94f510b5dabac528',1,'rtabmap::Odometry::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryLIOSAM.html#a51193d7f42c9b0174c6eedd75d8f4535',1,'rtabmap::OdometryLIOSAM::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryMSCKF.html#a4dd9c2358d2e69f397b61746519a923a',1,'rtabmap::OdometryMSCKF::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryOkvis.html#a4e94c233112e7105dffa37eb8d33427f',1,'rtabmap::OdometryOkvis::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryOpenVINS.html#a7712fe74d5ff65a67fe362010b795e14',1,'rtabmap::OdometryOpenVINS::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryORBSLAM3.html#a2f226f38792f0c8bc146d73985239370',1,'rtabmap::OdometryORBSLAM3::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryVINSFusion.html#a1a3145c62e7b0b43cfb5a94f61d2c9d1',1,'rtabmap::OdometryVINSFusion::canProcessAsyncIMU()']]], + ['canprocessrawimages_36',['canprocessrawimages',['../classrtabmap_1_1OdometryOpenVINS.html#aed27c46aa9ddc68c59eb09f2b3a9d3d0',1,'rtabmap::OdometryOpenVINS::canProcessRawImages()'],['../classrtabmap_1_1OdometryOkvis.html#ad4d4602445081fff30b74d1c7e22dbff',1,'rtabmap::OdometryOkvis::canProcessRawImages()'],['../classrtabmap_1_1OdometryVINSFusion.html#a505ae049f32115a81d4f4258b5fb2134',1,'rtabmap::OdometryVINSFusion::canProcessRawImages()'],['../classrtabmap_1_1OdometryMSCKF.html#a06b5b242107ffe5c379ff7ed089d07c6',1,'rtabmap::OdometryMSCKF::canProcessRawImages()'],['../classrtabmap_1_1Odometry.html#a69809beb553e6d4cd4a950ce251449e0',1,'rtabmap::Odometry::canProcessRawImages()']]], + ['canuseguess_37',['canUseGuess',['../classrtabmap_1_1Registration.html#ab000f795ec498882585a634c2dafec05',1,'rtabmap::Registration']]], + ['capturedata_38',['capturedata',['../classrtabmap_1_1LidarVLP16.html#a60d8190947d474e0557695c1032c40b8',1,'rtabmap::LidarVLP16::captureData()'],['../classrtabmap_1_1SensorCapture.html#a85e8691b5201a5383d1463ed980f7958',1,'rtabmap::SensorCapture::captureData()']]], + ['captureimage_39',['captureImage',['../classrtabmap_1_1CameraMyntEye.html#acefbf910185313e7cf645ecff344329c',1,'rtabmap::CameraMyntEye']]], + ['cellsize_40',['cellSize',['../classrtabmap_1_1LocalGrid.html#a13abf7a3ed9d8680ea339551401b62f5',1,'rtabmap::LocalGrid']]], + ['changelinkids_41',['changeLinkIds',['../classrtabmap_1_1Signature.html#a10d3bce2c3e4ec2de31aa5fa0c4b5934',1,'rtabmap::Signature']]], + ['changewordsref_42',['changeWordsRef',['../classrtabmap_1_1Signature.html#a0fbef54e89583c0ee919f938d57c8759',1,'rtabmap::Signature']]], + ['cleanup_43',['cleanup',['../classrtabmap_1_1Memory.html#af87e4718dd842c59fd8459430c40d78f',1,'rtabmap::Memory']]], + ['cleanuplocalgrids_44',['cleanuplocalgrids',['../classrtabmap_1_1Rtabmap.html#ac7de2278aa53a315a63bec05c1f0a15f',1,'rtabmap::Rtabmap::cleanupLocalGrids()'],['../classrtabmap_1_1Memory.html#a6e63312ada575016b583a4252dc0a70c',1,'rtabmap::Memory::cleanupLocalGrids()']]], + ['clear_45',['clear',['../classrtabmap_1_1OccupancyGrid.html#a76e50602b4dea4a94b1e7e1db25c9177',1,'rtabmap::OccupancyGrid::clear()'],['../classrtabmap_1_1VWDictionary.html#a566aaf19cdc098587e88393e4140b351',1,'rtabmap::VWDictionary::clear()'],['../classrtabmap_1_1LocalGridCache.html#a4068440ef10859d05f252e36f916604b',1,'rtabmap::LocalGridCache::clear()'],['../classrtabmap_1_1LaserScan.html#af0ad1e84f0be48a84b772385249adb45',1,'rtabmap::LaserScan::clear()'],['../classrtabmap_1_1GlobalMap.html#aa6701a09e2532877e73d5b1ba8cb1213',1,'rtabmap::GlobalMap::clear()'],['../classrtabmap_1_1OctoMap.html#a6f9f296f3d5852f749c88291fa11d70f',1,'rtabmap::OctoMap::clear()'],['../classrtabmap_1_1GridMap.html#a2a3b8ba591cf41da62e5486bb62b8f51',1,'rtabmap::GridMap::clear()'],['../classrtabmap_1_1CloudMap.html#a3e2089cb30bd4efbee1ede0c041ee4af',1,'rtabmap::CloudMap::clear()']]], + ['clearcompresseddata_46',['clearCompressedData',['../classrtabmap_1_1SensorData.html#a33244e8049bfae5bea9ecf80057bcd29',1,'rtabmap::SensorData']]], + ['clearglobaldescriptors_47',['clearGlobalDescriptors',['../classrtabmap_1_1SensorData.html#a37c2569419731afc855a3ce984c11505',1,'rtabmap::SensorData']]], + ['clearpath_48',['clearPath',['../classrtabmap_1_1Rtabmap.html#a589cd696bffe53a5e00898631e7d9103',1,'rtabmap::Rtabmap']]], + ['clearrawdata_49',['clearRawData',['../classrtabmap_1_1SensorData.html#a53040403970a08a677e69d824a31f7b2',1,'rtabmap::SensorData']]], + ['clone_50',['clone',['../classrtabmap_1_1Transform.html#a93af73b3a388d66293d007cb164b2198',1,'rtabmap::Transform']]], + ['close_51',['close',['../classrtabmap_1_1Memory.html#a44023158524dee3471a8dff43ea132db',1,'rtabmap::Memory::close()'],['../classrtabmap_1_1RtabmapThread.html#aabea5cf86e55d6669d41b0b569dac574',1,'rtabmap::RtabmapThread::close()'],['../classrtabmap_1_1Rtabmap.html#a5e0b2eada8ae885e45df23165bb91d2f',1,'rtabmap::Rtabmap::close()']]], + ['closeconnection_52',['closeConnection',['../classrtabmap_1_1DBDriver.html#abb644a203d148d0b29db41aea04c949f',1,'rtabmap::DBDriver']]], + ['cloud_53',['cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['cloud_20cluster_20extraction_54',['Point Cloud Cluster Extraction',['../group__ExtractClusters.html',1,'']]], + ['cloud_20downsampling_55',['Point Cloud Downsampling',['../group__PointCloudDownSampling.html',1,'']]], + ['cloud_20indices_20extraction_56',['Point Cloud Indices Extraction',['../group__ExtractIndices.html',1,'']]], + ['cloud_20with_20normals_57',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['cloudmap_58',['CloudMap',['../classrtabmap_1_1CloudMap.html',1,'rtabmap']]], + ['clouds_59',['clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'Compute Variance and Correspondences of Two Point Clouds'],['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds'],['../group__TransformPointcloud.html',1,'Transform PCL Point Clouds']]], + ['cluster_20extraction_60',['Point Cloud Cluster Extraction',['../group__ExtractClusters.html',1,'']]], + ['code_61',['Code',['../classrtabmap_1_1SensorEvent.html#a8a1c7b859ae730c1e0ade9fa5e302a66',1,'rtabmap::SensorEvent']]], + ['compareto_62',['compareTo',['../classrtabmap_1_1Signature.html#abe3b712a3c74599007b1974f592d82bd',1,'rtabmap::Signature']]], + ['complexity_20of_20a_20point_20cloud_20with_20normals_63',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['compressdata_64',['compressData',['../namespacertabmap.html#a749adef593d09b887926afb6ebdb5834',1,'rtabmap']]], + ['compressdata2_65',['compressData2',['../namespacertabmap.html#aca82ee9efc46461c648c7ab8999e1d5b',1,'rtabmap']]], + ['compresseddepthformat_66',['compresseddepthformat',['../namespacertabmap.html#a58b406e413250675abbf0ec2956e3de8',1,'rtabmap::compressedDepthFormat(const unsigned char *bytes, size_t size)'],['../namespacertabmap.html#ab5cb2dcd6db7fe3bbe25d847177582c2',1,'rtabmap::compressedDepthFormat(const std::vector< unsigned char > &bytes)'],['../namespacertabmap.html#a67c525e80a7187b3106e5fd76155cabc',1,'rtabmap::compressedDepthFormat(const cv::Mat &bytes)']]], + ['compressimage_67',['compressImage',['../namespacertabmap.html#a52beb14eea422420c95fd69bdf3ab9dc',1,'rtabmap']]], + ['compressimage2_68',['compressImage2',['../namespacertabmap.html#abd9d5523210562abd9b5dc8fa9dbeb99',1,'rtabmap']]], + ['compressionthread_69',['compressionthread',['../classrtabmap_1_1CompressionThread.html',1,'rtabmap::CompressionThread'],['../classrtabmap_1_1CompressionThread.html#a6bdec4c44e47774291bc9f98b3b5c146',1,'rtabmap::CompressionThread::CompressionThread(const cv::Mat &mat, const std::string &format="")'],['../classrtabmap_1_1CompressionThread.html#a8cfe0e3d632c888c143b4e7902145fde',1,'rtabmap::CompressionThread::CompressionThread(const cv::Mat &bytes, bool isImage)']]], + ['compressstring_70',['compressString',['../namespacertabmap.html#a4f0dfae296aa7029e959d573b286285a',1,'rtabmap']]], + ['computation_71',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]], + ['compute_20structural_20complexity_20of_20a_20point_20cloud_20with_20normals_72',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['compute_20variance_20and_20correspondences_20of_20two_20point_20clouds_73',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]], + ['computebacorrespondences_74',['computeBACorrespondences',['../classrtabmap_1_1Optimizer.html#a93fb09dac068e64de000f692bcb8216f',1,'rtabmap::Optimizer']]], + ['computecorrespondences_75',['computecorrespondences',['../classrtabmap_1_1Stereo.html#aefb9a38643b353727430c4bb6a551382',1,'rtabmap::Stereo::computeCorrespondences()'],['../classrtabmap_1_1StereoOpticalFlow.html#a406bbf688782966ea55a44c49ac10cbe',1,'rtabmap::StereoOpticalFlow::computeCorrespondences()']]], + ['computedepth_76',['computeDepth',['../classrtabmap_1_1StereoCameraModel.html#a514f7d1baff8b4be96d760b27279f5d6',1,'rtabmap::StereoCameraModel']]], + ['computedisparity_77',['computedisparity',['../classrtabmap_1_1StereoSGBM.html#ac0677ba125a665fe723f20814bf724cc',1,'rtabmap::StereoSGBM::computeDisparity()'],['../classrtabmap_1_1StereoBM.html#a94b6d71050cf4b784f87853175c57b00',1,'rtabmap::StereoBM::computeDisparity()'],['../classrtabmap_1_1StereoCameraModel.html#aecf8b2a628ead0bc422dbf791d683f5b',1,'rtabmap::StereoCameraModel::computeDisparity(float depth) const'],['../classrtabmap_1_1StereoCameraModel.html#a28230b8236ed778729ed1e1ceb590f31',1,'rtabmap::StereoCameraModel::computeDisparity(unsigned short depth) const'],['../classrtabmap_1_1StereoDense.html#ac394d1dad3fa899f310e4c3eb3e428c4',1,'rtabmap::StereoDense::computeDisparity()']]], + ['computeicptransform_78',['computeIcpTransform',['../classrtabmap_1_1Memory.html#aca66c6d1316f9d833b279104a683ee50',1,'rtabmap::Memory']]], + ['computeicptransformmulti_79',['computeIcpTransformMulti',['../classrtabmap_1_1Memory.html#a34aa7efd5f6ce0fd3136459542ad8ebb',1,'rtabmap::Memory']]], + ['computelikelihood_80',['computeLikelihood',['../classrtabmap_1_1Memory.html#a984ca01a87434b11a66dc1d96e2fff17',1,'rtabmap::Memory']]], + ['computenormalscomplexity_81',['computenormalscomplexity',['../group__ComputeNormalsComplexity.html#ga3e024c51a6a49d1c8e6b64c230148137',1,'rtabmap::util3d::computeNormalsComplexity(const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)'],['../group__ComputeNormalsComplexity.html#ga6e03130bf686d43ea527dc8e6f5cce55',1,'rtabmap::util3d::computeNormalsComplexity(const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)'],['../group__ComputeNormalsComplexity.html#ga13a6d7525494d390041c9ef0337e02dd',1,'rtabmap::util3d::computeNormalsComplexity(const pcl::PointCloud< pcl::PointNormal > &cloud, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)'],['../group__ComputeNormalsComplexity.html#ga5a68422282e99f8d05c0821eac491895',1,'rtabmap::util3d::computeNormalsComplexity(const pcl::PointCloud< pcl::Normal > &normals, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)'],['../group__ComputeNormalsComplexity.html#ga3724a082502fbef6222c11843ca56b58',1,'rtabmap::util3d::computeNormalsComplexity(const LaserScan &scan, const Transform &t=Transform::getIdentity(), cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)']]], + ['computepath_82',['computepath',['../classrtabmap_1_1Rtabmap.html#a14d5c84b61386e95071e90aba406ff49',1,'rtabmap::Rtabmap::computePath(const Transform &targetPose, float tolerance=-1.0f)'],['../classrtabmap_1_1Rtabmap.html#ab797f7f5bb73a507ba4d4672cd5476df',1,'rtabmap::Rtabmap::computePath(int targetNode, bool global)']]], + ['computeposterior_83',['computePosterior',['../classrtabmap_1_1BayesFilter.html#a7ab8bc28ec172a18a80001585161b238',1,'rtabmap::BayesFilter']]], + ['computeroi_84',['computeroi',['../group__RoiComputation.html#ga56fed8ce688e8e9eb3b1f74ad0febcef',1,'rtabmap::util2d::computeRoi()'],['../classrtabmap_1_1Feature2D.html#a8bdfa57df68506fecb6342b9f5bc98e8',1,'rtabmap::Feature2D::computeRoi()'],['../group__RoiComputation.html#ga79d3f93673fb236980f0be532695f478',1,'rtabmap::util2d::computeRoi(const cv::Mat &image, const std::string &roiRatios)'],['../group__RoiComputation.html#ga2f0ffb8f6882e28709b03446d50250bb',1,'rtabmap::util2d::computeRoi(const cv::Size &imageSize, const std::string &roiRatios)'],['../group__RoiComputation.html#ga81d9f49d117d02494c7ff57f5d426b15',1,'rtabmap::util2d::computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios)']]], + ['computetransform_85',['computetransform',['../classrtabmap_1_1Memory.html#a4ae0287262c04905baab2d6f94448486',1,'rtabmap::Memory::computeTransform(Signature &fromS, Signature &toS, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false) const'],['../classrtabmap_1_1Memory.html#a29636c34234e6e2809e3d57329dc40d6',1,'rtabmap::Memory::computeTransform(int fromId, int toId, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false)']]], + ['computetransformation_86',['computetransformation',['../classrtabmap_1_1Registration.html#aa6b81a6f4137138a1b49510cc3f97679',1,'rtabmap::Registration::computeTransformation(const Signature &from, const Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const'],['../classrtabmap_1_1Registration.html#a42d0c93204bc4da11eb89707ea2c03c6',1,'rtabmap::Registration::computeTransformation(const SensorData &from, const SensorData &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const']]], + ['computetransformationimpl_87',['computetransformationimpl',['../classrtabmap_1_1Registration.html#a21635a391a85b64bc33787179a6cd71b',1,'rtabmap::Registration::computeTransformationImpl()'],['../classrtabmap_1_1RegistrationIcp.html#a8a18107160cfc05cfb8a5109540d81b5',1,'rtabmap::RegistrationIcp::computeTransformationImpl()'],['../classrtabmap_1_1RegistrationVis.html#aa47fd3a0599ee918e024161db330a92f',1,'rtabmap::RegistrationVis::computeTransformationImpl()']]], + ['computetransformationmod_88',['computeTransformationMod',['../classrtabmap_1_1Registration.html#a44530cd77f6d0a9657251864fb136c0d',1,'rtabmap::Registration']]], + ['computevarianceandcorrespondences_89',['computevarianceandcorrespondences',['../group__ComputeVarianceAndCorrespondences.html#gaf474f9fb6eaaf532e9b18af63b9e1665',1,'rtabmap::util3d::computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudB, double maxCorrespondenceDistance, double maxCorrespondenceAngle, double &variance, int &correspondencesOut, bool reciprocal)'],['../group__ComputeVarianceAndCorrespondences.html#gaae6ddd0517614e9332669c37c6816777',1,'rtabmap::util3d::computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointXYZINormal >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointXYZINormal >::ConstPtr &cloudB, double maxCorrespondenceDistance, double maxCorrespondenceAngle, double &variance, int &correspondencesOut, bool reciprocal)'],['../group__ComputeVarianceAndCorrespondences.html#ga92518a7b79e9265380f3a047e46ec247',1,'rtabmap::util3d::computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloudB, double maxCorrespondenceDistance, double &variance, int &correspondencesOut, bool reciprocal)'],['../group__ComputeVarianceAndCorrespondences.html#ga7d90c0848a13e35f37588addf3637fe2',1,'rtabmap::util3d::computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointXYZI >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointXYZI >::ConstPtr &cloudB, double maxCorrespondenceDistance, double &variance, int &correspondencesOut, bool reciprocal)']]], + ['constraints_90',['constraints',['../classrtabmap_1_1Statistics.html#a30275a92af2f9fb08f3955c5b9e8b661',1,'rtabmap::Statistics']]], + ['convenient_20use_20of_20stl_91',['Convenient use of STL',['../group__UtiLite.html#stl',1,'']]], + ['conversion_92',['Conversion',['../group__UtiLite.html#conversion',1,'']]], + ['convert32ftobin_93',['convert32FToBin',['../classrtabmap_1_1VWDictionary.html#acda9d98e4ad4897ce8a8b945f396221c',1,'rtabmap::VWDictionary']]], + ['convertbinto32f_94',['convertBinTo32F',['../classrtabmap_1_1VWDictionary.html#a70aec2b9d1bf55d47192949aa728448e',1,'rtabmap::VWDictionary']]], + ['converttobaseframe_95',['convertToBaseFrame',['../classrtabmap_1_1IMU.html#a1ccae83f46e87d28e56bcfc4a25fafb8',1,'rtabmap::IMU']]], + ['converttointermediate_96',['convertToIntermediate',['../classrtabmap_1_1Memory.html#ae66a7837edc6e844ee9186e61d139300',1,'rtabmap::Memory']]], + ['copy_97',['copy',['../classUFile.html#aa99e6dc81f23e17ce92bd848dfe5a2f4',1,'UFile::copy(const std::string &from, const std::string &to)'],['../classUFile.html#aa02141310fab62290721deee433f6314',1,'UFile::copy(const std::string &to)']]], + ['copywithoutdata_98',['copyWithoutData',['../classrtabmap_1_1RegistrationInfo.html#ae7abf7e34019a0c27b2de8ac5647f277',1,'rtabmap::RegistrationInfo']]], + ['correspondences_20of_20two_20point_20clouds_99',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]], + ['corresponding_20output_20data_3a_100',['Supported input types and corresponding output data:',['../group__LaserScanFromPointCloud.html#autotoc_md0',1,'']]], + ['covariance_101',['covariance',['../classrtabmap_1_1Landmark.html#a1c1e20cccc5f659743ba48c8afe1a8a0',1,'rtabmap::Landmark::covariance()'],['../classrtabmap_1_1RegistrationInfo.html#a347f413d8a96dea23c4fdc6af2a1ddb5',1,'rtabmap::RegistrationInfo::covariance']]], + ['covariance_5fangular_5fepsilon_102',['COVARIANCE_ANGULAR_EPSILON',['../classrtabmap_1_1Registration.html#ae40b7ab65642aac9f21f44887b23b97d',1,'rtabmap::Registration']]], + ['covariance_5flinear_5fepsilon_103',['COVARIANCE_LINEAR_EPSILON',['../classrtabmap_1_1Registration.html#a7c8c2d7a65357ef9f5d60ce3f763f4b3',1,'rtabmap::Registration']]], + ['create_104',['create',['../classrtabmap_1_1Optimizer.html#a78b457bec2cdb7bdd320e2bfcca759df',1,'rtabmap::Optimizer::create()'],['../classrtabmap_1_1StereoDense.html#ae52002299f7e443a8e9cdc33effae37c',1,'rtabmap::StereoDense::create(StereoDense::Type type, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1StereoDense.html#ad2a4e50429b17c2cb1938e9d922ba7ce',1,'rtabmap::StereoDense::create(const ParametersMap &parameters)'],['../classrtabmap_1_1Stereo.html#a2ce0c01fac282e0a8ffd862608fa2d96',1,'rtabmap::Stereo::create()'],['../classrtabmap_1_1Registration.html#a1e3493a850551c98f9e814fed74400e6',1,'rtabmap::Registration::create(Type &type, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1Registration.html#a516e8d64cdb3e7a743a3aa40ab026def',1,'rtabmap::Registration::create(const ParametersMap &parameters)'],['../classrtabmap_1_1Optimizer.html#aeff86117cf69fdae3c25e5bc327a142d',1,'rtabmap::Optimizer::create()'],['../classrtabmap_1_1Odometry.html#a1240aaf3a92a75b4c3c9ded9117144bb',1,'rtabmap::Odometry::create(Type &type, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1Odometry.html#ac8992df0b92a86c10fe8e8da2b5f3627',1,'rtabmap::Odometry::create(const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1IMUFilter.html#a7a01dc897399c51c4a362d2438b90875',1,'rtabmap::IMUFilter::create(IMUFilter::Type type, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1IMUFilter.html#a16790b3787da5941c89d0c1d98e76234',1,'rtabmap::IMUFilter::create(const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1RtabmapColorOcTree.html#ac109340a5367e1b818febb00ae06f18e',1,'rtabmap::RtabmapColorOcTree::create()'],['../classrtabmap_1_1Feature2D.html#ab9deec7c0e26722736aeeaeb5541ac3a',1,'rtabmap::Feature2D::create(Feature2D::Type type, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1Feature2D.html#a58ac3dff96e882f0e4bbbf8a8ffc435d',1,'rtabmap::Feature2D::create(const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1DBDriver.html#a1f75e440b35243ccad645052bc4a12f9',1,'rtabmap::DBDriver::create()']]], + ['createlocalmap_105',['createlocalmap',['../classrtabmap_1_1LocalGridMaker.html#a97d17a585226dcffe580406736e00117',1,'rtabmap::LocalGridMaker::createLocalMap(const Signature &node, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPoint)'],['../classrtabmap_1_1LocalGridMaker.html#a3d43b8e022d7638262282ab2c7da0ead',1,'rtabmap::LocalGridMaker::createLocalMap(const LaserScan &cloud, const Transform &pose, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPointInOut) const']]], + ['crop_20box_20filtering_106',['Crop Box Filtering',['../group__CropBox.html',1,'']]], + ['cropbox_107',['cropbox',['../group__CropBox.html#ga3b4c45a05e5bc0ff7d4c3917103e4f29',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga32e6cd849848faaccc6b46ba02f98f6b',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga5d5cafb95fb856438e55a0de06378ef7',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga8065c61da2295bf203e4ee7471e9332d',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga1f23604e3b58f73183fe3102dd9f86c9',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga1302fc8f7569390d2d9a6a66c24f5179',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga15f14d0a8c9de82ff3ad398fa8c36097',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga0fe7f976bca4c8ec9dd0afa95f590c72',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga43309cd4b35fcbe7a746ccb1dc9a1b4f',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga20a5eeed65c38958ed5866216f26bd44',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#gaa6737135785f73d1a2f3ec966ab22bc7',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga668e8d0a8a8abd65500bd7e7b748eec2',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga8291151381ff38773e641740b66b93ef',1,'rtabmap::util3d::cropBox(const pcl::PCLPointCloud2::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)']]], + ['currentdir_108',['currentDir',['../classUDirectory.html#a30b3c4e8f81892e5ea04bdab3beba900',1,'UDirectory']]], + ['currentgoalid_109',['currentGoalId',['../classrtabmap_1_1Statistics.html#adae0424da0557be95b6968eecdbc628e',1,'rtabmap::Statistics']]], + ['cvtdepthfromfloat_110',['cvtDepthFromFloat',['../namespacertabmap_1_1util2d.html#a6740b13198a2c437ab51d8e0503f2d33',1,'rtabmap::util2d']]], + ['cvtdepthtofloat_111',['cvtDepthToFloat',['../namespacertabmap_1_1util2d.html#a0e4631bed561b3a694a1a65853221f75',1,'rtabmap::util2d']]], + ['cx_112',['cx',['../classrtabmap_1_1CameraModel.html#af81ee9572d32f69bf0a66cd1f4671c20',1,'rtabmap::CameraModel']]], + ['cy_113',['cy',['../classrtabmap_1_1CameraModel.html#aa3a18f811d3e9db290d01371e078add3',1,'rtabmap::CameraModel']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_7.js b/preview/pr-1492/api/latest/search/all_7.js new file mode 100644 index 00000000..a41110e0 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_7.js @@ -0,0 +1,49 @@ +var searchData= +[ + ['d_0',['D',['../classrtabmap_1_1CameraModel.html#a4aa121905a9b2aabb6a3592a6eb7459a',1,'rtabmap::CameraModel']]], + ['d_5fraw_1',['D_raw',['../classrtabmap_1_1CameraModel.html#a88ec7053f4d442c4b1b79803c2840f28',1,'rtabmap::CameraModel']]], + ['data_2',['data',['../classrtabmap_1_1SensorEvent.html#a02d0ef0c42eab24adb8013a9693e02b1',1,'rtabmap::SensorEvent::data()'],['../classrtabmap_1_1Statistics.html#ab5c8be76435cdfb98c656ccc236f029a',1,'rtabmap::Statistics::data()'],['../classrtabmap_1_1Transform.html#a8db5709fa16ae937c5221b6e8bbbf364',1,'rtabmap::Transform::data()']]], + ['data_3a_3',['Supported input types and corresponding output data:',['../group__LaserScanFromPointCloud.html#autotoc_md0',1,'']]], + ['databaserecovery_4',['databaseRecovery',['../namespacertabmap.html#a84468b4bab971b3b8e2c33a746bf7f36',1,'rtabmap']]], + ['datamatrix_5',['dataMatrix',['../classrtabmap_1_1Transform.html#aac41c119a4602f70494380303fe5d277',1,'rtabmap::Transform']]], + ['dbdriver_6',['dbdriver',['../classrtabmap_1_1DBDriver.html',1,'rtabmap::DBDriver'],['../classrtabmap_1_1DBDriver.html#a5f90eb62bb559d42611dbe7ffe11328e',1,'rtabmap::DBDriver::DBDriver()']]], + ['dbdriversqlite3_7',['dbdriversqlite3',['../classrtabmap_1_1DBDriverSqlite3.html',1,'rtabmap::DBDriverSqlite3'],['../classrtabmap_1_1DBDriverSqlite3.html#a471f26a35b093bbd5a59766735a94fd1',1,'rtabmap::DBDriverSqlite3::DBDriverSqlite3()']]], + ['dbreader_8',['DBReader',['../classrtabmap_1_1DBReader.html',1,'rtabmap']]], + ['decimate_9',['decimate',['../namespacertabmap_1_1util2d.html#a0b545a9f852684afb0a6d8f835f9eaf2',1,'rtabmap::util2d']]], + ['defaultdata_10',['defaultData',['../classrtabmap_1_1Statistics.html#a917322822da5565f5c7438849f307c4f',1,'rtabmap::Statistics']]], + ['deletelastlocation_11',['deleteLastLocation',['../classrtabmap_1_1Rtabmap.html#aee23115b4bd02bce5d1721418a0f7599',1,'rtabmap::Rtabmap']]], + ['deletelocation_12',['deleteLocation',['../classrtabmap_1_1Memory.html#a2b91d8b5d651fbaa12a31e364c793a21',1,'rtabmap::Memory']]], + ['deleteunusedwords_13',['deleteUnusedWords',['../classrtabmap_1_1VWDictionary.html#a33c8904edf3d0af65dfd2a6d817416fa',1,'rtabmap::VWDictionary']]], + ['deprecated_20list_14',['Deprecated List',['../deprecated.html',1,'']]], + ['depth_15',['depth',['../classrtabmap_1_1FeatureBA.html#ad48600a5b6ed17e7713f1485c4317948',1,'rtabmap::FeatureBA']]], + ['depthbleedingfiltering_16',['depthBleedingFiltering',['../namespacertabmap_1_1util2d.html#a7788d4dabf084959aa69162d5dbb2d2e',1,'rtabmap::util2d']]], + ['depthconfidencecompressed_17',['depthConfidenceCompressed',['../classrtabmap_1_1SensorData.html#aebbab80906082f6e35ce5731fa67ca26',1,'rtabmap::SensorData']]], + ['depthconfidenceraw_18',['depthConfidenceRaw',['../classrtabmap_1_1SensorData.html#a0cfb7cee085b7959c9ddf1d7854ed910',1,'rtabmap::SensorData']]], + ['depthfromdisparity_19',['depthFromDisparity',['../namespacertabmap_1_1util2d.html#a110359c4884579e1c7b68d8baa7acb6c',1,'rtabmap::util2d']]], + ['depthfromstereocorrespondences_20',['depthFromStereoCorrespondences',['../namespacertabmap_1_1util2d.html#ae6548e6246eceaff5dcc9ee30514eac5',1,'rtabmap::util2d']]], + ['depthfromstereoimages_21',['depthFromStereoImages',['../namespacertabmap_1_1util2d.html#aacf89454b054d86b53a8038c8a404b50',1,'rtabmap::util2d']]], + ['depthorrightcompressed_22',['depthOrRightCompressed',['../classrtabmap_1_1SensorData.html#a85b36ca12b0936a99d61b768908097da',1,'rtabmap::SensorData']]], + ['depthorrightraw_23',['depthOrRightRaw',['../classrtabmap_1_1SensorData.html#a2476c59283ef2e24d7a3f10301433327',1,'rtabmap::SensorData']]], + ['depthraw_24',['depthRaw',['../classrtabmap_1_1SensorData.html#a1970cd319999fb371873553b53b07d73',1,'rtabmap::SensorData']]], + ['descriptor_25',['descriptor',['../classrtabmap_1_1FeatureBA.html#a7db630b2f418b05d2fbd772d1caadf48',1,'rtabmap::FeatureBA']]], + ['descriptors_26',['descriptors',['../classrtabmap_1_1SensorData.html#a5cf732793c05b16bb67f144524882b26',1,'rtabmap::SensorData']]], + ['deserialize_27',['deserialize',['../classrtabmap_1_1CameraModel.html#a490dc97ca8aa55d96324eb6612ccfd30',1,'rtabmap::CameraModel::deserialize(const std::vector< unsigned char > &data)'],['../classrtabmap_1_1CameraModel.html#a181c2e53da1151c281d85fde986a29c5',1,'rtabmap::CameraModel::deserialize(const unsigned char *data, unsigned int dataSize)'],['../classrtabmap_1_1StereoCameraModel.html#a7467f3a9a7961e643d0cd152286a13dd',1,'rtabmap::StereoCameraModel::deserialize(const std::vector< unsigned char > &data)'],['../classrtabmap_1_1StereoCameraModel.html#afdec3f5bab7ab9b4c339edaa30e639db',1,'rtabmap::StereoCameraModel::deserialize(const unsigned char *data, unsigned int dataSize)']]], + ['deserializedata_28',['deserializeData',['../classrtabmap_1_1Statistics.html#a167ea0c3bc76865e90624323e72399c7',1,'rtabmap::Statistics']]], + ['deserializeindex_29',['deserializeindex',['../classrtabmap_1_1VWDictionary.html#a0a29d849a7c2b626407f453e5cb4b526',1,'rtabmap::VWDictionary::deserializeIndex(const unsigned char *data, size_t size)'],['../classrtabmap_1_1VWDictionary.html#a3af1cce90b50dcb0f9dcd77e1fb08aad',1,'rtabmap::VWDictionary::deserializeIndex(const std::vector< unsigned char > &data)']]], + ['detectmoreloopclosures_30',['detectMoreLoopClosures',['../classrtabmap_1_1Rtabmap.html#a600d86ab2a67fa08d6a1e726380948ea',1,'rtabmap::Rtabmap']]], + ['disablebilateralfiltering_31',['disableBilateralFiltering',['../classrtabmap_1_1SensorCaptureThread.html#a57beeb2c34d4430e37da05ef8e400a9b',1,'rtabmap::SensorCaptureThread']]], + ['disablefeaturedetection_32',['disableFeatureDetection',['../classrtabmap_1_1SensorCaptureThread.html#aeddec5c0c55aab261b31d0a980a7d327',1,'rtabmap::SensorCaptureThread']]], + ['disableimufiltering_33',['disableimufiltering',['../classrtabmap_1_1SensorCaptureThread.html#a75c2426adc532854f1d7119256b1cf0d',1,'rtabmap::SensorCaptureThread::disableIMUFiltering()'],['../classrtabmap_1_1IMUThread.html#a7934573b7f4899278f1b048cf9a686bc',1,'rtabmap::IMUThread::disableIMUFiltering()']]], + ['discretedepthdistortionmodel_34',['DiscreteDepthDistortionModel',['../classclams_1_1DiscreteDepthDistortionModel.html',1,'clams']]], + ['discretefrustum_35',['DiscreteFrustum',['../classclams_1_1DiscreteFrustum.html',1,'clams']]], + ['disparityfromstereocorrespondences_36',['disparityFromStereoCorrespondences',['../namespacertabmap_1_1util2d.html#a4f10f8038c62a97d3a79bd2dc5bf2c58',1,'rtabmap::util2d']]], + ['disparityfromstereoimages_37',['disparityFromStereoImages',['../namespacertabmap_1_1util2d.html#ad7ea8d1905c7143d376c57c9e22dcea5',1,'rtabmap::util2d']]], + ['downsample_38',['downsample',['../group__PointCloudDownSampling.html#ga83a15e5eaeee8707bfa5563c71154579',1,'rtabmap::util3d::downsample(const LaserScan &cloud, int step)'],['../group__PointCloudDownSampling.html#ga2f9dd8a7c572ce78b76aec448b17a863',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#ga7a57facb7148254d43af7577a3716d15',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#gab4b196b83a0634b8e58c145ed54d510d',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#ga83657d48dce8b727088941773f4d8a73',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#ga8c3ca654fb0cc07084fdac8077714b3a',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#ga32d575439b2f5082c3946bc964c14b75',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, int step)']]], + ['downsampling_39',['Point Cloud Downsampling',['../group__PointCloudDownSampling.html',1,'']]], + ['dumpdata_40',['dumpData',['../classrtabmap_1_1Rtabmap.html#a38db1c80ae583e255dd6174ba6d41ffc',1,'rtabmap::Rtabmap']]], + ['dumpdictionary_41',['dumpDictionary',['../classrtabmap_1_1Memory.html#afc3de4b861e23f90bf753794bcb40e68',1,'rtabmap::Memory']]], + ['dumpmemory_42',['dumpMemory',['../classrtabmap_1_1Memory.html#a634e2fdc0e1c93a2cb01f07c9cbac33f',1,'rtabmap::Memory']]], + ['dumpmemorytree_43',['dumpMemoryTree',['../classrtabmap_1_1Memory.html#a4aef39ff933463d9693e8f4f325f74e7',1,'rtabmap::Memory']]], + ['dumpprediction_44',['dumpPrediction',['../classrtabmap_1_1Rtabmap.html#ad0c040e54bbca27dffc46346d96c57cb',1,'rtabmap::Rtabmap']]], + ['dumpsignatures_45',['dumpSignatures',['../classrtabmap_1_1Memory.html#a1b470cb9ff41fd77a35d9a6230750446',1,'rtabmap::Memory']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_8.js b/preview/pr-1492/api/latest/search/all_8.js new file mode 100644 index 00000000..74097157 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_8.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['e_0',['E',['../classrtabmap_1_1StereoCameraModel.html#a8ab6c698248837e4dcfe36c2e7b02546',1,'rtabmap::StereoCameraModel']]], + ['elapsed_1',['elapsed',['../classUTimer.html#a372405f02e1d4e9571a73d80962d6f4c',1,'UTimer']]], + ['empty_2',['empty',['../classrtabmap_1_1IMU.html#ace111e68ca49e6d47cc92f53a0be87ef',1,'rtabmap::IMU']]], + ['emptycells_3',['emptyCells',['../classrtabmap_1_1LocalGrid.html#a7d0a732be74bd5c46e9029982bf4972b',1,'rtabmap::LocalGrid']]], + ['emptytrash_4',['emptyTrash',['../classrtabmap_1_1Memory.html#a072ec41027a03072f1a945540b43a1b8',1,'rtabmap::Memory']]], + ['emptytrashes_5',['emptyTrashes',['../classrtabmap_1_1DBDriver.html#ab4a0036162994c2ef76d4236e2a7ea0a',1,'rtabmap::DBDriver']]], + ['enablebilateralfiltering_6',['enableBilateralFiltering',['../classrtabmap_1_1SensorCaptureThread.html#a429011ef7b39d30fc98413d727cccf4b',1,'rtabmap::SensorCaptureThread']]], + ['enablefeaturedetection_7',['enableFeatureDetection',['../classrtabmap_1_1SensorCaptureThread.html#aa0a6c975417a655029470aea2ea5d01a',1,'rtabmap::SensorCaptureThread']]], + ['enableimufiltering_8',['enableimufiltering',['../classrtabmap_1_1IMUThread.html#ad7e54aa5d2c6a9354e38bda9f01c89ab',1,'rtabmap::IMUThread::enableIMUFiltering()'],['../classrtabmap_1_1SensorCaptureThread.html#a97ef5e49b994fcd2a3c87d6f7ef244ec',1,'rtabmap::SensorCaptureThread::enableIMUFiltering()']]], + ['ensurelinking_9',['ensureLinking',['../classrtabmap_1_1RtabmapColorOcTree_1_1StaticMemberInitializer.html#aff6bc204ec1c5dfaa423d8ec3e448f0f',1,'rtabmap::RtabmapColorOcTree::StaticMemberInitializer']]], + ['enu_5fwgs84togeocentric_5fwgs84_10',['ENU_WGS84ToGeocentric_WGS84',['../classrtabmap_1_1GeodeticCoords.html#a7f8066cd690d20fc02ad19bf96d9215b',1,'rtabmap::GeodeticCoords']]], + ['envsensor_11',['envsensor',['../classrtabmap_1_1EnvSensor.html',1,'rtabmap::EnvSensor'],['../classrtabmap_1_1EnvSensor.html#a512758b1afef465b24ce24de8a705dc9',1,'rtabmap::EnvSensor::EnvSensor()'],['../classrtabmap_1_1EnvSensor.html#a8b2f05e0297750a60ccd05c56f141a1b',1,'rtabmap::EnvSensor::EnvSensor(const Type &type, const double &value, const double &stamp=0)']]], + ['envsensors_12',['envsensors',['../namespacertabmap.html#ac175ef40b7a4acb632232d3d96a1199a',1,'rtabmap::EnvSensors'],['../classrtabmap_1_1SensorData.html#a4cce095c69f9fa8f0035c9f2f51c0ff9',1,'rtabmap::SensorData::envSensors()']]], + ['epipolargeometry_13',['EpipolarGeometry',['../classrtabmap_1_1EpipolarGeometry.html',1,'rtabmap']]], + ['epsilon_14',['epsilon',['../classrtabmap_1_1Optimizer.html#a3bca4e3df1048f8bbad9b3b9473924a2',1,'rtabmap::Optimizer::epsilon()'],['../classrtabmap_1_1StereoOpticalFlow.html#ae53f537e0e9ebf121ff8a8b3bdc410a8',1,'rtabmap::StereoOpticalFlow::epsilon()']]], + ['erase_15',['erase',['../classUFile.html#a1faba3e78bb915a685d82f0696e1ec02',1,'UFile']]], + ['error_16',['error',['../classrtabmap_1_1GPS.html#acf16049cca9dfc2fdb46705818f3bb34',1,'rtabmap::GPS']]], + ['estimatemapdepth_17',['estimateMapDepth',['../classclams_1_1FrameProjector.html#a26c74a7a7f6f6e9c2e18d6a38693699c',1,'clams::FrameProjector']]], + ['executenoresult_18',['executeNoResult',['../classrtabmap_1_1DBDriver.html#a835fc23bd4f6532af71f3aadfb8037d8',1,'rtabmap::DBDriver']]], + ['exists_19',['exists',['../classUDirectory.html#ad82410f2502789f23d30984a5b1d7724',1,'UDirectory::exists()'],['../classUFile.html#ab8719ee88436205b171674060eaa4dea',1,'UFile::exists(const std::string &filePath)'],['../classUFile.html#a4963afa70289718a3bd1ca50b6adb420',1,'UFile::exists()']]], + ['exportdictionary_20',['exportDictionary',['../classrtabmap_1_1VWDictionary.html#a1ba7cb31f8658980849ffd9ce76b3cb8',1,'rtabmap::VWDictionary']]], + ['exportposes_21',['exportPoses',['../classrtabmap_1_1Rtabmap.html#aeffdfc811a178ba2e55205b746a6ea71',1,'rtabmap::Rtabmap']]], + ['exposurefusion_22',['exposureFusion',['../namespacertabmap_1_1util2d.html#ac38e8ed586d24c4b9fe72d64afeb9583',1,'rtabmap::util2d']]], + ['extended_23',['extended',['../classrtabmap_1_1Statistics.html#a1e1ba8f7429fa212aa32897877dec122',1,'rtabmap::Statistics']]], + ['extractclusters_24',['extractclusters',['../group__ExtractClusters.html#gada592bb1e0525a32412d5009002b9b1e',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga8e23ae8df06afbb753eb6eb0b54a400a',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga3e51576a82fef5cddffe4d3ae14d8899',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga7c622ccc41a487527f0448db84fd8539',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#gaecfbf327f7ef38738d0e592ed470d318',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga8184974cc084fdd804e82bb979eb2353',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga180048dc26009c5d6d1233bb6ce5de04',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga62a0d02930f5969cbff707afe01d1bcd',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)']]], + ['extractindices_25',['extractindices',['../group__ExtractIndices.html#ga8ce0dc4070d599c6f4a8c55651c2f944',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#gaa312bb0ae54f1472d4e4f22bee7cc4d6',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#gad759e35639cd87f04ebd09eadb5865f5',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#gaf6cd58fdda3450fb11496395e35908d7',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#gaca2188ec4a875fb9c6d2fa240888dcf1',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#ga2a39a8e9d769e5e2cea8054b7084af1e',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#gae196609121fa899ba2735d406aedc73b',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#gaf8e635d6864b0a7f41bad4bb185a57f4',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#ga93acd3d20cbab15b628cbc2a0f3b1919',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#ga0c8a4fe56efba09d2bf6c5b84da36702',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#ga8685395807479f06b19d9d41616a03a7',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)']]], + ['extraction_26',['extraction',['../group__ExtractClusters.html',1,'Point Cloud Cluster Extraction'],['../group__ExtractIndices.html',1,'Point Cloud Indices Extraction']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_9.js b/preview/pr-1492/api/latest/search/all_9.js new file mode 100644 index 00000000..5f488e0a --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_9.js @@ -0,0 +1,43 @@ +var searchData= +[ + ['f_0',['F',['../classrtabmap_1_1StereoCameraModel.html#a1e4ffc9baa8dfee0a79ea32bac9b7c1c',1,'rtabmap::StereoCameraModel']]], + ['fast_1',['FAST',['../classrtabmap_1_1FAST.html',1,'rtabmap']]], + ['fast_5fbrief_2',['FAST_BRIEF',['../classrtabmap_1_1FAST__BRIEF.html',1,'rtabmap']]], + ['fast_5ffreak_3',['FAST_FREAK',['../classrtabmap_1_1FAST__FREAK.html',1,'rtabmap']]], + ['fastbilateralfiltering_4',['fastBilateralFiltering',['../namespacertabmap_1_1util2d.html#a076914fde23d1323fccf71a794b9bc51',1,'rtabmap::util2d']]], + ['feature2d_5',['Feature2D',['../classrtabmap_1_1Feature2D.html',1,'rtabmap']]], + ['featureba_6',['FeatureBA',['../classrtabmap_1_1FeatureBA.html',1,'rtabmap']]], + ['field_7',['field',['../classrtabmap_1_1LaserScan.html#a61d7ecfee5d444fdde06efb0f13ed68d',1,'rtabmap::LaserScan']]], + ['filldepthholes_8',['fillDepthHoles',['../namespacertabmap_1_1util2d.html#aeb3dee2cf6484f0b224d4687899cb004',1,'rtabmap::util2d']]], + ['fillregistereddepthholes_9',['fillRegisteredDepthHoles',['../namespacertabmap_1_1util2d.html#afc6c9b3442c64ef2061365ead3923228',1,'rtabmap::util2d']]], + ['filtering_10',['filtering',['../group__CropBox.html',1,'Crop Box Filtering'],['../group__FrustumFiltering.html',1,'Frustum Filtering'],['../group__PassThrough.html',1,'Pass-through Filtering'],['../group__PointNormalFiltering.html',1,'Point Normal Filtering'],['../group__ProportionalRadiusFiltering.html',1,'Proportional Radius Filtering'],['../group__RadiusFiltering.html',1,'Radius Filtering'],['../group__SubtractFiltering.html',1,'Subtract Filtering'],['../group__VoxelFiltering.html',1,'Voxel Filtering']]], + ['filtering_20of_20pcl_20point_20clouds_11',['filtering of pcl point clouds',['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds']]], + ['filterkeypointsbydepth_12',['filterKeypointsByDepth',['../classrtabmap_1_1Feature2D.html#aadbb5a7611eb94ea6925115999bc0f4e',1,'rtabmap::Feature2D']]], + ['filterkeypointsbydisparity_13',['filterKeypointsByDisparity',['../classrtabmap_1_1Feature2D.html#a32fa09026282be6a729483bfe57d31ec',1,'rtabmap::Feature2D']]], + ['filterparameters_14',['filterParameters',['../classrtabmap_1_1Parameters.html#a24faced7b8d2ebb7045cd6f8f6382ad7',1,'rtabmap::Parameters']]], + ['findnn_15',['findnn',['../classrtabmap_1_1VWDictionary.html#aada11cf01b586ac8205f8bff0b1ab295',1,'rtabmap::VWDictionary::findNN(const cv::Mat &descriptors) const'],['../classrtabmap_1_1VWDictionary.html#ac2f21a98b70e91ab2e8a07151c508d1c',1,'rtabmap::VWDictionary::findNN(const std::list< VisualWord * > &vws) const']]], + ['findpairs_16',['findpairs',['../classrtabmap_1_1EpipolarGeometry.html#a8fc121340b9d638dc9b8c69f2d86c5e7',1,'rtabmap::EpipolarGeometry::findPairs(const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)'],['../classrtabmap_1_1EpipolarGeometry.html#ace979984a7d97ccaa18bf0764318d342',1,'rtabmap::EpipolarGeometry::findPairs(const std::map< int, T > &wordsA, const std::map< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)']]], + ['findpairsall_17',['findPairsAll',['../classrtabmap_1_1EpipolarGeometry.html#adfcc58ee756cb99887c6d8807bc7104c',1,'rtabmap::EpipolarGeometry']]], + ['findpairsunique_18',['findPairsUnique',['../classrtabmap_1_1EpipolarGeometry.html#a7c3886c647a098d33a88640ed2477e24',1,'rtabmap::EpipolarGeometry']]], + ['flannindex_19',['FlannIndex',['../classrtabmap_1_1FlannIndex.html',1,'rtabmap']]], + ['flush_20',['flush',['../classULogger.html#a701ad6b99c9040cf3b5d47711e9f6d6a',1,'ULogger']]], + ['force3dof_21',['force3DoF',['../classrtabmap_1_1Registration.html#abb255bdab60a262f9cfc5d868e50cc9c',1,'rtabmap::Registration']]], + ['forget_22',['forget',['../classrtabmap_1_1Memory.html#a51e89ccab2261912b09a5b7178fdd46c',1,'rtabmap::Memory']]], + ['format_23',['Format',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007',1,'rtabmap::LaserScan']]], + ['formats_3a_24',['Supported Formats:',['../util3d__transforms_8h.html#autotoc_md3',1,'']]], + ['fovx_25',['fovX',['../classrtabmap_1_1CameraModel.html#ac3aa6835f8ae019de4dbf85eed849b75',1,'rtabmap::CameraModel']]], + ['fovy_26',['fovY',['../classrtabmap_1_1CameraModel.html#af4df41cc8a613f3e03b1ed14fc0a887e',1,'rtabmap::CameraModel']]], + ['frameprojector_27',['FrameProjector',['../classclams_1_1FrameProjector.html',1,'clams']]], + ['framesprocessed_28',['framesProcessed',['../classrtabmap_1_1Odometry.html#a7476b9fffee225ef396804ef59084659',1,'rtabmap::Odometry']]], + ['from_20a_20point_20cloud_29',['from a point cloud',['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['fromeigen4f_30',['fromEigen4f',['../classrtabmap_1_1Transform.html#aed17615176c1c3e6fdc682232b753d29',1,'rtabmap::Transform']]], + ['fromenu_5fwgs84_31',['fromENU_WGS84',['../classrtabmap_1_1GeodeticCoords.html#abc69e5c7f8e473fe6788042237992d43',1,'rtabmap::GeodeticCoords']]], + ['fromgeocentric_5fwgs84_32',['fromGeocentric_WGS84',['../classrtabmap_1_1GeodeticCoords.html#ae37435ee904b9782fcddbf0f72f388bd',1,'rtabmap::GeodeticCoords']]], + ['fromstring_33',['fromString',['../classrtabmap_1_1Transform.html#a8358aacfcddec4ab82c43c758cad0b75',1,'rtabmap::Transform']]], + ['frustum_20filtering_34',['Frustum Filtering',['../group__FrustumFiltering.html',1,'']]], + ['frustumfiltering_35',['frustumfiltering',['../group__FrustumFiltering.html#ga4ceacaabe757da82d3278b08df766a69',1,'rtabmap::util3d::frustumFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)'],['../group__FrustumFiltering.html#ga93cb6151fc470d6b932b4a7c6cb15090',1,'rtabmap::util3d::frustumFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)'],['../group__FrustumFiltering.html#gad05921639a3371d2ee0f684b77542330',1,'rtabmap::util3d::frustumFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)']]], + ['frustums_5f_36',['frustums_',['../classclams_1_1DiscreteDepthDistortionModel.html#a21e2cb0d6cb694629231405ca67f00a1',1,'clams::DiscreteDepthDistortionModel']]], + ['fullupdateneeded_37',['fullUpdateNeeded',['../classrtabmap_1_1GlobalMap.html#a11e9ba83337edf7f08f3c50064be028a',1,'rtabmap::GlobalMap']]], + ['fx_38',['fx',['../classrtabmap_1_1CameraModel.html#acea616d4e141804dbc5c6eda58bebf6b',1,'rtabmap::CameraModel']]], + ['fy_39',['fy',['../classrtabmap_1_1CameraModel.html#ac4089d34947b040205e281edae4151a1',1,'rtabmap::CameraModel']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_a.js b/preview/pr-1492/api/latest/search/all_a.js new file mode 100644 index 00000000..388da670 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_a.js @@ -0,0 +1,210 @@ +var searchData= +[ + ['gaincompensator_0',['GainCompensator',['../classrtabmap_1_1GainCompensator.html',1,'rtabmap']]], + ['generatedescriptors_1',['generateDescriptors',['../classrtabmap_1_1Feature2D.html#abaca942668ac3d2f16d3e78797ff0fb9',1,'rtabmap::Feature2D']]], + ['generatedotgraph_2',['generateDOTGraph',['../classrtabmap_1_1Rtabmap.html#a3c32f64acd943c676a9b11c7dbd3a5ae',1,'rtabmap::Rtabmap']]], + ['generategraph_3',['generategraph',['../classrtabmap_1_1Memory.html#aebef354bb315f522b4767337a6bd1ee6',1,'rtabmap::Memory::generateGraph()'],['../classrtabmap_1_1DBDriver.html#abbf62fc6967cf618e6b2aece44f45230',1,'rtabmap::DBDriver::generateGraph()']]], + ['generatekeypoints_4',['generateKeypoints',['../classrtabmap_1_1Feature2D.html#a78d70d2150b42203ffd1c94d79661248',1,'rtabmap::Feature2D']]], + ['generatekeypoints3d_5',['generateKeypoints3D',['../classrtabmap_1_1Feature2D.html#ae01a548fe993a7aa309cce96645693ce',1,'rtabmap::Feature2D']]], + ['generateprediction_6',['generatePrediction',['../classrtabmap_1_1BayesFilter.html#a489031236b91dbaba0ff192f90799cd4',1,'rtabmap::BayesFilter']]], + ['geocentric_5fwgs84toenu_5fwgs84_7',['Geocentric_WGS84ToENU_WGS84',['../classrtabmap_1_1GeodeticCoords.html#a76c33e9f988c743e429b0a04d18e258d',1,'rtabmap::GeodeticCoords']]], + ['geodeticcoords_8',['geodeticcoords',['../classrtabmap_1_1GeodeticCoords.html',1,'rtabmap::GeodeticCoords'],['../classrtabmap_1_1GeodeticCoords.html#a0e70bc5a1464b930fafc579322912a68',1,'rtabmap::GeodeticCoords::GeodeticCoords(double latitude, double longitude, double altitude)'],['../classrtabmap_1_1GeodeticCoords.html#a41294c28a20d82ca1cee7f7038255d64',1,'rtabmap::GeodeticCoords::GeodeticCoords()']]], + ['get3dmap_9',['get3DMap',['../classrtabmap_1_1Rtabmap.html#ae617c65a0ba6f95a321b8c0c3a18b0e3',1,'rtabmap::Rtabmap']]], + ['getalllabels_10',['getAllLabels',['../classrtabmap_1_1Memory.html#a055a0ebfc7e2c128d386f8141dc320ce',1,'rtabmap::Memory']]], + ['getalllinks_11',['getAllLinks',['../classrtabmap_1_1Memory.html#acde7a0f34f8896c3c9f002c6cbcc614e',1,'rtabmap::Memory']]], + ['getallsignatureids_12',['getAllSignatureIds',['../classrtabmap_1_1Memory.html#a4c7c344a7f3733a8f30a6e82fbb4f20a',1,'rtabmap::Memory']]], + ['getangle_13',['getAngle',['../classrtabmap_1_1Transform.html#abd0f443c22c295cfe85e2402516defcc',1,'rtabmap::Transform']]], + ['getbackwardcompatibilitymap_14',['getBackwardCompatibilityMap',['../classrtabmap_1_1Parameters.html#a66c12cd1e2e614cc5c987cf7f0dbe2be',1,'rtabmap::Parameters']]], + ['getcellsize_15',['getcellsize',['../classrtabmap_1_1LocalGridMaker.html#a305865c8f98b498b13a35ef0b790f926',1,'rtabmap::LocalGridMaker::getCellSize()'],['../classrtabmap_1_1GlobalMap.html#a445f18d347d5624a012f756eb9fe5320',1,'rtabmap::GlobalMap::getCellSize()']]], + ['getclassname_16',['getclassname',['../classrtabmap_1_1RtabmapEventCmd.html#a23c1b76dc2e8d6223cb52cb4fcaf7b5c',1,'rtabmap::RtabmapEventCmd::getClassName()'],['../classrtabmap_1_1RtabmapEvent.html#ae548b73bb3504a10a4e40592648f42b8',1,'rtabmap::RtabmapEvent::getClassName()'],['../classrtabmap_1_1ParamEvent.html#a877e2b7fedcb8aba63e3430d7f975e0a',1,'rtabmap::ParamEvent::getClassName()'],['../classrtabmap_1_1OdometryResetEvent.html#a94dc8e8b7ec952c0ca2b393cc0f3e71d',1,'rtabmap::OdometryResetEvent::getClassName()'],['../classrtabmap_1_1OdometryEvent.html#a461365124cbdf488d3a05874be8c4bb2',1,'rtabmap::OdometryEvent::getClassName()'],['../classrtabmap_1_1IMUEvent.html#adf3482d48ccbf36daa039efb596405d0',1,'rtabmap::IMUEvent::getClassName()'],['../classrtabmap_1_1RtabmapEventInit.html#ac10fa3c98f98804d1059b2673233bf0c',1,'rtabmap::RtabmapEventInit::getClassName()'],['../classrtabmap_1_1RtabmapEvent3DMap.html#ad2d9581145b56762e1d9ae5f04101db5',1,'rtabmap::RtabmapEvent3DMap::getClassName()'],['../classrtabmap_1_1RtabmapGlobalPathEvent.html#a5dd474b3110c9d4bb53a832aaeda8145',1,'rtabmap::RtabmapGlobalPathEvent::getClassName()'],['../classrtabmap_1_1RtabmapLabelErrorEvent.html#ab41ac9cdd98c1d94b1a8dc9a21364315',1,'rtabmap::RtabmapLabelErrorEvent::getClassName()'],['../classrtabmap_1_1RtabmapGoalStatusEvent.html#aa90a7d8a6afe4de12b28f68aaf4f2897',1,'rtabmap::RtabmapGoalStatusEvent::getClassName()'],['../classrtabmap_1_1SensorEvent.html#a7bb8ca3a235aa8b58227bc50e19d7493',1,'rtabmap::SensorEvent::getClassName()'],['../classrtabmap_1_1UserDataEvent.html#a26248169380397c47377310d61090385',1,'rtabmap::UserDataEvent::getClassName()'],['../classUEvent.html#a2c7d278240ad4b7d88a2c534cc5f47b4',1,'UEvent::getClassName()'],['../classULogEvent.html#a70ec329f7f43a18805469302ffddc610',1,'ULogEvent::getClassName()'],['../classUObjDeletedEvent.html#adb1ad42f6258d12eee9da77d6f129633',1,'UObjDeletedEvent::getClassName()']]], + ['getclosesttransform_17',['getClosestTransform',['../classrtabmap_1_1Transform.html#ab943d72a808b96b7f89943fc78e38d68',1,'rtabmap::Transform']]], + ['getcode_18',['getCode',['../classUEvent.html#a7356350719dfd5ba2d28368d1fdcd143',1,'UEvent']]], + ['getcompresseddata_19',['getCompressedData',['../classrtabmap_1_1CompressionThread.html#a6908afb16364f91c7d0744decf6c970d',1,'rtabmap::CompressionThread']]], + ['getconnectedgraph_20',['getConnectedGraph',['../classrtabmap_1_1Optimizer.html#a4477c9a5b6651729944726465b5eba7f',1,'rtabmap::Optimizer']]], + ['getdata_21',['getData',['../classrtabmap_1_1IMUEvent.html#a3ebdf9e3cb56c153bf76d4aad5a6b44e',1,'rtabmap::IMUEvent']]], + ['getdatabasememoryused_22',['getDatabaseMemoryUsed',['../classrtabmap_1_1Memory.html#a83d0b30afc46dd66ab3106c9997657c4',1,'rtabmap::Memory']]], + ['getdatabaseurl_23',['getDatabaseUrl',['../classrtabmap_1_1Memory.html#ab2c3951385254cbb42fb399b407ded24',1,'rtabmap::Memory']]], + ['getdatabaseversion_24',['getdatabaseversion',['../classrtabmap_1_1Memory.html#aebd7dd4ef859d70435a5db8e4f398ea5',1,'rtabmap::Memory::getDatabaseVersion()'],['../classrtabmap_1_1DBDriver.html#a9adb7be1463016917f24a3db5f1e8264',1,'rtabmap::DBDriver::getDatabaseVersion()']]], + ['getdbsavingtime_25',['getDbSavingTime',['../classrtabmap_1_1Memory.html#a40ba03d0f1291fc9e45ce86d05479cd3',1,'rtabmap::Memory']]], + ['getdefaultparameters_26',['getDefaultParameters',['../classrtabmap_1_1Parameters.html#a3921b82495e0308f8cfcbdb8ef072e21',1,'rtabmap::Parameters']]], + ['getdepth_27',['getDepth',['../namespacertabmap_1_1util2d.html#a48b07b02efba21a914db10e832589aba',1,'rtabmap::util2d']]], + ['getdescription_28',['getDescription',['../classrtabmap_1_1Parameters.html#a7aacfe3e18e28a1fb81d0f3f0ffbb414',1,'rtabmap::Parameters']]], + ['getdescriptor_29',['getDescriptor',['../classrtabmap_1_1VisualWord.html#a2d20ce6234dc211335a926759e111bbb',1,'rtabmap::VisualWord']]], + ['getdetector_30',['getDetector',['../classrtabmap_1_1RegistrationVis.html#a0a860fb3509b4c5b135b66ebd5cd6e55',1,'rtabmap::RegistrationVis']]], + ['getdir_31',['getDir',['../classUDirectory.html#a0177e6f7286fc63c48fe2629e6ba5b34',1,'UDirectory']]], + ['getdistance_32',['getDistance',['../classrtabmap_1_1Transform.html#ade8f4e91576b320690741efa817bd7ad',1,'rtabmap::Transform']]], + ['getdistancesquared_33',['getDistanceSquared',['../classrtabmap_1_1Transform.html#ae311741cc884ca8f5343bc2710b96a0b',1,'rtabmap::Transform']]], + ['getestimationtype_34',['getEstimationType',['../classrtabmap_1_1RegistrationVis.html#a951c79dd9be75b896c551e5213c0ee31',1,'rtabmap::RegistrationVis']]], + ['geteulerangles_35',['getEulerAngles',['../classrtabmap_1_1Transform.html#adf2345af30927b656ceca938ec4d0525',1,'rtabmap::Transform']]], + ['getextension_36',['getextension',['../classUFile.html#aa937b9f20ef2e51091845c5108ded154',1,'UFile::getExtension()'],['../classUFile.html#ac630657b2f15288df6ecddec029b42c6',1,'UFile::getExtension(const std::string &filePath)']]], + ['getfeature2d_37',['getFeature2D',['../classrtabmap_1_1Memory.html#ab094dfa40b0fe37cb12552a6ba081d6b',1,'rtabmap::Memory']]], + ['getfilenames_38',['getFileNames',['../classUDirectory.html#aa16e64be3cc238eec871bddaf6dbc289',1,'UDirectory']]], + ['getforwardwmposes_39',['getForwardWMPoses',['../classrtabmap_1_1Rtabmap.html#a8400ccecd090cb438d16178930fe0872',1,'rtabmap::Rtabmap']]], + ['getframerate_40',['getFrameRate',['../classrtabmap_1_1SensorCapture.html#af7de847c118ec1ba77a5c9f29f7efece',1,'rtabmap::SensorCapture']]], + ['getgoalreachedradius_41',['getGoalReachedRadius',['../classrtabmap_1_1Rtabmap.html#a6098155788f6e9ccaa636e26f8881c07',1,'rtabmap::Rtabmap']]], + ['getgps_42',['getGPS',['../classrtabmap_1_1Memory.html#aca3bdb688c64dd62672f2385ce6de594',1,'rtabmap::Memory']]], + ['getgraph_43',['getGraph',['../classrtabmap_1_1Rtabmap.html#a456fa0c95770f052d78f6d9f745fa1e3',1,'rtabmap::Rtabmap']]], + ['getgridmax_44',['getgridmax',['../classrtabmap_1_1GlobalMap.html#a060366742fc8f51deaf7dd75b66615c7',1,'rtabmap::GlobalMap::getGridMax(double &x, double &y, double &z) const'],['../classrtabmap_1_1GlobalMap.html#aa840b2e62893de929f952b8511df6164',1,'rtabmap::GlobalMap::getGridMax(double &x, double &y) const']]], + ['getgridmin_45',['getgridmin',['../classrtabmap_1_1GlobalMap.html#aaf028c4c070aa8568eaaf3dae4b926ee',1,'rtabmap::GlobalMap::getGridMin(double &x, double &y) const'],['../classrtabmap_1_1GlobalMap.html#a37adbbb0e80ba76cfa080cec9811cca3',1,'rtabmap::GlobalMap::getGridMin(double &x, double &y, double &z) const']]], + ['getgroundtruthpose_46',['getgroundtruthpose',['../classrtabmap_1_1Memory.html#a89dd9b0aea5595e929b23ded82cd8ff1',1,'rtabmap::Memory::getGroundTruthPose()'],['../classrtabmap_1_1Signature.html#a5d5f3aa41c0d9404654ebc5628a5189c',1,'rtabmap::Signature::getGroundTruthPose()']]], + ['getgroundtruths_47',['getGroundTruths',['../classrtabmap_1_1Memory.html#ac61afdb7694d54b5e3d146be427638b2',1,'rtabmap::Memory']]], + ['gethighesthypothesisid_48',['getHighestHypothesisId',['../classrtabmap_1_1Rtabmap.html#ab11a50751ab17717f567934e7cb2c450',1,'rtabmap::Rtabmap']]], + ['gethighesthypothesisvalue_49',['getHighestHypothesisValue',['../classrtabmap_1_1Rtabmap.html#a530c87cda2cd010e384178bced6611a1',1,'rtabmap::Rtabmap']]], + ['getidentity_50',['getIdentity',['../classrtabmap_1_1Transform.html#a8ea4368f2018d751d2733038081d56a2',1,'rtabmap::Transform']]], + ['getimagecompressed_51',['getImageCompressed',['../classrtabmap_1_1Memory.html#abc4c40056783163ec5abde9366060cb2',1,'rtabmap::Memory']]], + ['getindexedwordscount_52',['getIndexedWordsCount',['../classrtabmap_1_1VWDictionary.html#a6a0610e87964c3881dc70cae6cd9123c',1,'rtabmap::VWDictionary']]], + ['getindexmemoryused_53',['getIndexMemoryUsed',['../classrtabmap_1_1VWDictionary.html#a63ec6a9b915eb939c2650e623feb0576',1,'rtabmap::VWDictionary']]], + ['getinformation_54',['getInformation',['../classrtabmap_1_1Rtabmap.html#aeea47830776fe57c456ae6a673069ddc',1,'rtabmap::Rtabmap']]], + ['getinlierdistance_55',['getInlierDistance',['../classrtabmap_1_1RegistrationVis.html#a488ecb8a7423996abdad98b0044cd7f2',1,'rtabmap::RegistrationVis']]], + ['getinvalidwordscount_56',['getInvalidWordsCount',['../classrtabmap_1_1Signature.html#ac2d1526d87df9ff5d4885b16c460ebcf',1,'rtabmap::Signature']]], + ['getiterations_57',['getIterations',['../classrtabmap_1_1RegistrationVis.html#a93331add1822dd6f02bc74efec6d6834',1,'rtabmap::RegistrationVis']]], + ['getlabel_58',['getLabel',['../classrtabmap_1_1Signature.html#a78a9ae9059257c60cf1d50ef415520cd',1,'rtabmap::Signature']]], + ['getlandmarks_59',['getLandmarks',['../classrtabmap_1_1Signature.html#a2257cfc6c620d726484f1c6c2b11257a',1,'rtabmap::Signature']]], + ['getlandmarksindex_60',['getLandmarksIndex',['../classrtabmap_1_1Memory.html#acf7e6cbe5eda50b024cbb1bc82d03b7c',1,'rtabmap::Memory']]], + ['getlastgloballoopclosureid_61',['getLastGlobalLoopClosureId',['../classrtabmap_1_1Memory.html#ad6e8870c75b300a7d526f49467f67913',1,'rtabmap::Memory']]], + ['getlastindexedwordid_62',['getLastIndexedWordId',['../classrtabmap_1_1VWDictionary.html#a65a99ae457b1c779233de57d190ca8da',1,'rtabmap::VWDictionary']]], + ['getlastlocalizationpose_63',['getLastLocalizationPose',['../classrtabmap_1_1Rtabmap.html#a2d2efac02d4a6d1d7bbc505d94fd634b',1,'rtabmap::Rtabmap']]], + ['getlastlocationid_64',['getLastLocationId',['../classrtabmap_1_1Rtabmap.html#a9406c710b7af988dda1868a3efa8f1dd',1,'rtabmap::Rtabmap']]], + ['getlastprocesstime_65',['getLastProcessTime',['../classrtabmap_1_1Rtabmap.html#a88ffdd1ba70707e5969deab4f6ee66a0',1,'rtabmap::Rtabmap']]], + ['getlastsignaturedata_66',['getLastSignatureData',['../classrtabmap_1_1Statistics.html#a582cb4d6d0b3034062d508a6cac77081',1,'rtabmap::Statistics']]], + ['getlastsignatureid_67',['getLastSignatureId',['../classrtabmap_1_1Memory.html#a65552e672e67c9f511b3384e3d117de6',1,'rtabmap::Memory']]], + ['getlastworkingsignature_68',['getLastWorkingSignature',['../classrtabmap_1_1Memory.html#ad14c4346a42a621b7834c60de6bc2e63',1,'rtabmap::Memory']]], + ['getleftsuffix_69',['getLeftSuffix',['../classrtabmap_1_1StereoCameraModel.html#a799e3f787d015b5cbd0189768f5b673c',1,'rtabmap::StereoCameraModel']]], + ['getlinks_70',['getlinks',['../classrtabmap_1_1Memory.html#a7d4e2a2281980bc1b18683fd8fc2ebeb',1,'rtabmap::Memory::getLinks()'],['../classrtabmap_1_1Signature.html#a1496e2f2ae46f2b6efcf7ece309ffd22',1,'rtabmap::Signature::getLinks()']]], + ['getlocalconstraints_71',['getLocalConstraints',['../classrtabmap_1_1Rtabmap.html#a4d1e329f0c0fcc341d14f6853ec86750',1,'rtabmap::Rtabmap']]], + ['getlocaloptimizedposes_72',['getLocalOptimizedPoses',['../classrtabmap_1_1Rtabmap.html#aebe0bf9364ff8952d041f57c6a1c1d57',1,'rtabmap::Rtabmap']]], + ['getlocalradius_73',['getLocalRadius',['../classrtabmap_1_1Rtabmap.html#a6a4c533659621ccb1f6a5ddbc8149306',1,'rtabmap::Rtabmap']]], + ['getlocaltransform_74',['getLocalTransform',['../classrtabmap_1_1SensorCapture.html#a99829249c51fd08c32310b788b00b663',1,'rtabmap::SensorCapture']]], + ['getloopclosureid_75',['getLoopClosureId',['../classrtabmap_1_1Rtabmap.html#a2bc8eecb690ec1e36955119cd2c1a197',1,'rtabmap::Rtabmap']]], + ['getloopclosurelinks_76',['getLoopClosureLinks',['../classrtabmap_1_1Memory.html#a88fecb24bd16886d6086937277df5f20',1,'rtabmap::Memory']]], + ['getloopclosurevalue_77',['getLoopClosureValue',['../classrtabmap_1_1Rtabmap.html#adc87cbb6adde3027b8c20bbba25fec7b',1,'rtabmap::Rtabmap']]], + ['getmapcorrection_78',['getMapCorrection',['../classrtabmap_1_1Rtabmap.html#a7b71f70a20f1ef42a65fa9571e254711',1,'rtabmap::Rtabmap']]], + ['getmapid_79',['getMapId',['../classrtabmap_1_1Memory.html#a2391cf06d55513bee3cfd50d8beb3a59',1,'rtabmap::Memory']]], + ['getmaxstmemsize_80',['getMaxStMemSize',['../classrtabmap_1_1Memory.html#a41b23c567f6aa6bcc3a756e5ae5c1f33',1,'rtabmap::Memory']]], + ['getmemory_81',['getMemory',['../classrtabmap_1_1Rtabmap.html#a08adb5e0b8019c1dbd4f571099d2d46b',1,'rtabmap::Rtabmap']]], + ['getmemorythreshold_82',['getMemoryThreshold',['../classrtabmap_1_1Rtabmap.html#a876d3599c76de815bee4b278a087cfa5',1,'rtabmap::Rtabmap']]], + ['getmemoryusage_83',['getMemoryUsage',['../classUProcessInfo.html#a8a494e68cdea348a4788b8d54fd7de40',1,'UProcessInfo']]], + ['getmemoryused_84',['getmemoryused',['../classrtabmap_1_1SensorData.html#a60b3b2366bb66c914cfa7799204828fc',1,'rtabmap::SensorData::getMemoryUsed()'],['../classrtabmap_1_1CloudMap.html#a18a2dd71488719960f06eb4ae5e2cf4b',1,'rtabmap::CloudMap::getMemoryUsed()'],['../classrtabmap_1_1OccupancyGrid.html#a06bee0b73df176bd0ab6495e22992d7f',1,'rtabmap::OccupancyGrid::getMemoryUsed()'],['../classrtabmap_1_1OctoMap.html#ab4706881eee755cf58312859e6a3af89',1,'rtabmap::OctoMap::getMemoryUsed()'],['../classrtabmap_1_1Memory.html#ad59e8591cd04e2ecd93b4e706f198763',1,'rtabmap::Memory::getMemoryUsed()'],['../classrtabmap_1_1GlobalMap.html#a20031690daf7a7e9195ae97abf46522b',1,'rtabmap::GlobalMap::getMemoryUsed()'],['../classrtabmap_1_1VWDictionary.html#ac5177a75f402538b50ec6c36bdbc7307',1,'rtabmap::VWDictionary::getMemoryUsed()'],['../classrtabmap_1_1LocalGridCache.html#ab72a88b5c00d2a104ac1055538960acb',1,'rtabmap::LocalGridCache::getMemoryUsed()'],['../classrtabmap_1_1BayesFilter.html#a60ad13fd18ac4e595359f3c86c430a80',1,'rtabmap::BayesFilter::getMemoryUsed()'],['../classrtabmap_1_1VisualWord.html#ad23c14c1c81848fb42573fd5ceac3a42',1,'rtabmap::VisualWord::getMemoryUsed()'],['../classrtabmap_1_1Signature.html#a014fd12ee6cd47004e94ef4bb4753459',1,'rtabmap::Signature::getMemoryUsed()']]], + ['getmetricconstraints_85',['getMetricConstraints',['../classrtabmap_1_1Memory.html#ab5329c43c6b185613222d8458c049848',1,'rtabmap::Memory']]], + ['getmingeometrycorrespondencesratio_86',['getMinGeometryCorrespondencesRatio',['../classrtabmap_1_1Registration.html#ac4baf87f079ce52df845805b84cad6c9',1,'rtabmap::Registration']]], + ['getmininliers_87',['getMinInliers',['../classrtabmap_1_1RegistrationVis.html#ae951e95c4ae2ea1ab5c4d849823d66c4',1,'rtabmap::RegistrationVis']]], + ['getminvisualcorrespondences_88',['getMinVisualCorrespondences',['../classrtabmap_1_1Registration.html#abc02df4842af900fbb5da75b8e5318e0',1,'rtabmap::Registration']]], + ['getmsg_89',['getMsg',['../classULogEvent.html#a460976b037ecf8357fc3fa3f613e5817',1,'ULogEvent']]], + ['getname_90',['getname',['../classUFile.html#a3e7905705a69b747e1ed6b6e37b19f3f',1,'UFile::getName(const std::string &filePath)'],['../classUFile.html#af7e7f5995b05cda098037ca1cdcd63f4',1,'UFile::getName()']]], + ['getneighborlinks_91',['getNeighborLinks',['../classrtabmap_1_1Memory.html#a172f0d3046c0b7d6b37cdf11af153bee',1,'rtabmap::Memory']]], + ['getneighborsid_92',['getNeighborsId',['../classrtabmap_1_1Memory.html#a521305f39adcdfbedebbe5bdae9efbc6',1,'rtabmap::Memory']]], + ['getneighborsidradius_93',['getNeighborsIdRadius',['../classrtabmap_1_1Memory.html#a10c44ee8a5d84480b41aa4980665d894',1,'rtabmap::Memory']]], + ['getneuralmodelwarning_94',['getNeuralModelWarning',['../classrtabmap_1_1CameraStereoZed.html#aab6005c68f61b37ee1919ef6828b32a4',1,'rtabmap::CameraStereoZed']]], + ['getnextfilename_95',['getNextFileName',['../classUDirectory.html#a89ff08bf6044f2a0dc61f0dbbdc9d2cc',1,'UDirectory']]], + ['getnextfilepath_96',['getNextFilePath',['../classUDirectory.html#a2e435d2c98e54a8119c2fc3b388c03e9',1,'UDirectory']]], + ['getnextid_97',['getNextId',['../classrtabmap_1_1VWDictionary.html#a085d69ef577600000f397bd63abeaf69',1,'rtabmap::VWDictionary']]], + ['getnextseqid_98',['getNextSeqID',['../classrtabmap_1_1SensorCapture.html#acbffaf17772639bc65b0a5457bc56b22',1,'rtabmap::SensorCapture']]], + ['getnndr_99',['getNNDR',['../classrtabmap_1_1RegistrationVis.html#aed9e9e593b290a4be1aeda05967a631a',1,'rtabmap::RegistrationVis']]], + ['getnndrratio_100',['getNndrRatio',['../classrtabmap_1_1VWDictionary.html#a454639bff3d95b2f9dd346413981d5c5',1,'rtabmap::VWDictionary']]], + ['getnnstrategy_101',['getNNStrategy',['../classrtabmap_1_1VWDictionary.html#ab1ec0db96328164864953f25d463bcbb',1,'rtabmap::VWDictionary']]], + ['getnntype_102',['getNNType',['../classrtabmap_1_1RegistrationVis.html#a697d562bebe30b73a1ecd34dabee4347',1,'rtabmap::RegistrationVis']]], + ['getnodecalibration_103',['getNodeCalibration',['../classrtabmap_1_1Memory.html#af48dbd905dda453b6b2c2246a90d0e04',1,'rtabmap::Memory']]], + ['getnodedata_104',['getNodeData',['../classrtabmap_1_1Memory.html#a22d6c0b38d8699cdbba73b6bcdb38dd6',1,'rtabmap::Memory']]], + ['getnodeinfo_105',['getNodeInfo',['../classrtabmap_1_1Memory.html#ae6184a6979703045f34d3e2a155eb9f3',1,'rtabmap::Memory']]], + ['getnodesinradius_106',['getnodesinradius',['../classrtabmap_1_1Rtabmap.html#a1a6498f60f52f65ffbed2d89d7c20648',1,'rtabmap::Rtabmap::getNodesInRadius(const Transform &pose, float radius, int k=0, std::map< int, float > *distsSqr=0)'],['../classrtabmap_1_1Rtabmap.html#a9bd263bbcdbc6f41119f8532131db974',1,'rtabmap::Rtabmap::getNodesInRadius(int nodeId, float radius, int k=0, std::map< int, float > *distsSqr=0)']]], + ['getnodesobservinglandmark_107',['getNodesObservingLandmark',['../classrtabmap_1_1Memory.html#afe7a1c036129e7ec94905c3650e91cc8',1,'rtabmap::Memory']]], + ['getnodewordsandglobaldescriptors_108',['getNodeWordsAndGlobalDescriptors',['../classrtabmap_1_1Memory.html#a4c555fac41be4b4d44c551c010971dc3',1,'rtabmap::Memory']]], + ['getnorm_109',['getNorm',['../classrtabmap_1_1Transform.html#af3c46b76fe855b0334a7f255792a6082',1,'rtabmap::Transform']]], + ['getnormsquared_110',['getNormSquared',['../classrtabmap_1_1Transform.html#aee7765828eb454015b4deb72d70a034a',1,'rtabmap::Transform']]], + ['getnotindexedwordscount_111',['getNotIndexedWordsCount',['../classrtabmap_1_1VWDictionary.html#a293c09f00caf84bb991d73983a5f22c8',1,'rtabmap::VWDictionary']]], + ['getodommaxinf_112',['getOdomMaxInf',['../classrtabmap_1_1Memory.html#ae37d02a779acb85797de25da36066829',1,'rtabmap::Memory']]], + ['getodompose_113',['getOdomPose',['../classrtabmap_1_1Memory.html#a4bb01d27d1ec7776103635b11228626c',1,'rtabmap::Memory']]], + ['getorientation_114',['getOrientation',['../classrtabmap_1_1IMUFilter.html#ae32dda362d720f964781f1681fa6a973',1,'rtabmap::IMUFilter']]], + ['getparameters_115',['getparameters',['../classrtabmap_1_1Memory.html#af4cc965870dd757517b126af4860d34d',1,'rtabmap::Memory::getParameters()'],['../classrtabmap_1_1Rtabmap.html#a9ac5900cbc165df1c501606f79c65ec1',1,'rtabmap::Rtabmap::getParameters() const']]], + ['getpath_116',['getPath',['../classrtabmap_1_1Rtabmap.html#a5fe89ac87283a92258d27f42eb7b13f1',1,'rtabmap::Rtabmap']]], + ['getpathcurrentgoalid_117',['getPathCurrentGoalId',['../classrtabmap_1_1Rtabmap.html#a5f886101463229fcd79bf3dd6418aa5c',1,'rtabmap::Rtabmap']]], + ['getpathcurrentgoalindex_118',['getPathCurrentGoalIndex',['../classrtabmap_1_1Rtabmap.html#a781713c190497d5f25d7e12112ae4345',1,'rtabmap::Rtabmap']]], + ['getpathcurrentindex_119',['getPathCurrentIndex',['../classrtabmap_1_1Rtabmap.html#a94eecd89994fc02a913b1eb087d85c84',1,'rtabmap::Rtabmap']]], + ['getpathnextnodes_120',['getPathNextNodes',['../classrtabmap_1_1Rtabmap.html#a45addb0848702b39c67c2394dd62f739',1,'rtabmap::Rtabmap']]], + ['getpathnextposes_121',['getPathNextPoses',['../classrtabmap_1_1Rtabmap.html#af81fe33ef45e1ad1838bc97d6a73a8be',1,'rtabmap::Rtabmap']]], + ['getpaths_122',['getPaths',['../classrtabmap_1_1Rtabmap.html#ad314edf995555480a2db1aceb7fd2ee7',1,'rtabmap::Rtabmap']]], + ['getpathstatus_123',['getPathStatus',['../classrtabmap_1_1Rtabmap.html#afe4aa4f9a67ba85b60c7dfda86d0131b',1,'rtabmap::Rtabmap']]], + ['getpathtransformtogoal_124',['getPathTransformToGoal',['../classrtabmap_1_1Rtabmap.html#aedf5dce175ee325822ab7b7772c8d4f5',1,'rtabmap::Rtabmap']]], + ['getpose_125',['getpose',['../classrtabmap_1_1CameraRealSense2.html#a31fc38dca7aa6dc61c68150d5409204e',1,'rtabmap::CameraRealSense2::getPose()'],['../classrtabmap_1_1CameraSeerSense.html#a831666d29d4eabc1a00e9eb5c8b47c27',1,'rtabmap::CameraSeerSense::getPose()'],['../classrtabmap_1_1CameraStereoZed.html#a1fceb3208a256d1023739a60f5931def',1,'rtabmap::CameraStereoZed::getPose()'],['../classrtabmap_1_1DBReader.html#abd2b32ae00a05810465f63d63c44d5ed',1,'rtabmap::DBReader::getPose()'],['../classrtabmap_1_1Odometry.html#a8b45aea55b336f758943b4a6b2ec28ee',1,'rtabmap::Odometry::getPose()'],['../classrtabmap_1_1Rtabmap.html#ac430e0adb75dc4aec3b7ba77053aabd0',1,'rtabmap::Rtabmap::getPose()'],['../classrtabmap_1_1SensorCapture.html#a2f940d75366088bfae0164e1803ffe9a',1,'rtabmap::SensorCapture::getPose()'],['../classrtabmap_1_1Signature.html#a5166864f276c921963033e8852c13076',1,'rtabmap::Signature::getPose() const']]], + ['getposecovariance_126',['getPoseCovariance',['../classrtabmap_1_1Signature.html#afc81cb91421dcd36e2f5e3dc84a77b44',1,'rtabmap::Signature']]], + ['getposterior_127',['getPosterior',['../classrtabmap_1_1BayesFilter.html#aceaa52e62af32f176185305f5359ee79',1,'rtabmap::BayesFilter']]], + ['getpredictionlc_128',['getPredictionLC',['../classrtabmap_1_1BayesFilter.html#ab13c8acecfbb4fcfff4e809e2b0a7538',1,'rtabmap::BayesFilter']]], + ['getpredictionlcstr_129',['getPredictionLCStr',['../classrtabmap_1_1BayesFilter.html#a18a6d97fe3088a4a356a85358f641376',1,'rtabmap::BayesFilter']]], + ['getreferences_130',['getReferences',['../classrtabmap_1_1VisualWord.html#aef73a60eccd61a917f27bf277366a5bc',1,'rtabmap::VisualWord']]], + ['getremovedparameters_131',['getRemovedParameters',['../classrtabmap_1_1Parameters.html#ae3e84e415669d8c8bf17b119683b1056',1,'rtabmap::Parameters']]], + ['getrightsuffix_132',['getRightSuffix',['../classrtabmap_1_1StereoCameraModel.html#a3ecae21bbf6bc9914d0bb553c99f9e09',1,'rtabmap::StereoCameraModel']]], + ['getserial_133',['getserial',['../classrtabmap_1_1CameraOpenNICV.html#a29fe33644f755cf54307b55df898617b',1,'rtabmap::CameraOpenNICV::getSerial()'],['../classrtabmap_1_1CameraOpenNI2.html#a9767b92c3df7b637c75ee351208e3f0b',1,'rtabmap::CameraOpenNI2::getSerial()'],['../classrtabmap_1_1CameraOpenni.html#acaeb07cbf369a47817c48acacee04e41',1,'rtabmap::CameraOpenni::getSerial()'],['../classrtabmap_1_1CameraMyntEye.html#ac163457701a9274659e41aae5417f831',1,'rtabmap::CameraMyntEye::getSerial()'],['../classrtabmap_1_1CameraStereoZed.html#a8c13902c0c25565357e6f7e0a16f0838',1,'rtabmap::CameraStereoZed::getSerial()'],['../classrtabmap_1_1CameraK4W2.html#a90bd066891ec59c4f1261af3353209bb',1,'rtabmap::CameraK4W2::getSerial()'],['../classrtabmap_1_1CameraOrbbecSDK.html#a75f9abaf3ddc009c7772cc0239816b86',1,'rtabmap::CameraOrbbecSDK::getSerial()'],['../classrtabmap_1_1CameraRealSense.html#a4abbdf6efedd229a146d066b5ff17799',1,'rtabmap::CameraRealSense::getSerial()'],['../classrtabmap_1_1CameraRealSense2.html#aff19c4db66d2403c0e09a67d1418bcdc',1,'rtabmap::CameraRealSense2::getSerial()'],['../classrtabmap_1_1CameraSeerSense.html#aa921995e3a4a1cd5480868998bd27b2e',1,'rtabmap::CameraSeerSense::getSerial()'],['../classrtabmap_1_1CameraStereoDC1394.html#a125d6fa6e6bd7f8b2e3d22d10ce54acb',1,'rtabmap::CameraStereoDC1394::getSerial()'],['../classrtabmap_1_1CameraStereoFlyCapture2.html#a06d1e6cd0ea504f6601e78ecbd0442df',1,'rtabmap::CameraStereoFlyCapture2::getSerial()'],['../classrtabmap_1_1CameraStereoImages.html#a507ca5b4c37b75f4108e9aa8dad5125b',1,'rtabmap::CameraStereoImages::getSerial()'],['../classrtabmap_1_1CameraStereoTara.html#a87d7cdfd3354bdffd8e9e88f1244c79d',1,'rtabmap::CameraStereoTara::getSerial()'],['../classrtabmap_1_1CameraStereoVideo.html#a0eba205715f6f856b14eaba8de2eadcf',1,'rtabmap::CameraStereoVideo::getSerial()'],['../classrtabmap_1_1CameraK4A.html#af7dae13200b0d2ca09294b335225e993',1,'rtabmap::CameraK4A::getSerial()'],['../classrtabmap_1_1CameraImages.html#a217f54d1ead7a4d6af733c2644064a5f',1,'rtabmap::CameraImages::getSerial()'],['../classrtabmap_1_1CameraFreenect2.html#a985478701c8eb9751918fcd497893af7',1,'rtabmap::CameraFreenect2::getSerial()'],['../classrtabmap_1_1CameraFreenect.html#ad4aa325278c21b339aea31437430610d',1,'rtabmap::CameraFreenect::getSerial()'],['../classrtabmap_1_1CameraDepthAI.html#ac77ceb30af0f98aa27f2de1259f31d7e',1,'rtabmap::CameraDepthAI::getSerial()'],['../classrtabmap_1_1CameraStereoZedOC.html#a11244c590c4e356765abf59e94f66ddb',1,'rtabmap::CameraStereoZedOC::getSerial()'],['../classrtabmap_1_1CameraVideo.html#ab3400ba7ae983cd1ad9678970079b00a',1,'rtabmap::CameraVideo::getSerial()'],['../classrtabmap_1_1DBReader.html#ac6e8622842447cdccfaab061c1cab3c4',1,'rtabmap::DBReader::getSerial()'],['../classrtabmap_1_1LidarVLP16.html#a9d533721703457a60e94124d840fee95',1,'rtabmap::LidarVLP16::getSerial()'],['../classrtabmap_1_1SensorCapture.html#a7830e571e45752f9d8f30fa806f6aa64',1,'rtabmap::SensorCapture::getSerial()']]], + ['getsignature_134',['getSignature',['../classrtabmap_1_1Memory.html#a15ec109dd157745f69dcd4f80efaf561',1,'rtabmap::Memory']]], + ['getsignaturecopy_135',['getSignatureCopy',['../classrtabmap_1_1Rtabmap.html#a7133d8efa98410eaec68e0199ff98a0c',1,'rtabmap::Rtabmap']]], + ['getsignatureidbylabel_136',['getSignatureIdByLabel',['../classrtabmap_1_1Memory.html#a4907501b27fdfd5b8053b9d932d8dec4',1,'rtabmap::Memory']]], + ['getsignaturesdata_137',['getSignaturesData',['../classrtabmap_1_1Statistics.html#abd89f302128c32d07b0dea07e50b742b',1,'rtabmap::Statistics']]], + ['getsimilaritythreshold_138',['getSimilarityThreshold',['../classrtabmap_1_1Memory.html#ae1e4c518ec65f86b7a3eade7ac2705c8',1,'rtabmap::Memory']]], + ['getstamp_139',['getstamp',['../classrtabmap_1_1IMUEvent.html#ac1dc5e7e806fbe05ee5fec562384924f',1,'rtabmap::IMUEvent::getStamp()'],['../classrtabmap_1_1Signature.html#aa9c4ed8d3617b039181cf44a0e30eca2',1,'rtabmap::Signature::getStamp()']]], + ['getstatistics_140',['getStatistics',['../classrtabmap_1_1Rtabmap.html#a5d18002c7eb7cee234471686413d201c',1,'rtabmap::Rtabmap']]], + ['getstm_141',['getSTM',['../classrtabmap_1_1Rtabmap.html#a809673c3d0e6d8fb05ebb4a52218d438',1,'rtabmap::Rtabmap']]], + ['getstmem_142',['getStMem',['../classrtabmap_1_1Memory.html#a007abab13fade6f63b6db3fc279a1631',1,'rtabmap::Memory']]], + ['getstmemintermediatenodescount_143',['getStMemIntermediateNodesCount',['../classrtabmap_1_1Memory.html#a3f3a3da280f9e5ee9bba6df03e551f79',1,'rtabmap::Memory']]], + ['getstmsize_144',['getSTMSize',['../classrtabmap_1_1Rtabmap.html#a49adc83991d6b95c7911f41330cbd467',1,'rtabmap::Rtabmap']]], + ['gettargetversion_145',['getTargetVersion',['../classrtabmap_1_1DBDriver.html#a456bc49e8e60e0c754078a4b09e3f1a1',1,'rtabmap::DBDriver']]], + ['gettime_146',['getTime',['../classULogger.html#a17e6d133cea7c2cbe5365e5f5f2216a9',1,'ULogger']]], + ['gettimethreshold_147',['getTimeThreshold',['../classrtabmap_1_1Rtabmap.html#af7fa0cbd1ef027f8bb2af11364487df8',1,'rtabmap::Rtabmap']]], + ['gettotalactivereferences_148',['getTotalActiveReferences',['../classrtabmap_1_1VWDictionary.html#a98447a880fdcf91709f00d00cfd4e54d',1,'rtabmap::VWDictionary']]], + ['gettotalmemsize_149',['getTotalMemSize',['../classrtabmap_1_1Rtabmap.html#ab44f1bca06eec4beb8dfebeed9ed5ce8',1,'rtabmap::Rtabmap']]], + ['gettotalreferences_150',['getTotalReferences',['../classrtabmap_1_1VisualWord.html#a2eaf9703feb310a1038fcd6c8341a1d3',1,'rtabmap::VisualWord']]], + ['gettransform_151',['getTransform',['../classrtabmap_1_1Transform.html#a3ebc45da479b4cae9a5641fda6ebaf23',1,'rtabmap::Transform']]], + ['gettranslation_152',['getTranslation',['../classrtabmap_1_1Transform.html#a3393daecc17559c66156ba3eb0711875',1,'rtabmap::Transform']]], + ['gettranslationandeulerangles_153',['getTranslationAndEulerAngles',['../classrtabmap_1_1Transform.html#aad65adff491fd57a31dbe4e26d7f29af',1,'rtabmap::Transform']]], + ['gettype_154',['gettype',['../classrtabmap_1_1OdometryFovis.html#a415b08f31a2ab8ff503c84623df71f0d',1,'rtabmap::OdometryFovis::getType()'],['../classrtabmap_1_1OdometryFLOAM.html#a311c8b022d0a2dc6219b97a8e2b40d84',1,'rtabmap::OdometryFLOAM::getType()'],['../classrtabmap_1_1OdometryVINSFusion.html#ac7e841322ccadfcfdec61cc3b698754a',1,'rtabmap::OdometryVINSFusion::getType()'],['../classrtabmap_1_1OdometryF2M.html#aa0244571578fd8604470d8c21af01611',1,'rtabmap::OdometryF2M::getType()'],['../classrtabmap_1_1OdometryLIOSAM.html#aea8d8aea35772e3b81ba3f74c6eb3415',1,'rtabmap::OdometryLIOSAM::getType()'],['../classrtabmap_1_1OdometryLOAM.html#a0833118684e4f836ec668b735f81da0d',1,'rtabmap::OdometryLOAM::getType()'],['../classrtabmap_1_1OdometryMono.html#ada54391f88a0704c4fab2d9a2b370a15',1,'rtabmap::OdometryMono::getType()'],['../classrtabmap_1_1OdometryMSCKF.html#a81657f9c46e39bfa48e1d0021c5af8ea',1,'rtabmap::OdometryMSCKF::getType()'],['../classrtabmap_1_1OdometryOkvis.html#ab93efd88da4ff30e4ee4a0ec525347d8',1,'rtabmap::OdometryOkvis::getType()'],['../classrtabmap_1_1OdometryOpen3D.html#a79c86c26bd892619797d6266243bb8d6',1,'rtabmap::OdometryOpen3D::getType()'],['../classrtabmap_1_1OdometryOpenVINS.html#a79898924aa5af5d59ce10028e876e387',1,'rtabmap::OdometryOpenVINS::getType()'],['../classrtabmap_1_1OdometryORBSLAM2.html#a8773eea08df092d237e17af96ff6d096',1,'rtabmap::OdometryORBSLAM2::getType()'],['../classrtabmap_1_1OdometryORBSLAM3.html#a6a4161d9be51ff66e3571ba912655029',1,'rtabmap::OdometryORBSLAM3::getType()'],['../classrtabmap_1_1OdometryF2F.html#af0e2f40a3dd28b9e1e84159bcf9df323',1,'rtabmap::OdometryF2F::getType()'],['../classrtabmap_1_1OdometryDVO.html#a8475f5a8b1ba4e288ba58daf6284acc9',1,'rtabmap::OdometryDVO::getType()'],['../classrtabmap_1_1OdometryCuVSLAM.html#a68801df22a6803dabf7a064b99e04898',1,'rtabmap::OdometryCuVSLAM::getType()'],['../classrtabmap_1_1Odometry.html#a92685daa2786aff06518c8c4e26b8899',1,'rtabmap::Odometry::getType()'],['../classrtabmap_1_1OdometryViso2.html#ae9bf8422bbf6d2c880098b828b5d6187',1,'rtabmap::OdometryViso2::getType()'],['../classrtabmap_1_1Parameters.html#a08f4ea48ac7dbd93cb322d1c89b455b0',1,'rtabmap::Parameters::getType()']]], + ['getuncompresseddata_155',['getUncompressedData',['../classrtabmap_1_1CompressionThread.html#aafdc57cad744cbe94b30a8abfe7711a4',1,'rtabmap::CompressionThread']]], + ['getunusedword_156',['getUnusedWord',['../classrtabmap_1_1VWDictionary.html#abbd007a028847ecbbdd50e3480ba95e3',1,'rtabmap::VWDictionary']]], + ['getunusedwordids_157',['getUnusedWordIds',['../classrtabmap_1_1VWDictionary.html#a64b0aee7f33cbd4df26e2d0c14329e9d',1,'rtabmap::VWDictionary']]], + ['getunusedwords_158',['getUnusedWords',['../classrtabmap_1_1VWDictionary.html#ab47b5ecb12c822474004f0ad77dbb388',1,'rtabmap::VWDictionary']]], + ['getunusedwordssize_159',['getUnusedWordsSize',['../classrtabmap_1_1VWDictionary.html#a117282f59ed918808d8116cd1f92f412',1,'rtabmap::VWDictionary']]], + ['getupdateerror_160',['getUpdateError',['../classrtabmap_1_1GlobalMap.html#a99c3840a89e76a091cf59cfaf1a8bcc4',1,'rtabmap::GlobalMap']]], + ['geturl_161',['getUrl',['../classrtabmap_1_1DBDriver.html#a79365611bce06aeda0d078641be89cab',1,'rtabmap::DBDriver']]], + ['getvelocity_162',['getVelocity',['../classrtabmap_1_1Signature.html#ae97f22fcb6799a5312c1948cb9f42c99',1,'rtabmap::Signature']]], + ['getvelocityguess_163',['getVelocityGuess',['../classrtabmap_1_1Odometry.html#aa6ab1c129163771b0d87e3e068a0427e',1,'rtabmap::Odometry']]], + ['getvirtualplaceprior_164',['getVirtualPlacePrior',['../classrtabmap_1_1BayesFilter.html#a1f479b2d242f05eef69532f454dc851f',1,'rtabmap::BayesFilter']]], + ['getvisualwords_165',['getVisualWords',['../classrtabmap_1_1VWDictionary.html#a6bcad4c04999469001b5ac03b8a61ab4',1,'rtabmap::VWDictionary']]], + ['getvwdictionary_166',['getVWDictionary',['../classrtabmap_1_1Memory.html#a61adae3b07b3daee32efd1abb4dac45e',1,'rtabmap::Memory']]], + ['getweight_167',['getWeight',['../classrtabmap_1_1Signature.html#a701b32c562d789929a18a19c08bac4ca',1,'rtabmap::Signature']]], + ['getweights_168',['getweights',['../classrtabmap_1_1Memory.html#a4d8bfc0b85f270dbb3fc66cde079b63e',1,'rtabmap::Memory::getWeights()'],['../classrtabmap_1_1Rtabmap.html#a353361aeeece3ce8c799d168a5798a01',1,'rtabmap::Rtabmap::getWeights() const']]], + ['getwm_169',['getWM',['../classrtabmap_1_1Rtabmap.html#ae3d40ed4ee48954e70d45e0779c24a49',1,'rtabmap::Rtabmap']]], + ['getwmsize_170',['getWMSize',['../classrtabmap_1_1Rtabmap.html#a203a18eb60f6c057518fd5129bbc32ff',1,'rtabmap::Rtabmap']]], + ['getword_171',['getWord',['../classrtabmap_1_1VWDictionary.html#a5cf9981cf11f8f93280b7d0c195159e1',1,'rtabmap::VWDictionary']]], + ['getwords_172',['getWords',['../classrtabmap_1_1Signature.html#a68eaa67c81d08e20d2b7a43b0659b1d4',1,'rtabmap::Signature']]], + ['getwords3_173',['getWords3',['../classrtabmap_1_1Signature.html#ab902bfc7cdde2542ffe7e5d441f90a66',1,'rtabmap::Signature']]], + ['getwordschanged_174',['getWordsChanged',['../classrtabmap_1_1Signature.html#a01f6eac0e5836aa921d65108b75249f6',1,'rtabmap::Signature']]], + ['getwordsdescriptors_175',['getWordsDescriptors',['../classrtabmap_1_1Signature.html#a1ed4181ac5cc7b477482459d680c63b1',1,'rtabmap::Signature']]], + ['getwordskpts_176',['getWordsKpts',['../classrtabmap_1_1Signature.html#a471f71821ceeec9a25e9e4e16673d14f',1,'rtabmap::Signature']]], + ['getworkingdir_177',['getWorkingDir',['../classrtabmap_1_1Rtabmap.html#a61bc4dce59a1da8b904a7dbe39e5038a',1,'rtabmap::Rtabmap']]], + ['getworkingmem_178',['getWorkingMem',['../classrtabmap_1_1Memory.html#ab6c0794ad1aac6e9084c0240e709cdc6',1,'rtabmap::Memory']]], + ['getworkingmemintermediatenodescount_179',['getWorkingMemIntermediateNodesCount',['../classrtabmap_1_1Memory.html#ad9b97cdfd95eb3c0dad649d755fc3267',1,'rtabmap::Memory']]], + ['getworkingmemsize_180',['getWorkingMemSize',['../classrtabmap_1_1Memory.html#a5ca9260a2a63fae6f3d16e1db9cbce53',1,'rtabmap::Memory']]], + ['gftt_181',['GFTT',['../classrtabmap_1_1GFTT.html',1,'rtabmap']]], + ['gftt_5fbrief_182',['GFTT_BRIEF',['../classrtabmap_1_1GFTT__BRIEF.html',1,'rtabmap']]], + ['gftt_5fdaisy_183',['GFTT_DAISY',['../classrtabmap_1_1GFTT__DAISY.html',1,'rtabmap']]], + ['gftt_5ffreak_184',['GFTT_FREAK',['../classrtabmap_1_1GFTT__FREAK.html',1,'rtabmap']]], + ['gftt_5forb_185',['GFTT_ORB',['../classrtabmap_1_1GFTT__ORB.html',1,'rtabmap']]], + ['globalbundleadjustment_186',['globalBundleAdjustment',['../classrtabmap_1_1Rtabmap.html#ab1044f290653749990018ca5722f00c7',1,'rtabmap::Rtabmap']]], + ['globaldescriptor_187',['GlobalDescriptor',['../classrtabmap_1_1GlobalDescriptor.html',1,'rtabmap']]], + ['globaldescriptorextractor_188',['GlobalDescriptorExtractor',['../classrtabmap_1_1GlobalDescriptorExtractor.html',1,'rtabmap']]], + ['globaldescriptors_189',['globalDescriptors',['../classrtabmap_1_1SensorData.html#acd46b940bac6e1d53ff2826be309b4c8',1,'rtabmap::SensorData']]], + ['globalmap_190',['globalmap',['../classrtabmap_1_1GlobalMap.html',1,'rtabmap::GlobalMap'],['../classrtabmap_1_1GlobalMap.html#a03581caaa2a313b131726af4e4a6b714',1,'rtabmap::GlobalMap::GlobalMap()']]], + ['globalpose_191',['globalPose',['../classrtabmap_1_1SensorData.html#a55e6ca21bfd11b7afb375451a2a77b87',1,'rtabmap::SensorData']]], + ['globalposecovariance_192',['globalPoseCovariance',['../classrtabmap_1_1SensorData.html#a569af71e8757105dc040251a3805fe97',1,'rtabmap::SensorData']]], + ['gps_193',['gps',['../classrtabmap_1_1GPS.html#a4ea914df744ae5a9ff60eff6bb2c734d',1,'rtabmap::GPS::GPS()'],['../classrtabmap_1_1SensorData.html#a176b8160afc549fc6eaa2d0567c12957',1,'rtabmap::SensorData::gps()'],['../classrtabmap_1_1GPS.html#a488bb172e3b8836387e0994a31e709ef',1,'rtabmap::GPS::GPS()'],['../classrtabmap_1_1GPS.html',1,'rtabmap::GPS']]], + ['graph_194',['graph',['../namespacegraph.html',1,'']]], + ['gravitysigma_195',['gravitySigma',['../classrtabmap_1_1Optimizer.html#aceb68e0f692b81c4a978e46f804515d7',1,'rtabmap::Optimizer']]], + ['gridcellsize_196',['gridCellSize',['../classrtabmap_1_1SensorData.html#a984ce55b6b75152a63441bd07288dc6c',1,'rtabmap::SensorData']]], + ['gridemptycellscompressed_197',['gridEmptyCellsCompressed',['../classrtabmap_1_1SensorData.html#ac2bae4f0747795f778275102b4ebf1b3',1,'rtabmap::SensorData']]], + ['gridemptycellsraw_198',['gridEmptyCellsRaw',['../classrtabmap_1_1SensorData.html#a490e96f3f1d16cc559b3a004e2ec4fbe',1,'rtabmap::SensorData']]], + ['gridgroundcellscompressed_199',['gridGroundCellsCompressed',['../classrtabmap_1_1SensorData.html#ab3c515b23322cd31c3fcbcb054588e43',1,'rtabmap::SensorData']]], + ['gridgroundcellsraw_200',['gridGroundCellsRaw',['../classrtabmap_1_1SensorData.html#a2db9b9dbbe3d0943a47cdc4a5a9051d4',1,'rtabmap::SensorData']]], + ['gridmap_201',['GridMap',['../classrtabmap_1_1GridMap.html',1,'rtabmap']]], + ['gridobstaclecellscompressed_202',['gridObstacleCellsCompressed',['../classrtabmap_1_1SensorData.html#a50b09c52de6c8c6a6a95ee08886845a0',1,'rtabmap::SensorData']]], + ['gridobstaclecellsraw_203',['gridObstacleCellsRaw',['../classrtabmap_1_1SensorData.html#a0f2e804ebbcff5be648a43f0a41e9dfc',1,'rtabmap::SensorData']]], + ['gridviewpoint_204',['gridViewPoint',['../classrtabmap_1_1SensorData.html#a51f21b98088ceec4c5d108d0fbe03200',1,'rtabmap::SensorData']]], + ['groundcells_205',['groundCells',['../classrtabmap_1_1LocalGrid.html#a1d828782755374c7601810b35f99a9e5',1,'rtabmap::LocalGrid']]], + ['groundtruth_206',['groundTruth',['../classrtabmap_1_1SensorData.html#aef9e0c36efdc8915536c3bc082108689',1,'rtabmap::SensorData']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_b.js b/preview/pr-1492/api/latest/search/all_b.js new file mode 100644 index 00000000..a676c1f4 --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_b.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['handleevent_0',['handleevent',['../classrtabmap_1_1OdometryThread.html#a65808dd7148c1e2c49dcf90ef718b5a8',1,'rtabmap::OdometryThread::handleEvent()'],['../classrtabmap_1_1RtabmapThread.html#ab2556f7773329963038d876c86e97d09',1,'rtabmap::RtabmapThread::handleEvent()'],['../classUEventsHandler.html#a0d43b582c19f01196a513f66d3618d8d',1,'UEventsHandler::handleEvent()']]], + ['haslink_1',['hasLink',['../classrtabmap_1_1Signature.html#ad71fa7c0466dbb5c5062953043c3fcb0',1,'rtabmap::Signature']]], + ['height_5f_2',['height_',['../classclams_1_1DiscreteDepthDistortionModel.html#aa1b8d43b1fa2120bd4b711468d9457b1',1,'clams::DiscreteDepthDistortionModel']]], + ['homedir_3',['homeDir',['../classUDirectory.html#a3338b47405f65f25a4256e0ea86bff07',1,'UDirectory']]], + ['horizontalfov_4',['horizontalFOV',['../classrtabmap_1_1CameraModel.html#a12abd4cac897f48bf862a96f0eba1d65',1,'rtabmap::CameraModel']]], + ['hsvtorgb_5',['HSVtoRGB',['../namespacertabmap_1_1util2d.html#ac29ac5b8bed26a5299d378708170dd11',1,'rtabmap::util2d']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_c.js b/preview/pr-1492/api/latest/search/all_c.js new file mode 100644 index 00000000..65134e1c --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_c.js @@ -0,0 +1,111 @@ +var searchData= +[ + ['icpcorrespondences_0',['icpCorrespondences',['../classrtabmap_1_1RegistrationInfo.html#a2cd3a5a3de9c1a07101ef198bf11a495',1,'rtabmap::RegistrationInfo']]], + ['icpinliersratio_1',['icpInliersRatio',['../classrtabmap_1_1RegistrationInfo.html#aa77a6a2994d004c83ce37906d7adce06',1,'rtabmap::RegistrationInfo']]], + ['icpiterations_2',['icpIterations',['../classrtabmap_1_1RegistrationInfo.html#a4183e994d882e94bd782678a3ab4cd12',1,'rtabmap::RegistrationInfo']]], + ['icprms_3',['icpRMS',['../classrtabmap_1_1RegistrationInfo.html#a1612de115fbd0bfb6dbe8e3aa3528037',1,'rtabmap::RegistrationInfo']]], + ['icprotation_4',['icpRotation',['../classrtabmap_1_1RegistrationInfo.html#a9487cf937223f68f2658189298d727e4',1,'rtabmap::RegistrationInfo']]], + ['icpstrategy_5',['IcpStrategy',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fab',1,'rtabmap::RegistrationIcp']]], + ['icpstructuralcomplexity_6',['icpStructuralComplexity',['../classrtabmap_1_1RegistrationInfo.html#a702e62ddd46f3912312be7b55fbba4de',1,'rtabmap::RegistrationInfo']]], + ['icpstructuraldistribution_7',['icpStructuralDistribution',['../classrtabmap_1_1RegistrationInfo.html#a8b152df7c54273e6e33cdfa1744157f5',1,'rtabmap::RegistrationInfo']]], + ['icptranslation_8',['icpTranslation',['../classrtabmap_1_1RegistrationInfo.html#a0aca4419a027a27d3aa9b65d7019898b',1,'rtabmap::RegistrationInfo']]], + ['id_9',['id',['../classUObjDeletionThread.html#a027f81f93f7b78c442a094d944136f20',1,'UObjDeletionThread::id()'],['../classrtabmap_1_1VisualWord.html#a988fd37d739297c9b04c7dc156de3c66',1,'rtabmap::VisualWord::id()'],['../classrtabmap_1_1Signature.html#a31c6e7b7e720eca20fb5935e0ee1d9f9',1,'rtabmap::Signature::id()'],['../classrtabmap_1_1SensorCaptureInfo.html#a2cd84bbdd9bd60f906b9b925ab0d302c',1,'rtabmap::SensorCaptureInfo::id'],['../classrtabmap_1_1Landmark.html#a2b5a5cbdb313813e3bb473a05b1145e2',1,'rtabmap::Landmark::id()'],['../classrtabmap_1_1SensorData.html#a84fbcb16e51018d96065d3ce240650c6',1,'rtabmap::SensorData::id()']]], + ['id_5finvalid_10',['ID_INVALID',['../classrtabmap_1_1VWDictionary.html#a83b1966a141848baeec5112c30bacf0f',1,'rtabmap::VWDictionary']]], + ['id_5fstart_11',['ID_START',['../classrtabmap_1_1VWDictionary.html#a2dbfec55a8921f52b642bf0dceea0c37',1,'rtabmap::VWDictionary']]], + ['imagecompressed_12',['imageCompressed',['../classrtabmap_1_1SensorData.html#aafcc6b483798b7a99fafa8f929db1029',1,'rtabmap::SensorData']]], + ['imageraw_13',['imageRaw',['../classrtabmap_1_1SensorData.html#ae9e44401d0d6faee8fcb801090936fef',1,'rtabmap::SensorData']]], + ['imagesalreadyrectified_14',['imagesAlreadyRectified',['../classrtabmap_1_1Odometry.html#ac9ae854d14d44d82e1f20e8a4791b9c4',1,'rtabmap::Odometry']]], + ['imu_15',['imu',['../classrtabmap_1_1SensorData.html#a056056de80edf1bc20505fd992cdc6e7',1,'rtabmap::SensorData::imu()'],['../classrtabmap_1_1IMU.html#a76e674d3ef1865369e1416ae5ff76483',1,'rtabmap::IMU::IMU()'],['../classrtabmap_1_1IMU.html#a8db1233b6871dcbd58f1862cee2826fa',1,'rtabmap::IMU::IMU(const cv::Vec4d &orientation, const cv::Mat &orientationCovariance, const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())'],['../classrtabmap_1_1IMU.html#a3171afc29cdf8587a401b6da1b1908e6',1,'rtabmap::IMU::IMU(const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())'],['../classrtabmap_1_1IMU.html',1,'rtabmap::IMU']]], + ['imuevent_16',['imuevent',['../classrtabmap_1_1IMUEvent.html#a1ab86d7c16b1cadb44f0440808a9a81b',1,'rtabmap::IMUEvent::IMUEvent()'],['../classrtabmap_1_1IMUEvent.html#af041b297fa5f621dbc4fd085b16da800',1,'rtabmap::IMUEvent::IMUEvent(const IMU &data, double stamp)'],['../classrtabmap_1_1IMUEvent.html',1,'rtabmap::IMUEvent']]], + ['imufilter_17',['IMUFilter',['../classrtabmap_1_1IMUFilter.html',1,'rtabmap']]], + ['imus_18',['imus',['../classrtabmap_1_1Odometry.html#a6c9ed388da42499d2244bb98c8ff0e8d',1,'rtabmap::Odometry']]], + ['imuthread_19',['imuthread',['../classrtabmap_1_1IMUThread.html#a97a2c48c6bb7e29ae64147fc9f032ac3',1,'rtabmap::IMUThread::IMUThread()'],['../classrtabmap_1_1IMUThread.html',1,'rtabmap::IMUThread']]], + ['incrementmapid_20',['incrementMapId',['../classrtabmap_1_1Memory.html#afce9dbf3e5657d65540e33c59e992d83',1,'rtabmap::Memory']]], + ['indices_20extraction_21',['Point Cloud Indices Extraction',['../group__ExtractIndices.html',1,'']]], + ['info_22',['info',['../classrtabmap_1_1SensorEvent.html#a89ec0e00ab443a71b4735e392e419331',1,'rtabmap::SensorEvent']]], + ['inframe_23',['inFrame',['../classrtabmap_1_1CameraModel.html#aa07cbe07c7893e726c408392cf54d9ca',1,'rtabmap::CameraModel']]], + ['init_24',['init',['../classrtabmap_1_1CameraStereoFlyCapture2.html#a46a2477a1c151927c9d5e7eea51d3354',1,'rtabmap::CameraStereoFlyCapture2::init()'],['../classrtabmap_1_1CameraStereoImages.html#abc0cb4bfd56314d0003c6ce5d365cbca',1,'rtabmap::CameraStereoImages::init()'],['../classrtabmap_1_1CameraStereoTara.html#a3cd79ca07d74d6a3501f3ecd9b31bbef',1,'rtabmap::CameraStereoTara::init()'],['../classrtabmap_1_1CameraStereoVideo.html#a8bc165fb5c77bb9693203791a0888269',1,'rtabmap::CameraStereoVideo::init()'],['../classrtabmap_1_1CameraStereoZed.html#a80088853404d1c4e89b5f29933d7b020',1,'rtabmap::CameraStereoZed::init()'],['../classrtabmap_1_1CameraStereoZedOC.html#a37264abe58baa727bb5ee8d6653fa443',1,'rtabmap::CameraStereoZedOC::init()'],['../classrtabmap_1_1CameraVideo.html#a2b20fb67f20ec64e6c43e8d76d5c1f74',1,'rtabmap::CameraVideo::init()'],['../classrtabmap_1_1DBReader.html#a31b8ffc3d213da7ab58a85ce89b8055e',1,'rtabmap::DBReader::init()'],['../classrtabmap_1_1IMUThread.html#aeed84fd5d571a5e9af54c8c3ea16ef9d',1,'rtabmap::IMUThread::init()'],['../classrtabmap_1_1LidarVLP16.html#a80162804e05013f64c6868084f460ab0',1,'rtabmap::LidarVLP16::init()'],['../classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd',1,'rtabmap::Memory::init()'],['../classrtabmap_1_1Rtabmap.html#a711c479925db2c9f8201aacffe70281b',1,'rtabmap::Rtabmap::init(const ParametersMap &parameters, const std::string &databasePath="", bool loadDatabaseParameters=false)'],['../classrtabmap_1_1Rtabmap.html#a25bfb157aa3be3bd3c8a1d4200329041',1,'rtabmap::Rtabmap::init(const std::string &configFile="", const std::string &databasePath="", bool loadDatabaseParameters=false)'],['../classrtabmap_1_1SensorCapture.html#a1c0cd843969fab53f157cbe0fd333b8a',1,'rtabmap::SensorCapture::init()'],['../classrtabmap_1_1CameraK4A.html#af2c611c697451697f318405469bb23e8',1,'rtabmap::CameraK4A::init()'],['../classrtabmap_1_1CameraSeerSense.html#a2fb66c8fa789c747b12c4ce85c8fc874',1,'rtabmap::CameraSeerSense::init()'],['../classrtabmap_1_1CameraRGBDImages.html#a21903042693fbbc0bfc1586225efb2dd',1,'rtabmap::CameraRGBDImages::init()'],['../classrtabmap_1_1CameraRealSense2.html#a7efbcb280ddd451a9c8fdbdba599c68f',1,'rtabmap::CameraRealSense2::init()'],['../classrtabmap_1_1CameraRealSense.html#a8c94957c92c38eee0d9ebbfd75d35a10',1,'rtabmap::CameraRealSense::init()'],['../classrtabmap_1_1CameraOrbbecSDK.html#a3a99d50d119791b9d3a36056aaddf59a',1,'rtabmap::CameraOrbbecSDK::init()'],['../classrtabmap_1_1CameraOpenNICV.html#a4d636b36e01de97d35fb0b6bb5fc3b7d',1,'rtabmap::CameraOpenNICV::init()'],['../classrtabmap_1_1CameraOpenNI2.html#a0c0da722b985da3595896fcc6bc72c7b',1,'rtabmap::CameraOpenNI2::init()'],['../classrtabmap_1_1CameraOpenni.html#aaa00fc3850c747fb261c87d4ad54827f',1,'rtabmap::CameraOpenni::init()'],['../classrtabmap_1_1CameraMyntEye.html#a368591c828d3bb5aabfe8cae56d01304',1,'rtabmap::CameraMyntEye::init()'],['../classrtabmap_1_1CameraK4W2.html#a33aec7e8863ddd2815a983a71e869127',1,'rtabmap::CameraK4W2::init()'],['../classrtabmap_1_1CameraDepthAI.html#aeab341a67f8c9ef3a078ef4636f969c1',1,'rtabmap::CameraDepthAI::init()'],['../classrtabmap_1_1CameraImages.html#a8f00b6eb8c78a66d3381877825d70206',1,'rtabmap::CameraImages::init()'],['../classrtabmap_1_1CameraFreenect2.html#aab9ed1bf2f64c6b8f6f95e25f94c4a8f',1,'rtabmap::CameraFreenect2::init()'],['../classrtabmap_1_1CameraStereoDC1394.html#a2cc861b0f7c66b8e21267678f6f5f221',1,'rtabmap::CameraStereoDC1394::init()'],['../classrtabmap_1_1CameraFreenect.html#aa36a4142ea9e7dab7120690b1d4a7449',1,'rtabmap::CameraFreenect::init()']]], + ['initrectificationmap_25',['initrectificationmap',['../classrtabmap_1_1CameraModel.html#a5690a86d11b0d84e80961ae5d38b1d25',1,'rtabmap::CameraModel::initRectificationMap()'],['../classrtabmap_1_1StereoCameraModel.html#a544ee7d540dfe57c94863190d87898aa',1,'rtabmap::StereoCameraModel::initRectificationMap()']]], + ['inliers_26',['inliers',['../classrtabmap_1_1RegistrationInfo.html#a9de693920adf2f33eb283018c1e52456',1,'rtabmap::RegistrationInfo']]], + ['inliersdistribution_27',['inliersDistribution',['../classrtabmap_1_1RegistrationInfo.html#a4461db9c85505ed07f6d69b5e0329601',1,'rtabmap::RegistrationInfo']]], + ['inliersids_28',['inliersIDs',['../classrtabmap_1_1RegistrationInfo.html#a3672f48c403ae0d9a309aa7b3a0715b2',1,'rtabmap::RegistrationInfo']]], + ['inliersmeandistance_29',['inliersMeanDistance',['../classrtabmap_1_1RegistrationInfo.html#a9b5a886b0d4a77966820ed5766ff42fc',1,'rtabmap::RegistrationInfo']]], + ['inlierspercam_30',['inliersPerCam',['../classrtabmap_1_1RegistrationInfo.html#a1537d6d65162a8c84cabcae7fba37c26',1,'rtabmap::RegistrationInfo']]], + ['inliersratio_31',['inliersRatio',['../classrtabmap_1_1RegistrationInfo.html#a2ffbcc42740094d7cb5e38bcd03006c8',1,'rtabmap::RegistrationInfo']]], + ['input_20types_20and_20corresponding_20output_20data_3a_32',['Supported input types and corresponding output data:',['../group__LaserScanFromPointCloud.html#autotoc_md0',1,'']]], + ['interest_20roi_20computation_33',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]], + ['interpolate_34',['interpolate',['../classrtabmap_1_1Transform.html#af42b1c945a7fee57a26207fb96b7143d',1,'rtabmap::Transform::interpolate()'],['../namespacertabmap_1_1util2d.html#afc241016af8396edf5228dbe9e80ee8d',1,'rtabmap::util2d::interpolate()']]], + ['introduction_35',['Introduction',['../group__UtiLite.html#intro',1,'']]], + ['inverse_36',['inverse',['../classrtabmap_1_1Link.html#a0d5dcb7392f6ac89ca8b4de202ca07d3',1,'rtabmap::Link::inverse()'],['../classrtabmap_1_1Transform.html#a71ff72d5731d252a87a19c63e3890e3a',1,'rtabmap::Transform::inverse()']]], + ['is3d_37',['is3D',['../classrtabmap_1_1LocalGrid.html#af4bac3ac9ffd57653dee619b5be2b4f7',1,'rtabmap::LocalGrid']]], + ['is3dof_38',['is3DoF',['../classrtabmap_1_1Transform.html#a61c6a6acf6b149caa67918331d73004a',1,'rtabmap::Transform']]], + ['is4dof_39',['is4DoF',['../classrtabmap_1_1Transform.html#adaa07bac5d863d028d277b84880aeaab',1,'rtabmap::Transform']]], + ['isavailable_40',['isavailable',['../classrtabmap_1_1Optimizer.html#afe0381a3b42926b7634027e522766eb1',1,'rtabmap::Optimizer::isAvailable()'],['../classrtabmap_1_1Feature2D.html#a6020550480c25d36f0b4255629e75ee2',1,'rtabmap::Feature2D::isAvailable()']]], + ['isbadsignature_41',['isBadSignature',['../classrtabmap_1_1Signature.html#a693874de0d6ede4fe5c5d43d6f4d8b55',1,'rtabmap::Signature']]], + ['isbindatakept_42',['isBinDataKept',['../classrtabmap_1_1Memory.html#a18a6e852d545751fbc348d2aae6d7fe0',1,'rtabmap::Memory']]], + ['isbool_43',['isBool',['../classUVariant.html#a1f5b265f0e4569021bd6bc212cae91f7',1,'UVariant']]], + ['iscapturing_44',['isCapturing',['../classrtabmap_1_1SensorCaptureThread.html#ab2654b31ebdf06b375045fadbc83731a',1,'rtabmap::SensorCaptureThread']]], + ['ischar_45',['isChar',['../classUVariant.html#a644e3deffa081cacfdadddc1f504e6b6',1,'UVariant']]], + ['ischararray_46',['isCharArray',['../classUVariant.html#ab17409bb37beec9c62defdbe398dfe8b',1,'UVariant']]], + ['isconnected_47',['isConnected',['../classrtabmap_1_1DBDriver.html#a7b1222cf6e75d7365b5b90c37bca2a85',1,'rtabmap::DBDriver']]], + ['iscovarianceignored_48',['isCovarianceIgnored',['../classrtabmap_1_1Optimizer.html#a8bb6372ce4c67fd9b8d54f692ac34238',1,'rtabmap::Optimizer']]], + ['iscreating_49',['isCreating',['../classUThread.html#ac80eff7d48382fd230141ca286370d33',1,'UThread']]], + ['isdouble_50',['isDouble',['../classUVariant.html#a3b9f099698afa0716564960cce359a60',1,'UVariant']]], + ['isdoublearray_51',['isDoubleArray',['../classUVariant.html#aa0a91a91288b102857ebc978767d71c4',1,'UVariant']]], + ['isenabled_52',['isEnabled',['../classrtabmap_1_1Signature.html#a343a565680d03c45cc29dff7392b275e',1,'rtabmap::Signature']]], + ['isfisheye_53',['isFisheye',['../classrtabmap_1_1CameraModel.html#a3ceb0d36d8786f03b778d1969cb6e839',1,'rtabmap::CameraModel']]], + ['isfloat_54',['isFloat',['../classUVariant.html#a2d5757424cf7e69ede4564b82a7ab95c',1,'UVariant']]], + ['isfloatarray_55',['isFloatArray',['../classUVariant.html#a94c1a6cbd6c39968801cc4116bae3c55',1,'UVariant']]], + ['isgpuavailable_56',['isgpuavailable',['../classrtabmap_1_1FAST.html#a1418ac4de2bdf5815df888a4d1f50b2e',1,'rtabmap::FAST::isGpuAvailable()'],['../classrtabmap_1_1Feature2D.html#a8d330b2b7db059f59c257cde6c9b6a99',1,'rtabmap::Feature2D::isGpuAvailable()'],['../classrtabmap_1_1SURF.html#a1150923dbf7e1bfd066dba0c3b22db57',1,'rtabmap::SURF::isGpuAvailable()'],['../classrtabmap_1_1SIFT.html#ad089f68ffc9ef1b42b5a9c2d5a5ecd81',1,'rtabmap::SIFT::isGpuAvailable()'],['../classrtabmap_1_1ORB.html#a7b5e3e7cc41dd04e517c5332f04d3a0a',1,'rtabmap::ORB::isGpuAvailable()'],['../classrtabmap_1_1GFTT.html#a05151f04cf624576783837dc48ddf744',1,'rtabmap::GFTT::isGpuAvailable()'],['../classrtabmap_1_1SuperPointTorch.html#aee69f6089f657449d3813b440abbaa25',1,'rtabmap::SuperPointTorch::isGpuAvailable()'],['../classrtabmap_1_1SuperPointRpautrat.html#ac041c8738dc391661ba21331bf78d344',1,'rtabmap::SuperPointRpautrat::isGpuAvailable()']]], + ['isgpuenabled_57',['isgpuenabled',['../classrtabmap_1_1StereoOpticalFlow.html#abc4c02bc672566fc2dd3f7331b84944e',1,'rtabmap::StereoOpticalFlow::isGpuEnabled()'],['../classrtabmap_1_1Stereo.html#ac1db900d4dbca15de73a81d32f0be179',1,'rtabmap::Stereo::isGpuEnabled()']]], + ['isgraphreduced_58',['isGraphReduced',['../classrtabmap_1_1Memory.html#a790e24b6cb0fb3ec2ed198121a6211c1',1,'rtabmap::Memory']]], + ['isgridfromdepth_59',['isGridFromDepth',['../classrtabmap_1_1LocalGridMaker.html#a60f571f0fd1e58a1a82eb39bfeafda2a',1,'rtabmap::LocalGridMaker']]], + ['isidentity_60',['isIdentity',['../classrtabmap_1_1Transform.html#ae0636052ce31698d4d45afe4492ffab9',1,'rtabmap::Transform']]], + ['isidle_61',['isIdle',['../classUThread.html#a2c4554ad881c0532239a0930c2ebfe24',1,'UThread']]], + ['isidsgenerated_62',['isidsgenerated',['../classrtabmap_1_1Memory.html#a6d48ff5d4dfcf085123b5dd354fae681',1,'rtabmap::Memory::isIDsGenerated()'],['../classrtabmap_1_1Rtabmap.html#a5e85283c6421dcf9afb6961662e501b8',1,'rtabmap::Rtabmap::isIDsGenerated()']]], + ['isimagerequired_63',['isImageRequired',['../classrtabmap_1_1Registration.html#ae10ae7b6dbf4d5396db66600ebe18228',1,'rtabmap::Registration']]], + ['isincremental_64',['isincremental',['../classrtabmap_1_1Memory.html#a420ddb38a3ffefafc84d22b0dd3b3814',1,'rtabmap::Memory::isIncremental()'],['../classrtabmap_1_1VWDictionary.html#a706e209f6228c02730dd8ea501ab5369',1,'rtabmap::VWDictionary::isIncremental() const']]], + ['isincrementalflann_65',['isIncrementalFlann',['../classrtabmap_1_1VWDictionary.html#a9f016aa45f3b3d5618d104fb799ca998',1,'rtabmap::VWDictionary']]], + ['isinfodatafilled_66',['isInfoDataFilled',['../classrtabmap_1_1Odometry.html#a3276da70261724ceb03df8e410844a8c',1,'rtabmap::Odometry']]], + ['isinltm_67',['isInLTM',['../classrtabmap_1_1Memory.html#a2464a77e0190653e10ce9e60fb919ae9',1,'rtabmap::Memory']]], + ['isinmemory_68',['isinmemory',['../classrtabmap_1_1DBDriverSqlite3.html#af9cf8fda0fcc032efb44981d908b4e55',1,'rtabmap::DBDriverSqlite3::isInMemory()'],['../classrtabmap_1_1DBDriver.html#a0ecd6182f404d8e6822b66a54f1d248a',1,'rtabmap::DBDriver::isInMemory()']]], + ['isinstm_69',['isinstm',['../classrtabmap_1_1Memory.html#a19fe91598153249250ac4870db535e8e',1,'rtabmap::Memory::isInSTM()'],['../classrtabmap_1_1Rtabmap.html#a596ea3fbeb22c90db9530f6752900ecc',1,'rtabmap::Rtabmap::isInSTM()']]], + ['isint_70',['isInt',['../classUVariant.html#a4a22ee60a869140c36f80ff04f90c07b',1,'UVariant']]], + ['isintarray_71',['isIntArray',['../classUVariant.html#aa09528d4c1668a2dff51b0f12b3b1de3',1,'UVariant']]], + ['isinvertible_72',['isInvertible',['../classrtabmap_1_1Transform.html#addc1c06517c7308f00bd54b5744aa959',1,'rtabmap::Transform']]], + ['isinwm_73',['isInWM',['../classrtabmap_1_1Memory.html#a5058d8b44e4f76f1fedb76645087a1ac',1,'rtabmap::Memory']]], + ['iskilled_74',['isKilled',['../classUThread.html#a3a0d0de0f78eab72512941ccd048477b',1,'UThread']]], + ['islinksmodified_75',['isLinksModified',['../classrtabmap_1_1Signature.html#a93dcbd3cffc84808fe5652bf0f542ca9',1,'rtabmap::Signature']]], + ['islocalizationdatasaved_76',['isLocalizationDataSaved',['../classrtabmap_1_1Memory.html#a32ed69b783e53be29fca6102ab198a4e',1,'rtabmap::Memory']]], + ['ismapframeprojection_77',['isMapFrameProjection',['../classrtabmap_1_1LocalGridMaker.html#ae8fcd8ed901bc23bac3f14efb48567a9',1,'rtabmap::LocalGridMaker']]], + ['ismodified_78',['ismodified',['../classrtabmap_1_1Signature.html#ab63ee6d2a0e2cd456748a64d9990f969',1,'rtabmap::Signature::isModified()'],['../classrtabmap_1_1VWDictionary.html#aa0bcdf4002305d36bb072c019d475f13',1,'rtabmap::VWDictionary::isModified()']]], + ['isnodeassembled_79',['isNodeAssembled',['../classrtabmap_1_1GlobalMap.html#a9c853fcade3b4b9bd4f49b6a07025e6d',1,'rtabmap::GlobalMap']]], + ['isnull_80',['isNull',['../classrtabmap_1_1Transform.html#a0d6a1985391a45de4fe208e58c51b9d2',1,'rtabmap::Transform']]], + ['isodomgravityused_81',['isOdomGravityUsed',['../classrtabmap_1_1Memory.html#ab29b6d90e79694d7fdfb56574476141f',1,'rtabmap::Memory']]], + ['ispaused_82',['isPaused',['../classrtabmap_1_1SensorCaptureThread.html#a435f89b6a3186462f6ee860afa88644c',1,'rtabmap::SensorCaptureThread']]], + ['ispointvisiblefromcameras_83',['isPointVisibleFromCameras',['../classrtabmap_1_1SensorData.html#a30f069ee8ffa263ec2c18bc714713e03',1,'rtabmap::SensorData']]], + ['isreadonly_84',['isReadOnly',['../classrtabmap_1_1Memory.html#ad6d7488b61f8bedf6c9e3f4019a6b7f4',1,'rtabmap::Memory']]], + ['isrectificationmapinitialized_85',['isrectificationmapinitialized',['../classrtabmap_1_1CameraModel.html#a80cacb16d347e89980369cb2e02f3d48',1,'rtabmap::CameraModel::isRectificationMapInitialized()'],['../classrtabmap_1_1StereoCameraModel.html#aa35a73db2fc272f0f33b40220b75fa43',1,'rtabmap::StereoCameraModel::isRectificationMapInitialized()']]], + ['isrgbdmode_86',['isRGBDMode',['../classrtabmap_1_1Rtabmap.html#a691de75b6964ab48d7f1ea53ea40f4c1',1,'rtabmap::Rtabmap']]], + ['isrobust_87',['isRobust',['../classrtabmap_1_1Optimizer.html#a29ba07e1e829ae616d82756977161c9f',1,'rtabmap::Optimizer']]], + ['isrunning_88',['isRunning',['../classUThread.html#a38e2b22f0616ed4128312baff9cfeba9',1,'UThread']]], + ['issaved_89',['issaved',['../classrtabmap_1_1Signature.html#a0d15326165e9d01f0b91b247f5da23ea',1,'rtabmap::Signature::isSaved()'],['../classrtabmap_1_1VisualWord.html#a4a4d316a18741c30c8d2d5db50f3c4e7',1,'rtabmap::VisualWord::isSaved()']]], + ['isscanrequired_90',['isScanRequired',['../classrtabmap_1_1Registration.html#aa0748ad5a576d0919ef0d360137e5ea7',1,'rtabmap::Registration']]], + ['isshort_91',['isShort',['../classUVariant.html#a611898d77468fdb704aeaf20f5ebc5df',1,'UVariant']]], + ['isshortarray_92',['isShortArray',['../classUVariant.html#a671286922d321c4da699d4cebca3ca44',1,'UVariant']]], + ['isslam2d_93',['isSlam2d',['../classrtabmap_1_1Optimizer.html#a51485674608bbf910922ecee43cc13aa',1,'rtabmap::Optimizer']]], + ['isstr_94',['isStr',['../classUVariant.html#af431bdd37ebae79c5b778d66ad08cf50',1,'UVariant']]], + ['isuchar_95',['isUChar',['../classUVariant.html#af94e47d3da5a0ba9d605359ef843e5d4',1,'UVariant']]], + ['isuchararray_96',['isUCharArray',['../classUVariant.html#a66c02a68f48cab8c2952ebae7181b164',1,'UVariant']]], + ['isuint_97',['isUInt',['../classUVariant.html#aed53240d0ec77aca65317988753412dd',1,'UVariant']]], + ['isuintarray_98',['isUIntArray',['../classUVariant.html#af31b8bdca6cb78ebd3f8f6e97e895442',1,'UVariant']]], + ['isundef_99',['isUndef',['../classUVariant.html#aa33dc5850071f73864c280bd1d4e743b',1,'UVariant']]], + ['isuserdatarequired_100',['isUserDataRequired',['../classrtabmap_1_1Registration.html#a3cd064c74588fd13cce178596e188b5d',1,'rtabmap::Registration']]], + ['isushort_101',['isUShort',['../classUVariant.html#a87d098e60871ec85d179528d0a7bdc88',1,'UVariant']]], + ['isushortarray_102',['isUShortArray',['../classUVariant.html#a006cef10aa4c95539d0cd9d574de747d',1,'UVariant']]], + ['isvalid_103',['isvalid',['../classUFile.html#ad0ecde61a088d9fc3d034a513133341d',1,'UFile::isValid()'],['../classUDirectory.html#a8d471f3c9ff7391d25a52eab24255e64',1,'UDirectory::isValid()'],['../classrtabmap_1_1SensorData.html#ad620676ab1a971846ab80ef646aa5882',1,'rtabmap::SensorData::isValid()'],['../classrtabmap_1_1Link.html#a53974a2cea4315106cf12065ace8bb96',1,'rtabmap::Link::isValid()']]], + ['isvalidforprojection_104',['isvalidforprojection',['../classrtabmap_1_1CameraModel.html#a7b6db41415e085d52bf363d09d5e6d67',1,'rtabmap::CameraModel::isValidForProjection()'],['../classrtabmap_1_1StereoCameraModel.html#a6c16870b83978d286003b166fd6949cf',1,'rtabmap::StereoCameraModel::isValidForProjection()']]], + ['isvalidforrectification_105',['isvalidforrectification',['../classrtabmap_1_1CameraModel.html#a46864eb8de680d45d79777e828dcbb6a',1,'rtabmap::CameraModel::isValidForRectification()'],['../classrtabmap_1_1StereoCameraModel.html#ac5e22eec7815cb27e436afada2b5769f',1,'rtabmap::StereoCameraModel::isValidForRectification()']]], + ['isvalidforreprojection_106',['isValidForReprojection',['../classrtabmap_1_1CameraModel.html#abd4db4f23eb05d531a34ee44f7cdb687',1,'rtabmap::CameraModel']]], + ['iterations_107',['iterations',['../classrtabmap_1_1Optimizer.html#a178bb719b0e22863e29add12c85e14a5',1,'rtabmap::Optimizer::iterations()'],['../classrtabmap_1_1Stereo.html#abde66966de114cd5649fd22602d27816',1,'rtabmap::Stereo::iterations()']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_d.js b/preview/pr-1492/api/latest/search/all_d.js new file mode 100644 index 00000000..5d2c0abc --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['join_0',['join',['../classUThread.html#acf33c0e4b656af76da100e7d4f69ed1d',1,'UThread']]], + ['jointrashthread_1',['joinTrashThread',['../classrtabmap_1_1Memory.html#a2bba8c0aa57778bb441a97728d45a58e',1,'rtabmap::Memory']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_e.js b/preview/pr-1492/api/latest/search/all_e.js new file mode 100644 index 00000000..bf4e917f --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_e.js @@ -0,0 +1,106 @@ +var searchData= +[ + ['k_0',['K',['../classrtabmap_1_1CameraModel.html#a5df2e6c3f361b7084e4d26d7f1846e3d',1,'rtabmap::CameraModel']]], + ['k_5fraw_1',['K_raw',['../classrtabmap_1_1CameraModel.html#ada626650b01d35b494016a5490efb31a',1,'rtabmap::CameraModel']]], + ['kallwithlandmarks_2',['kAllWithLandmarks',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eacc2cbab0ea322149df37addb91cb75ac',1,'rtabmap::Link']]], + ['kallwithoutlandmarks_3',['kAllWithoutLandmarks',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eae8ffae7407e28cf7a125f76bea2864a5',1,'rtabmap::Link']]], + ['kambientairpressure_4',['kAmbientAirPressure',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa2659626ccc2aa59e2d83a57f34e400f0',1,'rtabmap::EnvSensor']]], + ['kambientlight_5',['kAmbientLight',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa8eee701051a2603e162a65d4948a64d8',1,'rtabmap::EnvSensor']]], + ['kambientrelativehumidity_6',['kAmbientRelativeHumidity',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa7c238626943b1254027ed1b5454ae101',1,'rtabmap::EnvSensor']]], + ['kambienttemperature_7',['kAmbientTemperature',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa9e348acef07abec64edef43b58ea1b83',1,'rtabmap::EnvSensor']]], + ['kaze_8',['KAZE',['../classrtabmap_1_1KAZE.html',1,'rtabmap']]], + ['kbool_9',['kBool',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bdac7d8fa7273711e6711880ba9f9d10f62',1,'UVariant']]], + ['kchar_10',['kChar',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda117693c00c89461634dc137ee9a219c4',1,'UVariant']]], + ['kchararray_11',['kCharArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bdafecb2dc57006c548e5ab0b59f2062c29',1,'UVariant']]], + ['kcodedata_12',['kCodeData',['../classrtabmap_1_1SensorEvent.html#a8a1c7b859ae730c1e0ade9fa5e302a66a96386fbcb6a0fd382113f188c193ed61',1,'rtabmap::SensorEvent']]], + ['kcodenomoreimages_13',['kCodeNoMoreImages',['../classrtabmap_1_1SensorEvent.html#a8a1c7b859ae730c1e0ade9fa5e302a66a377f61ebd393e5db46b02121270abdf2',1,'rtabmap::SensorEvent']]], + ['kcustomsensor1_14',['kCustomSensor1',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa88e60173d5f413f4ab490a99c034453e',1,'rtabmap::EnvSensor']]], + ['kdefaultlogfilename_15',['kDefaultLogFileName',['../classULogger.html#ad18593456dbc3c4157ce986f55de6795',1,'ULogger']]], + ['kdouble_16',['kDouble',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda2b55c7ccdc00fd1d99247cf4c22283fd',1,'UVariant']]], + ['kdoublearray_17',['kDoubleArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda572a22c911f2d6525d10d6fec2371a7b',1,'UVariant']]], + ['keypoints_18',['keypoints',['../classrtabmap_1_1SensorData.html#afdc0db8c8176c4108e78e66df54b7d94',1,'rtabmap::SensorData']]], + ['keypoints3d_19',['keypoints3D',['../classrtabmap_1_1SensorData.html#ab17daf3d7c2cd1253306e6d5991549df',1,'rtabmap::SensorData']]], + ['kfloat_20',['kFloat',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bdab133726c8e281b1f873b68d28652cbaf',1,'UVariant']]], + ['kfloatarray_21',['kFloatArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda11179285157ee27026c6b7a3a257dec2',1,'UVariant']]], + ['kglobalclosure_22',['kGlobalClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eae963042a31afec63e8c0683696ac6791',1,'rtabmap::Link']]], + ['kgravity_23',['kGravity',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea37d186f2447908a27d531be74a2f6983',1,'rtabmap::Link']]], + ['kicpcccorelib_24',['kIcpCCCoreLib',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3faba0f8b0cfe29412a3d66af5eb19dd7c0db',1,'rtabmap::RegistrationIcp']]], + ['kicpend_25',['kIcpEnd',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fabaf6639ca6ae5f75d631dbbf7f61455881',1,'rtabmap::RegistrationIcp']]], + ['kicppcl_26',['kIcpPCL',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fabafd4289953af3132d6d334fb438f22ace',1,'rtabmap::RegistrationIcp']]], + ['kicppointmatcher_27',['kIcpPointMatcher',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fabac978d96078e7e0209d4a25894de3c805',1,'rtabmap::RegistrationIcp']]], + ['kicpundef_28',['kIcpUndef',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fabadebfaf4d0822a35b7b56f37f9c133327',1,'rtabmap::RegistrationIcp']]], + ['kidinvalid_29',['kIdInvalid',['../classrtabmap_1_1Memory.html#ac78b3a9a3394eb63c50650a4b8ada68e',1,'rtabmap::Memory']]], + ['kidstart_30',['kIdStart',['../classrtabmap_1_1Memory.html#a12042e10017298c4dcf6e435c5a2290a',1,'rtabmap::Memory']]], + ['kidvirtual_31',['kIdVirtual',['../classrtabmap_1_1Memory.html#a539ccf650a81905db46dd6d98112f603',1,'rtabmap::Memory']]], + ['kill_32',['kill',['../classUThread.html#a8dfefcfd68b453da08ddba9836f35965',1,'UThread']]], + ['kint_33',['kInt',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda85bd9103b3bbb3a0f1f66949fea50952',1,'UVariant']]], + ['kintarray_34',['kIntArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda5e558d8d7cb6b8791c58a0eb3ff46e5c',1,'UVariant']]], + ['klandmark_35',['kLandmark',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea22912bbbcacce5ee39e61da7ec4640b9',1,'rtabmap::Link']]], + ['klocalspaceclosure_36',['kLocalSpaceClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea9195217dc75001841fce507de43fb0db',1,'rtabmap::Link']]], + ['klocaltimeclosure_37',['kLocalTimeClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eae0b352e9cbb32d357ce59f09159c09fb',1,'rtabmap::Link']]], + ['kmadgwick_38',['kMadgwick',['../classrtabmap_1_1IMUFilter.html#a1332e06cbd6b83c0532e6d71523cdb83aa1f642678d0846f51590e4f69a585c09',1,'rtabmap::IMUFilter']]], + ['kneighbor_39',['kNeighbor',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea8f60efd83d5fad3493573bef3d4a8adf',1,'rtabmap::Link']]], + ['kneighbormerged_40',['kNeighborMerged',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea8fbb6dbe2d16e19ad8fecb6bac65e9db',1,'rtabmap::Link']]], + ['knnbruteforce_41',['kNNBruteForce',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655a1745dd334296b8a41cf0c88dcc8a7d5d',1,'rtabmap::VWDictionary']]], + ['knnbruteforcegpu_42',['kNNBruteForceGPU',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655a602d99d5bdef453a39339a0b45979451',1,'rtabmap::VWDictionary']]], + ['knnflannkdtree_43',['kNNFlannKdTree',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655aaa1ea80fc9ca8809ad9b959e2e1564c5',1,'rtabmap::VWDictionary']]], + ['knnflannlsh_44',['kNNFlannLSH',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655a89ab72d0bccd61bb11abbd1edf1e6992',1,'rtabmap::VWDictionary']]], + ['knnflannnaive_45',['kNNFlannNaive',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655ae4301e202dd36e997bf3298390c667f0',1,'rtabmap::VWDictionary']]], + ['knnundef_46',['kNNUndef',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655afeba67ed0aafc39aa35b2a194e147ff9',1,'rtabmap::VWDictionary']]], + ['kposeprior_47',['kPosePrior',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea56caa6c8eeab867bb16f763f3ddbd9b1',1,'rtabmap::Link']]], + ['kpt_48',['kpt',['../classrtabmap_1_1FeatureBA.html#a2bea5690d958d81f5edfa6df954d4a8b',1,'rtabmap::FeatureBA']]], + ['kselfreflink_49',['kSelfRefLink',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ead52adb0176a83a02833e89111f66497e',1,'rtabmap::Link']]], + ['kshort_50',['kShort',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda310a497e7d9c43297d960e2cd20d1fc0',1,'UVariant']]], + ['kshortarray_51',['kShortArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda2e9032fc740ad542d18512b5b0d57a6f',1,'UVariant']]], + ['kstr_52',['kStr',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bdac20f34d5dd5370a8aeb9665c465417dc',1,'UVariant']]], + ['ktypebm_53',['kTypeBM',['../classrtabmap_1_1StereoDense.html#a54329152938c4ca1f259dcb8fa7d8803a393267c04896dd353dc66ade56c8d5f1',1,'rtabmap::StereoDense']]], + ['ktypeceres_54',['kTypeCeres',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a891b6c7cbbe5e149e583ac1fc14fc91d',1,'rtabmap::Optimizer']]], + ['ktypecuvslam_55',['kTypeCuVSLAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849aba6f673ce43f5dfe5c1eecb303f55049',1,'rtabmap::Odometry']]], + ['ktypecvsba_56',['kTypeCVSBA',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a53545e83af9618cb4d39cf0420b3cd54',1,'rtabmap::Optimizer']]], + ['ktypedvo_57',['kTypeDVO',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a7fccdbc59d38d39f4de1253063d79a59',1,'rtabmap::Odometry']]], + ['ktypef2f_58',['kTypeF2F',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a81b73f734f25e9bef50a979ef6d9f662',1,'rtabmap::Odometry']]], + ['ktypef2m_59',['kTypeF2M',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849ac585174ece227de554ed25a51835d3d0',1,'rtabmap::Odometry']]], + ['ktypefloam_60',['kTypeFLOAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849abb9a5bbb18e4ab77c1dac6cc2fe73a68',1,'rtabmap::Odometry']]], + ['ktypefovis_61',['kTypeFovis',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849aeb8888885eaa7c907a98537c7a463b8b',1,'rtabmap::Odometry']]], + ['ktypeg2o_62',['kTypeG2O',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16aa4d070fe00ba5e81adbc958bad18d853',1,'rtabmap::Optimizer']]], + ['ktypegtsam_63',['kTypeGTSAM',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16ab71c83617497f5da0607a47ab162630f',1,'rtabmap::Optimizer']]], + ['ktypeliosam_64',['kTypeLIOSAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849ac13bb66a69e4790bfa574c8a0c6c9975',1,'rtabmap::Odometry']]], + ['ktypeloam_65',['kTypeLOAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849abf68726d1b5239c24ce447ceafd221aa',1,'rtabmap::Odometry']]], + ['ktypemsckf_66',['kTypeMSCKF',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a1de4ebe3cb3470d17d615e86ac791225',1,'rtabmap::Odometry']]], + ['ktypeokvis_67',['kTypeOkvis',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a175924a6dd1fdfb2e162093c5a2a867b',1,'rtabmap::Odometry']]], + ['ktypeopen3d_68',['kTypeOpen3D',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849ab30949269c652911c3d8c5274ad84041',1,'rtabmap::Odometry']]], + ['ktypeopenvins_69',['kTypeOpenVINS',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a9e760521384d881e2fafcc008193f65a',1,'rtabmap::Odometry']]], + ['ktypeorbslam_70',['kTypeORBSLAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a32b913af77b8df59d89aa226cbdf5e9b',1,'rtabmap::Odometry']]], + ['ktypesgbm_71',['kTypeSGBM',['../classrtabmap_1_1StereoDense.html#a54329152938c4ca1f259dcb8fa7d8803abf3465f1ebb12576596dc4b605c1ffae',1,'rtabmap::StereoDense']]], + ['ktypetoro_72',['kTypeTORO',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a6065bdb6e49c0f5ffc98d5f2f6b0d5ab',1,'rtabmap::Optimizer']]], + ['ktypeundef_73',['ktypeundef',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a7e81a250626fd76729fa01fb7b40fde5',1,'rtabmap::Odometry::kTypeUndef'],['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16abae75975865bff7e12e82d2f5295e0db',1,'rtabmap::Optimizer::kTypeUndef']]], + ['ktypevinsfusion_74',['kTypeVINSFusion',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a1e148f21361b3e46d6ea7c83ac35a7a4',1,'rtabmap::Odometry']]], + ['ktypeviso2_75',['kTypeViso2',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849ab788cd11e7f6906987e33c0189a5c367',1,'rtabmap::Odometry']]], + ['kuchar_76',['kUChar',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda017bb86f2bbfc9c10fc082890fdd3c9e',1,'UVariant']]], + ['kuchararray_77',['kUCharArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda6ae60f887effac25862b2e70692aabe4',1,'UVariant']]], + ['kuint_78',['kUInt',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda4ea55b31fb308080d00de2437717a13c',1,'UVariant']]], + ['kuintarray_79',['kUIntArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda1b015c8ec9bcab8fca0734749cba4f3d',1,'UVariant']]], + ['kundef_80',['kUndef',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda4592761da391696a37f01f792c65f750',1,'UVariant']]], + ['kundefined_81',['kUndefined',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fad06ac95d82e3fceb18e1f3dfd190931a',1,'rtabmap::EnvSensor']]], + ['kunknown_82',['kUnknown',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a068e1caebd3d8c939887dce363abd24d',1,'rtabmap::LaserScan']]], + ['kuserclosure_83',['kUserClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea878009c73fbfa2736f438b748afbc1f6',1,'rtabmap::Link']]], + ['kushort_84',['kUShort',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda558d69cc5a6df93471a3455083bb7c6b',1,'UVariant']]], + ['kushortarray_85',['kUShortArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda2c7450a1f1cf76ef9018e86d3d422245',1,'UVariant']]], + ['kvhepipolar_86',['kVhEpipolar',['../classrtabmap_1_1Rtabmap.html#afa134603fb0835b84f269e48e7ab568ca1b458648c7dc4ea000ca53e0e384e3c6',1,'rtabmap::Rtabmap']]], + ['kvhnone_87',['kVhNone',['../classrtabmap_1_1Rtabmap.html#afa134603fb0835b84f269e48e7ab568caea5e55cc106979d91f695c064a78926b',1,'rtabmap::Rtabmap']]], + ['kvhundef_88',['kVhUndef',['../classrtabmap_1_1Rtabmap.html#afa134603fb0835b84f269e48e7ab568cab2676e6cebdd6090d3c87a3237c3e83b',1,'rtabmap::Rtabmap']]], + ['kvirtualclosure_89',['kVirtualClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eaf74a4b0552da7509b16f8c4b8baf85c7',1,'rtabmap::Link']]], + ['kwifisignalstrength_90',['kWifiSignalStrength',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa1bc42ead6237eb515f301b39e162dee2',1,'rtabmap::EnvSensor']]], + ['kxy_91',['kXY',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a4f3e7340e44a01b48ccaf8e1f8dca3e1',1,'rtabmap::LaserScan']]], + ['kxyi_92',['kXYI',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007abb92c193b2eb76045e1a141c2a42cc00',1,'rtabmap::LaserScan']]], + ['kxyinormal_93',['kXYINormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a799064c7e31b99134871b5d7d2906f97',1,'rtabmap::LaserScan']]], + ['kxynormal_94',['kXYNormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007ad4c3ec9f057875ade4f21f52901bceb5',1,'rtabmap::LaserScan']]], + ['kxyz_95',['kXYZ',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a0c376810ac499a8a93a02bd0d4a19267',1,'rtabmap::LaserScan']]], + ['kxyzi_96',['kXYZI',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a5efd7fbf18cee72d9eb2daa4ea818e42',1,'rtabmap::LaserScan']]], + ['kxyzinormal_97',['kXYZINormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a3fdc082afb503bb197e2651b6fc565b8',1,'rtabmap::LaserScan']]], + ['kxyzirt_98',['kXYZIRT',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a7df3c8f97dd52461787060befaf7f2d7',1,'rtabmap::LaserScan']]], + ['kxyzit_99',['kXYZIT',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007ab169cf98665cb3f33d81240b37cc501c',1,'rtabmap::LaserScan']]], + ['kxyznormal_100',['kXYZNormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a09e67f9495016103a162854b8e852bbc',1,'rtabmap::LaserScan']]], + ['kxyzrgb_101',['kXYZRGB',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a500cf2179e454d8d5a74895b301c0829',1,'rtabmap::LaserScan']]], + ['kxyzrgbnormal_102',['kXYZRGBNormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007af2d5b7ff94aeac818000d840e257ac07',1,'rtabmap::LaserScan']]] +]; diff --git a/preview/pr-1492/api/latest/search/all_f.js b/preview/pr-1492/api/latest/search/all_f.js new file mode 100644 index 00000000..c955939f --- /dev/null +++ b/preview/pr-1492/api/latest/search/all_f.js @@ -0,0 +1,54 @@ +var searchData= +[ + ['labellocation_0',['labelLocation',['../classrtabmap_1_1Rtabmap.html#af1fe8ed393237bc9ffa1ea93adf0ec9b',1,'rtabmap::Rtabmap']]], + ['labels_1',['labels',['../classrtabmap_1_1Statistics.html#afeb2fd18d35f6a760ffa46ca0ebe4e49',1,'rtabmap::Statistics']]], + ['labelsignature_2',['labelSignature',['../classrtabmap_1_1Memory.html#abba1fbec2be0cfced6e14d723fc45794',1,'rtabmap::Memory']]], + ['landmark_3',['landmark',['../classrtabmap_1_1Landmark.html',1,'rtabmap::Landmark'],['../classrtabmap_1_1Landmark.html#a92311f7550e395fea804c5438e9085ff',1,'rtabmap::Landmark::Landmark(const int &id, const Transform &pose, const cv::Mat &covariance)'],['../classrtabmap_1_1Landmark.html#a6ba2b53d996e0fa62a8023917e515a06',1,'rtabmap::Landmark::Landmark()'],['../classrtabmap_1_1Landmark.html#a1fda87c27ac931dcf9815921b53c1f19',1,'rtabmap::Landmark::Landmark(const int &id, const float &size, const Transform &pose, const cv::Mat &covariance)']]], + ['landmarks_4',['landmarks',['../namespacertabmap.html#a12bbfd3e37121bf9f68a4047c8b4da86',1,'rtabmap::Landmarks'],['../classrtabmap_1_1SensorData.html#a73ba0bb1cb31a3438b3ffee161b16ff8',1,'rtabmap::SensorData::landmarks()']]], + ['landmarksignored_5',['landmarksIgnored',['../classrtabmap_1_1Optimizer.html#a32f53d408ef0372c5c196ee89ff5ad79',1,'rtabmap::Optimizer']]], + ['laserscan_6',['laserscan',['../classrtabmap_1_1LaserScan.html',1,'rtabmap::LaserScan'],['../classrtabmap_1_1LaserScan.html#aaf554921f866f90c48a6174d5f97a016',1,'rtabmap::LaserScan::LaserScan(const LaserScan &data, Format format, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity())'],['../classrtabmap_1_1LaserScan.html#a0cb5ba7c590cea1b36c81804acdbf302',1,'rtabmap::LaserScan::LaserScan(const LaserScan &data, int maxPoints, float maxRange, Format format, const Transform &localTransform=Transform::getIdentity())'],['../group__LaserScan2dFromPointCloud.html',1,'PCL to 2D LaserScan'],['../group__LaserScanFromPointCloud.html',1,'PCL to 3D LaserScan']]], + ['laserscan_20to_20pcl_7',['LaserScan to PCL',['../group__LaserScanToPointCloud.html',1,'']]], + ['laserscan2dfrompointcloud_8',['laserscan2dfrompointcloud',['../group__LaserScan2dFromPointCloud.html#ga0354b321c4196232fb1183c3a322b5f8',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#ga6cb623d1b3ce9c244a7d4ef346a721db',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#gae4e7c218a24fb8d5c3fd7143462d3070',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#gac278e2f3f54ed49b5d3a6afa606a466b',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointNormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#ga0898d06b1639f58ed92b66f311e786aa',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#gac0823dd28e488bef9499faee54ff8a4e',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)']]], + ['laserscancompressed_9',['laserScanCompressed',['../classrtabmap_1_1SensorData.html#a1522af81a95c27b76e316919df95a869',1,'rtabmap::SensorData']]], + ['laserscanfrompointcloud_10',['laserscanfrompointcloud',['../group__LaserScanFromPointCloud.html#ga04169bd4b4488350b08709af9581b289',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< rtabmap::PointXYZIRT > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga078f5eae0077169e636ec76e03973edc',1,'rtabmap::util3d::laserScanFromPointCloud(const PointCloud2T &cloud, bool filterNaNs=true, bool is2D=false, const Transform &transform=Transform())'],['../group__LaserScanFromPointCloud.html#ga16a77d267dc60b14b5bf48ca52547bae',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga75f96d3e3d5d62ce6a9d16a1753c775a',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga7a88e45c9bab555c6d1efd64be765c4d',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointNormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga9470f081e8de0a34550e91e2f74bacd5',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointNormal > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gad5764a399e3a8a5586b94490e0cd7d15',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga9933faab17e984b2789926abd2ba0caf',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gaa98ccb732868f5ab4e91cd6f82602852',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gadeb1f66fd39cfcb39c2f152c36b3be62',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga51c683da166a9fcf7e7bf6c834ca03a4',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga75bf455d6cc912b4ee18785de71c50a5',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gaf509a7c65e02d8690c971294c43bda47',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga9344c712c57af92d7612b0af76226f06',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga79e460158de1d3934abcd8fad488fb24',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gafb165d79d23620b42af0653ae045fb91',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gab2d54043075851c5e23f487001adacb6',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga655a37385c6ca40ec99e76045c04040b',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< rtabmap::PointXYZIRT > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)']]], + ['laserscanraw_11',['laserScanRaw',['../classrtabmap_1_1SensorData.html#aeebafe56f302f9e8e4f06c5ad750248d',1,'rtabmap::SensorData']]], + ['laserscantopointcloud2_12',['laserScanToPointCloud2',['../group__LaserScanToPointCloud.html#ga394ec840a58a1203fac9725d49a0013c',1,'rtabmap::util3d']]], + ['latitude_13',['latitude',['../classrtabmap_1_1GPS.html#a9b20f8a5bf2cba909b53ecd83d2b4c08',1,'rtabmap::GPS::latitude()'],['../classrtabmap_1_1GeodeticCoords.html#ac6f662384e5b4ac613d5678307eb95a7',1,'rtabmap::GeodeticCoords::latitude()']]], + ['left_14',['left',['../classrtabmap_1_1StereoCameraModel.html#a064d29601c0ba13fc47584849e26b81b',1,'rtabmap::StereoCameraModel']]], + ['length_15',['length',['../classUFile.html#a0c42f32c914b349d13103d0397c1b3c1',1,'UFile::length()'],['../classUFile.html#ae1415739da256633ad417ac7d5fc2c11',1,'UFile::length(const std::string &filePath)']]], + ['level_16',['Level',['../classULogger.html#a4f71cd491aa60029eb6ea4bf79c06218',1,'ULogger']]], + ['libutilite_5faudio_20so_20_3a_20optional_17',['Audio stuff (libutilite_audio.so : OPTIONAL)',['../group__UtiLite.html#audioLib',1,'']]], + ['libutilite_5fcv_20so_20_3a_20optional_18',['OpenCV stuff (libutilite_cv.so : OPTIONAL)',['../group__UtiLite.html#cvLib',1,'']]], + ['libutilite_5fqt_20so_20_3a_20optional_19',['Qt Widgets (libutilite_qt.so : OPTIONAL)',['../group__UtiLite.html#qtLib',1,'']]], + ['lidar_20',['lidar',['../classrtabmap_1_1Lidar.html',1,'rtabmap::Lidar'],['../classrtabmap_1_1Lidar.html#a9d14987cd20918960d6b3705b66241ed',1,'rtabmap::Lidar::Lidar()'],['../classrtabmap_1_1SensorCaptureThread.html#aa6e5a6a53d621cda6e0b7f2ff35d33f0',1,'rtabmap::SensorCaptureThread::lidar()']]], + ['lidarvlp16_21',['LidarVLP16',['../classrtabmap_1_1LidarVLP16.html',1,'rtabmap']]], + ['likelihood_22',['likelihood',['../classrtabmap_1_1Statistics.html#a4f3492b5cf6ff082d0061c9d7c67536f',1,'rtabmap::Statistics']]], + ['limitkeypoints_23',['limitKeypoints',['../classrtabmap_1_1Feature2D.html#aa5c0258ede589769bc50c6d6071d595c',1,'rtabmap::Feature2D']]], + ['linear_24',['linear',['../structrtabmap_1_1graph_1_1MaxGraphErrors.html#a81e053c54198c0c57dba6ef65d1c3a8c',1,'rtabmap::graph::MaxGraphErrors']]], + ['linearacceleration_25',['linearAcceleration',['../classrtabmap_1_1IMU.html#a8fde3445664329d6432b632fca9db17a',1,'rtabmap::IMU']]], + ['linearaccelerationcovariance_26',['linearAccelerationCovariance',['../classrtabmap_1_1IMU.html#a2ee035bffb85f1681ad3525c32ba1243',1,'rtabmap::IMU']]], + ['linearlink_27',['linearLink',['../structrtabmap_1_1graph_1_1MaxGraphErrors.html#ae51dd46bd7d7f6779b681eb906654321',1,'rtabmap::graph::MaxGraphErrors']]], + ['linearratio_28',['linearRatio',['../structrtabmap_1_1graph_1_1MaxGraphErrors.html#a2a49ed004369d9a6670781d7f3b3cae9',1,'rtabmap::graph::MaxGraphErrors']]], + ['link_29',['link',['../classrtabmap_1_1Link.html',1,'rtabmap::Link'],['../classrtabmap_1_1Link.html#a2dce9c7a3ef04085d51f702002107c7b',1,'rtabmap::Link::Link()'],['../classrtabmap_1_1Link.html#a8f624aa84862d7abafae5cfc7175f885',1,'rtabmap::Link::Link(int from, int to, Type type, const Transform &transform, const cv::Mat &infMatrix=cv::Mat::eye(6, 6, CV_64FC1), const cv::Mat &userData=cv::Mat())']]], + ['list_30',['Deprecated List',['../deprecated.html',1,'']]], + ['load_31',['load',['../classrtabmap_1_1CameraModel.html#a2c2ff6db9029c3ee219642d7e48b04fa',1,'rtabmap::CameraModel::load(const std::string &filePath, bool initRectificationMaps=true)'],['../classrtabmap_1_1CameraModel.html#abe9b3c87c086fd33286c01361e454056',1,'rtabmap::CameraModel::load(const std::string &directory, const std::string &cameraName, bool initRectificationMaps=true)'],['../classrtabmap_1_1StereoCameraModel.html#a9c2d94b9bc335fdec7f5fa4f4c45a07c',1,'rtabmap::StereoCameraModel::load()']]], + ['load2dmap_32',['load2dmap',['../classrtabmap_1_1DBDriver.html#aa3d68850f4bb114e897e37af6b1c858a',1,'rtabmap::DBDriver::load2DMap()'],['../classrtabmap_1_1Memory.html#a9a71f27d0de4f7e6400ca470a82be19d',1,'rtabmap::Memory::load2DMap()']]], + ['loadlinks_33',['loadLinks',['../classrtabmap_1_1DBDriver.html#aab00d50127b8b5bb92f8605e35aaca4d',1,'rtabmap::DBDriver']]], + ['loadoptimizedmesh_34',['loadOptimizedMesh',['../classrtabmap_1_1Memory.html#a0827d1d23744b3693f00e518e1b0fda8',1,'rtabmap::Memory']]], + ['loadoptimizedposes_35',['loadoptimizedposes',['../classrtabmap_1_1DBDriver.html#a6ef8c39b350634d21b57b1c07b029e55',1,'rtabmap::DBDriver::loadOptimizedPoses()'],['../classrtabmap_1_1Memory.html#a9e2972a53619456d75ad923fb5e9bc7e',1,'rtabmap::Memory::loadOptimizedPoses()']]], + ['loadpreviewimage_36',['loadpreviewimage',['../classrtabmap_1_1DBDriver.html#aa1423596308a8baf123ecbc7fdfc1e82',1,'rtabmap::DBDriver::loadPreviewImage()'],['../classrtabmap_1_1Memory.html#abd0d7277526f06861df17e03fa13e817',1,'rtabmap::Memory::loadPreviewImage()']]], + ['loadsignature_37',['loadSignature',['../classrtabmap_1_1DBDriver.html#a0a713d7a6dabdcfbb8d733dba2a20120',1,'rtabmap::DBDriver']]], + ['localgrid_38',['localgrid',['../classrtabmap_1_1LocalGrid.html#a42d930cf05d39ecbbd2e3678f8d0b47a',1,'rtabmap::LocalGrid::LocalGrid()'],['../classrtabmap_1_1LocalGrid.html',1,'rtabmap::LocalGrid']]], + ['localgridcache_39',['LocalGridCache',['../classrtabmap_1_1LocalGridCache.html',1,'rtabmap']]], + ['localgridmaker_40',['localgridmaker',['../classrtabmap_1_1LocalGridMaker.html#a70040df32d1949125f24a193581b8183',1,'rtabmap::LocalGridMaker::LocalGridMaker()'],['../classrtabmap_1_1LocalGridMaker.html',1,'rtabmap::LocalGridMaker']]], + ['localizationcovariance_41',['localizationCovariance',['../classrtabmap_1_1Statistics.html#a4c05e2dd7412e875333f3edea70ffbb3',1,'rtabmap::Statistics']]], + ['localpath_42',['localPath',['../classrtabmap_1_1Statistics.html#a82f7c8f962fd5fcea9a5d4fc087cb2ce',1,'rtabmap::Statistics']]], + ['localtransform_43',['localtransform',['../classrtabmap_1_1StereoCameraModel.html#a5257cde3d51bbee7c51c3f36d0c7741f',1,'rtabmap::StereoCameraModel::localTransform()'],['../classrtabmap_1_1IMU.html#a10cfadbe31bbf80822a9ab92c0892b33',1,'rtabmap::IMU::localTransform()'],['../classrtabmap_1_1CameraModel.html#a8a1712ca95bf08c71b2bf2da1d635bc8',1,'rtabmap::CameraModel::localTransform()']]], + ['lock_44',['lock',['../classUMutex.html#af42d27a9379e6872e8cf2e5e171e820c',1,'UMutex']]], + ['locktry_45',['lockTry',['../classUMutex.html#a6237fbb3142023f92c11989b13207c32',1,'UMutex']]], + ['logodds_46',['logodds',['../classrtabmap_1_1GlobalMap.html#aff0b3450ec3db63b9dcb140ff0cbe77a',1,'rtabmap::GlobalMap']]], + ['longitude_47',['longitude',['../classrtabmap_1_1GeodeticCoords.html#a68e16e48c8ede571e20e9889547fd509',1,'rtabmap::GeodeticCoords::longitude()'],['../classrtabmap_1_1GPS.html#ac848af004f6581d42d55568d72332793',1,'rtabmap::GPS::longitude()']]], + ['loopclosureid_48',['loopClosureId',['../classrtabmap_1_1Statistics.html#a6a81189f2327a8b8f05a5f93d68fa3b7',1,'rtabmap::Statistics']]], + ['loopclosuremapid_49',['loopClosureMapId',['../classrtabmap_1_1Statistics.html#a1cf32a26d3ca103c22104015a3de8929',1,'rtabmap::Statistics']]], + ['loopclosuretransform_50',['loopClosureTransform',['../classrtabmap_1_1Statistics.html#a38c88cb8327baa290bf476326d24b54c',1,'rtabmap::Statistics']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_0.js b/preview/pr-1492/api/latest/search/classes_0.js new file mode 100644 index 00000000..eda95fe3 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['bayesfilter_0',['BayesFilter',['../classrtabmap_1_1BayesFilter.html',1,'rtabmap']]], + ['brisk_1',['BRISK',['../classrtabmap_1_1BRISK.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_1.js b/preview/pr-1492/api/latest/search/classes_1.js new file mode 100644 index 00000000..052040c4 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_1.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['camera_0',['Camera',['../classrtabmap_1_1Camera.html',1,'rtabmap']]], + ['cameradepthai_1',['CameraDepthAI',['../classrtabmap_1_1CameraDepthAI.html',1,'rtabmap']]], + ['camerafreenect_2',['CameraFreenect',['../classrtabmap_1_1CameraFreenect.html',1,'rtabmap']]], + ['camerafreenect2_3',['CameraFreenect2',['../classrtabmap_1_1CameraFreenect2.html',1,'rtabmap']]], + ['cameraimages_4',['CameraImages',['../classrtabmap_1_1CameraImages.html',1,'rtabmap']]], + ['camerak4a_5',['CameraK4A',['../classrtabmap_1_1CameraK4A.html',1,'rtabmap']]], + ['camerak4w2_6',['CameraK4W2',['../classrtabmap_1_1CameraK4W2.html',1,'rtabmap']]], + ['cameramodel_7',['CameraModel',['../classrtabmap_1_1CameraModel.html',1,'rtabmap']]], + ['cameramynteye_8',['CameraMyntEye',['../classrtabmap_1_1CameraMyntEye.html',1,'rtabmap']]], + ['cameraopenni_9',['CameraOpenni',['../classrtabmap_1_1CameraOpenni.html',1,'rtabmap']]], + ['cameraopenni2_10',['CameraOpenNI2',['../classrtabmap_1_1CameraOpenNI2.html',1,'rtabmap']]], + ['cameraopennicv_11',['CameraOpenNICV',['../classrtabmap_1_1CameraOpenNICV.html',1,'rtabmap']]], + ['cameraorbbecsdk_12',['CameraOrbbecSDK',['../classrtabmap_1_1CameraOrbbecSDK.html',1,'rtabmap']]], + ['camerarealsense_13',['CameraRealSense',['../classrtabmap_1_1CameraRealSense.html',1,'rtabmap']]], + ['camerarealsense2_14',['CameraRealSense2',['../classrtabmap_1_1CameraRealSense2.html',1,'rtabmap']]], + ['camerargbdimages_15',['CameraRGBDImages',['../classrtabmap_1_1CameraRGBDImages.html',1,'rtabmap']]], + ['cameraseersense_16',['CameraSeerSense',['../classrtabmap_1_1CameraSeerSense.html',1,'rtabmap']]], + ['camerastereodc1394_17',['CameraStereoDC1394',['../classrtabmap_1_1CameraStereoDC1394.html',1,'rtabmap']]], + ['camerastereoflycapture2_18',['CameraStereoFlyCapture2',['../classrtabmap_1_1CameraStereoFlyCapture2.html',1,'rtabmap']]], + ['camerastereoimages_19',['CameraStereoImages',['../classrtabmap_1_1CameraStereoImages.html',1,'rtabmap']]], + ['camerastereotara_20',['CameraStereoTara',['../classrtabmap_1_1CameraStereoTara.html',1,'rtabmap']]], + ['camerastereovideo_21',['CameraStereoVideo',['../classrtabmap_1_1CameraStereoVideo.html',1,'rtabmap']]], + ['camerastereozed_22',['CameraStereoZed',['../classrtabmap_1_1CameraStereoZed.html',1,'rtabmap']]], + ['camerastereozedoc_23',['CameraStereoZedOC',['../classrtabmap_1_1CameraStereoZedOC.html',1,'rtabmap']]], + ['cameravideo_24',['CameraVideo',['../classrtabmap_1_1CameraVideo.html',1,'rtabmap']]], + ['cloudmap_25',['CloudMap',['../classrtabmap_1_1CloudMap.html',1,'rtabmap']]], + ['compressionthread_26',['CompressionThread',['../classrtabmap_1_1CompressionThread.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_10.js b/preview/pr-1492/api/latest/search/classes_10.js new file mode 100644 index 00000000..9d775aab --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['visualword_0',['VisualWord',['../classrtabmap_1_1VisualWord.html',1,'rtabmap']]], + ['vwdictionary_1',['VWDictionary',['../classrtabmap_1_1VWDictionary.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_2.js b/preview/pr-1492/api/latest/search/classes_2.js new file mode 100644 index 00000000..68ab1b18 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['dbdriver_0',['DBDriver',['../classrtabmap_1_1DBDriver.html',1,'rtabmap']]], + ['dbdriversqlite3_1',['DBDriverSqlite3',['../classrtabmap_1_1DBDriverSqlite3.html',1,'rtabmap']]], + ['dbreader_2',['DBReader',['../classrtabmap_1_1DBReader.html',1,'rtabmap']]], + ['discretedepthdistortionmodel_3',['DiscreteDepthDistortionModel',['../classclams_1_1DiscreteDepthDistortionModel.html',1,'clams']]], + ['discretefrustum_4',['DiscreteFrustum',['../classclams_1_1DiscreteFrustum.html',1,'clams']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_3.js b/preview/pr-1492/api/latest/search/classes_3.js new file mode 100644 index 00000000..883ee849 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['envsensor_0',['EnvSensor',['../classrtabmap_1_1EnvSensor.html',1,'rtabmap']]], + ['epipolargeometry_1',['EpipolarGeometry',['../classrtabmap_1_1EpipolarGeometry.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_4.js b/preview/pr-1492/api/latest/search/classes_4.js new file mode 100644 index 00000000..61af0a3d --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_4.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['fast_0',['FAST',['../classrtabmap_1_1FAST.html',1,'rtabmap']]], + ['fast_5fbrief_1',['FAST_BRIEF',['../classrtabmap_1_1FAST__BRIEF.html',1,'rtabmap']]], + ['fast_5ffreak_2',['FAST_FREAK',['../classrtabmap_1_1FAST__FREAK.html',1,'rtabmap']]], + ['feature2d_3',['Feature2D',['../classrtabmap_1_1Feature2D.html',1,'rtabmap']]], + ['featureba_4',['FeatureBA',['../classrtabmap_1_1FeatureBA.html',1,'rtabmap']]], + ['flannindex_5',['FlannIndex',['../classrtabmap_1_1FlannIndex.html',1,'rtabmap']]], + ['frameprojector_6',['FrameProjector',['../classclams_1_1FrameProjector.html',1,'clams']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_5.js b/preview/pr-1492/api/latest/search/classes_5.js new file mode 100644 index 00000000..e4b4d8cb --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_5.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['gaincompensator_0',['GainCompensator',['../classrtabmap_1_1GainCompensator.html',1,'rtabmap']]], + ['geodeticcoords_1',['GeodeticCoords',['../classrtabmap_1_1GeodeticCoords.html',1,'rtabmap']]], + ['gftt_2',['GFTT',['../classrtabmap_1_1GFTT.html',1,'rtabmap']]], + ['gftt_5fbrief_3',['GFTT_BRIEF',['../classrtabmap_1_1GFTT__BRIEF.html',1,'rtabmap']]], + ['gftt_5fdaisy_4',['GFTT_DAISY',['../classrtabmap_1_1GFTT__DAISY.html',1,'rtabmap']]], + ['gftt_5ffreak_5',['GFTT_FREAK',['../classrtabmap_1_1GFTT__FREAK.html',1,'rtabmap']]], + ['gftt_5forb_6',['GFTT_ORB',['../classrtabmap_1_1GFTT__ORB.html',1,'rtabmap']]], + ['globaldescriptor_7',['GlobalDescriptor',['../classrtabmap_1_1GlobalDescriptor.html',1,'rtabmap']]], + ['globaldescriptorextractor_8',['GlobalDescriptorExtractor',['../classrtabmap_1_1GlobalDescriptorExtractor.html',1,'rtabmap']]], + ['globalmap_9',['GlobalMap',['../classrtabmap_1_1GlobalMap.html',1,'rtabmap']]], + ['gps_10',['GPS',['../classrtabmap_1_1GPS.html',1,'rtabmap']]], + ['gridmap_11',['GridMap',['../classrtabmap_1_1GridMap.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_6.js b/preview/pr-1492/api/latest/search/classes_6.js new file mode 100644 index 00000000..7287e318 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['imu_0',['IMU',['../classrtabmap_1_1IMU.html',1,'rtabmap']]], + ['imuevent_1',['IMUEvent',['../classrtabmap_1_1IMUEvent.html',1,'rtabmap']]], + ['imufilter_2',['IMUFilter',['../classrtabmap_1_1IMUFilter.html',1,'rtabmap']]], + ['imuthread_3',['IMUThread',['../classrtabmap_1_1IMUThread.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_7.js b/preview/pr-1492/api/latest/search/classes_7.js new file mode 100644 index 00000000..2d046d19 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kaze_0',['KAZE',['../classrtabmap_1_1KAZE.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_8.js b/preview/pr-1492/api/latest/search/classes_8.js new file mode 100644 index 00000000..69e1b18e --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_8.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['landmark_0',['Landmark',['../classrtabmap_1_1Landmark.html',1,'rtabmap']]], + ['laserscan_1',['LaserScan',['../classrtabmap_1_1LaserScan.html',1,'rtabmap']]], + ['lidar_2',['Lidar',['../classrtabmap_1_1Lidar.html',1,'rtabmap']]], + ['lidarvlp16_3',['LidarVLP16',['../classrtabmap_1_1LidarVLP16.html',1,'rtabmap']]], + ['link_4',['Link',['../classrtabmap_1_1Link.html',1,'rtabmap']]], + ['localgrid_5',['LocalGrid',['../classrtabmap_1_1LocalGrid.html',1,'rtabmap']]], + ['localgridcache_6',['LocalGridCache',['../classrtabmap_1_1LocalGridCache.html',1,'rtabmap']]], + ['localgridmaker_7',['LocalGridMaker',['../classrtabmap_1_1LocalGridMaker.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_9.js b/preview/pr-1492/api/latest/search/classes_9.js new file mode 100644 index 00000000..571db85e --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['markerdetector_0',['MarkerDetector',['../classrtabmap_1_1MarkerDetector.html',1,'rtabmap']]], + ['markerinfo_1',['MarkerInfo',['../classrtabmap_1_1MarkerInfo.html',1,'rtabmap']]], + ['maxgrapherrors_2',['MaxGraphErrors',['../structrtabmap_1_1graph_1_1MaxGraphErrors.html',1,'rtabmap::graph']]], + ['memory_3',['Memory',['../classrtabmap_1_1Memory.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_a.js b/preview/pr-1492/api/latest/search/classes_a.js new file mode 100644 index 00000000..deca84d3 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_a.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['occupancygrid_0',['OccupancyGrid',['../classrtabmap_1_1OccupancyGrid.html',1,'rtabmap']]], + ['octomap_1',['OctoMap',['../classrtabmap_1_1OctoMap.html',1,'rtabmap']]], + ['odometry_2',['Odometry',['../classrtabmap_1_1Odometry.html',1,'rtabmap']]], + ['odometrycuvslam_3',['OdometryCuVSLAM',['../classrtabmap_1_1OdometryCuVSLAM.html',1,'rtabmap']]], + ['odometrydvo_4',['OdometryDVO',['../classrtabmap_1_1OdometryDVO.html',1,'rtabmap']]], + ['odometryevent_5',['OdometryEvent',['../classrtabmap_1_1OdometryEvent.html',1,'rtabmap']]], + ['odometryf2f_6',['OdometryF2F',['../classrtabmap_1_1OdometryF2F.html',1,'rtabmap']]], + ['odometryf2m_7',['OdometryF2M',['../classrtabmap_1_1OdometryF2M.html',1,'rtabmap']]], + ['odometryfloam_8',['OdometryFLOAM',['../classrtabmap_1_1OdometryFLOAM.html',1,'rtabmap']]], + ['odometryfovis_9',['OdometryFovis',['../classrtabmap_1_1OdometryFovis.html',1,'rtabmap']]], + ['odometryinfo_10',['OdometryInfo',['../classrtabmap_1_1OdometryInfo.html',1,'rtabmap']]], + ['odometryliosam_11',['OdometryLIOSAM',['../classrtabmap_1_1OdometryLIOSAM.html',1,'rtabmap']]], + ['odometryloam_12',['OdometryLOAM',['../classrtabmap_1_1OdometryLOAM.html',1,'rtabmap']]], + ['odometrymono_13',['OdometryMono',['../classrtabmap_1_1OdometryMono.html',1,'rtabmap']]], + ['odometrymsckf_14',['OdometryMSCKF',['../classrtabmap_1_1OdometryMSCKF.html',1,'rtabmap']]], + ['odometryokvis_15',['OdometryOkvis',['../classrtabmap_1_1OdometryOkvis.html',1,'rtabmap']]], + ['odometryopen3d_16',['OdometryOpen3D',['../classrtabmap_1_1OdometryOpen3D.html',1,'rtabmap']]], + ['odometryopenvins_17',['OdometryOpenVINS',['../classrtabmap_1_1OdometryOpenVINS.html',1,'rtabmap']]], + ['odometryorbslam2_18',['OdometryORBSLAM2',['../classrtabmap_1_1OdometryORBSLAM2.html',1,'rtabmap']]], + ['odometryorbslam3_19',['OdometryORBSLAM3',['../classrtabmap_1_1OdometryORBSLAM3.html',1,'rtabmap']]], + ['odometryresetevent_20',['OdometryResetEvent',['../classrtabmap_1_1OdometryResetEvent.html',1,'rtabmap']]], + ['odometrythread_21',['OdometryThread',['../classrtabmap_1_1OdometryThread.html',1,'rtabmap']]], + ['odometryvinsfusion_22',['OdometryVINSFusion',['../classrtabmap_1_1OdometryVINSFusion.html',1,'rtabmap']]], + ['odometryviso2_23',['OdometryViso2',['../classrtabmap_1_1OdometryViso2.html',1,'rtabmap']]], + ['optimizer_24',['Optimizer',['../classrtabmap_1_1Optimizer.html',1,'rtabmap']]], + ['optimizerceres_25',['OptimizerCeres',['../classrtabmap_1_1OptimizerCeres.html',1,'rtabmap']]], + ['optimizercvsba_26',['OptimizerCVSBA',['../classrtabmap_1_1OptimizerCVSBA.html',1,'rtabmap']]], + ['optimizerg2o_27',['OptimizerG2O',['../classrtabmap_1_1OptimizerG2O.html',1,'rtabmap']]], + ['optimizergtsam_28',['OptimizerGTSAM',['../classrtabmap_1_1OptimizerGTSAM.html',1,'rtabmap']]], + ['optimizertoro_29',['OptimizerTORO',['../classrtabmap_1_1OptimizerTORO.html',1,'rtabmap']]], + ['orb_30',['ORB',['../classrtabmap_1_1ORB.html',1,'rtabmap']]], + ['orboctree_31',['ORBOctree',['../classrtabmap_1_1ORBOctree.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_b.js b/preview/pr-1492/api/latest/search/classes_b.js new file mode 100644 index 00000000..83a8b517 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_b.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['parameters_0',['Parameters',['../classrtabmap_1_1Parameters.html',1,'rtabmap']]], + ['paramevent_1',['ParamEvent',['../classrtabmap_1_1ParamEvent.html',1,'rtabmap']]], + ['particlefilter_2',['ParticleFilter',['../classrtabmap_1_1ParticleFilter.html',1,'rtabmap']]], + ['pointxyzirt_3',['PointXYZIRT',['../structrtabmap_1_1PointXYZIRT.html',1,'rtabmap']]], + ['pointxyzit_4',['PointXYZIT',['../structrtabmap_1_1PointXYZIT.html',1,'rtabmap']]], + ['progressstate_5',['ProgressState',['../classrtabmap_1_1ProgressState.html',1,'rtabmap']]], + ['projectivepoint_6',['ProjectivePoint',['../classclams_1_1ProjectivePoint.html',1,'clams']]], + ['pythoninterface_7',['PythonInterface',['../classrtabmap_1_1PythonInterface.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_c.js b/preview/pr-1492/api/latest/search/classes_c.js new file mode 100644 index 00000000..c355cf43 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_c.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['registration_0',['Registration',['../classrtabmap_1_1Registration.html',1,'rtabmap']]], + ['registrationicp_1',['RegistrationIcp',['../classrtabmap_1_1RegistrationIcp.html',1,'rtabmap']]], + ['registrationinfo_2',['RegistrationInfo',['../classrtabmap_1_1RegistrationInfo.html',1,'rtabmap']]], + ['registrationvis_3',['RegistrationVis',['../classrtabmap_1_1RegistrationVis.html',1,'rtabmap']]], + ['rtabmap_4',['Rtabmap',['../classrtabmap_1_1Rtabmap.html',1,'rtabmap']]], + ['rtabmapcoloroctree_5',['RtabmapColorOcTree',['../classrtabmap_1_1RtabmapColorOcTree.html',1,'rtabmap']]], + ['rtabmapcoloroctreenode_6',['RtabmapColorOcTreeNode',['../classrtabmap_1_1RtabmapColorOcTreeNode.html',1,'rtabmap']]], + ['rtabmapevent_7',['RtabmapEvent',['../classrtabmap_1_1RtabmapEvent.html',1,'rtabmap']]], + ['rtabmapevent3dmap_8',['RtabmapEvent3DMap',['../classrtabmap_1_1RtabmapEvent3DMap.html',1,'rtabmap']]], + ['rtabmapeventcmd_9',['RtabmapEventCmd',['../classrtabmap_1_1RtabmapEventCmd.html',1,'rtabmap']]], + ['rtabmapeventinit_10',['RtabmapEventInit',['../classrtabmap_1_1RtabmapEventInit.html',1,'rtabmap']]], + ['rtabmapglobalpathevent_11',['RtabmapGlobalPathEvent',['../classrtabmap_1_1RtabmapGlobalPathEvent.html',1,'rtabmap']]], + ['rtabmapgoalstatusevent_12',['RtabmapGoalStatusEvent',['../classrtabmap_1_1RtabmapGoalStatusEvent.html',1,'rtabmap']]], + ['rtabmaplabelerrorevent_13',['RtabmapLabelErrorEvent',['../classrtabmap_1_1RtabmapLabelErrorEvent.html',1,'rtabmap']]], + ['rtabmapthread_14',['RtabmapThread',['../classrtabmap_1_1RtabmapThread.html',1,'rtabmap']]], + ['rvlcodec_15',['RvlCodec',['../classrtabmap_1_1RvlCodec.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_d.js b/preview/pr-1492/api/latest/search/classes_d.js new file mode 100644 index 00000000..1ff5851e --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_d.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['sensorcapture_0',['SensorCapture',['../classrtabmap_1_1SensorCapture.html',1,'rtabmap']]], + ['sensorcaptureinfo_1',['SensorCaptureInfo',['../classrtabmap_1_1SensorCaptureInfo.html',1,'rtabmap']]], + ['sensorcapturethread_2',['SensorCaptureThread',['../classrtabmap_1_1SensorCaptureThread.html',1,'rtabmap']]], + ['sensordata_3',['SensorData',['../classrtabmap_1_1SensorData.html',1,'rtabmap']]], + ['sensorevent_4',['SensorEvent',['../classrtabmap_1_1SensorEvent.html',1,'rtabmap']]], + ['sift_5',['SIFT',['../classrtabmap_1_1SIFT.html',1,'rtabmap']]], + ['signature_6',['Signature',['../classrtabmap_1_1Signature.html',1,'rtabmap']]], + ['staticmemberinitializer_7',['StaticMemberInitializer',['../classrtabmap_1_1RtabmapColorOcTree_1_1StaticMemberInitializer.html',1,'rtabmap::RtabmapColorOcTree']]], + ['statistics_8',['Statistics',['../classrtabmap_1_1Statistics.html',1,'rtabmap']]], + ['stereo_9',['Stereo',['../classrtabmap_1_1Stereo.html',1,'rtabmap']]], + ['stereobm_10',['StereoBM',['../classrtabmap_1_1StereoBM.html',1,'rtabmap']]], + ['stereocameramodel_11',['StereoCameraModel',['../classrtabmap_1_1StereoCameraModel.html',1,'rtabmap']]], + ['stereodense_12',['StereoDense',['../classrtabmap_1_1StereoDense.html',1,'rtabmap']]], + ['stereoopticalflow_13',['StereoOpticalFlow',['../classrtabmap_1_1StereoOpticalFlow.html',1,'rtabmap']]], + ['stereosgbm_14',['StereoSGBM',['../classrtabmap_1_1StereoSGBM.html',1,'rtabmap']]], + ['superpointrpautrat_15',['SuperPointRpautrat',['../classrtabmap_1_1SuperPointRpautrat.html',1,'rtabmap']]], + ['superpointtorch_16',['SuperPointTorch',['../classrtabmap_1_1SuperPointTorch.html',1,'rtabmap']]], + ['surf_17',['SURF',['../classrtabmap_1_1SURF.html',1,'rtabmap']]], + ['surf_5fdaisy_18',['SURF_DAISY',['../classrtabmap_1_1SURF__DAISY.html',1,'rtabmap']]], + ['surf_5ffreak_19',['SURF_FREAK',['../classrtabmap_1_1SURF__FREAK.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_e.js b/preview/pr-1492/api/latest/search/classes_e.js new file mode 100644 index 00000000..0082b32f --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['transform_0',['Transform',['../classrtabmap_1_1Transform.html',1,'rtabmap']]], + ['transformstamped_1',['TransformStamped',['../classrtabmap_1_1TransformStamped.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/classes_f.js b/preview/pr-1492/api/latest/search/classes_f.js new file mode 100644 index 00000000..f86549d7 --- /dev/null +++ b/preview/pr-1492/api/latest/search/classes_f.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['udestroyer_0',['UDestroyer',['../classUDestroyer.html',1,'']]], + ['udestroyer_3c_20ueventsmanager_20_3e_1',['UDestroyer< UEventsManager >',['../classUDestroyer.html',1,'']]], + ['udestroyer_3c_20ulogger_20_3e_2',['UDestroyer< ULogger >',['../classUDestroyer.html',1,'']]], + ['udirectory_3',['UDirectory',['../classUDirectory.html',1,'']]], + ['uevent_4',['UEvent',['../classUEvent.html',1,'']]], + ['ueventdispatcher_5',['UEventDispatcher',['../classUEventDispatcher.html',1,'']]], + ['ueventshandler_6',['UEventsHandler',['../classUEventsHandler.html',1,'']]], + ['ueventsmanager_7',['UEventsManager',['../classUEventsManager.html',1,'']]], + ['ueventssender_8',['UEventsSender',['../classUEventsSender.html',1,'']]], + ['uexception_9',['UException',['../classUException.html',1,'']]], + ['ufile_10',['UFile',['../classUFile.html',1,'']]], + ['ulogevent_11',['ULogEvent',['../classULogEvent.html',1,'']]], + ['ulogger_12',['ULogger',['../classULogger.html',1,'']]], + ['umutex_13',['UMutex',['../classUMutex.html',1,'']]], + ['uobjdeletedevent_14',['UObjDeletedEvent',['../classUObjDeletedEvent.html',1,'']]], + ['uobjdeletionthread_15',['UObjDeletionThread',['../classUObjDeletionThread.html',1,'']]], + ['uprocessinfo_16',['UProcessInfo',['../classUProcessInfo.html',1,'']]], + ['uscopemutex_17',['UScopeMutex',['../classUScopeMutex.html',1,'']]], + ['usemaphore_18',['USemaphore',['../classUSemaphore.html',1,'']]], + ['userdataevent_19',['UserDataEvent',['../classrtabmap_1_1UserDataEvent.html',1,'rtabmap']]], + ['uthread_20',['UThread',['../classUThread.html',1,'']]], + ['uthreadc_21',['UThreadC',['../classUThreadC.html',1,'']]], + ['uthreadc_3c_20void_20_3e_22',['UThreadC< void >',['../classUThreadC_3_01void_01_4.html',1,'']]], + ['utimer_23',['UTimer',['../classUTimer.html',1,'']]], + ['uvariant_24',['UVariant',['../classUVariant.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/close.svg b/preview/pr-1492/api/latest/search/close.svg new file mode 100644 index 00000000..337d6cc1 --- /dev/null +++ b/preview/pr-1492/api/latest/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/preview/pr-1492/api/latest/search/defines_0.js b/preview/pr-1492/api/latest/search/defines_0.js new file mode 100644 index 00000000..1d271bc3 --- /dev/null +++ b/preview/pr-1492/api/latest/search/defines_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['uassert_0',['UASSERT',['../ULogger_8h.html#ab3436168e27946669bbd4c76e4c4007e',1,'ULogger.h']]], + ['udebug_1',['UDEBUG',['../ULogger_8h.html#a9104cb408bf9019db2a2c4476835db4a',1,'ULogger.h']]], + ['uerror_2',['UERROR',['../ULogger_8h.html#a1249ddbc4c9cc43be53048c08dda129b',1,'ULogger.h']]], + ['ufatal_3',['UFATAL',['../ULogger_8h.html#aabc10368a622911d56a4dd5a4b461385',1,'ULogger.h']]], + ['uinfo_4',['UINFO',['../ULogger_8h.html#a5b63c9a1441181723754c0c6084231a8',1,'ULogger.h']]], + ['uwarn_5',['UWARN',['../ULogger_8h.html#ab5a739ad9340455e46eaa570f8223d9a',1,'ULogger.h']]] +]; diff --git a/preview/pr-1492/api/latest/search/enums_0.js b/preview/pr-1492/api/latest/search/enums_0.js new file mode 100644 index 00000000..d5f66284 --- /dev/null +++ b/preview/pr-1492/api/latest/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['code_0',['Code',['../classrtabmap_1_1SensorEvent.html#a8a1c7b859ae730c1e0ade9fa5e302a66',1,'rtabmap::SensorEvent']]] +]; diff --git a/preview/pr-1492/api/latest/search/enums_1.js b/preview/pr-1492/api/latest/search/enums_1.js new file mode 100644 index 00000000..921d04fc --- /dev/null +++ b/preview/pr-1492/api/latest/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['format_0',['Format',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007',1,'rtabmap::LaserScan']]] +]; diff --git a/preview/pr-1492/api/latest/search/enums_2.js b/preview/pr-1492/api/latest/search/enums_2.js new file mode 100644 index 00000000..72f2f555 --- /dev/null +++ b/preview/pr-1492/api/latest/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['icpstrategy_0',['IcpStrategy',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fab',1,'rtabmap::RegistrationIcp']]] +]; diff --git a/preview/pr-1492/api/latest/search/enums_3.js b/preview/pr-1492/api/latest/search/enums_3.js new file mode 100644 index 00000000..e849837a --- /dev/null +++ b/preview/pr-1492/api/latest/search/enums_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['level_0',['Level',['../classULogger.html#a4f71cd491aa60029eb6ea4bf79c06218',1,'ULogger']]] +]; diff --git a/preview/pr-1492/api/latest/search/enums_4.js b/preview/pr-1492/api/latest/search/enums_4.js new file mode 100644 index 00000000..61563b73 --- /dev/null +++ b/preview/pr-1492/api/latest/search/enums_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nnstrategy_0',['NNStrategy',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655',1,'rtabmap::VWDictionary']]] +]; diff --git a/preview/pr-1492/api/latest/search/enums_5.js b/preview/pr-1492/api/latest/search/enums_5.js new file mode 100644 index 00000000..658079fe --- /dev/null +++ b/preview/pr-1492/api/latest/search/enums_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['priority_0',['Priority',['../classUThread.html#a731ef4dd5a8d15abcc06e7cfa53cd153',1,'UThread']]] +]; diff --git a/preview/pr-1492/api/latest/search/enums_6.js b/preview/pr-1492/api/latest/search/enums_6.js new file mode 100644 index 00000000..e3854d7f --- /dev/null +++ b/preview/pr-1492/api/latest/search/enums_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['type_0',['type',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30f',1,'rtabmap::EnvSensor::Type'],['../classrtabmap_1_1Feature2D.html#a7453189891e489bbcff1f2c971d04fde',1,'rtabmap::Feature2D::Type'],['../classrtabmap_1_1IMUFilter.html#a1332e06cbd6b83c0532e6d71523cdb83',1,'rtabmap::IMUFilter::Type'],['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91e',1,'rtabmap::Link::Type'],['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849',1,'rtabmap::Odometry::Type'],['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16',1,'rtabmap::Optimizer::Type'],['../classrtabmap_1_1Registration.html#ae693713cd8b7ece4b147eae99880b849',1,'rtabmap::Registration::Type'],['../classrtabmap_1_1StereoDense.html#a54329152938c4ca1f259dcb8fa7d8803',1,'rtabmap::StereoDense::Type'],['../classULogger.html#aab74fc95f6494a3a2137d9094fe100d8',1,'ULogger::Type'],['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bd',1,'UVariant::Type']]] +]; diff --git a/preview/pr-1492/api/latest/search/enums_7.js b/preview/pr-1492/api/latest/search/enums_7.js new file mode 100644 index 00000000..0164d77e --- /dev/null +++ b/preview/pr-1492/api/latest/search/enums_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uxmatchmethod_0',['UXMatchMethod',['../UMath_8h.html#ae24d0d5b3a1d44ae8c5e50bb86a15cba',1,'UMath.h']]] +]; diff --git a/preview/pr-1492/api/latest/search/enums_8.js b/preview/pr-1492/api/latest/search/enums_8.js new file mode 100644 index 00000000..87c58992 --- /dev/null +++ b/preview/pr-1492/api/latest/search/enums_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vhstrategy_0',['VhStrategy',['../classrtabmap_1_1Rtabmap.html#afa134603fb0835b84f269e48e7ab568c',1,'rtabmap::Rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/enumvalues_0.js b/preview/pr-1492/api/latest/search/enumvalues_0.js new file mode 100644 index 00000000..0ac73691 --- /dev/null +++ b/preview/pr-1492/api/latest/search/enumvalues_0.js @@ -0,0 +1,95 @@ +var searchData= +[ + ['kallwithlandmarks_0',['kAllWithLandmarks',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eacc2cbab0ea322149df37addb91cb75ac',1,'rtabmap::Link']]], + ['kallwithoutlandmarks_1',['kAllWithoutLandmarks',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eae8ffae7407e28cf7a125f76bea2864a5',1,'rtabmap::Link']]], + ['kambientairpressure_2',['kAmbientAirPressure',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa2659626ccc2aa59e2d83a57f34e400f0',1,'rtabmap::EnvSensor']]], + ['kambientlight_3',['kAmbientLight',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa8eee701051a2603e162a65d4948a64d8',1,'rtabmap::EnvSensor']]], + ['kambientrelativehumidity_4',['kAmbientRelativeHumidity',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa7c238626943b1254027ed1b5454ae101',1,'rtabmap::EnvSensor']]], + ['kambienttemperature_5',['kAmbientTemperature',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa9e348acef07abec64edef43b58ea1b83',1,'rtabmap::EnvSensor']]], + ['kbool_6',['kBool',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bdac7d8fa7273711e6711880ba9f9d10f62',1,'UVariant']]], + ['kchar_7',['kChar',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda117693c00c89461634dc137ee9a219c4',1,'UVariant']]], + ['kchararray_8',['kCharArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bdafecb2dc57006c548e5ab0b59f2062c29',1,'UVariant']]], + ['kcodedata_9',['kCodeData',['../classrtabmap_1_1SensorEvent.html#a8a1c7b859ae730c1e0ade9fa5e302a66a96386fbcb6a0fd382113f188c193ed61',1,'rtabmap::SensorEvent']]], + ['kcodenomoreimages_10',['kCodeNoMoreImages',['../classrtabmap_1_1SensorEvent.html#a8a1c7b859ae730c1e0ade9fa5e302a66a377f61ebd393e5db46b02121270abdf2',1,'rtabmap::SensorEvent']]], + ['kcustomsensor1_11',['kCustomSensor1',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa88e60173d5f413f4ab490a99c034453e',1,'rtabmap::EnvSensor']]], + ['kdouble_12',['kDouble',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda2b55c7ccdc00fd1d99247cf4c22283fd',1,'UVariant']]], + ['kdoublearray_13',['kDoubleArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda572a22c911f2d6525d10d6fec2371a7b',1,'UVariant']]], + ['kfloat_14',['kFloat',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bdab133726c8e281b1f873b68d28652cbaf',1,'UVariant']]], + ['kfloatarray_15',['kFloatArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda11179285157ee27026c6b7a3a257dec2',1,'UVariant']]], + ['kglobalclosure_16',['kGlobalClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eae963042a31afec63e8c0683696ac6791',1,'rtabmap::Link']]], + ['kgravity_17',['kGravity',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea37d186f2447908a27d531be74a2f6983',1,'rtabmap::Link']]], + ['kicpcccorelib_18',['kIcpCCCoreLib',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3faba0f8b0cfe29412a3d66af5eb19dd7c0db',1,'rtabmap::RegistrationIcp']]], + ['kicpend_19',['kIcpEnd',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fabaf6639ca6ae5f75d631dbbf7f61455881',1,'rtabmap::RegistrationIcp']]], + ['kicppcl_20',['kIcpPCL',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fabafd4289953af3132d6d334fb438f22ace',1,'rtabmap::RegistrationIcp']]], + ['kicppointmatcher_21',['kIcpPointMatcher',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fabac978d96078e7e0209d4a25894de3c805',1,'rtabmap::RegistrationIcp']]], + ['kicpundef_22',['kIcpUndef',['../classrtabmap_1_1RegistrationIcp.html#a59f6aec4f68d2f7402253c942bfe3fabadebfaf4d0822a35b7b56f37f9c133327',1,'rtabmap::RegistrationIcp']]], + ['kint_23',['kInt',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda85bd9103b3bbb3a0f1f66949fea50952',1,'UVariant']]], + ['kintarray_24',['kIntArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda5e558d8d7cb6b8791c58a0eb3ff46e5c',1,'UVariant']]], + ['klandmark_25',['kLandmark',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea22912bbbcacce5ee39e61da7ec4640b9',1,'rtabmap::Link']]], + ['klocalspaceclosure_26',['kLocalSpaceClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea9195217dc75001841fce507de43fb0db',1,'rtabmap::Link']]], + ['klocaltimeclosure_27',['kLocalTimeClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eae0b352e9cbb32d357ce59f09159c09fb',1,'rtabmap::Link']]], + ['kmadgwick_28',['kMadgwick',['../classrtabmap_1_1IMUFilter.html#a1332e06cbd6b83c0532e6d71523cdb83aa1f642678d0846f51590e4f69a585c09',1,'rtabmap::IMUFilter']]], + ['kneighbor_29',['kNeighbor',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea8f60efd83d5fad3493573bef3d4a8adf',1,'rtabmap::Link']]], + ['kneighbormerged_30',['kNeighborMerged',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea8fbb6dbe2d16e19ad8fecb6bac65e9db',1,'rtabmap::Link']]], + ['knnbruteforce_31',['kNNBruteForce',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655a1745dd334296b8a41cf0c88dcc8a7d5d',1,'rtabmap::VWDictionary']]], + ['knnbruteforcegpu_32',['kNNBruteForceGPU',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655a602d99d5bdef453a39339a0b45979451',1,'rtabmap::VWDictionary']]], + ['knnflannkdtree_33',['kNNFlannKdTree',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655aaa1ea80fc9ca8809ad9b959e2e1564c5',1,'rtabmap::VWDictionary']]], + ['knnflannlsh_34',['kNNFlannLSH',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655a89ab72d0bccd61bb11abbd1edf1e6992',1,'rtabmap::VWDictionary']]], + ['knnflannnaive_35',['kNNFlannNaive',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655ae4301e202dd36e997bf3298390c667f0',1,'rtabmap::VWDictionary']]], + ['knnundef_36',['kNNUndef',['../classrtabmap_1_1VWDictionary.html#a9466840dd5ad3dc914543a97421c3655afeba67ed0aafc39aa35b2a194e147ff9',1,'rtabmap::VWDictionary']]], + ['kposeprior_37',['kPosePrior',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea56caa6c8eeab867bb16f763f3ddbd9b1',1,'rtabmap::Link']]], + ['kselfreflink_38',['kSelfRefLink',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ead52adb0176a83a02833e89111f66497e',1,'rtabmap::Link']]], + ['kshort_39',['kShort',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda310a497e7d9c43297d960e2cd20d1fc0',1,'UVariant']]], + ['kshortarray_40',['kShortArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda2e9032fc740ad542d18512b5b0d57a6f',1,'UVariant']]], + ['kstr_41',['kStr',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bdac20f34d5dd5370a8aeb9665c465417dc',1,'UVariant']]], + ['ktypebm_42',['kTypeBM',['../classrtabmap_1_1StereoDense.html#a54329152938c4ca1f259dcb8fa7d8803a393267c04896dd353dc66ade56c8d5f1',1,'rtabmap::StereoDense']]], + ['ktypeceres_43',['kTypeCeres',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a891b6c7cbbe5e149e583ac1fc14fc91d',1,'rtabmap::Optimizer']]], + ['ktypecuvslam_44',['kTypeCuVSLAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849aba6f673ce43f5dfe5c1eecb303f55049',1,'rtabmap::Odometry']]], + ['ktypecvsba_45',['kTypeCVSBA',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a53545e83af9618cb4d39cf0420b3cd54',1,'rtabmap::Optimizer']]], + ['ktypedvo_46',['kTypeDVO',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a7fccdbc59d38d39f4de1253063d79a59',1,'rtabmap::Odometry']]], + ['ktypef2f_47',['kTypeF2F',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a81b73f734f25e9bef50a979ef6d9f662',1,'rtabmap::Odometry']]], + ['ktypef2m_48',['kTypeF2M',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849ac585174ece227de554ed25a51835d3d0',1,'rtabmap::Odometry']]], + ['ktypefloam_49',['kTypeFLOAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849abb9a5bbb18e4ab77c1dac6cc2fe73a68',1,'rtabmap::Odometry']]], + ['ktypefovis_50',['kTypeFovis',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849aeb8888885eaa7c907a98537c7a463b8b',1,'rtabmap::Odometry']]], + ['ktypeg2o_51',['kTypeG2O',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16aa4d070fe00ba5e81adbc958bad18d853',1,'rtabmap::Optimizer']]], + ['ktypegtsam_52',['kTypeGTSAM',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16ab71c83617497f5da0607a47ab162630f',1,'rtabmap::Optimizer']]], + ['ktypeliosam_53',['kTypeLIOSAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849ac13bb66a69e4790bfa574c8a0c6c9975',1,'rtabmap::Odometry']]], + ['ktypeloam_54',['kTypeLOAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849abf68726d1b5239c24ce447ceafd221aa',1,'rtabmap::Odometry']]], + ['ktypemsckf_55',['kTypeMSCKF',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a1de4ebe3cb3470d17d615e86ac791225',1,'rtabmap::Odometry']]], + ['ktypeokvis_56',['kTypeOkvis',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a175924a6dd1fdfb2e162093c5a2a867b',1,'rtabmap::Odometry']]], + ['ktypeopen3d_57',['kTypeOpen3D',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849ab30949269c652911c3d8c5274ad84041',1,'rtabmap::Odometry']]], + ['ktypeopenvins_58',['kTypeOpenVINS',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a9e760521384d881e2fafcc008193f65a',1,'rtabmap::Odometry']]], + ['ktypeorbslam_59',['kTypeORBSLAM',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a32b913af77b8df59d89aa226cbdf5e9b',1,'rtabmap::Odometry']]], + ['ktypesgbm_60',['kTypeSGBM',['../classrtabmap_1_1StereoDense.html#a54329152938c4ca1f259dcb8fa7d8803abf3465f1ebb12576596dc4b605c1ffae',1,'rtabmap::StereoDense']]], + ['ktypetoro_61',['kTypeTORO',['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16a6065bdb6e49c0f5ffc98d5f2f6b0d5ab',1,'rtabmap::Optimizer']]], + ['ktypeundef_62',['ktypeundef',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a7e81a250626fd76729fa01fb7b40fde5',1,'rtabmap::Odometry::kTypeUndef'],['../classrtabmap_1_1Optimizer.html#a18ae8ac76346d1adc68ab176a5b02d16abae75975865bff7e12e82d2f5295e0db',1,'rtabmap::Optimizer::kTypeUndef']]], + ['ktypevinsfusion_63',['kTypeVINSFusion',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849a1e148f21361b3e46d6ea7c83ac35a7a4',1,'rtabmap::Odometry']]], + ['ktypeviso2_64',['kTypeViso2',['../classrtabmap_1_1Odometry.html#a6427d44c57fd6b7152b62d5b7cca1849ab788cd11e7f6906987e33c0189a5c367',1,'rtabmap::Odometry']]], + ['kuchar_65',['kUChar',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda017bb86f2bbfc9c10fc082890fdd3c9e',1,'UVariant']]], + ['kuchararray_66',['kUCharArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda6ae60f887effac25862b2e70692aabe4',1,'UVariant']]], + ['kuint_67',['kUInt',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda4ea55b31fb308080d00de2437717a13c',1,'UVariant']]], + ['kuintarray_68',['kUIntArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda1b015c8ec9bcab8fca0734749cba4f3d',1,'UVariant']]], + ['kundef_69',['kUndef',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda4592761da391696a37f01f792c65f750',1,'UVariant']]], + ['kundefined_70',['kUndefined',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fad06ac95d82e3fceb18e1f3dfd190931a',1,'rtabmap::EnvSensor']]], + ['kunknown_71',['kUnknown',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a068e1caebd3d8c939887dce363abd24d',1,'rtabmap::LaserScan']]], + ['kuserclosure_72',['kUserClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91ea878009c73fbfa2736f438b748afbc1f6',1,'rtabmap::Link']]], + ['kushort_73',['kUShort',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda558d69cc5a6df93471a3455083bb7c6b',1,'UVariant']]], + ['kushortarray_74',['kUShortArray',['../classUVariant.html#a3d5035d3aaf0b7574acc8765825c37bda2c7450a1f1cf76ef9018e86d3d422245',1,'UVariant']]], + ['kvhepipolar_75',['kVhEpipolar',['../classrtabmap_1_1Rtabmap.html#afa134603fb0835b84f269e48e7ab568ca1b458648c7dc4ea000ca53e0e384e3c6',1,'rtabmap::Rtabmap']]], + ['kvhnone_76',['kVhNone',['../classrtabmap_1_1Rtabmap.html#afa134603fb0835b84f269e48e7ab568caea5e55cc106979d91f695c064a78926b',1,'rtabmap::Rtabmap']]], + ['kvhundef_77',['kVhUndef',['../classrtabmap_1_1Rtabmap.html#afa134603fb0835b84f269e48e7ab568cab2676e6cebdd6090d3c87a3237c3e83b',1,'rtabmap::Rtabmap']]], + ['kvirtualclosure_78',['kVirtualClosure',['../classrtabmap_1_1Link.html#a925bb7ca93eb95a3a873b0a9e8d5e91eaf74a4b0552da7509b16f8c4b8baf85c7',1,'rtabmap::Link']]], + ['kwifisignalstrength_79',['kWifiSignalStrength',['../classrtabmap_1_1EnvSensor.html#a1ed69864df2cd8e11429358ba817b30fa1bc42ead6237eb515f301b39e162dee2',1,'rtabmap::EnvSensor']]], + ['kxy_80',['kXY',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a4f3e7340e44a01b48ccaf8e1f8dca3e1',1,'rtabmap::LaserScan']]], + ['kxyi_81',['kXYI',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007abb92c193b2eb76045e1a141c2a42cc00',1,'rtabmap::LaserScan']]], + ['kxyinormal_82',['kXYINormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a799064c7e31b99134871b5d7d2906f97',1,'rtabmap::LaserScan']]], + ['kxynormal_83',['kXYNormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007ad4c3ec9f057875ade4f21f52901bceb5',1,'rtabmap::LaserScan']]], + ['kxyz_84',['kXYZ',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a0c376810ac499a8a93a02bd0d4a19267',1,'rtabmap::LaserScan']]], + ['kxyzi_85',['kXYZI',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a5efd7fbf18cee72d9eb2daa4ea818e42',1,'rtabmap::LaserScan']]], + ['kxyzinormal_86',['kXYZINormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a3fdc082afb503bb197e2651b6fc565b8',1,'rtabmap::LaserScan']]], + ['kxyzirt_87',['kXYZIRT',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a7df3c8f97dd52461787060befaf7f2d7',1,'rtabmap::LaserScan']]], + ['kxyzit_88',['kXYZIT',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007ab169cf98665cb3f33d81240b37cc501c',1,'rtabmap::LaserScan']]], + ['kxyznormal_89',['kXYZNormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a09e67f9495016103a162854b8e852bbc',1,'rtabmap::LaserScan']]], + ['kxyzrgb_90',['kXYZRGB',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007a500cf2179e454d8d5a74895b301c0829',1,'rtabmap::LaserScan']]], + ['kxyzrgbnormal_91',['kXYZRGBNormal',['../classrtabmap_1_1LaserScan.html#a38f5602d1411c204d54be9b3c7320007af2d5b7ff94aeac818000d840e257ac07',1,'rtabmap::LaserScan']]] +]; diff --git a/preview/pr-1492/api/latest/search/files_0.js b/preview/pr-1492/api/latest/search/files_0.js new file mode 100644 index 00000000..e7682e8c --- /dev/null +++ b/preview/pr-1492/api/latest/search/files_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['uconversion_2eh_0',['UConversion.h',['../UConversion_8h.html',1,'']]], + ['ulogger_2eh_1',['ULogger.h',['../ULogger_8h.html',1,'']]], + ['umath_2eh_2',['UMath.h',['../UMath_8h.html',1,'']]], + ['uprocessinfo_2eh_3',['UProcessInfo.h',['../UProcessInfo_8h.html',1,'']]], + ['ustl_2eh_4',['UStl.h',['../UStl_8h.html',1,'']]], + ['uvariant_2eh_5',['UVariant.h',['../UVariant_8h.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_0.js b/preview/pr-1492/api/latest/search/functions_0.js new file mode 100644 index 00000000..912f655d --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_0.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['accumulate_0',['accumulate',['../classclams_1_1DiscreteDepthDistortionModel.html#ab9b7555fbf710706d7b94dfcb9ed6399',1,'clams::DiscreteDepthDistortionModel']]], + ['acquire_1',['acquire',['../classUSemaphore.html#a1128f81a47324e6de3946a7719c24223',1,'USemaphore']]], + ['acquiretry_2',['acquireTry',['../classUSemaphore.html#a51a925279a04a54aea3583c4399a744b',1,'USemaphore']]], + ['add_3',['add',['../classrtabmap_1_1LocalGridCache.html#a2e83e9c0c11051b5da84bf04b603a99b',1,'rtabmap::LocalGridCache::add(int nodeId, const cv::Mat &ground, const cv::Mat &obstacles, const cv::Mat &empty, float cellSize, const cv::Point3f &viewPoint=cv::Point3f(0, 0, 0))'],['../classrtabmap_1_1LocalGridCache.html#a765142f021aa580bcfdd84545ebc044f',1,'rtabmap::LocalGridCache::add(int nodeId, const LocalGrid &localGrid)']]], + ['addassemblednode_4',['addAssembledNode',['../classrtabmap_1_1GlobalMap.html#a0b95370df2582da48ff0e1e405cccda2',1,'rtabmap::GlobalMap']]], + ['addednodes_5',['addedNodes',['../classrtabmap_1_1GlobalMap.html#a98c2c10030cfa64c1b72d17f046243f4',1,'rtabmap::GlobalMap']]], + ['addenvsensor_6',['addEnvSensor',['../classrtabmap_1_1SensorData.html#a1006dbcfb640b599f0587af3b0ba46ae',1,'rtabmap::SensorData']]], + ['addexample_7',['addExample',['../classclams_1_1DiscreteFrustum.html#aef183fc7d90c0a6ba3245bccf9fbb616',1,'clams::DiscreteFrustum']]], + ['addglobaldescriptor_8',['addGlobalDescriptor',['../classrtabmap_1_1SensorData.html#acc0ac26f01ad9f5185f80f8f09da252e',1,'rtabmap::SensorData']]], + ['addhandler_9',['addHandler',['../classUEventsManager.html#a3bb033062e4a0eb59efdf5f84d170388',1,'UEventsManager']]], + ['addlandmark_10',['addLandmark',['../classrtabmap_1_1Signature.html#a71621ac6411f778342c23fbc4e695a12',1,'rtabmap::Signature']]], + ['addlink_11',['addlink',['../classrtabmap_1_1DBDriver.html#acfb5fed58aad744050c392a8d346926b',1,'rtabmap::DBDriver::addLink()'],['../classrtabmap_1_1Memory.html#a4140effa4830fbe679a51e975f0021a1',1,'rtabmap::Memory::addLink()'],['../classrtabmap_1_1Rtabmap.html#aef03c0d6ee1ef5646ba11be5dbe9faa5',1,'rtabmap::Rtabmap::addLink()'],['../classrtabmap_1_1Signature.html#a3bb2e6a8de8e615e51385c4113630f93',1,'rtabmap::Signature::addLink(const Link &link)']]], + ['addlinks_12',['addlinks',['../classrtabmap_1_1Signature.html#aa8513c4ecb77c38b95610834c66e893e',1,'rtabmap::Signature::addLinks(const std::list< Link > &links)'],['../classrtabmap_1_1Signature.html#af92465ad9cbfab36ffbc6d372781170c',1,'rtabmap::Signature::addLinks(const std::map< int, Link > &links)']]], + ['addnewwords_13',['addNewWords',['../classrtabmap_1_1VWDictionary.html#a2998a6b11e102a2253ac592acf076841',1,'rtabmap::VWDictionary']]], + ['addnodestorepublish_14',['addNodesToRepublish',['../classrtabmap_1_1Rtabmap.html#a0d2caf505525f635bda914e73aa59232',1,'rtabmap::Rtabmap']]], + ['addref_15',['addRef',['../classrtabmap_1_1VisualWord.html#a5826c6a57f9115e6766bb60e2628fe30',1,'rtabmap::VisualWord']]], + ['addsignaturedata_16',['addSignatureData',['../classrtabmap_1_1Statistics.html#a55748a17bc6348a83dc184fb1b2631fd',1,'rtabmap::Statistics']]], + ['addstatistic_17',['addStatistic',['../classrtabmap_1_1Statistics.html#a24d85beaf52fd03ad67c6d9d417efd79',1,'rtabmap::Statistics']]], + ['addstatistics_18',['addStatistics',['../classrtabmap_1_1DBDriver.html#a4dbccd0dabf72da724488692b1713832',1,'rtabmap::DBDriver']]], + ['addword_19',['addWord',['../classrtabmap_1_1VWDictionary.html#ad464ad961b0e4d4cd6dd7895e9ff3d59',1,'rtabmap::VWDictionary']]], + ['addwordref_20',['addWordRef',['../classrtabmap_1_1VWDictionary.html#aea2f0d043d043df37258dc225c62edec',1,'rtabmap::VWDictionary']]], + ['adjustlikelihood_21',['adjustLikelihood',['../classrtabmap_1_1Rtabmap.html#aad648f09bb04b193907528987ccda413',1,'rtabmap::Rtabmap']]], + ['allnodesinwm_22',['allNodesInWM',['../classrtabmap_1_1Memory.html#a2098205b805bde66a4a57906a8ca95f5',1,'rtabmap::Memory']]], + ['altitude_23',['altitude',['../classrtabmap_1_1GeodeticCoords.html#a3a0d110deb25400137d4fe552742970a',1,'rtabmap::GeodeticCoords::altitude()'],['../classrtabmap_1_1GPS.html#a50ae4bb38ab5dc1fef49ff367b602adc',1,'rtabmap::GPS::altitude()']]], + ['angularvelocity_24',['angularVelocity',['../classrtabmap_1_1IMU.html#ad0160a803d2005f3f4db27c402e6bceb',1,'rtabmap::IMU']]], + ['angularvelocitycovariance_25',['angularVelocityCovariance',['../classrtabmap_1_1IMU.html#a660c82c641525ff24aefa7e03ebf7d4a',1,'rtabmap::IMU']]], + ['assemble_26',['assemble',['../classrtabmap_1_1CloudMap.html#a58b2f9f2a99fe3ab14ba73603e3d4f68',1,'rtabmap::CloudMap::assemble()'],['../classrtabmap_1_1GridMap.html#a57ad9df30e61345ec23a45bcda0f2e93',1,'rtabmap::GridMap::assemble()'],['../classrtabmap_1_1OccupancyGrid.html#a4e83e17bca353cd46097c14779119ffd',1,'rtabmap::OccupancyGrid::assemble()'],['../classrtabmap_1_1OctoMap.html#ac74a308322f3162307bfe73bfd60c2dd',1,'rtabmap::OctoMap::assemble()'],['../classrtabmap_1_1GlobalMap.html#ae622850e2447bf1cc3e99ee9dcd4b65f',1,'rtabmap::GlobalMap::assemble(const std::list< std::pair< int, Transform > > &newPoses)=0']]], + ['assemblednodes_27',['assembledNodes',['../classrtabmap_1_1GlobalMap.html#a7fc3f43e65401d3842419066242e081d',1,'rtabmap::GlobalMap']]], + ['asyncsave_28',['asyncsave',['../classrtabmap_1_1DBDriver.html#ad1510e157f3ab8df3284528369a6d88f',1,'rtabmap::DBDriver::asyncSave(Signature *s)'],['../classrtabmap_1_1DBDriver.html#a88eee22aa9707a6993f734fe29f6af5d',1,'rtabmap::DBDriver::asyncSave(VisualWord *vw)']]], + ['available_29',['available',['../classrtabmap_1_1RegistrationIcp.html#a892ab46eff4e5b0b16bee7d93fa3ba56',1,'rtabmap::RegistrationIcp']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_1.js b/preview/pr-1492/api/latest/search/functions_1.js new file mode 100644 index 00000000..f769e3e1 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['backwardcompatibility_0',['backwardcompatibility',['../classrtabmap_1_1LaserScan.html#aafea81eab365a2fc2b4f90d8deceafc9',1,'rtabmap::LaserScan::backwardCompatibility(const cv::Mat &oldScanFormat, int maxPoints=0, int maxRange=0, const Transform &localTransform=Transform::getIdentity())'],['../classrtabmap_1_1LaserScan.html#a61e1fefc6554dd6fc1da3c2e5aeefd0c',1,'rtabmap::LaserScan::backwardCompatibility(const cv::Mat &oldScanFormat, float minRange, float maxRange, float angleMin, float angleMax, float angleInc, const Transform &localTransform=Transform::getIdentity())']]], + ['baseline_1',['baseline',['../classrtabmap_1_1StereoCameraModel.html#a8dc48f95fcf68eb81da96941f778535f',1,'rtabmap::StereoCameraModel']]], + ['bayesfilter_2',['BayesFilter',['../classrtabmap_1_1BayesFilter.html#a2955edc4b79110b5bd1bd03f1616056e',1,'rtabmap::BayesFilter']]], + ['bearing_3',['bearing',['../classrtabmap_1_1GPS.html#a9285c1d2e97f83dc0b8df3666b912169',1,'rtabmap::GPS']]], + ['brightnessandcontrastauto_4',['brightnessAndContrastAuto',['../namespacertabmap_1_1util2d.html#a89ec90b2659c764ba22b5c36d729c8f8',1,'rtabmap::util2d']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_10.js b/preview/pr-1492/api/latest/search/functions_10.js new file mode 100644 index 00000000..f517ebbf --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_10.js @@ -0,0 +1,56 @@ +var searchData= +[ + ['r_0',['r',['../classrtabmap_1_1StereoCameraModel.html#a7afd347afb3909a2039f154b3a048035',1,'rtabmap::StereoCameraModel::R()'],['../classrtabmap_1_1CameraModel.html#ad763246258ddf02c27873c2536901781',1,'rtabmap::CameraModel::R()']]], + ['r11_1',['r11',['../classrtabmap_1_1Transform.html#a1ea4c945ccf717677606fc7fe0331ccf',1,'rtabmap::Transform']]], + ['radiusfiltering_2',['radiusfiltering',['../group__RadiusFiltering.html#ga21f5957a6c6b8dd2ca7e559ed8a82d08',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga4f7bd9bc6922f17815109375fc11367b',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gaa1328e1ba793b44a450fe90e4e99fa35',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga3b3ef1e4b2893810542c6c2be871fa16',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga4a5c1b3dd17782eed6ff342a27ab9dde',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga9e4ddb084f4c00934f65f30d8b466047',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gae6562a12f695af7fc210043c85afeebc',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gaa6e6e945a27057824168aa287670d641',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gadc01992dd4ebc7fe77f40e423ba83f95',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gafba9a36653f1314aa968966f5e8f8df6',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#gada185029395a374e08162d2b357406a8',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)'],['../group__RadiusFiltering.html#ga8fde7163c8ede34584e464909f8410cd',1,'rtabmap::util3d::radiusFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float radiusSearch, int minNeighborsInRadius)']]], + ['randomsampling_3',['randomsampling',['../group__RandomSampling.html#ga7738134d7dec8f178a927dfe69fcb15a',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#ga8dadcd7fb9beedc839b54079c6e84701',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#gaf323d2f6db341f7dd83893297b1f9693',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#gac4f1ee370a918987a847d5d604601837',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#ga5e31a5d57029fddd20e5d57ecdfb1184',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, int samples)'],['../group__RandomSampling.html#gad6269088b589b735fd87e07d11bf2547',1,'rtabmap::util3d::randomSampling(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, int samples)']]], + ['rangefiltering_4',['rangefiltering',['../group__PointCloudRangeFiltering.html#ga954c38903497ffa168e9d58afc47078e',1,'rtabmap::util3d::rangeFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)'],['../group__PointCloudRangeFiltering.html#gaf1867021c847f77f561a96e4823a16bd',1,'rtabmap::util3d::rangeFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)'],['../group__PointCloudRangeFiltering.html#gaeff3b4153a78703ce5be9c64f8243596',1,'rtabmap::util3d::rangeFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)'],['../group__PointCloudRangeFiltering.html#ga2a2226e27b4203d04293f84bf8032e3f',1,'rtabmap::util3d::rangeFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float rangeMin, float rangeMax)']]], + ['rangesplitfiltering_5',['rangesplitfiltering',['../group__PointCloudSplitRangeFiltering.html#ga2dfe5eefc31a50912297f6341eae4446',1,'rtabmap::util3d::rangeSplitFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)'],['../group__PointCloudSplitRangeFiltering.html#ga99d6429ac043d37bdef871158739557e',1,'rtabmap::util3d::rangeSplitFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)'],['../group__PointCloudSplitRangeFiltering.html#ga843adb51ad7882fc8c6b8d00f4663c3b',1,'rtabmap::util3d::rangeSplitFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)'],['../group__PointCloudSplitRangeFiltering.html#gac9564b3cf8c8be2f80a20655f70af4f0',1,'rtabmap::util3d::rangeSplitFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)']]], + ['rawlikelihood_6',['rawLikelihood',['../classrtabmap_1_1Statistics.html#a472f50deace411e1fbbef95f4fb698de',1,'rtabmap::Statistics']]], + ['reactivatesignatures_7',['reactivateSignatures',['../classrtabmap_1_1Memory.html#aa244b8581684b85e35d2056cf972e377',1,'rtabmap::Memory']]], + ['rectifydepth_8',['rectifyDepth',['../classrtabmap_1_1CameraModel.html#a22cf7f5b49ef0cd8be08755010f6acb5',1,'rtabmap::CameraModel']]], + ['rectifyimage_9',['rectifyImage',['../classrtabmap_1_1CameraModel.html#a17219cf5cf82d224f2a7ed5af01fa236',1,'rtabmap::CameraModel']]], + ['reducedids_10',['reducedIds',['../classrtabmap_1_1Statistics.html#a8c1e9a5c04232909f62447656d6bcbce',1,'rtabmap::Statistics']]], + ['reducenode_11',['reduceNode',['../classrtabmap_1_1Memory.html#ac9e6bfaf161d4bd1a9f99d2352492a1d',1,'rtabmap::Memory']]], + ['refimageid_12',['refImageId',['../classrtabmap_1_1Statistics.html#a4ba41e262e2af21bfb2c9d1b6e493d6d',1,'rtabmap::Statistics']]], + ['refimagemapid_13',['refImageMapId',['../classrtabmap_1_1Statistics.html#a45abfdd8f164e0c457d64b80919d5052',1,'rtabmap::Statistics']]], + ['refinelinks_14',['refineLinks',['../classrtabmap_1_1Rtabmap.html#a6650c241bd6a89f66718ce7a227dfe10',1,'rtabmap::Rtabmap']]], + ['registercurrentthread_15',['registerCurrentThread',['../classULogger.html#a9e0fa0a0e32b03f89d08668e7c0b4664',1,'ULogger']]], + ['registerdepth_16',['registerDepth',['../namespacertabmap_1_1util2d.html#a48a7e15282f392e77561dd96ed3320f9',1,'rtabmap::util2d']]], + ['registration_17',['Registration',['../classrtabmap_1_1Registration.html#a7d0ff4149da7f5839308ff543932b067',1,'rtabmap::Registration']]], + ['registrationvis_18',['RegistrationVis',['../classrtabmap_1_1RegistrationVis.html#aa845f7fbbfc8fc340dba96a2a6550d03',1,'rtabmap::RegistrationVis']]], + ['rejectlastloopclosure_19',['rejectLastLoopClosure',['../classrtabmap_1_1Rtabmap.html#ab04bd616db9107a705faf5b3395a73d3',1,'rtabmap::Rtabmap']]], + ['release_20',['release',['../classUSemaphore.html#a693b35a08fd5363b14f3a220081814b5',1,'USemaphore']]], + ['removeallref_21',['removeAllRef',['../classrtabmap_1_1VisualWord.html#a63364292bdd9921668187b16c2e0457e',1,'rtabmap::VisualWord']]], + ['removeallvirtuallinks_22',['removeAllVirtualLinks',['../classrtabmap_1_1Memory.html#a838b48bb9c2e6ccfe4f916ea2b2d00fd',1,'rtabmap::Memory']]], + ['removeallwordref_23',['removeAllWordRef',['../classrtabmap_1_1VWDictionary.html#ac4a70358ca2db8e63c67a30383a1d34b',1,'rtabmap::VWDictionary']]], + ['removeallwords_24',['removeAllWords',['../classrtabmap_1_1Signature.html#aac24301e6aff593fdcd679485b2c0e0e',1,'rtabmap::Signature']]], + ['removedir_25',['removeDir',['../classUDirectory.html#a78d8896627c8675a19b0c6fe6d9e274a',1,'UDirectory']]], + ['removehandler_26',['removeHandler',['../classUEventsManager.html#a10d4b359f630aa9387e77f8baefcc07c',1,'UEventsManager']]], + ['removelandmark_27',['removeLandmark',['../classrtabmap_1_1Signature.html#a6fe5edded7922a34c3f52e71e8be458d',1,'rtabmap::Signature']]], + ['removelandmarks_28',['removeLandmarks',['../classrtabmap_1_1Signature.html#aa482e98fb247d40368a9aaa838fe3a5a',1,'rtabmap::Signature']]], + ['removelink_29',['removelink',['../classrtabmap_1_1Memory.html#a3fcaa79a33d63f7e383d05868b1316e3',1,'rtabmap::Memory::removeLink()'],['../classrtabmap_1_1Signature.html#abbd9806c2b20182217d2269c7398541e',1,'rtabmap::Signature::removeLink()'],['../classrtabmap_1_1DBDriver.html#a7c3c7536423a956e74d3f609ee814717',1,'rtabmap::DBDriver::removeLink()']]], + ['removelinks_30',['removeLinks',['../classrtabmap_1_1Signature.html#a8d3e01853af1365fce62dd460dea816f',1,'rtabmap::Signature']]], + ['removenanfrompointcloud_31',['removenanfrompointcloud',['../group__RemoveNaNFromPointCloud.html#ga307cddc4476370cc25e5f67fd13af865',1,'rtabmap::util3d::removeNaNFromPointCloud(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud)'],['../group__RemoveNaNFromPointCloud.html#ga2c98d8e54fff76606352c87edc378c31',1,'rtabmap::util3d::removeNaNFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud)'],['../group__RemoveNaNFromPointCloud.html#ga30ecdbed3fd26b750dcb0e63ea8c68b1',1,'rtabmap::util3d::removeNaNFromPointCloud(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud)'],['../group__RemoveNaNFromPointCloud.html#gab8b441e9acbafb0f36a0f4567e9535d6',1,'rtabmap::util3d::removeNaNFromPointCloud(const pcl::PCLPointCloud2::Ptr &cloud)']]], + ['removenannormalsfrompointcloud_32',['removenannormalsfrompointcloud',['../group__RemoveNaNNormalsFromPointCloud.html#ga3813dba7a0841937f37d9ecdaf526748',1,'rtabmap::util3d::removeNaNNormalsFromPointCloud(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud)'],['../group__RemoveNaNNormalsFromPointCloud.html#gafeeebb45de9c3cb8ac353f3cf867bc41',1,'rtabmap::util3d::removeNaNNormalsFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud)'],['../group__RemoveNaNNormalsFromPointCloud.html#ga42b9cf0558f56e1b00bd9ab1e2f1d0e6',1,'rtabmap::util3d::removeNaNNormalsFromPointCloud(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud)']]], + ['removerawdata_33',['removeRawData',['../classrtabmap_1_1Memory.html#acab72b1076370287ac28a1d464d480f0',1,'rtabmap::Memory']]], + ['removevirtuallinks_34',['removevirtuallinks',['../classrtabmap_1_1Signature.html#a328419f90f9dd8113dee4e38c9e30367',1,'rtabmap::Signature::removeVirtualLinks()'],['../classrtabmap_1_1Memory.html#aa77fb0f90185a274b3e9d0c609ce14ed',1,'rtabmap::Memory::removeVirtualLinks()']]], + ['removewords_35',['removeWords',['../classrtabmap_1_1VWDictionary.html#a7a506e15bf83d16cc98aaa34057216f4',1,'rtabmap::VWDictionary']]], + ['rename_36',['rename',['../classUFile.html#a4918a111f92f2fdb7406fbd1661a1587',1,'UFile::rename(const std::string &newName)'],['../classUFile.html#a725e2edf4b5f603bfc688e96c76858d4',1,'UFile::rename(const std::string &oldFilePath, const std::string &newFilePath)']]], + ['repeatonce_37',['repeatOnce',['../classrtabmap_1_1Registration.html#a7a9163259eaebff421953e194a623864',1,'rtabmap::Registration']]], + ['reproject_38',['reproject',['../classrtabmap_1_1CameraModel.html#a99204ef1a884478cf45b1503432b235b',1,'rtabmap::CameraModel::reproject(float x, float y, float z, int &u, int &v) const'],['../classrtabmap_1_1CameraModel.html#a637a730717e42939449cd9f09e20db26',1,'rtabmap::CameraModel::reproject(float x, float y, float z, float &u, float &v) const']]], + ['reset_39',['reset',['../classrtabmap_1_1OdometryOpenVINS.html#abbf8f6be20990f3e39ad23325d72b41b',1,'rtabmap::OdometryOpenVINS::reset()'],['../classrtabmap_1_1OdometryViso2.html#ad442b8186b72e220feace5fb0b0fec5c',1,'rtabmap::OdometryViso2::reset()'],['../classrtabmap_1_1OdometryDVO.html#aa20fb31a7bf255caa1f13b0b69b2ee65',1,'rtabmap::OdometryDVO::reset()'],['../classrtabmap_1_1OdometryF2F.html#a7fb0eb46ed5b40e15299bc40b5cd4eb5',1,'rtabmap::OdometryF2F::reset()'],['../classrtabmap_1_1OdometryF2M.html#a7a4b7219e339bbea7761601027f192d2',1,'rtabmap::OdometryF2M::reset()'],['../classrtabmap_1_1OdometryFLOAM.html#a85105e691f68317b2816566cb7440e46',1,'rtabmap::OdometryFLOAM::reset()'],['../classrtabmap_1_1OdometryFovis.html#a0175e1e923673028f1d647aaa185447c',1,'rtabmap::OdometryFovis::reset()'],['../classrtabmap_1_1OdometryLIOSAM.html#a7f72dbc28081ae774303dbf2d8cb5535',1,'rtabmap::OdometryLIOSAM::reset()'],['../classrtabmap_1_1OdometryLOAM.html#a6acc7b4f164a8915ada550ba7c23ac0e',1,'rtabmap::OdometryLOAM::reset()'],['../classrtabmap_1_1OdometryMono.html#a9574ccc748b5c4f664c059d460742457',1,'rtabmap::OdometryMono::reset()'],['../classrtabmap_1_1OdometryMSCKF.html#a3be4ada7eebf234c87a3127a85988d97',1,'rtabmap::OdometryMSCKF::reset()'],['../classrtabmap_1_1OdometryOkvis.html#a81f51ca0b6f3b48f9e6a6e0e2d7b7118',1,'rtabmap::OdometryOkvis::reset()'],['../classrtabmap_1_1OdometryOpen3D.html#a21fecb34185676d02d92c7ad18f13970',1,'rtabmap::OdometryOpen3D::reset()'],['../classrtabmap_1_1OdometryORBSLAM2.html#ab127fac7aae296a68a9bf68ab02ffbbc',1,'rtabmap::OdometryORBSLAM2::reset()'],['../classrtabmap_1_1OdometryORBSLAM3.html#a57626265fa4c23fab95140ca9c1f8f93',1,'rtabmap::OdometryORBSLAM3::reset()'],['../classrtabmap_1_1OdometryVINSFusion.html#aa2fdb97067ad27d76c6315125a513ed3',1,'rtabmap::OdometryVINSFusion::reset()'],['../classULogger.html#a007b617547d616325e58003eb4352a19',1,'ULogger::reset()'],['../classrtabmap_1_1OdometryCuVSLAM.html#a4cb0a09fc8eb184b2e0d915980b02742',1,'rtabmap::OdometryCuVSLAM::reset()'],['../classrtabmap_1_1Odometry.html#a0ea20c39ae597a21e896b706662bb31c',1,'rtabmap::Odometry::reset()'],['../classrtabmap_1_1IMUFilter.html#a45b68e2127fc5a687ef6b7920bf9b39b',1,'rtabmap::IMUFilter::reset()'],['../classrtabmap_1_1BayesFilter.html#ad415ee334d31eebc3685e61862f32573',1,'rtabmap::BayesFilter::reset()']]], + ['resetmemory_40',['resetMemory',['../classrtabmap_1_1Rtabmap.html#af12ae46226f33adf8c4cafbe1bcf544c',1,'rtabmap::Rtabmap']]], + ['resettimer_41',['resetTimer',['../classrtabmap_1_1SensorCapture.html#afa9923bb4a3b88e6dbf4c8ae7f060437',1,'rtabmap::SensorCapture']]], + ['restart_42',['restart',['../classUTimer.html#aa4db57cf682a403fba8ddf95d268d2a6',1,'UTimer']]], + ['rewind_43',['rewind',['../classUDirectory.html#aba596118c893215cf1a2981196864dca',1,'UDirectory']]], + ['right_44',['right',['../classrtabmap_1_1StereoCameraModel.html#ab8061141407d8cc55d7f83211708af85',1,'rtabmap::StereoCameraModel']]], + ['rightraw_45',['rightRaw',['../classrtabmap_1_1SensorData.html#aaa7408cb13ea2cbe33438e007b80de30',1,'rtabmap::SensorData']]], + ['roi_46',['roi',['../classrtabmap_1_1CameraModel.html#a2ff3290299c36b64ee880db2386f898f',1,'rtabmap::CameraModel::roi()'],['../classrtabmap_1_1StereoCameraModel.html#ac2fb1c489ae60bd7e4c104515db3c3a9',1,'rtabmap::StereoCameraModel::roi()']]], + ['rotateimagesupsideupifnecessary_47',['rotateImagesUpsideUpIfNecessary',['../namespacertabmap_1_1util2d.html#a1577494ad9730181d5b768ca8237d5dd',1,'rtabmap::util2d']]], + ['rotation_48',['rotation',['../classrtabmap_1_1Transform.html#aeed78122de7f78a13641802b964d9631',1,'rtabmap::Transform']]], + ['rotationmatrix_49',['rotationMatrix',['../classrtabmap_1_1Transform.html#a23dfabecb7b2ad9c6a7fdcde08d900ab',1,'rtabmap::Transform']]], + ['rotvariance_50',['rotVariance',['../classrtabmap_1_1Link.html#a00cecebc9adf3ee5afb66d6ad63871e4',1,'rtabmap::Link']]], + ['rtabmap_5ft_5fopengl_51',['rtabmap_T_opengl',['../classrtabmap_1_1Transform.html#aa58ff702a149c05c930195d1ce42012e',1,'rtabmap::Transform']]], + ['rtabmapcoloroctree_52',['RtabmapColorOcTree',['../classrtabmap_1_1RtabmapColorOcTree.html#a357d9dd5513df9a4185d84f97c1d5a3f',1,'rtabmap::RtabmapColorOcTree']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_11.js b/preview/pr-1492/api/latest/search/functions_11.js new file mode 100644 index 00000000..53afc209 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_11.js @@ -0,0 +1,156 @@ +var searchData= +[ + ['sad_0',['sad',['../namespacertabmap_1_1util2d.html#a4cd865b8edc489f950b0c1b5e1a0c992',1,'rtabmap::util2d']]], + ['save_1',['save',['../classrtabmap_1_1StereoCameraModel.html#abfafd0a24795186f3bf623082663b4cd',1,'rtabmap::StereoCameraModel::save()'],['../classrtabmap_1_1CameraModel.html#ab5ec6010459c4e642e162dc8914bccb9',1,'rtabmap::CameraModel::save()']]], + ['save2dmap_2',['save2dmap',['../classrtabmap_1_1DBDriver.html#a5bed0d1f92c1cc864dedf99b99a44037',1,'rtabmap::DBDriver::save2DMap()'],['../classrtabmap_1_1Memory.html#ac96fffe9fde99f7c74a06bbc5727be6b',1,'rtabmap::Memory::save2DMap()']]], + ['saveflannindex_3',['saveFlannIndex',['../classrtabmap_1_1DBDriver.html#a33c2abff50e61f35efbbdbe530963fea',1,'rtabmap::DBDriver']]], + ['savelasfile_4',['savelasfile',['../namespacertabmap.html#a264208396318e0ecfe2af8f3aafe0374',1,'rtabmap::saveLASFile(const std::string &filePath, const pcl::PointCloud< pcl::PointXYZ > &cloud, const std::vector< int > &cameraIds=std::vector< int >())'],['../namespacertabmap.html#af174f507bee7dde4f9d45044d7bee8ea',1,'rtabmap::saveLASFile(const std::string &filePath, const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const std::vector< int > &cameraIds=std::vector< int >(), const std::vector< float > &intensities=std::vector< float >())'],['../namespacertabmap.html#ad59cb4c65fba713c1a622904c5229198',1,'rtabmap::saveLASFile(const std::string &filePath, const pcl::PointCloud< pcl::PointXYZI > &cloud, const std::vector< int > &cameraIds=std::vector< int >())']]], + ['savelocationdata_5',['saveLocationData',['../classrtabmap_1_1Memory.html#a93119d10342db4a55c77b180cb249453',1,'rtabmap::Memory']]], + ['saveoptimizedmesh_6',['saveoptimizedmesh',['../classrtabmap_1_1Memory.html#a7e16d27512d0daf17b9dbb17aab3b201',1,'rtabmap::Memory::saveOptimizedMesh()'],['../classrtabmap_1_1DBDriver.html#a22d5643353b8d49bcc94c5a4abbc9a39',1,'rtabmap::DBDriver::saveOptimizedMesh(const cv::Mat &cloud, const std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > > &polygons=std::vector< std::vector< std::vector< RTABMAP_PCL_INDEX > > >(), const std::vector< std::vector< Eigen::Vector2f > > &texCoords=std::vector< std::vector< Eigen::Vector2f > >(), const cv::Mat &textures=cv::Mat()) const']]], + ['saveoptimizedposes_7',['saveoptimizedposes',['../classrtabmap_1_1DBDriver.html#ab91ad40e4273485e5f0951fac32c22e4',1,'rtabmap::DBDriver::saveOptimizedPoses()'],['../classrtabmap_1_1Memory.html#ab7a2da56bb12845f0370a20a9497dfe0',1,'rtabmap::Memory::saveOptimizedPoses()']]], + ['savepreviewimage_8',['savepreviewimage',['../classrtabmap_1_1DBDriver.html#a8323a53d20e4ade6b1c7b268c473a170',1,'rtabmap::DBDriver::savePreviewImage()'],['../classrtabmap_1_1Memory.html#affdd654e385b61306a2ac2ea91d13b85',1,'rtabmap::Memory::savePreviewImage(const cv::Mat &image) const']]], + ['savestatistics_9',['saveStatistics',['../classrtabmap_1_1Memory.html#afbcfc92dc9bbc344ab106d2f21d93aaf',1,'rtabmap::Memory']]], + ['savestereotransform_10',['saveStereoTransform',['../classrtabmap_1_1StereoCameraModel.html#a1d016f499dbcce889ce7b7062c83b660',1,'rtabmap::StereoCameraModel']]], + ['scale_11',['scale',['../classrtabmap_1_1StereoCameraModel.html#a264d57ca1e0f6b41d03ffe1d89afc382',1,'rtabmap::StereoCameraModel']]], + ['scaled_12',['scaled',['../classrtabmap_1_1CameraModel.html#aecf2e87f260558dbf631e4803e1ed986',1,'rtabmap::CameraModel']]], + ['segmentcloud_13',['segmentCloud',['../classrtabmap_1_1LocalGridMaker.html#ad54b92f6d04b76a550483a7a68f45bda',1,'rtabmap::LocalGridMaker']]], + ['sensorcapture_14',['SensorCapture',['../classrtabmap_1_1SensorCapture.html#adf4b1dfd8e5b45b8eecf938a92dbae94',1,'rtabmap::SensorCapture']]], + ['sensorcaptureinfo_15',['SensorCaptureInfo',['../classrtabmap_1_1SensorCaptureInfo.html#a8f315fb6fe3a16b77e3252d66088db09',1,'rtabmap::SensorCaptureInfo']]], + ['sensorcapturethread_16',['sensorcapturethread',['../classrtabmap_1_1SensorCaptureThread.html#a2a64df180f19d0a2ea9a8d66ea58fc42',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Lidar *lidar, Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#a590aee9497d8a3b6e14b68e1e17f9c6a',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Lidar *lidar, SensorCapture *odomSensor, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#a9cf0e883ace51a2a656395327beb74e5',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Lidar *lidar, Camera *camera, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#a834d1e5c389e7ef8eb23bf1361916ae2',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Lidar *lidar, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#a76ad33a55009b7a7f7ec51acccbe0492',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Camera *camera, SensorCapture *odomSensor, const Transform &extrinsics, double poseTimeOffset=0.0, float poseScaleFactor=1.0f, double poseWaitTime=0.1, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1SensorCaptureThread.html#acae15b44b2fb05da9421dc88ff0be75c',1,'rtabmap::SensorCaptureThread::SensorCaptureThread(Camera *camera, const ParametersMap &parameters=ParametersMap())']]], + ['sensordata_17',['sensordata',['../classrtabmap_1_1Signature.html#a0e7b1874613a7438ec1b2d9aa2634da8',1,'rtabmap::Signature::sensorData() const'],['../classrtabmap_1_1Signature.html#a24c257c2ff3fe156910ac82c41de8738',1,'rtabmap::Signature::sensorData()'],['../classrtabmap_1_1SensorData.html#a25efb0e7904a3daa7f4ee7cd814a24ff',1,'rtabmap::SensorData::SensorData(const IMU &imu, int id=0, double stamp=0.0)'],['../classrtabmap_1_1SensorData.html#ad34a0a4ca3eac4a1c91fb7fb5068fb04',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#a6ccaccf892f950b0caa03c07de3eab98',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#abdd07b6e248e165959468bb31897bc20',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ae0370b88671bb41812c2d39fd0cfc3ce',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ada69a11125b0b3072add73a3a2f1b5f2',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#aead598774e0cb15375828a2965b3ab80',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#a14f7a5c64b5d27842cb654e247d1fd20',1,'rtabmap::SensorData::SensorData(const cv::Mat &image, const CameraModel &cameraModel, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())'],['../classrtabmap_1_1SensorData.html#ab6201ea27482207308f000bd4cc90081',1,'rtabmap::SensorData::SensorData(const cv::Mat &image, int id=0, double stamp=0.0, const cv::Mat &userData=cv::Mat())'],['../classrtabmap_1_1SensorData.html#a1534d36fee45c3df70679438ec9d00a3',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#a941f907890fe9e0e9becec0a665581cd',1,'rtabmap::SensorData::SensorData()'],['../classrtabmap_1_1SensorData.html#a87424cc9915dababe9aa3bc418e85197',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ac06b8207850c5412cc52f5f0e0e4ba7b',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#a52b215e8d320bbcbd464e3b7181a077b',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#ae4498a6d017e83202dfe86618e91fa57',1,'rtabmap::SensorData::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())'],['../classrtabmap_1_1SensorData.html#a72a0250435fc194b1189241d4a47254d',1,'rtabmap::SensorData::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())']]], + ['sensorevent_18',['sensorevent',['../classrtabmap_1_1SensorEvent.html#aa6c0584b85a70fe240f745c759948591',1,'rtabmap::SensorEvent::SensorEvent(const cv::Mat &image, int seq=0, double stamp=0.0, const std::string &cameraName=std::string())'],['../classrtabmap_1_1SensorEvent.html#aef6624e43c3f7f29684072782a377e20',1,'rtabmap::SensorEvent::SensorEvent()'],['../classrtabmap_1_1SensorEvent.html#a6e120cf7c4aea9201462c9cbb224b787',1,'rtabmap::SensorEvent::SensorEvent(const SensorData &data)'],['../classrtabmap_1_1SensorEvent.html#a1a47910aed70809eabfc195ca2515f85',1,'rtabmap::SensorEvent::SensorEvent(const SensorData &data, const std::string &cameraName)'],['../classrtabmap_1_1SensorEvent.html#a1e35f9e5433d00628dd51876bc74fec5',1,'rtabmap::SensorEvent::SensorEvent(const SensorData &data, const SensorCaptureInfo &sensorCaptureInfo)']]], + ['separator_19',['separator',['../classUDirectory.html#a66750846a899e436808d4eadbcafced0',1,'UDirectory']]], + ['serialize_20',['serialize',['../classrtabmap_1_1StereoCameraModel.html#a4eab6254ef808719ca2d0543c89e0722',1,'rtabmap::StereoCameraModel::serialize()'],['../classrtabmap_1_1CameraModel.html#a5724619c7ac8c796fd8c63660e398082',1,'rtabmap::CameraModel::serialize()']]], + ['serializedata_21',['serializeData',['../classrtabmap_1_1Statistics.html#ab34cfba17216b060f57e106d7c169685',1,'rtabmap::Statistics']]], + ['serializeindex_22',['serializeIndex',['../classrtabmap_1_1VWDictionary.html#a2864c406b3792dbfb7c8c334b6e44d41',1,'rtabmap::VWDictionary']]], + ['setaffinity_23',['setAffinity',['../classUThread.html#aabcf31acae6ca5b8503ec320acbc11f8',1,'UThread']]], + ['setaltitude_24',['setAltitude',['../classrtabmap_1_1GeodeticCoords.html#afe3c631b5f01246840f8591fc8dc834e',1,'rtabmap::GeodeticCoords']]], + ['setbuffered_25',['setBuffered',['../classULogger.html#ab981daf077b8afbf49c7bd185aa3b273',1,'ULogger']]], + ['setcachesize_26',['setCacheSize',['../classrtabmap_1_1DBDriverSqlite3.html#afc148e17cf8cc6ed4565c5519b06fc5c',1,'rtabmap::DBDriverSqlite3']]], + ['setcameramodel_27',['setCameraModel',['../classrtabmap_1_1SensorData.html#ad8ae172220b7bfffeb09bb1eac60f28f',1,'rtabmap::SensorData']]], + ['setcameramodels_28',['setCameraModels',['../classrtabmap_1_1SensorData.html#af841bbc9ea6de17124f8c871fa5d0719',1,'rtabmap::SensorData']]], + ['setchildregistration_29',['setChildRegistration',['../classrtabmap_1_1Registration.html#ac105402feeb2ec6551235296604145aa',1,'rtabmap::Registration']]], + ['setcoloronly_30',['setColorOnly',['../classrtabmap_1_1SensorCaptureThread.html#a6308c79599bd90b77d243febff024a15',1,'rtabmap::SensorCaptureThread']]], + ['setconstraints_31',['setConstraints',['../classrtabmap_1_1Statistics.html#ac4761222db6faee6c34c53c1d4d00ec2',1,'rtabmap::Statistics']]], + ['setcurrentgoalid_32',['setCurrentGoalId',['../classrtabmap_1_1Statistics.html#a845a35143a149c9670fb46938594fcb9',1,'rtabmap::Statistics']]], + ['setdbinmemory_33',['setDbInMemory',['../classrtabmap_1_1DBDriverSqlite3.html#a0722fcddc772af1cc03a7fe8b410d137',1,'rtabmap::DBDriverSqlite3']]], + ['setdistortionmodel_34',['setDistortionModel',['../classrtabmap_1_1SensorCaptureThread.html#aa7f6dcffcd6646994c2a87d8b888edcc',1,'rtabmap::SensorCaptureThread']]], + ['setdoomed_35',['setDoomed',['../classUDestroyer.html#aa3f030225d28ac7ad7059b9b64bde837',1,'UDestroyer']]], + ['setdualmode_36',['setDualMode',['../classrtabmap_1_1CameraRealSense2.html#ad9a5218ed20bad24c020a18e2ed0b12c',1,'rtabmap::CameraRealSense2']]], + ['setdummydictionary_37',['setdummydictionary',['../classrtabmap_1_1Rtabmap.html#a4d351e3f5ef809460afbb5a7702a500d',1,'rtabmap::Rtabmap::setDummyDictionary()'],['../classrtabmap_1_1Memory.html#a655f123daec9e4e50e322db9f3bbd6db',1,'rtabmap::Memory::setDummyDictionary()']]], + ['setenabled_38',['setEnabled',['../classrtabmap_1_1Signature.html#a51a08cbabd87eb0fd5045ffdb4cb3c00',1,'rtabmap::Signature']]], + ['setenvsensors_39',['setEnvSensors',['../classrtabmap_1_1SensorData.html#ab3a5ebf180d5f2f106877b78aee6d1d1',1,'rtabmap::SensorData']]], + ['seteventlevel_40',['setEventLevel',['../classULogger.html#ac0705dc7bc5da07ce27351eb6519e942',1,'ULogger']]], + ['setextended_41',['setExtended',['../classrtabmap_1_1Statistics.html#a938202c5836ba75d8eb06b0317712d06',1,'rtabmap::Statistics']]], + ['setfeatures_42',['setFeatures',['../classrtabmap_1_1SensorData.html#ad083f0a1e7769ff62183a0fa47279ae3',1,'rtabmap::SensorData']]], + ['setfixeddictionary_43',['setFixedDictionary',['../classrtabmap_1_1VWDictionary.html#a5f3712744b9f7beb5da186a842f7d74a',1,'rtabmap::VWDictionary']]], + ['setframerate_44',['setframerate',['../classrtabmap_1_1SensorCaptureThread.html#a416f1596701d6b9dbd8512cd1c617788',1,'rtabmap::SensorCaptureThread::setFrameRate()'],['../classrtabmap_1_1SensorCapture.html#a1e195970f52334094174783c5fd06456',1,'rtabmap::SensorCapture::setFrameRate()']]], + ['setglobaldescriptors_45',['setGlobalDescriptors',['../classrtabmap_1_1SensorData.html#ab6f18f2eb0340c8f6e800a695424bbbe',1,'rtabmap::SensorData']]], + ['setglobalpose_46',['setGlobalPose',['../classrtabmap_1_1SensorData.html#a72f0ce5a2989f478149f5cf2d5a36556',1,'rtabmap::SensorData']]], + ['setgps_47',['setGPS',['../classrtabmap_1_1SensorData.html#ad09e3e0fc1f60d233d81288a4cf8f56a',1,'rtabmap::SensorData']]], + ['setgroundtruth_48',['setGroundTruth',['../classrtabmap_1_1SensorData.html#a7051ea8c13bafd7eaffb5f5a93064808',1,'rtabmap::SensorData']]], + ['setgroundtruthpose_49',['setGroundTruthPose',['../classrtabmap_1_1Signature.html#aa8be86850b1277ce7c5eb4a5998e35e9',1,'rtabmap::Signature']]], + ['sethistogrammethod_50',['setHistogramMethod',['../classrtabmap_1_1SensorCaptureThread.html#a3e55c70032141f75802b2339c102c063',1,'rtabmap::SensorCaptureThread']]], + ['setid_51',['setId',['../classrtabmap_1_1SensorData.html#a4d0f4615a747eaef142b51a1ab1e5527',1,'rtabmap::SensorData']]], + ['setidentity_52',['setIdentity',['../classrtabmap_1_1Transform.html#afe833cfcd56f2f147091e7d309dadb36',1,'rtabmap::Transform']]], + ['setimagedecimation_53',['setImageDecimation',['../classrtabmap_1_1SensorCaptureThread.html#a74383f4e31ed642520511eb822ed1d89',1,'rtabmap::SensorCaptureThread']]], + ['setimagerate_54',['setImageRate',['../classrtabmap_1_1SensorCaptureThread.html#a2a40e01eb8e61aae54feeb1458efb88e',1,'rtabmap::SensorCaptureThread']]], + ['setimagesize_55',['setimagesize',['../classrtabmap_1_1CameraModel.html#a43fd48b917ca145876024859f8565931',1,'rtabmap::CameraModel::setImageSize()'],['../classrtabmap_1_1StereoCameraModel.html#a898c2eff7bfc4977703f8edb86ca1187',1,'rtabmap::StereoCameraModel::setImageSize()']]], + ['setimu_56',['setIMU',['../classrtabmap_1_1SensorData.html#a2297bfc9d81c077852d8f832231ba139',1,'rtabmap::SensorData']]], + ['setincrementaldictionary_57',['setIncrementalDictionary',['../classrtabmap_1_1VWDictionary.html#ab14ef6e8fb979dce23f9a40a1faf8dff',1,'rtabmap::VWDictionary']]], + ['setinfmatrix_58',['setInfMatrix',['../classrtabmap_1_1Link.html#a3a82104ae4195beff134811a3a19d939',1,'rtabmap::Link']]], + ['setinitialpose_59',['setInitialPose',['../classrtabmap_1_1Rtabmap.html#a9a9321531773f37cd5d7740495ede47f',1,'rtabmap::Rtabmap']]], + ['setjournalmode_60',['setJournalMode',['../classrtabmap_1_1DBDriverSqlite3.html#ae3c445bedd62088bb20e76eda6cfe64d',1,'rtabmap::DBDriverSqlite3']]], + ['setlabel_61',['setLabel',['../classrtabmap_1_1Signature.html#aa6dc3ad065ae2fd29afbbe69429f3a7b',1,'rtabmap::Signature']]], + ['setlabels_62',['setLabels',['../classrtabmap_1_1Statistics.html#aaa519c598aa7a56eda73653ab34d6b48',1,'rtabmap::Statistics']]], + ['setlandmarks_63',['setLandmarks',['../classrtabmap_1_1SensorData.html#af0873bbd79209dca371792e94e020e14',1,'rtabmap::SensorData']]], + ['setlaserscan_64',['setLaserScan',['../classrtabmap_1_1SensorData.html#a8fc1c848518793a1fe65c47a3ff729b0',1,'rtabmap::SensorData']]], + ['setlastsignaturedata_65',['setLastSignatureData',['../classrtabmap_1_1Statistics.html#ae5de0aae15a10ed18cc30c2656bd4d6a',1,'rtabmap::Statistics']]], + ['setlastwordid_66',['setLastWordId',['../classrtabmap_1_1VWDictionary.html#af0b676e13c7dba437147520335289e97',1,'rtabmap::VWDictionary']]], + ['setlatitude_67',['setLatitude',['../classrtabmap_1_1GeodeticCoords.html#a9113dd2d169f83e68b1dd0b12f8f24da',1,'rtabmap::GeodeticCoords']]], + ['setlevel_68',['setLevel',['../classULogger.html#ad8589bdaabddc1e9a260b890b1cf312e',1,'ULogger']]], + ['setlikelihood_69',['setLikelihood',['../classrtabmap_1_1Statistics.html#a8988eb66288df6a4d676b3cbd7b3a7ff',1,'rtabmap::Statistics']]], + ['setlocalizationcovariance_70',['setLocalizationCovariance',['../classrtabmap_1_1Statistics.html#a747aee7cd90f8318de6d0b82bedcd971',1,'rtabmap::Statistics']]], + ['setlocalpath_71',['setLocalPath',['../classrtabmap_1_1Statistics.html#a3c80bf518d943d9b86e5088a9269b455',1,'rtabmap::Statistics']]], + ['setlocaltransform_72',['setlocaltransform',['../classrtabmap_1_1StereoCameraModel.html#aee77882ceca428a560f5fd3713a330fb',1,'rtabmap::StereoCameraModel::setLocalTransform()'],['../classrtabmap_1_1SensorCapture.html#a0ea4e217047c234bcfcb9866e36ea7c0',1,'rtabmap::SensorCapture::setLocalTransform()'],['../classrtabmap_1_1CameraModel.html#aa1325c971f17d371553c3f75be7aeece',1,'rtabmap::CameraModel::setLocalTransform()']]], + ['setlongitude_73',['setLongitude',['../classrtabmap_1_1GeodeticCoords.html#aac1f8d7bcf0aff48aa8c7aefa91c72d3',1,'rtabmap::GeodeticCoords']]], + ['setloopclosureid_74',['setLoopClosureId',['../classrtabmap_1_1Statistics.html#a19272faba1c28279bb565464afa84645',1,'rtabmap::Statistics']]], + ['setloopclosuremapid_75',['setLoopClosureMapId',['../classrtabmap_1_1Statistics.html#a3b92ac9f165c77b2cc92f3fc6d7242cd',1,'rtabmap::Statistics']]], + ['setloopclosuretransform_76',['setLoopClosureTransform',['../classrtabmap_1_1Statistics.html#ac323334656165fd230cbe396836c6939',1,'rtabmap::Statistics']]], + ['setmapcorrection_77',['setMapCorrection',['../classrtabmap_1_1Statistics.html#a6a70e49f42639395a89edbde4659bf88',1,'rtabmap::Statistics']]], + ['setmemorythreshold_78',['setMemoryThreshold',['../classrtabmap_1_1Rtabmap.html#a6915ee0137b949837addcb5d3ac1646c',1,'rtabmap::Rtabmap']]], + ['setmirroringenabled_79',['setMirroringEnabled',['../classrtabmap_1_1SensorCaptureThread.html#a1cfabc2a5451ffe913f5691b80de514d',1,'rtabmap::SensorCaptureThread']]], + ['setmodified_80',['setModified',['../classrtabmap_1_1Signature.html#a245c8af68f7adec3813e3b062395769f',1,'rtabmap::Signature']]], + ['setname_81',['setname',['../classrtabmap_1_1CameraModel.html#a402a407fa2bca721087a6deda24cc10d',1,'rtabmap::CameraModel::setName()'],['../classrtabmap_1_1StereoCameraModel.html#adc404f0be63eedd0e0a9d6d5b5b36a94',1,'rtabmap::StereoCameraModel::setName()']]], + ['setnnstrategy_82',['setNNStrategy',['../classrtabmap_1_1VWDictionary.html#af60e271facb40ff668c4bc24cff1b9cc',1,'rtabmap::VWDictionary']]], + ['setnull_83',['setNull',['../classrtabmap_1_1Transform.html#af0020cf4093b8b1a3d1f68ee657b3662',1,'rtabmap::Transform']]], + ['setobj_84',['setObj',['../classUObjDeletionThread.html#a3a54e762b9f21750fe724bf78b48c653',1,'UObjDeletionThread']]], + ['setoccupancygrid_85',['setOccupancyGrid',['../classrtabmap_1_1SensorData.html#a5c12949c62c65281bade9ffcc681462b',1,'rtabmap::SensorData']]], + ['setodomasgroundtruth_86',['setOdomAsGroundTruth',['../classrtabmap_1_1SensorCaptureThread.html#a5a6a9ad20c75150f86ef479fe74ae6f7',1,'rtabmap::SensorCaptureThread']]], + ['setodomcacheconstraints_87',['setOdomCacheConstraints',['../classrtabmap_1_1Statistics.html#ae3d58759c1cc237b2e297c2c5f608725',1,'rtabmap::Statistics']]], + ['setodomcacheposes_88',['setOdomCachePoses',['../classrtabmap_1_1Statistics.html#a6032903dc163f7bc5d36c0520ccdfcef',1,'rtabmap::Statistics']]], + ['setoptimizedposes_89',['setOptimizedPoses',['../classrtabmap_1_1Rtabmap.html#a7a841702b925777620714fce7b41fd69',1,'rtabmap::Rtabmap']]], + ['setpath_90',['setPath',['../classUDirectory.html#aadfc0f6dfedc74bb6ef67dc87d6441f4',1,'UDirectory']]], + ['setpose_91',['setPose',['../classrtabmap_1_1Signature.html#aca4bf5db794637f0780f6eb2139a16f0',1,'rtabmap::Signature']]], + ['setposes_92',['setPoses',['../classrtabmap_1_1Statistics.html#acf7df1c7a8958a24988239fc40ece1ea',1,'rtabmap::Statistics']]], + ['setposterior_93',['setPosterior',['../classrtabmap_1_1Statistics.html#a915bb9bd90193a92f565f56024d61586',1,'rtabmap::Statistics']]], + ['setpredictionlc_94',['setPredictionLC',['../classrtabmap_1_1BayesFilter.html#a3255a54c1d2fc5b9a6db91fb38d591ae',1,'rtabmap::BayesFilter']]], + ['setprintcolored_95',['setPrintColored',['../classULogger.html#a773d95354adfe1fd1296f3b2f09668d3',1,'ULogger']]], + ['setprintendline_96',['setPrintEndline',['../classULogger.html#aa7cd59599601cdb214c6cb4df103dca0',1,'ULogger']]], + ['setprintlevel_97',['setPrintLevel',['../classULogger.html#a4a97457a98a02f60580e6f3c93f83d7a',1,'ULogger']]], + ['setprintthreadid_98',['setPrintThreadId',['../classULogger.html#a071b4484d0020a87760bbe282175724a',1,'ULogger']]], + ['setprinttime_99',['setPrintTime',['../classULogger.html#a2142b47257ecf1f2561afa8353eae411',1,'ULogger']]], + ['setprintwhere_100',['setPrintWhere',['../classULogger.html#af5a2e0f11770fcb457c1859c9f8b5ec3',1,'ULogger']]], + ['setprintwherefullpath_101',['setPrintWhereFullPath',['../classULogger.html#a2784b7a88339964e2a1c2b3436245bfc',1,'ULogger']]], + ['setpriority_102',['setPriority',['../classUThread.html#a80418be3a80a01ddd05a863b58787b43',1,'UThread']]], + ['setproximitydetectionid_103',['setProximityDetectionId',['../classrtabmap_1_1Statistics.html#a25b8a9b50054a80dc09423b6fe9f68ff',1,'rtabmap::Statistics']]], + ['setproximitydetectionmapid_104',['setProximityDetectionMapId',['../classrtabmap_1_1Statistics.html#a5e6df533a3c7a70d0391f7fe129e5eef',1,'rtabmap::Statistics']]], + ['setrate_105',['setRate',['../classrtabmap_1_1IMUThread.html#a3b646ffce1964e2ab6bc314dc4b27deb',1,'rtabmap::IMUThread']]], + ['setrawlikelihood_106',['setRawLikelihood',['../classrtabmap_1_1Statistics.html#a20a3634b3fbd36d86b1803f7427b105f',1,'rtabmap::Statistics']]], + ['setreducedids_107',['setReducedIds',['../classrtabmap_1_1Statistics.html#abf88d8f411f811549d91d29a5b78d308',1,'rtabmap::Statistics']]], + ['setrefimageid_108',['setRefImageId',['../classrtabmap_1_1Statistics.html#a4fa0c5aafea26effea2ed63d5bf3a31f',1,'rtabmap::Statistics']]], + ['setrefimagemapid_109',['setRefImageMapId',['../classrtabmap_1_1Statistics.html#a39895f500676995e2cc830169b80c7ca',1,'rtabmap::Statistics']]], + ['setresolution_110',['setResolution',['../classrtabmap_1_1CameraVideo.html#a7c8c8e9d343f78fdd17aad2db34dbecb',1,'rtabmap::CameraVideo']]], + ['setrgbdimage_111',['setRGBDImage',['../classrtabmap_1_1SensorData.html#a203770ef217dfdc67b98ca593b2cab24',1,'rtabmap::SensorData']]], + ['setsaved_112',['setsaved',['../classrtabmap_1_1Signature.html#a02c5d305492e3534e3799b8b7c78d912',1,'rtabmap::Signature::setSaved()'],['../classrtabmap_1_1VisualWord.html#a58f7ff50ca24f1586bf3fdf5999d6184',1,'rtabmap::VisualWord::setSaved()']]], + ['setscanparameters_113',['setscanparameters',['../classrtabmap_1_1SensorCaptureThread.html#a00a7a0e4f5277f6c6ed53bf832624c00',1,'rtabmap::SensorCaptureThread::setScanParameters(bool fromDepth, int downsampleStep=1, float rangeMin=0.0f, float rangeMax=0.0f, float voxelSize=0.0f, int normalsK=0, float normalsRadius=0.0f, float groundNormalsUp=0.0f, bool deskewing=false)'],['../classrtabmap_1_1SensorCaptureThread.html#a40f1016ea142c6117ffb080f64b4a854',1,'rtabmap::SensorCaptureThread::setScanParameters(bool fromDepth, int downsampleStep, float rangeMin, float rangeMax, float voxelSize, int normalsK, float normalsRadius, bool forceGroundNormalsUp, bool deskewing)']]], + ['setsignaturesdata_114',['setSignaturesData',['../classrtabmap_1_1Statistics.html#ad23568ea07d4ad167fcbd83a9083a2ef',1,'rtabmap::Statistics']]], + ['setstamp_115',['setstamp',['../classrtabmap_1_1SensorData.html#a5c0844e94d3fff50a8bfec2decf2f94c',1,'rtabmap::SensorData::setStamp()'],['../classrtabmap_1_1Statistics.html#a12bfc3ce8eb232a6ac3942af504bedef',1,'rtabmap::Statistics::setStamp()']]], + ['setstereocameramodel_116',['setStereoCameraModel',['../classrtabmap_1_1SensorData.html#ab2f74509af5e3f56d1c4d5e31c0c6003',1,'rtabmap::SensorData']]], + ['setstereocameramodels_117',['setStereoCameraModels',['../classrtabmap_1_1SensorData.html#ab4e6b5d917155b94d8b4b6242fe56c6e',1,'rtabmap::SensorData']]], + ['setstereoexposurecompensation_118',['setStereoExposureCompensation',['../classrtabmap_1_1SensorCaptureThread.html#a2c43f41518d914f2a3ae6959abcde989',1,'rtabmap::SensorCaptureThread']]], + ['setstereotodepth_119',['setStereoToDepth',['../classrtabmap_1_1SensorCaptureThread.html#ae0658121bc03f0eafd469ee114bc61f8',1,'rtabmap::SensorCaptureThread']]], + ['setsynchronous_120',['setSynchronous',['../classrtabmap_1_1DBDriverSqlite3.html#a187e2bbb52ae7f32a0fc79540f0f104b',1,'rtabmap::DBDriverSqlite3']]], + ['settempstore_121',['setTempStore',['../classrtabmap_1_1DBDriverSqlite3.html#a8f4adea749a2d30340715002056f9062',1,'rtabmap::DBDriverSqlite3']]], + ['settimethreshold_122',['setTimeThreshold',['../classrtabmap_1_1Rtabmap.html#a80add8fadd488d0c7781c249abea0d5d',1,'rtabmap::Rtabmap']]], + ['settreadidfilter_123',['setTreadIdFilter',['../classULogger.html#ada44d4afa869f1f9eab174a28c8a1acd',1,'ULogger']]], + ['settype_124',['setType',['../classULogger.html#a0fe73ce7c193ff399bca16b8d4d4cabb',1,'ULogger']]], + ['setuserdata_125',['setuserdata',['../classrtabmap_1_1SensorData.html#accb5f254667af3074993a073a4e1f072',1,'rtabmap::SensorData::setUserData()'],['../classrtabmap_1_1Rtabmap.html#a037ddb5d737e0466d7610b88d8429bd6',1,'rtabmap::Rtabmap::setUserData()'],['../classrtabmap_1_1Memory.html#aff18f08be0a7951f508276e341759f5c',1,'rtabmap::Memory::setUserData()']]], + ['setvelocity_126',['setVelocity',['../classrtabmap_1_1Signature.html#a1e48a2cde44ad1ecc2daaf5e8245e86a',1,'rtabmap::Signature']]], + ['setweight_127',['setWeight',['../classrtabmap_1_1Signature.html#a28cc9f0c8d553a24ef9e5227be1c99fe',1,'rtabmap::Signature']]], + ['setweights_128',['setWeights',['../classrtabmap_1_1Statistics.html#a918d447083cfcea3ab040e985461ae45',1,'rtabmap::Statistics']]], + ['setwmstate_129',['setWmState',['../classrtabmap_1_1Statistics.html#aa43870ba13369f23c122bff62f6654c8',1,'rtabmap::Statistics']]], + ['setwords_130',['setWords',['../classrtabmap_1_1Signature.html#a6fb8d04c4c2c8ee6f82d1eb65fd750a4',1,'rtabmap::Signature']]], + ['setwordsdescriptors_131',['setWordsDescriptors',['../classrtabmap_1_1Signature.html#a80565e1439be473d9c783d5c624b1a02',1,'rtabmap::Signature']]], + ['setworkingdirectory_132',['setWorkingDirectory',['../classrtabmap_1_1Rtabmap.html#a25028c3e8d8018c03f47f06150d76eab',1,'rtabmap::Rtabmap']]], + ['shareto_133',['shareTo',['../classrtabmap_1_1LocalGridCache.html#a6350523acd5ce71be45cd653071837fc',1,'rtabmap::LocalGridCache']]], + ['signature_134',['signature',['../classrtabmap_1_1Signature.html#aa3367bba5b890341238d93e642f847a7',1,'rtabmap::Signature::Signature(int id, int mapId=-1, int weight=0, double stamp=0.0, const std::string &label=std::string(), const Transform &pose=Transform(), const Transform &groundTruthPose=Transform(), const SensorData &sensorData=SensorData())'],['../classrtabmap_1_1Signature.html#af106b6a37909c236e22f5cac6150ce62',1,'rtabmap::Signature::Signature(const SensorData &data)'],['../classrtabmap_1_1Signature.html#a8e079b11910a45639a792158c40693ad',1,'rtabmap::Signature::Signature()']]], + ['size_135',['size',['../classrtabmap_1_1Transform.html#a2cdd55b67e206a287e7bf4d248fb5256',1,'rtabmap::Transform::size()'],['../classrtabmap_1_1Landmark.html#acba351c01c619a0d78e52e7bfca94111',1,'rtabmap::Landmark::size()']]], + ['ssc_136',['SSC',['../namespacertabmap_1_1util2d.html#aa6957971e17f27bb066efe036d80fd46',1,'rtabmap::util2d']]], + ['ssd_137',['ssd',['../namespacertabmap_1_1util2d.html#a179e07ca5bc9581ff4782ae8f9d33521',1,'rtabmap::util2d']]], + ['stamp_138',['stamp',['../classrtabmap_1_1Statistics.html#a24a86b496c06f7d027ebb803b0ce70dd',1,'rtabmap::Statistics::stamp()'],['../classrtabmap_1_1SensorData.html#a566e5600bc0369f2f88ff0c597cefcfb',1,'rtabmap::SensorData::stamp()'],['../classrtabmap_1_1GPS.html#a8620d60c593c641eb3be44ae41bec799',1,'rtabmap::GPS::stamp()'],['../classrtabmap_1_1EnvSensor.html#a1bbcf9a834523dd2e91ef1ab8d31d5e4',1,'rtabmap::EnvSensor::stamp()']]], + ['start_139',['start',['../classUThread.html#a051e9adcf24f92b9c8e31acd06bad88c',1,'UThread::start()'],['../classUTimer.html#a10f628d8be04474d13c04b07c0426200',1,'UTimer::start()']]], + ['startdeletion_140',['startDeletion',['../classUObjDeletionThread.html#a2b4e12d9f11684b1378bb77a1a3c54b3',1,'UObjDeletionThread']]], + ['statistics_141',['Statistics',['../classrtabmap_1_1Statistics.html#a5f5bf8e57410944ec46be25a5bf8ab46',1,'rtabmap::Statistics']]], + ['stereo_142',['Stereo',['../classrtabmap_1_1Stereo.html#a1031c68f4e66690da216718382af0ab3',1,'rtabmap::Stereo']]], + ['stereobm_143',['stereobm',['../classrtabmap_1_1StereoBM.html#a74970c7517eec90828dd03510c3e3db0',1,'rtabmap::StereoBM::StereoBM(const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1StereoBM.html#a33ff25f4afacce93201f509b78e5ca6f',1,'rtabmap::StereoBM::StereoBM(int blockSize, int numDisparities)']]], + ['stereocameramodel_144',['stereocameramodel',['../classrtabmap_1_1StereoCameraModel.html#a8e3a5c32e13727545f2d22dda05c96b0',1,'rtabmap::StereoCameraModel::StereoCameraModel(const std::string &name, double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))'],['../classrtabmap_1_1StereoCameraModel.html#a179ffcbc49ff3a281ef33cb4381e061c',1,'rtabmap::StereoCameraModel::StereoCameraModel()'],['../classrtabmap_1_1StereoCameraModel.html#a1887639053ef5c09c3f650b5a7f280d8',1,'rtabmap::StereoCameraModel::StereoCameraModel(const std::string &name, const cv::Size &imageSize1, const cv::Mat &K1, const cv::Mat &D1, const cv::Mat &R1, const cv::Mat &P1, const cv::Size &imageSize2, const cv::Mat &K2, const cv::Mat &D2, const cv::Mat &R2, const cv::Mat &P2, const cv::Mat &R, const cv::Mat &T, const cv::Mat &E, const cv::Mat &F, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0))'],['../classrtabmap_1_1StereoCameraModel.html#ae91c2717319f3cd7b6f40768e5adbb9f',1,'rtabmap::StereoCameraModel::StereoCameraModel(const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const cv::Mat &R=cv::Mat(), const cv::Mat &T=cv::Mat(), const cv::Mat &E=cv::Mat(), const cv::Mat &F=cv::Mat())'],['../classrtabmap_1_1StereoCameraModel.html#a76bab07a51033de989fc522064ede024',1,'rtabmap::StereoCameraModel::StereoCameraModel(const std::string &name, const CameraModel &leftCameraModel, const CameraModel &rightCameraModel, const Transform &extrinsics)'],['../classrtabmap_1_1StereoCameraModel.html#a0bdbbaa6e3ab315b0c5fce03247cea6c',1,'rtabmap::StereoCameraModel::StereoCameraModel(double fx, double fy, double cx, double cy, double baseline, const Transform &localTransform=Transform(0, 0, 1, 0, -1, 0, 0, 0, 0,-1, 0, 0), const cv::Size &imageSize=cv::Size(0, 0))']]], + ['stereocameramodels_145',['stereoCameraModels',['../classrtabmap_1_1SensorData.html#ab02d686ac7ef8b389655e913768b4d87',1,'rtabmap::SensorData']]], + ['stereodense_146',['StereoDense',['../classrtabmap_1_1StereoDense.html#a57f0c431678a2c9db1b5f7dd46cbf49f',1,'rtabmap::StereoDense']]], + ['stereoopticalflow_147',['StereoOpticalFlow',['../classrtabmap_1_1StereoOpticalFlow.html#a85173879ab911862112710fa1c94d8c5',1,'rtabmap::StereoOpticalFlow']]], + ['stereosgbm_148',['StereoSGBM',['../classrtabmap_1_1StereoSGBM.html#ab7f04d815235b6ab8178e8572602dcd1',1,'rtabmap::StereoSGBM']]], + ['stereotransform_149',['stereoTransform',['../classrtabmap_1_1StereoCameraModel.html#a506f83654d7f772a3743d24869c05742',1,'rtabmap::StereoCameraModel']]], + ['stop_150',['stop',['../classUTimer.html#a6a517d6f5f6e6c28b9392d04be22a320',1,'UTimer']]], + ['strategyname_151',['strategyName',['../classrtabmap_1_1RegistrationIcp.html#aef9238a37e0b70c9368b2e20cfe7df12',1,'rtabmap::RegistrationIcp']]], + ['subtractfiltering_152',['subtractfiltering',['../group__SubtractFiltering.html#ga69fb3ae457d192fd2c12631b0b5adf60',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZ >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#ga74d28899131bcb449b4d243a556c53aa',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gad92c79e9320d8eae62053d01bb8ba9df',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointNormal >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#ga49d4f22e20984d271bb4c3240018eeed',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#ga1879c56f82037789aed799c484fb883a',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gae14131d7ab09a650fb1411a8252e5526',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZ >::Ptr &subtractCloud, float radiusSearch, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gad2840d4057963b7cb29c02ee15fca895',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &subtractCloud, float radiusSearch, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#ga68cd453fcda96d2dba733650879f5d54',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::PointCloud< pcl::PointNormal >::Ptr &subtractCloud, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gaafd6fae4cac4f182d79e4507226165ef',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &subtractCloud, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)'],['../group__SubtractFiltering.html#gaf2bca73b4dc564bb6b2b7b779c718373',1,'rtabmap::util3d::subtractFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &subtractCloud, float radiusSearch, float maxAngle=M_PI/4.0f, int minNeighborsInRadius=1)']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_12.js b/preview/pr-1492/api/latest/search/functions_12.js new file mode 100644 index 00000000..c52a9441 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_12.js @@ -0,0 +1,39 @@ +var searchData= +[ + ['t_0',['T',['../classrtabmap_1_1StereoCameraModel.html#a82d60ddca8d0cdbe939b043ed02334b6',1,'rtabmap::StereoCameraModel']]], + ['takedata_1',['takeData',['../classrtabmap_1_1SensorCapture.html#aca06c645212a7501a246ea593406bcaf',1,'rtabmap::SensorCapture']]], + ['theta_2',['theta',['../classrtabmap_1_1Transform.html#acc7f19107da9b048a43497f93dd39582',1,'rtabmap::Transform']]], + ['to3dof_3',['to3DoF',['../classrtabmap_1_1Transform.html#a3a1b7b3d9f2db760b8eff9f3f90cd405',1,'rtabmap::Transform']]], + ['to4dof_4',['to4DoF',['../classrtabmap_1_1Transform.html#a9b0c23cbc2d0938b8da638930cb109de',1,'rtabmap::Transform']]], + ['tobool_5',['toBool',['../classUVariant.html#aef09280be48b33bcc066de2a636be31f',1,'UVariant']]], + ['tochar_6',['toChar',['../classUVariant.html#aa2efe71a7dbf953c26134281c815c489',1,'UVariant']]], + ['tochararray_7',['toCharArray',['../classUVariant.html#ae51189767aa02abd8a538b183f95f993',1,'UVariant']]], + ['todouble_8',['toDouble',['../classUVariant.html#a4c4ce1241a89ab635c0cdb04b3f3b0e9',1,'UVariant']]], + ['todoublearray_9',['toDoubleArray',['../classUVariant.html#a2b36afe6bf8f22f4e46d31596a2bbf74',1,'UVariant']]], + ['toenu_5fwgs84_10',['toENU_WGS84',['../classrtabmap_1_1GeodeticCoords.html#aedf48d8bfb2c8c181b1382919bf7b44c',1,'rtabmap::GeodeticCoords']]], + ['tofloat_11',['toFloat',['../classUVariant.html#a193ad2132d39551e780f813f38b174f1',1,'UVariant']]], + ['tofloatarray_12',['toFloatArray',['../classUVariant.html#acf89922efcc2fc0bea692623c8de4f8c',1,'UVariant']]], + ['togeocentric_5fwgs84_13',['toGeocentric_WGS84',['../classrtabmap_1_1GeodeticCoords.html#ae92c7ff2c0b5c5a41902bdfd589d5c10',1,'rtabmap::GeodeticCoords']]], + ['togeodeticcoords_14',['toGeodeticCoords',['../classrtabmap_1_1GPS.html#a2eeb2607721870789914f12688cbc375',1,'rtabmap::GPS']]], + ['toint_15',['toInt',['../classUVariant.html#aad652810c6faa5e0497049157b5b2a10',1,'UVariant']]], + ['tointarray_16',['toIntArray',['../classUVariant.html#a8ee57d98adc4f8c2798c3ba1b86f54b1',1,'UVariant']]], + ['toshort_17',['toShort',['../classUVariant.html#acd84cd8b255640810073c10331cf13b6',1,'UVariant']]], + ['toshortarray_18',['toShortArray',['../classUVariant.html#abae96c1d3abc90aea321a460d63250cb',1,'UVariant']]], + ['tostr_19',['toStr',['../classUVariant.html#a67cc47b07b28108ae018790073541438',1,'UVariant']]], + ['touchar_20',['toUChar',['../classUVariant.html#a1791fbefb946a8803f87f5049135eea7',1,'UVariant']]], + ['touchararray_21',['toUCharArray',['../classUVariant.html#ab7346a22ad30fb42e3b0e1750f6ba8e6',1,'UVariant']]], + ['touint_22',['toUInt',['../classUVariant.html#aa129ebd6447838c1584145e843e6c4e8',1,'UVariant']]], + ['touintarray_23',['toUIntArray',['../classUVariant.html#ad0aa83f26922b59194e69312ee771173',1,'UVariant']]], + ['toushort_24',['toUShort',['../classUVariant.html#a5e6282c19acb4de5a29f55143d451f60',1,'UVariant']]], + ['toushortarray_25',['toUShortArray',['../classUVariant.html#a40b1bccc560ab55190d3608ea0115bb2',1,'UVariant']]], + ['transform_26',['transform',['../classrtabmap_1_1Transform.html#ac3654d3f6802d4b0c17b6110d1eda71a',1,'rtabmap::Transform::Transform()'],['../classrtabmap_1_1Transform.html#af434ccbc426920a1b35ecbf4eec226e7',1,'rtabmap::Transform::Transform(float x, float y, float theta)'],['../classrtabmap_1_1Transform.html#af471c17a5e411db55813b766727830f4',1,'rtabmap::Transform::Transform(float x, float y, float z, float qx, float qy, float qz, float qw)'],['../classrtabmap_1_1Transform.html#a82b851897ce2ca729d62fb92dcc48b9f',1,'rtabmap::Transform::Transform(const cv::Mat &transformationMatrix)'],['../classrtabmap_1_1Transform.html#a9b89b8bbe9cd75986bcb1ba6ceb5b9cd',1,'rtabmap::Transform::Transform(float r11, float r12, float r13, float o14, float r21, float r22, float r23, float o24, float r31, float r32, float r33, float o34)'],['../classrtabmap_1_1Transform.html#a1023adcd1e5d65647e6eda50160c3474',1,'rtabmap::Transform::Transform(float x, float y, float z, float roll, float pitch, float yaw)']]], + ['transformpoint_27',['transformpoint',['../group__TransformPoint.html#ga7bfb9d7e10b81cd3b5e3f164081388be',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZI &pt, const Transform &transform)'],['../group__TransformPoint.html#ga2ad96e68847f315e6d5df18d3219f308',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZ &pt, const Transform &transform)'],['../group__TransformPoint.html#ga4910f2b937d405bd529772c33d477ca4',1,'rtabmap::util3d::transformPoint(const cv::Point3d &pt, const Transform &transform)'],['../group__TransformPoint.html#ga88b4f827a105254bf08bdae73cebdbe9',1,'rtabmap::util3d::transformPoint(const cv::Point3f &pt, const Transform &transform)'],['../group__TransformPoint.html#ga90e6ffecb159bdff5afc75e16ab1fe19',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZRGB &pt, const Transform &transform)'],['../group__TransformPoint.html#gad98c1e7ba04edb9a57c5557d88360afd',1,'rtabmap::util3d::transformPoint(const pcl::PointNormal &point, const Transform &transform)'],['../group__TransformPoint.html#ga8cf51597b74c589365d2e0e2272bea70',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZRGBNormal &point, const Transform &transform)'],['../group__TransformPoint.html#gae272348c0353fe96683680b981a6b0fa',1,'rtabmap::util3d::transformPoint(const pcl::PointXYZINormal &point, const Transform &transform)']]], + ['transformpointcloud_28',['transformpointcloud',['../group__TransformPointcloud.html#ga310e525344813377f2d470d47b7c4d51',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga18eb2c9ec062b5453bf7c97128d89018',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga7a573f91887b29ec4ff2ef6355df4473',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga46b86abad0f4aa2ba7f191da0e07ba69',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga1387b7a1d5280ed3596331f93fc56484',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#gac60701fa37d61f3cbe6f462da7576e73',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const Transform &transform)'],['../group__TransformPointcloud.html#ga59e54f906ba844eb8780946e57b0e271',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#ga2a621fc8ab625cd4003b4f26e0ce3b52',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#ga797f466a165622e08dda14cdaccb5df6',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#ga00514f671b8dbcc343ff481aa7c36367',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#gac7c95eba604afe62ab897df62d862220',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)'],['../group__TransformPointcloud.html#ga47713c64205eb83460cfeec9a7bb6659',1,'rtabmap::util3d::transformPointCloud(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &transform)']]], + ['translation_29',['translation',['../classrtabmap_1_1Transform.html#aeeb0bbe0e84a9e46f63086c3ff4d4e0e',1,'rtabmap::Transform']]], + ['translationmatrix_30',['translationMatrix',['../classrtabmap_1_1Transform.html#a6a7bb81847554509d1128238860c047e',1,'rtabmap::Transform']]], + ['transvariance_31',['transVariance',['../classrtabmap_1_1Link.html#a3c4344c01b4f32a8b4a957b979fea84e',1,'rtabmap::Link']]], + ['triggernewmap_32',['triggerNewMap',['../classrtabmap_1_1Rtabmap.html#a4ab6de2be120bbda75577911d52346d4',1,'rtabmap::Rtabmap']]], + ['tx_33',['Tx',['../classrtabmap_1_1CameraModel.html#a6f6dc18af13a777e89a75725ef3e8ab4',1,'rtabmap::CameraModel']]], + ['type_34',['type',['../classUVariant.html#a4fa9e6607b2d99ba03d09bd39f42da4f',1,'UVariant::type()'],['../classrtabmap_1_1OptimizerTORO.html#a965efb877ac5edd3b6cda43983096a64',1,'rtabmap::OptimizerTORO::type()'],['../classrtabmap_1_1OptimizerGTSAM.html#a422fe2960e4b71832e2108d5ab2aee46',1,'rtabmap::OptimizerGTSAM::type()'],['../classrtabmap_1_1OptimizerG2O.html#af69edaad65a7f7f936fa99f8c617e10b',1,'rtabmap::OptimizerG2O::type()'],['../classrtabmap_1_1OptimizerCVSBA.html#afbf58e60900671630e0974a13e49b2b0',1,'rtabmap::OptimizerCVSBA::type()'],['../classrtabmap_1_1OptimizerCeres.html#ad6d6c0a0cdbea0ee5082d3aaa94d8e7a',1,'rtabmap::OptimizerCeres::type()'],['../classrtabmap_1_1Optimizer.html#aa2be82e1f986b1beae103148be7cd520',1,'rtabmap::Optimizer::type()'],['../classrtabmap_1_1IMUFilter.html#ab6dc95a6f031745a33599646e75ff9f6',1,'rtabmap::IMUFilter::type()'],['../classrtabmap_1_1EnvSensor.html#abae79475fe7e568269a4b4ef4c5a7d24',1,'rtabmap::EnvSensor::type()']]], + ['typename_35',['typename',['../classrtabmap_1_1Link.html#a1fb9569f6435b5a1c800a935b08f0159',1,'rtabmap::Link::typeName()'],['../classrtabmap_1_1Feature2D.html#a98050ef4da598e5b35bc32317bc58b84',1,'rtabmap::Feature2D::typeName()']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_13.js b/preview/pr-1492/api/latest/search/functions_13.js new file mode 100644 index 00000000..2c445097 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_13.js @@ -0,0 +1,92 @@ +var searchData= +[ + ['uappend_0',['uAppend',['../UStl_8h.html#a472c2e123cd6eb04165b2d3461a634d3',1,'UStl.h']]], + ['uascii2hex_1',['uAscii2Hex',['../UConversion_8h.html#a6c8b49faa5c59294f350dda7152f66a4',1,'UConversion.h']]], + ['ubool2str_2',['uBool2Str',['../UConversion_8h.html#ad80132c4fed005af5c96b39fca453ce6',1,'UConversion.h']]], + ['ubytes2hex_3',['uBytes2Hex',['../UConversion_8h.html#a51c595b50bcb99186160a9e18df13c60',1,'UConversion.h']]], + ['ubytes2str_4',['uBytes2Str',['../UConversion_8h.html#a00c1115896f3da7c7c025ccbe651c0a3',1,'UConversion.h']]], + ['ucontains_5',['ucontains',['../UStl_8h.html#a4cad7064de642559152c873f2ca9a471',1,'uContains(const std::list< V > &list, const V &value): UStl.h'],['../UStl_8h.html#a601d3abba756f3a7a666d463080d159c',1,'uContains(const std::map< K, V > &map, const K &key): UStl.h'],['../UStl_8h.html#a078a72c8c7cf5821d67140f3d38f27e0',1,'uContains(const std::multimap< K, V > &map, const K &key): UStl.h']]], + ['udestroyer_6',['UDestroyer',['../classUDestroyer.html#abbc66cb8c688f1c93e87ea9aa46e58ee',1,'UDestroyer']]], + ['udirectory_7',['UDirectory',['../classUDirectory.html#ac2063a33161b07a0c9e841cc1ee5fcaf',1,'UDirectory']]], + ['uevent_8',['UEvent',['../classUEvent.html#a662b610c2e9ebaae5e91ed5ea1dcef34',1,'UEvent']]], + ['ueventshandler_9',['UEventsHandler',['../classUEventsHandler.html#abfe2ba3d1fb92e59aff1978cbc21d134',1,'UEventsHandler']]], + ['ufile_10',['UFile',['../classUFile.html#a19572c749b383b5fc15aca3615cdc682',1,'UFile']]], + ['uformat_11',['uFormat',['../UConversion_8h.html#a59ad5e2b3368d3dd19d73a24159388ce',1,'UConversion.h']]], + ['uformatv_12',['uFormatv',['../UConversion_8h.html#a9b62bc055b0d262a21af6b9e00b6db5f',1,'UConversion.h']]], + ['uhamming_13',['uHamming',['../UMath_8h.html#add815f68a7ad0f18c667311826a85a52',1,'UMath.h']]], + ['uhex2ascii_14',['uHex2Ascii',['../UConversion_8h.html#a03dfb0596b84e5673061561a1388b4ee',1,'UConversion.h']]], + ['uhex2bytes_15',['uhex2bytes',['../UConversion_8h.html#ab4e6aa72e322c619e4bbaf5b98dba9d3',1,'uHex2Bytes(const char *hex, int hexLen): UConversion.h'],['../UConversion_8h.html#aafb2c6939780df0241eb35ab4fc8b91b',1,'uHex2Bytes(const std::string &hex): UConversion.h']]], + ['uhex2str_16',['uHex2Str',['../UConversion_8h.html#a6d66453336bccd040539ac9905a9c409',1,'UConversion.h']]], + ['uindexof_17',['uIndexOf',['../UStl_8h.html#ad3918a32500de71ba8bb7aab99dccf46',1,'UStl.h']]], + ['uinsert_18',['uinsert',['../UStl_8h.html#af516369e4f6b3977e543dfadbc50dc31',1,'uInsert(std::map< K, V > &map, const std::map< K, V > &items): UStl.h'],['../UStl_8h.html#ac9c9d1520c7facb601ae56cab3762b41',1,'uInsert(std::map< K, V > &map, const std::pair< K, V > &pair): UStl.h']]], + ['uisdigit_19',['uIsDigit',['../UStl_8h.html#ad24f845084c84b60614bb789e0d1966a',1,'UStl.h']]], + ['uisfinite_20',['uIsFinite',['../UMath_8h.html#abc9c1a676bf1b33a7d2bc0452a04fed3',1,'UMath.h']]], + ['uisinteger_21',['uIsInteger',['../UStl_8h.html#afa021f46be20f6e6c2e5210eced0ae0e',1,'UStl.h']]], + ['uisnan_22',['uIsNan',['../UMath_8h.html#a0ce262f6e3a80f7efafc73052600d309',1,'UMath.h']]], + ['uisnumber_23',['uIsNumber',['../UStl_8h.html#a5ed24437c4b893ed09886ea64ea33ba0',1,'UStl.h']]], + ['uiteratorat_24',['uiteratorat',['../UStl_8h.html#aee9c8ca5f61ce7b0d778a092e4dd7d16',1,'uIteratorAt(std::vector< V > &v, const unsigned int &pos): UStl.h'],['../UStl_8h.html#aa8bd447989a2ac6dbd4537cabdb9b8a2',1,'uIteratorAt(std::list< V > &list, const unsigned int &pos): UStl.h'],['../UStl_8h.html#a89bf42f074b0882296f02e7b7e7f03ce',1,'uIteratorAt(const std::list< V > &list, const unsigned int &pos): UStl.h'],['../UStl_8h.html#a14d41e1a496b95a083f98d1b6c3d829b',1,'uIteratorAt(std::set< V > &set, const unsigned int &pos): UStl.h'],['../UStl_8h.html#a06a98a13ef2041e0553e6c8a61c81b9e',1,'uIteratorAt(const std::set< V > &set, const unsigned int &pos): UStl.h'],['../UStl_8h.html#aca319f475b50c21cd5a1ad7e13b45d68',1,'uIteratorAt(const std::vector< V > &v, const unsigned int &pos): UStl.h']]], + ['ujoin_25',['uJoin',['../UStl_8h.html#a2a1ab992e6cc8d3057000847eea5b2e0',1,'UStl.h']]], + ['ukeys_26',['ukeys',['../UStl_8h.html#aa67c880cc8f27c9270c7bd4bdce62ca7',1,'uKeys(const std::multimap< K, V > &mm): UStl.h'],['../UStl_8h.html#a1f58dc31a71daf05032ea06518098021',1,'uKeys(const std::map< K, V > &m): UStl.h']]], + ['ukeyslist_27',['ukeyslist',['../UStl_8h.html#a07de105144c60cbf3d96725c2587ab61',1,'uKeysList(const std::map< K, V > &m): UStl.h'],['../UStl_8h.html#ae6db6e3e229492a7d62f310705eda986',1,'uKeysList(const std::multimap< K, V > &mm): UStl.h']]], + ['ukeysset_28',['uKeysSet',['../UStl_8h.html#adc7941aec77b49687c0cb79be23eb539',1,'UStl.h']]], + ['ulisttovector_29',['uListToVector',['../UStl_8h.html#a85cf086e57dd289775cf2fd7c82a6ffe',1,'UStl.h']]], + ['ulocalmaxima_30',['ulocalmaxima',['../UMath_8h.html#a2feb416e779b88c4a6a849d609222c99',1,'uLocalMaxima(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#a321ec84227fff8bf26aa85b0d3be5bb7',1,'uLocalMaxima(const std::vector< T > &v): UMath.h']]], + ['ulogevent_31',['ULogEvent',['../classULogEvent.html#aa403fb381a5bfd2986f08c10f0b1b24e',1,'ULogEvent']]], + ['umax_32',['umax',['../UMath_8h.html#a387b43468da220548d025010be075476',1,'uMax(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#a0aef304a0891fafcef581dcfbf3ac792',1,'uMax(const std::vector< T > &v): UMath.h'],['../UMath_8h.html#a1362990d0ce7f09ef735292cc480fa23',1,'uMax(const T *v, unsigned int size, unsigned int &index): UMath.h'],['../UMath_8h.html#a429cc62f1ca3c7a00e0062301ae60bcc',1,'uMax(const std::vector< T > &v, unsigned int &index): UMath.h']]], + ['umax3_33',['uMax3',['../UMath_8h.html#a601a7e18acb1512a60cd8ef248271c85',1,'UMath.h']]], + ['umean_34',['umean',['../UMath_8h.html#a7376638ab6047306c66a357153a47196',1,'uMean(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#aa4e1e6cf3df49d68d95bbe9981d1600e',1,'uMean(const std::list< T > &list): UMath.h'],['../UMath_8h.html#a8c8cd8ce7b3d8f32847bb57e9f73a625',1,'uMean(const std::vector< T > &v): UMath.h']]], + ['umeansquarederror_35',['umeansquarederror',['../UMath_8h.html#a28770817787def2a9165ed070fa17a54',1,'uMeanSquaredError(const T *x, unsigned int sizeX, const T *y, unsigned int sizeY): UMath.h'],['../UMath_8h.html#a319bcffddfeab66d5cbb729fa56dd361',1,'uMeanSquaredError(const std::vector< T > &x, const std::vector< T > &y): UMath.h']]], + ['umin_36',['umin',['../UMath_8h.html#aeb0652d64e72d115d751f8186ac9016e',1,'uMin(const std::vector< T > &v): UMath.h'],['../UMath_8h.html#a68e11ea992520b98d4e688f8853b5dc4',1,'uMin(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#a99bd3bc365630c1760432cf810ea5831',1,'uMin(const std::vector< T > &v, unsigned int &index): UMath.h'],['../UMath_8h.html#aa37a66d04825a8834648dbe931bd57e6',1,'uMin(const T *v, unsigned int size, unsigned int &index): UMath.h']]], + ['umin3_37',['uMin3',['../UMath_8h.html#ad653f26bbf08ce113b5a69a49bb4e41d',1,'UMath.h']]], + ['uminmax_38',['uminmax',['../UMath_8h.html#a23b93249fbe3eebc9d95104f4f8cafff',1,'uMinMax(const std::vector< T > &v, T &min, T &max, unsigned int &indexMin, unsigned int &indexMax): UMath.h'],['../UMath_8h.html#af9bfdafb6da16f9c6f4691a6d951538b',1,'uMinMax(const T *v, unsigned int size, T &min, T &max, unsigned int &indexMin, unsigned int &indexMax): UMath.h'],['../UMath_8h.html#a9cc051a73d402e69919d8fcea51c3098',1,'uMinMax(const T *v, unsigned int size, T &min, T &max): UMath.h'],['../UMath_8h.html#af5f7ebda9d440043cd3c57037e81318b',1,'uMinMax(const std::vector< T > &v, T &min, T &max): UMath.h']]], + ['umultimaptomap_39',['uMultimapToMap',['../UStl_8h.html#af9a778651477107bcba607087c3e02ea',1,'UStl.h']]], + ['umultimaptomapunique_40',['uMultimapToMapUnique',['../UStl_8h.html#ac65e613c42858a01f5d4f29446f53cd6',1,'UStl.h']]], + ['umutex_41',['UMutex',['../classUMutex.html#a292198fffdbd7d0d5a550946f156f70e',1,'UMutex']]], + ['uncompressdata_42',['uncompressdata',['../classrtabmap_1_1SensorData.html#aa356c9d5e9e7ea55ccdbe99c215bcb52',1,'rtabmap::SensorData::uncompressData()'],['../classrtabmap_1_1SensorData.html#a8c3364f43f7c0a57261720408a088158',1,'rtabmap::SensorData::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)'],['../namespacertabmap.html#a696fffaafe542bfb49fc9ab0da2c66b9',1,'rtabmap::uncompressData(const cv::Mat &bytes)'],['../namespacertabmap.html#aa15a9e946d6571254fc3c808b624e6cd',1,'rtabmap::uncompressData(const std::vector< unsigned char > &bytes)'],['../namespacertabmap.html#a5b02b6a5cd3c620aff7e76c05f78b20f',1,'rtabmap::uncompressData(const unsigned char *bytes, unsigned long size)']]], + ['uncompressdataconst_43',['uncompressDataConst',['../classrtabmap_1_1SensorData.html#a2e0be45871fa8dbce1c3cf727953358f',1,'rtabmap::SensorData']]], + ['uncompressimage_44',['uncompressimage',['../namespacertabmap.html#a462f181a147c9f5315f70b0cd89210e5',1,'rtabmap::uncompressImage(const cv::Mat &bytes)'],['../namespacertabmap.html#af56ea8b86f7a873959588d35a7ede187',1,'rtabmap::uncompressImage(const std::vector< unsigned char > &bytes)']]], + ['uncompressstring_45',['uncompressString',['../namespacertabmap.html#a811701fc1452e49e82fcab8d4476832f',1,'rtabmap']]], + ['uncompressuserdata_46',['uncompressUserData',['../classrtabmap_1_1Link.html#adb075101cafb535fc4a9b74f7afae521',1,'rtabmap::Link']]], + ['uncompressuserdataconst_47',['uncompressUserDataConst',['../classrtabmap_1_1Link.html#ac425a90800494da64512011315c47e62',1,'rtabmap::Link']]], + ['unlock_48',['unlock',['../classUMutex.html#a4c5b4e04ad4e2f0eda2e8d4325d45d38',1,'UMutex']]], + ['unorm_49',['unorm',['../UMath_8h.html#ab5e611c29307d8733cfaebc68bed1ac6',1,'uNorm(const std::vector< T > &v): UMath.h'],['../UMath_8h.html#abe92bd5cba3860759c40c322ab1ac995',1,'uNorm(const T &x1, const T &x2): UMath.h'],['../UMath_8h.html#a6b6fbb2032ce05eeacdb1b0bc87627e8',1,'uNorm(const T &x1, const T &x2, const T &x3): UMath.h']]], + ['unormalize_50',['uNormalize',['../UMath_8h.html#a2f843f6f6bf0bd59b527aaa8c4731612',1,'UMath.h']]], + ['unormsquared_51',['unormsquared',['../UMath_8h.html#a0a3b6871504f5a745f8769492f45871c',1,'uNormSquared(const T &x1, const T &x2, const T &x3): UMath.h'],['../UMath_8h.html#aea5fd5d0bd9afdb11c765584c89a5f8f',1,'uNormSquared(const T &x1, const T &x2): UMath.h'],['../UMath_8h.html#aeed14782b35224f70db6b5435dce06a1',1,'uNormSquared(const std::vector< T > &v): UMath.h']]], + ['unumber2str_52',['unumber2str',['../UConversion_8h.html#a863753727325d89d62a941b1e28ec080',1,'uNumber2Str(double number, int precision=6, bool fixed=false): UConversion.h'],['../UConversion_8h.html#a7d269614a35d90f2ee7eb1204bca0856',1,'uNumber2Str(float number, int precision=6, bool fixed=false): UConversion.h'],['../UConversion_8h.html#ab3a674443d1d17328488398497380eb0',1,'uNumber2Str(int number): UConversion.h'],['../UConversion_8h.html#aa2bbc65658f335e92631e9f1d091a698',1,'uNumber2Str(unsigned int number): UConversion.h']]], + ['uobjdeletionthread_53',['UObjDeletionThread',['../classUObjDeletionThread.html#a860499bd0467d2cc0fb467b124d085e0',1,'UObjDeletionThread']]], + ['update_54',['update',['../classrtabmap_1_1GlobalMap.html#aa21a1e3baba94ded5663a8057a3b8cd6',1,'rtabmap::GlobalMap::update()'],['../classUDirectory.html#ab738cea12207aea77c7a0581c57d6008',1,'UDirectory::update()'],['../classrtabmap_1_1VWDictionary.html#a844ae27eb6d1f0674c8f7777451812c5',1,'rtabmap::VWDictionary::update()'],['../classrtabmap_1_1Memory.html#aae43fd080c6bc9773fa58f1c36e6684f',1,'rtabmap::Memory::update(const SensorData &data, const Transform &pose, const cv::Mat &covariance, const std::vector< float > &velocity=std::vector< float >(), Statistics *stats=0)'],['../classrtabmap_1_1Memory.html#a3c029b2788f3b599480d5150120a6bee',1,'rtabmap::Memory::update(const SensorData &data, Statistics *stats=0)'],['../classrtabmap_1_1IMUFilter.html#ab02c81af3543cfb1d53b4a0b064a0363',1,'rtabmap::IMUFilter::update()']]], + ['updateage_55',['updateAge',['../classrtabmap_1_1Memory.html#a76fd8c93220c16fac5843ccc2c0bec3c',1,'rtabmap::Memory']]], + ['updatecalibration_56',['updateCalibration',['../classrtabmap_1_1DBDriver.html#a6d59931a9496cf1b23568f79fc421cc1',1,'rtabmap::DBDriver']]], + ['updatedepthimage_57',['updateDepthImage',['../classrtabmap_1_1DBDriver.html#a3a02d595356e2dd0ed8b8933a6c4e811',1,'rtabmap::DBDriver']]], + ['updatelaserscan_58',['updateLaserScan',['../classrtabmap_1_1DBDriver.html#a7d167e53d447d77dd3fe35665f8a661b',1,'rtabmap::DBDriver']]], + ['updatelink_59',['updatelink',['../classrtabmap_1_1DBDriver.html#a94eb69c07a44343c008654b1401dce80',1,'rtabmap::DBDriver::updateLink()'],['../classrtabmap_1_1Memory.html#a7c7f80937a35204cb5b44faec8e99736',1,'rtabmap::Memory::updateLink()']]], + ['updateoccupancygrid_60',['updateOccupancyGrid',['../classrtabmap_1_1DBDriver.html#a2f5e8e0b367e49cfbba7c96b28306a61',1,'rtabmap::DBDriver']]], + ['uprocessinfo_61',['UProcessInfo',['../classUProcessInfo.html#a9786bfe4f14bb80ddf206904f12d8f9b',1,'UProcessInfo']]], + ['ureplacechar_62',['ureplacechar',['../UConversion_8h.html#ac17caccd78f21956b7ddb78aa0c0c438',1,'uReplaceChar(const std::string &str, char before, char after): UConversion.h'],['../UConversion_8h.html#a214297200ebabb7a349fb203103d72ef',1,'uReplaceChar(const std::string &str, char before, const std::string &after): UConversion.h']]], + ['usemaphore_63',['USemaphore',['../classUSemaphore.html#ad991738e68e0a2baaec46ab27296cbe6',1,'USemaphore']]], + ['usign_64',['uSign',['../UMath_8h.html#a6e100ed2031a529679a93b9b4bf818af',1,'UMath.h']]], + ['usplit_65',['uSplit',['../UStl_8h.html#ab1862437019327ce8419569e3c2ea90f',1,'UStl.h']]], + ['usplitnumchar_66',['uSplitNumChar',['../UStl_8h.html#a4045d74e1a84cde1489a754375c1d55e',1,'UStl.h']]], + ['ustr2bool_67',['uStr2Bool',['../UConversion_8h.html#abb8205ea44ccbebab8cf064fed0c7c1b',1,'UConversion.h']]], + ['ustr2bytes_68',['uStr2Bytes',['../UConversion_8h.html#aa320ef94bde5dd6f9e6ebdb986fc5ca6',1,'UConversion.h']]], + ['ustr2double_69',['uStr2Double',['../UConversion_8h.html#a9e8508b95f98ab3da0d942ee7d6b2105',1,'UConversion.h']]], + ['ustr2float_70',['uStr2Float',['../UConversion_8h.html#aaa5c2c8be40ec84e20bc6967b6b9b46a',1,'UConversion.h']]], + ['ustr2int_71',['uStr2Int',['../UConversion_8h.html#a3cd287c149717691ee36fcd593940f68',1,'UConversion.h']]], + ['ustrcontains_72',['uStrContains',['../UStl_8h.html#ab4e2c55d7930e99514a2315a2c6b4f82',1,'UStl.h']]], + ['ustrnumcmp_73',['uStrNumCmp',['../UStl_8h.html#af48fdad882d4429e4044372589503da1',1,'UStl.h']]], + ['usum_74',['usum',['../UMath_8h.html#a81a1c24c0229e6c4dc8d8e09497ad114',1,'uSum(const std::list< T > &list): UMath.h'],['../UMath_8h.html#a86599e95ecdc91ce2d9497985d5d642b',1,'uSum(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#af15f0fa694931f0f99ba640d52539b09',1,'uSum(const std::vector< T > &v): UMath.h']]], + ['usumsquared_75',['usumsquared',['../UMath_8h.html#aeb6a6517666687e509617e6bfaf274d3',1,'uSumSquared(const T *v, unsigned int size, T subtract=T()): UMath.h'],['../UMath_8h.html#a94be0f1c509db2f294048e6d5b16a522',1,'uSumSquared(const std::vector< T > &v, T subtract=T()): UMath.h']]], + ['utake_76',['uTake',['../UStl_8h.html#a6242bd5879bd7f06b8de6498650aa3b7',1,'UStl.h']]], + ['uthread_77',['UThread',['../classUThread.html#a05a92f95e2a8900f27b09ddf907b97be',1,'UThread']]], + ['utolowercase_78',['uToLowerCase',['../UConversion_8h.html#a426b88c678e06f77912c006ba02805ec',1,'UConversion.h']]], + ['utouppercase_79',['uToUpperCase',['../UConversion_8h.html#adc98c4d87bc7c13b7fc5b5504f457105',1,'UConversion.h']]], + ['uuniquekeys_80',['uUniqueKeys',['../UStl_8h.html#a62335030b4c0d80f80e7c4a21721c05e',1,'UStl.h']]], + ['uvalue_81',['uValue',['../UStl_8h.html#a155cd26667d2f88ee05dd3d819ae8182',1,'UStl.h']]], + ['uvalueat_82',['uvalueat',['../UStl_8h.html#af9a13d96ccaf6094128eb350d0253d22',1,'uValueAt(const std::list< V > &list, const unsigned int &pos): UStl.h'],['../UStl_8h.html#a27a0f94be07c53df9827b082eb107337',1,'uValueAt(std::list< V > &list, const unsigned int &pos): UStl.h']]], + ['uvalues_83',['uvalues',['../UStl_8h.html#a745b929c605a3d6b0014dff0c9c2a314',1,'uValues(const std::multimap< K, V > &mm): UStl.h'],['../UStl_8h.html#a3514dc64eabe675042a4d1b7d8770910',1,'uValues(const std::multimap< K, V > &mm, const K &key): UStl.h'],['../UStl_8h.html#a081a7dd08a9962ee1651eb4ddb01729e',1,'uValues(const std::map< K, V > &m): UStl.h']]], + ['uvalueslist_84',['uvalueslist',['../UStl_8h.html#a9419324b5c47549d954313582e69dc5c',1,'uValuesList(const std::multimap< K, V > &mm): UStl.h'],['../UStl_8h.html#ab5ea404864ed672cca3a05435786f4be',1,'uValuesList(const std::map< K, V > &m): UStl.h']]], + ['uvariance_85',['uvariance',['../UMath_8h.html#add45b750bab7251ba196079289f17d7d',1,'uVariance(const T *v, unsigned int size, T meanV): UMath.h'],['../UMath_8h.html#aa6ea127b567072434a5616bcc1c1f6e3',1,'uVariance(const std::list< T > &list, const T &m): UMath.h'],['../UMath_8h.html#a0aa8de7d20731bcae07d956256e293f6',1,'uVariance(const T *v, unsigned int size): UMath.h'],['../UMath_8h.html#a8d443d065900ca7096d08c9431fef71f',1,'uVariance(const std::vector< T > &v, const T &m): UMath.h']]], + ['uvariant_86',['uvariant',['../classUVariant.html#a0c4434b8a0e3d8d5a13967196ef75c9d',1,'UVariant::UVariant(const char *value)'],['../classUVariant.html#a98f1bc68af62d433f2946cab87fc520c',1,'UVariant::UVariant(const bool &value)'],['../classUVariant.html#a17a521fb10da7564bf5104c717ea977c',1,'UVariant::UVariant(const double &value)'],['../classUVariant.html#a0f29e416edccd2af78192288bb7ca884',1,'UVariant::UVariant(const std::string &value)'],['../classUVariant.html#a77de7639a21b4002f6c4c8f765db9748',1,'UVariant::UVariant(const std::vector< signed char > &value)'],['../classUVariant.html#a709722d8603fdb5208f5853073c0557b',1,'UVariant::UVariant(const std::vector< unsigned char > &value)'],['../classUVariant.html#a7ecbf63121fc31f094534293a05af6f3',1,'UVariant::UVariant(const std::vector< short > &value)'],['../classUVariant.html#a66b347ecdbdcd3b9bb6675d3a5040e26',1,'UVariant::UVariant(const std::vector< unsigned short > &value)'],['../classUVariant.html#a2054869e20d561d129fa2cfbd0dbe923',1,'UVariant::UVariant(const std::vector< int > &value)'],['../classUVariant.html#ad71bbca096fb06dfe1009105c6546c78',1,'UVariant::UVariant(const std::vector< unsigned int > &value)'],['../classUVariant.html#abb4dcb9be13b81f672c2012e09234be9',1,'UVariant::UVariant(const std::vector< float > &value)'],['../classUVariant.html#ad5517ddcc64a521f2bb6079d568a6029',1,'UVariant::UVariant(const std::vector< double > &value)'],['../classUVariant.html#aae15560cd7d827b4df20ca93e73e488d',1,'UVariant::UVariant(const float &value)'],['../classUVariant.html#a30476f11f550fdb86f97f30f9a34d042',1,'UVariant::UVariant(const unsigned int &value)'],['../classUVariant.html#a896511df83bbcc6d2892902b83495bae',1,'UVariant::UVariant(const int &value)'],['../classUVariant.html#a3f893e4ec4714cb594e88eb6ee421a0b',1,'UVariant::UVariant(const unsigned short &value)'],['../classUVariant.html#a5253c21485672e2e20149db1661ffc64',1,'UVariant::UVariant(const short &value)'],['../classUVariant.html#a66f79ef197d7a9fb87781073b44ed426',1,'UVariant::UVariant(const unsigned char &value)'],['../classUVariant.html#ae0939524a0c68004804381492aaab285',1,'UVariant::UVariant(const signed char &value)'],['../classUVariant.html#af210833caf9715d7678fb6d64dddf599',1,'UVariant::UVariant()']]], + ['uvectortolist_87',['uVectorToList',['../UStl_8h.html#a5a5fb7b34b8c3adb63d641358b7a7e1b',1,'UStl.h']]], + ['uxmatch_88',['uxmatch',['../UMath_8h.html#a913829c5228fabff88e4918111c1d424',1,'uXMatch(const T *vA, const T *vB, unsigned int sizeA, unsigned int sizeB, UXMatchMethod method): UMath.h'],['../UMath_8h.html#a4694c7d40749b5cb09c596d232720192',1,'uXMatch(const std::vector< T > &vA, const std::vector< T > &vB, UXMatchMethod method): UMath.h'],['../UMath_8h.html#ac616ce0471d2e35fafd59d88021ccab3',1,'uXMatch(const T *vA, const T *vB, unsigned int sizeA, unsigned int sizeB, unsigned int index, UXMatchMethod method): UMath.h'],['../UMath_8h.html#a726f4662efa078be30f5320bbb994c7a',1,'uXMatch(const std::vector< T > &vA, const std::vector< T > &vB, unsigned int index, UXMatchMethod method): UMath.h']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_14.js b/preview/pr-1492/api/latest/search/functions_14.js new file mode 100644 index 00000000..b65459de --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_14.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['value_0',['value',['../classUSemaphore.html#a840fadefd8bc873c8bdf34c90d180a3b',1,'USemaphore::value()'],['../classrtabmap_1_1EnvSensor.html#a27b343c9be68fd326c10157102bb750f',1,'rtabmap::EnvSensor::value()']]], + ['verticalfov_1',['verticalFOV',['../classrtabmap_1_1CameraModel.html#af6226e43afcb69259b137bbe50099537',1,'rtabmap::CameraModel']]], + ['visualword_2',['VisualWord',['../classrtabmap_1_1VisualWord.html#a64ce7c97214265e24e00e3888b85f967',1,'rtabmap::VisualWord']]], + ['voxelize_3',['voxelize',['../group__VoxelFiltering.html#gac6809e08656312d793ce34e828e33998',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#ga751ff8adfdf8e6f824a7bef0d4630044',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#gab974887ed7faf7685d6c8c181827b2c2',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#ga8fce5075a28203045c3865b1d068c084',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#ga3ea1e68d63d45c84d2c3b6b3bcac4653',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#gaf5726b462426b56425604343e51a79c3',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float voxelSize)'],['../group__VoxelFiltering.html#gac5158ba02fc61bfa503967ddd5ec319d',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#gaebeee3702499e5f8d692ecd0bc48029b',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#gabf0201c1253022d7ce8278fc44998530',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#gab2a9294812a8c0fcaed92d0f119eaa31',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#ga94af1db82b1faffff875a9902d44285b',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)'],['../group__VoxelFiltering.html#gad8d88a06174857cf53b1dc2cf2310d89',1,'rtabmap::util3d::voxelize(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)']]], + ['vwdictionary_4',['VWDictionary',['../classrtabmap_1_1VWDictionary.html#ada3980b520d8411a1ebb3ce14e2f8734',1,'rtabmap::VWDictionary']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_15.js b/preview/pr-1492/api/latest/search/functions_15.js new file mode 100644 index 00000000..c1a897d4 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_15.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['weights_0',['weights',['../classrtabmap_1_1Statistics.html#ab29fce77b8debf381356e27ac039fafc',1,'rtabmap::Statistics']]], + ['winsize_1',['winSize',['../classrtabmap_1_1Stereo.html#a5474ebbc178bcc29ebaff3d9d4e22e54',1,'rtabmap::Stereo']]], + ['winssd_2',['winSSD',['../classrtabmap_1_1Stereo.html#aed372a471e6d3ea72713e239709da978',1,'rtabmap::Stereo']]], + ['wmstate_3',['wmState',['../classrtabmap_1_1Statistics.html#a0b0bb69d788a142a7b51ae2e916798b6',1,'rtabmap::Statistics']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_16.js b/preview/pr-1492/api/latest/search/functions_16.js new file mode 100644 index 00000000..c0185b90 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_16.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x_0',['x',['../classrtabmap_1_1Transform.html#a5173dd4491ea0796180d1eb0f88a6762',1,'rtabmap::Transform']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_17.js b/preview/pr-1492/api/latest/search/functions_17.js new file mode 100644 index 00000000..cd805c0e --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_17.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['y_0',['y',['../classrtabmap_1_1Transform.html#acbb0afe7eb39181f85c2f9734352d6a9',1,'rtabmap::Transform']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_18.js b/preview/pr-1492/api/latest/search/functions_18.js new file mode 100644 index 00000000..5b6894d4 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_18.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['z_0',['z',['../classrtabmap_1_1Transform.html#af90acc40bed06ab96468fd17585f1944',1,'rtabmap::Transform']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_19.js b/preview/pr-1492/api/latest/search/functions_19.js new file mode 100644 index 00000000..7c8fe2df --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_19.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['_7ecameramodel_0',['~CameraModel',['../classrtabmap_1_1CameraModel.html#af6f35e5071ef0070d3fae3ebaa33ce4c',1,'rtabmap::CameraModel']]], + ['_7esensorcapture_1',['~SensorCapture',['../classrtabmap_1_1SensorCapture.html#a0578f6540ecdf8c4b3b747d511ecb625',1,'rtabmap::SensorCapture']]], + ['_7esensorcaptureinfo_2',['~SensorCaptureInfo',['../classrtabmap_1_1SensorCaptureInfo.html#a31eca8aee2a61df0d35d91edbc54ac53',1,'rtabmap::SensorCaptureInfo']]], + ['_7esensorcapturethread_3',['~SensorCaptureThread',['../classrtabmap_1_1SensorCaptureThread.html#af8133c1b2332568c4699282f59c141c9',1,'rtabmap::SensorCaptureThread']]], + ['_7esensordata_4',['~SensorData',['../classrtabmap_1_1SensorData.html#a94f4e8970ae34d652100dce131cc9e44',1,'rtabmap::SensorData']]], + ['_7esensorevent_5',['~SensorEvent',['../classrtabmap_1_1SensorEvent.html#a2794fb8f052c08efdfd4b379e359fecb',1,'rtabmap::SensorEvent']]], + ['_7esignature_6',['~Signature',['../classrtabmap_1_1Signature.html#a67c41f31ff6fd72815190cc1bbba9569',1,'rtabmap::Signature']]], + ['_7estatistics_7',['~Statistics',['../classrtabmap_1_1Statistics.html#af7ecfdb141de651d094d28a2d035dca0',1,'rtabmap::Statistics']]], + ['_7estereo_8',['~Stereo',['../classrtabmap_1_1Stereo.html#aca70a15916baf916d6d66c93dad6b3d5',1,'rtabmap::Stereo']]], + ['_7estereobm_9',['~StereoBM',['../classrtabmap_1_1StereoBM.html#a6d5e4ac8698669323dff297c01f7ee4b',1,'rtabmap::StereoBM']]], + ['_7estereocameramodel_10',['~StereoCameraModel',['../classrtabmap_1_1StereoCameraModel.html#afaa6d8cf4c9b503cc8c8a03fb25ecdf3',1,'rtabmap::StereoCameraModel']]], + ['_7estereodense_11',['~StereoDense',['../classrtabmap_1_1StereoDense.html#a5c720eb11114c19540d30886cb0ba1e6',1,'rtabmap::StereoDense']]], + ['_7estereoopticalflow_12',['~StereoOpticalFlow',['../classrtabmap_1_1StereoOpticalFlow.html#afa38ce6868f4bf0388559f81ff917a97',1,'rtabmap::StereoOpticalFlow']]], + ['_7estereosgbm_13',['~StereoSGBM',['../classrtabmap_1_1StereoSGBM.html#a1568e99913769d8442c6013a7adc8796',1,'rtabmap::StereoSGBM']]], + ['_7eueventshandler_14',['~UEventsHandler',['../classUEventsHandler.html#a15ac2bf243e938c411fac0dff7db2f51',1,'UEventsHandler']]], + ['_7euobjdeletionthread_15',['~UObjDeletionThread',['../classUObjDeletionThread.html#a44e27bada40a7fdb67ebad9270da8192',1,'UObjDeletionThread']]], + ['_7euprocessinfo_16',['~UProcessInfo',['../classUProcessInfo.html#a4b4a0da3c612692790191b914e37b1a4',1,'UProcessInfo']]], + ['_7euthread_17',['~UThread',['../classUThread.html#a437580d224111e60cbe2626f0e4cb12e',1,'UThread']]], + ['_7euvariant_18',['~UVariant',['../classUVariant.html#aeeaef6c17460567dec089740e276f50a',1,'UVariant']]], + ['_7evisualword_19',['~VisualWord',['../classrtabmap_1_1VisualWord.html#adc2dc719d2e6ed06ff92a2370d9955b2',1,'rtabmap::VisualWord']]], + ['_7evwdictionary_20',['~VWDictionary',['../classrtabmap_1_1VWDictionary.html#af7f669f103368e30e31a028efbcac89d',1,'rtabmap::VWDictionary']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_2.js b/preview/pr-1492/api/latest/search/functions_2.js new file mode 100644 index 00000000..ec8e2ffc --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_2.js @@ -0,0 +1,69 @@ +var searchData= +[ + ['cache_0',['cache',['../classrtabmap_1_1GlobalMap.html#a632f06ccce72bce66a9fd38d37f23b80',1,'rtabmap::GlobalMap']]], + ['calcopticalflowpyrlkstereo_1',['calcOpticalFlowPyrLKStereo',['../namespacertabmap_1_1util2d.html#a3d01284751a6b46770a28a7f63576600',1,'rtabmap::util2d']]], + ['calcstereocorrespondences_2',['calcStereoCorrespondences',['../namespacertabmap_1_1util2d.html#a53e2ae078c4c5c997fda9f1b6d1dda33',1,'rtabmap::util2d']]], + ['camera_3',['camera',['../classrtabmap_1_1Camera.html#aaae7434ffa5e54f5006355779d335dd3',1,'rtabmap::Camera::Camera()'],['../classrtabmap_1_1SensorCaptureThread.html#ad6750f6280bdcbb386a051ba9cc36857',1,'rtabmap::SensorCaptureThread::camera()']]], + ['cameramodel_4',['cameramodel',['../classrtabmap_1_1CameraModel.html#aadb6b19ea8a94f3f6719ea0233196c34',1,'rtabmap::CameraModel::CameraModel(double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))'],['../classrtabmap_1_1CameraModel.html#adad6652a711eecc9a50e544f14d276cd',1,'rtabmap::CameraModel::CameraModel()'],['../classrtabmap_1_1CameraModel.html#a4810e60f3af95b73a61879aa97201695',1,'rtabmap::CameraModel::CameraModel(const std::string &name, const cv::Size &imageSize, const cv::Mat &K, const cv::Mat &D, const cv::Mat &R, const cv::Mat &P, const Transform &localTransform=opticalRotation())'],['../classrtabmap_1_1CameraModel.html#a745c2d60ef6b460ca380aebd55b5d61c',1,'rtabmap::CameraModel::CameraModel(const std::string &name, double fx, double fy, double cx, double cy, const Transform &localTransform=opticalRotation(), double Tx=0.0f, const cv::Size &imageSize=cv::Size(0, 0))']]], + ['cameramodels_5',['cameraModels',['../classrtabmap_1_1SensorData.html#a6ace7b2b8ebae5f7ab18e159fe6e8a92',1,'rtabmap::SensorData']]], + ['cameraname_6',['cameraName',['../classrtabmap_1_1SensorEvent.html#adaf11817f3e0338ab63b1e8fee4a3c01',1,'rtabmap::SensorEvent']]], + ['canparsestring_7',['canParseString',['../classrtabmap_1_1Transform.html#af44657c8360a79a67e538f25027df639',1,'rtabmap::Transform']]], + ['canprocessasyncimu_8',['canprocessasyncimu',['../classrtabmap_1_1OdometryOkvis.html#a4e94c233112e7105dffa37eb8d33427f',1,'rtabmap::OdometryOkvis::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryOpenVINS.html#a7712fe74d5ff65a67fe362010b795e14',1,'rtabmap::OdometryOpenVINS::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryORBSLAM3.html#a2f226f38792f0c8bc146d73985239370',1,'rtabmap::OdometryORBSLAM3::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryVINSFusion.html#a1a3145c62e7b0b43cfb5a94f61d2c9d1',1,'rtabmap::OdometryVINSFusion::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryMSCKF.html#a4dd9c2358d2e69f397b61746519a923a',1,'rtabmap::OdometryMSCKF::canProcessAsyncIMU()'],['../classrtabmap_1_1Odometry.html#a7a1c1e4598528a4e94f510b5dabac528',1,'rtabmap::Odometry::canProcessAsyncIMU()'],['../classrtabmap_1_1OdometryLIOSAM.html#a51193d7f42c9b0174c6eedd75d8f4535',1,'rtabmap::OdometryLIOSAM::canProcessAsyncIMU()']]], + ['canprocessrawimages_9',['canprocessrawimages',['../classrtabmap_1_1Odometry.html#a69809beb553e6d4cd4a950ce251449e0',1,'rtabmap::Odometry::canProcessRawImages()'],['../classrtabmap_1_1OdometryMSCKF.html#a06b5b242107ffe5c379ff7ed089d07c6',1,'rtabmap::OdometryMSCKF::canProcessRawImages()'],['../classrtabmap_1_1OdometryOkvis.html#ad4d4602445081fff30b74d1c7e22dbff',1,'rtabmap::OdometryOkvis::canProcessRawImages()'],['../classrtabmap_1_1OdometryOpenVINS.html#aed27c46aa9ddc68c59eb09f2b3a9d3d0',1,'rtabmap::OdometryOpenVINS::canProcessRawImages()'],['../classrtabmap_1_1OdometryVINSFusion.html#a505ae049f32115a81d4f4258b5fb2134',1,'rtabmap::OdometryVINSFusion::canProcessRawImages()']]], + ['canuseguess_10',['canUseGuess',['../classrtabmap_1_1Registration.html#ab000f795ec498882585a634c2dafec05',1,'rtabmap::Registration']]], + ['capturedata_11',['capturedata',['../classrtabmap_1_1SensorCapture.html#a85e8691b5201a5383d1463ed980f7958',1,'rtabmap::SensorCapture::captureData()'],['../classrtabmap_1_1LidarVLP16.html#a60d8190947d474e0557695c1032c40b8',1,'rtabmap::LidarVLP16::captureData()']]], + ['captureimage_12',['captureImage',['../classrtabmap_1_1CameraMyntEye.html#acefbf910185313e7cf645ecff344329c',1,'rtabmap::CameraMyntEye']]], + ['changelinkids_13',['changeLinkIds',['../classrtabmap_1_1Signature.html#a10d3bce2c3e4ec2de31aa5fa0c4b5934',1,'rtabmap::Signature']]], + ['changewordsref_14',['changeWordsRef',['../classrtabmap_1_1Signature.html#a0fbef54e89583c0ee919f938d57c8759',1,'rtabmap::Signature']]], + ['cleanup_15',['cleanup',['../classrtabmap_1_1Memory.html#af87e4718dd842c59fd8459430c40d78f',1,'rtabmap::Memory']]], + ['cleanuplocalgrids_16',['cleanuplocalgrids',['../classrtabmap_1_1Memory.html#a6e63312ada575016b583a4252dc0a70c',1,'rtabmap::Memory::cleanupLocalGrids()'],['../classrtabmap_1_1Rtabmap.html#ac7de2278aa53a315a63bec05c1f0a15f',1,'rtabmap::Rtabmap::cleanupLocalGrids()']]], + ['clear_17',['clear',['../classrtabmap_1_1OccupancyGrid.html#a76e50602b4dea4a94b1e7e1db25c9177',1,'rtabmap::OccupancyGrid::clear()'],['../classrtabmap_1_1OctoMap.html#a6f9f296f3d5852f749c88291fa11d70f',1,'rtabmap::OctoMap::clear()'],['../classrtabmap_1_1GlobalMap.html#aa6701a09e2532877e73d5b1ba8cb1213',1,'rtabmap::GlobalMap::clear()'],['../classrtabmap_1_1LaserScan.html#af0ad1e84f0be48a84b772385249adb45',1,'rtabmap::LaserScan::clear()'],['../classrtabmap_1_1LocalGridCache.html#a4068440ef10859d05f252e36f916604b',1,'rtabmap::LocalGridCache::clear()'],['../classrtabmap_1_1VWDictionary.html#a566aaf19cdc098587e88393e4140b351',1,'rtabmap::VWDictionary::clear()'],['../classrtabmap_1_1GridMap.html#a2a3b8ba591cf41da62e5486bb62b8f51',1,'rtabmap::GridMap::clear()'],['../classrtabmap_1_1CloudMap.html#a3e2089cb30bd4efbee1ede0c041ee4af',1,'rtabmap::CloudMap::clear()']]], + ['clearcompresseddata_18',['clearCompressedData',['../classrtabmap_1_1SensorData.html#a33244e8049bfae5bea9ecf80057bcd29',1,'rtabmap::SensorData']]], + ['clearglobaldescriptors_19',['clearGlobalDescriptors',['../classrtabmap_1_1SensorData.html#a37c2569419731afc855a3ce984c11505',1,'rtabmap::SensorData']]], + ['clearpath_20',['clearPath',['../classrtabmap_1_1Rtabmap.html#a589cd696bffe53a5e00898631e7d9103',1,'rtabmap::Rtabmap']]], + ['clearrawdata_21',['clearRawData',['../classrtabmap_1_1SensorData.html#a53040403970a08a677e69d824a31f7b2',1,'rtabmap::SensorData']]], + ['clone_22',['clone',['../classrtabmap_1_1Transform.html#a93af73b3a388d66293d007cb164b2198',1,'rtabmap::Transform']]], + ['close_23',['close',['../classrtabmap_1_1Memory.html#a44023158524dee3471a8dff43ea132db',1,'rtabmap::Memory::close()'],['../classrtabmap_1_1Rtabmap.html#a5e0b2eada8ae885e45df23165bb91d2f',1,'rtabmap::Rtabmap::close()'],['../classrtabmap_1_1RtabmapThread.html#aabea5cf86e55d6669d41b0b569dac574',1,'rtabmap::RtabmapThread::close()']]], + ['closeconnection_24',['closeConnection',['../classrtabmap_1_1DBDriver.html#abb644a203d148d0b29db41aea04c949f',1,'rtabmap::DBDriver']]], + ['compareto_25',['compareTo',['../classrtabmap_1_1Signature.html#abe3b712a3c74599007b1974f592d82bd',1,'rtabmap::Signature']]], + ['compressdata_26',['compressData',['../namespacertabmap.html#a749adef593d09b887926afb6ebdb5834',1,'rtabmap']]], + ['compressdata2_27',['compressData2',['../namespacertabmap.html#aca82ee9efc46461c648c7ab8999e1d5b',1,'rtabmap']]], + ['compresseddepthformat_28',['compresseddepthformat',['../namespacertabmap.html#a67c525e80a7187b3106e5fd76155cabc',1,'rtabmap::compressedDepthFormat(const cv::Mat &bytes)'],['../namespacertabmap.html#ab5cb2dcd6db7fe3bbe25d847177582c2',1,'rtabmap::compressedDepthFormat(const std::vector< unsigned char > &bytes)'],['../namespacertabmap.html#a58b406e413250675abbf0ec2956e3de8',1,'rtabmap::compressedDepthFormat(const unsigned char *bytes, size_t size)']]], + ['compressimage_29',['compressImage',['../namespacertabmap.html#a52beb14eea422420c95fd69bdf3ab9dc',1,'rtabmap']]], + ['compressimage2_30',['compressImage2',['../namespacertabmap.html#abd9d5523210562abd9b5dc8fa9dbeb99',1,'rtabmap']]], + ['compressionthread_31',['compressionthread',['../classrtabmap_1_1CompressionThread.html#a6bdec4c44e47774291bc9f98b3b5c146',1,'rtabmap::CompressionThread::CompressionThread(const cv::Mat &mat, const std::string &format="")'],['../classrtabmap_1_1CompressionThread.html#a8cfe0e3d632c888c143b4e7902145fde',1,'rtabmap::CompressionThread::CompressionThread(const cv::Mat &bytes, bool isImage)']]], + ['compressstring_32',['compressString',['../namespacertabmap.html#a4f0dfae296aa7029e959d573b286285a',1,'rtabmap']]], + ['computebacorrespondences_33',['computeBACorrespondences',['../classrtabmap_1_1Optimizer.html#a93fb09dac068e64de000f692bcb8216f',1,'rtabmap::Optimizer']]], + ['computecorrespondences_34',['computecorrespondences',['../classrtabmap_1_1StereoOpticalFlow.html#a406bbf688782966ea55a44c49ac10cbe',1,'rtabmap::StereoOpticalFlow::computeCorrespondences()'],['../classrtabmap_1_1Stereo.html#aefb9a38643b353727430c4bb6a551382',1,'rtabmap::Stereo::computeCorrespondences()']]], + ['computedepth_35',['computeDepth',['../classrtabmap_1_1StereoCameraModel.html#a514f7d1baff8b4be96d760b27279f5d6',1,'rtabmap::StereoCameraModel']]], + ['computedisparity_36',['computedisparity',['../classrtabmap_1_1StereoBM.html#a94b6d71050cf4b784f87853175c57b00',1,'rtabmap::StereoBM::computeDisparity()'],['../classrtabmap_1_1StereoSGBM.html#ac0677ba125a665fe723f20814bf724cc',1,'rtabmap::StereoSGBM::computeDisparity()'],['../classrtabmap_1_1StereoCameraModel.html#aecf8b2a628ead0bc422dbf791d683f5b',1,'rtabmap::StereoCameraModel::computeDisparity(float depth) const'],['../classrtabmap_1_1StereoCameraModel.html#a28230b8236ed778729ed1e1ceb590f31',1,'rtabmap::StereoCameraModel::computeDisparity(unsigned short depth) const'],['../classrtabmap_1_1StereoDense.html#ac394d1dad3fa899f310e4c3eb3e428c4',1,'rtabmap::StereoDense::computeDisparity()']]], + ['computeicptransform_37',['computeIcpTransform',['../classrtabmap_1_1Memory.html#aca66c6d1316f9d833b279104a683ee50',1,'rtabmap::Memory']]], + ['computeicptransformmulti_38',['computeIcpTransformMulti',['../classrtabmap_1_1Memory.html#a34aa7efd5f6ce0fd3136459542ad8ebb',1,'rtabmap::Memory']]], + ['computelikelihood_39',['computeLikelihood',['../classrtabmap_1_1Memory.html#a984ca01a87434b11a66dc1d96e2fff17',1,'rtabmap::Memory']]], + ['computenormalscomplexity_40',['computenormalscomplexity',['../group__ComputeNormalsComplexity.html#ga3724a082502fbef6222c11843ca56b58',1,'rtabmap::util3d::computeNormalsComplexity(const LaserScan &scan, const Transform &t=Transform::getIdentity(), cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)'],['../group__ComputeNormalsComplexity.html#ga5a68422282e99f8d05c0821eac491895',1,'rtabmap::util3d::computeNormalsComplexity(const pcl::PointCloud< pcl::Normal > &normals, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)'],['../group__ComputeNormalsComplexity.html#ga3e024c51a6a49d1c8e6b64c230148137',1,'rtabmap::util3d::computeNormalsComplexity(const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)'],['../group__ComputeNormalsComplexity.html#ga6e03130bf686d43ea527dc8e6f5cce55',1,'rtabmap::util3d::computeNormalsComplexity(const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)'],['../group__ComputeNormalsComplexity.html#ga13a6d7525494d390041c9ef0337e02dd',1,'rtabmap::util3d::computeNormalsComplexity(const pcl::PointCloud< pcl::PointNormal > &cloud, const Transform &t=Transform::getIdentity(), bool is2d=false, cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)']]], + ['computepath_41',['computepath',['../classrtabmap_1_1Rtabmap.html#a14d5c84b61386e95071e90aba406ff49',1,'rtabmap::Rtabmap::computePath(const Transform &targetPose, float tolerance=-1.0f)'],['../classrtabmap_1_1Rtabmap.html#ab797f7f5bb73a507ba4d4672cd5476df',1,'rtabmap::Rtabmap::computePath(int targetNode, bool global)']]], + ['computeposterior_42',['computePosterior',['../classrtabmap_1_1BayesFilter.html#a7ab8bc28ec172a18a80001585161b238',1,'rtabmap::BayesFilter']]], + ['computeroi_43',['computeroi',['../group__RoiComputation.html#ga79d3f93673fb236980f0be532695f478',1,'rtabmap::util2d::computeRoi(const cv::Mat &image, const std::string &roiRatios)'],['../group__RoiComputation.html#ga2f0ffb8f6882e28709b03446d50250bb',1,'rtabmap::util2d::computeRoi(const cv::Size &imageSize, const std::string &roiRatios)'],['../group__RoiComputation.html#ga81d9f49d117d02494c7ff57f5d426b15',1,'rtabmap::util2d::computeRoi(const cv::Mat &image, const std::vector< float > &roiRatios)'],['../group__RoiComputation.html#ga56fed8ce688e8e9eb3b1f74ad0febcef',1,'rtabmap::util2d::computeRoi(const cv::Size &imageSize, const std::vector< float > &roiRatios)'],['../classrtabmap_1_1Feature2D.html#a8bdfa57df68506fecb6342b9f5bc98e8',1,'rtabmap::Feature2D::computeRoi()']]], + ['computetransform_44',['computetransform',['../classrtabmap_1_1Memory.html#a29636c34234e6e2809e3d57329dc40d6',1,'rtabmap::Memory::computeTransform(int fromId, int toId, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false)'],['../classrtabmap_1_1Memory.html#a4ae0287262c04905baab2d6f94448486',1,'rtabmap::Memory::computeTransform(Signature &fromS, Signature &toS, Transform guess, RegistrationInfo *info=0, bool useKnownCorrespondencesIfPossible=false) const']]], + ['computetransformation_45',['computetransformation',['../classrtabmap_1_1Registration.html#a42d0c93204bc4da11eb89707ea2c03c6',1,'rtabmap::Registration::computeTransformation(const SensorData &from, const SensorData &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const'],['../classrtabmap_1_1Registration.html#aa6b81a6f4137138a1b49510cc3f97679',1,'rtabmap::Registration::computeTransformation(const Signature &from, const Signature &to, Transform guess=Transform::getIdentity(), RegistrationInfo *info=0) const']]], + ['computetransformationimpl_46',['computetransformationimpl',['../classrtabmap_1_1Registration.html#a21635a391a85b64bc33787179a6cd71b',1,'rtabmap::Registration::computeTransformationImpl()'],['../classrtabmap_1_1RegistrationIcp.html#a8a18107160cfc05cfb8a5109540d81b5',1,'rtabmap::RegistrationIcp::computeTransformationImpl()'],['../classrtabmap_1_1RegistrationVis.html#aa47fd3a0599ee918e024161db330a92f',1,'rtabmap::RegistrationVis::computeTransformationImpl()']]], + ['computetransformationmod_47',['computeTransformationMod',['../classrtabmap_1_1Registration.html#a44530cd77f6d0a9657251864fb136c0d',1,'rtabmap::Registration']]], + ['computevarianceandcorrespondences_48',['computevarianceandcorrespondences',['../group__ComputeVarianceAndCorrespondences.html#ga7d90c0848a13e35f37588addf3637fe2',1,'rtabmap::util3d::computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointXYZI >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointXYZI >::ConstPtr &cloudB, double maxCorrespondenceDistance, double &variance, int &correspondencesOut, bool reciprocal)'],['../group__ComputeVarianceAndCorrespondences.html#ga92518a7b79e9265380f3a047e46ec247',1,'rtabmap::util3d::computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloudB, double maxCorrespondenceDistance, double &variance, int &correspondencesOut, bool reciprocal)'],['../group__ComputeVarianceAndCorrespondences.html#gaae6ddd0517614e9332669c37c6816777',1,'rtabmap::util3d::computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointXYZINormal >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointXYZINormal >::ConstPtr &cloudB, double maxCorrespondenceDistance, double maxCorrespondenceAngle, double &variance, int &correspondencesOut, bool reciprocal)'],['../group__ComputeVarianceAndCorrespondences.html#gaf474f9fb6eaaf532e9b18af63b9e1665',1,'rtabmap::util3d::computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudB, double maxCorrespondenceDistance, double maxCorrespondenceAngle, double &variance, int &correspondencesOut, bool reciprocal)']]], + ['constraints_49',['constraints',['../classrtabmap_1_1Statistics.html#a30275a92af2f9fb08f3955c5b9e8b661',1,'rtabmap::Statistics']]], + ['convert32ftobin_50',['convert32FToBin',['../classrtabmap_1_1VWDictionary.html#acda9d98e4ad4897ce8a8b945f396221c',1,'rtabmap::VWDictionary']]], + ['convertbinto32f_51',['convertBinTo32F',['../classrtabmap_1_1VWDictionary.html#a70aec2b9d1bf55d47192949aa728448e',1,'rtabmap::VWDictionary']]], + ['converttobaseframe_52',['convertToBaseFrame',['../classrtabmap_1_1IMU.html#a1ccae83f46e87d28e56bcfc4a25fafb8',1,'rtabmap::IMU']]], + ['converttointermediate_53',['convertToIntermediate',['../classrtabmap_1_1Memory.html#ae66a7837edc6e844ee9186e61d139300',1,'rtabmap::Memory']]], + ['copy_54',['copy',['../classUFile.html#aa99e6dc81f23e17ce92bd848dfe5a2f4',1,'UFile::copy(const std::string &from, const std::string &to)'],['../classUFile.html#aa02141310fab62290721deee433f6314',1,'UFile::copy(const std::string &to)']]], + ['copywithoutdata_55',['copyWithoutData',['../classrtabmap_1_1RegistrationInfo.html#ae7abf7e34019a0c27b2de8ac5647f277',1,'rtabmap::RegistrationInfo']]], + ['covariance_56',['covariance',['../classrtabmap_1_1Landmark.html#a1c1e20cccc5f659743ba48c8afe1a8a0',1,'rtabmap::Landmark']]], + ['create_57',['create',['../classrtabmap_1_1Optimizer.html#a78b457bec2cdb7bdd320e2bfcca759df',1,'rtabmap::Optimizer::create()'],['../classrtabmap_1_1DBDriver.html#a1f75e440b35243ccad645052bc4a12f9',1,'rtabmap::DBDriver::create()'],['../classrtabmap_1_1Feature2D.html#a58ac3dff96e882f0e4bbbf8a8ffc435d',1,'rtabmap::Feature2D::create()'],['../classrtabmap_1_1RtabmapColorOcTree.html#ac109340a5367e1b818febb00ae06f18e',1,'rtabmap::RtabmapColorOcTree::create()'],['../classrtabmap_1_1Odometry.html#a1240aaf3a92a75b4c3c9ded9117144bb',1,'rtabmap::Odometry::create()'],['../classrtabmap_1_1Optimizer.html#aeff86117cf69fdae3c25e5bc327a142d',1,'rtabmap::Optimizer::create()'],['../classrtabmap_1_1Registration.html#a516e8d64cdb3e7a743a3aa40ab026def',1,'rtabmap::Registration::create(const ParametersMap &parameters)'],['../classrtabmap_1_1Registration.html#a1e3493a850551c98f9e814fed74400e6',1,'rtabmap::Registration::create(Type &type, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1Stereo.html#a2ce0c01fac282e0a8ffd862608fa2d96',1,'rtabmap::Stereo::create()'],['../classrtabmap_1_1StereoDense.html#ad2a4e50429b17c2cb1938e9d922ba7ce',1,'rtabmap::StereoDense::create(const ParametersMap &parameters)'],['../classrtabmap_1_1StereoDense.html#ae52002299f7e443a8e9cdc33effae37c',1,'rtabmap::StereoDense::create(StereoDense::Type type, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1Odometry.html#ac8992df0b92a86c10fe8e8da2b5f3627',1,'rtabmap::Odometry::create()'],['../classrtabmap_1_1IMUFilter.html#a7a01dc897399c51c4a362d2438b90875',1,'rtabmap::IMUFilter::create(IMUFilter::Type type, const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1IMUFilter.html#a16790b3787da5941c89d0c1d98e76234',1,'rtabmap::IMUFilter::create(const ParametersMap &parameters=ParametersMap())'],['../classrtabmap_1_1Feature2D.html#ab9deec7c0e26722736aeeaeb5541ac3a',1,'rtabmap::Feature2D::create()']]], + ['createlocalmap_58',['createlocalmap',['../classrtabmap_1_1LocalGridMaker.html#a3d43b8e022d7638262282ab2c7da0ead',1,'rtabmap::LocalGridMaker::createLocalMap(const LaserScan &cloud, const Transform &pose, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPointInOut) const'],['../classrtabmap_1_1LocalGridMaker.html#a97d17a585226dcffe580406736e00117',1,'rtabmap::LocalGridMaker::createLocalMap(const Signature &node, cv::Mat &groundCells, cv::Mat &obstacleCells, cv::Mat &emptyCells, cv::Point3f &viewPoint)']]], + ['cropbox_59',['cropbox',['../group__CropBox.html#gaa6737135785f73d1a2f3ec966ab22bc7',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga32e6cd849848faaccc6b46ba02f98f6b',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga5d5cafb95fb856438e55a0de06378ef7',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga8065c61da2295bf203e4ee7471e9332d',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga1f23604e3b58f73183fe3102dd9f86c9',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga1302fc8f7569390d2d9a6a66c24f5179',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga15f14d0a8c9de82ff3ad398fa8c36097',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga0fe7f976bca4c8ec9dd0afa95f590c72',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga43309cd4b35fcbe7a746ccb1dc9a1b4f',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga3b4c45a05e5bc0ff7d4c3917103e4f29',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga20a5eeed65c38958ed5866216f26bd44',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga668e8d0a8a8abd65500bd7e7b748eec2',1,'rtabmap::util3d::cropBox(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)'],['../group__CropBox.html#ga8291151381ff38773e641740b66b93ef',1,'rtabmap::util3d::cropBox(const pcl::PCLPointCloud2::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)']]], + ['currentdir_60',['currentDir',['../classUDirectory.html#a30b3c4e8f81892e5ea04bdab3beba900',1,'UDirectory']]], + ['currentgoalid_61',['currentGoalId',['../classrtabmap_1_1Statistics.html#adae0424da0557be95b6968eecdbc628e',1,'rtabmap::Statistics']]], + ['cvtdepthfromfloat_62',['cvtDepthFromFloat',['../namespacertabmap_1_1util2d.html#a6740b13198a2c437ab51d8e0503f2d33',1,'rtabmap::util2d']]], + ['cvtdepthtofloat_63',['cvtDepthToFloat',['../namespacertabmap_1_1util2d.html#a0e4631bed561b3a694a1a65853221f75',1,'rtabmap::util2d']]], + ['cx_64',['cx',['../classrtabmap_1_1CameraModel.html#af81ee9572d32f69bf0a66cd1f4671c20',1,'rtabmap::CameraModel']]], + ['cy_65',['cy',['../classrtabmap_1_1CameraModel.html#aa3a18f811d3e9db290d01371e078add3',1,'rtabmap::CameraModel']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_3.js b/preview/pr-1492/api/latest/search/functions_3.js new file mode 100644 index 00000000..57cba45e --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_3.js @@ -0,0 +1,41 @@ +var searchData= +[ + ['d_0',['D',['../classrtabmap_1_1CameraModel.html#a4aa121905a9b2aabb6a3592a6eb7459a',1,'rtabmap::CameraModel']]], + ['d_5fraw_1',['D_raw',['../classrtabmap_1_1CameraModel.html#a88ec7053f4d442c4b1b79803c2840f28',1,'rtabmap::CameraModel']]], + ['data_2',['data',['../classrtabmap_1_1SensorEvent.html#a02d0ef0c42eab24adb8013a9693e02b1',1,'rtabmap::SensorEvent::data()'],['../classrtabmap_1_1Statistics.html#ab5c8be76435cdfb98c656ccc236f029a',1,'rtabmap::Statistics::data()'],['../classrtabmap_1_1Transform.html#a8db5709fa16ae937c5221b6e8bbbf364',1,'rtabmap::Transform::data()']]], + ['databaserecovery_3',['databaseRecovery',['../namespacertabmap.html#a84468b4bab971b3b8e2c33a746bf7f36',1,'rtabmap']]], + ['datamatrix_4',['dataMatrix',['../classrtabmap_1_1Transform.html#aac41c119a4602f70494380303fe5d277',1,'rtabmap::Transform']]], + ['dbdriver_5',['DBDriver',['../classrtabmap_1_1DBDriver.html#a5f90eb62bb559d42611dbe7ffe11328e',1,'rtabmap::DBDriver']]], + ['dbdriversqlite3_6',['DBDriverSqlite3',['../classrtabmap_1_1DBDriverSqlite3.html#a471f26a35b093bbd5a59766735a94fd1',1,'rtabmap::DBDriverSqlite3']]], + ['decimate_7',['decimate',['../namespacertabmap_1_1util2d.html#a0b545a9f852684afb0a6d8f835f9eaf2',1,'rtabmap::util2d']]], + ['defaultdata_8',['defaultData',['../classrtabmap_1_1Statistics.html#a917322822da5565f5c7438849f307c4f',1,'rtabmap::Statistics']]], + ['deletelastlocation_9',['deleteLastLocation',['../classrtabmap_1_1Rtabmap.html#aee23115b4bd02bce5d1721418a0f7599',1,'rtabmap::Rtabmap']]], + ['deletelocation_10',['deleteLocation',['../classrtabmap_1_1Memory.html#a2b91d8b5d651fbaa12a31e364c793a21',1,'rtabmap::Memory']]], + ['deleteunusedwords_11',['deleteUnusedWords',['../classrtabmap_1_1VWDictionary.html#a33c8904edf3d0af65dfd2a6d817416fa',1,'rtabmap::VWDictionary']]], + ['depthbleedingfiltering_12',['depthBleedingFiltering',['../namespacertabmap_1_1util2d.html#a7788d4dabf084959aa69162d5dbb2d2e',1,'rtabmap::util2d']]], + ['depthconfidencecompressed_13',['depthConfidenceCompressed',['../classrtabmap_1_1SensorData.html#aebbab80906082f6e35ce5731fa67ca26',1,'rtabmap::SensorData']]], + ['depthconfidenceraw_14',['depthConfidenceRaw',['../classrtabmap_1_1SensorData.html#a0cfb7cee085b7959c9ddf1d7854ed910',1,'rtabmap::SensorData']]], + ['depthfromdisparity_15',['depthFromDisparity',['../namespacertabmap_1_1util2d.html#a110359c4884579e1c7b68d8baa7acb6c',1,'rtabmap::util2d']]], + ['depthfromstereocorrespondences_16',['depthFromStereoCorrespondences',['../namespacertabmap_1_1util2d.html#ae6548e6246eceaff5dcc9ee30514eac5',1,'rtabmap::util2d']]], + ['depthfromstereoimages_17',['depthFromStereoImages',['../namespacertabmap_1_1util2d.html#aacf89454b054d86b53a8038c8a404b50',1,'rtabmap::util2d']]], + ['depthorrightcompressed_18',['depthOrRightCompressed',['../classrtabmap_1_1SensorData.html#a85b36ca12b0936a99d61b768908097da',1,'rtabmap::SensorData']]], + ['depthorrightraw_19',['depthOrRightRaw',['../classrtabmap_1_1SensorData.html#a2476c59283ef2e24d7a3f10301433327',1,'rtabmap::SensorData']]], + ['depthraw_20',['depthRaw',['../classrtabmap_1_1SensorData.html#a1970cd319999fb371873553b53b07d73',1,'rtabmap::SensorData']]], + ['descriptors_21',['descriptors',['../classrtabmap_1_1SensorData.html#a5cf732793c05b16bb67f144524882b26',1,'rtabmap::SensorData']]], + ['deserialize_22',['deserialize',['../classrtabmap_1_1CameraModel.html#a181c2e53da1151c281d85fde986a29c5',1,'rtabmap::CameraModel::deserialize()'],['../classrtabmap_1_1StereoCameraModel.html#afdec3f5bab7ab9b4c339edaa30e639db',1,'rtabmap::StereoCameraModel::deserialize(const unsigned char *data, unsigned int dataSize)'],['../classrtabmap_1_1StereoCameraModel.html#a7467f3a9a7961e643d0cd152286a13dd',1,'rtabmap::StereoCameraModel::deserialize(const std::vector< unsigned char > &data)'],['../classrtabmap_1_1CameraModel.html#a490dc97ca8aa55d96324eb6612ccfd30',1,'rtabmap::CameraModel::deserialize()']]], + ['deserializedata_23',['deserializeData',['../classrtabmap_1_1Statistics.html#a167ea0c3bc76865e90624323e72399c7',1,'rtabmap::Statistics']]], + ['deserializeindex_24',['deserializeindex',['../classrtabmap_1_1VWDictionary.html#a0a29d849a7c2b626407f453e5cb4b526',1,'rtabmap::VWDictionary::deserializeIndex(const unsigned char *data, size_t size)'],['../classrtabmap_1_1VWDictionary.html#a3af1cce90b50dcb0f9dcd77e1fb08aad',1,'rtabmap::VWDictionary::deserializeIndex(const std::vector< unsigned char > &data)']]], + ['detectmoreloopclosures_25',['detectMoreLoopClosures',['../classrtabmap_1_1Rtabmap.html#a600d86ab2a67fa08d6a1e726380948ea',1,'rtabmap::Rtabmap']]], + ['disablebilateralfiltering_26',['disableBilateralFiltering',['../classrtabmap_1_1SensorCaptureThread.html#a57beeb2c34d4430e37da05ef8e400a9b',1,'rtabmap::SensorCaptureThread']]], + ['disablefeaturedetection_27',['disableFeatureDetection',['../classrtabmap_1_1SensorCaptureThread.html#aeddec5c0c55aab261b31d0a980a7d327',1,'rtabmap::SensorCaptureThread']]], + ['disableimufiltering_28',['disableimufiltering',['../classrtabmap_1_1SensorCaptureThread.html#a75c2426adc532854f1d7119256b1cf0d',1,'rtabmap::SensorCaptureThread::disableIMUFiltering()'],['../classrtabmap_1_1IMUThread.html#a7934573b7f4899278f1b048cf9a686bc',1,'rtabmap::IMUThread::disableIMUFiltering()']]], + ['disparityfromstereocorrespondences_29',['disparityFromStereoCorrespondences',['../namespacertabmap_1_1util2d.html#a4f10f8038c62a97d3a79bd2dc5bf2c58',1,'rtabmap::util2d']]], + ['disparityfromstereoimages_30',['disparityFromStereoImages',['../namespacertabmap_1_1util2d.html#ad7ea8d1905c7143d376c57c9e22dcea5',1,'rtabmap::util2d']]], + ['downsample_31',['downsample',['../group__PointCloudDownSampling.html#ga32d575439b2f5082c3946bc964c14b75',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#ga8c3ca654fb0cc07084fdac8077714b3a',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#ga83657d48dce8b727088941773f4d8a73',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#gab4b196b83a0634b8e58c145ed54d510d',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#ga7a57facb7148254d43af7577a3716d15',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#ga2f9dd8a7c572ce78b76aec448b17a863',1,'rtabmap::util3d::downsample(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, int step)'],['../group__PointCloudDownSampling.html#ga83a15e5eaeee8707bfa5563c71154579',1,'rtabmap::util3d::downsample(const LaserScan &cloud, int step)']]], + ['dumpdata_32',['dumpData',['../classrtabmap_1_1Rtabmap.html#a38db1c80ae583e255dd6174ba6d41ffc',1,'rtabmap::Rtabmap']]], + ['dumpdictionary_33',['dumpDictionary',['../classrtabmap_1_1Memory.html#afc3de4b861e23f90bf753794bcb40e68',1,'rtabmap::Memory']]], + ['dumpmemory_34',['dumpMemory',['../classrtabmap_1_1Memory.html#a634e2fdc0e1c93a2cb01f07c9cbac33f',1,'rtabmap::Memory']]], + ['dumpmemorytree_35',['dumpMemoryTree',['../classrtabmap_1_1Memory.html#a4aef39ff933463d9693e8f4f325f74e7',1,'rtabmap::Memory']]], + ['dumpprediction_36',['dumpPrediction',['../classrtabmap_1_1Rtabmap.html#ad0c040e54bbca27dffc46346d96c57cb',1,'rtabmap::Rtabmap']]], + ['dumpsignatures_37',['dumpSignatures',['../classrtabmap_1_1Memory.html#a1b470cb9ff41fd77a35d9a6230750446',1,'rtabmap::Memory']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_4.js b/preview/pr-1492/api/latest/search/functions_4.js new file mode 100644 index 00000000..f729b744 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_4.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['e_0',['E',['../classrtabmap_1_1StereoCameraModel.html#a8ab6c698248837e4dcfe36c2e7b02546',1,'rtabmap::StereoCameraModel']]], + ['elapsed_1',['elapsed',['../classUTimer.html#a372405f02e1d4e9571a73d80962d6f4c',1,'UTimer']]], + ['empty_2',['empty',['../classrtabmap_1_1IMU.html#ace111e68ca49e6d47cc92f53a0be87ef',1,'rtabmap::IMU']]], + ['emptytrash_3',['emptyTrash',['../classrtabmap_1_1Memory.html#a072ec41027a03072f1a945540b43a1b8',1,'rtabmap::Memory']]], + ['emptytrashes_4',['emptyTrashes',['../classrtabmap_1_1DBDriver.html#ab4a0036162994c2ef76d4236e2a7ea0a',1,'rtabmap::DBDriver']]], + ['enablebilateralfiltering_5',['enableBilateralFiltering',['../classrtabmap_1_1SensorCaptureThread.html#a429011ef7b39d30fc98413d727cccf4b',1,'rtabmap::SensorCaptureThread']]], + ['enablefeaturedetection_6',['enableFeatureDetection',['../classrtabmap_1_1SensorCaptureThread.html#aa0a6c975417a655029470aea2ea5d01a',1,'rtabmap::SensorCaptureThread']]], + ['enableimufiltering_7',['enableimufiltering',['../classrtabmap_1_1IMUThread.html#ad7e54aa5d2c6a9354e38bda9f01c89ab',1,'rtabmap::IMUThread::enableIMUFiltering()'],['../classrtabmap_1_1SensorCaptureThread.html#a97ef5e49b994fcd2a3c87d6f7ef244ec',1,'rtabmap::SensorCaptureThread::enableIMUFiltering()']]], + ['ensurelinking_8',['ensureLinking',['../classrtabmap_1_1RtabmapColorOcTree_1_1StaticMemberInitializer.html#aff6bc204ec1c5dfaa423d8ec3e448f0f',1,'rtabmap::RtabmapColorOcTree::StaticMemberInitializer']]], + ['enu_5fwgs84togeocentric_5fwgs84_9',['ENU_WGS84ToGeocentric_WGS84',['../classrtabmap_1_1GeodeticCoords.html#a7f8066cd690d20fc02ad19bf96d9215b',1,'rtabmap::GeodeticCoords']]], + ['envsensor_10',['envsensor',['../classrtabmap_1_1EnvSensor.html#a512758b1afef465b24ce24de8a705dc9',1,'rtabmap::EnvSensor::EnvSensor()'],['../classrtabmap_1_1EnvSensor.html#a8b2f05e0297750a60ccd05c56f141a1b',1,'rtabmap::EnvSensor::EnvSensor(const Type &type, const double &value, const double &stamp=0)']]], + ['envsensors_11',['envSensors',['../classrtabmap_1_1SensorData.html#a4cce095c69f9fa8f0035c9f2f51c0ff9',1,'rtabmap::SensorData']]], + ['epsilon_12',['epsilon',['../classrtabmap_1_1Optimizer.html#a3bca4e3df1048f8bbad9b3b9473924a2',1,'rtabmap::Optimizer::epsilon()'],['../classrtabmap_1_1StereoOpticalFlow.html#ae53f537e0e9ebf121ff8a8b3bdc410a8',1,'rtabmap::StereoOpticalFlow::epsilon()']]], + ['erase_13',['erase',['../classUFile.html#a1faba3e78bb915a685d82f0696e1ec02',1,'UFile']]], + ['error_14',['error',['../classrtabmap_1_1GPS.html#acf16049cca9dfc2fdb46705818f3bb34',1,'rtabmap::GPS']]], + ['estimatemapdepth_15',['estimateMapDepth',['../classclams_1_1FrameProjector.html#a26c74a7a7f6f6e9c2e18d6a38693699c',1,'clams::FrameProjector']]], + ['executenoresult_16',['executeNoResult',['../classrtabmap_1_1DBDriver.html#a835fc23bd4f6532af71f3aadfb8037d8',1,'rtabmap::DBDriver']]], + ['exists_17',['exists',['../classUDirectory.html#ad82410f2502789f23d30984a5b1d7724',1,'UDirectory::exists()'],['../classUFile.html#ab8719ee88436205b171674060eaa4dea',1,'UFile::exists(const std::string &filePath)'],['../classUFile.html#a4963afa70289718a3bd1ca50b6adb420',1,'UFile::exists()']]], + ['exportdictionary_18',['exportDictionary',['../classrtabmap_1_1VWDictionary.html#a1ba7cb31f8658980849ffd9ce76b3cb8',1,'rtabmap::VWDictionary']]], + ['exportposes_19',['exportPoses',['../classrtabmap_1_1Rtabmap.html#aeffdfc811a178ba2e55205b746a6ea71',1,'rtabmap::Rtabmap']]], + ['exposurefusion_20',['exposureFusion',['../namespacertabmap_1_1util2d.html#ac38e8ed586d24c4b9fe72d64afeb9583',1,'rtabmap::util2d']]], + ['extended_21',['extended',['../classrtabmap_1_1Statistics.html#a1e1ba8f7429fa212aa32897877dec122',1,'rtabmap::Statistics']]], + ['extractclusters_22',['extractclusters',['../group__ExtractClusters.html#ga62a0d02930f5969cbff707afe01d1bcd',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga180048dc26009c5d6d1233bb6ce5de04',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga8184974cc084fdd804e82bb979eb2353',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#gaecfbf327f7ef38738d0e592ed470d318',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga7c622ccc41a487527f0448db84fd8539',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#gada592bb1e0525a32412d5009002b9b1e',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga3e51576a82fef5cddffe4d3ae14d8899',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)'],['../group__ExtractClusters.html#ga8e23ae8df06afbb753eb6eb0b54a400a',1,'rtabmap::util3d::extractClusters(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)']]], + ['extractindices_23',['extractindices',['../group__ExtractIndices.html#gaa312bb0ae54f1472d4e4f22bee7cc4d6',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#gad759e35639cd87f04ebd09eadb5865f5',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#gaf6cd58fdda3450fb11496395e35908d7',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#gaca2188ec4a875fb9c6d2fa240888dcf1',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#ga2a39a8e9d769e5e2cea8054b7084af1e',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative, bool keepOrganized)'],['../group__ExtractIndices.html#gae196609121fa899ba2735d406aedc73b',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#gaf8e635d6864b0a7f41bad4bb185a57f4',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#ga93acd3d20cbab15b628cbc2a0f3b1919',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#ga0c8a4fe56efba09d2bf6c5b84da36702',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#ga8ce0dc4070d599c6f4a8c55651c2f944',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)'],['../group__ExtractIndices.html#ga8685395807479f06b19d9d41616a03a7',1,'rtabmap::util3d::extractIndices(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_5.js b/preview/pr-1492/api/latest/search/functions_5.js new file mode 100644 index 00000000..38c74558 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_5.js @@ -0,0 +1,29 @@ +var searchData= +[ + ['f_0',['F',['../classrtabmap_1_1StereoCameraModel.html#a1e4ffc9baa8dfee0a79ea32bac9b7c1c',1,'rtabmap::StereoCameraModel']]], + ['fastbilateralfiltering_1',['fastBilateralFiltering',['../namespacertabmap_1_1util2d.html#a076914fde23d1323fccf71a794b9bc51',1,'rtabmap::util2d']]], + ['field_2',['field',['../classrtabmap_1_1LaserScan.html#a61d7ecfee5d444fdde06efb0f13ed68d',1,'rtabmap::LaserScan']]], + ['filldepthholes_3',['fillDepthHoles',['../namespacertabmap_1_1util2d.html#aeb3dee2cf6484f0b224d4687899cb004',1,'rtabmap::util2d']]], + ['fillregistereddepthholes_4',['fillRegisteredDepthHoles',['../namespacertabmap_1_1util2d.html#afc6c9b3442c64ef2061365ead3923228',1,'rtabmap::util2d']]], + ['filterkeypointsbydepth_5',['filterKeypointsByDepth',['../classrtabmap_1_1Feature2D.html#aadbb5a7611eb94ea6925115999bc0f4e',1,'rtabmap::Feature2D']]], + ['filterkeypointsbydisparity_6',['filterKeypointsByDisparity',['../classrtabmap_1_1Feature2D.html#a32fa09026282be6a729483bfe57d31ec',1,'rtabmap::Feature2D']]], + ['filterparameters_7',['filterParameters',['../classrtabmap_1_1Parameters.html#a24faced7b8d2ebb7045cd6f8f6382ad7',1,'rtabmap::Parameters']]], + ['findnn_8',['findnn',['../classrtabmap_1_1VWDictionary.html#ac2f21a98b70e91ab2e8a07151c508d1c',1,'rtabmap::VWDictionary::findNN(const std::list< VisualWord * > &vws) const'],['../classrtabmap_1_1VWDictionary.html#aada11cf01b586ac8205f8bff0b1ab295',1,'rtabmap::VWDictionary::findNN(const cv::Mat &descriptors) const']]], + ['findpairs_9',['findpairs',['../classrtabmap_1_1EpipolarGeometry.html#ace979984a7d97ccaa18bf0764318d342',1,'rtabmap::EpipolarGeometry::findPairs(const std::map< int, T > &wordsA, const std::map< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)'],['../classrtabmap_1_1EpipolarGeometry.html#a8fc121340b9d638dc9b8c69f2d86c5e7',1,'rtabmap::EpipolarGeometry::findPairs(const std::multimap< int, T > &wordsA, const std::multimap< int, T > &wordsB, std::list< std::pair< int, std::pair< T, T > > > &pairs, bool ignoreNegativeIds=true)']]], + ['findpairsall_10',['findPairsAll',['../classrtabmap_1_1EpipolarGeometry.html#adfcc58ee756cb99887c6d8807bc7104c',1,'rtabmap::EpipolarGeometry']]], + ['findpairsunique_11',['findPairsUnique',['../classrtabmap_1_1EpipolarGeometry.html#a7c3886c647a098d33a88640ed2477e24',1,'rtabmap::EpipolarGeometry']]], + ['flush_12',['flush',['../classULogger.html#a701ad6b99c9040cf3b5d47711e9f6d6a',1,'ULogger']]], + ['force3dof_13',['force3DoF',['../classrtabmap_1_1Registration.html#abb255bdab60a262f9cfc5d868e50cc9c',1,'rtabmap::Registration']]], + ['forget_14',['forget',['../classrtabmap_1_1Memory.html#a51e89ccab2261912b09a5b7178fdd46c',1,'rtabmap::Memory']]], + ['fovx_15',['fovX',['../classrtabmap_1_1CameraModel.html#ac3aa6835f8ae019de4dbf85eed849b75',1,'rtabmap::CameraModel']]], + ['fovy_16',['fovY',['../classrtabmap_1_1CameraModel.html#af4df41cc8a613f3e03b1ed14fc0a887e',1,'rtabmap::CameraModel']]], + ['framesprocessed_17',['framesProcessed',['../classrtabmap_1_1Odometry.html#a7476b9fffee225ef396804ef59084659',1,'rtabmap::Odometry']]], + ['fromeigen4f_18',['fromEigen4f',['../classrtabmap_1_1Transform.html#aed17615176c1c3e6fdc682232b753d29',1,'rtabmap::Transform']]], + ['fromenu_5fwgs84_19',['fromENU_WGS84',['../classrtabmap_1_1GeodeticCoords.html#abc69e5c7f8e473fe6788042237992d43',1,'rtabmap::GeodeticCoords']]], + ['fromgeocentric_5fwgs84_20',['fromGeocentric_WGS84',['../classrtabmap_1_1GeodeticCoords.html#ae37435ee904b9782fcddbf0f72f388bd',1,'rtabmap::GeodeticCoords']]], + ['fromstring_21',['fromString',['../classrtabmap_1_1Transform.html#a8358aacfcddec4ab82c43c758cad0b75',1,'rtabmap::Transform']]], + ['frustumfiltering_22',['frustumfiltering',['../group__FrustumFiltering.html#gad05921639a3371d2ee0f684b77542330',1,'rtabmap::util3d::frustumFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)'],['../group__FrustumFiltering.html#ga93cb6151fc470d6b932b4a7c6cb15090',1,'rtabmap::util3d::frustumFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)'],['../group__FrustumFiltering.html#ga4ceacaabe757da82d3278b08df766a69',1,'rtabmap::util3d::frustumFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)']]], + ['fullupdateneeded_23',['fullUpdateNeeded',['../classrtabmap_1_1GlobalMap.html#a11e9ba83337edf7f08f3c50064be028a',1,'rtabmap::GlobalMap']]], + ['fx_24',['fx',['../classrtabmap_1_1CameraModel.html#acea616d4e141804dbc5c6eda58bebf6b',1,'rtabmap::CameraModel']]], + ['fy_25',['fy',['../classrtabmap_1_1CameraModel.html#ac4089d34947b040205e281edae4151a1',1,'rtabmap::CameraModel']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_6.js b/preview/pr-1492/api/latest/search/functions_6.js new file mode 100644 index 00000000..6c0ebadd --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_6.js @@ -0,0 +1,199 @@ +var searchData= +[ + ['generatedescriptors_0',['generateDescriptors',['../classrtabmap_1_1Feature2D.html#abaca942668ac3d2f16d3e78797ff0fb9',1,'rtabmap::Feature2D']]], + ['generatedotgraph_1',['generateDOTGraph',['../classrtabmap_1_1Rtabmap.html#a3c32f64acd943c676a9b11c7dbd3a5ae',1,'rtabmap::Rtabmap']]], + ['generategraph_2',['generategraph',['../classrtabmap_1_1Memory.html#aebef354bb315f522b4767337a6bd1ee6',1,'rtabmap::Memory::generateGraph()'],['../classrtabmap_1_1DBDriver.html#abbf62fc6967cf618e6b2aece44f45230',1,'rtabmap::DBDriver::generateGraph()']]], + ['generatekeypoints_3',['generateKeypoints',['../classrtabmap_1_1Feature2D.html#a78d70d2150b42203ffd1c94d79661248',1,'rtabmap::Feature2D']]], + ['generatekeypoints3d_4',['generateKeypoints3D',['../classrtabmap_1_1Feature2D.html#ae01a548fe993a7aa309cce96645693ce',1,'rtabmap::Feature2D']]], + ['generateprediction_5',['generatePrediction',['../classrtabmap_1_1BayesFilter.html#a489031236b91dbaba0ff192f90799cd4',1,'rtabmap::BayesFilter']]], + ['geocentric_5fwgs84toenu_5fwgs84_6',['Geocentric_WGS84ToENU_WGS84',['../classrtabmap_1_1GeodeticCoords.html#a76c33e9f988c743e429b0a04d18e258d',1,'rtabmap::GeodeticCoords']]], + ['geodeticcoords_7',['geodeticcoords',['../classrtabmap_1_1GeodeticCoords.html#a41294c28a20d82ca1cee7f7038255d64',1,'rtabmap::GeodeticCoords::GeodeticCoords()'],['../classrtabmap_1_1GeodeticCoords.html#a0e70bc5a1464b930fafc579322912a68',1,'rtabmap::GeodeticCoords::GeodeticCoords(double latitude, double longitude, double altitude)']]], + ['get3dmap_8',['get3DMap',['../classrtabmap_1_1Rtabmap.html#ae617c65a0ba6f95a321b8c0c3a18b0e3',1,'rtabmap::Rtabmap']]], + ['getalllabels_9',['getAllLabels',['../classrtabmap_1_1Memory.html#a055a0ebfc7e2c128d386f8141dc320ce',1,'rtabmap::Memory']]], + ['getalllinks_10',['getAllLinks',['../classrtabmap_1_1Memory.html#acde7a0f34f8896c3c9f002c6cbcc614e',1,'rtabmap::Memory']]], + ['getallsignatureids_11',['getAllSignatureIds',['../classrtabmap_1_1Memory.html#a4c7c344a7f3733a8f30a6e82fbb4f20a',1,'rtabmap::Memory']]], + ['getangle_12',['getAngle',['../classrtabmap_1_1Transform.html#abd0f443c22c295cfe85e2402516defcc',1,'rtabmap::Transform']]], + ['getbackwardcompatibilitymap_13',['getBackwardCompatibilityMap',['../classrtabmap_1_1Parameters.html#a66c12cd1e2e614cc5c987cf7f0dbe2be',1,'rtabmap::Parameters']]], + ['getcellsize_14',['getcellsize',['../classrtabmap_1_1GlobalMap.html#a445f18d347d5624a012f756eb9fe5320',1,'rtabmap::GlobalMap::getCellSize()'],['../classrtabmap_1_1LocalGridMaker.html#a305865c8f98b498b13a35ef0b790f926',1,'rtabmap::LocalGridMaker::getCellSize()']]], + ['getclassname_15',['getclassname',['../classUObjDeletedEvent.html#adb1ad42f6258d12eee9da77d6f129633',1,'UObjDeletedEvent::getClassName()'],['../classULogEvent.html#a70ec329f7f43a18805469302ffddc610',1,'ULogEvent::getClassName()'],['../classUEvent.html#a2c7d278240ad4b7d88a2c534cc5f47b4',1,'UEvent::getClassName()'],['../classrtabmap_1_1UserDataEvent.html#a26248169380397c47377310d61090385',1,'rtabmap::UserDataEvent::getClassName()'],['../classrtabmap_1_1SensorEvent.html#a7bb8ca3a235aa8b58227bc50e19d7493',1,'rtabmap::SensorEvent::getClassName()'],['../classrtabmap_1_1RtabmapGoalStatusEvent.html#aa90a7d8a6afe4de12b28f68aaf4f2897',1,'rtabmap::RtabmapGoalStatusEvent::getClassName()'],['../classrtabmap_1_1RtabmapEventInit.html#ac10fa3c98f98804d1059b2673233bf0c',1,'rtabmap::RtabmapEventInit::getClassName()'],['../classrtabmap_1_1RtabmapLabelErrorEvent.html#ab41ac9cdd98c1d94b1a8dc9a21364315',1,'rtabmap::RtabmapLabelErrorEvent::getClassName()'],['../classrtabmap_1_1RtabmapEvent3DMap.html#ad2d9581145b56762e1d9ae5f04101db5',1,'rtabmap::RtabmapEvent3DMap::getClassName()'],['../classrtabmap_1_1RtabmapEventCmd.html#a23c1b76dc2e8d6223cb52cb4fcaf7b5c',1,'rtabmap::RtabmapEventCmd::getClassName()'],['../classrtabmap_1_1RtabmapEvent.html#ae548b73bb3504a10a4e40592648f42b8',1,'rtabmap::RtabmapEvent::getClassName()'],['../classrtabmap_1_1ParamEvent.html#a877e2b7fedcb8aba63e3430d7f975e0a',1,'rtabmap::ParamEvent::getClassName()'],['../classrtabmap_1_1OdometryResetEvent.html#a94dc8e8b7ec952c0ca2b393cc0f3e71d',1,'rtabmap::OdometryResetEvent::getClassName()'],['../classrtabmap_1_1OdometryEvent.html#a461365124cbdf488d3a05874be8c4bb2',1,'rtabmap::OdometryEvent::getClassName()'],['../classrtabmap_1_1IMUEvent.html#adf3482d48ccbf36daa039efb596405d0',1,'rtabmap::IMUEvent::getClassName()'],['../classrtabmap_1_1RtabmapGlobalPathEvent.html#a5dd474b3110c9d4bb53a832aaeda8145',1,'rtabmap::RtabmapGlobalPathEvent::getClassName()']]], + ['getclosesttransform_16',['getClosestTransform',['../classrtabmap_1_1Transform.html#ab943d72a808b96b7f89943fc78e38d68',1,'rtabmap::Transform']]], + ['getcode_17',['getCode',['../classUEvent.html#a7356350719dfd5ba2d28368d1fdcd143',1,'UEvent']]], + ['getcompresseddata_18',['getCompressedData',['../classrtabmap_1_1CompressionThread.html#a6908afb16364f91c7d0744decf6c970d',1,'rtabmap::CompressionThread']]], + ['getconnectedgraph_19',['getConnectedGraph',['../classrtabmap_1_1Optimizer.html#a4477c9a5b6651729944726465b5eba7f',1,'rtabmap::Optimizer']]], + ['getdata_20',['getData',['../classrtabmap_1_1IMUEvent.html#a3ebdf9e3cb56c153bf76d4aad5a6b44e',1,'rtabmap::IMUEvent']]], + ['getdatabasememoryused_21',['getDatabaseMemoryUsed',['../classrtabmap_1_1Memory.html#a83d0b30afc46dd66ab3106c9997657c4',1,'rtabmap::Memory']]], + ['getdatabaseurl_22',['getDatabaseUrl',['../classrtabmap_1_1Memory.html#ab2c3951385254cbb42fb399b407ded24',1,'rtabmap::Memory']]], + ['getdatabaseversion_23',['getdatabaseversion',['../classrtabmap_1_1DBDriver.html#a9adb7be1463016917f24a3db5f1e8264',1,'rtabmap::DBDriver::getDatabaseVersion()'],['../classrtabmap_1_1Memory.html#aebd7dd4ef859d70435a5db8e4f398ea5',1,'rtabmap::Memory::getDatabaseVersion() const']]], + ['getdbsavingtime_24',['getDbSavingTime',['../classrtabmap_1_1Memory.html#a40ba03d0f1291fc9e45ce86d05479cd3',1,'rtabmap::Memory']]], + ['getdefaultparameters_25',['getDefaultParameters',['../classrtabmap_1_1Parameters.html#a3921b82495e0308f8cfcbdb8ef072e21',1,'rtabmap::Parameters']]], + ['getdepth_26',['getDepth',['../namespacertabmap_1_1util2d.html#a48b07b02efba21a914db10e832589aba',1,'rtabmap::util2d']]], + ['getdescription_27',['getDescription',['../classrtabmap_1_1Parameters.html#a7aacfe3e18e28a1fb81d0f3f0ffbb414',1,'rtabmap::Parameters']]], + ['getdescriptor_28',['getDescriptor',['../classrtabmap_1_1VisualWord.html#a2d20ce6234dc211335a926759e111bbb',1,'rtabmap::VisualWord']]], + ['getdetector_29',['getDetector',['../classrtabmap_1_1RegistrationVis.html#a0a860fb3509b4c5b135b66ebd5cd6e55',1,'rtabmap::RegistrationVis']]], + ['getdir_30',['getDir',['../classUDirectory.html#a0177e6f7286fc63c48fe2629e6ba5b34',1,'UDirectory']]], + ['getdistance_31',['getDistance',['../classrtabmap_1_1Transform.html#ade8f4e91576b320690741efa817bd7ad',1,'rtabmap::Transform']]], + ['getdistancesquared_32',['getDistanceSquared',['../classrtabmap_1_1Transform.html#ae311741cc884ca8f5343bc2710b96a0b',1,'rtabmap::Transform']]], + ['getestimationtype_33',['getEstimationType',['../classrtabmap_1_1RegistrationVis.html#a951c79dd9be75b896c551e5213c0ee31',1,'rtabmap::RegistrationVis']]], + ['geteulerangles_34',['getEulerAngles',['../classrtabmap_1_1Transform.html#adf2345af30927b656ceca938ec4d0525',1,'rtabmap::Transform']]], + ['getextension_35',['getextension',['../classUFile.html#ac630657b2f15288df6ecddec029b42c6',1,'UFile::getExtension(const std::string &filePath)'],['../classUFile.html#aa937b9f20ef2e51091845c5108ded154',1,'UFile::getExtension()']]], + ['getfeature2d_36',['getFeature2D',['../classrtabmap_1_1Memory.html#ab094dfa40b0fe37cb12552a6ba081d6b',1,'rtabmap::Memory']]], + ['getfilenames_37',['getFileNames',['../classUDirectory.html#aa16e64be3cc238eec871bddaf6dbc289',1,'UDirectory']]], + ['getforwardwmposes_38',['getForwardWMPoses',['../classrtabmap_1_1Rtabmap.html#a8400ccecd090cb438d16178930fe0872',1,'rtabmap::Rtabmap']]], + ['getframerate_39',['getFrameRate',['../classrtabmap_1_1SensorCapture.html#af7de847c118ec1ba77a5c9f29f7efece',1,'rtabmap::SensorCapture']]], + ['getgoalreachedradius_40',['getGoalReachedRadius',['../classrtabmap_1_1Rtabmap.html#a6098155788f6e9ccaa636e26f8881c07',1,'rtabmap::Rtabmap']]], + ['getgps_41',['getGPS',['../classrtabmap_1_1Memory.html#aca3bdb688c64dd62672f2385ce6de594',1,'rtabmap::Memory']]], + ['getgraph_42',['getGraph',['../classrtabmap_1_1Rtabmap.html#a456fa0c95770f052d78f6d9f745fa1e3',1,'rtabmap::Rtabmap']]], + ['getgridmax_43',['getgridmax',['../classrtabmap_1_1GlobalMap.html#aa840b2e62893de929f952b8511df6164',1,'rtabmap::GlobalMap::getGridMax(double &x, double &y) const'],['../classrtabmap_1_1GlobalMap.html#a060366742fc8f51deaf7dd75b66615c7',1,'rtabmap::GlobalMap::getGridMax(double &x, double &y, double &z) const']]], + ['getgridmin_44',['getgridmin',['../classrtabmap_1_1GlobalMap.html#a37adbbb0e80ba76cfa080cec9811cca3',1,'rtabmap::GlobalMap::getGridMin(double &x, double &y, double &z) const'],['../classrtabmap_1_1GlobalMap.html#aaf028c4c070aa8568eaaf3dae4b926ee',1,'rtabmap::GlobalMap::getGridMin(double &x, double &y) const']]], + ['getgroundtruthpose_45',['getgroundtruthpose',['../classrtabmap_1_1Signature.html#a5d5f3aa41c0d9404654ebc5628a5189c',1,'rtabmap::Signature::getGroundTruthPose()'],['../classrtabmap_1_1Memory.html#a89dd9b0aea5595e929b23ded82cd8ff1',1,'rtabmap::Memory::getGroundTruthPose(int signatureId, bool lookInDatabase=false) const']]], + ['getgroundtruths_46',['getGroundTruths',['../classrtabmap_1_1Memory.html#ac61afdb7694d54b5e3d146be427638b2',1,'rtabmap::Memory']]], + ['gethighesthypothesisid_47',['getHighestHypothesisId',['../classrtabmap_1_1Rtabmap.html#ab11a50751ab17717f567934e7cb2c450',1,'rtabmap::Rtabmap']]], + ['gethighesthypothesisvalue_48',['getHighestHypothesisValue',['../classrtabmap_1_1Rtabmap.html#a530c87cda2cd010e384178bced6611a1',1,'rtabmap::Rtabmap']]], + ['getidentity_49',['getIdentity',['../classrtabmap_1_1Transform.html#a8ea4368f2018d751d2733038081d56a2',1,'rtabmap::Transform']]], + ['getimagecompressed_50',['getImageCompressed',['../classrtabmap_1_1Memory.html#abc4c40056783163ec5abde9366060cb2',1,'rtabmap::Memory']]], + ['getindexedwordscount_51',['getIndexedWordsCount',['../classrtabmap_1_1VWDictionary.html#a6a0610e87964c3881dc70cae6cd9123c',1,'rtabmap::VWDictionary']]], + ['getindexmemoryused_52',['getIndexMemoryUsed',['../classrtabmap_1_1VWDictionary.html#a63ec6a9b915eb939c2650e623feb0576',1,'rtabmap::VWDictionary']]], + ['getinformation_53',['getInformation',['../classrtabmap_1_1Rtabmap.html#aeea47830776fe57c456ae6a673069ddc',1,'rtabmap::Rtabmap']]], + ['getinlierdistance_54',['getInlierDistance',['../classrtabmap_1_1RegistrationVis.html#a488ecb8a7423996abdad98b0044cd7f2',1,'rtabmap::RegistrationVis']]], + ['getinvalidwordscount_55',['getInvalidWordsCount',['../classrtabmap_1_1Signature.html#ac2d1526d87df9ff5d4885b16c460ebcf',1,'rtabmap::Signature']]], + ['getiterations_56',['getIterations',['../classrtabmap_1_1RegistrationVis.html#a93331add1822dd6f02bc74efec6d6834',1,'rtabmap::RegistrationVis']]], + ['getlabel_57',['getLabel',['../classrtabmap_1_1Signature.html#a78a9ae9059257c60cf1d50ef415520cd',1,'rtabmap::Signature']]], + ['getlandmarks_58',['getLandmarks',['../classrtabmap_1_1Signature.html#a2257cfc6c620d726484f1c6c2b11257a',1,'rtabmap::Signature']]], + ['getlandmarksindex_59',['getLandmarksIndex',['../classrtabmap_1_1Memory.html#acf7e6cbe5eda50b024cbb1bc82d03b7c',1,'rtabmap::Memory']]], + ['getlastgloballoopclosureid_60',['getLastGlobalLoopClosureId',['../classrtabmap_1_1Memory.html#ad6e8870c75b300a7d526f49467f67913',1,'rtabmap::Memory']]], + ['getlastindexedwordid_61',['getLastIndexedWordId',['../classrtabmap_1_1VWDictionary.html#a65a99ae457b1c779233de57d190ca8da',1,'rtabmap::VWDictionary']]], + ['getlastlocalizationpose_62',['getLastLocalizationPose',['../classrtabmap_1_1Rtabmap.html#a2d2efac02d4a6d1d7bbc505d94fd634b',1,'rtabmap::Rtabmap']]], + ['getlastlocationid_63',['getLastLocationId',['../classrtabmap_1_1Rtabmap.html#a9406c710b7af988dda1868a3efa8f1dd',1,'rtabmap::Rtabmap']]], + ['getlastprocesstime_64',['getLastProcessTime',['../classrtabmap_1_1Rtabmap.html#a88ffdd1ba70707e5969deab4f6ee66a0',1,'rtabmap::Rtabmap']]], + ['getlastsignaturedata_65',['getLastSignatureData',['../classrtabmap_1_1Statistics.html#a582cb4d6d0b3034062d508a6cac77081',1,'rtabmap::Statistics']]], + ['getlastsignatureid_66',['getLastSignatureId',['../classrtabmap_1_1Memory.html#a65552e672e67c9f511b3384e3d117de6',1,'rtabmap::Memory']]], + ['getlastworkingsignature_67',['getLastWorkingSignature',['../classrtabmap_1_1Memory.html#ad14c4346a42a621b7834c60de6bc2e63',1,'rtabmap::Memory']]], + ['getleftsuffix_68',['getLeftSuffix',['../classrtabmap_1_1StereoCameraModel.html#a799e3f787d015b5cbd0189768f5b673c',1,'rtabmap::StereoCameraModel']]], + ['getlinks_69',['getlinks',['../classrtabmap_1_1Signature.html#a1496e2f2ae46f2b6efcf7ece309ffd22',1,'rtabmap::Signature::getLinks()'],['../classrtabmap_1_1Memory.html#a7d4e2a2281980bc1b18683fd8fc2ebeb',1,'rtabmap::Memory::getLinks()']]], + ['getlocalconstraints_70',['getLocalConstraints',['../classrtabmap_1_1Rtabmap.html#a4d1e329f0c0fcc341d14f6853ec86750',1,'rtabmap::Rtabmap']]], + ['getlocaloptimizedposes_71',['getLocalOptimizedPoses',['../classrtabmap_1_1Rtabmap.html#aebe0bf9364ff8952d041f57c6a1c1d57',1,'rtabmap::Rtabmap']]], + ['getlocalradius_72',['getLocalRadius',['../classrtabmap_1_1Rtabmap.html#a6a4c533659621ccb1f6a5ddbc8149306',1,'rtabmap::Rtabmap']]], + ['getlocaltransform_73',['getLocalTransform',['../classrtabmap_1_1SensorCapture.html#a99829249c51fd08c32310b788b00b663',1,'rtabmap::SensorCapture']]], + ['getloopclosureid_74',['getLoopClosureId',['../classrtabmap_1_1Rtabmap.html#a2bc8eecb690ec1e36955119cd2c1a197',1,'rtabmap::Rtabmap']]], + ['getloopclosurelinks_75',['getLoopClosureLinks',['../classrtabmap_1_1Memory.html#a88fecb24bd16886d6086937277df5f20',1,'rtabmap::Memory']]], + ['getloopclosurevalue_76',['getLoopClosureValue',['../classrtabmap_1_1Rtabmap.html#adc87cbb6adde3027b8c20bbba25fec7b',1,'rtabmap::Rtabmap']]], + ['getmapcorrection_77',['getMapCorrection',['../classrtabmap_1_1Rtabmap.html#a7b71f70a20f1ef42a65fa9571e254711',1,'rtabmap::Rtabmap']]], + ['getmapid_78',['getMapId',['../classrtabmap_1_1Memory.html#a2391cf06d55513bee3cfd50d8beb3a59',1,'rtabmap::Memory']]], + ['getmaxstmemsize_79',['getMaxStMemSize',['../classrtabmap_1_1Memory.html#a41b23c567f6aa6bcc3a756e5ae5c1f33',1,'rtabmap::Memory']]], + ['getmemory_80',['getMemory',['../classrtabmap_1_1Rtabmap.html#a08adb5e0b8019c1dbd4f571099d2d46b',1,'rtabmap::Rtabmap']]], + ['getmemorythreshold_81',['getMemoryThreshold',['../classrtabmap_1_1Rtabmap.html#a876d3599c76de815bee4b278a087cfa5',1,'rtabmap::Rtabmap']]], + ['getmemoryusage_82',['getMemoryUsage',['../classUProcessInfo.html#a8a494e68cdea348a4788b8d54fd7de40',1,'UProcessInfo']]], + ['getmemoryused_83',['getmemoryused',['../classrtabmap_1_1BayesFilter.html#a60ad13fd18ac4e595359f3c86c430a80',1,'rtabmap::BayesFilter::getMemoryUsed()'],['../classrtabmap_1_1CloudMap.html#a18a2dd71488719960f06eb4ae5e2cf4b',1,'rtabmap::CloudMap::getMemoryUsed()'],['../classrtabmap_1_1OccupancyGrid.html#a06bee0b73df176bd0ab6495e22992d7f',1,'rtabmap::OccupancyGrid::getMemoryUsed()'],['../classrtabmap_1_1GlobalMap.html#a20031690daf7a7e9195ae97abf46522b',1,'rtabmap::GlobalMap::getMemoryUsed()'],['../classrtabmap_1_1LocalGridCache.html#ab72a88b5c00d2a104ac1055538960acb',1,'rtabmap::LocalGridCache::getMemoryUsed()'],['../classrtabmap_1_1OctoMap.html#ab4706881eee755cf58312859e6a3af89',1,'rtabmap::OctoMap::getMemoryUsed()'],['../classrtabmap_1_1Memory.html#ad59e8591cd04e2ecd93b4e706f198763',1,'rtabmap::Memory::getMemoryUsed()'],['../classrtabmap_1_1SensorData.html#a60b3b2366bb66c914cfa7799204828fc',1,'rtabmap::SensorData::getMemoryUsed()'],['../classrtabmap_1_1Signature.html#a014fd12ee6cd47004e94ef4bb4753459',1,'rtabmap::Signature::getMemoryUsed()'],['../classrtabmap_1_1VisualWord.html#ad23c14c1c81848fb42573fd5ceac3a42',1,'rtabmap::VisualWord::getMemoryUsed()'],['../classrtabmap_1_1VWDictionary.html#ac5177a75f402538b50ec6c36bdbc7307',1,'rtabmap::VWDictionary::getMemoryUsed()']]], + ['getmetricconstraints_84',['getMetricConstraints',['../classrtabmap_1_1Memory.html#ab5329c43c6b185613222d8458c049848',1,'rtabmap::Memory']]], + ['getmingeometrycorrespondencesratio_85',['getMinGeometryCorrespondencesRatio',['../classrtabmap_1_1Registration.html#ac4baf87f079ce52df845805b84cad6c9',1,'rtabmap::Registration']]], + ['getmininliers_86',['getMinInliers',['../classrtabmap_1_1RegistrationVis.html#ae951e95c4ae2ea1ab5c4d849823d66c4',1,'rtabmap::RegistrationVis']]], + ['getminvisualcorrespondences_87',['getMinVisualCorrespondences',['../classrtabmap_1_1Registration.html#abc02df4842af900fbb5da75b8e5318e0',1,'rtabmap::Registration']]], + ['getmsg_88',['getMsg',['../classULogEvent.html#a460976b037ecf8357fc3fa3f613e5817',1,'ULogEvent']]], + ['getname_89',['getname',['../classUFile.html#a3e7905705a69b747e1ed6b6e37b19f3f',1,'UFile::getName(const std::string &filePath)'],['../classUFile.html#af7e7f5995b05cda098037ca1cdcd63f4',1,'UFile::getName()']]], + ['getneighborlinks_90',['getNeighborLinks',['../classrtabmap_1_1Memory.html#a172f0d3046c0b7d6b37cdf11af153bee',1,'rtabmap::Memory']]], + ['getneighborsid_91',['getNeighborsId',['../classrtabmap_1_1Memory.html#a521305f39adcdfbedebbe5bdae9efbc6',1,'rtabmap::Memory']]], + ['getneighborsidradius_92',['getNeighborsIdRadius',['../classrtabmap_1_1Memory.html#a10c44ee8a5d84480b41aa4980665d894',1,'rtabmap::Memory']]], + ['getneuralmodelwarning_93',['getNeuralModelWarning',['../classrtabmap_1_1CameraStereoZed.html#aab6005c68f61b37ee1919ef6828b32a4',1,'rtabmap::CameraStereoZed']]], + ['getnextfilename_94',['getNextFileName',['../classUDirectory.html#a89ff08bf6044f2a0dc61f0dbbdc9d2cc',1,'UDirectory']]], + ['getnextfilepath_95',['getNextFilePath',['../classUDirectory.html#a2e435d2c98e54a8119c2fc3b388c03e9',1,'UDirectory']]], + ['getnextid_96',['getNextId',['../classrtabmap_1_1VWDictionary.html#a085d69ef577600000f397bd63abeaf69',1,'rtabmap::VWDictionary']]], + ['getnextseqid_97',['getNextSeqID',['../classrtabmap_1_1SensorCapture.html#acbffaf17772639bc65b0a5457bc56b22',1,'rtabmap::SensorCapture']]], + ['getnndr_98',['getNNDR',['../classrtabmap_1_1RegistrationVis.html#aed9e9e593b290a4be1aeda05967a631a',1,'rtabmap::RegistrationVis']]], + ['getnndrratio_99',['getNndrRatio',['../classrtabmap_1_1VWDictionary.html#a454639bff3d95b2f9dd346413981d5c5',1,'rtabmap::VWDictionary']]], + ['getnnstrategy_100',['getNNStrategy',['../classrtabmap_1_1VWDictionary.html#ab1ec0db96328164864953f25d463bcbb',1,'rtabmap::VWDictionary']]], + ['getnntype_101',['getNNType',['../classrtabmap_1_1RegistrationVis.html#a697d562bebe30b73a1ecd34dabee4347',1,'rtabmap::RegistrationVis']]], + ['getnodecalibration_102',['getNodeCalibration',['../classrtabmap_1_1Memory.html#af48dbd905dda453b6b2c2246a90d0e04',1,'rtabmap::Memory']]], + ['getnodedata_103',['getNodeData',['../classrtabmap_1_1Memory.html#a22d6c0b38d8699cdbba73b6bcdb38dd6',1,'rtabmap::Memory']]], + ['getnodeinfo_104',['getNodeInfo',['../classrtabmap_1_1Memory.html#ae6184a6979703045f34d3e2a155eb9f3',1,'rtabmap::Memory']]], + ['getnodesinradius_105',['getnodesinradius',['../classrtabmap_1_1Rtabmap.html#a1a6498f60f52f65ffbed2d89d7c20648',1,'rtabmap::Rtabmap::getNodesInRadius(const Transform &pose, float radius, int k=0, std::map< int, float > *distsSqr=0)'],['../classrtabmap_1_1Rtabmap.html#a9bd263bbcdbc6f41119f8532131db974',1,'rtabmap::Rtabmap::getNodesInRadius(int nodeId, float radius, int k=0, std::map< int, float > *distsSqr=0)']]], + ['getnodesobservinglandmark_106',['getNodesObservingLandmark',['../classrtabmap_1_1Memory.html#afe7a1c036129e7ec94905c3650e91cc8',1,'rtabmap::Memory']]], + ['getnodewordsandglobaldescriptors_107',['getNodeWordsAndGlobalDescriptors',['../classrtabmap_1_1Memory.html#a4c555fac41be4b4d44c551c010971dc3',1,'rtabmap::Memory']]], + ['getnorm_108',['getNorm',['../classrtabmap_1_1Transform.html#af3c46b76fe855b0334a7f255792a6082',1,'rtabmap::Transform']]], + ['getnormsquared_109',['getNormSquared',['../classrtabmap_1_1Transform.html#aee7765828eb454015b4deb72d70a034a',1,'rtabmap::Transform']]], + ['getnotindexedwordscount_110',['getNotIndexedWordsCount',['../classrtabmap_1_1VWDictionary.html#a293c09f00caf84bb991d73983a5f22c8',1,'rtabmap::VWDictionary']]], + ['getodommaxinf_111',['getOdomMaxInf',['../classrtabmap_1_1Memory.html#ae37d02a779acb85797de25da36066829',1,'rtabmap::Memory']]], + ['getodompose_112',['getOdomPose',['../classrtabmap_1_1Memory.html#a4bb01d27d1ec7776103635b11228626c',1,'rtabmap::Memory']]], + ['getorientation_113',['getOrientation',['../classrtabmap_1_1IMUFilter.html#ae32dda362d720f964781f1681fa6a973',1,'rtabmap::IMUFilter']]], + ['getparameters_114',['getparameters',['../classrtabmap_1_1Memory.html#af4cc965870dd757517b126af4860d34d',1,'rtabmap::Memory::getParameters()'],['../classrtabmap_1_1Rtabmap.html#a9ac5900cbc165df1c501606f79c65ec1',1,'rtabmap::Rtabmap::getParameters() const']]], + ['getpath_115',['getPath',['../classrtabmap_1_1Rtabmap.html#a5fe89ac87283a92258d27f42eb7b13f1',1,'rtabmap::Rtabmap']]], + ['getpathcurrentgoalid_116',['getPathCurrentGoalId',['../classrtabmap_1_1Rtabmap.html#a5f886101463229fcd79bf3dd6418aa5c',1,'rtabmap::Rtabmap']]], + ['getpathcurrentgoalindex_117',['getPathCurrentGoalIndex',['../classrtabmap_1_1Rtabmap.html#a781713c190497d5f25d7e12112ae4345',1,'rtabmap::Rtabmap']]], + ['getpathcurrentindex_118',['getPathCurrentIndex',['../classrtabmap_1_1Rtabmap.html#a94eecd89994fc02a913b1eb087d85c84',1,'rtabmap::Rtabmap']]], + ['getpathnextnodes_119',['getPathNextNodes',['../classrtabmap_1_1Rtabmap.html#a45addb0848702b39c67c2394dd62f739',1,'rtabmap::Rtabmap']]], + ['getpathnextposes_120',['getPathNextPoses',['../classrtabmap_1_1Rtabmap.html#af81fe33ef45e1ad1838bc97d6a73a8be',1,'rtabmap::Rtabmap']]], + ['getpaths_121',['getPaths',['../classrtabmap_1_1Rtabmap.html#ad314edf995555480a2db1aceb7fd2ee7',1,'rtabmap::Rtabmap']]], + ['getpathstatus_122',['getPathStatus',['../classrtabmap_1_1Rtabmap.html#afe4aa4f9a67ba85b60c7dfda86d0131b',1,'rtabmap::Rtabmap']]], + ['getpathtransformtogoal_123',['getPathTransformToGoal',['../classrtabmap_1_1Rtabmap.html#aedf5dce175ee325822ab7b7772c8d4f5',1,'rtabmap::Rtabmap']]], + ['getpose_124',['getpose',['../classrtabmap_1_1CameraRealSense2.html#a31fc38dca7aa6dc61c68150d5409204e',1,'rtabmap::CameraRealSense2::getPose()'],['../classrtabmap_1_1CameraSeerSense.html#a831666d29d4eabc1a00e9eb5c8b47c27',1,'rtabmap::CameraSeerSense::getPose()'],['../classrtabmap_1_1CameraStereoZed.html#a1fceb3208a256d1023739a60f5931def',1,'rtabmap::CameraStereoZed::getPose()'],['../classrtabmap_1_1DBReader.html#abd2b32ae00a05810465f63d63c44d5ed',1,'rtabmap::DBReader::getPose()'],['../classrtabmap_1_1Odometry.html#a8b45aea55b336f758943b4a6b2ec28ee',1,'rtabmap::Odometry::getPose()'],['../classrtabmap_1_1Rtabmap.html#ac430e0adb75dc4aec3b7ba77053aabd0',1,'rtabmap::Rtabmap::getPose()'],['../classrtabmap_1_1SensorCapture.html#a2f940d75366088bfae0164e1803ffe9a',1,'rtabmap::SensorCapture::getPose()'],['../classrtabmap_1_1Signature.html#a5166864f276c921963033e8852c13076',1,'rtabmap::Signature::getPose() const']]], + ['getposecovariance_125',['getPoseCovariance',['../classrtabmap_1_1Signature.html#afc81cb91421dcd36e2f5e3dc84a77b44',1,'rtabmap::Signature']]], + ['getposterior_126',['getPosterior',['../classrtabmap_1_1BayesFilter.html#aceaa52e62af32f176185305f5359ee79',1,'rtabmap::BayesFilter']]], + ['getpredictionlc_127',['getPredictionLC',['../classrtabmap_1_1BayesFilter.html#ab13c8acecfbb4fcfff4e809e2b0a7538',1,'rtabmap::BayesFilter']]], + ['getpredictionlcstr_128',['getPredictionLCStr',['../classrtabmap_1_1BayesFilter.html#a18a6d97fe3088a4a356a85358f641376',1,'rtabmap::BayesFilter']]], + ['getreferences_129',['getReferences',['../classrtabmap_1_1VisualWord.html#aef73a60eccd61a917f27bf277366a5bc',1,'rtabmap::VisualWord']]], + ['getremovedparameters_130',['getRemovedParameters',['../classrtabmap_1_1Parameters.html#ae3e84e415669d8c8bf17b119683b1056',1,'rtabmap::Parameters']]], + ['getrightsuffix_131',['getRightSuffix',['../classrtabmap_1_1StereoCameraModel.html#a3ecae21bbf6bc9914d0bb553c99f9e09',1,'rtabmap::StereoCameraModel']]], + ['getserial_132',['getserial',['../classrtabmap_1_1CameraDepthAI.html#ac77ceb30af0f98aa27f2de1259f31d7e',1,'rtabmap::CameraDepthAI::getSerial()'],['../classrtabmap_1_1CameraFreenect.html#ad4aa325278c21b339aea31437430610d',1,'rtabmap::CameraFreenect::getSerial()'],['../classrtabmap_1_1CameraFreenect2.html#a985478701c8eb9751918fcd497893af7',1,'rtabmap::CameraFreenect2::getSerial()'],['../classrtabmap_1_1CameraImages.html#a217f54d1ead7a4d6af733c2644064a5f',1,'rtabmap::CameraImages::getSerial()'],['../classrtabmap_1_1CameraK4A.html#af7dae13200b0d2ca09294b335225e993',1,'rtabmap::CameraK4A::getSerial()'],['../classrtabmap_1_1CameraK4W2.html#a90bd066891ec59c4f1261af3353209bb',1,'rtabmap::CameraK4W2::getSerial()'],['../classrtabmap_1_1CameraMyntEye.html#ac163457701a9274659e41aae5417f831',1,'rtabmap::CameraMyntEye::getSerial()'],['../classrtabmap_1_1CameraOpenni.html#acaeb07cbf369a47817c48acacee04e41',1,'rtabmap::CameraOpenni::getSerial()'],['../classrtabmap_1_1CameraOpenNI2.html#a9767b92c3df7b637c75ee351208e3f0b',1,'rtabmap::CameraOpenNI2::getSerial()'],['../classrtabmap_1_1CameraOpenNICV.html#a29fe33644f755cf54307b55df898617b',1,'rtabmap::CameraOpenNICV::getSerial()'],['../classrtabmap_1_1CameraOrbbecSDK.html#a75f9abaf3ddc009c7772cc0239816b86',1,'rtabmap::CameraOrbbecSDK::getSerial()'],['../classrtabmap_1_1CameraRealSense.html#a4abbdf6efedd229a146d066b5ff17799',1,'rtabmap::CameraRealSense::getSerial()'],['../classrtabmap_1_1CameraRealSense2.html#aff19c4db66d2403c0e09a67d1418bcdc',1,'rtabmap::CameraRealSense2::getSerial()'],['../classrtabmap_1_1CameraSeerSense.html#aa921995e3a4a1cd5480868998bd27b2e',1,'rtabmap::CameraSeerSense::getSerial()'],['../classrtabmap_1_1CameraStereoDC1394.html#a125d6fa6e6bd7f8b2e3d22d10ce54acb',1,'rtabmap::CameraStereoDC1394::getSerial()'],['../classrtabmap_1_1CameraStereoFlyCapture2.html#a06d1e6cd0ea504f6601e78ecbd0442df',1,'rtabmap::CameraStereoFlyCapture2::getSerial()'],['../classrtabmap_1_1CameraStereoImages.html#a507ca5b4c37b75f4108e9aa8dad5125b',1,'rtabmap::CameraStereoImages::getSerial()'],['../classrtabmap_1_1CameraStereoTara.html#a87d7cdfd3354bdffd8e9e88f1244c79d',1,'rtabmap::CameraStereoTara::getSerial()'],['../classrtabmap_1_1CameraStereoVideo.html#a0eba205715f6f856b14eaba8de2eadcf',1,'rtabmap::CameraStereoVideo::getSerial()'],['../classrtabmap_1_1CameraStereoZed.html#a8c13902c0c25565357e6f7e0a16f0838',1,'rtabmap::CameraStereoZed::getSerial()'],['../classrtabmap_1_1CameraStereoZedOC.html#a11244c590c4e356765abf59e94f66ddb',1,'rtabmap::CameraStereoZedOC::getSerial()'],['../classrtabmap_1_1CameraVideo.html#ab3400ba7ae983cd1ad9678970079b00a',1,'rtabmap::CameraVideo::getSerial()'],['../classrtabmap_1_1DBReader.html#ac6e8622842447cdccfaab061c1cab3c4',1,'rtabmap::DBReader::getSerial()'],['../classrtabmap_1_1LidarVLP16.html#a9d533721703457a60e94124d840fee95',1,'rtabmap::LidarVLP16::getSerial()'],['../classrtabmap_1_1SensorCapture.html#a7830e571e45752f9d8f30fa806f6aa64',1,'rtabmap::SensorCapture::getSerial()']]], + ['getsignature_133',['getSignature',['../classrtabmap_1_1Memory.html#a15ec109dd157745f69dcd4f80efaf561',1,'rtabmap::Memory']]], + ['getsignaturecopy_134',['getSignatureCopy',['../classrtabmap_1_1Rtabmap.html#a7133d8efa98410eaec68e0199ff98a0c',1,'rtabmap::Rtabmap']]], + ['getsignatureidbylabel_135',['getSignatureIdByLabel',['../classrtabmap_1_1Memory.html#a4907501b27fdfd5b8053b9d932d8dec4',1,'rtabmap::Memory']]], + ['getsignaturesdata_136',['getSignaturesData',['../classrtabmap_1_1Statistics.html#abd89f302128c32d07b0dea07e50b742b',1,'rtabmap::Statistics']]], + ['getsimilaritythreshold_137',['getSimilarityThreshold',['../classrtabmap_1_1Memory.html#ae1e4c518ec65f86b7a3eade7ac2705c8',1,'rtabmap::Memory']]], + ['getstamp_138',['getstamp',['../classrtabmap_1_1IMUEvent.html#ac1dc5e7e806fbe05ee5fec562384924f',1,'rtabmap::IMUEvent::getStamp()'],['../classrtabmap_1_1Signature.html#aa9c4ed8d3617b039181cf44a0e30eca2',1,'rtabmap::Signature::getStamp()']]], + ['getstatistics_139',['getStatistics',['../classrtabmap_1_1Rtabmap.html#a5d18002c7eb7cee234471686413d201c',1,'rtabmap::Rtabmap']]], + ['getstm_140',['getSTM',['../classrtabmap_1_1Rtabmap.html#a809673c3d0e6d8fb05ebb4a52218d438',1,'rtabmap::Rtabmap']]], + ['getstmem_141',['getStMem',['../classrtabmap_1_1Memory.html#a007abab13fade6f63b6db3fc279a1631',1,'rtabmap::Memory']]], + ['getstmemintermediatenodescount_142',['getStMemIntermediateNodesCount',['../classrtabmap_1_1Memory.html#a3f3a3da280f9e5ee9bba6df03e551f79',1,'rtabmap::Memory']]], + ['getstmsize_143',['getSTMSize',['../classrtabmap_1_1Rtabmap.html#a49adc83991d6b95c7911f41330cbd467',1,'rtabmap::Rtabmap']]], + ['gettargetversion_144',['getTargetVersion',['../classrtabmap_1_1DBDriver.html#a456bc49e8e60e0c754078a4b09e3f1a1',1,'rtabmap::DBDriver']]], + ['gettime_145',['getTime',['../classULogger.html#a17e6d133cea7c2cbe5365e5f5f2216a9',1,'ULogger']]], + ['gettimethreshold_146',['getTimeThreshold',['../classrtabmap_1_1Rtabmap.html#af7fa0cbd1ef027f8bb2af11364487df8',1,'rtabmap::Rtabmap']]], + ['gettotalactivereferences_147',['getTotalActiveReferences',['../classrtabmap_1_1VWDictionary.html#a98447a880fdcf91709f00d00cfd4e54d',1,'rtabmap::VWDictionary']]], + ['gettotalmemsize_148',['getTotalMemSize',['../classrtabmap_1_1Rtabmap.html#ab44f1bca06eec4beb8dfebeed9ed5ce8',1,'rtabmap::Rtabmap']]], + ['gettotalreferences_149',['getTotalReferences',['../classrtabmap_1_1VisualWord.html#a2eaf9703feb310a1038fcd6c8341a1d3',1,'rtabmap::VisualWord']]], + ['gettransform_150',['getTransform',['../classrtabmap_1_1Transform.html#a3ebc45da479b4cae9a5641fda6ebaf23',1,'rtabmap::Transform']]], + ['gettranslation_151',['getTranslation',['../classrtabmap_1_1Transform.html#a3393daecc17559c66156ba3eb0711875',1,'rtabmap::Transform']]], + ['gettranslationandeulerangles_152',['getTranslationAndEulerAngles',['../classrtabmap_1_1Transform.html#aad65adff491fd57a31dbe4e26d7f29af',1,'rtabmap::Transform']]], + ['gettype_153',['gettype',['../classrtabmap_1_1Odometry.html#a92685daa2786aff06518c8c4e26b8899',1,'rtabmap::Odometry::getType()'],['../classrtabmap_1_1OdometryCuVSLAM.html#a68801df22a6803dabf7a064b99e04898',1,'rtabmap::OdometryCuVSLAM::getType()'],['../classrtabmap_1_1OdometryDVO.html#a8475f5a8b1ba4e288ba58daf6284acc9',1,'rtabmap::OdometryDVO::getType()'],['../classrtabmap_1_1OdometryF2F.html#af0e2f40a3dd28b9e1e84159bcf9df323',1,'rtabmap::OdometryF2F::getType()'],['../classrtabmap_1_1OdometryF2M.html#aa0244571578fd8604470d8c21af01611',1,'rtabmap::OdometryF2M::getType()'],['../classrtabmap_1_1OdometryFLOAM.html#a311c8b022d0a2dc6219b97a8e2b40d84',1,'rtabmap::OdometryFLOAM::getType()'],['../classrtabmap_1_1OdometryFovis.html#a415b08f31a2ab8ff503c84623df71f0d',1,'rtabmap::OdometryFovis::getType()'],['../classrtabmap_1_1OdometryLIOSAM.html#aea8d8aea35772e3b81ba3f74c6eb3415',1,'rtabmap::OdometryLIOSAM::getType()'],['../classrtabmap_1_1OdometryLOAM.html#a0833118684e4f836ec668b735f81da0d',1,'rtabmap::OdometryLOAM::getType()'],['../classrtabmap_1_1OdometryMono.html#ada54391f88a0704c4fab2d9a2b370a15',1,'rtabmap::OdometryMono::getType()'],['../classrtabmap_1_1OdometryMSCKF.html#a81657f9c46e39bfa48e1d0021c5af8ea',1,'rtabmap::OdometryMSCKF::getType()'],['../classrtabmap_1_1OdometryOkvis.html#ab93efd88da4ff30e4ee4a0ec525347d8',1,'rtabmap::OdometryOkvis::getType()'],['../classrtabmap_1_1OdometryOpen3D.html#a79c86c26bd892619797d6266243bb8d6',1,'rtabmap::OdometryOpen3D::getType()'],['../classrtabmap_1_1OdometryOpenVINS.html#a79898924aa5af5d59ce10028e876e387',1,'rtabmap::OdometryOpenVINS::getType()'],['../classrtabmap_1_1OdometryORBSLAM2.html#a8773eea08df092d237e17af96ff6d096',1,'rtabmap::OdometryORBSLAM2::getType()'],['../classrtabmap_1_1OdometryORBSLAM3.html#a6a4161d9be51ff66e3571ba912655029',1,'rtabmap::OdometryORBSLAM3::getType()'],['../classrtabmap_1_1OdometryVINSFusion.html#ac7e841322ccadfcfdec61cc3b698754a',1,'rtabmap::OdometryVINSFusion::getType()'],['../classrtabmap_1_1OdometryViso2.html#ae9bf8422bbf6d2c880098b828b5d6187',1,'rtabmap::OdometryViso2::getType()'],['../classrtabmap_1_1Parameters.html#a08f4ea48ac7dbd93cb322d1c89b455b0',1,'rtabmap::Parameters::getType()']]], + ['getuncompresseddata_154',['getUncompressedData',['../classrtabmap_1_1CompressionThread.html#aafdc57cad744cbe94b30a8abfe7711a4',1,'rtabmap::CompressionThread']]], + ['getunusedword_155',['getUnusedWord',['../classrtabmap_1_1VWDictionary.html#abbd007a028847ecbbdd50e3480ba95e3',1,'rtabmap::VWDictionary']]], + ['getunusedwordids_156',['getUnusedWordIds',['../classrtabmap_1_1VWDictionary.html#a64b0aee7f33cbd4df26e2d0c14329e9d',1,'rtabmap::VWDictionary']]], + ['getunusedwords_157',['getUnusedWords',['../classrtabmap_1_1VWDictionary.html#ab47b5ecb12c822474004f0ad77dbb388',1,'rtabmap::VWDictionary']]], + ['getunusedwordssize_158',['getUnusedWordsSize',['../classrtabmap_1_1VWDictionary.html#a117282f59ed918808d8116cd1f92f412',1,'rtabmap::VWDictionary']]], + ['getupdateerror_159',['getUpdateError',['../classrtabmap_1_1GlobalMap.html#a99c3840a89e76a091cf59cfaf1a8bcc4',1,'rtabmap::GlobalMap']]], + ['geturl_160',['getUrl',['../classrtabmap_1_1DBDriver.html#a79365611bce06aeda0d078641be89cab',1,'rtabmap::DBDriver']]], + ['getvelocity_161',['getVelocity',['../classrtabmap_1_1Signature.html#ae97f22fcb6799a5312c1948cb9f42c99',1,'rtabmap::Signature']]], + ['getvelocityguess_162',['getVelocityGuess',['../classrtabmap_1_1Odometry.html#aa6ab1c129163771b0d87e3e068a0427e',1,'rtabmap::Odometry']]], + ['getvirtualplaceprior_163',['getVirtualPlacePrior',['../classrtabmap_1_1BayesFilter.html#a1f479b2d242f05eef69532f454dc851f',1,'rtabmap::BayesFilter']]], + ['getvisualwords_164',['getVisualWords',['../classrtabmap_1_1VWDictionary.html#a6bcad4c04999469001b5ac03b8a61ab4',1,'rtabmap::VWDictionary']]], + ['getvwdictionary_165',['getVWDictionary',['../classrtabmap_1_1Memory.html#a61adae3b07b3daee32efd1abb4dac45e',1,'rtabmap::Memory']]], + ['getweight_166',['getWeight',['../classrtabmap_1_1Signature.html#a701b32c562d789929a18a19c08bac4ca',1,'rtabmap::Signature']]], + ['getweights_167',['getweights',['../classrtabmap_1_1Memory.html#a4d8bfc0b85f270dbb3fc66cde079b63e',1,'rtabmap::Memory::getWeights()'],['../classrtabmap_1_1Rtabmap.html#a353361aeeece3ce8c799d168a5798a01',1,'rtabmap::Rtabmap::getWeights() const']]], + ['getwm_168',['getWM',['../classrtabmap_1_1Rtabmap.html#ae3d40ed4ee48954e70d45e0779c24a49',1,'rtabmap::Rtabmap']]], + ['getwmsize_169',['getWMSize',['../classrtabmap_1_1Rtabmap.html#a203a18eb60f6c057518fd5129bbc32ff',1,'rtabmap::Rtabmap']]], + ['getword_170',['getWord',['../classrtabmap_1_1VWDictionary.html#a5cf9981cf11f8f93280b7d0c195159e1',1,'rtabmap::VWDictionary']]], + ['getwords_171',['getWords',['../classrtabmap_1_1Signature.html#a68eaa67c81d08e20d2b7a43b0659b1d4',1,'rtabmap::Signature']]], + ['getwords3_172',['getWords3',['../classrtabmap_1_1Signature.html#ab902bfc7cdde2542ffe7e5d441f90a66',1,'rtabmap::Signature']]], + ['getwordschanged_173',['getWordsChanged',['../classrtabmap_1_1Signature.html#a01f6eac0e5836aa921d65108b75249f6',1,'rtabmap::Signature']]], + ['getwordsdescriptors_174',['getWordsDescriptors',['../classrtabmap_1_1Signature.html#a1ed4181ac5cc7b477482459d680c63b1',1,'rtabmap::Signature']]], + ['getwordskpts_175',['getWordsKpts',['../classrtabmap_1_1Signature.html#a471f71821ceeec9a25e9e4e16673d14f',1,'rtabmap::Signature']]], + ['getworkingdir_176',['getWorkingDir',['../classrtabmap_1_1Rtabmap.html#a61bc4dce59a1da8b904a7dbe39e5038a',1,'rtabmap::Rtabmap']]], + ['getworkingmem_177',['getWorkingMem',['../classrtabmap_1_1Memory.html#ab6c0794ad1aac6e9084c0240e709cdc6',1,'rtabmap::Memory']]], + ['getworkingmemintermediatenodescount_178',['getWorkingMemIntermediateNodesCount',['../classrtabmap_1_1Memory.html#ad9b97cdfd95eb3c0dad649d755fc3267',1,'rtabmap::Memory']]], + ['getworkingmemsize_179',['getWorkingMemSize',['../classrtabmap_1_1Memory.html#a5ca9260a2a63fae6f3d16e1db9cbce53',1,'rtabmap::Memory']]], + ['globalbundleadjustment_180',['globalBundleAdjustment',['../classrtabmap_1_1Rtabmap.html#ab1044f290653749990018ca5722f00c7',1,'rtabmap::Rtabmap']]], + ['globaldescriptors_181',['globalDescriptors',['../classrtabmap_1_1SensorData.html#acd46b940bac6e1d53ff2826be309b4c8',1,'rtabmap::SensorData']]], + ['globalmap_182',['GlobalMap',['../classrtabmap_1_1GlobalMap.html#a03581caaa2a313b131726af4e4a6b714',1,'rtabmap::GlobalMap']]], + ['globalpose_183',['globalPose',['../classrtabmap_1_1SensorData.html#a55e6ca21bfd11b7afb375451a2a77b87',1,'rtabmap::SensorData']]], + ['globalposecovariance_184',['globalPoseCovariance',['../classrtabmap_1_1SensorData.html#a569af71e8757105dc040251a3805fe97',1,'rtabmap::SensorData']]], + ['gps_185',['gps',['../classrtabmap_1_1GPS.html#a4ea914df744ae5a9ff60eff6bb2c734d',1,'rtabmap::GPS::GPS()'],['../classrtabmap_1_1GPS.html#a488bb172e3b8836387e0994a31e709ef',1,'rtabmap::GPS::GPS(const double &stamp, const double &longitude, const double &latitude, const double &altitude, const double &error, const double &bearing)'],['../classrtabmap_1_1SensorData.html#a176b8160afc549fc6eaa2d0567c12957',1,'rtabmap::SensorData::gps()']]], + ['gravitysigma_186',['gravitySigma',['../classrtabmap_1_1Optimizer.html#aceb68e0f692b81c4a978e46f804515d7',1,'rtabmap::Optimizer']]], + ['gridcellsize_187',['gridCellSize',['../classrtabmap_1_1SensorData.html#a984ce55b6b75152a63441bd07288dc6c',1,'rtabmap::SensorData']]], + ['gridemptycellscompressed_188',['gridEmptyCellsCompressed',['../classrtabmap_1_1SensorData.html#ac2bae4f0747795f778275102b4ebf1b3',1,'rtabmap::SensorData']]], + ['gridemptycellsraw_189',['gridEmptyCellsRaw',['../classrtabmap_1_1SensorData.html#a490e96f3f1d16cc559b3a004e2ec4fbe',1,'rtabmap::SensorData']]], + ['gridgroundcellscompressed_190',['gridGroundCellsCompressed',['../classrtabmap_1_1SensorData.html#ab3c515b23322cd31c3fcbcb054588e43',1,'rtabmap::SensorData']]], + ['gridgroundcellsraw_191',['gridGroundCellsRaw',['../classrtabmap_1_1SensorData.html#a2db9b9dbbe3d0943a47cdc4a5a9051d4',1,'rtabmap::SensorData']]], + ['gridobstaclecellscompressed_192',['gridObstacleCellsCompressed',['../classrtabmap_1_1SensorData.html#a50b09c52de6c8c6a6a95ee08886845a0',1,'rtabmap::SensorData']]], + ['gridobstaclecellsraw_193',['gridObstacleCellsRaw',['../classrtabmap_1_1SensorData.html#a0f2e804ebbcff5be648a43f0a41e9dfc',1,'rtabmap::SensorData']]], + ['gridviewpoint_194',['gridViewPoint',['../classrtabmap_1_1SensorData.html#a51f21b98088ceec4c5d108d0fbe03200',1,'rtabmap::SensorData']]], + ['groundtruth_195',['groundTruth',['../classrtabmap_1_1SensorData.html#aef9e0c36efdc8915536c3bc082108689',1,'rtabmap::SensorData']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_7.js b/preview/pr-1492/api/latest/search/functions_7.js new file mode 100644 index 00000000..0cbddd2c --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_7.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['handleevent_0',['handleevent',['../classrtabmap_1_1OdometryThread.html#a65808dd7148c1e2c49dcf90ef718b5a8',1,'rtabmap::OdometryThread::handleEvent()'],['../classrtabmap_1_1RtabmapThread.html#ab2556f7773329963038d876c86e97d09',1,'rtabmap::RtabmapThread::handleEvent()'],['../classUEventsHandler.html#a0d43b582c19f01196a513f66d3618d8d',1,'UEventsHandler::handleEvent()']]], + ['haslink_1',['hasLink',['../classrtabmap_1_1Signature.html#ad71fa7c0466dbb5c5062953043c3fcb0',1,'rtabmap::Signature']]], + ['homedir_2',['homeDir',['../classUDirectory.html#a3338b47405f65f25a4256e0ea86bff07',1,'UDirectory']]], + ['horizontalfov_3',['horizontalFOV',['../classrtabmap_1_1CameraModel.html#a12abd4cac897f48bf862a96f0eba1d65',1,'rtabmap::CameraModel']]], + ['hsvtorgb_4',['HSVtoRGB',['../namespacertabmap_1_1util2d.html#ac29ac5b8bed26a5299d378708170dd11',1,'rtabmap::util2d']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_8.js b/preview/pr-1492/api/latest/search/functions_8.js new file mode 100644 index 00000000..9b53cdc5 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_8.js @@ -0,0 +1,89 @@ +var searchData= +[ + ['id_0',['id',['../classrtabmap_1_1SensorData.html#a84fbcb16e51018d96065d3ce240650c6',1,'rtabmap::SensorData::id()'],['../classrtabmap_1_1Landmark.html#a2b5a5cbdb313813e3bb473a05b1145e2',1,'rtabmap::Landmark::id()'],['../classUObjDeletionThread.html#a027f81f93f7b78c442a094d944136f20',1,'UObjDeletionThread::id()'],['../classrtabmap_1_1Signature.html#a31c6e7b7e720eca20fb5935e0ee1d9f9',1,'rtabmap::Signature::id()'],['../classrtabmap_1_1VisualWord.html#a988fd37d739297c9b04c7dc156de3c66',1,'rtabmap::VisualWord::id()']]], + ['imagecompressed_1',['imageCompressed',['../classrtabmap_1_1SensorData.html#aafcc6b483798b7a99fafa8f929db1029',1,'rtabmap::SensorData']]], + ['imageraw_2',['imageRaw',['../classrtabmap_1_1SensorData.html#ae9e44401d0d6faee8fcb801090936fef',1,'rtabmap::SensorData']]], + ['imagesalreadyrectified_3',['imagesAlreadyRectified',['../classrtabmap_1_1Odometry.html#ac9ae854d14d44d82e1f20e8a4791b9c4',1,'rtabmap::Odometry']]], + ['imu_4',['imu',['../classrtabmap_1_1SensorData.html#a056056de80edf1bc20505fd992cdc6e7',1,'rtabmap::SensorData::imu()'],['../classrtabmap_1_1IMU.html#a76e674d3ef1865369e1416ae5ff76483',1,'rtabmap::IMU::IMU()'],['../classrtabmap_1_1IMU.html#a8db1233b6871dcbd58f1862cee2826fa',1,'rtabmap::IMU::IMU(const cv::Vec4d &orientation, const cv::Mat &orientationCovariance, const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())'],['../classrtabmap_1_1IMU.html#a3171afc29cdf8587a401b6da1b1908e6',1,'rtabmap::IMU::IMU(const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())']]], + ['imuevent_5',['imuevent',['../classrtabmap_1_1IMUEvent.html#a1ab86d7c16b1cadb44f0440808a9a81b',1,'rtabmap::IMUEvent::IMUEvent()'],['../classrtabmap_1_1IMUEvent.html#af041b297fa5f621dbc4fd085b16da800',1,'rtabmap::IMUEvent::IMUEvent(const IMU &data, double stamp)']]], + ['imus_6',['imus',['../classrtabmap_1_1Odometry.html#a6c9ed388da42499d2244bb98c8ff0e8d',1,'rtabmap::Odometry']]], + ['imuthread_7',['IMUThread',['../classrtabmap_1_1IMUThread.html#a97a2c48c6bb7e29ae64147fc9f032ac3',1,'rtabmap::IMUThread']]], + ['incrementmapid_8',['incrementMapId',['../classrtabmap_1_1Memory.html#afce9dbf3e5657d65540e33c59e992d83',1,'rtabmap::Memory']]], + ['info_9',['info',['../classrtabmap_1_1SensorEvent.html#a89ec0e00ab443a71b4735e392e419331',1,'rtabmap::SensorEvent']]], + ['inframe_10',['inFrame',['../classrtabmap_1_1CameraModel.html#aa07cbe07c7893e726c408392cf54d9ca',1,'rtabmap::CameraModel']]], + ['init_11',['init',['../classrtabmap_1_1SensorCapture.html#a1c0cd843969fab53f157cbe0fd333b8a',1,'rtabmap::SensorCapture::init()'],['../classrtabmap_1_1Rtabmap.html#a25bfb157aa3be3bd3c8a1d4200329041',1,'rtabmap::Rtabmap::init(const std::string &configFile="", const std::string &databasePath="", bool loadDatabaseParameters=false)'],['../classrtabmap_1_1Rtabmap.html#a711c479925db2c9f8201aacffe70281b',1,'rtabmap::Rtabmap::init(const ParametersMap &parameters, const std::string &databasePath="", bool loadDatabaseParameters=false)'],['../classrtabmap_1_1Memory.html#aeeabc78648bf7dc14ea1356828cdeddd',1,'rtabmap::Memory::init()'],['../classrtabmap_1_1LidarVLP16.html#a80162804e05013f64c6868084f460ab0',1,'rtabmap::LidarVLP16::init()'],['../classrtabmap_1_1IMUThread.html#aeed84fd5d571a5e9af54c8c3ea16ef9d',1,'rtabmap::IMUThread::init()'],['../classrtabmap_1_1DBReader.html#a31b8ffc3d213da7ab58a85ce89b8055e',1,'rtabmap::DBReader::init()'],['../classrtabmap_1_1CameraVideo.html#a2b20fb67f20ec64e6c43e8d76d5c1f74',1,'rtabmap::CameraVideo::init()'],['../classrtabmap_1_1CameraOpenNI2.html#a0c0da722b985da3595896fcc6bc72c7b',1,'rtabmap::CameraOpenNI2::init()'],['../classrtabmap_1_1CameraStereoZedOC.html#a37264abe58baa727bb5ee8d6653fa443',1,'rtabmap::CameraStereoZedOC::init()'],['../classrtabmap_1_1CameraStereoZed.html#a80088853404d1c4e89b5f29933d7b020',1,'rtabmap::CameraStereoZed::init()'],['../classrtabmap_1_1CameraStereoVideo.html#a8bc165fb5c77bb9693203791a0888269',1,'rtabmap::CameraStereoVideo::init()'],['../classrtabmap_1_1CameraStereoTara.html#a3cd79ca07d74d6a3501f3ecd9b31bbef',1,'rtabmap::CameraStereoTara::init()'],['../classrtabmap_1_1CameraStereoImages.html#abc0cb4bfd56314d0003c6ce5d365cbca',1,'rtabmap::CameraStereoImages::init()'],['../classrtabmap_1_1CameraStereoFlyCapture2.html#a46a2477a1c151927c9d5e7eea51d3354',1,'rtabmap::CameraStereoFlyCapture2::init()'],['../classrtabmap_1_1CameraSeerSense.html#a2fb66c8fa789c747b12c4ce85c8fc874',1,'rtabmap::CameraSeerSense::init()'],['../classrtabmap_1_1CameraDepthAI.html#aeab341a67f8c9ef3a078ef4636f969c1',1,'rtabmap::CameraDepthAI::init()'],['../classrtabmap_1_1CameraFreenect.html#aa36a4142ea9e7dab7120690b1d4a7449',1,'rtabmap::CameraFreenect::init()'],['../classrtabmap_1_1CameraFreenect2.html#aab9ed1bf2f64c6b8f6f95e25f94c4a8f',1,'rtabmap::CameraFreenect2::init()'],['../classrtabmap_1_1CameraImages.html#a8f00b6eb8c78a66d3381877825d70206',1,'rtabmap::CameraImages::init()'],['../classrtabmap_1_1CameraK4A.html#af2c611c697451697f318405469bb23e8',1,'rtabmap::CameraK4A::init()'],['../classrtabmap_1_1CameraK4W2.html#a33aec7e8863ddd2815a983a71e869127',1,'rtabmap::CameraK4W2::init()'],['../classrtabmap_1_1CameraMyntEye.html#a368591c828d3bb5aabfe8cae56d01304',1,'rtabmap::CameraMyntEye::init()'],['../classrtabmap_1_1CameraOpenni.html#aaa00fc3850c747fb261c87d4ad54827f',1,'rtabmap::CameraOpenni::init()'],['../classrtabmap_1_1CameraOpenNICV.html#a4d636b36e01de97d35fb0b6bb5fc3b7d',1,'rtabmap::CameraOpenNICV::init()'],['../classrtabmap_1_1CameraOrbbecSDK.html#a3a99d50d119791b9d3a36056aaddf59a',1,'rtabmap::CameraOrbbecSDK::init()'],['../classrtabmap_1_1CameraRealSense.html#a8c94957c92c38eee0d9ebbfd75d35a10',1,'rtabmap::CameraRealSense::init()'],['../classrtabmap_1_1CameraRealSense2.html#a7efbcb280ddd451a9c8fdbdba599c68f',1,'rtabmap::CameraRealSense2::init()'],['../classrtabmap_1_1CameraRGBDImages.html#a21903042693fbbc0bfc1586225efb2dd',1,'rtabmap::CameraRGBDImages::init()'],['../classrtabmap_1_1CameraStereoDC1394.html#a2cc861b0f7c66b8e21267678f6f5f221',1,'rtabmap::CameraStereoDC1394::init()']]], + ['initrectificationmap_12',['initrectificationmap',['../classrtabmap_1_1CameraModel.html#a5690a86d11b0d84e80961ae5d38b1d25',1,'rtabmap::CameraModel::initRectificationMap()'],['../classrtabmap_1_1StereoCameraModel.html#a544ee7d540dfe57c94863190d87898aa',1,'rtabmap::StereoCameraModel::initRectificationMap()']]], + ['interpolate_13',['interpolate',['../namespacertabmap_1_1util2d.html#afc241016af8396edf5228dbe9e80ee8d',1,'rtabmap::util2d::interpolate()'],['../classrtabmap_1_1Transform.html#af42b1c945a7fee57a26207fb96b7143d',1,'rtabmap::Transform::interpolate(float t, const Transform &other) const']]], + ['inverse_14',['inverse',['../classrtabmap_1_1Transform.html#a71ff72d5731d252a87a19c63e3890e3a',1,'rtabmap::Transform::inverse()'],['../classrtabmap_1_1Link.html#a0d5dcb7392f6ac89ca8b4de202ca07d3',1,'rtabmap::Link::inverse()']]], + ['is3d_15',['is3D',['../classrtabmap_1_1LocalGrid.html#af4bac3ac9ffd57653dee619b5be2b4f7',1,'rtabmap::LocalGrid']]], + ['is3dof_16',['is3DoF',['../classrtabmap_1_1Transform.html#a61c6a6acf6b149caa67918331d73004a',1,'rtabmap::Transform']]], + ['is4dof_17',['is4DoF',['../classrtabmap_1_1Transform.html#adaa07bac5d863d028d277b84880aeaab',1,'rtabmap::Transform']]], + ['isavailable_18',['isavailable',['../classrtabmap_1_1Optimizer.html#afe0381a3b42926b7634027e522766eb1',1,'rtabmap::Optimizer::isAvailable()'],['../classrtabmap_1_1Feature2D.html#a6020550480c25d36f0b4255629e75ee2',1,'rtabmap::Feature2D::isAvailable()']]], + ['isbadsignature_19',['isBadSignature',['../classrtabmap_1_1Signature.html#a693874de0d6ede4fe5c5d43d6f4d8b55',1,'rtabmap::Signature']]], + ['isbindatakept_20',['isBinDataKept',['../classrtabmap_1_1Memory.html#a18a6e852d545751fbc348d2aae6d7fe0',1,'rtabmap::Memory']]], + ['isbool_21',['isBool',['../classUVariant.html#a1f5b265f0e4569021bd6bc212cae91f7',1,'UVariant']]], + ['iscapturing_22',['isCapturing',['../classrtabmap_1_1SensorCaptureThread.html#ab2654b31ebdf06b375045fadbc83731a',1,'rtabmap::SensorCaptureThread']]], + ['ischar_23',['isChar',['../classUVariant.html#a644e3deffa081cacfdadddc1f504e6b6',1,'UVariant']]], + ['ischararray_24',['isCharArray',['../classUVariant.html#ab17409bb37beec9c62defdbe398dfe8b',1,'UVariant']]], + ['isconnected_25',['isConnected',['../classrtabmap_1_1DBDriver.html#a7b1222cf6e75d7365b5b90c37bca2a85',1,'rtabmap::DBDriver']]], + ['iscovarianceignored_26',['isCovarianceIgnored',['../classrtabmap_1_1Optimizer.html#a8bb6372ce4c67fd9b8d54f692ac34238',1,'rtabmap::Optimizer']]], + ['iscreating_27',['isCreating',['../classUThread.html#ac80eff7d48382fd230141ca286370d33',1,'UThread']]], + ['isdouble_28',['isDouble',['../classUVariant.html#a3b9f099698afa0716564960cce359a60',1,'UVariant']]], + ['isdoublearray_29',['isDoubleArray',['../classUVariant.html#aa0a91a91288b102857ebc978767d71c4',1,'UVariant']]], + ['isenabled_30',['isEnabled',['../classrtabmap_1_1Signature.html#a343a565680d03c45cc29dff7392b275e',1,'rtabmap::Signature']]], + ['isfisheye_31',['isFisheye',['../classrtabmap_1_1CameraModel.html#a3ceb0d36d8786f03b778d1969cb6e839',1,'rtabmap::CameraModel']]], + ['isfloat_32',['isFloat',['../classUVariant.html#a2d5757424cf7e69ede4564b82a7ab95c',1,'UVariant']]], + ['isfloatarray_33',['isFloatArray',['../classUVariant.html#a94c1a6cbd6c39968801cc4116bae3c55',1,'UVariant']]], + ['isgpuavailable_34',['isgpuavailable',['../classrtabmap_1_1SURF.html#a1150923dbf7e1bfd066dba0c3b22db57',1,'rtabmap::SURF::isGpuAvailable()'],['../classrtabmap_1_1SuperPointRpautrat.html#ac041c8738dc391661ba21331bf78d344',1,'rtabmap::SuperPointRpautrat::isGpuAvailable()'],['../classrtabmap_1_1SuperPointTorch.html#aee69f6089f657449d3813b440abbaa25',1,'rtabmap::SuperPointTorch::isGpuAvailable()'],['../classrtabmap_1_1GFTT.html#a05151f04cf624576783837dc48ddf744',1,'rtabmap::GFTT::isGpuAvailable()'],['../classrtabmap_1_1ORB.html#a7b5e3e7cc41dd04e517c5332f04d3a0a',1,'rtabmap::ORB::isGpuAvailable()'],['../classrtabmap_1_1Feature2D.html#a8d330b2b7db059f59c257cde6c9b6a99',1,'rtabmap::Feature2D::isGpuAvailable()'],['../classrtabmap_1_1SIFT.html#ad089f68ffc9ef1b42b5a9c2d5a5ecd81',1,'rtabmap::SIFT::isGpuAvailable()'],['../classrtabmap_1_1FAST.html#a1418ac4de2bdf5815df888a4d1f50b2e',1,'rtabmap::FAST::isGpuAvailable()']]], + ['isgpuenabled_35',['isgpuenabled',['../classrtabmap_1_1Stereo.html#ac1db900d4dbca15de73a81d32f0be179',1,'rtabmap::Stereo::isGpuEnabled()'],['../classrtabmap_1_1StereoOpticalFlow.html#abc4c02bc672566fc2dd3f7331b84944e',1,'rtabmap::StereoOpticalFlow::isGpuEnabled()']]], + ['isgraphreduced_36',['isGraphReduced',['../classrtabmap_1_1Memory.html#a790e24b6cb0fb3ec2ed198121a6211c1',1,'rtabmap::Memory']]], + ['isgridfromdepth_37',['isGridFromDepth',['../classrtabmap_1_1LocalGridMaker.html#a60f571f0fd1e58a1a82eb39bfeafda2a',1,'rtabmap::LocalGridMaker']]], + ['isidentity_38',['isIdentity',['../classrtabmap_1_1Transform.html#ae0636052ce31698d4d45afe4492ffab9',1,'rtabmap::Transform']]], + ['isidle_39',['isIdle',['../classUThread.html#a2c4554ad881c0532239a0930c2ebfe24',1,'UThread']]], + ['isidsgenerated_40',['isidsgenerated',['../classrtabmap_1_1Memory.html#a6d48ff5d4dfcf085123b5dd354fae681',1,'rtabmap::Memory::isIDsGenerated()'],['../classrtabmap_1_1Rtabmap.html#a5e85283c6421dcf9afb6961662e501b8',1,'rtabmap::Rtabmap::isIDsGenerated()']]], + ['isimagerequired_41',['isImageRequired',['../classrtabmap_1_1Registration.html#ae10ae7b6dbf4d5396db66600ebe18228',1,'rtabmap::Registration']]], + ['isincremental_42',['isincremental',['../classrtabmap_1_1Memory.html#a420ddb38a3ffefafc84d22b0dd3b3814',1,'rtabmap::Memory::isIncremental()'],['../classrtabmap_1_1VWDictionary.html#a706e209f6228c02730dd8ea501ab5369',1,'rtabmap::VWDictionary::isIncremental() const']]], + ['isincrementalflann_43',['isIncrementalFlann',['../classrtabmap_1_1VWDictionary.html#a9f016aa45f3b3d5618d104fb799ca998',1,'rtabmap::VWDictionary']]], + ['isinfodatafilled_44',['isInfoDataFilled',['../classrtabmap_1_1Odometry.html#a3276da70261724ceb03df8e410844a8c',1,'rtabmap::Odometry']]], + ['isinltm_45',['isInLTM',['../classrtabmap_1_1Memory.html#a2464a77e0190653e10ce9e60fb919ae9',1,'rtabmap::Memory']]], + ['isinmemory_46',['isinmemory',['../classrtabmap_1_1DBDriverSqlite3.html#af9cf8fda0fcc032efb44981d908b4e55',1,'rtabmap::DBDriverSqlite3::isInMemory()'],['../classrtabmap_1_1DBDriver.html#a0ecd6182f404d8e6822b66a54f1d248a',1,'rtabmap::DBDriver::isInMemory()']]], + ['isinstm_47',['isinstm',['../classrtabmap_1_1Rtabmap.html#a596ea3fbeb22c90db9530f6752900ecc',1,'rtabmap::Rtabmap::isInSTM()'],['../classrtabmap_1_1Memory.html#a19fe91598153249250ac4870db535e8e',1,'rtabmap::Memory::isInSTM()']]], + ['isint_48',['isInt',['../classUVariant.html#a4a22ee60a869140c36f80ff04f90c07b',1,'UVariant']]], + ['isintarray_49',['isIntArray',['../classUVariant.html#aa09528d4c1668a2dff51b0f12b3b1de3',1,'UVariant']]], + ['isinvertible_50',['isInvertible',['../classrtabmap_1_1Transform.html#addc1c06517c7308f00bd54b5744aa959',1,'rtabmap::Transform']]], + ['isinwm_51',['isInWM',['../classrtabmap_1_1Memory.html#a5058d8b44e4f76f1fedb76645087a1ac',1,'rtabmap::Memory']]], + ['iskilled_52',['isKilled',['../classUThread.html#a3a0d0de0f78eab72512941ccd048477b',1,'UThread']]], + ['islinksmodified_53',['isLinksModified',['../classrtabmap_1_1Signature.html#a93dcbd3cffc84808fe5652bf0f542ca9',1,'rtabmap::Signature']]], + ['islocalizationdatasaved_54',['isLocalizationDataSaved',['../classrtabmap_1_1Memory.html#a32ed69b783e53be29fca6102ab198a4e',1,'rtabmap::Memory']]], + ['ismapframeprojection_55',['isMapFrameProjection',['../classrtabmap_1_1LocalGridMaker.html#ae8fcd8ed901bc23bac3f14efb48567a9',1,'rtabmap::LocalGridMaker']]], + ['ismodified_56',['ismodified',['../classrtabmap_1_1Signature.html#ab63ee6d2a0e2cd456748a64d9990f969',1,'rtabmap::Signature::isModified()'],['../classrtabmap_1_1VWDictionary.html#aa0bcdf4002305d36bb072c019d475f13',1,'rtabmap::VWDictionary::isModified()']]], + ['isnodeassembled_57',['isNodeAssembled',['../classrtabmap_1_1GlobalMap.html#a9c853fcade3b4b9bd4f49b6a07025e6d',1,'rtabmap::GlobalMap']]], + ['isnull_58',['isNull',['../classrtabmap_1_1Transform.html#a0d6a1985391a45de4fe208e58c51b9d2',1,'rtabmap::Transform']]], + ['isodomgravityused_59',['isOdomGravityUsed',['../classrtabmap_1_1Memory.html#ab29b6d90e79694d7fdfb56574476141f',1,'rtabmap::Memory']]], + ['ispaused_60',['isPaused',['../classrtabmap_1_1SensorCaptureThread.html#a435f89b6a3186462f6ee860afa88644c',1,'rtabmap::SensorCaptureThread']]], + ['ispointvisiblefromcameras_61',['isPointVisibleFromCameras',['../classrtabmap_1_1SensorData.html#a30f069ee8ffa263ec2c18bc714713e03',1,'rtabmap::SensorData']]], + ['isreadonly_62',['isReadOnly',['../classrtabmap_1_1Memory.html#ad6d7488b61f8bedf6c9e3f4019a6b7f4',1,'rtabmap::Memory']]], + ['isrectificationmapinitialized_63',['isrectificationmapinitialized',['../classrtabmap_1_1CameraModel.html#a80cacb16d347e89980369cb2e02f3d48',1,'rtabmap::CameraModel::isRectificationMapInitialized()'],['../classrtabmap_1_1StereoCameraModel.html#aa35a73db2fc272f0f33b40220b75fa43',1,'rtabmap::StereoCameraModel::isRectificationMapInitialized()']]], + ['isrgbdmode_64',['isRGBDMode',['../classrtabmap_1_1Rtabmap.html#a691de75b6964ab48d7f1ea53ea40f4c1',1,'rtabmap::Rtabmap']]], + ['isrobust_65',['isRobust',['../classrtabmap_1_1Optimizer.html#a29ba07e1e829ae616d82756977161c9f',1,'rtabmap::Optimizer']]], + ['isrunning_66',['isRunning',['../classUThread.html#a38e2b22f0616ed4128312baff9cfeba9',1,'UThread']]], + ['issaved_67',['issaved',['../classrtabmap_1_1Signature.html#a0d15326165e9d01f0b91b247f5da23ea',1,'rtabmap::Signature::isSaved()'],['../classrtabmap_1_1VisualWord.html#a4a4d316a18741c30c8d2d5db50f3c4e7',1,'rtabmap::VisualWord::isSaved()']]], + ['isscanrequired_68',['isScanRequired',['../classrtabmap_1_1Registration.html#aa0748ad5a576d0919ef0d360137e5ea7',1,'rtabmap::Registration']]], + ['isshort_69',['isShort',['../classUVariant.html#a611898d77468fdb704aeaf20f5ebc5df',1,'UVariant']]], + ['isshortarray_70',['isShortArray',['../classUVariant.html#a671286922d321c4da699d4cebca3ca44',1,'UVariant']]], + ['isslam2d_71',['isSlam2d',['../classrtabmap_1_1Optimizer.html#a51485674608bbf910922ecee43cc13aa',1,'rtabmap::Optimizer']]], + ['isstr_72',['isStr',['../classUVariant.html#af431bdd37ebae79c5b778d66ad08cf50',1,'UVariant']]], + ['isuchar_73',['isUChar',['../classUVariant.html#af94e47d3da5a0ba9d605359ef843e5d4',1,'UVariant']]], + ['isuchararray_74',['isUCharArray',['../classUVariant.html#a66c02a68f48cab8c2952ebae7181b164',1,'UVariant']]], + ['isuint_75',['isUInt',['../classUVariant.html#aed53240d0ec77aca65317988753412dd',1,'UVariant']]], + ['isuintarray_76',['isUIntArray',['../classUVariant.html#af31b8bdca6cb78ebd3f8f6e97e895442',1,'UVariant']]], + ['isundef_77',['isUndef',['../classUVariant.html#aa33dc5850071f73864c280bd1d4e743b',1,'UVariant']]], + ['isuserdatarequired_78',['isUserDataRequired',['../classrtabmap_1_1Registration.html#a3cd064c74588fd13cce178596e188b5d',1,'rtabmap::Registration']]], + ['isushort_79',['isUShort',['../classUVariant.html#a87d098e60871ec85d179528d0a7bdc88',1,'UVariant']]], + ['isushortarray_80',['isUShortArray',['../classUVariant.html#a006cef10aa4c95539d0cd9d574de747d',1,'UVariant']]], + ['isvalid_81',['isvalid',['../classrtabmap_1_1Link.html#a53974a2cea4315106cf12065ace8bb96',1,'rtabmap::Link::isValid()'],['../classrtabmap_1_1SensorData.html#ad620676ab1a971846ab80ef646aa5882',1,'rtabmap::SensorData::isValid()'],['../classUDirectory.html#a8d471f3c9ff7391d25a52eab24255e64',1,'UDirectory::isValid()'],['../classUFile.html#ad0ecde61a088d9fc3d034a513133341d',1,'UFile::isValid()']]], + ['isvalidforprojection_82',['isvalidforprojection',['../classrtabmap_1_1CameraModel.html#a7b6db41415e085d52bf363d09d5e6d67',1,'rtabmap::CameraModel::isValidForProjection()'],['../classrtabmap_1_1StereoCameraModel.html#a6c16870b83978d286003b166fd6949cf',1,'rtabmap::StereoCameraModel::isValidForProjection()']]], + ['isvalidforrectification_83',['isvalidforrectification',['../classrtabmap_1_1CameraModel.html#a46864eb8de680d45d79777e828dcbb6a',1,'rtabmap::CameraModel::isValidForRectification()'],['../classrtabmap_1_1StereoCameraModel.html#ac5e22eec7815cb27e436afada2b5769f',1,'rtabmap::StereoCameraModel::isValidForRectification()']]], + ['isvalidforreprojection_84',['isValidForReprojection',['../classrtabmap_1_1CameraModel.html#abd4db4f23eb05d531a34ee44f7cdb687',1,'rtabmap::CameraModel']]], + ['iterations_85',['iterations',['../classrtabmap_1_1Optimizer.html#a178bb719b0e22863e29add12c85e14a5',1,'rtabmap::Optimizer::iterations()'],['../classrtabmap_1_1Stereo.html#abde66966de114cd5649fd22602d27816',1,'rtabmap::Stereo::iterations()']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_9.js b/preview/pr-1492/api/latest/search/functions_9.js new file mode 100644 index 00000000..5d2c0abc --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['join_0',['join',['../classUThread.html#acf33c0e4b656af76da100e7d4f69ed1d',1,'UThread']]], + ['jointrashthread_1',['joinTrashThread',['../classrtabmap_1_1Memory.html#a2bba8c0aa57778bb441a97728d45a58e',1,'rtabmap::Memory']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_a.js b/preview/pr-1492/api/latest/search/functions_a.js new file mode 100644 index 00000000..c8c08aa5 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['k_0',['K',['../classrtabmap_1_1CameraModel.html#a5df2e6c3f361b7084e4d26d7f1846e3d',1,'rtabmap::CameraModel']]], + ['k_5fraw_1',['K_raw',['../classrtabmap_1_1CameraModel.html#ada626650b01d35b494016a5490efb31a',1,'rtabmap::CameraModel']]], + ['keypoints_2',['keypoints',['../classrtabmap_1_1SensorData.html#afdc0db8c8176c4108e78e66df54b7d94',1,'rtabmap::SensorData']]], + ['keypoints3d_3',['keypoints3D',['../classrtabmap_1_1SensorData.html#ab17daf3d7c2cd1253306e6d5991549df',1,'rtabmap::SensorData']]], + ['kill_4',['kill',['../classUThread.html#a8dfefcfd68b453da08ddba9836f35965',1,'UThread']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_b.js b/preview/pr-1492/api/latest/search/functions_b.js new file mode 100644 index 00000000..00e0b94a --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_b.js @@ -0,0 +1,43 @@ +var searchData= +[ + ['labellocation_0',['labelLocation',['../classrtabmap_1_1Rtabmap.html#af1fe8ed393237bc9ffa1ea93adf0ec9b',1,'rtabmap::Rtabmap']]], + ['labels_1',['labels',['../classrtabmap_1_1Statistics.html#afeb2fd18d35f6a760ffa46ca0ebe4e49',1,'rtabmap::Statistics']]], + ['labelsignature_2',['labelSignature',['../classrtabmap_1_1Memory.html#abba1fbec2be0cfced6e14d723fc45794',1,'rtabmap::Memory']]], + ['landmark_3',['landmark',['../classrtabmap_1_1Landmark.html#a6ba2b53d996e0fa62a8023917e515a06',1,'rtabmap::Landmark::Landmark()'],['../classrtabmap_1_1Landmark.html#a1fda87c27ac931dcf9815921b53c1f19',1,'rtabmap::Landmark::Landmark(const int &id, const float &size, const Transform &pose, const cv::Mat &covariance)'],['../classrtabmap_1_1Landmark.html#a92311f7550e395fea804c5438e9085ff',1,'rtabmap::Landmark::Landmark(const int &id, const Transform &pose, const cv::Mat &covariance)']]], + ['landmarks_4',['landmarks',['../classrtabmap_1_1SensorData.html#a73ba0bb1cb31a3438b3ffee161b16ff8',1,'rtabmap::SensorData']]], + ['landmarksignored_5',['landmarksIgnored',['../classrtabmap_1_1Optimizer.html#a32f53d408ef0372c5c196ee89ff5ad79',1,'rtabmap::Optimizer']]], + ['laserscan_6',['laserscan',['../classrtabmap_1_1LaserScan.html#a0cb5ba7c590cea1b36c81804acdbf302',1,'rtabmap::LaserScan::LaserScan(const LaserScan &data, int maxPoints, float maxRange, Format format, const Transform &localTransform=Transform::getIdentity())'],['../classrtabmap_1_1LaserScan.html#aaf554921f866f90c48a6174d5f97a016',1,'rtabmap::LaserScan::LaserScan(const LaserScan &data, Format format, float minRange, float maxRange, float angleMin, float angleMax, float angleIncrement, const Transform &localTransform=Transform::getIdentity())']]], + ['laserscan2dfrompointcloud_7',['laserscan2dfrompointcloud',['../group__LaserScan2dFromPointCloud.html#gac0823dd28e488bef9499faee54ff8a4e',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#ga0898d06b1639f58ed92b66f311e786aa',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#gac278e2f3f54ed49b5d3a6afa606a466b',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointNormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#gae4e7c218a24fb8d5c3fd7143462d3070',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#ga6cb623d1b3ce9c244a7d4ef346a721db',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScan2dFromPointCloud.html#ga0354b321c4196232fb1183c3a322b5f8',1,'rtabmap::util3d::laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)']]], + ['laserscancompressed_8',['laserScanCompressed',['../classrtabmap_1_1SensorData.html#a1522af81a95c27b76e316919df95a869',1,'rtabmap::SensorData']]], + ['laserscanfrompointcloud_9',['laserscanfrompointcloud',['../group__LaserScanFromPointCloud.html#gaf509a7c65e02d8690c971294c43bda47',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gab2d54043075851c5e23f487001adacb6',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gafb165d79d23620b42af0653ae045fb91',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZINormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga79e460158de1d3934abcd8fad488fb24',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga078f5eae0077169e636ec76e03973edc',1,'rtabmap::util3d::laserScanFromPointCloud(const PointCloud2T &cloud, bool filterNaNs=true, bool is2D=false, const Transform &transform=Transform())'],['../group__LaserScanFromPointCloud.html#ga16a77d267dc60b14b5bf48ca52547bae',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga75f96d3e3d5d62ce6a9d16a1753c775a',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga7a88e45c9bab555c6d1efd64be765c4d',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointNormal > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga9470f081e8de0a34550e91e2f74bacd5',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointNormal > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gad5764a399e3a8a5586b94490e0cd7d15',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga9933faab17e984b2789926abd2ba0caf',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gaa98ccb732868f5ab4e91cd6f82602852',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#gadeb1f66fd39cfcb39c2f152c36b3be62',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga51c683da166a9fcf7e7bf6c834ca03a4',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZI > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga655a37385c6ca40ec99e76045c04040b',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< rtabmap::PointXYZIRT > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga04169bd4b4488350b08709af9581b289',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< rtabmap::PointXYZIRT > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga75bf455d6cc912b4ee18785de71c50a5',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGB > &cloud, const pcl::PointCloud< pcl::Normal > &normals, const Transform &transform=Transform(), bool filterNaNs=true)'],['../group__LaserScanFromPointCloud.html#ga9344c712c57af92d7612b0af76226f06',1,'rtabmap::util3d::laserScanFromPointCloud(const pcl::PointCloud< pcl::PointXYZRGBNormal > &cloud, const pcl::IndicesPtr &indices, const Transform &transform=Transform(), bool filterNaNs=true)']]], + ['laserscanraw_10',['laserScanRaw',['../classrtabmap_1_1SensorData.html#aeebafe56f302f9e8e4f06c5ad750248d',1,'rtabmap::SensorData']]], + ['laserscantopointcloud2_11',['laserScanToPointCloud2',['../group__LaserScanToPointCloud.html#ga394ec840a58a1203fac9725d49a0013c',1,'rtabmap::util3d']]], + ['latitude_12',['latitude',['../classrtabmap_1_1GeodeticCoords.html#ac6f662384e5b4ac613d5678307eb95a7',1,'rtabmap::GeodeticCoords::latitude()'],['../classrtabmap_1_1GPS.html#a9b20f8a5bf2cba909b53ecd83d2b4c08',1,'rtabmap::GPS::latitude()']]], + ['left_13',['left',['../classrtabmap_1_1StereoCameraModel.html#a064d29601c0ba13fc47584849e26b81b',1,'rtabmap::StereoCameraModel']]], + ['length_14',['length',['../classUFile.html#ae1415739da256633ad417ac7d5fc2c11',1,'UFile::length(const std::string &filePath)'],['../classUFile.html#a0c42f32c914b349d13103d0397c1b3c1',1,'UFile::length()']]], + ['lidar_15',['lidar',['../classrtabmap_1_1Lidar.html#a9d14987cd20918960d6b3705b66241ed',1,'rtabmap::Lidar::Lidar()'],['../classrtabmap_1_1SensorCaptureThread.html#aa6e5a6a53d621cda6e0b7f2ff35d33f0',1,'rtabmap::SensorCaptureThread::lidar()']]], + ['likelihood_16',['likelihood',['../classrtabmap_1_1Statistics.html#a4f3492b5cf6ff082d0061c9d7c67536f',1,'rtabmap::Statistics']]], + ['limitkeypoints_17',['limitKeypoints',['../classrtabmap_1_1Feature2D.html#aa5c0258ede589769bc50c6d6071d595c',1,'rtabmap::Feature2D']]], + ['linearacceleration_18',['linearAcceleration',['../classrtabmap_1_1IMU.html#a8fde3445664329d6432b632fca9db17a',1,'rtabmap::IMU']]], + ['linearaccelerationcovariance_19',['linearAccelerationCovariance',['../classrtabmap_1_1IMU.html#a2ee035bffb85f1681ad3525c32ba1243',1,'rtabmap::IMU']]], + ['link_20',['link',['../classrtabmap_1_1Link.html#a2dce9c7a3ef04085d51f702002107c7b',1,'rtabmap::Link::Link()'],['../classrtabmap_1_1Link.html#a8f624aa84862d7abafae5cfc7175f885',1,'rtabmap::Link::Link(int from, int to, Type type, const Transform &transform, const cv::Mat &infMatrix=cv::Mat::eye(6, 6, CV_64FC1), const cv::Mat &userData=cv::Mat())']]], + ['load_21',['load',['../classrtabmap_1_1CameraModel.html#a2c2ff6db9029c3ee219642d7e48b04fa',1,'rtabmap::CameraModel::load(const std::string &filePath, bool initRectificationMaps=true)'],['../classrtabmap_1_1CameraModel.html#abe9b3c87c086fd33286c01361e454056',1,'rtabmap::CameraModel::load(const std::string &directory, const std::string &cameraName, bool initRectificationMaps=true)'],['../classrtabmap_1_1StereoCameraModel.html#a9c2d94b9bc335fdec7f5fa4f4c45a07c',1,'rtabmap::StereoCameraModel::load()']]], + ['load2dmap_22',['load2dmap',['../classrtabmap_1_1DBDriver.html#aa3d68850f4bb114e897e37af6b1c858a',1,'rtabmap::DBDriver::load2DMap()'],['../classrtabmap_1_1Memory.html#a9a71f27d0de4f7e6400ca470a82be19d',1,'rtabmap::Memory::load2DMap()']]], + ['loadlinks_23',['loadLinks',['../classrtabmap_1_1DBDriver.html#aab00d50127b8b5bb92f8605e35aaca4d',1,'rtabmap::DBDriver']]], + ['loadoptimizedmesh_24',['loadOptimizedMesh',['../classrtabmap_1_1Memory.html#a0827d1d23744b3693f00e518e1b0fda8',1,'rtabmap::Memory']]], + ['loadoptimizedposes_25',['loadoptimizedposes',['../classrtabmap_1_1DBDriver.html#a6ef8c39b350634d21b57b1c07b029e55',1,'rtabmap::DBDriver::loadOptimizedPoses()'],['../classrtabmap_1_1Memory.html#a9e2972a53619456d75ad923fb5e9bc7e',1,'rtabmap::Memory::loadOptimizedPoses()']]], + ['loadpreviewimage_26',['loadpreviewimage',['../classrtabmap_1_1DBDriver.html#aa1423596308a8baf123ecbc7fdfc1e82',1,'rtabmap::DBDriver::loadPreviewImage()'],['../classrtabmap_1_1Memory.html#abd0d7277526f06861df17e03fa13e817',1,'rtabmap::Memory::loadPreviewImage()']]], + ['loadsignature_27',['loadSignature',['../classrtabmap_1_1DBDriver.html#a0a713d7a6dabdcfbb8d733dba2a20120',1,'rtabmap::DBDriver']]], + ['localgrid_28',['LocalGrid',['../classrtabmap_1_1LocalGrid.html#a42d930cf05d39ecbbd2e3678f8d0b47a',1,'rtabmap::LocalGrid']]], + ['localgridmaker_29',['LocalGridMaker',['../classrtabmap_1_1LocalGridMaker.html#a70040df32d1949125f24a193581b8183',1,'rtabmap::LocalGridMaker']]], + ['localizationcovariance_30',['localizationCovariance',['../classrtabmap_1_1Statistics.html#a4c05e2dd7412e875333f3edea70ffbb3',1,'rtabmap::Statistics']]], + ['localpath_31',['localPath',['../classrtabmap_1_1Statistics.html#a82f7c8f962fd5fcea9a5d4fc087cb2ce',1,'rtabmap::Statistics']]], + ['localtransform_32',['localtransform',['../classrtabmap_1_1StereoCameraModel.html#a5257cde3d51bbee7c51c3f36d0c7741f',1,'rtabmap::StereoCameraModel::localTransform()'],['../classrtabmap_1_1IMU.html#a10cfadbe31bbf80822a9ab92c0892b33',1,'rtabmap::IMU::localTransform()'],['../classrtabmap_1_1CameraModel.html#a8a1712ca95bf08c71b2bf2da1d635bc8',1,'rtabmap::CameraModel::localTransform()']]], + ['lock_33',['lock',['../classUMutex.html#af42d27a9379e6872e8cf2e5e171e820c',1,'UMutex']]], + ['locktry_34',['lockTry',['../classUMutex.html#a6237fbb3142023f92c11989b13207c32',1,'UMutex']]], + ['logodds_35',['logodds',['../classrtabmap_1_1GlobalMap.html#aff0b3450ec3db63b9dcb140ff0cbe77a',1,'rtabmap::GlobalMap']]], + ['longitude_36',['longitude',['../classrtabmap_1_1GPS.html#ac848af004f6581d42d55568d72332793',1,'rtabmap::GPS::longitude()'],['../classrtabmap_1_1GeodeticCoords.html#a68e16e48c8ede571e20e9889547fd509',1,'rtabmap::GeodeticCoords::longitude()']]], + ['loopclosureid_37',['loopClosureId',['../classrtabmap_1_1Statistics.html#a6a81189f2327a8b8f05a5f93d68fa3b7',1,'rtabmap::Statistics']]], + ['loopclosuremapid_38',['loopClosureMapId',['../classrtabmap_1_1Statistics.html#a1cf32a26d3ca103c22104015a3de8929',1,'rtabmap::Statistics']]], + ['loopclosuretransform_39',['loopClosureTransform',['../classrtabmap_1_1Statistics.html#a38c88cb8327baa290bf476326d24b54c',1,'rtabmap::Statistics']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_c.js b/preview/pr-1492/api/latest/search/functions_c.js new file mode 100644 index 00000000..b2922b17 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_c.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['mainloop_0',['mainloop',['../classrtabmap_1_1CompressionThread.html#a4948c2a9c84ee4e15699f08c2d4bac22',1,'rtabmap::CompressionThread::mainLoop()'],['../classUEventDispatcher.html#ad1aa4dc2ee29a9bfe5ee0422ad1c97f0',1,'UEventDispatcher::mainLoop()'],['../classUEventsManager.html#a7eec8b7a675e7093064f147a9f62bfb9',1,'UEventsManager::mainLoop()']]], + ['makedir_1',['makeDir',['../classUDirectory.html#a8d84cde6736b614a4396f16113f4d365',1,'UDirectory']]], + ['mapcorrection_2',['mapCorrection',['../classrtabmap_1_1Statistics.html#a775992631cd8d976a94ea6c1560dad0d',1,'rtabmap::Statistics']]], + ['mapid_3',['mapId',['../classrtabmap_1_1Signature.html#ac6a75872fb4cb64bd088794df6e897bb',1,'rtabmap::Signature']]], + ['maxdisparity_4',['maxDisparity',['../classrtabmap_1_1Stereo.html#a83319186c8c434ad0482d2eb911ecd31',1,'rtabmap::Stereo']]], + ['maxlevel_5',['maxLevel',['../classrtabmap_1_1Stereo.html#a3834923d75c9453e885bea01cb5ecfa5',1,'rtabmap::Stereo']]], + ['memory_6',['Memory',['../classrtabmap_1_1Memory.html#a24d451cdf46a9cc04cce995142a101d4',1,'rtabmap::Memory']]], + ['memorychanged_7',['memoryChanged',['../classrtabmap_1_1Memory.html#a8720df55fa6f8be933827808d364f20a',1,'rtabmap::Memory']]], + ['merge_8',['merge',['../classrtabmap_1_1Link.html#a953a029f601d7ca3efbb12ca22da4542',1,'rtabmap::Link']]], + ['mindisparity_9',['minDisparity',['../classrtabmap_1_1Stereo.html#aaeec1e0e5470b1b1268b4e04bff81742',1,'rtabmap::Stereo']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_d.js b/preview/pr-1492/api/latest/search/functions_d.js new file mode 100644 index 00000000..b2f269d6 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_d.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['name_0',['name',['../classrtabmap_1_1CameraModel.html#aa152828f20e1cf0ffab7bb25178191b5',1,'rtabmap::CameraModel::name()'],['../classrtabmap_1_1StereoCameraModel.html#ae759fe4ff0862f5305cf85257e0367a1',1,'rtabmap::StereoCameraModel::name()']]], + ['nms_1',['NMS',['../namespacertabmap_1_1util2d.html#aafa9a426c8e7dd0359adf40e1b45ee1c',1,'rtabmap::util2d']]], + ['nnstrategyname_2',['nnStrategyName',['../classrtabmap_1_1VWDictionary.html#a7092a6a6af93772ce89793c5e54a17cc',1,'rtabmap::VWDictionary']]], + ['normalfiltering_3',['normalfiltering',['../group__PointNormalFiltering.html#ga7c7e3de2ff24fc3aadfb3eb0ae05314d',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#gad37b605f0f26190c95450c878ca51ece',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#gabfeacf2f8a261abd98a9c6728f02324b',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#ga5c15577ccd70487c3ccd53c16b00648b',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#gad821858315d7e1e1868d6314d65a9f89',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#ga96711db9864b121ab9e2bcbf2cf44658',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#ga91fd9701dea9ebc4b7265b12b357aba1',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)'],['../group__PointNormalFiltering.html#gae3831a32e21738a381ea789e9e3e3996',1,'rtabmap::util3d::normalFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)']]], + ['normalizerotation_4',['normalizeRotation',['../classrtabmap_1_1Transform.html#acbdd19971643c7400cb59055ec64d3cf',1,'rtabmap::Transform']]], + ['now_5',['now',['../classUTimer.html#ad10fce2a4901bf5d6a460ca7b158cb3a',1,'UTimer']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_e.js b/preview/pr-1492/api/latest/search/functions_e.js new file mode 100644 index 00000000..31232d2a --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_e.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['o14_0',['o14',['../classrtabmap_1_1Transform.html#adbdb9063808e63830cbcbd99e1e84d3d',1,'rtabmap::Transform']]], + ['o24_1',['o24',['../classrtabmap_1_1Transform.html#aa68c9c3b75ad7b66ca8bbf66742b0cc5',1,'rtabmap::Transform']]], + ['o34_2',['o34',['../classrtabmap_1_1Transform.html#a39184351ff5625030b6d1019c0e3d93f',1,'rtabmap::Transform']]], + ['odomcacheconstraints_3',['odomCacheConstraints',['../classrtabmap_1_1Statistics.html#a44b7a6c4d5b8bd58efcce2fdf3f2a9fd',1,'rtabmap::Statistics']]], + ['odomcacheposes_4',['odomCachePoses',['../classrtabmap_1_1Statistics.html#a8d88d70935ef4e110cd2c92b07ed74b2',1,'rtabmap::Statistics']]], + ['odometry_5',['Odometry',['../classrtabmap_1_1Odometry.html#af2d9cf4c207d6628b0890064a385856b',1,'rtabmap::Odometry']]], + ['odomprovided_6',['odomprovided',['../classrtabmap_1_1DBReader.html#a24351b1eb5776a83548a1d972e489dba',1,'rtabmap::DBReader::odomProvided()'],['../classrtabmap_1_1SensorCaptureThread.html#a88269150d6fd6fd39685fe9e926d98e6',1,'rtabmap::SensorCaptureThread::odomProvided()'],['../classrtabmap_1_1SensorCapture.html#aee217767808a9df9c63a27b284461c89',1,'rtabmap::SensorCapture::odomProvided()'],['../classrtabmap_1_1CameraStereoZed.html#ac57ca4d52b5a0a3c3911ffa4a139564c',1,'rtabmap::CameraStereoZed::odomProvided()'],['../classrtabmap_1_1CameraSeerSense.html#aa3bfa6e619c5845d4994809281c9a4b5',1,'rtabmap::CameraSeerSense::odomProvided()'],['../classrtabmap_1_1CameraRealSense2.html#a3b5aa7434457e09cbc6f01b985440183',1,'rtabmap::CameraRealSense2::odomProvided()'],['../classrtabmap_1_1CameraRealSense.html#a1ce069a366db4c98fe757acca7bf5b79',1,'rtabmap::CameraRealSense::odomProvided()'],['../classrtabmap_1_1CameraMyntEye.html#abc869cbd8b1106374a1f8734715d965d',1,'rtabmap::CameraMyntEye::odomProvided()'],['../classrtabmap_1_1CameraImages.html#aea0811d6305eec32fda10f46344c825f',1,'rtabmap::CameraImages::odomProvided()']]], + ['odomsensor_7',['odomSensor',['../classrtabmap_1_1SensorCaptureThread.html#a0f4e3814d203ded5735ebb7abba1451e',1,'rtabmap::SensorCaptureThread']]], + ['openconnection_8',['openConnection',['../classrtabmap_1_1DBDriver.html#ac6c0a2260ba2c3cc030136c9609142f5',1,'rtabmap::DBDriver']]], + ['opengl_5ft_5frtabmap_9',['opengl_T_rtabmap',['../classrtabmap_1_1Transform.html#abd5f003e72ad31ebc9124385030fce59',1,'rtabmap::Transform']]], + ['operator_2a_10',['operator*',['../classrtabmap_1_1Transform.html#a4d70ff21bbb61cd65c2d00130d8f84a7',1,'rtabmap::Transform']]], + ['operator_2b_11',['operator+',['../classrtabmap_1_1LaserScan.html#ab952e27e94b2fa942efe98ea651f4475',1,'rtabmap::LaserScan']]], + ['operator_2b_3d_12',['operator+=',['../classrtabmap_1_1LaserScan.html#af9f9a32f97cfbac321fc2509f0d1bd04',1,'rtabmap::LaserScan']]], + ['operator_3c_3c_13',['operator<<',['../namespacertabmap.html#aef0e1f1b121a9199e7511becbc8f1e32',1,'rtabmap::operator<<(std::ostream &os, const Transform &s)'],['../namespacertabmap.html#a6138748ef83b742105e47c9275885e4a',1,'rtabmap::operator<<(std::ostream &os, const StereoCameraModel &model)'],['../namespacertabmap.html#a087b7a1b89acb679edee23883653f1a7',1,'rtabmap::operator<<(std::ostream &os, const CameraModel &model)']]], + ['opticalrotation_14',['opticalRotation',['../classrtabmap_1_1CameraModel.html#a0853af9d0117565311da4ffc3965f8d2',1,'rtabmap::CameraModel']]], + ['optimize_15',['optimize',['../classrtabmap_1_1OptimizerG2O.html#a9400bdf57331af310cf6b02e661d0a03',1,'rtabmap::OptimizerG2O::optimize()'],['../classrtabmap_1_1Optimizer.html#a7e3aff943e77603493a358ff522fa2dc',1,'rtabmap::Optimizer::optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)'],['../classrtabmap_1_1Optimizer.html#af59c8340394268f9a1eb76fd5709f2c3',1,'rtabmap::Optimizer::optimize(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints, cv::Mat &outputCovariance, std::list< std::map< int, Transform > > *intermediateGraphes=0, double *finalError=0, int *iterationsDone=0)'],['../classrtabmap_1_1OptimizerTORO.html#a025b40902f0ea048bdbfee9ed4ebc0f3',1,'rtabmap::OptimizerTORO::optimize()'],['../classrtabmap_1_1OptimizerGTSAM.html#a4905d84cfc59516eef21ea89064c31ba',1,'rtabmap::OptimizerGTSAM::optimize()'],['../classrtabmap_1_1OptimizerCeres.html#ab988decf55da4a8821931855ddaa1c1a',1,'rtabmap::OptimizerCeres::optimize()']]], + ['optimizeba_16',['optimizeba',['../classrtabmap_1_1Optimizer.html#a038e8df970ab744f6f4ba7027f62b263',1,'rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, std::vector< CameraModel > > &models, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)'],['../classrtabmap_1_1Optimizer.html#a2f7cbdebed9787ffa6b0b30536dfa1a0',1,'rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, std::map< int, cv::Point3f > &points3DMap, std::map< int, std::map< int, FeatureBA > > &wordReferences, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())'],['../classrtabmap_1_1Optimizer.html#aab99f045516162944ad68fdabacb53dc',1,'rtabmap::Optimizer::optimizeBA(int rootId, const std::map< int, Transform > &poses, const std::multimap< int, Link > &links, const std::map< int, Signature > &signatures, bool rematchFeatures=false, const ParametersMap &registrationParameters=ParametersMap())'],['../classrtabmap_1_1Optimizer.html#ad6b32a9697837f03941773f6a5bbf91c',1,'rtabmap::Optimizer::optimizeBA(const Link &link, const CameraModel &model, std::map< int, cv::Point3f > &points3DMap, const std::map< int, std::map< int, FeatureBA > > &wordReferences, std::set< int > *outliers=0)'],['../classrtabmap_1_1OptimizerCeres.html#a5057dd09f74610f3092bb597f6af0413',1,'rtabmap::OptimizerCeres::optimizeBA()'],['../classrtabmap_1_1OptimizerCVSBA.html#ad6ff3fec8e75ab76290da5763022a903',1,'rtabmap::OptimizerCVSBA::optimizeBA()'],['../classrtabmap_1_1OptimizerG2O.html#a17edfbaeee93d32153782f61212a88f0',1,'rtabmap::OptimizerG2O::optimizeBA()'],['../classrtabmap_1_1OptimizerGTSAM.html#a7a2033a466505f8c2191b8329b5b342c',1,'rtabmap::OptimizerGTSAM::optimizeBA()']]], + ['optimizeincremental_17',['optimizeIncremental',['../classrtabmap_1_1Optimizer.html#a278f42e0d250085ac6fe9ed425627acf',1,'rtabmap::Optimizer']]], + ['orientation_18',['orientation',['../classrtabmap_1_1IMU.html#a2160e6d59e4f9e3ffc84a2b7d62bdabd',1,'rtabmap::IMU']]], + ['orientationcovariance_19',['orientationCovariance',['../classrtabmap_1_1IMU.html#ab7668040b92bfa5532c5e1c19ddbf429',1,'rtabmap::IMU']]] +]; diff --git a/preview/pr-1492/api/latest/search/functions_f.js b/preview/pr-1492/api/latest/search/functions_f.js new file mode 100644 index 00000000..056d2b08 --- /dev/null +++ b/preview/pr-1492/api/latest/search/functions_f.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['p_0',['P',['../classrtabmap_1_1CameraModel.html#acda5d9c4eeeaaad69e950f5ea630430a',1,'rtabmap::CameraModel']]], + ['parseparameters_1',['parseparameters',['../classrtabmap_1_1StereoOpticalFlow.html#aac2df770eba89ed2607c024c91d82c78',1,'rtabmap::StereoOpticalFlow::parseParameters()'],['../classrtabmap_1_1VWDictionary.html#a89893faef6c96e3b19bfeab86094af81',1,'rtabmap::VWDictionary::parseParameters()'],['../classrtabmap_1_1StereoDense.html#ac2f693ca52897501450f2bda985c5cf5',1,'rtabmap::StereoDense::parseParameters()'],['../classrtabmap_1_1StereoSGBM.html#a73934f5953650089ac337316f3d3137c',1,'rtabmap::StereoSGBM::parseParameters()'],['../classrtabmap_1_1StereoBM.html#ab3960fcf495a6dcacfab58ed144b4cc7',1,'rtabmap::StereoBM::parseParameters()'],['../classrtabmap_1_1Stereo.html#a405d17f179327670251fca395728584b',1,'rtabmap::Stereo::parseParameters()'],['../classrtabmap_1_1Rtabmap.html#a5a461ed88e83d2dbebee819ab6690e7a',1,'rtabmap::Rtabmap::parseParameters()'],['../classrtabmap_1_1RegistrationVis.html#a6560046940995044d7a51cb0066d420e',1,'rtabmap::RegistrationVis::parseParameters()'],['../classrtabmap_1_1RegistrationIcp.html#abd60fffd946201723c35beebc7bfea6a',1,'rtabmap::RegistrationIcp::parseParameters()'],['../classrtabmap_1_1Registration.html#a0f409a8f0973667ef1687fe102bbf930',1,'rtabmap::Registration::parseParameters()'],['../classrtabmap_1_1OptimizerG2O.html#a07b598444b99584b6f2bed6baca5e8bb',1,'rtabmap::OptimizerG2O::parseParameters()'],['../classrtabmap_1_1BayesFilter.html#a6d7d48b32c853f46eee9290d5c82cd28',1,'rtabmap::BayesFilter::parseParameters()'],['../classrtabmap_1_1DBDriver.html#a3c73e045d9bdf8cad1c58efc9d930427',1,'rtabmap::DBDriver::parseParameters()'],['../classrtabmap_1_1DBDriverSqlite3.html#ab1933c0cad6c69c3ae788854731cdeec',1,'rtabmap::DBDriverSqlite3::parseParameters()'],['../classrtabmap_1_1IMUFilter.html#a26022384205491695e5fbea349e6363a',1,'rtabmap::IMUFilter::parseParameters()'],['../classrtabmap_1_1LocalGridMaker.html#a6395948673108c87dd371cb7b4a29026',1,'rtabmap::LocalGridMaker::parseParameters()'],['../classrtabmap_1_1Memory.html#abbf54d2a34838cc13ce98d41a9991918',1,'rtabmap::Memory::parseParameters()'],['../classrtabmap_1_1Optimizer.html#a0a942bd7902c8d2f9444b8eba6a648a3',1,'rtabmap::Optimizer::parseParameters()'],['../classrtabmap_1_1OptimizerCeres.html#aaa1128eeb38451086c7abd58ae6142ac',1,'rtabmap::OptimizerCeres::parseParameters()'],['../classrtabmap_1_1OptimizerGTSAM.html#a9ac24a2315e15b16270151c3aae9d8f0',1,'rtabmap::OptimizerGTSAM::parseParameters()']]], + ['passthrough_2',['passthrough',['../group__PassThrough.html#ga9c4f395f1105d3c36861e922108bfbf0',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gadb551e7530b9fa63b588e11704827b7b',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gad674cecbb2b80e50ad8680265dd50905',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga7bfc95ed4f7fca124b00707708223473',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga2d23fe7a7205247ae3152525d19a18ec',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga18c88abdd186757533cd7c9e825f540f',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gad8ced1799837b05e34ec4bd871a129ba',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gafe76c7bd4f68d8fe1518509564bf1f3d',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga551c7a9b75aaf6f087f81e52f326e182',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#ga4cef6e6f7cb447719417f118ff4e367d',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gaa6907857c69443b1bd879fcf6beef8a9',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)'],['../group__PassThrough.html#gab942c5914142128bce518c869f49f94d',1,'rtabmap::util3d::passThrough(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const std::string &axis, float min, float max, bool negative=false)']]], + ['pose_3',['pose',['../classrtabmap_1_1Landmark.html#ac6bfc77e153b0877c4c1cc3d97327a88',1,'rtabmap::Landmark']]], + ['poses_4',['poses',['../classrtabmap_1_1Statistics.html#acb80fff8690d88228ebda369e0e06289',1,'rtabmap::Statistics']]], + ['post_5',['post',['../classUEventsSender.html#ab03886c42164f2f9bf89fd3da641526f',1,'UEventsSender::post()'],['../classUEventsManager.html#a956353a8006abe2edb0be2e1fc1846cb',1,'UEventsManager::post()']]], + ['posterior_6',['posterior',['../classrtabmap_1_1Statistics.html#ac50fb91120fdc16266460678088ac12f',1,'rtabmap::Statistics']]], + ['postupdate_7',['postUpdate',['../classrtabmap_1_1SensorCaptureThread.html#a43cb04de41b589b3f6069fff553a4dd7',1,'rtabmap::SensorCaptureThread']]], + ['prettyprint_8',['prettyPrint',['../classrtabmap_1_1Transform.html#a61ff0bf933e0e7f220f20745df3d0818',1,'rtabmap::Transform']]], + ['previousstamp_9',['previousStamp',['../classrtabmap_1_1Odometry.html#a36aa5447b7791c88a2799c99923be393',1,'rtabmap::Odometry']]], + ['previousvelocitytransform_10',['previousVelocityTransform',['../classrtabmap_1_1Odometry.html#a35d69a27271b798da6640295a98b9785',1,'rtabmap::Odometry']]], + ['priorsignored_11',['priorsIgnored',['../classrtabmap_1_1Optimizer.html#aeebd0d5575ab7e9f492b095c05ddb237',1,'rtabmap::Optimizer']]], + ['probability_12',['probability',['../classrtabmap_1_1GlobalMap.html#a54fd556aa295938077539e85b2be829a',1,'rtabmap::GlobalMap']]], + ['process_13',['process',['../classrtabmap_1_1Odometry.html#a0c2d39ed9b76c2c411a9e62e16e3bce1',1,'rtabmap::Odometry::process()'],['../classrtabmap_1_1Rtabmap.html#a35cf8fd93f77d1c148ae6d3107725750',1,'rtabmap::Rtabmap::process(const cv::Mat &image, int id=0, const std::map< std::string, float > &externalStats=std::map< std::string, float >())'],['../classrtabmap_1_1Rtabmap.html#a91cedf4574a557cadf6daded489e4dbe',1,'rtabmap::Rtabmap::process(const SensorData &data, Transform odomPose, float odomLinearVariance, float odomAngularVariance, const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())'],['../classrtabmap_1_1Rtabmap.html#ad7f085b6ae0fd3c7077c500c028fd5c3',1,'rtabmap::Rtabmap::process(const SensorData &data, Transform odomPose, const cv::Mat &odomCovariance=cv::Mat::eye(6, 6, CV_64FC1), const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())'],['../classrtabmap_1_1Odometry.html#a4fcbe67de2ec6f23829e3962ee586315',1,'rtabmap::Odometry::process()']]], + ['project_14',['project',['../classrtabmap_1_1CameraModel.html#a01de9a3cdc993275b2fbcf21d6e29833',1,'rtabmap::CameraModel']]], + ['proportionalradiusfiltering_15',['proportionalradiusfiltering',['../group__ProportionalRadiusFiltering.html#ga5382e5aa1b2db5ee59cda070d02030f7',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gac355ea4ecf36de86425b3dcd7794b4e1',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gad54efb4e02c820af7d480c157a7c5ae8',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga5e6659182a671665d293afb05461bdbd',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga9def3599aeff33e3d2a733020f713310',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZRGB >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga532ecb60ddd5c72d6c2930648da37621',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga0b1bda3085510fd29162d6f511f14903',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gacdc66ecd05ab55d9c3eba62846f1cc5d',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZINormal >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gaa3e3f8d0bdc8bfa7e070b7ef73541ddb',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#gac755f189d29b0ed14e48e7f241103176',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZRGBNormal >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga76e80e9da74feba84271c52b06065b7f',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)'],['../group__ProportionalRadiusFiltering.html#ga3ce176a96606fd506d3ff28a0a4cdc2a',1,'rtabmap::util3d::proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)']]], + ['proximitydetectionid_16',['proximityDetectionId',['../classrtabmap_1_1Statistics.html#a0aeff90b40410ef769e63ef6b000328b',1,'rtabmap::Statistics']]], + ['proximitydetectionmapid_17',['proximityDetectionMapId',['../classrtabmap_1_1Statistics.html#ae973bc5dc35b89888a67d5e416536c53',1,'rtabmap::Statistics']]], + ['prunenode_18',['pruneNode',['../classrtabmap_1_1RtabmapColorOcTree.html#aea61a0ef99b3c56ecf5178c6d6eeb847',1,'rtabmap::RtabmapColorOcTree']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_0.js b/preview/pr-1492/api/latest/search/groups_0.js new file mode 100644 index 00000000..052e8a6c --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['2d_20laserscan_0',['PCL to 2D LaserScan',['../group__LaserScan2dFromPointCloud.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_1.js b/preview/pr-1492/api/latest/search/groups_1.js new file mode 100644 index 00000000..06713a9c --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['3d_20laserscan_0',['PCL to 3D LaserScan',['../group__LaserScanFromPointCloud.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_10.js b/preview/pr-1492/api/latest/search/groups_10.js new file mode 100644 index 00000000..bb04f957 --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['utilite_0',['UtiLite',['../group__UtiLite.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_11.js b/preview/pr-1492/api/latest/search/groups_11.js new file mode 100644 index 00000000..cc658ba5 --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_11.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['variance_20and_20correspondences_20of_20two_20point_20clouds_0',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]], + ['voxel_20filtering_1',['Voxel Filtering',['../group__VoxelFiltering.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_12.js b/preview/pr-1492/api/latest/search/groups_12.js new file mode 100644 index 00000000..bb5310f4 --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['with_20normals_0',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_2.js b/preview/pr-1492/api/latest/search/groups_2.js new file mode 100644 index 00000000..7266a3d8 --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['a_20point_20cloud_0',['a point cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['a_20point_20cloud_20with_20normals_1',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['a_20single_20point_2',['Transform a single point',['../group__TransformPoint.html',1,'']]], + ['and_20correspondences_20of_20two_20point_20clouds_3',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_3.js b/preview/pr-1492/api/latest/search/groups_3.js new file mode 100644 index 00000000..047b89cf --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['box_20filtering_0',['Crop Box Filtering',['../group__CropBox.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_4.js b/preview/pr-1492/api/latest/search/groups_4.js new file mode 100644 index 00000000..0b2941eb --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_4.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['cloud_0',['cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['cloud_20cluster_20extraction_1',['Point Cloud Cluster Extraction',['../group__ExtractClusters.html',1,'']]], + ['cloud_20downsampling_2',['Point Cloud Downsampling',['../group__PointCloudDownSampling.html',1,'']]], + ['cloud_20indices_20extraction_3',['Point Cloud Indices Extraction',['../group__ExtractIndices.html',1,'']]], + ['cloud_20with_20normals_4',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['clouds_5',['clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'Compute Variance and Correspondences of Two Point Clouds'],['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds'],['../group__TransformPointcloud.html',1,'Transform PCL Point Clouds']]], + ['cluster_20extraction_6',['Point Cloud Cluster Extraction',['../group__ExtractClusters.html',1,'']]], + ['complexity_20of_20a_20point_20cloud_20with_20normals_7',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['computation_8',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]], + ['compute_20structural_20complexity_20of_20a_20point_20cloud_20with_20normals_9',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['compute_20variance_20and_20correspondences_20of_20two_20point_20clouds_10',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]], + ['correspondences_20of_20two_20point_20clouds_11',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]], + ['crop_20box_20filtering_12',['Crop Box Filtering',['../group__CropBox.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_5.js b/preview/pr-1492/api/latest/search/groups_5.js new file mode 100644 index 00000000..482b5b24 --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['downsampling_0',['Point Cloud Downsampling',['../group__PointCloudDownSampling.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_6.js b/preview/pr-1492/api/latest/search/groups_6.js new file mode 100644 index 00000000..f86cab0c --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['extraction_0',['extraction',['../group__ExtractClusters.html',1,'Point Cloud Cluster Extraction'],['../group__ExtractIndices.html',1,'Point Cloud Indices Extraction']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_7.js b/preview/pr-1492/api/latest/search/groups_7.js new file mode 100644 index 00000000..65061a5d --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['filtering_0',['filtering',['../group__CropBox.html',1,'Crop Box Filtering'],['../group__FrustumFiltering.html',1,'Frustum Filtering'],['../group__PassThrough.html',1,'Pass-through Filtering'],['../group__PointNormalFiltering.html',1,'Point Normal Filtering'],['../group__ProportionalRadiusFiltering.html',1,'Proportional Radius Filtering'],['../group__RadiusFiltering.html',1,'Radius Filtering'],['../group__SubtractFiltering.html',1,'Subtract Filtering'],['../group__VoxelFiltering.html',1,'Voxel Filtering']]], + ['filtering_20of_20pcl_20point_20clouds_1',['filtering of pcl point clouds',['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds']]], + ['from_20a_20point_20cloud_2',['from a point cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['frustum_20filtering_3',['Frustum Filtering',['../group__FrustumFiltering.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_8.js b/preview/pr-1492/api/latest/search/groups_8.js new file mode 100644 index 00000000..53dfb1ad --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['indices_20extraction_0',['Point Cloud Indices Extraction',['../group__ExtractIndices.html',1,'']]], + ['interest_20roi_20computation_1',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_9.js b/preview/pr-1492/api/latest/search/groups_9.js new file mode 100644 index 00000000..5a1340eb --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['laserscan_0',['laserscan',['../group__LaserScan2dFromPointCloud.html',1,'PCL to 2D LaserScan'],['../group__LaserScanFromPointCloud.html',1,'PCL to 3D LaserScan']]], + ['laserscan_20to_20pcl_1',['LaserScan to PCL',['../group__LaserScanToPointCloud.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_a.js b/preview/pr-1492/api/latest/search/groups_a.js new file mode 100644 index 00000000..cbe33264 --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['nan_20points_20from_20a_20point_20cloud_0',['nan points from a point cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['normal_20filtering_1',['Point Normal Filtering',['../group__PointNormalFiltering.html',1,'']]], + ['normals_2',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_b.js b/preview/pr-1492/api/latest/search/groups_b.js new file mode 100644 index 00000000..2b3fae46 --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['of_20a_20point_20cloud_20with_20normals_0',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['of_20interest_20roi_20computation_1',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]], + ['of_20pcl_20point_20clouds_2',['of pcl point clouds',['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds']]], + ['of_20two_20point_20clouds_3',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_c.js b/preview/pr-1492/api/latest/search/groups_c.js new file mode 100644 index 00000000..d0d9bc50 --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_c.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['pass_20through_20filtering_0',['Pass-through Filtering',['../group__PassThrough.html',1,'']]], + ['pcl_1',['LaserScan to PCL',['../group__LaserScanToPointCloud.html',1,'']]], + ['pcl_20point_20clouds_2',['pcl point clouds',['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds'],['../group__TransformPointcloud.html',1,'Transform PCL Point Clouds']]], + ['pcl_20to_202d_20laserscan_3',['PCL to 2D LaserScan',['../group__LaserScan2dFromPointCloud.html',1,'']]], + ['pcl_20to_203d_20laserscan_4',['PCL to 3D LaserScan',['../group__LaserScanFromPointCloud.html',1,'']]], + ['point_5',['Transform a single point',['../group__TransformPoint.html',1,'']]], + ['point_20cloud_6',['point cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['point_20cloud_20cluster_20extraction_7',['Point Cloud Cluster Extraction',['../group__ExtractClusters.html',1,'']]], + ['point_20cloud_20downsampling_8',['Point Cloud Downsampling',['../group__PointCloudDownSampling.html',1,'']]], + ['point_20cloud_20indices_20extraction_9',['Point Cloud Indices Extraction',['../group__ExtractIndices.html',1,'']]], + ['point_20cloud_20with_20normals_10',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['point_20clouds_11',['point clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'Compute Variance and Correspondences of Two Point Clouds'],['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds'],['../group__TransformPointcloud.html',1,'Transform PCL Point Clouds']]], + ['point_20normal_20filtering_12',['Point Normal Filtering',['../group__PointNormalFiltering.html',1,'']]], + ['points_20from_20a_20point_20cloud_13',['points from a point cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['proportional_20radius_20filtering_14',['Proportional Radius Filtering',['../group__ProportionalRadiusFiltering.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_d.js b/preview/pr-1492/api/latest/search/groups_d.js new file mode 100644 index 00000000..3a31c84f --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_d.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['radius_20filtering_0',['radius filtering',['../group__ProportionalRadiusFiltering.html',1,'Proportional Radius Filtering'],['../group__RadiusFiltering.html',1,'Radius Filtering']]], + ['random_20sampling_1',['Random Sampling',['../group__RandomSampling.html',1,'']]], + ['range_20filtering_20of_20pcl_20point_20clouds_2',['range filtering of pcl point clouds',['../group__PointCloudRangeFiltering.html',1,'Range Filtering of PCL Point Clouds'],['../group__PointCloudSplitRangeFiltering.html',1,'Split Range Filtering of PCL Point Clouds']]], + ['region_20of_20interest_20roi_20computation_3',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]], + ['remove_20nan_20points_20from_20a_20point_20cloud_4',['remove nan points from a point cloud',['../group__RemoveNaNFromPointCloud.html',1,'Remove NaN Points from a Point Cloud'],['../group__RemoveNaNNormalsFromPointCloud.html',1,'Remove NaN Points from a Point Cloud']]], + ['roi_20computation_5',['Region of Interest (ROI) Computation',['../group__RoiComputation.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_e.js b/preview/pr-1492/api/latest/search/groups_e.js new file mode 100644 index 00000000..a67c98aa --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_e.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['sampling_0',['Random Sampling',['../group__RandomSampling.html',1,'']]], + ['single_20point_1',['Transform a single point',['../group__TransformPoint.html',1,'']]], + ['split_20range_20filtering_20of_20pcl_20point_20clouds_2',['Split Range Filtering of PCL Point Clouds',['../group__PointCloudSplitRangeFiltering.html',1,'']]], + ['structural_20complexity_20of_20a_20point_20cloud_20with_20normals_3',['Compute Structural Complexity of a Point Cloud with Normals',['../group__ComputeNormalsComplexity.html',1,'']]], + ['subtract_20filtering_4',['Subtract Filtering',['../group__SubtractFiltering.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/groups_f.js b/preview/pr-1492/api/latest/search/groups_f.js new file mode 100644 index 00000000..b48e1f6e --- /dev/null +++ b/preview/pr-1492/api/latest/search/groups_f.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['through_20filtering_0',['Pass-through Filtering',['../group__PassThrough.html',1,'']]], + ['to_202d_20laserscan_1',['PCL to 2D LaserScan',['../group__LaserScan2dFromPointCloud.html',1,'']]], + ['to_203d_20laserscan_2',['PCL to 3D LaserScan',['../group__LaserScanFromPointCloud.html',1,'']]], + ['to_20pcl_3',['LaserScan to PCL',['../group__LaserScanToPointCloud.html',1,'']]], + ['transform_20a_20single_20point_4',['Transform a single point',['../group__TransformPoint.html',1,'']]], + ['transform_20pcl_20point_20clouds_5',['Transform PCL Point Clouds',['../group__TransformPointcloud.html',1,'']]], + ['two_20point_20clouds_6',['Compute Variance and Correspondences of Two Point Clouds',['../group__ComputeVarianceAndCorrespondences.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/mag.svg b/preview/pr-1492/api/latest/search/mag.svg new file mode 100644 index 00000000..ffb6cf0d --- /dev/null +++ b/preview/pr-1492/api/latest/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/search/mag_d.svg b/preview/pr-1492/api/latest/search/mag_d.svg new file mode 100644 index 00000000..4122773f --- /dev/null +++ b/preview/pr-1492/api/latest/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/preview/pr-1492/api/latest/search/mag_sel.svg b/preview/pr-1492/api/latest/search/mag_sel.svg new file mode 100644 index 00000000..553dba87 --- /dev/null +++ b/preview/pr-1492/api/latest/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/search/mag_seld.svg b/preview/pr-1492/api/latest/search/mag_seld.svg new file mode 100644 index 00000000..c906f84c --- /dev/null +++ b/preview/pr-1492/api/latest/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/search/namespaces_0.js b/preview/pr-1492/api/latest/search/namespaces_0.js new file mode 100644 index 00000000..edea8a3a --- /dev/null +++ b/preview/pr-1492/api/latest/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['graph_0',['graph',['../namespacegraph.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/namespaces_1.js b/preview/pr-1492/api/latest/search/namespaces_1.js new file mode 100644 index 00000000..5e44596f --- /dev/null +++ b/preview/pr-1492/api/latest/search/namespaces_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['rtabmap_0',['rtabmap',['../namespacertabmap.html',1,'']]], + ['rtabmap_3a_3autil2d_1',['util2d',['../namespacertabmap_1_1util2d.html',1,'rtabmap']]] +]; diff --git a/preview/pr-1492/api/latest/search/pages_0.js b/preview/pr-1492/api/latest/search/pages_0.js new file mode 100644 index 00000000..4d858458 --- /dev/null +++ b/preview/pr-1492/api/latest/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/pages_1.js b/preview/pr-1492/api/latest/search/pages_1.js new file mode 100644 index 00000000..1ad91e39 --- /dev/null +++ b/preview/pr-1492/api/latest/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/pages_2.js b/preview/pr-1492/api/latest/search/pages_2.js new file mode 100644 index 00000000..1775b8de --- /dev/null +++ b/preview/pr-1492/api/latest/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uresourcegenerator_0',['uResourceGenerator',['../uResourceGeneratorPage.html',1,'']]] +]; diff --git a/preview/pr-1492/api/latest/search/related_0.js b/preview/pr-1492/api/latest/search/related_0.js new file mode 100644 index 00000000..874247ef --- /dev/null +++ b/preview/pr-1492/api/latest/search/related_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ueventsmanager_0',['UEventsManager',['../classUEventsHandler.html#a977152b27d4c918d79a2db23ed85bfa6',1,'UEventsHandler']]] +]; diff --git a/preview/pr-1492/api/latest/search/search.css b/preview/pr-1492/api/latest/search/search.css new file mode 100644 index 00000000..19f76f9d --- /dev/null +++ b/preview/pr-1492/api/latest/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/preview/pr-1492/api/latest/search/search.js b/preview/pr-1492/api/latest/search/search.js new file mode 100644 index 00000000..6fd40c67 --- /dev/null +++ b/preview/pr-1492/api/latest/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/clams/slam_calibrator.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    slam_calibrator.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2013, Alex Teichman and Stephen Miller (Stanford University)
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the <organization> nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26
    +
    27RTAB-Map integration: Mathieu Labbe
    +
    28*/
    +
    29
    +
    30#ifndef SLAM_CALIBRATOR_H
    +
    31#define SLAM_CALIBRATOR_H
    +
    32
    +
    33#include <rtabmap/core/clams/discrete_depth_distortion_model.h>
    +
    34#include <rtabmap/core/SensorData.h>
    +
    35#include <pcl/point_cloud.h>
    +
    36#include <pcl/point_types.h>
    +
    37
    +
    38namespace clams
    +
    39{
    +
    40
    +
    41DiscreteDepthDistortionModel RTABMAP_CORE_EXPORT calibrate(
    +
    42 const std::map<int, rtabmap::SensorData> & sequence,
    +
    43 const std::map<int, rtabmap::Transform> & trajectory,
    +
    44 const pcl::PointCloud<pcl::PointXYZ>::Ptr & map,
    +
    45 double coneRadius = 0.02,
    +
    46 double coneStdevThresh = 0.03);
    +
    47
    +
    48}
    +
    49
    +
    50#endif // SLAM_CALIBRATOR_H
    +
    + + + + diff --git a/preview/pr-1492/api/latest/splitbar.png b/preview/pr-1492/api/latest/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/splitbard.png b/preview/pr-1492/api/latest/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/stereoRectifyFisheye_8h_source.html b/preview/pr-1492/api/latest/stereoRectifyFisheye_8h_source.html new file mode 100644 index 00000000..98b7ce86 --- /dev/null +++ b/preview/pr-1492/api/latest/stereoRectifyFisheye_8h_source.html @@ -0,0 +1,1348 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/stereo/stereoRectifyFisheye.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    stereoRectifyFisheye.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5This code is the same has cv::stereoRectify() but accepting fisheye distortion model:
    +
    6All cvUndistortPoints() have been replaced by cv::fisheye::undistortPoints()
    +
    7See https://github.com/opencv/opencv/blob/master/modules/calib3d/src/calibration.cpp
    +
    8
    +
    9Redistribution and use in source and binary forms, with or without
    +
    10modification, are permitted provided that the following conditions are met:
    +
    11 * Redistributions of source code must retain the above copyright
    +
    12 notice, this list of conditions and the following disclaimer.
    +
    13 * Redistributions in binary form must reproduce the above copyright
    +
    14 notice, this list of conditions and the following disclaimer in the
    +
    15 documentation and/or other materials provided with the distribution.
    +
    16 * Neither the name of the Universite de Sherbrooke nor the
    +
    17 names of its contributors may be used to endorse or promote products
    +
    18 derived from this software without specific prior written permission.
    +
    19
    +
    20THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    21ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    22WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    23DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    24DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    25(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    26LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    27ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    28(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    29SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    30*/
    +
    31
    +
    32#ifndef CORELIB_SRC_OPENCV_STEREORECTIFYFISHEYE_H_
    +
    33#define CORELIB_SRC_OPENCV_STEREORECTIFYFISHEYE_H_
    +
    34
    +
    35// This header relies on the OpenCV C API (cvRodrigues2, cvProjectPoints2, ...)
    +
    36// which was removed in OpenCV 5. Pull in only the version macros (available in
    +
    37// all OpenCV versions) so we can fail early with a clear message rather than
    +
    38// with cryptic errors from the includes below.
    +
    39#include <opencv2/core/version.hpp>
    +
    40#if CV_MAJOR_VERSION >= 5
    +
    41#error "stereoRectifyFisheye.h is not supported with OpenCV 5 or later (it uses the removed OpenCV C API). Use cv::fisheye::stereoRectify() instead, or guard your include with '#if CV_MAJOR_VERSION < 5'."
    +
    42#endif
    +
    43
    +
    44#include <opencv2/calib3d/calib3d.hpp>
    +
    45#if CV_MAJOR_VERSION >= 3
    +
    46#include <opencv2/calib3d/calib3d_c.h>
    +
    47
    +
    48#if CV_MAJOR_VERSION >= 4
    +
    49#include <opencv2/core/core_c.h>
    +
    50
    +
    51// Opencv4 doesn't expose those functions below anymore, we should recopy all of them!
    +
    52int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian CV_DEFAULT(0))
    +
    53{
    +
    54 int depth, elem_size;
    +
    55 int i, k;
    +
    56 double J[27] = {0};
    +
    57 CvMat matJ = cvMat( 3, 9, CV_64F, J );
    +
    58
    +
    59 if( !CV_IS_MAT(src) )
    +
    60 CV_Error( !src ? CV_StsNullPtr : CV_StsBadArg, "Input argument is not a valid matrix" );
    +
    61
    +
    62 if( !CV_IS_MAT(dst) )
    +
    63 CV_Error( !dst ? CV_StsNullPtr : CV_StsBadArg,
    +
    64 "The first output argument is not a valid matrix" );
    +
    65
    +
    66 depth = CV_MAT_DEPTH(src->type);
    +
    67 elem_size = CV_ELEM_SIZE(depth);
    +
    68
    +
    69 if( depth != CV_32F && depth != CV_64F )
    +
    70 CV_Error( CV_StsUnsupportedFormat, "The matrices must have 32f or 64f data type" );
    +
    71
    +
    72 if( !CV_ARE_DEPTHS_EQ(src, dst) )
    +
    73 CV_Error( CV_StsUnmatchedFormats, "All the matrices must have the same data type" );
    +
    74
    +
    75 if( jacobian )
    +
    76 {
    +
    77 if( !CV_IS_MAT(jacobian) )
    +
    78 CV_Error( CV_StsBadArg, "Jacobian is not a valid matrix" );
    +
    79
    +
    80 if( !CV_ARE_DEPTHS_EQ(src, jacobian) || CV_MAT_CN(jacobian->type) != 1 )
    +
    81 CV_Error( CV_StsUnmatchedFormats, "Jacobian must have 32fC1 or 64fC1 datatype" );
    +
    82
    +
    83 if( (jacobian->rows != 9 || jacobian->cols != 3) &&
    +
    84 (jacobian->rows != 3 || jacobian->cols != 9))
    +
    85 CV_Error( CV_StsBadSize, "Jacobian must be 3x9 or 9x3" );
    +
    86 }
    +
    87
    +
    88 if( src->cols == 1 || src->rows == 1 )
    +
    89 {
    +
    90 int step = src->rows > 1 ? src->step / elem_size : 1;
    +
    91
    +
    92 if( src->rows + src->cols*CV_MAT_CN(src->type) - 1 != 3 )
    +
    93 CV_Error( CV_StsBadSize, "Input matrix must be 1x3, 3x1 or 3x3" );
    +
    94
    +
    95 if( dst->rows != 3 || dst->cols != 3 || CV_MAT_CN(dst->type) != 1 )
    +
    96 CV_Error( CV_StsBadSize, "Output matrix must be 3x3, single-channel floating point matrix" );
    +
    97
    +
    98 cv::Point3d r;
    +
    99 if( depth == CV_32F )
    +
    100 {
    +
    101 r.x = src->data.fl[0];
    +
    102 r.y = src->data.fl[step];
    +
    103 r.z = src->data.fl[step*2];
    +
    104 }
    +
    105 else
    +
    106 {
    +
    107 r.x = src->data.db[0];
    +
    108 r.y = src->data.db[step];
    +
    109 r.z = src->data.db[step*2];
    +
    110 }
    +
    111
    +
    112 double theta = cv::norm(r);
    +
    113
    +
    114 if( theta < DBL_EPSILON )
    +
    115 {
    +
    116 cvSetIdentity( dst );
    +
    117
    +
    118 if( jacobian )
    +
    119 {
    +
    120 memset( J, 0, sizeof(J) );
    +
    121 J[5] = J[15] = J[19] = -1;
    +
    122 J[7] = J[11] = J[21] = 1;
    +
    123 }
    +
    124 }
    +
    125 else
    +
    126 {
    +
    127 double c = cos(theta);
    +
    128 double s = sin(theta);
    +
    129 double c1 = 1. - c;
    +
    130 double itheta = theta ? 1./theta : 0.;
    +
    131
    +
    132 r *= itheta;
    +
    133
    +
    134 cv::Matx33d rrt( r.x*r.x, r.x*r.y, r.x*r.z, r.x*r.y, r.y*r.y, r.y*r.z, r.x*r.z, r.y*r.z, r.z*r.z );
    +
    135 cv::Matx33d r_x( 0, -r.z, r.y,
    +
    136 r.z, 0, -r.x,
    +
    137 -r.y, r.x, 0 );
    +
    138
    +
    139 // R = cos(theta)*I + (1 - cos(theta))*r*rT + sin(theta)*[r_x]
    +
    140 cv::Matx33d R = c*cv::Matx33d::eye() + c1*rrt + s*r_x;
    +
    141
    +
    142 cv::Mat(R).convertTo(cv::cvarrToMat(dst), dst->type);
    +
    143
    +
    144 if( jacobian )
    +
    145 {
    +
    146 const double I[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1 };
    +
    147 double drrt[] = { r.x+r.x, r.y, r.z, r.y, 0, 0, r.z, 0, 0,
    +
    148 0, r.x, 0, r.x, r.y+r.y, r.z, 0, r.z, 0,
    +
    149 0, 0, r.x, 0, 0, r.y, r.x, r.y, r.z+r.z };
    +
    150 double d_r_x_[] = { 0, 0, 0, 0, 0, -1, 0, 1, 0,
    +
    151 0, 0, 1, 0, 0, 0, -1, 0, 0,
    +
    152 0, -1, 0, 1, 0, 0, 0, 0, 0 };
    +
    153 for( i = 0; i < 3; i++ )
    +
    154 {
    +
    155 double ri = i == 0 ? r.x : i == 1 ? r.y : r.z;
    +
    156 double a0 = -s*ri, a1 = (s - 2*c1*itheta)*ri, a2 = c1*itheta;
    +
    157 double a3 = (c - s*itheta)*ri, a4 = s*itheta;
    +
    158 for( k = 0; k < 9; k++ )
    +
    159 J[i*9+k] = a0*I[k] + a1*rrt.val[k] + a2*drrt[i*9+k] +
    +
    160 a3*r_x.val[k] + a4*d_r_x_[i*9+k];
    +
    161 }
    +
    162 }
    +
    163 }
    +
    164 }
    +
    165 else if( src->cols == 3 && src->rows == 3 )
    +
    166 {
    +
    167 cv::Matx33d U, Vt;
    +
    168 cv::Vec3d W;
    +
    169 double theta, s, c;
    +
    170 int step = dst->rows > 1 ? dst->step / elem_size : 1;
    +
    171
    +
    172 if( (dst->rows != 1 || dst->cols*CV_MAT_CN(dst->type) != 3) &&
    +
    173 (dst->rows != 3 || dst->cols != 1 || CV_MAT_CN(dst->type) != 1))
    +
    174 CV_Error( CV_StsBadSize, "Output matrix must be 1x3 or 3x1" );
    +
    175
    +
    176 cv::Matx33d R = cv::cvarrToMat(src);
    +
    177
    +
    178 if( !cv::checkRange(R, true, NULL, -100, 100) )
    +
    179 {
    +
    180 cvZero(dst);
    +
    181 if( jacobian )
    +
    182 cvZero(jacobian);
    +
    183 return 0;
    +
    184 }
    +
    185
    +
    186 cv::SVD::compute(R, W, U, Vt);
    +
    187 R = U*Vt;
    +
    188
    +
    189 cv::Point3d r(R(2, 1) - R(1, 2), R(0, 2) - R(2, 0), R(1, 0) - R(0, 1));
    +
    190
    +
    191 s = std::sqrt((r.x*r.x + r.y*r.y + r.z*r.z)*0.25);
    +
    192 c = (R(0, 0) + R(1, 1) + R(2, 2) - 1)*0.5;
    +
    193 c = c > 1. ? 1. : c < -1. ? -1. : c;
    +
    194 theta = acos(c);
    +
    195
    +
    196 if( s < 1e-5 )
    +
    197 {
    +
    198 double t;
    +
    199
    +
    200 if( c > 0 )
    +
    201 r = cv::Point3d(0, 0, 0);
    +
    202 else
    +
    203 {
    +
    204 t = (R(0, 0) + 1)*0.5;
    +
    205 r.x = std::sqrt(MAX(t,0.));
    +
    206 t = (R(1, 1) + 1)*0.5;
    +
    207 r.y = std::sqrt(MAX(t,0.))*(R(0, 1) < 0 ? -1. : 1.);
    +
    208 t = (R(2, 2) + 1)*0.5;
    +
    209 r.z = std::sqrt(MAX(t,0.))*(R(0, 2) < 0 ? -1. : 1.);
    +
    210 if( fabs(r.x) < fabs(r.y) && fabs(r.x) < fabs(r.z) && (R(1, 2) > 0) != (r.y*r.z > 0) )
    +
    211 r.z = -r.z;
    +
    212 theta /= cv::norm(r);
    +
    213 r *= theta;
    +
    214 }
    +
    215
    +
    216 if( jacobian )
    +
    217 {
    +
    218 memset( J, 0, sizeof(J) );
    +
    219 if( c > 0 )
    +
    220 {
    +
    221 J[5] = J[15] = J[19] = -0.5;
    +
    222 J[7] = J[11] = J[21] = 0.5;
    +
    223 }
    +
    224 }
    +
    225 }
    +
    226 else
    +
    227 {
    +
    228 double vth = 1/(2*s);
    +
    229
    +
    230 if( jacobian )
    +
    231 {
    +
    232 double t, dtheta_dtr = -1./s;
    +
    233 // var1 = [vth;theta]
    +
    234 // var = [om1;var1] = [om1;vth;theta]
    +
    235 double dvth_dtheta = -vth*c/s;
    +
    236 double d1 = 0.5*dvth_dtheta*dtheta_dtr;
    +
    237 double d2 = 0.5*dtheta_dtr;
    +
    238 // dvar1/dR = dvar1/dtheta*dtheta/dR = [dvth/dtheta; 1] * dtheta/dtr * dtr/dR
    +
    239 double dvardR[5*9] =
    +
    240 {
    +
    241 0, 0, 0, 0, 0, 1, 0, -1, 0,
    +
    242 0, 0, -1, 0, 0, 0, 1, 0, 0,
    +
    243 0, 1, 0, -1, 0, 0, 0, 0, 0,
    +
    244 d1, 0, 0, 0, d1, 0, 0, 0, d1,
    +
    245 d2, 0, 0, 0, d2, 0, 0, 0, d2
    +
    246 };
    +
    247 // var2 = [om;theta]
    +
    248 double dvar2dvar[] =
    +
    249 {
    +
    250 vth, 0, 0, r.x, 0,
    +
    251 0, vth, 0, r.y, 0,
    +
    252 0, 0, vth, r.z, 0,
    +
    253 0, 0, 0, 0, 1
    +
    254 };
    +
    255 double domegadvar2[] =
    +
    256 {
    +
    257 theta, 0, 0, r.x*vth,
    +
    258 0, theta, 0, r.y*vth,
    +
    259 0, 0, theta, r.z*vth
    +
    260 };
    +
    261
    +
    262 CvMat _dvardR = cvMat( 5, 9, CV_64FC1, dvardR );
    +
    263 CvMat _dvar2dvar = cvMat( 4, 5, CV_64FC1, dvar2dvar );
    +
    264 CvMat _domegadvar2 = cvMat( 3, 4, CV_64FC1, domegadvar2 );
    +
    265 double t0[3*5];
    +
    266 CvMat _t0 = cvMat( 3, 5, CV_64FC1, t0 );
    +
    267
    +
    268 cvMatMul( &_domegadvar2, &_dvar2dvar, &_t0 );
    +
    269 cvMatMul( &_t0, &_dvardR, &matJ );
    +
    270
    +
    271 // transpose every row of matJ (treat the rows as 3x3 matrices)
    +
    272 CV_SWAP(J[1], J[3], t); CV_SWAP(J[2], J[6], t); CV_SWAP(J[5], J[7], t);
    +
    273 CV_SWAP(J[10], J[12], t); CV_SWAP(J[11], J[15], t); CV_SWAP(J[14], J[16], t);
    +
    274 CV_SWAP(J[19], J[21], t); CV_SWAP(J[20], J[24], t); CV_SWAP(J[23], J[25], t);
    +
    275 }
    +
    276
    +
    277 vth *= theta;
    +
    278 r *= vth;
    +
    279 }
    +
    280
    +
    281 if( depth == CV_32F )
    +
    282 {
    +
    283 dst->data.fl[0] = (float)r.x;
    +
    284 dst->data.fl[step] = (float)r.y;
    +
    285 dst->data.fl[step*2] = (float)r.z;
    +
    286 }
    +
    287 else
    +
    288 {
    +
    289 dst->data.db[0] = r.x;
    +
    290 dst->data.db[step] = r.y;
    +
    291 dst->data.db[step*2] = r.z;
    +
    292 }
    +
    293 }
    +
    294
    +
    295 if( jacobian )
    +
    296 {
    +
    297 if( depth == CV_32F )
    +
    298 {
    +
    299 if( jacobian->rows == matJ.rows )
    +
    300 cvConvert( &matJ, jacobian );
    +
    301 else
    +
    302 {
    +
    303 float Jf[3*9];
    +
    304 CvMat _Jf = cvMat( matJ.rows, matJ.cols, CV_32FC1, Jf );
    +
    305 cvConvert( &matJ, &_Jf );
    +
    306 cvTranspose( &_Jf, jacobian );
    +
    307 }
    +
    308 }
    +
    309 else if( jacobian->rows == matJ.rows )
    +
    310 cvCopy( &matJ, jacobian );
    +
    311 else
    +
    312 cvTranspose( &matJ, jacobian );
    +
    313 }
    +
    314
    +
    315 return 1;
    +
    316}
    +
    317
    +
    318template <typename FLOAT>
    +
    319void computeTiltProjectionMatrix(FLOAT tauX,
    +
    320 FLOAT tauY,
    +
    321 cv::Matx<FLOAT, 3, 3>* matTilt = 0,
    +
    322 cv::Matx<FLOAT, 3, 3>* dMatTiltdTauX = 0,
    +
    323 cv::Matx<FLOAT, 3, 3>* dMatTiltdTauY = 0,
    +
    324 cv::Matx<FLOAT, 3, 3>* invMatTilt = 0)
    +
    325{
    +
    326 FLOAT cTauX = cos(tauX);
    +
    327 FLOAT sTauX = sin(tauX);
    +
    328 FLOAT cTauY = cos(tauY);
    +
    329 FLOAT sTauY = sin(tauY);
    +
    330 cv::Matx<FLOAT, 3, 3> matRotX = cv::Matx<FLOAT, 3, 3>(1,0,0,0,cTauX,sTauX,0,-sTauX,cTauX);
    +
    331 cv::Matx<FLOAT, 3, 3> matRotY = cv::Matx<FLOAT, 3, 3>(cTauY,0,-sTauY,0,1,0,sTauY,0,cTauY);
    +
    332 cv::Matx<FLOAT, 3, 3> matRotXY = matRotY * matRotX;
    +
    333 cv::Matx<FLOAT, 3, 3> matProjZ = cv::Matx<FLOAT, 3, 3>(matRotXY(2,2),0,-matRotXY(0,2),0,matRotXY(2,2),-matRotXY(1,2),0,0,1);
    +
    334 if (matTilt)
    +
    335 {
    +
    336 // Matrix for trapezoidal distortion of tilted image sensor
    +
    337 *matTilt = matProjZ * matRotXY;
    +
    338 }
    +
    339 if (dMatTiltdTauX)
    +
    340 {
    +
    341 // Derivative with respect to tauX
    +
    342 cv::Matx<FLOAT, 3, 3> dMatRotXYdTauX = matRotY * cv::Matx<FLOAT, 3, 3>(0,0,0,0,-sTauX,cTauX,0,-cTauX,-sTauX);
    +
    343 cv::Matx<FLOAT, 3, 3> dMatProjZdTauX = cv::Matx<FLOAT, 3, 3>(dMatRotXYdTauX(2,2),0,-dMatRotXYdTauX(0,2),
    +
    344 0,dMatRotXYdTauX(2,2),-dMatRotXYdTauX(1,2),0,0,0);
    +
    345 *dMatTiltdTauX = (matProjZ * dMatRotXYdTauX) + (dMatProjZdTauX * matRotXY);
    +
    346 }
    +
    347 if (dMatTiltdTauY)
    +
    348 {
    +
    349 // Derivative with respect to tauY
    +
    350 cv::Matx<FLOAT, 3, 3> dMatRotXYdTauY = cv::Matx<FLOAT, 3, 3>(-sTauY,0,-cTauY,0,0,0,cTauY,0,-sTauY) * matRotX;
    +
    351 cv::Matx<FLOAT, 3, 3> dMatProjZdTauY = cv::Matx<FLOAT, 3, 3>(dMatRotXYdTauY(2,2),0,-dMatRotXYdTauY(0,2),
    +
    352 0,dMatRotXYdTauY(2,2),-dMatRotXYdTauY(1,2),0,0,0);
    +
    353 *dMatTiltdTauY = (matProjZ * dMatRotXYdTauY) + (dMatProjZdTauY * matRotXY);
    +
    354 }
    +
    355 if (invMatTilt)
    +
    356 {
    +
    357 FLOAT inv = 1./matRotXY(2,2);
    +
    358 cv::Matx<FLOAT, 3, 3> invMatProjZ = cv::Matx<FLOAT, 3, 3>(inv,0,inv*matRotXY(0,2),0,inv,inv*matRotXY(1,2),0,0,1);
    +
    359 *invMatTilt = matRotXY.t()*invMatProjZ;
    +
    360 }
    +
    361}
    +
    362
    +
    363void cvProjectPoints2Internal( const CvMat* objectPoints,
    +
    364 const CvMat* r_vec,
    +
    365 const CvMat* t_vec,
    +
    366 const CvMat* A,
    +
    367 const CvMat* distCoeffs,
    +
    368 CvMat* imagePoints, CvMat* dpdr CV_DEFAULT(NULL),
    +
    369 CvMat* dpdt CV_DEFAULT(NULL), CvMat* dpdf CV_DEFAULT(NULL),
    +
    370 CvMat* dpdc CV_DEFAULT(NULL), CvMat* dpdk CV_DEFAULT(NULL),
    +
    371 CvMat* dpdo CV_DEFAULT(NULL),
    +
    372 double aspectRatio CV_DEFAULT(0) )
    +
    373{
    +
    374 cv::Ptr<CvMat> matM, _m;
    +
    375 cv::Ptr<CvMat> _dpdr, _dpdt, _dpdc, _dpdf, _dpdk;
    +
    376 cv::Ptr<CvMat> _dpdo;
    +
    377
    +
    378 int i, j, count;
    +
    379 int calc_derivatives;
    +
    380 const CvPoint3D64f* M;
    +
    381 CvPoint2D64f* m;
    +
    382 double r[3], R[9], dRdr[27], t[3], a[9], k[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}, fx, fy, cx, cy;
    +
    383 cv::Matx33d matTilt = cv::Matx33d::eye();
    +
    384 cv::Matx33d dMatTiltdTauX(0,0,0,0,0,0,0,-1,0);
    +
    385 cv::Matx33d dMatTiltdTauY(0,0,0,0,0,0,1,0,0);
    +
    386 CvMat _r, _t, _a = cvMat( 3, 3, CV_64F, a ), _k;
    +
    387 CvMat matR = cvMat( 3, 3, CV_64F, R ), _dRdr = cvMat( 3, 9, CV_64F, dRdr );
    +
    388 double *dpdr_p = 0, *dpdt_p = 0, *dpdk_p = 0, *dpdf_p = 0, *dpdc_p = 0;
    +
    389 double* dpdo_p = 0;
    +
    390 int dpdr_step = 0, dpdt_step = 0, dpdk_step = 0, dpdf_step = 0, dpdc_step = 0;
    +
    391 int dpdo_step = 0;
    +
    392 bool fixedAspectRatio = aspectRatio > FLT_EPSILON;
    +
    393
    +
    394 if( !CV_IS_MAT(objectPoints) || !CV_IS_MAT(r_vec) ||
    +
    395 !CV_IS_MAT(t_vec) || !CV_IS_MAT(A) ||
    + !CV_IS_MAT(imagePoints) )
    397 CV_Error( CV_StsBadArg, "One of required arguments is not a valid matrix" );
    +
    398
    +
    399 int total = objectPoints->rows * objectPoints->cols * CV_MAT_CN(objectPoints->type);
    +
    400 if(total % 3 != 0)
    +
    401 {
    +
    402 //we have stopped support of homogeneous coordinates because it cause ambiguity in interpretation of the input data
    +
    403 CV_Error( CV_StsBadArg, "Homogeneous coordinates are not supported" );
    +
    404 }
    +
    405 count = total / 3;
    +
    406
    +
    407 if( CV_IS_CONT_MAT(objectPoints->type) &&
    +
    408 (CV_MAT_DEPTH(objectPoints->type) == CV_32F || CV_MAT_DEPTH(objectPoints->type) == CV_64F)&&
    +
    409 ((objectPoints->rows == 1 && CV_MAT_CN(objectPoints->type) == 3) ||
    +
    410 (objectPoints->rows == count && CV_MAT_CN(objectPoints->type)*objectPoints->cols == 3) ||
    +
    411 (objectPoints->rows == 3 && CV_MAT_CN(objectPoints->type) == 1 && objectPoints->cols == count)))
    +
    412 {
    +
    413 matM.reset(cvCreateMat( objectPoints->rows, objectPoints->cols, CV_MAKETYPE(CV_64F,CV_MAT_CN(objectPoints->type)) ));
    +
    414 cvConvert(objectPoints, matM);
    +
    415 }
    +
    416 else
    +
    417 {
    +
    418// matM = cvCreateMat( 1, count, CV_64FC3 );
    +
    419// cvConvertPointsHomogeneous( objectPoints, matM );
    +
    420 CV_Error( CV_StsBadArg, "Homogeneous coordinates are not supported" );
    +
    421 }
    +
    422
    +
    423 if( CV_IS_CONT_MAT(imagePoints->type) &&
    +
    424 (CV_MAT_DEPTH(imagePoints->type) == CV_32F || CV_MAT_DEPTH(imagePoints->type) == CV_64F) &&
    +
    425 ((imagePoints->rows == 1 && CV_MAT_CN(imagePoints->type) == 2) ||
    +
    426 (imagePoints->rows == count && CV_MAT_CN(imagePoints->type)*imagePoints->cols == 2) ||
    +
    427 (imagePoints->rows == 2 && CV_MAT_CN(imagePoints->type) == 1 && imagePoints->cols == count)))
    +
    428 {
    +
    429 _m.reset(cvCreateMat( imagePoints->rows, imagePoints->cols, CV_MAKETYPE(CV_64F,CV_MAT_CN(imagePoints->type)) ));
    +
    430 cvConvert(imagePoints, _m);
    +
    431 }
    +
    432 else
    +
    433 {
    +
    434// _m = cvCreateMat( 1, count, CV_64FC2 );
    +
    435 CV_Error( CV_StsBadArg, "Homogeneous coordinates are not supported" );
    +
    436 }
    +
    437
    +
    438 M = (CvPoint3D64f*)matM->data.db;
    +
    439 m = (CvPoint2D64f*)_m->data.db;
    +
    440
    +
    441 if( (CV_MAT_DEPTH(r_vec->type) != CV_64F && CV_MAT_DEPTH(r_vec->type) != CV_32F) ||
    +
    442 (((r_vec->rows != 1 && r_vec->cols != 1) ||
    +
    443 r_vec->rows*r_vec->cols*CV_MAT_CN(r_vec->type) != 3) &&
    +
    444 ((r_vec->rows != 3 && r_vec->cols != 3) || CV_MAT_CN(r_vec->type) != 1)))
    +
    445 CV_Error( CV_StsBadArg, "Rotation must be represented by 1x3 or 3x1 "
    +
    446 "floating-point rotation vector, or 3x3 rotation matrix" );
    +
    447
    +
    448 if( r_vec->rows == 3 && r_vec->cols == 3 )
    +
    449 {
    +
    450 _r = cvMat( 3, 1, CV_64FC1, r );
    +
    451 cvRodrigues2( r_vec, &_r );
    +
    452 cvRodrigues2( &_r, &matR, &_dRdr );
    +
    453 cvCopy( r_vec, &matR );
    +
    454 }
    +
    455 else
    +
    456 {
    +
    457 _r = cvMat( r_vec->rows, r_vec->cols, CV_MAKETYPE(CV_64F,CV_MAT_CN(r_vec->type)), r );
    +
    458 cvConvert( r_vec, &_r );
    +
    459 cvRodrigues2( &_r, &matR, &_dRdr );
    +
    460 }
    +
    461
    +
    462 if( (CV_MAT_DEPTH(t_vec->type) != CV_64F && CV_MAT_DEPTH(t_vec->type) != CV_32F) ||
    +
    463 (t_vec->rows != 1 && t_vec->cols != 1) ||
    +
    464 t_vec->rows*t_vec->cols*CV_MAT_CN(t_vec->type) != 3 )
    +
    465 CV_Error( CV_StsBadArg,
    +
    466 "Translation vector must be 1x3 or 3x1 floating-point vector" );
    +
    467
    +
    468 _t = cvMat( t_vec->rows, t_vec->cols, CV_MAKETYPE(CV_64F,CV_MAT_CN(t_vec->type)), t );
    +
    469 cvConvert( t_vec, &_t );
    +
    470
    +
    471 if( (CV_MAT_TYPE(A->type) != CV_64FC1 && CV_MAT_TYPE(A->type) != CV_32FC1) ||
    +
    472 A->rows != 3 || A->cols != 3 )
    +
    473 CV_Error( CV_StsBadArg, "Instrinsic parameters must be 3x3 floating-point matrix" );
    +
    474
    +
    475 cvConvert( A, &_a );
    +
    476 fx = a[0]; fy = a[4];
    +
    477 cx = a[2]; cy = a[5];
    +
    478
    +
    479 if( fixedAspectRatio )
    +
    480 fx = fy*aspectRatio;
    +
    481
    +
    482 if( distCoeffs )
    +
    483 {
    +
    484 if( !CV_IS_MAT(distCoeffs) ||
    +
    485 (CV_MAT_DEPTH(distCoeffs->type) != CV_64F &&
    +
    486 CV_MAT_DEPTH(distCoeffs->type) != CV_32F) ||
    +
    487 (distCoeffs->rows != 1 && distCoeffs->cols != 1) ||
    +
    488 (distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) != 4 &&
    +
    489 distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) != 5 &&
    +
    490 distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) != 8 &&
    +
    491 distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) != 12 &&
    +
    492 distCoeffs->rows*distCoeffs->cols*CV_MAT_CN(distCoeffs->type) != 14) )
    +
    493 CV_Error( CV_StsBadArg, "Distortion coefficients must be 1x4, 4x1, 1x5, 5x1, 1x8, 8x1, 1x12, 12x1, 1x14 or 14x1 floating-point vector");
    +
    494
    +
    495 _k = cvMat( distCoeffs->rows, distCoeffs->cols,
    +
    496 CV_MAKETYPE(CV_64F,CV_MAT_CN(distCoeffs->type)), k );
    +
    497 cvConvert( distCoeffs, &_k );
    +
    498 if(k[12] != 0 || k[13] != 0)
    +
    499 {
    +
    500 computeTiltProjectionMatrix(k[12], k[13],
    +
    501 &matTilt, &dMatTiltdTauX, &dMatTiltdTauY);
    +
    502 }
    +
    503 }
    +
    504
    +
    505 if( dpdr )
    +
    506 {
    +
    507 if( !CV_IS_MAT(dpdr) ||
    +
    508 (CV_MAT_TYPE(dpdr->type) != CV_32FC1 &&
    +
    509 CV_MAT_TYPE(dpdr->type) != CV_64FC1) ||
    +
    510 dpdr->rows != count*2 || dpdr->cols != 3 )
    +
    511 CV_Error( CV_StsBadArg, "dp/drot must be 2Nx3 floating-point matrix" );
    +
    512
    +
    513 if( CV_MAT_TYPE(dpdr->type) == CV_64FC1 )
    +
    514 {
    +
    515 _dpdr.reset(cvCloneMat(dpdr));
    +
    516 }
    +
    517 else
    +
    518 _dpdr.reset(cvCreateMat( 2*count, 3, CV_64FC1 ));
    +
    519 dpdr_p = _dpdr->data.db;
    +
    520 dpdr_step = _dpdr->step/sizeof(dpdr_p[0]);
    +
    521 }
    +
    522
    +
    523 if( dpdt )
    +
    524 {
    +
    525 if( !CV_IS_MAT(dpdt) ||
    +
    526 (CV_MAT_TYPE(dpdt->type) != CV_32FC1 &&
    +
    527 CV_MAT_TYPE(dpdt->type) != CV_64FC1) ||
    +
    528 dpdt->rows != count*2 || dpdt->cols != 3 )
    +
    529 CV_Error( CV_StsBadArg, "dp/dT must be 2Nx3 floating-point matrix" );
    +
    530
    +
    531 if( CV_MAT_TYPE(dpdt->type) == CV_64FC1 )
    +
    532 {
    +
    533 _dpdt.reset(cvCloneMat(dpdt));
    +
    534 }
    +
    535 else
    +
    536 _dpdt.reset(cvCreateMat( 2*count, 3, CV_64FC1 ));
    +
    537 dpdt_p = _dpdt->data.db;
    +
    538 dpdt_step = _dpdt->step/sizeof(dpdt_p[0]);
    +
    539 }
    +
    540
    +
    541 if( dpdf )
    +
    542 {
    +
    543 if( !CV_IS_MAT(dpdf) ||
    +
    544 (CV_MAT_TYPE(dpdf->type) != CV_32FC1 && CV_MAT_TYPE(dpdf->type) != CV_64FC1) ||
    +
    545 dpdf->rows != count*2 || dpdf->cols != 2 )
    +
    546 CV_Error( CV_StsBadArg, "dp/df must be 2Nx2 floating-point matrix" );
    +
    547
    +
    548 if( CV_MAT_TYPE(dpdf->type) == CV_64FC1 )
    +
    549 {
    +
    550 _dpdf.reset(cvCloneMat(dpdf));
    +
    551 }
    +
    552 else
    +
    553 _dpdf.reset(cvCreateMat( 2*count, 2, CV_64FC1 ));
    +
    554 dpdf_p = _dpdf->data.db;
    +
    555 dpdf_step = _dpdf->step/sizeof(dpdf_p[0]);
    +
    556 }
    +
    557
    +
    558 if( dpdc )
    +
    559 {
    +
    560 if( !CV_IS_MAT(dpdc) ||
    +
    561 (CV_MAT_TYPE(dpdc->type) != CV_32FC1 && CV_MAT_TYPE(dpdc->type) != CV_64FC1) ||
    +
    562 dpdc->rows != count*2 || dpdc->cols != 2 )
    +
    563 CV_Error( CV_StsBadArg, "dp/dc must be 2Nx2 floating-point matrix" );
    +
    564
    +
    565 if( CV_MAT_TYPE(dpdc->type) == CV_64FC1 )
    +
    566 {
    +
    567 _dpdc.reset(cvCloneMat(dpdc));
    +
    568 }
    +
    569 else
    +
    570 _dpdc.reset(cvCreateMat( 2*count, 2, CV_64FC1 ));
    +
    571 dpdc_p = _dpdc->data.db;
    +
    572 dpdc_step = _dpdc->step/sizeof(dpdc_p[0]);
    +
    573 }
    +
    574
    +
    575 if( dpdk )
    +
    576 {
    +
    577 if( !CV_IS_MAT(dpdk) ||
    +
    578 (CV_MAT_TYPE(dpdk->type) != CV_32FC1 && CV_MAT_TYPE(dpdk->type) != CV_64FC1) ||
    +
    579 dpdk->rows != count*2 || (dpdk->cols != 14 && dpdk->cols != 12 && dpdk->cols != 8 && dpdk->cols != 5 && dpdk->cols != 4 && dpdk->cols != 2) )
    +
    580 CV_Error( CV_StsBadArg, "dp/df must be 2Nx14, 2Nx12, 2Nx8, 2Nx5, 2Nx4 or 2Nx2 floating-point matrix" );
    +
    581
    +
    582 if( !distCoeffs )
    +
    583 CV_Error( CV_StsNullPtr, "distCoeffs is NULL while dpdk is not" );
    +
    584
    +
    585 if( CV_MAT_TYPE(dpdk->type) == CV_64FC1 )
    +
    586 {
    +
    587 _dpdk.reset(cvCloneMat(dpdk));
    +
    588 }
    +
    589 else
    +
    590 _dpdk.reset(cvCreateMat( dpdk->rows, dpdk->cols, CV_64FC1 ));
    +
    591 dpdk_p = _dpdk->data.db;
    +
    592 dpdk_step = _dpdk->step/sizeof(dpdk_p[0]);
    +
    593 }
    +
    594
    +
    595 if( dpdo )
    +
    596 {
    +
    597 if( !CV_IS_MAT( dpdo ) || ( CV_MAT_TYPE( dpdo->type ) != CV_32FC1
    +
    598 && CV_MAT_TYPE( dpdo->type ) != CV_64FC1 )
    +
    599 || dpdo->rows != count * 2 || dpdo->cols != count * 3 )
    +
    600 CV_Error( CV_StsBadArg, "dp/do must be 2Nx3N floating-point matrix" );
    +
    601
    +
    602 if( CV_MAT_TYPE( dpdo->type ) == CV_64FC1 )
    +
    603 {
    +
    604 _dpdo.reset( cvCloneMat( dpdo ) );
    +
    605 }
    +
    606 else
    +
    607 _dpdo.reset( cvCreateMat( 2 * count, 3 * count, CV_64FC1 ) );
    +
    608 cvZero(_dpdo);
    +
    609 dpdo_p = _dpdo->data.db;
    +
    610 dpdo_step = _dpdo->step / sizeof( dpdo_p[0] );
    +
    611 }
    +
    612
    +
    613 calc_derivatives = dpdr || dpdt || dpdf || dpdc || dpdk || dpdo;
    +
    614
    +
    615 for( i = 0; i < count; i++ )
    +
    616 {
    +
    617 double X = M[i].x, Y = M[i].y, Z = M[i].z;
    +
    618 double x = R[0]*X + R[1]*Y + R[2]*Z + t[0];
    +
    619 double y = R[3]*X + R[4]*Y + R[5]*Z + t[1];
    +
    620 double z = R[6]*X + R[7]*Y + R[8]*Z + t[2];
    +
    621 double r2, r4, r6, a1, a2, a3, cdist, icdist2;
    +
    622 double xd, yd, xd0, yd0, invProj;
    +
    623 cv::Vec3d vecTilt;
    +
    624 cv::Vec3d dVecTilt;
    +
    625 cv::Matx22d dMatTilt;
    +
    626 cv::Vec2d dXdYd;
    +
    627
    +
    628 double z0 = z;
    +
    629 z = z ? 1./z : 1;
    +
    630 x *= z; y *= z;
    +
    631
    +
    632 r2 = x*x + y*y;
    +
    633 r4 = r2*r2;
    +
    634 r6 = r4*r2;
    +
    635 a1 = 2*x*y;
    +
    636 a2 = r2 + 2*x*x;
    +
    637 a3 = r2 + 2*y*y;
    +
    638 cdist = 1 + k[0]*r2 + k[1]*r4 + k[4]*r6;
    +
    639 icdist2 = 1./(1 + k[5]*r2 + k[6]*r4 + k[7]*r6);
    +
    640 xd0 = x*cdist*icdist2 + k[2]*a1 + k[3]*a2 + k[8]*r2+k[9]*r4;
    +
    641 yd0 = y*cdist*icdist2 + k[2]*a3 + k[3]*a1 + k[10]*r2+k[11]*r4;
    +
    642
    +
    643 // additional distortion by projecting onto a tilt plane
    +
    644 vecTilt = matTilt*cv::Vec3d(xd0, yd0, 1);
    +
    645 invProj = vecTilt(2) ? 1./vecTilt(2) : 1;
    +
    646 xd = invProj * vecTilt(0);
    +
    647 yd = invProj * vecTilt(1);
    +
    648
    +
    649 m[i].x = xd*fx + cx;
    +
    650 m[i].y = yd*fy + cy;
    +
    651
    +
    652 if( calc_derivatives )
    +
    653 {
    +
    654 if( dpdc_p )
    +
    655 {
    +
    656 dpdc_p[0] = 1; dpdc_p[1] = 0; // dp_xdc_x; dp_xdc_y
    +
    657 dpdc_p[dpdc_step] = 0;
    +
    658 dpdc_p[dpdc_step+1] = 1;
    +
    659 dpdc_p += dpdc_step*2;
    +
    660 }
    +
    661
    +
    662 if( dpdf_p )
    +
    663 {
    +
    664 if( fixedAspectRatio )
    +
    665 {
    +
    666 dpdf_p[0] = 0; dpdf_p[1] = xd*aspectRatio; // dp_xdf_x; dp_xdf_y
    +
    667 dpdf_p[dpdf_step] = 0;
    +
    668 dpdf_p[dpdf_step+1] = yd;
    +
    669 }
    +
    670 else
    +
    671 {
    +
    672 dpdf_p[0] = xd; dpdf_p[1] = 0;
    +
    673 dpdf_p[dpdf_step] = 0;
    +
    674 dpdf_p[dpdf_step+1] = yd;
    +
    675 }
    +
    676 dpdf_p += dpdf_step*2;
    +
    677 }
    +
    678 for (int row = 0; row < 2; ++row)
    +
    679 for (int col = 0; col < 2; ++col)
    +
    680 dMatTilt(row,col) = matTilt(row,col)*vecTilt(2)
    +
    681 - matTilt(2,col)*vecTilt(row);
    +
    682 double invProjSquare = (invProj*invProj);
    +
    683 dMatTilt *= invProjSquare;
    +
    684 if( dpdk_p )
    +
    685 {
    +
    686 dXdYd = dMatTilt*cv::Vec2d(x*icdist2*r2, y*icdist2*r2);
    +
    687 dpdk_p[0] = fx*dXdYd(0);
    +
    688 dpdk_p[dpdk_step] = fy*dXdYd(1);
    +
    689 dXdYd = dMatTilt*cv::Vec2d(x*icdist2*r4, y*icdist2*r4);
    +
    690 dpdk_p[1] = fx*dXdYd(0);
    +
    691 dpdk_p[dpdk_step+1] = fy*dXdYd(1);
    +
    692 if( _dpdk->cols > 2 )
    +
    693 {
    +
    694 dXdYd = dMatTilt*cv::Vec2d(a1, a3);
    +
    695 dpdk_p[2] = fx*dXdYd(0);
    +
    696 dpdk_p[dpdk_step+2] = fy*dXdYd(1);
    +
    697 dXdYd = dMatTilt*cv::Vec2d(a2, a1);
    +
    698 dpdk_p[3] = fx*dXdYd(0);
    +
    699 dpdk_p[dpdk_step+3] = fy*dXdYd(1);
    +
    700 if( _dpdk->cols > 4 )
    +
    701 {
    +
    702 dXdYd = dMatTilt*cv::Vec2d(x*icdist2*r6, y*icdist2*r6);
    +
    703 dpdk_p[4] = fx*dXdYd(0);
    +
    704 dpdk_p[dpdk_step+4] = fy*dXdYd(1);
    +
    705
    +
    706 if( _dpdk->cols > 5 )
    +
    707 {
    +
    708 dXdYd = dMatTilt*cv::Vec2d(
    +
    709 x*cdist*(-icdist2)*icdist2*r2, y*cdist*(-icdist2)*icdist2*r2);
    +
    710 dpdk_p[5] = fx*dXdYd(0);
    +
    711 dpdk_p[dpdk_step+5] = fy*dXdYd(1);
    +
    712 dXdYd = dMatTilt*cv::Vec2d(
    +
    713 x*cdist*(-icdist2)*icdist2*r4, y*cdist*(-icdist2)*icdist2*r4);
    +
    714 dpdk_p[6] = fx*dXdYd(0);
    +
    715 dpdk_p[dpdk_step+6] = fy*dXdYd(1);
    +
    716 dXdYd = dMatTilt*cv::Vec2d(
    +
    717 x*cdist*(-icdist2)*icdist2*r6, y*cdist*(-icdist2)*icdist2*r6);
    +
    718 dpdk_p[7] = fx*dXdYd(0);
    +
    719 dpdk_p[dpdk_step+7] = fy*dXdYd(1);
    +
    720 if( _dpdk->cols > 8 )
    +
    721 {
    +
    722 dXdYd = dMatTilt*cv::Vec2d(r2, 0);
    +
    723 dpdk_p[8] = fx*dXdYd(0); //s1
    +
    724 dpdk_p[dpdk_step+8] = fy*dXdYd(1); //s1
    +
    725 dXdYd = dMatTilt*cv::Vec2d(r4, 0);
    +
    726 dpdk_p[9] = fx*dXdYd(0); //s2
    +
    727 dpdk_p[dpdk_step+9] = fy*dXdYd(1); //s2
    +
    728 dXdYd = dMatTilt*cv::Vec2d(0, r2);
    +
    729 dpdk_p[10] = fx*dXdYd(0);//s3
    +
    730 dpdk_p[dpdk_step+10] = fy*dXdYd(1); //s3
    +
    731 dXdYd = dMatTilt*cv::Vec2d(0, r4);
    +
    732 dpdk_p[11] = fx*dXdYd(0);//s4
    +
    733 dpdk_p[dpdk_step+11] = fy*dXdYd(1); //s4
    +
    734 if( _dpdk->cols > 12 )
    +
    735 {
    +
    736 dVecTilt = dMatTiltdTauX * cv::Vec3d(xd0, yd0, 1);
    +
    737 dpdk_p[12] = fx * invProjSquare * (
    +
    738 dVecTilt(0) * vecTilt(2) - dVecTilt(2) * vecTilt(0));
    +
    739 dpdk_p[dpdk_step+12] = fy*invProjSquare * (
    +
    740 dVecTilt(1) * vecTilt(2) - dVecTilt(2) * vecTilt(1));
    +
    741 dVecTilt = dMatTiltdTauY * cv::Vec3d(xd0, yd0, 1);
    +
    742 dpdk_p[13] = fx * invProjSquare * (
    +
    743 dVecTilt(0) * vecTilt(2) - dVecTilt(2) * vecTilt(0));
    +
    744 dpdk_p[dpdk_step+13] = fy * invProjSquare * (
    +
    745 dVecTilt(1) * vecTilt(2) - dVecTilt(2) * vecTilt(1));
    +
    746 }
    +
    747 }
    +
    748 }
    +
    749 }
    +
    750 }
    +
    751 dpdk_p += dpdk_step*2;
    +
    752 }
    +
    753
    +
    754 if( dpdt_p )
    +
    755 {
    +
    756 double dxdt[] = { z, 0, -x*z }, dydt[] = { 0, z, -y*z };
    +
    757 for( j = 0; j < 3; j++ )
    +
    758 {
    +
    759 double dr2dt = 2*x*dxdt[j] + 2*y*dydt[j];
    +
    760 double dcdist_dt = k[0]*dr2dt + 2*k[1]*r2*dr2dt + 3*k[4]*r4*dr2dt;
    +
    761 double dicdist2_dt = -icdist2*icdist2*(k[5]*dr2dt + 2*k[6]*r2*dr2dt + 3*k[7]*r4*dr2dt);
    +
    762 double da1dt = 2*(x*dydt[j] + y*dxdt[j]);
    +
    763 double dmxdt = (dxdt[j]*cdist*icdist2 + x*dcdist_dt*icdist2 + x*cdist*dicdist2_dt +
    +
    764 k[2]*da1dt + k[3]*(dr2dt + 4*x*dxdt[j]) + k[8]*dr2dt + 2*r2*k[9]*dr2dt);
    +
    765 double dmydt = (dydt[j]*cdist*icdist2 + y*dcdist_dt*icdist2 + y*cdist*dicdist2_dt +
    +
    766 k[2]*(dr2dt + 4*y*dydt[j]) + k[3]*da1dt + k[10]*dr2dt + 2*r2*k[11]*dr2dt);
    +
    767 dXdYd = dMatTilt*cv::Vec2d(dmxdt, dmydt);
    +
    768 dpdt_p[j] = fx*dXdYd(0);
    +
    769 dpdt_p[dpdt_step+j] = fy*dXdYd(1);
    +
    770 }
    +
    771 dpdt_p += dpdt_step*2;
    +
    772 }
    +
    773
    +
    774 if( dpdr_p )
    +
    775 {
    +
    776 double dx0dr[] =
    +
    777 {
    +
    778 X*dRdr[0] + Y*dRdr[1] + Z*dRdr[2],
    +
    779 X*dRdr[9] + Y*dRdr[10] + Z*dRdr[11],
    +
    780 X*dRdr[18] + Y*dRdr[19] + Z*dRdr[20]
    +
    781 };
    +
    782 double dy0dr[] =
    +
    783 {
    +
    784 X*dRdr[3] + Y*dRdr[4] + Z*dRdr[5],
    +
    785 X*dRdr[12] + Y*dRdr[13] + Z*dRdr[14],
    +
    786 X*dRdr[21] + Y*dRdr[22] + Z*dRdr[23]
    +
    787 };
    +
    788 double dz0dr[] =
    +
    789 {
    +
    790 X*dRdr[6] + Y*dRdr[7] + Z*dRdr[8],
    +
    791 X*dRdr[15] + Y*dRdr[16] + Z*dRdr[17],
    +
    792 X*dRdr[24] + Y*dRdr[25] + Z*dRdr[26]
    +
    793 };
    +
    794 for( j = 0; j < 3; j++ )
    +
    795 {
    +
    796 double dxdr = z*(dx0dr[j] - x*dz0dr[j]);
    +
    797 double dydr = z*(dy0dr[j] - y*dz0dr[j]);
    +
    798 double dr2dr = 2*x*dxdr + 2*y*dydr;
    +
    799 double dcdist_dr = (k[0] + 2*k[1]*r2 + 3*k[4]*r4)*dr2dr;
    +
    800 double dicdist2_dr = -icdist2*icdist2*(k[5] + 2*k[6]*r2 + 3*k[7]*r4)*dr2dr;
    +
    801 double da1dr = 2*(x*dydr + y*dxdr);
    +
    802 double dmxdr = (dxdr*cdist*icdist2 + x*dcdist_dr*icdist2 + x*cdist*dicdist2_dr +
    +
    803 k[2]*da1dr + k[3]*(dr2dr + 4*x*dxdr) + (k[8] + 2*r2*k[9])*dr2dr);
    +
    804 double dmydr = (dydr*cdist*icdist2 + y*dcdist_dr*icdist2 + y*cdist*dicdist2_dr +
    +
    805 k[2]*(dr2dr + 4*y*dydr) + k[3]*da1dr + (k[10] + 2*r2*k[11])*dr2dr);
    +
    806 dXdYd = dMatTilt*cv::Vec2d(dmxdr, dmydr);
    +
    807 dpdr_p[j] = fx*dXdYd(0);
    +
    808 dpdr_p[dpdr_step+j] = fy*dXdYd(1);
    +
    809 }
    +
    810 dpdr_p += dpdr_step*2;
    +
    811 }
    +
    812
    +
    813 if( dpdo_p )
    +
    814 {
    +
    815 double dxdo[] = { z * ( R[0] - x * z * z0 * R[6] ),
    +
    816 z * ( R[1] - x * z * z0 * R[7] ),
    +
    817 z * ( R[2] - x * z * z0 * R[8] ) };
    +
    818 double dydo[] = { z * ( R[3] - y * z * z0 * R[6] ),
    +
    819 z * ( R[4] - y * z * z0 * R[7] ),
    +
    820 z * ( R[5] - y * z * z0 * R[8] ) };
    +
    821 for( j = 0; j < 3; j++ )
    +
    822 {
    +
    823 double dr2do = 2 * x * dxdo[j] + 2 * y * dydo[j];
    +
    824 double dr4do = 2 * r2 * dr2do;
    +
    825 double dr6do = 3 * r4 * dr2do;
    +
    826 double da1do = 2 * y * dxdo[j] + 2 * x * dydo[j];
    +
    827 double da2do = dr2do + 4 * x * dxdo[j];
    +
    828 double da3do = dr2do + 4 * y * dydo[j];
    +
    829 double dcdist_do
    +
    830 = k[0] * dr2do + k[1] * dr4do + k[4] * dr6do;
    +
    831 double dicdist2_do = -icdist2 * icdist2
    +
    832 * ( k[5] * dr2do + k[6] * dr4do + k[7] * dr6do );
    +
    833 double dxd0_do = cdist * icdist2 * dxdo[j]
    +
    834 + x * icdist2 * dcdist_do + x * cdist * dicdist2_do
    +
    835 + k[2] * da1do + k[3] * da2do + k[8] * dr2do
    +
    836 + k[9] * dr4do;
    +
    837 double dyd0_do = cdist * icdist2 * dydo[j]
    +
    838 + y * icdist2 * dcdist_do + y * cdist * dicdist2_do
    +
    839 + k[2] * da3do + k[3] * da1do + k[10] * dr2do
    +
    840 + k[11] * dr4do;
    +
    841 dXdYd = dMatTilt * cv::Vec2d( dxd0_do, dyd0_do );
    +
    842 dpdo_p[i * 3 + j] = fx * dXdYd( 0 );
    +
    843 dpdo_p[dpdo_step + i * 3 + j] = fy * dXdYd( 1 );
    +
    844 }
    +
    845 dpdo_p += dpdo_step * 2;
    +
    846 }
    +
    847 }
    +
    848 }
    +
    849
    +
    850 if( _m != imagePoints )
    +
    851 cvConvert( _m, imagePoints );
    +
    852
    +
    853 if( _dpdr != dpdr )
    +
    854 cvConvert( _dpdr, dpdr );
    +
    855
    +
    856 if( _dpdt != dpdt )
    +
    857 cvConvert( _dpdt, dpdt );
    +
    858
    +
    859 if( _dpdf != dpdf )
    +
    860 cvConvert( _dpdf, dpdf );
    +
    861
    +
    862 if( _dpdc != dpdc )
    +
    863 cvConvert( _dpdc, dpdc );
    +
    864
    +
    865 if( _dpdk != dpdk )
    +
    866 cvConvert( _dpdk, dpdk );
    +
    867
    +
    868 if( _dpdo != dpdo )
    +
    869 cvConvert( _dpdo, dpdo );
    +
    870}
    +
    871
    +
    872void cvProjectPoints2( const CvMat* objectPoints,
    +
    873 const CvMat* r_vec,
    +
    874 const CvMat* t_vec,
    +
    875 const CvMat* A,
    +
    876 const CvMat* distCoeffs,
    +
    877 CvMat* imagePoints, CvMat* dpdr CV_DEFAULT(NULL),
    +
    878 CvMat* dpdt CV_DEFAULT(NULL), CvMat* dpdf CV_DEFAULT(NULL),
    +
    879 CvMat* dpdc CV_DEFAULT(NULL), CvMat* dpdk CV_DEFAULT(NULL),
    +
    880 double aspectRatio CV_DEFAULT(0))
    +
    881{
    +
    882 cvProjectPoints2Internal( objectPoints, r_vec, t_vec, A, distCoeffs, imagePoints, dpdr, dpdt,
    +
    883 dpdf, dpdc, dpdk, NULL, aspectRatio );
    +
    884}
    +
    885
    +
    886void cvConvertPointsHomogeneous( const CvMat* _src, CvMat* _dst )
    +
    887{
    +
    888 cv::Mat src = cv::cvarrToMat(_src), dst = cv::cvarrToMat(_dst);
    +
    889 const cv::Mat dst0 = dst;
    +
    890
    +
    891 int d0 = src.channels() > 1 ? src.channels() : MIN(src.cols, src.rows);
    +
    892
    +
    893 if( src.channels() == 1 && src.cols > d0 )
    +
    894 cv::transpose(src, src);
    +
    895
    +
    896 int d1 = dst.channels() > 1 ? dst.channels() : MIN(dst.cols, dst.rows);
    +
    897
    +
    898 if( d0 == d1 )
    +
    899 src.copyTo(dst);
    +
    900 else if( d0 < d1 )
    +
    901 cv::convertPointsToHomogeneous(src, dst);
    +
    902 else
    +
    903 cv::convertPointsFromHomogeneous(src, dst);
    +
    904
    +
    905 bool tflag = dst0.channels() == 1 && dst0.cols > d1;
    +
    906 dst = dst.reshape(dst0.channels(), (tflag ? dst0.cols : dst0.rows));
    +
    907
    +
    908 if( tflag )
    +
    909 {
    +
    910 CV_Assert( dst.rows == dst0.cols && dst.cols == dst0.rows );
    +
    911 if( dst0.type() == dst.type() )
    +
    912 transpose( dst, dst0 );
    +
    913 else
    +
    914 {
    +
    915 transpose( dst, dst );
    +
    916 dst.convertTo( dst0, dst0.type() );
    +
    917 }
    +
    918 }
    +
    919 else
    +
    920 {
    +
    921 CV_Assert( dst.size() == dst0.size() );
    +
    922 if( dst.data != dst0.data )
    +
    923 dst.convertTo(dst0, dst0.type());
    +
    924 }
    +
    925}
    +
    926
    +
    927#endif // OpenCV4
    +
    928
    +
    929#endif // OpenCV3
    +
    930
    +
    931namespace rtabmap
    +
    932{
    +
    933
    +
    934void
    +
    935icvGetRectanglesFisheye( const CvMat* cameraMatrix, const CvMat* distCoeffs,
    +
    936 const CvMat* R, const CvMat* newCameraMatrix, CvSize imgSize,
    +
    937 cv::Rect_<float>& inner, cv::Rect_<float>& outer )
    +
    938{
    +
    939 const int N = 9;
    +
    940 int x, y, k;
    +
    941 cv::Mat _pts(1, N*N, CV_32FC2);
    +
    942 CvPoint2D32f* pts = (CvPoint2D32f*)(_pts.data);
    +
    943
    +
    944 for( y = k = 0; y < N; y++ )
    +
    945 for( x = 0; x < N; x++ )
    +
    946 pts[k++] = cvPoint2D32f((float)x*imgSize.width/(N-1),
    +
    947 (float)y*imgSize.height/(N-1));
    +
    948
    +
    949 cv::Mat cameraMatrixM(cameraMatrix->rows, cameraMatrix->cols, cameraMatrix->type, cameraMatrix->data.ptr);
    +
    950 cv::Mat distCoeffsM(distCoeffs->rows, distCoeffs->cols, distCoeffs->type, distCoeffs->data.ptr);
    +
    951 cv::Mat RM(R->rows, R->cols, R->type, R->data.ptr);
    +
    952 cv::Mat newCameraMatrixM(newCameraMatrix->rows, newCameraMatrix->cols, newCameraMatrix->type, newCameraMatrix->data.ptr);
    +
    953 cv::fisheye::undistortPoints(_pts, _pts, cameraMatrixM, distCoeffsM, RM, newCameraMatrixM);
    +
    954 float iX0=-FLT_MAX, iX1=FLT_MAX, iY0=-FLT_MAX, iY1=FLT_MAX;
    +
    955 float oX0=FLT_MAX, oX1=-FLT_MAX, oY0=FLT_MAX, oY1=-FLT_MAX;
    +
    956 // find the inscribed rectangle.
    +
    957 // the code will likely not work with extreme rotation matrices (R) (>45%)
    +
    958 for( y = k = 0; y < N; y++ )
    +
    959 for( x = 0; x < N; x++ )
    +
    960 {
    +
    961 CvPoint2D32f p = pts[k++];
    +
    962 oX0 = MIN(oX0, p.x);
    +
    963 oX1 = MAX(oX1, p.x);
    +
    964 oY0 = MIN(oY0, p.y);
    +
    965 oY1 = MAX(oY1, p.y);
    +
    966
    +
    967 if( x == 0 )
    +
    968 iX0 = MAX(iX0, p.x);
    +
    969 if( x == N-1 )
    +
    970 iX1 = MIN(iX1, p.x);
    +
    971 if( y == 0 )
    +
    972 iY0 = MAX(iY0, p.y);
    +
    973 if( y == N-1 )
    +
    974 iY1 = MIN(iY1, p.y);
    +
    975 }
    +
    976 inner = cv::Rect_<float>(iX0, iY0, iX1-iX0, iY1-iY0);
    +
    977 outer = cv::Rect_<float>(oX0, oY0, oX1-oX0, oY1-oY0);
    +
    978}
    +
    979
    +
    980void cvStereoRectifyFisheye( const CvMat* _cameraMatrix1, const CvMat* _cameraMatrix2,
    +
    981 const CvMat* _distCoeffs1, const CvMat* _distCoeffs2,
    +
    982 CvSize imageSize, const CvMat* matR, const CvMat* matT,
    +
    983 CvMat* _R1, CvMat* _R2, CvMat* _P1, CvMat* _P2,
    +
    984 CvMat* matQ, int flags, double alpha, CvSize newImgSize )
    +
    985{
    +
    986 double _om[3], _t[3] = {0}, _uu[3]={0,0,0}, _r_r[3][3], _pp[3][4];
    +
    987 double _ww[3], _wr[3][3], _z[3] = {0,0,0}, _ri[3][3], _w3[3];
    +
    988 cv::Rect_<float> inner1, inner2, outer1, outer2;
    +
    989
    +
    990 CvMat om = cvMat(3, 1, CV_64F, _om);
    +
    991 CvMat t = cvMat(3, 1, CV_64F, _t);
    +
    992 CvMat uu = cvMat(3, 1, CV_64F, _uu);
    +
    993 CvMat r_r = cvMat(3, 3, CV_64F, _r_r);
    +
    994 CvMat pp = cvMat(3, 4, CV_64F, _pp);
    +
    995 CvMat ww = cvMat(3, 1, CV_64F, _ww); // temps
    +
    996 CvMat w3 = cvMat(3, 1, CV_64F, _w3); // temps
    +
    997 CvMat wR = cvMat(3, 3, CV_64F, _wr);
    +
    998 CvMat Z = cvMat(3, 1, CV_64F, _z);
    +
    999 CvMat Ri = cvMat(3, 3, CV_64F, _ri);
    +
    1000 double nx = imageSize.width, ny = imageSize.height;
    +
    1001 int i, k;
    +
    1002 double nt, nw;
    +
    1003
    +
    1004 if( matR->rows == 3 && matR->cols == 3 )
    +
    1005 cvRodrigues2(matR, &om); // get vector rotation
    +
    1006 else
    +
    1007 cvConvert(matR, &om); // it's already a rotation vector
    +
    1008 cvConvertScale(&om, &om, -0.5); // get average rotation
    +
    1009 cvRodrigues2(&om, &r_r); // rotate cameras to same orientation by averaging
    +
    1010
    +
    1011 cvMatMul(&r_r, matT, &t);
    +
    1012 int idx = fabs(_t[0]) > fabs(_t[1]) ? 0 : 1;
    +
    1013 // if idx == 0
    +
    1014 // e1 = T / ||T||
    +
    1015 // e2 = e1 x [0,0,1]
    +
    1016
    +
    1017 // if idx == 1
    +
    1018 // e2 = T / ||T||
    +
    1019 // e1 = e2 x [0,0,1]
    +
    1020
    +
    1021 // e3 = e1 x e2
    +
    1022 _uu[2] = 1;
    +
    1023 cvCrossProduct(&uu, &t, &ww);
    +
    1024 nt = cvNorm(&t, 0, CV_L2);
    +
    1025 CV_Assert(fabs(nt) > 0);
    +
    1026 nw = cvNorm(&ww, 0, CV_L2);
    +
    1027 CV_Assert(fabs(nw) > 0);
    +
    1028 cvConvertScale(&ww, &ww, 1 / nw);
    +
    1029 cvCrossProduct(&t, &ww, &w3);
    +
    1030 nw = cvNorm(&w3, 0, CV_L2);
    +
    1031 CV_Assert(fabs(nw) > 0);
    +
    1032 cvConvertScale(&w3, &w3, 1 / nw);
    +
    1033 _uu[2] = 0;
    +
    1034 for (i = 0; i < 3; ++i)
    +
    1035 {
    +
    1036 _wr[idx][i] = -_t[i] / nt;
    +
    1037 _wr[idx ^ 1][i] = -_ww[i];
    +
    1038 _wr[2][i] = _w3[i] * (1 - 2 * idx); // if idx == 1 -> opposite direction
    +
    1039 }
    +
    1040 // apply to both views
    +
    1041 cvGEMM(&wR, &r_r, 1, 0, 0, &Ri, CV_GEMM_B_T);
    +
    1042 cvConvert( &Ri, _R1 );
    +
    1043 cvGEMM(&wR, &r_r, 1, 0, 0, &Ri, 0);
    +
    1044 cvConvert( &Ri, _R2 );
    +
    1045 cvMatMul(&Ri, matT, &t);
    +
    1046 // calculate projection/camera matrices
    +
    1047 // these contain the relevant rectified image internal params (fx, fy=fx, cx, cy)
    +
    1048 double fc_new = DBL_MAX;
    +
    1049 CvPoint2D64f cc_new[2] = {};
    +
    1050
    +
    1051 newImgSize = newImgSize.width * newImgSize.height != 0 ? newImgSize : imageSize;
    +
    1052 const double ratio_x = (double)newImgSize.width / imageSize.width / 2;
    +
    1053 const double ratio_y = (double)newImgSize.height / imageSize.height / 2;
    +
    1054 const double ratio = idx == 1 ? ratio_x : ratio_y;
    +
    1055 fc_new = (cvmGet(_cameraMatrix1, idx ^ 1, idx ^ 1) + cvmGet(_cameraMatrix2, idx ^ 1, idx ^ 1)) * ratio;
    +
    1056 for( k = 0; k < 2; k++ )
    +
    1057 {
    +
    1058 const CvMat* A = k == 0 ? _cameraMatrix1 : _cameraMatrix2;
    +
    1059 const CvMat* Dk = k == 0 ? _distCoeffs1 : _distCoeffs2;
    +
    1060 CvPoint2D32f _pts[4] = {};
    +
    1061 CvPoint3D32f _pts_3[4] = {};
    +
    1062 CvMat pts = cvMat(1, 4, CV_32FC2, _pts);
    +
    1063 CvMat pts_3 = cvMat(1, 4, CV_32FC3, _pts_3);
    +
    1064
    +
    1065 for( i = 0; i < 4; i++ )
    +
    1066 {
    +
    1067 int j = (i<2) ? 0 : 1;
    +
    1068 _pts[i].x = (float)((i % 2)*(nx));
    +
    1069 _pts[i].y = (float)(j*(ny));
    +
    1070 }
    +
    1071 cv::Mat ptsM(pts.rows, pts.cols, pts.type, pts.data.ptr);
    +
    1072 cv::Mat A_m(A->rows, A->cols, A->type, A->data.ptr);
    +
    1073 cv::Mat Dk_m(Dk->rows, Dk->cols, Dk->type, Dk->data.ptr);
    +
    1074 cv::fisheye::undistortPoints( ptsM, ptsM, A_m, Dk_m, cv::Mat(), cv::Mat() );
    +
    1075 cvConvertPointsHomogeneous( &pts, &pts_3 );
    +
    1076
    +
    1077 //Change camera matrix to have cc=[0,0] and fc = fc_new
    +
    1078 double _a_tmp[3][3];
    +
    1079 CvMat A_tmp = cvMat(3, 3, CV_64F, _a_tmp);
    +
    1080 _a_tmp[0][0]=fc_new;
    +
    1081 _a_tmp[1][1]=fc_new;
    +
    1082 _a_tmp[0][2]=0.0;
    +
    1083 _a_tmp[1][2]=0.0;
    +
    1084
    +
    1085 cvProjectPoints2( &pts_3, k == 0 ? _R1 : _R2, &Z, &A_tmp, 0, &pts );
    +
    1086 CvScalar avg = cvAvg(&pts);
    +
    1087
    +
    1088 cc_new[k].x = (nx)/2 - avg.val[0];
    +
    1089 cc_new[k].y = (ny)/2 - avg.val[1];
    +
    1090 }
    +
    1091
    +
    1092 // vertical focal length must be the same for both images to keep the epipolar constraint
    +
    1093 // (for horizontal epipolar lines -- TBD: check for vertical epipolar lines)
    +
    1094 // use fy for fx also, for simplicity
    +
    1095
    +
    1096 // For simplicity, set the principal points for both cameras to be the average
    +
    1097 // of the two principal points (either one of or both x- and y- coordinates)
    +
    1098 if( flags & cv::CALIB_ZERO_DISPARITY )
    +
    1099 {
    +
    1100 cc_new[0].x = cc_new[1].x = (cc_new[0].x + cc_new[1].x)*0.5;
    +
    1101 cc_new[0].y = cc_new[1].y = (cc_new[0].y + cc_new[1].y)*0.5;
    +
    1102 }
    +
    1103 else if( idx == 0 ) // horizontal stereo
    +
    1104 cc_new[0].y = cc_new[1].y = (cc_new[0].y + cc_new[1].y)*0.5;
    +
    1105 else // vertical stereo
    +
    1106 cc_new[0].x = cc_new[1].x = (cc_new[0].x + cc_new[1].x)*0.5;
    +
    1107
    +
    1108 cvZero( &pp );
    +
    1109 _pp[0][0] = _pp[1][1] = fc_new;
    +
    1110 _pp[0][2] = cc_new[0].x;
    +
    1111 _pp[1][2] = cc_new[0].y;
    +
    1112 _pp[2][2] = 1;
    +
    1113 cvConvert(&pp, _P1);
    +
    1114
    +
    1115 _pp[0][2] = cc_new[1].x;
    +
    1116 _pp[1][2] = cc_new[1].y;
    +
    1117 _pp[idx][3] = _t[idx]*fc_new; // baseline * focal length
    +
    1118 cvConvert(&pp, _P2);
    +
    1119
    +
    1120 alpha = MIN(alpha, 1.);
    +
    1121
    +
    1122 icvGetRectanglesFisheye( _cameraMatrix1, _distCoeffs1, _R1, _P1, imageSize, inner1, outer1 );
    +
    1123 icvGetRectanglesFisheye( _cameraMatrix2, _distCoeffs2, _R2, _P2, imageSize, inner2, outer2 );
    +
    1124
    +
    1125 {
    +
    1126 newImgSize = newImgSize.width*newImgSize.height != 0 ? newImgSize : imageSize;
    +
    1127 double cx1_0 = cc_new[0].x;
    +
    1128 double cy1_0 = cc_new[0].y;
    +
    1129 double cx2_0 = cc_new[1].x;
    +
    1130 double cy2_0 = cc_new[1].y;
    +
    1131 double cx1 = newImgSize.width*cx1_0/imageSize.width;
    +
    1132 double cy1 = newImgSize.height*cy1_0/imageSize.height;
    +
    1133 double cx2 = newImgSize.width*cx2_0/imageSize.width;
    +
    1134 double cy2 = newImgSize.height*cy2_0/imageSize.height;
    +
    1135 double s = 1.;
    +
    1136
    +
    1137 if( alpha >= 0 )
    +
    1138 {
    +
    1139 double s0 = std::max(std::max(std::max((double)cx1/(cx1_0 - inner1.x), (double)cy1/(cy1_0 - inner1.y)),
    +
    1140 (double)(newImgSize.width - cx1)/(inner1.x + inner1.width - cx1_0)),
    +
    1141 (double)(newImgSize.height - cy1)/(inner1.y + inner1.height - cy1_0));
    +
    1142 s0 = std::max(std::max(std::max(std::max((double)cx2/(cx2_0 - inner2.x), (double)cy2/(cy2_0 - inner2.y)),
    +
    1143 (double)(newImgSize.width - cx2)/(inner2.x + inner2.width - cx2_0)),
    +
    1144 (double)(newImgSize.height - cy2)/(inner2.y + inner2.height - cy2_0)),
    +
    1145 s0);
    +
    1146
    +
    1147 double s1 = std::min(std::min(std::min((double)cx1/(cx1_0 - outer1.x), (double)cy1/(cy1_0 - outer1.y)),
    +
    1148 (double)(newImgSize.width - cx1)/(outer1.x + outer1.width - cx1_0)),
    +
    1149 (double)(newImgSize.height - cy1)/(outer1.y + outer1.height - cy1_0));
    +
    1150 s1 = std::min(std::min(std::min(std::min((double)cx2/(cx2_0 - outer2.x), (double)cy2/(cy2_0 - outer2.y)),
    +
    1151 (double)(newImgSize.width - cx2)/(outer2.x + outer2.width - cx2_0)),
    +
    1152 (double)(newImgSize.height - cy2)/(outer2.y + outer2.height - cy2_0)),
    +
    1153 s1);
    +
    1154
    +
    1155 s = s0*(1 - alpha) + s1*alpha;
    +
    1156 }
    +
    1157
    +
    1158 fc_new *= s;
    +
    1159 cc_new[0] = cvPoint2D64f(cx1, cy1);
    +
    1160 cc_new[1] = cvPoint2D64f(cx2, cy2);
    +
    1161
    +
    1162 cvmSet(_P1, 0, 0, fc_new);
    +
    1163 cvmSet(_P1, 1, 1, fc_new);
    +
    1164 cvmSet(_P1, 0, 2, cx1);
    +
    1165 cvmSet(_P1, 1, 2, cy1);
    +
    1166
    +
    1167 cvmSet(_P2, 0, 0, fc_new);
    +
    1168 cvmSet(_P2, 1, 1, fc_new);
    +
    1169 cvmSet(_P2, 0, 2, cx2);
    +
    1170 cvmSet(_P2, 1, 2, cy2);
    +
    1171 cvmSet(_P2, idx, 3, s*cvmGet(_P2, idx, 3));
    +
    1172
    +
    1173 }
    +
    1174
    +
    1175 if( matQ )
    +
    1176 {
    +
    1177 double q[] =
    +
    1178 {
    +
    1179 1, 0, 0, -cc_new[0].x,
    +
    1180 0, 1, 0, -cc_new[0].y,
    +
    1181 0, 0, 0, fc_new,
    +
    1182 0, 0, -1./_t[idx],
    +
    1183 (idx == 0 ? cc_new[0].x - cc_new[1].x : cc_new[0].y - cc_new[1].y)/_t[idx]
    +
    1184 };
    +
    1185 CvMat Q = cvMat(4, 4, CV_64F, q);
    +
    1186 cvConvert( &Q, matQ );
    +
    1187 }
    +
    1188}
    +
    1189
    +
    1190void stereoRectifyFisheye( cv::InputArray _cameraMatrix1, cv::InputArray _distCoeffs1,
    +
    1191 cv::InputArray _cameraMatrix2, cv::InputArray _distCoeffs2,
    +
    1192 cv::Size imageSize, cv::InputArray _Rmat, cv::InputArray _Tmat,
    +
    1193 cv::OutputArray _Rmat1, cv::OutputArray _Rmat2,
    +
    1194 cv::OutputArray _Pmat1, cv::OutputArray _Pmat2,
    +
    1195 cv::OutputArray _Qmat, int flags,
    +
    1196 double alpha, cv::Size newImageSize)
    +
    1197{
    +
    1198 cv::Mat cameraMatrix1 = _cameraMatrix1.getMat(), cameraMatrix2 = _cameraMatrix2.getMat();
    +
    1199 cv::Mat distCoeffs1 = _distCoeffs1.getMat(), distCoeffs2 = _distCoeffs2.getMat();
    +
    1200 cv::Mat Rmat = _Rmat.getMat(), Tmat = _Tmat.getMat();
    +
    1201
    +
    1202#if CV_MAJOR_VERSION > 3 || (CV_MAJOR_VERSION >= 3 && (CV_MINOR_VERSION>4 || (CV_MINOR_VERSION>=4 && CV_SUBMINOR_VERSION>=4)))
    +
    1203 CvMat c_cameraMatrix1 = cvMat(cameraMatrix1);
    +
    1204 CvMat c_cameraMatrix2 = cvMat(cameraMatrix2);
    +
    1205 CvMat c_distCoeffs1 = cvMat(distCoeffs1);
    +
    1206 CvMat c_distCoeffs2 = cvMat(distCoeffs2);
    +
    1207 CvMat c_R = cvMat(Rmat), c_T = cvMat(Tmat);
    +
    1208#else
    +
    1209 CvMat c_cameraMatrix1 = CvMat(cameraMatrix1);
    +
    1210 CvMat c_cameraMatrix2 = CvMat(cameraMatrix2);
    +
    1211 CvMat c_distCoeffs1 = CvMat(distCoeffs1);
    +
    1212 CvMat c_distCoeffs2 = CvMat(distCoeffs2);
    +
    1213 CvMat c_R = CvMat(Rmat), c_T = CvMat(Tmat);
    +
    1214#endif
    +
    1215
    +
    1216 int rtype = CV_64F;
    +
    1217 _Rmat1.create(3, 3, rtype);
    +
    1218 _Rmat2.create(3, 3, rtype);
    +
    1219 _Pmat1.create(3, 4, rtype);
    +
    1220 _Pmat2.create(3, 4, rtype);
    +
    1221 cv::Mat R1 = _Rmat1.getMat(), R2 = _Rmat2.getMat(), P1 = _Pmat1.getMat(), P2 = _Pmat2.getMat(), Q;
    +
    1222#if CV_MAJOR_VERSION > 3 || (CV_MAJOR_VERSION >= 3 && (CV_MINOR_VERSION>4 || (CV_MINOR_VERSION>=4 && CV_SUBMINOR_VERSION>=4)))
    +
    1223 CvMat c_R1 = cvMat(R1), c_R2 = cvMat(R2), c_P1 = cvMat(P1), c_P2 = cvMat(P2);
    +
    1224#else
    +
    1225 CvMat c_R1 = CvMat(R1), c_R2 = CvMat(R2), c_P1 = CvMat(P1), c_P2 = CvMat(P2);
    +
    1226#endif
    +
    1227 CvMat c_Q, *p_Q = 0;
    +
    1228
    +
    1229 if( _Qmat.needed() )
    +
    1230 {
    +
    1231 _Qmat.create(4, 4, rtype);
    +
    1232#if CV_MAJOR_VERSION > 3 || (CV_MAJOR_VERSION >= 3 && (CV_MINOR_VERSION>4 || (CV_MINOR_VERSION>=4 && CV_SUBMINOR_VERSION>=4)))
    +
    1233 p_Q = &(c_Q = cvMat(Q = _Qmat.getMat()));
    +
    1234#else
    +
    1235 p_Q = &(c_Q = CvMat(Q = _Qmat.getMat()));
    +
    1236#endif
    +
    1237 }
    +
    1238
    +
    1239 CvMat *p_distCoeffs1 = distCoeffs1.empty() ? NULL : &c_distCoeffs1;
    +
    1240 CvMat *p_distCoeffs2 = distCoeffs2.empty() ? NULL : &c_distCoeffs2;
    +
    1241 cvStereoRectifyFisheye( &c_cameraMatrix1, &c_cameraMatrix2, p_distCoeffs1, p_distCoeffs2,
    +
    1242#if CV_MAJOR_VERSION > 3 || (CV_MAJOR_VERSION >= 3 && (CV_MINOR_VERSION>4 || (CV_MINOR_VERSION>=4 && CV_SUBMINOR_VERSION>=4)))
    +
    1243 cvSize(imageSize), &c_R, &c_T, &c_R1, &c_R2, &c_P1, &c_P2, p_Q, flags, alpha,
    +
    1244 cvSize(newImageSize));
    +
    1245#else
    +
    1246 CvSize(imageSize), &c_R, &c_T, &c_R1, &c_R2, &c_P1, &c_P2, p_Q, flags, alpha,
    +
    1247 CvSize(newImageSize));
    +
    1248#endif
    +
    1249}
    +
    1250
    +
    1251}
    +
    1252
    +
    1253
    +
    1254#endif /* CORELIB_SRC_OPENCV_STEREORECTIFYFISHEYE_H_ */
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIRT-members.html b/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIRT-members.html new file mode 100644 index 00000000..88b9cbd5 --- /dev/null +++ b/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIRT-members.html @@ -0,0 +1,96 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    rtabmap::PointXYZIRT Member List
    +
    +
    + +

    This is the complete list of members for rtabmap::PointXYZIRT, including all inherited members.

    + + + + + +
    intensity (defined in rtabmap::PointXYZIRT)rtabmap::PointXYZIRT
    PCL_ADD_POINT4D (defined in rtabmap::PointXYZIRT)rtabmap::PointXYZIRT
    ring (defined in rtabmap::PointXYZIRT)rtabmap::PointXYZIRT
    time (defined in rtabmap::PointXYZIRT)rtabmap::PointXYZIRT
    + + + + diff --git a/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIRT.html b/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIRT.html new file mode 100644 index 00000000..02c7e3b0 --- /dev/null +++ b/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIRT.html @@ -0,0 +1,181 @@ + + + + + + + + +RTAB-Map: rtabmap::PointXYZIRT Struct Reference + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    rtabmap::PointXYZIRT Struct Reference
    +
    +
    + +

    This namespace contains 3D point cloud processing utilities. + More...

    + +

    #include <util3d.h>

    + + + + + + + + + + +

    +Public Attributes

     PCL_ADD_POINT4D
     
    float intensity
     
    std::uint16_t ring
     
    float time
     
    +

    Detailed Description

    +

    This namespace contains 3D point cloud processing utilities.

    + +

    Definition at line 57 of file util3d.h.

    +

    Member Data Documentation

    + +

    ◆ PCL_ADD_POINT4D

    + +
    +
    + + + + +
    rtabmap::PointXYZIRT::PCL_ADD_POINT4D
    +
    + +

    Definition at line 59 of file util3d.h.

    + +
    +
    + +

    ◆ intensity

    + +
    +
    + + + + +
    float rtabmap::PointXYZIRT::intensity
    +
    + +

    Definition at line 60 of file util3d.h.

    + +
    +
    + +

    ◆ ring

    + +
    +
    + + + + +
    std::uint16_t rtabmap::PointXYZIRT::ring
    +
    + +

    Definition at line 61 of file util3d.h.

    + +
    +
    + +

    ◆ time

    + +
    +
    + + + + +
    float rtabmap::PointXYZIRT::time
    +
    + +

    Definition at line 62 of file util3d.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • corelib/include/rtabmap/core/util3d.h
    • +
    +
    + + + + diff --git a/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIT-members.html b/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIT-members.html new file mode 100644 index 00000000..13430567 --- /dev/null +++ b/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIT-members.html @@ -0,0 +1,97 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    rtabmap::PointXYZIT Member List
    +
    +
    + +

    This is the complete list of members for rtabmap::PointXYZIT, including all inherited members.

    + + + + + + +
    i (defined in rtabmap::PointXYZIT)rtabmap::PointXYZIT
    t (defined in rtabmap::PointXYZIT)rtabmap::PointXYZIT
    x (defined in rtabmap::PointXYZIT)rtabmap::PointXYZIT
    y (defined in rtabmap::PointXYZIT)rtabmap::PointXYZIT
    z (defined in rtabmap::PointXYZIT)rtabmap::PointXYZIT
    + + + + diff --git a/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIT.html b/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIT.html new file mode 100644 index 00000000..b5660b25 --- /dev/null +++ b/preview/pr-1492/api/latest/structrtabmap_1_1PointXYZIT.html @@ -0,0 +1,193 @@ + + + + + + + + +RTAB-Map: rtabmap::PointXYZIT Struct Reference + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    rtabmap::PointXYZIT Struct Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Attributes

    float x
     
    float y
     
    float z
     
    float i
     
    float t
     
    +

    Detailed Description

    +
    +

    Definition at line 53 of file LidarVLP16.h.

    +

    Member Data Documentation

    + +

    ◆ x

    + +
    +
    + + + + +
    float rtabmap::PointXYZIT::x
    +
    + +

    Definition at line 54 of file LidarVLP16.h.

    + +
    +
    + +

    ◆ y

    + +
    +
    + + + + +
    float rtabmap::PointXYZIT::y
    +
    + +

    Definition at line 55 of file LidarVLP16.h.

    + +
    +
    + +

    ◆ z

    + +
    +
    + + + + +
    float rtabmap::PointXYZIT::z
    +
    + +

    Definition at line 56 of file LidarVLP16.h.

    + +
    +
    + +

    ◆ i

    + +
    +
    + + + + +
    float rtabmap::PointXYZIT::i
    +
    + +

    Definition at line 57 of file LidarVLP16.h.

    + +
    +
    + +

    ◆ t

    + +
    +
    + + + + +
    float rtabmap::PointXYZIT::t
    +
    + +

    Definition at line 58 of file LidarVLP16.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors-members.html b/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors-members.html new file mode 100644 index 00000000..a5315407 --- /dev/null +++ b/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors-members.html @@ -0,0 +1,98 @@ + + + + + + + + +RTAB-Map: Member List + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    rtabmap::graph::MaxGraphErrors Member List
    +
    + + + + + diff --git a/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors.html b/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors.html new file mode 100644 index 00000000..9a4dad99 --- /dev/null +++ b/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors.html @@ -0,0 +1,246 @@ + + + + + + + + +RTAB-Map: rtabmap::graph::MaxGraphErrors Struct Reference + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    rtabmap::graph::MaxGraphErrors Struct Reference
    +
    +
    + +

    Largest pose-graph constraint violations after optimization. + More...

    + +

    #include <Graph.h>

    +
    +Collaboration diagram for rtabmap::graph::MaxGraphErrors:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    float linear =-1.0f
     Absolute linear error (m) of the worst link.
     
    float angular =-1.0f
     Absolute angular error (rad) of the worst link.
     
    float linearRatio =-1.0f
     linear / sqrt(trans variance) of the worst link.
     
    float angularRatio =-1.0f
     angular / sqrt(rot variance) of the worst link.
     
    Link linearLink
     Link with largest linearRatio.
     
    Link angularLink
     Link with largest angularRatio.
     
    +

    Detailed Description

    +

    Largest pose-graph constraint violations after optimization.

    +

    For each non-self-referenced link (from != to), compares the relative pose implied by poses to the link measurement and tracks the worst linear/angular error and error/std ratios.

    + +

    Definition at line 231 of file Graph.h.

    +

    Member Data Documentation

    + +

    ◆ linear

    + +
    +
    + + + + +
    float rtabmap::graph::MaxGraphErrors::linear =-1.0f
    +
    + +

    Absolute linear error (m) of the worst link.

    + +

    Definition at line 233 of file Graph.h.

    + +
    +
    + +

    ◆ angular

    + +
    +
    + + + + +
    float rtabmap::graph::MaxGraphErrors::angular =-1.0f
    +
    + +

    Absolute angular error (rad) of the worst link.

    + +

    Definition at line 234 of file Graph.h.

    + +
    +
    + +

    ◆ linearRatio

    + +
    +
    + + + + +
    float rtabmap::graph::MaxGraphErrors::linearRatio =-1.0f
    +
    + +

    linear / sqrt(trans variance) of the worst link.

    + +

    Definition at line 235 of file Graph.h.

    + +
    +
    + +

    ◆ angularRatio

    + +
    +
    + + + + +
    float rtabmap::graph::MaxGraphErrors::angularRatio =-1.0f
    +
    + +

    angular / sqrt(rot variance) of the worst link.

    + +

    Definition at line 236 of file Graph.h.

    + +
    +
    + +

    ◆ linearLink

    + +
    +
    + + + + +
    Link rtabmap::graph::MaxGraphErrors::linearLink
    +
    + +

    Link with largest linearRatio.

    + +

    Definition at line 237 of file Graph.h.

    + +
    +
    + +

    ◆ angularLink

    + +
    +
    + + + + +
    Link rtabmap::graph::MaxGraphErrors::angularLink
    +
    + +

    Link with largest angularRatio.

    + +

    Definition at line 238 of file Graph.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • corelib/include/rtabmap/core/Graph.h
    • +
    +
    + + + + diff --git a/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.map b/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.map new file mode 100644 index 00000000..038b5db5 --- /dev/null +++ b/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.md5 b/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.md5 new file mode 100644 index 00000000..78eb8da5 --- /dev/null +++ b/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.md5 @@ -0,0 +1 @@ +aba588279bb547a09173d8174a481899 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.png b/preview/pr-1492/api/latest/structrtabmap_1_1graph_1_1MaxGraphErrors__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8869368a9d683e560431eb84a3df6898db39c6 GIT binary patch literal 6450 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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/sync_off.png b/preview/pr-1492/api/latest/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/sync_on.png b/preview/pr-1492/api/latest/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/tab_a.png b/preview/pr-1492/api/latest/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/tab_ad.png b/preview/pr-1492/api/latest/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/tab_s.png b/preview/pr-1492/api/latest/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/tab_sd.png b/preview/pr-1492/api/latest/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/tabs.css b/preview/pr-1492/api/latest/tabs.css new file mode 100644 index 00000000..df7944b7 --- /dev/null +++ b/preview/pr-1492/api/latest/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all 0.25s;transition:all 0.25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}#main-menu-state:not(:checked)~#main-menu{display:none}#main-menu-state:checked~#main-menu{display:block}@media (min-width: 768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked)~#main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:none}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} diff --git a/preview/pr-1492/api/latest/topics.html b/preview/pr-1492/api/latest/topics.html new file mode 100644 index 00000000..1439af5c --- /dev/null +++ b/preview/pr-1492/api/latest/topics.html @@ -0,0 +1,114 @@ + + + + + + + + +RTAB-Map: Topics + + + + + + + + + + + + +

    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Topics
    +
    +
    +
    Here is a list of all topics with brief descriptions:
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
     Region of Interest (ROI) Computation
     PCL to 3D LaserScanConverts various PCL point cloud types into a unified LaserScan format
     PCL to 2D LaserScanConverts various PCL point cloud types into a unified 2D LaserScan format
     LaserScan to PCLFunctions to convert LaserScan data to various PCL point cloud formats
     Range Filtering of PCL Point CloudsFilters a point cloud based on a minimum and maximum Euclidean range
     Split Range Filtering of PCL Point CloudsSplits a point cloud into two groups based on a distance threshold
     Point Cloud DownsamplingDownsamples a point cloud or LaserScan by keeping only every N-th point
     Voxel FilteringPerforms voxel grid downsampling on a point cloud with optional index filtering
     Random SamplingRandomly samples a subset of points from the input point cloud
     Pass-through FilteringFilters points from the input point cloud using a pass-through filter along a specified axis
     Crop Box FilteringFilters points from a point cloud using a 3D crop box
     Frustum FilteringFilters points from a point cloud based on a camera frustum
     Remove NaN Points from a Point CloudRemoves NaN (Not-a-Number) points from an organized point cloud
     Remove NaN Points from a Point CloudRemoves points with NaN normal values from a point cloud
     Radius FilteringFilters points based on the number of neighbors within a given radius
     Proportional Radius FilteringPerforms proportional radius outlier filtering using viewpoint-dependent adaptive radii
     Subtract FilteringFilters a point cloud by removing points that have a sufficient number of neighbors within a given radius in a second point cloud
     Point Normal FilteringFilters points in a point cloud based on the angle between their estimated surface normals and a given reference normal
     Point Cloud Cluster ExtractionPerforms Euclidean cluster extraction on a point cloud
     Point Cloud Indices ExtractionExtracts a subset of points from a point cloud based on specified indices
     Compute Variance and Correspondences of Two Point CloudsComputes the geometric variance and number of valid correspondences between two point clouds
     Compute Structural Complexity of a Point Cloud with NormalsComputes the complexity of surface normals in a point cloud using PCA
     Transform PCL Point CloudsTransforms various PCL point cloud types using the given transform
     Transform a single pointTransforms various point types using the given transform
     UtiLite
    +
    +
    + + + + diff --git a/preview/pr-1492/api/latest/uResourceGeneratorPage.html b/preview/pr-1492/api/latest/uResourceGeneratorPage.html new file mode 100644 index 00000000..5e87c581 --- /dev/null +++ b/preview/pr-1492/api/latest/uResourceGeneratorPage.html @@ -0,0 +1,108 @@ + + + + + + + + +RTAB-Map: uResourceGenerator + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    uResourceGenerator
    +
    +
    +

    UtiLite provides a utility application called uResourceGenerator to generate resources to include in an executable. For example:

    $ ./uresourcegenerator DatabaseSchema.sql
    +

    This will generate a HEX file "DatabaseSchema_sql.h" which can be included in source files. Data of the file is global and can be accessed by the generated const char * DATABASESCHEMA_SQL.

    #include "DatabaseSchema_sql.h"
    +
    ...
    +
    std::string hex = DATABASESCHEMA_SQL;
    +
    // Assuming there are only ASCII characters, we can directly convert to a string:
    +
    std::string schema = uHex2Str(hex);
    +
    // For binary data:
    +
    std::vector<char> bytes = uHex2Bytes(hex);
    +
    std::string UTILITE_EXPORT uHex2Str(const std::string &hex)
    +
    std::vector< char > UTILITE_EXPORT uHex2Bytes(const std::string &hex)
    +

    The generator can be automated in a CMake build like:

    ADD_CUSTOM_COMMAND(
    +
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/DatabaseSchema_sql.h
    +
    COMMAND ${URESOURCEGENERATOR_EXEC} -n my_namespace -p ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/DatabaseSchema.sql
    +
    COMMENT "[Creating database resource]"
    +
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/DatabaseSchema.sql
    +
    )
    +
    SET(RESOURCES
    +
    ${CMAKE_CURRENT_BINARY_DIR}/DatabaseSchema_sql.h
    +
    )
    +
    ADD_LIBRARY(mylib ${SRC_FILES} ${RESOURCES})
    +
    ADD_EXECUTABLE(myexecutable ${SRC_FILES} ${RESOURCES})
    +

    The variable URESOURCEGENERATOR_EXEC is set when FIND_PACKAGE(UtiLite) is done, you would need to add FindUtiLite.cmake.

    +
    +
    + + + + diff --git a/preview/pr-1492/api/latest/util2d_8h_source.html b/preview/pr-1492/api/latest/util2d_8h_source.html new file mode 100644 index 00000000..9536005a --- /dev/null +++ b/preview/pr-1492/api/latest/util2d_8h_source.html @@ -0,0 +1,322 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util2d.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util2d.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2025, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL2D_H_
    +
    29#define UTIL2D_H_
    +
    30
    +
    31#include <rtabmap/core/rtabmap_core_export.h>
    +
    32
    +
    33#include <opencv2/core/core.hpp>
    +
    34#include <rtabmap/core/Transform.h>
    +
    35#include <rtabmap/core/Parameters.h>
    +
    36#include <rtabmap/core/CameraModel.h>
    +
    37#include <vector>
    +
    38
    +
    39namespace rtabmap
    +
    40{
    +
    41
    +
    +
    45namespace util2d
    +
    46{
    +
    47
    +
    66float RTABMAP_CORE_EXPORT ssd(const cv::Mat & windowLeft, const cv::Mat & windowRight);
    +
    67
    +
    86float RTABMAP_CORE_EXPORT sad(const cv::Mat & windowLeft, const cv::Mat & windowRight);
    +
    87
    +
    120std::vector<cv::Point2f> RTABMAP_CORE_EXPORT calcStereoCorrespondences(
    +
    121 const cv::Mat & leftImage,
    +
    122 const cv::Mat & rightImage,
    +
    123 const std::vector<cv::Point2f> & leftCorners,
    +
    124 std::vector<unsigned char> & status,
    +
    125 cv::Size winSize = cv::Size(6,3),
    +
    126 int maxLevel = 3,
    +
    127 int iterations = 5,
    +
    128 float minDisparity = 0.0f,
    +
    129 float maxDisparity = 64.0f,
    +
    130 bool ssdApproach = true);
    +
    131
    +
    171void RTABMAP_CORE_EXPORT calcOpticalFlowPyrLKStereo( cv::InputArray _prevImg, cv::InputArray _nextImg,
    +
    172 cv::InputArray _prevPts, cv::InputOutputArray _nextPts,
    +
    173 cv::OutputArray _status, cv::OutputArray _err,
    +
    174 cv::Size winSize = cv::Size(15,3), int maxLevel = 3,
    +
    175 cv::TermCriteria criteria = cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 30, 0.01),
    +
    176 int flags = 0, double minEigThreshold = 1e-4 );
    +
    177
    +
    207cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoImages(
    +
    208 const cv::Mat & leftImage,
    +
    209 const cv::Mat & rightImage,
    +
    210 const ParametersMap & parameters = ParametersMap());
    +
    211
    +
    232cv::Mat RTABMAP_CORE_EXPORT depthFromDisparity(const cv::Mat & disparity,
    +
    233 float fx, float baseline,
    +
    234 int type = CV_32FC1); // CV_32FC1 or CV_16UC1
    +
    235
    +
    258cv::Mat RTABMAP_CORE_EXPORT depthFromStereoImages(
    +
    259 const cv::Mat & leftImage,
    +
    260 const cv::Mat & rightImage,
    +
    261 const std::vector<cv::Point2f> & leftCorners,
    +
    262 float fx,
    +
    263 float baseline,
    +
    264 int flowWinSize = 9,
    +
    265 int flowMaxLevel = 4,
    +
    266 int flowIterations = 20,
    +
    267 double flowEps = 0.02);
    +
    268
    +
    293cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoCorrespondences(
    +
    294 const cv::Size & disparitySize,
    +
    295 const std::vector<cv::Point2f> & leftCorners,
    +
    296 const std::vector<cv::Point2f> & rightCorners,
    +
    297 const std::vector<unsigned char> & mask);
    +
    298
    +
    321cv::Mat RTABMAP_CORE_EXPORT depthFromStereoCorrespondences(
    +
    322 const cv::Mat & leftImage,
    +
    323 const std::vector<cv::Point2f> & leftCorners,
    +
    324 const std::vector<cv::Point2f> & rightCorners,
    +
    325 const std::vector<unsigned char> & mask,
    +
    326 float fx, float baseline);
    +
    327
    +
    349cv::Mat RTABMAP_CORE_EXPORT cvtDepthFromFloat(const cv::Mat & depth32F);
    +
    350
    +
    368cv::Mat RTABMAP_CORE_EXPORT cvtDepthToFloat(const cv::Mat & depth16U);
    +
    369
    +
    395float RTABMAP_CORE_EXPORT getDepth(
    +
    396 const cv::Mat & depthImage,
    +
    397 float x, float y,
    +
    398 bool smoothing,
    +
    399 float depthErrorRatio = 0.02f, //ratio
    +
    400 bool estWithNeighborsIfNull = false);
    +
    401
    +
    418cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Mat & image, const std::string & roiRatios);
    +
    419
    +
    428cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Size & imageSize, const std::string & roiRatios);
    +
    429
    +
    438cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Mat & image, const std::vector<float> & roiRatios);
    +
    439
    +
    449cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Size & imageSize, const std::vector<float> & roiRatios);
    +
    450
    + // end of RoiComputation group
    452
    +
    467cv::Mat RTABMAP_CORE_EXPORT decimate(const cv::Mat & image, int d);
    +
    468
    +
    485cv::Mat RTABMAP_CORE_EXPORT interpolate(const cv::Mat & image, int factor, float depthErrorRatio = 0.02f);
    +
    486
    +
    510cv::Mat RTABMAP_CORE_EXPORT registerDepth(
    +
    511 const cv::Mat & depth,
    +
    512 const cv::Mat & depthK,
    +
    513 const cv::Size & colorSize,
    +
    514 const cv::Mat & colorK,
    +
    515 const rtabmap::Transform & transform);
    +
    516cv::Mat RTABMAP_CORE_EXPORT registerDepth(
    +
    517 const cv::Mat & depth,
    +
    518 const cv::Mat & confidence,
    +
    519 const cv::Mat & depthK,
    +
    520 const cv::Size & colorSize,
    +
    521 const cv::Mat & colorK,
    +
    522 const rtabmap::Transform & transform,
    +
    523 cv::Mat & registeredConfidence);
    +
    524
    +
    542cv::Mat RTABMAP_CORE_EXPORT fillDepthHoles(
    +
    543 const cv::Mat & depth,
    +
    544 int maximumHoleSize = 1,
    +
    545 float errorRatio = 0.02f);
    +
    546
    +
    574void RTABMAP_CORE_EXPORT fillRegisteredDepthHoles(
    +
    575 cv::Mat & depthRegistered,
    +
    576 bool vertical,
    +
    577 bool horizontal,
    +
    578 bool fillDoubleHoles = false);
    +
    579
    +
    603cv::Mat RTABMAP_CORE_EXPORT fastBilateralFiltering(
    +
    604 const cv::Mat & depth,
    +
    605 float sigmaS = 15.0f,
    +
    606 float sigmaR = 0.05f,
    +
    607 bool earlyDivision = false);
    +
    608
    +
    624void RTABMAP_CORE_EXPORT depthBleedingFiltering(
    +
    625 cv::Mat & depth,
    +
    626 float maxDepthError);
    +
    627
    +
    649cv::Mat RTABMAP_CORE_EXPORT brightnessAndContrastAuto(
    +
    650 const cv::Mat & src,
    +
    651 const cv::Mat & mask,
    +
    652 float clipLowHistPercent=0,
    +
    653 float clipHighHistPercent=0,
    +
    654 float * alphaOut = 0,
    +
    655 float * betaOut = 0);
    +
    656
    +
    675cv::Mat RTABMAP_CORE_EXPORT exposureFusion(
    +
    676 const std::vector<cv::Mat> & images);
    +
    677
    +
    696void RTABMAP_CORE_EXPORT HSVtoRGB( float *r, float *g, float *b, float h, float s, float v );
    +
    697
    +
    717void RTABMAP_CORE_EXPORT NMS(
    +
    718 const std::vector<cv::KeyPoint> & ptsIn,
    +
    719 const cv::Mat & descriptorsIn,
    +
    720 std::vector<cv::KeyPoint> & ptsOut,
    +
    721 cv::Mat & descriptorsOut,
    +
    722 int dist_thresh, int img_width, int img_height);
    +
    723
    +
    752std::vector<int> RTABMAP_CORE_EXPORT SSC(
    +
    753 const std::vector<cv::KeyPoint> & keypoints,
    +
    754 int maxKeypoints,
    +
    755 float tolerance,
    +
    756 int cols,
    +
    757 int rows,
    +
    758 const std::vector<int> & indx = {});
    +
    759
    +
    784bool RTABMAP_CORE_EXPORT rotateImagesUpsideUpIfNecessary(
    +
    785 CameraModel & model,
    +
    786 cv::Mat & rgb,
    +
    787 cv::Mat & depth);
    +
    788
    +
    789} // namespace util2d
    +
    +
    790} // namespace rtabmap
    +
    791
    +
    792#endif /* UTIL2D_H_ */
    +
    Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
    Definition CameraModel.h:53
    +
    Represents a 3D rigid body transformation (rotation + translation).
    Definition Transform.h:53
    +
    cv::Rect RTABMAP_CORE_EXPORT computeRoi(const cv::Mat &image, const std::string &roiRatios)
    Computes a region of interest (ROI) in the image using string-defined ratios.
    +
    cv::Mat RTABMAP_CORE_EXPORT fastBilateralFiltering(const cv::Mat &depth, float sigmaS=15.0f, float sigmaR=0.05f, bool earlyDivision=false)
    Applies a 2D fast bilateral filter to a depth image.
    +
    cv::Mat RTABMAP_CORE_EXPORT decimate(const cv::Mat &image, int d)
    Downsamples an image by a given decimation factor.
    +
    cv::Mat RTABMAP_CORE_EXPORT cvtDepthToFloat(const cv::Mat &depth16U)
    Converts a 16-bit unsigned depth image (in millimeters) to a 32-bit float depth image (in meters).
    +
    cv::Mat RTABMAP_CORE_EXPORT depthFromDisparity(const cv::Mat &disparity, float fx, float baseline, int type=CV_32FC1)
    Converts a disparity map to a depth map using stereo camera parameters.
    +
    bool RTABMAP_CORE_EXPORT rotateImagesUpsideUpIfNecessary(CameraModel &model, cv::Mat &rgb, cv::Mat &depth)
    Rotates the input RGB and depth images to make them appear upright based on the camera's roll angle.
    +
    float RTABMAP_CORE_EXPORT ssd(const cv::Mat &windowLeft, const cv::Mat &windowRight)
    Computes the Sum of Squared Differences (SSD) between two image patches.
    +
    void RTABMAP_CORE_EXPORT calcOpticalFlowPyrLKStereo(cv::InputArray _prevImg, cv::InputArray _nextImg, cv::InputArray _prevPts, cv::InputOutputArray _nextPts, cv::OutputArray _status, cv::OutputArray _err, cv::Size winSize=cv::Size(15, 3), int maxLevel=3, cv::TermCriteria criteria=cv::TermCriteria(cv::TermCriteria::COUNT+cv::TermCriteria::EPS, 30, 0.01), int flags=0, double minEigThreshold=1e-4)
    Computes sparse optical flow using a pyramidal Lucas-Kanade method constrained to the x-axis.
    +
    cv::Mat RTABMAP_CORE_EXPORT registerDepth(const cv::Mat &depth, const cv::Mat &depthK, const cv::Size &colorSize, const cv::Mat &colorK, const rtabmap::Transform &transform)
    Registers a depth image to a different camera frame (typically RGB).
    +
    float RTABMAP_CORE_EXPORT getDepth(const cv::Mat &depthImage, float x, float y, bool smoothing, float depthErrorRatio=0.02f, bool estWithNeighborsIfNull=false)
    Retrieves a depth value from a depth image at a subpixel coordinate.
    +
    float RTABMAP_CORE_EXPORT sad(const cv::Mat &windowLeft, const cv::Mat &windowRight)
    Computes the Sum of Absolute Differences (SAD) between two image patches.
    +
    cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoCorrespondences(const cv::Size &disparitySize, const std::vector< cv::Point2f > &leftCorners, const std::vector< cv::Point2f > &rightCorners, const std::vector< unsigned char > &mask)
    Computes a disparity map from stereo correspondences between two images.
    +
    std::vector< cv::Point2f > RTABMAP_CORE_EXPORT calcStereoCorrespondences(const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, std::vector< unsigned char > &status, cv::Size winSize=cv::Size(6, 3), int maxLevel=3, int iterations=5, float minDisparity=0.0f, float maxDisparity=64.0f, bool ssdApproach=true)
    Computes stereo correspondences between left and right images using a pyramidal window-based matching...
    +
    cv::Mat RTABMAP_CORE_EXPORT cvtDepthFromFloat(const cv::Mat &depth32F)
    Converts a 32-bit float depth image (in meters) to a 16-bit unsigned depth image (in millimeters).
    +
    void RTABMAP_CORE_EXPORT depthBleedingFiltering(cv::Mat &depth, float maxDepthError)
    Filters out depth bleeding artifacts in a depth image.
    +
    cv::Mat RTABMAP_CORE_EXPORT brightnessAndContrastAuto(const cv::Mat &src, const cv::Mat &mask, float clipLowHistPercent=0, float clipHighHistPercent=0, float *alphaOut=0, float *betaOut=0)
    Automatic brightness and contrast optimization with optional histogram clipping.
    +
    std::vector< int > RTABMAP_CORE_EXPORT SSC(const std::vector< cv::KeyPoint > &keypoints, int maxKeypoints, float tolerance, int cols, int rows, const std::vector< int > &indx={})
    Applies the SSC (Suppression via Square Covering) algorithm to spatially select keypoints.
    +
    cv::Mat RTABMAP_CORE_EXPORT depthFromStereoImages(const cv::Mat &leftImage, const cv::Mat &rightImage, const std::vector< cv::Point2f > &leftCorners, float fx, float baseline, int flowWinSize=9, int flowMaxLevel=4, int flowIterations=20, double flowEps=0.02)
    Computes a depth map from stereo image pairs using optical flow tracking.
    +
    void RTABMAP_CORE_EXPORT NMS(const std::vector< cv::KeyPoint > &ptsIn, const cv::Mat &descriptorsIn, std::vector< cv::KeyPoint > &ptsOut, cv::Mat &descriptorsOut, int dist_thresh, int img_width, int img_height)
    Applies Non-Maximum Suppression (NMS) to a set of keypoints.
    +
    void RTABMAP_CORE_EXPORT HSVtoRGB(float *r, float *g, float *b, float h, float s, float v)
    Converts a color from HSV (Hue, Saturation, Value) to RGB.
    +
    cv::Mat RTABMAP_CORE_EXPORT exposureFusion(const std::vector< cv::Mat > &images)
    Performs exposure fusion on a set of input images.
    +
    cv::Mat RTABMAP_CORE_EXPORT disparityFromStereoImages(const cv::Mat &leftImage, const cv::Mat &rightImage, const ParametersMap &parameters=ParametersMap())
    Computes the disparity map from a pair of stereo images.
    +
    cv::Mat RTABMAP_CORE_EXPORT depthFromStereoCorrespondences(const cv::Mat &leftImage, const std::vector< cv::Point2f > &leftCorners, const std::vector< cv::Point2f > &rightCorners, const std::vector< unsigned char > &mask, float fx, float baseline)
    Computes a sparse depth map from corresponding stereo feature points.
    +
    cv::Mat RTABMAP_CORE_EXPORT fillDepthHoles(const cv::Mat &depth, int maximumHoleSize=1, float errorRatio=0.02f)
    Fills holes in the depth image using linear interpolation.
    +
    cv::Mat RTABMAP_CORE_EXPORT interpolate(const cv::Mat &image, int factor, float depthErrorRatio=0.02f)
    Upsamples a depth image using bilinear interpolation with depth consistency check.
    +
    void RTABMAP_CORE_EXPORT fillRegisteredDepthHoles(cv::Mat &depthRegistered, bool vertical, bool horizontal, bool fillDoubleHoles=false)
    Fill holes in a registered depth image using linear interpolation.
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d_8h_source.html b/preview/pr-1492/api/latest/util3d_8h_source.html new file mode 100644 index 00000000..dbcf48b6 --- /dev/null +++ b/preview/pr-1492/api/latest/util3d_8h_source.html @@ -0,0 +1,503 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util3d.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2025, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_H_
    +
    29#define UTIL3D_H_
    +
    30
    +
    31#include "rtabmap/core/rtabmap_core_export.h"
    +
    32
    +
    33#include <pcl/point_cloud.h>
    +
    34#include <pcl/point_types.h>
    +
    35#include <pcl/pcl_base.h>
    +
    36#include <pcl/TextureMesh.h>
    +
    37#include <rtabmap/core/Transform.h>
    +
    38#include <rtabmap/core/SensorData.h>
    +
    39#include <rtabmap/core/Parameters.h>
    +
    40#include <opencv2/core/core.hpp>
    +
    41#include <rtabmap/core/ProgressState.h>
    +
    42#include <cstdint>
    +
    43#include <map>
    +
    44#include <list>
    +
    45
    +
    46namespace rtabmap
    +
    47{
    +
    48
    +
    53// Point type carrying xyz + intensity + ring (laser line index) + time
    +
    54// (per-point acquisition offset, seconds from the scan start). Matches the
    +
    55// layout expected by LIO-SAM's Velodyne feature extractor so it can be fed
    +
    56// directly via util3d::laserScanFromPointCloud().
    +
    +
    57struct EIGEN_ALIGN16 PointXYZIRT
    +
    58{
    +
    59 PCL_ADD_POINT4D;
    +
    60 float intensity;
    +
    61 std::uint16_t ring;
    +
    62 float time;
    +
    63 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    +
    64};
    +
    +
    65
    +
    66namespace util3d
    +
    67{
    +
    68
    +
    85cv::Mat RTABMAP_CORE_EXPORT rgbFromCloud(
    +
    86 const pcl::PointCloud<pcl::PointXYZRGBA> & cloud,
    +
    87 bool bgrOrder = true);
    +
    88
    +
    103cv::Mat RTABMAP_CORE_EXPORT depthFromCloud(
    +
    104 const pcl::PointCloud<pcl::PointXYZRGBA> & cloud,
    +
    105 bool depth16U = true);
    +
    106
    +
    122void RTABMAP_CORE_EXPORT rgbdFromCloud(
    +
    123 const pcl::PointCloud<pcl::PointXYZRGBA> & cloud,
    +
    124 cv::Mat & rgb,
    +
    125 cv::Mat & depth,
    +
    126 bool bgrOrder = true,
    +
    127 bool depth16U = true);
    +
    128
    +
    147pcl::PointXYZ RTABMAP_CORE_EXPORT projectDepthTo3D(
    +
    148 const cv::Mat & depthImage,
    +
    149 float x, float y,
    +
    150 float cx, float cy,
    +
    151 float fx, float fy,
    +
    152 bool smoothing,
    +
    153 float depthErrorRatio = 0.02f);
    +
    154
    +
    171Eigen::Vector3f RTABMAP_CORE_EXPORT projectDepthTo3DRay(
    +
    172 const cv::Size & imageSize,
    +
    173 float x, float y,
    +
    174 float cx, float cy,
    +
    175 float fx, float fy);
    +
    176
    +
    199RTABMAP_DEPRECATED pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT cloudFromDepth(
    +
    200 const cv::Mat & imageDepth,
    +
    201 float cx, float cy,
    +
    202 float fx, float fy,
    +
    203 int decimation = 1,
    +
    204 float maxDepth = 0.0f,
    +
    205 float minDepth = 0.0f,
    +
    206 std::vector<int> * validIndices = 0);
    +
    222pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT cloudFromDepth(
    +
    223 const cv::Mat & imageDepth,
    +
    224 const CameraModel & model,
    +
    225 int decimation = 1,
    +
    226 float maxDepth = 0.0f,
    +
    227 float minDepth = 0.0f,
    +
    228 std::vector<int> * validIndices = 0);
    +
    229pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT cloudFromDepth(
    +
    230 const cv::Mat & imageDepth,
    +
    231 const cv::Mat & imageDepthConfidence,
    +
    232 const CameraModel & model,
    +
    233 int decimation = 1,
    +
    234 float maxDepth = 0.0f,
    +
    235 float minDepth = 0.0f,
    +
    236 unsigned char confidenceThr = 0,
    +
    237 std::vector<int> * validIndices = 0);
    +
    238
    +
    264RTABMAP_DEPRECATED pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT cloudFromDepthRGB(
    +
    265 const cv::Mat & imageRgb,
    +
    266 const cv::Mat & imageDepth,
    +
    267 float cx, float cy,
    +
    268 float fx, float fy,
    +
    269 int decimation = 1,
    +
    270 float maxDepth = 0.0f,
    +
    271 float minDepth = 0.0f,
    +
    272 std::vector<int> * validIndices = 0);
    +
    273
    +
    295pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT cloudFromDepthRGB(
    +
    296 const cv::Mat & imageRgb,
    +
    297 const cv::Mat & imageDepth,
    +
    298 const CameraModel & model,
    +
    299 int decimation = 1,
    +
    300 float maxDepth = 0.0f,
    +
    301 float minDepth = 0.0f,
    +
    302 std::vector<int> * validIndices = 0);
    +
    303pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT cloudFromDepthRGB(
    +
    304 const cv::Mat & imageRgb,
    +
    305 const cv::Mat & imageDepth,
    +
    306 const cv::Mat & imageDepthConfidence,
    +
    307 const CameraModel & model,
    +
    308 int decimation = 1,
    +
    309 float maxDepth = 0.0f,
    +
    310 float minDepth = 0.0f,
    +
    311 unsigned char confidenceThr = 0, // 0=low, 100=high
    +
    312 std::vector<int> * validIndices = 0);
    +
    313
    +
    343pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT cloudFromDisparity(
    +
    344 const cv::Mat & imageDisparity,
    +
    345 const StereoCameraModel & model,
    +
    346 int decimation = 1,
    +
    347 float maxDepth = 0.0f,
    +
    348 float minDepth = 0.0f,
    +
    349 std::vector<int> * validIndices = 0);
    +
    350
    +
    384pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT cloudFromDisparityRGB(
    +
    385 const cv::Mat & imageRgb,
    +
    386 const cv::Mat & imageDisparity,
    +
    387 const StereoCameraModel & model,
    +
    388 int decimation = 1,
    +
    389 float maxDepth = 0.0f,
    +
    390 float minDepth = 0.0f,
    +
    391 std::vector<int> * validIndices = 0);
    +
    392
    +
    429pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT cloudFromStereoImages(
    +
    430 const cv::Mat & imageLeft,
    +
    431 const cv::Mat & imageRight,
    +
    432 const StereoCameraModel & model,
    +
    433 int decimation = 1,
    +
    434 float maxDepth = 0.0f,
    +
    435 float minDepth = 0.0f,
    +
    436 std::vector<int> * validIndices = 0,
    +
    437 const ParametersMap & parameters = ParametersMap());
    +
    438
    +
    477std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> RTABMAP_CORE_EXPORT cloudsFromSensorData(
    +
    478 const SensorData & sensorData,
    +
    479 int decimation = 1,
    +
    480 float maxDepth = 0.0f,
    +
    481 float minDepth = 0.0f,
    +
    482 std::vector<pcl::IndicesPtr> * validIndices = 0,
    +
    483 const ParametersMap & stereoParameters = ParametersMap(),
    +
    484 const std::vector<float> & roiRatios = std::vector<float>(), // ignored for stereo
    +
    485 unsigned char confidenceThr = 0); // ignored for stereo
    +
    486
    +
    515pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT cloudFromSensorData(
    +
    516 const SensorData & sensorData,
    +
    517 int decimation = 1,
    +
    518 float maxDepth = 0.0f,
    +
    519 float minDepth = 0.0f,
    +
    520 std::vector<int> * validIndices = 0,
    +
    521 const ParametersMap & stereoParameters = ParametersMap(),
    +
    522 const std::vector<float> & roiRatios = std::vector<float>(), // ignored for stereo
    +
    523 unsigned char confidenceThr = 0); // ignored for stereo
    +
    524
    +
    557std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> RTABMAP_CORE_EXPORT cloudsRGBFromSensorData(
    +
    558 const SensorData & sensorData,
    +
    559 int decimation = 1,
    +
    560 float maxDepth = 0.0f,
    +
    561 float minDepth = 0.0f,
    +
    562 std::vector<pcl::IndicesPtr > * validIndices = 0,
    +
    563 const ParametersMap & stereoParameters = ParametersMap(),
    +
    564 const std::vector<float> & roiRatios = std::vector<float>(), // ignored for stereo
    +
    565 unsigned char confidenceThr = 0); // ignored for stereo
    +
    566
    +
    593pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT cloudRGBFromSensorData(
    +
    594 const SensorData & sensorData,
    +
    595 int decimation = 1,
    +
    596 float maxDepth = 0.0f,
    +
    597 float minDepth = 0.0f,
    +
    598 std::vector<int> * validIndices = 0,
    +
    599 const ParametersMap & stereoParameters = ParametersMap(),
    +
    600 const std::vector<float> & roiRatios = std::vector<float>(), // ignored for stereo
    +
    601 unsigned char confidenceThr = 0); // ignored for stereo
    +
    602
    +
    625pcl::PointCloud<pcl::PointXYZ> RTABMAP_CORE_EXPORT laserScanFromDepthImage(
    +
    626 const cv::Mat & depthImage,
    +
    627 float fx,
    +
    628 float fy,
    +
    629 float cx,
    +
    630 float cy,
    +
    631 float maxDepth = 0,
    +
    632 float minDepth = 0,
    +
    633 const Transform & localTransform = Transform::getIdentity());
    +
    653pcl::PointCloud<pcl::PointXYZ> RTABMAP_CORE_EXPORT laserScanFromDepthImages(
    +
    654 const cv::Mat & depthImages,
    +
    655 const std::vector<CameraModel> & cameraModels,
    +
    656 float maxDepth,
    +
    657 float minDepth);
    +
    658
    +
    689LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZ> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    694LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZ> & cloud, const pcl::IndicesPtr & indices, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    699LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointNormal> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    704LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointNormal> & cloud, const pcl::IndicesPtr & indices, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    709LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZ> & cloud, const pcl::PointCloud<pcl::Normal> & normals, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    714LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZRGB> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    719LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZRGB> & cloud, const pcl::IndicesPtr & indices, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    724LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZI> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    729LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZI> & cloud, const pcl::IndicesPtr & indices, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    734LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<rtabmap::PointXYZIRT> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    739LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<rtabmap::PointXYZIRT> & cloud, const pcl::IndicesPtr & indices, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    744LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZRGB> & cloud, const pcl::PointCloud<pcl::Normal> & normals, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    749LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    754LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud, const pcl::IndicesPtr & indices, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    759LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZI> & cloud, const pcl::PointCloud<pcl::Normal> & normals, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    764LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZINormal> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    769LaserScan RTABMAP_CORE_EXPORT laserScanFromPointCloud(const pcl::PointCloud<pcl::PointXYZINormal> & cloud, const pcl::IndicesPtr & indices, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    770
    +
    775template<typename PointCloud2T>
    +
    776LaserScan laserScanFromPointCloud(const PointCloud2T & cloud, bool filterNaNs = true, bool is2D = false, const Transform & transform = Transform());
    +
    777
    +
    802LaserScan RTABMAP_CORE_EXPORT laserScan2dFromPointCloud(const pcl::PointCloud<pcl::PointXYZ> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    807LaserScan RTABMAP_CORE_EXPORT laserScan2dFromPointCloud(const pcl::PointCloud<pcl::PointXYZI> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    812LaserScan RTABMAP_CORE_EXPORT laserScan2dFromPointCloud(const pcl::PointCloud<pcl::PointNormal> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    817LaserScan RTABMAP_CORE_EXPORT laserScan2dFromPointCloud(const pcl::PointCloud<pcl::PointXYZ> & cloud, const pcl::PointCloud<pcl::Normal> & normals, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    822LaserScan RTABMAP_CORE_EXPORT laserScan2dFromPointCloud(const pcl::PointCloud<pcl::PointXYZINormal> & cloud, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    827LaserScan RTABMAP_CORE_EXPORT laserScan2dFromPointCloud(const pcl::PointCloud<pcl::PointXYZI> & cloud, const pcl::PointCloud<pcl::Normal> & normals, const Transform & transform = Transform(), bool filterNaNs = true);
    +
    828
    +
    845pcl::PCLPointCloud2::Ptr RTABMAP_CORE_EXPORT laserScanToPointCloud2(const LaserScan & laserScan, const Transform & transform = Transform());
    +
    846pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT laserScanToPointCloud(const LaserScan & laserScan, const Transform & transform = Transform());
    +
    847pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT laserScanToPointCloudNormal(const LaserScan & laserScan, const Transform & transform = Transform());
    +
    848pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT laserScanToPointCloudRGB(const LaserScan & laserScan, const Transform & transform = Transform(), unsigned char r = 100, unsigned char g = 100, unsigned char b = 100);
    +
    849pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT laserScanToPointCloudI(const LaserScan & laserScan, const Transform & transform = Transform(), float intensity = 0.0f);
    +
    850pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT laserScanToPointCloudRGBNormal(const LaserScan & laserScan, const Transform & transform = Transform(), unsigned char r = 100, unsigned char g = 100, unsigned char b = 100);
    +
    851pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT laserScanToPointCloudINormal(const LaserScan & laserScan, const Transform & transform = Transform(), float intensity = 0.0f);
    +
    852
    +
    853
    +
    854pcl::PointXYZ RTABMAP_CORE_EXPORT laserScanToPoint(const LaserScan & laserScan, int index);
    +
    855pcl::PointNormal RTABMAP_CORE_EXPORT laserScanToPointNormal(const LaserScan & laserScan, int index);
    +
    856pcl::PointXYZRGB RTABMAP_CORE_EXPORT laserScanToPointRGB(const LaserScan & laserScan, int index, unsigned char r = 100, unsigned char g = 100, unsigned char b = 100);
    +
    857pcl::PointXYZI RTABMAP_CORE_EXPORT laserScanToPointI(const LaserScan & laserScan, int index, float intensity);
    +
    858pcl::PointXYZRGBNormal RTABMAP_CORE_EXPORT laserScanToPointRGBNormal(const LaserScan & laserScan, int index, unsigned char r, unsigned char g, unsigned char b);
    +
    859pcl::PointXYZINormal RTABMAP_CORE_EXPORT laserScanToPointINormal(const LaserScan & laserScan, int index, float intensity);
    +
    860
    +
    882void RTABMAP_CORE_EXPORT getMinMax3D(const cv::Mat & laserScan, cv::Point3f & min, cv::Point3f & max);
    +
    883
    +
    897void RTABMAP_CORE_EXPORT getMinMax3D(const cv::Mat & laserScan, pcl::PointXYZ & min, pcl::PointXYZ & max);
    +
    898
    +
    921cv::Point3f RTABMAP_CORE_EXPORT projectDisparityTo3D(
    +
    922 const cv::Point2f & pt,
    +
    923 float disparity,
    +
    924 const StereoCameraModel & model);
    +
    925
    +
    944cv::Point3f RTABMAP_CORE_EXPORT projectDisparityTo3D(
    +
    945 const cv::Point2f & pt,
    +
    946 const cv::Mat & disparity,
    +
    947 const StereoCameraModel & model);
    +
    948
    +
    969cv::Mat RTABMAP_CORE_EXPORT projectCloudToCamera(
    +
    970 const cv::Size & imageSize,
    +
    971 const cv::Mat & cameraMatrixK,
    +
    972 const cv::Mat & laserScan,
    +
    973 const rtabmap::Transform & cameraTransform);
    +
    974
    +
    995cv::Mat RTABMAP_CORE_EXPORT projectCloudToCamera(
    +
    996 const cv::Size & imageSize,
    +
    997 const cv::Mat & cameraMatrixK,
    +
    998 const pcl::PointCloud<pcl::PointXYZ>::Ptr laserScan,
    +
    999 const rtabmap::Transform & cameraTransform);
    +
    1000
    +
    1021cv::Mat RTABMAP_CORE_EXPORT projectCloudToCamera(
    +
    1022 const cv::Size & imageSize,
    +
    1023 const cv::Mat & cameraMatrixK,
    +
    1024 const pcl::PCLPointCloud2::Ptr laserScan,
    +
    1025 const rtabmap::Transform & cameraTransform);
    +
    1026
    +
    1046void RTABMAP_CORE_EXPORT fillProjectedCloudHoles(
    +
    1047 cv::Mat & depthRegistered,
    +
    1048 bool verticalDirection,
    +
    1049 bool fillToBorder);
    +
    1050
    +
    1079cv::Mat RTABMAP_CORE_EXPORT filterFloor(
    +
    1080 const cv::Mat & depth,
    +
    1081 const std::vector<CameraModel> & cameraModels,
    +
    1082 float threshold,
    +
    1083 cv::Mat * depthBelow = 0);
    +
    1084
    +
    1105std::vector<std::pair< std::pair<int, int>, pcl::PointXY> > RTABMAP_CORE_EXPORT projectCloudToCameras (
    +
    1106 const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud,
    +
    1107 const std::map<int, Transform> & cameraPoses,
    +
    1108 const std::map<int, std::vector<CameraModel> > & cameraModels,
    +
    1109 float maxDistance = 0.0f,
    +
    1110 float maxAngle = 0.0f,
    +
    1111 float maxDepthError = 0.0f,
    +
    1112 const std::vector<float> & roiRatios = std::vector<float>(),
    +
    1113 const cv::Mat & projMask = cv::Mat(),
    +
    1114 bool distanceToCamPolicy = false,
    +
    1115 const ProgressState * state = 0);
    +
    1136std::vector<std::pair< std::pair<int, int>, pcl::PointXY> > RTABMAP_CORE_EXPORT projectCloudToCameras (
    +
    1137 const pcl::PointCloud<pcl::PointXYZINormal> & cloud,
    +
    1138 const std::map<int, Transform> & cameraPoses,
    +
    1139 const std::map<int, std::vector<CameraModel> > & cameraModels,
    +
    1140 float maxDistance = 0.0f,
    +
    1141 float maxAngle = 0.0f,
    +
    1142 float maxDepthError = 0.0f,
    +
    1143 const std::vector<float> & roiRatios = std::vector<float>(),
    +
    1144 const cv::Mat & projMask = cv::Mat(),
    +
    1145 bool distanceToCamPolicy = false,
    +
    1146 const ProgressState * state = 0);
    +
    1147
    +
    1157bool RTABMAP_CORE_EXPORT isFinite(const cv::Point3f & pt);
    +
    1158
    +
    1168pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT concatenateClouds(
    +
    1169 const std::list<pcl::PointCloud<pcl::PointXYZ>::Ptr> & clouds);
    +
    1179pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT concatenateClouds(
    +
    1180 const std::list<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> & clouds);
    +
    1181
    +
    1196pcl::IndicesPtr RTABMAP_CORE_EXPORT concatenate(
    +
    1197 const std::vector<pcl::IndicesPtr> & indices);
    +
    1198
    +
    1213pcl::IndicesPtr RTABMAP_CORE_EXPORT concatenate(
    +
    1214 const pcl::IndicesPtr & indicesA,
    +
    1215 const pcl::IndicesPtr & indicesB);
    +
    1216
    +
    1228void RTABMAP_CORE_EXPORT savePCDWords(
    +
    1229 const std::string & fileName,
    +
    1230 const std::multimap<int, pcl::PointXYZ> & words,
    +
    1231 const Transform & transform = Transform::getIdentity());
    +
    1232
    +
    1244void RTABMAP_CORE_EXPORT savePCDWords(
    +
    1245 const std::string & fileName,
    +
    1246 const std::multimap<int, cv::Point3f> & words,
    +
    1247 const Transform & transform = Transform::getIdentity());
    +
    1248
    +
    1259cv::Mat RTABMAP_CORE_EXPORT loadBINScan(const std::string & fileName);
    +
    1268pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT loadBINCloud(const std::string & fileName);
    +
    1277RTABMAP_DEPRECATED pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT loadBINCloud(const std::string & fileName, int dim);
    +
    1278
    +
    1289LaserScan RTABMAP_CORE_EXPORT loadScan(const std::string & path);
    +
    1290
    +
    1304RTABMAP_DEPRECATED pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT loadCloud(
    +
    1305 const std::string & path,
    +
    1306 const Transform & transform = Transform::getIdentity(),
    +
    1307 int downsampleStep = 1,
    +
    1308 float voxelSize = 0.0f);
    +
    1309
    +
    1341LaserScan RTABMAP_CORE_EXPORT deskew(
    +
    1342 const LaserScan & input,
    +
    1343 double inputStamp,
    +
    1344 const rtabmap::Transform & velocity);
    +
    1345
    +
    1346} // namespace util3d
    +
    1347} // namespace rtabmap
    +
    1348
    +
    1349POINT_CLOUD_REGISTER_POINT_STRUCT(rtabmap::PointXYZIRT,
    +
    1350 (float, x, x)
    +
    1351 (float, y, y)
    +
    1352 (float, z, z)
    +
    1353 (float, intensity, intensity)
    +
    1354 (std::uint16_t, ring, ring)
    +
    1355 (float, time, time)
    +
    1356)
    +
    1357
    +
    1358#include "rtabmap/core/impl/util3d.hpp"
    +
    1359
    +
    1360#endif /* UTIL3D_H_ */
    +
    Represents a pinhole camera model containing intrinsic and extrinsic parameters, used for projection,...
    Definition CameraModel.h:53
    +
    Represents 2D or 3D laser scan data with support for multiple point data formats.
    Definition LaserScan.h:46
    + +
    Container class for all sensor data captured at a specific time.
    Definition SensorData.h:97
    +
    A class representing a calibrated stereo camera system.
    +
    Represents a 3D rigid body transformation (rotation + translation).
    Definition Transform.h:53
    +
    static Transform getIdentity()
    Returns identity transform.
    +
    LaserScan RTABMAP_CORE_EXPORT laserScan2dFromPointCloud(const pcl::PointCloud< pcl::PointXYZ > &cloud, const Transform &transform=Transform(), bool filterNaNs=true)
    PointXYZ → LaserScan::kXY
    +
    LaserScan laserScanFromPointCloud(const PointCloud2T &cloud, bool filterNaNs, bool is2D, const Transform &transform)
    Convert pcl::PCLPointCloud2 to rtabmap::LaserScan with all supported fields (see rtabmap::LaserScan::...
    Definition util3d.hpp:37
    +
    pcl::PCLPointCloud2::Ptr RTABMAP_CORE_EXPORT laserScanToPointCloud2(const LaserScan &laserScan, const Transform &transform=Transform())
    Convert rtabmap::LaserScan to pcl::PCLPointCloud2 with all supported fields (see rtabmap::LaserScan::...
    + +
    This namespace contains 3D point cloud processing utilities.
    Definition util3d.h:58
    +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d_8hpp_source.html b/preview/pr-1492/api/latest/util3d_8hpp_source.html new file mode 100644 index 00000000..4d1cb56e --- /dev/null +++ b/preview/pr-1492/api/latest/util3d_8hpp_source.html @@ -0,0 +1,526 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/impl/util3d.hpp Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d.hpp
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_HPP_
    +
    29#define UTIL3D_HPP_
    +
    30
    +
    31#include <rtabmap/core/util3d_transforms.h>
    +
    32
    +
    33namespace rtabmap{
    +
    34namespace util3d{
    +
    35
    +
    36template<typename PointCloud2T>
    +
    +
    37LaserScan laserScanFromPointCloud(const PointCloud2T & cloud, bool filterNaNs, bool is2D, const Transform & transform)
    +
    38{
    +
    39 if(cloud.data.empty())
    +
    40 {
    +
    41 return LaserScan();
    +
    42 }
    +
    43 //determine the output type
    +
    44 int fieldStates[10] = {0}; // x,y,z,normal_x,normal_y,normal_z,rgb,intensity,time,ring
    +
    45#if PCL_VERSION_COMPARE(>=, 1, 10, 0)
    +
    46 std::uint32_t fieldOffsets[10] = {0};
    +
    47#else
    +
    48 pcl::uint32_t fieldOffsets[10] = {0};
    +
    49#endif
    +
    50 for(unsigned int i=0; i<cloud.fields.size(); ++i)
    +
    51 {
    +
    52 if(cloud.fields[i].name.compare("x") == 0)
    +
    53 {
    +
    54 fieldStates[0] = 1;
    +
    55 fieldOffsets[0] = cloud.fields[i].offset;
    +
    56 }
    +
    57 else if(cloud.fields[i].name.compare("y") == 0)
    +
    58 {
    +
    59 fieldStates[1] = 1;
    +
    60 fieldOffsets[1] = cloud.fields[i].offset;
    +
    61 }
    +
    62 else if(cloud.fields[i].name.compare("z") == 0 && !is2D)
    +
    63 {
    +
    64 fieldStates[2] = 1;
    +
    65 fieldOffsets[2] = cloud.fields[i].offset;
    +
    66 }
    +
    67 else if(cloud.fields[i].name.compare("normal_x") == 0)
    +
    68 {
    +
    69 fieldStates[3] = 1;
    +
    70 fieldOffsets[3] = cloud.fields[i].offset;
    +
    71 }
    +
    72 else if(cloud.fields[i].name.compare("normal_y") == 0)
    +
    73 {
    +
    74 fieldStates[4] = 1;
    +
    75 fieldOffsets[4] = cloud.fields[i].offset;
    +
    76 }
    +
    77 else if(cloud.fields[i].name.compare("normal_z") == 0)
    +
    78 {
    +
    79 fieldStates[5] = 1;
    +
    80 fieldOffsets[5] = cloud.fields[i].offset;
    +
    81 }
    +
    82 else if(cloud.fields[i].name.compare("rgb") == 0 || cloud.fields[i].name.compare("rgba") == 0)
    +
    83 {
    +
    84 fieldStates[6] = 1;
    +
    85 fieldOffsets[6] = cloud.fields[i].offset;
    +
    86 }
    +
    87 else if(cloud.fields[i].name.compare("intensity") == 0)
    +
    88 {
    +
    89 if(cloud.fields[i].datatype != pcl::PCLPointField::FLOAT32)
    +
    90 {
    +
    91 static bool warningShown = false;
    +
    92 if(!warningShown)
    +
    93 {
    +
    94 UWARN("The input scan cloud has an \"intensity\" field "
    +
    95 "but the datatype (%d) is not supported. Intensity will be ignored. "
    +
    96 "This message is only shown once.", cloud.fields[i].datatype);
    +
    97 warningShown = true;
    +
    98 }
    +
    99 continue;
    +
    100 }
    +
    101
    +
    102 fieldStates[7] = 1;
    +
    103 fieldOffsets[7] = cloud.fields[i].offset;
    +
    104 }
    +
    105 else if(cloud.fields[i].name.compare("time") == 0)
    +
    106 {
    +
    107 if(cloud.fields[i].datatype != pcl::PCLPointField::FLOAT32)
    +
    108 {
    +
    109 static bool warningShown = false;
    +
    110 if(!warningShown)
    +
    111 {
    +
    112 UWARN("The input scan cloud has an \"time\" field "
    +
    113 "but the datatype (%d) is not supported. Time will be ignored. "
    +
    114 "This message is only shown once.", cloud.fields[i].datatype);
    +
    115 warningShown = true;
    +
    116 }
    +
    117 continue;
    +
    118 }
    +
    119
    +
    120 fieldStates[8] = 1;
    +
    121 fieldOffsets[8] = cloud.fields[i].offset;
    +
    122 }
    +
    123 else if(cloud.fields[i].name.compare("ring") == 0)
    +
    124 {
    +
    125 if(cloud.fields[i].datatype != pcl::PCLPointField::UINT16)
    +
    126 {
    +
    127 static bool warningShown = false;
    +
    128 if(!warningShown)
    +
    129 {
    +
    130 UWARN("The input scan cloud has an \"ring\" field "
    +
    131 "but the datatype (%d) is not supported. Ring will be ignored. "
    +
    132 "This message is only shown once.", cloud.fields[i].datatype);
    +
    133 warningShown = true;
    +
    134 }
    +
    135 continue;
    +
    136 }
    +
    137
    +
    138 fieldStates[9] = 1;
    +
    139 fieldOffsets[9] = cloud.fields[i].offset;
    +
    140 }
    +
    141 else
    +
    142 {
    +
    143 UDEBUG("Ignoring \"%s\" field", cloud.fields[i].name.c_str());
    +
    144 }
    +
    145 }
    +
    146 if(fieldStates[0]==0 || fieldStates[1]==0)
    +
    147 {
    +
    148 //should have at least x and y set
    +
    149 UERROR("Cloud has not corresponding fields to laser scan!");
    +
    150 return LaserScan();
    +
    151 }
    +
    152
    +
    153 bool hasNormals = fieldStates[3] || fieldStates[4] || fieldStates[5];
    +
    154 bool hasIntensity = fieldStates[7];
    +
    155 bool hasRGB = !hasIntensity&&fieldStates[6];
    +
    156 bool hasTime = hasIntensity&&fieldStates[8];
    +
    157 bool hasRing = hasIntensity&&fieldStates[9];
    +
    158 bool is3D = fieldStates[0] && fieldStates[1] && fieldStates[2];
    +
    159
    +
    160 LaserScan::Format format;
    +
    161 int outputNormalOffset = 0;
    +
    162 if(is3D)
    +
    163 {
    +
    164 if(hasNormals && hasIntensity)
    +
    165 {
    +
    166 format = LaserScan::kXYZINormal;
    +
    167 outputNormalOffset = 4;
    +
    168 }
    +
    169 else if(hasNormals && !hasIntensity && !hasRGB)
    +
    170 {
    +
    171 format = LaserScan::kXYZNormal;
    +
    172 outputNormalOffset = 3;
    +
    173 }
    +
    174 else if(hasNormals && hasRGB)
    +
    175 {
    + +
    177 outputNormalOffset = 4;
    +
    178 }
    +
    179 else if(!hasNormals && hasIntensity)
    +
    180 {
    +
    181 if(hasTime && hasRing)
    +
    182 {
    +
    183 format = LaserScan::kXYZIRT;
    +
    184 }
    +
    185 else if(hasTime)
    +
    186 {
    +
    187 format = LaserScan::kXYZIT;
    +
    188 }
    +
    189 else
    +
    190 {
    +
    191 format = LaserScan::kXYZI;
    +
    192 }
    +
    193 }
    +
    194 else if(!hasNormals && hasRGB)
    +
    195 {
    +
    196 format = LaserScan::kXYZRGB;
    +
    197 }
    +
    198 else
    +
    199 {
    +
    200 format = LaserScan::kXYZ;
    +
    201 }
    +
    202 }
    +
    203 else
    +
    204 {
    +
    205 if(hasNormals && hasIntensity)
    +
    206 {
    +
    207 format = LaserScan::kXYINormal;
    +
    208 outputNormalOffset = 3;
    +
    209 }
    +
    210 else if(hasNormals && !hasIntensity)
    +
    211 {
    +
    212 format = LaserScan::kXYNormal;
    +
    213 outputNormalOffset = 2;
    +
    214 }
    +
    215 else if(!hasNormals && hasIntensity)
    +
    216 {
    +
    217 format = LaserScan::kXYI;
    +
    218 }
    +
    219 else
    +
    220 {
    +
    221 format = LaserScan::kXY;
    +
    222 }
    +
    223 }
    +
    224
    +
    225 UASSERT(cloud.data.size()/cloud.point_step == (uint32_t)cloud.height*cloud.width);
    +
    226 cv::Mat laserScan = cv::Mat(1, (int)cloud.data.size()/cloud.point_step, CV_32FC(LaserScan::channels(format)));
    +
    227
    +
    228 bool transformValid = !transform.isNull() && !transform.isIdentity();
    +
    229 Transform transformRot;
    +
    230 if(transformValid)
    +
    231 {
    +
    232 transformRot = transform.rotation();
    +
    233 }
    +
    234 int oi=0;
    +
    235 UASSERT(cloud.height == 1 || cloud.row_step != 0);
    +
    236 for (uint32_t row = 0; row < (uint32_t)cloud.height; ++row)
    +
    237 {
    +
    238 const uint8_t* row_data = &cloud.data[row * cloud.row_step];
    +
    239 for (uint32_t col = 0; col < (uint32_t)cloud.width; ++col)
    +
    240 {
    +
    241 const uint8_t* msg_data = row_data + col * cloud.point_step;
    +
    242
    +
    243 float * ptr = laserScan.ptr<float>(0, oi);
    +
    244
    +
    245 bool valid = true;
    +
    246 if(laserScan.channels() == 2)
    +
    247 {
    +
    248 ptr[0] = *(float*)(msg_data + fieldOffsets[0]);
    +
    249 ptr[1] = *(float*)(msg_data + fieldOffsets[1]);
    +
    250 valid = uIsFinite(ptr[0]) && uIsFinite(ptr[1]);
    +
    251 }
    +
    252 else if(laserScan.channels() == 3)
    +
    253 {
    +
    254 ptr[0] = *(float*)(msg_data + fieldOffsets[0]);
    +
    255 ptr[1] = *(float*)(msg_data + fieldOffsets[1]);
    +
    256 if(format == LaserScan::kXYI)
    +
    257 {
    +
    258 ptr[2] = *(float*)(msg_data + fieldOffsets[7]);
    +
    259 }
    +
    260 else // XYZ
    +
    261 {
    +
    262 ptr[2] = *(float*)(msg_data + fieldOffsets[2]);
    +
    263 valid = uIsFinite(ptr[0]) && uIsFinite(ptr[1]) && uIsFinite(ptr[2]);
    +
    264 }
    +
    265 }
    +
    266 else if(laserScan.channels() == 4)
    +
    267 {
    +
    268 ptr[0] = *(float*)(msg_data + fieldOffsets[0]);
    +
    269 ptr[1] = *(float*)(msg_data + fieldOffsets[1]);
    +
    270 ptr[2] = *(float*)(msg_data + fieldOffsets[2]);
    +
    271 if(format == LaserScan::kXYZI)
    +
    272 {
    +
    273 ptr[3] = *(float*)(msg_data + fieldOffsets[7]);
    +
    274 }
    +
    275 else // XYZRGB
    +
    276 {
    +
    277#if PCL_VERSION_COMPARE(>=, 1, 10, 0)
    +
    278 std::uint8_t b=*(msg_data + fieldOffsets[6]);
    +
    279 std::uint8_t g=*(msg_data + fieldOffsets[6]+1);
    +
    280 std::uint8_t r=*(msg_data + fieldOffsets[6]+2);
    +
    281#else
    +
    282 pcl::uint8_t b=*(msg_data + fieldOffsets[6]);
    +
    283 pcl::uint8_t g=*(msg_data + fieldOffsets[6]+1);
    +
    284 pcl::uint8_t r=*(msg_data + fieldOffsets[6]+2);
    +
    285#endif
    +
    286 int * ptrInt = (int*)ptr;
    +
    287 ptrInt[3] = int(b) | (int(g) << 8) | (int(r) << 16);
    +
    288 }
    +
    289 valid = uIsFinite(ptr[0]) && uIsFinite(ptr[1]) && uIsFinite(ptr[2]);
    +
    290 }
    +
    291 else if(laserScan.channels() == 5)
    +
    292 {
    +
    293 ptr[0] = *(float*)(msg_data + fieldOffsets[0]);
    +
    294 ptr[1] = *(float*)(msg_data + fieldOffsets[1]);
    +
    295 if(format == LaserScan::kXYZIT)
    +
    296 {
    +
    297 ptr[2] = *(float*)(msg_data + fieldOffsets[2]);
    +
    298 ptr[3] = *(float*)(msg_data + fieldOffsets[7]);
    +
    299 ptr[4] = *(float*)(msg_data + fieldOffsets[8]);
    +
    300 }
    +
    301 else // kXYNormal
    +
    302 {
    +
    303 ptr[2] = *(float*)(msg_data + fieldOffsets[3]);
    +
    304 ptr[3] = *(float*)(msg_data + fieldOffsets[4]);
    +
    305 ptr[4] = *(float*)(msg_data + fieldOffsets[5]);
    +
    306 }
    +
    307 valid = uIsFinite(ptr[0]) && uIsFinite(ptr[1]) && uIsFinite(ptr[2]) && uIsFinite(ptr[3]) && uIsFinite(ptr[4]);
    +
    308 }
    +
    309 else if(laserScan.channels() == 6)
    +
    310 {
    +
    311 ptr[0] = *(float*)(msg_data + fieldOffsets[0]);
    +
    312 ptr[1] = *(float*)(msg_data + fieldOffsets[1]);
    +
    313 if(format == LaserScan::kXYZIRT)
    +
    314 {
    +
    315 ptr[2] = *(float*)(msg_data + fieldOffsets[2]);
    +
    316 ptr[3] = *(float*)(msg_data + fieldOffsets[7]);
    +
    317 ptr[4] = float(*(unsigned short*)(msg_data + fieldOffsets[9])); // Convert 16U to float
    +
    318 ptr[5] = *(float*)(msg_data + fieldOffsets[8]);
    +
    319 }
    +
    320 else // with normal
    +
    321 {
    +
    322 if(format == LaserScan::kXYINormal)
    +
    323 {
    +
    324 ptr[2] = *(float*)(msg_data + fieldOffsets[7]);
    +
    325 }
    +
    326 else // XYZNormal
    +
    327 {
    +
    328 ptr[2] = *(float*)(msg_data + fieldOffsets[2]);
    +
    329 }
    +
    330 ptr[3] = *(float*)(msg_data + fieldOffsets[3]);
    +
    331 ptr[4] = *(float*)(msg_data + fieldOffsets[4]);
    +
    332 ptr[5] = *(float*)(msg_data + fieldOffsets[5]);
    +
    333 }
    +
    334 valid = uIsFinite(ptr[0]) && uIsFinite(ptr[1]) && uIsFinite(ptr[2]) && uIsFinite(ptr[3]) && uIsFinite(ptr[4]) && uIsFinite(ptr[5]);
    +
    335 }
    +
    336 else if(laserScan.channels() == 7)
    +
    337 {
    +
    338 ptr[0] = *(float*)(msg_data + fieldOffsets[0]);
    +
    339 ptr[1] = *(float*)(msg_data + fieldOffsets[1]);
    +
    340 ptr[2] = *(float*)(msg_data + fieldOffsets[2]);
    +
    341 if(format == LaserScan::kXYZINormal)
    +
    342 {
    +
    343 ptr[3] = *(float*)(msg_data + fieldOffsets[7]);
    +
    344 }
    +
    345 else // XYZRGBNormal
    +
    346 {
    +
    347#if PCL_VERSION_COMPARE(>=, 1, 10, 0)
    +
    348 std::uint8_t b=*(msg_data + fieldOffsets[6]);
    +
    349 std::uint8_t g=*(msg_data + fieldOffsets[6]+1);
    +
    350 std::uint8_t r=*(msg_data + fieldOffsets[6]+2);
    +
    351#else
    +
    352 pcl::uint8_t b=*(msg_data + fieldOffsets[6]);
    +
    353 pcl::uint8_t g=*(msg_data + fieldOffsets[6]+1);
    +
    354 pcl::uint8_t r=*(msg_data + fieldOffsets[6]+2);
    +
    355#endif
    +
    356 int * ptrInt = (int*)ptr;
    +
    357 ptrInt[3] = int(b) | (int(g) << 8) | (int(r) << 16);
    +
    358 }
    +
    359 ptr[4] = *(float*)(msg_data + fieldOffsets[3]);
    +
    360 ptr[5] = *(float*)(msg_data + fieldOffsets[4]);
    +
    361 ptr[6] = *(float*)(msg_data + fieldOffsets[5]);
    +
    362 valid = uIsFinite(ptr[0]) && uIsFinite(ptr[1]) && uIsFinite(ptr[2]) && uIsFinite(ptr[4]) && uIsFinite(ptr[5]) && uIsFinite(ptr[6]);
    +
    363 }
    +
    364 else
    +
    365 {
    +
    366 UFATAL("Cannot handle as many channels (%d)!", laserScan.channels());
    +
    367 }
    +
    368
    +
    369 if(!filterNaNs || valid)
    +
    370 {
    +
    371 if(valid && transformValid)
    +
    372 {
    +
    373 cv::Point3f pt = util3d::transformPoint(cv::Point3f(ptr[0], ptr[1], is3D?ptr[3]:0), transform);
    +
    374 ptr[0] = pt.x;
    +
    375 ptr[1] = pt.y;
    +
    376 if(is3D)
    +
    377 {
    +
    378 ptr[2] = pt.z;
    +
    379 }
    +
    380 if(hasNormals)
    +
    381 {
    +
    382 pt = util3d::transformPoint(cv::Point3f(ptr[outputNormalOffset], ptr[outputNormalOffset+1], ptr[outputNormalOffset+2]), transformRot);
    +
    383 ptr[outputNormalOffset] = pt.x;
    +
    384 ptr[outputNormalOffset+1] = pt.y;
    +
    385 ptr[outputNormalOffset+2] = pt.z;
    +
    386 }
    +
    387 }
    +
    388
    +
    389 ++oi;
    +
    390 }
    +
    391 }
    +
    392 }
    +
    393 if(oi == 0)
    +
    394 {
    +
    395 return LaserScan();
    +
    396 }
    +
    397 return LaserScan(laserScan(cv::Range::all(), cv::Range(0,oi)), 0, 0, format);
    +
    398}
    +
    +
    399
    +
    400}
    +
    401}
    +
    402
    +
    403#endif /* UTIL3D_HPP_ */
    +
    #define UERROR(...)
    Definition ULogger.h:62
    +
    #define UDEBUG(...)
    Definition ULogger.h:59
    +
    #define UFATAL(...)
    Definition ULogger.h:63
    +
    #define UASSERT(condition)
    Definition ULogger.h:66
    +
    #define UWARN(...)
    Definition ULogger.h:61
    +
    bool uIsFinite(const T &value)
    Definition UMath.h:53
    +
    Represents 2D or 3D laser scan data with support for multiple point data formats.
    Definition LaserScan.h:46
    +
    Format
    Enumeration of possible formats for laser scan data.
    Definition LaserScan.h:55
    + + + + + + + + + + + + +
    Represents a 3D rigid body transformation (rotation + translation).
    Definition Transform.h:53
    +
    bool isNull() const
    Checks whether the transform is null (all zeros).
    +
    bool isIdentity() const
    Checks whether the transform is identity.
    +
    Transform rotation() const
    Returns only the rotation component.
    +
    LaserScan laserScanFromPointCloud(const PointCloud2T &cloud, bool filterNaNs, bool is2D, const Transform &transform)
    Convert pcl::PCLPointCloud2 to rtabmap::LaserScan with all supported fields (see rtabmap::LaserScan::...
    Definition util3d.hpp:37
    +
    cv::Point3f RTABMAP_CORE_EXPORT transformPoint(const cv::Point3f &pt, const Transform &transform)
    Transforms cv::Point3f point type.
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__correspondences_8h_source.html b/preview/pr-1492/api/latest/util3d__correspondences_8h_source.html new file mode 100644 index 00000000..90231576 --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__correspondences_8h_source.html @@ -0,0 +1,209 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util3d_correspondences.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_correspondences.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_CORRESPONDENCES_H_
    +
    29#define UTIL3D_CORRESPONDENCES_H_
    +
    30
    +
    31#include <rtabmap/core/rtabmap_core_export.h>
    +
    32
    +
    33#include <pcl/point_cloud.h>
    +
    34#include <pcl/point_types.h>
    +
    35#include <opencv2/core/version.hpp>
    +
    36#if CV_MAJOR_VERSION < 5
    +
    37#include <opencv2/features2d/features2d.hpp>
    +
    38#else
    +
    39#include <opencv2/features.hpp>
    +
    40#endif
    +
    41#include <set>
    +
    42#include <map>
    +
    43#include <list>
    +
    44
    +
    45namespace rtabmap
    +
    46{
    +
    47
    +
    48namespace util3d
    +
    49{
    +
    50
    +
    69void RTABMAP_CORE_EXPORT extractXYZCorrespondences(const std::multimap<int, pcl::PointXYZ> & words1,
    +
    70 const std::multimap<int, pcl::PointXYZ> & words2,
    +
    71 pcl::PointCloud<pcl::PointXYZ> & cloud1,
    +
    72 pcl::PointCloud<pcl::PointXYZ> & cloud2);
    +
    73
    +
    95void RTABMAP_CORE_EXPORT extractXYZCorrespondencesRANSAC(const std::multimap<int, pcl::PointXYZ> & words1,
    +
    96 const std::multimap<int, pcl::PointXYZ> & words2,
    +
    97 pcl::PointCloud<pcl::PointXYZ> & cloud1,
    +
    98 pcl::PointCloud<pcl::PointXYZ> & cloud2);
    +
    99
    +
    126void RTABMAP_CORE_EXPORT extractXYZCorrespondences(const std::list<std::pair<cv::Point2f, cv::Point2f> > & correspondences,
    +
    127 const cv::Mat & depthImage1,
    +
    128 const cv::Mat & depthImage2,
    +
    129 float cx, float cy,
    +
    130 float fx, float fy,
    +
    131 float maxDepth,
    +
    132 pcl::PointCloud<pcl::PointXYZ> & cloud1,
    +
    133 pcl::PointCloud<pcl::PointXYZ> & cloud2);
    +
    134
    +
    152void RTABMAP_CORE_EXPORT extractXYZCorrespondences(const std::list<std::pair<cv::Point2f, cv::Point2f> > & correspondences,
    +
    153 const pcl::PointCloud<pcl::PointXYZ> & cloud1,
    +
    154 const pcl::PointCloud<pcl::PointXYZ> & cloud2,
    +
    155 pcl::PointCloud<pcl::PointXYZ> & inliers1,
    +
    156 pcl::PointCloud<pcl::PointXYZ> & inliers2);
    +
    169void RTABMAP_CORE_EXPORT extractXYZCorrespondences(const std::list<std::pair<cv::Point2f, cv::Point2f> > & correspondences,
    +
    170 const pcl::PointCloud<pcl::PointXYZRGB> & cloud1,
    +
    171 const pcl::PointCloud<pcl::PointXYZRGB> & cloud2,
    +
    172 pcl::PointCloud<pcl::PointXYZ> & inliers1,
    +
    173 pcl::PointCloud<pcl::PointXYZ> & inliers2);
    +
    174
    +
    186int RTABMAP_CORE_EXPORT countUniquePairs(const std::multimap<int, pcl::PointXYZ> & wordsA,
    +
    187 const std::multimap<int, pcl::PointXYZ> & wordsB);
    +
    188
    +
    207void RTABMAP_CORE_EXPORT filterMaxDepth(pcl::PointCloud<pcl::PointXYZ> & inliers1,
    +
    208 pcl::PointCloud<pcl::PointXYZ> & inliers2,
    +
    209 float maxDepth,
    +
    210 char depthAxis,
    +
    211 bool removeDuplicates);
    +
    212
    +
    229void RTABMAP_CORE_EXPORT findCorrespondences(
    +
    230 const std::multimap<int, cv::KeyPoint> & wordsA,
    +
    231 const std::multimap<int, cv::KeyPoint> & wordsB,
    +
    232 std::list<std::pair<cv::Point2f, cv::Point2f> > & pairs);
    +
    233
    +
    250void RTABMAP_CORE_EXPORT findCorrespondences(
    +
    251 const std::multimap<int, cv::Point3f> & words1,
    +
    252 const std::multimap<int, cv::Point3f> & words2,
    +
    253 std::vector<cv::Point3f> & inliers1,
    +
    254 std::vector<cv::Point3f> & inliers2,
    +
    255 float maxDepth,
    +
    256 std::vector<int> * uniqueCorrespondences = 0);
    +
    257
    +
    273void RTABMAP_CORE_EXPORT findCorrespondences(
    +
    274 const std::map<int, cv::Point3f> & words1,
    +
    275 const std::map<int, cv::Point3f> & words2,
    +
    276 std::vector<cv::Point3f> & inliers1,
    +
    277 std::vector<cv::Point3f> & inliers2,
    +
    278 float maxDepth,
    +
    279 std::vector<int> * correspondences = 0);
    +
    280
    +
    281} // namespace util3d
    +
    282} // namespace rtabmap
    +
    283
    +
    284#endif /* UTIL3D_CORRESPONDENCES_H_ */
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__features_8h_source.html b/preview/pr-1492/api/latest/util3d__features_8h_source.html new file mode 100644 index 00000000..6f0f0139 --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__features_8h_source.html @@ -0,0 +1,193 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util3d_features.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_features.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_FEATURES_H_
    +
    29#define UTIL3D_FEATURES_H_
    +
    30
    +
    31#include <rtabmap/core/rtabmap_core_export.h>
    +
    32
    +
    33#include <opencv2/core/version.hpp>
    +
    34#if CV_MAJOR_VERSION < 5
    +
    35#include <opencv2/calib3d/calib3d.hpp>
    +
    36#else
    +
    37#include <opencv2/calib.hpp>
    +
    38#endif
    +
    39#include <rtabmap/core/Transform.h>
    +
    40#include <rtabmap/core/CameraModel.h>
    +
    41#include <rtabmap/core/StereoCameraModel.h>
    +
    42#include <list>
    +
    43#include <map>
    +
    44
    +
    45namespace rtabmap
    +
    46{
    +
    47
    +
    48namespace util3d
    +
    49{
    +
    50
    +
    75std::vector<cv::Point3f> RTABMAP_CORE_EXPORT generateKeypoints3DDepth(
    +
    76 const std::vector<cv::KeyPoint> & keypoints,
    +
    77 const cv::Mat & depth,
    +
    78 const std::vector<CameraModel> & cameraModels,
    +
    79 float minDepth = 0,
    +
    80 float maxDepth = 0);
    +
    86std::vector<cv::Point3f> RTABMAP_CORE_EXPORT generateKeypoints3DDepth(
    +
    87 const std::vector<cv::KeyPoint> & keypoints,
    +
    88 const cv::Mat & depth,
    +
    89 const CameraModel & cameraModel,
    +
    90 float minDepth = 0,
    +
    91 float maxDepth = 0);
    +
    92
    +
    116std::vector<cv::Point3f> RTABMAP_CORE_EXPORT generateKeypoints3DDisparity(
    +
    117 const std::vector<cv::KeyPoint> & keypoints,
    +
    118 const cv::Mat & disparity,
    +
    119 const StereoCameraModel & stereoCameraModel,
    +
    120 float minDepth = 0,
    +
    121 float maxDepth = 0);
    +
    122
    +
    153std::vector<cv::Point3f> RTABMAP_CORE_EXPORT generateKeypoints3DStereo(
    +
    154 const std::vector<cv::Point2f> & leftCorners,
    +
    155 const std::vector<cv::Point2f> & rightCorners,
    +
    156 const StereoCameraModel & model,
    +
    157 const std::vector<unsigned char> & mask = std::vector<unsigned char>(),
    +
    158 float minDepth = 0,
    +
    159 float maxDepth = 0);
    +
    160
    +
    161std::map<int, cv::Point3f> RTABMAP_CORE_EXPORT generateWords3DMono(
    +
    162 const std::map<int, cv::KeyPoint> & kpts,
    +
    163 const std::map<int, cv::KeyPoint> & previousKpts,
    +
    164 const CameraModel & cameraModel,
    +
    165 Transform & cameraTransform,
    +
    166 float ransacReprojThreshold = 3.0f,
    +
    167 float ransacConfidence = 0.99f,
    +
    168 int varianceMedianRatio = 4,
    +
    169 const std::map<int, cv::Point3f> & refGuess3D = std::map<int, cv::Point3f>(),
    +
    170 double * variance = 0,
    +
    171 std::vector<int> * matchesOut = 0);
    +
    172
    +
    190std::multimap<int, cv::KeyPoint> RTABMAP_CORE_EXPORT aggregate(
    +
    191 const std::list<int> & wordIds,
    +
    192 const std::vector<cv::KeyPoint> & keypoints);
    +
    193
    +
    194} // namespace util3d
    +
    195} // namespace rtabmap
    +
    196
    +
    197#endif /* UTIL3D_FEATURES_H_ */
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__filtering_8h_source.html b/preview/pr-1492/api/latest/util3d__filtering_8h_source.html new file mode 100644 index 00000000..73280e48 --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__filtering_8h_source.html @@ -0,0 +1,945 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util3d_filtering.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_filtering.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_FILTERING_H_
    +
    29#define UTIL3D_FILTERING_H_
    +
    30
    +
    31#include <rtabmap/core/rtabmap_core_export.h>
    +
    32#include <rtabmap/core/Transform.h>
    +
    33#include <pcl/point_cloud.h>
    +
    34#include <pcl/point_types.h>
    +
    35#include <pcl/pcl_base.h>
    +
    36#include <pcl/ModelCoefficients.h>
    +
    37#include <rtabmap/core/LaserScan.h>
    +
    38
    +
    39namespace rtabmap
    +
    40{
    +
    41
    +
    42namespace util3d
    +
    43{
    +
    44
    +
    77LaserScan RTABMAP_CORE_EXPORT commonFiltering(
    +
    78 const LaserScan & scan,
    +
    79 int downsamplingStep,
    +
    80 float rangeMin = 0.0f,
    +
    81 float rangeMax = 0.0f,
    +
    82 float voxelSize = 0.0f,
    +
    83 int normalK = 0,
    +
    84 float normalRadius = 0.0f,
    +
    85 float groundNormalsUp = 0.0f);
    +
    90RTABMAP_DEPRECATED LaserScan RTABMAP_CORE_EXPORT commonFiltering(
    +
    91 const LaserScan & scan,
    +
    92 int downsamplingStep,
    +
    93 float rangeMin,
    +
    94 float rangeMax,
    +
    95 float voxelSize,
    +
    96 int normalK,
    +
    97 float normalRadius,
    +
    98 bool forceGroundNormalsUp);
    +
    99
    +
    116LaserScan RTABMAP_CORE_EXPORT rangeFiltering(
    +
    117 const LaserScan & scan,
    +
    118 float rangeMin,
    +
    119 float rangeMax);
    +
    120
    +
    143pcl::IndicesPtr RTABMAP_CORE_EXPORT rangeFiltering(
    +
    144 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    145 const pcl::IndicesPtr & indices,
    +
    146 float rangeMin,
    +
    147 float rangeMax);
    +
    152pcl::IndicesPtr RTABMAP_CORE_EXPORT rangeFiltering(
    +
    153 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    154 const pcl::IndicesPtr & indices,
    +
    155 float rangeMin,
    +
    156 float rangeMax);
    +
    161pcl::IndicesPtr RTABMAP_CORE_EXPORT rangeFiltering(
    +
    162 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    163 const pcl::IndicesPtr & indices,
    +
    164 float rangeMin,
    +
    165 float rangeMax);
    +
    170pcl::IndicesPtr RTABMAP_CORE_EXPORT rangeFiltering(
    +
    171 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    172 const pcl::IndicesPtr & indices,
    +
    173 float rangeMin,
    +
    174 float rangeMax);
    +
    175
    +
    198void RTABMAP_CORE_EXPORT rangeSplitFiltering(
    +
    199 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    200 const pcl::IndicesPtr & indices,
    +
    201 float range,
    +
    202 pcl::IndicesPtr & closeIndices,
    +
    203 pcl::IndicesPtr & farIndices);
    +
    208void RTABMAP_CORE_EXPORT rangeSplitFiltering(
    +
    209 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    210 const pcl::IndicesPtr & indices,
    +
    211 float range,
    +
    212 pcl::IndicesPtr & closeIndices,
    +
    213 pcl::IndicesPtr & farIndices);
    +
    218void RTABMAP_CORE_EXPORT rangeSplitFiltering(
    +
    219 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    220 const pcl::IndicesPtr & indices,
    +
    221 float range,
    +
    222 pcl::IndicesPtr & closeIndices,
    +
    223 pcl::IndicesPtr & farIndices);
    +
    228void RTABMAP_CORE_EXPORT rangeSplitFiltering(
    +
    229 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    230 const pcl::IndicesPtr & indices,
    +
    231 float range,
    +
    232 pcl::IndicesPtr & closeIndices,
    +
    233 pcl::IndicesPtr & farIndices);
    +
    234
    +
    259LaserScan RTABMAP_CORE_EXPORT downsample(
    +
    260 const LaserScan & cloud,
    +
    261 int step);
    +
    266pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT downsample(
    +
    267 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    268 int step);
    +
    273pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT downsample(
    +
    274 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    275 int step);
    +
    280pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT downsample(
    +
    281 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    282 int step);
    +
    287pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT downsample(
    +
    288 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    289 int step);
    +
    294pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT downsample(
    +
    295 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    296 int step);
    +
    301pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT downsample(
    +
    302 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    303 int step);
    +
    304
    +
    331pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    332 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    333 const pcl::IndicesPtr & indices,
    +
    334 float voxelSize);
    +
    339pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    340 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    341 const pcl::IndicesPtr & indices,
    +
    342 float voxelSize);
    +
    347pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    348 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    349 const pcl::IndicesPtr & indices,
    +
    350 float voxelSize);
    +
    355pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    356 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    357 const pcl::IndicesPtr & indices,
    +
    358 float voxelSize);
    +
    363pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    364 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    365 const pcl::IndicesPtr & indices,
    +
    366 float voxelSize);
    +
    371pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    372 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    373 const pcl::IndicesPtr & indices,
    +
    374 float voxelSize);
    +
    379pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    380 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    381 float voxelSize);
    +
    386pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    387 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    388 float voxelSize);
    +
    393pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    394 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    395 float voxelSize);
    +
    400pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    401 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    402 float voxelSize);
    +
    407pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    408 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    409 float voxelSize);
    +
    414pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT voxelize(
    +
    415 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    416 float voxelSize);
    +
    417
    +
    430inline pcl::PointCloud<pcl::PointXYZ>::Ptr uniformSampling(
    +
    431 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    432 float voxelSize)
    +
    433{
    +
    434 return voxelize(cloud, voxelSize);
    +
    435}
    +
    448inline pcl::PointCloud<pcl::PointXYZRGB>::Ptr uniformSampling(
    +
    449 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    450 float voxelSize)
    +
    451{
    +
    452 return voxelize(cloud, voxelSize);
    +
    453}
    +
    466inline pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr uniformSampling(
    +
    467 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    468 float voxelSize)
    +
    469{
    +
    470 return voxelize(cloud, voxelSize);
    +
    471}
    +
    472
    +
    473
    +
    492pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT randomSampling(
    +
    493 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    494 int samples);
    +
    499pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT randomSampling(
    +
    500 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    501 int samples);
    +
    506pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT randomSampling(
    +
    507 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    508 int samples);
    +
    513pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT randomSampling(
    +
    514 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    515 int samples);
    +
    520pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT randomSampling(
    +
    521 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    522 int samples);
    +
    527pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT randomSampling(
    +
    528 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    529 int samples);
    +
    530
    +
    557pcl::IndicesPtr RTABMAP_CORE_EXPORT passThrough(
    +
    558 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    559 const pcl::IndicesPtr & indices,
    +
    560 const std::string & axis,
    +
    561 float min,
    +
    562 float max,
    +
    563 bool negative = false);
    +
    568pcl::IndicesPtr RTABMAP_CORE_EXPORT passThrough(
    +
    569 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    570 const pcl::IndicesPtr & indices,
    +
    571 const std::string & axis,
    +
    572 float min,
    +
    573 float max,
    +
    574 bool negative = false);
    +
    579pcl::IndicesPtr RTABMAP_CORE_EXPORT passThrough(
    +
    580 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    581 const pcl::IndicesPtr & indices,
    +
    582 const std::string & axis,
    +
    583 float min,
    +
    584 float max,
    +
    585 bool negative = false);
    +
    590pcl::IndicesPtr RTABMAP_CORE_EXPORT passThrough(
    +
    591 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    592 const pcl::IndicesPtr & indices,
    +
    593 const std::string & axis,
    +
    594 float min,
    +
    595 float max,
    +
    596 bool negative = false);
    +
    601pcl::IndicesPtr RTABMAP_CORE_EXPORT passThrough(
    +
    602 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    603 const pcl::IndicesPtr & indices,
    +
    604 const std::string & axis,
    +
    605 float min,
    +
    606 float max,
    +
    607 bool negative = false);
    +
    612pcl::IndicesPtr RTABMAP_CORE_EXPORT passThrough(
    +
    613 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    614 const pcl::IndicesPtr & indices,
    +
    615 const std::string & axis,
    +
    616 float min,
    +
    617 float max,
    +
    618 bool negative = false);
    +
    623pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT passThrough(
    +
    624 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    625 const std::string & axis,
    +
    626 float min,
    +
    627 float max,
    +
    628 bool negative = false);
    +
    633pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT passThrough(
    +
    634 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    635 const std::string & axis,
    +
    636 float min,
    +
    637 float max,
    +
    638 bool negative = false);
    +
    643pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT passThrough(
    +
    644 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    645 const std::string & axis,
    +
    646 float min,
    +
    647 float max,
    +
    648 bool negative = false);
    +
    653pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT passThrough(
    +
    654 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    655 const std::string & axis,
    +
    656 float min,
    +
    657 float max,
    +
    658 bool negative = false);
    +
    663pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT passThrough(
    +
    664 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    665 const std::string & axis,
    +
    666 float min,
    +
    667 float max,
    +
    668 bool negative = false);
    +
    673pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT passThrough(
    +
    674 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    675 const std::string & axis,
    +
    676 float min,
    +
    677 float max,
    +
    678 bool negative = false);
    +
    679
    +
    705pcl::IndicesPtr RTABMAP_CORE_EXPORT cropBox(
    +
    706 const pcl::PCLPointCloud2::Ptr & cloud,
    +
    707 const pcl::IndicesPtr & indices,
    +
    708 const Eigen::Vector4f & min,
    +
    709 const Eigen::Vector4f & max,
    +
    710 const Transform & transform = Transform::getIdentity(),
    +
    711 bool negative = false);
    +
    716pcl::IndicesPtr RTABMAP_CORE_EXPORT cropBox(
    +
    717 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    718 const pcl::IndicesPtr & indices,
    +
    719 const Eigen::Vector4f & min,
    +
    720 const Eigen::Vector4f & max,
    +
    721 const Transform & transform = Transform::getIdentity(),
    +
    722 bool negative = false);
    +
    727pcl::IndicesPtr RTABMAP_CORE_EXPORT cropBox(
    +
    728 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    729 const pcl::IndicesPtr & indices,
    +
    730 const Eigen::Vector4f & min,
    +
    731 const Eigen::Vector4f & max,
    +
    732 const Transform & transform = Transform::getIdentity(),
    +
    733 bool negative = false);
    +
    738pcl::IndicesPtr RTABMAP_CORE_EXPORT cropBox(
    +
    739 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    740 const pcl::IndicesPtr & indices,
    +
    741 const Eigen::Vector4f & min,
    +
    742 const Eigen::Vector4f & max,
    +
    743 const Transform & transform = Transform::getIdentity(),
    +
    744 bool negative = false);
    +
    749pcl::IndicesPtr RTABMAP_CORE_EXPORT cropBox(
    +
    750 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    751 const pcl::IndicesPtr & indices,
    +
    752 const Eigen::Vector4f & min,
    +
    753 const Eigen::Vector4f & max,
    +
    754 const Transform & transform = Transform::getIdentity(),
    +
    755 bool negative = false);
    +
    760pcl::IndicesPtr RTABMAP_CORE_EXPORT cropBox(
    +
    761 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    762 const pcl::IndicesPtr & indices,
    +
    763 const Eigen::Vector4f & min,
    +
    764 const Eigen::Vector4f & max,
    +
    765 const Transform & transform = Transform::getIdentity(),
    +
    766 bool negative = false);
    +
    771pcl::IndicesPtr RTABMAP_CORE_EXPORT cropBox(
    +
    772 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    773 const pcl::IndicesPtr & indices,
    +
    774 const Eigen::Vector4f & min,
    +
    775 const Eigen::Vector4f & max,
    +
    776 const Transform & transform = Transform::getIdentity(),
    +
    777 bool negative = false);
    +
    782pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT cropBox(
    +
    783 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    784 const Eigen::Vector4f & min,
    +
    785 const Eigen::Vector4f & max,
    +
    786 const Transform & transform = Transform::getIdentity(),
    +
    787 bool negative = false);
    +
    792pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT cropBox(
    +
    793 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    794 const Eigen::Vector4f & min,
    +
    795 const Eigen::Vector4f & max,
    +
    796 const Transform & transform = Transform::getIdentity(),
    +
    797 bool negative = false);
    +
    802pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT cropBox(
    +
    803 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    804 const Eigen::Vector4f & min,
    +
    805 const Eigen::Vector4f & max,
    +
    806 const Transform & transform = Transform::getIdentity(),
    +
    807 bool negative = false);
    +
    812pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT cropBox(
    +
    813 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    814 const Eigen::Vector4f & min,
    +
    815 const Eigen::Vector4f & max,
    +
    816 const Transform & transform = Transform::getIdentity(),
    +
    817 bool negative = false);
    +
    822pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT cropBox(
    +
    823 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    824 const Eigen::Vector4f & min,
    +
    825 const Eigen::Vector4f & max,
    +
    826 const Transform & transform = Transform::getIdentity(),
    +
    827 bool negative = false);
    +
    832pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT cropBox(
    +
    833 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    834 const Eigen::Vector4f & min,
    +
    835 const Eigen::Vector4f & max,
    +
    836 const Transform & transform = Transform::getIdentity(),
    +
    837 bool negative = false);
    +
    838
    +
    873pcl::IndicesPtr RTABMAP_CORE_EXPORT frustumFiltering(
    +
    874 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    875 const pcl::IndicesPtr & indices,
    +
    876 const Transform & cameraPose,
    +
    877 float horizontalFOV,
    +
    878 float verticalFOV,
    +
    879 float nearClipPlaneDistance,
    +
    880 float farClipPlaneDistance,
    +
    881 bool negative = false);
    +
    886pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT frustumFiltering(
    +
    887 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    888 const Transform & cameraPose,
    +
    889 float horizontalFOV,
    +
    890 float verticalFOV,
    +
    891 float nearClipPlaneDistance,
    +
    892 float farClipPlaneDistance,
    +
    893 bool negative = false);
    +
    898pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT frustumFiltering(
    +
    899 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    900 const Transform & cameraPose,
    +
    901 float horizontalFOV,
    +
    902 float verticalFOV,
    +
    903 float nearClipPlaneDistance,
    +
    904 float farClipPlaneDistance,
    +
    905 bool negative = false);
    +
    906
    +
    926pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT removeNaNFromPointCloud(
    +
    927 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud);
    +
    932pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT removeNaNFromPointCloud(
    +
    933 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud);
    +
    938pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT removeNaNFromPointCloud(
    +
    939 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud);
    +
    944pcl::PCLPointCloud2::Ptr RTABMAP_CORE_EXPORT removeNaNFromPointCloud(
    +
    945 const pcl::PCLPointCloud2::Ptr & cloud);
    +
    946
    +
    947
    +
    964pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT removeNaNNormalsFromPointCloud(
    +
    965 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud);
    +
    970pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT removeNaNNormalsFromPointCloud(
    +
    971 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud);
    +
    976pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT removeNaNNormalsFromPointCloud(
    +
    977 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud);
    +
    978
    +
    1005pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1006 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1007 float radiusSearch,
    +
    1008 int minNeighborsInRadius);
    +
    1013pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1014 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    1015 float radiusSearch,
    +
    1016 int minNeighborsInRadius);
    +
    1021pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1022 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1023 float radiusSearch,
    +
    1024 int minNeighborsInRadius);
    +
    1029pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1030 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1031 float radiusSearch,
    +
    1032 int minNeighborsInRadius);
    +
    1037pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1038 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    1039 float radiusSearch,
    +
    1040 int minNeighborsInRadius);
    +
    1045pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1046 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1047 float radiusSearch,
    +
    1048 int minNeighborsInRadius);
    +
    1053pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1054 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1055 const pcl::IndicesPtr & indices,
    +
    1056 float radiusSearch,
    +
    1057 int minNeighborsInRadius);
    +
    1062pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1063 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    1064 const pcl::IndicesPtr & indices,
    +
    1065 float radiusSearch,
    +
    1066 int minNeighborsInRadius);
    +
    1071pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1072 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1073 const pcl::IndicesPtr & indices,
    +
    1074 float radiusSearch,
    +
    1075 int minNeighborsInRadius);
    +
    1080pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1081 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1082 const pcl::IndicesPtr & indices,
    +
    1083 float radiusSearch,
    +
    1084 int minNeighborsInRadius);
    +
    1089pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1090 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    1091 const pcl::IndicesPtr & indices,
    +
    1092 float radiusSearch,
    +
    1093 int minNeighborsInRadius);
    +
    1098pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(
    +
    1099 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1100 const pcl::IndicesPtr & indices,
    +
    1101 float radiusSearch,
    +
    1102 int minNeighborsInRadius);
    +
    1103
    +
    1144pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1145 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1146 const std::vector<int> & viewpointIndices,
    +
    1147 const std::map<int, Transform> & viewpoints,
    +
    1148 float factor=0.01f,
    +
    1149 float neighborScale=2.0f);
    +
    1154pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1155 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    1156 const std::vector<int> & viewpointIndices,
    +
    1157 const std::map<int, Transform> & viewpoints,
    +
    1158 float factor=0.01f,
    +
    1159 float neighborScale=2.0f);
    +
    1164pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1165 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1166 const std::vector<int> & viewpointIndices,
    +
    1167 const std::map<int, Transform> & viewpoints,
    +
    1168 float factor=0.01f,
    +
    1169 float neighborScale=2.0f);
    +
    1174pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1175 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1176 const std::vector<int> & viewpointIndices,
    +
    1177 const std::map<int, Transform> & viewpoints,
    +
    1178 float factor=0.01f,
    +
    1179 float neighborScale=2.0f);
    +
    1184pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1185 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    1186 const std::vector<int> & viewpointIndices,
    +
    1187 const std::map<int, Transform> & viewpoints,
    +
    1188 float factor=0.01f,
    +
    1189 float neighborScale=2.0f);
    +
    1194pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1195 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1196 const std::vector<int> & viewpointIndices,
    +
    1197 const std::map<int, Transform> & viewpoints,
    +
    1198 float factor=0.01f,
    +
    1199 float neighborScale=2.0f);
    +
    1200
    +
    1205pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1206 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1207 const pcl::IndicesPtr & indices,
    +
    1208 const std::vector<int> & viewpointIndices,
    +
    1209 const std::map<int, Transform> & viewpoints,
    +
    1210 float factor=0.01f,
    +
    1211 float neighborScale=2.0f);
    +
    1216pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1217 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    1218 const pcl::IndicesPtr & indices,
    +
    1219 const std::vector<int> & viewpointIndices,
    +
    1220 const std::map<int, Transform> & viewpoints,
    +
    1221 float factor=0.01f,
    +
    1222 float neighborScale=2.0f);
    +
    1227pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1228 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1229 const pcl::IndicesPtr & indices,
    +
    1230 const std::vector<int> & viewpointIndices,
    +
    1231 const std::map<int, Transform> & viewpoints,
    +
    1232 float factor=0.01f,
    +
    1233 float neighborScale=2.0f);
    +
    1238pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1239 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1240 const pcl::IndicesPtr & indices,
    +
    1241 const std::vector<int> & viewpointIndices,
    +
    1242 const std::map<int, Transform> & viewpoints,
    +
    1243 float factor=0.01f,
    +
    1244 float neighborScale=2.0f);
    +
    1249pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1250 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    1251 const pcl::IndicesPtr & indices,
    +
    1252 const std::vector<int> & viewpointIndices,
    +
    1253 const std::map<int, Transform> & viewpoints,
    +
    1254 float factor=0.01f,
    +
    1255 float neighborScale=2.0f);
    +
    1260pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(
    +
    1261 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1262 const pcl::IndicesPtr & indices,
    +
    1263 const std::vector<int> & viewpointIndices,
    +
    1264 const std::map<int, Transform> & viewpoints,
    +
    1265 float factor=0.01f,
    +
    1266 float neighborScale=2.0f);
    +
    1267
    +
    1292pcl::IndicesPtr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1293 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1294 const pcl::IndicesPtr & indices,
    +
    1295 const pcl::PointCloud<pcl::PointXYZ>::Ptr & subtractCloud,
    +
    1296 const pcl::IndicesPtr & subtractIndices,
    +
    1297 float radiusSearch,
    +
    1298 int minNeighborsInRadius = 1);
    +
    1303pcl::IndicesPtr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1304 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1305 const pcl::IndicesPtr & indices,
    +
    1306 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & subtractCloud,
    +
    1307 const pcl::IndicesPtr & subtractIndices,
    +
    1308 float radiusSearch,
    +
    1309 int minNeighborsInRadius = 1);
    +
    1314pcl::IndicesPtr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1315 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    1316 const pcl::IndicesPtr & indices,
    +
    1317 const pcl::PointCloud<pcl::PointNormal>::Ptr & subtractCloud,
    +
    1318 const pcl::IndicesPtr & subtractIndices,
    +
    1319 float radiusSearch,
    +
    1320 float maxAngle = M_PI/4.0f,
    +
    1321 int minNeighborsInRadius = 1);
    +
    1326pcl::IndicesPtr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1327 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1328 const pcl::IndicesPtr & indices,
    +
    1329 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & subtractCloud,
    +
    1330 const pcl::IndicesPtr & subtractIndices,
    +
    1331 float radiusSearch,
    +
    1332 float maxAngle = M_PI/4.0f,
    +
    1333 int minNeighborsInRadius = 1);
    +
    1338pcl::IndicesPtr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1339 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1340 const pcl::IndicesPtr & indices,
    +
    1341 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & subtractCloud,
    +
    1342 const pcl::IndicesPtr & subtractIndices,
    +
    1343 float radiusSearch,
    +
    1344 float maxAngle = M_PI/4.0f,
    +
    1345 int minNeighborsInRadius = 1);
    +
    1350pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1351 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1352 const pcl::PointCloud<pcl::PointXYZ>::Ptr & subtractCloud,
    +
    1353 float radiusSearch,
    +
    1354 int minNeighborsInRadius = 1);
    +
    1359pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1360 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1361 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & subtractCloud,
    +
    1362 float radiusSearch,
    +
    1363 int minNeighborsInRadius = 1);
    +
    1368pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1369 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    1370 const pcl::PointCloud<pcl::PointNormal>::Ptr & subtractCloud,
    +
    1371 float radiusSearch,
    +
    1372 float maxAngle = M_PI/4.0f,
    +
    1373 int minNeighborsInRadius = 1);
    +
    1378pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1379 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1380 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & subtractCloud,
    +
    1381 float radiusSearch,
    +
    1382 float maxAngle = M_PI/4.0f,
    +
    1383 int minNeighborsInRadius = 1);
    +
    1388pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT subtractFiltering(
    +
    1389 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1390 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & subtractCloud,
    +
    1391 float radiusSearch,
    +
    1392 float maxAngle = M_PI/4.0f,
    +
    1393 int minNeighborsInRadius = 1);
    +
    1394
    +
    1416pcl::IndicesPtr RTABMAP_CORE_EXPORT subtractAdaptiveFiltering(
    +
    1417 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1418 const pcl::IndicesPtr & indices,
    +
    1419 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & subtractCloud,
    +
    1420 const pcl::IndicesPtr & subtractIndices,
    +
    1421 float radiusSearchRatio = 0.01,
    +
    1422 int minNeighborsInRadius = 1,
    +
    1423 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0));
    +
    1424
    +
    1452pcl::IndicesPtr RTABMAP_CORE_EXPORT subtractAdaptiveFiltering(
    +
    1453 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1454 const pcl::IndicesPtr & indices,
    +
    1455 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & subtractCloud,
    +
    1456 const pcl::IndicesPtr & subtractIndices,
    +
    1457 float radiusSearchRatio = 0.01,
    +
    1458 float maxAngle = M_PI/4.0f,
    +
    1459 int minNeighborsInRadius = 1,
    +
    1460 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0));
    +
    1461
    +
    1462
    +
    1495pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(
    +
    1496 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1497 float angleMax,
    +
    1498 const Eigen::Vector4f & normal,
    +
    1499 int normalKSearch,
    +
    1500 const Eigen::Vector4f & viewpoint,
    +
    1501 float groundNormalsUp = 0.0f);
    +
    1506pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(
    +
    1507 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1508 float angleMax,
    +
    1509 const Eigen::Vector4f & normal,
    +
    1510 int normalKSearch,
    +
    1511 const Eigen::Vector4f & viewpoint,
    +
    1512 float groundNormalsUp = 0.0f);
    +
    1517pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(
    +
    1518 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1519 const pcl::IndicesPtr & indices,
    +
    1520 float angleMax,
    +
    1521 const Eigen::Vector4f & normal,
    +
    1522 int normalKSearch,
    +
    1523 const Eigen::Vector4f & viewpoint,
    +
    1524 float groundNormalsUp = 0.0f);
    +
    1529pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(
    +
    1530 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1531 const pcl::IndicesPtr & indices,
    +
    1532 float angleMax,
    +
    1533 const Eigen::Vector4f & normal,
    +
    1534 int normalKSearch,
    +
    1535 const Eigen::Vector4f & viewpoint,
    +
    1536 float groundNormalsUp = 0.0f);
    +
    1541pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(
    +
    1542 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    1543 const pcl::IndicesPtr & indices,
    +
    1544 float angleMax,
    +
    1545 const Eigen::Vector4f & normal,
    +
    1546 int normalKSearch,
    +
    1547 const Eigen::Vector4f & viewpoint,
    +
    1548 float groundNormalsUp = 0.0f);
    +
    1553pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(
    +
    1554 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    1555 const pcl::IndicesPtr & indices,
    +
    1556 float angleMax,
    +
    1557 const Eigen::Vector4f & normal,
    +
    1558 int normalKSearch,
    +
    1559 const Eigen::Vector4f & viewpoint,
    +
    1560 float groundNormalsUp = 0.0f);
    +
    1565pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(
    +
    1566 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1567 const pcl::IndicesPtr & indices,
    +
    1568 float angleMax,
    +
    1569 const Eigen::Vector4f & normal,
    +
    1570 int normalKSearch,
    +
    1571 const Eigen::Vector4f & viewpoint,
    +
    1572 float groundNormalsUp = 0.0f);
    +
    1577pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(
    +
    1578 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1579 const pcl::IndicesPtr & indices,
    +
    1580 float angleMax,
    +
    1581 const Eigen::Vector4f & normal,
    +
    1582 int normalKSearch,
    +
    1583 const Eigen::Vector4f & viewpoint,
    +
    1584 float groundNormalsUp = 0.0f);
    +
    1585
    +
    1613std::vector<pcl::IndicesPtr> RTABMAP_CORE_EXPORT extractClusters(
    +
    1614 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1615 float clusterTolerance,
    +
    1616 int minClusterSize,
    +
    1617 int maxClusterSize = std::numeric_limits<int>::max(),
    +
    1618 int * biggestClusterIndex = 0);
    +
    1623std::vector<pcl::IndicesPtr> RTABMAP_CORE_EXPORT extractClusters(
    +
    1624 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1625 float clusterTolerance,
    +
    1626 int minClusterSize,
    +
    1627 int maxClusterSize = std::numeric_limits<int>::max(),
    +
    1628 int * biggestClusterIndex = 0);
    +
    1633std::vector<pcl::IndicesPtr> RTABMAP_CORE_EXPORT extractClusters(
    +
    1634 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1635 const pcl::IndicesPtr & indices,
    +
    1636 float clusterTolerance,
    +
    1637 int minClusterSize,
    +
    1638 int maxClusterSize = std::numeric_limits<int>::max(),
    +
    1639 int * biggestClusterIndex = 0);
    +
    1644std::vector<pcl::IndicesPtr> RTABMAP_CORE_EXPORT extractClusters(
    +
    1645 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    1646 const pcl::IndicesPtr & indices,
    +
    1647 float clusterTolerance,
    +
    1648 int minClusterSize,
    +
    1649 int maxClusterSize = std::numeric_limits<int>::max(),
    +
    1650 int * biggestClusterIndex = 0);
    +
    1655std::vector<pcl::IndicesPtr> RTABMAP_CORE_EXPORT extractClusters(
    +
    1656 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1657 const pcl::IndicesPtr & indices,
    +
    1658 float clusterTolerance,
    +
    1659 int minClusterSize,
    +
    1660 int maxClusterSize = std::numeric_limits<int>::max(),
    +
    1661 int * biggestClusterIndex = 0);
    +
    1666std::vector<pcl::IndicesPtr> RTABMAP_CORE_EXPORT extractClusters(
    +
    1667 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1668 const pcl::IndicesPtr & indices,
    +
    1669 float clusterTolerance,
    +
    1670 int minClusterSize,
    +
    1671 int maxClusterSize = std::numeric_limits<int>::max(),
    +
    1672 int * biggestClusterIndex = 0);
    +
    1677std::vector<pcl::IndicesPtr> RTABMAP_CORE_EXPORT extractClusters(
    +
    1678 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    1679 const pcl::IndicesPtr & indices,
    +
    1680 float clusterTolerance,
    +
    1681 int minClusterSize,
    +
    1682 int maxClusterSize = std::numeric_limits<int>::max(),
    +
    1683 int * biggestClusterIndex = 0);
    +
    1688std::vector<pcl::IndicesPtr> RTABMAP_CORE_EXPORT extractClusters(
    +
    1689 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1690 const pcl::IndicesPtr & indices,
    +
    1691 float clusterTolerance,
    +
    1692 int minClusterSize,
    +
    1693 int maxClusterSize = std::numeric_limits<int>::max(),
    +
    1694 int * biggestClusterIndex = 0);
    +
    1695
    +
    1722pcl::IndicesPtr RTABMAP_CORE_EXPORT extractIndices(
    +
    1723 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1724 const pcl::IndicesPtr & indices,
    +
    1725 bool negative);
    +
    1730pcl::IndicesPtr RTABMAP_CORE_EXPORT extractIndices(
    +
    1731 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    1732 const pcl::IndicesPtr & indices,
    +
    1733 bool negative);
    +
    1738pcl::IndicesPtr RTABMAP_CORE_EXPORT extractIndices(
    +
    1739 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1740 const pcl::IndicesPtr & indices,
    +
    1741 bool negative);
    +
    1746pcl::IndicesPtr RTABMAP_CORE_EXPORT extractIndices(
    +
    1747 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1748 const pcl::IndicesPtr & indices,
    +
    1749 bool negative);
    +
    1754pcl::IndicesPtr RTABMAP_CORE_EXPORT extractIndices(
    +
    1755 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    1756 const pcl::IndicesPtr & indices,
    +
    1757 bool negative);
    +
    1762pcl::IndicesPtr RTABMAP_CORE_EXPORT extractIndices(
    +
    1763 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1764 const pcl::IndicesPtr & indices,
    +
    1765 bool negative);
    +
    1770pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT extractIndices(
    +
    1771 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1772 const pcl::IndicesPtr & indices,
    +
    1773 bool negative,
    +
    1774 bool keepOrganized);
    +
    1779pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT extractIndices(
    +
    1780 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    1781 const pcl::IndicesPtr & indices,
    +
    1782 bool negative,
    +
    1783 bool keepOrganized);
    +
    1788pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT extractIndices(
    +
    1789 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    1790 const pcl::IndicesPtr & indices,
    +
    1791 bool negative,
    +
    1792 bool keepOrganized);
    +
    1797pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT extractIndices(
    +
    1798 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    1799 const pcl::IndicesPtr & indices,
    +
    1800 bool negative,
    +
    1801 bool keepOrganized);
    +
    1806pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT extractIndices(
    +
    1807 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    1808 const pcl::IndicesPtr & indices,
    +
    1809 bool negative,
    +
    1810 bool keepOrganized);
    +
    1811
    +
    1832pcl::IndicesPtr RTABMAP_CORE_EXPORT extractPlane(
    +
    1833 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1834 const pcl::IndicesPtr & indices,
    +
    1835 float distanceThreshold,
    +
    1836 int maxIterations = 100,
    +
    1837 pcl::ModelCoefficients * coefficientsOut = 0);
    +
    1838pcl::IndicesPtr RTABMAP_CORE_EXPORT extractPlane(
    +
    1839 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    1840 float distanceThreshold,
    +
    1841 int maxIterations = 100,
    +
    1842 pcl::ModelCoefficients * coefficientsOut = 0);
    +
    1843
    +
    1844} // namespace util3d
    +
    1845} // namespace rtabmap
    +
    1846
    +
    1847#endif /* UTIL3D_FILTERING_H_ */
    +
    Represents 2D or 3D laser scan data with support for multiple point data formats.
    Definition LaserScan.h:46
    +
    Represents a 3D rigid body transformation (rotation + translation).
    Definition Transform.h:53
    +
    static Transform getIdentity()
    Returns identity transform.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT cropBox(const pcl::PCLPointCloud2::Ptr &cloud, const pcl::IndicesPtr &indices, const Eigen::Vector4f &min, const Eigen::Vector4f &max, const Transform &transform=Transform::getIdentity(), bool negative=false)
    Performs crop box filtering on a point cloud of type pcl::PCLPointCloud2 and returns filtered indices...
    +
    std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT extractClusters(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
    Extract clusters from point cloud of type pcl::PointXYZ.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT extractIndices(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)
    Extract indices from point cloud of type pcl::PointXYZ.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT frustumFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const Transform &cameraPose, float horizontalFOV, float verticalFOV, float nearClipPlaneDistance, float farClipPlaneDistance, bool negative=false)
    Performs frustum filtering on a point cloud of type pcl::PointXYZ and returns filtered indices.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT passThrough(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)
    Performs pass-through filtering on a point cloud of type pcl::PointXYZ and returns filtered indices.
    +
    LaserScan RTABMAP_CORE_EXPORT downsample(const LaserScan &cloud, int step)
    Downsamples a LaserScan.
    +
    void RTABMAP_CORE_EXPORT rangeSplitFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float range, pcl::IndicesPtr &closeIndices, pcl::IndicesPtr &farIndices)
    Splits a point cloud of type pcl::PointXYZ.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
    Point normal filtering for point cloud of type pcl::PointXYZ.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT proportionalRadiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const std::vector< int > &viewpointIndices, const std::map< int, Transform > &viewpoints, float factor=0.01f, float neighborScale=2.0f)
    Proportional radius filtering for point cloud of type pcl::PointXYZ.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT radiusFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float radiusSearch, int minNeighborsInRadius)
    Radius filtering for point cloud of type pcl::PointXYZ.
    +
    pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT randomSampling(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, int samples)
    Performs random sampling on a point cloud of type pcl::PointXYZ.
    +
    pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT removeNaNFromPointCloud(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud)
    Remove NaN points from a point cloud of type pcl::PointXYZ.
    +
    pcl::PointCloud< pcl::PointNormal >::Ptr RTABMAP_CORE_EXPORT removeNaNNormalsFromPointCloud(const pcl::PointCloud< pcl::PointNormal >::Ptr &cloud)
    Removes points with NaN normal values from a point cloud of type pcl::PointNormal.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT subtractFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const pcl::PointCloud< pcl::PointXYZ >::Ptr &subtractCloud, const pcl::IndicesPtr &subtractIndices, float radiusSearch, int minNeighborsInRadius=1)
    Subtract filtering for point cloud of type pcl::PointXYZ, returning filtered indices.
    +
    pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT voxelize(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)
    Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__mapping_8h_source.html b/preview/pr-1492/api/latest/util3d__mapping_8h_source.html new file mode 100644 index 00000000..b9a3c281 --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__mapping_8h_source.html @@ -0,0 +1,302 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util3d_mapping.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_mapping.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_MAPPING_H_
    +
    29#define UTIL3D_MAPPING_H_
    +
    30
    +
    31#include "rtabmap/core/rtabmap_core_export.h"
    +
    32
    +
    33#include <opencv2/core/core.hpp>
    +
    34#include <map>
    +
    35#include <rtabmap/core/Transform.h>
    +
    36#include <pcl/pcl_base.h>
    +
    37#include <pcl/point_cloud.h>
    +
    38#include <pcl/point_types.h>
    +
    39
    +
    40namespace rtabmap
    +
    41{
    +
    42
    +
    43namespace util3d
    +
    44{
    +
    45
    +
    46// Use interface with \"viewpoint\" parameter to make sure the ray tracing origin is from the sensor and not the base.
    +
    47RTABMAP_DEPRECATED void RTABMAP_CORE_EXPORT occupancy2DFromLaserScan(
    +
    48 const cv::Mat & scan, // in /base_link frame
    +
    49 cv::Mat & empty,
    +
    50 cv::Mat & occupied,
    +
    51 float cellSize,
    +
    52 bool unknownSpaceFilled = false,
    +
    53 float scanMaxRange = 0.0f);
    +
    54
    +
    55// Use interface with scanHit/scanNoHit parameters: scanNoHit set to null matrix has the same functionality than this method.
    +
    56RTABMAP_DEPRECATED void RTABMAP_CORE_EXPORT occupancy2DFromLaserScan(
    +
    57 const cv::Mat & scan, // in /base_link frame
    +
    58 const cv::Point3f & viewpoint, // /base_link -> /base_scan
    +
    59 cv::Mat & empty,
    +
    60 cv::Mat & occupied,
    +
    61 float cellSize,
    +
    62 bool unknownSpaceFilled = false,
    +
    63 float scanMaxRange = 0.0f);
    +
    64
    +
    92void RTABMAP_CORE_EXPORT occupancy2DFromLaserScan(
    +
    93 const cv::Mat & scanHit, // in /base_link frame
    +
    94 const cv::Mat & scanNoHit, // in /base_link frame
    +
    95 const cv::Point3f & viewpoint, // /base_link -> /base_scan
    +
    96 cv::Mat & empty,
    +
    97 cv::Mat & occupied,
    +
    98 float cellSize,
    +
    99 bool unknownSpaceFilled = false,
    +
    100 float scanMaxRange = 0.0f); // would be set if unknownSpaceFilled=true
    +
    101
    +
    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,
    +
    141 float cellSize,
    +
    142 float & xMin,
    +
    143 float & yMin,
    +
    144 float minMapSize = 0.0f,
    +
    145 bool erode = false,
    +
    146 float footprintRadius = 0.0f);
    +
    147
    +
    148// Use interface with \"viewpoints\" parameter to make sure the ray tracing origin is from the sensor and not the base.
    +
    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, // in /base_link frame
    +
    151 float cellSize,
    +
    152 bool unknownSpaceFilled,
    +
    153 float & xMin,
    +
    154 float & yMin,
    +
    155 float minMapSize = 0.0f,
    +
    156 float scanMaxRange = 0.0f);
    +
    157
    +
    158// Use interface with cv::Mat scans.
    +
    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, // in /base_link frame
    +
    161 const std::map<int, cv::Point3f > & viewpoints, // /base_link -> /base_scan
    +
    162 float cellSize,
    +
    163 bool unknownSpaceFilled,
    +
    164 float & xMin,
    +
    165 float & yMin,
    +
    166 float minMapSize = 0.0f,
    +
    167 float scanMaxRange = 0.0f);
    +
    168
    +
    204cv::Mat RTABMAP_CORE_EXPORT create2DMap(const std::map<int, Transform> & poses,
    +
    205 const std::map<int, std::pair<cv::Mat, cv::Mat> > & scans, // <id, <hit, no hit> >, in /base_link frame
    +
    206 const std::map<int, cv::Point3f > & viewpoints, // /base_link -> /base_scan
    +
    207 float cellSize,
    +
    208 bool unknownSpaceFilled,
    +
    209 float & xMin,
    +
    210 float & yMin,
    +
    211 float minMapSize = 0.0f,
    +
    212 float scanMaxRange = 0.0f);
    +
    213
    +
    235void RTABMAP_CORE_EXPORT rayTrace(const cv::Point2i & start,
    +
    236 const cv::Point2i & end,
    +
    237 cv::Mat & grid,
    +
    238 bool stopOnObstacle);
    +
    239
    +
    263cv::Mat RTABMAP_CORE_EXPORT convertMap2Image8U(const cv::Mat & map8S, bool pgmFormat = false);
    +
    264
    +
    293cv::Mat RTABMAP_CORE_EXPORT convertImage8U2Map(const cv::Mat & map8U, bool pgmFormat = false);
    +
    294
    +
    312cv::Mat RTABMAP_CORE_EXPORT erodeMap(const cv::Mat & map);
    +
    313
    +
    314// templated methods
    +
    315
    +
    327template<typename PointT>
    +
    328typename pcl::PointCloud<PointT>::Ptr projectCloudOnXYPlane(
    +
    329 const typename pcl::PointCloud<PointT> & cloud);
    +
    330
    +
    331
    +
    362template<typename PointT>
    +
    363void segmentObstaclesFromGround(
    +
    364 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    365 const pcl::IndicesPtr & indices,
    +
    366 pcl::IndicesPtr & ground,
    +
    367 pcl::IndicesPtr & obstacles,
    +
    368 int normalKSearch,
    +
    369 float groundNormalAngle,
    +
    370 float clusterRadius,
    +
    371 int minClusterSize,
    +
    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 PointT>
    +
    382void segmentObstaclesFromGround(
    +
    383 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    384 pcl::IndicesPtr & ground,
    +
    385 pcl::IndicesPtr & obstacles,
    +
    386 int normalKSearch,
    +
    387 float groundNormalAngle,
    +
    388 float clusterRadius,
    +
    389 int minClusterSize,
    +
    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);
    +
    395
    +
    412template<typename PointT>
    +
    413void occupancy2DFromGroundObstacles(
    +
    414 const typename pcl::PointCloud<PointT>::Ptr & groundCloud,
    +
    415 const typename pcl::PointCloud<PointT>::Ptr & obstaclesCloud,
    +
    416 cv::Mat & ground,
    +
    417 cv::Mat & obstacles,
    +
    418 float cellSize);
    +
    423template<typename PointT>
    +
    424void occupancy2DFromGroundObstacles(
    +
    425 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    426 const pcl::IndicesPtr & groundIndices,
    +
    427 const pcl::IndicesPtr & obstaclesIndices,
    +
    428 cv::Mat & ground,
    +
    429 cv::Mat & obstacles,
    +
    430 float cellSize);
    +
    431
    +
    458template<typename PointT>
    +
    459void occupancy2DFromCloud3D(
    +
    460 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    461 const pcl::IndicesPtr & indices,
    +
    462 cv::Mat & ground,
    +
    463 cv::Mat & obstacles,
    +
    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 PointT>
    +
    474void occupancy2DFromCloud3D(
    +
    475 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    476 cv::Mat & ground,
    +
    477 cv::Mat & obstacles,
    +
    478 float cellSize = 0.05f,
    +
    479 float groundNormalAngle = M_PI_4,
    +
    480 int minClusterSize = 20,
    +
    481 bool segmentFlatObstacles = false,
    +
    482 float maxGroundHeight = 0.0f);
    +
    483
    +
    484} // namespace util3d
    +
    485} // namespace rtabmap
    +
    486
    +
    487#include "rtabmap/core/impl/util3d_mapping.hpp"
    +
    488
    +
    489#endif /* UTIL3D_MAPPING_H_ */
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__mapping_8hpp_source.html b/preview/pr-1492/api/latest/util3d__mapping_8hpp_source.html new file mode 100644 index 00000000..6927e836 --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__mapping_8hpp_source.html @@ -0,0 +1,465 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/impl/util3d_mapping.hpp Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_mapping.hpp
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_MAPPING_HPP_
    +
    29#define UTIL3D_MAPPING_HPP_
    +
    30
    +
    31#include <rtabmap/core/util3d_filtering.h>
    +
    32#include <rtabmap/core/util3d.h>
    +
    33#include <pcl/common/common.h>
    +
    34#include <pcl/common/centroid.h>
    +
    35#include <pcl/common/io.h>
    +
    36
    +
    37namespace rtabmap{
    +
    38namespace util3d{
    +
    39
    +
    40template<typename PointT>
    +
    41typename pcl::PointCloud<PointT>::Ptr projectCloudOnXYPlane(
    +
    42 const typename pcl::PointCloud<PointT> & cloud)
    +
    43{
    +
    44 typename pcl::PointCloud<PointT>::Ptr output(new pcl::PointCloud<PointT>);
    +
    45 *output = cloud;
    +
    46 for(unsigned int i=0; i<output->size(); ++i)
    +
    47 {
    +
    48 output->at(i).z = 0;
    +
    49 }
    +
    50 return output;
    +
    51}
    +
    52
    +
    53template<typename PointT>
    +
    54void segmentObstaclesFromGround(
    +
    55 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    56 const typename pcl::IndicesPtr & indices,
    +
    57 pcl::IndicesPtr & ground,
    +
    58 pcl::IndicesPtr & obstacles,
    +
    59 int normalKSearch,
    +
    60 float groundNormalAngle,
    +
    61 float clusterRadius,
    +
    62 int minClusterSize,
    +
    63 bool segmentFlatObstacles,
    +
    64 float maxGroundHeight,
    +
    65 pcl::IndicesPtr * flatObstacles,
    +
    66 const Eigen::Vector4f & viewPoint,
    +
    67 float groundNormalsUp)
    +
    68{
    +
    69 ground.reset(new std::vector<int>);
    +
    70 obstacles.reset(new std::vector<int>);
    +
    71 if(flatObstacles)
    +
    72 {
    +
    73 flatObstacles->reset(new std::vector<int>);
    +
    74 }
    +
    75
    +
    76 if(cloud->size())
    +
    77 {
    +
    78 // Find the ground
    +
    79 pcl::IndicesPtr flatSurfaces = normalFiltering(
    +
    80 cloud,
    +
    81 indices,
    +
    82 groundNormalAngle,
    +
    83 Eigen::Vector4f(0,0,1,0),
    +
    84 normalKSearch,
    +
    85 viewPoint,
    +
    86 groundNormalsUp);
    +
    87
    +
    88 if(flatSurfaces->size() &&
    +
    89 (segmentFlatObstacles || maxGroundHeight != 0.0f || minClusterSize>1))
    +
    90 {
    +
    91 int biggestFlatSurfaceIndex;
    +
    92 std::vector<pcl::IndicesPtr> clusteredFlatSurfaces = extractClusters(
    +
    93 cloud,
    +
    94 flatSurfaces,
    +
    95 clusterRadius,
    +
    96 minClusterSize,
    +
    97 std::numeric_limits<int>::max(),
    +
    98 &biggestFlatSurfaceIndex);
    +
    99
    +
    100 // cluster all surfaces for which the centroid is in the Z-range of the bigger surface
    +
    101 if(clusteredFlatSurfaces.size())
    +
    102 {
    +
    103 Eigen::Vector4f biggestSurfaceMin,biggestSurfaceMax;
    +
    104 if(maxGroundHeight != 0.0f)
    +
    105 {
    +
    106 // Search for biggest surface under max ground height
    +
    107 size_t points = 0;
    +
    108 biggestFlatSurfaceIndex = -1;
    +
    109 for(size_t i=0;i<clusteredFlatSurfaces.size();++i)
    +
    110 {
    +
    111 Eigen::Vector4f min,max;
    +
    112 pcl::getMinMax3D(*cloud, *clusteredFlatSurfaces.at(i), min, max);
    +
    113 if(min[2]<maxGroundHeight && clusteredFlatSurfaces.at(i)->size() > points)
    +
    114 {
    +
    115 points = clusteredFlatSurfaces.at(i)->size();
    +
    116 biggestFlatSurfaceIndex = i;
    +
    117 biggestSurfaceMin = min;
    +
    118 biggestSurfaceMax = max;
    +
    119 }
    +
    120 }
    +
    121 }
    +
    122 else
    +
    123 {
    +
    124 pcl::getMinMax3D(*cloud, *clusteredFlatSurfaces.at(biggestFlatSurfaceIndex), biggestSurfaceMin, biggestSurfaceMax);
    +
    125 }
    +
    126 if(biggestFlatSurfaceIndex>=0)
    +
    127 {
    +
    128 ground = clusteredFlatSurfaces.at(biggestFlatSurfaceIndex);
    +
    129 }
    +
    130
    +
    131 if(!ground->empty() && (maxGroundHeight == 0.0f || biggestSurfaceMin[2] < maxGroundHeight))
    +
    132 {
    +
    133 for(unsigned int i=0; i<clusteredFlatSurfaces.size(); ++i)
    +
    134 {
    +
    135 if((int)i!=biggestFlatSurfaceIndex)
    +
    136 {
    +
    137 Eigen::Vector4f centroid(0,0,0,1);
    +
    138 pcl::compute3DCentroid(*cloud, *clusteredFlatSurfaces.at(i), centroid);
    +
    139 if((maxGroundHeight!=0.0f && centroid[2] <= maxGroundHeight) ||
    +
    140 centroid[2] <= biggestSurfaceMax[2] ||
    +
    141 (maxGroundHeight==0.0f && !segmentFlatObstacles))
    +
    142 {
    +
    143 ground = util3d::concatenate(ground, clusteredFlatSurfaces.at(i));
    +
    144 }
    +
    145 else if(flatObstacles)
    +
    146 {
    +
    147 *flatObstacles = util3d::concatenate(*flatObstacles, clusteredFlatSurfaces.at(i));
    +
    148 }
    +
    149 }
    +
    150 }
    +
    151 }
    +
    152 else
    +
    153 {
    +
    154 // reject ground!
    +
    155 ground.reset(new std::vector<int>);
    +
    156 if(flatObstacles)
    +
    157 {
    +
    158 *flatObstacles = flatSurfaces;
    +
    159 }
    +
    160 }
    +
    161 }
    +
    162 }
    +
    163 else
    +
    164 {
    +
    165 ground = flatSurfaces;
    +
    166 }
    +
    167
    +
    168 if(ground->size() != cloud->size())
    +
    169 {
    +
    170 // Remove ground
    +
    171 pcl::IndicesPtr notObstacles = ground;
    +
    172 if(indices->size())
    +
    173 {
    +
    174 notObstacles = util3d::extractIndices(cloud, indices, true);
    +
    175 notObstacles = util3d::concatenate(notObstacles, ground);
    +
    176 }
    +
    177 pcl::IndicesPtr otherStuffIndices = util3d::extractIndices(cloud, notObstacles, true);
    +
    178
    +
    179 // If ground height is set, remove obstacles under it
    +
    180 if(maxGroundHeight != 0.0f)
    +
    181 {
    +
    182 otherStuffIndices = rtabmap::util3d::passThrough(cloud, otherStuffIndices, "z", maxGroundHeight, std::numeric_limits<float>::max());
    +
    183 }
    +
    184
    +
    185 //Cluster remaining stuff (obstacles)
    +
    186 if(otherStuffIndices->size())
    +
    187 {
    +
    188 std::vector<pcl::IndicesPtr> clusteredObstaclesSurfaces = util3d::extractClusters(
    +
    189 cloud,
    +
    190 otherStuffIndices,
    +
    191 clusterRadius,
    +
    192 minClusterSize);
    +
    193
    +
    194 // merge indices
    +
    195 obstacles = util3d::concatenate(clusteredObstaclesSurfaces);
    +
    196 }
    +
    197 }
    +
    198 }
    +
    199}
    +
    200
    +
    201template<typename PointT>
    +
    202void segmentObstaclesFromGround(
    +
    203 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    204 pcl::IndicesPtr & ground,
    +
    205 pcl::IndicesPtr & obstacles,
    +
    206 int normalKSearch,
    +
    207 float groundNormalAngle,
    +
    208 float clusterRadius,
    +
    209 int minClusterSize,
    +
    210 bool segmentFlatObstacles,
    +
    211 float maxGroundHeight,
    +
    212 pcl::IndicesPtr * flatObstacles,
    +
    213 const Eigen::Vector4f & viewPoint,
    +
    214 float groundNormalsUp)
    +
    215{
    +
    216 pcl::IndicesPtr indices(new std::vector<int>);
    +
    217 segmentObstaclesFromGround<PointT>(
    +
    218 cloud,
    +
    219 indices,
    +
    220 ground,
    +
    221 obstacles,
    +
    222 normalKSearch,
    +
    223 groundNormalAngle,
    +
    224 clusterRadius,
    +
    225 minClusterSize,
    +
    226 segmentFlatObstacles,
    +
    227 maxGroundHeight,
    +
    228 flatObstacles,
    +
    229 viewPoint,
    +
    230 groundNormalsUp);
    +
    231}
    +
    232
    +
    233template<typename PointT>
    +
    234void occupancy2DFromGroundObstacles(
    +
    235 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    236 const pcl::IndicesPtr & groundIndices,
    +
    237 const pcl::IndicesPtr & obstaclesIndices,
    +
    238 cv::Mat & ground,
    +
    239 cv::Mat & obstacles,
    +
    240 float cellSize)
    +
    241{
    +
    242 typename pcl::PointCloud<PointT>::Ptr groundCloud(new pcl::PointCloud<PointT>);
    +
    243 typename pcl::PointCloud<PointT>::Ptr obstaclesCloud(new pcl::PointCloud<PointT>);
    +
    244
    +
    245 if(groundIndices->size())
    +
    246 {
    +
    247 pcl::copyPointCloud(*cloud, *groundIndices, *groundCloud);
    +
    248 }
    +
    249
    +
    250 if(obstaclesIndices->size())
    +
    251 {
    +
    252 pcl::copyPointCloud(*cloud, *obstaclesIndices, *obstaclesCloud);
    +
    253 }
    +
    254
    +
    255 occupancy2DFromGroundObstacles<PointT>(
    +
    256 groundCloud,
    +
    257 obstaclesCloud,
    +
    258 ground,
    +
    259 obstacles,
    +
    260 cellSize);
    +
    261}
    +
    262
    +
    263template<typename PointT>
    +
    264void occupancy2DFromGroundObstacles(
    +
    265 const typename pcl::PointCloud<PointT>::Ptr & groundCloud,
    +
    266 const typename pcl::PointCloud<PointT>::Ptr & obstaclesCloud,
    +
    267 cv::Mat & ground,
    +
    268 cv::Mat & obstacles,
    +
    269 float cellSize)
    +
    270{
    +
    271 ground = cv::Mat();
    +
    272 if(groundCloud->size())
    +
    273 {
    +
    274 //project on XY plane
    +
    275 typename pcl::PointCloud<PointT>::Ptr groundCloudProjected;
    +
    276 groundCloudProjected = util3d::projectCloudOnXYPlane(*groundCloud);
    +
    277 //voxelize to grid cell size
    +
    278 groundCloudProjected = util3d::voxelize(groundCloudProjected, cellSize);
    +
    279
    +
    280 ground = cv::Mat(1, (int)groundCloudProjected->size(), CV_32FC2);
    +
    281 for(unsigned int i=0;i<groundCloudProjected->size(); ++i)
    +
    282 {
    +
    283 cv::Vec2f * ptr = ground.ptr<cv::Vec2f>();
    +
    284 ptr[i][0] = groundCloudProjected->at(i).x;
    +
    285 ptr[i][1] = groundCloudProjected->at(i).y;
    +
    286 }
    +
    287 }
    +
    288
    +
    289 obstacles = cv::Mat();
    +
    290 if(obstaclesCloud->size())
    +
    291 {
    +
    292 //project on XY plane
    +
    293 typename pcl::PointCloud<PointT>::Ptr obstaclesCloudProjected;
    +
    294 obstaclesCloudProjected = util3d::projectCloudOnXYPlane(*obstaclesCloud);
    +
    295 //voxelize to grid cell size
    +
    296 obstaclesCloudProjected = util3d::voxelize(obstaclesCloudProjected, cellSize);
    +
    297
    +
    298 obstacles = cv::Mat(1, (int)obstaclesCloudProjected->size(), CV_32FC2);
    +
    299 for(unsigned int i=0;i<obstaclesCloudProjected->size(); ++i)
    +
    300 {
    +
    301 cv::Vec2f * ptr = obstacles.ptr<cv::Vec2f>();
    +
    302 ptr[i][0] = obstaclesCloudProjected->at(i).x;
    +
    303 ptr[i][1] = obstaclesCloudProjected->at(i).y;
    +
    304 }
    +
    305 }
    +
    306}
    +
    307
    +
    308template<typename PointT>
    +
    309void occupancy2DFromCloud3D(
    +
    310 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    311 const pcl::IndicesPtr & indices,
    +
    312 cv::Mat & ground,
    +
    313 cv::Mat & obstacles,
    +
    314 float cellSize,
    +
    315 float groundNormalAngle,
    +
    316 int minClusterSize,
    +
    317 bool segmentFlatObstacles,
    +
    318 float maxGroundHeight)
    +
    319{
    +
    320 if(cloud->size() == 0)
    +
    321 {
    +
    322 return;
    +
    323 }
    +
    324 pcl::IndicesPtr groundIndices, obstaclesIndices;
    +
    325
    +
    326 segmentObstaclesFromGround<PointT>(
    +
    327 cloud,
    +
    328 indices,
    +
    329 groundIndices,
    +
    330 obstaclesIndices,
    +
    331 20,
    +
    332 groundNormalAngle,
    +
    333 cellSize*2.0f,
    +
    334 minClusterSize,
    +
    335 segmentFlatObstacles,
    +
    336 maxGroundHeight);
    +
    337
    +
    338 occupancy2DFromGroundObstacles<PointT>(
    +
    339 cloud,
    +
    340 groundIndices,
    +
    341 obstaclesIndices,
    +
    342 ground,
    +
    343 obstacles,
    +
    344 cellSize);
    +
    345}
    +
    346
    +
    347template<typename PointT>
    +
    348void occupancy2DFromCloud3D(
    +
    349 const typename pcl::PointCloud<PointT>::Ptr & cloud,
    +
    350 cv::Mat & ground,
    +
    351 cv::Mat & obstacles,
    +
    352 float cellSize,
    +
    353 float groundNormalAngle,
    +
    354 int minClusterSize,
    +
    355 bool segmentFlatObstacles,
    +
    356 float maxGroundHeight)
    +
    357{
    +
    358 pcl::IndicesPtr indices(new std::vector<int>);
    +
    359 occupancy2DFromCloud3D<PointT>(cloud, indices, ground, obstacles, cellSize, groundNormalAngle, minClusterSize, segmentFlatObstacles, maxGroundHeight);
    +
    360}
    +
    361
    +
    362}
    +
    363}
    +
    364
    +
    365#endif /* UTIL3D_MAPPING_HPP_ */
    +
    std::vector< pcl::IndicesPtr > RTABMAP_CORE_EXPORT extractClusters(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize=std::numeric_limits< int >::max(), int *biggestClusterIndex=0)
    Extract clusters from point cloud of type pcl::PointXYZ.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT extractIndices(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, bool negative)
    Extract indices from point cloud of type pcl::PointXYZ.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT passThrough(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, const std::string &axis, float min, float max, bool negative=false)
    Performs pass-through filtering on a point cloud of type pcl::PointXYZ and returns filtered indices.
    +
    pcl::IndicesPtr RTABMAP_CORE_EXPORT normalFiltering(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, float angleMax, const Eigen::Vector4f &normal, int normalKSearch, const Eigen::Vector4f &viewpoint, float groundNormalsUp=0.0f)
    Point normal filtering for point cloud of type pcl::PointXYZ.
    +
    pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT voxelize(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const pcl::IndicesPtr &indices, float voxelSize)
    Performs voxel grid downsampling on a point cloud of type pcl::PointXYZ on provided indices.
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__motion__estimation_8h_source.html b/preview/pr-1492/api/latest/util3d__motion__estimation_8h_source.html new file mode 100644 index 00000000..c8f1b67d --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__motion__estimation_8h_source.html @@ -0,0 +1,227 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util3d_motion_estimation.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_motion_estimation.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_MOTION_ESTIMATION_H_
    +
    29#define UTIL3D_MOTION_ESTIMATION_H_
    +
    30
    +
    31#include <rtabmap/core/rtabmap_core_export.h>
    +
    32
    +
    33#include <rtabmap/core/Transform.h>
    +
    34#include <rtabmap/core/CameraModel.h>
    +
    35
    +
    36namespace rtabmap
    +
    37{
    +
    38
    +
    39namespace util3d
    +
    40{
    +
    41
    +
    100void RTABMAP_CORE_EXPORT setRansacDeterministicSeed(bool enable);
    +
    101
    +
    103bool RTABMAP_CORE_EXPORT ransacDeterministicSeedEnabled();
    +
    104
    +
    105Transform RTABMAP_CORE_EXPORT estimateMotion3DTo2D(
    +
    106 const std::map<int, cv::Point3f> & words3A,
    +
    107 const std::map<int, cv::KeyPoint> & words2B,
    +
    108 const CameraModel & cameraModel,
    +
    109 int minInliers = 10,
    +
    110 int iterations = 100,
    +
    111 double reprojError = 5.,
    +
    112 int flagsPnP = 0,
    +
    113 int pnpRefineIterations = 1,
    +
    114 int varianceMedianRatio = 4,
    +
    115 float maxVariance = 0,
    +
    116 const Transform & guess = Transform::getIdentity(),
    +
    117 const std::map<int, cv::Point3f> & words3B = std::map<int, cv::Point3f>(),
    +
    118 cv::Mat * covariance = 0, // mean reproj error if words3B is not set
    +
    119 std::vector<int> * matchesOut = 0,
    +
    120 std::vector<int> * inliersOut = 0,
    +
    121 bool splitLinearCovarianceComponents = false);
    +
    122
    +
    157Transform RTABMAP_CORE_EXPORT estimateMotion3DTo2D(
    +
    158 const std::map<int, cv::Point3f> & words3A,
    +
    159 const std::map<int, cv::KeyPoint> & words2B,
    +
    160 const std::vector<CameraModel> & cameraModels,
    +
    161 unsigned int samplingPolicy,
    +
    162 int minInliers,
    +
    163 int iterations,
    +
    164 double reprojError,
    +
    165 int flagsPnP,
    +
    166 int refineIterations,
    +
    167 int varianceMedianRatio,
    +
    168 float maxVariance,
    +
    169 const Transform & guess,
    +
    170 const std::map<int, cv::Point3f> & words3B,
    +
    171 cv::Mat * covariance,
    +
    172 std::vector<std::vector<int> > * matchesOut,
    +
    173 std::vector<std::vector<int> > * inliersOut,
    +
    174 bool splitLinearCovarianceComponents);
    +
    179Transform RTABMAP_CORE_EXPORT estimateMotion3DTo2D(
    +
    180 const std::map<int, cv::Point3f> & words3A,
    +
    181 const std::map<int, cv::KeyPoint> & words2B,
    +
    182 const std::vector<CameraModel> & cameraModels,
    +
    183 unsigned int samplingPolicy = 0, // 0=AUTO, 1=ANY, 2=HOMOGENEOUS
    +
    184 int minInliers = 10,
    +
    185 int iterations = 100,
    +
    186 double reprojError = 5.,
    +
    187 int flagsPnP = 0,
    +
    188 int pnpRefineIterations = 1,
    +
    189 int varianceMedianRatio = 4,
    +
    190 float maxVariance = 0,
    +
    191 const Transform & guess = Transform::getIdentity(),
    +
    192 const std::map<int, cv::Point3f> & words3B = std::map<int, cv::Point3f>(),
    +
    193 cv::Mat * covariance = 0, // mean reproj error if words3B is not set
    +
    194 std::vector<int> * matchesOut = 0,
    +
    195 std::vector<int> * inliersOut = 0,
    +
    196 bool splitLinearCovarianceComponents = false);
    +
    197
    +
    219Transform RTABMAP_CORE_EXPORT estimateMotion3DTo3D(
    +
    220 const std::map<int, cv::Point3f> & words3A,
    +
    221 const std::map<int, cv::Point3f> & words3B,
    +
    222 int minInliers = 10,
    +
    223 double inliersDistance = 0.1,
    +
    224 int iterations = 100,
    +
    225 int refineIterations = 5,
    +
    226 cv::Mat * covariance = 0,
    +
    227 std::vector<int> * matchesOut = 0,
    +
    228 std::vector<int> * inliersOut = 0);
    +
    229
    +
    260void RTABMAP_CORE_EXPORT solvePnPRansac(
    +
    261 const std::vector<cv::Point3f> & objectPoints,
    +
    262 const std::vector<cv::Point2f> & imagePoints,
    +
    263 const cv::Mat & cameraMatrix,
    +
    264 const cv::Mat & distCoeffs,
    +
    265 cv::Mat & rvec,
    +
    266 cv::Mat & tvec,
    +
    267 bool useExtrinsicGuess,
    +
    268 int iterationsCount,
    +
    269 float reprojectionError,
    +
    270 int minInliersCount,
    +
    271 std::vector<int> & inliers,
    +
    272 int flags,
    +
    273 int refineIterations = 1,
    +
    274 float refineSigma = 3.0f);
    +
    275
    +
    276} // namespace util3d
    +
    277} // namespace rtabmap
    +
    278
    +
    279#endif /* UTIL3D_TRANSFORMS_H_ */
    +
    static Transform getIdentity()
    Returns identity transform.
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__registration_8h_source.html b/preview/pr-1492/api/latest/util3d__registration_8h_source.html new file mode 100644 index 00000000..18a6b467 --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__registration_8h_source.html @@ -0,0 +1,239 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util3d_registration.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_registration.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_REGISTRATION_H_
    +
    29#define UTIL3D_REGISTRATION_H_
    +
    30
    +
    31#include <rtabmap/core/rtabmap_core_export.h>
    +
    32
    +
    33#include <pcl/point_cloud.h>
    +
    34#include <pcl/point_types.h>
    +
    35#include <rtabmap/core/Transform.h>
    +
    36#include <opencv2/core/core.hpp>
    +
    37
    +
    38namespace rtabmap
    +
    39{
    +
    40
    +
    41namespace util3d
    +
    42{
    +
    43
    +
    44int RTABMAP_CORE_EXPORT getCorrespondencesCount(const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_source,
    +
    45 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_target,
    +
    46 float maxDistance);
    +
    47
    +
    68Transform RTABMAP_CORE_EXPORT transformFromXYZCorrespondencesSVD(
    +
    69 const pcl::PointCloud<pcl::PointXYZ> & cloud1,
    +
    70 const pcl::PointCloud<pcl::PointXYZ> & cloud2);
    +
    71
    +
    101Transform RTABMAP_CORE_EXPORT transformFromXYZCorrespondences(
    +
    102 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud1,
    +
    103 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud2,
    +
    104 double inlierThreshold = 0.02,
    +
    105 int iterations = 100,
    +
    106 int refineModelIterations = 10,
    +
    107 double refineModelSigma = 3.0,
    +
    108 std::vector<int> * inliers = 0,
    +
    109 cv::Mat * variance = 0);
    +
    110
    +
    141void RTABMAP_CORE_EXPORT computeVarianceAndCorrespondences(
    +
    142 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloudA,
    +
    143 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloudB,
    +
    144 double maxCorrespondenceDistance,
    +
    145 double maxCorrespondenceAngle, // <=0 means that we don't care about normal angle difference
    +
    146 double & variance,
    +
    147 int & correspondencesOut,
    +
    148 bool reciprocal);
    +
    153void RTABMAP_CORE_EXPORT computeVarianceAndCorrespondences(
    +
    154 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloudA,
    +
    155 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloudB,
    +
    156 double maxCorrespondenceDistance,
    +
    157 double maxCorrespondenceAngle, // <=0 means that we don't care about normal angle difference
    +
    158 double & variance,
    +
    159 int & correspondencesOut,
    +
    160 bool reciprocal);
    +
    165void RTABMAP_CORE_EXPORT computeVarianceAndCorrespondences(
    +
    166 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloudA,
    +
    167 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloudB,
    +
    168 double maxCorrespondenceDistance,
    +
    169 double & variance,
    +
    170 int & correspondencesOut,
    +
    171 bool reciprocal);
    +
    176void RTABMAP_CORE_EXPORT computeVarianceAndCorrespondences(
    +
    177 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloudA,
    +
    178 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloudB,
    +
    179 double maxCorrespondenceDistance,
    +
    180 double & variance,
    +
    181 int & correspondencesOut,
    +
    182 bool reciprocal);
    +
    183
    +
    209Transform RTABMAP_CORE_EXPORT icp(
    +
    210 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_source,
    +
    211 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_target,
    +
    212 double maxCorrespondenceDistance,
    +
    213 int maximumIterations,
    +
    214 bool & hasConverged,
    +
    215 pcl::PointCloud<pcl::PointXYZ> & cloud_source_registered,
    +
    216 float epsilon = 0.0f,
    +
    217 bool icp2D = false,
    +
    218 float ransacOutlierRatio = 0.0f,
    +
    219 int * iterationsDone = nullptr);
    +
    228Transform RTABMAP_CORE_EXPORT icp(
    +
    229 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloud_source,
    +
    230 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloud_target,
    +
    231 double maxCorrespondenceDistance,
    +
    232 int maximumIterations,
    +
    233 bool & hasConverged,
    +
    234 pcl::PointCloud<pcl::PointXYZI> & cloud_source_registered,
    +
    235 float epsilon = 0.0f,
    +
    236 bool icp2D = false,
    +
    237 float ransacOutlierRatio = 0.0f,
    +
    238 int * iterationsDone = nullptr);
    +
    239
    +
    265Transform RTABMAP_CORE_EXPORT icpPointToPlane(
    +
    266 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloud_source,
    +
    267 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloud_target,
    +
    268 double maxCorrespondenceDistance,
    +
    269 int maximumIterations,
    +
    270 bool & hasConverged,
    +
    271 pcl::PointCloud<pcl::PointNormal> & cloud_source_registered,
    +
    272 float epsilon = 0.0f,
    +
    273 bool icp2D = false,
    +
    274 float ransacOutlierRatio = 0.0f,
    +
    275 int * iterationsDone = nullptr);
    +
    284Transform RTABMAP_CORE_EXPORT icpPointToPlane(
    +
    285 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloud_source,
    +
    286 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloud_target,
    +
    287 double maxCorrespondenceDistance,
    +
    288 int maximumIterations,
    +
    289 bool & hasConverged,
    +
    290 pcl::PointCloud<pcl::PointXYZINormal> & cloud_source_registered,
    +
    291 float epsilon = 0.0f,
    +
    292 bool icp2D = false,
    +
    293 float ransacOutlierRatio = 0.0f,
    +
    294 int * iterationsDone = nullptr);
    +
    295
    +
    296} // namespace util3d
    +
    297} // namespace rtabmap
    +
    298
    +
    299#endif /* UTIL3D_REGISTRATION_H_ */
    +
    Represents a 3D rigid body transformation (rotation + translation).
    Definition Transform.h:53
    +
    void RTABMAP_CORE_EXPORT computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudB, double maxCorrespondenceDistance, double maxCorrespondenceAngle, double &variance, int &correspondencesOut, bool reciprocal)
    Compute with variance and correspondences of pcl::PointNormal point cloud type.
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__surface_8h_source.html b/preview/pr-1492/api/latest/util3d__surface_8h_source.html new file mode 100644 index 00000000..6e989c5f --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__surface_8h_source.html @@ -0,0 +1,647 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util3d_surface.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_surface.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_SURFACE_H_
    +
    29#define UTIL3D_SURFACE_H_
    +
    30
    +
    31#include <rtabmap/core/rtabmap_core_export.h>
    +
    32
    +
    33#include <pcl/PolygonMesh.h>
    +
    34#include <pcl/point_cloud.h>
    +
    35#include <pcl/point_types.h>
    +
    36#include <pcl/TextureMesh.h>
    +
    37#include <pcl/pcl_base.h>
    +
    38#include <rtabmap/core/Transform.h>
    +
    39#include <rtabmap/core/CameraModel.h>
    +
    40#include <rtabmap/core/ProgressState.h>
    +
    41#include <rtabmap/core/LaserScan.h>
    +
    42#include <rtabmap/core/Version.h>
    +
    43#include <set>
    +
    44#include <list>
    +
    45
    +
    46namespace rtabmap
    +
    47{
    +
    48
    +
    49class Memory;
    +
    50class DBDriver;
    +
    51
    +
    52namespace util3d
    +
    53{
    +
    54
    +
    64void RTABMAP_CORE_EXPORT createPolygonIndexes(
    +
    65 const std::vector<pcl::Vertices> & polygons,
    +
    66 int cloudSize,
    +
    67 std::vector<std::set<int> > & neighborPolygons,
    +
    68 std::vector<std::set<int> > & vertexPolygons);
    +
    69
    +
    70std::list<std::list<int> > RTABMAP_CORE_EXPORT clusterPolygons(
    +
    71 const std::vector<std::set<int> > & neighborPolygons,
    +
    72 int minClusterSize = 0);
    +
    73
    +
    74std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT organizedFastMesh(
    +
    75 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    76 double angleTolerance,
    +
    77 bool quad,
    +
    78 int trianglePixelSize,
    +
    79 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0));
    +
    80std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT organizedFastMesh(
    +
    81 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    82 double angleTolerance = M_PI/16,
    +
    83 bool quad=true,
    +
    84 int trianglePixelSize = 2,
    +
    85 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0));
    +
    86std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT organizedFastMesh(
    +
    87 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    88 double angleTolerance = M_PI/16,
    +
    89 bool quad=true,
    +
    90 int trianglePixelSize = 2,
    +
    91 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0));
    +
    92
    +
    93void RTABMAP_CORE_EXPORT appendMesh(
    +
    94 pcl::PointCloud<pcl::PointXYZRGBNormal> & cloudA,
    +
    95 std::vector<pcl::Vertices> & polygonsA,
    +
    96 const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloudB,
    +
    97 const std::vector<pcl::Vertices> & polygonsB);
    +
    98void RTABMAP_CORE_EXPORT appendMesh(
    +
    99 pcl::PointCloud<pcl::PointXYZRGB> & cloudA,
    +
    100 std::vector<pcl::Vertices> & polygonsA,
    +
    101 const pcl::PointCloud<pcl::PointXYZRGB> & cloudB,
    +
    102 const std::vector<pcl::Vertices> & polygonsB);
    +
    103
    +
    104// return map from new to old polygon indices
    +
    105std::vector<int> RTABMAP_CORE_EXPORT filterNotUsedVerticesFromMesh(
    +
    106 const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud,
    +
    107 const std::vector<pcl::Vertices> & polygons,
    +
    108 pcl::PointCloud<pcl::PointXYZRGBNormal> & outputCloud,
    +
    109 std::vector<pcl::Vertices> & outputPolygons);
    +
    110std::vector<int> RTABMAP_CORE_EXPORT filterNotUsedVerticesFromMesh(
    +
    111 const pcl::PointCloud<pcl::PointXYZRGB> & cloud,
    +
    112 const std::vector<pcl::Vertices> & polygons,
    +
    113 pcl::PointCloud<pcl::PointXYZRGB> & outputCloud,
    +
    114 std::vector<pcl::Vertices> & outputPolygons);
    +
    115std::vector<int> RTABMAP_CORE_EXPORT filterNaNPointsFromMesh(
    +
    116 const pcl::PointCloud<pcl::PointXYZRGB> & cloud,
    +
    117 const std::vector<pcl::Vertices> & polygons,
    +
    118 pcl::PointCloud<pcl::PointXYZRGB> & outputCloud,
    +
    119 std::vector<pcl::Vertices> & outputPolygons);
    +
    120
    +
    121std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT filterCloseVerticesFromMesh(
    +
    122 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr cloud,
    +
    123 const std::vector<pcl::Vertices> & polygons,
    +
    124 float radius,
    +
    125 float angle,
    +
    126 bool keepLatestInRadius);
    +
    127
    +
    128std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT filterInvalidPolygons(
    +
    129 const std::vector<pcl::Vertices> & polygons);
    +
    130
    +
    131pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT createMesh(
    +
    132 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloudWithNormals,
    +
    133 float gp3SearchRadius = 0.025,
    +
    134 float gp3Mu = 2.5,
    +
    135 int gp3MaximumNearestNeighbors = 100,
    +
    136 float gp3MaximumSurfaceAngle = M_PI/4,
    +
    137 float gp3MinimumAngle = M_PI/18,
    +
    138 float gp3MaximumAngle = 2*M_PI/3,
    +
    139 bool gp3NormalConsistency = true);
    +
    140
    +
    141pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT createTextureMesh(
    +
    142 const pcl::PolygonMesh::Ptr & mesh,
    +
    143 const std::map<int, Transform> & poses,
    +
    144 const std::map<int, CameraModel> & cameraModels,
    +
    145 const std::map<int, cv::Mat> & cameraDepths,
    +
    146 float maxDistance = 0.0f, // max camera distance to polygon to apply texture
    +
    147 float maxDepthError = 0.0f, // maximum depth error between reprojected mesh and depth image to texture a face (-1=disabled, 0=edge length is used)
    +
    148 float maxAngle = 0.0f, // maximum angle between camera and face (0=disabled)
    +
    149 int minClusterSize = 50, // minimum size of polygons clusters textured
    +
    150 const std::vector<float> & roiRatios = std::vector<float>(), // [left, right, top, bottom] region of interest (in ratios) of the image projected.
    +
    151 const ProgressState * state = 0,
    +
    152 std::vector<std::map<int, pcl::PointXY> > * vertexToPixels = 0, // For each point, we have a list of cameras with corresponding pixel in it. Beware that the camera ids don't correspond to pose ids, they are indexes from 0 to total camera models and texture's materials.
    +
    153 bool distanceToCamPolicy = false);
    +
    154pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT createTextureMesh(
    +
    155 const pcl::PolygonMesh::Ptr & mesh,
    +
    156 const std::map<int, Transform> & poses,
    +
    157 const std::map<int, std::vector<CameraModel> > & cameraModels,
    +
    158 const std::map<int, cv::Mat> & cameraDepths,
    +
    159 float maxDistance = 0.0f, // max camera distance to polygon to apply texture
    +
    160 float maxDepthError = 0.0f, // maximum depth error between reprojected mesh and depth image to texture a face (-1=disabled, 0=edge length is used)
    +
    161 float maxAngle = 0.0f, // maximum angle between camera and face (0=disabled)
    +
    162 int minClusterSize = 50, // minimum size of polygons clusters textured
    +
    163 const std::vector<float> & roiRatios = std::vector<float>(), // [left, right, top, bottom] region of interest (in ratios) of the image projected.
    +
    164 const ProgressState * state = 0,
    +
    165 std::vector<std::map<int, pcl::PointXY> > * vertexToPixels = 0, // For each point, we have a list of cameras with corresponding pixel in it. Beware that the camera ids don't correspond to pose ids, they are indexes from 0 to total camera models and texture's materials.
    +
    166 bool distanceToCamPolicy = false);
    +
    167
    +
    171void RTABMAP_CORE_EXPORT cleanTextureMesh(
    +
    172 pcl::TextureMesh & textureMesh,
    +
    173 int minClusterSize);
    +
    174
    +
    175pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT concatenateTextureMeshes(
    +
    176 const std::list<pcl::TextureMesh::Ptr> & meshes);
    +
    177
    +
    178void RTABMAP_CORE_EXPORT concatenateTextureMaterials(
    +
    179 pcl::TextureMesh & mesh, const cv::Size & imageSize, int textureSize, int maxTextures, float & scale, std::vector<bool> * materialsKept=0);
    +
    180
    +
    181std::vector<std::vector<RTABMAP_PCL_INDEX> > RTABMAP_CORE_EXPORT convertPolygonsFromPCL(
    +
    182 const std::vector<pcl::Vertices> & polygons);
    +
    183std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > RTABMAP_CORE_EXPORT convertPolygonsFromPCL(
    +
    184 const std::vector<std::vector<pcl::Vertices> > & polygons);
    +
    185std::vector<pcl::Vertices> RTABMAP_CORE_EXPORT convertPolygonsToPCL(
    +
    186 const std::vector<std::vector<RTABMAP_PCL_INDEX> > & polygons);
    +
    187std::vector<std::vector<pcl::Vertices> > RTABMAP_CORE_EXPORT convertPolygonsToPCL(
    +
    188 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & tex_polygons);
    +
    189
    +
    190pcl::TextureMesh::Ptr RTABMAP_CORE_EXPORT assembleTextureMesh(
    +
    191 const cv::Mat & cloudMat,
    +
    192 const std::vector<std::vector<std::vector<RTABMAP_PCL_INDEX> > > & polygons,
    +
    193#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
    +
    194 const std::vector<std::vector<Eigen::Vector2f, Eigen::aligned_allocator<Eigen::Vector2f> > > & texCoords,
    +
    195#else
    +
    196 const std::vector<std::vector<Eigen::Vector2f> > & texCoords,
    +
    197#endif
    +
    198 cv::Mat & textures,
    +
    199 bool mergeTextures = false);
    +
    200
    +
    201pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT assemblePolygonMesh(
    +
    202 const cv::Mat & cloudMat,
    +
    203 const std::vector<std::vector<RTABMAP_PCL_INDEX> > & polygons);
    +
    204
    +
    209cv::Mat RTABMAP_CORE_EXPORT mergeTextures(
    +
    210 pcl::TextureMesh & mesh,
    +
    211 const std::map<int, cv::Mat> & images, // raw or compressed, can be empty if memory or dbDriver should be used
    +
    212 const std::map<int, CameraModel> & calibrations, // Should match images
    +
    213 const Memory * memory = 0, // Should be set if images are not set
    +
    214 const DBDriver * dbDriver = 0, // Should be set if images and memory are not set
    +
    215 int textureSize = 4096,
    +
    216 int textureCount = 1,
    +
    217 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels = std::vector<std::map<int, pcl::PointXY> >(), // needed for parameters below
    +
    218 bool gainCompensation = true,
    +
    219 float gainBeta = 10.0f,
    +
    220 bool gainRGB = true, //Do gain compensation on each channel
    +
    221 bool blending = true,
    +
    222 int blendingDecimation = 0, //0=auto depending on projected polygon size and texture size
    +
    223 int brightnessContrastRatioLow = 0, //0=disabled, values between 0 and 100
    +
    224 int brightnessContrastRatioHigh = 0, //0=disabled, values between 0 and 100
    +
    225 bool exposureFusion = false, //Exposure fusion can be used only with OpenCV3
    +
    226 const ProgressState * state = 0,
    +
    227 unsigned char blankValue = 255, //Gray value for blank polygons (without texture)
    +
    228 bool clearVertexColorUnderTexture = true,
    +
    229 std::map<int, std::map<int, cv::Vec4d> > * gains = 0, // <Camera ID, Camera Sub Index (multi-cameras), gains Gray-R-G-B>
    +
    230 std::map<int, std::map<int, cv::Mat> > * blendingGains = 0, // <Camera ID, Camera Sub Index (multi-cameras), gains>
    +
    231 std::pair<float, float> * contrastValues = 0); // Alpha/beta contrast values
    +
    232cv::Mat RTABMAP_CORE_EXPORT mergeTextures(
    +
    233 pcl::TextureMesh & mesh,
    +
    234 const std::map<int, cv::Mat> & images, // raw or compressed, can be empty if memory or dbDriver should be used
    +
    235 const std::map<int, std::vector<CameraModel> > & calibrations, // Should match images
    +
    236 const Memory * memory = 0, // Should be set if images are not set
    +
    237 const DBDriver * dbDriver = 0, // Should be set if images and memory are not set
    +
    238 int textureSize = 4096,
    +
    239 int textureCount = 1,
    +
    240 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels = std::vector<std::map<int, pcl::PointXY> >(), // needed for parameters below
    +
    241 bool gainCompensation = true,
    +
    242 float gainBeta = 10.0f,
    +
    243 bool gainRGB = true, //Do gain compensation on each channel
    +
    244 bool blending = true,
    +
    245 int blendingDecimation = 0, //0=auto depending on projected polygon size and texture size
    +
    246 int brightnessContrastRatioLow = 0, //0=disabled, values between 0 and 100
    +
    247 int brightnessContrastRatioHigh = 0, //0=disabled, values between 0 and 100
    +
    248 bool exposureFusion = false, //Exposure fusion can be used only with OpenCV3
    +
    249 const ProgressState * state = 0,
    +
    250 unsigned char blankValue = 255, //Gray value for blank polygons (without texture)
    +
    251 bool clearVertexColorUnderTexture = true,
    +
    252 std::map<int, std::map<int, cv::Vec4d> > * gains = 0, // <Camera ID, Camera Sub Index (multi-cameras), gains Gray-R-G-B>
    +
    253 std::map<int, std::map<int, cv::Mat> > * blendingGains = 0, // <Camera ID, Camera Sub Index (multi-cameras), gains>
    +
    254 std::pair<float, float> * contrastValues = 0); // Alpha/beta contrast values
    +
    255
    +
    256void RTABMAP_CORE_EXPORT fixTextureMeshForVisualization(pcl::TextureMesh & textureMesh);
    +
    257
    +
    258// Use the same method with 22 parameters instead.
    +
    259RTABMAP_DEPRECATED bool RTABMAP_CORE_EXPORT multiBandTexturing(
    +
    260 const std::string & outputOBJPath,
    +
    261 const pcl::PCLPointCloud2 & cloud,
    +
    262 const std::vector<pcl::Vertices> & polygons,
    +
    263 const std::map<int, Transform> & cameraPoses,
    +
    264 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels, // required output of util3d::createTextureMesh()
    +
    265 const std::map<int, cv::Mat> & images, // raw or compressed, can be empty if memory or dbDriver should be used
    +
    266 const std::map<int, std::vector<CameraModel> > & cameraModels, // Should match images
    +
    267 const Memory * memory = 0, // Should be set if images are not set
    +
    268 const DBDriver * dbDriver = 0, // Should be set if images and memory are not set
    +
    269 int textureSize = 8192,
    +
    270 const std::string & textureFormat = "jpg", // png, jpg
    +
    271 const std::map<int, std::map<int, cv::Vec4d> > & gains = std::map<int, std::map<int, cv::Vec4d> >(), // optional output of util3d::mergeTextures()
    +
    272 const std::map<int, std::map<int, cv::Mat> > & blendingGains = std::map<int, std::map<int, cv::Mat> >(), // optional output of util3d::mergeTextures()
    +
    273 const std::pair<float, float> & contrastValues = std::pair<float, float>(0,0), // optional output of util3d::mergeTextures()
    +
    274 bool gainRGB = true);
    +
    275
    +
    302bool RTABMAP_CORE_EXPORT multiBandTexturing(
    +
    303 const std::string & outputOBJPath,
    +
    304 const pcl::PCLPointCloud2 & cloud,
    +
    305 const std::vector<pcl::Vertices> & polygons,
    +
    306 const std::map<int, Transform> & cameraPoses,
    +
    307 const std::vector<std::map<int, pcl::PointXY> > & vertexToPixels,
    +
    308 const std::map<int, cv::Mat> & images,
    +
    309 const std::map<int, std::vector<CameraModel> > & cameraModels,
    +
    310 const Memory * memory = 0,
    +
    311 const DBDriver * dbDriver = 0,
    +
    312 unsigned int textureSize = 8192,
    +
    313 unsigned int textureDownscale = 2,
    +
    314 const std::string & nbContrib = "1 5 10 0",
    +
    315 const std::string & textureFormat = "jpg",
    +
    316 const std::map<int, std::map<int, cv::Vec4d> > & gains = std::map<int, std::map<int, cv::Vec4d> >(),
    +
    317 const std::map<int, std::map<int, cv::Mat> > & blendingGains = std::map<int, std::map<int, cv::Mat> >(),
    +
    318 const std::pair<float, float> & contrastValues = std::pair<float, float>(0,0),
    +
    319 bool gainRGB = true,
    +
    320 unsigned int unwrapMethod = 0,
    +
    321 bool fillHoles = false,
    +
    322 unsigned int padding = 5,
    +
    323 double bestScoreThreshold = 0.1,
    +
    324 double angleHardThreshold = 90.0,
    +
    325 bool forceVisibleByAllVertices = false);
    +
    326
    +
    327cv::Mat RTABMAP_CORE_EXPORT computeNormals(
    +
    328 const cv::Mat & laserScan,
    +
    329 int searchK,
    +
    330 float searchRadius);
    +
    331pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
    +
    332 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    333 int searchK = 20,
    +
    334 float searchRadius = 0.0f,
    +
    335 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    336pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
    +
    337 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    338 int searchK = 20,
    +
    339 float searchRadius = 0.0f,
    +
    340 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    341pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
    +
    342 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    343 int searchK = 20,
    +
    344 float searchRadius = 0.0f,
    +
    345 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    346pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
    +
    347 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    348 const pcl::IndicesPtr & indices,
    +
    349 int searchK = 20,
    +
    350 float searchRadius = 0.0f,
    +
    351 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    352pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
    +
    353 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    354 const pcl::IndicesPtr & indices,
    +
    355 int searchK = 20,
    +
    356 float searchRadius = 0.0f,
    +
    357 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    358pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals(
    +
    359 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    360 const pcl::IndicesPtr & indices,
    +
    361 int searchK = 20,
    +
    362 float searchRadius = 0.0f,
    +
    363 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    364
    +
    365pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals2D(
    +
    366 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    367 int searchK = 5,
    +
    368 float searchRadius = 0.0f,
    +
    369 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    370pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeNormals2D(
    +
    371 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    372 int searchK = 5,
    +
    373 float searchRadius = 0.0f,
    +
    374 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    375pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals2D(
    +
    376 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    377 int searchK = 5,
    +
    378 float searchRadius = 0.0f,
    +
    379 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    380pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals2D(
    +
    381 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    382 int searchK = 5,
    +
    383 float searchRadius = 0.0f,
    +
    384 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    385
    +
    386pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals(
    +
    387 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    388 float maxDepthChangeFactor = 0.02f,
    +
    389 float normalSmoothingSize = 10.0f,
    +
    390 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    391pcl::PointCloud<pcl::Normal>::Ptr RTABMAP_CORE_EXPORT computeFastOrganizedNormals(
    +
    392 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    393 const pcl::IndicesPtr & indices,
    +
    394 float maxDepthChangeFactor = 0.02f,
    +
    395 float normalSmoothingSize = 10.0f,
    +
    396 const Eigen::Vector3f & viewPoint = Eigen::Vector3f(0,0,0));
    +
    397
    +
    435float RTABMAP_CORE_EXPORT computeNormalsComplexity(
    +
    436 const LaserScan & scan,
    +
    437 const Transform & t = Transform::getIdentity(),
    +
    438 cv::Mat * pcaEigenVectors = 0,
    +
    439 cv::Mat * pcaEigenValues = 0,
    +
    440 bool centered = true);
    +
    445float RTABMAP_CORE_EXPORT computeNormalsComplexity(
    +
    446 const pcl::PointCloud<pcl::Normal> & normals,
    +
    447 const Transform & t = Transform::getIdentity(),
    +
    448 bool is2d = false,
    +
    449 cv::Mat * pcaEigenVectors = 0,
    +
    450 cv::Mat * pcaEigenValues = 0,
    +
    451 bool centered = true);
    +
    456float RTABMAP_CORE_EXPORT computeNormalsComplexity(
    +
    457 const pcl::PointCloud<pcl::PointNormal> & cloud,
    +
    458 const Transform & t = Transform::getIdentity(),
    +
    459 bool is2d = false,
    +
    460 cv::Mat * pcaEigenVectors = 0,
    +
    461 cv::Mat * pcaEigenValues = 0,
    +
    462 bool centered = true);
    +
    467float RTABMAP_CORE_EXPORT computeNormalsComplexity(
    +
    468 const pcl::PointCloud<pcl::PointXYZINormal> & cloud,
    +
    469 const Transform & t = Transform::getIdentity(),
    +
    470 bool is2d = false,
    +
    471 cv::Mat * pcaEigenVectors = 0,
    +
    472 cv::Mat * pcaEigenValues = 0,
    +
    473 bool centered = true);
    +
    478float RTABMAP_CORE_EXPORT computeNormalsComplexity(
    +
    479 const pcl::PointCloud<pcl::PointXYZRGBNormal> & cloud,
    +
    480 const Transform & t = Transform::getIdentity(),
    +
    481 bool is2d = false,
    +
    482 cv::Mat * pcaEigenVectors = 0,
    +
    483 cv::Mat * pcaEigenValues = 0,
    +
    484 bool centered = true);
    +
    485
    +
    486pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT mls(
    +
    487 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    488 float searchRadius = 0.0f,
    +
    489 int polygonialOrder = 2,
    +
    490 int upsamplingMethod = 0, // NONE, DISTINCT_CLOUD, SAMPLE_LOCAL_PLANE, RANDOM_UNIFORM_DENSITY, VOXEL_GRID_DILATION
    +
    491 float upsamplingRadius = 0.0f, // SAMPLE_LOCAL_PLANE
    +
    492 float upsamplingStep = 0.0f, // SAMPLE_LOCAL_PLANE
    +
    493 int pointDensity = 0, // RANDOM_UNIFORM_DENSITY
    +
    494 float dilationVoxelSize = 1.0f, // VOXEL_GRID_DILATION
    +
    495 int dilationIterations = 0); // VOXEL_GRID_DILATION
    +
    496pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT mls(
    +
    497 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    498 const pcl::IndicesPtr & indices,
    +
    499 float searchRadius = 0.0f,
    +
    500 int polygonialOrder = 2,
    +
    501 int upsamplingMethod = 0, // NONE, DISTINCT_CLOUD, SAMPLE_LOCAL_PLANE, RANDOM_UNIFORM_DENSITY, VOXEL_GRID_DILATION
    +
    502 float upsamplingRadius = 0.0f, // SAMPLE_LOCAL_PLANE
    +
    503 float upsamplingStep = 0.0f, // SAMPLE_LOCAL_PLANE
    +
    504 int pointDensity = 0, // RANDOM_UNIFORM_DENSITY
    +
    505 float dilationVoxelSize = 1.0f, // VOXEL_GRID_DILATION
    +
    506 int dilationIterations = 0); // VOXEL_GRID_DILATION
    +
    507
    +
    508// Use version with groundNormalsUp as float. For forceGroundNormalsUp=true, set groundNormalsUp to 0.8f, otherwise set groundNormalsUp to 0.0f.
    +
    509RTABMAP_DEPRECATED LaserScan RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
    +
    510 const LaserScan & scan,
    +
    511 const Eigen::Vector3f & viewpoint,
    +
    512 bool forceGroundNormalsUp);
    +
    513LaserScan RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
    +
    514 const LaserScan & scan,
    +
    515 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
    +
    516 float groundNormalsUp = 0.0f);
    +
    517// Use version with groundNormalsUp as float. For forceGroundNormalsUp=true, set groundNormalsUp to 0.8f, otherwise set groundNormalsUp to 0.0f.
    +
    518RTABMAP_DEPRECATED void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
    +
    519 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    520 const Eigen::Vector3f & viewpoint,
    +
    521 bool forceGroundNormalsUp);
    +
    522void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
    +
    523 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    524 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
    +
    525 float groundNormalsUp = 0.0f);
    +
    526// Use version with groundNormalsUp as float. For forceGroundNormalsUp=true, set groundNormalsUp to 0.8f, otherwise set groundNormalsUp to 0.0f.
    +
    527RTABMAP_DEPRECATED void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
    +
    528 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    529 const Eigen::Vector3f & viewpoint,
    +
    530 bool forceGroundNormalsUp);
    +
    531void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
    +
    532 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    533 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
    +
    534 float groundNormalsUp = 0.0f);
    +
    535// Use version with groundNormalsUp as float. For forceGroundNormalsUp=true, set groundNormalsUp to 0.8f, otherwise set groundNormalsUp to 0.0f.
    +
    536RTABMAP_DEPRECATED void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
    +
    537 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    538 const Eigen::Vector3f & viewpoint,
    +
    539 bool forceGroundNormalsUp);
    +
    540void RTABMAP_CORE_EXPORT adjustNormalsToViewPoint(
    +
    541 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    542 const Eigen::Vector3f & viewpoint = Eigen::Vector3f(0,0,0),
    +
    543 float groundNormalsUp = 0.0f);
    +
    544
    +
    545void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
    +
    546 const std::map<int, Transform> & poses,
    +
    547 const std::vector<int> & cameraIndices,
    +
    548 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    549 float groundNormalsUp = 0.0f);
    +
    550void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
    +
    551 const std::map<int, Transform> & poses,
    +
    552 const std::vector<int> & cameraIndices,
    +
    553 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    554 float groundNormalsUp = 0.0f);
    +
    555void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
    +
    556 const std::map<int, Transform> & poses,
    +
    557 const std::vector<int> & cameraIndices,
    +
    558 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    559 float groundNormalsUp = 0.0f);
    +
    560
    +
    561void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
    +
    562 const std::map<int, Transform> & poses,
    +
    563 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
    +
    564 const std::vector<int> & rawCameraIndices,
    +
    565 pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    566 float groundNormalsUp = 0.0f);
    +
    567void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
    +
    568 const std::map<int, Transform> & poses,
    +
    569 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
    +
    570 const std::vector<int> & rawCameraIndices,
    +
    571 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    572 float groundNormalsUp = 0.0f);
    +
    573void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
    +
    574 const std::map<int, Transform> & poses,
    +
    575 const pcl::PointCloud<pcl::PointXYZ>::Ptr & rawCloud,
    +
    576 const std::vector<int> & rawCameraIndices,
    +
    577 pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    578 float groundNormalsUp = 0.0f);
    +
    579
    +
    580void RTABMAP_CORE_EXPORT adjustNormalsToViewPoints(
    +
    581 const std::map<int, Transform> & viewpoints,
    +
    582 const LaserScan & rawScan,
    +
    583 const std::vector<int> & viewpointIds,
    +
    584 LaserScan & scan,
    +
    585 float groundNormalsUp = 0.0f);
    +
    586
    +
    587pcl::PolygonMesh::Ptr RTABMAP_CORE_EXPORT meshDecimation(const pcl::PolygonMesh::Ptr & mesh, float factor);
    +
    588
    +
    589template<typename pointT>
    +
    590std::vector<pcl::Vertices> normalizePolygonsSide(
    +
    591 const pcl::PointCloud<pointT> & cloud,
    +
    592 const std::vector<pcl::Vertices> & polygons,
    +
    593 const pcl::PointXYZ & viewPoint = pcl::PointXYZ(0,0,0));
    +
    594
    +
    595template<typename pointRGBT>
    +
    596void denseMeshPostProcessing(
    +
    597 pcl::PolygonMeshPtr & mesh,
    +
    598 float meshDecimationFactor = 0.0f, // value between 0 and 1, 0=disabled
    +
    599 int maximumPolygons = 0, // 0=disabled
    +
    600 const typename pcl::PointCloud<pointRGBT>::Ptr & cloud = pcl::PointCloud<pointRGBT>::Ptr(), // A RGB point cloud used to transfer colors back to mesh (needed for parameters below)
    +
    601 float transferColorRadius = 0.05f, // <0=disabled, 0=nearest color
    +
    602 bool coloredOutput = true, // Not used anymore, output is colored if transferColorRadius>=0
    +
    603 bool cleanMesh = true, // Remove polygons not colored (if coloredOutput is disabled, transferColorRadius is still used to clean the mesh)
    +
    604 int minClusterSize = 50, // Remove small polygon clusters after the mesh has been cleaned (0=disabled)
    +
    605 ProgressState * progressState = 0);
    +
    606
    +
    629bool RTABMAP_CORE_EXPORT intersectRayTriangle(
    +
    630 const Eigen::Vector3f & p,
    +
    631 const Eigen::Vector3f & dir,
    +
    632 const Eigen::Vector3f & v0,
    +
    633 const Eigen::Vector3f & v1,
    +
    634 const Eigen::Vector3f & v2,
    +
    635 float & distance,
    +
    636 Eigen::Vector3f & normal);
    +
    637
    +
    638template<typename PointT>
    +
    639bool intersectRayMesh(
    +
    640 const Eigen::Vector3f & origin,
    +
    641 const Eigen::Vector3f & dir,
    +
    642 const typename pcl::PointCloud<PointT> & cloud,
    +
    643 const std::vector<pcl::Vertices> & polygons,
    +
    644 bool ignoreBackFaces,
    +
    645 float & distance,
    +
    646 Eigen::Vector3f & normal,
    +
    647 int & index);
    +
    648
    +
    649int RTABMAP_CORE_EXPORT saveOBJFile(
    +
    650 const std::string &file_name,
    +
    651 const pcl::TextureMesh &tex_mesh,
    +
    652 unsigned precision = 5);
    +
    653
    +
    654int RTABMAP_CORE_EXPORT saveOBJFile(
    +
    655 const std::string &file_name,
    +
    656 const pcl::PolygonMesh &mesh,
    +
    657 unsigned precision = 5);
    +
    658
    +
    659} // namespace util3d
    +
    660} // namespace rtabmap
    +
    661
    +
    662#include "rtabmap/core/impl/util3d_surface.hpp"
    +
    663
    +
    664#endif /* UTIL3D_SURFACE_H_ */
    +
    Represents 2D or 3D laser scan data with support for multiple point data formats.
    Definition LaserScan.h:46
    + +
    Represents a 3D rigid body transformation (rotation + translation).
    Definition Transform.h:53
    +
    static Transform getIdentity()
    Returns identity transform.
    +
    float RTABMAP_CORE_EXPORT computeNormalsComplexity(const LaserScan &scan, const Transform &t=Transform::getIdentity(), cv::Mat *pcaEigenVectors=0, cv::Mat *pcaEigenValues=0, bool centered=true)
    Computes the complexity of surface normals in a point cloud of type LaserScan.
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__surface_8hpp_source.html b/preview/pr-1492/api/latest/util3d__surface_8hpp_source.html new file mode 100644 index 00000000..9d877ac3 --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__surface_8hpp_source.html @@ -0,0 +1,453 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/impl/util3d_surface.hpp Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_surface.hpp
    +
    +
    +
    1/*
    +
    2 * util3d_surface.hpp
    +
    3 *
    +
    4 * Created on: Sep 3, 2016
    +
    5 * Author: mathieu
    +
    6 */
    +
    7
    +
    8#ifndef CORELIB_INCLUDE_RTABMAP_CORE_IMPL_UTIL3D_SURFACE_HPP_
    +
    9#define CORELIB_INCLUDE_RTABMAP_CORE_IMPL_UTIL3D_SURFACE_HPP_
    +
    10
    +
    11#include <pcl/search/kdtree.h>
    +
    12#include <pcl/conversions.h>
    + +
    14
    +
    15namespace rtabmap {
    +
    16
    +
    17namespace util3d {
    +
    18
    +
    19template<typename pointT>
    +
    20std::vector<pcl::Vertices> normalizePolygonsSide(
    +
    21 const typename pcl::PointCloud<pointT> & cloud,
    +
    22 const std::vector<pcl::Vertices> & polygons,
    +
    23 const pcl::PointXYZ & viewPoint)
    +
    24{
    +
    25 std::vector<pcl::Vertices> output(polygons.size());
    +
    26 for(unsigned int i=0; i<polygons.size(); ++i)
    +
    27 {
    +
    28 pcl::Vertices polygon = polygons[i];
    +
    29 Eigen::Vector3f v1 = cloud.at(polygon.vertices[1]).getVector3fMap() - cloud.at(polygon.vertices[0]).getVector3fMap();
    +
    30 Eigen::Vector3f v2 = cloud.at(polygon.vertices[2]).getVector3fMap() - cloud.at(polygon.vertices[0]).getVector3fMap();
    +
    31 Eigen::Vector3f n = (v1.cross(v2)).normalized();
    +
    32
    +
    33 Eigen::Vector3f p = Eigen::Vector3f(viewPoint.x, viewPoint.y, viewPoint.z) - cloud.at(polygon.vertices[1]).getVector3fMap();
    +
    34
    +
    35 float result = n.dot(p);
    +
    36 if(result < 0)
    +
    37 {
    +
    38 //reverse vertices order
    +
    39 int tmp = polygon.vertices[0];
    +
    40 polygon.vertices[0] = polygon.vertices[2];
    +
    41 polygon.vertices[2] = tmp;
    +
    42 }
    +
    43
    +
    44 output[i] = polygon;
    +
    45 }
    +
    46 return output;
    +
    47}
    +
    48
    +
    49template<typename pointRGBT>
    +
    50void denseMeshPostProcessing(
    +
    51 pcl::PolygonMeshPtr & mesh,
    +
    52 float meshDecimationFactor,
    +
    53 int maximumPolygons,
    +
    54 const typename pcl::PointCloud<pointRGBT>::Ptr & cloud,
    +
    55 float transferColorRadius,
    +
    56 bool coloredOutput,
    +
    57 bool cleanMesh,
    +
    58 int minClusterSize,
    +
    59 ProgressState * progressState)
    +
    60{
    +
    61 // compute normals for the mesh if not already here
    +
    62 bool hasNormals = false;
    +
    63 bool hasColors = false;
    +
    64 for(unsigned int i=0; i<mesh->cloud.fields.size(); ++i)
    +
    65 {
    +
    66 if(mesh->cloud.fields[i].name.compare("normal_x") == 0)
    +
    67 {
    +
    68 hasNormals = true;
    +
    69 }
    +
    70 else if(mesh->cloud.fields[i].name.compare("rgb") == 0)
    +
    71 {
    +
    72 hasColors = true;
    +
    73 }
    +
    74 }
    +
    75
    +
    76 if(maximumPolygons > 0)
    +
    77 {
    +
    78 double factor = 1.0-double(maximumPolygons)/double(mesh->polygons.size());
    +
    79 if(factor > meshDecimationFactor)
    +
    80 {
    +
    81 meshDecimationFactor = factor;
    +
    82 }
    +
    83 }
    +
    84 if(meshDecimationFactor > 0.0)
    +
    85 {
    +
    86 unsigned int count = mesh->polygons.size();
    +
    87 if(progressState) progressState->callback(uFormat("Mesh decimation (factor=%f) from %d polygons...",meshDecimationFactor, (int)count));
    +
    88
    +
    89 mesh = util3d::meshDecimation(mesh, (float)meshDecimationFactor);
    +
    90 if(progressState) progressState->callback(uFormat("Mesh decimated (factor=%f) from %d to %d polygons", meshDecimationFactor, (int)count, (int)mesh->polygons.size()));
    +
    91 if(count < mesh->polygons.size())
    +
    92 {
    +
    93 if(progressState) progressState->callback(uFormat("Decimated mesh has more polygons than before!"));
    +
    94 }
    +
    95 hasNormals = false;
    +
    96 hasColors = false;
    +
    97 }
    +
    98
    +
    99 if(cloud.get()!=0 &&
    +
    100 !hasColors &&
    +
    101 transferColorRadius >= 0.0)
    +
    102 {
    +
    103 if(progressState) progressState->callback(uFormat("Transferring color from point cloud to mesh..."));
    +
    104
    +
    105 // transfer color from point cloud to mesh
    +
    106 typename pcl::search::KdTree<pointRGBT>::Ptr tree (new pcl::search::KdTree<pointRGBT>(true));
    +
    107 tree->setInputCloud(cloud);
    +
    108 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr coloredCloud(new pcl::PointCloud<pcl::PointXYZRGBNormal>);
    +
    109 pcl::fromPCLPointCloud2(mesh->cloud, *coloredCloud);
    +
    110 std::vector<bool> coloredPts(coloredCloud->size());
    +
    111 for(unsigned int i=0; i<coloredCloud->size(); ++i)
    +
    112 {
    +
    113 std::vector<int> kIndices;
    +
    114 std::vector<float> kDistances;
    +
    115 pointRGBT pt;
    +
    116 pt.x = coloredCloud->at(i).x;
    +
    117 pt.y = coloredCloud->at(i).y;
    +
    118 pt.z = coloredCloud->at(i).z;
    +
    119 if(transferColorRadius > 0.0)
    +
    120 {
    +
    121 tree->radiusSearch(pt, transferColorRadius, kIndices, kDistances);
    +
    122 }
    +
    123 else
    +
    124 {
    +
    125 tree->nearestKSearch(pt, 1, kIndices, kDistances);
    +
    126 }
    +
    127 if(kIndices.size())
    +
    128 {
    +
    129 //compute average color
    +
    130 int r=0;
    +
    131 int g=0;
    +
    132 int b=0;
    +
    133 int a=0;
    +
    134 for(unsigned int j=0; j<kIndices.size(); ++j)
    +
    135 {
    +
    136 r+=(int)cloud->at(kIndices[j]).r;
    +
    137 g+=(int)cloud->at(kIndices[j]).g;
    +
    138 b+=(int)cloud->at(kIndices[j]).b;
    +
    139 a+=(int)cloud->at(kIndices[j]).a;
    +
    140 }
    +
    141 coloredCloud->at(i).r = r/kIndices.size();
    +
    142 coloredCloud->at(i).g = g/kIndices.size();
    +
    143 coloredCloud->at(i).b = b/kIndices.size();
    +
    144 coloredCloud->at(i).a = a/kIndices.size();
    +
    145 coloredPts.at(i) = true;
    +
    146 }
    +
    147 else
    +
    148 {
    +
    149 //white
    +
    150 coloredCloud->at(i).r = coloredCloud->at(i).g = coloredCloud->at(i).b = 255;
    +
    151 coloredPts.at(i) = false;
    +
    152 }
    +
    153 }
    +
    154 if(coloredOutput) {
    +
    155 pcl::toPCLPointCloud2(*coloredCloud, mesh->cloud);
    +
    156 hasColors = true;
    +
    157 }
    +
    158
    +
    159 // remove polygons with no color
    +
    160 if(cleanMesh)
    +
    161 {
    +
    162 std::vector<pcl::Vertices> filteredPolygons(mesh->polygons.size());
    +
    163 int oi=0;
    +
    164 for(unsigned int i=0; i<mesh->polygons.size(); ++i)
    +
    165 {
    +
    166 bool coloredPolygon = true;
    +
    167 for(unsigned int j=0; j<mesh->polygons[i].vertices.size(); ++j)
    +
    168 {
    +
    169 if(!coloredPts.at(mesh->polygons[i].vertices[j]))
    +
    170 {
    +
    171 coloredPolygon = false;
    +
    172 break;
    +
    173 }
    +
    174 }
    +
    175 if(coloredPolygon)
    +
    176 {
    +
    177 filteredPolygons[oi++] = mesh->polygons[i];
    +
    178 }
    +
    179 }
    +
    180 filteredPolygons.resize(oi);
    +
    181 mesh->polygons = filteredPolygons;
    +
    182 }
    +
    183 }
    +
    184
    +
    185 if(minClusterSize)
    +
    186 {
    +
    187 if(progressState) progressState->callback(uFormat("Filter small polygon clusters..."));
    +
    188
    +
    189 // filter polygons
    +
    190 std::vector<std::set<int> > neighbors;
    +
    191 std::vector<std::set<int> > vertexToPolygons;
    +
    192 util3d::createPolygonIndexes(mesh->polygons,
    +
    193 mesh->cloud.height*mesh->cloud.width,
    +
    194 neighbors,
    +
    195 vertexToPolygons);
    +
    196 std::list<std::list<int> > clusters = util3d::clusterPolygons(
    +
    197 neighbors,
    +
    198 minClusterSize<0?0:minClusterSize);
    +
    199
    +
    200 std::vector<pcl::Vertices> filteredPolygons(mesh->polygons.size());
    +
    201 if(minClusterSize < 0)
    +
    202 {
    +
    203 // only keep the biggest cluster
    +
    204 std::list<std::list<int> >::iterator biggestClusterIndex = clusters.end();
    +
    205 unsigned int biggestClusterSize = 0;
    +
    206 for(std::list<std::list<int> >::iterator iter=clusters.begin(); iter!=clusters.end(); ++iter)
    +
    207 {
    +
    208 if(iter->size() > biggestClusterSize)
    +
    209 {
    +
    210 biggestClusterIndex = iter;
    +
    211 biggestClusterSize = iter->size();
    +
    212 }
    +
    213 }
    +
    214 if(biggestClusterIndex != clusters.end())
    +
    215 {
    +
    216 int oi=0;
    +
    217 for(std::list<int>::iterator jter=biggestClusterIndex->begin(); jter!=biggestClusterIndex->end(); ++jter)
    +
    218 {
    +
    219 filteredPolygons[oi++] = mesh->polygons.at(*jter);
    +
    220 }
    +
    221 filteredPolygons.resize(oi);
    +
    222 }
    +
    223 }
    +
    224 else
    +
    225 {
    +
    226 int oi=0;
    +
    227 for(std::list<std::list<int> >::iterator iter=clusters.begin(); iter!=clusters.end(); ++iter)
    +
    228 {
    +
    229 for(std::list<int>::iterator jter=iter->begin(); jter!=iter->end(); ++jter)
    +
    230 {
    +
    231 filteredPolygons[oi++] = mesh->polygons.at(*jter);
    +
    232 }
    +
    233 }
    +
    234 filteredPolygons.resize(oi);
    +
    235 }
    +
    236
    +
    237 int before = (int)mesh->polygons.size();
    +
    238 mesh->polygons = filteredPolygons;
    +
    239
    +
    240 if(progressState) progressState->callback(uFormat("Filtered %d polygons.", before-(int)mesh->polygons.size()));
    +
    241 }
    +
    242
    +
    243 // compute normals for the mesh if not already here
    +
    244 if(!hasNormals)
    +
    245 {
    +
    246 // use polygons
    +
    247 if(hasColors)
    +
    248 {
    +
    249 pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBNormal>);
    +
    250 pcl::fromPCLPointCloud2(mesh->cloud, *cloud);
    +
    251
    +
    252 Eigen::Vector3f normal(1,0,0);
    +
    253 for(unsigned int i=0; i<mesh->polygons.size(); ++i)
    +
    254 {
    +
    255 pcl::Vertices & v = mesh->polygons[i];
    +
    256 if(!hasNormals)
    +
    257 {
    +
    258 UASSERT(v.vertices.size()>2);
    +
    259 Eigen::Vector3f v0(
    +
    260 cloud->at(v.vertices[1]).x - cloud->at(v.vertices[0]).x,
    +
    261 cloud->at(v.vertices[1]).y - cloud->at(v.vertices[0]).y,
    +
    262 cloud->at(v.vertices[1]).z - cloud->at(v.vertices[0]).z);
    +
    263 int last = v.vertices.size()-1;
    +
    264 Eigen::Vector3f v1(
    +
    265 cloud->at(v.vertices[last]).x - cloud->at(v.vertices[0]).x,
    +
    266 cloud->at(v.vertices[last]).y - cloud->at(v.vertices[0]).y,
    +
    267 cloud->at(v.vertices[last]).z - cloud->at(v.vertices[0]).z);
    +
    268 normal = v0.cross(v1);
    +
    269 normal.normalize();
    +
    270 }
    +
    271 // flat normal (per face)
    +
    272 for(unsigned int j=0; j<v.vertices.size(); ++j)
    +
    273 {
    +
    274 cloud->at(v.vertices[j]).normal_x = normal[0];
    +
    275 cloud->at(v.vertices[j]).normal_y = normal[1];
    +
    276 cloud->at(v.vertices[j]).normal_z = normal[2];
    +
    277 }
    +
    278 }
    +
    279 pcl::toPCLPointCloud2 (*cloud, mesh->cloud);
    +
    280 }
    +
    281 else
    +
    282 {
    +
    283 pcl::PointCloud<pcl::PointNormal>::Ptr cloud (new pcl::PointCloud<pcl::PointNormal>);
    +
    284 pcl::fromPCLPointCloud2(mesh->cloud, *cloud);
    +
    285
    +
    286 for(unsigned int i=0; i<mesh->polygons.size(); ++i)
    +
    287 {
    +
    288 pcl::Vertices & v = mesh->polygons[i];
    +
    289 UASSERT(v.vertices.size()>2);
    +
    290 Eigen::Vector3f v0(
    +
    291 cloud->at(v.vertices[1]).x - cloud->at(v.vertices[0]).x,
    +
    292 cloud->at(v.vertices[1]).y - cloud->at(v.vertices[0]).y,
    +
    293 cloud->at(v.vertices[1]).z - cloud->at(v.vertices[0]).z);
    +
    294 int last = v.vertices.size()-1;
    +
    295 Eigen::Vector3f v1(
    +
    296 cloud->at(v.vertices[last]).x - cloud->at(v.vertices[0]).x,
    +
    297 cloud->at(v.vertices[last]).y - cloud->at(v.vertices[0]).y,
    +
    298 cloud->at(v.vertices[last]).z - cloud->at(v.vertices[0]).z);
    +
    299 Eigen::Vector3f normal = v0.cross(v1);
    +
    300 normal.normalize();
    +
    301 // flat normal (per face)
    +
    302 for(unsigned int j=0; j<v.vertices.size(); ++j)
    +
    303 {
    +
    304 cloud->at(v.vertices[j]).normal_x = normal[0];
    +
    305 cloud->at(v.vertices[j]).normal_y = normal[1];
    +
    306 cloud->at(v.vertices[j]).normal_z = normal[2];
    +
    307 }
    +
    308 }
    +
    309 pcl::toPCLPointCloud2 (*cloud, mesh->cloud);
    +
    310 }
    +
    311 }
    +
    312}
    +
    313
    +
    314template<typename PointT>
    +
    315bool intersectRayMesh(
    +
    316 const Eigen::Vector3f & origin,
    +
    317 const Eigen::Vector3f & dir,
    +
    318 const typename pcl::PointCloud<PointT> & cloud,
    +
    319 const std::vector<pcl::Vertices> & polygons,
    +
    320 bool ignoreBackFaces,
    +
    321 float & distance,
    +
    322 Eigen::Vector3f & normal,
    +
    323 int & index)
    +
    324{
    +
    325 bool intersect = false;
    +
    326 distance = std::numeric_limits<float>::max();
    +
    327 for (size_t i = 0; i < polygons.size(); ++i)
    +
    328 {
    +
    329 const pcl::Vertices & vert = polygons.at(i);
    +
    330 UASSERT(vert.vertices.size()==3);
    +
    331 float d;
    +
    332 Eigen::Vector3f n;
    +
    333 if (intersectRayTriangle(origin, dir,
    +
    334 cloud.at(vert.vertices.at(0)).getVector3fMap(),
    +
    335 cloud.at(vert.vertices.at(1)).getVector3fMap(),
    +
    336 cloud.at(vert.vertices.at(2)).getVector3fMap(), d, n) &&
    +
    337 d < distance &&
    +
    338 (!ignoreBackFaces || n.dot(dir)<0))
    +
    339 {
    +
    340 distance = d;
    +
    341 index = i;
    +
    342 normal = n;
    +
    343 intersect |= true;
    +
    344 }
    +
    345 }
    +
    346 normal.normalize();
    +
    347 return intersect;
    +
    348}
    +
    349
    +
    350}
    +
    351
    +
    352}
    +
    353
    +
    354
    +
    355#endif /* CORELIB_INCLUDE_RTABMAP_CORE_IMPL_UTIL3D_SURFACE_HPP_ */
    +
    Some conversion functions.
    +
    std::string UTILITE_EXPORT uFormat(const char *fmt,...)
    +
    #define UASSERT(condition)
    Definition ULogger.h:66
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/util3d__transforms_8h_source.html b/preview/pr-1492/api/latest/util3d__transforms_8h_source.html new file mode 100644 index 00000000..3a4bbf58 --- /dev/null +++ b/preview/pr-1492/api/latest/util3d__transforms_8h_source.html @@ -0,0 +1,219 @@ + + + + + + + + +RTAB-Map: corelib/include/rtabmap/core/util3d_transforms.h Source File + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    RTAB-Map 0.23.10 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util3d_transforms.h
    +
    +
    +
    1/*
    +
    2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
    +
    3All rights reserved.
    +
    4
    +
    5Redistribution and use in source and binary forms, with or without
    +
    6modification, are permitted provided that the following conditions are met:
    +
    7 * Redistributions of source code must retain the above copyright
    +
    8 notice, this list of conditions and the following disclaimer.
    +
    9 * Redistributions in binary form must reproduce the above copyright
    +
    10 notice, this list of conditions and the following disclaimer in the
    +
    11 documentation and/or other materials provided with the distribution.
    +
    12 * Neither the name of the Universite de Sherbrooke nor the
    +
    13 names of its contributors may be used to endorse or promote products
    +
    14 derived from this software without specific prior written permission.
    +
    15
    +
    16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    +
    17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +
    18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +
    19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
    +
    20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +
    21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    +
    22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    +
    23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +
    24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +
    25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    26*/
    +
    27
    +
    28#ifndef UTIL3D_TRANSFORMS_H_
    +
    29#define UTIL3D_TRANSFORMS_H_
    +
    30
    +
    31#include <rtabmap/core/rtabmap_core_export.h>
    +
    32
    +
    33#include <pcl/point_cloud.h>
    +
    34#include <pcl/point_types.h>
    +
    35#include <pcl/pcl_base.h>
    +
    36#include <rtabmap/core/Transform.h>
    +
    37#include <rtabmap/core/LaserScan.h>
    +
    38
    +
    39namespace rtabmap
    +
    40{
    +
    41
    +
    42namespace util3d
    +
    43{
    +
    44
    +
    75LaserScan RTABMAP_CORE_EXPORT transformLaserScan(
    +
    76 const LaserScan & laserScan,
    +
    77 const Transform & transform);
    +
    78
    +
    95pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    96 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    97 const Transform & transform);
    +
    102pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    103 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    104 const Transform & transform);
    +
    109pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    110 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    111 const Transform & transform);
    +
    116pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    117 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    118 const Transform & transform);
    +
    123pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    124 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    125 const Transform & transform);
    +
    130pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    131 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    132 const Transform & transform);
    +
    133
    +
    138pcl::PointCloud<pcl::PointXYZ>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    139 const pcl::PointCloud<pcl::PointXYZ>::Ptr & cloud,
    +
    140 const pcl::IndicesPtr & indices,
    +
    141 const Transform & transform);
    +
    146pcl::PointCloud<pcl::PointXYZI>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    147 const pcl::PointCloud<pcl::PointXYZI>::Ptr & cloud,
    +
    148 const pcl::IndicesPtr & indices,
    +
    149 const Transform & transform);
    +
    154pcl::PointCloud<pcl::PointXYZRGB>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    155 const pcl::PointCloud<pcl::PointXYZRGB>::Ptr & cloud,
    +
    156 const pcl::IndicesPtr & indices,
    +
    157 const Transform & transform);
    +
    162pcl::PointCloud<pcl::PointNormal>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    163 const pcl::PointCloud<pcl::PointNormal>::Ptr & cloud,
    +
    164 const pcl::IndicesPtr & indices,
    +
    165 const Transform & transform);
    +
    170pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    171 const pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr & cloud,
    +
    172 const pcl::IndicesPtr & indices,
    +
    173 const Transform & transform);
    +
    178pcl::PointCloud<pcl::PointXYZINormal>::Ptr RTABMAP_CORE_EXPORT transformPointCloud(
    +
    179 const pcl::PointCloud<pcl::PointXYZINormal>::Ptr & cloud,
    +
    180 const pcl::IndicesPtr & indices,
    +
    181 const Transform & transform);
    +
    182
    +
    197cv::Point3f RTABMAP_CORE_EXPORT transformPoint(
    +
    198 const cv::Point3f & pt,
    +
    199 const Transform & transform);
    +
    204cv::Point3d RTABMAP_CORE_EXPORT transformPoint(
    +
    205 const cv::Point3d & pt,
    +
    206 const Transform & transform);
    +
    211pcl::PointXYZ RTABMAP_CORE_EXPORT transformPoint(
    +
    212 const pcl::PointXYZ & pt,
    +
    213 const Transform & transform);
    +
    218pcl::PointXYZI RTABMAP_CORE_EXPORT transformPoint(
    +
    219 const pcl::PointXYZI & pt,
    +
    220 const Transform & transform);
    +
    225pcl::PointXYZRGB RTABMAP_CORE_EXPORT transformPoint(
    +
    226 const pcl::PointXYZRGB & pt,
    +
    227 const Transform & transform);
    +
    232pcl::PointNormal RTABMAP_CORE_EXPORT transformPoint(
    +
    233 const pcl::PointNormal & point,
    +
    234 const Transform & transform);
    +
    239pcl::PointXYZRGBNormal RTABMAP_CORE_EXPORT transformPoint(
    +
    240 const pcl::PointXYZRGBNormal & point,
    +
    241 const Transform & transform);
    +
    246pcl::PointXYZINormal RTABMAP_CORE_EXPORT transformPoint(
    +
    247 const pcl::PointXYZINormal & point,
    +
    248 const Transform & transform);
    +
    249
    +
    250} // namespace util3d
    +
    251} // namespace rtabmap
    +
    252
    +
    253#endif /* UTIL3D_TRANSFORMS_H_ */
    +
    Represents a 3D rigid body transformation (rotation + translation).
    Definition Transform.h:53
    +
    cv::Point3f RTABMAP_CORE_EXPORT transformPoint(const cv::Point3f &pt, const Transform &transform)
    Transforms cv::Point3f point type.
    +
    pcl::PointCloud< pcl::PointXYZ >::Ptr RTABMAP_CORE_EXPORT transformPointCloud(const pcl::PointCloud< pcl::PointXYZ >::Ptr &cloud, const Transform &transform)
    Transforms pcl::PointXYZ point cloud type.
    + +
    + + + + diff --git a/preview/pr-1492/api/latest/version-switcher.js b/preview/pr-1492/api/latest/version-switcher.js new file mode 100644 index 00000000..7602c6c2 --- /dev/null +++ b/preview/pr-1492/api/latest/version-switcher.js @@ -0,0 +1,74 @@ +/* Renders the version dropdown into Doxygen's #projectnumber element. + * + * Expects two things set up by the generated HTML header (see Doxyfile.in): + * - window.RTABMAP_DOC_ROOT: Doxygen's $relpath^, i.e. the path from the + * current page back to the root of *this* version's documentation. + * - versions.js loaded from the API root, defining RTABMAP_DOC_VERSIONS. + * + * Everything is computed relative to those two, so the same files work for a + * local preview (file:// or a static server) and for the published site, + * whatever prefix it is served under. + */ +(function () { + 'use strict'; + + function onReady(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + onReady(function () { + var versions = window.RTABMAP_DOC_VERSIONS; + var holder = document.getElementById('projectnumber'); + if (!versions || !versions.length || !holder) { + return; // no version list deployed, or an unexpected Doxygen layout + } + + // Absolute path of this version's doc root, then of the API root above it. + var anchor = document.createElement('a'); + anchor.href = window.RTABMAP_DOC_ROOT || './'; + var versionRoot = anchor.pathname.replace(/[^/]*$/, ''); // .../api// + var apiRoot = versionRoot.replace(/[^/]+\/$/, ''); // .../api/ + var currentDir = versionRoot.slice(apiRoot.length).replace(/\/$/, ''); + var pageInVersion = window.location.pathname.slice(versionRoot.length); + + var select = document.createElement('select'); + select.className = 'rtabmap-version-switcher'; + select.setAttribute('aria-label', 'Documentation version'); + + var matched = false; + versions.forEach(function (entry) { + var option = document.createElement('option'); + option.textContent = entry[0]; + option.value = entry[1]; + if (entry[1] === currentDir) { + option.selected = true; + matched = true; + } + select.appendChild(option); + }); + + // Version not in the list (a local build, or a folder not published yet): + // show it so the box never lies about which docs are open. + if (!matched && currentDir) { + var current = document.createElement('option'); + current.textContent = currentDir; + current.value = currentDir; + current.selected = true; + select.insertBefore(current, select.firstChild); + } + + select.addEventListener('change', function () { + // Keep the reader on the same page in the target version. Pages that + // did not exist back then 404, which is the usual trade-off; the + // alternative (always landing on index.html) is worse for deep links. + window.location.href = apiRoot + select.value + '/' + pageInVersion; + }); + + holder.textContent = ''; + holder.appendChild(select); + }); +})(); diff --git a/preview/pr-1492/api/versions.js b/preview/pr-1492/api/versions.js new file mode 100644 index 00000000..9c3b074e --- /dev/null +++ b/preview/pr-1492/api/versions.js @@ -0,0 +1,17 @@ +/* Single source of truth for the API documentation version dropdown. + * + * This file is deployed ONCE at the root of the API docs (e.g. /api/versions.js), + * NOT inside each version folder. Every published version loads this same file, + * so adding an entry here makes the new release appear in the dropdown of all + * previously published versions at once. + * + * To publish a new release, add ONE entry at the top and redeploy this file to + * the API docs root. Format: ['
  • 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 Y%Yzf%4kURiEv!IMVM(E=(^u~Nf0(ChQvd(} literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/UMath_8h__incl.map b/preview/pr-1492/api/latest/UMath_8h__incl.map new file mode 100644 index 00000000..aa1b862f --- /dev/null +++ b/preview/pr-1492/api/latest/UMath_8h__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/preview/pr-1492/api/latest/UMath_8h__incl.md5 b/preview/pr-1492/api/latest/UMath_8h__incl.md5 new file mode 100644 index 00000000..4faf70e5 --- /dev/null +++ b/preview/pr-1492/api/latest/UMath_8h__incl.md5 @@ -0,0 +1 @@ +27c267cbccdda8a9a154e9004b9342b2 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UMath_8h__incl.png b/preview/pr-1492/api/latest/UMath_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..bc205e38fda372ee12711896fbf38dedd2d00e3e GIT binary patch literal 8108 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 T$zcQIcLeDV3gV@rpM3rUf7&*y literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/UMath_8h_source.html b/preview/pr-1492/api/latest/UMath_8h_source.html new file mode 100644 index 00000000..f9a4e778 --- /dev/null +++ b/preview/pr-1492/api/latest/UMath_8h_source.html @@ -0,0 +1,874 @@ + + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UMath.h Source File + + + + + + + + + + + + +

    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 literal 0 HcmV?d00001 diff --git a/preview/pr-1492/api/latest/UConversion_8h__incl.map b/preview/pr-1492/api/latest/UConversion_8h__incl.map new file mode 100644 index 00000000..ab1aab87 --- /dev/null +++ b/preview/pr-1492/api/latest/UConversion_8h__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/preview/pr-1492/api/latest/UConversion_8h__incl.md5 b/preview/pr-1492/api/latest/UConversion_8h__incl.md5 new file mode 100644 index 00000000..353958cf --- /dev/null +++ b/preview/pr-1492/api/latest/UConversion_8h__incl.md5 @@ -0,0 +1 @@ +a990f62e137578dcec4892d04cbadec6 \ No newline at end of file diff --git a/preview/pr-1492/api/latest/UConversion_8h__incl.png b/preview/pr-1492/api/latest/UConversion_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..be250dcd973f82d76b2244de7fcff392775aefc0 GIT binary patch literal 13703 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 + + + + + + + +RTAB-Map: utilite/include/rtabmap/utilite/UConversion.h Source File + + + + + + + + + + + + +