Is ROS suitable for the real world ? (help needed)
Hello Ladies and Gentlemen
I apologize for this long post but, I reckon people will request the info anyway...
I've been struggling for some time, to make ROS behave like I want.
Either my mindset is not suited for ROS or the opposite is the case.
Maybe ROS is not mature enough for real products - I need some help
The setup:
We make agro-rotbots.
We have a product with 3-31 target-computers on a weeding/hoeing machine, each running a monolithic piece of legacy software.
To facilitate further feature development we need to modularize (“objectify”) the software, and to get there; we need a distributed framework.
We started out with the intention of rolling our own. But then some clever guy pointed our attention to ROS – and it has every thing we need, events, common message interfaces, debug opportunities...... - all on a BSD license could it be any better ??
Then I set out to get a simple proof-of-concept-system running on our target – to see if we should go the ROS way.
To my big surprise it has proven very difficult to build ROS from source the way I want.
I tried but couldn't make it work - what am I doing wrong ? I'm sure there is a very basic thing I missed.
The goal:
1. create a root_fs image that can be copied/'burned' directly on to the target, flash.
(e.i not a 'linux-distribution' - There is no such thing as 'building' or 'installing' on the target)
2. Create a Linux flavored develop environment in that is manageable, and relocatable.
My setup:
My Build computer:
(this is just mine but it could/should be any Linux 32/64 bit combi)
intel x64 (64 bit)
Linux version 3.19.0-47-generic (buildd@lgw01-19) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) £53~14.04.1-Ubuntu SMP Mon Jan 18 16:09:14 UTC 2016
PLEASE NOTE: at the moment ROS is NOT installed on my build computer (to avoid 'contamination')
The target system:
intel x86 (32 bit)
some minimal Linux kernel (what ever version we need).
the absolute minimal tool set needed.
All our code is under git control
So we need to build a toolchain, cross compile the kernel, ROS, and all our proprietary software.
I have been trying the yocto project with no success, it is much to big and unhandy, for every day use. And we don't want a 'distro' just a plain image
So I went with buildroot since it is simple (in the sense that only uses standard makefiles) and is highly flexible.
I did this:
First I build a clean root_fs that can boot on the target: Linux kernel, with the things ROS needs, boost, python, libtinyxml....
Then I want to compile ros_comm using the newly created toolchain, and overlay the root_fs.(Latter I will make a proper buildroot “package”)
Then I fetch and build the ROS software.
Following : http://answers.ros.org/question/19107... and http://wiki.ros.org/xxx/Installation/...
cd ...
To be honest, I haven't read all your post, but in short: Yes, it is suitable. You might find some bottlenecks if you are very restricted, and if you need a hyper-optimized application then ROS might have too much overhead, but it is the same balance as always.
There are a lot of people out there using meta-ros (we also use it). We acknowledge Yocto is a bit of a pain but it is also possible to cross-compile, etc.
Yes, ROS is suitable for the real world. It runs on many robots. If it natively supports every use case is another question. I suspect your actual question is about cross compiling ROS. It might be a good idea to rephrase the title to that and shorten the content, so that the right people see this.
For the actual compile: I believe, if you need to set the paths manually, something is wrong. This is the problem that catkin is made to solve. I have never cross-compiled ROS, so I don't know a proper fix.
Specifically for console_bridge: This is a system package, not a ROS package. It is released in the ROS repositories. If you can't install that directly, you can just add it to the build. Maybe it is sufficient to just remove the --wet-only from the rosinstall generator, so it get's these for you.
And additional comment regarding catkin paths, check this PR in meta-ros that actually solves the problem to be able to compile on the platform.
Do you have got a ROS buildroot package?