Added developer parameter API
This commit is contained in:
parent
1e516426d0
commit
5a74f32ba0
2 changed files with 120 additions and 10 deletions
|
@ -190,6 +190,14 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rcl_interfaces::Parameter to_parameter()
|
||||||
|
{
|
||||||
|
rcl_interfaces::Parameter parameter;
|
||||||
|
parameter.name = name_;
|
||||||
|
parameter.value = value_;
|
||||||
|
return parameter;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string name_;
|
std::string name_;
|
||||||
rcl_interfaces::ParameterValue value_;
|
rcl_interfaces::ParameterValue value_;
|
||||||
|
|
|
@ -67,8 +67,35 @@ public:
|
||||||
std::function<void(
|
std::function<void(
|
||||||
std::shared_future<std::vector<rclcpp::parameter::ParameterVariant>>)> callback = nullptr)
|
std::shared_future<std::vector<rclcpp::parameter::ParameterVariant>>)> callback = nullptr)
|
||||||
{
|
{
|
||||||
std::shared_future<std::vector<rclcpp::parameter::ParameterVariant>> f;
|
std::promise<std::vector<rclcpp::parameter::ParameterVariant>> promise_result;
|
||||||
return f;
|
auto future_result = promise_result.get_future().share();
|
||||||
|
|
||||||
|
auto request = std::make_shared<rcl_interfaces::GetParameters::Request>();
|
||||||
|
request->names = names;
|
||||||
|
|
||||||
|
get_parameters_client_->async_send_request(
|
||||||
|
request,
|
||||||
|
[&names, &promise_result, &future_result, &callback](
|
||||||
|
rclcpp::client::Client<rcl_interfaces::GetParameters>::SharedFuture cb_f) {
|
||||||
|
std::vector<rclcpp::parameter::ParameterVariant> parameter_variants;
|
||||||
|
auto & pvalues = cb_f.get()->values;
|
||||||
|
|
||||||
|
std::transform(pvalues.begin(), pvalues.end(), std::back_inserter(parameter_variants),
|
||||||
|
[&names, &pvalues](rcl_interfaces::ParameterValue pvalue) {
|
||||||
|
auto i = &pvalue - &pvalues[0];
|
||||||
|
rcl_interfaces::Parameter parameter;
|
||||||
|
parameter.name = names[i];
|
||||||
|
parameter.value = pvalue;
|
||||||
|
return rclcpp::parameter::ParameterVariant::from_parameter(parameter);
|
||||||
|
});
|
||||||
|
promise_result.set_value(parameter_variants);
|
||||||
|
if (callback != nullptr) {
|
||||||
|
callback(future_result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return future_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_future<std::vector<rclcpp::parameter::ParameterType>>
|
std::shared_future<std::vector<rclcpp::parameter::ParameterType>>
|
||||||
|
@ -77,8 +104,28 @@ public:
|
||||||
std::function<void(
|
std::function<void(
|
||||||
std::shared_future<std::vector<rclcpp::parameter::ParameterType>>)> callback = nullptr)
|
std::shared_future<std::vector<rclcpp::parameter::ParameterType>>)> callback = nullptr)
|
||||||
{
|
{
|
||||||
std::shared_future<std::vector<rclcpp::parameter::ParameterType>> f;
|
std::promise<std::vector<rclcpp::parameter::ParameterType>> promise_result;
|
||||||
return f;
|
auto future_result = promise_result.get_future().share();
|
||||||
|
|
||||||
|
auto request = std::make_shared<rcl_interfaces::GetParameterTypes::Request>();
|
||||||
|
request->parameter_names = parameter_names;
|
||||||
|
|
||||||
|
get_parameter_types_client_->async_send_request(
|
||||||
|
request,
|
||||||
|
[&promise_result, &future_result, &callback](
|
||||||
|
rclcpp::client::Client<rcl_interfaces::GetParameterTypes>::SharedFuture cb_f) {
|
||||||
|
std::vector<rclcpp::parameter::ParameterType> parameter_types;
|
||||||
|
auto & pts = cb_f.get()->parameter_types;
|
||||||
|
std::transform(pts.begin(), pts.end(), std::back_inserter(parameter_types),
|
||||||
|
[](uint8_t pt) {return static_cast<rclcpp::parameter::ParameterType>(pt); });
|
||||||
|
promise_result.set_value(parameter_types);
|
||||||
|
if (callback != nullptr) {
|
||||||
|
callback(future_result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return future_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_future<std::vector<rcl_interfaces::SetParametersResult>>
|
std::shared_future<std::vector<rcl_interfaces::SetParametersResult>>
|
||||||
|
@ -87,8 +134,27 @@ public:
|
||||||
std::function<void(
|
std::function<void(
|
||||||
std::shared_future<std::vector<rcl_interfaces::SetParametersResult>>)> callback = nullptr)
|
std::shared_future<std::vector<rcl_interfaces::SetParametersResult>>)> callback = nullptr)
|
||||||
{
|
{
|
||||||
std::shared_future<std::vector<rcl_interfaces::SetParametersResult>> f;
|
std::promise<std::vector<rcl_interfaces::SetParametersResult>> promise_result;
|
||||||
return f;
|
auto future_result = promise_result.get_future().share();
|
||||||
|
|
||||||
|
auto request = std::make_shared<rcl_interfaces::SetParameters::Request>();
|
||||||
|
|
||||||
|
std::transform(parameters.begin(), parameters.end(), std::back_inserter(
|
||||||
|
request->parameters), [](
|
||||||
|
rclcpp::parameter::ParameterVariant p) {return p.to_parameter(); });
|
||||||
|
|
||||||
|
set_parameters_client_->async_send_request(
|
||||||
|
request,
|
||||||
|
[&promise_result, &future_result, &callback](
|
||||||
|
rclcpp::client::Client<rcl_interfaces::SetParameters>::SharedFuture cb_f) {
|
||||||
|
promise_result.set_value(cb_f.get()->results);
|
||||||
|
if (callback != nullptr) {
|
||||||
|
callback(future_result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return future_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_future<rcl_interfaces::SetParametersResult>
|
std::shared_future<rcl_interfaces::SetParametersResult>
|
||||||
|
@ -97,8 +163,27 @@ public:
|
||||||
std::function<void(
|
std::function<void(
|
||||||
std::shared_future<rcl_interfaces::SetParametersResult>)> callback = nullptr)
|
std::shared_future<rcl_interfaces::SetParametersResult>)> callback = nullptr)
|
||||||
{
|
{
|
||||||
std::shared_future<rcl_interfaces::SetParametersResult> f;
|
std::promise<rcl_interfaces::SetParametersResult> promise_result;
|
||||||
return f;
|
auto future_result = promise_result.get_future().share();
|
||||||
|
|
||||||
|
auto request = std::make_shared<rcl_interfaces::SetParametersAtomically::Request>();
|
||||||
|
|
||||||
|
std::transform(parameters.begin(), parameters.end(), std::back_inserter(
|
||||||
|
request->parameters), [](
|
||||||
|
rclcpp::parameter::ParameterVariant p) {return p.to_parameter(); });
|
||||||
|
|
||||||
|
set_parameters_atomically_client_->async_send_request(
|
||||||
|
request,
|
||||||
|
[&promise_result, &future_result, &callback](
|
||||||
|
rclcpp::client::Client<rcl_interfaces::SetParametersAtomically>::SharedFuture cb_f) {
|
||||||
|
promise_result.set_value(cb_f.get()->result);
|
||||||
|
if (callback != nullptr) {
|
||||||
|
callback(future_result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return future_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_future<rcl_interfaces::ListParametersResult>
|
std::shared_future<rcl_interfaces::ListParametersResult>
|
||||||
|
@ -108,8 +193,25 @@ public:
|
||||||
std::function<void(
|
std::function<void(
|
||||||
std::shared_future<rcl_interfaces::ListParametersResult>)> callback = nullptr)
|
std::shared_future<rcl_interfaces::ListParametersResult>)> callback = nullptr)
|
||||||
{
|
{
|
||||||
std::shared_future<rcl_interfaces::ListParametersResult> f;
|
std::promise<rcl_interfaces::ListParametersResult> promise_result;
|
||||||
return f;
|
auto future_result = promise_result.get_future().share();
|
||||||
|
|
||||||
|
auto request = std::make_shared<rcl_interfaces::ListParameters::Request>();
|
||||||
|
request->parameter_prefixes = parameter_prefixes;
|
||||||
|
request->depth = depth;
|
||||||
|
|
||||||
|
list_parameters_client_->async_send_request(
|
||||||
|
request,
|
||||||
|
[&promise_result, &future_result, &callback](
|
||||||
|
rclcpp::client::Client<rcl_interfaces::ListParameters>::SharedFuture cb_f) {
|
||||||
|
promise_result.set_value(cb_f.get()->result);
|
||||||
|
if (callback != nullptr) {
|
||||||
|
callback(future_result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return future_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue