LiDAR capture support in standalone library (#1264)

* Working rtabmap_lidar-mapping example (live and pcap)

* finalizing merge, added some deprecated

* fixed build

* Working deskewing for Lidar + Camera/IMU (no camera pose correction yet) and Lidar + Odom Sensor in main UI.

* backward compatibility

* fixed some not used variable warnings, fixed qt build for lidar mapping example

* Refactored CameraMobile, added AREngine background support, fixed LidarVPL16 build error with PCL 1.8

* ARCoreJava: buffer last depth image in case its stamp i higher than pose stamp. CameraMobile: added pose buffer. SensorCaptureThread: to get pose, odomSensor should be explicitly set, but can be same as lidar or camera  inputs.

* Working external lidar on iOS

* util3d::commonFiltering()/adjustNormalsToViewPoint() added organized cloud support. MainWindow: updated odomSensor setup

* fixed winsock include order

* reverted camera tool

* disable imu filtering when odom sensor is used

* Updated package version

* fixed windows build

* fixing more windows build erros
This commit is contained in:
matlabbe
2024-04-14 19:06:04 -07:00
committed by GitHub
parent 6a6913c939
commit 700704bec9
131 changed files with 10585 additions and 7476 deletions

View File

@@ -53,6 +53,7 @@ public:
QWidget * parent = 0,
const ParametersMap & parameters = ParametersMap());
virtual ~CameraViewer();
void setDecimation(int value);
public Q_SLOTS:
void showImage(const rtabmap::SensorData & data);

View File

@@ -37,7 +37,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "rtabmap/core/RtabmapEvent.h"
#include "rtabmap/core/SensorData.h"
#include "rtabmap/core/OdometryEvent.h"
#include "rtabmap/core/CameraInfo.h"
#include "rtabmap/core/Optimizer.h"
#include "rtabmap/core/GlobalMap.h"
#include "rtabmap/gui/PreferencesDialog.h"
@@ -47,9 +46,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <pcl/PolygonMesh.h>
#include <pcl/pcl_base.h>
#include <pcl/TextureMesh.h>
#include <rtabmap/core/SensorCaptureInfo.h>
namespace rtabmap {
class CameraThread;
class SensorCaptureThread;
class OdometryThread;
class IMUThread;
class CloudViewer;
@@ -192,6 +192,7 @@ protected Q_SLOTS:
void selectDepthAIOAKD();
void selectDepthAIOAKDLite();
void selectDepthAIOAKDPro();
void selectVLP16();
void dumpTheMemory();
void dumpThePrediction();
void sendGoal();
@@ -206,7 +207,7 @@ protected Q_SLOTS:
void selectScreenCaptureFormat(bool checked);
void takeScreenshot();
void updateElapsedTime();
void processCameraInfo(const rtabmap::CameraInfo & info);
void processCameraInfo(const rtabmap::SensorCaptureInfo & info);
void processOdometry(const rtabmap::OdometryEvent & odom, bool dataIgnored);
void applyPrefSettings(PreferencesDialog::PANEL_FLAGS flags);
void applyPrefSettings(const rtabmap::ParametersMap & parameters);
@@ -241,7 +242,7 @@ protected Q_SLOTS:
Q_SIGNALS:
void statsReceived(const rtabmap::Statistics &);
void statsProcessed();
void cameraInfoReceived(const rtabmap::CameraInfo &);
void cameraInfoReceived(const rtabmap::SensorCaptureInfo &);
void cameraInfoProcessed();
void odometryReceived(const rtabmap::OdometryEvent &, bool);
void odometryProcessed();
@@ -316,11 +317,6 @@ protected:
const QString & newDatabasePathOutput() const { return _newDatabasePathOutput; }
virtual ParametersMap getCustomParameters() {return ParametersMap();}
virtual Camera * createCamera(
Camera ** odomSensor,
Transform & odomSensorExtrinsics,
double & odomSensorTimeOffset,
float & odomSensorScaleFactor);
void postProcessing(
bool refineNeighborLinks,
@@ -344,7 +340,7 @@ private:
Ui_mainWindow * _ui;
State _state;
rtabmap::CameraThread * _camera;
rtabmap::SensorCaptureThread * _sensorCapture;
rtabmap::OdometryThread * _odomThread;
rtabmap::IMUThread * _imuThread;

View File

@@ -60,6 +60,8 @@ namespace rtabmap {
class Signature;
class LoopClosureViewer;
class Camera;
class SensorCapture;
class Lidar;
class CalibrationDialog;
class CreateSimpleCalibrationDialog;
@@ -77,7 +79,7 @@ public:
kPanelAll = 15
};
// TODO, tried to change the name of PANEL_FLAGS to PanelFlags... but signals/slots errors appeared...
Q_DECLARE_FLAGS(PANEL_FLAGS, PanelFlag)
Q_DECLARE_FLAGS(PANEL_FLAGS, PanelFlag);
enum Src {
kSrcUndef = -1,
@@ -113,7 +115,10 @@ public:
kSrcImages = 201,
kSrcVideo = 202,
kSrcDatabase = 300
kSrcDatabase = 300,
kSrcLidar = 400,
kSrcLidarVLP16 = 400,
};
public:
@@ -253,6 +258,7 @@ public:
PreferencesDialog::Src getSourceDriver() const;
QString getSourceDriverStr() const;
QString getSourceDevice() const;
PreferencesDialog::Src getLidarSourceDriver() const;
PreferencesDialog::Src getOdomSourceDriver() const;
bool isSourceDatabaseStampsUsed() const;
@@ -271,6 +277,7 @@ public:
bool isSourceStereoDepthGenerated() const;
bool isSourceStereoExposureCompensation() const;
bool isSourceScanFromDepth() const;
bool isSourceScanDeskewing() const;
int getSourceScanDownsampleStep() const;
double getSourceScanRangeMin() const;
double getSourceScanRangeMax() const;
@@ -284,7 +291,8 @@ public:
QString getIMUPath() const;
int getIMURate() const;
Camera * createCamera(bool useRawImages = false, bool useColor = true); // return camera should be deleted if not null
Camera * createOdomSensor(Transform & extrinsics, double & timeOffset, float & scaleFactor); // return camera should be deleted if not null
SensorCapture * createOdomSensor(Transform & extrinsics, double & timeOffset, float & scaleFactor, double & waitTime); // return odom sensor should be deleted if not null
Lidar * createLidar(); // return lidar should be deleted if not null
int getIgnoredDCComponents() const;
@@ -324,6 +332,7 @@ public Q_SLOTS:
void calibrate();
void calibrateSimple();
void calibrateOdomSensorExtrinsics();
void testLidar();
private Q_SLOTS:
void closeDialog ( QAbstractButton * button );
@@ -332,6 +341,7 @@ private Q_SLOTS:
void loadConfigFrom();
bool saveConfigTo();
void resetConfig();
void loadPreset();
void makeObsoleteGeneralPanel();
void makeObsoleteCloudRenderingPanel();
void makeObsoleteLoggingPanel();
@@ -389,6 +399,7 @@ private Q_SLOTS:
void selectSourceSvoPath();
void selectSourceRealsense2JsonPath();
void selectSourceDepthaiBlobPath();
void selectVlp16PcapPath();
void updateSourceGrpVisibility();
void testOdometry();
void testCamera();
@@ -417,6 +428,7 @@ private:
void setupKpRoiPanel();
bool parseModel(QList<QGroupBox*> & boxes, QStandardItem * parentItem, int currentLevel, int & absoluteIndex);
void resetSettings(QGroupBox * groupBox);
void loadPreset(const std::string & presetHexHeader);
void addParameter(const QObject * object, int value);
void addParameter(const QObject * object, bool value);
void addParameter(const QObject * object, double value);