Merge pull request #40 from ros2/parameters-roundup
Include feedback from https://github.com/ros2/ros2/issues/46
This commit is contained in:
commit
5c6c61662a
4 changed files with 31 additions and 31 deletions
|
@ -276,7 +276,7 @@ Node::describe_parameters(
|
||||||
{
|
{
|
||||||
rcl_interfaces::msg::ParameterDescriptor parameter_descriptor;
|
rcl_interfaces::msg::ParameterDescriptor parameter_descriptor;
|
||||||
parameter_descriptor.name = kv.first;
|
parameter_descriptor.name = kv.first;
|
||||||
parameter_descriptor.parameter_type = kv.second.get_type();
|
parameter_descriptor.type = kv.second.get_type();
|
||||||
results.push_back(parameter_descriptor);
|
results.push_back(parameter_descriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -321,13 +321,13 @@ Node::list_parameters(
|
||||||
return false;
|
return false;
|
||||||
}))
|
}))
|
||||||
{
|
{
|
||||||
result.parameter_names.push_back(kv.first);
|
result.names.push_back(kv.first);
|
||||||
size_t last_separator = kv.first.find_last_of('.');
|
size_t last_separator = kv.first.find_last_of('.');
|
||||||
std::string prefix = kv.first.substr(0, last_separator);
|
std::string prefix = kv.first.substr(0, last_separator);
|
||||||
if (std::find(result.parameter_prefixes.cbegin(), result.parameter_prefixes.cend(),
|
if (std::find(result.prefixes.cbegin(), result.prefixes.cend(),
|
||||||
prefix) == result.parameter_prefixes.cend())
|
prefix) == result.prefixes.cend())
|
||||||
{
|
{
|
||||||
result.parameter_prefixes.push_back(prefix);
|
result.prefixes.push_back(prefix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,52 +46,52 @@ public:
|
||||||
ParameterVariant()
|
ParameterVariant()
|
||||||
: name_("")
|
: name_("")
|
||||||
{
|
{
|
||||||
value_.parameter_type = rcl_interfaces::msg::ParameterType::PARAMETER_NOT_SET;
|
value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_NOT_SET;
|
||||||
}
|
}
|
||||||
explicit ParameterVariant(const std::string & name, const bool bool_value)
|
explicit ParameterVariant(const std::string & name, const bool bool_value)
|
||||||
: name_(name)
|
: name_(name)
|
||||||
{
|
{
|
||||||
value_.bool_value = bool_value;
|
value_.bool_value = bool_value;
|
||||||
value_.parameter_type = rcl_interfaces::msg::ParameterType::PARAMETER_BOOL;
|
value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BOOL;
|
||||||
}
|
}
|
||||||
explicit ParameterVariant(const std::string & name, const int int_value)
|
explicit ParameterVariant(const std::string & name, const int int_value)
|
||||||
: name_(name)
|
: name_(name)
|
||||||
{
|
{
|
||||||
value_.integer_value = int_value;
|
value_.integer_value = int_value;
|
||||||
value_.parameter_type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
|
value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
|
||||||
}
|
}
|
||||||
explicit ParameterVariant(const std::string & name, const int64_t int_value)
|
explicit ParameterVariant(const std::string & name, const int64_t int_value)
|
||||||
: name_(name)
|
: name_(name)
|
||||||
{
|
{
|
||||||
value_.integer_value = int_value;
|
value_.integer_value = int_value;
|
||||||
value_.parameter_type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
|
value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
|
||||||
}
|
}
|
||||||
explicit ParameterVariant(const std::string & name, const float double_value)
|
explicit ParameterVariant(const std::string & name, const float double_value)
|
||||||
: name_(name)
|
: name_(name)
|
||||||
{
|
{
|
||||||
value_.double_value = double_value;
|
value_.double_value = double_value;
|
||||||
value_.parameter_type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
|
value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
|
||||||
}
|
}
|
||||||
explicit ParameterVariant(const std::string & name, const double double_value)
|
explicit ParameterVariant(const std::string & name, const double double_value)
|
||||||
: name_(name)
|
: name_(name)
|
||||||
{
|
{
|
||||||
value_.double_value = double_value;
|
value_.double_value = double_value;
|
||||||
value_.parameter_type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
|
value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
|
||||||
}
|
}
|
||||||
explicit ParameterVariant(const std::string & name, const std::string & string_value)
|
explicit ParameterVariant(const std::string & name, const std::string & string_value)
|
||||||
: name_(name)
|
: name_(name)
|
||||||
{
|
{
|
||||||
value_.string_value = string_value;
|
value_.string_value = string_value;
|
||||||
value_.parameter_type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING;
|
value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING;
|
||||||
}
|
}
|
||||||
explicit ParameterVariant(const std::string & name, const std::vector<uint8_t> & bytes_value)
|
explicit ParameterVariant(const std::string & name, const std::vector<uint8_t> & bytes_value)
|
||||||
: name_(name)
|
: name_(name)
|
||||||
{
|
{
|
||||||
value_.bytes_value = bytes_value;
|
value_.bytes_value = bytes_value;
|
||||||
value_.parameter_type = rcl_interfaces::msg::ParameterType::PARAMETER_BYTES;
|
value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BYTES;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ParameterType get_type() const {return static_cast<ParameterType>(value_.parameter_type); }
|
inline ParameterType get_type() const {return static_cast<ParameterType>(value_.type); }
|
||||||
|
|
||||||
inline std::string get_name() const & {return name_; }
|
inline std::string get_name() const & {return name_; }
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ public:
|
||||||
typename std::enable_if<type == ParameterType::PARAMETER_INTEGER, int64_t>::type
|
typename std::enable_if<type == ParameterType::PARAMETER_INTEGER, int64_t>::type
|
||||||
get_value() const
|
get_value() const
|
||||||
{
|
{
|
||||||
if (value_.parameter_type != rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER) {
|
if (value_.type != rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER) {
|
||||||
// TODO: use custom exception
|
// TODO: use custom exception
|
||||||
throw std::runtime_error("Invalid type");
|
throw std::runtime_error("Invalid type");
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ public:
|
||||||
typename std::enable_if<type == ParameterType::PARAMETER_DOUBLE, double>::type
|
typename std::enable_if<type == ParameterType::PARAMETER_DOUBLE, double>::type
|
||||||
get_value() const
|
get_value() const
|
||||||
{
|
{
|
||||||
if (value_.parameter_type != rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE) {
|
if (value_.type != rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE) {
|
||||||
// TODO: use custom exception
|
// TODO: use custom exception
|
||||||
throw std::runtime_error("Invalid type");
|
throw std::runtime_error("Invalid type");
|
||||||
}
|
}
|
||||||
|
@ -124,7 +124,7 @@ public:
|
||||||
typename std::enable_if<type == ParameterType::PARAMETER_STRING, const std::string &>::type
|
typename std::enable_if<type == ParameterType::PARAMETER_STRING, const std::string &>::type
|
||||||
get_value() const
|
get_value() const
|
||||||
{
|
{
|
||||||
if (value_.parameter_type != rcl_interfaces::msg::ParameterType::PARAMETER_STRING) {
|
if (value_.type != rcl_interfaces::msg::ParameterType::PARAMETER_STRING) {
|
||||||
// TODO: use custom exception
|
// TODO: use custom exception
|
||||||
throw std::runtime_error("Invalid type");
|
throw std::runtime_error("Invalid type");
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ public:
|
||||||
typename std::enable_if<type == ParameterType::PARAMETER_BOOL, bool>::type
|
typename std::enable_if<type == ParameterType::PARAMETER_BOOL, bool>::type
|
||||||
get_value() const
|
get_value() const
|
||||||
{
|
{
|
||||||
if (value_.parameter_type != rcl_interfaces::msg::ParameterType::PARAMETER_BOOL) {
|
if (value_.type != rcl_interfaces::msg::ParameterType::PARAMETER_BOOL) {
|
||||||
// TODO: use custom exception
|
// TODO: use custom exception
|
||||||
throw std::runtime_error("Invalid type");
|
throw std::runtime_error("Invalid type");
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ public:
|
||||||
const std::vector<uint8_t> &>::type
|
const std::vector<uint8_t> &>::type
|
||||||
get_value() const
|
get_value() const
|
||||||
{
|
{
|
||||||
if (value_.parameter_type != rcl_interfaces::msg::ParameterType::PARAMETER_BYTES) {
|
if (value_.type != rcl_interfaces::msg::ParameterType::PARAMETER_BYTES) {
|
||||||
// TODO: use custom exception
|
// TODO: use custom exception
|
||||||
throw std::runtime_error("Invalid type");
|
throw std::runtime_error("Invalid type");
|
||||||
}
|
}
|
||||||
|
@ -167,7 +167,7 @@ public:
|
||||||
|
|
||||||
static ParameterVariant from_parameter(const rcl_interfaces::msg::Parameter & parameter)
|
static ParameterVariant from_parameter(const rcl_interfaces::msg::Parameter & parameter)
|
||||||
{
|
{
|
||||||
switch (parameter.value.parameter_type) {
|
switch (parameter.value.type) {
|
||||||
case PARAMETER_BOOL:
|
case PARAMETER_BOOL:
|
||||||
return ParameterVariant(parameter.name, parameter.value.bool_value);
|
return ParameterVariant(parameter.name, parameter.value.bool_value);
|
||||||
case PARAMETER_INTEGER:
|
case PARAMETER_INTEGER:
|
||||||
|
|
|
@ -105,7 +105,7 @@ public:
|
||||||
|
|
||||||
std::shared_future<std::vector<rclcpp::parameter::ParameterType>>
|
std::shared_future<std::vector<rclcpp::parameter::ParameterType>>
|
||||||
get_parameter_types(
|
get_parameter_types(
|
||||||
std::vector<std::string> parameter_names,
|
std::vector<std::string> names,
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
@ -113,17 +113,17 @@ public:
|
||||||
auto future_result = promise_result.get_future().share();
|
auto future_result = promise_result.get_future().share();
|
||||||
|
|
||||||
auto request = std::make_shared<rcl_interfaces::srv::GetParameterTypes::Request>();
|
auto request = std::make_shared<rcl_interfaces::srv::GetParameterTypes::Request>();
|
||||||
request->parameter_names = parameter_names;
|
request->names = names;
|
||||||
|
|
||||||
get_parameter_types_client_->async_send_request(
|
get_parameter_types_client_->async_send_request(
|
||||||
request,
|
request,
|
||||||
[&promise_result, &future_result, &callback](
|
[&promise_result, &future_result, &callback](
|
||||||
rclcpp::client::Client<rcl_interfaces::srv::GetParameterTypes>::SharedFuture cb_f) {
|
rclcpp::client::Client<rcl_interfaces::srv::GetParameterTypes>::SharedFuture cb_f) {
|
||||||
std::vector<rclcpp::parameter::ParameterType> parameter_types;
|
std::vector<rclcpp::parameter::ParameterType> types;
|
||||||
auto & pts = cb_f.get()->parameter_types;
|
auto & pts = cb_f.get()->types;
|
||||||
std::transform(pts.begin(), pts.end(), std::back_inserter(parameter_types),
|
std::transform(pts.begin(), pts.end(), std::back_inserter(types),
|
||||||
[](uint8_t pt) {return static_cast<rclcpp::parameter::ParameterType>(pt); });
|
[](uint8_t pt) {return static_cast<rclcpp::parameter::ParameterType>(pt); });
|
||||||
promise_result.set_value(parameter_types);
|
promise_result.set_value(types);
|
||||||
if (callback != nullptr) {
|
if (callback != nullptr) {
|
||||||
callback(future_result);
|
callback(future_result);
|
||||||
}
|
}
|
||||||
|
@ -194,7 +194,7 @@ public:
|
||||||
|
|
||||||
std::shared_future<rcl_interfaces::msg::ListParametersResult>
|
std::shared_future<rcl_interfaces::msg::ListParametersResult>
|
||||||
list_parameters(
|
list_parameters(
|
||||||
std::vector<std::string> parameter_prefixes,
|
std::vector<std::string> prefixes,
|
||||||
uint64_t depth,
|
uint64_t depth,
|
||||||
std::function<void(
|
std::function<void(
|
||||||
std::shared_future<rcl_interfaces::msg::ListParametersResult>)> callback = nullptr)
|
std::shared_future<rcl_interfaces::msg::ListParametersResult>)> callback = nullptr)
|
||||||
|
@ -203,7 +203,7 @@ public:
|
||||||
auto future_result = promise_result.get_future().share();
|
auto future_result = promise_result.get_future().share();
|
||||||
|
|
||||||
auto request = std::make_shared<rcl_interfaces::srv::ListParameters::Request>();
|
auto request = std::make_shared<rcl_interfaces::srv::ListParameters::Request>();
|
||||||
request->parameter_prefixes = parameter_prefixes;
|
request->prefixes = prefixes;
|
||||||
request->depth = depth;
|
request->depth = depth;
|
||||||
|
|
||||||
list_parameters_client_->async_send_request(
|
list_parameters_client_->async_send_request(
|
||||||
|
|
|
@ -67,9 +67,9 @@ public:
|
||||||
const std::shared_ptr<rcl_interfaces::srv::GetParameterTypes::Request> request,
|
const std::shared_ptr<rcl_interfaces::srv::GetParameterTypes::Request> request,
|
||||||
std::shared_ptr<rcl_interfaces::srv::GetParameterTypes::Response> response)
|
std::shared_ptr<rcl_interfaces::srv::GetParameterTypes::Response> response)
|
||||||
{
|
{
|
||||||
auto types = node->get_parameter_types(request->parameter_names);
|
auto types = node->get_parameter_types(request->names);
|
||||||
std::transform(types.cbegin(), types.cend(),
|
std::transform(types.cbegin(), types.cend(),
|
||||||
std::back_inserter(response->parameter_types), [](const uint8_t & type) {
|
std::back_inserter(response->types), [](const uint8_t & type) {
|
||||||
return static_cast<rclcpp::parameter::ParameterType>(type);
|
return static_cast<rclcpp::parameter::ParameterType>(type);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ public:
|
||||||
const std::shared_ptr<rcl_interfaces::srv::ListParameters::Request> request,
|
const std::shared_ptr<rcl_interfaces::srv::ListParameters::Request> request,
|
||||||
std::shared_ptr<rcl_interfaces::srv::ListParameters::Response> response)
|
std::shared_ptr<rcl_interfaces::srv::ListParameters::Response> response)
|
||||||
{
|
{
|
||||||
auto result = node->list_parameters(request->parameter_prefixes, request->depth);
|
auto result = node->list_parameters(request->prefixes, request->depth);
|
||||||
response->result = result;
|
response->result = result;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue