Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
e4a7da2
feat(rinex4-madoca): iter1 — scoping + foundation + plan docs
rsasaki0109 Apr 20, 2026
9dc50b9
feat(rinex4-madoca): iter2 — MADOCA test harness + 4 helpers at 1e-6 …
rsasaki0109 Apr 20, 2026
5eef6a0
feat(madoca): iter3 — expand MadocaParity to 10 helpers at 1e-6 parity
rsasaki0109 Apr 20, 2026
337af34
feat(madoca): iter4 — MADOCALIB bridge delegate + sample_data end-to-end
rsasaki0109 Apr 20, 2026
1829bc9
feat(madoca): iter5 — expand MadocaParity to 15 with MADOCA-specific …
rsasaki0109 Apr 20, 2026
d81573a
feat(madoca): admission-only strict IODE gate + start-tow CLI
rsasaki0109 Apr 23, 2026
d169e11
feat(madoca): hybrid IODE gate warmup-epochs diagnostic
rsasaki0109 Apr 23, 2026
f6ae71e
fix(madoca): suppress satellite PCO double-correction for APC SSR
rsasaki0109 Apr 24, 2026
659f71b
feat(madoca): --ar-method CLI flag + AR audit findings
rsasaki0109 Apr 24, 2026
90390ed
docs(madoca): AR pipeline gap analysis for future iteration
rsasaki0109 Apr 24, 2026
5f1f885
fix(build): supply missing antex structs + BeiDou helpers
rsasaki0109 Apr 24, 2026
0eb919f
fix(ppp): ANTEX PCO delta for APC-reference SSR + canonical signal ma…
rsasaki0109 Apr 24, 2026
7665d2c
feat(madoca): phase discontinuity indicator propagation
rsasaki0109 Apr 24, 2026
e818d67
fix(build): 2nd pass — ReceiverClockBiasGroup + observation_code decls
rsasaki0109 Apr 24, 2026
e238ebd
fix(ppp): skip APC-mode PCO delta for BeiDou (stopgap)
rsasaki0109 Apr 24, 2026
7653ea4
feat(madoca): --exclude-known-bad-madoca-sats CLI preset
rsasaki0109 Apr 24, 2026
35906df
feat(analysis): ppp_bad_sat_auto_exclude helper for MADOCA PPP
rsasaki0109 Apr 24, 2026
4a07579
feat(analysis): MADOCA / PPP log-diff + filter-summary scripts
rsasaki0109 Apr 24, 2026
0a5af61
WIP(madoca): iter6 native core + DD_MADOCA_CASCADED + extra-band scaf…
rsasaki0109 Apr 24, 2026
0de65fd
feat(gnss_ppp): --filter-iterations CLI knob for niter sweeps
rsasaki0109 Apr 24, 2026
078be1c
feat(gnss_ppp): --initial-ionosphere-variance / --initial-troposphere…
rsasaki0109 Apr 24, 2026
055b654
feat(gnss_ppp): --code-phase-error-ratio-l{1,2} CLI knobs
rsasaki0109 Apr 24, 2026
acd6de5
feat(clas): --clas-kinematic-reseed-position for kinematic CLAS PPP (…
rsasaki0109 May 2, 2026
b31c1cb
feat(clas): default --clas-kinematic-reseed-position to on (#46)
rsasaki0109 May 2, 2026
cd8e368
feat(clas): reseed quality gate + WLNL Partial AR knobs (default off)…
rsasaki0109 May 3, 2026
0293f54
feat(ppp-ar): --enable-ppp-holdamb Kalman pseudo-obs update for DD_IF…
rsasaki0109 May 3, 2026
3aaf5ac
feat(clas): add windowed qzss wrapper cache
rsasaki0109 May 5, 2026
81d2fc7
feat(spp): add native pntpos seed diagnostics
rsasaki0109 May 5, 2026
be14461
fix(qzss): preserve CLAS phase and atmos metadata
rsasaki0109 May 5, 2026
2cd8ce5
feat(analysis): add PPP and SPP diagnostic diff tools
rsasaki0109 May 5, 2026
37b4cca
feat(ppp): add native state log diagnostics
rsasaki0109 May 5, 2026
fc4ad34
feat(spp): expose native seed controls in CLI
rsasaki0109 May 5, 2026
7a2c431
feat(ssr): expose selected bias network metadata
rsasaki0109 May 5, 2026
427768d
feat(osr): propagate selected correction metadata
rsasaki0109 May 5, 2026
c055a5d
feat(ppp): add default-off AR hold and PAR paths
rsasaki0109 May 5, 2026
0058e8a
feat(atmos): add CLAS grid interpolation sampler
rsasaki0109 May 5, 2026
6e9ca22
fix(ppp): skip satellite PCO for APC SSR orbits
rsasaki0109 May 5, 2026
714d7c6
feat(clas): add diagnostic DD update path
rsasaki0109 May 5, 2026
d677e17
feat(ppp): wire native CLAS and AR knobs
rsasaki0109 May 5, 2026
f076016
feat(ppp): add native L6 and AR debug controls
rsasaki0109 May 5, 2026
036a2f2
Merge origin/develop into feat/rinex4-madoca
rsasaki0109 May 5, 2026
ced5eaf
Merge remote feat/rinex4-madoca history
rsasaki0109 May 5, 2026
bdbcd1e
Fix MADOCALIB parity export interface
rsasaki0109 May 5, 2026
05c67d7
feat(clas): bump --clas-ppc-profile clas_code_outlier_sigma_scale def…
rsasaki0109 May 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,52 @@ jobs:
output/ppp_static_products_comparison.png
if-no-files-found: ignore

madoca-parity:
needs: [changes, hygiene]
if: needs.changes.outputs.run_heavy == 'true'
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4

- name: Checkout MADOCALIB
uses: actions/checkout@v4
with:
repository: QZSS-Strategy-Office/madocalib
ref: 0089f7dc97e8e2ba283a40be2edf4b73a140df6c
path: external/madocalib

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libeigen3-dev libgtest-dev cmake build-essential python3-dev pybind11-dev

- name: Configure CMake with MADOCALIB parity link
run: |
cmake -B build-madoca-parity \
-DCMAKE_BUILD_TYPE=Release \
-DMADOCALIB_PARITY_LINK=ON \
-DMADOCALIB_ROOT_DIR="${GITHUB_WORKSPACE}/external/madocalib"

- name: Build MadocaParity tests
run: cmake --build build-madoca-parity --config Release --parallel --target run_tests

- name: Run MadocaParity
working-directory: build-madoca-parity
run: ./tests/run_tests --gtest_filter='*MadocaParity*'

- name: Upload MadocaParity diagnostics
if: failure()
uses: actions/upload-artifact@v4
with:
name: madoca-parity-diagnostics
path: |
build-madoca-parity/CMakeCache.txt
build-madoca-parity/Testing/Temporary/LastTest.log
build-madoca-parity/Testing/Temporary/LastTestsFailed.log
build-madoca-parity/CMakeFiles/CMakeConfigureLog.yaml
if-no-files-found: ignore

static-analysis:
needs: [changes, hygiene]
if: needs.changes.outputs.run_heavy == 'true'
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Build artifacts
build/
build_local/
build_madoca/
bin/
*.a
*.o
Expand Down
89 changes: 88 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,17 @@ find_package(nav_msgs QUIET)
find_package(std_msgs QUIET)
find_package(OpenCV QUIET COMPONENTS core imgproc imgcodecs)

option(MADOCALIB_PARITY_LINK "Link external MADOCALIB C sources for opt-in parity oracle tests" OFF)
set(MADOCALIB_ROOT_DIR
"$ENV{MADOCALIB_ROOT_DIR}"
CACHE PATH "Path to the MADOCALIB checkout root")

# List source files for the main library
set(GNSS_SOURCES
src/gnss.cpp
src/io/ntrip.cpp
src/io/rinex.cpp
src/io/rinex4.cpp
src/io/rtcm.cpp
src/io/rtcm_stream.cpp
src/io/ubx.cpp
Expand All @@ -40,6 +46,10 @@ set(GNSS_SOURCES
src/algorithms/ppp_osr.cpp
src/algorithms/ppp_wlnl.cpp
src/algorithms/ppp_clas_epoch.cpp
src/algorithms/madoca_core.cpp
src/algorithms/madoca_parity.cpp
src/algorithms/madocalib_oracle.cpp
src/algorithms/madocalib_bridge.cpp
src/algorithms/ppp.cpp
)

Expand All @@ -66,6 +76,78 @@ target_include_directories(gnss_lib PUBLIC
)
target_link_libraries(gnss_lib PUBLIC Eigen3::Eigen)

if(MADOCALIB_PARITY_LINK)
set(MADOCALIB_SRC_DIR "${MADOCALIB_ROOT_DIR}/src")
if(NOT EXISTS "${MADOCALIB_SRC_DIR}/rtklib.h")
message(FATAL_ERROR "MADOCALIB source tree not found: ${MADOCALIB_SRC_DIR}")
endif()

add_library(madocalib STATIC
${MADOCALIB_SRC_DIR}/rtkcmn.c
${MADOCALIB_SRC_DIR}/rinex.c
${MADOCALIB_SRC_DIR}/rtkpos.c
${MADOCALIB_SRC_DIR}/postpos.c
${MADOCALIB_SRC_DIR}/solution.c
${MADOCALIB_SRC_DIR}/lambda.c
${MADOCALIB_SRC_DIR}/geoid.c
${MADOCALIB_SRC_DIR}/sbas.c
${MADOCALIB_SRC_DIR}/preceph.c
${MADOCALIB_SRC_DIR}/pntpos.c
${MADOCALIB_SRC_DIR}/ephemeris.c
${MADOCALIB_SRC_DIR}/options.c
${MADOCALIB_SRC_DIR}/ppp.c
${MADOCALIB_SRC_DIR}/ppp_ar.c
${MADOCALIB_SRC_DIR}/ppp_iono.c
${MADOCALIB_SRC_DIR}/rtcm.c
${MADOCALIB_SRC_DIR}/rtcm2.c
${MADOCALIB_SRC_DIR}/rtcm3.c
${MADOCALIB_SRC_DIR}/rtcm3e.c
${MADOCALIB_SRC_DIR}/ionex.c
${MADOCALIB_SRC_DIR}/tides.c
${MADOCALIB_SRC_DIR}/mdccssr.c
${MADOCALIB_SRC_DIR}/mdciono.c
)
target_include_directories(madocalib PRIVATE ${MADOCALIB_SRC_DIR})
target_compile_definitions(madocalib
PRIVATE
TRACE
ENAGLO
ENAQZS
ENAGAL
ENACMP
ENAIRN
NFREQ=5
NEXOBS=5
)
target_link_libraries(madocalib PRIVATE m Threads::Threads)
if(UNIX AND NOT APPLE)
target_link_libraries(madocalib PRIVATE rt)
endif()

target_include_directories(gnss_lib PRIVATE ${MADOCALIB_SRC_DIR})
target_compile_definitions(gnss_lib
PUBLIC
GNSSPP_HAS_MADOCALIB_BRIDGE=1
GNSSPP_HAS_MADOCALIB_ORACLE=1
PRIVATE
TRACE
ENAGLO
ENAQZS
ENAGAL
ENACMP
ENAIRN
NFREQ=5
NEXOBS=5
"GNSSPP_MADOCALIB_ROOT=\"${MADOCALIB_ROOT_DIR}\""
)
target_link_libraries(gnss_lib PUBLIC madocalib)
else()
target_compile_definitions(gnss_lib
PUBLIC
GNSSPP_HAS_MADOCALIB_BRIDGE=0
GNSSPP_HAS_MADOCALIB_ORACLE=0)
endif()

# Create the no-optimization library
add_library(gnss_lib_noopt STATIC ${GNSS_SOURCES_NO_OPTIMIZATION})
target_compile_options(gnss_lib_noopt PRIVATE -O0)
Expand All @@ -75,8 +157,13 @@ target_include_directories(gnss_lib_noopt PUBLIC
)
target_link_libraries(gnss_lib_noopt PUBLIC Eigen3::Eigen)

set(GNSS_INSTALL_TARGETS gnss_lib gnss_lib_noopt)
if(MADOCALIB_PARITY_LINK)
list(APPEND GNSS_INSTALL_TARGETS madocalib)
endif()

install(
TARGETS gnss_lib gnss_lib_noopt
TARGETS ${GNSS_INSTALL_TARGETS}
EXPORT libgnssppTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
Expand Down
Loading