5 stable releases
new 2.1.0 | Apr 13, 2025 |
---|---|
2.0.1 | Mar 1, 2025 |
1.0.1 | Feb 28, 2025 |
#97 in Robotics
67KB
664 lines
vexide-motorgroup
Missing MotorGroup
from VEXCode or PROS? This is a simple implementation of a
MotorGroup
for vexide which allows you to group motors together and control
them as one.
Installation
Add the following to your Cargo.toml
:
[dependencies]
# ... other dependencies
vexide-motorgroup = "2.1.0"
Or if you prefer the command line:
cargo add vexide-motorgroup
Usage
Normally, you would have to set each motor's target and other values
individually even if the motors were physically connected in a drivetrain or
similar, but with MotorGroup
, you can control them as if they were one motor.
Just create a MotorGroup
with a Vec
of Motor
s and use the MotorGroup
methods just like you would with a Motor
. It's that simple!
#![no_std]
#![no_main]
extern crate alloc;
use core::time::Duration;
use alloc::vec;
use vexide_motorgroup::MotorGroup;
use vexide::prelude::*;
#[vexide::main]
async fn main(peripherals: Peripherals) {
// Here's where the magic happens
let mut motor_group = MotorGroup::new(vec![
Motor::new(peripherals.port_1, Gearset::Green, Direction::Forward),
Motor::new(peripherals.port_2, Gearset::Green, Direction::Forward),
]);
// Set the motor group's target to a voltage as if it were a motor
motor_group.set_voltage(5.0).unwrap();
sleep(Duration::from_secs(1)).await;
// Set the motor group's target to a position
motor_group
.set_position_target(Position::from_degrees(90.0), 200)
.unwrap();
sleep(Duration::from_secs(1)).await;
// Set the motor group's target to a velocity
motor_group.set_velocity(100).unwrap();
sleep(Duration::from_secs(1)).await;
// Brake the motor group
motor_group.brake(BrakeMode::Hold).unwrap();
}
Error handling
Read errors
For functions returning values and reading data (i.e., those taking a read-only
reference to self), upon encountering an error accessing any motor, the result
will be a MotorGroupError that contains all the errors encountered during the
operation. Using
MotorGroupError::result
will return the average of all the results that were successfully read.
Write errors
vexide-motorgroup provides two different strategies for handling write errors.
Both of them will return an Err
when any motor returns an error.
WriteErrorStrategy::Ignore
(default): This strategy will ignore errors and continue writing to the other motors.WriteErrorStrategy::Stop
: This strategy will stop writing to the other motors and return the error immediately.
Dependencies
~1.8–2.5MB
~42K SLoC