import math
import numpy as np
from Basilisk.architecture import messaging
[docs]def create_rw_lists():
"""
Create RW lists containing Gs (spinning axis) data and Js (inertia) data
"""
RWAGsMatrix = []
RWAJsList = []
wheelJs = 50.0 / (6000.0 / 60.0 * math.pi * 2.0)
rwElAngle = 42.5 * math.pi / 180.0
rwClockAngle = 45.0 * math.pi / 180.0
RWAJsList.extend([wheelJs])
RWAGsMatrix.extend([
math.sin(rwElAngle) * math.sin(rwClockAngle),
math.sin(rwElAngle) * math.cos(rwClockAngle),
-math.cos(rwElAngle)
])
rwClockAngle += 90.0 * math.pi / 180.0
RWAJsList.extend([wheelJs])
RWAGsMatrix.extend([math.sin(rwElAngle) * math.sin(rwClockAngle),
-math.sin(rwElAngle) * math.cos(rwClockAngle), math.cos(rwElAngle)])
rwClockAngle += 180.0 * math.pi / 180.0
RWAJsList.extend([wheelJs])
RWAGsMatrix.extend([math.sin(rwElAngle) * math.sin(rwClockAngle),
math.sin(rwElAngle) * math.cos(rwClockAngle), -math.cos(rwElAngle)])
rwClockAngle -= 90.0 * math.pi / 180.0
RWAJsList.extend([wheelJs])
RWAGsMatrix.extend([math.sin(rwElAngle) * math.sin(rwClockAngle),
-math.sin(rwElAngle) * math.cos(rwClockAngle), math.cos(rwElAngle)])
return RWAGsMatrix, RWAJsList
[docs]def CreateRWAClass():
"""
Create Dynamics RW class and initialize it
"""
RWAGsMatrix, RWAJsList = create_rw_lists()
rwClass = messaging.RWConstellationMsgPayload()
rwPointerList = list()
rwClass.numRW = 4
i = 0
while i < 4:
rwPointer = messaging.RWConfigElementMsgPayload()
rwPointer.gsHat_B = RWAGsMatrix[i * 3:i * 3 + 3]
rwPointer.Js = RWAJsList[i]
rwPointer.uMax = 0.2
rwPointerList.append(rwPointer)
i += 1
rwClass.reactionWheels = rwPointerList
return rwClass
[docs]def CreateRWAClassDyn():
"""
Create FSW RW Config class and initialize it
"""
RWAGsMatrix, RWAJsList = create_rw_lists()
rwConfigData = messaging.RWArrayConfigMsgPayload()
gsList = np.zeros(3 * messaging.MAX_EFF_CNT)
gsList[0:3 * 3 + 3] = RWAGsMatrix[0:3 * 3 + 3]
rwConfigData.GsMatrix_B = gsList
jsList = np.zeros(messaging.MAX_EFF_CNT)
jsList[0:4] = RWAJsList[0:4]
rwConfigData.JsList = jsList
rwConfigData.numRW = 4
torqueMax = np.zeros(messaging.MAX_EFF_CNT)
torqueMax[0:4] = [0.2] * 4
rwConfigData.uMax = torqueMax
return rwConfigData