Struct franka_interface::experiment::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
Fields
environment: FrankaEnvironment
sim_setup: Box<Sim>
real_setup: Box<Real>
Implementations
sourceimpl 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> !RefUnwindSafe for Experiment<Sim, Real>
impl<Sim, Real> !Send for Experiment<Sim, Real>
impl<Sim, Real> !Sync for Experiment<Sim, Real>
impl<Sim: ?Sized, Real: ?Sized> Unpin for Experiment<Sim, Real>
impl<Sim, Real> !UnwindSafe for Experiment<Sim, Real>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> Pointable for T
impl<T> Pointable for T
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
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 more
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).
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.
fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.