use std::cell::RefCell;
use std::rc::Rc;
use std::time::Duration;
use nalgebra::Vector3;
use rubullet::Mode::Gui;
use rubullet::PhysicsClient;
pub enum FrankaEnvironment {
Simulation(Box<FrankaSimEnvironment>),
Real(Box<FrankaRealEnvironment>),
}
pub struct FrankaSimEnvironment {
pub client: Rc<RefCell<PhysicsClient>>,
pub time_step: Duration,
}
impl Default for FrankaSimEnvironment {
fn default() -> Self {
Self::new(Duration::from_secs_f64(0.001))
}
}
impl FrankaSimEnvironment {
pub(crate) fn new(time_step: Duration) -> FrankaSimEnvironment {
let client = Rc::new(RefCell::new(PhysicsClient::connect(Gui).unwrap()));
client
.borrow_mut()
.set_gravity(Vector3::new(0.0, 0.0, -9.81));
client.borrow_mut().set_time_step(time_step);
client
.borrow_mut()
.set_additional_search_path("../rubullet-github/bullet3/libbullet3/data")
.unwrap();
FrankaSimEnvironment { client, time_step }
}
}
pub struct FrankaRealEnvironment {}
impl FrankaRealEnvironment {
pub(crate) fn new() -> FrankaRealEnvironment {
FrankaRealEnvironment {}
}
}