from typing import List, Optional, Union
import motion3d as m3d
import numpy as np
from . import dq
from .base import Frame2FrameCalibrationBase
from excalibur.optimization.qcqp import generate_quadratic_cost_matrix
[docs]class DualQuaternionQCQP(Frame2FrameCalibrationBase):
[docs] @staticmethod
def name():
return 'DualQuaternionQCQP'
[docs] def __init__(self, normalize=False):
super().__init__()
self._Mlist = None
self._Q = None
self._normalize = normalize
@property
def Mlist(self):
return self._Mlist
@property
def Q(self):
return self._Q
[docs] def set_Mlist(self, Mlist, weights=None):
self._Mlist = Mlist
self._Q = generate_quadratic_cost_matrix(self._Mlist, weights, normalize=self._normalize)
[docs] def set_Q(self, Q):
self._Mlist = None
self._Q = Q
[docs] def _calibrate(self, **kwargs):
if self._Q is None:
raise RuntimeError("Q is missing")
return dq.optimization.optimize(self._Q, **kwargs)