portablejim

planeLandingStuff.ks

Mar 9th, 2021 (edited)
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. set places to readjson("0:/kerbin.json").
  2.  
  3. clearVecDraws().
  4.  
  5. set mode to "initial".
  6. print "mode initial".
  7.  
  8. // Hack for ground operations, I think.
  9. set craftHeight to 0.
  10.  
  11. set circRadius to 600.
  12. set drawVecs to true.
  13. set landLoop to true.
  14.  
  15. set finalEnd to places["ksc 09"].
  16. set finalStart to ship:body:geopositionof(finalEnd:position + (heading(-90, 0):forevector * 1500)).
  17. set vecCircleCenter to finalStart:position + V(0, circRadius, 0).
  18. set geoCircleCenter to ship:body:geopositionof(vecCircleCenter).
  19. //set vecCircleCenter:x to vecCircleCenter:x + craftHeight.
  20. set vecNorth to V(0,1,0).
  21.  
  22. //set arrCircleCenterDir to vecdraw(V(0,0,0), geoCircleCenter:position, red, "Circle", 1, true, 0.5, true).
  23. //set arrCircleCenterDir to vecdraw(V(0,0,0), vecCircleCenter, yellow, "Circle", 1, true, 0.5, true).
  24.  
  25. set angNorthToCraft to (geoCircleCenter:heading - 180).
  26. set angCraftToTangent to arccos(circRadius/vecCircleCenter:mag).
  27. set angNorthToTangent to angNorthToCraft - angCraftToTangent.
  28.  
  29. set vecCircleCenterToTangent to heading(angNorthtoTangent, 0, 0):forevector * circRadius.
  30. set vecCraftToTangent to vecCircleCenter + vecCircleCenterToTangent.
  31. //set vecCraftToTangent:x to craftHeight.
  32.  
  33. //when drawVecs then {
  34.  
  35. set vecCraftToTangent to geoCircleCenter:position + vecCircleCenterToTangent.
  36. //set vecCraftToTangent:x to craftHeight.
  37. set geoCraftToTangent to ship:body:geopositionof(vecCraftToTangent).
  38.  
  39. //wait 0.
  40.  
  41. //return false.
  42.  
  43. //}
  44.  
  45. print "distance to circle: " + vecCircleCenter:mag.
  46. print "distance to circle (alt): " + geoCircleCenter:distance.
  47. print "circle radius: " + circRadius.
  48.  
  49. print "angNorthToCraft " + angNorthToCraft.
  50. print "angNorthToCraft (alt) " + (geoCircleCenter:heading - 180).
  51. print "angCraftToTangent " + angCraftToTangent.
  52. print "angNorthToTangent " + angNorthToTangent.
  53.  
  54. print "vecCircleCenterToTangent " + vecCircleCenterToTangent.
  55. print "vecCraftToTangent " + vecCraftToTangent.
  56. print "geoCraftToTangent " + geoCraftToTangent.
  57. print "distance to tangent " + geoCraftToTangent:distance.
  58. print "angle diff " + (geoCircleCenter:heading - geoCraftToTangent:heading).
  59.  
  60. set targetHeading to geoCraftToTangent:heading.
  61. lock wheelsteering to targetHeading.
  62. lock wheelthrottle to 0.20.
  63. brakes off.
  64.  
  65. print "before vecs".
  66. //set arrTargetDir to vecdraw(V(0,0,0), { return geoCraftToTangent:position. }, red, "Heading", 1, true, 0.5, true).
  67. //set arrTangent to vecdraw({ return geoCircleCenter:position. }, { return vecCircleCenterToTangent. }, yellow, "Tangent", 1, true, 0.5, true).
  68. print "after vecs".
  69.  
  70. when landLoop = true then {
  71. if mode = "initial" {
  72. set angNorthToCraft to (geoCircleCenter:heading - 180).
  73. set angCraftToTangent to arccos(circRadius/vecCircleCenter:mag).
  74. set angNorthToTangent to angNorthToCraft - angCraftToTangent.
  75.  
  76. set vecCircleCenterToTangent to heading(angNorthtoTangent, 0, 0):forevector * circRadius.
  77. set vecCraftToTangent to vecCircleCenter + vecCircleCenterToTangent.
  78. set geoCraftToTangent to ship:body:geopositionof(vecCraftToTangent).
  79.  
  80.  
  81. set targetHeading to geoCraftToTangent:heading.
  82. print targetHeading.
  83.  
  84. if vang(ship:facing:forevector, geoCraftToTangent:position) < 5 {
  85. set mode to "locked".
  86. print "mode locked".
  87. }
  88. }
  89. if mode = "locked" {
  90. set vecCircleCenterToTangent to heading(angNorthtoTangent, 0, 0):forevector * circRadius.
  91. set vecCraftToTangent to vecCircleCenter + vecCircleCenterToTangent.
  92.  
  93. set targetHeading to geoCraftToTangent:heading.
  94. //print targetHeading + " " + geoCraftToTangent:distance.
  95.  
  96. // Close or gone past it.
  97. if vecCraftToTangent:mag < 20 or vang(ship:facing:forevector, geoCraftToTangent:position) > 45 {
  98. set mode to "turning".
  99. print "mode turning".
  100. set lastupdate to time:seconds.
  101. //set arrTargetDir:show to false.
  102.  
  103. //set arrTangent to vecdraw({ return geoCircleCenter:position. }, { return heading(geoCircleCenter:heading - 180, 0, 0):forevector * circRadius. }, yellow, "Tangent", 1, true, 0.5, true, false).
  104.  
  105. //SET Kp TO 0.5.
  106. //SET Ki TO 0.6.
  107. //SET Kd TO 0.6.
  108. //SET PID TO PIDLOOP(Kp, Ki, Kd).
  109. //SET PID:SETPOINT TO circRadius.
  110. //set targetHeading TO geoCrafttoTangent:heading.
  111. }
  112. }
  113. if mode = "turning" {
  114. if lastUpdate < time:seconds + 5 {
  115. if geoCircleCenter:distance > circRadius {
  116. set targetHeading to (geoCircleCenter:heading + 90) - 0.30.
  117. }
  118. set lastupdate to time:seconds.
  119. print geoCircleCenter:distance + " >? " + circRadius + " " + targetHeading + " heading " + geoCircleCenter:heading + " => " + (geoCircleCenter:heading + 90).
  120. }
  121. //SET targetHeading TO targetHeading + PID:UPDATE(TIME:SECONDS, geoCircleCenter:position:mag).
  122.  
  123. if finalStart:distance < 10 or (finalStart:distance < (circRadius / 4) and abs(finalStart:BEARING) > 120) {
  124. set mode to "final".
  125. print "mode final".
  126. print finalstart:distance.
  127. print finalstart:bearing.
  128. //set arrTangent:show to false.
  129. //set arrTargetDir to vecdraw(V(0,0,0), { return finalEnd:position. }, red, "Heading", 1, true, 0.5, true, false).
  130. }
  131. }
  132. if mode = "final" {
  133. set targetHeading to finalEnd:heading.
  134.  
  135. if finalEnd:distance < 10 or (finalEnd:distance < (circRadius / 4) and abs(finalEnd:BEARING) > 120) {
  136. set mode to "landing".
  137. print "mode landing".
  138. print finalend:distance.
  139. print finalend:bearing.
  140. brakes on.
  141. }
  142. }
  143.  
  144. return landLoop.
  145. }
  146.  
  147. //wait until false.
  148.  
Add Comment
Please, Sign In to add comment