Contents
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
catkin
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.
genpy
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 C++
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.
roslaunch
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.
Platform |
vtk6 |
pcl |
OpenCV3 |
Gazebo7 |
rviz/rqt |
Xenial |
qt5 |
qt5 |
qt5 |
qt4 |
qt5 |
Wily |
qt4 |
qt4 |
qt4 |
qt4 |
qt5 |
Jessie |
qt4 |
qt4 |
qt4 |
qt4 |
qt5 |
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:
New Gazebo7 features: Improved graphical model editor Torsional friction implementation, Wide angle camera sensor, Simulation models composed of other models, Improved log playback speed and graphical interface), New GUI tools including alignment functionality and undo. All them are available at the Gazebo 7.x changelog file.
New Gazebo6 features: Integration with Oculus 2, Hydrodynamics plugin, Force/torque GUI tool, Altimeter and magnetometer sensors. All them are available at the Gazebo 6.x changelog file.
Migration
rosdep
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_pkgs
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.
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:
gennodejs wiki page (Javascript message generator)
rosnodejs wiki page (Nodejs ROS client library)
- rosnodejs tutorials
robot_model
The joint_state_publisher widget has been migrated from wxWidgets to Qt (see PR #128).
robot_state_publisher
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).
OpenCV
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.
OctoMap
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.