Using ros1_bridge with upstream ROS on Ubuntu 22.04

The release of ROS 2 Humble (and Rolling) on Ubuntu 22.04 Jammy Jellyfish marks the first ROS 2 release on a platform with no official ROS 1 release. While ROS 1 Noetic will continue to be supported through the duration of its long term support window, it will only target Ubuntu 20.04. Alternatively, there are upstream variants of ROS 1 packages in Debian and Ubuntu that are not maintained as an official distribution by the ROS maintainers.

This guide outlines the current mechanism for bridging ROS 2 releases with these upstream packages on Ubuntu 22.04 Jammy Jellyfish. This provides a migration path for users who still depend on ROS 1, but desire moving to newer ROS 2 and Ubuntu releases.

ROS 2 via Debian packages

Installing ROS 2 from Debian packages currently does not work for ROS 2 on Ubuntu Jammy. The version of catkin-pkg-modules available in the Ubuntu repository conflicts with that in the ROS 2 package repository.

If the ROS 2 apt repository is in the available apt repositories (/etc/apt/sources.list.d), no ROS 1 packages will be installable. The error will be:

$ apt install ros-core-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 ros-core-dev : Depends: catkin but it is not installable
E: Unable to correct problems, you have held broken packages.

To correct this, remove from your sources.list. If you were following the ROS 2 installation guide, simply remove /etc/apt/sources.list.d/ros2.list

For now, to support ros1_bridge, follow the instructions below for building ROS 2 from source.

ROS 2 from source

Installing ROS 2 from Source is the only configuration that works for ROS 2 on Ubuntu Jammy.

Below is a summary of the necessary instructions from the source build instructions. The substantial deviation is that we skip using the ROS 2 apt repositories because of conflicting packages.

Install development tools and ROS tools

Since we aren’t using the ROS 2 apt repositories, colcon must be installed via pip.

sudo apt update && sudo apt install -y \
  build-essential \
  cmake \
  git \
  python3-flake8 \
  python3-flake8-blind-except \
  python3-flake8-builtins \
  python3-flake8-class-newline \
  python3-flake8-comprehensions \
  python3-flake8-deprecated \
  python3-flake8-docstrings \
  python3-flake8-import-order \
  python3-flake8-quotes \
  python3-pip \
  python3-pytest \
  python3-pytest-cov \
  python3-pytest-repeat \
  python3-pytest-rerunfailures \
  python3-rosdep \
  python3-setuptools \

# Install colcon from PyPI, rather than apt packages
python3 -m pip install -U colcon-common-extensions vcstool

From here, continue with the source install guide to build ROS 2.

Install ROS 1 from Ubuntu packages

sudo apt update && sudo apt install -y ros-core-dev

Build ros1_bridge

# Create a workspace for the ros1_bridge
mkdir -p ~/ros1_bridge/src
cd ~/ros1_bridge/src
git clone
cd ~/ros1_bridge

# Source the ROS 2 workspace
. ~/ros2_humble/install/local_setup.bash

# Build
colcon build

After building all of ros1_bridge, the remainder of the ros1_bridge examples should work with your new installation