Source code for udaan.control
import numpy as np
from ..core.defaults import GRAVITY
[docs]
class Gains:
[docs]
def __init__(self, kp=np.zeros(3), kd=np.zeros(3), ki=np.zeros(3)):
self.kp = kp
self.kd = kd
self.ki = ki
return
[docs]
class Controller:
[docs]
def __init__(self):
self.freq = 500.0
self._g = GRAVITY
self._ge3 = np.array([0.0, 0.0, self._g])
self._e1 = np.array([1.0, 0.0, 0.0])
self._e2 = np.array([0.0, 1.0, 0.0])
self._e3 = np.array([0.0, 0.0, 1.0])
self._gravity = np.array([0.0, 0.0, -self._g])
return
[docs]
def compute(self, *args):
raise NotImplementedError
[docs]
class PDController(Controller):
[docs]
def __init__(self, **kwargs):
super().__init__()
self._gains = Gains()
if "kp" in kwargs:
self._gains.kp = kwargs["kp"]
if "kd" in kwargs:
self._gains.kd = kwargs["kd"]
if "setpoint" in kwargs:
self.setpoint = kwargs["setpoint"]
else:
self.setpoint = lambda t: (
np.array([0.0, 0.0, 1.0]),
np.zeros(3),
np.zeros(3),
)
return
[docs]
def compute(self, *args):
t = args[0]
s, ds = args[1][0], args[1][1]
sd, dsd, d2sd = self.setpoint(t)
e = s - sd
de = ds - dsd
u = -self._gains.kp * e - self._gains.kd * de + d2sd
return u
from . import quadrotor as quadrotor # noqa: E402
from . import quadrotor_cspayload as quadrotor_cspayload # noqa: E402
__all__ = [
"Gains",
"Controller",
"PDController",
"quadrotor",
"quadrotor_cspayload",
]