43 , rest_helper_(new
rc_rest_api::RestHelper(host,
"rc_silhouettematch", 10000))
60 template <
typename Request,
typename Response>
66 const auto j_res =
rest_helper_->servicePutRequest(name, j_req);
72 ROS_ERROR(
"This rc_visard firmware does not support \"%s\"", ex.what());
73 res.return_code.value = -8;
74 res.return_code.message =
"Not available in this firmware version";
77 catch (
const std::exception& ex)
80 res.return_code.value = -2;
81 res.return_code.message = ex.what();
88 bool success =
callService(
"detect_object", req, res);
89 if (success && res.return_code.value >= 0 &&
visualizer_)
98 bool success =
callService(
"calibrate_base_plane", req, res);
99 if (success && res.return_code.value >= 0 &&
visualizer_)
101 visualizer_->visBasePlane(res.plane, res.timestamp);
107 GetBasePlaneCalibration::Response& res)
109 callService(
"get_base_plane_calibration", req, res);
114 DeleteBasePlaneCalibration::Response& res)
116 callService(
"delete_base_plane_calibration", req, res);
122 callService(
"set_region_of_interest_2d", req, res);
128 callService(
"get_regions_of_interest_2d", req, res);
134 callService(
"delete_regions_of_interest_2d", req, res);
140 for (
const auto&
param : params)
142 const auto& name =
param[
"name"];
143 if (name ==
"max_number_of_detected_objects")
144 cfg.max_number_of_detected_objects =
param[
"value"];
145 else if (name ==
"edge_sensitivity")
146 cfg.edge_sensitivity =
param[
"value"];
147 else if (name ==
"match_max_distance")
148 cfg.match_max_distance =
param[
"value"];
149 else if (name ==
"match_percentile")
150 cfg.match_percentile =
param[
"value"];
151 else if (name ==
"quality")
152 cfg.quality =
param[
"value"];
160 SilhouetteMatchConfig cfg;
166 nh_.
param(
"max_number_of_detected_objects", cfg.max_number_of_detected_objects, cfg.max_number_of_detected_objects);
167 nh_.
param(
"edge_sensitivity", cfg.edge_sensitivity, cfg.edge_sensitivity);
168 nh_.
param(
"match_max_distance", cfg.match_max_distance, cfg.match_max_distance);
169 nh_.
param(
"match_percentile", cfg.match_percentile, cfg.match_percentile);
170 nh_.
param(
"quality", cfg.quality, cfg.quality);
173 nh_.
setParam(
"max_number_of_detected_objects", cfg.max_number_of_detected_objects);
174 nh_.
setParam(
"edge_sensitivity", cfg.edge_sensitivity);
175 nh_.
setParam(
"match_max_distance", cfg.match_max_distance);
176 nh_.
setParam(
"match_percentile", cfg.match_percentile);
180 using ReconfServer = dynamic_reconfigure::Server<SilhouetteMatchConfig>;
181 dyn_reconf_ = std::unique_ptr<ReconfServer>(
new ReconfServer(
nh_));
188 j_params.emplace_back(
189 json{ {
"name",
"max_number_of_detected_objects" }, {
"value", config.max_number_of_detected_objects } });
190 j_params.emplace_back(
json{ {
"name",
"edge_sensitivity" }, {
"value", config.edge_sensitivity } });
191 j_params.emplace_back(
json{ {
"name",
"match_max_distance" }, {
"value", config.match_max_distance } });
192 j_params.emplace_back(
json{ {
"name",
"match_percentile" }, {
"value", config.match_percentile } });
193 j_params.emplace_back(
json{ {
"name",
"quality" }, {
"value", config.quality } });
195 if (config.publish_vis)
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val)
void updateParameters(SilhouetteMatchConfig &config, uint32_t)
bool getROIs(GetRegionsOfInterest::Request &req, GetRegionsOfInterest::Response &res)
bool detectObject(DetectObject::Request &req, DetectObject::Response &res)
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
bool callService(const std::string &name, const Request &req, Response &res)
void paramsToCfg(const json ¶ms, SilhouetteMatchConfig &cfg)
SilhouetteMatchClient(const std::string &host, ros::NodeHandle &nh)
std::unique_ptr< rc_rest_api::RestHelper > rest_helper_
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val) const
std::unique_ptr< dynamic_reconfigure::Server< SilhouetteMatchConfig > > dyn_reconf_
std::unique_ptr< Visualizer > visualizer_
std::vector< ros::ServiceServer > srvs_
bool deleteROIs(DeleteRegionsOfInterest::Request &req, DeleteRegionsOfInterest::Response &res)
bool deleteBasePlaneCalib(DeleteBasePlaneCalibration::Request &req, DeleteBasePlaneCalibration::Response &res)
bool getBasePlaneCalib(GetBasePlaneCalibration::Request &req, GetBasePlaneCalibration::Response &res)
bool setROI(SetRegionOfInterest::Request &req, SetRegionOfInterest::Response &res)
bool calibrateBasePlane(CalibrateBasePlane::Request &req, CalibrateBasePlane::Response &res)
void setParam(const std::string &key, const XmlRpc::XmlRpcValue &v) const