Experiment

Struct Experiment 

Source
pub struct Experiment<Sim: ?Sized + SimulationSetup, Real: ?Sized + RealSetup> {
    pub environment: FrankaEnvironment,
    pub sim_setup: Box<Sim>,
    pub real_setup: Box<Real>,
}
Expand description

Use it to create a new experiment which can either run on the real robot or in the simulation.

Use new to create an experiment and then use new_robot to create a new robot.

Fields§

§environment: FrankaEnvironment§sim_setup: Box<Sim>§real_setup: Box<Real>

Implementations§

Source§

impl Experiment<dyn SimulationSetup, dyn RealSetup>

Source

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 robot
  • sim_setup - something that implements SimulationSetup.
  • real_setup - something that implements RealSetup.
§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());
Source

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.

Source

pub fn new_robot(&mut self, config: RobotArguments) -> Robot

spawns/connects to a new robot using the RobotArguments

Source

pub fn is_simulation(&self) -> bool

Query whether the current experiment is run in simulation

Source

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>
where Sim: ?Sized, Real: ?Sized,

§

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>
where Sim: ?Sized, Real: ?Sized,

§

impl<Sim, Real> !UnwindSafe for Experiment<Sim, Real>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

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

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V