feat(gps): expose ESKF build profiles and 460800 UART

This commit is contained in:
2026-07-25 19:39:36 +03:00
parent ecbb8d0b68
commit 49b8609bb4
16 changed files with 393 additions and 39 deletions
+67 -15
View File
@@ -1,6 +1,8 @@
# GPS System Port Notes
Bu notlar GPS bare-metal yaziliminin VCU118 Rocket SoC portu ve interrupt debug sureci icin yazildi.
Bu notlar GPS bare-metal yaziliminin VCU118/Genesys2 Rocket SoC portunu,
tracking Doppler/C/N0 yolunu, ESKF entegrasyonunu ve interrupt debug surecini
belgeler.
## Uygulama akisi ve dosya sinirlari
@@ -66,6 +68,34 @@ ve raw kuyruga koyar. GPS ISR'leri acquisition/tracking olaylarini kaydeder.
interrupt'lari gelebilecegi icin IMU kuyrugu WLS'den hem once hem sonra drain
edilir; GPS update'i WLS bitis zamaninda degil capture epoch'unda uygulanir.
### ESKF entegrasyonunda yapilanlar
- TDK ICM42688 ve ST LSM6DSOX suruculeri sensor-markasindan bagimsiz
`imu_sensor`/`imu_sample_t` sinirinin arkasina alindi. Her IMU ornegi olcum
aninda monotonik CLINT timestamp'i alir; ISR icinde ESKF matematigi
calismaz.
- Filtre ENU position/velocity, quaternion attitude, accel bias ve gyro bias
iceren 15 hata durumlu ESKF'dir. Prediction her ham IMU orneginde midpoint
mechanization ile calisir; telemetry bolucusu prediction oranini dusurmez.
- GPS WLS position ve Doppler velocity ayni capture timestamp'iyle tek
`fusion_navigation_measurement_t` icinde tasinir. Gecikmis GPS olcumu
history icindeki kendi epoch'una uygulanir; sonraki IMU ornekleri current
time'a kadar tekrar oynatilir.
- Position ve velocity update'lerinin ayri 3-DOF NIS kapilari ve
accept/reject sayaclari vardir. Velocity bozuksa ayni epoch'taki gecerli
position update'i geri alinmaz.
- Doppler WLS ECEF velocity covariance'i ENU'ya dondurulur. Kart verisinde
zayif geometrinin formal covariance'i asiri iyimser yapmamasi icin
horizontal `2.0 m/s`, vertical `3.0 m/s` minimum standard deviation floor'u
uygulanir; daha buyuk formal belirsizlik korunur.
- Durağanlik supervisor'u IMU/GNSS hareket kanitlarini histerezisle
birlestirir ve yalniz guvenli durumda ZUPT/zero-gyro update uygular.
GPS kesintisinde sahte position olcumu uretilmez; dead-reckoning devam eder
ve covariance buyur.
- Kotu ilk fix sonraki tutarli fix'leri surekli NIS reject'e kilitlerse,
timeout ve coklu-fix sureklilik kosuluyla yalniz position state/covariance
yeniden ankrajlanir. Velocity, attitude ve IMU bias state'leri korunur.
## Generic IMU Mimarisi (TDK ve ST)
GPS/ESKF artik dogrudan bir sensor surucusune bagli degildir. Veri yolu:
@@ -129,6 +159,23 @@ Bu durumda GPS acquisition/tracking/WLS ve ham lat-lon yayini calismaya devam
eder; IMU stream'i ve `navigation_fusion` baslatilmaz. UART startup satirinda
`eskf_enabled` ve gercek init sonucu olan `eskf_ready` ayri alanlardir.
Ana proje dizininden Genesys2 MCS uretmek icin:
```sh
# TDK + ESKF; GPS_ESKF_ENABLE verilmezse de varsayilan 1'dir.
make FPGA_BOARD=genesys2 APP=gps_system \
GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-mcs
# GPS-only: tracking, C/N0, Doppler velocity WLS ve PPS calisir.
make FPGA_BOARD=genesys2 APP=gps_system \
GPS_ESKF_ENABLE=0 fpga-mcs
```
Her iki profil bootloader ve uygulamayi varsayilan `460800` baud ile derler.
Iki komut ayni MCS/BIN yoluna yazdigi icin iki imaj birlikte saklanacaksa
build'ler arasinda profil adiyla kopyalanmalidir. Bu secenekler software
derleme parametresidir; mevcut bitstream ile `fpga-mcs` yeterlidir.
Otomatik WHO_AM_I algilama varsayilandir:
```sh
@@ -446,32 +493,30 @@ Bu kosuda `mcause=5` tekrar etmedi.
## Build ve Debug Komutlari
Build:
Ana dizinden kalici flash imaji:
```sh
make -C /home/ankaoc/Desktop/rocket/rocket-chip/soc/software/gps_system \
BUILD_DIR=/home/ankaoc/Desktop/rocket/rocket-chip/soc/out/software/gps_system \
clean all
make FPGA_BOARD=genesys2 APP=gps_system \
GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-mcs
```
OpenOCD:
```sh
make -C /home/ankaoc/Desktop/rocket/rocket-chip fpga-debug-openocd
make FPGA_BOARD=genesys2 fpga-debug-openocd
```
ELF'i RAM'e yukleyip calistirma:
```sh
/tools/toolchains/rvtc-medany/bin/riscv64-unknown-elf-gdb \
-q /home/ankaoc/Desktop/rocket/rocket-chip/soc/out/software/gps_system/gps_system.elf \
-ex "target extended-remote :3333" \
-ex "monitor reset halt" \
-ex "load" \
-ex "set \$pc = _start" \
-ex "monitor resume" \
-ex "detach" \
-ex "quit"
make FPGA_BOARD=genesys2 APP=gps_system \
GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-debug-load
```
UART:
```sh
make FPGA_BOARD=genesys2 fpga-uart
```
Durum okumak icin claim register'ini okumadan:
@@ -749,6 +794,13 @@ Gecersiz oranlar reddedilir; sonuc `10..60 dB-Hz` araliginda sinirlanir.
Bir-bit estimator jitter'i ayni PRN'in ard arda olcumlerinde software
IIR'i ile `alpha=0.2` kullanilarak yumusatilir.
RTL snapshot, synchronizer, APB register ve measurement-interrupt ayrintilari
`hardware/external/gps/rtl/trck_src/README.md` icinde belgelenir. Ozetle
payload tracking domaininde yaklasik 20 ms sabit tutulur; valid ve tum alanlar
PCLK'e registered synchronizer ile alinir, iki ek settle cycle'dan sonra
atomik APB bankina kopyalanir. Software sequence-before/payload/sequence-after
okumasiyla coherence'i tekrar dogrular.
Carrier register'i signed Q7 toplam NCO frekansidir. Doppler ve range-rate
donusumu: