0.11.0 (2010-01-07)

ROS 0.11 includes many of the final features and API modifications that we wish to have in place for ROS 1.0. Our focus with this release was on improving consistency, better performance, and bug fixes. We are also removing much of the deprecated functionality with this release so that ROS 1.0 will have minimal deprecated functionality.

Notes on Updating from 0.10 or earlier in SVN

There are a number of previously installed programs which are now versioned scripts. SVN will error when updating and not delete the installed programs to add the scripts in their place. You will need to delete the program and svn up again. The error will read: svn: Failed to add file 'FILENAME': an unversioned file of the same name already exists The solution is to rm FILENAME && svn up again.

Client API changes

Wait for message

You can now easily write code to block on receiving a single message from a topic. This is especially useful with messages published on latched topics.

  • roscpp: ros::topic::waitForMessage<MessageType>("topic")

  • rospy: rospy.wait_for_message('topic', TopicType)

Name strictness

The client libraries are now more strict about valid ROS Names. For more information about what are legal names, please see the Names page. This strictness is required due to the way that many ROS resources are translated into code (e.g. msg files), filesystem resources, and otherwise.

rospy service streamlining

Services can now be called with the same keyword style as publish calls. Service handlers can also return bare values instead of wrapping in response messages if the fields are compatible.

Keyword-style calling:

   1 add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)
   2 add_two_ints(a=1, b=2)

Bare value return:

   1 def add_two_ints(req):
   2   return req.a + req.b
   3 s = rospy.Service('add_two_ints', AddTwoInts, add_two_ints)

Major changes

Tab-completion: roslaunch, rosnode, rostopic, rosparam, rosservice, and roscreate-pkg now have tab-completion. Enjoy!

Python startup latency speedup: the roslib loader now reads the rospack cache to improve startup performance. There has also been other cleanup in the ROS python-related codebase to improve startup performance.

roslaunch: "name" attribute is now required: in ROS 0.10, roslaunch began warning about the "name" attribute for <node> tags. This attribute is now required in ROS 0.10.

  • roslaunch:

    • new --find-node command-line option to print filename node is defined in

    • parallel killing of processes. Also, roslaunch no longer blocks on SIGKILL for process and timeout for SIGTERM has been raised to 15 seconds (from 5).
    • enabled multicall XMLRPC to Parameter Server for performance speedup.
  • rostopic, rosservice, rosnode:

    • list command can now take in namespaces to filter by and returns in sorted order

    • separate info command replaces old list behavior when provided with specific name.

    • streamlined sys.path loaders to lower latency on startup

  • roscpp

    • Warnings about invalid names have been turned into ros::InvalidNameExceptions

    • Deprecated 3-argument (caching) version of getParam(), in favor of an explicit getParamCached(). This will be removed in the next release.

    • Fixed a serious callback queue race condition where callbacks could be called after the handle associated with them was destroyed. This required an interface-breaking change to ros::CallbackQueueInterface, but should not affect any client code. (r7210)

    • Changed default CallbackQueue::callAvailable() and callOne() timeouts to be 0 (r7315)

    • Fixed-length arrays are now of type boost::array (http://www.boost.org/doc/libs/1_37_0/doc/html/array.html) instead of std::vector

    • enabled TCP_KEEPALIVE on sockets where available to detect hung connections.

  • rospy:

    • enabled TCP_KEEPALIVE on sockets where available to detect hung connections.

    • Message generator now forces all types listed in Message._slot_types to be fully qualified.

  • rospy/roslib: improved load-time latency by optimizing roslib.packages.get_pkg_dir() to read in rospack's cache file.

  • topic_tools

    • ShapeShifter no longer allows for static method calls to retrieve md5sum / datatype.

  • rospy Master/Parameter Server: enabled multicall XMLRPC for performance speedup

  • rosmake

    • rosmake will now bootstrap all necessary elements, removing the need for a make in ros before use.
    • ROSMAKE_THREADS allows environment variable setting of --threads option
    • rosmake passes through ROS_PARALLEL_JOBS if defined
    • rosmake defaults to checking rosdep for you, it can be disabled with --no-rosdep
    • new option: --rosdep-install calls rosdep install for you before running
    • new option: --rosdep-yes will pass --default-yes to rosdep when invoked
    • new option: -i, --mark-installed Mark packages built as installed with ROS_NOBUILD file
    • new option: -u, --unmark-installed Unmark packages built as installed by removing ROS_NOBUILD file
  • rosdep All new documentation

    • rosdep c++ implementation replaced with python.
    • All float elements are parsed as strings
    • new command: where_defined
    • new strict rosdep.yaml search order
    • new option -y, --default-yes (will pass -y to apt-get)
    • new option -i, --include-duplicates do not remove installed packages from install command
    • new option -r continue running after errors
    • new option -a add all packages in system to the arguments
    • Support for gentoo updated
  • rosrecord

    • bag files now include an index for improved seeking
    • rosrecord is moving toward being replaced by new rosbag tool, invoked as rosbag record

  • rxbag: a new GUI tool for viewing bag files

  • rosbag: a new command line tool intended to eventually replace rosrecord. rosbag encompasses rosrecord, rosplay, rosbagmigration check/fix, and rosrebag. rosbag help or rosbag help <cmd> for more information.

  • rosjson: moved to ros_experimental, no longer part of core ROS stack

Removal of deprecated APIs/functionality:

  • roslaunch: all <node> tags must have a name attribute.

  • rospy: removed auto-filling of Header timestamps (deprecated in previous release)

  • roslib: removed deprecated functions

    • roslib.scriptutil.rospack* -> roslib.rospack

    • roslib.scriptutil.get_message_class -> roslib.message

    • roslib.scriptutil.get_service_class -> roslib.message

  • roscpp

    • removed auto-filling of Header timestamps (deprecated in previous release)
    • removed deprecated functions
      • ros::getPackagePath() -> ros::package::getPath()

      • ServiceClient::valid() -> ServiceClient::isValid()

      • ros::service::createHandle() -> ros::service::createClient()

      • NodeHandle::mapName() -> NodeHandle::resolveName()

      • NodeHandle::setMasterRetryTimeout() -> ros::master::setRetryTimeout()

      • NodeHandle::getAdvertisedTopics() -> ros::this_node::getAdvertisedTopics()

      • NodeHandle::getSubscribedTopics() -> ros::this_node::getSubscribedTopics()

      • NodeHandle::getName() -> ros::this_node::getName()

      • NodeHandle::checkMaster() -> ros::master::check()

      • NodeHandle::getPublishedTopics() -> ros::master::getTopics()

      • NodeHandle::getNodes() -> ros::master::getNodes()

Minor changes

  • rospy:

    • wait_for_service raises ROSInterruptException if interrupted by ROS shutdown

    • removed support for optional netifaces library. This was increasing startup latency.
  • rostopic:

    • rostopic type now immediately exits if topic type is unknown

    • get_topic_type(): default value of blocking is now False
  • test_roscpp
    • fixed launch script to have required node name r7065
  • rxdeps patch to not crash on invalid manifest. r7053

  • roslib:

    • roslib.packages: added new internal-use ROSPackages and "platform" APIs to support rosdep and rosmake.

    • roslib.packages.find_node(): added partial Windows support.

    • roslib.msgs: added resolve_type() convenience function

    • removed unused env keyword parameter to roslib.packages.get_dir_pkg()

    • removed roslib.names.ROSNameException, replaced with ValueError. Found no uses of ROSNameException in code base.'

    • Updated name validators:
      • removed roslib.names.is_valid_local_name. Found no uses in code base.

      • added roslib.names.is_legal_base_name

      • added roslib.names.is_legal_resource_base_name

      • added roslib.names.is_legal_name

  • roscpp

    • Added Subscriber::getNumPublishers() (#1973, r7120)

    • Turned roscpp errors dealing with failed connections into ROSCPP_LOG_DEBUGs (#2100, r7123)
    • Applied patches for compilation on gcc 3.3 and debian 3.1 (#2090)
    • Fixed multiple race conditions when connecting to topics which are advertised locally (in the same process)
    • Fixed race condition when initially subscribing to the same topic from many threads at once (r7166)
    • Fixed subscription callbacks to continue working after CallbackQueue::clear() has been called (r7213)

  • roscreate: roscreate-stack can now be repeated on an existing stack without overwriting hand-written properties. Also warns if dependency is not in a stack

  • rosrecord:

    • rosrecord -c no longer hangs

    • Better handling of warning message spew on a full disk
  • rosbuild: new macro for building SWIG-generated libraries to be imported by Python: rosbuild_add_swigpy_library()

  • roslaunch: can now read ssh keys from system-wide /etc/

  • roswtf:

    • running roswtf in a stack now examines all packages in that stack.

    • ROS_MASTER_URI checks now report error instead of warning.

  • rosjson: removed from ROS distribution, but available separately as an experimental package.

Bug fixes

  • roscreate: bug fix for roscreate-pkg when package depends on both roscpp and rospy

  • roslaunch: bug fix in error message (r7147)

  • rospy:

    • bug calculating imports for generated messages (#2133 r7289)
    • wait_for_service() now correctly passes along KeyboardInterrupt where appropriate.

    • anonymous node names are now legal
  • roslib:

    • roslib.packages.get_pkg_dir() now fully resolves path to rospack whenever possible to allow use on remote machines. (r7300)

    • roslib.manifest: missing 'versioncontrol' in optional tag list

    • roslib.messages.fill_message_args(): changes to fill_message_args to deal with peculiarities of strify_message() (e.g. secs/nsecs concatenation, empty strings == null)

  • rosrun: fixed bug keeping rosrun from working when invoked from / (r7678)

  • rosservice: bug fixes to stdin_yaml_arg

  • rosparam: convert YAML null to empty string instead to handle common use case

0.10.0 (2009-11-19)

The focus of this release is preparing ROS for a 1.0 release. We have been making final reviews of the ROS APIs to address any essential feature gaps, API inconsistencies, and deprecations.

Client Library Updates

Client libraries and the supporting tools (e.g. rosmake, rospack, roslaunch, rostest) no longer record data to ROS_ROOT. By default, this data is written to ~/.ros/, but this can be overriden using the ROS_HOME environment variable. New locations are described below.

New Locations

  • Log files (in order of precedence):
    • ROS_LOG_DIR

    • ROS_HOME/log

    • ~/.ros/log

  • Test results (in order of precendence):
    • ROS_TEST_RESULTS_DIR

    • ROS_HOME/test_results

    • ~/.ros/test_results

Client library updates

  • roscpp

    • Fixed a possible crash on application exit (r6610)
    • Fixed a possible deadlock on application exit (r6611)
    • roscpp/GetLoggers service now contains an array of roscpp/Logger messages that includes the logger's level in addition to the name (r6717)

    • Now warns on invalid names (will error in future versions) (r6732)
    • Added ros::param::search() (r6737)

    • Now installs an atexit() callback to automatically cleanup when exit() is called (r6740)

    • Added ros::removeROSArgs() which parses out ROS arguments from argc/argv (r6744, #1656)

    • No longer write logs to ROS_ROOT, instead using $ROS_HOME/log if set or $HOME/.ros/log by default
    • Messages now warn when auto-filling timestamps, which is deprecated (r6747)
    • Store latched messages on the subscriber side so multiple subscriptions work properly with latched publishers (r6754)
    • Added an AsyncSpinner object. MultiThreadedSpinner now internally uses AsyncSpinner. (r6774, #1870)

    • Added ros::waitForShutdown() which waits for ros::ok() to turn false before returning (r6774)

    • Fixed a memory leak on shutdown (r6788, #2007)
    • Information useful for debugging connections and various other roscpp issues is now always logged to the log file (r6798, #2006)
    • Deprecation warnings about using ~ with NodeHandle methods have been turned into exceptions (ros::InvalidNameException) (r6872)

  • rospy:

    • timeout parameter for calling services via ServiceProxy is now deprecated. It will be removed in ROS 0.11.

    • Time and Duration now have from_sec, to_sec, and to_nsec to be more consistent with roscpp API.

    • deprecated TopicSub and TopicPub have been removed

    • deleteParam raises KeyError if parameter not set

    • improved error message when message fields have incorrect type
    • Swapped order of get_ros_root() keyword arguments to match roslib.rosenv and changed require to required

  • Master (zenmaster): quieter output
  • roslib:

    • added roslib.stacks.expand_to_packages

    • new roslib.masterapi Python library for interacting with the ROS Master.

    • normalization in roslib: standard 'env' keyword for environment overrides (get_ros_root, get_ros_package_path, get_master_uri() get_log_dir(), get_dir_pkg(), get_package_paths(), get_ros_namespace(), manifest_file() updated). env/argv assignment is also now delayed so that os.environ/sys.argv updates are reflected. get_ros_package_path() now defaults to required=False to match ROS defaults.

  • xmlrpc++ has been renamed to xmlrpcpp

Toolchain updates

  • roscd:
    • roscd log has been updated for the new log directory changes. It will also take you to the location where log files for the current roslaunch session are being recorded.

    • roscd test_results has been updated for new test_result directory changes.

  • roscreate: roscreate-pkg no longer generates package/src/package for rospy-dependent packages, just package/src.

  • rosdoc: new 'homepage' config option for doxymaker config

  • roslaunch:

    • New required attribute for <node> tags which allows an entire launch to be canceled if a particular node fails.

    • <rosparam> tag now accepts YAML, which enables the use of lists within roslaunch file and also makes dictionaries easier to use. The tag has also been streamlined:

      • 'load' command is now the default
      • param and ns atttributes have been combined, with ns deprecated

      • param attribute can be omitted if defining a YAML dictionary

    • ros-ip and ros-host-name attributes in <machine> tags is deprecated. These rarely used fields can be specified using <env> tags instead.

    • Quieter output
  • rosmake:

    • restructured to a seperate package to allow unit testing
    • Default number of threads is number of cores detected r6749
    • fixed buildtest1 printout #1906 (r6618)
    • Displaying expansion of stacks to list of packages. #1907 r6619
    • making zero arg case not be promiscuous if you're not in the correct package #1845 r6620
    • fixing test output to be consistent code path with other build steps. removed deprecated code related to that. #1902 r6622
    • fixed rosmake -s to track dependencies within build list #1904. r6622
    • fixed test list to build packages not 'make test stackname' #1921 r6622
    • fixed rosmake -t -r robustness #1998 r6767
    • Output now goes to ~/.ros (ROS_HOME)
  • rosmsg/rossrv: package and packages command now take -s option to do single-line output. Old -p option has been removed and is now the default behavior.

  • rosnode: new kill command to request a node to shutdown. This cannot kill nodes that are hung.

  • rostopic:

    • pub now accepts the now as a keyword for the current time when filling in timestamp fields. You can also use the auto keyword to create a header with a timestamp initialized to the current time.

    • added rostopic info /topic_name as an alias of rostopic list /topic_name

    • Can now be safely run inside of roslaunch

  • roswtf:

    • warns on unrecognized tags in manifest
    • added network configuration checks
    • improved SSH configuration error detection
  • rxdeps:

    • cleaned up graphviz output (r6616)
    • added a simple test (r6967)
  • rxtools

    • rxloggerlevel now shows the current logger level when a logger is selected
    • rxconsole has received some much-needed love
      • Filter messages by severity
      • Support for multiple configurable text filters
        • Each filter can be include/exclude, regex, and only be applied to specific fields
      • Support for multiple windows
      • Right-click menu which allows easy filtering based on the fields of a specific item
      • Combined file/function/line into a colon-separate "location" field
      • Escape closes double-click popups
      • Double-click popup text has been reformatted
      • Selecting an item while auto-scrolling will stop the automatic scroll
      • Non-regex text filter now supports wildcards (* and ?)
      • OSX
        • Mostly-working automatic scrolling (involves hackery due to missing wxWidgets support for certain methods on wxListCtrl)
        • Fixed selection to not immediately disappear once a new message has arrived
    • rxplot has a new option -b <secs> to specify the maximum internal buffer size in seconds. The buffer is used to determine y-axis limits.

  • rostest:

    • better error message and behavior if test node is not executable or does not exist
    • coverage tests for Python now have option to output HTML using --covhtml. There is also the rostest/bin/coverage-html tool for generating aggregate HTML reports. These are still in an experimental phase.

  • rosnode, rosparam, rosservice, rostopic: cleaned up API to distinguish between methods that implement commands and functions that provide generic, library capabilities. This renaming was not done via deprecation cycle as these are considered experimental routines and no packages appear to have been using them.

  • Documentation reviews: rosparam, rostopic, rosservice, paramiko, pycrypto, wxswig, wxPython_swig_interface

  • Makefile and CMakeLists.txt updated for support of release process.
  • rosrecord:

    • -m <MB> specifies the maximum internal buffer size used by rosrecord. This is applicable if data is coming in faster than it can be written to disk.

    • Rosplay time_publisher now uses roslib/Clock instead of deprecated roslib/Time.

    • EXPERIMENTAL: -s turns on snapshot mode. Rosrecord will not write out to disk until triggered by a publication of a std_msgs/Empty message to the snapshot_trigger topic.

    • EXPERIMENTAL: -t Triggers a rosrecord snapshot by publishing to the snapshot_trigger topic.

Bug Fixes

  • roswtf: bug fixes for stack checks (r6534, r6535, r6695), /time//clock check (r6602), and dependency check (r6728)

  • rosservice:

    • list now prints in alphabetical order (r6547)

  • rosoct: updated message generation (in genmsg_cpp) to include message description and service type (r6582)

  • roscpp:

    • added __attribute__ ((unused)) to unused arguments in auto-generated message / service code, to remove warnings (r6571)

    • fix to compile on newer versions of gcc
  • topic_tools: improved command-line parsing to allow namespace-qualified topics (r6567)

  • rosbuild: fixed cleaning up old test results (r6585)

  • rosparam: catch non-file load argument and validate that dictionary keys are strings (r6607 r6608)

  • rostest: bug fix to incorrect error about <rosparam> tags within <test> tags (r6612)

  • rospy: several bug fixes in topic handling, including bug fix for unregister when there are multiple Subscriber instances for the same topic (r6683 r6686)

  • roslaunch:

    • bug fix to <test> with <remap> tags (r6690)

    • added 30-second timeout to ssh connect (r6692)
    • improved error messages (r6698 r6699 r6700)
    • bug fix to --wait command-line option (r6734)

  • message_filters:

    • Python implementation now usable

0.9.0 (2009-10-09)

ros::Node has been removed: the release officially ends support for the deprecated ros::Node API. Please use NodeHandle instead.

New bool type for messages: roscpp and rospy now support a bool type. This was added mainly to support use of boolean arrays with rospy. Previously, bools were represented using uint8[], which, for performance reasons, is represented as a string in rospy.

Node name strictness: roscpp, rospy, and roslaunch will now return errors of a node name contains a namespace, i.e. in a call to ros::init, rospy.init_node, or a <node name="..."/>. This previously had undefined behavior and is now considered an error.

/time → /clock: The ROS simulated clock topic is now called /clock and the type for this topic is now roslib/Clock. This change was made to reduce confusion with overloading of the term "Time" within ROS. The ROS client libraries currently subscribe to both topics for backwards compatibility.

Major changes

  • roscpp

    • Node and ros/node.h have been completely removed.

    • SingleSubscriberPublisher: getSubscriberCallerID() has been deprecated in favor of getSubscriberName()

    • Timer: More time-jumping-backwards fixes. (r6282, r6283)

    • ServiceClient: Added exists(), waitForExistence(), and getService() (r6339, #1679)

    • major internal changes to name handling to accommodate changes to remapping handling.
  • rospy:

    • See notes on changes to name resolution and remapping.
    • logwarn() now reports to the screen. Many ROS internal logging messages were moved to a separate handler.

    • get_name(): replaces get_caller_id() as the means for getting the Node's name. get_caller_id() is not being deprecated.

    • major internal changes to name handling to accommodate changes to remapping handling.
    • Removing deprecated ready, Service.register, TopicPub, and TopicSub

  • rosmake:

    • new option "--specified-only" or "-s" for short to only build packages specified on the command line
    • support multiple buildtest or buildtest1 options on the same command line. It will iterate over each target and append.
    • output directory option doesn't add timestamp directory
    • pretty print file headings
    • Can now rosmake a stack
  • rospack

    • markstack -- Deprecated options --stack_string --stack_name --stack_version now uses args for list of stacks
  • roswtf: new rules to catch problems with stack.xml files.

  • roslaunch:

    • ROSLAUNCH_SSH_UKNOWN override to allow connection to hosts not in the known_hosts file.

    • better error message when host is not in .ssh/known_hosts

    • bug fix to handling of $(anon id) when concatenated with other text

    • rewrote XML reference documentation for increased clarity and consistency
  • rosrun: no longer finds executables in the build directory of your package

  • rostopic/rosservice/roslib: clarified command-line syntax for call and pub and fixed bugs in the handling.

  • rosrecord:

    • Deprecated running with no arguments to record all topics. Now use: rosrecord -a

  • rxgraph: added -t option to re-enable display of all topics

Minor changes and bug fixes

  • roscore: rosout node now respawns
  • rosparam: removed deprecated RosParamException. Use ROSParamException instead.

  • rospy:

    • fix to CPU-hogging sleep() bug (r6161)
    • fixed broken error message (r6236)
    • propagated ServiceExceptions properly (r6243)

  • roscpp:

    • ros::master::check() no longer prints an error if it could not contact the master (r6406)

    • Fixed crash when calling ros::shutdown() after ros::init() but before any NodeHandle had been created (r6405, #1831)

    • If a Ctrl-C happens while waiting for the master inside NodeHandle's constructor, ros::ok() is now guaranteed to be false by the time the constructor returns (r6395, #1830)

    • Fixed a rare deadlock with self-subscriptions (r6369, #1813)
    • Fixed crash when calling ros::shutdown() after ros::init() but before any NodeHandle had been created (r6405, #1831)

  • rosbash:

    • Bug fix in rosbash that was causing problems when using rosrun inside of directories containing a directory called "build" (r6112)
    • Large performance improvement in directories containing nasty environments that should have been irrelevant. (r6115)
    • Bug fix for ROS_LOCATIONS on OS X (r6430)

  • rosmake patch to remove warning about blacklist if skipping

  • roswtf: better protection against misbehaving plugins (r6143), rosbuild_genmsg/gensrv update (r6152)

  • rxgraph: more helpful error message when GTK not satisfied (r6174)

  • roslaunch:

    • if roslaunch cannot configure logging properly for a process, output is now directed to a PIPE to protect against cases where sys.stdout has been altered (r6301, 6302)
    • strip '...' end-of-document in YAML command-line args (r6190)
    • fixed error message (r6298)
  • roslib.stacks: better error message (r6202)

  • roscpp: Fixed compile errors on OSX with gcc 4.2, and boost 1.40 (r6154, r6233)

  • rosservice:

    • "" as a command-line argument to 'call' is now considered to be an empty-YAML string (6240)
    • fixed use of dictionaries as only argument to call. Now prefer dictionaries to lists, as this is better to resolve ambiguous cases with. (r6246 r6247)
  • rosbuild:

    • Fixed bug in test_results removal (r6250)
    • Fixed bug in path-handling for gtests (r6269)
  • roswtf: added rpath check, improved msg/srv export check, and rosbuild_() updates (r6258)

  • rostopic: bug fix to -p option and time/duration instances (r6305, r6309)

  • rosrecord:

    • Cleaned up some issues when running without master
    • Added trivial usecases to verify assorted executables exist and are runnable
  • rosbagmigration:

    • No longer silently passed through changes to constants
  • rxgraph: fixes for errors displaying multiple connections between nodes as well as xcb_lock issues.

0.8.0 (2009-09-08)

roslaunch package-name file.launch: roslaunch can now accept rosrun-like syntax, where you just specify the package the file is in and the filename. roslaunch will locate the file inside the package for you, which saves the need to type full paths.

roslaunch <node> names: roslaunch will be requiring that <node> tags have 'name' attributes in future releases of ROS. After much testing, we've determined that <node> tags without names create many problems, especially in larger systems. We will also be able to implement better debugging tools and advanced roslaunch features with this new requirement.

<node name=$(anon id)... />: In order to make the migration to this new roslaunch name requirement possible, we have also introduced a new substitution argument for roslaunch: $(anon id) will generate an anonymous identifier based on id. Multiple uses of the same id generate the same anonymous identifier within the same roslaunch. In other words:

  <node name="$(anon foo)" pkg="rospy_tutorials" type="talker.py" />
  <node name="$(anon foo)" pkg="rospy_tutorials" type="talker.py" />

Will generate an error that there are two nodes with the same name.

Tilde names in roscpp: This release deprecates use of tilde (~) names directly in NodeHandle methods. The new way of accessing private names (supported since 0.7) is to create a NodeHandle with a namespace beginning with ~:

  ros::NodeHandle private_nh("~");
  private_nh.getParam("my_private_param", var);

instead of

  ros::NodeHandle nh;
  nh.getParam("~my_private_param", var);

Use of the latter will now produce a warning.

rostopic: many upgrades have been made to the rostopic commands, including a new "find" command to search for Topics by type.

Experimental code separated: Experimental packages were separated from the main ROS distribution. Specifically, the following packages are no longer included with ROS as of this release: repository_maintenance, rosdeb, roslisp_examples, rosrb, rosclj, rosjava, rosoct, session_tutorials, roscpp_sessions, roslisp, rospy_sessions, test_rosjava.

If you're using these packages (directly or indirectly), you'll want to check out the ros_experimental stack, e.g.:

 svn co https://code.ros.org/svn/ros/stacks/ros_experimental/trunk ~/ros/ros_experimental

Then augment your ROS_PACKAGE_PATH, e.g.:

 export ROS_PACKAGE_PATH=~/ros/ros_experimental:$ROS_PACKAGE_PATH

Major changes

  • roslaunch:

    • 'name' will become a required attribute of <node> tags. For this release, <node>s without name tags will issue a deprecation warning.

    • $(anon id) can now be used with 'name' attributes of <node>s to generate names for anonymous nodes. This is useful for nodes like rviz and other viewers.

    • <env> tags can now be used within the scope of a <launch> or <include> tag. This allows you to set environment variables across an entire file.

    • fixed Python 2.6 issue with remote launches
  • rxgraph: new -q option to suppress common Nodes that clutter the display. Also added a -o output.dot option to save output as a Graphviz dot file for editing.

  • roscreate: new roscreate-stack command. This command lets you create a stack.xml file in a directory that contains multiple Packages. This saves a lot of effort when attempting to compute the Stack dependencies of a set of Packages.

  • rostopic:

    • echo --offset: new rostopic echo /topic --offset option will display all time fields as offsets from the current time. This is a useful tool for debugging lagging timestamps.

    • find: new rostopic find msg/type command. This command lets you find all topics that use a particular message type.

    • list: new -p and -s options to rostopic list to let you view just published or just subscribed topics.

    • pub: new -1 (--once) options to publish a message and then exit. Also fixed bugs when publishing arrays of messages.

  • rosservice: new rosservice find srv/type command. This command lets you find all services that use a particular service type.

  • rospy: added get_num_connections() to Topic objects (i.e. Publisher and Subscriber objects). This lets you poll for the number of publishers/subscribers a node is connected to on a particular topic.

  • roscpp: Tilde parameters to NodeHandle methods other than its constructor are deprecated, see above for details.

  • gtest: Removed C++ include/link exports from gtest package, as nothing is supposed to be directly depending on it. If things begin failing to link, use rosbuild_add_gtest_build_flags() (http://www.ros.org/wiki/CMakeLists#rosbuild_add_gtest_build_flags)

  • roslib: roslib.scriptutil.get_message_class() has been moved to roslib.message.get_message_class() (same for get_service_class()). The old API location is now deprecated.

  • rosdoc: <doxymaker> tag has been renamed to <rosdoc> and there is a new tag, <doxygen>, for setting doxygen-related attributes (file-patterns, excludes).

  • rosbagmigration:

    • Fundamental change to the way that checkbag.py operates. New syntax: -g takes a rule file. Increased verbosity regarding rules. Restructuring package layout (r5851, r5854, r5856, r5918)

Minor changes and bug fixes

  • rosparam:

    • Strips trailing '...' that appear in Jaunty and other systems with more recent versions of Python YAML. Although this is YAML-legal syntax, it is optional and confusing to users.
    • rosparam load file.yaml now accepts non-mapping types

    • Deprecated RosParamException. Use !ROSParamException instead. This will be removed in ROS 0.9

  • rospy/Master: removed getTime() API as it is not correct for simulated time

  • roslaunch:

    • change terminal window name to reflect name of launch (r5405 r5416 #1491)
  • rosstack:

    • name and version attributes are no longer required on the top-level stack.xml file. Versions were removed because maintaining version compatibility among stacks is being punted to the 'distro' level. Names were removed since they can be easily derived from the stack path, just as rospack does, now that versions are removed from the installed path of the stack. (r5874 r5875)
    • add an 'contains' and 'contains-path' command, to determine the stack which owns a particular package. functionatliy needed to implement federated rosdep (r5451 r5453 r5455)
    • expose librosstack via manifest so rosdep can link against it (r5454)
    • expose librospack through librosstack to avoid multiple simultaneous instantiations of rospack (r5456)
  • rospack:

    • packages can provide plugins for themselves (r5640)
  • rosdep

    • federated rosdep implementation in progress as rosdep2 for now (r5451 r5457 r5639 probably more)
    • improve Debian OS detection (r5608)
  • rosmsg/rossrv: package/packages command output changed to space-separated for easier command-line use. Internal APIs rewritten for easier testing/library use. (r5498)

  • rosviz: deprecated package has been removed (r5500). Please see rxtools and rosgraph for replacements.

  • roslib

    • patch to fill_message_args to handle arrays of embedded types (r5704)
    • Rate::sleep() return value meaning has changed. Now simply passes through the return value from Duration::sleep()

    • Time, WallTime, Duration, WallDuration no longer have virtual members (they were unnecessary), bringing the class size back to 8 (r5745, #1318)

    • Duration::sleep() and WallDuration::sleep() will now re-sleep for the remaining time if interrupted by a signal (r5756, #1232)

  • roscpp

    • Adding a timer callback while the timer manager was waiting for another callback to fire will not longer prevent the new callback from firing until the longer-waiting-one does (r5752, #1439)
    • Calling Timer::stop() or WallTimer::stop() from within their callback no longer deadlocks (r5755)

    • Added "one-shot" timers, which only fire once (r5755, #1387)
    • Fixed a race condition where a single subscription could get multiple connections to the same publisher (r5799, #1538)
    • Fixed a deadlock when ros::shutdown() is called while a service call is happening in another thread. (r5923, #1667)

    • Fixed remapping of /rosout in nodes that automatically publish rosconsole messages to /rosout (r6023)
  • rosbagmigration:

    • Changing operation of checkbag to not care about invalid rules off of the migration path. (r5785)
    • Added option to rosbagmigration/savemsg to extract a message from a bagfile.(r5787)
  • rosmake implementation switched to python, additional options available now r5796

  • rospack: plugins command now prints the package name immediately before the export value, separated by a space (r5820, #1642)

  • rosbash: roscd now works with both stack and package names (r5885, r5888, r5901, r5904, r5906, r5950)

    • NOTE: The roscd pkg functionality was removed and replaced with a more general mechanism. You can now set the environment variable $ROS_LOCATIONS to a colon-separated list of key=path pairs. To get the old functionality, add the following to your bashrc:

      export $ROS_LOCATIONS='pkg=$ROS_PACKAGE_PATH'
    • Fixes to rostcsh to work with stacks (r5914, r5943, r5945, r6027)

0.7.3 (2009-08-19)

  • roslib

    • Fixed ros::package::command() to work in nodes launched remotely (r5609 #1586)
    • Rate: fix to handle backward/forward jumps in simulated time (r5677)
  • roscpp

    • Timers: fix to handle backward/forward jumps in simulated time (r5625, r5677, #1594)
  • rosrecord

    • Fixed export in rosrecord manifest (r5619)
  • rosbagmigration

    • Fixed a bug in rosbagmigration where compatible messages (same md5sum) failed to match on the name of a moved (but not changed) submessage during the application of the rule (r5646)
    • Fixing a fairly substantial bug in rosbagmigration involving targets not being found on convergent rules. (r5686)
  • roswtf: speedup and bug fix (r5612)

  • rospy: force arguments to string for log* APIs (r5614)

  • roslaunch: better error message when no root <launch> element (#1582 r5616 r5617)

  • rospy.Rate: fix to handle backwards/forwards jumps in simulated time (r5622)

  • roslib.rostime: fix to Time/Duration to error if invalid comparisons are made (#1600 r5674)

  • rospack plugins add own package to plugin search, so that a package providing a plugin architecture can also provide plugins for itself (e.g., demo/sample plugins). #1565 r5640 merged from trunk r5676

  • roslaunch: fix to __log args accumulating on respawned processes (r5674 #1595)

  • roscreate: updated to new rosbuild API (r5685)

0.7.2 (2009-08-12)

  • roscpp

    • Fixed subscription callbacks to not starve other callbacks in a certain case. (r5465, r5474, r5483, r5496, #1520)
    • Doxygen fixes for deprecated functions that were not pointing at the correct new locations. (r5452, r5463)
    • Fixed _param:=value on anonymous nodes when __name:= was specified (r5512, #1517)

    • Fixed race condition that would cause a "call to empty boost::function" exception (r5528, #1537)
  • rospy:

    • fixed bug with Time objects jumping to zero with simulated time on publish in certain cases (r5533 #1546)
    • bug fix to numpy_msg (r5562)
    • suppress error message stack trace for common case of connection refused (r5582)
  • rosbagmigration

    • Fixed bug where checkbag incorrectly reports that a bag is up to date if it has moved without md5sum changing (r5480)
    • Fixed bug where messages including messages from other packages where not populating migration rules fully (r5543)
    • Stop displaying redundantly auto-generated rules boundary conditions where multiple scenarios lead to the same parallel generation (r5551)
    • Programmatic use of checkbag/fixbag within a single script now cache initial load of message migrator. This gives huge savings when checking/fixing large numbers bags in batch, such as during testing. (r5552)
    • Added "fixbag_batch.py" script which operates on multiple bags more easily and efficiently (r5561)
  • rosrecord/roslib:

    • fixed major issues with generate_dynamic and Header messages (r5507)
    • better error message in generate_dynamic (r5505 r5506)
    • better cleanup of dynamically generated .py / .pyc files in roslib (r5553)
    • Fixed manifest for rosrecord so external users can use librosrecorder now that it's been broken out from just a header. (r5544)
  • roslib: fixed cache use of ROS_PACKAGE_PATH when it is not set (r5509)

  • rostopic: bug fix to bw command (r5517) and better error reporting (r5508)

  • roswtf: numerous updates, including #1509, better offline behavior, and fix to duplicate node rule (r5450)

  • topic_tools: topic_tools: export MuxSelect header (r5449)

  • rosmsg: bug fix to indentation of constants with rosmsg show (r5515 #1531)

  • roslaunch: roslaunch deps: better handling of bad xml (r5448)

  • rostest: suppress output from master during tests

  • rxtools/rxconsole

    • Fixed assertion on page up/arrow up when the number of messages in the list control is 0 (r5524, #1536)
    • Fixed high CPU utilization when no new messages have arrived (r5523, #1534)
  • rosdep: festival, libusb (r5530)

  • rosstack: bug fixes so that it works again, and handles unversioned stack dependencies. uses ROS_ROOT and ROS_PACKAGE_PATH if ROS_STACK_PATH is not defined. Expose librosstack via package manifest and moving rosstack.h into the package include directory (r5451 r5453 r5454 r5456 r5485 r5569 r5580)

0.7.1 (2009-07-31)

  • roslaunch:

    • fix to printerrlog issue in __init__.py (r5390 r5393)

  • rosdep: implement a one-step 'install' argument (r5394)

  • rosrecord:

    • fix in time scaling related to playback of multiple bags. (r5380)
    • fix in rpath being cleared on install to $ROS_ROOT/bin (r5388)

    • fixed bug over-aggressively resizing a message buffer (r5425)
  • rostopic: better error message in rostopic pub if topic type is invalid (r5395) and fix to print out with rostopic -v (r5407 #1492)

  • rxplot:

    • added missing time import (r5396)
    • fix bad wxwidgets swig wrapper import (r5403)
    • cleanly exit on bad topic name (r5402)
    • fix typo in exception class when invalid topic spec is given (r5401)
    • documentation fix (r5398)
  • rosbuild:

    • fix to dependency management for auto-generated source files (r5391)
    • very probable fix for the delete-a-file problem 5421
  • rospy: ignore spurious exception caused in receive_loop during interpreter shutdown (r5400)

  • rosemacs: minor updates due to rostopic changes (r5389 r5404)

  • rosdep: pygame (r5387) python-clearsilver (r5409) debian updates (r5417) qt3 rosdep (r5428)

  • OS X build: log4cxx and other updates (5386)
  • rosjava: updates for NodeHandle API (r5392), bug fix (r5406)

  • rosclj:

    • Add cached topics and services to rosclj (r5379)
    • bug fixes (5408 r5411 r5412)
  • rosconfig: fix bug that was raising an exception in all non-svk installs (r5382)

  • rosbagmigration: fix bug in the way that rule export paths are handled (r5434)

0.7.0 (2009-07-24)

Publisher latching: Publisher latching lets you automatically send the last message published to new subscribers. This has many uses cases. For example, instead of writing a static map Service, you could have a map Topic. A Topic is preferable as you can then record the map data using rosrecord. It can also enable you to reduce the publication rate for data that is slowly changing as you can ensure that any new subscribers will receive the latest data automatically. Previously this was possible using subscriber callbacks, but this streamlines implementations. By default, rostopic pub now latches, so you can use it to quickly 'latch' a value into the ROS Computation Graph.

Node API deprecated: roscpp's Node API is now deprecated in favor of the NodeHandle API. Some of the NodeHandle methods have been deprecated as well. Please update your code as the Node API will be removed in future releases. Please see the notes below for specific details on NodeHandle methods that have been deprecated.

Major changes

  • roscpp:

    • Old Node API has been deprecated in its entirety, along with a number of NodeHandle methods.

      • NodeHandle::getName() ==> ros::this_node::getName()

      • NodeHandle::getPublishedTopics() ==> ros::master::getTopics()

      • NodeHandle::getNodes() ==> ros::master::getNodes()

      • NodeHandle::getAdvertisedTopics() ==> ros::this_node::getAdvertisedTopics()

      • NodeHandle::getSubscribedTopics() ==> ros::this_node::getSubscribedTopics()

      • NodeHandle::setMasterRetryTimeout() ==> ros::master::setRetryTimeout()

      • NodeHandle::getNode() has no alternative, because Node itself is deprecated.

      • NodeHandle::getParsedArgs() ==> ros::names::getRemappings()

    • Publisher 'latching'. advertise() now has a latch option. The last message published will automatically be sent to new subscribers.
  • rospy:

    • Publisher 'latching'. If you pass in latch=True to a new Publisher object, the last message published will automatically be sent to new subscribers.

    • Publisher() objects can now accept connection headers.
    • experimental support for using numpy array types in messages
    • bug fixes to rospy.Time.now(). This required some major changes to underlying code, so there may be regressions for code that use internal instead of client APIs.
    • rospy.sleep() and rospy.Rate are now more accurate (thanks Kresse

    • rospy.loginfo() now prints to screen.

    • New tutorials:
  • rostopic:

    • new rostopic bw command reports received bandwidth from a topic

    • rostopic pub now uses publisher latching if no rate is specified.
  • rosviz: package has been deprecated, so please update any roslaunch files you have that may be referencing it. rxplot is now part of rxtools and rosgraph/rxgraph are now part of their own rosgraph package.

  • message_filters: New package

    • Contains classes for filtering messages as they arrive, as well as allowing chaining of filters together.
    • Initial implementations include TimeSynchronizer, TimeSequencer, Cache

  • rostest: added 'retry' attribute for tests

  • rosbagmigration: New package to handle moving/renaming/changing messages and restoring bagfiles. This package is not yet API reviewed and still considered experimental. It is functional for the purposes of fixing bagfiles, but the rule-writing procedures may change in the future.

  • rosbuild: New, normalized API, with rosbuild_ prefix for all public macros. Documentation update forthcoming. The old API will be deprecated in the next ROS release.

Minor changes and bug fixes

  • rosmanual: new Package with script for assembling a ROS Users Manual using the ROS Wiki

  • roslaunch:

    • failure to set parameter is now fatal (r5180)
    • log directories are now created with same permissions as parent directory to prevent issues with processes running as root
  • roscpp

    • tcp_nodelay connection header now uses '1' and '0' (r5122)
    • Added NodeHandle::getCallbackQueue() accessor

    • Time now shuts down after ros::ok() becomes false. (#1326)

    • Added variable-type typedefs to C++ message generator. All message members now have a _<name>_type typedef, for use in template code. (#1377)

    • ros::Rate no longer runs slow
  • rospy:

    • Subscriber can now pass TCP_NODELAY option to publisher (r5120 r5121 r5160 #1334)

    • Fixed bug that wasn't allowing multiple Subscribers to same topic use different callback args (r5152 #1337)

    • Missing traceback (r5143 #1347)
    • Removed set_stderr_loglevel, which was unused
    • /rosout is now latching
    • rospy is now much quieter with logging and messages sent to the screen
    • init_node() raises a ROSInitException if ctrl-C occurs before it can complete

  • roslisp
    • integrated message and service autogeneration with build system
    • Publisher latching
  • rosmsg: changed output format of "rosmsg packages" so that it is easier to pass to rosmake

  • rostest: report log file name at end of run (r5178)

  • rosrecord: moved to node handle API

0.6.1 (2009-06-29)

ROS 0.6.1 is a minor bug-fix update. Updating is not essential unless you've encountered the problems mentioned below.

  • rosrecord: fix_md5sums.py executable permission was not set

  • roscpp

    • gcc 4.4 support
    • Added operator= overload on NodeHandle

    • Bug fix for serializing array of times
  • roslisp
    • bug fix for dealing with lookup-hostname-ip-address
    • bug fix for fixed-size arrays

0.6.0 (2009-06-26)

Our big goals for this release were to make bag files more robust, add in UDP transport for C++ users and prepare for our upcoming releases of stacks (e.g. navigation). With previous releases, bag files would become unreadable if the messages they were recorded from were changed. The new bag file format enables bag files to always be read and comes with tools for migrating them in the event of changes. As a result of these updates, all of your existing bag files will need to be updated.

In order to update your bag files after you have rebuilt your system on ROS 0.6, please use

rosrun rosrecord fix_md5sums.py my_file.bag`

You can pass in patterns like *.bag or use more advanced commands like find . -name *.bag | xargs rosrun rosrecord fix_md5sums.py to streamline this update process.

Related to our bag file changes, we've also changed our md5sum calculation for message versions to make it easier to move, rename, and add comments to messages. You can now perform these changes without altering the md5sum.

With this release we are also adding a new UDP transport to the roscpp library. This is still an experimental transport, but it should provide the opportunity to test low-latency message communication. A tutorial demonstrating how to use the UDP transport can be found here listener_unreliable

Another major update is the introduction of the searchParam API to the Parameter Server. In the past, it was difficult to push node down into child namespaces and still have them share common parameters. For example, you may wish to set a parameter like the robot description in a parent namespace and have all children easily read from it. The searchParam API solves this problem by allowing you to search for a parameter in parent namespaces, returning the parameter key that is closest to your node's namespace.

Some of the more minor updates include some roslaunch convenience tools:

Build all packages that a launch file depends on:

rosmake `roslaunch-deps file.launch`

cd to the directory where log files are currently being written:

cd `roslaunch-logs`

The more detailed list of changes is below.

Major changes

  • roscpp

    • UDP support
    • Fixed Timer/WallTimer::hasPending() to take into account events which have already been pushed into the scheduled queue but not yet actually been called.

    • Node::mapName and NodeHandle::mapName have been renamed to Node/NodeHandle::resolveName. mapName still exists but is deprecated

    • Fixed NodeHandle extra remappings to behave the same way normal remappings do.

  • roslib

    • new md5sum generation and friends.
  • rosrecord

    • rosrebag and fix_md5sums.py script allow for automatic migration of bagfiles with new md5ums. The only non-salvagable bagfiles are V1.1 bags for which the message definition has changed.
    • Invocation should be rosrun rosrecord fix_md5sums.py mybagfile.bag. When this completes your bag will be updated, and the original will be stored in mybagfile.bag.old.

    • Other functional invocations are:
      • rosrun rosrecord fix_md5sums.py *.bag

      • find . -name *.bag | xargs rosrun rosrecord fix_md5sums.py

  • Parameter Server: new searchParam API lets you search for parameters in parent namespaces. This simplifies the process of setting parameters where namespaces are being used.

    • in rospy use rospy.search_param

    • in roscpp, use handle.searchParam

  • roslaunch:

    • new --wait option lets you block a launch until roscore is started

    • roslaunch-deps updated to be more rosmake-friendly

    • New roslaunch-logs command to find the directory where roslaunch is currently storing log files

  • rospy: rospy.get_param now accepts a default argument

Bug fixes and minor updates:

  • rosdoc: made it easier to document subsets of packages as well as do doxygen includes.

  • rospy:

    • calls to connect to publishers are now threaded, which prevent rospy from blocking on a faulty publisher.
    • it's now possible to publish AnyMsg instances (performance optimization for rospy nodes that don't deserialize data)

  • rosservice: fixed to work with empty service requests

  • roslaunch:

    • failure to initially launch a process is now considered fatal
    • bug fixes to private <param> setting on <node>s that are unnamed (i.e. do not have a name attribute).

    • continued rearchitecting to support future applications like roslaunch-console
  • rostest: bug fixes to work with roslaunch changes

  • Fixed rosboost-cfg in the case that /opt/ros existed (or ROS_BINDEPS_PATH was set), ROS_BOOST_ROOT was not set, and boost was installed as a system install

0.5.3 (2009-06-15)

  • rosbuild : small fixes to support CMake 2.4.6 (r4860 on trunk).

  • roslaunch : add dependency roslaunch -> rosout (r4819 on trunk).

  • rospy: fix to private command-line params (r4866 on trunk)

0.5.2 (2009-06-12)

Built like so:

  1. copy tags/releases/ros-0.5.1 to tags/rc
  2. check out tags/rc
  3. svn merge -r 4651:4672 -r 4673:4693 -r 4695:4711 -r 4712:4727 -r 4728:4787 https://ros.svn.sourceforge.net/svnroot/ros/trunk .

  4. svn merge -r 4789:4791 https://ros.svn.sourceforge.net/svnroot/ros/trunk .

  5. svn revert -R core/experimental/rosjava
  6. Manually revert changes to core/roscpp/src/libros/node.cpp from r4692, which was accidentally merged above.
  7. Manually revert changes to test/test_roscpp/src/subscribe_n_fast.cpp from r4746, which was accidentally (?) merged above.
  8. resolve conflicts
  9. Fix typo in core/roslib/test/test_roslib_genpy.py (r4801).

The process above was intended to merge 4651:4787, but leave out certain changes:

  • roscpp / test_roscpp / roscpp_tutorials (UDP)
  • rosjava

Include:

  • roslaunch

    • roslaunch now always runs an XML-RPC server that can receive requests for process status
  • rostopic: rostopic pub command for publishing data to a topic

  • rospy:

    • logging improvements including timestamps, more consistent usage within rospy, and message format args for rospy.log*()
  • rosservice: bug fixes

  • roswtf: now warns about nodes that have died or have respawned

  • roscpp

    • Added ros::ok() and ros::shutdown()

    • Fixed constness on methods in a number of handles (Publisher, Subscriber, ServiceServer, ServiceClient)

    • Fixed segfault when combining new and old style callbacks
    • Added ::ConstPtr and ::Ptr to autogenerated ros::Messages

  • rosdep

    • Debian support, improved yaml database
  • rosrecord

    • Various bag file improvements
  • roslisp

    • added integration with asdf build tool
    • hierarchical logging similar to rosconsole
  • rosemacs: can keep track of topics, hertz rates in background; tab-completes topic names in shell.

0.5.1 (2009-05-27)

  • roslaunch: changed location of log files so that logs from the same launch are collected together in the same directory. This makes it easier to find results of a run and prevents log filename recycling.

  • roscpp

    • Timer callbacks allow you to receive a callback at a specified rate. See the "timers" tutorial in the roscpp_tutorials package.
    • Transport hints let you specify TCP_NODELAY per subscription.
    • All nodes now advertise "~get_loggers" and "~set_logger_level" services, which can be called through the rosservice tool.
    • Publish calls should no longer take a large amount of time (spikes up to 100ms were seen).
    • Subscriptions created through the NodeHandle API can no longer block the ROS thread. Queue size should now behave properly.

    • Added Publisher::getNumSubscribers() call

  • rospy

    • refactored much of the genmsg_py code to add dynamic message generators, fix handling of uint8[] types, fix handling of string constants, and add more tests.
    • bug fix to rospy.myargv() handling

    • get_time/get_rostime now throw an exception if init_node has not been called

    • bug fix to rospy.on_shutdown() that was preventing services from being usable during callbacks.
  • rxtools

    • New rxloggerlevel tool which lets you change the logger levels of roscpp nodes while they are running
  • rostopic: rostopic hz now prints "no new messages" if no new messages have been received since last print

  • rosmsg: rosmsg show now properly includes constants

  • rospack

    • profile output marks directories that contain no manifest
    • recover from bad cache location of a package
  • rosbuild: recover from bad cache location of rospack

  • rosrecord: rosplay now complains clearly and exits if asked to play a non-existent .bag file

0.5 (2009-05-06)

  • ROS client libraries (roscpp, rospy, roslisp, rosoct)

    • client libraries now include msg/srv definition within autogenerated source files
    • client libraries now exchange msg/srv definition during connection header handshake. Type validation is still based on md5 sum.
  • roscpp

    • New API. With this release, we're introducing a new API for roscpp. The old (0.4.x) API is still supported, it will be deprecated in a future release, and eventually it will be removed. We recommend that all new code use the new API.
      • Handles. The new API uses the concept of a handle. Where the old API required you to refer to a global instance of ros::Node (either through ros::Node::instance() or g_node), you now create an instance of ros::NodeHandle. Multiple NodeHandles can be created, and each NodeHandle can be assigned its own namespace, which facilitates combination of code from multiple sources into single executables (e.g., mechanism_control, rviz). Topic subscriptions, topic advertisements, service advertisements, and service calls now use handles as well. All handles use the RAII principle to guarantee correct cleanup of their resources. (http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization)

      • Threading. The new API divorces the threading structure from the topic and service structure. Where the old API allocated one thread per advertised service and one thread per subscribed topic, the new API doesn't by default allocate any threads for service/subscription callbacks. You can run all your callbacks in a single thread if you like. We provide hooks for common patterns, such as allocating a number of threads equal to the number of cores.

      • Callbacks. Topic callbacks are now passed (shared) pointers to message objects. Where the old API required you to allocate and use one message object to handle all incoming messages, the new API creates new objects as necessary and passes them into your callbacks. You have the option of keeping old messages around, simply by retaining the pointer that you are passed; the underlying memory will be reclaimed when that pointer goes out of scope.

      • Please read through the 0.5 tutorials at http://pr.willowgarage.com/wiki/ROS/Tutorials, as well as those in the roscpp_tutorials package.

    • Subscriber connect/disconnect callbacks are no longer passed a pointer to a roscpp internal object (Publisher). Instead, they are now passed a SingleSubscriberPublisher object.

    • ros::service::ServiceHandle renamed to ros::ServiceClient.

    • ros::service::createHandle() renamed to ros::service::createClient(). Also now returns a ServiceClient directly, not a shared_ptr (the backing data is still reference counted).

    • New ros::Rate object, for controlling periodic loops. Use a Rate when you want to run a loop at a fixed rate, and have some variable-length computation to perform inside it.

  • rospy

    • added _connection_header field to messages, which provides access to caller ID and extra connection information (topics and services). See rospy_tutorials/006_connection_header for example usage.

    • added on_shutdown(fn) to client API. Enables registration of shutdown handlers before rospy begins shutdown

    • gentools no longer has deprecation warning for Python 2.6 for use of md5 module
    • New rospy.Rate object, for controlling periodic loops. Use a Rate when you want to run a loop at a fixed rate, and have some variable-length computation to perform inside it.

  • roslaunch

    • Powerful new launch-prefix attribute for <node> tags lets you easily run a node in gdb, valgrind, in a separate xterm window, or otherwise affect the launch of a node.

    • you can set ~param (local node parameters) outside of a <node> tag. These parameters will be applied to any nodes within the same scope that are declared after the <param>.

    • you no longer have to specify a name attribute for a <node> tag that contain <param> tags (local node parameters).

    • support for rosparam delete

    • <remap> tags now explicitly override previous <remap> tags if from attributes match

  • rosparam

    • set/load command: behavior of the 'set' and 'load' commands have been changed for dictionaries. Previous behavior for load was to replace the entire namespace with the value of the dictionary. New behavior is to add new keys to the namespace. This makes it easier to have multiple parameter files configure different parameters within the same namespace. Old behavior can be reproduced by using the new 'delete' command, followed by a set/load.
    • delete command: you can now delete parameters explicitly from the command line.
  • master: bug fix: master clears registration data if node registers with new XML-RPC location
  • roswtf: new experimental debugging tool. If you're having a problem, try typing 'roswtf' and see if it can help.

  • rostopic: new -w window size option for rostopic hz

  • log files: The .bag format has changed to V1.2, which contains the full message definition, which will allow better bag longevity. The old format is still supported for reading and playing back, but only the new format is written.

0.4.3 (2009-04-15)

  • rospy:

    • top-level rospy namespace has been cleaned up with many internal APIs now hidden. This required major refactoring of code.
    • message constructors now accept keyword-based initialization of fields, e.g. String(data='mydata')

    • message fields now have default values instead of None when unspecified
    • major bug fixes to time representation and buff_size parameter for Subscriber
    • subscriber now sends 'type' header to publisher for better debugging
    • removed long deprecated isShutdown, signalShutdown aliases
  • rosservice: command-line tool for locating and querying services

  • roslaunch: bug fix to ROS_IP being spuriously set

  • rxplot: bug fix to resolving command-line topic names
  • rosbuild no longer passes -DROS_PACKAGE_REVISION, because it was causing spurious rebuilds (and nobody was using it)
  • gendeps: the output of the --cat option has been changed to use use type name instead of file names.
  • roscpp

    • Duration now keeps nsec positive
    • Turned some nasty runtime errors into compile errors ((T*) -> static_cast<T*>())

    • Nicer error message when two nodes try to connect with different datatypes

0.4.2 (2009-03-26)

  • rosplay displays current log time (both absolute and relative to log start) during playback (-n to disable).
  • rospack provides correct -rpath arguments for external packages located via ROS_BINDEPS_PATH
  • ROS client libraries (roscpp, rospy, roslisp) now support setting node parameters (i.e. ~param_name) via command-line remapping arguments.

  • Service code in roscpp and rosoct now report a type that includes the service name. Not immediately consequential, as service types aren't yet used.
  • Fixed arithmetic operators on WallTime

  • roscpp

    • Fixed a rare self-subscription deadlock
  • roslaunch

    • The <env> tag can now be used with <machine> tags

    • The 'cwd' attribute works with remote processes now
    • Environment variables for local processes are more strict now -- ROS_* environment variables are now strictly set by roslaunch.
    • Improved error reporting and minor bugfixes
  • matplotlib and numpy converted to system dependencies, no longer in 3rdparty. There versions have been downgraded for most platforms.
  • rosrun: fixed bug with preserving escaped arguments

  • rostest: rostest now loads roscore.xml

0.4.1 (2009-03-05)

  • roscpp:

    • TCP_NODELAY option added
    • ROS_VERSION_MINIMUM macro added
    • Improved polling code
  • roslib:

    • WallTime and WallDuration classes

  • roslaunch:

    • improved exit message that points to log file
    • fix to node+ns+param combination
    • improvements to roslaunch errors when hostname->IP mapping

    • 'ns' attribute for rosparam tag
    • roscore now fails to launch if another master is detected
  • rospy:

    • improved error message
    • AnyMsg deserialize now returns self

    • TCP_NODELAY option for Publisher constructor
    • init_node calls are repeatedable so long as arguments are identical
    • disable_signals option for init_node, moved signal registration
  • hztest/rostopic: added off-by-one patches to hz measurement
  • rxplot:

    • use header time if present
    • command-line syntax updates
    • fix min/max y-axis settings for rxplot.
    • toolbar is now modal based on play/pause state
    • fix to pan/zoom state if unpaused
  • rosparam: reorganized code to get around doxygen parsing issue

  • matplotlib: hardy deps on libpng and libfreetype
  • numpy: #850 added --fcompiler=gnu95 to make to resolve fortran compilation issues
  • roslaunch-deps: new tool for verifying package dependency information against .launch files.

  • roscreate-pkg: new tool for package scaffolding inside init_node

  • rosbuild: new CMake macro rospack_download_test_data() for downloading test data during the build

  • rossync: new experimental tool for syncing a ROS package tree from one machine to another identical machine

0.4.0 (2009-02-11)

A stable release of ROS, version 0.4.0, was pushed out tonight with its own tag and branch in the Subversion repository. This includes:

  • the master node (roscore)
  • message-passing library for several languages (C++, Python experimental in Octave and Lisp)
  • command-line tools (rosparam, rostopic, roslaunch, rosrecord, etc.)
  • shell helpers (rosbash)
  • stdout aggregator (rosout)
  • time server (rostime)
  • system inspection tools (rxtools, rosviz)
  • a set of tutorials
  • so much more

Future ROS core development will take place on trunk. This means that a checkout of the stable tag will be... stable :)

We suggest that you delete your existing ROS core installation (or move it aside), and get a checkout of the stable tag:

svn co https://ros.svn.sf.net/svnroot/ros/tags/stable ~/ros/ros

We will only be rolling out bug fixes on the "stable" tag, which should make the system easier to develop against. The major nomenclature / namespace changes of the past few weeks should be essentially over with this release.

Thanks for your patience, TEAM ROS

Wiki: ROS/ChangeList/Pre-1.0 (last edited 2013-12-31 00:27:45 by DirkThomas)