Skip to content

add use_global_arguments for node options of component nodes#1776

Merged
hidmic merged 2 commits intoros2:masterfrom
gezp:add_use_global_arguments
Jan 19, 2022
Merged

add use_global_arguments for node options of component nodes#1776
hidmic merged 2 commits intoros2:masterfrom
gezp:add_use_global_arguments

Conversation

@gezp
Copy link
Copy Markdown
Contributor

@gezp gezp commented Sep 16, 2021

Signed-off-by: zhenpeng ge zhenpeng.ge@qq.com

related to #978.

i'm trying to implement composed bringup for Nav2, but it can't work as expected. the reason is that internal nodes (like local_costmap, global_costmap) in Nav2 couldn't load parameters from param's file(use_global_arguments is setting false)

.use_global_arguments(false)

according to @wjwwood opinion( #978 (comment) ), allow_undeclared_parameters and use_global_arguments shouldn't be a parameter, but the use_global_arguments does have a legitimate use case here (for Nav2), and i think it's useful when we have a large params file to configure all nodes (or component nodes).

use_global_arguments = true is default behavior for all other situations so its strange that we cannot set it to true at all due to "its generally bad" advise for the component container. It creates a situations where component container nodes have a different behavior from everywhere else and it silently fails if a user is clever enough to know that that is the problem.

I still offer a warning to tell people not to do it but gives the flexibility to get the behavior that is expected every where else from the component container if explicitly called out in the extra parameters.

some extra details here: #978 (comment)

Copy link
Copy Markdown
Collaborator

@fujitatomoya fujitatomoya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this extension makes sense for use case of ComponentManager.

Copy link
Copy Markdown
Collaborator

@SteveMacenski SteveMacenski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fujitatomoya any other changes required?

@fujitatomoya
Copy link
Copy Markdown
Collaborator

@ivanpauno @hidmic @wjwwood there's been discussion on this via #978, what would you think? i think extending this option makes sense for user application.

Copy link
Copy Markdown
Collaborator

@fujitatomoya fujitatomoya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

im good to go.

Copy link
Copy Markdown
Contributor

@hidmic hidmic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gezp I'm onboard with this change. This patch is missing a test though.

"Extra component argument 'use_intra_process_comms' must be a boolean");
}
options.use_intra_process_comms(extra_argument.get_value<bool>());
} else if (extra_argument.get_name() == "use_global_arguments") {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gezp meta: thinking about your use case, I wonder if it would make sense for the component_manager node to expose, e.g. as a parameter, the default value of use_global_arguments for the nodes it composes. Seems convenient if you're already passing a large parameter file to it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i agree with you, for my use case (use a large parameter file for all components), it seems better to use a parameter of component_manager to configure all components use_global_arguments, which we needn't set this for components one by one in launch file.
I'm not good at naming parameter, could you give me some suggestions ? @hidmic . how about use_global_arguments (i think it's bad, because it seems that we set component_manager nodes to use global arguments, but we want to set this for components) or component_use_global_arguments?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gezp perhaps forward_global_arguments? I'm not very creative either. At any rate, I won't block this patch on it.

@gezp
Copy link
Copy Markdown
Contributor Author

gezp commented Oct 14, 2021

i add some test for use_global_arguments , please review again. @fujitatomoya @hidmic

@SteveMacenski
Copy link
Copy Markdown
Collaborator

Any update?

@fujitatomoya
Copy link
Copy Markdown
Collaborator

I am good to go, https://github.com/ros2/rclcpp/pull/1776/files#r722910471 also makes sense though.

@fujitatomoya
Copy link
Copy Markdown
Collaborator

CI:

  • Linux Build Status
  • Linux-aarch64 Build Status
  • macOS Build Status
  • Windows Build Status

@SteveMacenski
Copy link
Copy Markdown
Collaborator

Build failure seems unrelated

23:55:16 /home/jenkins-agent/workspace/ci_linux/ws/src/ros2/rclcpp/rclcpp_lifecycle/include/rclcpp_lifecycle/state.hpp:25:16: error: using typedef-name ‘rcl_lifecycle_state_t’ after ‘struct’
23:55:16    25 | typedef struct rcl_lifecycle_state_t rcl_lifecycle_state_t;

@gezp
Copy link
Copy Markdown
Contributor Author

gezp commented Oct 29, 2021

23:55:16 /home/jenkins-agent/workspace/ci_linux/ws/src/ros2/rclcpp/rclcpp_lifecycle/include/rclcpp_lifecycle/state.hpp:25:16: error: using typedef-name ‘rcl_lifecycle_state_t’ after ‘struct’
23:55:16    25 | typedef struct rcl_lifecycle_state_t rcl_lifecycle_state_t;

this issue was solved by #1788. i think i need rebase.

Signed-off-by: zhenpeng ge <zhenpeng.ge@qq.com>

keep use_global_arguments false default

Signed-off-by: zhenpeng ge <zhenpeng.ge@qq.com>

update warning message

Signed-off-by: zhenpeng ge <zhenpeng.ge@qq.com>

update warnning message

Signed-off-by: zhenpeng ge <zhenpeng.ge@qq.com>

add test

Signed-off-by: zhenpeng ge <zhenpeng.ge@qq.com>
@ros-discourse
Copy link
Copy Markdown

This pull request has been mentioned on ROS Discourse. There might be relevant details there:

https://discourse.ros.org/t/ros-2-tsc-meeting-minutes-2021-10-28/22947/1

@SteveMacenski
Copy link
Copy Markdown
Collaborator

@fujitatomoya @hidmic can we run CI again to merge it?

@fujitatomoya
Copy link
Copy Markdown
Collaborator

CI retry:

  • Linux Build Status
  • Linux-aarch64 Build Status
  • macOS Build Status
  • Windows Build Status

@ros-discourse
Copy link
Copy Markdown

This pull request has been mentioned on ROS Discourse. There might be relevant details there:

https://discourse.ros.org/t/ros-2-tsc-meeting-minutes-2021-11-18/23209/1

Copy link
Copy Markdown
Contributor

@hidmic hidmic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the delay (I was out for some time).

Overall makes sense to me. Tests could use some improvement though.

EXPECT_EQ(result->error_message, "");
std::cout << result->full_node_name << std::endl;
EXPECT_EQ(result->full_node_name, "/test_component_global_arguments");
EXPECT_EQ(result->unique_id, 7u);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gezp nit: this tests that the manager did not fail but not that it did anything about use_global_arguments.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, use_global_arguments is set true in NodeOption , but this component didn't use any global arguments, i don't know how to test for this.

"Extra component argument 'use_intra_process_comms' must be a boolean");
}
options.use_intra_process_comms(extra_argument.get_value<bool>());
} else if (extra_argument.get_name() == "use_global_arguments") {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gezp perhaps forward_global_arguments? I'm not very creative either. At any rate, I won't block this patch on it.

@SteveMacenski
Copy link
Copy Markdown
Collaborator

@gezp can you make the testing related changes so we can get this merged in and get dynamic composition in Nav2? 🥳

Signed-off-by: zhenpeng ge <zhenpeng.ge@qq.com>
@SteveMacenski
Copy link
Copy Markdown
Collaborator

SteveMacenski commented Dec 16, 2021

@hidmic is this ready to review again?

@hidmic
Copy link
Copy Markdown
Contributor

hidmic commented Jan 12, 2022

@hidmic is this ready to review again?

Argh. This fell through the cracks again. Sorry about that.


Last CI (hopefully):

  • Linux Build Status
  • Linux-aarch64 Build Status
  • Windows Build Status

@hidmic
Copy link
Copy Markdown
Contributor

hidmic commented Jan 19, 2022

Alright, going in.

@hidmic hidmic merged commit bca3fd7 into ros2:master Jan 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants