RW attitude control for Cubesat like missions

43 views
Skip to first unread message

Pietro De Marchi

unread,
Jul 27, 2022, 10:39:27 AM7/27/22
to Basilisk Forum
Hi there,

I am trying a simulation in Basilisk framework about attitude control with RWs.
In particular I am testing that with a sufficiently light satellite (20kg more or less).
The model I am using in this case is 'Honeywell_HR16', testing a wide range of OmegaV and maxMom for the three RW. I am reporting here instead the settings for the control:
------------------------------------------------------------------------------------
sNavObject = simpleNav.SimpleNav()
sNavObject.ModelTag = "SimpleNavigation"
scSim.AddModelToTask(simTaskName, sNavObject)

# add RW power modules
rwPowerList = []
for c in range(numRW):
powerRW = ReactionWheelPower.ReactionWheelPower()
powerRW.ModelTag = scObject.ModelTag + "RWPower" + str(c)
powerRW.basePowerNeed = 5. # baseline power draw, Watts
powerRW.rwStateInMsg.subscribeTo(rwStateEffector.rwOutMsgs[c])
powerRW.mechToElecEfficiency = 0.5
scSim.AddModelToTask(simTaskName, powerRW)
rwPowerList.append(powerRW)

#
# setup the FSW algorithm tasks
#

# Create a simpleBattery and attach the sources/sinks to it
powerMonitor = simpleBattery.SimpleBattery()
powerMonitor.ModelTag = "powerMonitor"
dd = 0 # try to set battery charge to 0 !!!!!!!!!!!!!!!!!!
powerMonitor.storageCapacity = 300000 # W-s
powerMonitor.storedCharge_Init = powerMonitor.storageCapacity * 0.8 # 20% depletion
scSim.AddModelToTask(simTaskName, powerMonitor)
# connect RW power to the battery module
for c in range(numRW):
powerMonitor.addPowerNodeToModel(rwPowerList[c].nodePowerOutMsg)


# setup guidance module
attGuidanceConfig = hillPoint.hillPointConfig()
attGuidanceWrap = scSim.setModelDataWrap(attGuidanceConfig)
attGuidanceWrap.ModelTag = "hillPoint"
scSim.AddModelToTask(simTaskName, attGuidanceWrap, attGuidanceConfig)

# setup the attitude tracking error evaluation module
attErrorConfig = attTrackingError.attTrackingErrorConfig()
attErrorWrap = scSim.setModelDataWrap(attErrorConfig)
attErrorWrap.ModelTag = "attErrorInertial3D"
scSim.AddModelToTask(simTaskName, attErrorWrap, attErrorConfig)

# setup the MRP Feedback control module
mrpControlConfig = mrpFeedback.mrpFeedbackConfig()
mrpControlWrap = scSim.setModelDataWrap(mrpControlConfig)
mrpControlWrap.ModelTag = "MRP_Feedback"
scSim.AddModelToTask(simTaskName, mrpControlWrap, mrpControlConfig)
------------------------------------------------------------------------------------

So nothing to do, control errors are very high and apparently there is no chance to set up a control with such small mass.
Using higher mass (as reported in all Basilisk examples, around 300kg...) it perfectly works, just tuning RW characteristics.

Anyone else has experienced such a problem and known a possible solution?
I can provide more details about the simulation if needed.

Regards,
PDM

Hanspeter Schaub

unread,
Jul 28, 2022, 9:50:55 AM7/28/22
to Basilisk Forum
Did you adjust the MRP feedback control gains to be sensible for this small inertia?  If not, you'll have a crazy fast response that will be unstable with the discrete time steps.
Reply all
Reply to author
Forward
0 new messages