High-performance motor control library for RobStride motors with implementations in Python, C++, Rust, and Arduino.
# Environment setup
sudo apt-get install can-utils
sudo ip link set can0 type can bitrate 1000000
sudo ip link set up can0
# Python
cd python && pip install -r requirements.txt
python3 src/position_control.py 11
# C++
cd cpp && make && sudo ./build/robstride-mit-position 11
# Rust
cd rust && cargo run --release -- 11
# Arduino
# Open Arduino IDE, load arduino/simple_joint_control/simple_joint_control.ino
# Select ESP32 Dev Module and upload| Language | Control Frequency | Latency | Memory Usage | Platform |
|---|---|---|---|---|
| Python | 100 Hz | 5ms | 50MB | Linux |
| C++ | 200 Hz | 1ms | 10MB | Linux |
| Rust | 150 Hz | 2ms | 15MB | Linux |
| Arduino | 50-200Hz | 2-20ms | 10-50KB | ESP32/MCU |
├── python/ # Python implementation
├── cpp/ # C++ implementation
├── rust/ # Rust implementation
├── arduino/ # Arduino implementation
└── scripts/ # Build and setup scripts
- RS-00: 17 Nm, 50 rad/s
- RS-01: 17 Nm, 44 rad/s
- RS-02: 17 Nm, 44 rad/s
- RS-03: 60 Nm, 50 rad/s
- RS-04: 120 Nm, 15 rad/s
- RS-05: 17 Nm, 33 rad/s
- RS-06: 60 Nm, 20 rad/s
from src.position_control import PositionControllerMIT
controller = PositionControllerMIT(11)
controller.connect()
controller.set_angle(90.0)CanInterface can;
can.init("can0");
enable_motor(can.socket(), 11);
write_operation_frame(can.socket(), 11, M_PI/2, 30.0, 0.5);let socket = Arc::new(Mutex::new(CanSocket::open("can0")?));
enable_motor(&socket, 11)?;
write_operation_frame(&socket.lock()?, 11, std::f64::consts::PI/2.0, 30.0, 0.5)?;TWAI_CAN_MI_Motor motor(11);
motor.init(CAN_SPEED_1000KBPS);
motor.enable_motor();
motor.send_mit_command(PI/2, 30.0, 0.5);MIT License - see LICENSE file