Struct LSSDriver

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

Driver for the LSS servo

Implementations§

Source§

impl LSSDriver

Source

pub fn new(port: &str) -> Result<LSSDriver, LssDriverError>

Create new driver on a serial port with default settings

Default baud_rate is 115200

§Arguments
  • post - Port to use. e.g. COM1 or /dev/ttyACM0
§Example
use lss_driver::LSSDriver;
let mut driver = LSSDriver::new("COM1").unwrap();
Source

pub fn with_baud_rate( port: &str, baud_rate: u32, ) -> Result<LSSDriver, LssDriverError>

Create new driver on a serial port with custom baud rate

§Arguments
  • post - Port to use. e.g. COM1 or /dev/ttyACM0
  • baud_rate - Baudrate. e.g. 115200
§Example
use lss_driver::LSSDriver;
let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
Source

pub fn with_driver(driver: Box<dyn FramedDriver + Send + Sync>) -> LSSDriver

Creates new LSS driver with a custom implementation of the transport

This is used for tests and can be used if you want to reimplement the driver over network

Source

pub async fn reset(&mut self, id: u8) -> Result<(), LssDriverError>

Soft reset This command does a “soft reset” and reverts all commands to those stored in EEPROM

wiki

§Arguments
  • id - ID of servo you want to reset
Source

pub async fn query_id(&mut self, id: u8) -> Result<u8, LssDriverError>

Query value of ID Especially useful with BROADCAST_ID

wiki

§Arguments
  • id - ID of servo you want to control
§Example
use lss_driver::LSSDriver;
async fn async_main(){
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    let id = driver.query_id(lss_driver::BROADCAST_ID).await.unwrap();
}
Source

pub async fn set_id(&mut self, id: u8, new_id: u8) -> Result<(), LssDriverError>

Set value of ID Saved to EEPROM Only takes effect after restart

wiki

§Arguments
  • id - ID of servo you want to control
  • new_id - ID You want that servo to have
Source

pub async fn set_color( &mut self, id: u8, color: LedColor, ) -> Result<(), LssDriverError>

set color for driver with id

§Arguments
  • id - ID of servo you want to control
  • color - Color to set
Source

pub async fn configure_color( &mut self, id: u8, color: LedColor, ) -> Result<(), LssDriverError>

configure color for motor with id (value will be saved)

§Arguments
  • id - ID of servo you want to control
  • color - Color to set
Source

pub async fn query_color(&mut self, id: u8) -> Result<LedColor, LssDriverError>

Query color of servo LED

§Arguments
  • id - ID of servo you want to query
Source

pub async fn move_to_position( &mut self, id: u8, position: f32, ) -> Result<(), LssDriverError>

Move to absolute position in degrees

Supports virtual positions that are more than 360 degrees

§Arguments
  • id - ID of servo you want to control
  • position - Absolute position in degrees
§Example
use lss_driver::LSSDriver;
async fn async_main(){
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    driver.move_to_position(5, 180.0).await;
    driver.move_to_position(5, 480.0).await;
}
Source

pub async fn move_to_position_with_modifier( &mut self, id: u8, position: f32, modifier: CommandModifier, ) -> Result<(), LssDriverError>

Move to absolute position in degrees with modifier

Supports virtual positions that are more than 360 degrees

§Arguments
  • id - ID of servo you want to control
  • position - Absolute position in degrees
  • modifier - Modifier applied to this motion. Look at the type for more info.
§Example
use lss_driver::LSSDriver;
use lss_driver::CommandModifier;
async fn async_main(){
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    driver.move_to_position_with_modifier(5, 180.0, CommandModifier::Timed(2500)).await;
    driver.move_to_position_with_modifier(5, 480.0, CommandModifier::Timed(2500)).await;
}
Source

pub async fn move_to_position_with_modifiers( &mut self, id: u8, position: f32, modifiers: &[CommandModifier], ) -> Result<(), LssDriverError>

Move to absolute position in degrees with multiple modifiers

Supports virtual positions that are more than 360 degrees Be careful about which modifiers are supported together

§Arguments
  • id - ID of servo you want to control
  • position - Absolute position in degrees
  • modifiers - Array of modifiers applied to this motion. Look at the type for more info.
§Example
use lss_driver::LSSDriver;
use lss_driver::CommandModifier;
async fn async_main(){
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    driver.move_to_position_with_modifiers(5, 180.0, &[CommandModifier::Timed(2500), CommandModifier::CurrentHold(400)]).await;
}
Source

pub async fn set_target_position( &mut self, id: u8, position: f32, ) -> Result<(), LssDriverError>

Move to absolute position in degrees

Same as move_to_position

§Arguments
  • id - ID of servo you want to control
  • position - Absolute position in degrees
§Example
use lss_driver::LSSDriver;
async fn async_main(){
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    driver.set_target_position(5, 180.0).await;
    driver.set_target_position(5, 480.0).await;
}
Source

pub async fn query_position(&mut self, id: u8) -> Result<f32, LssDriverError>

Query absolute current position in degrees

Supports virtual positions that are more than 360 degrees

§Arguments
  • id - ID of servo you want to query
Source

pub async fn query_target_position( &mut self, id: u8, ) -> Result<f32, LssDriverError>

Query absolute target position in degrees

Supports virtual positions that are more than 360 degrees

§Arguments
  • id - ID of servo you want to query
Source

pub async fn set_rotation_speed( &mut self, id: u8, speed: f32, ) -> Result<(), LssDriverError>

Set continuous rotation speed in °/s

§Arguments
  • id - ID of servo you want to control
  • speed - Speed in °/s
Source

pub async fn set_rotation_speed_with_modifier( &mut self, id: u8, speed: f32, modifier: CommandModifier, ) -> Result<(), LssDriverError>

Set continuous rotation speed in °/s with modifier

§Arguments
  • id - ID of servo you want to control
  • speed - Speed in °/s
  • modifier - Modifier applied to this motion. Look at the type for more info.
Source

pub async fn query_rotation_speed( &mut self, id: u8, ) -> Result<f32, LssDriverError>

Query absolute rotation speed in °/s

§Arguments
  • id - ID of servo you want to query
Source

pub async fn query_status( &mut self, id: u8, ) -> Result<MotorStatus, LssDriverError>

Query status of a motor

View more on wiki

§Arguments
  • id - ID of servo you want to query
Source

pub async fn query_safety_status( &mut self, id: u8, ) -> Result<SafeModeStatus, LssDriverError>

Query safety status of a motor

View more on wiki

§Arguments
  • id - ID of servo you want to query
Source

pub async fn set_motion_profile( &mut self, id: u8, motion_profile: bool, ) -> Result<(), LssDriverError>

Set motion profile enabled or disabled. If the motion profile is enabled, angular acceleration (AA) and angular deceleration(AD) will have an effect on the motion. Also, SD/S and T modifiers can be used.

With motion profile enabled servos will follow a motion curve With motion profile disabled servos move towards target location at full speed

§Arguments
  • id - ID of servo you want to control
  • motion_profile - set motion profile on/off
Source

pub async fn query_motion_profile( &mut self, id: u8, ) -> Result<bool, LssDriverError>

query motion profile enabled or disabled. If the motion profile is enabled, angular acceleration (AA) and angular deceleration(AD) will have an effect on the motion. Also, SD/S and T modifiers can be used.

With motion profile enabled servos will follow a motion curve With motion profile disabled servos move towards target location at full speed

§Arguments
  • id - ID of servo you want to query
Source

pub async fn set_filter_position_count( &mut self, id: u8, filter_position_count: u8, ) -> Result<(), LssDriverError>

Set filter position count

Change the Filter Position Count value for this session. Affects motion only when motion profile is disabled (EM0)

more info at the wiki

§Arguments
  • id - ID of servo you want to control
  • filter_position_count - default if 5
Source

pub async fn query_filter_position_count( &mut self, id: u8, ) -> Result<u8, LssDriverError>

Query filter position count

Query the Filter Position Count value. Affects motion only when motion profile is disabled (EM0)

more info at the wiki

§Arguments
  • id - ID of servo you want to query
Source

pub async fn set_angular_stiffness( &mut self, id: u8, angular_stiffness: i32, ) -> Result<(), LssDriverError>

Set angular stiffness

Read more about Angular stiffness

§Arguments
  • id - ID of servo you want to control
  • angular_stiffness - value for angular stiffness (-10 to 10) (recommended -4 to 4)
Source

pub async fn query_angular_stiffness( &mut self, id: u8, ) -> Result<i32, LssDriverError>

Query angular stiffness

Read more about Angular stiffness

§Arguments
  • id - ID of servo you want to query
Source

pub async fn set_angular_holding_stiffness( &mut self, id: u8, angular_holding: i32, ) -> Result<(), LssDriverError>

Set angular holding stiffness

Read more about Angular holding stiffness

§Arguments
  • id - ID of servo you want to control
  • angular_holding - value for angular holding stiffness (-10 to 10)
Source

pub async fn query_angular_holding_stiffness( &mut self, id: u8, ) -> Result<i32, LssDriverError>

Query angular holding stiffness

Read more about Angular holding stiffness

§Arguments
  • id - ID of servo you want to control
Source

pub async fn set_angular_acceleration( &mut self, id: u8, angular_acceleration: i32, ) -> Result<(), LssDriverError>

Set angular acceleration in degrees per second squared (°/s2)

Accepts values between 1 and 100. Increments of 10 Only used when motion profile is enabled

Read more on the wiki

§Arguments
  • id - ID of servo you want to control
  • angular_acceleration - value for angular acceleration (1 to 100, Increments 10)
Source

pub async fn query_angular_acceleration( &mut self, id: u8, ) -> Result<i32, LssDriverError>

Query angular acceleration in degrees per second squared (°/s2)

Accepts values between 1 and 100. Increments of 10 Only used when motion profile is enabled

Read more on the wiki

§Arguments
  • id - ID of servo you want to query
Source

pub async fn set_angular_deceleration( &mut self, id: u8, angular_deceleration: i32, ) -> Result<(), LssDriverError>

Set angular deceleration in degrees per second squared (°/s2)

Accepts values between 1 and 100. Increments of 10 Only used when motion profile is enabled

Read more on the wiki

§Arguments
  • id - ID of servo you want to control
  • angular_deceleration - value for angular deceleration (1 to 100, Increments 10)
Source

pub async fn query_angular_deceleration( &mut self, id: u8, ) -> Result<i32, LssDriverError>

Query angular deceleration in degrees per second squared (°/s2)

Accepts values between 1 and 100. Increments of 10 Only used when motion profile is enabled

Read more on the wiki

§Arguments
  • id - ID of servo you want to query
Source

pub async fn set_maximum_motor_duty( &mut self, id: u8, maximum_motor_duty: i32, ) -> Result<(), LssDriverError>

Set maximum motor duty

Accepts values between 255 and 1023 Only used when motion profile is disabled

Read more on the wiki

§Arguments
  • id - ID of servo you want to control
  • maximum_motor_duty - value for maximum motor duty (255 to 1023)
Source

pub async fn query_maximum_motor_duty( &mut self, id: u8, ) -> Result<i32, LssDriverError>

Query maximum motor duty

Accepts values between 255 and 1023 Only used when motion profile is disabled

Read more on the wiki

§Arguments
  • id - ID of servo you want to query
Source

pub async fn set_maximum_speed( &mut self, id: u8, maximum_speed: f32, ) -> Result<(), LssDriverError>

Set maximum speed in degrees per second

Accepts values up to 180.0

Read more on the wiki

§Arguments
  • id - ID of servo you want to control
  • maximum_speed - value for maximum speed
Source

pub async fn query_maximum_speed( &mut self, id: u8, ) -> Result<f32, LssDriverError>

Query maximum speed in degrees per second

Accepts values up to 180.0

Read more on the wiki

§Arguments
  • id - ID of servo you want to query
Source

pub async fn limp(&mut self, id: u8) -> Result<(), LssDriverError>

Disables power to motor allowing it to be back driven

§Arguments
  • id - ID of servo you want to control
Source

pub async fn halt_hold(&mut self, id: u8) -> Result<(), LssDriverError>

Stops any ongoing motor motion and actively holds position

§Arguments
  • id - ID of servo you want to control
Source

pub async fn query_voltage(&mut self, id: u8) -> Result<f32, LssDriverError>

Query voltage of motor in volts

§Arguments
  • id - ID of servo you want to Query
Source

pub async fn query_temperature(&mut self, id: u8) -> Result<f32, LssDriverError>

Query temperature of motor in celsius

§Arguments
  • id - ID of servo you want to Query
Source

pub async fn query_current(&mut self, id: u8) -> Result<f32, LssDriverError>

Query current of motor in Amps

§Arguments
  • id - ID of servo you want to Query
Source

pub async fn query_model(&mut self, id: u8) -> Result<Model, LssDriverError>

Query model string

§Arguments
  • id - ID of servo you want to query
Source

pub async fn query_firmware_version( &mut self, id: u8, ) -> Result<String, LssDriverError>

Query firmware version

§Arguments
  • id - ID of servo you want to query
Source

pub async fn query_serial_number( &mut self, id: u8, ) -> Result<String, LssDriverError>

Query serial number

§Arguments
  • id - ID of servo you want to query
Source

pub async fn set_led_blinking( &mut self, id: u8, blinking_mode: Vec<LedBlinking>, ) -> Result<(), LssDriverError>

Set LED blinking mode

Read more on the wiki

§Arguments
  • id - ID of servo you want to control
  • blinking_mode - Blinking mode desired. Can be combination to make motor blink during multiple modes
Source

pub async fn query_origin_offset( &mut self, id: u8, ) -> Result<f32, LssDriverError>

Query origin offset in degrees

Read more on the wiki

§Arguments
  • id - ID of servo you want to query
§Example
use lss_driver::LSSDriver;

async fn async_main() {
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    let origin_offset = driver.query_origin_offset(5).await;
}
Source

pub async fn query_angular_range( &mut self, id: u8, ) -> Result<f32, LssDriverError>

Query the angular range in degrees

Read more on the wiki

§Arguments
  • id - ID of the servo you want to query

/// # Example

use lss_driver::LSSDriver;

async fn async_main() {
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    let angular_range = driver.query_angular_range(5).await.unwrap();
}
Source

pub async fn set_angular_range( &mut self, id: u8, range: f32, ) -> Result<(), LssDriverError>

Set the angular range in degrees

Read more on the wiki

§Arguments
  • id - ID of the servo you want to control
  • range - Angular range in degrees
§Example
use lss_driver::LSSDriver;

async fn async_main() {
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    driver.set_angular_range(5, 180.0).await;
}
Source

pub async fn query_pwm_position( &mut self, id: u8, ) -> Result<i32, LssDriverError>

Queries the position in µs.

When the position is inside the angular range it will return a value between 500 and 2500, when the position is outside the angular range it will return either -500 or -2500.

Read more on the wiki

§Arguments
  • id - ID of the servo you want to control
§Example
use lss_driver::LSSDriver;

async fn async_main() {
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    let pwm_position = driver.query_pwm_position(5).await.unwrap();
}
Source

pub async fn set_origin_offset( &mut self, id: u8, origin_offset: f32, ) -> Result<(), LssDriverError>

Set origin offset in degrees

Read more on the wiki

§Arguments
  • id - ID of servo you want to control
  • origin_offset - Offset from factory 0 in degrees
§Example
use lss_driver::LSSDriver;

async fn async_main() {
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    driver.set_origin_offset(5, -1.3).await;
}
Source

pub async fn move_to_pwm_position( &mut self, id: u8, position: i32, ) -> Result<(), LssDriverError>

Move to PWM position in µs.

You can use set_angular_range to range.

Read more on the wiki

§Arguments
  • id - ID of the servo you want to control
  • position - Position in µs in the range [500,2500]
§Example
use lss_driver::LSSDriver;

async fn async_main() {
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    driver.move_to_pwm_position(5, 2334).await;
}
Source

pub async fn move_to_pwm_position_with_modifier( &mut self, id: u8, position: i32, modifier: CommandModifier, ) -> Result<(), LssDriverError>

Move to PWM position in µs with modifier.

You can use set_angular_range to range.

Read more on the wiki

§Arguments
  • id - ID of the servo you want to control
  • position - Position in µs in the range [500,2500]
  • modifier - Modifier applied to this motion. Look at the type for more info.
§Example
use lss_driver::{LSSDriver, CommandModifier};

async fn async_main() {
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    driver.move_to_pwm_position_with_modifier(5, 2334, CommandModifier::Speed(750)).await;
}
Source

pub async fn move_to_pwm_position_with_modifiers( &mut self, id: u8, position: i32, modifiers: &[CommandModifier], ) -> Result<(), LssDriverError>

Move to PWM position in µs with modifiers.

You can use set_angular_range to range.

Read more on the wiki

§Arguments
  • id - ID of the servo you want to control
  • position - Position in µs in the range [500,2500]
  • modifiers - Array of modifiers applied to this motion. Look at the type for more info.
§Example
use lss_driver::{LSSDriver, CommandModifier};

async fn async_main() {
    let mut driver = LSSDriver::with_baud_rate("COM1", 115200).unwrap();
    driver.move_to_pwm_position_with_modifiers(5, 2334, &[CommandModifier::Speed(750), CommandModifier::Timed(2500)]).await;
}

Auto Trait Implementations§

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, 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.