HvrdlS

SN9 5KM Hop

Dec 15th, 2022
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.80 KB | None | 0 0
  1. clearscreen.
  2. on ag10 {
  3. aborttest().
  4. }
  5.  
  6. prep().
  7. fuel().
  8. hop().
  9. detanking().
  10.  
  11.  
  12. function prep {
  13. on ag10 {
  14. aborttest().
  15. }
  16.  
  17. print "Welcome to Starship Test Software V4!".
  18. print "Running hardware, preparings for software...".
  19. wait 1.
  20. set teststatus to "Preparations".
  21. wait until teststatus = "Preparations".
  22. set goal to "5KM Hop".
  23. lock throttle to 0.
  24. set h to alt:radar.
  25. lock altit to alt:radar-h.
  26. lock myvel to ship:velocity:surface:mag.
  27. set targetalt to 5000.
  28. set landingZone to latlng(-5.4655,-84.0333).
  29. set errorScaling to 1.
  30. lock steering to heading(90,90).
  31. set hts to ship:partsnamed("externalTankRound").
  32. set r1 to hts[0].
  33. set r2 to hts[1].
  34. set r3 to r1:resources.
  35. set r4 to r2:resources.
  36. set r5 to r3[0].
  37. set r6 to r3[1].
  38. set r7 to r4[0].
  39. set r8 to r4[1].
  40. set r5:enabled to true.
  41. set r6:enabled to true.
  42. set r7:enabled to true.
  43. set r8:enabled to true.
  44. set partlist to ship:partsnamed("hinge.01").
  45. set eng1 to ship:partstagged("Vector1")[0].
  46. set eng2 to ship:partstagged("Vector2")[0].
  47. set eng3 to ship:partstagged("Vector3")[0].
  48. eng1:activate.
  49. eng2:activate.
  50. eng3:activate.
  51. lock g to constant:g * body:mass / body:radius^2.
  52. set thr to 1040.
  53. clearVecDraws().
  54. print "Goal: " + goal.
  55. print "Press 9".
  56. wait 1.
  57. wait until ag9.
  58. set now to time:seconds.
  59. lock testtime to time:seconds - now.
  60. wait 1.
  61. toggle ag9.
  62. set teststatus to "Fueling".
  63. print "Go for test".
  64. }
  65.  
  66. function fuel {
  67. on ag10 {
  68. aborttest().
  69. }
  70.  
  71. print "Beginning fueling".
  72. wait 1.
  73. print "Awaiting for fueling end, press 9 to end".
  74. until ag9 {
  75. printing().
  76. }
  77.  
  78. set teststatus to goal + " preparing".
  79. wait 1.
  80. toggle ag1.
  81. toggle ag2.
  82. toggle ag3.
  83. wait 1.
  84. toggle ag9.
  85. print "Fueling finished, press 9".
  86. wait 1.
  87. until ag9 {
  88. printing().
  89. }
  90.  
  91. set teststatus to goal + " go".
  92. toggle ag1.
  93. toggle ag2.
  94. toggle ag3.
  95. set r5:enabled to false.
  96. set r6:enabled to false.
  97. set r7:enabled to false.
  98. set r8:enabled to false.
  99. wait 4.
  100. }
  101.  
  102. function hop {
  103. on ag10 {
  104. aborttest().
  105. }
  106.  
  107. set l to 1.
  108. lock curthr to eng1:thrust + eng2:thrust + eng3:thrust.
  109. set east to vcrs(ship:up:vector, ship:north:vector).
  110. toggle ag3.
  111. wait 2.
  112. rcs off.
  113. sas off.
  114. lock throttle to 0.05.
  115. toggle ag3.
  116. eng1:activate.
  117. eng2:activate.
  118. eng3:activate.
  119. lock maxDecel to (thr / ship:mass) - g.
  120. lock stopDist to ship:verticalspeed^2 / (2 * maxDecel).
  121. lock idealThrottle to stopDist / altit.
  122. lock impactTime to altit / abs(ship:verticalspeed).
  123. set maxthr to ship:maxthrust.
  124. set g to body:mu/(body:radius)^2.
  125. set thr to 1559.
  126. set twr to thr/(ship:mass*g).
  127. wait 1.
  128. set n to time:seconds.
  129. lock t to time:seconds - n.
  130. set desiredtwr to 1.15.
  131. set thrvalue to desiredtwr*ship:mass*g/thr.
  132. lock throttle to min(thrvalue, t/3).
  133. print twr.
  134. print "Test began".
  135. lock steering to up + r(0,0,270).
  136. wait until altit>4.
  137. lock latoff to (landingZone:lat-addons:tr:impactpos:lat)*10472.
  138. lock lngoff to (landingZone:lng-addons:tr:impactpos:lng)*10472.
  139. set desiredtwr to 1.08.
  140. lock throttle to thrvalue.
  141. until altit > 140 {
  142. hopprinting().
  143. }
  144.  
  145. set desiredtwr to 1.07.
  146. until altit > 270 {
  147. hopprinting().
  148. }
  149.  
  150. set desiredtwr to 1.06.
  151. until altit > 420 {
  152. hopprinting().
  153. }
  154.  
  155. set desiredtwr to 1.05.
  156. until altit > 615 {
  157. hopprinting().
  158. }
  159.  
  160. set desiredtwr to 1.03.
  161. lock steering to up + r(0,-0.2,270).
  162. until altit > 1780 {
  163. hopprinting().
  164. }
  165.  
  166. eng2:shutdown.
  167. set thr to 1559*0.33.
  168. set twr to thr/(ship:mass*g).
  169. set desiredtwr to 0.96.
  170. set vec1 to eng1:facing:vector+eng3:facing:vector.
  171. set vec2 to vec1:normalized*(eng1:thrust+eng2:thrust).
  172. set thrvec to v(0,0,0)+vec2.
  173. set tvec to vdot(thrvec,up:vector)*up:vector-vxcl(up:vector,thrvec).
  174. lock steering to lookdirup(tvec,east).
  175. wait 2.
  176. set desiredtwr to 1.06.
  177. until altit > 4450 {
  178. hopprinting().
  179. }
  180.  
  181. eng3:shutdown.
  182. set vec1 to eng1:facing:vector.
  183. set vec2 to vec1:normalized*eng1:thrust.
  184. set thrvec to v(0,0,0)+vec2.
  185. set tvec to vdot(thrvec,up:vector)*up:vector-vxcl(up:vector,thrvec).
  186. lock steering to lookdirup(tvec,east).
  187. set thr to 1559*0.66.
  188. set twr to eng1:thrust/(ship:mass*g).
  189. set desiredtwr to 0.97.
  190. until ship:verticalspeed < 10 {
  191. hopprinting().
  192. }
  193.  
  194. set desiredtwr to 1.
  195. until altit > targetalt {
  196. hopprinting().
  197. }
  198.  
  199. set desiredtwr to 0.92.
  200. until ship:verticalspeed < 5 {
  201. hopprinting().
  202. }
  203.  
  204. set desiredtwr to 0.88.
  205. print "SN9 is in target altitude".
  206. toggle ag6.
  207. until ship:verticalspeed < 0.1 {
  208. hopprinting().
  209. }
  210.  
  211. rcs on.
  212. set l to 2.
  213. set n to time:seconds.
  214. lock t to time:seconds - n.
  215. set desiredtwr to 1.08.
  216. lock throttle to max(0, thrvalue-t/2).
  217. lock steering to up + r(0,-90,270).
  218. toggle ag4.
  219. toggle ag5.
  220. wait 2.
  221. partlist[3]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -20).
  222. partlist[2]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -20).
  223. partlist[0]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", 15).
  224. partlist[1]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", 15).
  225. wait 3.
  226. toggle ag6.
  227. eng1:shutdown.
  228. partlist[3]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -35).
  229. partlist[2]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -35).
  230. partlist[0]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -35).
  231. partlist[1]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -35).
  232. wait 4.
  233. toggle ag4.
  234. toggle ag5.
  235. lock steering to up + r(0,steerroll1,270+steerpitch1).
  236. until altit < stopDist+100 {
  237. hopprinting().
  238. }
  239.  
  240. set r5:enabled to true.
  241. set r6:enabled to true.
  242. set r7:enabled to true.
  243. set r8:enabled to true.
  244. set l to 4.
  245. toggle ag5.
  246. toggle ag4.
  247. wait 0.01.
  248. partlist[3]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -90).
  249. partlist[2]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -90).
  250. partlist[0]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", 15).
  251. partlist[1]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", 15).
  252. eng2:activate.
  253. lock throttle to min(0.55, t/0.9).
  254. wait 0.7.
  255. eng3:activate.
  256. lock steering to srfretrograde.
  257. wait 0.3.
  258. lock aoa to -10.
  259. wait 0.5.
  260. eng3:shutdown.
  261. wait 0.4.
  262. eng3:activate.
  263. wait 0.5.
  264. eng3:shutdown.
  265. until vang(ship:facing:vector, -ship:velocity:surface)<15 {
  266. hopprinting().
  267. }
  268.  
  269. partlist[3]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -15).
  270. partlist[2]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -15).
  271. partlist[0]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -15).
  272. partlist[1]:getmodule("ModuleRoboticServoHinge"):setfield("Target Angle", -15).
  273. lock throttle to idealThrottle.
  274. lock steering to getSteering().
  275. until altit < 350 {
  276. hopprinting().
  277. }
  278.  
  279. lock steering to up + r(0.5,36,285).
  280. wait 3.
  281. unlock steering.
  282. until ship:verticalspeed > -12 {
  283. hopprinting().
  284. }
  285.  
  286. gear on.
  287. until ship:verticalspeed < -6 {
  288. hopprinting().
  289. }
  290.  
  291. lock steering to up + r(0,0,270).
  292. until ship:verticalspeed > -1 {
  293. hopprinting().
  294. }
  295.  
  296. set latoff to 0.
  297. set lngoff to 0.
  298. lock throttle to 0.1.
  299. print "Test completed".
  300. wait 3.5.
  301. lock throttle to 0.
  302. eng1:shutdown.
  303. eng2:shutdown.
  304. eng3:shutdown.
  305. set teststatus to "Completed".
  306. detanking().
  307. }
  308.  
  309. function hopprinting {
  310. clearscreen.
  311. if l = 2 or l = 4 {
  312. set thr to 1040.
  313. } else if l = 1 {
  314. set thr to ship:availablethrust.
  315. }
  316.  
  317. set thrvalue to desiredtwr*ship:mass*g/thr.
  318. set twr to thr / (ship:mass*g).
  319. print "Test lenght: " + t + " Seconds".
  320. print "Current throttle: " + curthr + "kn".
  321. print "Maximum throttle: " + maxthr + "kn".
  322. print "TWR: " + twr.
  323. print "Mass: " + ship:mass + "tons".
  324. print "Gravity: " + g.
  325. if l=2 {
  326. steerroll1().
  327. steerpitch1().
  328. }
  329.  
  330. print "Latoff: " + latoff + "M".
  331. print "Lngoff: " + lngoff + "M".
  332. print "Landing Burn Alt: " + stopDist + "M".
  333. log t + ";" + maxthr + ";" + curthr + ";" + altit + ";" + latoff + ";" + lngoff to starhopper75hop.txt.
  334. }
  335.  
  336. function detanking {
  337. print "Test status: " + teststatus.
  338. ag2 on.
  339. ag3 on.
  340. ag1 on.
  341. wait 1.
  342. toggle ag9.
  343. unlock steering.
  344. unlock throttle.
  345. wait 300.
  346. ag1 off.
  347. ag2 off.
  348. ag3 off.
  349. print 3/0.
  350. }
  351.  
  352. function printing {
  353. clearscreen.
  354. print "Time from test beginning: " + testtime + " Seconds".
  355. print "Test status: " + teststatus.
  356. print "Goal: " + goal.
  357. print "Time(KSC): " + time:clock.
  358. wait 0.1.
  359. }
  360.  
  361. function aborttest {
  362. lock latoff to 0.
  363. lock lngoff to 0.
  364. print "Abort".
  365. eng1:shutdown.
  366. eng2:shutdown.
  367. eng3:shutdown.
  368. ag1 on.
  369. lock throttle to 0.
  370. wait 1.
  371. unlock throttle.
  372. unlock steering.
  373. wait 1.
  374. set teststatus to "Detanking".
  375. detanking().
  376. }
  377.  
  378. function steerroll1 {
  379. wait 0.
  380. set pid to pidloop(0.08, 0.08, 0.08, -13,13).
  381. set pid:setpoint to 0.
  382. set ang to pid:update(time:seconds,lngoff).
  383. if ang < 0 {
  384. set y to ang+(-90).
  385. } else if ang > 0 {
  386. set y to ang-90.
  387. }
  388.  
  389. return y.
  390. }
  391.  
  392. function steerpitch1 {
  393. wait 0.
  394. set pid to pidloop(0.05,0.06,0.03, -18,18).
  395. set pid:setpoint to 0.
  396. set pit to pid:update(time:seconds,latoff).
  397. if pit < 0 {
  398. set p to abs(pit).
  399. } else if pit > 0 {
  400. set p to -pit.
  401. }
  402.  
  403. return p.
  404. }
  405.  
  406. function errorVector {
  407. return getImpact():position - landingZone:position.
  408. }
  409.  
  410. function getSteering {
  411. local errorVector is errorVector().
  412. local velVector is -ship:velocity:surface.
  413. local result is velVector + errorVector*errorScaling.
  414.  
  415. if vang(result, velVector) > aoa
  416. {
  417. set result to velVector:normalized + tan(aoa)*errorVector:normalized.
  418. }
  419.  
  420. return lookdirup(result, facing:topvector).
  421. }
  422.  
  423. function getImpact {
  424. if addons:tr:hasimpact { return addons:tr:impactpos. }
  425. return ship:geoposition.
  426. }
Advertisement
Add Comment
Please, Sign In to add comment