Module: simpleSolarPanel

Executive Summary

This module provides first-order modeling of power generation from an attitude and orbitally coupled solar panel. Specifically, it:

  1. Evaluates the impact of shadowing using an assigned EclipseMsgPayload

  2. Computes power generation using a cosine law based on the panel area, efficiency, and attitude

  3. Allows for the panel body-fixed orientation nHat_B, the panel area, and the panel efficiency to be set via setPanelParameters().

  4. Writes out a PowerNodeUsageMsgPayload describing its power generation.

    Power generation is computed according to SMAD:

    \[W_{out} = W_{base} * C_{eclipse} * C_{panel} * (\hat{n}\cdot \hat{s}) A_{panel}\]

    where \(W_{base}\) is the base power (in \(\mbox{W}/\mbox{m}^2\)) at the spacecraft location from the sun, \(C_{eclipse}\) is the eclipse/penumbra mitigator on the sun’s power (1 corresponds to no shadow, 0 corresponds to eclipse), \(C_{panel}\) represents the panel’s efficiency at converting solar energy into electrical energy, \((\hat{n}\cdot \hat{s})\) represents the alignment between the panel’s normal vector and the spaceraft-sun unit vector, and \(A_{panel}\) represents the panel area in meters squared.

For more information on how to set up and use this module, see the simple power system example: scenarioPowerDemo

Module Assumptions and Limitations

This module only uses the input and output messages of the PowerNodeBase base class. Further, the module does not include any self-shadowing in the solar panel power generation evaluation.

Message Connection Descriptions

The following table lists additional module input messages beyond those specified in Module: powerNodeBase.

Module I/O Messages

Msg Variable Name

Msg Type




Describes sun position



Describes spacecraft position, attitude.



(optional) Describes shadow factor due to planetary bodies.

User Guide

This module inherits the user guide from the PowerNodeBase base class. Module specific instructions include:

  • must connect sunInMsg and stateInMsg input messages

  • the sunEclipseInMsg message is optional. If provided the modules uses the eclipse shadow factor to adjust the power generation if needed.

  • must specify the variables panelArea, panelEfficiency and nHat_B. These there parameters can also be set at the same time through setPanelParameters(nHat_B, panelArea, panelEfficiency)

For more information on how to set up and use this module, see the simple power system example: scenarioPowerDemo

class SimpleSolarPanel : public PowerNodeBase
#include <simpleSolarPanel.h>

simple solar panel class

Public Functions

bool customReadMessages()
void customReset(uint64_t CurrentClock)

custom solar panel reset function

void setPanelParameters(Eigen::Vector3d nHat_B, double panelArea, double panelEfficiency)

This method allows for solar panel parameters to be set.

  • nHat_B – The normal vector of the solar panel expressed in the spacecraft body frame.

  • panelArea – the spacecraft panel area in meters squared.

  • panelEfficiency – The efficiency of the solar panel in nondimensional units; typically ranges from 0.1 to 0.5.



Public Members

ReadFunctor<SpicePlanetStateMsgPayload> sunInMsg

[-] sun data input message

ReadFunctor<SCStatesMsgPayload> stateInMsg

[-] spacecraft state input message

ReadFunctor<EclipseMsgPayload> sunEclipseInMsg

[-] Messun eclipse state input message

double panelArea

[m^2] Panel area in meters squared.

double panelEfficiency

[W/W] Panel efficiency in converting solar energy to electrical energy.

Eigen::Vector3d nHat_B

[-] Panel normal unit vector relative to the spacecraft body frame.

BSKLogger bskLogger

BSK Logging

Private Functions

void evaluatePowerModel(PowerNodeUsageMsgPayload *powerUsageMsg)

This method computes the power generated by the solar panel and stores it in a PowerNodeUsageMsgPayload. This is evaluated in two steps:

  1. Compute the amount of power available at the spacecraft position using the SOLAR_FLUX_EARTH macro, distance factor, and eclipse shadow factor;

  2. Compute how much of that power is captured and converted to power using the projectedArea and panelEfficiency attributes.



void computeSunData()

This method computes the spacecraft-sun vector, the solar panel’s projected area, and the sunDistanceFactor based on the magnitude of the spacecraft sun vector.



Private Members

double projectedArea

[m^2] Area of the panel projected along the sun vector.

double sunDistanceFactor

[-] Scale factor on the base solar power computed using the true s/c-sun distance.

SpicePlanetStateMsgPayload sunData

[-] Unused for now, but including it for future

SCStatesMsgPayload stateCurrent

[-] Current SSBI-relative state

double shadowFactor

[-] solar eclipse shadow factor from 0 (fully obscured) to 1 (fully visible)