UFO: A Drone/UAV Programming Library for Rust
source link: https://www.tuicool.com/articles/hit/7FjMZ36
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
:rocket::space_invader: U.F.O: Universal Flying Objects
A Drone/UAV/Quadcopter/RC Plane
programming library for Rust
.
FYI: this is still a WIP, the traits and structs exist, but examples and documentation are lacking... Proceed with caution.
Goals
- Build an extensible modular library that can support an infinite number of UAVs.
- Handle as much of the boiler plate as possible. (Things just work)
- Low Latency Between Drone and Controller
Non-Goals
-
Implement A UI for controlling UAVs (NOTE: I may decide to build a UI later on, but it will be in its own repository)
- For controlling the drones using a keyboard checkout mothership
- Support other types of robotics/RCs, right now this crate is for RC Drones and Planes. This may change at a later date, but not right now.
Supported drones
Right now UFO
supports the following drones:
-
JJRC H61
Feel free to implement controls for your own drone and submit it in a pull request.
Installation and usage
Add this to your Cargo.toml
[dependencies] ufo_rs = "*"
And put something like this in src/main.rs
/// Import std stuff use std::error::Error; use std::time::Duration; use std::thread; // Import traits use ufo_rs::traits::control::*; use ufo_rs::traits::drone::*; // Import controller use ufo_rs::drones::jjrc::h61; fn main() -> Result<(), Box<dyn Error>> { let delay = Duration::from_millis(2000); // Create a new drone driver let mut driver = h61::Driver::new(); // Connect to drone driver.connect()?; // Calibrate drone println!("Calibrating..."); driver.calibrate()?; println!("Sent!"); // Wait 2 seconds thread::sleep(delay); // Take off println!("Taking off..."); driver.take_off()?; println!("Sent!"); // Wait again for 1 second thread::sleep(Duration::from_millis(1000)); // Land println!("Landing..."); driver.land()?; println!("Sent!"); // Ta-dah! Ok(()) }
See the examples/
directory for more information.
Help out
If you want to help with U.F.O, we could use support in two areas:
U.F.O. src/drones/jjrc/h61.rs
Inspiration:
Inspired by:
-
Gobot
: Really cool robotics library for
Go
-
A lack of a drone library for
Rust
- Flying things with code is fun :smile: !
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK