43 , rest_helper_(new
rc_rest_api::RestHelper(host,
"rc_silhouettematch", 10000))
57 template <
typename Request,
typename Response>
63 const auto j_res =
rest_helper_->servicePutRequest(name, j_req);
69 ROS_ERROR(
"This rc_visard firmware does not support \"%s\"", ex.what());
70 res.return_code.value = -8;
71 res.return_code.message =
"Not available in this firmware version";
74 catch (
const std::exception& ex)
77 res.return_code.value = -2;
78 res.return_code.message = ex.what();
85 bool success =
callService(
"detect_object", req, res);
86 if (success && res.return_code.value >= 0 &&
visualizer_)
95 bool success =
callService(
"calibrate_base_plane", req, res);
96 if (success && res.return_code.value >= 0 &&
visualizer_)
98 visualizer_->visBasePlane(res.plane, res.timestamp);
104 GetBasePlaneCalibration::Response& res)
106 callService(
"get_base_plane_calibration", req, res);
111 DeleteBasePlaneCalibration::Response& res)
113 callService(
"delete_base_plane_calibration", req, res);
119 for (
const auto&
param : params)
121 const auto& name =
param[
"name"];
122 if (name ==
"max_number_of_detected_objects")
123 cfg.max_number_of_detected_objects =
param[
"value"];
124 else if (name ==
"edge_sensitivity")
125 cfg.edge_sensitivity =
param[
"value"];
126 else if (name ==
"match_max_distance")
127 cfg.match_max_distance =
param[
"value"];
128 else if (name ==
"match_percentile")
129 cfg.match_percentile =
param[
"value"];
130 else if (name ==
"quality")
131 cfg.quality =
param[
"value"];
139 SilhouetteMatchConfig cfg;
145 nh_.
param(
"max_number_of_detected_objects", cfg.max_number_of_detected_objects, cfg.max_number_of_detected_objects);
146 nh_.
param(
"edge_sensitivity", cfg.edge_sensitivity, cfg.edge_sensitivity);
147 nh_.
param(
"match_max_distance", cfg.match_max_distance, cfg.match_max_distance);
148 nh_.
param(
"match_percentile", cfg.match_percentile, cfg.match_percentile);
149 nh_.
param(
"quality", cfg.quality, cfg.quality);
152 nh_.
setParam(
"max_number_of_detected_objects", cfg.max_number_of_detected_objects);
153 nh_.
setParam(
"edge_sensitivity", cfg.edge_sensitivity);
154 nh_.
setParam(
"match_max_distance", cfg.match_max_distance);
155 nh_.
setParam(
"match_percentile", cfg.match_percentile);
159 using ReconfServer = dynamic_reconfigure::Server<SilhouetteMatchConfig>;
160 dyn_reconf_ = std::unique_ptr<ReconfServer>(
new ReconfServer(
nh_));
167 j_params.emplace_back(
168 json{ {
"name",
"max_number_of_detected_objects" }, {
"value", config.max_number_of_detected_objects } });
169 j_params.emplace_back(
json{ {
"name",
"edge_sensitivity" }, {
"value", config.edge_sensitivity } });
170 j_params.emplace_back(
json{ {
"name",
"match_max_distance" }, {
"value", config.match_max_distance } });
171 j_params.emplace_back(
json{ {
"name",
"match_percentile" }, {
"value", config.match_percentile } });
172 j_params.emplace_back(
json{ {
"name",
"quality" }, {
"value", config.quality } });
174 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 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)
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val) const
std::unique_ptr< rc_rest_api::RestHelper > rest_helper_
std::unique_ptr< dynamic_reconfigure::Server< SilhouetteMatchConfig > > dyn_reconf_
std::unique_ptr< Visualizer > visualizer_
std::vector< ros::ServiceServer > srvs_
void setParam(const std::string &key, const XmlRpc::XmlRpcValue &v) const
bool deleteBasePlaneCalib(DeleteBasePlaneCalibration::Request &req, DeleteBasePlaneCalibration::Response &res)
bool getBasePlaneCalib(GetBasePlaneCalibration::Request &req, GetBasePlaneCalibration::Response &res)
bool calibrateBasePlane(CalibrateBasePlane::Request &req, CalibrateBasePlane::Response &res)