This project was inspired by PythonRobotics, the desire to learn Rust, and previous work I've done. I am still learning, so please feel free to contribute any way you see fit. Thanks!
Architecturally, the project is a WIP. The vision is to work on algorithms in the following manner (i.e. system modeling -> controls -> path/motion planning -> inertial sensor imitation -> localization -> basic visual sensor imitation -> mapping).
This is generally how data flows to get robots to achieve goals autonomously. We will work on algorithms unintuitively from the bottom to upstream.
NOTE: Since this is the beginning, the program is very volatile and could easily have breaking changes
- There is a simple ODE (Ordinary Differential Equation) solver implementation being from the Runge-Kutta family (Euler all the way up to RK4).
- This is helpful to model systems (kinematics, dynamics, empirical) and find their solution/states.
- Code here
- A base interface (rust trait) to model systems. Code here
- Notable models halfway implemented are the following:
- Rust Installation for your specified OS
- Clone this repo and change your directory into this repo using the command line interface
cargo build --release
- Release build optimizes for storage size and cpu usage
Assumption is you are in the repo directory in the command line interface
Once this repo is more flushed out, these files will be moved to an examples directory
- N Joint 2D Robotic Arm Example
cargo run --release --bin test_n_joint_arm2 configs/examples/animation_n_joint_arm2.toml
- Kinematic Bicycle Model Examples
- Simple Drive Around with Keyboard
cargo run --release --bin test_bicycle_kinematic configs/examples/animation_bicycle.toml configs/examples/bicycle_kinematic.toml
- Drive Around with Keyboard while Recording Path to CSV File
cargo run --release --bin write_back_path configs/examples/animation_bicycle.toml configs/examples/bicycle_kinematic.toml
- Hard coded CSV File
- Read Path from CSV and Path Track with Pure Pursuit
cargo run --release --bin read_bike_path configs/examples/animation_bicycle.toml configs/examples/bicycle_kinematic.toml
- Simple Drive Around with Keyboard
- Base interface for controls
- Base interface for pathtracking as an extension?
- Double check jacobians for all models
- Feedforward control input for all models
- Function returns Result<> instead of the expected values for error handling
- Function arguments have std::option for optional arguments. This will help with default API values.
- Ability to move axis range while plotting for animations.
- Like a panning camera to center around an object
- Multiplot function wrappers to graph multiple plots at the same time in animations
- Need to have mouse point position converted to graph location
- 3D plotting for animations
- Combination of 3D plots and 2D plots
- Utilities for command line argument for binaries
- CSV to SQLite
- Move binaries to examples
- Examples need a generic program flow
- Github workflow