docs: def ziegler_nichols(self,ku,tu,control_type='pid'):
          '''
              ku = ultimate gain
              tu = period of oscillation at ultimate gain
          '''
          converter = dict(
              p = lambda ku,tu: (.5*ku, 0, 0),
              pi = lambda ku,tu: (.45*ku, 1.2*(.45*ku)/tu, 0),
              pd = lambda ku,tu: (.8*ku, 0, (.8*ku)*tu/8),
              pid = lambda ku,tu: (.6*ku, 2*(.6*ku)/tu, (.6*ku)*tu/8),
              pessen = lambda ku,tu: (.7*ku, 2.5*(.7*ku)/tu, 3*(.7*ku)*tu/20),
              some_overshoot = lambda ku,tu: (.33*ku, 2*(.33*ku)/tu, (.33*ku)*tu/3),
              no_overshoot = lambda ku,tu: (.2*ku, 2*(.2*ku)/tu, (.2*ku)*tu/3)
          )
          self.kp,self.ki,self.kd = converter[control_type.lower()](ku,tu)