I have to tell you right away that I’ve been working with ROS for about 3 months what is not much but fairly enough. What I’ve sensed:
- Idea. The basis of ROS is a set of nodes that communicate with each other such as a graph. In case of death of one node the others continue to communicate. In the real world this is not uncommon and thus the robot’s vitality rises in times. Well what of it if the robot’s hand has disconnected when it is not used now, because hand will be rebooted by the time of need.
- Fast dive. Despite the lousy documentation many console commands are intuitively understandable.
- Many written libraries. Although if you ask me – that is a controversial moment because up to now I haven’t used any third-party except rqt_gui. And I believe that if you need something more or less serious to produce – it has to be individually written. Take for example kinematics – there is a standard one but people write their own for each robot considering physical characteristics.
- Integration with simulators. Thus far I’ve worked only with gazebo – api and integration documentation could be a bit better, but it works, and it looks like this is the biggest argument in favor of ROS against competitors who do not have it.
- Lousy documentation. Wiki is mess and confusion.
- Miserable implementation here and there. Maybe it’s ok with C++ guys (I didn’t touch C++ in production), but CMakeLists.txt and package.xml drive me mad. Besides from time to time the architecture of ROS makes you write frankly hodgie code.
- Dying. Judging by the low activity of the project you get the impression that ROS is “retired“.
- Lack of standards. If you look at the projects in the open source – everyone is doing whatever he feels like.
I consider ROS being convenient for students and researchers as a tool for fast diving and prototyping but for production I reckon it is flawed.