Dear ROS Teams, Thanks for an informative time at ROSCon 2014. I had to leave about an hour and a half early to catch a flight, and I was left with my head spinning about the the decision to change protocols in ROS 2.0. This is an important decision, and I will share my concerns, as well as my thoughts on a direction I personally would of taken with ROS 2.0, and the protocol directions. This topic seems better fit for a blog, however, an open discussion is important. First let me say the direction of ROS 2.0 makes sense, the complete shift to ROS DDS protocol does not seem wise. There are many good reasons to implement DDS in ROS, however, the way it is implemented can make or break ROS in the future. Many well intended protocol implementations end up at dead ends. Two examples are: HTTP NG (Next Generation) http://www.w3.org/Protocols/HTTP-NG/Activity.html Gnutella 2 http://en.wikipedia.org/wiki/Gnutella2 I'd like to share the approach of the Happy Artist RMDMIA RCSM (Robot Control System Messenger) API. The RCSM implements a plugin architecture that allows multiple robot operating system clients to be registered/accessed, run simultaneously, and inter operate together, or simply to plugin a single client such as the Happy Artist ROS Client for TCPROS/UDPROS. As a ROS user this allows any protocol to plugin, and work from any 3rd party vendor DDS implementation, TCPROS/UDPROS, or any other protocol. In the Happy Artist RMDMIA implementation the RCSM component serves as an interface to the rest of the system so that protocols can change, while code written for autonomous/user control follows the same pattern, allowing interchangeability, and forward/backward compatibility between other aspects of the system. If ROS were to approach 2.0 like this, libraries like MoveIt (an example of a library name (no idea if it is tied to TCPROS/UDPROS protocols in ROS 1.0 implementation), could run on any communication protocol without ever needing to know anything about the protocols it was operating on. This approach needs to be applied to all areas of the system so that a user of any component can interchange their libraries to ROS 2.0 for 100% forward, and backward compatibility. I am personally concerned that researchers may find themselves using ROS alternatives due to the time/money that will be lost while they wait for a viable ROS 2.0 solution. Why would a researcher/developer invest resources into a platform that was going to completely change nullifying their personal investment in that platform? It is evident ROS 2.0 needs support similar to ACID transactions for autonomous robotics that the DDS implementation will support (primarily for people safety, and system stability of commercialized autonomous systems). It is a bad, bad idea to throw the current ROS users under the bus in the interim. The implementation architecture direction for ROS 2.0 I am suggesting alleviates this scenario, and allows ROS to backtrack a little with its users to continue improving ROS 1.0 functionality in TCPROS, and UDPROS.
In the interim here are some ROS 1.0 improvements that could greatly improve ROS performance with substantial latency decrease, while increasing data bandwidth:
Add support for UDPROS on every ROS supported client, and server with a few minor enhancements. (Some of these suggestions came out of the BOF at ROSCon discussion on latency and performance, and some I have been attempting to subtly hint at with multiple questions on ROS Answers over the last year). UDP Jumbogram support: This is a very simple enhancement. Allow unbounded UDP Datagram sizes, and during protocol handshake (XMLRPC negotiation in UDPROS), and add a flag to the publisher configuration that says allow UDP jumbogram support, or specify the maximum datagram size. ROS currently puts their datagram size limit around 1500 bytes. If the system hardware supports jumbograms, the only change is supporting a configurable maximum datagram size. UDP Multicast support: Adding a header attribute called multicast could allow a topic or service (not aware service is currently supported for UDPROS, but it should be) to configure the associated Publisher to perform a broadcast (A concern of multiple subscribers to a topic causing a major problem with system performance can be alleviated with a feature request by a person in the BOF get together for specifying the numeric limit to subscribers of a particular topic). Note: (Based on my personal UDPROS implementation experience, adding Multicast support would be fairly simple to add into the Happy Artist Java client, so I assume the same might apply on other platforms that have UDPROS support). Maximum Topic Subscribers support: Allow the the system designer to specify the maximum number of subscribers on any given topic. The use case given was a high bandwidth topic that multiple users subscribe to and cause the system to hang. The user wanted to implement a UDPROS topic with Multicast support for a single subscriber. Note: Based on my personal knowledge of the CPP client (somewhat limited), the client uses low level arrays rather than Data Collection Objects, therefore the incremental nature of arrays in CPP code should make this task fairly straight forward to implement. If you have any questions or would like to have further discussion, I look forward to discussion.
Sincerely,
Aaron
If you have any questions or would like to have further discussion, I look forward to discussion.
It is a bad, bad idea to throw the current ROS users under the bus in the interim. The implementation architecture direction for ROS 2.0 I am suggesting alleviates this scenario, and allows ROS to backtrack a little with its users to continue improving ROS 1.0 functionality in TCPROS, and UDPROS.
--
You received this message because you are subscribed to the Google Groups "ROS SIG NG ROS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-ng-ro...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
I appreciated the talks from Dirk and William about the DDS decision and the future of the APIs— I like the look of this future, especially the effort to unify node/nodelet APIs so that the decision to run nodes in many processes vs one is made at launch time rather than at authoring time.I don't feel at all thrown under the bus by DDS/2.0; much as we did with catkin, Clearpath will continue to use the legacy tools for a period of time while we evaluate the new hotness, and then gradually switch our software over, probably beginning with peripheral drivers and generic components, and finishing with the platform software itself.
That said, some concerns:
- As raised during the Q&A, it is critical that ROS 2.0 reverse the trend of making each ROS release harder and harder to get into, learn about, and get started with. Given the state of things presently, it's a very legitimate concern that a further fracturing of documentation/tutorial effort could render ROS 2.0 completely inaccessible to anyone who was not already an expert in ROS 1.x. It'll be important than the majority of documentation explaining ROS 2.0 is targeted at non-users, not migrating ROS 1.0 users.
- Along these same lines, the installation needs to get shorter and simpler— rosdep, rosinstall, and wstool should be installed automatically, and the rosdep (xylem?) init/update should be part of its install, not a separate step. For ROS 2.0's supported platforms, I feel we should strive to offer a "one step setup", perhaps a homebrew-like python -e "$(curl -fsSL https://ros.org/install)", or a downloadable "install deb" with an installation walk-through. Power users might still prefer to do everything their own way, but for the majority, especially those getting started for the first time, I feel strongly that it should be a one-click affair.
- I'm unsure if the future of ROS community docs are the wiki or some version-controlled sphinx-type thing, but either way, having a ROS1/2 switcher like the rosbuild/catkin one isn't enough. There are still rosbuild-centric tutorial pages on the ROS wiki— how about a warning box which appears automatically on wiki pages which haven't been thumb-upped in the last 6 months, perhaps combined with a "hot list" page that shows warning boxed pages sorted by traffic to them. (This doesn't need to wait for ROS 2.0; it would be great to have immediately...)
- ROS is more than just a generic publish/subscribe middleware— a lot more. I'm glad to hear about the intent to fix the parameter service, but what about issues specific to robotics, like runtime dynamic URDF, or multimaster? These are tough problems, and it'd be great to see OSRF take a really active role in solving these, either by spearheading development, or providing direct counsel-to and endorsement-of other groups working on these.
Hope that's helpful. Thanks again for a great ROSCon.Mike
--
You received this message because you are subscribed to the Google Groups "ROS SIG NG ROS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-ng-ro...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
On Sun, Sep 14, 2014 at 7:55 PM, Aaron Sims <aaronhap...@gmail.com> wrote:If you have any questions or would like to have further discussion, I look forward to discussion.First, a lot of what you're saying sounds like it's in the same vein as something I posted following ROSCon 2013, and I still agree that there's a lot that can be done with minimal effort to improve ROS 1.x now and as ROS 2.0 starts getting rolled out:In response to my post, Esteve Fernandez put together a simple re-implementation of the ROS core which used ZeroMQ and while it seemed like a great first step, none of these improvements ever made it into the ROS core. I believe most of this is because resources at OSRF are limited and it seems like work which might appear like hacking improvements into the current ROS core might not be as important as potentially re-working it form the ground up.
On Sun, Sep 14, 2014 at 7:55 PM, Aaron Sims <aaronhap...@gmail.com> wrote:It is a bad, bad idea to throw the current ROS users under the bus in the interim. The implementation architecture direction for ROS 2.0 I am suggesting alleviates this scenario, and allows ROS to backtrack a little with its users to continue improving ROS 1.0 functionality in TCPROS, and UDPROS.
I also agree that it's really important not to make things a mess for ROS users in the transition from ROS 1.0 to ROS 2.0. Especially since there's a huge wealth of code out there which isn't even working with current releases.With respect to improving ROS 1.0 without fundamentally breaking anything that currently works, I think there's plenty motivation and skill out there [1] [2] [3] but it really needs to be organized, focused, and coordinated into making its way into the ROS core releases. If it's going to reach everyone, then this organization needs to come from OSRF or someone else who can be devoted to such an effort full-time.
-jon
--
You received this message because you are subscribed to the Google Groups "ROS SIG NG ROS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-ng-ro...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Dear ROS Teams, Thanks for an informative time at ROSCon 2014. I had to leave about an hour and a half early to catch a flight, and I was left with my head spinning about the the decision to change protocols in ROS 2.0. This is an important decision, and I will share my concerns, as well as my thoughts on a direction I personally would of taken with ROS 2.0, and the protocol directions. This topic seems better fit for a blog, however, an open discussion is important. First let me say the direction of ROS 2.0 makes sense, the complete shift to ROS DDS protocol does not seem wise. There are many good reasons to implement DDS in ROS, however, the way it is implemented can make or break ROS in the future. Many well intended protocol implementations end up at dead ends. Two examples are: HTTP NG (Next Generation) http://www.w3.org/Protocols/HTTP-NG/Activity.html Gnutella 2 http://en.wikipedia.org/wiki/Gnutella2
I'd like to share the approach of the Happy Artist RMDMIA RCSM (Robot Control System Messenger) API.
The RCSM implements a plugin architecture that allows multiple robot operating system clients to be registered/accessed, run simultaneously, and inter operate together, or simply to plugin a single client such as the Happy Artist ROS Client for TCPROS/UDPROS. As a ROS user this allows any protocol to plugin, and work from any 3rd party vendor DDS implementation, TCPROS/UDPROS, or any other protocol. In the Happy Artist RMDMIA implementation the RCSM component serves as an interface to the rest of the system so that protocols can change, while code written for autonomous/user control follows the same pattern, allowing interchangeability, and forward/backward compatibility between other aspects of the system. If ROS were to approach 2.0 like this, libraries like MoveIt (an example of a library name (no idea if it is tied to TCPROS/UDPROS protocols in ROS 1.0 implementation), could run on any communication protocol without ever needing to know anything about the protocols it was operating on. This approach needs to be applied to all areas of the system so that a user of any component can interchange their libraries to ROS 2.0 for 100% forward, and backward compatibility.
I am personally concerned that researchers may find themselves using ROS alternatives due to the time/money that will be lost while they wait for a viable ROS 2.0 solution. Why would a researcher/developer invest resources into a platform that was going to completely change nullifying their personal investment in that platform?
It is evident ROS 2.0 needs support similar to ACID transactions for autonomous robotics that the DDS implementation will support (primarily for people safety, and system stability of commercialized autonomous systems).
It is a bad, bad idea to throw the current ROS users under the bus in the interim. The implementation architecture direction for ROS 2.0 I am suggesting alleviates this scenario, and allows ROS to backtrack a little with its users to continue improving ROS 1.0 functionality in TCPROS, and UDPROS.
In the interim here are some ROS 1.0 improvements that could greatly improve ROS performance with substantial latency decrease, while increasing data bandwidth:Add support for UDPROS on every ROS supported client, and server with a few minor enhancements. (Some of these suggestions came out of the BOF at ROSCon discussion on latency and performance, and some I have been attempting to subtly hint at with multiple questions on ROS Answers over the last year).
UDP Jumbogram support: This is a very simple enhancement. Allow unbounded UDP Datagram sizes, and during protocol handshake (XMLRPC negotiation in UDPROS), and add a flag to the publisher configuration that says allow UDP jumbogram support, or specify the maximum datagram size. ROS currently puts their datagram size limit around 1500 bytes. If the system hardware supports jumbograms, the only change is supporting a configurable maximum datagram size.
UDP Multicast support: Adding a header attribute called multicast could allow a topic or service (not aware service is currently supported for UDPROS, but it should be) to configure the associated Publisher to perform a broadcast (A concern of multiple subscribers to a topic causing a major problem with system performance can be alleviated with a feature request by a person in the BOF get together for specifying the numeric limit to subscribers of a particular topic). Note: (Based on my personal UDPROS implementation experience, adding Multicast support would be fairly simple to add into the Happy Artist Java client, so I assume the same might apply on other platforms that have UDPROS support).
Maximum Topic Subscribers support: Allow the the system designer to specify the maximum number of subscribers on any given topic. The use case given was a high bandwidth topic that multiple users subscribe to and cause the system to hang. The user wanted to implement a UDPROS topic with Multicast support for a single subscriber. Note: Based on my personal knowledge of the CPP client (somewhat limited), the client uses low level arrays rather than Data Collection Objects, therefore the incremental nature of arrays in CPP code should make this task fairly straight forward to implement.
The user wanted to implement a UDPROS topic with Multicast support for a single subscriber.
If you have any questions or would like to have further discussion, I look forward to discussion.
Sincerely,
Aaron
--
You received this message because you are subscribed to the Google Groups "ROS SIG NG ROS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-ng-ro...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
On Sep 17, 2014 10:50 PM, "William Woodall" <wil...@osrfoundation.org> wrote:
>> UDP Multicast support: Adding a header attribute called multicast could allow a topic or service (not aware service is currently supported for UDPROS, but it should be) to configure the associated Publisher to perform a broadcast (A concern of multiple subscribers to a topic causing a major problem with system performance can be alleviated with a feature request by a person in the BOF get together for specifying the numeric limit to subscribers of a particular topic). Note: (Based on my personal UDPROS implementation experience, adding Multicast support would be fairly simple to add into the Happy Artist Java client, so I assume the same might apply on other platforms that have UDPROS support).
>
> I think you underestimate the multicast problem. Take a simple feature like latching for example, this requires the notion of a connection (it actually violates the anonymous part of our anonymous pub/sub design). Without a connection behind pub/sub many things in ROS 1 will fall over, not the least of which is the discovery system. ROSUDP works around this by maintaining the notion of a connection over UDP manually, which I think is part of why rospy doesn't support it currently.
Will, I agree that latching doesn't work with UDPM, but I think the latching pattern doesn't even make sense in the majority of situations where someone will want to use UDPM to decrease bandwidth overhead.
For those unfamiliar with latching, UDPM is useful for high bandwidth / high frequency topics, whereas latching is useful when you have sparse event-like messages on a topic and you're worried that you subscribed too late to get the most recent event.
-j
-j
--
You received this message because you are subscribed to the Google Groups "ROS SIG NG ROS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-ng-ro...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Hi Aaron, I appreciate you taking the time to give us some feedback. Let me see if I can address some of your proposals and questions inline. However, ultimately we may need to break off in to smaller, more focused discussions.On Sun, Sep 14, 2014 at 4:55 PM, Aaron Sims <aaronhap...@gmail.com> wrote:Ok a few points to make here, first this sounds a lot like something our own Morgan Quigley was a fan of, which he called the Multi Middleware Matrix, which he pronounced "Mmm... ROS" :). In this system we would have a middleware abstraction layer which could be implemented by anything, ROS 1's TCP/UDPROS, DDS, ZeroMQ, MQTT, etc...The problem we identified with this approach was complexity. In order to provide an interface that was this flexible we either needed to make it ridiculously limited and implement all the higher level features above this interface, often reimplementing functionality which some of the middleware's provide but others don't. Or worse, we would have to work hard to make limited protocols like TCPROS implement more advanced features we want to expose in ROS 2 via the abstraction layer.In the end we decided that making a bridge to ROS 1 was more tractable than a transparent compatibility layer using the MMM. We have a place holder for this in our design website which we haven't had time to fill out, but we intend to: https://github.com/ros2/design/blob/gh-pages/articles/40_ros_with_modular_middleware.mdThat being said, we have an interface in ROS 2 currently called the `ros_middleware_interface` which provides this abstraction to some degree. This will be a C interface which hides all DDS details (which are never used above it) and that will be used to create bindings in other languages. So we have this abstraction, but we only plan to support DDS, at least for now.
I think you underestimate the multicast problem.
question inlined...On Wed, Sep 17, 2014 at 10:50 PM, William Woodall <wil...@osrfoundation.org> wrote:Hi Aaron, I appreciate you taking the time to give us some feedback. Let me see if I can address some of your proposals and questions inline. However, ultimately we may need to break off in to smaller, more focused discussions.On Sun, Sep 14, 2014 at 4:55 PM, Aaron Sims <aaronhap...@gmail.com> wrote:Ok a few points to make here, first this sounds a lot like something our own Morgan Quigley was a fan of, which he called the Multi Middleware Matrix, which he pronounced "Mmm... ROS" :). In this system we would have a middleware abstraction layer which could be implemented by anything, ROS 1's TCP/UDPROS, DDS, ZeroMQ, MQTT, etc...The problem we identified with this approach was complexity. In order to provide an interface that was this flexible we either needed to make it ridiculously limited and implement all the higher level features above this interface, often reimplementing functionality which some of the middleware's provide but others don't. Or worse, we would have to work hard to make limited protocols like TCPROS implement more advanced features we want to expose in ROS 2 via the abstraction layer.In the end we decided that making a bridge to ROS 1 was more tractable than a transparent compatibility layer using the MMM. We have a place holder for this in our design website which we haven't had time to fill out, but we intend to: https://github.com/ros2/design/blob/gh-pages/articles/40_ros_with_modular_middleware.mdThat being said, we have an interface in ROS 2 currently called the `ros_middleware_interface` which provides this abstraction to some degree. This will be a C interface which hides all DDS details (which are never used above it) and that will be used to create bindings in other languages. So we have this abstraction, but we only plan to support DDS, at least for now.Would you please provide some examples or use cases against the Mmm solution? For example, which features would need to be re-implemented? I ask as the RCTA RFrame Mmm style solution is roughly half the lines of code of roscpp. (still trying to figure out if we can release any of it)
I think you underestimate the multicast problem.General point on this and other "small feature" requests. Many solutions to problems are small code changes. Which then require 6+ months of testing. This is not due to the complexity of the change but rather the complexity of the system and potential side effects which make verifying such changes tedious. In other words, depending on the problem code complexity != system complexity.
--
You received this message because you are subscribed to the Google Groups "ROS SIG NG ROS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-ng-ro...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "ROS SIG NG ROS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-ng-ro...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.