ROS C Turtle

C Turtle was released August 2, 2010 and is the second ROS distribution release. It is mainly an incremental update to the libraries already released in ROS Box Turtle.

Stack contributors: debian build status


Please see the installation instructions.


ROS C Turtle is primarily targeted at Ubuntu Jaunty through Lucid releases, though it can also be installed on various Linux systems like Red Hat, Debian, and Gentoo. It can also be used on OSes like Mac OS X and FreeBSD, though with more limited compatibility. See the installation page for more details.


C Turtle provides over nearly eighty ROS stacks divided into three variants:

  • base: Robot-generic, building block libraries, like the ROS navigation stack, as well as developer tools like rviz in the visualization stack.

  • pr2: Libraries and tools for the Willow Garage PR2 robot

  • pr2all: Experimental libraries for the Willow Garage PR2 robot, as well as ongoing research code.

ROS C Turtle includes nearly twenty new stacks, though these are all still considered unstable. These new stacks mainly focus on 3D perception, manipulation, and grasping. It is recommended that users exercise caution when using stacks that have not reached 1.0 status. Pre-1.0 stacks are likely to undergo significant changes as we focus on stabilizing them for ROS Diamondback Turtle and subsequent releases.


Stacks in the base variant are generally very stable and consist mainly of robot-generic libraries, developer tools, and drivers for common hardware.


The pr2 variant is intended for users of the PR2 robot and mainly consists of stable, PR2-specific libraries. In the future, some of these libraries may become robot-generic.


The following stacks are provided in the 'pr2all' variant. These stacks are generally unstable and are very volatile. Subsequent ROS distributions may include these stacks in the "base", "pr2" or other variants as they stabilize.

Change List/Migration Notes

The major changes for the stable stacks in the ROS C Turtle release are summarized below.

ROS 1.2

ROS architecture and client library updates

  • Both client libraries now only connect to /clock if /use_sim_time is set

  • Removed support for deprecated /time topic

  • Subscribers now set topic types on the Master

  • roscpp: Please see the roscpp 1.2 changelist

  • rospy:

    • Python messages are now pickle-able.
    • Major performance improvements to message serialization.
    • Master is now in a separate rosmaster package and the zenmaster process has been renamed to rosmaster

    • added ServiceProxy.wait_for_service()

  • roslisp:

    • roslisp has now been moved into the ROS stack. roslisp is a full-featured Common Lisp client library for ROS. To avoid a dependency on the sbcl compiler from the ros stack, there is a dummy package roslisp_runtime in the roslisp_support stack. Packages that use roslisp should declare a dependency on the roslisp_runtime package in their manifest. This will cause sbcl to get downloaded and built into the sbcl package. Examples of use are now in the roslisp_tutorials package in the ros_tutorials stack.

    • rosnode info now works for roslisp nodes.

    • Message objects are now immutable.
    • Debug output can be set with ros parameters, and reset during execution with a service.
    • Compilation of .lisp files now happens during build.
  • std_msgs: std_msgs/Time and std_msgs/Duration added

Graph tools

  • roslaunch:

    • New <arg> tag, if/unless attributes, and $(arg) features.

    • default cwd for nodes is now ROS_HOME. Use of ros-root option is now deprecated. This change was made to prevent issues with core files being generated by nodes.

    • added deprecated attribute for <launch> tags

  • rostopic/rosservice: improved YAML compatibility of output to support YAML-encoded storage of messages.

  • rostopic:

    • new --filter option for rostopic hz <<Ticket(ros 694)>>

    • new -n option for rostopic echo to echo a specific number of messages and quit <<Ticket(ros 2263)>>

    • internal reorganization to support rxgraph changes.
  • rosservice: --wait option for call command to wait until service is available

  • rxgraph: New GUI front end based on Jon Bohren's smach_viewer

  • rostest: added --bare options for running bare, non-node executables with a time limit.

  • rosbag:

    • New C++ and Python iterator-based API's for reading and writing bag files.

    • A major revision to the bag format including (optional) compression.

    • Appending, and simultaneous reading and writing of bag files now supported.
    • New commands: compress, decompress, and reindex.

    • rosbag info shows more detailed statistics, and uses index rather than reading entire bag.

    • Added -e and --exclude options for rosbag record to record topics using regular expressions <<Ticket(ros 2487)>>.

    • Added --loop option to rosbag play for looping playback <<Ticket(ros 2706)>>

    • Added --output-dir option to specify output directory for compress, decompress and reindex commands

  • rxbag:

    • Rendering back-end upgraded to Cairo.

    • Added support for viewing multiple bags <<Ticket(ros 2160)>>

    • Added support for playing back all messages <<Ticket(ros 2532)>>

    • Added publishing support <<Ticket(ros 2067)>>

    • Added --record option for recording bags

    • Added -s option to start playhead at a specified time <<Ticket(ros 2736)>>

    • Added support for exporting an interval of messages to a bag <<Ticket(ros 2655)>>

    • Added support for selecting regions on the timeline
    • Added keyboard control
    • Various user interface enhancements, e.g. scroll bar, status bar, state indicators, tooltips

Build tools

  • rosmake

    • A new status bar at the bottom with the current build status and build times summarized. The option --status-rate=STATUS_UPDATE_RATE can be set to 0 to suppress this in a non-interactive build.

    • Exposed bootstrap build errors to console
    • Fixed handling of rosdep return codes
  • rosdep: improved support for Lucid, Gentoo, and FreeBSD

  • rosboost_cfg

    • Completely rewritten
    • Now searches for system-installed versions of boost and uses the highest one unless ROS_BOOST_VERSION is set

    • No longer assumes -lboost_<library>-mt for system installs, and will error if it can't find a specific library.

    • ROS_BOOST_ROOT is now just an extra search path, force a specific version with ROS_BOOST_VERSION

    • New commands: --version and --print_versions. The first prints the version it will use, the second prints all versions it finds.

    • New environment variable: ROS_BOOST_NO_L_OR_I for preventing -L, -Wl,-rpath, and -I flags from being output if the version from ROS_BOOST_ROOT is used

    • /opt/ros is no longer a "special" location. If you have boost installed in /opt/ros you'll need to set CPATH, LIBRARY_PATH and LD_LIBRARY_PATH like you would with any other non-default include/lib location

Filesystem tools

  • rosmsg: new show -b BAGFILE option to show a message as defined in a bag file. <<Ticket(ros 2666)>>

  • rosdoc: added support for INCLUDE_PATH (thanks snorri) and exclude_patterns for Doxygen configuration.

  • roslocate: support for stacks (thanks Steven Bellens)

Support Libraries

  • rosconsole

    • Added _ONCE, _THROTTLE and _FILTER versions of the macros

    • Added ROSCONSOLE_FORMAT environment variable. Format is in the form of [${severity}] [${time}] [${thread}] [${logger}] [${file}:${line}:${function}]: ${message}

    • Refactored ros/console.h header so that it does not need to include log4cxx/logger.h. If you use log4cxx directly in your code please make sure you're including log4cxx/logger.h yourself, as that include will be removed in a future release

  • message_filters

  • rosemacs

    • roslaunch mode
    • background tracking of nodes
    • ros-rgrep and ros-find-dired for searching in ros packages

    • slime-ros for roslisp integration

    • nxml support for editing launch and manifest files

camera_drivers 1.2

common 1.2

  • pluginlib

    • Now uses recommended syntax package/name to get rid of global namespace.
    • new macro PLUGINLIB_DECLARE_CLASS(package, name, class, base_class)

    • deprecated macro PLUGINLIB_REGISTER_CLASS(name, class, base_class)

  • nodelet: (New Package) provides dynamic loading of multiple nodelets within the same process for high efficiency message passing.

    • there are a number of helper packages which are more experimental and unreviewed such as nodelet_tutorial_math and nodelet_topic_tools
  • xacro: Raises XacroExceptions instead of strings. <<Ticket(ros-pkg 4209)>>

  • actionlib

    • Removed deprecated simple action client methods <<Ticket(ros-pkg 3701)>>

      • waitForActionServerToStart

      • waitForGoalToFinish

      • getGoalState

      • getTerminalState

    • waitForResult and waitForServer both no longer busy-wait

    • Python action server & client support namespace remapping to be consistent with C++ implementation <<Ticket(ros-pkg 3873)>>

  • filters

    • removed deprecated TransferFunctionFilter. It is replaced by SingleChannelTransferFunctionFilter. #3703

  • pluginlib

    • Added getName and isClassAvailable functions to the class loader to help with making early adopter code backwards compatible <<Ticket(ros-pkg 3937)>>

    • Added getRegisteredLibraries() method to get the list of libraries containing plugins. <<Ticket(ros-pkg 3346)>>

common_msgs 1.2

diagnostics 1.2

driver_common 1.2

geometry 1.2

  • bullet

    • upgrade to version 2.76 <<Ticket(ros-pkg 4030)>>

  • eigen is now 2.0.15 + fixed a bug regarding the use of MatrixXf in SVD/eigenanalysis.

  • tf:

    • change_notifier now waits after a TransformException

    • Autodetecting sse <<Ticket(ros-pkg 4114)>>

    • pytf now has transformPointCloud like c++ API <<Ticket(ros-pkg 4277)>>

      • python getTFPrefix method <<Ticket(ros-pkg 4103)>>

    • MessageFilter

      • Now uses ros::MessageEvent internally to support not copying non-const message callbacks if possible (r29502)

      • Now uses message traits to retrieve timestamp and frame id (r29502)
    • New method lookupTwist <<Ticket(ros-pkg 4010)>>

    • vector methods for TransformBroadcaster <<Ticket(ros-pkg 3954)>>

    • operator== for Stamped<T> and StampedTransform <<Ticket(ros-pkg 3990)>>

  • tf_conversions

    • New posemath module with integration between !PyKDL, tf, and numpy matrix formats
    • Added VectorEigenToTF and RotationEigenToTF to tf_conversions

image_common 1.2

  • polled_camera: poller now respects frequency argument. <<Ticket(ros-pkg 4238)>>

  • camera_calibration_parsers

    • Better error output on failure, particularly when a file cannot be opened.
    • Catch YAML parsing exceptions and return false. <<Ticket(ros-pkg 3922)>>

  • image_transport:

    • Fixed crash if Subscriber fails to load a plugin. <<Ticket(ros-pkg 3957)>>

    • CameraSubscriber now subscribes to the correct camera_info topic if the image topic is remapped. <<Ticket(ros-pkg 3940)>>

    • Publisher classes remap all published topics if the base topic is remapped. <<Ticket(ros-pkg 3652)>>

    • Added image_transport-specific exceptions. Subscriber throws TransportLoadException if it fails to load a plugin.

    • Share class loaders among all publishers and subscribers created with a single ImageTransport instance. Avoids duplicated calls to rospack.

    • Removed deprecated SubscriberFilter methods taking a raw NodeHandle instead of an ImageTransport.

    • Added getDeclaredTransports() method. <<Ticket(ros-pkg 3974)>>

    • Added getTransport() method to the subscriber classes, returning the name of the transport actually being used.

    • CameraSubscriber attempts to detect and warn if topics aren't synchronized. <<Ticket(ros-pkg 3966)>>

    • Raw transport is no-copy for intraprocess passing. <<Ticket(ros-pkg 4015)>>

image_pipeline 1.2

  • camera_calibration:

    • Set projection matrix P correctly in monocular calibration (<<Ticket(ros-pkg 3684)>>, <<Ticket(ros-pkg 3975)>>).

    • Calibration no longer makes hard-coded assumptions about checkerboard dimensions and corner spacing.
    • Fixed to work with arbitrary size images, not only 640x480 (<<Ticket(ros-pkg 3951)>>).

    • Wait for set_camera_info service at startup, error if it doesn't become available (<<Ticket(ros-pkg 3977)>>).

    • Throw out images with corners very close to the image edges; can cause bad calibration (<<Ticket(ros-pkg 3980)>>).

    • Mono calibration now reports linear error of the rectified checkerboard corners (<<Ticket(ros-pkg 4035)>>).

    • Updated cameracheck to work with stricter topic name checking (<<Ticket(ros-pkg 4036)>>).

    • camera_hammer utility for testing a set_camera_info service call.

    • Added a simple calibration script ( that loads a set of images from disk and performs monocular calibration returning the camera intrinsics.

    • Can initialize calibrators from CameraInfo messages (<<Ticket(ros-pkg 3891)>>).

  • image_proc:

    • Fixed possible crash when changing the encoding of the raw image stream (<<Ticket(ros-pkg 4252)>>).

  • stereo_image_proc:

    • Many improvements to the OpenCV stereo block matcher used for computing disparities.
      • Uses capped X-Sobel operator as the prefilter - quick to compute and doesn't expand edges.
      • OpenCV now implements speckle filtering.
      • Removed junk disparities at the image edge.
      • Non-zero min_disparity handled correctly.

      • Improved stereo interpolation to reduce "waviness."
    • Added points2 topic with the new sensor_msgs/PointCloud2 format.

    • Upped texture_threshold maximum to 10000; high values needed for simulated stereo images.
    • Made some methods of StereoProcessor public so e.g. a Videre STOC driver can user them.

  • image_rotate: (New package) visualize camera streams in an orientation that is more intuitive to the user than the hardware-constrained orientation of the physical camera. This is particularly helpful, for example, to show images from the PR2's forearm cameras with a consistent up direction, despite the fact that the forearms need to rotate in arbitrary ways during manipulation.

imu_drivers 1.2

  • microstrain_3dmgx2_imu

    • Added a get_id utility so that scripts can obtain the hardware ID of an IMU.
    • Add a parameter to bring up imu without calibrating it. Instead, the imu will assume it is already calibrated.
    • Add a check for drift at the end of calibration Ticket 4093 to detect cases where the IMU was moved while calibrating.

joystick_drivers 1.2

  • ps3joy

    • Added the --redirect-output option to ease logging when run in background.
    • Added the --no-disable-bluetoothd option to allow coexistence with a properly configured bluetoothd.
    • Added an --inactivity-timeout command-line argument to allow automatic unpairing after an extended period of inactivity. This should help preserve the battery life.
    • Added various schemes to prevent the driver from silently becoming unresponsive to connections.
  • wiimote

    • Merged in support for the Nunchuck, contributed by David Lu.

laser_drivers 1.2

  • sicktoolbox_wrapper

    • Added ~angle and ~resolution parameters to allow the scan range and resolution to be set.

  • hokuyo_node

    • Added a getFirmwareVersion tool so that scripts can verify the firmware version on a laser.

    • Added angular version-dependent range limits for UTM-30LX in intensity mode to avoid getting incorrect data or crashing. Added an allow_unsafe_settings parameter to disable these limits.

  • costmap_2d: Now allows for maps to be passed in that are in different global frames

  • base_local_planner: TrajectoryPlannerROS now exposes a checkTrajectory function which allows users to check if a given velocity is legal.

  • fake_localization

    • Applied patch to allow setting the pose of the robot using the initialpose topic. <<Ticket(ros-pkg 4113)>>

  • robot_pose_ekf

    • Allow filter to initialize from vo measurement <<Ticket(wg-ros-pkg 3885)>>

  • move_base

    • Added a clear_unknown_space service to move_base that allows external users to clear unknown space around the robot in the costmap.

  • navfn

    • Adding a make_plan service to navfn that allows the use of the planner via ROS.

physics_ode 1.2

  • opende

    • updated to revision 1730
    • added semi-implicit joint damping for hinge and slider joints
    • alter ode version info ( to indicate our changes

pr2_common 1.2

pr2_mechanism 1.2

pr2_robot 1.0

  • PR2 calibration
    • Calibration offset is stored on MCBs to maintain calibration state in between runs
    • Robust against missing joints
    • Publish diagnostics information
    • Monitor power state during calibration
    • Fix problem where arms get stuck during calibration
  • Realtime loop
    • Only warn for serious overruns of control loop
  • Controllers
    • New controller gains that allow for much higher precision
    • New base controller that supports damping of caster rotation
  • Camera Synchronizer
    • New tool to plot waveforms

pr2_simulator 1.2

  • pr2_gazebo

    • use namespaced controller types
    • add launch of simulator's version of stripped down camera_synchronizer, which merely toggles projector
    • Changing from controller + action node to the JointTrajectoryActionController

  • pr2_gazebo_plugins

    • added param gazebo/start_robot_calibrated for toggling calibration in simulation. defaults to true, which is the original behavior.

    • forearm_camera_l is renamed to l_forearm_cam for consistency with hardware
    • added dynamic reconfigure nodes for tilt and base laser <<Ticket(wg-ros-pkg,3830)>>

    • add exports to and add direct dependency on gazebo for the new gazebo-ros node (no longer need to set LD_LIBRARY_PATH for dynamically loaded plugins).

  • pr2_controller_configuration_gazebo

    • namespace filters <<Ticket(wg-ros-pkg 4533)>>

    • Add package name to controller plugin namespace. <<Ticket(wg-ros-pkg 4469)>>

robot_model 1.2

  • urdf

    • Parser follows urdf spec more closely: deprecate floating joints and reference_position.
    • Many bug fixes
  • kdl_parser

    • Option to create kdl tree from urdf on parameter server
  • robot_state_publisher

    • Correctly support partial trees, trees with only fixed links and trees with 1-2 links.
  • collada_urdf and colladadom (New package)

    • New packages to convert a urdf description into collada format

simulator_gazebo 1.2

  • gazebo

    • gazebo continues even if loading controller plugins fails
    • get ready to switch xml tags
      • Controller: alwaysOn->alwaysActive

      • Physics ODE: deprecate quickStep, quickStepIters, quickStepW

    • added camera synchronizer node, allowing turning on/off texture projector.
    • ignore .gazeborc if paths are set already. This fixes problem with ms_singleton in <<Ticket(ros-pkg 4090)>>

    • works with ode double precision
    • iface no longer mandatory for controller plugins
    • physics hooks for Get/Set physics properties
    • new ROS API

    • new gazebomodel commandline interface
    • <<Ticket(ros-pkg,4078)>> switch dInfinity to numeric_limits<double>::max to avoid spams by boost::lexical_cast

    • assimp based mesh loader (with Collada support).
    • Supports ODE and bullet physics engines.
    • Supports GPU shaders: per-vertex lighting, per-pixel lighting, normal and tangent maps.
  • gazebo_worlds

    • added yet another simple office world file
    • turn off shadow in default

    • added an elevator world
    • removing gazebo_ros_time plugin now that gazebo binary wraps ros and publishes clock,
    • added a shopping cart
  • gazebo_plugins

    • added new texture projector
    • added imu calibration service call, does nothing and returns true. (in support of simulating full robot startup calibration).
  • gazebo_tools: pass-through joint damping to Gazebo XML

simulator_stage 1.2

  • Updated to Stage 3.2.2 as the underlying simulation library.

slam_gmapping 1.2

  • gmapping

    • Added transform logic to support upside-down lasers <<Ticket(ros-pkg 3052)>>. Still needs to be tested on a real robot with an upside-down laser.

      • Corollary: removed inverted_laser parameter.

    • Changed tests to use new indexed bag files
    • Added publication of filter entropy, for use in SLAM-aware exploration.
    • Added ~occ_thresh parameter, to allow control over when a cell is determined to be occupied.

sound_drivers 1.2

Removed deprecated APIs from sound_play.

visualization_common 1.2

  • visualization_msgs/Marker

    • New types
      • TRIANGLE_LIST uses existing members to show arbitrary "triangle soup", with each three points generating a triangle.
      • MESH_RESOURCE uses the new mesh_resource member to load a mesh from a URI

      • TEXT_VIEW_FACING uses the new text member to display text in 3d space

    • New colors member allows per-point/cube/line/triangle color

    • New frame_locked member for messages which should be retransformed before each render

  • wxOgreRenderWindow can now be reparented on X11 without crashing

  • ogre has been upgraded to 1.7.1

  • Added fedora support to the rosdep.yaml file

visualization 1.2

rviz: New Features

  • Marker Display
    • Support for new visualization_msgs/Marker types and members

      • MESH_RESOURCE marker type that can load meshes from disk/web

      • TEXT_VIEW_FACING marker type for displaying text

      • TRIANGLE_LIST marker type for displaying "triangle soup"

      • frame_locked option for markers, which automatically retransforms them into a frame every update cycle

      • Support for per-point color for POINT, CUBE_LIST, LINE_LIST and LINE_STRIP markers. Does not yet support per-point alpha though the capability exists in the message.

      • All documented at rviz/DisplayTypes/Marker

  • New PointCloud2 display

  • LaserScan/PointCloud/PointCloud2 color/position transformation is now pluggable

    • Loading of fields related to transforming intensity into color is not backwards compatible with the boxturtle version, please update your config files
  • TF Display

    • Added Frame Timeout option which will fade out frames that have not received data within a certain amount of time. Defaults to 15 seconds.

  • Ogre.log file is now suppressed by default, with a command line options -l to turn it on

  • A dialog is now shown when rviz cannot connect to the master
  • Support for COLLADA meshes and materials

rviz: Bugs Fixed

  • POINT, CUBE_LIST, LINE_LIST and LINE_STRIP markers no longer throw away messages with empty points members

  • Relative paths now work when passed to the -d command line option

  • Fixed support for the mesh scale attribute in a URDF
  • Receiving images, both in image_view and rviz no longer generates mipmaps, which was using a large amount of CPU

  • URDF loading of spheres now uses the radius correctly, instead of treating it as a diameter

  • Reduced the tf cache length to 60 seconds to significantly reduce memory usage
  • Exits cleanly if an exception is thrown during startup


  • warn on multiple background tasks (e.g. image or CSV exporting)
  • ImageView: R and B channels were being swapped on CompressedImage message export

  • PlotView bug fixes

    • reopening configure frame no longer clears plot
    • disabled drag & drop on configure frame due to wxPython bug

    • fixed CSV export when striding
    • chart fixes (e.g. axis label widths; no data or zero range display)

vision_opencv 1.2

  • Updated to OpenCV rev 3090, new flann patch.

Identical to Box Turtle

The following stacks are identical to their Box Turtle releases and have only received bug fix updates:

New Experimental/Research Stacks

The following stacks are new in ROS C Turtle. They are currently unstable and are only meant for early adopters and developers who wish to contribute to their future development.

Wiki: cturtle (last edited 2011-05-26 19:48:43 by KenConley)