#[cfg(feature = "devices")]
use rrtk::devices::provided::Differential;
#[cfg(feature = "devices")]
use rrtk::devices::*;
#[cfg(feature = "devices")]
use rrtk::*;
#[cfg(feature = "devices")]
fn format_state(state: AngularState) -> String {
format!(
"[ {} {} {} ]",
state.position.into_inner(),
state.velocity.into_inner(),
state.acceleration.into_inner()
)
}
#[cfg(feature = "devices")]
fn main() {
let mut system = System::<6>::new();
let diff_left = system.new_node().unwrap();
let diff_right = system.new_node().unwrap();
let diff_top = system.new_node().unwrap();
let enc_left = system.new_node().unwrap();
let enc_right = system.new_node().unwrap();
let demo_top = system.new_node().unwrap();
system.connect(diff_left, enc_left);
system.connect(diff_right, enc_right);
system.connect(diff_top, demo_top);
let mut differential = Differential::new(diff_left, diff_right, diff_top);
system.set_state_local(
enc_left,
Some(AngularState::new(
Dimensionless::new(1.0),
InverseSecond::new(2.0),
InverseSecondSquared::new(3.0),
)),
);
system.set_state_local(
enc_right,
Some(AngularState::new(
Dimensionless::new(4.0),
InverseSecond::new(5.0),
InverseSecondSquared::new(6.0),
)),
);
<Differential as DeviceUpdatable<core::convert::Infallible>>::device_update(
&mut differential,
&mut system,
);
let enc_left_state = system.get_state_local(enc_left).unwrap();
let enc_right_state = system.get_state_local(enc_right).unwrap();
let demo_state = system.get_state_connected(demo_top).unwrap();
println!(
"{} + {} = {}",
format_state(enc_left_state),
format_state(enc_right_state),
format_state(demo_state)
);
}
#[cfg(not(feature = "devices"))]
fn main() {
println!(
"Enable the `devices` feature to run this example.\nAssuming you're using Cargo, add the `--features devices` flag to your command."
);
}