Skip to main content

Awesome model_predictive_control created by AdityaNG

Project description

model_predictive_control

codecov CI GitHub License PyPI - Version PyPI - Downloads

Python implementation of MPC solver

demo

Install it from PyPI

pip install model_predictive_control

Usage

import numpy as np

from model_predictive_control.cost.trajectory2d_steering_penalty import (
    Traj2DSteeringPenalty,
)
from model_predictive_control.models.bicycle import (
    BicycleModel,
    BicycleModelParams,
)
from model_predictive_control.mpc import MPC

# Initialize the Bicycle Model
params = BicycleModelParams(
    time_step=time_step,
    steering_ratio=13.27,
    wheel_base=2.83972,
    speed_kp=1.0,
    speed_ki=0.1,
    speed_kd=0.05,
    throttle_min=-1.0,
    throttle_max=1.0,
    throttle_gain=5.0,  # Max throttle corresponds to 5m/s^2
)
bicycle_model = BicycleModel(params)

# Define the cost function
cost = Traj2DSteeringPenalty(model=bicycle_model)

# Initialize MPC Controller
horizon = 20
state_dim = 4  # (x, y, theta, velocity)
controls_dim = 2  # (steering_angle, velocity)

mpc = MPC(
    model=bicycle_model,
    cost=cost,
    horizon=horizon,
    state_dim=state_dim,
    controls_dim=controls_dim,
)

# Define initial state (x, y, theta, velocity)
start_state = [0.0, 0.0, 0.0, 1.0]

# Define desired trajectory: moving in a straight line
desired_state_sequence = [[i * 1.0, i * 0.5, 0.0, 1.0] for i in range(horizon)]

# Initial control sequence: assuming zero steering and constant speed
initial_control_sequence = [[0.0, 1.0] for _ in range(horizon)]

# Define control bounds: steering_angle between -0.5 and 0.5 radians,
# velocity between 0.0 and 2.0 m/s
bounds = [[(-np.deg2rad(400), np.deg2rad(400)), (-1.0, 1.0)] for _ in range(horizon)]

# Optimize control inputs using MPC
optimized_control_sequence = mpc.step(
    start_state_tuple=start_state,
    desired_state_sequence=desired_state_sequence,
    initial_control_sequence=initial_control_sequence,
    bounds=bounds,
    max_iters=50,
)

Run the demo with the following

$ python -m model_predictive_control
#or
$ model_predictive_control

Cite

This work was a part of the D³Nav paper. Cite our work if you find it useful

@article{NG2024D3Nav,
  title={D³Nav: Data-Driven Driving Agents for Autonomous Vehicles in Unstructured Traffic},
  author={Aditya NG and Gowri Srinivas},
  journal={The 35th British Machine Vision Conference (BMVC)},
  year={2024},
  url={https://bmvc2024.org/}
}

Development

Read the CONTRIBUTING.md file.

TODO

  • Bicycle Model
  • Drone Model
  • MPC
  • Visualizer Demo
  • MPC Auto-Optimizer: Takes a set of expected vehicle trajectories and the search space of hyperparamters and returns the list of optimal hyperparameters
  • MPC Compiler: Takes the MPC model with a set of expected vehicle trajectories and produces numpy array a mapping from trajectory to control signals. This can be used with a cosine similarity logic to decide on control logic in real time.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

model_predictive_control-0.4.0.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

model_predictive_control-0.4.0-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file model_predictive_control-0.4.0.tar.gz.

File metadata

File hashes

Hashes for model_predictive_control-0.4.0.tar.gz
Algorithm Hash digest
SHA256 5d812faf790f7df54c4308914f30d4757809d6de0a131712fc817942508a8236
MD5 094382a26c0d329cd545a1cbc3e1aa3e
BLAKE2b-256 2dd7bc2ff7874919a90b709a09d4e15d6edbab6582878d8c8517e79dda37efc5

See more details on using hashes here.

File details

Details for the file model_predictive_control-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for model_predictive_control-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e4b5514684a2ea2a1270e7617b0f2cfa12aa63b3041ede965110c6bd968259b0
MD5 90d15777696aac06801226e6e5a8b1f7
BLAKE2b-256 caf50057d3708f50299551bff0e211100e3ebf3448f4f9d766cf0c70b196d26f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page