-
Notifications
You must be signed in to change notification settings - Fork 7
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
Migrate to ros2dds bridge #37
base: main
Are you sure you want to change the base?
Conversation
688818e
to
f48d054
Compare
100ab0c
to
822ea75
Compare
90c8c3c
to
ed94ad7
Compare
# TODO(luca) check if transporter needs available endpoint | ||
service_clients: ["/.*/queue_task", "/.*/remove_pending_task", "/.*/pause", "/.*/signal", "/.*/get_state", "/.*/change_state", "/.*/is_task_doable"] | ||
action_servers: [] | ||
# TODO(luca) check if we really need transporter client |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any idea if these TODOs are still valid?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The demo / integration test works well but the configuration of these endpoints depends on where nodes are ran / how complete we want this config file.
The main crux is that in this specific implementation the system orchestrator and the transporter node run in the same domain ID so technically it is not necessary to allow all the transporter interfaces through Zenoh.
On the other hand, if we want to have this file be kind of a template that would also allow external transporters to connect to the system orchestrator we would need to add their interfaces here.
For the estop
I'm just not 100% sure how it is supposed to work, since it seems it is a global topic do we just halt the whole system as soon as one workcell decides to estop? That sounds a bit dangerous so I left a note here.
I'm erring on the side of "make this a template" at least until a proper redf integration for generation of config files is not done and permissively allow all the interfaces we might need but what do you think?
Warning spam was fixed upstream and in the bumped dependency 20c2eb6 |
Signed-off-by: Luca Della Vedova <[email protected]>
Signed-off-by: Luca Della Vedova <[email protected]>
20c2eb6
to
0cbb8ec
Compare
Closes #17.
This seems to work but required a fair bit of changes in the
nexus_network_configuration
package, so we should probably rethink what that package does and how.Specifically, it had a builtin support for generating configs from redf, but it actually didn't and just used hardcoded endpoints here.
Furthermore, while with the
dds
plugin we can just specify endpoints as strings, theros2dds
plugin requires us to clearly say whether each substring is a publisher, subscriber, service server, service client, action server or action client.The way I approached it in this PR is the same as the previous PR, updating the config file accordingly, however there are a few important changes to consider
Redf compatibility
redf
does not have a way to specify for each topic / service etc. which nodes can publish and which can subscribe, so the only way to includeredf
config in its current implementation would be to allow each entity to be both, which breaks the isolation a bit since (for example), we currently do:Allowing both would mean technically allowing a rogue workcell to advertise a
/register_workcell
client which could create a lot of trouble in the system.Note however that this is also an issue in the current implementation.
Because there was no usage of
redf
for network configuration I couldn't test it and whether it worked or not before I'm fairly sure it will stop working with this PR.Queries timeout
The
ros2dds
bridge adds a concept of timeout for a query. They can be pretty granular but the main issue is that they also apply to actions so if an action was to take longer than the specified value it would fail.I set it to 10 minutes as a default, but this should probably be double checked (increased? made more granular?).
Namespaces
Sadly, while the ros2dds bridge supports namespaces, they currently also apply them to global topics. This means that if we set a bridge with namespace
workcell_1
and asked it to allow a subscription to/chatter
it would silently only allow/workcell_1/chatter
. This makes it pretty painful because workcells need to access global services to register, so we can't rely on namespaces and have to add them manually to each workcell configuration.Warning spam
Last but not least, running the
ros2dds
bridge results in a lot of warnings being printed, they seem to be harmless but are still very noisy. An upstream issue has been opened and acknowledged by Zettascale.