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.1.1.tar.gz (13.7 kB view details)

Uploaded Source

Built Distribution

model_predictive_control-0.1.1-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for model_predictive_control-0.1.1.tar.gz
Algorithm Hash digest
SHA256 5a6f2da7313ab0ac38eae75d7977718e30ab6a849dd366a02ba162dd4c57ddbc
MD5 657ea108759c4f73131c00b543ac5869
BLAKE2b-256 108bde9d0e029454017f6d91e64188be7051b7d08756f97005766e3b507dd784

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for model_predictive_control-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0d8b5c83c8d5a63069cd1da9a03f6a8994a183aa618e5387ba0d296f13d054a3
MD5 196b5a93c8d6571048e142834c7183cc
BLAKE2b-256 981a167cd04d93ec1a2b951c45b9669694ff03e0d574aae118b7a02b54d7aea0

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