Meta ROS

These instructions are for building ROS 2 galactic and ROS 1 noetic using OpenEmbedded release series dunfell (Yocto 3.1) on a 64-bit build machine running Ubuntu bionic (18.04). An overview of OpenEmbedded/Yocto can be found in the Yocto Project Overview and Concepts Manual. Additional information on meta-ros can be found in Superflore OE Recipe Generation Scheme.

Note

Kirkstone is expected to support ROS in September 2022

Add meta-ros to rity-demo-image

In conf/local.conf , change MACHINE to your desired platform and comment out multilib-relevant configuration:

# change MACHINE to your desired platform, default is i300a-pumpkin
MACHINE ??= "i350-evk"

# Define multilib target
#require conf/multilib.conf
#MULTILIBS = "multilib:lib32"
#DEFAULTTUNE_virtclass-multilib-lib32 = "armv7athf-neon"

# Video Encode on i300a is only supported in the 32-bits binaries
#IMAGE_INSTALL_remove_i300a = "mtk-vpud"
#IMAGE_INSTALL_append_i300a = "lib32-mtk-vpud"

Add ROS2 layer

  1. Add meta-ros layers to conf/bblayers.conf

<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros2 \
<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros-common \
<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros2-galactic \
<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros-backports-gatesgarth \
<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros-backports-hardknott \
  1. Add this to the bottom of conf/local.conf

ROS_DISTRO = "galactic"
EXTRA_IMAGE_FEATURES ?= "ros-implicit-workspace"
IMAGE_INSTALL_append += " ros-core "

Add ROS1 layer

  1. Add meta-ros layers to conf/bblayers.conf

<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros1 \
<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros-common \
<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros1-noetic \
<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros-backports-gatesgarth \
<absolute_path_to_rity-dunfell>/src/poky/../meta-ros/meta-ros-backports-hardknott \
  1. Add this to the bottom of conf/local.conf

ROS_DISTRO = "noetic"
EXTRA_IMAGE_FEATURES ?= "ros-implicit-workspace"
IMAGE_INSTALL_append += " ros-core "
  1. Comment out the blacklisted roslisp and genlisp to avoid the building rejection

vim src/meta-ros/meta-ros1-noetic/conf/ros-distro/include/noetic/ros-distro-recipe-blacklist.inc

# Comment out the following lines
#PNBLACKLIST[roslisp] ?= "${@bb.utils.contains('ROS_WORLD_SKIP_GROUPS', 'lisp', 'depends on sbcl for which there is no OE recipe', '', d)}"
#PNBLACKLIST[genlisp] ?= "${@bb.utils.contains('ROS_WORLD_SKIP_GROUPS', 'lisp', 'depends on sbcl for which there is no OE recipe', '', d)}"

Building Images

Please refer to Build from Source Code to build the demo images of each board.

Note

Various WARNING-s will be issued by bitbake when building these images. They can be ignored. After a successful build of an image, it can be found under TMPDIR/deploy/images/MACHINE.

Image Sanity Testing

ROS 2 Sanity Test

Note

Without a network connection, there’s no output from ros2 topic echo /chatter.

$ source /etc/profile.d/ros/setup.sh

$ ros2 topic list
/parameter_events
/rosout

$ (sleep 5; ros2 topic pub /chatter std_msgs/String "data: Hello world") &

$ ros2 topic echo /chatter
publisher: beginning loop
publishing #1: std_msgs.msg.String(data='Hello world')

data: Hello world

publishing #2: std_msgs.msg.String(data='Hello world')

data: Hello world

ROS 1 Sanity Test

For now, only the barest minimum sanity testing is done on the images.

$ source /opt/ros/noetic/setup.sh

$ roscore &
...
started core service [/rosout]

$ rosnode list
/rosout

$ rosnode info /rosout
Node [/rosout]
Publications:
 * /rosout_agg [rosgraph_msgs/Log]

Subscriptions:
 * /rosout [unknown type]

Services:
 * /rosout/get_loggers
 * /rosout/set_logger_level


contacting node http://i1200-demo:40943/ ...
Pid: 967