Well unfortunately, the topic did not recieve any answers, however, in the meantime I’ve managed to discover few things. So basically what I’ve said above is not actually correct. The created PolygonalFieldOfView
does move with the s/c.
Yet there is a peculiar thing here… The custom polygonal zone I created for FoV is slightly changed after I requested the corresponding footprints with getFootPrint
method. The code snipped is as following:
# Create a random Field-Of-View
pattern = [(49.2715, -163.7803), (49.0127, -163.7604), (48.9927, -163.3820),
(49.2915, -163.382), (49.2715, -163.7803)]
geodeticPoints3 = []
for lat3, lon3 in pattern:
geodeticPoints3.append(GeodeticPoint(radians(lat3), radians(lon3), 0.0))
fov_polygon = EllipsoidTessellator.buildSimpleZone(hyperplaneThickness, geodeticPoints3)
imagerFOV1 = PolygonalFieldOfView(fov_polygon, fov_margin) # ← margin
sampling_step = 1000.0
# Define FootprintOverlapDetector and add it to the propagator
FPODetector = FootprintOverlapDetector(imagerFOV1, earth,
region_polygon0,
sampling_step).withHandler(ContinueOnEvent())
A custom zone for the FoV of the spacecraft is created with lat/long values given in pattern variable.
pos = [] # position vector array to be filled.
footPrintList = []
print(initialDate)
###Start SGP4 propagation from initialDate up until finalDate
while (initialDate.compareTo(finalDate) <= 0.0):
SGP4_pv = SGP4.getPVCoordinates(initialDate, ECI) # Get PV coordinates
posSGP4 = SGP4_pv.getPosition() # But we only want position vector.
pos.append((posSGP4.getX(),posSGP4.getY(),posSGP4.getZ())) # Get individual elements of position
posSGP4 = pos
initialCartesianOrbit = CartesianOrbit(SGP4_pv, ECI, initialDate, Mu_earth)
state = SpacecraftState(initialCartesianOrbit, satellite_mass)
inertToBody = state.getFrame().getTransformTo(earth.getBodyFrame(), state.getDate())
fovToBody = Transform(state.getDate(),
state.toTransform().getInverse(),
inertToBody)
footprint = imagerFOV1.getFootprint(fovToBody, earth, radians(10.0))
footPrintList.append(footprint)
initialDate = initialDate.shiftedBy(60.0) # Propagate with 60 sec intervals.
The first element of the footPrintList
array turns out to be the following lat/long values, which differ from what we entered as our custom zone at the first place:
[[{lat: 51.0573950815 deg, lon: -167.9919077077 deg, alt: 0},
{lat: 51.0392380545 deg, lon: -167.9489124275 deg, alt: 0},
{lat: 51.0577525 deg, lon: -167.9260072997 deg, alt: 0},
{lat: 51.0777877091 deg, lon: -167.9765747604 deg, alt: 0}]]
Since the zone is changed here (somehow), my results become wrong. What causes this change, any ideas?