This might be a tricky question, but having dug in deep with ROS I am noticing the complexity that one has to deal with.

Simple Arduino programming is much simpler but of course can’t do many useful things. No threading, IPC, and many many more. To be clear, I am not planning on using an Arduino, I am just using it as the extreme end point of a spectrum.

So my question is, is there another package or library or framework that does some of the things that ROS does but perhaps not at the level of sophistication?


Thanks to the responses so far, and the feedback. I've added below and updated above.

As an example application, let's say an experimental (i.e I am not trying to build a commercial product - yet) mobile robot, with a depth camera, Lidar, and wheels, that can navigate indoors and be controlled over WiFi. It would likely include slam navigation and/or fiducials. Obviously I am OK with buying the hardware or the hardware components and doing a lot of programming. I would prefer something other than C++ but that's not a strict requirement.

  • $\begingroup$ Are you looking for a framework that works on the Arduino? The Arduino, when used as suggested, has no operating system and only supports a single process. I'd assumed you were working on a robot with at least a Raspberry Pi or other SBC. $\endgroup$ – NomadMaker Aug 1 '18 at 7:55
  • $\begingroup$ I just used Arduino as the extreme low level side of the spectrum and just because programming a robot on a bare Arduino would be hell. So no, the discussion is about Pis and even higher end SBCs that one might find on a robot. $\endgroup$ – pitosalas Aug 1 '18 at 16:13
  • $\begingroup$ You should edit your question so that people know. With the way your question is worded, it reads as if the Arduino is your target controller. it is possible to communicate between an Arduino and a computer running ROS such that the Arduino acts as a ROS node. $\endgroup$ – NomadMaker Aug 1 '18 at 18:42
  • $\begingroup$ Welcome to Robotics, @pitosalas. As it stands, you're asking for a "library or framework that does some of the things that ROS does," but then not clarifying what it is you're trying to do. Do you just want to pass a message? Do you want to communicate with a laser scanner? Do you want a process to do SLAM? Something else? There are several answers here with lists of things, but you're not providing much useful feedback anywhere beyond something along the lines of "I saw that and it's not really what I'm looking for." Please edit your question to clarify what you are looking for. $\endgroup$ – Chuck Aug 2 '18 at 12:59
  • $\begingroup$ @pitosalas - Your edit shows that you're essentially looking for all the capabilities of ROS, you comment that you're looking for a significant community and adoption, and you're looking for something that can be programmed in Python. Are you aware that you can use ROS with Python?. $\endgroup$ – Chuck Aug 3 '18 at 13:18

I think you are getting confused between the basic ROS possibilities and some more advanced libraries which are integrated but do not need to be used by users without 'advanced' requirements. If you find it too difficult most likely those are functionalities which are not necessary for your project.

That being said, ROS is a middleware that makes the glue between several modular pieces of software by providing interfaces and taking care of communication. There exist other middlewares for robotics like YARP, POCOLIBS, OROCOS, ROCK (but there are many more). Some are targeted more for real-time, some more with specificity target at their original application.

If you want to program in a middleware independent way, you can look into genom3, which is an additional abstraction layer allowing to choose middleware at compilation time.

  • 1
    $\begingroup$ I'm not really confused about that, but it's true that I am not needing those advanced libraries nor the cornucopia of alternatives that are offered. Forgive me but I think the ROS architecture is quite baroque, in particular the development environment: a complicated combination of .xml, .yaml, cmake files, an intricate directory structure, and what seems to be a rather fragile overall system which can easily be slightly misconfigured. You remember the old adage: make simple things simple and complicated things possible. $\endgroup$ – pitosalas Jul 31 '18 at 0:27

ROS is still a good framework, even if you just use a little of it. However, if I just needed the message passing, I'd probably just use MQTT. But ROS has a lot of useful components that I'd otherwise have to create or integrate myself. These include message passing, SLAM, path control, and many other components.

That being said, there are quite a few alternatives out there. Most of the ones I've heard of were listed in this Wikipedia article on Open Source Robotics.

The alternative that I'm most familiar with is Gobot, available here. This framework is much smaller than ROS, but it's working on producing cross-platform code.

There are sister projects, Artoo (Ruby) and Cylon (Javascript).

  • $\begingroup$ Thanks! Now that I see that wikipedia page, I am pretty sure I've seen it before. But is there any one of them that has any kind of significant community and adoption. From where I sit I can see broad adoption in Arduino's simplistic setup and then a very wide gap until ROS. All the others I've looked at seem to be very niche. But that's why I asked this question. $\endgroup$ – pitosalas Jul 31 '18 at 0:31
  • $\begingroup$ I've looked at MOOS and liked it. And for a simple robot I would not bother to use ROS. However, ROS shines where you need a lot of different parts to work together, especially when you don't want to go to a lot of trouble. $\endgroup$ – NomadMaker Jul 31 '18 at 0:58
  • $\begingroup$ MOOS looks interesting. Let me make it even more difficult - something with a higher level language than c++... Python, Golang, Java, Ruby? $\endgroup$ – pitosalas Jul 31 '18 at 1:03
  • 1
    $\begingroup$ That would be ROS. And I'd prefer to use Rust. $\endgroup$ – NomadMaker Jul 31 '18 at 1:08

Arduino is not really relevant since its output is a bare-metal microcontroller code. You can gain experience with more complex microcontroller systems by using a realtime OS on your arduino board.

I have used ROS in several large projects and have an informed understanding of it. While I disagree with many of the choices that the core authors of ROS made, I still recommend using ROS when it is an appropriate choice made with full awareness of the other approaches that can be taken.

ROS is a poor choice in many robotics situations. Real-time systems and distributed systems with unreliable communications for example.

ROS has a list of alternative frameworks, thought they leave out ROCK which arguably has a better design but uses Ruby instead of Python as its scripting language of choice.

Some of the things that ROS provides are things that are already provided by your operating system and the OS version is probably better developed.

Deploy your software using your OS's package manager instead of rospack. Start your processes using (b)ash and your OS's service manager instead of roslaunch. Use LDAP instead of rosparameters. Use DNS instead of roscore for service discovery.

You can also cherry pick the parts of ROS that work for you.

Most of the software that is distributed with ROS is developed such that it can be used without ROS.

  • $\begingroup$ While there are some speed problems with ROS, there are a lot of parts (like SLAM and moveit) that you would have to rewrite (at least the interface code) if you want that functionality but don't use ROS. ROS was designed to allow different components (hardware, software) to work together. The messaging does seem to have problems, but I haven't checked the latest version. $\endgroup$ – NomadMaker Aug 1 '18 at 10:05
  • $\begingroup$ @hauptmech ROS does provide very useful middleware on top of Linux. I am not undervaluing that. Its just that the software architecture and deployment model seems overly complicated and fragile. $\endgroup$ – pitosalas Aug 1 '18 at 16:15
  • $\begingroup$ I get the impression that ROS is designed to fit different parts of a complex system together. I think that it might be easier to create a complex robot with ROS, but would be less efficient that a system that was designed as a unit. $\endgroup$ – NomadMaker Aug 1 '18 at 18:44

Not the answer you're looking for? Browse other questions tagged or ask your own question.