Skip to main content

Robot

Struct Robot 

Source
pub struct Robot { /* private fields */ }
Expand description

A two-motor differential-drive robot controller.

The robot smoothly ramps motor speeds from the current value to the target in a background task. Call drive to set target speeds and stop to decelerate to zero.

§Shutdown

Call shutdown to cancel the background task and stop all motors. The robot also stops motors when dropped, but explicit shutdown is preferred.

Implementations§

Source§

impl Robot

Source

pub fn new( motor_board: Arc<Mutex<dyn MotorDriver>>, config: RobotConfig, ) -> Result<Arc<Self>, RobotError>

Create a new robot with the given motor driver and configuration.

Spawns a background task for smooth motor ramping. The task runs until shutdown is called or the Robot is dropped.

§Errors

Returns RobotError::Motor wrapping MotorError::Init if the configuration is invalid. No controller task or driver writes are started on validation failure; constructing the driver itself may access hardware.

Source

pub async fn drive(&self, left: f32, right: f32) -> Result<(), RobotError>

Set target motor speeds.

Finite values are clamped to [-1.0, 1.0], multiplied by the motor factors from RobotConfig, then clamped again to the supported output range. A non-finite input rejects the entire command without changing targets.

§Errors

Returns RobotError::Shutdown if the robot has been shut down. Returns RobotError::Motor wrapping MotorError::Pwm for a non-finite input, retaining the existing error API.

Source

pub async fn stop(&self) -> Result<(), RobotError>

Set target speeds to zero (motors will ramp down smoothly).

§Errors

Returns RobotError::Shutdown if the robot has been shut down.

Source

pub async fn shutdown(&self)

Cancel the background task and stop all motors immediately.

Auto Trait Implementations§

§

impl !Freeze for Robot

§

impl !RefUnwindSafe for Robot

§

impl !UnwindSafe for Robot

§

impl Forget for Robot

§

impl Send for Robot

§

impl Sync for Robot

§

impl Unpin for Robot

§

impl UnsafeUnpin for Robot

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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more