IEEE Robotics & Automation Magazine - June 2022 - 69

Building Robot Operating System Packages Using Conda
The sidebar of this RoboStack article is geared toward
developers who are concerned with building Robot Operating
System (ROS) packages using Conda, which brings unique
challenges. The key challenge with packaging ROS is that, rather
than building a single package with a handful of dependencies
(the case for most packages on conda-forge), ROS has
thousands of packages with hundreds of dependencies, some
of which are external dependencies (such as PCL and Bullet)
and others which are dependencies on ROS packages. This is
not only challenging because of potentially long build times
if packages are built one after the other, but also because of
application binary interface compatibility. The RoboStack project
made several key advances around package management to
overcome these challenges, all of which are applicable beyond
the use case for ROS. We detail these advances, along with other
information of interest for developers, in the following.
The first key advance is the Vinca tool, which automatically
generates Conda recipes for ROS packages. An advantage
of ROS packages is that dependencies are listed within
package.xml files. Typically, the rosdistro tool handles the
conversion from dependency names within the package.xml
files to package names that can be, e.g., installed using the
apt system package manager on Ubuntu. For RoboStack, a
similar mapping file that maps dependency names to package
names in conda-forge was created. Vinca then combines the
latest package information obtained by the rosdistro Python
application programming interface with this mapping file and a
list of packages that should be built to generate Conda recipes.
As some packages need Conda-specific changes, Vinca also
allows the use of patches that can modify the source code
before building the package. In the future, we aim for tight
integration with the bloom release automation tool that is
used in the ROS ecosystem to create Ubuntu packages.
The second key advance is the introduction of parallelism
in the build pipeline. Vinca has a built-in mechanism to turn
a directory of package recipes into an Azure Build Pipeline
definition. Figure S1 presents the dependency graph up to
the 'ros-core' metapackage. The packages are topographically
sorted, and the pipeline is then split into multiple stages,
where each stage needs to wait for the previous one to finish.
Per each stage, multiple workers run in parallel, with each
handling up to five packages. This makes best use of the 10
free Azure workers that run builds in parallel (each worker
needs to set up the build environment, which takes roughly
2 min-time that is saved when running multiple builds per
worker). The number of packages per stage and Azure workers
are configurable and will scale if more free workers become
available in the future. Once the worker is finished, it uploads
the packages to the RoboStack channel.
The third key advance is Mamba, a fully compatible, fast
drop-in replacement for Conda. The main motivation for Mamba
was to solve the performance issues of Conda, both in terms
of speed and memory usage. Conda's dependency resolver is
relatively slow, in particular for large software repositories (such
as conda-forge) where the entire repository index is parsed
using standard Python JavaScript Object Notation (JSON) parser.
The time taken to solve the dependencies of a new environment
containing ros-noetic-desktop-full is reduced to 15s using
Mamba, from 90s using Conda. Tens of thousands of Python
objects are created (as many as there are objects in the JSON
index file) and processed before being input in the Boolean
satisfiability problem solver. On the other hand, Mamba makes
use of openSUSE's state-of-the-art libsolv dependency resolver,
bypassing most of that processing to resolve dependencies. The
core parts of Mamba are implemented in C++ for maximum
efficiency. Further, Mamba makes use of multithreading to
download repository data and package files in parallel.
The fourth key advance is boa, a fast package builder used
to build Conda packages. Boa is reusing a lot of the condabuild
infrastructure but replaces some parts. Specifically, boa
ros-core
rosconsole-bridge
ros-comm
roswtf
rosnode
rostopic
rosbag
message-filters
topic-tools
rostest
roslaunch
rosparam rosout
roscpp
rosconsole
xmlrpcpp
rosunit
roscpp-core
rosbash
roscpp-serialization
roscpp-traits
rostime
rosboost-cfg
cpp-common
catkin
Figure S1. A dependency graph up to the ros-core metapackage. Each node represents a package, and each edge represents a dependency
upon another package. ros-core depends on more than 175 packages, whereby approximately 100 packages are pulled in from condaforge
(such as Boost and Numpy), and the remaining packages are dependencies on other ROS packages, such as rosbag and rostopic.
JUNE 2022 * IEEE ROBOTICS & AUTOMATION MAGAZINE *
69
rosclean
rosmaster
rosgraph
roslz4 mk
rosbuild
roslib
ros-environment
rospack
rosmake
genpy
cmake-modules
rospy
pluginlib
roslang
roscreate
roslisp
rosgraph-msgs
class-loader
std-srvs
shape-msgs
diagnostic-msgs
std-msgs
message-runtime
message-generation
gencpp geneus genlisp
genmsg
gennodejs
trajectory-msgs
visualization-msgs
geometry-msgs
actionlib-msgs
nav-msgs
rosbag-storage
rosservice
rosmsg
sensor-msgs
stereo-msgs
common-msgs

IEEE Robotics & Automation Magazine - June 2022

Table of Contents for the Digital Edition of IEEE Robotics & Automation Magazine - June 2022

Contents
IEEE Robotics & Automation Magazine - June 2022 - Cover1
IEEE Robotics & Automation Magazine - June 2022 - Cover2
IEEE Robotics & Automation Magazine - June 2022 - Contents
IEEE Robotics & Automation Magazine - June 2022 - 2
IEEE Robotics & Automation Magazine - June 2022 - 3
IEEE Robotics & Automation Magazine - June 2022 - 4
IEEE Robotics & Automation Magazine - June 2022 - 5
IEEE Robotics & Automation Magazine - June 2022 - 6
IEEE Robotics & Automation Magazine - June 2022 - 7
IEEE Robotics & Automation Magazine - June 2022 - 8
IEEE Robotics & Automation Magazine - June 2022 - 9
IEEE Robotics & Automation Magazine - June 2022 - 10
IEEE Robotics & Automation Magazine - June 2022 - 11
IEEE Robotics & Automation Magazine - June 2022 - 12
IEEE Robotics & Automation Magazine - June 2022 - 13
IEEE Robotics & Automation Magazine - June 2022 - 14
IEEE Robotics & Automation Magazine - June 2022 - 15
IEEE Robotics & Automation Magazine - June 2022 - 16
IEEE Robotics & Automation Magazine - June 2022 - 17
IEEE Robotics & Automation Magazine - June 2022 - 18
IEEE Robotics & Automation Magazine - June 2022 - 19
IEEE Robotics & Automation Magazine - June 2022 - 20
IEEE Robotics & Automation Magazine - June 2022 - 21
IEEE Robotics & Automation Magazine - June 2022 - 22
IEEE Robotics & Automation Magazine - June 2022 - 23
IEEE Robotics & Automation Magazine - June 2022 - 24
IEEE Robotics & Automation Magazine - June 2022 - 25
IEEE Robotics & Automation Magazine - June 2022 - 26
IEEE Robotics & Automation Magazine - June 2022 - 27
IEEE Robotics & Automation Magazine - June 2022 - 28
IEEE Robotics & Automation Magazine - June 2022 - 29
IEEE Robotics & Automation Magazine - June 2022 - 30
IEEE Robotics & Automation Magazine - June 2022 - 31
IEEE Robotics & Automation Magazine - June 2022 - 32
IEEE Robotics & Automation Magazine - June 2022 - 33
IEEE Robotics & Automation Magazine - June 2022 - 34
IEEE Robotics & Automation Magazine - June 2022 - 35
IEEE Robotics & Automation Magazine - June 2022 - 36
IEEE Robotics & Automation Magazine - June 2022 - 37
IEEE Robotics & Automation Magazine - June 2022 - 38
IEEE Robotics & Automation Magazine - June 2022 - 39
IEEE Robotics & Automation Magazine - June 2022 - 40
IEEE Robotics & Automation Magazine - June 2022 - 41
IEEE Robotics & Automation Magazine - June 2022 - 42
IEEE Robotics & Automation Magazine - June 2022 - 43
IEEE Robotics & Automation Magazine - June 2022 - 44
IEEE Robotics & Automation Magazine - June 2022 - 45
IEEE Robotics & Automation Magazine - June 2022 - 46
IEEE Robotics & Automation Magazine - June 2022 - 47
IEEE Robotics & Automation Magazine - June 2022 - 48
IEEE Robotics & Automation Magazine - June 2022 - 49
IEEE Robotics & Automation Magazine - June 2022 - 50
IEEE Robotics & Automation Magazine - June 2022 - 51
IEEE Robotics & Automation Magazine - June 2022 - 52
IEEE Robotics & Automation Magazine - June 2022 - 53
IEEE Robotics & Automation Magazine - June 2022 - 54
IEEE Robotics & Automation Magazine - June 2022 - 55
IEEE Robotics & Automation Magazine - June 2022 - 56
IEEE Robotics & Automation Magazine - June 2022 - 57
IEEE Robotics & Automation Magazine - June 2022 - 58
IEEE Robotics & Automation Magazine - June 2022 - 59
IEEE Robotics & Automation Magazine - June 2022 - 60
IEEE Robotics & Automation Magazine - June 2022 - 61
IEEE Robotics & Automation Magazine - June 2022 - 62
IEEE Robotics & Automation Magazine - June 2022 - 63
IEEE Robotics & Automation Magazine - June 2022 - 64
IEEE Robotics & Automation Magazine - June 2022 - 65
IEEE Robotics & Automation Magazine - June 2022 - 66
IEEE Robotics & Automation Magazine - June 2022 - 67
IEEE Robotics & Automation Magazine - June 2022 - 68
IEEE Robotics & Automation Magazine - June 2022 - 69
IEEE Robotics & Automation Magazine - June 2022 - 70
IEEE Robotics & Automation Magazine - June 2022 - 71
IEEE Robotics & Automation Magazine - June 2022 - 72
IEEE Robotics & Automation Magazine - June 2022 - 73
IEEE Robotics & Automation Magazine - June 2022 - 74
IEEE Robotics & Automation Magazine - June 2022 - 75
IEEE Robotics & Automation Magazine - June 2022 - 76
IEEE Robotics & Automation Magazine - June 2022 - 77
IEEE Robotics & Automation Magazine - June 2022 - 78
IEEE Robotics & Automation Magazine - June 2022 - 79
IEEE Robotics & Automation Magazine - June 2022 - 80
IEEE Robotics & Automation Magazine - June 2022 - 81
IEEE Robotics & Automation Magazine - June 2022 - 82
IEEE Robotics & Automation Magazine - June 2022 - 83
IEEE Robotics & Automation Magazine - June 2022 - 84
IEEE Robotics & Automation Magazine - June 2022 - 85
IEEE Robotics & Automation Magazine - June 2022 - 86
IEEE Robotics & Automation Magazine - June 2022 - 87
IEEE Robotics & Automation Magazine - June 2022 - 88
IEEE Robotics & Automation Magazine - June 2022 - 89
IEEE Robotics & Automation Magazine - June 2022 - 90
IEEE Robotics & Automation Magazine - June 2022 - 91
IEEE Robotics & Automation Magazine - June 2022 - 92
IEEE Robotics & Automation Magazine - June 2022 - 93
IEEE Robotics & Automation Magazine - June 2022 - 94
IEEE Robotics & Automation Magazine - June 2022 - 95
IEEE Robotics & Automation Magazine - June 2022 - 96
IEEE Robotics & Automation Magazine - June 2022 - 97
IEEE Robotics & Automation Magazine - June 2022 - 98
IEEE Robotics & Automation Magazine - June 2022 - 99
IEEE Robotics & Automation Magazine - June 2022 - 100
IEEE Robotics & Automation Magazine - June 2022 - 101
IEEE Robotics & Automation Magazine - June 2022 - 102
IEEE Robotics & Automation Magazine - June 2022 - 103
IEEE Robotics & Automation Magazine - June 2022 - 104
IEEE Robotics & Automation Magazine - June 2022 - Cover3
IEEE Robotics & Automation Magazine - June 2022 - Cover4
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2023
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2023
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2023
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2023
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2022
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2022
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2022
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2022
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2021
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2021
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2021
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2021
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2020
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2020
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2020
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2020
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2019
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2019
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2019
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2019
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2018
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2018
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2018
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2018
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2017
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2017
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2017
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2017
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2016
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2016
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2016
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2016
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2015
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2015
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2015
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2015
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2014
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2014
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2014
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2014
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2013
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2013
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2013
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2013
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2012
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2012
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2012
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2012
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2011
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2011
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_june2011
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_march2011
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_december2010
https://www.nxtbook.com/nxtbooks/ieee/roboticsautomation_september2010
https://www.nxtbookmedia.com