Skip to Content
VectorLib

Coming from LemLib

Your LemLib PROS code, translated to VectorLib line by line.

Names move from camelCase to snake_case, default arguments become builder methods, and device pointers become owned vexide devices. Behaviour does not change.

Side by side

#include "lemlib/api.hpp"

pros::MotorGroup left({-5, 4, -3}, pros::MotorGearset::blue);
pros::MotorGroup right({6, -9, 7}, pros::MotorGearset::blue);
pros::Imu imu(10);
pros::Rotation verticalEnc(-11);
lemlib::TrackingWheel vertical(&verticalEnc, lemlib::Omniwheel::NEW_275, -2.5);

lemlib::Drivetrain drivetrain(&left, &right, 10, lemlib::Omniwheel::NEW_4, 360, 2);
lemlib::OdomSensors sensors(&vertical, nullptr, nullptr, nullptr, &imu);
lemlib::Chassis chassis(drivetrain, lateral, angular, sensors);

void autonomous() {
    chassis.setPose(0, 0, 0);
    chassis.moveToPose(20, 15, 90, 4000);
    chassis.moveToPose(0, 0, 270, 4000, {.forwards = false});
    chassis.waitUntil(10);
    chassis.cancelMotion();
    chassis.turnToHeading(90, 1000, {.direction = lemlib::AngularDirection::CW_CLOCKWISE, .minSpeed = 100});
}

Translation table

LemLib (C++)#include "lemlib/api.hpp"
VectorLib (Rust)use vectorlib::prelude::*;
LemLib (C++)pros::Rotation enc(-11);
VectorLib (Rust)RotationSensor::new(p.port_11, Direction::Reverse)
LemLib (C++)lemlib::OdomSensors s(&v, nullptr, &h, nullptr, &imu);
VectorLib (Rust)OdomSensors::new(Some(v), None, Some(h), None, Some(imu))
LemLib (C++)chassis.calibrate();
VectorLib (Rust)chassis.calibrate(true).await;
LemLib (C++)chassis.setPose(0, 0, 0);
VectorLib (Rust)chassis.set_pose(0.0, 0.0, 0.0, false);
LemLib (C++)chassis.getPose(true, true)
VectorLib (Rust)chassis.get_pose_with(true, true)
LemLib (C++)chassis.moveToPoint(10, 10, 4000, {}, false);
VectorLib (Rust)chassis.move_to_point(10.0, 10.0, 4000).run_async(false).await;
LemLib (C++)ASSET(path_txt); chassis.follow(path_txt, 15, 4000);
VectorLib (Rust)asset!(PATH_TXT = "path.txt"); chassis.follow(&PATH_TXT, 15.0, 4000).await;
LemLib (C++)chassis.waitUntilDone();
VectorLib (Rust)chassis.wait_until_done().await;
LemLib (C++)chassis.cancelAllMotions();
VectorLib (Rust)chassis.cancel_all_motions().await;
LemLib (C++)chassis.arcade(leftY, rightX);
VectorLib (Rust)chassis.arcade(left_y, right_x, false, 0.5);
LemLib (C++)chassis.setBrakeMode(pros::E_MOTOR_BRAKE_HOLD);
VectorLib (Rust)chassis.set_brake_mode(BrakeMode::Hold);
LemLib (C++)lemlib::infoSink()->info("x {}", v);
VectorLib (Rust)info_sink().info(format_args!("x {v}"));
LemLib (C++)pros::delay(10);
VectorLib (Rust)sleep(Duration::from_millis(10)).await;

Reversed motors

PROS reverses a motor with a negative port; vexide uses Direction::Reverse. VectorLib converts PROS's asymmetric move() mapping so a reversed motor still gets exactly the millivolts PROS would send it (95 mV for move(1), not 94).

On this page