
Robot Operating System – A flexible framework for writing robot software - doener
http://www.ros.org/
======
protomikron
My experience with ROS has been suboptimal. It's a collection of incompatible,
outdated and buggy tools that communicate with each other via a single-point
of failure (roscore) using a pub/sub mechanism.

Furthermore they use their _own_ build system (catkin, WHY?), define their
_own_ IDL (WHY?), use their _own_ dependency system (rosdep, WHY?) and even
mess with your Bash environment.

I appreciate their effort and it is really hard to make a system that
interfaces with all kinds of different robots and hardware, but I don't
understand why they don't exploit existing high-quality solutions for the
"not-robot-related" parts of their system. At the moment I don't think I would
like to have ROS run a potential self-driving car.

~~~
Davidbrcz
I spoke Mikael Arguedas at the 2018 French ROS days (JONAROS) where he gave a
presentation about ROS 2 (talks are available online IIRC, in French). During
his presentation; he said that most of ROS 1 was engineered _before_ any of
today's well known frameworks were available , hence the lot of custom tools.
That has driven a major part of ROS 2's design (especially the use of DDS).

Otherwise, I have been personally using ROS for building robots for the French
(and European) robot championship (see
[https://twitter.com/AIGRIS_Birds](https://twitter.com/AIGRIS_Birds)). It
works pretty well, it is convenient, easy to learn and provide some nice
tooling (bagging for replaying messages, simulation with Gazebo...).

It is the _de facto_ standard for robotics middleware for scientific projects.
It not widely used by industrials because of some shortcomings even if
initiatives like ROS Industrial and ROS 2 will likely improve things.

~~~
discreteevent
I just saw that ROS2 will be based on the DDS standard. I came across DDS
before in a different context and it impressed me a lot. It reminds me of the
concepts in the eve programming language where to build a distributed system
you share a global data space. Both took inspiration from LINDA and tuple
spaces. "The data is the interface" [https://www.rti.com/products/what-is-a-
databus](https://www.rti.com/products/what-is-a-databus)

~~~
inamberclad
Thank god for that. I had an internship where I just wrote a shim layer
between DDS and Ros Messages. It was a huge pain since they didn't map very
well to each other.

------
osterwood
I wrote a blog article recently wherein I propose that cloud-native
infrastructure can be a better foundation for robotic software stacks than
ROS/ROS2. I've been involved in several ROS-based robot & robot-sensor efforts
and (like many others here) have found it lacking in major ways.

[https://capablerobot.com/blog/2018/2018-05-09-wheel-
reinvent...](https://capablerobot.com/blog/2018/2018-05-09-wheel-reinvention/)

There are a whole host of performant, lightweight, and open source tools for
distributed-tracking, pub/sub, logging, serialization, service discovery, KV
stores, visualization, etc. Right now it seems the robot world (including me)
ignores this fact and continues to reinvent wheels (poorly).

I'm curious for feedback on this idea and will be publishing updates as I
experiment with this idea. I'll likely be starting with timing & latency
experiments between ROS, ROS2, and other cloud-native pub/sub brokers.

------
asd4
Also see ROS Industrial [1] for extensions to the ecosystem to include common
industrial robots.

[1]
[https://rosindustrial.org/about/description/](https://rosindustrial.org/about/description/)

------
dang
A small recent-ish discussion:
[https://news.ycombinator.com/item?id=15530813](https://news.ycombinator.com/item?id=15530813)

------
sirsebastian
ROS can be an super enjoyable and productive environment to build software in.
It gives you access to a set of common sensor and actuator drivers, motion
planning, navigation, perception libraries, and implementations of the latest
IROS papers. I’ve seen it used to prototype lots of non-robotics applications
too; really any local distributed system integrating, calibrating, and
coordinating sensors. Personally I think the standardized data types it
provides for robotics and perception data is one of its greatest assets [1],
and could be a standards effort in itself. And it’s home to a great community.

But it definitely has its limits, especially as applications mature, and the
ecosystem can feel siloed from the technology landscape evolving so quickly
in, for example, backend distributed systems. Knowledge transfer between the
robotics community and the software engineering happening in distributed
systems, databases, gaming, web development, etc. is a huge untapped
opportunity. Hit me up if you want to talk more about this!

[1] e.g. [http://wiki.ros.org/sensor_msgs](http://wiki.ros.org/sensor_msgs)

------
carlsborg
Anyone using this.. what have you built?

~~~
Scea91
Ive done my bachelor's thesis in 2013 on this. We were working on a robot
built for exploration of disaster sites (earthquake, fire, ...).

I built:

1) Virtual camera: The robot was equipped with 6 fixed cameras. You can
position virtual camera anywhere in the coordinate space and it constructs
it's image with the information from the real cameras.

2) System for semi-automatic external calibration of cameras from LIDAR
sensor. External calibration is the process of estimating the position and
orientation of the camera. This system was not as precise as calibration using
calibration patterns in lab, but it was useful when the robot was in the wild
and you wanted to adjust the camera or strap a new camera on it quickly.
However, to be frank I am not sure ft the system was ever actually used that
way. I left the lab after finishing my thesis.

The ROS ecosystem is reasonably simple to understand and definitely makes
things much easier. Apart from having some issues with compatibility between
versions and incomplete functionality I remember it as quite a nice platform.
On the other hand I have not tried any of it's competitors if there are any.

~~~
amarant
that's pretty cool! I'm particularly interested in how you made the virtual
camera work?

can I read your thesis, or (dare i ask) source code?

~~~
Scea91
The virtual camera vas done during summer project but the idea IIRC is quite
simple.

I will try some hasty writeup ;)

1) Create a virtual image plane (or cylinder/sphere for panoramic camera) in
the 3D space. For this you need to specify the virtual camera's position,
orientation, focal length and FOV.

2) Define pixels on the image plane. You need to specify the image resolution
and just create grid on the the image plane. Each pixel corresponds to a 3D
point in the world coordinate system.

3) To get a color of each pixel you project it's corresponding 3D point to all
real cameras. Usually only some of the cameras see the point. Each camera that
sees the point gives you a color according to the color of the pixel in it's
image. You have to perform blending of these colors. What worked well in our
case was to give more weight to cameras where the point projected close to the
center of their image.

As you can see, there will definitely be some artifacts, usually more the
farther away the virtual camera is from the real cameras. However, it worked
to my surprise quite well. It was even possible to look at the robot from 3rd
person even though all of the real cameras were on it.

Also it is crucial to have well calibrated cameras. Apart from their
projection matrices you also need to consider their radial and tangential
distortion which was very significant with our camera models.

[https://www.wikiwand.com/en/Pinhole_camera_model](https://www.wikiwand.com/en/Pinhole_camera_model)

[https://www.wikiwand.com/en/Camera_matrix](https://www.wikiwand.com/en/Camera_matrix)

[https://www.wikiwand.com/en/Distortion_(optics)](https://www.wikiwand.com/en/Distortion_\(optics\))

------
ausjke
Used ROS1 and worked DDS in the past, but never did anything with ROS2 yet,
anyone uses ROS2 and has something to say about it?

------
snw
To get ROS and a few more robot related software tools and libraries as nice
binary packages robotpkg might also be of interest:
[http://robotpkg.openrobots.org](http://robotpkg.openrobots.org)

------
raleighm
How does this relate to, or compare with, say, BrainOS?

(Please forgive the newbie question. I’m totally completely ignorant about
robotics operating systems but interested to learn.)

~~~
seren
I don't know BrainOS, but the most obvious difference is that ROS is open
source, so you can prototype or tinker with it easily. BrainOS seems to be a
totally closed solution, and details are sparse on what it actually runs and
does.

ROS has a BSD license, so it is even possible that BrainOS is actually using
some ROS package or resources. After a quick look, most SW positions at
BrainOS mentions than having a prior experience with ROS is a plus.

------
mrfusion
Could someone explain for a new bee. If I’m building a robot why would I use
this and not just write a python script running on Linux?

~~~
dimatura
You can use ROS with Python and Linux. In fact, that's a big chunk of actual
ROS-based systems out there, with most of the rest being C++ and Linux.

For simple robots, you can get away with a simple script. But say, you want to
attach more sensors, add some visualization, some logging, etc. Pretty soon
you'll find yourself writing multithreaded (not great in Python) and/or
multiprocess code, some kind of simple GUI to visualize data, some logging
code, some way to manage parameters... and before you know it you'll find
yourself writing your own little version of ROS (or more generally, robotic
middleware). And without the huge ecosystem of ROS packages that might solve
all sort of problems for you.

~~~
sronors
Good points. You also may find yourself wanting to have more than one robot.
And then you may want them to talk to each other.

------
lnsru
Could somebody, please, explain me what I need in addition to ROS for
functional safety. Some certified laser scanner? Do I understand it right,
that ROS completely ignores functional safety?

~~~
lnsru
Thank you for explaining this issue. So commercially available robot needs
Jetson TX2 (or Wandboard) with ROS and some hardware from safety tools vendor
like Pilz or Sick. And the whole safety assessment from TÜV with official
certificate. That was helpful!

~~~
TickleSteve
What market are you looking at? Its all about risk... if you're targeting the
medical domain for example, you have a multi-year project just to get thru the
certifications. Conversely if you're just looking at creating a toy with
limited movement, weight and power then the risk is significantly less.

Get an engineering safety consultant to have a look.

~~~
lnsru
Industrial cleaning, machine is slow, but has many liters clean and dirty
water inside. Just prototyping it and thinking how to achieve reasonable
price. 30-50k is too expensive, janitor is cheaper.

~~~
AlotOfReading
If you want a solution, don't develop your own. Industrial robots can be
purchased on Ebay for <10k that have already had the certification and
engineering done. Then you just need to do the easier job of engineering your
specific task, versus an entire robot + your task.

------
MisterTea
Please stop using names for version releases. Is "awesome igloo" newer than
"super turtle" or "raring rino"?

Just stop. Use boring versioning numbers. Your developers and users will thank
you.

~~~
tfolbrecht
The software is versioned with numbers,the codenames are for releases which
could have version number ranges, or help differentiate stable from testing,
etc. The developers and users can better make the distinctions with codenames.

~~~
MisterTea
Decimals do that job with less characters.

~~~
anonymousCar
Tell that to Android

