aruco_pose: dynamic reconfiguration of aruco detector (#180)

* aruco_detect: dynamic reconfiguration

* aruco_pose: Depend on dynamic_reconfigure

* aruco_pose: Use c++11 features instead of Boost

* aruco_pose: Rearrange parameters, reset to OpenCV defaults

* Update constrains for some parameters

* aruco_pose: don’t hard-cord defaults for dynamic reconfigure

* aruco_pose: add missing parameters

* aruco_pose: fix tests

* aruco_pose: typo

* aruco_pose: fix

* aruco_pose: fix test

* aruco_pose: hardcode some new dynamic reconfigure parameters

Co-authored-by: Alexey Rogachevskiy <sfalexrog@gmail.com>
Co-authored-by: Arthur Golubtsov <goldartt@gmail.com>
This commit is contained in:
Oleg Kalachev
2020-01-29 05:17:39 +03:00
committed by GitHub
parent 647652f85f
commit 2cd334c474
5 changed files with 156 additions and 5 deletions

View File

@@ -30,6 +30,7 @@
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
#include <image_transport/image_transport.h>
#include <cv_bridge/cv_bridge.h>
#include <dynamic_reconfigure/server.h>
#include <geometry_msgs/Vector3.h>
#include <geometry_msgs/Pose.h>
#include <geometry_msgs/PoseStamped.h>
@@ -46,8 +47,11 @@
#include <aruco_pose/Marker.h>
#include <aruco_pose/MarkerArray.h>
#include <aruco_pose/DetectorConfig.h>
#include "utils.h"
#include <memory>
#include <functional>
using std::vector;
using cv::Mat;
@@ -58,6 +62,7 @@ private:
tf2_ros::TransformBroadcaster br_;
tf2_ros::Buffer tf_buffer_;
tf2_ros::TransformListener tf_listener_{tf_buffer_};
std::shared_ptr<dynamic_reconfigure::Server<aruco_pose::DetectorConfig>> dyn_srv_;
cv::Ptr<cv::aruco::Dictionary> dictionary_;
cv::Ptr<cv::aruco::DetectorParameters> parameters_;
image_transport::Publisher debug_pub_;
@@ -110,6 +115,12 @@ public:
vis_markers_pub_ = nh_priv_.advertise<visualization_msgs::MarkerArray>("visualization", 1);
img_sub_ = it.subscribeCamera("image_raw", 1, &ArucoDetect::imageCallback, this);
dyn_srv_ = std::make_shared<dynamic_reconfigure::Server<aruco_pose::DetectorConfig>>(nh_priv_);
dynamic_reconfigure::Server<aruco_pose::DetectorConfig>::CallbackType cb;
cb = std::bind(&ArucoDetect::paramCallback, this, std::placeholders::_1, std::placeholders::_2);
dyn_srv_->setCallback(cb);
NODELET_INFO("ready");
}
@@ -341,6 +352,37 @@ private:
map_markers_ids_.insert(marker.id);
}
}
void paramCallback(aruco_pose::DetectorConfig &config, uint32_t level)
{
parameters_->adaptiveThreshConstant = config.adaptiveThreshConstant;
parameters_->adaptiveThreshWinSizeMin = config.adaptiveThreshWinSizeMin;
parameters_->adaptiveThreshWinSizeMax = config.adaptiveThreshWinSizeMax;
parameters_->adaptiveThreshWinSizeStep = config.adaptiveThreshWinSizeStep;
parameters_->cornerRefinementMaxIterations = config.cornerRefinementMaxIterations;
parameters_->cornerRefinementMethod = config.cornerRefinementMethod;
parameters_->cornerRefinementMinAccuracy = config.cornerRefinementMinAccuracy;
parameters_->cornerRefinementWinSize = config.cornerRefinementWinSize;
#if ((CV_VERSION_MAJOR == 3) && (CV_VERSION_MINOR >= 4) && (CV_VERSION_REVISION >= 7)) || (CV_VERSION_MAJOR > 3)
parameters_->detectInvertedMarker = config.detectInvertedMarker;
#endif
parameters_->errorCorrectionRate = config.errorCorrectionRate;
parameters_->minCornerDistanceRate = config.minCornerDistanceRate;
parameters_->markerBorderBits = config.markerBorderBits;
parameters_->maxErroneousBitsInBorderRate = config.maxErroneousBitsInBorderRate;
parameters_->minDistanceToBorder = config.minDistanceToBorder;
parameters_->minMarkerDistanceRate = config.minMarkerDistanceRate;
parameters_->minMarkerPerimeterRate = config.minMarkerPerimeterRate;
parameters_->maxMarkerPerimeterRate = config.maxMarkerPerimeterRate;
parameters_->minOtsuStdDev = config.minOtsuStdDev;
parameters_->perspectiveRemoveIgnoredMarginPerCell = config.perspectiveRemoveIgnoredMarginPerCell;
parameters_->perspectiveRemovePixelPerCell = config.perspectiveRemovePixelPerCell;
parameters_->polygonalApproxAccuracyRate = config.polygonalApproxAccuracyRate;
#if ((CV_VERSION_MAJOR == 3) && (CV_VERSION_MINOR >= 4) && (CV_VERSION_REVISION >= 2)) || (CV_VERSION_MAJOR > 3)
parameters_->aprilTagQuadDecimate = config.aprilTagQuadDecimate;
parameters_->aprilTagQuadSigma = config.aprilTagQuadSigma;
#endif
}
};
PLUGINLIB_EXPORT_CLASS(ArucoDetect, nodelet::Nodelet)