So I clearly did something wrong. With some help from stellarium I found a satellite that should be visible in my FoV, from my station location, yet I receive not data from generator. Below you can find sinppets from my code, any help will be much appreciated.
- Setting up TLE (UME 2 (ISS-B) satellite. According to this TLE and stellarium it should be visible from Kryoneri at around 18:04 UTC, 2022.09.19, for almost a minute for detector set up as shown few cells below):
tle_line1 = "1 10674U 78018A 22261.90676743 -.00000042 00000-0 12781-4 0 9997"
tle_line2 = "2 10674 69.3613 128.1060 0161631 151.4638 222.0348 13.43632735186960"
mytle = TLE(tle_line1,tle_line2)
ITRF = FramesFactory.getITRF(IERSConventions.IERS_2010, True)
earth = OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS,
Constants.WGS84_EARTH_FLATTENING,
ITRF)
sun = CelestialBodyFactory.getSun()
longitude = radians(22.61861)
latitude = radians(37.97194)
altitude = 930.0
station = GeodeticPoint(latitude, longitude, altitude)
stationFrame = TopocentricFrame(earth, station, "Kryoneri")
groundStation = GroundStation(stationFrame)
- Setting up Generator, propagotr and measurement builder:
propagator = TLEPropagator.selectExtrapolator(mytle)
generator = Generator()
sat = generator.addPropagator(propagator)
AzElBuilder = AngularAzElBuilder(None, groundStation, [0.,0.], [1.,1.], sat)
- Function to convert azimuth (measured clockwise from Y axis) and elevation (measured from reference plane towards zenith) to cartesian:
def sph2car(phi, theta, r=1.):
phi = FastMath.toRadians(90.-phi)
theta = FastMath.toRadians(theta)
return [
r * FastMath.cos(phi) * FastMath.cos(theta),
r * FastMath.sin(phi) * FastMath.cos(theta),
r * FastMath.sin(theta)
]
- Setting up FoV and FoV ground detector:
phi = 180.
theta = 45.
height = 10.
width = 15.
x,y,z = sph2car(phi,theta)
center = Vector3D([x,y,z])
axis1 = Vector3D([1.0,0.0,0.0])
axis2 = Vector3D([0.0,FastMath.sqrt(2.0)/2.0,FastMath.sqrt(2.0)/2.0])
ha1 = FastMath.toRadians(width)/2.
ha2 = FastMath.toRadians(height)/2.
fov = DoubleDihedraFieldOfView(center, axis1, ha1, axis2, ha2, 0.0)
fovGroundDetector = GroundFieldOfViewDetector(stationFrame, fov).withHandler(ContinueOnEvent())
- Setting up night detector:
nightDetector = GroundAtNightDetector(
stationFrame, sun, GroundAtNightDetector.CIVIL_DAWN_DUSK_ELEVATION, None
).withHandler(ContinueOnEvent())
- Setting up eclipse detector:
eclipseDetector = EclipseDetector(sun, Constants.SUN_RADIUS, earth).withPenumbra().withHandler(ContinueOnEvent())
- Combining detetctors with boolean detector:
fovAtNightDetector = BooleanDetector.andCombine([
BooleanDetector.notCombine(fovGroundDetector), nightDetector, eclipseDetector
]).withHandler(ContinueOnEvent())
scheduler = EventBasedScheduler(AzElBuilder, FixedStepSelector(10.0, TimeScalesFactory.getUTC()),
generator.getPropagator(sat), fovAtNightDetector,
SignSemantic.FEASIBLE_MEASUREMENT_WHEN_NEGATIVE)
generator.addScheduler(scheduler)
- Getting the list of measurements:
t0 = AbsoluteDate(2022,9,19,18,0,0.0, TimeScalesFactory.getUTC())
t1 = AbsoluteDate(2022,9,19,18,10,0.0, TimeScalesFactory.getUTC())
data = generator.generate(t0,t1)
I don’t think this works properly. It gives me SortedSet of size 61, while this satellite should be visible for a minute or less, so I think the size should be closer to 6 with 10s step size. Additionally I’m not sure how parse this ObservedMeasurements to get ALT and AZ (or X, Y, Z in my stationFrame). I know that I can derive date of detection using geteDate() method and I can get NORAD ID from TLE.
EDIT:
Below is screenshot from stellarium showing that this satellite (UME 2) should be detected: