-
Notifications
You must be signed in to change notification settings - Fork 6
Add rosidl_generator_rs from the ros2-rust repository #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
* nested messages working * fix array support * add rcl_sys * add author & fix compilation order * readme * format * fix clippy warnings * delete patch * remove leftover build.rs * fix authors * add qos support * add spin & change handle handling * clippy * edit readme * Update README.md * fix message generation issue * remove messages * fix fixed size nested array issue * delete unused files * reset authors * remove rcl_sys * remove remaining authors & revert readme * fix quickstart * fix fixed size array warning * add rosidl_defaults to repos * fix warnings with array generation * register the 'rosidl_generator_rs' * revert message generation to its initial state * add rcl build dependency to rclrs * move spin and spin_once from Node to rclrs * move publisher sleep at the end of the loop * re-add msg to rosidl_generator_rs * add TODO for publisher and subscription lifetime
* fix warnings * update README for Ubuntu 18.04 * Build on Dashing * Build on Eloquent * Build on Foxy * clean in IDL generator * Use foxy in pipeline Co-authored-by: deb0ch <tom@blackfoot.io> Co-authored-by: deb0ch <thomas.de.beauchene@gmail.com>
…ust keywords. (#30)
* Experimental change to build system. Allows IDE to parse dependencies. Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Remove commented code Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Refactoring to workspace layout. Does not compile. Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Revert change to workspace, general CMake tweaks Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Initial re-make of build system Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Fixing warnings within rosidl_generator Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Make sure cargo builds within the correct directory Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Add in checks for ROS 2 version to change the compilation syntax Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Properly query environment variable Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Only bind rcl, rmw, and rcutils Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Re-write to move most of `rclrs_common` to `rclrs` Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Updating/fixing package XML to comply with format 3 schema Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Missed a schema update Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Missed another schema... Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com> * Remove manual crate paths in toml files Distro A, OPSEC #4584. You may have additional rights; please see https://rosmilitary.org/faq/?category=ros-2-license Signed-off-by: Jacob Hassold <jhassold@dcscorp.com>
* Use the ament_cargo build type The rclrs_crate_config_generator is superseded by colcon-ros-cargo. The ament_cmake_export_crates mechanism is subsumed by creating entries in the ament index directly in the rosidl_generator_rs and cargo-ament-build. * Install colcon-cargo and colcon-ros-cargo * Force running pip3 as root * Install cargo-ament-build * Removed no longer needed dependencies * Disable Rolling job * Update README * Update rust.yml * Update README.md Co-authored-by: Esteve Fernandez <esteve@apache.org>
Previously, only messages consisting of basic types and strings were supported. Now, all message types will work, including those that have fields of nested types, bounded types, or arrays. Changes: - The "rsext" library is deleted - Unused messages in "rosidl_generator_rs" are deleted - There is a new package, "rosidl_runtime_rs", see below - The RMW-compatible messages from C, which do not require an extra conversion step, are exposed in addition to the "idiomatic" messages - Publisher and subscription are changed to work with both idiomatic and rmw types, through the unifying `Message` trait On `rosidl_runtime_rs`: This package is the successor of `rclrs_msg_utilities` package, but doesn't have much in common with it anymore. It provides common types and functionality for messages. The `String` and `Sequence` types and their variants in that package essentially wrap C types from the `rosidl_runtime_c` package and C messages generated by the "rosidl_generator_c" package. A number of functions and traits are implemented on these types, so that they feel as ergonomic as possible, for instance, a `seq!` macro for creating a sequence. There is also some documentation and doctests. The memory for the (non-pretty) message types is managed by the C allocator. Not yet implemented: - long double - constants - Services/clients - @verbatim comments - ndarray for sequences/arrays of numeric types - implementing `Eq`, `Ord` and `Hash` when a message contains no floats
… (#138) * Generate Cargo.toml of message crate with an EmPy template, not CMake * Add comment
* feat: obtain interface version from cmake variable Signed-off-by: Daisuke Nishimatsu <border_goldenmarket@yahoo.co.jp> * refactor: append package version into generator arguments file Signed-off-by: Daisuke Nishimatsu <border_goldenmarket@yahoo.co.jp>
* Added support for clients and services
Paths on Windows can contain colons. With rsplit, the drive letter was grouped with the package name.
Message packages containing unbounded sequences of WStrings, like test_msgs, would not compile because of this.
This will produce:
```
impl VariousTypes {
/// binary, hexadecimal and octal constants are also possible
pub const TWO_PLUS_TWO: i8 = 5;
/// Only unbounded strings are possible
pub const PASSWORD: &'static str = "hunter2";
/// As determined by Edward J. Goodwin
pub const PI: f32 = 3.0;
}
```
* Swapped usage of rosidl_cmake over to the new rosidl_pycommon. As of [rosidl 3.3.0](ros2/rosidl@9348ce9), the rosidl_cmake Python module was moved to a new rosidl_pycommon package and the Python module in rosidl_cmake was deprecated. * Support builds from older ROS 2 distros. * Fixed build for rolling * Added `test_depend` conditional inclusion as well. * Swap to a more elegant check * PR Feedback --------- Co-authored-by: Sam Privett <sam@privett.dev>
* add serde big array support
Signed-off-by: Esteve Fernandez <esteve@apache.org>
This reverts commit a64e397990319db39caf79ef7863b21fb2c828ea.
* Add wchar support and .idl example * Undo automatic IDE formatting noise * Added back unused imports to see if this fixes the build * More attempts to fix the weird build failure * Removed the linter tests for auto-generated message source files in `rclrs_example_msgs`. Re-applied some changes removed when root causing. --------- Co-authored-by: Sam Privett <sam@privett.dev>
Signed-off-by: Michael X. Grey <mxgrey@intrinsic.ai>
Signed-off-by: Michael X. Grey <mxgrey@intrinsic.ai>
* Added action template * Added action generation * Added basic create_action_client function * dded action generation * checkin * Fix missing exported pre_field_serde field * Removed extra code * Sketch out action server construction and destruction This follows generally the same pattern as the service server. It required adding a typesupport function to the Action trait and pulling in some more rcl_action bindings. * Fix action typesupport function * Add ActionImpl trait with internal messages and services This is incomplete, since the service types aren't yet being generated. * Split srv.rs.em into idiomatic and rmw template files This results in the exact same file being produced for services, except for some whitespace changes. However, it enables actions to invoke the respective service template for its generation, similar to how the it works for services and their underlying messages. * Generate underlying service definitions for actions Not tested * Add runtime trait to get the UUID from a goal request C++ uses duck typing for this, knowing that for any `Action`, the type `Action::Impl::SendGoalService::Request` will always have a `goal_id` field of type `unique_identifier_msgs::msg::UUID` without having to prove this to the compiler. Rust's generics are more strict, requiring that this be proven using type bounds. The `Request` type is also action-specific as it contains a `goal` field containing the `Goal` message type of the action. We therefore cannot enforce that all `Request`s are a specific type in `rclrs`. This seems most easily represented using associated type bounds on the `SendGoalService` associated type within `ActionImpl`. To avoid introducing to `rosidl_runtime_rs` a circular dependency on message packages like `unique_identifier_msgs`, the `ExtractUuid` trait only operates on a byte array rather than a more nicely typed `UUID` message type. I'll likely revisit this as we introduce more similar bounds on the generated types. * Integrate RMW message methods into ActionImpl Rather than having a bunch of standalone traits implementing various message functions like `ExtractUuid` and `SetAccepted`, with the trait bounds on each associated type in `ActionImpl`, we'll instead add these functions directly to the `ActionImpl` trait. This is simpler on both the rosidl_runtime_rs and the rclrs side. * Add rosidl_runtime_rs::ActionImpl::create_feedback_message() Adds a trait method to create a feedback message given the goal ID and the user-facing feedback message type. Depending on how many times we do this, it may end up valuable to define a GoalUuid type in rosidl_runtime_rs itself. We wouldn't be able to utilize the `RCL_ACTION_UUID_SIZE` constant imported from `rcl_action`, but this is pretty much guaranteed to be 16 forever. Defining this method signature also required inverting the super-trait relationship between Action and ActionImpl. Now ActionImpl is the sub-trait as this gives it access to all of Action's associated types. Action doesn't need to care about anything from ActionImpl (hopefully). * Add GetResultService methods to ActionImpl * Implement ActionImpl trait methods in generator These still don't build without errors, but it's close. * Replace set_result_response_status with create_result_response rclrs needs to be able to generically construct result responses, including the user-defined result field. * Implement client-side trait methods for action messages This adds methods to ActionImpl for creating and accessing action-specific message types. These are needed by the rclrs ActionClient to generically read and write RMW messages. Due to issues with qualified paths in certain places (rust-lang/rust#86935), the generator now refers directly to its service and message types rather than going through associated types of the various traits. This also makes the generated code a little easier to read, with the trait method signatures from rosidl_runtime_rs still enforcing type-safety. * Format the rosidl_runtime_rs::ActionImpl trait * Wrap longs lines in rosidl_generator_rs action.rs This at least makes the template easier to read, but also helps with the generated code. In general, the generated code could actually fit on one line for the function signatures, but it's not a big deal to split it across multiple. * Use idiomatic message types in Action trait This is user-facing and so should use the friendly message types. * Cleanup ActionImpl using type aliases Signed-off-by: Michael X. Grey <grey@openrobotics.org> * Formatting * Switch from std::os::raw::c_void to std::ffi::c_void While these are aliases of each other, we might as well use the more appropriate std::ffi version, as requested by reviewers. * Clean up rosidl_generator_rs's cmake files Some of the variables are present but no longer used. Others were not updated with the action changes. * Add a short doc page on the message generation pipeline This should help newcomers orient themselves around the rosidl_*_rs packages. --------- Signed-off-by: Michael X. Grey <grey@openrobotics.org> Co-authored-by: Esteve Fernandez <esteve@apache.org> Co-authored-by: Michael X. Grey <grey@openrobotics.org>
* Update rclrs vendor_interfaces.py script This updates the vendor_interfaces.py script to also vendor in the action_msgs and unique_identifier_msgs packages. The script is modified to always use a list of package names rather than hard-coding the package names everywhere. * Silence certain clippy lints on generated code In case a user enforces clippy linting on these generated packages, silence expected warnings. This is already the case in rclrs, but should be applied directly to the generated packages for the sake of downstream users. The `clippy::derive_partial_eq_without_eq` lint was already being disabled for the packages vendored by rclrs, but is now moved to the rosidl_generator_rs template instead. This is necessary since we always derive the PartialEq trait, but can't necessary derive Eq, and so don't. The `clippy::upper_case_acronyms` is new and was added to account for message type names being upper-case acrynyms, like unique_identifier_msgs::msg::UUID. * Update vendored message packages This updates the message packages vendored under the rclrs `vendor` module. The vendor_interfaces.py script was used for reproducibility. The existing packages – rcl_interfaces, rosgraph_msgs, and builtin_interfaces – are only modified in that they now use the std::ffi::c_void naming for c_void instead of the std::os::raw::c_void alias and disable certain clippy lints. The action_msgs and unique_identifier_msgs packages are newly added to enable adding action support to rclrs. action_msgs is needed for interaction with action goal info and statuses, and has a dependency on unique_identifier_msgs.
4906190 to
9ce13e4
Compare
|
@ros2-rust/team I've used the following to move the cd ros2_rust
git checkout main
git subtree split -P rosidl_generator_rs -b rosidl_generator_rs-only
cd ..
cd rosidl_rust
checkout -b add-rosidl_generator_rs
git subtree add -P rosidl_generator_rs ../ros2_rust/ HEADBut the history is not linear. If I rebase this branch on top of |
9ce13e4 to
363164c
Compare
|
I've ended up using https://github.com/newren/git-filter-repo to move |
maspe36
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One downside is it seems like the commits all have the same timestamp now? Not a huge problem since the order and count is preserved. Just a minor annoyance
363164c to
0c683f5
Compare
|
@maspe36 I've fixed the timestamps, but like with ros2-rust/rosidl_runtime_rs#2 (comment) I don't think that GitHub will preserve the correct ones when merging this PR, I'll do a manual push on main instead of merging via the PR interface. |
This PR moves the
rosidl_generator_rsfolder fromros2-rust@ 31e4563e2b5a19f62f4841138927a215978bf01c