tfoote
2
I think that there’s not really one best, it’s highly dependent on your specific use case or application.
-
Is great in cases where there’s limited bandwidth available and simplicity and abstraction is useful and you don’t need to get more fine grained control.
-
Has been the approach when you have very specific requirements and have to use an existing system that’s off the shelf and cannot be customized. This is the most common because historically it has been the only option. The abstraction is provided around the custom protocol provided by the vendor.
-
The main difference here is that you’re using a standard protocol instead of the custom protocol per device. As well as supporting some levels of discovery etc. The option to add additional layers of abstraction is a separate consideration.
Part of the vision for ROS 2 has been to enable people to transition from case 2 to case 3 such that embedded devices will become first class members of the ROS network instead of relying on custom drivers to connect them as a sort of proxy intermediate layer. The standardization/abstraction does incur some costs and can’t be the “most efficient” but I don’t think that most of the custom protocols can be considered “most efficient” either. If you’re seeing blockers for specific use cases please speak up and we can look at how to improve the experience.
4 Likes