pub struct Experiment<Sim: ?Sized + SimulationSetup, Real: ?Sized + RealSetup> {
pub environment: FrankaEnvironment,
pub sim_setup: Box<Sim>,
pub real_setup: Box<Real>,
}Expand description
Fields§
§environment: FrankaEnvironment§sim_setup: Box<Sim>§real_setup: Box<Real>Implementations§
Source§impl Experiment<dyn SimulationSetup, dyn RealSetup>
impl Experiment<dyn SimulationSetup, dyn RealSetup>
Sourcepub fn new(
mode: Mode,
sim_setup: impl SimulationSetup + 'static,
real_setup: impl RealSetup + 'static,
) -> Experiment<dyn SimulationSetup, dyn RealSetup>
pub fn new( mode: Mode, sim_setup: impl SimulationSetup + 'static, real_setup: impl RealSetup + 'static, ) -> Experiment<dyn SimulationSetup, dyn RealSetup>
Use it to create a new experiment which can either run on the real robot or in the simulation
§Arguments
mode- specify whether to run the experiment in simulation or with a real robotsim_setup- something that implementsSimulationSetup.real_setup- something that implementsRealSetup.
§Example
use franka_interface::experiment::{Experiment, Mode, RealSetup, SimulationSetup};
use franka_interface::types::Vector7;
use franka_interface::RobotArguments;
use std::f64::consts::PI;
use std::path::PathBuf;
struct MySimSetup {}
impl SimulationSetup for MySimSetup {
fn set_franka_urdf_path(&self) -> PathBuf {
"path/to/panda.urdf".into()
}
}
struct MyRealSetup {}
impl RealSetup for MyRealSetup {}
let mut env = Experiment::new(Mode::Simulation, MySimSetup {}, MyRealSetup {});
let mut robot = env.new_robot(RobotArguments {
hostname: "franka".to_string(),
base_pose: None,
initial_config: None,
});
robot.joint_motion(
0.1,
Vector7::from_column_slice(&[1., PI / 4., 0., -2. * PI / 4., 0., PI / 2., -PI / 4.]),
);
println!("{:?}", robot.get_state());Sourcepub fn get_image(&mut self) -> RgbaImage
pub fn get_image(&mut self) -> RgbaImage
returns the current image from the robot. Make sure you implemented get_camera_image
in your RealSetup and SimulationSetup.
Sourcepub fn new_robot(&mut self, config: RobotArguments) -> Robot
pub fn new_robot(&mut self, config: RobotArguments) -> Robot
spawns/connects to a new robot using the RobotArguments
Sourcepub fn is_simulation(&self) -> bool
pub fn is_simulation(&self) -> bool
Query whether the current experiment is run in simulation
Sourcepub fn use_physics_client<F: FnMut(RefMut<'_, PhysicsClient>) -> T, T>(
&mut self,
client_cb: F,
) -> Option<T>
pub fn use_physics_client<F: FnMut(RefMut<'_, PhysicsClient>) -> T, T>( &mut self, client_cb: F, ) -> Option<T>
allows accessing the PhysicsClient in Simulation by defining a closure that takes the PhysicsClient as input. Nothing will happen if the experiment is not run in the simulation
§Return
- In the simulation it will return Some(T) where T is the return type of the client_cb
- Will return None when not executed with the simulation.
Auto Trait Implementations§
impl<Sim, Real> Freeze for Experiment<Sim, Real>
impl<Sim, Real> !RefUnwindSafe for Experiment<Sim, Real>
impl<Sim, Real> !Send for Experiment<Sim, Real>
impl<Sim, Real> !Sync for Experiment<Sim, Real>
impl<Sim, Real> Unpin for Experiment<Sim, Real>
impl<Sim, Real> !UnwindSafe for Experiment<Sim, Real>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.