Crates.io | rubullet |
lib.rs | rubullet |
version | 0.1.0-alpha-3 |
source | src |
created_at | 2021-03-03 13:54:15.34246 |
updated_at | 2021-06-09 06:35:10.823259 |
description | Rust interface to the Bullet Physics SDK simmilar to PyBullet |
homepage | |
repository | https://github.com/neachdainn/rubullet |
max_upload_size | |
id | 363195 |
size | 501,516 |
RuBullet is a Rust implementation of PyBullet. In other words, it uses the Bullet3 C API in order to expose a functionality that is similar to PyBullet. Development is ongoing and functionality is currently limited.
Right now RuBullet should cover most of the basic use cases. It can:
Things which are not implemented yet:
The API is unstable and subject to change.
use std::{thread, time::Duration};
use anyhow::Result;
use nalgebra::{Isometry3, Vector3};
use rubullet::*;
fn main() -> Result<()> {
let mut physics_client = PhysicsClient::connect(Mode::Gui)?;
physics_client.set_additional_search_path("../rubullet-sys/bullet3/libbullet3/data")?;
physics_client.set_gravity(Vector3::new(0.0, 0.0, -10.0));
let _plane_id = physics_client.load_urdf("plane.urdf", Default::default())?;
let cube_start_position = Isometry3::translation(0.0, 0.0, 1.0);
let box_id = physics_client.load_urdf(
"r2d2.urdf",
UrdfOptions {
base_transform: cube_start_position,
..Default::default()
},
)?;
for _ in 0..10000 {
physics_client.step_simulation()?;
thread::sleep(Duration::from_micros(4167));
}
let cube_transform = physics_client.get_base_transform(box_id)?;
println!("{}", cube_transform);
Ok(())
}
The current development happens as a part of marcbone's master thesis. Therefore, merge requests can not be accepted until July 5, 2021. We are disabling merge requests until then which sadly also disables issues. If you find any bugs or have suggestions please write an email to one of the maintainers.
RuBullet is licensed under MIT