Skip to content

Introducing DifferentialPseudorangeFactor#2383

Merged
dellaert merged 1 commit intoborglab:developfrom
masoug:feature/differential-pseudorange
Feb 7, 2026
Merged

Introducing DifferentialPseudorangeFactor#2383
dellaert merged 1 commit intoborglab:developfrom
masoug:feature/differential-pseudorange

Conversation

@masoug
Copy link
Copy Markdown
Contributor

@masoug masoug commented Feb 3, 2026

Hello again! I've experimented with applying differential corrections to the PseudorangeFactor and found ~98% accuracy improvement. I've attached a copy of my experiments here: DifferentialPseudorangeExample.html

Similar to before, I'm seeking feedback on:

  • How to structure the PseudorangeFactors to handle commonality b/w PseudorangeFactor and DifferentialPseudorangeFactor? So far I went with simple inheritance, but if there's a more elegant way to arrange the classes, let me know!
  • What are preferred conventions for notebook library modules? I placed a gnss_utils.py to de-duplicate a lot of repetition, so I'm wondering if that's okay for the two pseudorange examples.
    • Would gnss_utils.py cause issues with google colab?
  • DifferentialPseudorangeExample.ipynb; what could be clarified, and what are some suggestions to communicate the significance of going from 30->0.4 meter accuracy? Does anyone know of good geospatial map plotting libraries that work well with Jupyter? ChatGPT suggested folium...

Anyway, I'm interested to hear what y'all think 🧠 I think I might look at carrier-phase factors next, so @varunagrawal I'd be interested in learning more about your experiences on that, if you're willing to share 🙏

Best,
Sammy

@ProfFan
Copy link
Copy Markdown
Collaborator

ProfFan commented Feb 3, 2026

Thank you for the contributions!

How to structure the PseudorangeFactors to handle commonality b/w PseudorangeFactor and DifferentialPseudorangeFactor?

I would recommend splitting out the common stuff as standalone utility functions instead of inheritance

What are preferred conventions for notebook library modules?

I think you can put things in gtsam_unstable but then it won't work until the next nightly build. For now a simple folded cell probably works better?

good geospatial map plotting libraries

https://docs.kepler.gl/docs/keplergl-jupyter

Copy link
Copy Markdown
Member

@dellaert dellaert left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice. Your factor graph illustration is also great, but maybe it would be more clear if you showed the correction and the pseudo factors for two satellites. You really have to read the text to understand that there one correction variable per satellite.

Also wondering what happens over time and as the receiver moves.

@dellaert
Copy link
Copy Markdown
Member

dellaert commented Feb 3, 2026

Yes, I walked in them (Coyote) hills. There used to be nuclear missiles stationed there, too 🚀

@dellaert
Copy link
Copy Markdown
Member

dellaert commented Feb 3, 2026

@varunagrawal
Copy link
Copy Markdown
Contributor

I don't think putting code in gtsam and the notebooks in gtsam_unstable is a good idea. It will make finding each part tricky.

I have used folium in the past and it is great! It makes really nice interactive widgets that one can play around with, and the API is really simple to get basic map and path rendering.

@dellaert
Copy link
Copy Markdown
Member

dellaert commented Feb 3, 2026

Agreed. @masoug, please put that module in the examples folder, next to the notebooks, and do the wget on colab.

@masoug
Copy link
Copy Markdown
Contributor Author

masoug commented Feb 5, 2026

Thanks for the feedback! I'll get these comments addressed in the next couple days 👍

@masoug masoug force-pushed the feature/differential-pseudorange branch 2 times, most recently from 8e69411 to 0184cae Compare February 6, 2026 07:00
@masoug
Copy link
Copy Markdown
Contributor Author

masoug commented Feb 6, 2026

Very nice. Your factor graph illustration is also great, but maybe it would be more clear if you showed the correction and the pseudo factors for two satellites. You really have to read the text to understand that there one correction variable per satellite.

I've updated the illustration by adding an image (I couldn't get mermaid render a decent graph) showing two satellites and their pseudorange factors. Attached is an updated notebook output: DifferentialPseudorangeExample.html

Also wondering what happens over time and as the receiver moves.

This is a great question! Spoiler alert: Position quality degrades over long times and great distances between the user and reference stations. I wanted to run an experiment where I plot accuracy as a function of distance-from-reference-station for a variety of test station across CORS, but I'd put that in a separate notebook not designed for documentation/tutorial.

@masoug masoug requested a review from dellaert February 6, 2026 07:21
Copy link
Copy Markdown
Member

@dellaert dellaert left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome ! cool new graphic :-)

@masoug masoug force-pushed the feature/differential-pseudorange branch from 0184cae to 0287893 Compare February 7, 2026 16:09
@dellaert dellaert merged commit 2cf30d6 into borglab:develop Feb 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants