2D Grid Environment with common utils (raytracing) and quadrotor dynamics for quick prototyping. Includes following files:
-
main.py
: Simulates quadrotor maneuvering in 2D grid with 2nd order dynamics executing naive safe control. -
sim_utils.py
: Contains common utility functions for simulator. Ex.get_rot_matrix(angles)
-
simulator.py
: Creates 2D grid simulator and enables basic range sening. Contains Map class (create from txt file), Robot class (stores current and paast state, also instantiates QuadDynamics object) -
evaluate.py
: Contains functions to evaluate safe control methods. -
controller.py
: Controller-related functions for quadrotor cascaded control. (ex. Position, Velocity, Attitude Controller). Mainly use by callinggo_to_position(state, des_pos, param_dict)
. -
dynamics.py
: Contains QuadDynamics class which gives a simple 3d quadrotor dynamics given 2nd order equations of motion. Use by instantiating class and callingself.step_dynamics(state, u)
to update quadrotor state. Based on http://andrew.gibiansky.com/downloads/pdf/Quadcopter%20Dynamics,%20Simulation,%20and%20Control.pdf -
visualize_dynamics.py
: Contains graphing-related functions for dynamics.py. Mainly use for tuning PID controllers.
- Clone repo.
git clone https://github.com/hocherie/2d_grid_playground.git
- Navigate to folder.
cd 2d_grid_playground
- Create conda environment from yml file.
conda env create -f py37_env.yml
python dynamics.py
Robot moves to desired position. (set in main()
)
Uses dynamics from second order equations of motion (acceleration, torque) from dynamics.py
, and cascaded PID controllers for position, velocity, and dynamics inversion (check?) to compute final motor input from controller.py
.
Code first generates trajectory then visualizes.
python main.py
Cherie Ho (cherieh@cs.cmu.edu)