0
$\begingroup$

Rosanswers logo

Looking for information on how to cross-compile ROS for my embedded system, the main references I've found are eros (which is dead) and installing from source (which assumes you have a proper package manager to get the bootstrap dependencies).

Unfortunately, I don't have the luxury of a proper package manager. We build our kernel and root filesystem using LTIB, since that is the approach in the board support package provided by the manufacturer.

I would appreciate any and all tips on cross-compiling from the ground up -- I have a gcc cross-compiler, and kernel version 2.6.27.8 (yes, I know that is from 2008).

What I would really love is a bullet list of the dependencies for the most basic core components. We only need ros_comm on the embedded system, at least to start.

There are a few other middleware options in the running, but we want to give ROS a shot because it looks like it can offer an integrated system with many tools. But I can't spend two weeks just getting it to run, so I'm hoping someone with recent experience can provide some advice or point me to a good reference to start with.

Thanks,


Originally posted by bluesquall on ROS Answers with karma: 11 on 2015-01-27

Post score: 1


Original comments

Comment by stevej_80 on 2016-04-11:
Hi @bluesquall, I am having a hard time making ROS work on my small embedded system. been looking for alternative options to migrate my codes from ROS to another middleware / toolbox. Could you please name a few of the viable options or put me in a direction so I look into them? Thank you.

$\endgroup$

3 Answers 3

0
$\begingroup$

Rosanswers logo

You may want to check meta-ros, which is a cross-compilation toolchain for ROS, similar to LTIB.


Originally posted by ahendrix with karma: 47576 on 2015-01-27

This answer was ACCEPTED on the original site

Post score: 1


Original comments

Comment by bluesquall on 2015-01-27:
Our board support package and toolchain don't currently work outside LTIB, but I'll take a look at meta-ros. Thanks.

$\endgroup$
0
$\begingroup$

Rosanswers logo

Most of my experience is on running a ROS system on networks of workstation-class x86 machines, but if the main issue is building the dependencies, then here's a lists generated by the apt-rdepends tool on the standard core ROS Hydro metapackage for Ubuntu 12.04:

ros-hydro-ros-base dependencies

This list was generated on an Ubuntu 12.04 machine via:

apt-rdepends ros-hydro-ros-base | grep ")$" | sort | uniq 

For the ROS core packages, I wouldn't worry about the kernel 2.6 constraint.

One thing that you should look into for consideration of ROS in the long-term is the ROS 2.0 roadmap, since one of their main focuses is on replacing the current implementation of the ROS TCP/UDP middleware with a DDS-based core.

I know you're not interested in running Ubuntu on your hardware, but Mark Shuttleworth (of Ubuntu) did recently reach out to the ROS core dev team about Ubuntu's work on "Ubuntu Snappy" which is a reworking of Ubuntu meant for embedded systems. I haven't experimented with this, but it might be worth looking into since they've continued to collaborate closely on the project.


Originally posted by jbohren with karma: 5809 on 2015-01-27

This answer was NOT ACCEPTED on the original site

Post score: 1


Original comments

Comment by bluesquall on 2015-01-27:
That's a pretty long dependency list -- I'll have to cross-reference with what we already have on the system, since cross-compiling all of those could turn into a time sink.

And thank you for the point about DDS in ROS-2.0 -- we hadn't looked at DDS yet.

Comment by jbohren on 2015-01-27:
What linux distribution are you running on your boards?

Comment by bluesquall on 2015-01-27:
AFAIK it is a minimal version of debian, with the caveat that we can only add packages via LTIB and building a new rootfs, or by building from source.

$\endgroup$
0
$\begingroup$

Rosanswers logo

I don't know your actual use-case, but for some applications installing and running a full ROS system on your embedded board might not be necessary. I don't have extensive experience with any of these, but I thought I'd mention them as alternatives to the two other answers:

  1. rosc (and github.com/synapticon/rosc): should target bare-metal as well as boards with an OS (eg: Linux). More info: ROSCon13 slides.
  2. rosserial (in particular: rosserial_embeddedlinux)
  3. uROSNode: as the name implies, targeted towards microcontrollers. ROSCon13 slides.
  4. cROS (and this ROS blog news post. Some slides from IAS13 here): according to the developers: "an ANSI C library, called cROS, that acts as ROS interface". iirc, there is going to be an open-source version of this, somewhere in Q2-2015 (UPDATE: this has been released. See github.com/it-robotics/cros). Similar in goals to rosc, but (if the marketing slides are to be believed), much closer to being a true and complete client library for embedded systems.

First two are targetting situations in which you don't want to run a full-blown ROS on your embedded device. rosserial does this by implementing a custom bridging protocol, which requires a bridge node running on some host device that does run a 'normal' ROS. rosc on the other hand does not and should allow the embedded device to become a first-class-citizen of a ROS node graph.

The third option mainly targets microcontrollers, but I included it as another example of a pure ANSI C implementation.

Keep in mind though that all of these have in common that they don't allow you to run a ROS master on your embedded device, they are client libraries.

Edit: added cROS info.

Edit2: updated cROS info: it has been released.


Originally posted by gvdhoorn with karma: 86574 on 2015-01-28

This answer was NOT ACCEPTED on the original site

Post score: 3


Original comments

Comment by bluesquall on 2015-01-29:
rosc looks like it could fit my needs. It is still alpha, so I hesitate to put it into a project that is moving toward production, but I will try it out and certainly keep an eye on it. Thanks for pointing me to it.

Comment by bluesquall on 2015-05-04:
Thanks for updating on cROS -- I'll try cross-compiling that and report back. (It may not happen for several weeks -- we are at the start of a large field experiment right now.)

$\endgroup$