3D Double Integrator#

Environment Definition#

[6]:
import logging

import numpy as np

from do_dpc.control_utils.lti_systems import create_3D_double_integrator

# Removes the INFO logging
logging.getLogger().setLevel(logging.WARNING)

noise_config = {"meas_noise_std": np.array([0.005]), "meas_noise_seed": 6473}

env = create_3D_double_integrator(**noise_config)

Training Data Collection#

[7]:
from do_dpc.control_utils.trajectory_collector import collect_trajectory_data
from do_dpc.control_utils.pid_profiles import THREE_D_DOUBLE_INT_PID_COMBO
from do_dpc.utils.plots import plot_training_data

n_samples = 1000

pid_combo = THREE_D_DOUBLE_INT_PID_COMBO

_, m, p = env.get_dims()
training_data = collect_trajectory_data(env, m, p, pid_combo)

plot_training_data(training_data)
Collecting Training Data: 100%|██████████| 1000/1000 [00:00<00:00, 10540.97it/s]
../_images/example_gallery_three_d_double_integrator_4_1.png

Online DPC Application#

[8]:
from tqdm import tqdm
from do_dpc.control_utils.trajectory_collector import TrajectoryCollector
from do_dpc.control_utils.control_structs import Bounds
from do_dpc.dpc.tpc import TPC
from do_dpc.dpc.dpc_structs import DPCParameters

n_sim = 10
traj_col = TrajectoryCollector(m, p, n_sim)
dpc_params = DPCParameters(Q=np.diag([100, 1, 100, 1, 100, 1]), R=0.001 * np.eye(3), tau_p=3, tau_f=3)

ctrl_inst = TPC(dpc_params, training_data)

ctrl_inst.build_optimization_problem()

y_r = np.array([7, 0, 7, 0, 7, 0])
u_r = np.zeros((3,))
ctrl_inst.update_tracking_reference(y_r, u_r)

u_next, y_current, y_prev = np.zeros((m,)), env.step(np.zeros((m,))), env.step(np.zeros((m,)))

for _ in tqdm(range(n_sim), desc="Running Simulation", ncols=80):
    traj_col.store_measurements(y_prev, u_next)
    z_p_current = np.concatenate((y_prev, u_next))
    ctrl_inst.update_past_measurements(z_p_current)
    ctrl_inst.solve()
    u_next = ctrl_inst.get_next_control_action()
    y_prev, y_current = y_current, env.step(u_next)

sim_data = traj_col.get_trajectory_data()
print("Running of the DPC algorithm complete")
Running Simulation: 100%|█████████████████████| 10/10 [00:00<00:00, 6269.51it/s]
Running of the DDPC algorithm complete

Analyse and Data Visualization#

[9]:
plot_training_data(sim_data)
../_images/example_gallery_three_d_double_integrator_8_0.png