23std::vector<prompt::PromptOption>
load_from_parameters(rclcpp::Node::SharedPtr node, std::string plugin_name)
26 std::vector<std::string> model_option_keys;
29 if (node->has_parameter(plugin_name +
".option_keys"))
31 model_option_keys = node->get_parameter(plugin_name +
".option_keys").as_string_array();
36 node->declare_parameter(plugin_name +
".option_keys", rclcpp::ParameterValue(std::vector<std::string>{}))
37 .get<std::vector<std::string>>();
40 std::vector<prompt::PromptOption> options_;
42 for (
const auto& key : model_option_keys)
47 std::string type_param_name = plugin_name +
".options." + key +
".type";
48 if (node->has_parameter(type_param_name))
50 opt.
type = node->get_parameter(type_param_name).as_string();
54 opt.
type = node->declare_parameter(type_param_name, rclcpp::ParameterValue(
"")).get<std::string>();
58 if (opt.
type ==
"string")
60 std::string value_param_name = plugin_name +
".options." + key +
".value";
61 if (node->has_parameter(value_param_name))
63 opt.
value = node->get_parameter(value_param_name).as_string();
67 opt.
value = node->declare_parameter(value_param_name, rclcpp::ParameterValue(
"")).get<std::string>();
72 else if (opt.
type ==
"bool")
74 std::string value_param_name = plugin_name +
".options." + key +
".value";
76 if (node->has_parameter(value_param_name))
78 value = node->get_parameter(value_param_name).as_bool();
82 value = node->declare_parameter(value_param_name, rclcpp::ParameterValue(
false)).get<bool>();
84 opt.
value = (value) ?
"true" :
"false";
88 else if (opt.
type ==
"int")
90 std::string value_param_name = plugin_name +
".options." + key +
".value";
92 if (node->has_parameter(value_param_name))
94 value = node->get_parameter(value_param_name).as_int();
98 value = node->declare_parameter(value_param_name, rclcpp::ParameterValue(0)).get<
int>();
100 opt.
value = std::to_string(value);
104 else if (opt.
type ==
"double")
106 std::string value_param_name = plugin_name +
".options." + key +
".value";
108 if (node->has_parameter(value_param_name))
110 value = node->get_parameter(value_param_name).as_double();
114 value = node->declare_parameter(value_param_name, rclcpp::ParameterValue(0)).get<
double>();
116 opt.
value = std::to_string(value);
122 std::string value_param_name = plugin_name +
".options." + key +
".value";
123 if (node->has_parameter(value_param_name))
125 opt.
value = node->get_parameter(value_param_name).as_string();
129 opt.
value = node->declare_parameter(value_param_name, rclcpp::ParameterValue(
"")).get<std::string>();
133 options_.push_back(opt);
150 std::vector<prompt::PromptOption>& required_options)
153 for (
const auto& required_opt : required_options)
156 for (
const auto& opt : options)
158 if (opt.key == required_opt.key)
167 RCLCPP_WARN(node->get_logger(),
"Model option '%s' not found, Adding '%s'", required_opt.key.c_str(),
168 required_opt.value.c_str());
169 options.push_back(required_opt);
std::vector< prompt::PromptOption > load_from_parameters(rclcpp::Node::SharedPtr node, std::string plugin_name)
Load prompt options from ROS2 parameters.
Definition prompt_options.hpp:23
void ensure_model_options(rclcpp::Node::SharedPtr node, std::vector< prompt::PromptOption > &options, std::vector< prompt::PromptOption > &required_options)
Check and add required model options to the prompt options.
Definition prompt_options.hpp:149