digraph G { rankdir="LR" "Roll PID"[shape=record label="<f0>Roll PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=35.000] |<f5> [Ki=0.000] |<f6> [Kd=1.000] |<f7> [alpha=0.880]"] "Roll" -> "Roll PID":f1 [label="Constant"] "Yaw Correction" -> "Roll PID":f2 [label="Rotated Y"] "Ts_IMU" -> "Roll PID":f3 [label="Constant"] "Pitch PID"[shape=record label="<f0>Pitch PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=35.000] |<f5> [Ki=0.000] |<f6> [Kd=1.000] |<f7> [alpha=0.880]"] "Pitch trim add" -> "Pitch PID":f1 [label="Sum"] "Yaw Correction" -> "Pitch PID":f2 [label="Rotated X"] "Ts_IMU" -> "Pitch PID":f3 [label="Constant"] "Yaw PID"[shape=record label="<f0>Yaw PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=2.600] |<f5> [Ki=0.000] |<f6> [Kd=0.000] |<f7> [alpha=0.000]"] "Yaw" -> "Yaw PID":f1 [label="Constant"] "Yaw Setpoint" -> "Yaw PID":f2 [label="Constant"] "Ts_VRPN" -> "Yaw PID":f3 [label="Constant"] "Roll Rate PID"[shape=record label="<f0>Roll Rate PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=0.030] |<f5> [Ki=0.000] |<f6> [Kd=0.005] |<f7> [alpha=0.880]"] "Gyro X" -> "Roll Rate PID":f1 [label="Constant"] "Roll PID" -> "Roll Rate PID":f2 [label="Correction"] "Ts_IMU" -> "Roll Rate PID":f3 [label="Constant"] "Pitch Rate PID"[shape=record label="<f0>Pitch Rate PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=0.030] |<f5> [Ki=0.000] |<f6> [Kd=0.005] |<f7> [alpha=0.880]"] "Gyro Y" -> "Pitch Rate PID":f1 [label="Constant"] "Pitch PID" -> "Pitch Rate PID":f2 [label="Correction"] "Ts_IMU" -> "Pitch Rate PID":f3 [label="Constant"] "Yaw Rate PID"[shape=record label="<f0>Yaw Rate PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=0.297] |<f5> [Ki=0.000] |<f6> [Kd=0.000] |<f7> [alpha=0.000]"] "Gyro Z" -> "Yaw Rate PID":f1 [label="Constant"] "Yaw Rate Clamp" -> "Yaw Rate PID":f2 [label="Bounded"] "Ts_IMU" -> "Yaw Rate PID":f3 [label="Constant"] "X pos PID"[shape=record label="<f0>X pos PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=0.550] |<f5> [Ki=0.007] |<f6> [Kd=0.000] |<f7> [alpha=0.000]"] "VRPN X" -> "X pos PID":f1 [label="Constant"] "X Setpoint" -> "X pos PID":f2 [label="Constant"] "Ts_VRPN" -> "X pos PID":f3 [label="Constant"] "Y pos PID"[shape=record label="<f0>Y pos PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=0.550] |<f5> [Ki=0.007] |<f6> [Kd=0.000] |<f7> [alpha=0.000]"] "VRPN Y" -> "Y pos PID":f1 [label="Constant"] "Y Setpoint" -> "Y pos PID":f2 [label="Constant"] "Ts_VRPN" -> "Y pos PID":f3 [label="Constant"] "Altitude PID"[shape=record label="<f0>Altitude PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=-0.098] |<f5> [Ki=-0.008] |<f6> [Kd=-0.074] |<f7> [alpha=0.880]"] "VRPN Alt" -> "Altitude PID":f1 [label="Constant"] "Alt Setpoint" -> "Altitude PID":f2 [label="Constant"] "Ts_VRPN" -> "Altitude PID":f3 [label="Constant"] "X Setpoint"[shape=record label="<f0>X Setpoint |<f1> [Constant=0.000]"] "Y Setpoint"[shape=record label="<f0>Y Setpoint |<f1> [Constant=0.000]"] "Alt Setpoint"[shape=record label="<f0>Alt Setpoint |<f1> [Constant=0.000]"] "Yaw Setpoint"[shape=record label="<f0>Yaw Setpoint |<f1> [Constant=0.000]"] "Throttle trim"[shape=record label="<f0>Throttle trim |<f1> [Constant=0.000]"] "T trim add"[shape=record label="<f0>T trim add |<f1> --\>Summand 1 |<f2> --\>Summand 2"] "Altitude PID" -> "T trim add":f1 [label="Correction"] "Throttle trim" -> "T trim add":f2 [label="Constant"] "Pitch"[shape=record label="<f0>Pitch |<f1> [Constant=0.000]"] "Roll"[shape=record label="<f0>Roll |<f1> [Constant=0.000]"] "Yaw"[shape=record label="<f0>Yaw |<f1> [Constant=0.000]"] "Lidar"[shape=record label="<f0>Lidar |<f1> [Constant=0.000]"] "Flow Vel X"[shape=record label="<f0>Flow Vel X |<f1> [Constant=0.000]"] "Flow Vel Y"[shape=record label="<f0>Flow Vel Y |<f1> [Constant=0.000]"] "Flow Vel X Filt"[shape=record label="<f0>Flow Vel X Filt |<f1> [Constant=0.000]"] "Flow Vel Y Filt"[shape=record label="<f0>Flow Vel Y Filt |<f1> [Constant=0.000]"] "Flow Quality"[shape=record label="<f0>Flow Quality |<f1> [Constant=0.000]"] "Pitch trim"[shape=record label="<f0>Pitch trim |<f1> [Constant=0.045]"] "Pitch trim add"[shape=record label="<f0>Pitch trim add |<f1> --\>Summand 1 |<f2> --\>Summand 2"] "Pitch trim" -> "Pitch trim add":f1 [label="Constant"] "Pitch" -> "Pitch trim add":f2 [label="Constant"] "Gyro Y"[shape=record label="<f0>Gyro Y |<f1> [Constant=0.000]"] "Gyro X"[shape=record label="<f0>Gyro X |<f1> [Constant=0.000]"] "Gyro Z"[shape=record label="<f0>Gyro Z |<f1> [Constant=0.000]"] "P PWM Clamp"[shape=record label="<f0>P PWM Clamp |<f1> --\>Bounds in |<f2> [Min=-20000.000] |<f3> [Max=20000.000]"] "Pitch Rate PID" -> "P PWM Clamp":f1 [label="Correction"] "R PWM Clamp"[shape=record label="<f0>R PWM Clamp |<f1> --\>Bounds in |<f2> [Min=-20000.000] |<f3> [Max=20000.000]"] "Roll Rate PID" -> "R PWM Clamp":f1 [label="Correction"] "Y PWM Clamp"[shape=record label="<f0>Y PWM Clamp |<f1> --\>Bounds in |<f2> [Min=-20000.000] |<f3> [Max=20000.000]"] "Yaw Rate PID" -> "Y PWM Clamp":f1 [label="Correction"] "Yaw Rate Clamp"[shape=record label="<f0>Yaw Rate Clamp |<f1> --\>Bounds in |<f2> [Min=-1.500] |<f3> [Max=1.500]"] "Yaw PID" -> "Yaw Rate Clamp":f1 [label="Correction"] "VRPN X"[shape=record label="<f0>VRPN X |<f1> [Constant=0.000]"] "VRPN Y"[shape=record label="<f0>VRPN Y |<f1> [Constant=0.000]"] "VRPN Alt"[shape=record label="<f0>VRPN Alt |<f1> [Constant=0.000]"] "VRPN Pitch"[shape=record label="<f0>VRPN Pitch |<f1> [Constant=0.000]"] "VRPN Roll"[shape=record label="<f0>VRPN Roll |<f1> [Constant=0.000]"] "RC Pitch"[shape=record label="<f0>RC Pitch |<f1> [Constant=0.000]"] "RC Roll"[shape=record label="<f0>RC Roll |<f1> [Constant=0.000]"] "RC Yaw"[shape=record label="<f0>RC Yaw |<f1> [Constant=0.000]"] "RC Throttle"[shape=record label="<f0>RC Throttle |<f1> [Constant=0.000]"] "X Vel PID"[shape=record label="<f0>X Vel PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=-0.100] |<f5> [Ki=0.000] |<f6> [Kd=-0.020] |<f7> [alpha=0.000]"] "X Vel" -> "X Vel PID":f1 [label="Correction"] "X Vel Clamp" -> "X Vel PID":f2 [label="Bounded"] "Ts_VRPN" -> "X Vel PID":f3 [label="Constant"] "Y Vel PID"[shape=record label="<f0>Y Vel PID |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=0.100] |<f5> [Ki=0.000] |<f6> [Kd=0.020] |<f7> [alpha=0.000]"] "Y Vel" -> "Y Vel PID":f1 [label="Correction"] "Y vel Clamp" -> "Y Vel PID":f2 [label="Bounded"] "Ts_VRPN" -> "Y Vel PID":f3 [label="Constant"] "X Vel"[shape=record label="<f0>X Vel |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=0.000] |<f5> [Ki=0.000] |<f6> [Kd=-1.000] |<f7> [alpha=0.880]"] "VRPN X" -> "X Vel":f1 [label="Constant"] "zero" -> "X Vel":f2 [label="Constant"] "Ts_VRPN" -> "X Vel":f3 [label="Constant"] "Y Vel"[shape=record label="<f0>Y Vel |<f1> --\>Cur point |<f2> --\>Setpoint |<f3> --\>dt |<f4> [Kp=0.000] |<f5> [Ki=0.000] |<f6> [Kd=-1.000] |<f7> [alpha=0.880]"] "VRPN Y" -> "Y Vel":f1 [label="Constant"] "zero" -> "Y Vel":f2 [label="Constant"] "Ts_VRPN" -> "Y Vel":f3 [label="Constant"] "X Vel Clamp"[shape=record label="<f0>X Vel Clamp |<f1> --\>Bounds in |<f2> [Min=-2.000] |<f3> [Max=2.000]"] "X pos PID" -> "X Vel Clamp":f1 [label="Correction"] "Y vel Clamp"[shape=record label="<f0>Y vel Clamp |<f1> --\>Bounds in |<f2> [Min=-2.000] |<f3> [Max=2.000]"] "Y pos PID" -> "Y vel Clamp":f1 [label="Correction"] "Yaw Correction"[shape=record label="<f0>Yaw Correction |<f1> --\>Current Yaw |<f2> --\>X Position |<f3> --\>Y Position"] "Yaw" -> "Yaw Correction":f1 [label="Constant"] "X Vel PID" -> "Yaw Correction":f2 [label="Correction"] "Y Vel PID" -> "Yaw Correction":f3 [label="Correction"] "OF Offset Angle"[shape=record label="<f0>OF Offset Angle |<f1> --\>Current Yaw |<f2> --\>X Position |<f3> --\>Y Position"] "Yaw" -> "OF Offset Angle":f1 [label="Constant"] "Flow Vel X" -> "OF Offset Angle":f2 [label="Constant"] "Flow Vel Y" -> "OF Offset Angle":f3 [label="Constant"] "OF Integrate X"[shape=record label="<f0>OF Integrate X |<f1> --\>Integrator In |<f2> --\>Integrator dt"] "OF Offset Angle" -> "OF Integrate X":f1 [label="Rotated X"] "Ts_IMU" -> "OF Integrate X":f2 [label="Constant"] "OF Integrate Y"[shape=record label="<f0>OF Integrate Y |<f1> --\>Integrator In |<f2> --\>Integrator dt"] "OF Offset Angle" -> "OF Integrate Y":f1 [label="Rotated Y"] "Ts_IMU" -> "OF Integrate Y":f2 [label="Constant"] "OF Trim X"[shape=record label="<f0>OF Trim X |<f1> [Constant=0.000]"] "OF Trim Y"[shape=record label="<f0>OF Trim Y |<f1> [Constant=0.000]"] "OF X Trim Add"[shape=record label="<f0>OF X Trim Add |<f1> --\>Summand 1 |<f2> --\>Summand 2"] "OF Integrate X" -> "OF X Trim Add":f1 [label="Integrated"] "OF Trim X" -> "OF X Trim Add":f2 [label="Constant"] "OF Y Trim Add"[shape=record label="<f0>OF Y Trim Add |<f1> --\>Summand 1 |<f2> --\>Summand 2"] "OF Integrate Y" -> "OF Y Trim Add":f1 [label="Integrated"] "OF Trim Y" -> "OF Y Trim Add":f2 [label="Constant"] "PSI Dot"[shape=record label="<f0>PSI Dot |<f1> [Constant=0.000]"] "PSI Dot Offset"[shape=record label="<f0>PSI Dot Offset |<f1> [Constant=0.000]"] "PSI Dot Sum"[shape=record label="<f0>PSI Dot Sum |<f1> --\>Summand 1 |<f2> --\>Summand 2"] "PSI Dot" -> "PSI Dot Sum":f1 [label="Constant"] "PSI Dot Offset" -> "PSI Dot Sum":f2 [label="Constant"] "PSI Angle"[shape=record label="<f0>PSI Angle |<f1> --\>Integrator In |<f2> --\>Integrator dt"] "PSI Dot Sum" -> "PSI Angle":f1 [label="Sum"] "Ts_IMU" -> "PSI Angle":f2 [label="Constant"] "PSI Angle Offset"[shape=record label="<f0>PSI Angle Offset |<f1> [Constant=0.000]"] "PSI Sum"[shape=record label="<f0>PSI Sum |<f1> --\>Summand 1 |<f2> --\>Summand 2"] "PSI Angle" -> "PSI Sum":f1 [label="Integrated"] "PSI Angle Offset" -> "PSI Sum":f2 [label="Constant"] "Mag Yaw"[shape=record label="<f0>Mag Yaw |<f1> [Constant=0.000]"] "Signal Mixer"[shape=record label="<f0>Signal Mixer |<f1> --\>Throttle |<f2> --\>Pitch |<f3> --\>Roll |<f4> --\>Yaw"] "T trim add" -> "Signal Mixer":f1 [label="Sum"] "P PWM Clamp" -> "Signal Mixer":f2 [label="Bounded"] "R PWM Clamp" -> "Signal Mixer":f3 [label="Bounded"] "Y PWM Clamp" -> "Signal Mixer":f4 [label="Bounded"] "Ts_IMU"[shape=record label="<f0>Ts_IMU |<f1> [Constant=0.005]"] "Ts_VRPN"[shape=record label="<f0>Ts_VRPN |<f1> [Constant=0.040]"] "zero"[shape=record label="<f0>zero |<f1> [Constant=0.000]"] }