Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/acj/webots-rs
Build controllers for the Webots robot simulator in Rust
https://github.com/acj/webots-rs
robots rust webots
Last synced: 11 days ago
JSON representation
Build controllers for the Webots robot simulator in Rust
- Host: GitHub
- URL: https://github.com/acj/webots-rs
- Owner: acj
- License: mit
- Created: 2021-09-03T16:41:47.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-03-16T22:08:17.000Z (8 months ago)
- Last Synced: 2024-04-16T11:45:40.932Z (7 months ago)
- Topics: robots, rust, webots
- Language: Rust
- Homepage:
- Size: 17.6 KB
- Stars: 19
- Watchers: 2
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Webots controllers in Rust
**Status**: experimental
This is a reference project that shows how to build controllers for the [Webots robot simulator](https://cyberbotics.com) using the Rust programming language.
## Getting Started
1. Download and install [Webots](https://cyberbotics.com) for your operating system
1. Install [Rust](https://www.rust-lang.org/learn/get-started) if you haven't already
1. Clone this repository
1. Run `make` to compile the Rust controller and copy it into place
1. Open the `sample_project/worlds/my_first_simulation.wbt` file in Webots
1. Run the simulationYou should see "The Rust controller has started" in the Webots console.
To make changes to the controller, you can edit `src/main.rs` and then run `make` again. You might need to reset the simulation (File > Reset Simulation) or restart Webots to use the updated code.
## How this works
At compile time, I use [bindgen](https://github.com/rust-lang/rust-bindgen) to convert a list of Webots C header files (see `wrapper.h`) into Rust structures and types. Those types form a bridge between the Rust-based controller code and the Webots C library that does the hard work of interacting with the simulation engine. See `build.rs` for more details.
## Contributing
Improvements are welcome. If you have an idea, please open an issue so that we can discuss it.
## TODO
- Improve API safety. While any of the Webots C functions can be called from Rust, many are marked as `unsafe` due to raw pointer usage. I have started wrapping a few of them in Rust functions (see `lib.rs`), but this approach doesn't scale very well given the size of the API.
- More example controllers
- Resolve "not FFI-safe" warnings somehow## License
MIT