Skip to content

GitLab

  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • O Orekit Python Wrapper
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 14
    • Issues 14
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Orekit Labs
  • Orekit Python Wrapper
  • Issues
  • #433

Closed
Open
Created Dec 23, 2020 by Hao Peng@astroHaoPeng

An inconsistent definition of ground track and corridor in the tutorial

I think there is a mistake or at least an inconsistency in the Track_Corridor tutorial

Particularly, in the handleStep method of class CorridorHandler(PythonOrekitFixedStepHandler) (In [10]). I describe the problem as comments starting with PH: as following:

def handleStep(self, currentState, isLast):
        # compute sub-satellite track
        date    = currentState.getDate()
        pvInert = currentState.getPVCoordinates()
        t       = currentState.getFrame().getTransformTo(self.earth.getBodyFrame(), date)
        p       = t.transformPosition(pvInert.getPosition())  # Hao: here `p` is a Cartesian coordinate in ITRF
        v       = t.transformVector(pvInert.getVelocity())
        center  = self.earth.transform(p, self.earth.getBodyFrame(), date)  # Hao: here `center` is defined as a geocentric ground track point.
        
        # compute left and right corridor points
        # Hao: here `-p` points to geocentric, so `nadir` is defined as a geocentric direction but not a **geocentric** one. 
        #      This is inconsistent with `center` above.
        #      The geocentric `left` and `right` will then not centered at the geodetic `center`.
        nadir      = p.normalize().negate()
        crossTrack = p.crossProduct(v).normalize()
        leftLine   = Line(p, Vector3D(1.0, p, self.deltaR, nadir,  self.deltaC, crossTrack), 1.0)  # PH: line is defined w.r.t. the geocentric nadir
        left       = self.earth.getIntersectionPoint(leftLine, p, self.earth.getBodyFrame(), date)
        rightLine  = Line(p, Vector3D(1.0, p, self.deltaR, nadir, -self.deltaC, crossTrack), 1.0)
        right      = self.earth.getIntersectionPoint(rightLine, p, self.earth.getBodyFrame(), date)

My understanding about geodetic or geocentric nadir is based on this post: https://space.stackexchange.com/a/19729/28220

Based on your codes, my way to calculate the geodetic nadir direction is to construct a center point with 0 altitude, then calculate the normalized vector from center to p directly in ITRF, as following:

center = GeodeticPoint(center.latitude, center.longitude, 0.0)
center_cartesian= t.inverse.transformPosition(self.earth.transform(center))
nadir_geodetic = t.transformPosition(center_cartesian).subtract(p).normalize()

An alternative simplification is to use self.earth.projectToGround directly (not getting exactly identical results but within tolerance of about 10^-6 m):

center_cartesian = self.earth.projectToGround(pvInert.getPosition(), date, currentState.frame)
nadir_geodetic = t.transformPosition(center_cartesian).subtract(p).normalize()

I'm only about 80% sure about this clarification. So, I wish you could spend some time on further validating the issue.

Thanks, and happy holiday!

Assignee
Assign to
Time tracking