Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

member of rosidl_interfaces_packages group #45

Merged
merged 2 commits into from
Nov 30, 2017

Conversation

mikaelarguedas
Copy link
Member

Follow-up of ament/ament_tools#168.
Opening this to gather feedback as of how we should call the group containing ros IDL files.
This PR uses interface_packages but I'm open to alternatives

@mikaelarguedas mikaelarguedas added the in review Waiting for review (Kanban column) label Nov 15, 2017
@mikaelarguedas mikaelarguedas self-assigned this Nov 17, 2017
@mikaelarguedas
Copy link
Member Author

@ros2/team Waiting for feedback

wjwwood
wjwwood previously approved these changes Nov 17, 2017
Copy link
Member

@wjwwood wjwwood left a comment

Choose a reason for hiding this comment

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

In principle, lgtm

Just curious about the name.

@@ -20,6 +20,8 @@

<test_depend>ament_lint_common</test_depend>

<member_of_group>interface_packages</member_of_group>
Copy link
Member

Choose a reason for hiding this comment

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

Is this name set in a document somewhere? Or are we coming up with it for the first time here? If it's not too hard to change yet, I'd slightly prefer rosidl_interface_packages, since there might be other kinds of interfaces in the future that might want to make use of the group mechanism.

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm fine with either interface_packages or rosidl_interface_packages as William suggests.

Copy link
Member Author

Choose a reason for hiding this comment

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

this name is not used or documented anywhere yet, the goal of this PR was to get feedback on what name we think makes most sense before starting using it.
In ROS 1 we abuse the term "message package" as sometimes we refer to packages containing services or actions definitions, that's why I used interfaces instead.
One thing to keep in mind is that ROS 1 packages migrating to format 3 may want to use something similar. The resulting question is "should the group name be the same in ROS 1 and ROS 2?" If no I agree that rosidl_interface_packages would be better than interface_packages , if yes we need a name that is generic enough to make sense for both ROS 1 and ROS 2 (that could be rosidl_interface_packages or something else, not sure yet)

Copy link
Member

Choose a reason for hiding this comment

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

Another question is, do we want/need different groups for packages which have messages, services, and actions?

Copy link
Member Author

Choose a reason for hiding this comment

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

Indeed that's another good question.
If the answer is yes, this would also raise a few more points:

  • our tools should be able to support overlapping groups / duplicated dependencies (already the case I think)
  • should we support metagroups? e.g. interface_packages group depending on groups message_packages + services_packages + action_packages

Copy link
Member

Choose a reason for hiding this comment

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

As for a name that's appropriate for both ROS 1 and ROS 2, first I think rosidl and interface are generic enough for both, though you're right that in ROS 1 it was just as common to call them just "messages" or associate them with the "genmsg". Second, I believe the groups can use conditionals as well, so even if they needed to be different in ROS 1 and ROS 2 with the same package.xml then you could choose which group to use in each case.

Copy link
Member Author

Choose a reason for hiding this comment

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

Second, I believe the groups can use conditionals as well, so even if they needed to be different in ROS 1 and ROS 2 with the same package.xml then you could choose which group to use in each case.

I was mostly wondering if we think they should be different or not. If they end up being different we can use conditions 👍

Copy link
Contributor

Choose a reason for hiding this comment

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

What's the benefit of having different groups for messages, services, and actions? Is it planned to do code generation for them in separate packages?

The interface_packages groups seems special since it will have so many members in core packages. I think it would be a good idea to adopt a prefix to names like this. It avoids name collisions with third-party groups. Also, googling ros_interface_packages versus interface_packages might be more likely to return a search result to a page describing what the group is.

@mikaelarguedas
Copy link
Member Author

@tfoote @dhood @sloretz @dirk-thomas would you like to pitch in here?

@mikaelarguedas
Copy link
Member Author

the conclusion here was that there is no need or simple way to manage the granularity of the various groups at the moment and we don't want to impose to users to define membership to several groups of various granularity so we will create a single group for all the interfaces (messages, services, to-be actions).
Additionally it would be valuable to enforce in CMake that packages invoking rosidl_generate_interfaces have this member_of_group in their package.xml

Regarding the name, rosidl_interfaces_packages is explicit enough and is not restricted to ROS 2. Though we could use a different name in ROS 1 if we need and use the conditions provided by format 3 to express the different group membership in ROS1 and ROS2.

@mikaelarguedas mikaelarguedas added in progress Actively being worked on (Kanban column) and removed in review Waiting for review (Kanban column) labels Nov 29, 2017
@mikaelarguedas
Copy link
Member Author

I will do a follow up PR to add the check in rosidl_cmake, I think that check should require the member_of_group only for packages that install their generated interfaces. That's why I didnt apply this change to packages that generate interfaces for their tests and don't install them.

@wjwwood
Copy link
Member

wjwwood commented Nov 29, 2017

I think that check should require the member_of_group only for packages that install their generated interfaces.

👍 hopefully that's not too hard to do, let me know if I can help you with it.

@mikaelarguedas
Copy link
Member Author

packaging job with these changes Build Status (though the bridge being built after everything else it doesnt prove that this change is taken into account properly)

ready for review

@mikaelarguedas mikaelarguedas added in review Waiting for review (Kanban column) and removed in progress Actively being worked on (Kanban column) labels Nov 29, 2017
@mikaelarguedas
Copy link
Member Author

hopefully that's not too hard to do, let me know if I can help you with it.

Thanks! I'll give it a shot later this week and let you know how it goes

@mikaelarguedas mikaelarguedas dismissed wjwwood’s stale review November 29, 2017 18:01

changes from discussion have been applied and new review is required

@wjwwood
Copy link
Member

wjwwood commented Nov 30, 2017

After discussing in person with @mikaelarguedas and @dhood I think we concluded that rosidl_interface_packages sounds better than rosidl_interfaces_packages.

@clalancette
Copy link
Contributor

After discussing in person with @mikaelarguedas and @dhood I think we concluded that rosidl_interface_packages sounds better than rosidl_interfaces_packages.

Fine by me. I'll hold off the reviews, then.

@mikaelarguedas
Copy link
Member Author

Sounds good, making the change now and will tag the team here when ready for reviews

@mikaelarguedas mikaelarguedas added in progress Actively being worked on (Kanban column) and removed in review Waiting for review (Kanban column) labels Nov 30, 2017
@mikaelarguedas mikaelarguedas removed the in progress Actively being worked on (Kanban column) label Nov 30, 2017
@mikaelarguedas mikaelarguedas added the in review Waiting for review (Kanban column) label Nov 30, 2017
@mikaelarguedas
Copy link
Member Author

@ros2/team group renamed, back in review then

@wjwwood
Copy link
Member

wjwwood commented Nov 30, 2017

Just re-reviewed them all, +1 to all of them.

@mikaelarguedas mikaelarguedas merged commit 3d5adf0 into master Nov 30, 2017
@mikaelarguedas mikaelarguedas deleted the format3_interface_packages branch November 30, 2017 23:33
@mikaelarguedas mikaelarguedas removed the in review Waiting for review (Kanban column) label Nov 30, 2017
@dirk-thomas
Copy link
Member

Every group dependency expands to a set of packages. So each group name could potentially end with _packages (e.g. rmw_implementation_packages, foo_packages, etc.). Therefore this suffix is in my opinion not helpful and redundant. I would suggest to use the name rosidl_interfaces instead.

@mikaelarguedas
Copy link
Member Author

This came from the fact that we wanted to remove potential confusion down the road. If we decide to have a different group for messages, services and actions they would be part of that "messages" and that seemed weird to us so we decided to have packages in the name. The same way in ROS 1 people refer to interface packages as "message packages" and again it would be weird to be part of "messages".

I'm not against revisiting as I see valid arguments for each. Using rosidl_interfaces would be shorter, match the name of the ament_index resource etc.
I opened this 3 weeks ago hoping that we would converge before the release though, it may be too late to reopen the discussion and get unanimity from the team so late in the freezing process...

@dirk-thomas
Copy link
Member

@ros2/team Please comment if you agree or disagree to switch from rosidl_interface_packages to rosidl_interfaces. If we do get sufficient positive responses we can consider applying the change. Otherwise it can be done after the release (which implies breaking the naming scheme in a future release).

@nuclearsandwich
Copy link
Member

👍 rosidl_interfaces

@mikaelarguedas
Copy link
Member Author

+0, I don't feel very strongly one way or the other but would like to see both arguments being explored before asking for approval.

I think rosidl_interfaces makes more sense if we want to be consistent with the ament index resource and how to name other groups. From my perspective, we commonly say "rmw_implementation" or a "message generator" (in both case we refer to a ROS package without ambiguity) so the need of a suffix for those groups doesnt make sense as there is no potential ambiguity. OTOH we say a "message package" (we refer to a ROS package) that is different from a "message" (an IDL definition). So I think message, services and actions are the only potential groups that deserve a _packages suffix as we and the community commonly refer to them using the suffix "package" to disambiguate.

so +0 for me

@wjwwood
Copy link
Member

wjwwood commented Dec 3, 2017

I think rosidl_interface or rosidl_interfaces is fine, but I also think that rosidl_interface_packages (while somewhat redundant) is not harmful or incorrect.

+0

@dhood
Copy link
Member

dhood commented Dec 4, 2017

rmw implementation packages only have one rmw implementation in them, while interface packages typically have multiple interfaces, and it's the package that you want to depend on as opposed to the interface itself. That was my understanding for why there's a distinction: there isn't an interface called "std_msgs" for example. @mikaelarguedas pointed out offline that any dependencies in the package.xml are implicitly packages so I'm sure users could still handle it if we removed the _packages.

+0

@clalancette
Copy link
Contributor

+0

@dirk-thomas
Copy link
Member

We discussed potential other group names and based on the names we though are most reasonable for ros2/rosidl_typesupport#17 decided to keep the suffix _packages. One reason is consistency across group name and another is to avoid the ambiguity of e.g. rmw_implementation (a ROS package) vs. rmw_implementations (a group name) (see ros2/rmw_implementation#36).

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.

7 participants