Official Docker Images for ROS2 Crystal and arm32v7

Hello all,

I’ve working on upstreaming ROS2 Docker images into the Official Library in time for the Crystal release:

While doing so, I wondered how feasible support for arm32v7 would be. Many hobbyist and students still rely on older low-end embedded arm devices, such as raspberry pies. Even the TurtleBot3 currently ships with a 32bit install. To help facilitate ROS2 adoption, I’d suspect better coverage for multi-arch support via pre-built binaries will go a long way towards encouraging migration and general community growth. Looking at the current pull_counts for ROS1 and Ubuntu on Docker Hub, we see as of writing:

Note: these pull counts don’t seem to sum even close to the total pull counts from the official library aggregating these for multi-arch. I assume these counts are rather fresh, perhaps wrt last_updated.

As we can see, arm32v7 makes a substantial proportion of the number of pulls, even more so for base images. I recognise arm32v7 (armhf) isn’t yet listed under any “Support Tier”, so I’ll petition here that adding support for arm32v7 could be worthwhile for the community:

As an exploratory mesure, I went and built ROS2 from source using the current master, and was able to complete in about 1h 19min 23s on my workstation using qemu emulation via docker, use the same methods described in:

I’ve uploaded the logs here for folks to paruse:
arm32v7_ros2_bouncy_source_logs.zip

As well as the resulting docker image here you may test locally:
https://hub.docker.com/r/ruffsl/arm32v7_ros2/tags

Cheers,
@ruffsl

8 Likes

This is double plus good! Thank you @ruffsl! As someone who is working with ROS2 on “older” Raspberry Pi’s, having a 32 bit image is a resource that will help me and, I am sure, other developers.

While it’s great that ROS2 is reaching for the future by focusing on 64 bit systems, the current small computers are 32bit and account for a significant portion of what’s out there.

Since last posted, it looks like Amazon has announced AWS support form ARM [1].
Perhaps this could help improve ROS2’s buildfarm support for multi arch builds?

As for a more concrete use case: robotic outreach projects such Duckietown could really come to benefit from arm32v7 support, helping to teach ROS2 to new and younger users using budget level hardware.

[1] https://aws.amazon.com/about-aws/whats-new/2018/11/introducing-amazon-ec2-a1-instances
[2] https://www.duckietown.org

1 Like

I haven’t actually seen anything on whether the Graviton processor supports 32-bit mode (it’s an optional extension for ARMv8); does anyone know if it does?

I’ll let you know in a few minutes :wink:

I was able to build ros-kinetic-catkin using the ros_buildfarm generate_release_script.py on an a1.medium instance. Build performance wasn’t bad. Python 3 performance on the host seemed (mostly generating the build script) seemed dramatically worse than amd64. Taking 20-25 seconds instead of 3-5 seconds. So it looks like armv7 instructions are supported by these instances.

Are those stats from running the jobs in a arm32v7 container with qemu on a arm64v8 OS, or does the AWS hypervisor allow for booting into a arm32v7 guest OS to avoid qemu when building with docker?

I’ve always experienced slow python runtimes when using qemu.

A cool (I think) feature of the images used by the buildfarm that bundle binaries from qemu-user-static is that they rely on the host kernel’s binfmt to invoke non-native binaries with qemu. So on native platforms the same image will run without qemu and, in fact, the bundled qemu binary is AMD64 native and so it would fail to run if invoked by binfmt.

But the python script was running directly on the host so the docker images weren’t involved in that runtime measurement yet.

1 Like

Just friendly bump; has there been any further thoughts on this, ether by the ROS2 TSC or OSRF?
Or has it been settled that it’s probably too late to add arm32v7 as a Tier 1 or 2 platform for Crystal?

It’s definitely too late for Crystal’s launch and my apologies if I gave the impression that it was ever on the table. I am at present too focused on that launch to ponder reliably beyond it but please do ask again after the initial release.

An official ROS2 Docker image for armhf/arm32v7 and arm64/aarch64 would be great improvement for the cross-compilation instructions :

Currently, Dockerfiles to generate the filessystem are hosted on https://github.com/ros2/cross_compile, but it would be way much better to pull an official image instead of re-building locally (saving time and removing also the redundancy).

1 Like

As an update, PRs to both the official library repo and docs have been opened.
Please take a look through the docs PR and make suggestions.

This will be the README that appears on Docker Hub when users first find the repo.
It includes some examples on installing and build ROS 2 packages with docker,
and some notes on containerizing ROS 2 with software defined networks and security:

1 Like

@nuclearsandwich , it’s been a few weeks, and with the holidays receding, think we could pick up in this topic again? Any help you might need?

3 Likes

Just wanted to chime in here and add a vote of interest for official armv7 support.

I work at OpenROV, a small company that has been developing low-cost robots for underwater exploration. Our latest product, Trident, is built on top of the RaspberryPi 3 and RTI Connext DDS, and we have been excitedly looking forward to adding first-class ROS2 support for some time. With the arrival of the Crystal release, I feel that now is finally a good time to do this. We have shipped thousands of these low cost drones around the world, many of which have gone to researchers, students, and small businesses looking to expand upon the capabilities that we have developed.

Being able to support additional development via ROS2 will also help us in opening up more of our software again. We are using Connext to get the job done, and it serves that purpose well, but we would definitely like to give users a way to work with the platform that is not walled off behind proprietary libraries and licenses.

I imagine there are many RPI3 based projects out there that could benefit from this work as well, so it would be great to see some first class support on the ARM front.

4 Likes

I would also like to endorse this push for armv7 support. I work with both ROS 1 and DDS and can not stress enough the need for ROS2 on arm7 support. I work with both BlueROVs, Tridents and custom UAVs, using a mix of RTI/OpenDDS and ROS for various research and loath the ROS DDS bridges we’ve needed to hack out over the last three years. NASA Langley Research Center here in Hampton, VA and other industry partners have embraced DDS as well as ROS and are chomping at the bit for armv7 support for their research and deployment needs. The combinations with the libraries in ROS, the community using the various flavors of DDS, and the strong push for IoT interfacing, armv7 only makes strategic sense.

Thanks!

Jim

2 Likes

Update: I repeated my exploratory mesure building ROS2 from source for arm32v7 using the current release, and was able to complete in about 1h 57min 39s on my workstation using qemu emulation via docker:

2 Likes

For those who haven’t seen the announcement today, in preparation of DockerCon 2019, Docker and ARM have announced a new partnership that I think folks following this thread may find interesting:

“Docker and Arm Partner to Deliver Frictionless Cloud-Native Software Development and Delivery Model for Cloud, Edge and IoT”
https://www.docker.com/docker-news-and-press/docker-arm-partner-frictionless-cloud-native-software-model-cloud-edge-iot

4 Likes