diff --git a/PythonClient/airsim/types.py b/PythonClient/airsim/types.py index 6bbbcfbae4..867f221df6 100644 --- a/PythonClient/airsim/types.py +++ b/PythonClient/airsim/types.py @@ -403,4 +403,98 @@ class DistanceSensorData(MsgpackMixin): distance = Quaternionr() min_distance = Quaternionr() max_distance = Quaternionr() - relative_pose = Pose() \ No newline at end of file + relative_pose = Pose() + +class PIDGains(): + """ + Struct to store values of PID gains. Used to transmit controller gain values while instantiating + AngleLevel/AngleRate/Velocity/PositionControllerGains objects. + + Attributes: + kP (float): Proportional gain + kI (float): Integrator gain + kD (float): Derivative gain + """ + def __init__(self, kp, ki, kd): + self.kp = kp + self.ki = ki + self.kd = kd + + def to_list(self): + return [self.kp, self.ki, self.kd] + +class AngleRateControllerGains(): + """ + Struct to contain controller gains used by angle level PID controller + + Attributes: + rollGains (PIDGains): kP, kI, kD for roll axis + pitchGains (PIDGains): kP, kI, kD for pitch axis + yawGains (PIDGains): kP, kI, kD for yaw axis + """ + def __init__(self, rollGains = PIDGains(0.25, 0, 0), + pitchGains = PIDGains(0.25, 0, 0), + yawGains = PIDGains(0.25, 0, 0)): + self.rollGains = rollGains + self.pitchGains = pitchGains + self.yawGains = yawGains + + def to_lists(self): + return [self.rollGains.kp, self.pitchGains.kp, self.yawGains.kp], [self.rollGains.ki, self.pitchGains.ki, self.yawGains.ki], [self.rollGains.kd, self.pitchGains.kd, self.yawGains.kd] + +class AngleLevelControllerGains(): + """ + Struct to contain controller gains used by angle rate PID controller + + Attributes: + rollGains (PIDGains): kP, kI, kD for roll axis + pitchGains (PIDGains): kP, kI, kD for pitch axis + yawGains (PIDGains): kP, kI, kD for yaw axis + """ + def __init__(self, rollGains = PIDGains(2.5, 0, 0), + pitchGains = PIDGains(2.5, 0, 0), + yawGains = PIDGains(2.5, 0, 0)): + self.rollGains = rollGains + self.pitchGains = pitchGains + self.yawGains = yawGains + + def to_lists(self): + return [self.rollGains.kp, self.pitchGains.kp, self.yawGains.kp], [self.rollGains.ki, self.pitchGains.ki, self.yawGains.ki], [self.rollGains.kd, self.pitchGains.kd, self.yawGains.kd] + +class VelocityControllerGains(): + """ + Struct to contain controller gains used by velocity PID controller + + Attributes: + xGains (PIDGains): kP, kI, kD for X axis + yGains (PIDGains): kP, kI, kD for Y axis + zGains (PIDGains): kP, kI, kD for Z axis + """ + def __init__(self, xGains = PIDGains(0.2, 0, 0), + yGains = PIDGains(0.2, 0, 0), + zGains = PIDGains(2.0, 2.0, 0)): + self.xGains = xGains + self.yGains = yGains + self.zGains = zGains + + def to_lists(self): + return [self.xGains.kp, self.yGains.kp, self.zGains.kp], [self.xGains.ki, self.yGains.ki, self.zGains.ki], [self.xGains.kd, self.yGains.kd, self.zGains.kd] + +class PositionControllerGains(): + """ + Struct to contain controller gains used by position PID controller + + Attributes: + xGains (PIDGains): kP, kI, kD for X axis + yGains (PIDGains): kP, kI, kD for Y axis + zGains (PIDGains): kP, kI, kD for Z axis + """ + def __init__(self, xGains = PIDGains(0.25, 0, 0), + yGains = PIDGains(0.25, 0, 0), + zGains = PIDGains(0.25, 0, 0)): + self.xGains = xGains + self.yGains = yGains + self.zGains = zGains + + def to_lists(self): + return [self.xGains.kp, self.yGains.kp, self.zGains.kp], [self.xGains.ki, self.yGains.ki, self.zGains.ki], [self.xGains.kd, self.yGains.kd, self.zGains.kd]