-
Notifications
You must be signed in to change notification settings - Fork 254
OpenEmbedded Build Instructions
2024-04-24: The content on this has been preserved while we work to revise the content
For up-to-date information about the meta-ros layer please visit the main page: https://github.com/ros/meta-ros
For simplified instructions on how to get started please refer to these build instructions: https://github.com/ros/meta-ros/blob/build/kas/README.md
To chat about meta-ros, come find us on the OSRF Discord #cwg-openembedded channel.
You are also welcome to join our biweekly meetings. Catch up on our meeting minutes here: ROS OpenEmbedded Working Group Minutes - Google Docs
Revision: 24 Published: 2022-05-06
These instructions are for building ROS 2 dashing, eloquent, foxy, galactic, and rolling and ROS 1 melodic and noetic using OpenEmbedded release series dunfell (Yocto 3.1), gatesgarth (Yocto 3.2), hardknott (Yocto 3.3), honister (Yocto 3.4), or kirkstone (Yocto 4.0) on a 64-bit build machine running Ubuntu focal (20.04). There is also support for building images for the TurtleBot 3 Waffle Pi using ROS 1 melodic. The build machine should be a workstation-class PC with a minimum of 8 GB memory and ~100GB of free disk space, ideally on a separate SSD disk; however, the more processors and memory the build machine has the faster the builds will be.
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.
If you are new to OpenEmbedded, please follow the instructions in the section below. If you already are familiar with OpenEmbedded and have an existing project to which you'd like to add a ROS distro, please jump to the next section.
Note that the ros1
and ros2
OpenEmbedded DISTRO
-s defined by meta-ros
are just examples and are intended to be used solely
as a starting point for creating a DISTRO
for a product.
-
Install these prerequisites once on the build machine (a workstation-class host PC running 64-bit Ubuntu bionic):
sudo apt-get install gawk wget git diffstat unzip gcc-multilib \ build-essential chrpath socat cpio python3-pip python3-pexpect \ xz-utils debianutils iputils-ping \ python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev xterm \ g++-multilib locales lsb-release python3-distutils time \ liblz4-tool zstd file sudo locale-gen en_US.utf8
-
Setup bitbake and OpenEmbedded using a separate disk for the build artifacts (~100GB required if the working files are kept). NOTE: This can only be done in a new directory. To update an existing mcf project, see Usage Notes below.
mkdir "<NEW-PROJECT-DIR>" cd "<NEW-PROJECT-DIR>" git clone -b build --single-branch [email protected]:ros/meta-ros build mkdir conf ln -snf ../conf build/. # Select a configuration based on the OpenEmbedded DISTRO (ros1, ros2, or webos), the ROS distro (melodic, noetic, dashing, # eloquent, foxy, galactic, or rolling), and the OpenEmbedded release series (dunfell, gatesgarth, hardknott, honister, or # kirkstone) that you wish to build: # # distro=ros1 # distro=ros2 # distro=webos (oe_release_series=dunfell only) # # ros_distro=melodic # ros_distro=noetic # ros_distro=dashing ("best effort" support) # ros_distro=eloquent ("best effort" support) # ros_distro=foxy # ros_distro=galactic # ros_distro=rolling # # oe_release_series=dunfell # oe_release_series=gatesgarth ("best effort" support) # oe_release_series=hardknott # oe_release_series=honister # oe_release_series=kirkstone cfg=$distro-$ros_distro-$oe_release_series.mcf cp build/files/$cfg conf/. # Clone the OpenEmbedded metadata layers and generate conf/bblayers.conf . build/scripts/mcf -f conf/$cfg # Set up the shell environment for this build and create a conf/local.conf . We expect all of the variables below to be unset. unset BDIR BITBAKEDIR BUILDDIR OECORELAYERCONF OECORELOCALCONF OECORENOTESCONF OEROOT TEMPLATECONF source openembedded-core/oe-init-build-env # The current directory is now the build directory; return to the original. cd - # An OpenEmbedded build produces a number of types of build artifacts, some of which can be shared between builds for # different OpenEmbedded DISTRO-s and ROS distros. Create a common artifacts directory on the separate disk under which all # the build artifacts will be placed. The edits to conf/local.conf done below will set TMPDIR to be a subdirectory of it. mkdir -p "<ABSOLUTE-PATH-TO-DIRECTORY-ON-SEPARATE-DISK>"
-
Add this to the bottom of
conf/local.conf
:# ROS-ADDITIONS-BEGIN # ^^^^^^^^^^^^^^^^^^^ In the future, tools will expect to find this line. # The major version is incremented whenever a change is made on the wiki page. Increment the minor version whenever you add or # change a setting in this file. ROS_LOCAL_CONF_SETTINGS_VERSION := "3.0" # If not using mcf, replace ${MCF_DISTRO} with the DISTRO being used. DISTRO ?= "${MCF_DISTRO}" # If not using mcf, set ROS_DISTRO in conf/bblayers.conf . # The list of supported values of MACHINE is found in the Machines[] array in the .mcf file for the selected configuration. # Use ?= so that a value set in the environment will override the one set here. MACHINE ?= "<SUPPORTED-MACHINE>" # Can remove if DISTRO is "webos". If not using mcf, replace ${MCF_OPENEMBEDDED_VERSION} with the version of OpenEmbedded # being used. See the comments in files/ros*.mcf for its format. ROS_DISTRO_VERSION_APPEND ?= "+${MCF_OPENEMBEDDED_VERSION}" # Can remove if DISTRO is not "webos". If not using mcf, replace ${MCF_WEBOS_BUILD_NUMBER} with the build number of webOS OSE # being used. ROS_WEBOS_DISTRO_VERSION_APPEND ?= ".${MCF_WEBOS_BUILD_NUMBER}" # These two are only used in the additions to conf/local.conf below: ROS_OE_RELEASE_SERIES_SUFFIX ?= "-${ROS_OE_RELEASE_SERIES}" # Because of a bug in OpenEmbedded, <ABSOLUTE-PATH-TO-DIRECTORY-ON-SEPARATE-DISK> can not be a symlink. ROS_COMMON_ARTIFACTS ?= "<ABSOLUTE-PATH-TO-DIRECTORY-ON-SEPARATE-DISK>" # Set the directories where downloads, shared-state, and the output from the build are placed to be on the separate disk. DL_DIR ?= "${ROS_COMMON_ARTIFACTS}/downloads" SSTATE_DIR ?= "${ROS_COMMON_ARTIFACTS}/sstate-cache${ROS_OE_RELEASE_SERIES_SUFFIX}" # TMPDIR is weakly assigned in conf/bitbake.conf before it includes conf/local.conf => must use '=' here: TMPDIR = "${@os.getenv('TMPDIR', '${ROS_COMMON_ARTIFACTS}/BUILD-${DISTRO}-${ROS_DISTRO}${ROS_OE_RELEASE_SERIES_SUFFIX}')}" # Don't add the libc variant suffix to TMPDIR. TCLIBCAPPEND := "" # As recommended by https://www.yoctoproject.org/docs/latest/mega-manual/mega-manual.html#var-BB_NUMBER_THREADS # and https://www.yoctoproject.org/docs/latest/mega-manual/mega-manual.html#var-PARALLEL_MAKE: BB_NUMBER_THREADS ?= "${@min(int(bb.utils.cpu_count()), 20)}" PARALLEL_MAKE ?= "-j ${BB_NUMBER_THREADS}" # Reduce the size of the build artifacts by removing the working files under TMPDIR/work. Comment this out to preserve them # (see https://www.yoctoproject.org/docs/latest/mega-manual/mega-manual.html#ref-classes-rm-work). INHERIT += "rm_work" # Any other additions to the file go here. # EXTRA_IMAGE_FEATURES is just one of the many settings that can be placed in this file. You can find them all by searching # https://www.yoctoproject.org/docs/latest/mega-manual/mega-manual.html#ref-variables-glossary for "local.conf". # Uncomment to allow "root" to ssh into the device. Not needed for images with webOS OSE because it implicitly adds this # feature. # EXTRA_IMAGE_FEATURES += "ssh-server-dropbear" # Uncomment to include the package management utilities in the image ("opkg", by default). Not needed for images with # webOS OSE because it implicitly adds this feature. # EXTRA_IMAGE_FEATURES += "package-management" # Uncomment to have all interactive shells implicitly source "setup.sh" (ROS 1) or "ros_setup.sh" (ROS 2). # EXTRA_IMAGE_FEATURES += "ros-implicit-workspace" # Uncomment to display additional useful variables in the build configuration output. # require conf/distro/include/ros-useful-buildcfg-vars.inc # vvvvvvvvvvvvvvvvv In the future, tools will expect to find this line. # ROS-ADDITIONS-END
Now you are ready to build an image.
-
Clone the branch of
ros/meta-ros.git
for the OpenEmbedded release series you are using. -
Add
meta-ros[12]-<ROS_DISTRO>
to yourconf/bblayers.conf
. -
Run
bitbake -p ros-core
. -
Add the other layers it reports as missing to your
conf/bblayers.conf
. -
Add whatever might be useful from step 3 of the previous section to the bottom of your
conf/local.conf
.
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
.
These images can be built when one of ros[12]-*.mcf
was chosen for the configuration:
This image contains just the ROS "core".
source openembedded-core/oe-init-build-env
cd -
bitbake ros-image-core
To include additional packages in this image, append them to the IMAGE_INSTALL
variable in conf/local.conf
:
IMAGE_INSTALL_append_pn-ros-image-core = " <PKG1> <PKG2> ..."
Note that the leading space after the opening double-quote is mandatory. See
Customizing Images Using local.conf
for more information.
This image contains all packages from a ROS distro that can be built and included in an image without conflicts.
source openembedded-core/oe-init-build-env
cd -
bitbake ros-image-world
Groups of packages that cannot be built using the current build configuration (based on the metadata layers included in
conf/bblayers.conf
, DISTRO_FEATURES
, LICENSE_FLAGS_WHITELIST
, etc.) are skipped via values added to the
ROS_WORLD_SKIP_GROUPS
variable in meta-ros[12]-<ROS_DISTRO>/conf/ros-distro/include/<ROS_DISTRO>/ros-distro.inc
. If you need
to include some of the skipped packages, locate the corresponding addition to ROS_WORLD_SKIP_GROUPS
in ros-distro.inc
; it will
state what needs to be done in order to unblacklist the recipes for the packages.
This image contains the packages required for the core TurtleBot 3 operation listed here and here.
Note that this is not needed,
because the images use root
for their user account.)`.
source openembedded-core/oe-init-build-env
cd -
bitbake ros-image-turtlebot3-core
To include additional packages in this image, append them to the IMAGE_INSTALL
variable in conf/local.conf
:
IMAGE_INSTALL_append_pn-ros-image-turtlebot3-core = " <PKG1> <PKG2> ..."
By default, this webOS OSE image contains all of the non-simulation related turtlebot3-
prefixed packages and their
prerequisities mentioned in the TurtleBot3 e-Manual.
Note that this is not needed,
because the images use root
for their user account.)
source openembedded-core/oe-init-build-env
cd -
bitbake ros-image-turtlebot3-all
To include additional packages in this image, append them to the IMAGE_INSTALL
variable in conf/local.conf
:
IMAGE_INSTALL_append_pn-ros-image-turtlebot3-all = " <PKG1> <PKG2> ..."
These images can be built when one of webos-*.mcf
was chosen for the configuration:
This webOS OSE image contains just the ROS "core".
source openembedded-core/oe-init-build-env
cd -
bitbake webos-image-ros-core
To include additional ROS packages in this image, append them to the IMAGE_INSTALL
variable in conf/local.conf
:
IMAGE_INSTALL_append_pn-webos-image-ros-core = " <PKG1> <PKG2> ..."
Note that the leading space after the opening double-quote is mandatory. See
Customizing Images Using local.conf
for more information.
This webOS OSE image contains all packages from a ROS distro that can be built and included in an image without conflicts.
source openembedded-core/oe-init-build-env
cd -
bitbake webos-image-ros-world
Groups of packages that cannot be built using the current build configuration (based on the metadata layers included in
conf/bblayers.conf
, DISTRO_FEATURES
, LICENSE_FLAGS_WHITELIST
, etc.) are skipped via values added to the
ROS_WORLD_SKIP_GROUPS
variable in meta-ros[12]-<ROS_DISTRO>/conf/ros-distro/include/<ROS_DISTRO>/ros-distro.inc
. If you need
to include some of the skipped packages, locate the corresponding addition to ROS_WORLD_SKIP_GROUPS
in ros-distro.inc
; it will
state what needs to be done in order to unblacklist the recipes for the packages.
By default, this webOS OSE image contains the packages required for the core TurtleBot 3 operation listed here and here.
Note that this is not needed,
because the images use root
for their user account.
source openembedded-core/oe-init-build-env
cd -
bitbake webos-image-ros-turtlebot3-core
To include additional ROS packages in this image, append them to the IMAGE_INSTALL
variable in conf/local.conf
:
IMAGE_INSTALL_append_pn-webos-image-ros-turtlebot3-core = " <PKG1> <PKG2> ..."
By default, this webOS OSE image contains all of the non-simulation related turtlebot3-
prefixed packages and their
prerequisities mentioned in the TurtleBot3 e-Manual.
Note that this is not needed,
because the images use root
for their user account.
source openembedded-core/oe-init-build-env
cd -
bitbake webos-image-ros-turtlebot3-all
To include additional ROS packages in this image, append them to the IMAGE_INSTALL
variable in conf/local.conf
:
IMAGE_INSTALL_append_pn-webos-image-ros-turtlebot3-all = " <PKG1> <PKG2> ..."
For now, only the barest minimum sanity testing is done on the images.
# ping lge.com
# source /opt/ros/melodic/setup.sh # Skip if built with "ros-implicit-workspace" in IMAGE_FEATURES.
# echo $LD_LIBRARY_PATH # If set, all the paths must exist.
# 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://127.0.0.1:34643/ ...
Pid: 1363
Note that without a network connection, there's no output from ros2 topic echo /chatter
.
# ping lge.com
# source ros_setup.sh # Skip if built with "ros-implicit-workspace" in IMAGE_FEATURES.
# echo $LD_LIBRARY_PATH # If set, all the paths must exist.
# ros2 topic list
/parameter_events
/rosout
# ros2 msg list # dashing
# ros2 interface list -m # eloquent and later
...
# (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
The webOS OSE menu must appear after pressing the Windows key and allow the settings for Network to be launched.
Follow the TurtleBot 3 Bringup Instructions, except roscore is run on the TurtleBot 3 and in the background. If the message:
[WARN] [<timestamp>]: Failed to get param: timeout expired
appears, restart turtlebot3_bringup and try again.
-
If a
meta-ros/scripts/mcf
file exists in your project, it is using an oldermeta-ros
with layer version 2. Please start again from scratch in a new project directory following the instructions in the Build Environment Setup section. To allow you to transition, a branch[legacy-v2]
was created before the start of the layer version 3 implementation. Its files will not be changed nor its commits rebased. -
You can override the settings in the
*.mcf
files for the URLs of the repos formeta-ros
andmeta-ros-webos
and the branches fetched from them by setting these environment variables:MCF_META_ROS_REPO_URL MCF_META_ROS_BRANCH MCF_META_ROS_COMMIT MCF_META_ROS_WEBOS_REPO_URL MCF_META_ROS_WEBOS_BRANCH MCF_META_ROS_WEBOS_COMMIT
-
To build from the current HEAD of
meta-ros
/meta-ros-webos
using mcf, first pull the latest*.mcf
files from the[build]
branch and update the one you are using underconf/
:cd build git pull cd - # Select the configuration you are building: # # distro=ros1 # distro=ros2 # distro=webos (oe_release_series=dunfell only) # # ros_distro=melodic # ros_distro=noetic # ros_distro=dashing ("best effort" support) # ros_distro=eloquent ("best effort" support) # ros_distro=foxy # ros_distro=galactic # ros_distro=rolling # # oe_release_series=dunfell # oe_release_series=gatesgarth ("best effort" support) # oe_release_series=hardknott # oe_release_series=honister # oe_release_series=kirkstone cfg=$distro-$ros_distro-$oe_release_series.mcf # Review the changes to the pins: diff build/files/$cfg conf/$cfg # If there are changes and you have not modified conf/$cfg, copy the file over: cp build/files/$cfg conf/. # Otherwise, merge them, eg, using: meld build/files/$cfg conf/$cfg build/scripts/mcf -f conf/$cfg
Then override the pins of
meta-ros
andmeta-ros-webos
in the*.mcf
file by setting theMCF_META_ROS_COMMIT
andMCF_META_ROS_WEBOS_COMMIT
environment variables to""
. (As of Milestone 12, the branches ofmeta-ros
andmeta-ros-webos
are no longer rebaseable, and the*.mcf
files now pin their commits.)If you are not using mcf to update the layer repos, but doing it manually, you should still update the HEAD-s of the other layer repos to match the commits pinned in the
*.mcf
for the configuration you are building. -
The images are placed in
TMPDIR/deploy/images/MACHINE
. We've found balenaEtcher to be an excellent tool for flashing them to SD cards. -
These images default to being non-production: the
root
account has no password. -
When using the
ros-image-*
images on araspberrypi*
, the login prompt appears only on the HDMI display, not on the serial port. The opposite is true when usingwebos-image-ros-*
images. -
When using the
webos-image-ros-*
images, press the Windows key to bring up the webOS OSE menu. Navigate to the network settings page to discover the IP address assigned by DHCP to the Ethernet connection, and its MAC address. Once you know the MAC address of a connection, you can useip neigh
from another Linux machine to discover it's IP address. -
If you have not added
ros-implicit-workspace
toIMAGE_FEATURES
, you must set up a ROS workspace explicitly by issuing:source /opt/ros/ROS_DISTRO/setup.sh # ROS 1 source ros_setup.sh # ROS 2
Note that when running ROS 1:
- You must set the environment variable
ROS_IP
orROS_HOSTNAME
beforesource
-ingsetup.sh
if the machine will be communicating with remote ROS nodes. - You must set the environment variable
ROS_MASTER_URI
beforesource
-ingsetup.sh
if roscore will be run on another ROS node.
- You must set the environment variable
-
When using the
webos-image-ros-*
images, you can arrange for per-device configuration (such as setting up the ROS workspace and connecting to a WiFi network) by attaching an ext4-formatted USB flash drive containing an executablerc.local
script underUSBROOT/webos-device-config/v1
. If present, it will be run from there by the webos-device-config service upon first boot. The service also copies it to/var/palm/webos-device-config/rc.local
, where upon subsequent boots, it will be run by/etc/rc.local
. An examplerc.local
script can be found undermeta-ros-webos/files/examples/webos-device-config/v1
. -
WiFi does not work "out-of-the-box" on the
ros-image-*
images. Network Configuration spins forever waiting for the list of SSIDs to appear. -
If a webOS OSE image is booted without a display connected, start up is delayed (systemd waits for 90s for a event that never arrives because luna-surfacemanager has crashed).
There is no need to compile packages on the TurtleBot 3. The webos-image-ros-turtlebot3-all
image contains all of the packages
that exist in ROS 1 melodic needed to run the examples in the
TurtleBot3 e-Manual
-- except those related to simulation and the visualization applications (eg RViz, rqt), which must continue to be run on
a remote PC. (Also note that turtlebot3-follower
does not run due to a missing dependency.)
For example, all of the SLAM application can be run on the TurtleBot 3 by issuing the usual commands there, adding the option not to launch RViz:
# roscore
# roslaunch turtlebot3_bringup turtlebot3_robot.launch
# roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping open_rviz:=false
The other two SLAM methods available in ROS 1 melodic, cartographer
and karto
, can also be specified.
- If the TurtleBot 3 will not be communicating with remote ROS nodes, add
ros-implicit-workspace
toIMAGE_FEATURES
so that you won't have to addsource /opt/ros/ROS_DISTRO/setup.sh
to/home/root/.profile
every time you create a new image.
- Update for Milestone 17. This milestone adds support for the ROS distro releases current in the middle of November 2021, for webOS OSE v2.14.0, and for the OpenEmbedded release series branches as of the beginning of December 2021, including kirkstone. It also reduces the support for ROS 2 dashing and OpenEmbedded gatesgarth to "best effort", and drops support for OpenEmbedded zeus.
- Update the OS used by build machines to Ubuntu focal (20.04).
- Indicate which ROS distros and OpenEmbedded release series have only "best effort" support.
- Update the prerequisites:
- Add
zstd
andliblz4-tool
, which were added by https://git.openembedded.org/openembedded-core/commit/?id=58f5389e3c6b0e5b29df8850c2056b5fc41b618f. - Add
file
. It's not new but is no longer installed by default in theubuntu:impish
and later Docker images. - Drop
python
, which was removed by https://git.openembedded.org/openembedded-core/commit/?id=5f8f16b17f66966ae91aeabc23e97de5ecd17447. - Drop
texinfo
, which supplies themakeinfo
command that was removed in https://git.openembedded.org/openembedded-core/commit/?id=0c58c479af151969dfb84d8763696da657f7248d. - Replace
git-core
withgit
.
- Add
- Introduce v3.0 of the additions to
conf/local.conf
to fix a bug introduced in v2.2 that caused the assignment toTMPDIR
to be ineffectual. It also adds a note explaining when the major version ofROS_LOCAL_CONF_SETTINGS_VERSION
is incremented. - Clarify that
DISTRO = ros1
andDISTRO = ros2
are just examples.
- Update for the completion of Milestone 16. This milestone adds support for the ROS distro releases current at the end of June 2021, for webOS OSE v2.10.0, and for OpenEmbedded honister.
- Drop mentions of Raspberry Pi 3.
- Update for the completion of Milestone 15. This milestone adds support for the ROS distro releases current at the beginning of November 2020, for webOS OSE v2.8.0, and for OpenEmbedded hardknott, and drops/reduces support for OpenEmbedded thud, warrior, and zeus.
- Update for the migration of webOS OSE to being built with OpenEmbedded dunfell instead of thud.
- Add a section describing how to add
meta-ros
to an existing OpenEmbedded project. - Document how
ROS_WORLD_SKIP_GROUPS
controls the packages included the*-image-*-world
images. - Fix a typo in one of the commands used in the sanity test.
- Push branches
[dunfell]
,[master]
, and[build]
to publish Milestone 14. This milestone adds support for the mid-year 2020 ROS distro releases (including ROS 2 rolling) with dunfell and gatesgarth, and support for the release of webOS OSE v2.6.0 . - Push a few minor updates to the
[thud]
,[warrior]
, and[zeus]
branches.
- Push branches
[thud]
,[warrior]
,[zeus]
,[dunfell]
,[master]
, and[build]
to publish Milestone 13. This milestone adds support for building the foxy 2020-06-25 release with all of the OpenEmbedded release series and webOS OSE. It also adds support for building all of the ROS distros (including foxy) with OpenEmbedded gatesgarth (the next release series, currently in active development).
- Push finalized, non-rebaseable branches
[thud]
,[warrior]
,[zeus]
,[dunfell]
,[master]
, and[build]
to complete Milestone 12. Besides adding support for the Q1 2020 releases of melodic, dashing, and eloquent, the release of OpenEmbedded dunfell and the release of webOS OSE v2.5.0, Milestone 12 makes significant changes to how packages that do not build are excluded frombitbake world
and the*-image-*-world
images, and alters the policy for selecting the versions of platform packages provided by OpenEmbedded (see Baseline Platform and Selection of Platform Package Versions) As of this milestone, the branches ofmeta-ros
andmeta-ros-webos
will no longer be rebased; the[*-draft]
branches will be kept coincident with their corresponding unsuffixed ones until they are dropped in Milestone 14. - Update the instructions for the switch to the branches without a
-draft
suffix, and for the pinning ofmeta-ros
andmeta-ros-webos
layers in the*.mcf
files. - Update the list of OpenEmbedded release series supported: dunfell has been released and gatesgarth is now supported.
-
ros-image-world
andwebos-image-ros-world
can now be built for melodic. - Allow the commit specified in
*.mcf
files fetched by mcf formeta-ros
/meta-ros-webos
to be overridden by setting theMCF_META_ROS_COMMIT
/MCF_META_ROS_WEBOS_COMMIT
environment variables. - Introduce v2.2 of the additions to
conf/local.conf
:- Allow overriding of the settings from the environment. (The names must be added to the
BB_ENV_WHITELIST
orBB_ENV_EXTRAWHITE
whitelists). - Form
ROS_OE_RELEASE_SERIES_SUFFIX
from theROS_OE_RELEASE_SERIES
variable introduced in Milestone 12 instead ofMCF_OE_RELEASE_SERIES
. The setting ofMCF_OE_RELEASE_SERIES
will be removed from the*.mcf
files in an upcoming milestone.
- Allow overriding of the settings from the environment. (The names must be added to the
- Switch the ROS 2 sanity test from using the now deprecated
ros2 msg list
toros2 interface list -m
for eloquent and later. - Fixup the links in this document to Milestone sections in Superflore OE Recipe Generation Scheme.
- Force push to
[thud-draft]
,[master-draft]
, and[build-draft]
, and create new branches[warrior-draft]
and[zeus-draft]
, to publish Milestone 11. This milestone migrating webOS OSE to v2.2, build 143, adds support for building ROS packages and images using the current OpenEmbedded release series warrior and zeus as well as the under development dunfell, and drops support for ROS 2 crystal (because its EOL has past). - Update the instructions for the new OpenEmbedded release series supported and for the dropping of support for ROS 2 crystal.
- Clarify the instructions for updating branches to their current HEAD-s.
- Change the definition of the
*-world
images to contain all packages that currently build and can be included in an image without conflicts. - When using warrior or zeus,
opengl
must be added toDISTRO_FEATURES
inconf/local.conf
to include the same packages inros-image-world
andros-image-turtlebot3-*
as when using thud or dunfell. (This need not be done for images for webOS OSE because it already hasopengl
in itsDISTRO_FEATURES
.) - Modify the additions to
conf/local.conf
to better support building for multiple OpenEmbedded release series. IncrementROS_LOCAL_CONF_SETTINGS_VERSION
to"2.1"
. - Update the list of prerequisites to be installed with the new ones required by dunfell.
- Switch the links to the Yocto documentation to point to the latest versions.
- Replace "OE-Core" with "OpenEmbedded" everywhere.
- Fix typos.
- Force push to
[thud-draft]
to publish Milestone 10. This milestone adds support for building the December 2019 releases of melodic, crystal, dashing, and eloquent), as well as:- adding support for
qemux86
to melodic; - moving the recipes for the components found in
files/ROS_DISTRO/generated/newer-platform-components.list
tometa-ros-common/recipes-infrastructure
; - slightly altering the scheme for forming the OpenEmbedded version portion of
DISTRO_VERSION
.
- adding support for
- Add a step to the ROS sanity tests to check that
LD_LIBARAY_PATH
is correct. - Drop the on
raspberrypi3
only qualification from the*turtlebot3*
images. They can now be built forqemux86
. - Fix typos.
- Force push to
[thud-draft]
to publish Milestone 9 (support for ROS 2 eloquent). - Update this document for the addition of support for ROS 2 eloquent.
- Forgot to update the location of
files/examples/webos-device-config/v1/rc.local
in revision 15: it's now undermeta-ros-webos
instead ofmeta-ros
.
- Force push to
[thud-draft]
to publish Milestone 8 (phase 1 of the implementation of layer version 3 ofmeta-ros
). If you have been building from the[thud-draft]
branch, please start again from scratch as soon as you can. To allow you to transition, a branch[legacy-v2]
has been created from the previous[thud-draft]
. Its files will not be changed its commits rebased. - Update this document for layer version 3:
- mcf and its configuration files are now in a separately-rooted branch '[build-draft]`.
- The repo URLs and branches to fetch specified in the
*.mcf
files formeta-ros
andmeta-ros-webos
can be overridden via environment variables. - The Build Environment Setup section has been changed, including the settings made in the
conf/local.conf
file. -
DISTRO
no longer needs to be set inconf/bblayers.conf
; however,ROS_DISTRO
still must be (until Milestone 12). - The image names have been simplified.
- Make it easier to use
meta-ros
without using mcf. - As
[morty-draft]
was removed long ago, drop the references to it.
- Clarify various portions of the build instructions so as to be clearer for those unfamiliar with OpenEmbedded.
- Force push to
[thud-draft]
to publish numerous changes, in particular:- The generation of
files/ROS_DISTRO/cache.yaml
has been split off fromros-generate-recipes.sh
into its own scriptros-generate-cache.sh
and copies of the rosdep platform package mapping files are now retained. - The recipes for ROS 1 melodic were regenerated from its newer 2019-09-30 release using these scripts.
- The recipes for ROS 2 crystal were regenerated from its newer 2019-09-19 release using these scripts.
- The recipes for ROS 2 dashing were regenerated from its 2019-05-31 release using these scripts. Note that previously, the
recipes had been generated from a
cache.yaml
that had several changes beyond that for the release. -
meta-ros/files/examples/webos-device-config/v1/rc.local
was tweaked to wait longer for WiFi enable to complete. - The Raspberry Pi video camera is now always enabled.
- Additional useful variables can be displayed in the build configuration output by adding
require conf/distro/include/ros-useful-buildcfg-vars.inc
toconf/local.conf
. - Drop morty-related commits; rearrange and squash many others.
- The generation of
- Push (unforced) to
[thud-draft]
a greatly improved re-implementation of the per-device configuration scheme, including a revampedmeta-ros/files/examples/webos-device-config/v1/rc.local
. - Explain when ROS 1
ROS_*
environment variables must be set beforesource
-ingsetup.sh
. - Tweak the TurtleBot 3 SLAM example to make it explicit that all the commands are run on the TurtleBot 3.
- Clarify the TurtleBot 3 tips.
- Push (unforced) to
[thud-draft]
to publish numerous changes, in particular:- Added support for creating images for the TurtleBot 3 Waffle Pi using ROS 1 melodic:
- There are
core-image-ros-turtlebot3-core
andwebos-image-ros-turtlebot3-core
images that contain the packages required for the core TurtleBot 3 operation listed here and here. - There are
core-image-ros-turtlebot3-all
andwebos-image-ros-turtlebot3-all
images that contain all of the non-simulation relatedturtlebot3-
prefixed packages in ROS 1 melodic and their prerequisities mentioned in the TurtleBot3 e-Manual
- There are
- Per-device configuration using a USB flash drive can be done when using webOS OSE images.
- The recipes for ROS 1 melodic were regenerated from its 2019-09-10 release.
- The Raspberry Pi video camera is now enabled.
- Added support for creating images for the TurtleBot 3 Waffle Pi using ROS 1 melodic:
- Convert the items under Build Environment Setup to numbered steps.
- Add instructions for building the TurtleBot 3 images, a TurtleBot 3 sanity test, and a section on its usage.
- Force push to
[thud-draft]
to publish numerous changes, in particular:-
*-roscore
images can be built for ROS 1 melodic. Note that you must set the environment variableROS_IP
orROS_HOSTNAME
beforesource
-ingsetup.sh
if the machine will be communicating with remote ROS nodes. - The recipes for ROS 2 crystal were regenerated based on its 2019-09-05 release.
- webOS OSE images now continuously synchronize the machine's time with
time.google.com
. Previously, it was only set once at startup. - webOS OSE images now have all of the kernel modules installed. Previously, only a portion were.
- webOS OSE images for
qemux86
now havelinux-yocto
v4.18. -
core-image-ros-*
images now contain connman, which means that Etherent networking is automatically started. (However, WiFi isn't; add an item mentioning this under Usage Notes.)
-
- Add instructions for building ROS 1 melodic images.
- Document various values for
EXTRA_IMAGE_FEATURES
that can be set inconf/local.conf
.
- Push (unforced) a commit that enables the Ethernet connection when running webOS OSE images on the B+ model of the Raspberry Pi 3; however, the Wi-Fi remains broken. Add an item to this effect under Usage Notes.
- Add
ping lge.com
to the sanity test to confirm that networking is working.
- Clarify that the build environment setup instructions are for a new project without any settings in the environment of variables
used by
openembedded-core/oe-init-build-env
.
- Update for the migration to OpenEmbedded thud.
- Update for the support of ROS 2 dashing.
- Add lines that delimit the additions made to
conf/local.conf
. IntroduceROS_LOCAL_CONF_SETTINGS_VERSION
to track the version of the settings. - Reduce the size of the build artifacts by adding the setting to
conf/local.conf
that causesrm_work
to be inherited globally. - Drop the
PARALLEL_MAKE_pn-pcl
setting inconf/local.conf
as the calculation of the value forPARALLEL_MAKE
has been added to the recipe forpcl
. - Add an Image Sanity Testing section.
- Drop setting
DISTRO
inconf/local.conf
. It's now set inconf/bblayser.conf
to theDistribution
setting in*.mcf
. - Add instructions on how to include additions ROS packages to the
*-ros-core
images. - Add more usage notes.
- Problems have been observed when
TMPDIR
is shared betweenROS_DISTRO
-s => include-${ROS-DISTRO}
in its value. - Fix typo.
- Update the plans for ROS 2 dashing support.
- Simpify and clarify the build setup instructions. Also make them more robust.
- Add a note on to how update
meta-ros
. - Fix typos.
- Revise for the inclusion of mcf in
meta-ros
. - Add support for using webOS OSE as the OpenEmbedded
DISTRO
.
- Add a step to install the prerequisites.
- Add instructions to build for Raspberry Pi.
- Fix typo.
- Drop setting
SSTATE_MIRRORS
becausemeta-ros
adds global environment variables that invalidates even the shared state for native packages. - Specify a
PARALLEL_MAKE_pn-pcl
setting so that buildingpcl
doesn't take nearly 3 hours. - Fix typos.
- Initial publication.