Skip to content

Commit 20fcb32

Browse files
authored
bt_navigator_***_rclcpp_node - Namespacing + NodeOptions forwarding
Closes ros-navigation#5242 Inspired by: ros-navigation#5202 - `bt_navigator_***_rclcpp_node` now gets the same namespace of `bt_navigator` - `bt_navigator_***_rclcpp_node` now gets the same node options of `bt_navigator` (apart from node name, that is still forced to respect the pattern `bt_navigator_***_rclcpp_node` ) Signed-off-by: Patrick Roncagliolo <[email protected]>
1 parent fa63e30 commit 20fcb32

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server_impl.hpp

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,21 @@ template<class ActionT, class NodeT>
125125
BtActionServer<ActionT, NodeT>::~BtActionServer()
126126
{}
127127

128+
void replaceOrAddArgument(
129+
std::vector<std::string> & arguments, const std::string & option,
130+
const std::string & arg_name, const std::string & new_argument)
131+
{
132+
auto argument = std::find_if(arguments.begin(), arguments.end(),
133+
[arg_name](const std::string & value){return value.find(arg_name) != std::string::npos;});
134+
if (argument != arguments.end()) {
135+
*argument = new_argument;
136+
} else {
137+
arguments.push_back("--ros-args");
138+
arguments.push_back(option);
139+
arguments.push_back(new_argument);
140+
}
141+
}
142+
128143
template<class ActionT, class NodeT>
129144
bool BtActionServer<ActionT, NodeT>::on_configure()
130145
{
@@ -137,15 +152,12 @@ bool BtActionServer<ActionT, NodeT>::on_configure()
137152
std::string client_node_name = action_name_;
138153
std::replace(client_node_name.begin(), client_node_name.end(), '/', '_');
139154
// Use suffix '_rclcpp_node' to keep parameter file consistency #1773
140-
auto options = rclcpp::NodeOptions().arguments(
141-
{"--ros-args",
142-
"-r",
143-
std::string("__node:=") +
144-
std::string(node->get_name()) + "_" + client_node_name + "_rclcpp_node",
145-
"-p",
146-
"use_sim_time:=" +
147-
std::string(node->get_parameter("use_sim_time").as_bool() ? "true" : "false"),
148-
"--"});
155+
156+
auto new_arguments = node->get_node_options().arguments();
157+
replaceOrAddArgument(new_arguments, "-r", "__node", std::string("__node:=") +
158+
std::string(node->get_name()) + "_" + client_node_name + "_rclcpp_node");
159+
auto options = node->get_node_options();
160+
options = options.arguments(new_arguments);
149161

150162
// Support for handling the topic-based goal pose from rviz
151163
client_node_ = std::make_shared<nav2::LifecycleNode>("_", options);

0 commit comments

Comments
 (0)