Skip to content

Latest commit

 

History

History
295 lines (187 loc) · 11.5 KB

CHANGELOG.md

File metadata and controls

295 lines (187 loc) · 11.5 KB

Changelog

All notable changes to this project will be documented in this file.

Release Instructions

Steps:

  • Starting on master
  • Edit change log
  • Revise the version numbers in Cargo.toml files
  • Commit the changes
  • Release packages in order:
    • roslibrust_common
    • roslibrust_codegen
    • roslibrust_codegen_macro
    • roslibrust_mock
    • roslibrust_ros1
    • roslibrust_rosbridge
    • roslibrust_zenoh
    • roslibrust
  • Push to master
  • Tag and push tag

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

Added

  • A new Ros trait has been added that all backends implement. This trait behaves like a typical ROS1 node handle, and is easier to work with in generics than directly using TopicProvider or ServiceProvider.

Fixed

Changed

0.12.2 - January 8th, 2025

Added

Fixed

  • roslibrust_serde_rosmsg verison updated resulting in a significant performance boost on serializing large messages. 95% gains measured on 1080p color image serialization. 25% gains measured on roundtrip image benchmarks with ros1 backend.

Changed

0.12.1 - YANKED packaging mistake

0.12.0 - January 7th, 2025

Added

  • roslibrust_mock now provides a basic mock implementation of roslibrust's generic traits for use in building automated testing of nodes.
  • roslibrust_zenoh now proivides a Zenoh client that is compatible with the zenoh-ros1-plugin / zenoh-ros1-bridge
  • roslibrust_ros1 now provides a ROS1 native client as a standalone crate
  • roslibrust_rosbridge now provides a rosbridge client as a standalone crate
  • roslibrust_rosapi now provides a generic interface for the rosapi node compatible with both rosbridge and ros1 backends

Fixed

  • Keeping a ros1::ServiceServer alive no longer keeps the underlying node alive past the last ros1::NodeHandle being dropped.
  • Dropping the last ros1::NodeHandle results in the node cleaning up any advertises, subscriptions, and services with the ROS master.
  • Generated code now includes various lint attributes to suppress warnings.
  • TCPROS header parsing now ignores (the undocumented fields) response_type and request_type and doesn't produce warnings on them.
  • ROS1 native service servers now respect the "persistent" header field, and automatically close the underlying TCP socket after a single request unless persistent is set to 1 in the connection header.

Changed

  • A major reorganization of the internals of roslibrust was done to improve our ability to support multiple backends. As part of the organization the rosbridge backend has been moved under the the rosbridge module, so roslibrust::ClientHandle now becomes roslibrust::rosbridge::ClientHandle.
  • Internal integral type Time changed from u32 to i32 representation to better align with ROS1
  • Conversions between ROS Time and Duration to std::time::Time and std::time::Duration switched to TryFrom as they can be fallible.
  • Main crate Error type has been simplified to leak fewer internal types.
  • roslibrust_codegen is now intended to be accessed by users via the codegen feature flag on roslibrust.
  • roslibrust_codegen_macro is now intended to be accessed by users via the macro feature flag on roslibrust.
  • Code generated by roslibrust_codegen now depends on roslibrust with the codegen feature flag being available to it.

0.11.1

Added

Fixed

  • ROS1 Native Publishers no longer occasionally truncate very large messages when configured with latching

Changed

  • Passing of large messages containing uint8[] arrays is now substantially faster
  • Generated code now relies on serde_bytes to enable faster handling of uint8[] arrays
  • Switched to a fork of serde_rosmsg to enable faster handling of uint8[] arrays

0.11.0

Added

  • ROS1 Native Publishers now support latching behavior
  • The XML RPC client for interacting directly with the rosmaster server has been exposed as a public API
  • Experimental: Initial support for writing generic clients that can be compile time specialized for rosbridge or ros1
  • Can subscribe to any topic and get raw bytes instead of a deserialized message of known type
  • Can publish to any topic and send raw bytes instead of a deserialized message

Fixed

  • ROS1 Native Publishers correctly call unadvertise when dropped
  • ROS1 Native Publishers no longer occasionally truncate very large messages (>5MB)

Changed

  • ROS1 Node Handle's advertise() now requires a latching argument
  • RosBridge ClientHandle [call_service()] is now templated on the service type instead of on both the request and response type. This is to bring it in line with the ROS1 API.
  • RosBridge ClientHandle::Publisher publish() now takes a reference to the message instead of taking ownership. This is to bring it in line with the ROS1 API.
  • The RosServiceType trait used by codegen now requires 'static + Send + Sync this will not affect any generated types, but custom types may have issue.

0.10.2 - August 3rd, 2024

Added

Fixed

  • Bug with message_definitions provided by Publisher in the connection header not being the fully expanded definition.
  • Bug with ROS1 native subscribers not being able to receive messages larger than 4096 bytes.

Changed

0.10.1 - July 5th, 2024

Added

Fixed

  • Bug with ros1 native publishers not parsing connection headers correctly

Changed

0.10.0 - July 5th, 2024

Added

  • ROS1 native service servers and service clients are now supported (experimental feature)

Fixed

  • The reconnection logic for rosbridge clients was fundamentally broken and failing to reconnect. This has been fixed.
  • Generic subscriptions coming from rospy that specified "*" as the md5sum were not properly handled. This has been fixed.

Changed

  • Code generated by roslibrust_codegen now depends only on libraries exposed by roslibrust_codegen. This means that crates that were previously adding dependencies on serde, serde-big-array, and smart-default will no longer need to do so.
  • A significant reworking of the error types in the ROS1 native client was performed to move away from the Box<dyn Error + Send + Sync> pattern and instead use the anyhow crate.

0.9.0 - May 13th, 2024

Added

  • The build.rs example in example_package now correctly informs cargo of filesystem dependencies
  • The advertise_service method in rosbridge/client.rs now accepts closures
  • Expose additional methods useful for custom cases not using package manifests or standard ROS2 setups

Fixed

  • Messages containing fixed sized arrays now successfully serialize and deserialize when using ROS1 native communication

Changed

  • The function interface for top level generation functions in roslibrust_codegen have been changed to include the list of dependent filesystem paths that should trigger re-running code generation. Note: new files added to the search paths will not be automatically detected.
  • [Breaking Change] Codegen now generates fixed sized arrays as arrays [T; N] instead of Vec
  • Removed find_and_generate_ros_messages_relative_to_manifest_dir! this proc_macro was changing the current working directory of the compilation job resulting in a variety of strange compilation behaviors. Build.rs scripts are recommended for use cases requiring fine grained control of message generation.
  • The function interface for top level generation functions in roslibrust_codegen have been changed to include the list of dependent filesystem paths that should trigger re-running code generation. Note: new files added to the search paths will not be automatically detected.
  • Refactor the ros1::node module into separate smaller pieces. This should be invisible externally (and no changes to examples were required).

0.8.0 - October 4th, 2023

Added

  • Experimental support for ROS1 native communication behind the ros1 feature flag
  • Generation of C++ source added via roslibrust_genmsg along with arbitrary languages via passed in templates
  • Generation of Rust source for actions
  • Example for custom generic message usage with rosbridge
  • Example for async native ROS1 listener
  • Example for async native ROS1 publisher

Fixed

  • Incorrect handling of ROS1 message string constants

Changed

  • crawl function in roslibrust_codegen updated to a more flexible API
  • Overhaul of error handling in roslibrust_codegen to bubble errors up, and remove use of panic! and unwrap(). Significantly better error messages should be produced from proc_macros and build.rs files. Direct usages of the API will need to be updated to handle the returned error type.
  • RosMessageType trait now has associated constants for MD5SUM and DEFINITION to enable ROS1 native support. These constants are optional at this time with a default value of "" provided.

0.7.0 - March 13, 2022

Added

  • Support for default field values in ROS2 messages
  • Added public APIs for getting message data from search and for generating Rust code given message data in roslibrust_codegen
  • More useful logs available when running codegen
  • Refactor some of the public APIs and types in roslibrust_codegen (concept of ParsedMessageFile vs MessageFile)
  • Added a method get_md5sum to MessageFile
  • Additional code generation API and macro which excludes ROS_PACKAGE_PATH

Fixed

  • Bug causing single quoted string constants in message files to not be parsed correctly
  • Bug causing float constants in message files to cause compiler errors because f32 = 0; is not allowed in rust
  • Bug where packages were not properly de-duplicated during discovery.

Changed

  • advertise_service and subscribe methods on ClientHandle were changed from needing &mut self to &self

0.6.0 - December 12, 2022

Added

  • Initial support for ROS2 message generation
  • Initial integration testing for ROS2 all basic functionality covered
  • CI testing for Humble

Fixed

  • The generated char type within rust is now u8.
  • Package names are now determined by the name tag within package.xml instead of by directory name

0.5.2 - October 31, 2022

Changed

  • No longer generate empty impl blocks from message structs that have not associated constants
  • Significant improvement to documentation with expanded examples

Fixed

  • advertise_service no longer panics if multiple advertise attempts made to same topic

0.5.1 - September 18, 2022

Fix to docs.rs build.

0.5.0 - September 18, 2022

Added

  • Service server example

Changed

  • Client is now ClientHandle
  • All identifiers in generated code are now escaped with r#
  • advertise_service now returns a ServiceHandle which controls the lifetime of the service

Fixed

  • Fixed issue where the spin and reconnect context would never drop even if there were no more ClientHandles
  • Fixed parsing issue with triple dashes in comments of service files
  • Fixed bug in generation where message properties or constants had names conflicting with Rust reserved keywords

0.4.0 - September 18, 2022

Yanked version due to failed publish

0.3.0 - September 18, 2022

Yanked version due to failed publish

0.2.0 - September 1, 2022

Added

  • Support for service servers
  • Into<> helpers for Time and Duration for tokio and std

Fixed

  • Failure in message generation caused by files without extensions
  • Failure in message generation caused by failing to quote around string constants
  • Failure in message generation caused by bad design of integral types TimeI and DurationI

0.1.0 - August 28, 2022

Initial public release

0.0.3 - Unreleased

0.0.2 - Unreleased

0.0.1 - Unreleased