forked from Student-Satellite-IITB/Advitiy-Control-Model
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsatellite.py
84 lines (53 loc) · 1.48 KB
/
satellite.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from constants import *
import numpy as np
import qnv
import frames as fs
class Satellite:
def __init__(self,state0,time0):
self.time = time0
self.setState(state0)
print "init"
def setState(self,state):
self.state = state.copy()
v_pos_sat_i = state[0:3].copy()
v_v_sat_i = state[3:6].copy()
q = state[6:10],copy()
self.qi = qnv.quatInv(q)
self.v_pos_sat_b = qnv.quatRotate(qi, v_pos_sat_i)
v_L_i = qnv.quatRotate(q,v_L_b)
self.v_dL_cap_i = v_L_i/np.linalg.norm(v_L_i)
self.v_dL_cap_e = fs.ecif2ecef(v_dL_cap_i,self.time)
self.v_v_sat_e = fs.ecif2ecef(v_v_sat_i,self.time)
def getState(self):
return self.state
def setPos(self,pos):
self.state[0:3] = pos
def getPos(self):
return self.state[0:3]
def setVel(self,v):
self.state[3:6] = v
def getVel(self):
return self.state[3:6]
def setQ(self,q):
self.state[6:10] = q
def getQ(self):
return self.state[6:10]
def getQi(self):
return self.qi
def setW(self,omega):
self.state[10:13] = omega
def getW(self):
return self.state[10:13]
def getEnergy(self):
pos = self.getPos()
v = self.getVel()
omega = self.getW()
T = 0.5*Ms*(np.linalg.norm(v))**2 - G*M*(Ms + mu_m*L/(np.linalg.norm(pos)) + 0.5*np.dot(omega, np.matmul(m_Inertia,omega))
def setEmf(self,e):
self.emf = e
def getEmf(self):
return self.emf
def setTime(self,y):
self.time = t
def getTime(self):
return self.time