From 06b0f064c15ae2d6724425e13f2dfea93be34119 Mon Sep 17 00:00:00 2001 From: madratman Date: Wed, 25 Mar 2020 11:28:31 -0700 Subject: [PATCH] [simpleflight] add gain types to types.py --- PythonClient/airsim/types.py | 96 +++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/PythonClient/airsim/types.py b/PythonClient/airsim/types.py index 6bbbcfbae4..44fe5584fe 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: + roll_gains (PIDGains): kP, kI, kD for roll axis + pitch_gains (PIDGains): kP, kI, kD for pitch axis + yaw_gains (PIDGains): kP, kI, kD for yaw axis + """ + def __init__(self, roll_gains = PIDGains(0.25, 0, 0), + pitch_gains = PIDGains(0.25, 0, 0), + yaw_gains = PIDGains(0.25, 0, 0)): + self.roll_gains = roll_gains + self.pitch_gains = pitch_gains + self.yaw_gains = yaw_gains + + def to_lists(self): + return [self.roll_gains.kp, self.pitch_gains.kp, self.yaw_gains.kp], [self.roll_gains.ki, self.pitch_gains.ki, self.yaw_gains.ki], [self.roll_gains.kd, self.pitch_gains.kd, self.yaw_gains.kd] + +class AngleLevelControllerGains(): + """ + Struct to contain controller gains used by angle rate PID controller + + Attributes: + roll_gains (PIDGains): kP, kI, kD for roll axis + pitch_gains (PIDGains): kP, kI, kD for pitch axis + yaw_gains (PIDGains): kP, kI, kD for yaw axis + """ + def __init__(self, roll_gains = PIDGains(2.5, 0, 0), + pitch_gains = PIDGains(2.5, 0, 0), + yaw_gains = PIDGains(2.5, 0, 0)): + self.roll_gains = roll_gains + self.pitch_gains = pitch_gains + self.yaw_gains = yaw_gains + + def to_lists(self): + return [self.roll_gains.kp, self.pitch_gains.kp, self.yaw_gains.kp], [self.roll_gains.ki, self.pitch_gains.ki, self.yaw_gains.ki], [self.roll_gains.kd, self.pitch_gains.kd, self.yaw_gains.kd] + +class VelocityControllerGains(): + """ + Struct to contain controller gains used by velocity PID controller + + Attributes: + x_gains (PIDGains): kP, kI, kD for X axis + y_gains (PIDGains): kP, kI, kD for Y axis + z_gains (PIDGains): kP, kI, kD for Z axis + """ + def __init__(self, x_gains = PIDGains(0.2, 0, 0), + y_gains = PIDGains(0.2, 0, 0), + z_gains = PIDGains(2.0, 2.0, 0)): + self.x_gains = x_gains + self.y_gains = y_gains + self.z_gains = z_gains + + def to_lists(self): + return [self.x_gains.kp, self.y_gains.kp, self.z_gains.kp], [self.x_gains.ki, self.y_gains.ki, self.z_gains.ki], [self.x_gains.kd, self.y_gains.kd, self.z_gains.kd] + +class PositionControllerGains(): + """ + Struct to contain controller gains used by position PID controller + + Attributes: + x_gains (PIDGains): kP, kI, kD for X axis + y_gains (PIDGains): kP, kI, kD for Y axis + z_gains (PIDGains): kP, kI, kD for Z axis + """ + def __init__(self, x_gains = PIDGains(0.25, 0, 0), + y_gains = PIDGains(0.25, 0, 0), + z_gains = PIDGains(0.25, 0, 0)): + self.x_gains = x_gains + self.y_gains = y_gains + self.z_gains = z_gains + + def to_lists(self): + return [self.x_gains.kp, self.y_gains.kp, self.z_gains.kp], [self.x_gains.ki, self.y_gains.ki, self.z_gains.ki], [self.x_gains.kd, self.y_gains.kd, self.z_gains.kd]