Advertisement
Guest User

Untitled

a guest
Apr 17th, 2021
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.06 KB | None | 0 0
  1.  
  2. clearscreen.
  3.  
  4. set mu to 3.986e14.
  5. set g to 9.81.
  6. set pi to 3.1415926535897932384626433832795028841971693993751058209749445923.
  7. set transThrust to 4.41. //.530 for 3 clowns 0.26 for resupply
  8. set foreThrust to 8.67. //1.06 for 3 clowns 0.52 for resupply
  9. set bodyRadius to 6371000.
  10. lights on.
  11.  
  12. function relativeInclination {
  13. set targpos to target:position-ship:body:position.
  14. set htarg to vcrs(targpos,target:velocity:orbit).
  15. set hship to -vcrs(ship:body:position,ship:velocity:orbit).
  16. set relinc to vang(htarg,hship).
  17. return relinc.
  18. }
  19.  
  20. function vectorheading {
  21. parameter vector.
  22. set northvec to ship:north:vector.
  23. set westvec to vcrs(northvec,ship:up:vector).
  24. set vcrossup to vcrs(vector,ship:up:vector).
  25. if vang(vcrossup,northvec) > 90 {
  26. set hdg to -vang(vcrossup,westvec).
  27. } else {
  28. set hdg to vang(vcrossup,westvec).
  29. }
  30. return hdg.
  31. }
  32.  
  33. lock steering to prograde+r(0,0,180).
  34. sas off.
  35. wait 10.
  36. unlock steering.
  37. sas on.
  38. set t0 to time:seconds.
  39. set kuniverse:timewarp:warp to 1.
  40. wait until time:seconds>(t0+10).
  41. set t0 to time:seconds.
  42. set kuniverse:timewarp:warp to 2.
  43. wait until time:seconds > (t0+100).
  44. set kuniverse:timewarp:warp to 3.
  45. clearscreen.
  46. print "Warping to stationkeeping burn".
  47.  
  48.  
  49. //warping to similar altitude
  50. wait until target:altitude-ship:altitude < 2000.
  51. set kuniverse:timewarp:warp to 2.
  52. wait until target:altitude-ship:altitude < 1000.
  53. set kuniverse:timewarp:warp to 1.
  54. until target:altitude-ship:altitude < 500 {
  55. wait 0.1.
  56. if ship:verticalspeed < 0 {
  57. break.
  58. }
  59. }
  60. set kuniverse:timewarp:warp to 0.
  61.  
  62. sas off.
  63. lock steering to prograde + r(0,0,180).
  64.  
  65.  
  66.  
  67. set Vinput to 50. set Linput to 50.
  68. set transVelocity to .5.
  69. set kpv to -5. set kps to 0.5.
  70. set kd to 5.
  71. set dLat to 50.
  72. set dVer to 50.
  73. set breakloop to 0. set break1 to 0. set break2 to 0. set break3 to 0.
  74.  
  75. until breakloop > 3 { //stationkeeping loop around 8km from station
  76. set svh to vectorheading(ship:velocity:orbit). //chaser velocity heading
  77. set tph to vectorheading(target:position). //target position heading
  78. set latdist1 to sin(svh-tph)*target:position:mag.
  79. set verdist1 to ship:altitude-target:altitude.
  80. set t1 to time:seconds.
  81. set periodDiff to target:orbit:period-ship:orbit:period+.05.
  82.  
  83. wait 0.1.
  84. clearscreen.
  85. print "Station Distance is "+round(target:position:mag)+" m".
  86. print "Lateral Distance is "+(round(1000*latdist1)/1000)+" m".
  87. print "Vertical Distance is "+(round(1000*verdist1)/1000)+" m".
  88. print "Period Difference is "+(round(1000*periodDiff)/1000)+" s".
  89. print " ".
  90. Print "Vertical Control Input: "+(round(100*Vinput)/100).
  91. print "Lateral Control Input: "+(round(100*Linput)/100).
  92. print "Foreward Control Input: "+(round(100*periodDiff)/100).
  93. print " ".
  94. print "Lateral Velocity: "+(round(1000000*dLat)/1000)+" mm/s".
  95. print "Vertical Velocity: "+(round(1000000*dVer)/1000)+" mm/s".
  96.  
  97. set svh to vectorheading(ship:velocity:orbit). //chaser velocity heading
  98. set tph to vectorheading(target:position). //target position heading
  99. set latdist2 to sin(svh-tph)*target:position:mag.
  100. set verdist2 to ship:altitude-target:altitude.
  101.  
  102. set t2 to time:seconds.
  103. set dLat to (latdist2-latdist1)/(t2-t1).
  104. set dVer to (verdist2-verdist1)/(t2-t1).
  105.  
  106.  
  107. if abs(latdist2) > 125 {
  108. set lateralVsetpoint to -4*transVelocity*latdist2/abs(latdist2).
  109. set Linput to (lateralVsetpoint-dLat)*kpv.
  110. } else if abs(latdist2) > 50 {
  111. set lateralVsetpoint to -2*transVelocity*latdist2/abs(latdist2).
  112. set Linput to (lateralVsetpoint-dLat)*kpv.
  113. } else if abs(latdist2) > 10 {
  114. set lateralVsetpoint to -transVelocity*latdist2/abs(latdist2).
  115. set Linput to (lateralVsetpoint-dLat)*kpv.
  116. } else if abs(latdist2) > 5 {
  117. set lateralVsetpoint to -0.5*transVelocity*latdist2/abs(latdist2).
  118. set Linput to (lateralVsetpoint-dLat)*kpv.
  119. } else {
  120. set Linput to (kps*latdist2)+(kd*dLat).
  121. }
  122.  
  123. if abs(verdist2) > 125 {
  124. set verticalVsetpoint to -4*transVelocity*verdist2/abs(verdist2).
  125. set Vinput to (verticalVsetpoint-dVer)*kpv.
  126. } else if abs(verdist2) > 50 {
  127. set verticalVsetpoint to -2*transVelocity*verdist2/abs(verdist2).
  128. set Vinput to (verticalVsetpoint-dVer)*kpv.
  129. } else if abs(verdist2)>10 {
  130. set verticalVsetpoint to -transVelocity*verdist2/abs(verdist2).
  131. set Vinput to (verticalVsetpoint-dVer)*kpv.
  132. } else if abs(verdist2) > 5 {
  133. set verticalVsetpoint to -0.5*transVelocity*verdist2/abs(verdist2).
  134. set Vinput to (verticalVsetpoint-dVer)*kpv.
  135. } else {
  136. set Vinput to (kps*verdist2)+(kd*dVer).
  137. }
  138.  
  139. set ship:control:fore to periodDiff.
  140. set ship:control:starboard to Linput.
  141. set ship:control:top to Vinput.
  142.  
  143. if abs(periodDiff) < 0.1 and abs(Linput) < 0.1 and abs(Vinput) < 0.1 {
  144. set break1 to 1.01.
  145. } else {
  146. set break1 to 0.
  147. }
  148. if abs(latdist2) < 0.5 and abs(verdist2) < 0.5 {
  149. set break2 to 1.01.
  150. } else {
  151. set break2 to 0.
  152. }
  153. if abs(dlat) < 0.002 and abs(dver) < 0.002 {
  154. set break3 to 1.01.
  155. } else {
  156. set break3 to 0.
  157. }
  158.  
  159. set breakloop to break1+break2+break3.
  160.  
  161. }
  162. set ship:control:neutralize to true.
  163. ag5 off.
  164.  
  165.  
  166. wait 10.
  167. clearscreen.
  168. print "Closing. Translating Downward".
  169. set traveldist to target:position:mag-2000. //we want to maneuver 2km away
  170. set dv to traveldist/4000. //1 m/s downward moves the chaser ~4km Foreward
  171. set a to transThrust/ship:mass.
  172. set t to dv/a.
  173. set t0 to time:seconds.
  174. set ship:control:top to 1.
  175. set dX1 to target:altitude-ship:altitude.
  176.  
  177. until time:seconds>(t0+t){ //burning downward
  178. set periodDiff to (target:orbit:period-ship:orbit:period).
  179. set ship:control:fore to 10*periodDiff.
  180. print "Maneuver dV is "+(round(dv*100)/100)+" m/s".
  181. print "Closing. Translating Downward".
  182. print "Orbital period difference is: "+(round(periodDiff*1000))+" ms".
  183. wait 0.5.
  184. clearscreen.
  185. }
  186.  
  187.  
  188. //Warping to ~250m.
  189. set ship:control:neutralize to true.
  190. set dX2 to target:altitude-ship:altitude.
  191. set dX to dX2-dX1.
  192. wait 5.
  193. unlock steering.
  194. sas on.
  195. print "Warping".
  196. set t0 to time:seconds.
  197. set kuniverse:timewarp:warp to 1.
  198. wait until (target:altitude-ship:altitude)>(dx*1.51).
  199. set kuniverse:timewarp:warp to 2.
  200. wait until (target:altitude-ship:altitude < (dx*1.5)).
  201. set kuniverse:timewarp:warp to 1.
  202. wait until (target:altitude-ship:altitude < (dx*1.35)).
  203. set kuniverse:timewarp:warp to 0.
  204. sas off.
  205. lock steering to prograde + r(0,0,180).
  206. wait until (target:altitude-ship:altitude) < dX.
  207.  
  208. print "Beginning Second Stationkeeping Burn".
  209. set ship:control:top to 1.
  210. wait until (target:altitude-ship:altitude)<10.
  211.  
  212. set Vinput to 50. set Linput to 50.
  213. set transVelocity to .5.
  214. set kpv to -5. set kps to 0.5.
  215. set kd to 5.
  216. set dLat to 50.
  217. set dVer to 50.
  218. set breakloop to 0. set break1 to 0. set break2 to 0. set break3 to 0.
  219.  
  220. until breakloop > 3 { //stationkeeping loop around 8km from station
  221. set svh to vectorheading(ship:velocity:orbit). //chaser velocity heading
  222. set tph to vectorheading(target:position). //target position heading
  223. set latdist1 to sin(svh-tph)*target:position:mag.
  224. set verdist1 to ship:altitude-target:altitude.
  225. set t1 to time:seconds.
  226. set periodDiff to target:orbit:period-ship:orbit:period+.05.
  227.  
  228. wait 0.1.
  229. clearscreen.
  230. print "Station Distance is "+round(target:position:mag)+" m".
  231. print "Lateral Distance is "+(round(1000*latdist1)/1000)+" m".
  232. print "Vertical Distance is "+(round(1000*verdist1)/1000)+" m".
  233. print "Period Difference is "+(round(1000*periodDiff)/1000)+" s".
  234. print " ".
  235. Print "Vertical Control Input: "+(round(100*Vinput)/100).
  236. print "Lateral Control Input: "+(round(100*Linput)/100).
  237. print "Foreward Control Input: "+(round(100*periodDiff)/100).
  238. print " ".
  239. print "Lateral Velocity: "+(round(1000000*dLat)/1000)+" mm/s".
  240. print "Vertical Velocity: "+(round(1000000*dVer)/1000)+" mm/s".
  241.  
  242. set svh to vectorheading(ship:velocity:orbit). //chaser velocity heading
  243. set tph to vectorheading(target:position). //target position heading
  244. set latdist2 to sin(svh-tph)*target:position:mag.
  245. set verdist2 to ship:altitude-target:altitude.
  246.  
  247. set t2 to time:seconds.
  248. set dLat to (latdist2-latdist1)/(t2-t1).
  249. set dVer to (verdist2-verdist1)/(t2-t1).
  250.  
  251.  
  252. if abs(latdist2) > 125 {
  253. set lateralVsetpoint to -4*transVelocity*latdist2/abs(latdist2).
  254. set Linput to (lateralVsetpoint-dLat)*kpv.
  255. } else if abs(latdist2) > 50 {
  256. set lateralVsetpoint to -2*transVelocity*latdist2/abs(latdist2).
  257. set Linput to (lateralVsetpoint-dLat)*kpv.
  258. } else if abs(latdist2) > 10 {
  259. set lateralVsetpoint to -transVelocity*latdist2/abs(latdist2).
  260. set Linput to (lateralVsetpoint-dLat)*kpv.
  261. } else if abs(latdist2) > 5 {
  262. set lateralVsetpoint to -0.5*transVelocity*latdist2/abs(latdist2).
  263. set Linput to (lateralVsetpoint-dLat)*kpv.
  264. } else {
  265. set Linput to (kps*latdist2)+(kd*dLat).
  266. }
  267.  
  268. if abs(verdist2) > 125 {
  269. set verticalVsetpoint to -4*transVelocity*verdist2/abs(verdist2).
  270. set Vinput to (verticalVsetpoint-dVer)*kpv.
  271. } else if abs(verdist2) > 50 {
  272. set verticalVsetpoint to -2*transVelocity*verdist2/abs(verdist2).
  273. set Vinput to (verticalVsetpoint-dVer)*kpv.
  274. } else if abs(verdist2)>10 {
  275. set verticalVsetpoint to -transVelocity*verdist2/abs(verdist2).
  276. set Vinput to (verticalVsetpoint-dVer)*kpv.
  277. } else if abs(verdist2) > 5 {
  278. set verticalVsetpoint to -0.5*transVelocity*verdist2/abs(verdist2).
  279. set Vinput to (verticalVsetpoint-dVer)*kpv.
  280. } else {
  281. set Vinput to (kps*verdist2)+(kd*dVer).
  282. }
  283.  
  284. set ship:control:fore to periodDiff.
  285. set ship:control:starboard to Linput.
  286. set ship:control:top to Vinput.
  287.  
  288. if abs(periodDiff) < 0.1 and abs(Linput) < 0.1 and abs(Vinput) < 0.1 {
  289. set break1 to 1.01.
  290. } else {
  291. set break1 to 0.
  292. }
  293. if abs(latdist2) < 0.5 and abs(verdist2) < 0.5 {
  294. set break2 to 1.01.
  295. } else {
  296. set break2 to 0.
  297. }
  298. if abs(dlat) < 0.002 and abs(dver) < 0.002 {
  299. set break3 to 1.01.
  300. } else {
  301. set break3 to 0.
  302. }
  303.  
  304. set breakloop to break1+break2+break3.
  305.  
  306. }
  307. set ship:control:neutralize to true.
  308.  
  309.  
  310. wait 10.
  311. clearscreen.
  312. print "Closing again. Translating Downward".
  313. set traveldist to target:position:mag-250. //we want to maneuver 2km away
  314. set dv to traveldist/4000. //1 m/s downward moves the chaser ~4km Foreward
  315. set a to transThrust/ship:mass.
  316. set t to dv/a.
  317. set t0 to time:seconds.
  318. set ship:control:top to 1.
  319. set dX1 to target:altitude-ship:altitude.
  320.  
  321. until time:seconds>(t0+t){ //burning downward
  322. set periodDiff to (target:orbit:period-ship:orbit:period).
  323. set ship:control:fore to 10*periodDiff.
  324. print "Maneuver dV is "+(round(dv*100)/100)+" m/s".
  325. print "Closing. Translating Downward".
  326. print "Orbital period difference is: "+(round(periodDiff*1000))+" ms".
  327. wait 0.5.
  328. clearscreen.
  329. }
  330.  
  331. //Warping to ~250m.
  332. set ship:control:neutralize to true.
  333. set dX2 to target:altitude-ship:altitude.
  334. set dX to dX2-dX1.
  335. wait 5.
  336. unlock steering.
  337. sas on.
  338. print "Warping".
  339. set t0 to time:seconds.
  340. set kuniverse:timewarp:warp to 1.
  341. wait until (target:altitude-ship:altitude)>(dx*1.51).
  342. set kuniverse:timewarp:warp to 2.
  343. wait until (target:altitude-ship:altitude < (dx*1.5)).
  344. set kuniverse:timewarp:warp to 1.
  345. wait until (target:altitude-ship:altitude < (dx*1.35)).
  346. set kuniverse:timewarp:warp to 0.
  347. sas off.
  348. lock steering to prograde + r(0,0,180).
  349. wait until (target:altitude-ship:altitude) < dX.
  350.  
  351. print "Beginning Third Stationkeeping Burn".
  352. set ship:control:top to 1.
  353. wait until (target:altitude-ship:altitude)<10.
  354.  
  355. set Vinput to 50. set Linput to 50.
  356. set transVelocity to .5.
  357. set kpv to -5. set kps to 0.5.
  358. set kd to 5.
  359. set dLat to 50.
  360. set dVer to 50.
  361. set breakloop to 0. set break1 to 0. set break2 to 0. set break3 to 0.
  362. ag6 off.
  363.  
  364. until ag6 { //stationkeeping loop around 8km from station
  365. set svh to vectorheading(ship:velocity:orbit). //chaser velocity heading
  366. set tph to vectorheading(target:position). //target position heading
  367. set latdist1 to sin(svh-tph)*target:position:mag.
  368. set verdist1 to ship:altitude-target:altitude.
  369. set t1 to time:seconds.
  370. set periodDiff to target:orbit:period-ship:orbit:period+.05.
  371.  
  372. wait 0.1.
  373. clearscreen.
  374. print "Station Distance is "+round(target:position:mag)+" m".
  375. print "Lateral Distance is "+(round(1000*latdist1)/1000)+" m".
  376. print "Vertical Distance is "+(round(1000*verdist1)/1000)+" m".
  377. print "Period Difference is "+(round(1000*periodDiff)/1000)+" s".
  378. print " ".
  379. Print "Vertical Control Input: "+(round(100*Vinput)/100).
  380. print "Lateral Control Input: "+(round(100*Linput)/100).
  381. print "Foreward Control Input: "+(round(100*periodDiff)/100).
  382. print " ".
  383. print "Lateral Velocity: "+(round(1000000*dLat)/1000)+" mm/s".
  384. print "Vertical Velocity: "+(round(1000000*dVer)/1000)+" mm/s".
  385. print " ".
  386. print "Press action group 6 to stop station keeping".
  387.  
  388. set svh to vectorheading(ship:velocity:orbit). //chaser velocity heading
  389. set tph to vectorheading(target:position). //target position heading
  390. set latdist2 to sin(svh-tph)*target:position:mag.
  391. set verdist2 to ship:altitude-target:altitude.
  392.  
  393. set t2 to time:seconds.
  394. set dLat to (latdist2-latdist1)/(t2-t1).
  395. set dVer to (verdist2-verdist1)/(t2-t1).
  396.  
  397.  
  398. if abs(latdist2) > 125 {
  399. set lateralVsetpoint to -4*transVelocity*latdist2/abs(latdist2).
  400. set Linput to (lateralVsetpoint-dLat)*kpv.
  401. } else if abs(latdist2) > 50 {
  402. set lateralVsetpoint to -2*transVelocity*latdist2/abs(latdist2).
  403. set Linput to (lateralVsetpoint-dLat)*kpv.
  404. } else if abs(latdist2) > 10 {
  405. set lateralVsetpoint to -transVelocity*latdist2/abs(latdist2).
  406. set Linput to (lateralVsetpoint-dLat)*kpv.
  407. } else if abs(latdist2) > 5 {
  408. set lateralVsetpoint to -0.5*transVelocity*latdist2/abs(latdist2).
  409. set Linput to (lateralVsetpoint-dLat)*kpv.
  410. } else {
  411. set Linput to (kps*latdist2)+(kd*dLat).
  412. }
  413.  
  414. if abs(verdist2) > 125 {
  415. set verticalVsetpoint to -4*transVelocity*verdist2/abs(verdist2).
  416. set Vinput to (verticalVsetpoint-dVer)*kpv.
  417. } else if abs(verdist2) > 50 {
  418. set verticalVsetpoint to -2*transVelocity*verdist2/abs(verdist2).
  419. set Vinput to (verticalVsetpoint-dVer)*kpv.
  420. } else if abs(verdist2)>10 {
  421. set verticalVsetpoint to -transVelocity*verdist2/abs(verdist2).
  422. set Vinput to (verticalVsetpoint-dVer)*kpv.
  423. } else if abs(verdist2) > 5 {
  424. set verticalVsetpoint to -0.5*transVelocity*verdist2/abs(verdist2).
  425. set Vinput to (verticalVsetpoint-dVer)*kpv.
  426. } else {
  427. set Vinput to (kps*verdist2)+(kd*dVer).
  428. }
  429.  
  430. set ship:control:fore to periodDiff.
  431. set ship:control:starboard to Linput.
  432. set ship:control:top to Vinput.
  433.  
  434. if abs(periodDiff) < 0.1 and abs(Linput) < 0.1 and abs(Vinput) < 0.1 {
  435. set break1 to 1.01.
  436. } else {
  437. set break1 to 0.
  438. }
  439. if abs(latdist2) < 0.5 and abs(verdist2) < 0.5 {
  440. set break2 to 1.01.
  441. } else {
  442. set break2 to 0.
  443. }
  444. if abs(dlat) < 0.002 and abs(dver) < 0.002 {
  445. set break3 to 1.01.
  446. } else {
  447. set break3 to 0.
  448. }
  449.  
  450. set breakloop to break1+break2+break3.
  451.  
  452. }
  453. ag6 off.
  454. clearscreen.
  455. print "Please run docking.ks file".
  456. set ship:control:neutralize to true.
  457.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement