<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by lamont-granquist</shortDescription></cause></action><action></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigindev _class='hudson.plugins.git.util.Build'><buildNumber>1453</buildNumber><marked><SHA1>f06780e0d1b987ea87fa48640139c274065afff9</SHA1><branch><SHA1>f06780e0d1b987ea87fa48640139c274065afff9</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>f06780e0d1b987ea87fa48640139c274065afff9</SHA1><branch><SHA1>f06780e0d1b987ea87fa48640139c274065afff9</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>f06780e0d1b987ea87fa48640139c274065afff9</SHA1><branch><SHA1>f06780e0d1b987ea87fa48640139c274065afff9</SHA1><name>refs/remotes/origin/dev</name></branch></lastBuiltRevision><remoteUrl>https://github.com/MuMech/MechJeb2.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://ksp.sarbian.com/jenkins/user/adam.paul.martinez/my-views/view/All/job/MechJeb2-Dev/1453/artifact</artifactsUrl><changesUrl>https://ksp.sarbian.com/jenkins/user/adam.paul.martinez/my-views/view/All/job/MechJeb2-Dev/changes</changesUrl><displayUrl>https://ksp.sarbian.com/jenkins/user/adam.paul.martinez/my-views/view/All/job/MechJeb2-Dev/1453/</displayUrl><testsUrl>https://ksp.sarbian.com/jenkins/user/adam.paul.martinez/my-views/view/All/job/MechJeb2-Dev/1453/testReport</testsUrl></action><artifact><displayPath>MechJeb2-2.14.3.0-1453.zip</displayPath><fileName>MechJeb2-2.14.3.0-1453.zip</fileName><relativePath>MechJeb2-2.14.3.0-1453.zip</relativePath></artifact><building>false</building><displayName>#1453</displayName><duration>20928</duration><estimatedDuration>21549</estimatedDuration><fullDisplayName>MechJeb2-Dev #1453</fullDisplayName><id>1453</id><inProgress>false</inProgress><keepLog>false</keepLog><number>1453</number><queueId>2126</queueId><result>SUCCESS</result><timestamp>1749072113733</timestamp><url>https://ksp.sarbian.com/jenkins/user/adam.paul.martinez/my-views/view/All/job/MechJeb2-Dev/1453/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/AttitudeControllers/LQRController.cs</affectedPath><affectedPath>MechJeb2/AttitudeControllers/DirectionTracker.cs</affectedPath><affectedPath>MechJeb2/MechJebModuleAttitudeController.cs</affectedPath><affectedPath>MechJebLib/Primitives/M3.cs</affectedPath><affectedPath>MechJebLib/MechJebLib.csproj</affectedPath><affectedPath>MechJebLib/Control/MultiVariableGrid.cs</affectedPath><affectedPath>MechJebLib/Control/LQRLoop1.cs</affectedPath><affectedPath>MechJeb2.sln.DotSettings</affectedPath><affectedPath>MechJebLib/Control/MultiVariableInterpolator.cs</affectedPath><affectedPath>MechJeb2/MechJeb2.csproj</affectedPath><affectedPath>MechJeb2/AttitudeControllers/BetterController.cs</affectedPath><affectedPath>MechJeb2/MechJebModuleAttitudeAdjustment.cs</affectedPath><commitId>f527fad64d7825df829e6402cb9049bbcce558e1</commitId><timestamp>1749071501000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Add DirectionTracker and wire it up to BetterController

The DirectionTracker is my attempt to solve the problem of splitting
up desired vs current pitch/yaw/roll so that I can implement LQRs and
2DOF PID controllers.  It attempts to track small tick-to-tick
deltas and use them to accumulate a value which will not suffer from
gimbal lock issues or 2pi wraparound issues.  When the controller axis
is reset then in addition to clobbering the PID integral states, it also
zeros the DirectionTracker.  Since the error calc is still mathematically
identical at the end of the day it really shouldn't change the
BetterController much (i hope).

This also adds an LQR based controller which is just a proof of concept
that I can actually wire up an LQR controller.  It also uses the
DirectionTracker.  It does not usably fly a rocket in its current form.

Signed-off-by: Lamont Granquist &lt;lamont@scriptkiddie.org&gt;
</comment><date>2025-06-04 14:11:41 -0700</date><id>f527fad64d7825df829e6402cb9049bbcce558e1</id><msg>Add DirectionTracker and wire it up to BetterController</msg><path><editType>add</editType><file>MechJeb2/AttitudeControllers/DirectionTracker.cs</file></path><path><editType>edit</editType><file>MechJeb2/MechJeb2.csproj</file></path><path><editType>edit</editType><file>MechJeb2/MechJebModuleAttitudeController.cs</file></path><path><editType>edit</editType><file>MechJebLib/MechJebLib.csproj</file></path><path><editType>edit</editType><file>MechJeb2/AttitudeControllers/BetterController.cs</file></path><path><editType>add</editType><file>MechJebLib/Control/MultiVariableInterpolator.cs</file></path><path><editType>edit</editType><file>MechJebLib/Primitives/M3.cs</file></path><path><editType>edit</editType><file>MechJeb2.sln.DotSettings</file></path><path><editType>add</editType><file>MechJeb2/AttitudeControllers/LQRController.cs</file></path><path><editType>edit</editType><file>MechJeb2/MechJebModuleAttitudeAdjustment.cs</file></path><path><editType>add</editType><file>MechJebLib/Control/LQRLoop1.cs</file></path><path><editType>add</editType><file>MechJebLib/Control/MultiVariableGrid.cs</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName><id>lamont</id></culprit></freeStyleBuild>