Migration guide

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

Make sure to consult the ROS Jade migrations page if you are coming from Indigo or older: jade/Migration


find_package dependencies

The generated CMake config files for a package find dependencies with NO_MODULE now. If you were using the exported dependency list to pass a CMake module name that will not work anymore. You will need to find the CMake module manually in your CMake extra file. See ros/catkin#782 for more information.

No more CPATH

The setup files are not setting CPATH anymore. If you need it for something you need to set the environment variable manually. See ros/catkin#783 for more information.


Semantic change of integer division for Duration

Until Jade a Python genpy.Duration object had an ill-defined integer division. The seconds and the nanoseconds were separately divided by the divisor. For each part the Python rounding down happened. The result is counter intuitive. E.g. 9s 5ns divided by 2 resulted in 4s 2ns.

As of Kinetic the integer division for durations works more similar to other integer divisions in Python. The duration is interpreted as a float value of seconds. The rounding down for durations happens to the full second. So the result of the previous example will be 4s 0ns.

Usually you don't want integer division anyway. If you define from __future__ import division (which is highly recommended) (or use Python 3) the result is more what you would expect: 4s 500000002ns. The same can be achieve in older ROS distributions by using a float value as a divisor.


ros::Duration::sleep() return value

The return value of ros::Duration::sleep() was inconsistent with ros::Rate::sleep() and didn't allow to distinguish if the function actually slept for the desired duration. This has been fixed in ros/roscpp_core#47 so if you rely on the return value of that function please double check your code that it doesn't rely on the previous inconsistent behavior.


more flexible evaluation of expressions

roslaunch allows for more flexible evaluation of arbitrary python expressions using the syntax $(eval <expression>). This will be particularly helpful for conditional expressions. See roslaunch/XML for more details.

Qt4/Qt5 Guidelines

As stated in REP-3, Kinetic supports Qt5. However, some system dependencies of ROS packages still depend on Qt4 for some platforms. Code that links against both Qt4 and Qt5, directly or indirectly, will segfault. For example, if library A depends on Qt4 and library B depends on Qt5, executable C cannot link against both A and B. Packages that depend on Qt4 and packages that depend on Qt5 can be installed side-by-side, but again, an executable or a library cannot depend on both Qt4 and Qt5.

We caution users to be aware of this limitation, particularly when it comes to rqt, rviz, and Gazebo plugins. In particular, try to avoid Qt dependencies if they are not necessary. For example, use find_package(... COMPONENTS ... ) in CMake to select the components of OpenCV and PCL that you need for your application.

It is a pretty good practice for rqt-plugins to use the same Qt-version as qt_gui_cpp. This way you avoid linking against multiple Qt-versions and your code will work with both kinetic and jade (after recompilation of cause). rqt_image_view is a good example.

Here's a quick guide to Qt linkage for a few popular packages for different platforms. Note that Wily is EOL in July 2016.

























Gazebo Simulator

The Gazebo official versions supported in ROS Kinetic are the 7.x series. ROS Jade uses gazebo 5.x series so there are many new features to enjoy:



The rosdep key for Gazebo has been split into two different keys: gazebo7 and libgazebo7-dev. If a package implements a plugin or any development on top of Gazebo, please use libgazebo7-dev as a build_depend and gazebo7 as a run_depend. If your package just uses the gazebo simulator but does not use any gazebo library or header, you can use gazebo7 as a run_depend.


  • gazebo_ros_diff_drive

    • This pull request fixes a wheel inversion problem. The incorrect (ie inverted) behavior is maintained for backward compatibility. You can, and should, use the correct version by setting the legacyMode param to false.

  • gazebo_ros_api_plugin

    • This pull request removes the spawn_gazebo_model service, which has been deprecated since hydro and replaced by the spawn_sdf_model service.

gazebo upstream code

To help with the migration of the gazebo 5.x code that is no longer valid in gazebo 7.x, it is recommended to read carefully:

gennodejs / rosnodejs

ROS Kinetic adds a new Javascript message generator to the list of ROS' core language-specific generators: gennodejs. This package generates Javascript-friendly messages and services for all of the packages in ROS.

rosnodejs is the native ROS client library that can interpret gennodejs' messages and allow your Nodejs process to communicate with the ROS network natively. These two packages are similar in spirit to genpy & rospy, and differ from roslibjs in that they are intended to run on the ROS system without a communication bridge. Please see the following wiki pages for more details:


The joint_state_publisher widget has been migrated from wxWidgets to Qt (see PR #128).


Future dating for non-static fixed transforms has been reinstated.

The JointStateListener and RobotStatePublisher classes are now subclassable: private members have been made public and methods have been made virtual where appropriate (see PR #45).


The default version of OpenCV in Kinetic is 3.1, compared to 2.4 in the previous ROS releases. This change and the migration guide are detailed at opencv3.


The released version of OctoMap in Kinetic is 1.8, which contains API changes compared to 1.7.x. This will mostly affect you when using custom node and octree classes. The 1.8.0 release notes contain more details.

Wiki: kinetic/Migration (last edited 2017-05-08 03:33:34 by YinSun)