All notable changes to this project will be documented in this file.
Steps:
- Starting on master
- Edit change log
- Revise the version numbers in Cargo.toml files
- Commit the changes
- Release packages in order: roslibrust_codegen -> roslibrust_codegen_macro -> roslibrust
- Push to master
- Tag and push tag
Note: need to publish with cargo publish --all-features
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- 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 Publishers no longer occasionally truncate very large messages when configured with latching
- 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
- 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
- ROS1 Native Publishers correctly call unadvertise when dropped
- ROS1 Native Publishers no longer occasionally truncate very large messages (>5MB)
- ROS1 Node Handle's advertise() now requires a latching argument
- 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.
- Bug with ros1 native publishers not parsing connection headers correctly
- ROS1 native service servers and service clients are now supported (experimental feature)
- 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.
- 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 theanyhow
crate.
- The build.rs example in example_package now correctly informs cargo of filesystem dependencies
- The
advertise_service
method inrosbridge/client.rs
now accepts closures - Expose additional methods useful for custom cases not using package manifests or standard ROS2 setups
- Messages containing fixed sized arrays now successfully serialize and deserialize when using ROS1 native communication
- 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).
- 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
- Incorrect handling of ROS1 message string constants
crawl
function inroslibrust_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.
- 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
vsMessageFile
) - Added a method
get_md5sum
toMessageFile
- Additional code generation API and macro which excludes
ROS_PACKAGE_PATH
- 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.
advertise_service
andsubscribe
methods on ClientHandle were changed from needing&mut self
to&self
- Initial support for ROS2 message generation
- Initial integration testing for ROS2 all basic functionality covered
- CI testing for Humble
- 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
- No longer generate empty
impl
blocks from message structs that have not associated constants - Significant improvement to documentation with expanded examples
advertise_service
no longer panics if multiple advertise attempts made to same topic
Fix to docs.rs build.
- Service server example
Client
is nowClientHandle
- All identifiers in generated code are now escaped with
r#
advertise_service
now returns aServiceHandle
which controls the lifetime of the service
- Fixed issue where the spin and reconnect context would never drop even if there were no more
ClientHandle
s - 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
Yanked version due to failed publish
Yanked version due to failed publish
- Support for service servers
- Into<> helpers for Time and Duration for tokio and std
- 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
Initial public release