@gavanderhoorn thanks for catching that. I’ve just committed the Apache 2 LICENSE file.
Please let us know if you have any questions.
Ciao!
ROS Resources: ROS Homepage | Media and Trademarks | Documentation | ROS Index | How to Get Help | Q&A Help Site | Discussion Forum | Service Status |
@gavanderhoorn thanks for catching that. I’ve just committed the Apache 2 LICENSE file.
Please let us know if you have any questions.
Ciao!
I’ve finally found the time to read through both submissions (and just in time, to, with the OMG meeting next week!). Here are my notes that I took for myself as I was reading through them, along with some thoughts at the end.
/property
postfix to the URI.
The PrismTech submission is undoubtedly more complex, but it is also undoubtedly more powerful - although how much more depends on your use case. Most significantly, it supports discovery and DDS-XRCE applications do not need a server running to communicate even amongst themselves. The RTIandCo submission, on the other hand, is simpler but does not support any form of P2P communication, requiring a server to always exist even if you only have DDS-XRCE applications. Both would require some kind of gateway (which is explitly present in the RTIandCo submission) to talk to DDS-RTPS, but while the PrismTech one would require the data to be unpacked and repacked, the RTIandCo one probably would not because it uses XCDR for DDS-XRCE.
The PrismTech submission is superior for tiny-scale devices. There are many examples of these in use today, such as sensor motes. But for the ROS use case, are such tiny devices relevant? Regarding which is more suitable for ROS, this is not a straightforward question. PrismTech’s submission is more suited to implementing ROS on top of as a standalone rmw implementation because it would not require that a server always be present. On the other hand, it lacks a lot of the QoS capability of DDS, which the RTIandCo submission supports. But the RTIandCo submission is more like rosserial
, rather than the fully decentratlised communications middlewhere that the PrismTech submission is. This doesn’t mean that an rmw could be built on top, but it would not be as straight forward to use, requiring additional functionality in roslaunch
.
Based on the presentation, I got the impression that the PrismTech submission was very complex with many branching paths in processing a message, and the RTIandCo submission is relatively simple. Reading the specifications made clear that the RTIandCo submission is simple: it’s a simple protocol for a single task (proxying data between a DDS domain and a device). It would be easy to implement, but has drawbacks like needing a server for it to work at all. On the other hand, reading the PrismTech submission made clear that their protocol is not that complex. It’s not as simple as RTIandCo’s, but it’s straightforward, well thought out, and clearly designed for very small scale devices. Its decentralised nature would make it easier to use in a system where it is the only protocol in use, but if you want to mix RTPS and XRCE then you would need a gateway, and the gateway would necessarily be less efficient than that in the RTIandCo proposal. However, it would also be much less of a single point of failure.
A relevant question is, given that the PrismTech submission doesn’t support aspects of DDS like QoS (except for reliability), what is the benefit (aside from overhead) compared with using a subset of RTPS?
Thanks for the detailed comparison and the kind words
If I may give some more context to a few of our choices:
For all those who are interested, we have continued working on the our protocol specification and the current version is now included in our repository.
@gbiggs, thanks for taking the time of reading and analysing both submission. I wish more OMG attendees would follow your example
There are a few observations I’d like to make beside to what Erik has just made.
One of he main focus on wire-efficiency for use was to be able to support properly transport that have very small MTU or low byte-rate per hour. One example is BLE (Bluetooth Low Energy), which on most devices fixes the MTU to 20 bytes (and sometimes cannot be negotiated upward). The other example is LoRA in which 400 bytes can be sent at most per hour! Thus, it is not as if we are obsessed with efficiency, it is really a matter of relevance and applicability.
I think that to understand our proposal you have to look at the mechanism we provide to implement the DDS mapping and DDS-like behaviour. In essence our properties mechanism allow us to map DDS QoS and for an XRCE implementation targeting the DDS interop, arguably QoS like deadline, transport priority, etc. etc. can all be implemented. It is in fact worth to remark how if you look at the DDSI-RTPS specification it does not specify how QoS are implemented – beside Realiability. Durability, Group Coherency and all the other are implemented at DCPS level. The same is true for XRCE. Do you start to see the analogy now?
As you could see from http://zenoh.io our code is less then 2000 lines of code and can run OS-less. Thus if we compare protocol complexity, if as you mention RTI implementations is also around 2000 lines of code… Perhaps our protocol is not so much more complicated to implement In fact, I’d argue that for those interested in implementing only the client-to-broker protocol the complexity is similar.
In any case, thanks again for your throughout analysis… And if you have any questions or curiosity on why certain things are how they are in XRCE, please don’t hesitate to ask.
P.S. Did you realise why declaration can be are atomic? I guess with DDS you have experienced the challenge of needing a series of entities to be declared and having partial failures… Well that was one of the things we wanted to prevent.
P.P.S Notice that Resource ID can be arbitrarily small or big, and that there is a one resource ID identifies a resource constraint, meaning that multiple ID can be associated with the same resource… That has nice implications too…
@gbiggs, are you really in agreement with what was presented by the evaluation team?
Dear all,
I wanted to share with the ROS community the proposal we made yesterday afternoon to other DDS vendors, the OMG MARS Taskforce and the XRCE evaluation team on a possible way forward.
Before articulating the proposal let me give some context.
As a result of the XRCE standardisation process we need to select one of the proposals. @gbiggs provides above a good and independent analysis on the two proposals with @eboasson and @kydos clarifying a few points. Thus if you have not read those I suggest you do before continuing reading things.
With reference to @gbiggs analysis, we have one proposal (ours) that is perceived as being slightly more complex but that supports peer-to-peer as well as client-to-broker and is more suited for constrained environments. The other (RTIandCo) which appears to be simpler but only supports client-to-broker and carries more overhead.
If along with this information, we take into account that we (ADLINK):
have made available our XRCE implementation as Open Source under Apache 2 as part of the project zenoh.io, and
are going to release a C++ broker by the end of the year (we already have a Swift and a Scala broker implemented – some folks have seen these in actions at various demonstrations), and
are committed to make zenoh.io the XRCE reference implementation, both in terms of standards as well as quality
Now that the context is given I can enunciate the proposal I made to other vendors, task force & co:
Adopt our proposal and join forces, around the newly established open source project (zenoh), to accelerate the establishment of the XRCE standard in constrained environments.
The advantages of my proposal are several:
End-users such as the ROS community would get access to an implementation of the standard much more quickly – essentially now.
Other DDS vendors could have immediately constrained connectivity by simply integrating their DDS implementation on the zenoh.io broker.
We would have an open source implementation of XRCE supported by all DDS vendors, which means no interoperability issues, faster evolution, and faster adoption.
We would have a protocol that can do peer-to-peer as well as brokered communication, which is good for some use cases – most notably in robotics.
We would have a protocol that could be deployed down to the sensors. Imagine for a moment having ROS-enabled sensors talking XRCE via low-power protocols or anything else that suits them.
As the one protocol everyone uses and supports is open-source we would facilitate adoption immensely.
Collaboration can bring us much more further away than competition. What has made humans excel is our ability to collaborate not so much that to compete… Thus, why not in this case?
I am looking forward to hear comments from the ROS community. Please speak-up.
Hi all,
eProsima has already an implementation of the XRCE DDS join submission (RTI, Twin Oaks & eProsima) released as Apache 2.0, called eProsima micro-RTPS:
Github Repo: https://github.com/eProsima/micro-RTPS
Readthedocs: http://micro-rtps.readthedocs.io
Quick start video: https://youtu.be/XT-Y1CfOGJM
Micro-RTPS is the base for the project micro-ROS (eProsima, BOSCH, Acutronic Robotics, PIAP and FIWARE Foundation), a project to extend ROS2 to microcontrollers following the ROS2 principals.
We will be presenting the project in the industrial ROS conference next Tuesday, Dec 12. See here:
http://rosindustrial.org/events/2017/12/12/ros-industrial-conference-2017
@kydos (Angelo): We have not only a complete Open Source implementation, but a joint submission with the main DDS/RTPS providers (RTI, Twin Oaks, eProsima), and an ongoing project with some of the main ROS contributors: micro-ROS. What I was planning is to get some of the good ideas you have in your submission and incorporate those to the join submission, always following the OMG process we have to create a new standard. Let’s organize the necessary meetings to get you on board.
@Jaime_Martin_Losa, you are just following our foot-steps. Just check dates on repositories, check numbers of supporters, quantity of contribution, etc. etc… Then the real questions is why should we select the protocol that does less and takes more resources… I don’t find it a good technical argument.
You may think it is a question of ego, but I’d argue you should ask yourself the same. Our proposal is more general, more wire efficient and memory efficient. Thus technically, a rational thinker would join ours.
But again, ego and politics spoil rational thinking. But it is not too late for you to take the right choice
Have a good weekend.
P.S. BTW, with your microRTPS you are bringing ROS back to the single point of failure/bottleneck that existed in ROS1… Wonder how you feel about it.
Hi Angelo,
We have been working in this for more than one year now. We have shown prototypes even before you published your alternative. Not only at the OMG, but within the ROS ecosystem, with already some success cases, and now we have the first alpha of a complete product: Code, Examples, Comprehensive doc, videos, etc.
Three different DDS providers are working in our direction, and you have already several assessments here and at the OMG indicating you the pitfalls of your submission, so please consider the possibility you could be wrong, or partially wrong.
Now, the process for me is clear: The OMG Evaluation team has asked for more information regarding our submissions. Please adhere to the process.
@Jaime_Martin_Losa you may have been working on this for a year. But you are very well aware that we have demonstrated prototypes ages ago – as an example look for the Huawei Eurpope Connect… In any case, for those interested in the actual history the Internet is fairly good at keeping track of it.
I’d be happy to hear from you what are the pitfalls of our submission. Thus far, all points raised, including those from the evaluation team were coming from either not reading all the document or assuming a restrictive interpretation.
But if you have a real comments, you are welcome. I’d be happy to have a technical discussion.
I’ll state it again and wait for you to prove differently, but with objective and provable facts, our submission does more than yours and is more wire efficient!
Please if you feel to reply to this email do it only with technical matters.
@kydos it seems to me that you are the one bringing up non technical matters here regarding who did what first. It is also you who is making unsubstantiated statements about the relative capabilities and performance.
You may not like the points raised by the evaluation team but claiming that they are “not reading all the document” or their interpretation is “restrictive” is hardly an objective statement. Moreover it is disrespectful of the effort the independent evaluation team has put into the review and feedback.
I do agree it does not make sense to have this kind of discussion here it is not a technical discussion as you stated. The right forum for the technical discussion is the OMG evaluation team and task force.
Please stop trying to externalize and politicize the process.
My dearest @GerardoPardo, Just one comment. Please, technical arguments no more politics (I should probably do a T-Shirt
Technical discussions are always good in any forum.
Hello everyone,
Please, refer to the content below for a peek into a preliminary architecture of the micro-ROS European project that @Jaime_Martin_Losa brought up above (completely inspired in the work the OSRF is doing with ROS 2):
+-------------------------------------------------------------+
| embedded application layer |
+-------------------------------------------------------------+
| micro-ROS client library (urcl) |
e.g.: tf, lifecycle, executors, etc. |
+-------------------------------------------------------------+
| micro-ROS middleware interface (urmw) |
+-------------------+---------------------+-------------------+
| middleware 1 | middleware 2 | middleware 3 |
| (e.g. micro-RTPS) | (e.g. mqtt) | |
+-------------------+---------------------+-------------------+
| Real-Time Operating System (RTOS) abstractions |
+------------------+------------------+-----------------------+
| RTOS 1 | RTOS 2 | RTOS 3 |
| (e.g. NuttX) | (e.g. RIOT) | (e.g. Zephyr) |
+------------------+------------------+-----------------------+
| hardware |
+-------------------------------------------------------------+
The project started only recently. For those developing XRCE solutions, I believe it’s a good moment to start keeping an eye on it (@GerardoPardo, @kydos).
An entry point for the project is available at https://github.com/microROS/micro-ROS.
I’m curious about the need for urcl
. What is insufficient about rcl
(both present and planned)?
Micro-ROS runs on NuttX, not Linux. There might be things we need to change, and there might be things we need to remove because of resource constraints. It’s not completely clear, yet. Therefore, we are not expecting to use RCL as-as, that’s all.
Hello @gbiggs,
As @Ingo_Lutkebohle pointed out, due to a limited amount of resources in MCUs, we expect to have a “micro ros client library” (urcl) with a reduced set of functionalities. Ideally, we should converge into rcl but I believe that’s beyond the scope of our project.
Cheers,
I hope that consideration is given to that so that it does not become impossible in the future. It would be much better if we have a single C client library that works on all platforms, with features turned on and off as needed for resources and use cases. Otherwise there is a big risk of divergence.
So after a second thought and a few conversations with @astralien3000 and his colleagues, I’m happy to share we’re reconsidering our position.
There’s an ongoing prototype at GitHub - erlerobot/riot-ros2 at nuttx where we’re trying to converge through the generation of smarter cross-toolchains (just came up with that name). Let’s see where we get.
Cheers,
I hope that consideration is given to that so that it does not become impossible in the future. It would be much better if we have a single C client library that works on all platforms, with features turned on and off as needed for resources and use cases. Otherwise there is a big risk of divergence.
Thats the goal, really, and anything else is totally not decided on, yet. “urcl” was just a placeholder name. While we initially thought that the architecture layering sketch was good to give a rough idea, I now see it may be interpreted to mean more than it does. Therefore, I updated the repository description at GitHub - micro-ROS/micro-ROS.github.io: A platform for seamless integration of resource constrained devices in the ROS ecosystem. to be a bit more generic
Remember, this is all open source, and takes inspiration from a lot of work, both the original ROS2 embedded attempts, rosserial, as well as, most recently, the RIOT work by @astralien3000 and colleagues.
Glad to hear that’s the direction you want to go in. Resource usage reduction in rcl
would benefit all users of ROS, since all the other client libraries build on top of it.