-
Notifications
You must be signed in to change notification settings - Fork 163
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
Actions: Reason for the default QoS for status_topic_qos? #1155
Comments
@mauropasse as you mentioned, it seems that it should be good enough with
but, what if it does not complete the endpoint discovery yet? (status publisher and subscriber endpoints are created but not discovered, when the server sends the status message after goal request.) i think this is so unlikely but it could happen in theory? in that case, client could miss the status for the goal id until next status message is published by the server. there is a possibility the server could take a long time to execute the goal... that means the client cannot know the goal status for a while.
i think each action client checks the status message against the goal id. if the goal id on status message does not match the one the client has, it drops the message since it is not interesting for the client. technically in this multiple clients case, i could be wrong, but this is what i think so far... CC: @ros2/team |
Thanks for your reply @fujitatomoya
If the endpoints are not discovered yet, I'm guessing rcl_action_server_is_available() would return "server not available", so the client should not make any goal requests.
Yes, that happens here. Nevertheless, the clients who didn't make goal requests shouldn't be receiving&discarding old statuses meant for other clients (similar to what's happening on ros2/rclcpp#2397) |
The default durability QoS for status_topic for actions is
TRANSIENT_LOCAL
:rcl/rcl_action/include/rcl_action/default_qos.h
Line 31 in f190677
While for the rest of action components, it's VOLATILE.
I'm trying to find the reason for the default policy
TRANSIENT_LOCAL
being set for action goal's "status" topic.This policy means:
For Actions this means:
ActionClient
would receive old goal statuses sent in the past by someActionServer
.ActionClient
was not yet created, soActionServer
couldn't have sent status messages.So it is necessary for some reason that I ignore, having
TRANSIENT_LOCAL
set for action goal's "status" topic?I'm asking this since for some reason I had to change the action server to use
VOLATILE
, and now the clients don't find the servers when calling rcl_action_server_is_available(), since there is a mismatch in QoS between client and server, sonumber_of_publishers
is zero in:rcl/rcl_action/src/rcl_action/action_client.c
Lines 327 to 328 in f190677
If the default would be
VOLATILE
instead ofTRANSIENT_LOCAL
(which seems to make sense), there wouldn't be server discovery issues.The text was updated successfully, but these errors were encountered: