Skip to content
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

Initial Work on Generic ROS Client #185

Merged
merged 12 commits into from
Aug 6, 2024
Prev Previous commit
Next Next commit
Update README.md
  • Loading branch information
carter committed Aug 6, 2024
commit 77e9e0a2b770abd12383a70d6d60296ed02b817b
24 changes: 13 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@
[![Iron](https://github.com/Carter12s/roslibrust/actions/workflows/iron.yml/badge.svg)](https://github.com/Carter12s/roslibrust/actions/workflows/iron.yml)
[![License:MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

This package aims to provide a convenient intermediary between ROS1's rosbridge and Rust similar to roslibpy and roslibjs.
This package aims to provide a convenient "async first" library for interacting with ROS.

Currently this packaged provides support for both ROS1 native communication (TCPROS) and rosbridge's protocol which provides support for both ROS1 and ROS2 albeit with some overhead.

Information about the protocol can be found [here](https://github.com/RobotWebTools/rosbridge_suite).

Note on documentation:
All information about the crate itself (examples, documentation, tutorials, etc.) lives in the source code and can be viewed on [docs.rs](https://docs.rs/roslibrust).
This readme is for "Meta" information about developing for the crate.

Fully Supported via rosbridge: Noetic, Galactic, Humble.
Fully Supported via rosbridge: Noetic, Galactic, Humble, Iron,

## Code Generation of ROS Messages

Expand All @@ -24,20 +26,14 @@ It's used like this:
roslibrust_codegen_macro::find_and_generate_ros_messages!("assets/ros1_common_interfaces/std_msgs");
```

Code generation can also be done with a script using the same code generation backend called by the macro. See the contents of `example_package` for a detailed example of how this can be done. While the proc_macros are extremely convenient for getting started
Code generation can also be done with a build.rs script using the same code generation backend called by the macro. See the contents of `example_package` for a detailed example of how this can be done. While the proc_macros are extremely convenient for getting started
there is currently no (good) way for a proc_macro to inform the compiler that it needs to be re-generated when an external file
changes. Using a build script requires more setup, but can correctly handling re-building when message files are edited.

## Experimental Support for ROS1 Native

If built with the `ros1` feature, `roslibrust` exports some experimental support for implementing nodes which talk to other ROS1 nodes using the TCPROS protocol without the need for the rosbridge as an intermediary. See `ros1_talker.rs` and `ros1_listener.rs` under `roslibrust/examples` to see usage. This implementation is relatively new, incomplete, and untested. Filing issues on bugs encountered is very appreciated!

See this issue filter for known issues: https://github.com/Carter12s/roslibrust/labels/ros1
Generated message types are compatible with both the ROS1 native and RosBridge backends.

## Roadmap

Rough overview of the features planned to built for this crate in what order:

| Feature | rosbridge | ROS1 | ROS2 |
|------------------------------|-------------------------------------------------------------|------|------|
| examples | ✅ | ✅ | x |
Expand All @@ -47,10 +43,16 @@ Rough overview of the features planned to built for this crate in what order:
| subscribe | ✅ | ✅ | x |
| unsubscribe | ✅ | ✅ | x |
| services | ✅ | ✅ | x |
| actions | (codgen of messages only) |
| actions | (codgen of message types only) |
| rosapi | ✅ | x | x |
| TLS / wss:// | Should be working, untested | N/A | N/A |

Upcoming features in rough order:

- Ability to write generic clients via ROS trait
- In memory backend that can be used for testing
- Support for parameter server

## Contributing

Contribution through reporting of issues encountered and implementation in PRs is welcome! Before landing a large PR with lots of code implemented, please open an issue if there isn't a relevant one already available and chat with a maintainer to make sure the design fits well with all supported platforms and any in-progress implementation efforts.
Expand Down
Loading