Source code for trajoptlib.systemBuilder

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2019 motion <motion@motion-MS-7971>
#
# Distributed under terms of the MIT license.

"""
Code to build dynamical systems
"""
from __future__ import print_function
import numpy as np
from scipy.sparse import coo_matrix

from .trajOptBase import DaeSystem, System


[docs]class GeometricRobot(DaeSystem): """A class that defines a geometric robot, no dynamics involved""" def __init__(self, dim, dimp=0): self.dim = dim self.dimp = dimp DaeSystem.__init__(self, 3 * dim, dim, dimp, dim, 2 * dim)
[docs] def dyn(self, t, x, u, p, y, G, row, col, rec, needg): """Write dynamics function""" y[:] = x[2 * self.dim: 3 * self.dim] - u if needg: G[:self.dim] = 1 G[self.dim:] = -1 if rec: row[:self.dim] = np.arange(self.dim) col[:self.dim] = 1 + 2 * self.dim + np.arange(self.dim) row[self.dim:] = np.arange(self.dim) col[self.dim:] = 1 + 3 * self.dim + np.arange(self.dim)
[docs]class GeometricRobotSystem(System): """A class that implements a geometric robot, second order.""" def __init__(self, dim, dimp=0, ode='Euler'): self.dim = dim self.dimp = dimp System.__init__(self, 2 * dim, dim, dimp, ode)
[docs] def jac_dyn(self, t, x, u, p, h=None): dx = np.concatenate((x[self.dim:], u)) jac = coo_matrix((np.ones(2 * self.dim), (np.arange(2 * self.dim), np.arange(2 * self.dim) + 1 + self.dim))) return dx, jac
[docs] def dyn(self, t, x, u, p=None, h=None): return np.concatenate((x[self.dim:], u))