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 (PROS, C++)
VectorLib (vexide, Rust)
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).