Crate syact

source ·
Expand description

syact

Rust Crates.io version syact: rustc 1.68+

Note

Many aspects of the library (for example the documentation) are not fully finished yet! (Though I try to update it as frequent as possible)

A library for all types of components used in robots, including controlls for stepper motors, servo motors and more complex assemblies using said motors. Currently all implementations are made for the raspberry pi, though new implementations for more controllers are currently being made.

Basis library for the sybot_lib

Goal

  • Create an all-in-one library to control motors, read sensors and do basic calculations in rust.
  • Keep it as easy to use as possible
  • Specialize the library for hobbyists and tinkerers
  • Offer options for static aswell as dynamic typings

In Action

Let us assume we want to control a simple stepper motor (in this example a 17HE15_1504_S) with a PWM controller connected to the BCM pins 27 and 19.

Click to show Cargo.toml
# ...

[dependencies]
# Include the library configured for the raspberry pi
syact = { version = "0.11.6", features = [ "rasp" ] } 

# ...

use core::f32::consts::PI;

// Include the library
use syact::prelude::*;

// Pin declerations (BCM on raspberry pi)
const PIN_DIR : u8 = 27;
const PIN_STEP : u8 = 19;

// Define distance and max speed
const DELTA : Delta = Delta(2.0 * PI);
const OMEGA : Omega = Omega(10.0);

fn main() -> Result<(), syact::Error> {
    // Create the controls for a stepper motor
    let mut ctrl = Stepper::new(StepperConst::MOT_17HE15_1504S, PIN_DIR, PIN_STEP);
    // Link the component to a system
    ctrl.write_link(LinkedData { 
        u: 12.0,    // System voltage in volts
        s_f: 1.5    // System safety factor, should be at least 1.0
    }); 
    ctrl.setup()?;

    // Apply some loads
    ctrl.apply_inertia(Inertia(0.2));
    ctrl.apply_force(Force(0.10));

    ctrl.set_omega_max(OMEGA);

    println!("Staring to move");
    ctrl.drive_rel(DELTA, 1.0)?;      // Move the motor
    println!("Distance {}rad with max speed {:?}rad/s done", DELTA, OMEGA);

    Ok(())
}

(Source: stepper_motor)

Features

  • Motors
  • Components
  • Tools
    • Tongs
    • Axial joint
  • Calculation
    • Complex acceleration curves
    • Overloads
    • Forces
    • Inertias
  • Measurements
    • Simple switch
    • Rotary resolver
    • Trait for custom measurements
  • Extendable
  • Unit system
  • Minimal
    • Fully supports no_std environment
    • Available for basic embedded systems
  • Platforms
    • Raspberry Pi and similar
    • Arduino

Issues and requests

If you encounter any issues or if you have any request for new features, feel free to create an issue at the GitHub repo.

Re-exports

Modules

  • Components
  • Collection of structs and functions for controlling Stepper Motors
  • Structs for storing characteristics of stepper motors and devices
  • Functions and Structs for calculating Stepper Motor procedures and operations
  • Functions and Structs for taking measurements with a robot for e.g. position calculation
  • Easy import of the functionalities
  • Self defined units for mathematical operations

Traits

  • A trait that provides a universal setup function

Type Definitions

  • The general error type used in the crate

Derive Macros