feat(gps): expose ESKF build profiles and 460800 UART
This commit is contained in:
@@ -6,6 +6,22 @@ Bu klasör Genesys2 kartından UART ile alınan GPS WLS konumlarını ve PMOD SP
|
||||
ve jiroskop biası. Kartın durağan olduğu deneyde zero-velocity update (ZUPT)
|
||||
uygulanır ve GPS innovation değerlerine aykırı-ölçüm kapısı konur.
|
||||
|
||||
Bare-metal ürün firmware'i ana dizinden iki profille üretilebilir:
|
||||
|
||||
```sh
|
||||
# TDK + GPS + ESKF (varsayılan GPS_ESKF_ENABLE=1)
|
||||
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||
GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-mcs
|
||||
|
||||
# GPS-only; IMU/ESKF kapalı, WLS/Doppler/PPS açık
|
||||
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||
GPS_ESKF_ENABLE=0 fpga-mcs
|
||||
```
|
||||
|
||||
Firmware ve UART kayıt aracının varsayılan hızı `460800` baud'dur. İki profil
|
||||
aynı MCS/BIN çıktı yolunu kullandığı için ikinci build ilk dosyanın üzerine
|
||||
yazar.
|
||||
|
||||
## Güncel durum ve devralma notu (2026-07-16)
|
||||
|
||||
Bu bölüm yeni bir geliştirme oturumunun nereden devam edeceğini tek yerde
|
||||
@@ -71,6 +87,37 @@ GPS position + Doppler velocity --\
|
||||
TDK veya ST IMU -> imu_sensor ----/
|
||||
```
|
||||
|
||||
### Doppler ESKF'ye nasıl geliyor?
|
||||
|
||||
1. Tracking RTL her 20 ms NAV-bit epoch'unda carrier NCO Q7 değerini,
|
||||
`ABS_SAMPLE`, remaining code phase ve 20 prompt'un I/Q/WBP toplamlarını
|
||||
birlikte latch eder. Payload 20 ms sabit kalır; APB wrapper registered
|
||||
synchronizer ve settle süresinden sonra atomik register bankı ile interrupt
|
||||
üretir.
|
||||
2. Firmware coherent mailbox okumasında sequence'i payload öncesi/sonrası
|
||||
kontrol eder. Carrier değeri için
|
||||
`doppler_hz = carrier_q7/128 - 4092000`, L1 pseudorange-rate için
|
||||
`range_rate = -doppler_hz*c/1575420000` kullanılır.
|
||||
3. Aynı PRN'in 50 Hz snapshot'larında C/N0 `alpha=0.2`, Doppler `alpha=0.05`
|
||||
software IIR ile yumuşatılır. RTL ham ölçümü korur; hardware Doppler IIR
|
||||
içermez.
|
||||
4. En az dört uyduyla C/N0-weighted velocity WLS
|
||||
`[receiver_vx, receiver_vy, receiver_vz, receiver_clock_drift_mps]`
|
||||
state'ini çözer. Her observation'dan satellite LOS velocity çıkarılır,
|
||||
broadcast satellite clock drift eklenir. Inverse normal matrix ve post-fit
|
||||
residual ECEF velocity covariance'ini üretir.
|
||||
5. GPS adapter velocity ve 3x3 covariance'i ECEF'ten ENU'ya döndürür,
|
||||
kart ölçümüne dayalı minimum `2/2/3 m/s` standard-deviation floor'larını
|
||||
uygular ve position ile aynı capture timestamp'ini korur.
|
||||
6. Fusion engine gecikmiş position ve velocity'yi aynı geçmiş epoch'unda
|
||||
uygular. Velocity'nin ayrı 3-DOF `%99.9`, `NIS=16.266` kapısı vardır; bir
|
||||
velocity reject aynı epoch'taki kabul edilmiş position update'ini bozmaz.
|
||||
Sonra daha yeni IMU history current-time horizon'a kadar replay edilir.
|
||||
|
||||
Bu zincirin RTL/register ayrıntısı
|
||||
`hardware/external/gps/rtl/trck_src/README.md`, bare-metal WLS ve kart
|
||||
doğrulaması `soc/software/gps_system/README.md` içindedir.
|
||||
|
||||
Python tarafındaki giriş noktaları:
|
||||
|
||||
- `serial_capture.py`: UART akışını zaman damgalı CSV olarak toplar;
|
||||
@@ -149,11 +196,12 @@ konum çözülmesi tek başına PPS üretildiğini kanıtlamaz.
|
||||
|
||||
İlk kabul edilen WLS/PPS commit'i yalnız coarse alignment yapar. Ardından faz
|
||||
hatası en fazla sekiz adet 125 MHz tracking-clock tick'i, yani 64 ns olan beş
|
||||
ardışık PI update gerekir. Lock kazanıldıktan sonra 256 ns üzerindeki yeni bir
|
||||
faz hatası lock'u düşürür. WLS receiver-clock bias/pseudorange jitter'ı veya
|
||||
epoch capture belirsizliği beş ardışık ölçümde 64 ns koşulunu bozarsa konum
|
||||
gelmeye devam ederken PPS pini sürekli LOW kalabilir. Bu şu an en güçlü
|
||||
olasılıktır; register ölçmeden eşik değiştirilmemelidir.
|
||||
ardışık PI update gerekir. RTL reset release eşiği 256 ns'dir; v2.2 production
|
||||
software profile'ları tek seyrek WLS sıçraması pulse kaybettirmesin diye
|
||||
release eşiğini runtime `LOOP_CONFIG` ile 1.024 us yapar. WLS receiver-clock
|
||||
bias/pseudorange jitter'ı veya epoch capture belirsizliği beş ardışık ölçümde
|
||||
64 ns acquire koşulunu bozarsa konum gelmeye devam ederken PPS pini LOW
|
||||
kalabilir.
|
||||
|
||||
Firmware ancak WLS başarılı, `solution_valid=true`, PPS referans satırı FDE ile
|
||||
dışlanmamış ve referans kanalın capture sequence'i sıfır değilse PPS mailbox'a
|
||||
@@ -185,7 +233,7 @@ monitor resume
|
||||
|
||||
| Register | Beklenen/yorum |
|
||||
|---|---|
|
||||
| `VERSION @ 0x1002a07c` | `0x00020100`; farklıysa ELF/bitstream eşleşmiyor |
|
||||
| `VERSION @ 0x1002a07c` | Production v2.2 için `0x00020200`; farklıysa ELF/bitstream eşleşmesini kontrol edin |
|
||||
| `CONTROL @ 0x1002a000` | Enable + track açıkken alt bitler genellikle `0x3` |
|
||||
| `STATUS @ 0x1002a004` | `0x1`: commit/alignment yok; alt bitler `0x7`: aligned fakat lock değil; bit 11 set ve alt bitler `0xf`: locked/valid |
|
||||
| `ACTIVE_SEQUENCE @ 0x1002a048` | `0`: firmware hiç geçerli PPS commit'i yapmamış; artıyorsa WLS referansları PPS'ye ulaşıyor |
|
||||
@@ -197,7 +245,7 @@ lock acquisition/faz jitter'ıdır. `STATUS` lock gösteriyor ve `PULSE_COUNT`
|
||||
artıyorsa JC10 sinyali JC11 GND referansıyla osiloskop veya logic analyzer'da
|
||||
ölçülmelidir; pulse saniyede bir yaklaşık 100 ms HIGH'dır.
|
||||
|
||||
2026-07-25 canlı Genesys2 ölçümünde `VERSION=0x00020100`,
|
||||
Erken 2026-07-25 v2.1 canlı Genesys2 ölçümünde `VERSION=0x00020100`,
|
||||
`CONTROL=0x00000003` ve snapshot `ACTIVE_SEQUENCE=11583` görüldü.
|
||||
`PULSE_COUNT=314`, PPS core'un resetten beri 314 `pps_out` pulse olayı
|
||||
oluşturduğunu kanıtladı; post-route top-level yol da sabit LOW değildir.
|
||||
@@ -218,6 +266,13 @@ işaret eder. Eşik ölçümsüz büyütülmemeli; önce clock-bias/TDOP kalite
|
||||
outlier reddi veya faz gözlemi süzme stratejisi board A/B testiyle
|
||||
değerlendirilmelidir.
|
||||
|
||||
Bu tarihsel v2.1 teşhisinden sonra v2.2 dinamik PI profilleri, Doppler
|
||||
clock-drift prediction, bounded WLS clock-bias filtresi, 2 s validity
|
||||
watchdog/30 s state koruma politikası ve fractional capture correction
|
||||
eklenmiştir. Güncel sentetik ve kart sonuçları
|
||||
`soc/software/gps_system/README.md` altındaki PPS bölümlerinde, register/RTL
|
||||
davranışı `hardware/external/gps/rtl/pps/README.md` içinde tutulur.
|
||||
|
||||
## Çalıştırma
|
||||
|
||||
UART kaydı:
|
||||
|
||||
Reference in New Issue
Block a user