Migration guide

For ROS Noetic Ninjemys these packages have been changed and provide some form of migration notes or tutorials for users which depend on these packages.

Python 3

ROS Noetic will target Python 3 exclusively. See this guide for instructions transitioning your ROS packages from Python 2 to Python 3.

Increase required CMake version to avoid author warning

CMake will issue an author warning about CMP0048 in Debian Buster and Ubuntu Focal. To avoid this warning, increase the minimum CMake version to at least 3.10.2. See RethinkRobotics-opensource/gennodejs#24 for an example of how to update your package.

In your CMakeLists.txt make sure the first line requires at least version 3.10.2. If you need to support Debian Stretch, use version 3.7.2 instead. All other systems provide at least 3.10.2.

   1 cmake_minimum_required(VERSION 3.10.2)

Setuptools instead of Distutils

Catkin prefers to use setuptools instead of distutils since ros/catkin#1048. See ros/genlisp#17 for an example of how to update your package.

In your setup.py import setup from setuptools instead of distutils-core.

   1 ## Replace this line in your setup.py
   2 # from distutils.core import setup
   3 ## With this one
   4 from setuptools import setup

If your repository uses the same branch to release to multiple ROS distros (Melodic, Noetic, etc), then use add conditional build tool dependencies on python-setuptools and python3-setuptools to your package.xml using format 3.

   1 <?xml version="1.0"?>
   2 <?xml-model
   3   href="http://download.ros.org/schema/package_format3.xsd"
   4   schematypens="http://www.w3.org/2001/XMLSchema"?>
   5 <package format="3">
   6 
   7 <!- ... ->
   8 
   9   <buildtool_depend condition="$ROS_PYTHON_VERSION == 2">python-setuptools</buildtool_depend>
  10   <buildtool_depend condition="$ROS_PYTHON_VERSION == 3">python3-setuptools</buildtool_depend>

Use Orocos KDL and BFL rosdep keys

If your package depends on any Orocos KDL or BFL ROS packages, then starting in ROS Noetic you must change those dependencies to rosdep keys in your package.xml.

Old ROS Package

Replacement rosdep keys

orocos_kdl

liborocos-kdl-dev
liborocos-kdl

python_orocos_kdl

python3-pykdl

orocos_kinematics_dynamics

liborocos-kdl-dev
liborocos-kdl
python3-pykdl

bfl

liborocos-bfl-dev
liborocos-bfl

Examples: ros/geometry2#447, ros-planning/robot_pose_ekf#6

Use fcl rosdep key instead of libfcl-dev

ROS Noetic provides FCL 0.6, which is ABI and API-incompatible to FCL 0.5. The system-installed libfcl-dev might be version 0.5 or 0.6, depending on the particular OS (e.g. Ubuntu Focal has 0.5). To avoid any conflicts in downstream packages, when linking package libraries that are in turn linked against different FCL versions, we suggest to upgrade to FCL 0.6 and use the new rosdep key fcl instead of libfcl-dev (the fcl key corresponds to system package ros-noetic-fcl).

Example of the needed package.xml change. Keep in mind that except changing the package.xml keys, you also might need to edit CMakeLists.txt to search for version 0.6, and then edit all files that directly use FCL to be compatible with the 0.6 API.

Remove unnecessary package_dir option from setup.py

If your ROS package has a setup.py includes package_dir={'': ''} and you are seeing the following build error, then remove the package_dir argument. Example commit doing this.

running install_egg_info
error: error in 'egg_base' option: '' does not exist or is not a directory
CMake Error at catkin_generated/safe_execute_install.cmake:4 (message):

  execute_process(/tmp/ws/build_isolated/kdl_parser_py/catkin_generated/python_distutils_install.sh)
  returned error code
Call Stack (most recent call first):
  cmake_install.cmake:147 (include)

This option tells Python where to look for Python packages relative to the setup.py. The argument package_dir={'': ''} says the Python packages are in the same directory as the setup.py, but in this case it can be removed because that is the default behavior. DO NOT REMOVE if your packages are in another folder next to your setup.py, such as src/my_python_pkg/__init__.py

Joint State Publisher GUI

In previous versions of ROS, the joint_state_publisher package had a parameter called use_gui that would launch a GUI when joint_state_publisher was started. In early 2020 this package was split into a joint_state_publisher and joint_state_publisher_gui package. In Noetic, the use_gui parameter has been removed completely, and instead users should explicitly invoke joint_state_publisher_gui when they wish to use the GUI.

RViz Python API import

The module to import the RViz python bindings have changed. Change any imports that currently look like this:

import rviz

to this

from rviz import bindings as rviz

Use xacro instead of xacro.py

The deprecated xacro.py executable has been removed from xacro. Use xacro instead. Here's an example ros/urdf_sim_tutorial#8.

Wiki: noetic/Migration (last edited 2023-06-13 06:34:21 by Martin Pecka)