Flat Plate Model
|Top Previous Next|
By default, FreeFlyer uses a spherical method to calculate Solar Radiation Pressure (SRP). Users can perform higher fidelity SRP modeling through the use of a flat plate model that represents the geometry of your Spacecraft. Users can define the size and orientation of plates with respect to the Spacecraft Body Coordinate System, configure their plates to track the Sun in either single-axis or two-axis rotation, and query the SRP force and torque generated by the PlateModel. Once the PlateModel is defined, users can visualize their flat plate model in Mission Views to visually confirm the plate configuration, including the plates' size, location, and normal direction. After the plate model is configured properly, users can easily export the PlateModel configuration to import into any other FreeFlyer Mission Plan.
Flat Plate Box with Four Wings Sample Mission Plan
This page is divided into the following sections:
The flat plate model approximates the shape of a satellite by a collection of flat plates, each of them having different reflectivity properties representing different sides of the satellite. In this approach the magnitude of the SRP acceleration will vary depending on the satellite's orientation with respect to the Sun.(1) The formula used to calculate the force for each plate(2) is:
The Solar Radiation Pressure (PSR) from Equation 1 is calculated using the formula in Equation 2:
The angle between the Sun vector and the normal of the plate (cosθ) is calculated using Equation 3:
For most systems the shadowing coefficient (scb) is calculated using the formula in Equation 4, but for Earth/Moon systems the shadowing coefficient (scb) is calculated using the formula in Equation 5.
Specular and diffuse reflectivity vary for different materials and can change over time with changing aspect toward the Sun. Specular reflectivity is the mirror-like reflection of light from a surface, where each incident ray is reflected at the same angle to the surface normal as the incident ray. Diffuse reflectivity is the reflection of light such that a ray incident on the surface is scattered. As an example, black paint may maintain a coefficient of specular reflectivity of 0 and diffuse reflectivity of ~0 over time; however, a material such as polished aluminum may start with a coefficient of specular reflectivity of 0.8 and diffuse reflectivity of ~0.1 but over time those values will decrease/increase accordingly.(4) It's important to configure each plate with realistic reflectivity values in order to get accurate force and torque results.
The PlateModel will automatically consider the Spacecraft's central body as the shadowing body. If the central body is the Earth or Moon, then both the Earth and Moon will be modeled as shadowing bodies. It is important to note, Plates do not cast shows on other plates; however, you can use the Plate.SRPAreaScaleFactor property to scale the force generated due to SRP on a plate to simulate "self shadowing" where one plate generates less force because it is behind another Plate.
Plates are one-sided, meaning that they only generate SRP when sunlight hits the ActiveFace, and it is transparent to SRP from the other side (the non-active face generates zero SRP). The nominally active face is determined by the order that the vertices are specified. This right-hand rule is applied to the first three vertices to determine the normal direction for the plate. You can reverse the normal direction and change the active face for the plate by setting the Plate.ActiveFace property to 1 or by changing the order that the vertices are specified.
To enable SRP forces, edit the Spacecraft object, proceed to the Force Model page, and check the "Solar Radiation Pressure" check box, as shown below. Once SRP forces are enabled, ensure that the PlateModel is selected in the Force Geometry drop-down menu.
To enable Flat Plate Solar Radiation Pressure via FreeFlyer script, use the syntax shown below:
The Spacecraft.PlateModel object holds all the settings for the plate model and contains a list of Plates called Spacecraft.PlateModel.Plates. Users have the ability to add Plates or a box of Plates to the PlateModel using one line of FreeFlyer script. The PlateModel.AddPlate() method has a number different overloads spanning from simply adding a Plate with a name to configuring a two-axis Sun tracking Plate all in one line of script. For more information on Single-Axis and Two-Axis Sun Tracking, refer to the Articulation section below. The script example below demonstrates adding a Plate to a PlateModel using the PlateModel.AddPlate() method:
Configuring Rectangular and Circular Plates
Once a Plate has been added to the PlateModel, the Plate can be easily be configured with a rectangular or circular shape using the Plate.ConfigureRectangularShape() and Plate.ConfigureCircularShape() methods. These methods are convenient to easily model hardware attached to a Spacecraft such as a solar array or dish. The script examples below demonstrate how to configure a rectangular or circular shaped Plate to add to a PlateModel:
Rectangular Plate Example
Circular Plate Example
Creating Boxes of Plates
A user also has the ability to add a box of Plates to a Plate model using the PlateModel.AddBoxOfPlates() method. Using the PlateModel.AddBoxOfPlates() adds six Plates to the Spacecraft in a cube or rectangular prism shape. The box is defined by X, Y, and Z dimensions in the Spacecraft BCS and is centered at a user defined centerPosition. The syntax example below demonstrates how to configure a box of plates:
Box of Plates Example
Configuring Arbitrarily Shaped Plates
For shapes other than rectangles, circles, and boxes, you can manually assign the locations of the vertices to define the shape of the Plate with the Spacecraft.PlateModel.Plates.Vertices property. The plate is defined using a triangle strip, where every three vertices defines a triangle and the plates' normal direction is defined using the right hand rule. Note, the vertices for a given plate must be coplanar. In the image below, a visual representation of the triangle strip winding rules used to define plates with vertices can be seen.
Triangle Strip Winding Rules
In the simple example below, a Plate with a specular reflectivity and diffuse reflectivity value of 0.4, is configured to have 3 vertices and a face color of yellow.
Simple Plate Example
Specifying Reflectivity Coefficients
For each Plate associated with the PlateModel users also have the ability to set the Diffuse Reflectivity, Specular Reflectivity, and SRP Area Scale Factor. As mentioned in the Background section, the diffuse reflectivity coefficient is the reflection of light such that a ray incident on the surface is scattered. Diffuse reflectivity is the ratio of the power of the reflected wave to that of the incident wave, where increasing the coefficient corresponds to a greater degree of scatter, thus decreasing power of the reflected wave.
Whereas, the specular reflectivity coefficient represents the mirror-like reflection of light from a surface, where each incident ray is reflected at the same angle to the surface normal as the incident ray. Specular reflectivity is the ratio of the power of the reflected wave to that of the incident wave, where increasing the coefficient corresponds to increasing power of the reflected wave.
Note: The sum of Spacecraft.PlateModel.Plates.DiffuseReflectivity and Spacecraft.PlateModel.Plates.SpecularReflectivity must be less than or equal to 1.
Querying Plate Attributes
Along with defining parameters for a Plate, users can further analyze their Plates by reporting out the Absorption, Area, Center of Pressure, and Normals. A Plate's coefficient of absorption is computed as shown below:
The area of a plate is computed as the sum of each triangle in the triangle strip that defines the Plate's shape. For the area of a PlateModel projected along a particular direction, see the Querying PlateModel Force, Torque, and Area section below. The Spacecraft.PlateModel.Plates.Normal property returns the normal vector for the Plate in the Spacecraft Body Coordinate System frame.
In the script example below, a Plate is configured using three vertices then the specular and diffuse reflectivity values are defined. Once the Plate is configured, the Plate's Area, Normal, Center of Pressure, and Absorption are reported.
Note: Plates are one-sided, meaning it only generates SRP when sunlight hits the ActiveFace, and it is transparent to SRP from the other side (the non-active face generates zero SRP).
The SRP Area Scale Factor scales the force generated due to SRP on the Plate and can be specified by the user to simulate "self-shadowing" where one plate generates less force because it is behind another Plate. The simple example below sets up two rectangular plates, one in front of the other, then assigns the "hidden" Plate to have a lower SRPAreaScaleFactor such that it will produce a lower force due to SRP because it is behind another Plate.
Model SRP Area Scale Factor with one Plate in front of another
SRP Force for two Plates
As shown in the example above, the "Back" Plate lies behind the "Front" Plate so it will generate less SRP Force. By changing the SRPAreaScaleFactor value we have simulated that the "Back" Plate will generate half the SRP force that the "Front" Plate will generate and the results show that to be true.
Users can define the orientation of Plates with respect to the Sun by configuring their Plates to track the Sun in either single-axis or two-axis rotation by using the Spacecraft.PlateModel.Plates.ArticulationModel property.
Setting the Plate.ArticulationModel property equal to zero corresponds to a Plate which does not track the Sun.
Single Axis Articulation
Setting the Plate.ArticulationModel equal to one corresponds to a Plate which will rotate about its primary axis to the Sun. The Spacecraft.PlateModel.Plates.PrimaryRotationAxis property is used to define a vector describing the direction of the Plate's primary rotation axis, specified in the Spacecraft Body Coordinate System. The position of the pivot point of the Plate's primary rotation axis in the Spacecraft's BCS can be defined using the Spacecraft.PlateModel.Plates.PrimaryPivotPoint property.
For a better understanding, a visual representation of a single-axis Sun tracking articulation model can be seen below. In the following two examples, a box of plates is used to model the Spacecraft's "bus" and a rectangular plate is used to model single-axis and two-axis articulation. For the single-axis tracking example, once the Plates are configured, the rectangular plate is set to use a single-axis tracking model with a primary rotation axis on the +Y axis, and a primary pivot point at the center of the Spacecraft's BCS. For visualizations, the PrimaryRotationAxis can be seen in red along the Y-axis of the Spacecraft's BCS. The normal of the rectangular plate can be seen in aqua tracking the Sun using only one degree of freedom.
Single-Axis Sun Tracking Articulation Model
Perfect Tracking with Two Axis Articulation
Setting the Plate.ArticulationModel property equal to two corresponds to a plate which will rotate about its primary and secondary axes to track the Sun. When using two-axis Sun tracking as the articulation model, the secondary rotation axis intercept must be specified. The Plates.SecondaryRotationAxisIntercept property specifies the location where the second rotation axis intersects the primary rotation axis and is measured (in meters) from the primary pivot point along the primary rotation axis.
For a better understanding, a visual representation of a two-axis Sun tracking articulation model can be seen below.
Perfect Tracking Diagram
For the two-axis tracking example, once the Plates are configured, the rectangular plate is set to use a two-axis tracking model with a primary rotation axis on the +Y axis, and a primary pivot point at the center of the Spacecraft's BCS. In addition, the SecondaryRotationAxisIntercept is set to 2, meaning that the intercept will be two meters from the primary pivot point along the primary rotation axis (+Y direction). For visualizations, the PrimaryRotationAxis can be seen in red along the Y-axis of the Spacecraft's BCS and the SecondaryRotationAxis is colored lime.The normal of the rectangular plate can be seen in aqua and is collinear with the Sun vector as the Plate is pointing straight at the Sun.
Two-Axis Sun Tracking Articulation Model
Getting Updated Geometry for Articulating Plates
While propagating, to get the updated normal vector for a Plate as it rotates to track the Sun, use the Spacecraft.PlateModel.Plates.GetUpdatedNormal() method. The Spacecraft.PlateModelPlates.GetUpdatedVertices() method can be used to get the vertex locations in the Spacecraft's BCS as the plate points to track the Sun. Similarly, the Spacecraft.PlateModel.Plates.GetUpdatedCenterOfPressure() method returns the updated center of pressure for a specified plate as the plate points to track the Sun.
A user can query values such as the SRP force, torque, or incident area throughout the duration of the Spacecraft's propagation. The PlateModel.GetSRPForce() method returns the current SRP force on the PlateModel and can be reported in either a body frame (Spacecraft BCS) or in an inertial frame (MJ2000 Earth Equatorial).
The PlateModel.GetSRPTorque() method returns the current SRP torque on the PlateModel about the Spacecraft's center of mass (COM) or from a user specified reference point in the Spacecraft BCS.
The PlateModel.GetIncidentArea() method returns the incident area of the PlateModel as seen from a specified direction. The direction can be specified in either the Spacecraft BCS fixed frame or MJ2000 Earth Equatorial inertial frame. The script example shown below demonstrates how to query these values once a PlateModel has been configured:
SRP Force Plot
SRP Torque Plot
Once the PlateModel is defined, users can visualize their flat plate model in Mission Views to visually confirm the plate configuration, including the plates' size, location, and normal direction. Users have the ability visualize a PlateModel using the Spacecraft.PlateModel.Visible property and can increase or decrease the scale of the PlateModel using the Spacecraft.PlateModel.VisualScale property. Users can set the colors for individual Plates using the Plate.FaceColor property or for the whole PlateModel at once using the PlateModel.SetFaceColors() method. Users can choose to draw the PlateModel as a solid, wireframe, or solid with wireframe using the Spacecraft.PlateModel.DrawMethod property. As an example, the script snippet below demonstrates how to create a box of plates and draw the PlateModel with different colors for the faces and wireframe.
Box of Plates drawn with solid faces and a wireframe
Note: In the example above, the faces will be colored gold when they are in view of the Sun.
The Spacecraft.PlateModel.DrawNormals property can be used to determine whether Plate normals should be drawn in views.
Draw Normals for all Plates
If a Plate is defined with either a single-axis or two-axis sun tracking articulation model, the user can visualize the rotation axes using the Spacecraft.PlateModel.DrawRotationAxes property.
Draw Rotation Axis for Articulating Plate
In the example below, the PlateModel is drawn as a solid by setting the Spacecraft.PlateModel.DrawMethod property equal to 0 and the faces will be yellow. The normals are drawn by setting the Spacecraft.DrawNormals property equal to 1 and the normals are colored orange using the PlateModel.SetNormalColors() method. Finally, the PlateModel is set to be visualized in the view by setting the Spacecraft.PlateModel.Visible property equal to 1 and the visual scale is decreased by setting the Spacecraft.PlateModel.VisualScale property equal to 1000 meters.
Note: For a plate in non-tracking mode, rotation axes can not be drawn. For a plate in single-axis mode, only the primary axis will be drawn. For a plate in two-axis mode, both the primary and secondary axes will be drawn.
Once the PlateModel is configured, the Put command can be used to store the PlateModel configuration in an external XML-formatted file to be used in any Mission Plan. Similarly, the Get command can be used to retrieve a saved PlateModel that has been stored in an external file. To save a PlateModel to an external file, or retrieve a PlateModel from a previously saved configuration, use the syntax shown below:
•ForceModel Properties and Methods