mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 09:30:25 +08:00
Charuco calibration + depthai calibration support (#1302)
* In progress: adding charuco option * DepthAI: added raw image publishing mode (added support rtabmap's calibration file). Calibration: working charuco board calibration (on opencv 4.5). * fixed build with Qt<5.14 * Updated calibration options * Removed depthai flashing delays * depthai: fixed camera not detected as calibrated in Mono-depth mode. Calibration: added option to scale sampling factor.
This commit is contained in:
@@ -39,7 +39,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#include <rtabmap/utilite/UEventsHandler.h>
|
||||
|
||||
#include <opencv2/aruco/charuco.hpp>
|
||||
|
||||
class Ui_calibrationDialog;
|
||||
class QTextStream;
|
||||
|
||||
namespace rtabmap {
|
||||
|
||||
@@ -60,6 +63,7 @@ public:
|
||||
int boardWidth() const;
|
||||
int boardHeight() const;
|
||||
double squareSize() const;
|
||||
double markerLength() const;
|
||||
|
||||
void saveSettings(QSettings & settings, const QString & group = "") const;
|
||||
void loadSettings(QSettings & settings, const QString & group = "");
|
||||
@@ -74,17 +78,24 @@ public:
|
||||
void setStereoMode(bool stereo, const QString & leftSuffix = "left", const QString & rightSuffix = "right");
|
||||
void setSavingDirectory(const QString & savingDirectory) {savingDirectory_ = savingDirectory;}
|
||||
|
||||
StereoCameraModel stereoCalibration(const CameraModel & left, const CameraModel & right, bool ignoreStereoRectification) const;
|
||||
StereoCameraModel stereoCalibration(const CameraModel & left, const CameraModel & right, bool ignoreStereoRectification, QTextStream * logStream = 0) const;
|
||||
|
||||
public Q_SLOTS:
|
||||
|
||||
void setBoardType(int type);
|
||||
void setBoardWidth(int width);
|
||||
void setBoardHeight(int height);
|
||||
void setSquareSize(double size);
|
||||
void setMarkerDictionary(int dictionary);
|
||||
void setMarkerLength(double length);
|
||||
void setSubpixelRefinement(bool enabled);
|
||||
void setSubpixelMaxError(double value);
|
||||
void setCalibrationDataSaved(bool enabled);
|
||||
void setExpectedStereoBaseline(double length);
|
||||
void setMaxScale(int scale);
|
||||
|
||||
void processImages(const cv::Mat & imageLeft, const cv::Mat & imageRight, const QString & cameraName);
|
||||
void generateBoard();
|
||||
void calibrate();
|
||||
void restart();
|
||||
bool save();
|
||||
@@ -98,6 +109,7 @@ protected:
|
||||
|
||||
private:
|
||||
float getArea(const std::vector<cv::Point2f> & corners, const cv::Size & boardSize);
|
||||
float getSkew(const std::vector<cv::Point2f> & fourCorners);
|
||||
float getSkew(const std::vector<cv::Point2f> & corners, const cv::Size & boardSize);
|
||||
|
||||
// x -> [0, 1] (left, right)
|
||||
@@ -120,10 +132,19 @@ private:
|
||||
int currentId_;
|
||||
QString timestamp_;
|
||||
|
||||
std::vector<cv::Point3f> chessboardPoints_;
|
||||
std::vector<int> chessboardPointIds_;
|
||||
cv::Ptr<cv::aruco::Dictionary> markerDictionary_;
|
||||
cv::Ptr<cv::aruco::DetectorParameters> arucoDetectorParams_;
|
||||
cv::Ptr<cv::aruco::CharucoBoard> charucoBoard_;
|
||||
|
||||
|
||||
std::vector<std::vector<std::vector<cv::Point2f> > > imagePoints_;
|
||||
std::vector<std::vector<std::vector<cv::Point3f> > > objectPoints_;
|
||||
std::vector<std::vector<std::vector<float> > > imageParams_;
|
||||
std::vector<std::vector<int > > imageIds_;
|
||||
std::vector<std::vector<std::vector<cv::Point2f> > > stereoImagePoints_;
|
||||
std::vector<std::vector<cv::Point3f> > stereoObjectPoints_;
|
||||
std::vector<int> stereoImageIds_;
|
||||
std::vector<cv::Size > imageSize_;
|
||||
std::vector<rtabmap::CameraModel> models_;
|
||||
|
||||
@@ -44,6 +44,7 @@ namespace rtabmap {
|
||||
|
||||
class ImageView;
|
||||
class CloudViewer;
|
||||
class MarkerDetector;
|
||||
|
||||
class RTABMAP_GUI_EXPORT CameraViewer : public QDialog, public UEventsHandler
|
||||
{
|
||||
@@ -70,6 +71,8 @@ private:
|
||||
QLabel * imageSizeLabel_;
|
||||
QCheckBox * showCloudCheckbox_;
|
||||
QCheckBox * showScanCheckbox_;
|
||||
QCheckBox * markerCheckbox_;
|
||||
MarkerDetector * markerDetector_;
|
||||
};
|
||||
|
||||
} /* namespace rtabmap */
|
||||
|
||||
@@ -76,7 +76,8 @@ public:
|
||||
kPanelCloudRendering = 2,
|
||||
kPanelLogging = 4,
|
||||
kPanelSource = 8,
|
||||
kPanelAll = 15
|
||||
kPanelCalibration = 16,
|
||||
kPanelAll = 31
|
||||
};
|
||||
// TODO, tried to change the name of PANEL_FLAGS to PanelFlags... but signals/slots errors appeared...
|
||||
Q_DECLARE_FLAGS(PANEL_FLAGS, PanelFlag);
|
||||
@@ -347,6 +348,7 @@ private Q_SLOTS:
|
||||
void makeObsoleteCloudRenderingPanel();
|
||||
void makeObsoleteLoggingPanel();
|
||||
void makeObsoleteSourcePanel();
|
||||
void makeObsoleteCalibrationPanel();
|
||||
void clicked(const QModelIndex & current, const QModelIndex & previous);
|
||||
void addParameter(int value);
|
||||
void addParameter(bool value);
|
||||
|
||||
Reference in New Issue
Block a user