Add GPS integrity checks and GPS IMU ESKF fusion tools
This commit is contained in:
@@ -15,7 +15,21 @@ void bsp_plic_set_priority(uint32_t irq_id, uint32_t priority)
|
||||
|
||||
void bsp_plic_enable(uint32_t irq_id)
|
||||
{
|
||||
bsp_write32(PLIC_ENABLE0, bsp_read32(PLIC_ENABLE0) | (1u << irq_id));
|
||||
if (irq_id < 32u) {
|
||||
bsp_write32(PLIC_ENABLE0, bsp_read32(PLIC_ENABLE0) | (1u << irq_id));
|
||||
}
|
||||
}
|
||||
|
||||
void bsp_plic_disable(uint32_t irq_id)
|
||||
{
|
||||
if (irq_id < 32u) {
|
||||
bsp_write32(PLIC_ENABLE0, bsp_read32(PLIC_ENABLE0) & ~(1u << irq_id));
|
||||
}
|
||||
}
|
||||
|
||||
void bsp_plic_disable_all(void)
|
||||
{
|
||||
bsp_write32(PLIC_ENABLE0, 0u);
|
||||
}
|
||||
|
||||
void bsp_plic_set_threshold(uint32_t threshold)
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
void bsp_plic_set_priority(uint32_t irq_id, uint32_t priority);
|
||||
void bsp_plic_enable(uint32_t irq_id);
|
||||
void bsp_plic_disable(uint32_t irq_id);
|
||||
void bsp_plic_disable_all(void);
|
||||
void bsp_plic_set_threshold(uint32_t threshold);
|
||||
uint32_t bsp_plic_claim(void);
|
||||
void bsp_plic_complete(uint32_t irq_id);
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
.section .text.start, "ax", @progbits
|
||||
.globl _start
|
||||
_start:
|
||||
/* Debug/JTAG may replace the RAM image without resetting Rocket's I-cache. */
|
||||
fence.i
|
||||
csrw mie, zero
|
||||
li t0, 0x8
|
||||
csrc mstatus, t0
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*.swp
|
||||
output/osm_tile_cache/
|
||||
@@ -0,0 +1,367 @@
|
||||
# Stationary GPS / ICM-4268x fusion
|
||||
|
||||
Bu klasör Genesys2 kartından UART ile alınan GPS WLS konumlarını ve PMOD SPI
|
||||
üzerindeki ICM-42686/ICM-42688 ölçümlerini Python'da işler. Filtre 15 hata
|
||||
durumlu bir ESKF'dir: ENU konum/hız, quaternion tutum, ivmeölçer biası 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.
|
||||
|
||||
## Çalıştırma
|
||||
|
||||
UART kaydı:
|
||||
|
||||
```sh
|
||||
python3 serial_capture.py --duration 60 --output logs/gps_60s.csv
|
||||
python3 serial_capture.py --duration 75 --stop-text 'Complete:' \
|
||||
--output logs/imu_60s.csv
|
||||
```
|
||||
|
||||
Mevcut logları işleme:
|
||||
|
||||
```sh
|
||||
python3 fusion_eskf.py
|
||||
```
|
||||
|
||||
Sabit-kısıtlı ve hareket-kabiliyetli modelleri aynı kayıt üzerinde
|
||||
karşılaştırma:
|
||||
|
||||
```sh
|
||||
python3 compare_eskf_models.py \
|
||||
--gps logs/gps_live_5min_20260713.csv \
|
||||
--imu logs/imu_live_5min_20260713.csv \
|
||||
--output output/model_compare_5min
|
||||
```
|
||||
|
||||
Sabit model her IMU penceresinde zero-velocity ve zero-gyro ölçümü uygular.
|
||||
Hareket-kabiliyetli model bunları sürekli uygulamaz; ivme normu ve gyro
|
||||
normundan üç ardışık durağan pencere algıladığında etkinleştirir. PMOD testinin
|
||||
UART çıktısı 500 ms pencere ortalaması olduğundan bu deney durağan gürültü ve
|
||||
model davranışı karşılaştırmasıdır. Gerçek hareketli kullanım için ham veya
|
||||
yüksek hızlı IMU örnekleri ile GPS ölçümleri aynı CPU sayacıyla firmware içinde
|
||||
zaman damgalanmalıdır.
|
||||
|
||||
Linux masaüstü OpenStreetMap oynatıcısını açma:
|
||||
|
||||
```sh
|
||||
python3 map_player.py
|
||||
```
|
||||
|
||||
5 dakikalık sabit/adaptif model karşılaştırmasını doğrudan açma:
|
||||
|
||||
```sh
|
||||
python3 map_player.py \
|
||||
--comparison output/model_compare_5min_20260713/model_comparison.csv \
|
||||
--model adaptive
|
||||
```
|
||||
|
||||
`--model fixed` aynı kaydı sürekli-stationary modelle gösterir.
|
||||
|
||||
Pencerede oynat/duraklat, sample sürgüsü, 0.5–4x hız, zoom/pan, ham GPS ve
|
||||
ESKF izleri bulunur. Tile'lar `output/osm_tile_cache/` altında cache edilir;
|
||||
ilk açılışta harita tabanı için internet bağlantısı gerekir.
|
||||
|
||||
## Deney sınırı
|
||||
|
||||
İstenen akışta GPS ve IMU UART logları peş peşe toplandı. Kart durağan olduğu
|
||||
için iki 0–60 s ekseni offline modellemede üst üste bindirilmiştir. Bu sonuç
|
||||
durağan bias/noise ve konum kararlılığı deneyidir. Hareketli bir sistemde aynı
|
||||
ESKF'nin anlamlı olması için GPS ve ham/decimate edilmiş IMU örnekleri aynı
|
||||
firmware çalışmasında ortak donanım zaman damgasıyla kaydedilmelidir; 500 ms
|
||||
ortalamalar hızlı dinamiği korumaz.
|
||||
|
||||
## Standalone GPS WLS bütünlük çalışması (2026-07-12)
|
||||
|
||||
Bu bölüm, standalone GPS konumundaki 20--30 m ve daha büyük sıçramaları
|
||||
araştırmak için yapılan firmware karşılaştırmasını kaydeder. Karşılaştırılan
|
||||
eski kaynak commit'i `07ddf29` (`first draft`) idi. Yeni kaynakta residual,
|
||||
chi-square, covariance, validity, leave-one-out FDE, çalışma süresi ve ISR
|
||||
tanıları bulunuyordu.
|
||||
|
||||
### Karşılaştırma yöntemi
|
||||
|
||||
GDB ile çalışan DTIM imajının üzerine başka bir ELF yazıldığında Rocket
|
||||
I-cache'in eski firmware satırlarını yürütmeye devam ettiği gözlendi. Örneğin
|
||||
`0x80002f58` adresi eski ELF'te `gps_pps_init`, yeni ELF'te ise
|
||||
`gps_process_isr_events` içindeydi; access-fault anındaki return address yeni
|
||||
ELF anlamına uyuyordu. `fence.i` stub'ı çalıştırılması da bu kart/akışta
|
||||
güvenilir bir hot-load sağlamadı.
|
||||
|
||||
Bu nedenle aşağıdaki A/B ölçümlerinde GDB hot-load kullanılmadı:
|
||||
|
||||
1. İlgili ELF bootloader formatındaki application flash image'a çevrildi.
|
||||
2. Image `0x01800000` application flash bölgesine yazıldı.
|
||||
3. FPGA SRAM aynı bitstream ile yeniden programlandı.
|
||||
4. Bootloader ELF'i flash'tan DTIM'e kopyaladı; ilk I-cache dolumu ile RAM
|
||||
imajının aynı firmware olması sağlandı.
|
||||
5. İlk konum çözümü acquisition süresinden sonra beklendi.
|
||||
6. Kart ve anten sabitken 300 saniyelik UART kaydı alındı.
|
||||
|
||||
Sapmalar surveyed bir koordinata göre değil, her koşunun kendi medyan
|
||||
konumuna göre hesaplandı. Bu nedenle aşağıdaki değerler mutlak doğruluktan
|
||||
çok durağan konum dağılımını/hassasiyetini gösterir. Farklı koşulardaki uydu
|
||||
sayısı ve DOP ayrıca belirtilmiştir.
|
||||
|
||||
### Kullanılan imajlar ve loglar
|
||||
|
||||
- Exact eski ELF: `artifacts/firmware_ab/gps_old.elf`
|
||||
- FDE açık yeni ELF: `artifacts/firmware_ab/gps_new.elf`
|
||||
- FDE kapalı yeni ELF: `artifacts/firmware_ab/gps_new_fde_off.elf`
|
||||
- Eski log: `logs/ab_live_old_5min.csv`
|
||||
- FDE açık yeni log: `logs/ab_live_new_5min.csv`
|
||||
- FDE kapalı yeni log: `logs/ab_live_new_fde_off_5min.csv`
|
||||
- Uydu/FDE gruplu sonuç: `output/firmware_ab_live_5min_by_satellites.csv`
|
||||
- FDE kapalı karşılaştırma: `output/firmware_ab_live_fde_off_5min_by_satellites.csv`
|
||||
- Analiz programı: `compare_firmware_logs.py`
|
||||
|
||||
FDE kapalı ELF SHA-256:
|
||||
|
||||
```text
|
||||
23e2d5be11ab0bf23213c5253b4213277f11e5785d90484c9d624b4fcae944dc
|
||||
```
|
||||
|
||||
FDE kapalı 5 dakika log SHA-256:
|
||||
|
||||
```text
|
||||
c2815c0cf3e7f76dd0a19db9526421355d6699c4bc1edc6407fde496e09bafc8
|
||||
```
|
||||
|
||||
### Canlı A/B sonuçları
|
||||
|
||||
| Firmware/çözüm | Kullanılabilir uydu | Örnek | Yatay ort. | Yatay P95 | Yatay maks. | Düşey mutlak ort. | 3B P95 | 3B maks. |
|
||||
|---|---:|---:|---:|---:|---:|---:|---:|---:|
|
||||
| Eski firmware | 8 | 485 | 6.01 m | 11.70 m | 20.79 m | 9.60 m | 25.05 m | 38.97 m |
|
||||
| Yeni, FDE açık, tümü | çoğunlukla 7 | 300 | 9.71 m | 30.34 m | 44.90 m | 16.43 m | 78.95 m | 128.96 m |
|
||||
| Yeni, FDE açık ama FDE seçilmeyen epoch | 7 | 231 | 6.84 m | 13.41 m | 17.33 m | 10.85 m | 28.03 m | 37.80 m |
|
||||
| Yeni, FDE tarafından 7'den 6'ya düşürülen epoch | 7 -> 6 | 68 | 19.22 m | 37.09 m | 44.90 m | 34.52 m | 108.30 m | 128.96 m |
|
||||
| Yeni, FDE compile-time kapalı | 7 | 300 | 8.64 m | 16.74 m | 22.56 m | 14.34 m | 40.90 m | 88.73 m |
|
||||
|
||||
DOP medyanları aynı değildi:
|
||||
|
||||
| Koşu | HDOP | VDOP |
|
||||
|---|---:|---:|
|
||||
| Eski, 8 uydu | 1.222 | 1.991 |
|
||||
| Yeni, FDE açık | 1.339 | 2.102 |
|
||||
| Yeni, FDE kapalı | 1.642 | 2.852 |
|
||||
|
||||
FDE kapalı koşu daha kötü geometriye rağmen FDE açık toplam sonuçtan daha
|
||||
kararlıydı. Yatay P95 `30.34 m`den `16.74 m`ye, yatay maksimum `44.90 m`den
|
||||
`22.56 m`ye ve 3B P95 `78.95 m`den `40.90 m`ye düştü.
|
||||
|
||||
### FDE teşhisi ve alınan karar
|
||||
|
||||
FDE açık koşuda 300 epoch'un 68'inde (%22.7) leave-one-out FDE uygulandı.
|
||||
99% chi-square kapısının nominal false-alarm oranı yaklaşık %1 olmalıydı.
|
||||
Çıkarılan uydu tek bir SVID değildi: SVID 13, 19, 20, 21, 6 ve 29 farklı
|
||||
epoch'larda seçildi. Bu davranış tek ve sürekli arızalı bir uydudan çok,
|
||||
measurement sigma/covariance modelinin gerçek tracking gürültüsü ve
|
||||
multipath'i küçümsemesiyle uyumludur.
|
||||
|
||||
FDE açık koşuda exclusion içeren ardışık konum çiftlerinin 3B step ortalaması
|
||||
`47.40 m`, FDE içermeyen çiftlerde `18.45 m` idi. Bazı kötü FDE seçimleri
|
||||
integrity-valid olarak işaretlendi. Altı uydu için FDE daha önce sentetik
|
||||
testte ayrıca engellenmişti; çünkü 6 -> 5 leave-one-out çözümü yalnız bir
|
||||
residual serbestlik derecesi bırakıp 123 m hatalı bir çözümü geçerli
|
||||
gösterebilmişti.
|
||||
|
||||
Ürün firmware'inde otomatik FDE seçimi şu anda compile-time kapalıdır:
|
||||
|
||||
```c
|
||||
#define GPS_NAV_ENABLE_FDE 0u
|
||||
```
|
||||
|
||||
Full-WLS konumu üretilmeye devam eder. Post-fit residual, chi-square, DOF,
|
||||
threshold, covariance, hAcc/vAcc ve validity hesapları/logları korunur.
|
||||
Chi-square fail eden çözüm konum olarak görülebilir fakat `valid=0` olur;
|
||||
PPS ve sonraki WLS seed'i invalid çözümle güncellenmez.
|
||||
|
||||
FDE kapalı koşuda:
|
||||
|
||||
- 300/300 epoch'ta `fde=0` ve `fde_trials=0`;
|
||||
- 235/300 epoch integrity-valid (%78.3);
|
||||
- ISR overflow, PLIC repeat, drain-limit, coalesced event, satellite loss ve
|
||||
period overrun sayaçları sıfır;
|
||||
- maksimum foreground süresi 288.74 ms;
|
||||
- maksimum WLS süresi 28.11 ms;
|
||||
- 1 saniyelik/50 milyon cycle bütçe hiç aşılmadı.
|
||||
|
||||
FDE ancak C/N0, tracking variance, URA, elevation ve multipath bileşenlerinden
|
||||
kalibre edilmiş absolute measurement sigma üretildikten; normalized residual,
|
||||
solution separation, exclusion uniqueness ve zaman hysteresis'i eklendikten
|
||||
sonra yeniden açılmalıdır.
|
||||
|
||||
## Eski firmware'deki kalıcı 0.2 s TOW faz hatası
|
||||
|
||||
### Ölçüm kanıtı
|
||||
|
||||
Eski firmware acquisition logunun ilk çözümü 5 uyduyla yapıldı ve bu ilk
|
||||
epoch'ta bütün TOW değerleri `64620.200 s` idi. SVID 6 daha sonra tracking
|
||||
kanalı 7'ye bağlandı. Sekiz uydulu 5 dakika kaydında:
|
||||
|
||||
- 485 epoch'un 485'i TOW-incoherent idi;
|
||||
- çoğunluk TOW ile SVID 6 arasındaki fark her epoch'ta tam `-0.200 s` idi;
|
||||
- ilk epoch: çoğunluk `64634.200`, SVID 6 `64634.000`;
|
||||
- son epoch: çoğunluk `64933.400`, SVID 6 `64933.200`;
|
||||
- sonraki subframe/HOW alımları farkı düzeltmedi.
|
||||
|
||||
Dolayısıyla hata geçici değildi. SVID 6 çözümde kaldığı sürece uydu konumu
|
||||
0.2 saniye yanlış epoch için hesaplandı. Bunun alıcı WLS konumuna etkisi uydu
|
||||
geometrisine bağlıdır; iki firmware medyanı arasındaki 3B fark bu nedenle
|
||||
mutlak doğruluk ölçümü olarak yorumlanamaz.
|
||||
|
||||
Yeni 1 saniyelik koşuların her ikisinde de 300/300 epoch TOW-coherent idi;
|
||||
`tow_aligned=0` ve `tow_rejected=0` kaldı. Bu, eski hatanın her bootta zorunlu
|
||||
olmadığını fakat kanal geç katıldığında kalıcı olabildiğini gösterir.
|
||||
|
||||
### Kök mekanizma
|
||||
|
||||
Mevcut yazılım her tracking kanalı için ayrı TOW state'i yürütüyor:
|
||||
|
||||
1. Kanal önce LNAV HOW alanından TOW alıyor.
|
||||
2. İlk nav-solve interrupt'ında TOW ownership `HOW` kaynağından
|
||||
`NAV_SOLVE` kaynağına geçiriliyor.
|
||||
3. Bundan sonra kanal TOW'u recursively
|
||||
`tow += event_count * NAV_SOLVE_TIMER * 20 ms` ile artırılıyor.
|
||||
4. Ownership geçtikten sonra daha sonraki HOW değerleri TOW'u yeniden
|
||||
anchor etmiyor.
|
||||
|
||||
Kanalın enable/ilk interrupt sınırında bir tick off-by-one oluşursa bütün
|
||||
sonraki artışlar doğru miktarda fakat yanlış başlangıçtan yapılır; sabit faz
|
||||
hatası bu yüzden kalıcı olur. Log, SVID 6'nın geç katıldığını ve hatanın tam
|
||||
bir eski nav periodu olduğunu kanıtlıyor. İlk yanlış tick'in enable/flag
|
||||
sıralamasından mı yoksa aynı olayda HOW ve nav-solve işlenmesinden mi geldiği
|
||||
geçiş anı iki UART dosyası arasındaki kısa boşlukta kaldığı için logdan tek
|
||||
başına kesinleştirilemiyor. Ancak recursive kanal-bağımsız TOW mimarisinin
|
||||
hatayı kendi kendine düzeltemediği kesindir.
|
||||
|
||||
IS-GPS-200N'e göre HOW içindeki TOW sayacı bir sonraki subframe'in başlangıç
|
||||
zamanını ifade eder. Kodun `(HOW >> 13) * 6` dönüşümü bu 6 saniyelik değeri
|
||||
üretir. Kalıcı düzeltme, bu absolute yayın zamanını yalnız ilk başlangıç için
|
||||
değil sürekli time anchor olarak kullanmalıdır. Referans:
|
||||
<https://archive.gps.gov/technical/icwg/IS-GPS-200N.pdf>, bölüm 3.3.4 ve
|
||||
20.3.3.2.
|
||||
|
||||
### Uygulanan kalıcı TOW mimarisi
|
||||
|
||||
2026-07-12'de kanal başına recursive TOW artışı kaldırıldı ve aşağıdaki
|
||||
HOW/receiver-sample anchor modeli ürün firmware'ine uygulandı. Snapshot'ta
|
||||
azınlık TOW'unu çoğunluğa kopyalayan geçici recovery yolu da kaldırıldı:
|
||||
|
||||
1. Her geçerli LNAV subframe sonunda kanal için şu anchor saklanır:
|
||||
`how_tow`, `how_week`, `how_abs_sample_raw`, düzeltilmiş
|
||||
`how_abs_sample` ve anchor-valid bilgisi.
|
||||
2. HOW TOW bir sonraki subframe başlangıcını gösterdiği ve nav-bits event'i
|
||||
alınan subframe'in sonuna karşılık geldiği için bu ikisi aynı zaman
|
||||
sınırında anchor edilir. RTL incelemesinde `bit_gen.sv` içindeki
|
||||
`absolute_sample_o` değerinin geçerli 20 ms bit sınırında üretildiği ve
|
||||
`tracking_wrapper.sv` içindeki `load_sigs` yolunun geçerli/pariteli
|
||||
subframe'de `ABS_SAMPLE` ile `REM_CODE_PHASE`'ı birlikte latch ettiği
|
||||
doğrulandı.
|
||||
3. Her nav-solve ölçümünün TOW'u önceki nav-solve TOW'una ekleme yapılarak
|
||||
değil, son HOW anchor'ından tekrar hesaplanır:
|
||||
|
||||
```text
|
||||
delta_samples = signed_wrap(nav_abs_sample - how_abs_sample)
|
||||
measurement_tow = normalize(how_tow + delta_samples / 16_368_000)
|
||||
```
|
||||
|
||||
`REM_CODE_PHASE` düzeltmesi iki uçta da hesaba katılmalıdır. 32-bit
|
||||
`ABS_SAMPLE` farkı signed/wrapped alınmalıdır; anchor 6 saniyede bir
|
||||
yenilendiği için wrap belirsizliği oluşmaz.
|
||||
4. Aynı interrupt'ta hem nav-bits hem nav-solve flag varsa önce HOW anchor
|
||||
güncellenir; nav-solve için `delta_samples=0` olur. Eski koddaki koşulsuz
|
||||
`+period` off-by-one riski ortadan kalkar.
|
||||
5. Anchor yaşı, subframe/parity geçerliliği ve finite/range kontrolleri
|
||||
zorunlu yapıldı. Geçerli anchor olmayan veya 12 saniyeden eski anchor'a
|
||||
sahip kanalın nav-solve ölçümü kabul edilmez.
|
||||
6. `gps_tow_source` ownership state'i ve
|
||||
`gps_advance_tow_from_nav_timer()` kaldırılır. Interrupt count yalnız event
|
||||
kaybı tanısı için tutulur, absolute GPS zamanının kaynağı olmaz.
|
||||
7. Coherent snapshot kontrolü son savunma olarak kalır; fark görülürse epoch
|
||||
veya problemli kanal reject edilir. TOW değeri sessizce başka kanalın
|
||||
değeriyle değiştirilmez.
|
||||
|
||||
Üretim kodu `header/gps_time_anchor.h` ve `src/gps_time_anchor.c` içindedir.
|
||||
`parse_subframe()` artık TOW state'ini değiştirmez; yalnız HOW TOW değerini
|
||||
dışarı verir. `gps_time_from_sample_anchor()` her nav-solve için GPS zamanını
|
||||
son HOW ve iki receiver-sample latch'i arasındaki farktan baştan üretir.
|
||||
|
||||
Uygulanan birim testler:
|
||||
|
||||
- HOW ile aynı anda gelen ilk nav-solve (`delta=0`);
|
||||
- 200 ms ve 1 s sonraki nav-solve;
|
||||
- geç enable edilen kanal;
|
||||
- bir veya birkaç coalesced/missed interrupt;
|
||||
- 32-bit `ABS_SAMPLE` wrap;
|
||||
- GPS week rollover;
|
||||
- stale HOW anchor;
|
||||
- aynı coherent epoch'ta bütün kanalların TOW farkının tolerans içinde olması.
|
||||
|
||||
Host testleri normal optimizasyonla ve AddressSanitizer/UndefinedBehaviorSanitizer
|
||||
ile geçti. 50 MHz Rocket ürün build'i de başarılı oldu. Yeni anchor fonksiyonları
|
||||
ELF'te toplam yaklaşık 264 bayt text alanı kullanıyor; 1 Hz'de kanal başına bir
|
||||
kez çalıştığı için WLS yanında CPU etkisi ihmal edilebilir düzeydedir.
|
||||
|
||||
### Flash-boot donanım doğrulaması
|
||||
|
||||
GDB hot-load kullanılmadan yeni ELF application flash bölgesine yazıldı ve
|
||||
FPGA yeniden programlanarak bootloader üzerinden temiz DTIM/I-cache başlangıcı
|
||||
yapıldı. Kullanılan dosyalar:
|
||||
|
||||
- `artifacts/firmware_ab/gps_new_how_anchor_fde_off.elf`
|
||||
- `artifacts/firmware_ab/gps_new_how_anchor_fde_off.flash.bin`
|
||||
- `logs/how_anchor_acquisition.csv`
|
||||
- `logs/how_anchor_fde_off_5min.csv`
|
||||
- `output/firmware_ab_how_anchor_fde_off_5min_by_satellites.csv`
|
||||
|
||||
ELF SHA-256:
|
||||
|
||||
```text
|
||||
fb1de03aafacf46d95bde375f3f744635472e9893a9aff6f3c3db9a16444c5ce
|
||||
```
|
||||
|
||||
5 dakika log SHA-256:
|
||||
|
||||
```text
|
||||
82b08bd35d4452f92db6af609b2a03db2ff7b8f78443414ca7a0238c3cb603ed
|
||||
```
|
||||
|
||||
Acquisition sırasında bir kanal diğerlerinden altı nav-solve epoch daha geç
|
||||
katıldı (`seq=8`, diğer kanallar `seq=14`). Buna rağmen ortak ölçüm epoch'unda
|
||||
bütün kanallar `67640.000 s` TOW üretti; eski yazılımdaki `-0.200 s` kalıcı
|
||||
faz farkı yeniden oluşmadı.
|
||||
|
||||
5 dakikalık sabit anten ölçümü:
|
||||
|
||||
| Metrik | Sonuç |
|
||||
|---|---:|
|
||||
| NAV çözümü | 300 |
|
||||
| Kanal zaman ölçümü | 2100 |
|
||||
| TOW yayılımı P95 | 19 us |
|
||||
| TOW yayılımı maksimum | 33 us |
|
||||
| 1 ms üstü TOW epoch'u | 0 |
|
||||
| `tow_mismatch` / `tow_rejected` | 0 / 0 |
|
||||
| ISR overflow / PLIC repeat / drain limit | 0 / 0 / 0 |
|
||||
| Coalesced / lost / period overrun | 0 / 0 / 0 |
|
||||
| Integrity-valid | 270/300 (%90.0) |
|
||||
| FDE uygulanması | 0/300 |
|
||||
| Maksimum foreground / WLS | 290.13 ms / 28.34 ms |
|
||||
| HDOP / VDOP medyan | 1.511 / 2.407 |
|
||||
| Yatay ortalama / P95 / maksimum | 8.34 m / 16.36 m / 24.93 m |
|
||||
| 3B P95 | 32.64 m |
|
||||
|
||||
FDE kapalı önceki yeni-firmware koşusu yatay ortalama/P95 olarak
|
||||
`8.64/16.74 m`, HOW-anchor koşusu `8.34/16.36 m` verdi. Dolayısıyla FDE
|
||||
kapatılınca full-WLS dağılımı eski firmware'e yakın seviyeye döndü. Eski
|
||||
firmware 8 uydu ve daha iyi geometriyle `6.01/11.70 m`, yeni koşu çoğunlukla
|
||||
7 uyduyla `8.34/16.36 m` üretti. Bu farkın tamamı algoritma farkı sayılamaz;
|
||||
koşuların uydu sayıları/DOP'ları farklıdır ve surveyed ground truth yoktur.
|
||||
FDE açık yeni koşunun `9.71/30.34 m` toplam sonucu ise belirgin daha kötüydü.
|
||||
|
||||
Not: Eski logdaki hata `0.2 ms` değil, `0.2 s = 200 ms` idi. Yeni ölçümdeki
|
||||
en büyük kanallar arası TOW farkı 33 us, yani 0.033 ms oldu.
|
||||
|
||||
### Son savunma
|
||||
|
||||
Anchor düzeltmesine rağmen TOW farkı görülürse epoch invalid/reject edilir.
|
||||
SVID'e özel `+0.2 s` eklenmez ve azınlık TOW'u çoğunluğa kopyalanmaz; böylece
|
||||
başka kanal veya başka nav periodundaki gerçek zaman hatası gizlenmez.
|
||||
@@ -0,0 +1,419 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Compare fixed-stationary and motion-capable ESKF models on UART logs.
|
||||
|
||||
The current board applications emit GPS and IMU in separate runs. Their
|
||||
firmware/host elapsed axes are therefore replayed from t=0 for this explicitly
|
||||
stationary experiment. This is useful for noise/model comparison, but it is
|
||||
not a synchronized moving-platform fusion data set.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import math
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
import matplotlib
|
||||
|
||||
matplotlib.use("Agg")
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
from fusion_eskf import (
|
||||
G,
|
||||
StationaryEskf,
|
||||
align_quat,
|
||||
geodetic_to_ecef,
|
||||
robust_sigma,
|
||||
)
|
||||
|
||||
|
||||
POSITION_RE = re.compile(
|
||||
r"position\s+lat=(?P<lat>[-+0-9.eE]+)\s+lon=(?P<lon>[-+0-9.eE]+)"
|
||||
r"(?:\s+height=(?P<height>[-+0-9.eE]+))?"
|
||||
)
|
||||
GDOP_RE = re.compile(r"(?:DOP\s+)?GDOP=(?P<gdop>[-+0-9.eE]+)")
|
||||
TRACKED_RE = re.compile(r"tracked satellites=(?P<tracked>[0-9]+)")
|
||||
IMU_RE = re.compile(
|
||||
r"(?P<t>[0-9]+\.[0-9]+)\s+s\s+\|\s+samples=\s*(?P<n>[0-9]+)\s+"
|
||||
r"total=\s*(?P<total>[0-9]+)\s+\|\s+Temp=\s*(?P<temp>[-+0-9.]+)\s+C\s+\|\s+"
|
||||
r"Accel\[g\]\s+X=\s*(?P<ax>[-+0-9.]+)\s+Y=\s*(?P<ay>[-+0-9.]+)\s+"
|
||||
r"Z=\s*(?P<az>[-+0-9.]+)\s+\|\s+Gyro\[dps\]\s+"
|
||||
r"X=\s*(?P<gx>[-+0-9.]+)\s+Y=\s*(?P<gy>[-+0-9.]+)\s+Z=\s*(?P<gz>[-+0-9.]+)"
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Gps:
|
||||
t: float
|
||||
unix_s: float
|
||||
lat: float
|
||||
lon: float
|
||||
height: float
|
||||
gdop: float
|
||||
tracked: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class Imu:
|
||||
t: float
|
||||
unix_s: float
|
||||
samples: int
|
||||
accel: np.ndarray
|
||||
gyro: np.ndarray
|
||||
|
||||
|
||||
def rows(path: Path):
|
||||
with path.open(newline="", encoding="utf-8") as stream:
|
||||
yield from csv.DictReader(stream)
|
||||
|
||||
|
||||
def parse_gps(path: Path) -> list[Gps]:
|
||||
result: list[Gps] = []
|
||||
gdop = math.nan
|
||||
tracked = 0
|
||||
for row in rows(path):
|
||||
line = row["uart_line"]
|
||||
match = GDOP_RE.search(line)
|
||||
if match:
|
||||
gdop = float(match["gdop"])
|
||||
match = TRACKED_RE.search(line)
|
||||
if match:
|
||||
tracked = int(match["tracked"])
|
||||
match = POSITION_RE.search(line)
|
||||
if not match:
|
||||
continue
|
||||
height_text = match["height"]
|
||||
result.append(
|
||||
Gps(
|
||||
t=float(row["host_monotonic_s"]),
|
||||
unix_s=float(row["host_unix_s"]),
|
||||
lat=float(match["lat"]),
|
||||
lon=float(match["lon"]),
|
||||
height=float(height_text) if height_text is not None else 0.0,
|
||||
gdop=gdop,
|
||||
tracked=tracked,
|
||||
)
|
||||
)
|
||||
if len(result) < 4:
|
||||
raise ValueError(f"only {len(result)} GPS positions found in {path}")
|
||||
start = result[0].t
|
||||
for sample in result:
|
||||
sample.t -= start
|
||||
return result
|
||||
|
||||
|
||||
def parse_imu(path: Path) -> list[Imu]:
|
||||
result: list[Imu] = []
|
||||
for row in rows(path):
|
||||
line = row["uart_line"]
|
||||
# A GDB restart can leave a few lines from the previous run in the
|
||||
# host UART buffer. The firmware's capture banner is the unambiguous
|
||||
# beginning of the data set; discard anything seen before the latest
|
||||
# banner.
|
||||
if "Starting " in line and " s capture:" in line:
|
||||
result.clear()
|
||||
continue
|
||||
match = IMU_RE.search(line)
|
||||
if not match:
|
||||
continue
|
||||
result.append(
|
||||
Imu(
|
||||
t=float(match["t"]),
|
||||
unix_s=float(row["host_unix_s"]),
|
||||
samples=int(match["n"]),
|
||||
accel=G
|
||||
* np.array(
|
||||
[float(match["ax"]), float(match["ay"]), float(match["az"])]
|
||||
),
|
||||
gyro=np.deg2rad(
|
||||
[float(match["gx"]), float(match["gy"]), float(match["gz"])]
|
||||
),
|
||||
)
|
||||
)
|
||||
if len(result) < 4:
|
||||
raise ValueError(f"only {len(result)} IMU windows found in {path}")
|
||||
start = result[0].t
|
||||
for sample in result:
|
||||
sample.t -= start
|
||||
return result
|
||||
|
||||
|
||||
def gps_to_enu(gps: list[Gps]):
|
||||
lat0 = float(np.median([x.lat for x in gps]))
|
||||
lon0 = float(np.median([x.lon for x in gps]))
|
||||
# The current level-2 firmware omits height, so this comparison is 2-D.
|
||||
h0 = float(np.median([x.height for x in gps]))
|
||||
origin = geodetic_to_ecef([lat0], [lon0], [h0])[0]
|
||||
xyz = geodetic_to_ecef(
|
||||
[x.lat for x in gps], [x.lon for x in gps], [x.height for x in gps]
|
||||
)
|
||||
lat = math.radians(lat0)
|
||||
lon = math.radians(lon0)
|
||||
rotation = np.array(
|
||||
[
|
||||
[-math.sin(lon), math.cos(lon), 0.0],
|
||||
[
|
||||
-math.sin(lat) * math.cos(lon),
|
||||
-math.sin(lat) * math.sin(lon),
|
||||
math.cos(lat),
|
||||
],
|
||||
[
|
||||
math.cos(lat) * math.cos(lon),
|
||||
math.cos(lat) * math.sin(lon),
|
||||
math.sin(lat),
|
||||
],
|
||||
]
|
||||
)
|
||||
return (xyz - origin) @ rotation.T, (lat0, lon0, h0)
|
||||
|
||||
|
||||
class HorizontalEskf(StationaryEskf):
|
||||
"""The shared 15-state ESKF with a horizontal-only GPS update."""
|
||||
|
||||
def gps_update_2d(self, position, gate=13.816):
|
||||
h = np.zeros((2, 15))
|
||||
h[:, 0:2] = np.eye(2)
|
||||
residual = np.asarray(position)[0:2] - self.p[0:2]
|
||||
r = self.gps_r[0:2, 0:2]
|
||||
innovation = h @ self.p_cov @ h.T + r
|
||||
mahalanobis = float(residual @ np.linalg.solve(innovation, residual))
|
||||
if not math.isfinite(mahalanobis) or mahalanobis > gate:
|
||||
self.rejected_gps += 1
|
||||
return False, mahalanobis
|
||||
self._update(residual, h, r)
|
||||
self.accepted_gps += 1
|
||||
return True, mahalanobis
|
||||
|
||||
|
||||
def stationary_detector(accel, gyro, accel_limit=0.15, gyro_limit=math.radians(1.0)):
|
||||
return (
|
||||
abs(float(np.linalg.norm(accel)) - G) <= accel_limit
|
||||
and float(np.linalg.norm(gyro)) <= gyro_limit
|
||||
)
|
||||
|
||||
|
||||
def run_model(gps, imu, enu, mode, calibration):
|
||||
accel, gyro, attitude, accel_sigma, gyro_sigma, gps_sigma, initial = calibration
|
||||
eskf = HorizontalEskf(initial, attitude, accel_sigma, gyro_sigma, gps_sigma)
|
||||
events = [(x.t, 0, i) for i, x in enumerate(imu)]
|
||||
events += [(x.t, 1, i) for i, x in enumerate(gps)]
|
||||
events.sort()
|
||||
current_accel = accel[0]
|
||||
current_gyro = gyro[0]
|
||||
last_t = 0.0
|
||||
detector_run = 0
|
||||
stationary_windows = 0
|
||||
zupt_updates = 0
|
||||
output = []
|
||||
|
||||
for t, kind, index in events:
|
||||
eskf.propagate(current_accel, current_gyro, t - last_t)
|
||||
last_t = t
|
||||
if kind == 0:
|
||||
current_accel = accel[index]
|
||||
current_gyro = gyro[index]
|
||||
detected = stationary_detector(current_accel, current_gyro)
|
||||
detector_run = detector_run + 1 if detected else 0
|
||||
stationary_windows += int(detected)
|
||||
apply_constraint = mode == "fixed" or detector_run >= 3
|
||||
if apply_constraint:
|
||||
eskf.zero_velocity_update(sigma=0.03)
|
||||
eskf.zero_gyro_update(
|
||||
current_gyro, np.maximum(gyro_sigma, math.radians(0.003))
|
||||
)
|
||||
zupt_updates += 1
|
||||
else:
|
||||
accepted, nis = eskf.gps_update_2d(enu[index])
|
||||
output.append(
|
||||
{
|
||||
"t": t,
|
||||
"raw": enu[index].copy(),
|
||||
"fused": eskf.p.copy(),
|
||||
"velocity": eskf.v.copy(),
|
||||
"accepted": accepted,
|
||||
"nis": nis,
|
||||
}
|
||||
)
|
||||
return eskf, output, stationary_windows, zupt_updates
|
||||
|
||||
|
||||
def calibrate(gps, imu, enu):
|
||||
accel = np.vstack([x.accel for x in imu])
|
||||
gyro = np.vstack([x.gyro for x in imu])
|
||||
attitude = align_quat(np.median(accel, axis=0), [0.0, 0.0, 1.0])
|
||||
accel_sigma = np.array([robust_sigma(accel[:, i], 0.02) for i in range(3)])
|
||||
gyro_sigma = np.array(
|
||||
[robust_sigma(gyro[:, i], math.radians(0.003)) for i in range(3)]
|
||||
)
|
||||
gps_sigma = np.array(
|
||||
[robust_sigma(enu[:, i], 1.0 if i < 2 else 3.0) for i in range(3)]
|
||||
)
|
||||
center = np.median(enu[:, 0:2], axis=0)
|
||||
plausible = np.linalg.norm(enu[:, 0:2] - center, axis=1) < 10_000.0
|
||||
first = int(np.flatnonzero(plausible)[0]) if np.any(plausible) else 0
|
||||
initial = enu[first].copy()
|
||||
initial[2] = 0.0
|
||||
return accel, gyro, attitude, accel_sigma, gyro_sigma, gps_sigma, initial
|
||||
|
||||
|
||||
def centered_metrics(values):
|
||||
center = np.median(values, axis=0)
|
||||
radius = np.linalg.norm(values - center, axis=1)
|
||||
return {
|
||||
"rms": float(np.sqrt(np.mean(radius**2))),
|
||||
"p95": float(np.percentile(radius, 95)),
|
||||
"max": float(np.max(radius)),
|
||||
"std_e": float(np.std(values[:, 0], ddof=1)),
|
||||
"std_n": float(np.std(values[:, 1], ddof=1)),
|
||||
}
|
||||
|
||||
|
||||
def write_csv(path, gps, fixed, adaptive):
|
||||
with path.open("w", newline="", encoding="utf-8") as stream:
|
||||
writer = csv.writer(stream)
|
||||
writer.writerow(
|
||||
[
|
||||
"t_s", "lat_deg", "lon_deg", "gdop", "tracked", "height_m",
|
||||
"gps_e_m", "gps_n_m", "fixed_e_m", "fixed_n_m",
|
||||
"adaptive_e_m", "adaptive_n_m", "fixed_speed_mps",
|
||||
"adaptive_speed_mps", "fixed_gps_accepted",
|
||||
"adaptive_gps_accepted", "fixed_nis", "adaptive_nis",
|
||||
]
|
||||
)
|
||||
for sample, a, b in zip(gps, fixed, adaptive):
|
||||
writer.writerow(
|
||||
[
|
||||
sample.t, sample.lat, sample.lon, sample.gdop, sample.tracked,
|
||||
sample.height,
|
||||
*a["raw"][0:2], *a["fused"][0:2], *b["fused"][0:2],
|
||||
np.linalg.norm(a["velocity"]), np.linalg.norm(b["velocity"]),
|
||||
int(a["accepted"]), int(b["accepted"]), a["nis"], b["nis"],
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def plot(path, fixed, adaptive):
|
||||
time = np.array([x["t"] for x in fixed])
|
||||
raw = np.vstack([x["raw"] for x in fixed])[:, 0:2]
|
||||
fixed_p = np.vstack([x["fused"] for x in fixed])[:, 0:2]
|
||||
adaptive_p = np.vstack([x["fused"] for x in adaptive])[:, 0:2]
|
||||
center = np.median(raw, axis=0)
|
||||
raw_radius = np.linalg.norm(raw - center, axis=1)
|
||||
fixed_radius = np.linalg.norm(fixed_p - np.median(fixed_p, axis=0), axis=1)
|
||||
adaptive_radius = np.linalg.norm(
|
||||
adaptive_p - np.median(adaptive_p, axis=0), axis=1
|
||||
)
|
||||
|
||||
fig, axes = plt.subplots(2, 1, figsize=(11, 8), sharex=True)
|
||||
axes[0].plot(time, raw_radius, color="0.65", lw=0.8, label="Ham GPS")
|
||||
axes[0].plot(time, fixed_radius, color="tab:blue", label="Sabit model")
|
||||
axes[0].plot(time, adaptive_radius, color="tab:orange", label="Hareketli/adaptif model")
|
||||
axes[0].set_ylabel("Medyan merkezden yatay uzaklık [m]")
|
||||
fixed_speed = np.linalg.norm(
|
||||
np.vstack([x["velocity"] for x in fixed]), axis=1
|
||||
)
|
||||
adaptive_speed = np.linalg.norm(
|
||||
np.vstack([x["velocity"] for x in adaptive]), axis=1
|
||||
)
|
||||
axes[1].plot(time, fixed_speed, color="tab:blue", label="Sabit model")
|
||||
axes[1].plot(time, adaptive_speed, color="tab:orange", label="Hareketli/adaptif model")
|
||||
axes[1].set_ylabel("Tahmin edilen hız [m/s]")
|
||||
axes[1].set_xlabel("Geçen süre [s]")
|
||||
for axis in axes:
|
||||
axis.grid(alpha=0.25)
|
||||
axis.legend()
|
||||
fig.suptitle("Durağan kart: sabit ve hareket-kabiliyetli ESKF karşılaştırması")
|
||||
fig.tight_layout()
|
||||
fig.savefig(path, dpi=170)
|
||||
plt.close(fig)
|
||||
|
||||
|
||||
def plot_scatter(path, fixed, adaptive):
|
||||
raw = np.vstack([x["raw"] for x in fixed])[:, 0:2]
|
||||
fixed_p = np.vstack([x["fused"] for x in fixed])[:, 0:2]
|
||||
adaptive_p = np.vstack([x["fused"] for x in adaptive])[:, 0:2]
|
||||
center = np.median(raw, axis=0)
|
||||
radius = max(20.0, float(np.percentile(np.linalg.norm(raw - center, axis=1), 99)))
|
||||
fig, axis = plt.subplots(figsize=(8, 8))
|
||||
axis.scatter(raw[:, 0], raw[:, 1], s=7, alpha=0.25, color="0.4", label="Ham GPS")
|
||||
axis.plot(fixed_p[:, 0], fixed_p[:, 1], lw=1.4, color="tab:blue", label="Sabit model")
|
||||
axis.plot(adaptive_p[:, 0], adaptive_p[:, 1], lw=1.2, color="tab:orange", label="Hareketli/adaptif")
|
||||
axis.set_xlim(center[0] - 1.15 * radius, center[0] + 1.15 * radius)
|
||||
axis.set_ylim(center[1] - 1.15 * radius, center[1] + 1.15 * radius)
|
||||
axis.set_aspect("equal", adjustable="box")
|
||||
axis.set_xlabel("East [m]")
|
||||
axis.set_ylabel("North [m]")
|
||||
axis.grid(alpha=0.25)
|
||||
axis.legend()
|
||||
axis.set_title("Yatay saçılım (merkezi %99 görünüm)")
|
||||
fig.tight_layout()
|
||||
fig.savefig(path, dpi=170)
|
||||
plt.close(fig)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--gps", type=Path, required=True)
|
||||
parser.add_argument("--imu", type=Path, required=True)
|
||||
parser.add_argument("--output", type=Path, default=Path("output/model_compare"))
|
||||
args = parser.parse_args()
|
||||
args.output.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
gps = parse_gps(args.gps)
|
||||
imu = parse_imu(args.imu)
|
||||
duration = min(gps[-1].t, imu[-1].t)
|
||||
gps = [x for x in gps if x.t <= duration]
|
||||
imu = [x for x in imu if x.t <= duration]
|
||||
enu, reference = gps_to_enu(gps)
|
||||
calibration = calibrate(gps, imu, enu)
|
||||
fixed_eskf, fixed, fixed_detected, fixed_zupt = run_model(
|
||||
gps, imu, enu, "fixed", calibration
|
||||
)
|
||||
adaptive_eskf, adaptive, adaptive_detected, adaptive_zupt = run_model(
|
||||
gps, imu, enu, "adaptive", calibration
|
||||
)
|
||||
|
||||
raw = np.vstack([x["raw"] for x in fixed])[:, 0:2]
|
||||
fixed_p = np.vstack([x["fused"] for x in fixed])[:, 0:2]
|
||||
adaptive_p = np.vstack([x["fused"] for x in adaptive])[:, 0:2]
|
||||
raw_m = centered_metrics(raw)
|
||||
fixed_m = centered_metrics(fixed_p)
|
||||
adaptive_m = centered_metrics(adaptive_p)
|
||||
gps_steps = np.linalg.norm(np.diff(raw, axis=0), axis=1)
|
||||
imu_rate = len(imu) / max(imu[-1].t - imu[0].t, 1e-9)
|
||||
gps_rate = len(gps) / max(gps[-1].t - gps[0].t, 1e-9)
|
||||
lines = [
|
||||
"Fixed-stationary vs motion-capable ESKF",
|
||||
"========================================",
|
||||
f"Common replay duration: {duration:.3f} s",
|
||||
f"GPS: {len(gps)} samples, mean rate {gps_rate:.3f} Hz",
|
||||
f"IMU: {len(imu)} windows, mean rate {imu_rate:.3f} Hz, underlying samples {sum(x.samples for x in imu)}",
|
||||
"Timing: separate stationary captures replayed from t=0 (not hardware-synchronized)",
|
||||
"GPS update dimensions: 2-D horizontal (current level-2 firmware log has no height)",
|
||||
f"ENU reference: lat={reference[0]:.10f}, lon={reference[1]:.10f}",
|
||||
f"GPS max consecutive horizontal step: {np.max(gps_steps):.3f} m",
|
||||
f"Raw GPS centered horizontal RMS/P95/max: {raw_m['rms']:.3f} / {raw_m['p95']:.3f} / {raw_m['max']:.3f} m",
|
||||
f"Fixed model centered horizontal RMS/P95/max: {fixed_m['rms']:.3f} / {fixed_m['p95']:.3f} / {fixed_m['max']:.3f} m",
|
||||
f"Adaptive model centered horizontal RMS/P95/max: {adaptive_m['rms']:.3f} / {adaptive_m['p95']:.3f} / {adaptive_m['max']:.3f} m",
|
||||
f"Fixed GPS accepted/rejected: {fixed_eskf.accepted_gps}/{fixed_eskf.rejected_gps}",
|
||||
f"Adaptive GPS accepted/rejected: {adaptive_eskf.accepted_gps}/{adaptive_eskf.rejected_gps}",
|
||||
f"IMU stationary detector true: {adaptive_detected}/{len(imu)} ({100.0 * adaptive_detected / len(imu):.2f}%)",
|
||||
f"ZUPT updates fixed/adaptive: {fixed_zupt}/{adaptive_zupt}",
|
||||
f"Final speed fixed/adaptive: {np.linalg.norm(fixed_eskf.v):.6f} / {np.linalg.norm(adaptive_eskf.v):.6f} m/s",
|
||||
"Adaptive model uses a 3-window stationary decision; it does not assume zero velocity while motion is detected.",
|
||||
"No surveyed truth is available: scatter measures precision, not absolute position accuracy.",
|
||||
]
|
||||
summary = "\n".join(lines) + "\n"
|
||||
(args.output / "summary.txt").write_text(summary, encoding="utf-8")
|
||||
write_csv(args.output / "model_comparison.csv", gps, fixed, adaptive)
|
||||
plot(args.output / "model_comparison_timeseries.png", fixed, adaptive)
|
||||
plot_scatter(args.output / "model_comparison_scatter.png", fixed, adaptive)
|
||||
print(summary, end="")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,208 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Compare stationary GPS firmware UART logs, grouped by satellite count."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import math
|
||||
import re
|
||||
import statistics
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
POSITION_RE = re.compile(
|
||||
r"position lat=(?P<lat>[-+0-9.eE]+) "
|
||||
r"lon=(?P<lon>[-+0-9.eE]+) height=(?P<height>[-+0-9.eE]+)"
|
||||
)
|
||||
RUNNING_RE = re.compile(r"navigation software running with (?P<sats>\d+) satellites")
|
||||
NAVSOL_RE = re.compile(
|
||||
r"NAVSOL valid=(?P<valid>[01]).*?fde=(?P<fde>[01]).*?"
|
||||
r"sats=(?P<used>\d+)/(?P<available>\d+)"
|
||||
)
|
||||
|
||||
|
||||
def percentile(values: list[float], percentage: float) -> float:
|
||||
if not values:
|
||||
return math.nan
|
||||
ordered = sorted(values)
|
||||
position = (len(ordered) - 1) * percentage / 100.0
|
||||
lower = math.floor(position)
|
||||
upper = math.ceil(position)
|
||||
if lower == upper:
|
||||
return ordered[lower]
|
||||
fraction = position - lower
|
||||
return ordered[lower] * (1.0 - fraction) + ordered[upper] * fraction
|
||||
|
||||
|
||||
def parse_log(path: Path) -> list[dict[str, float | int | None]]:
|
||||
samples: list[dict[str, float | int | None]] = []
|
||||
current_satellites: int | None = None
|
||||
with path.open(newline="", encoding="utf-8", errors="replace") as stream:
|
||||
for row in csv.DictReader(stream):
|
||||
line = row.get("uart_line", "")
|
||||
running = RUNNING_RE.search(line)
|
||||
if running:
|
||||
current_satellites = int(running.group("sats"))
|
||||
position = POSITION_RE.search(line)
|
||||
if position:
|
||||
samples.append(
|
||||
{
|
||||
"time": float(row.get("host_monotonic_s", "nan")),
|
||||
"lat": float(position.group("lat")),
|
||||
"lon": float(position.group("lon")),
|
||||
"height": float(position.group("height")),
|
||||
"satellites": current_satellites,
|
||||
"used": None,
|
||||
"valid": None,
|
||||
"fde": None,
|
||||
}
|
||||
)
|
||||
navsol = NAVSOL_RE.search(line)
|
||||
if navsol and samples:
|
||||
sample = samples[-1]
|
||||
sample["satellites"] = int(navsol.group("available"))
|
||||
sample["used"] = int(navsol.group("used"))
|
||||
sample["valid"] = int(navsol.group("valid"))
|
||||
sample["fde"] = int(navsol.group("fde"))
|
||||
current_satellites = int(navsol.group("available"))
|
||||
return [sample for sample in samples if sample["satellites"] is not None]
|
||||
|
||||
|
||||
def local_offsets(
|
||||
sample: dict[str, float | int | None], reference: tuple[float, float, float]
|
||||
) -> tuple[float, float, float]:
|
||||
latitude, longitude, height = reference
|
||||
latitude_rad = math.radians(latitude)
|
||||
sin_latitude = math.sin(latitude_rad)
|
||||
eccentricity_squared = 6.69437999014e-3
|
||||
semi_major_axis = 6378137.0
|
||||
prime_vertical = semi_major_axis / math.sqrt(
|
||||
1.0 - eccentricity_squared * sin_latitude * sin_latitude
|
||||
)
|
||||
meridional = (
|
||||
semi_major_axis
|
||||
* (1.0 - eccentricity_squared)
|
||||
/ (1.0 - eccentricity_squared * sin_latitude * sin_latitude) ** 1.5
|
||||
)
|
||||
north = math.radians(float(sample["lat"]) - latitude) * (meridional + height)
|
||||
east = (
|
||||
math.radians(float(sample["lon"]) - longitude)
|
||||
* (prime_vertical + height)
|
||||
* math.cos(latitude_rad)
|
||||
)
|
||||
up = float(sample["height"]) - height
|
||||
return east, north, up
|
||||
|
||||
|
||||
def summarize_group(
|
||||
samples: list[dict[str, float | int | None]], reference: tuple[float, float, float]
|
||||
) -> dict[str, float | int]:
|
||||
offsets = [local_offsets(sample, reference) for sample in samples]
|
||||
horizontal = [math.hypot(east, north) for east, north, _ in offsets]
|
||||
distance_3d = [math.sqrt(east * east + north * north + up * up) for east, north, up in offsets]
|
||||
vertical = [abs(up) for _, _, up in offsets]
|
||||
valid_values = [int(sample["valid"]) for sample in samples if sample["valid"] is not None]
|
||||
fde_values = [int(sample["fde"]) for sample in samples if sample["fde"] is not None]
|
||||
return {
|
||||
"samples": len(samples),
|
||||
"horizontal_mean_m": statistics.fmean(horizontal),
|
||||
"horizontal_p50_m": percentile(horizontal, 50.0),
|
||||
"horizontal_p95_m": percentile(horizontal, 95.0),
|
||||
"horizontal_max_m": max(horizontal),
|
||||
"vertical_abs_mean_m": statistics.fmean(vertical),
|
||||
"distance_3d_mean_m": statistics.fmean(distance_3d),
|
||||
"distance_3d_p95_m": percentile(distance_3d, 95.0),
|
||||
"distance_3d_max_m": max(distance_3d),
|
||||
"valid_rate_pct": 100.0 * statistics.fmean(valid_values) if valid_values else math.nan,
|
||||
"fde_rate_pct": 100.0 * statistics.fmean(fde_values) if fde_values else math.nan,
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--old", type=Path, required=True)
|
||||
parser.add_argument("--new", type=Path, required=True)
|
||||
parser.add_argument("--output", type=Path, required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
logs = {"old": parse_log(args.old), "new": parse_log(args.new)}
|
||||
if not logs["old"] or not logs["new"]:
|
||||
raise SystemExit("both logs must contain position samples with satellite counts")
|
||||
|
||||
references = {
|
||||
name: (
|
||||
statistics.median(float(sample["lat"]) for sample in samples),
|
||||
statistics.median(float(sample["lon"]) for sample in samples),
|
||||
statistics.median(float(sample["height"]) for sample in samples),
|
||||
)
|
||||
for name, samples in logs.items()
|
||||
}
|
||||
|
||||
rows: list[dict[str, str | int | float]] = []
|
||||
for firmware, samples in logs.items():
|
||||
groups: list[tuple[str, list[dict[str, float | int | None]]]] = [("all", samples)]
|
||||
groups.extend(
|
||||
(str(count), [sample for sample in samples if sample["satellites"] == count])
|
||||
for count in sorted({int(sample["satellites"]) for sample in samples})
|
||||
)
|
||||
if any(sample["fde"] is not None for sample in samples):
|
||||
groups.extend(
|
||||
(
|
||||
f"all_fde{fde_state}",
|
||||
[sample for sample in samples if sample["fde"] == fde_state],
|
||||
)
|
||||
for fde_state in (0, 1)
|
||||
if any(sample["fde"] == fde_state for sample in samples)
|
||||
)
|
||||
groups.extend(
|
||||
(
|
||||
f"{count}_fde{fde_state}",
|
||||
[
|
||||
sample
|
||||
for sample in samples
|
||||
if sample["satellites"] == count and sample["fde"] == fde_state
|
||||
],
|
||||
)
|
||||
for count in sorted({int(sample["satellites"]) for sample in samples})
|
||||
for fde_state in (0, 1)
|
||||
if any(
|
||||
sample["satellites"] == count and sample["fde"] == fde_state
|
||||
for sample in samples
|
||||
)
|
||||
)
|
||||
for satellite_count, group in groups:
|
||||
rows.append(
|
||||
{
|
||||
"firmware": firmware,
|
||||
"satellites": satellite_count,
|
||||
**summarize_group(group, references[firmware]),
|
||||
}
|
||||
)
|
||||
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
with args.output.open("w", newline="", encoding="utf-8") as stream:
|
||||
writer = csv.DictWriter(stream, fieldnames=list(rows[0]))
|
||||
writer.writeheader()
|
||||
writer.writerows(rows)
|
||||
|
||||
old_reference = {"lat": references["old"][0], "lon": references["old"][1], "height": references["old"][2]}
|
||||
new_offset = local_offsets(old_reference, references["new"])
|
||||
median_separation = math.sqrt(sum(value * value for value in new_offset))
|
||||
print(f"old_samples={len(logs['old'])} new_samples={len(logs['new'])}")
|
||||
print(f"old_reference={references['old']}")
|
||||
print(f"new_reference={references['new']}")
|
||||
print(f"median_position_separation_3d_m={median_separation:.3f}")
|
||||
for row in rows:
|
||||
print(
|
||||
f"{row['firmware']:>3} sats={row['satellites']:>3} n={row['samples']:>4} "
|
||||
f"hmean={row['horizontal_mean_m']:.2f} hp95={row['horizontal_p95_m']:.2f} "
|
||||
f"hmax={row['horizontal_max_m']:.2f} d3p95={row['distance_3d_p95_m']:.2f} "
|
||||
f"valid={row['valid_rate_pct']:.1f}% fde={row['fde_rate_pct']:.1f}%"
|
||||
)
|
||||
print(f"wrote {args.output}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,655 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Offline GPS/ICM-4268x fusion for the stationary Genesys2 capture.
|
||||
|
||||
The two UART logs are captured sequentially, so their elapsed-time axes are
|
||||
replayed together. That is valid for the explicitly stationary experiment,
|
||||
but is not a substitute for a synchronous moving-platform capture.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import json
|
||||
import math
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
import matplotlib
|
||||
|
||||
matplotlib.use("Agg")
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
|
||||
G = 9.80665
|
||||
|
||||
GPS_RE = re.compile(
|
||||
r"position lat=(?P<lat>[-+0-9.eE]+) lon=(?P<lon>[-+0-9.eE]+) "
|
||||
r"height=(?P<height>[-+0-9.eE]+)"
|
||||
)
|
||||
DOP_RE = re.compile(
|
||||
r"DOP GDOP=(?P<gdop>[-+0-9.eE]+) PDOP=(?P<pdop>[-+0-9.eE]+) "
|
||||
r"HDOP=(?P<hdop>[-+0-9.eE]+) VDOP=(?P<vdop>[-+0-9.eE]+)"
|
||||
)
|
||||
IMU_RE = re.compile(
|
||||
r"(?P<t>[0-9]+\.[0-9]+) s \| samples=\s*(?P<n>[0-9]+) total=\s*(?P<total>[0-9]+) \| "
|
||||
r"Temp=\s*(?P<temp>[-+0-9.]+) C \| Accel\[g\] "
|
||||
r"X=\s*(?P<ax>[-+0-9.]+) Y=\s*(?P<ay>[-+0-9.]+) Z=\s*(?P<az>[-+0-9.]+) \| "
|
||||
r"Gyro\[dps\] X=\s*(?P<gx>[-+0-9.]+) Y=\s*(?P<gy>[-+0-9.]+) Z=\s*(?P<gz>[-+0-9.]+)"
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class GpsSample:
|
||||
t: float
|
||||
unix_s: float
|
||||
lat: float
|
||||
lon: float
|
||||
height: float
|
||||
hdop: float
|
||||
vdop: float
|
||||
|
||||
|
||||
@dataclass
|
||||
class ImuSample:
|
||||
t: float
|
||||
unix_s: float
|
||||
samples: int
|
||||
temperature_c: float
|
||||
accel_mps2: np.ndarray
|
||||
gyro_rps: np.ndarray
|
||||
|
||||
|
||||
def read_uart_csv(path: Path):
|
||||
with path.open(newline="", encoding="utf-8") as stream:
|
||||
yield from csv.DictReader(stream)
|
||||
|
||||
|
||||
def parse_gps(path: Path) -> list[GpsSample]:
|
||||
samples: list[GpsSample] = []
|
||||
last_dop = (math.nan, math.nan)
|
||||
for row in read_uart_csv(path):
|
||||
line = row["uart_line"]
|
||||
dop = DOP_RE.search(line)
|
||||
if dop:
|
||||
last_dop = (float(dop["hdop"]), float(dop["vdop"]))
|
||||
match = GPS_RE.search(line)
|
||||
if match:
|
||||
samples.append(
|
||||
GpsSample(
|
||||
t=float(row["host_monotonic_s"]),
|
||||
unix_s=float(row["host_unix_s"]),
|
||||
lat=float(match["lat"]),
|
||||
lon=float(match["lon"]),
|
||||
height=float(match["height"]),
|
||||
hdop=last_dop[0],
|
||||
vdop=last_dop[1],
|
||||
)
|
||||
)
|
||||
if len(samples) < 4:
|
||||
raise ValueError(f"only {len(samples)} GPS positions found in {path}")
|
||||
t0 = samples[0].t
|
||||
for sample in samples:
|
||||
sample.t -= t0
|
||||
return samples
|
||||
|
||||
|
||||
def parse_imu(path: Path) -> list[ImuSample]:
|
||||
samples: list[ImuSample] = []
|
||||
for row in read_uart_csv(path):
|
||||
match = IMU_RE.search(row["uart_line"])
|
||||
if not match:
|
||||
continue
|
||||
samples.append(
|
||||
ImuSample(
|
||||
t=float(match["t"]),
|
||||
unix_s=float(row["host_unix_s"]),
|
||||
samples=int(match["n"]),
|
||||
temperature_c=float(match["temp"]),
|
||||
accel_mps2=G
|
||||
* np.array(
|
||||
[float(match["ax"]), float(match["ay"]), float(match["az"])]
|
||||
),
|
||||
gyro_rps=np.deg2rad(
|
||||
[float(match["gx"]), float(match["gy"]), float(match["gz"])]
|
||||
),
|
||||
)
|
||||
)
|
||||
if len(samples) < 4:
|
||||
raise ValueError(f"only {len(samples)} IMU windows found in {path}")
|
||||
t0 = samples[0].t
|
||||
for sample in samples:
|
||||
sample.t -= t0
|
||||
return samples
|
||||
|
||||
|
||||
def geodetic_to_ecef(lat_deg, lon_deg, height_m):
|
||||
lat = np.deg2rad(np.asarray(lat_deg, dtype=float))
|
||||
lon = np.deg2rad(np.asarray(lon_deg, dtype=float))
|
||||
height = np.asarray(height_m, dtype=float)
|
||||
a = 6378137.0
|
||||
e2 = 6.69437999014e-3
|
||||
n = a / np.sqrt(1.0 - e2 * np.sin(lat) ** 2)
|
||||
x = (n + height) * np.cos(lat) * np.cos(lon)
|
||||
y = (n + height) * np.cos(lat) * np.sin(lon)
|
||||
z = (n * (1.0 - e2) + height) * np.sin(lat)
|
||||
return np.column_stack((x, y, z))
|
||||
|
||||
|
||||
def gps_to_enu(samples: list[GpsSample]):
|
||||
lat0 = float(np.median([sample.lat for sample in samples]))
|
||||
lon0 = float(np.median([sample.lon for sample in samples]))
|
||||
h0 = float(np.median([sample.height for sample in samples]))
|
||||
origin = geodetic_to_ecef([lat0], [lon0], [h0])[0]
|
||||
xyz = geodetic_to_ecef(
|
||||
[sample.lat for sample in samples],
|
||||
[sample.lon for sample in samples],
|
||||
[sample.height for sample in samples],
|
||||
)
|
||||
lat = math.radians(lat0)
|
||||
lon = math.radians(lon0)
|
||||
rotation = np.array(
|
||||
[
|
||||
[-math.sin(lon), math.cos(lon), 0.0],
|
||||
[
|
||||
-math.sin(lat) * math.cos(lon),
|
||||
-math.sin(lat) * math.sin(lon),
|
||||
math.cos(lat),
|
||||
],
|
||||
[
|
||||
math.cos(lat) * math.cos(lon),
|
||||
math.cos(lat) * math.sin(lon),
|
||||
math.sin(lat),
|
||||
],
|
||||
]
|
||||
)
|
||||
return (xyz - origin) @ rotation.T, (lat0, lon0, h0)
|
||||
|
||||
|
||||
def ecef_to_geodetic(xyz):
|
||||
"""Convert ECEF XYZ to WGS-84 latitude, longitude and ellipsoid height."""
|
||||
xyz = np.atleast_2d(np.asarray(xyz, dtype=float))
|
||||
x, y, z = xyz.T
|
||||
a = 6378137.0
|
||||
e2 = 6.69437999014e-3
|
||||
horizontal = np.hypot(x, y)
|
||||
lon = np.arctan2(y, x)
|
||||
lat = np.arctan2(z, horizontal * (1.0 - e2))
|
||||
for _ in range(8):
|
||||
n = a / np.sqrt(1.0 - e2 * np.sin(lat) ** 2)
|
||||
height = horizontal / np.cos(lat) - n
|
||||
lat = np.arctan2(z, horizontal * (1.0 - e2 * n / (n + height)))
|
||||
n = a / np.sqrt(1.0 - e2 * np.sin(lat) ** 2)
|
||||
height = horizontal / np.cos(lat) - n
|
||||
return np.column_stack((np.rad2deg(lat), np.rad2deg(lon), height))
|
||||
|
||||
|
||||
def enu_to_geodetic(enu, reference):
|
||||
"""Convert local ENU positions back to WGS-84 coordinates."""
|
||||
lat0, lon0, h0 = reference
|
||||
lat = math.radians(lat0)
|
||||
lon = math.radians(lon0)
|
||||
rotation = np.array(
|
||||
[
|
||||
[-math.sin(lon), math.cos(lon), 0.0],
|
||||
[
|
||||
-math.sin(lat) * math.cos(lon),
|
||||
-math.sin(lat) * math.sin(lon),
|
||||
math.cos(lat),
|
||||
],
|
||||
[
|
||||
math.cos(lat) * math.cos(lon),
|
||||
math.cos(lat) * math.sin(lon),
|
||||
math.sin(lat),
|
||||
],
|
||||
]
|
||||
)
|
||||
origin = geodetic_to_ecef([lat0], [lon0], [h0])[0]
|
||||
xyz = origin + np.atleast_2d(np.asarray(enu, dtype=float)) @ rotation
|
||||
return ecef_to_geodetic(xyz)
|
||||
|
||||
|
||||
def skew(v):
|
||||
x, y, z = v
|
||||
return np.array([[0.0, -z, y], [z, 0.0, -x], [-y, x, 0.0]])
|
||||
|
||||
|
||||
def quat_normalize(q):
|
||||
q = np.asarray(q, dtype=float)
|
||||
q /= np.linalg.norm(q)
|
||||
return q if q[0] >= 0.0 else -q
|
||||
|
||||
|
||||
def quat_multiply(q, r):
|
||||
w, x, y, z = q
|
||||
a, b, c, d = r
|
||||
return np.array(
|
||||
[
|
||||
w * a - x * b - y * c - z * d,
|
||||
w * b + x * a + y * d - z * c,
|
||||
w * c - x * d + y * a + z * b,
|
||||
w * d + x * c - y * b + z * a,
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def rotvec_quat(v):
|
||||
angle = float(np.linalg.norm(v))
|
||||
if angle < 1e-10:
|
||||
return quat_normalize(np.r_[1.0, 0.5 * np.asarray(v)])
|
||||
return np.r_[math.cos(angle / 2.0), np.asarray(v) * math.sin(angle / 2.0) / angle]
|
||||
|
||||
|
||||
def quat_rotation(q):
|
||||
w, x, y, z = q
|
||||
return np.array(
|
||||
[
|
||||
[1 - 2 * (y * y + z * z), 2 * (x * y - w * z), 2 * (x * z + w * y)],
|
||||
[2 * (x * y + w * z), 1 - 2 * (x * x + z * z), 2 * (y * z - w * x)],
|
||||
[2 * (x * z - w * y), 2 * (y * z + w * x), 1 - 2 * (x * x + y * y)],
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def align_quat(source, target):
|
||||
source = np.asarray(source, dtype=float) / np.linalg.norm(source)
|
||||
target = np.asarray(target, dtype=float) / np.linalg.norm(target)
|
||||
dot = float(np.dot(source, target))
|
||||
if dot < -0.999999:
|
||||
axis = np.cross(source, [1.0, 0.0, 0.0])
|
||||
if np.linalg.norm(axis) < 1e-6:
|
||||
axis = np.cross(source, [0.0, 1.0, 0.0])
|
||||
axis /= np.linalg.norm(axis)
|
||||
return np.r_[0.0, axis]
|
||||
return quat_normalize(np.r_[1.0 + dot, np.cross(source, target)])
|
||||
|
||||
|
||||
def robust_sigma(values, floor):
|
||||
values = np.asarray(values, dtype=float)
|
||||
mad = np.median(np.abs(values - np.median(values)))
|
||||
return max(float(1.4826 * mad), floor)
|
||||
|
||||
|
||||
class StationaryEskf:
|
||||
"""15-state ESKF with right attitude error in a local ENU frame."""
|
||||
|
||||
def __init__(self, position, attitude, accel_sigma, gyro_sigma, gps_sigma):
|
||||
self.p = np.asarray(position, dtype=float).copy()
|
||||
self.v = np.zeros(3)
|
||||
self.q = quat_normalize(attitude)
|
||||
self.ba = np.zeros(3)
|
||||
self.bg = np.zeros(3)
|
||||
self.p_cov = np.diag(
|
||||
np.r_[gps_sigma**2, np.full(3, 1.0), np.deg2rad([5, 5, 30]) ** 2,
|
||||
np.full(3, 0.05**2), np.full(3, np.deg2rad(0.05) ** 2)]
|
||||
)
|
||||
self.accel_sigma = np.asarray(accel_sigma)
|
||||
self.gyro_sigma = np.asarray(gyro_sigma)
|
||||
self.gps_r = np.diag(np.asarray(gps_sigma) ** 2)
|
||||
self.rejected_gps = 0
|
||||
self.accepted_gps = 0
|
||||
|
||||
def propagate(self, accel, gyro, dt):
|
||||
if dt <= 0.0:
|
||||
return
|
||||
dt = min(float(dt), 1.0)
|
||||
omega = np.asarray(gyro) - self.bg
|
||||
specific_force = np.asarray(accel) - self.ba
|
||||
rotation = quat_rotation(self.q)
|
||||
acceleration = rotation @ specific_force + np.array([0.0, 0.0, -G])
|
||||
self.p += self.v * dt + 0.5 * acceleration * dt * dt
|
||||
self.v += acceleration * dt
|
||||
self.q = quat_normalize(quat_multiply(self.q, rotvec_quat(omega * dt)))
|
||||
|
||||
f = np.zeros((15, 15))
|
||||
f[0:3, 3:6] = np.eye(3)
|
||||
f[3:6, 6:9] = -rotation @ skew(specific_force)
|
||||
f[3:6, 9:12] = -rotation
|
||||
f[6:9, 6:9] = -skew(omega)
|
||||
f[6:9, 12:15] = -np.eye(3)
|
||||
phi = np.eye(15) + f * dt
|
||||
|
||||
noise_map = np.zeros((15, 12))
|
||||
noise_map[3:6, 0:3] = rotation
|
||||
noise_map[6:9, 3:6] = np.eye(3)
|
||||
noise_map[9:12, 6:9] = np.eye(3)
|
||||
noise_map[12:15, 9:12] = np.eye(3)
|
||||
qc = np.diag(
|
||||
np.r_[
|
||||
self.accel_sigma**2,
|
||||
self.gyro_sigma**2,
|
||||
np.full(3, 0.002**2),
|
||||
np.full(3, np.deg2rad(0.002) ** 2),
|
||||
]
|
||||
)
|
||||
self.p_cov = phi @ self.p_cov @ phi.T + noise_map @ qc @ noise_map.T * dt
|
||||
self.p_cov = 0.5 * (self.p_cov + self.p_cov.T)
|
||||
|
||||
def _update(self, residual, h, r):
|
||||
innovation = h @ self.p_cov @ h.T + r
|
||||
gain = np.linalg.solve(innovation, h @ self.p_cov).T
|
||||
delta = gain @ residual
|
||||
identity = np.eye(15)
|
||||
ikh = identity - gain @ h
|
||||
self.p_cov = ikh @ self.p_cov @ ikh.T + gain @ r @ gain.T
|
||||
self.p += delta[0:3]
|
||||
self.v += delta[3:6]
|
||||
self.q = quat_normalize(quat_multiply(self.q, rotvec_quat(delta[6:9])))
|
||||
self.ba += delta[9:12]
|
||||
self.bg += delta[12:15]
|
||||
self.p_cov = 0.5 * (self.p_cov + self.p_cov.T)
|
||||
return innovation
|
||||
|
||||
def gps_update(self, position, gate=16.27):
|
||||
h = np.zeros((3, 15))
|
||||
h[:, 0:3] = np.eye(3)
|
||||
residual = np.asarray(position) - self.p
|
||||
innovation = h @ self.p_cov @ h.T + self.gps_r
|
||||
mahalanobis = float(residual @ np.linalg.solve(innovation, residual))
|
||||
if mahalanobis > gate:
|
||||
self.rejected_gps += 1
|
||||
return False, mahalanobis
|
||||
self._update(residual, h, self.gps_r)
|
||||
self.accepted_gps += 1
|
||||
return True, mahalanobis
|
||||
|
||||
def zero_velocity_update(self, sigma=0.025):
|
||||
h = np.zeros((3, 15))
|
||||
h[:, 3:6] = np.eye(3)
|
||||
self._update(-self.v, h, np.eye(3) * sigma**2)
|
||||
|
||||
def zero_gyro_update(self, measured_gyro, sigma):
|
||||
h = np.zeros((3, 15))
|
||||
h[:, 12:15] = np.eye(3)
|
||||
# z = bg + noise when the true angular rate is zero.
|
||||
self._update(np.asarray(measured_gyro) - self.bg, h, np.diag(sigma**2))
|
||||
|
||||
|
||||
def run_filter(gps: list[GpsSample], imu: list[ImuSample], enu):
|
||||
accel = np.vstack([sample.accel_mps2 for sample in imu])
|
||||
gyro = np.vstack([sample.gyro_rps for sample in imu])
|
||||
mean_accel = np.mean(accel, axis=0)
|
||||
attitude = align_quat(mean_accel, [0.0, 0.0, 1.0])
|
||||
accel_sigma = np.array([robust_sigma(accel[:, i], 0.003) for i in range(3)])
|
||||
gyro_sigma = np.array(
|
||||
[robust_sigma(gyro[:, i], math.radians(0.001)) for i in range(3)]
|
||||
)
|
||||
gps_sigma = np.array([robust_sigma(enu[:, i], 1.0 if i < 2 else 2.0) for i in range(3)])
|
||||
|
||||
eskf = StationaryEskf(enu[0], attitude, accel_sigma, gyro_sigma, gps_sigma)
|
||||
events = [(sample.t, 0, i) for i, sample in enumerate(imu)]
|
||||
events += [(sample.t, 1, i) for i, sample in enumerate(gps)]
|
||||
events.sort()
|
||||
current_accel = accel[0]
|
||||
current_gyro = gyro[0]
|
||||
last_t = 0.0
|
||||
output = []
|
||||
|
||||
for t, kind, index in events:
|
||||
eskf.propagate(current_accel, current_gyro, t - last_t)
|
||||
last_t = t
|
||||
if kind == 0:
|
||||
current_accel = accel[index]
|
||||
current_gyro = gyro[index]
|
||||
eskf.zero_velocity_update()
|
||||
eskf.zero_gyro_update(current_gyro, np.maximum(gyro_sigma, math.radians(0.002)))
|
||||
else:
|
||||
accepted, mahalanobis = eskf.gps_update(enu[index])
|
||||
output.append(
|
||||
{
|
||||
"t": t,
|
||||
"raw": enu[index].copy(),
|
||||
"fused": eskf.p.copy(),
|
||||
"velocity": eskf.v.copy(),
|
||||
"position_std": np.sqrt(np.maximum(np.diag(eskf.p_cov)[0:3], 0.0)),
|
||||
"accepted": accepted,
|
||||
"mahalanobis": mahalanobis,
|
||||
}
|
||||
)
|
||||
return eskf, output, accel_sigma, gyro_sigma, gps_sigma, attitude
|
||||
|
||||
|
||||
def radial_95(values):
|
||||
centered = values - np.median(values, axis=0)
|
||||
return float(np.percentile(np.linalg.norm(centered, axis=1), 95))
|
||||
|
||||
|
||||
def write_csvs(output_dir, gps, imu, enu, filtered):
|
||||
with (output_dir / "gps_positions.csv").open("w", newline="") as stream:
|
||||
writer = csv.writer(stream)
|
||||
writer.writerow(["t_s", "unix_s", "lat_deg", "lon_deg", "height_m", "east_m", "north_m", "up_m", "hdop", "vdop"])
|
||||
for sample, local in zip(gps, enu):
|
||||
writer.writerow([sample.t, sample.unix_s, sample.lat, sample.lon, sample.height, *local, sample.hdop, sample.vdop])
|
||||
with (output_dir / "imu_windows.csv").open("w", newline="") as stream:
|
||||
writer = csv.writer(stream)
|
||||
writer.writerow(["t_s", "unix_s", "samples", "temperature_c", "ax_mps2", "ay_mps2", "az_mps2", "gx_rps", "gy_rps", "gz_rps"])
|
||||
for sample in imu:
|
||||
writer.writerow([sample.t, sample.unix_s, sample.samples, sample.temperature_c, *sample.accel_mps2, *sample.gyro_rps])
|
||||
with (output_dir / "eskf_positions.csv").open("w", newline="") as stream:
|
||||
writer = csv.writer(stream)
|
||||
writer.writerow(["t_s", "gps_e_m", "gps_n_m", "gps_u_m", "eskf_e_m", "eskf_n_m", "eskf_u_m", "ve_mps", "vn_mps", "vu_mps", "sigma_e_m", "sigma_n_m", "sigma_u_m", "gps_accepted", "mahalanobis2"])
|
||||
for row in filtered:
|
||||
writer.writerow([row["t"], *row["raw"], *row["fused"], *row["velocity"], *row["position_std"], int(row["accepted"]), row["mahalanobis"]])
|
||||
|
||||
|
||||
def write_playback_map(output_dir, gps, filtered, reference):
|
||||
"""Write a Leaflet map with a sample-by-sample GPS/ESKF player."""
|
||||
fused_lla = enu_to_geodetic(
|
||||
np.vstack([row["fused"] for row in filtered]), reference
|
||||
)
|
||||
records = []
|
||||
for index, (sample, row, corrected) in enumerate(zip(gps, filtered, fused_lla)):
|
||||
records.append(
|
||||
{
|
||||
"i": index,
|
||||
"t": round(float(row["t"]), 6),
|
||||
"raw": [sample.lat, sample.lon, sample.height],
|
||||
"fused": [float(corrected[0]), float(corrected[1]), float(corrected[2])],
|
||||
"accepted": bool(row["accepted"]),
|
||||
"mahalanobis": round(float(row["mahalanobis"]), 3),
|
||||
"separation": round(float(np.linalg.norm(row["raw"][:2] - row["fused"][:2])), 3),
|
||||
}
|
||||
)
|
||||
|
||||
data_json = json.dumps(records, separators=(",", ":"), ensure_ascii=False)
|
||||
center_json = json.dumps([reference[0], reference[1]])
|
||||
html = """<!doctype html>
|
||||
<html lang="tr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>GPS / ESKF sample oynatıcı</title>
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
|
||||
<style>
|
||||
html,body,#map { height:100%; margin:0; font-family:system-ui,sans-serif; }
|
||||
.panel { position:absolute; z-index:1000; left:12px; bottom:18px; width:min(620px,calc(100% - 44px));
|
||||
background:rgba(255,255,255,.94); padding:12px 14px; border-radius:9px; box-shadow:0 2px 12px #0004; }
|
||||
.row { display:flex; align-items:center; gap:9px; flex-wrap:wrap; }
|
||||
button,select { padding:6px 10px; } input[type=range] { flex:1; min-width:180px; }
|
||||
.readout { margin-top:8px; display:grid; grid-template-columns:repeat(3,minmax(120px,1fr)); gap:4px 12px; font-size:13px; }
|
||||
.raw { color:#d62728; } .fused { color:#1769aa; } .gated { color:#e67e22; font-weight:700; }
|
||||
.legend { background:white; padding:7px 9px; line-height:1.5; box-shadow:0 1px 5px #0004; }
|
||||
.dot { display:inline-block; width:10px; height:10px; border-radius:50%; margin-right:5px; }
|
||||
@media(max-width:600px) { .readout { grid-template-columns:1fr 1fr; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map"></div>
|
||||
<div class="panel">
|
||||
<div class="row">
|
||||
<button id="play">▶ Oynat</button><button id="reset">↺ Başa al</button><button id="fit">İzleri sığdır</button>
|
||||
<label>Hız <select id="speed"><option>0.5</option><option selected>1</option><option>2</option><option>4</option></select>×</label>
|
||||
</div>
|
||||
<div class="row" style="margin-top:7px"><span id="tick">1 / 1</span><input id="slider" type="range" min="0" value="0"><b id="time">0.0 s</b></div>
|
||||
<div class="readout">
|
||||
<span class="raw" id="raw"></span><span class="fused" id="fused"></span><span id="height"></span>
|
||||
<span id="distance"></span><span id="gate"></span><span id="nis"></span>
|
||||
</div>
|
||||
</div>
|
||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
||||
<script>
|
||||
const samples=__DATA__, center=__CENTER__;
|
||||
const map=L.map('map',{zoomControl:true}).setView(center,20);
|
||||
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png',{maxZoom:22,attribution:'© OpenStreetMap contributors'}).addTo(map);
|
||||
L.control.scale({imperial:false}).addTo(map);
|
||||
const rawLine=L.polyline([],{color:'#d62728',weight:2,opacity:.55}).addTo(map);
|
||||
const fusedLine=L.polyline([],{color:'#1769aa',weight:3,opacity:.9}).addTo(map);
|
||||
const rawDots=L.layerGroup().addTo(map), fusedDots=L.layerGroup().addTo(map);
|
||||
const rawNow=L.circleMarker(center,{radius:8,color:'#8b0000',weight:2,fillColor:'#d62728',fillOpacity:.9}).addTo(map);
|
||||
const fusedNow=L.circleMarker(center,{radius:7,color:'#083b66',weight:2,fillColor:'#2196f3',fillOpacity:.95}).addTo(map);
|
||||
const legend=L.control({position:'topright'}); legend.onAdd=()=>{const d=L.DomUtil.create('div','legend');d.innerHTML='<b>GPS / IMU ESKF</b><br><span class="dot" style="background:#d62728"></span>Ham GPS<br><span class="dot" style="background:#2196f3"></span>ESKF + ZUPT<br><span class="dot" style="background:#e67e22"></span>Reddedilen GPS';return d};legend.addTo(map);
|
||||
const slider=document.getElementById('slider'); slider.max=samples.length-1;
|
||||
let index=0,timer=null;
|
||||
function fmt(v,n=7){return Number(v).toFixed(n)}
|
||||
function render(i){
|
||||
index=Math.max(0,Math.min(samples.length-1,Number(i))); slider.value=index;
|
||||
const shown=samples.slice(0,index+1), s=samples[index];
|
||||
rawLine.setLatLngs(shown.map(x=>x.raw.slice(0,2))); fusedLine.setLatLngs(shown.map(x=>x.fused.slice(0,2)));
|
||||
rawDots.clearLayers(); fusedDots.clearLayers();
|
||||
shown.forEach(x=>{
|
||||
L.circleMarker(x.raw.slice(0,2),{radius:2,stroke:false,fillColor:x.accepted?'#d62728':'#e67e22',fillOpacity:.7}).addTo(rawDots);
|
||||
L.circleMarker(x.fused.slice(0,2),{radius:2,stroke:false,fillColor:'#1769aa',fillOpacity:.8}).addTo(fusedDots);
|
||||
});
|
||||
rawNow.setLatLng(s.raw.slice(0,2)).setStyle({fillColor:s.accepted?'#d62728':'#e67e22'});
|
||||
fusedNow.setLatLng(s.fused.slice(0,2));
|
||||
document.getElementById('tick').textContent=`${index+1} / ${samples.length}`;
|
||||
document.getElementById('time').textContent=`${s.t.toFixed(3)} s`;
|
||||
document.getElementById('raw').textContent=`GPS: ${fmt(s.raw[0])}, ${fmt(s.raw[1])}`;
|
||||
document.getElementById('fused').textContent=`ESKF: ${fmt(s.fused[0])}, ${fmt(s.fused[1])}`;
|
||||
document.getElementById('height').textContent=`h: ${s.raw[2].toFixed(1)} → ${s.fused[2].toFixed(1)} m`;
|
||||
document.getElementById('distance').textContent=`yatay fark: ${s.separation.toFixed(2)} m`;
|
||||
const gate=document.getElementById('gate'); gate.textContent=s.accepted?'GPS kabul':'GPS RED'; gate.className=s.accepted?'':'gated';
|
||||
document.getElementById('nis').textContent=`NIS: ${s.mahalanobis.toFixed(2)}`;
|
||||
}
|
||||
function stop(){if(timer){clearTimeout(timer);timer=null}document.getElementById('play').textContent='▶ Oynat'}
|
||||
function step(){
|
||||
if(index>=samples.length-1){stop();return}
|
||||
const dt=Math.max(60,Math.min(2000,(samples[index+1].t-samples[index].t)*1000/Number(document.getElementById('speed').value)));
|
||||
timer=setTimeout(()=>{render(index+1);step()},dt);
|
||||
}
|
||||
document.getElementById('play').onclick=()=>{if(timer){stop()}else{if(index>=samples.length-1)render(0);document.getElementById('play').textContent='⏸ Duraklat';step()}};
|
||||
document.getElementById('reset').onclick=()=>{stop();render(0)};
|
||||
document.getElementById('fit').onclick=()=>map.fitBounds(L.latLngBounds(samples.flatMap(s=>[s.raw.slice(0,2),s.fused.slice(0,2)])).pad(.15));
|
||||
slider.oninput=()=>{stop();render(slider.value)};
|
||||
render(0); map.fitBounds(L.latLngBounds(samples.flatMap(s=>[s.raw.slice(0,2),s.fused.slice(0,2)])).pad(.15));
|
||||
</script>
|
||||
</body></html>
|
||||
""".replace("__DATA__", data_json).replace("__CENTER__", center_json)
|
||||
(output_dir / "trajectory_map.html").write_text(html, encoding="utf-8")
|
||||
|
||||
|
||||
def plot_results(output_dir, gps, imu, filtered):
|
||||
time = np.array([row["t"] for row in filtered])
|
||||
raw = np.vstack([row["raw"] for row in filtered])
|
||||
fused = np.vstack([row["fused"] for row in filtered])
|
||||
labels = ["East", "North", "Up"]
|
||||
fig, axes = plt.subplots(3, 1, figsize=(10, 8), sharex=True)
|
||||
for i, axis in enumerate(axes):
|
||||
axis.plot(time, raw[:, i], ".", color="0.65", ms=3, label="GPS WLS")
|
||||
axis.plot(time, fused[:, i], color="tab:blue", lw=1.8, label="ESKF + ZUPT")
|
||||
axis.set_ylabel(f"{labels[i]} [m]")
|
||||
axis.grid(alpha=0.25)
|
||||
axes[0].legend()
|
||||
axes[-1].set_xlabel("Normalized elapsed time [s]")
|
||||
fig.suptitle("Stationary GPS / IMU error-state Kalman filter")
|
||||
fig.tight_layout()
|
||||
fig.savefig(output_dir / "position_timeseries.png", dpi=160)
|
||||
plt.close(fig)
|
||||
|
||||
accepted = np.array([row["accepted"] for row in filtered])
|
||||
fig, axis = plt.subplots(figsize=(7, 7))
|
||||
axis.scatter(raw[accepted, 0], raw[accepted, 1], s=12, alpha=0.5, color="0.5", label="GPS WLS accepted")
|
||||
axis.scatter(raw[~accepted, 0], raw[~accepted, 1], marker="x", s=55, color="tab:red", label="GPS gated")
|
||||
axis.plot(fused[:, 0], fused[:, 1], color="tab:blue", lw=1.5, label="ESKF + ZUPT")
|
||||
axis.scatter(fused[-1, 0], fused[-1, 1], marker="x", s=70, color="tab:red", label="ESKF final")
|
||||
axis.set_aspect("equal", adjustable="box")
|
||||
axis.set_xlabel("East [m]")
|
||||
axis.set_ylabel("North [m]")
|
||||
axis.grid(alpha=0.25)
|
||||
axis.legend()
|
||||
center = np.median(raw[:, :2], axis=0)
|
||||
central_radius = max(20.0, 1.2 * float(np.percentile(np.abs(raw[:, :2] - center), 99)))
|
||||
axis.set_xlim(center[0] - central_radius, center[0] + central_radius)
|
||||
axis.set_ylim(center[1] - central_radius, center[1] + central_radius)
|
||||
axis.set_title(f"Horizontal stationary scatter (central view; gated={np.sum(~accepted)})")
|
||||
fig.tight_layout()
|
||||
fig.savefig(output_dir / "horizontal_scatter.png", dpi=160)
|
||||
plt.close(fig)
|
||||
|
||||
t_imu = np.array([sample.t for sample in imu])
|
||||
accel = np.vstack([sample.accel_mps2 for sample in imu]) / G
|
||||
gyro = np.rad2deg(np.vstack([sample.gyro_rps for sample in imu]))
|
||||
fig, axes = plt.subplots(2, 1, figsize=(10, 6), sharex=True)
|
||||
for i, name in enumerate("XYZ"):
|
||||
axes[0].plot(t_imu, accel[:, i], label=name)
|
||||
axes[1].plot(t_imu, gyro[:, i], label=name)
|
||||
axes[0].set_ylabel("Acceleration [g]")
|
||||
axes[1].set_ylabel("Angular rate [deg/s]")
|
||||
axes[1].set_xlabel("IMU elapsed time [s]")
|
||||
for axis in axes:
|
||||
axis.grid(alpha=0.25)
|
||||
axis.legend(ncol=3)
|
||||
fig.suptitle("ICM-4268x 500 ms window averages")
|
||||
fig.tight_layout()
|
||||
fig.savefig(output_dir / "imu_stationary.png", dpi=160)
|
||||
plt.close(fig)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--gps", type=Path, default=Path("logs/gps_60s.csv"))
|
||||
parser.add_argument("--imu", type=Path, default=Path("logs/imu_60s.csv"))
|
||||
parser.add_argument("--output", type=Path, default=Path("output"))
|
||||
args = parser.parse_args()
|
||||
args.output.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
gps = parse_gps(args.gps)
|
||||
imu = parse_imu(args.imu)
|
||||
enu, reference = gps_to_enu(gps)
|
||||
eskf, filtered, accel_sigma, gyro_sigma, gps_sigma, attitude = run_filter(gps, imu, enu)
|
||||
write_csvs(args.output, gps, imu, enu, filtered)
|
||||
plot_results(args.output, gps, imu, filtered)
|
||||
write_playback_map(args.output, gps, filtered, reference)
|
||||
|
||||
raw = np.vstack([row["raw"] for row in filtered])
|
||||
fused = np.vstack([row["fused"] for row in filtered])
|
||||
raw_std = np.std(raw, axis=0, ddof=1)
|
||||
fused_std = np.std(fused, axis=0, ddof=1)
|
||||
raw_h95 = radial_95(raw[:, :2])
|
||||
fused_h95 = radial_95(fused[:, :2])
|
||||
imu_accel = np.vstack([sample.accel_mps2 for sample in imu])
|
||||
imu_gyro = np.vstack([sample.gyro_rps for sample in imu])
|
||||
mean_accel = np.mean(imu_accel, axis=0)
|
||||
mean_gyro = np.mean(imu_gyro, axis=0)
|
||||
lines = [
|
||||
"Stationary GPS/IMU ESKF result",
|
||||
"================================",
|
||||
f"GPS positions: {len(gps)} over {gps[-1].t - gps[0].t:.3f} s",
|
||||
f"IMU windows: {len(imu)} over {imu[-1].t - imu[0].t:.3f} s",
|
||||
f"Underlying SPI samples: {sum(sample.samples for sample in imu)}",
|
||||
"Capture mode: sequential logs replayed on a common elapsed-time axis",
|
||||
f"ENU reference (capture median): lat={reference[0]:.10f} deg, lon={reference[1]:.10f} deg, h={reference[2]:.3f} m",
|
||||
f"GPS robust sigma E/N/U [m]: {gps_sigma[0]:.3f}, {gps_sigma[1]:.3f}, {gps_sigma[2]:.3f}",
|
||||
f"GPS accepted/rejected: {eskf.accepted_gps}/{eskf.rejected_gps}",
|
||||
f"Raw GPS std E/N/U [m]: {raw_std[0]:.3f}, {raw_std[1]:.3f}, {raw_std[2]:.3f}",
|
||||
f"ESKF std E/N/U [m]: {fused_std[0]:.3f}, {fused_std[1]:.3f}, {fused_std[2]:.3f}",
|
||||
f"Raw/ESKF horizontal radial 95% [m]: {raw_h95:.3f} / {fused_h95:.3f}",
|
||||
f"IMU mean acceleration XYZ [m/s^2]: {mean_accel[0]:.6f}, {mean_accel[1]:.6f}, {mean_accel[2]:.6f}",
|
||||
f"IMU mean angular rate XYZ [deg/s]: {np.rad2deg(mean_gyro)[0]:.6f}, {np.rad2deg(mean_gyro)[1]:.6f}, {np.rad2deg(mean_gyro)[2]:.6f}",
|
||||
f"IMU robust accel noise XYZ [m/s^2]: {accel_sigma[0]:.6f}, {accel_sigma[1]:.6f}, {accel_sigma[2]:.6f}",
|
||||
f"IMU robust gyro noise XYZ [deg/s]: {np.rad2deg(gyro_sigma)[0]:.6f}, {np.rad2deg(gyro_sigma)[1]:.6f}, {np.rad2deg(gyro_sigma)[2]:.6f}",
|
||||
f"Initial body-to-ENU quaternion [w,x,y,z]: {attitude[0]:.8f}, {attitude[1]:.8f}, {attitude[2]:.8f}, {attitude[3]:.8f}",
|
||||
f"Final ESKF position E/N/U [m]: {eskf.p[0]:.3f}, {eskf.p[1]:.3f}, {eskf.p[2]:.3f}",
|
||||
f"Final ESKF velocity E/N/U [m/s]: {eskf.v[0]:.6f}, {eskf.v[1]:.6f}, {eskf.v[2]:.6f}",
|
||||
"Caution: no surveyed ground truth; reported gains are precision/stability, not absolute accuracy.",
|
||||
"Caution: ZUPT is enabled because the board was declared stationary.",
|
||||
]
|
||||
summary = "\n".join(lines) + "\n"
|
||||
(args.output / "summary.txt").write_text(summary, encoding="utf-8")
|
||||
print(summary, end="")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Binary file not shown.
|
@@ -0,0 +1,618 @@
|
||||
host_monotonic_s,host_unix_s,uart_line
|
||||
0.276407791,1783892161.836127520,14.500 s | samples=243 total= 7050 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y= 0.000 Z= 0.006
|
||||
2.088479500,1783892163.648199320,
|
||||
2.088658447,1783892163.648377895,ICM PMOD 500 Hz SPI polling test
|
||||
2.088812995,1783892163.648532152,SPI=0x10015000 Genesys2 PMOD JC
|
||||
2.089019602,1783892163.648738861,SPI pins: CS=JC1 MOSI=JC2 MISO=JC3 SCK=JC4
|
||||
2.089372827,1783892163.649092197,INT1/JC9 is not used; samples are read by polling INT_STATUS.
|
||||
2.089473485,1783892163.649192810,WHO_AM_I=0x47 ICM-42688-P
|
||||
2.203733099,1783892163.763453007,CFG PWR=0f GYRO=ef ACCEL=6f FILT=77 G1=da A1=15
|
||||
2.204003525,1783892163.763722658,POLL INT_SOURCE0=00 (expected 00: INT1 disabled)
|
||||
2.204429779,1783892163.764149189,Keep the board motionless for calibration; starting in 3 seconds.
|
||||
5.209543916,1783892166.769263506,Calibration 1/3: collecting 2500 samples (5 s)...
|
||||
10.469417893,1783892172.029138327,"cal raw mean A=-195,-85,16962 G=-3,-888,1003 norm=16963"
|
||||
10.469631760,1783892172.029351234,"cal raw sigma A=4,8,102 G=18,28,27: PASS"
|
||||
10.469822997,1783892172.029542446,"cal bias raw A=-7,-3,579 G=-3,-888,1003"
|
||||
10.470121043,1783892172.029840469,"Starting 300 s capture: 500 Hz SPI polling, UART every 500 ms."
|
||||
10.470419769,1783892172.030139208,Each line is the average of samples read in that 500 ms window.
|
||||
10.986057394,1783892172.545777082,00.500 s | samples=249 total= 249 | Temp=26.541 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.001 Z=-0.005
|
||||
11.485435652,1783892173.045155287,01.000 s | samples=243 total= 492 | Temp=26.536 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.001 Z=-0.004
|
||||
11.985164943,1783892173.544884443,01.500 s | samples=243 total= 735 | Temp=26.527 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.008 Y=-0.007 Z=-0.002
|
||||
12.485732604,1783892174.045452356,02.000 s | samples=243 total= 978 | Temp=26.534 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y= 0.003 Z=-0.000
|
||||
12.985398918,1783892174.545118809,02.500 s | samples=243 total= 1221 | Temp=26.528 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y= 0.000 Z= 0.000
|
||||
13.485843126,1783892175.045563221,03.000 s | samples=242 total= 1463 | Temp=26.524 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.003 Z=-0.004
|
||||
13.985516376,1783892175.545236111,03.500 s | samples=243 total= 1706 | Temp=26.529 C | Accel[g] X=-0.012 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.003 Z=-0.001
|
||||
14.485164894,1783892176.044884682,04.000 s | samples=243 total= 1949 | Temp=26.529 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.001 Z=-0.003
|
||||
14.985911948,1783892176.545631647,04.500 s | samples=243 total= 2192 | Temp=26.525 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.006 Y=-0.001 Z=-0.002
|
||||
15.485229757,1783892177.044949770,05.000 s | samples=243 total= 2435 | Temp=26.526 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.002 Z=-0.002
|
||||
15.986051938,1783892177.545771837,05.500 s | samples=243 total= 2678 | Temp=26.524 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.006 Z= 0.000
|
||||
16.485364277,1783892178.045084476,06.000 s | samples=243 total= 2921 | Temp=26.529 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.006 Y=-0.002 Z=-0.007
|
||||
16.985817890,1783892178.545537472,06.500 s | samples=242 total= 3163 | Temp=26.533 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y=-0.001 Z=-0.002
|
||||
17.485705937,1783892179.045425653,07.000 s | samples=242 total= 3405 | Temp=26.530 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.001 Z=-0.006
|
||||
17.985580108,1783892179.545300007,07.500 s | samples=243 total= 3648 | Temp=26.528 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y= 0.001 Z= 0.001
|
||||
18.485235418,1783892180.044955254,08.000 s | samples=243 total= 3891 | Temp=26.529 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.000 Z= 0.001
|
||||
18.985828968,1783892180.545548439,08.500 s | samples=243 total= 4134 | Temp=26.524 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.006 Y= 0.001 Z=-0.001
|
||||
19.485714772,1783892181.045434952,09.000 s | samples=243 total= 4377 | Temp=26.535 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.003 Z=-0.005
|
||||
19.985142291,1783892181.544862032,09.500 s | samples=243 total= 4620 | Temp=26.534 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.001 Z= 0.001
|
||||
20.485861216,1783892182.045581102,10.000 s | samples=243 total= 4863 | Temp=26.522 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.001
|
||||
20.985958708,1783892182.545678616,10.500 s | samples=242 total= 5105 | Temp=26.525 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y= 0.001 Z= 0.001
|
||||
21.486179574,1783892183.045899153,11.000 s | samples=243 total= 5348 | Temp=26.529 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.000 Z=-0.005
|
||||
21.985832172,1783892183.545551777,11.500 s | samples=243 total= 5591 | Temp=26.536 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.008 Z=-0.005
|
||||
22.485260846,1783892184.044980526,12.000 s | samples=243 total= 5834 | Temp=26.538 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y= 0.005 Z=-0.002
|
||||
22.985675369,1783892184.545395136,12.500 s | samples=243 total= 6077 | Temp=26.541 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y= 0.001 Z=-0.000
|
||||
23.485684493,1783892185.045403957,13.000 s | samples=243 total= 6320 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.000 Z=-0.003
|
||||
23.985841064,1783892185.545560837,13.500 s | samples=243 total= 6563 | Temp=26.534 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z=-0.001
|
||||
24.485191309,1783892186.044911146,14.000 s | samples=242 total= 6805 | Temp=26.539 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y=-0.001 Z= 0.000
|
||||
24.985730840,1783892186.545450449,14.500 s | samples=242 total= 7047 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.002 Z= 0.002
|
||||
25.485831643,1783892187.045551538,15.000 s | samples=243 total= 7290 | Temp=26.533 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y=-0.004 Z=-0.002
|
||||
25.985088337,1783892187.544808149,15.500 s | samples=243 total= 7533 | Temp=26.541 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y=-0.002 Z=-0.001
|
||||
26.485015090,1783892188.044734478,16.000 s | samples=243 total= 7776 | Temp=26.530 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.006 Y= 0.001 Z=-0.004
|
||||
26.985872707,1783892188.545592546,16.500 s | samples=243 total= 8019 | Temp=26.537 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.001 Z=-0.001
|
||||
27.485782440,1783892189.045502424,17.000 s | samples=243 total= 8262 | Temp=26.527 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.002 Z= 0.002
|
||||
27.986069667,1783892189.545789480,17.500 s | samples=243 total= 8505 | Temp=26.530 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z=-0.003
|
||||
28.485837978,1783892190.045557737,18.000 s | samples=242 total= 8747 | Temp=26.537 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.001 Z= 0.003
|
||||
28.986088315,1783892190.545808077,18.500 s | samples=243 total= 8990 | Temp=26.528 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.000 Z=-0.001
|
||||
29.485630813,1783892191.045350313,19.000 s | samples=243 total= 9233 | Temp=26.532 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.003 Z=-0.003
|
||||
29.985159197,1783892191.544878483,19.500 s | samples=243 total= 9476 | Temp=26.537 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.000 Z=-0.004
|
||||
30.486685104,1783892192.046404839,20.000 s | samples=243 total= 9719 | Temp=26.536 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y= 0.001 Z= 0.001
|
||||
30.985809413,1783892192.545529127,20.500 s | samples=243 total= 9962 | Temp=26.538 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.002 Z=-0.000
|
||||
31.485820688,1783892193.045540571,21.000 s | samples=243 total=10205 | Temp=26.535 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.003
|
||||
31.985183717,1783892193.544903517,21.500 s | samples=242 total=10447 | Temp=26.537 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.005 Z= 0.001
|
||||
32.485479386,1783892194.045199156,22.000 s | samples=243 total=10690 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.004 Z=-0.001
|
||||
32.985774904,1783892194.545494556,22.500 s | samples=243 total=10933 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.004 Z= 0.000
|
||||
33.485135616,1783892195.044855356,23.000 s | samples=243 total=11176 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.004 Z= 0.002
|
||||
33.985860385,1783892195.545580387,23.500 s | samples=243 total=11419 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.005 Z=-0.002
|
||||
34.485698898,1783892196.045418978,24.000 s | samples=243 total=11662 | Temp=26.541 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.001 Z=-0.003
|
||||
34.985649329,1783892196.545369148,24.500 s | samples=243 total=11905 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.000
|
||||
35.486158169,1783892197.045877934,25.000 s | samples=243 total=12148 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.005 Y=-0.003 Z=-0.004
|
||||
35.985791920,1783892197.545511961,25.500 s | samples=242 total=12390 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y= 0.002 Z=-0.001
|
||||
36.486191854,1783892198.045911789,26.000 s | samples=243 total=12633 | Temp=26.538 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.002 Z= 0.000
|
||||
36.985598623,1783892198.545318127,26.500 s | samples=243 total=12876 | Temp=26.543 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.001 Z=-0.000
|
||||
37.485783287,1783892199.045502901,27.000 s | samples=243 total=13119 | Temp=26.541 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.002 Z=-0.001
|
||||
37.985577393,1783892199.545297146,27.500 s | samples=243 total=13362 | Temp=26.543 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y= 0.000 Z=-0.003
|
||||
38.485975651,1783892200.045696259,28.000 s | samples=243 total=13605 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y= 0.001 Z=-0.001
|
||||
38.985825838,1783892200.545545816,28.500 s | samples=243 total=13848 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.006 Z=-0.000
|
||||
39.485604552,1783892201.045324326,29.000 s | samples=242 total=14090 | Temp=26.552 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.002 Z=-0.007
|
||||
39.986008036,1783892201.545727730,29.500 s | samples=242 total=14332 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.002 Z=-0.005
|
||||
40.485551219,1783892202.045270681,30.000 s | samples=243 total=14575 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.005 Y=-0.001 Z=-0.002
|
||||
40.985111429,1783892202.544830799,30.500 s | samples=243 total=14818 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y= 0.000 Z=-0.001
|
||||
41.485936256,1783892203.045655966,31.000 s | samples=243 total=15061 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.005 Y= 0.001 Z=-0.006
|
||||
41.985704167,1783892203.545423985,31.500 s | samples=243 total=15304 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.001 Z=-0.004
|
||||
42.484937813,1783892204.044657469,32.000 s | samples=243 total=15547 | Temp=26.543 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.002 Z=-0.000
|
||||
42.985679623,1783892204.545398951,32.500 s | samples=243 total=15790 | Temp=26.541 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.000 Z= 0.003
|
||||
43.484973300,1783892205.044693232,33.000 s | samples=242 total=16032 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.000 Z= 0.002
|
||||
43.985348159,1783892205.545067787,33.500 s | samples=243 total=16275 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.002 Z=-0.004
|
||||
44.485664695,1783892206.045384407,34.000 s | samples=243 total=16518 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.003 Z=-0.000
|
||||
44.985655605,1783892206.545375347,34.500 s | samples=243 total=16761 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.000 Z=-0.001
|
||||
45.485831422,1783892207.045551300,35.000 s | samples=243 total=17004 | Temp=26.541 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y=-0.002 Z= 0.000
|
||||
45.985496820,1783892207.545216560,35.500 s | samples=243 total=17247 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.002
|
||||
46.486516497,1783892208.046236277,36.000 s | samples=243 total=17490 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y= 0.002 Z= 0.002
|
||||
46.985837790,1783892208.545557499,36.500 s | samples=242 total=17732 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.001 Z=-0.001
|
||||
47.485652148,1783892209.045372009,37.000 s | samples=243 total=17975 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.004 Z=-0.001
|
||||
47.986673063,1783892209.546392918,37.500 s | samples=243 total=18218 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.002 Z=-0.001
|
||||
48.486043902,1783892210.045763731,38.000 s | samples=243 total=18461 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y= 0.002 Z= 0.003
|
||||
48.985645991,1783892210.545365810,38.500 s | samples=243 total=18704 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.003 Z= 0.002
|
||||
49.486669240,1783892211.046389103,39.000 s | samples=243 total=18947 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y= 0.000 Z=-0.001
|
||||
49.986028585,1783892211.545748711,39.500 s | samples=243 total=19190 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y= 0.002 Z=-0.000
|
||||
50.485877675,1783892212.045597553,40.000 s | samples=243 total=19433 | Temp=26.552 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.001 Z= 0.000
|
||||
50.985525007,1783892212.545244694,40.500 s | samples=242 total=19675 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.000 Z= 0.000
|
||||
51.486651983,1783892213.046371698,41.000 s | samples=243 total=19918 | Temp=26.537 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.001 Z=-0.001
|
||||
51.986467491,1783892213.546187162,41.500 s | samples=243 total=20161 | Temp=26.547 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.005 Z=-0.001
|
||||
52.485929842,1783892214.045650005,42.000 s | samples=243 total=20404 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.000 Z=-0.000
|
||||
52.986698840,1783892214.546418190,42.500 s | samples=243 total=20647 | Temp=26.541 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.003 Z=-0.000
|
||||
53.486512971,1783892215.046232939,43.000 s | samples=243 total=20890 | Temp=26.538 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.003 Z= 0.001
|
||||
53.985864640,1783892215.545584440,43.500 s | samples=243 total=21133 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.000 Z= 0.001
|
||||
54.486058082,1783892216.045778036,44.000 s | samples=242 total=21375 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y= 0.003 Z=-0.001
|
||||
54.986396701,1783892216.546116114,44.500 s | samples=243 total=21618 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.004 Z=-0.001
|
||||
55.485896880,1783892217.045616627,45.000 s | samples=243 total=21861 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.005 Z=-0.005
|
||||
55.985740577,1783892217.545460224,45.500 s | samples=243 total=22104 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.003 Z= 0.000
|
||||
56.487594131,1783892218.047313929,46.000 s | samples=243 total=22347 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.000 Z= 0.004
|
||||
56.985813703,1783892218.545533419,46.500 s | samples=243 total=22590 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.001 Z= 0.004
|
||||
57.485449299,1783892219.045169115,47.000 s | samples=243 total=22833 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.000 Z=-0.002
|
||||
57.986310012,1783892219.546030045,47.500 s | samples=243 total=23076 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.007 Y= 0.003 Z=-0.001
|
||||
58.486425989,1783892220.046145678,48.000 s | samples=242 total=23318 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y=-0.003 Z= 0.000
|
||||
58.985840636,1783892220.545560122,48.500 s | samples=243 total=23561 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.007 Y= 0.005 Z= 0.005
|
||||
59.486277983,1783892221.045997620,49.000 s | samples=243 total=23804 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y= 0.002 Z=-0.000
|
||||
59.986654894,1783892221.546374559,49.500 s | samples=243 total=24047 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.000 Z=-0.005
|
||||
60.485862905,1783892222.045582771,50.000 s | samples=243 total=24290 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.001 Z= 0.003
|
||||
60.985504683,1783892222.545224428,50.500 s | samples=243 total=24533 | Temp=26.552 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.001 Z=-0.000
|
||||
61.486271581,1783892223.045991182,51.000 s | samples=243 total=24776 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y= 0.001 Z= 0.001
|
||||
61.985884662,1783892223.545604467,51.500 s | samples=242 total=25018 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y= 0.002 Z=-0.002
|
||||
62.486619635,1783892224.046339273,52.000 s | samples=243 total=25261 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.000 Z=-0.001
|
||||
62.986228766,1783892224.545948267,52.500 s | samples=243 total=25504 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.002 Z=-0.000
|
||||
63.485862633,1783892225.045582056,53.000 s | samples=243 total=25747 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.000 Z= 0.001
|
||||
63.986257342,1783892225.545976877,53.500 s | samples=243 total=25990 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.007 Y=-0.001 Z= 0.005
|
||||
64.485732773,1783892226.045452595,54.000 s | samples=243 total=26233 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.003 Z= 0.005
|
||||
64.985954549,1783892226.545674324,54.500 s | samples=243 total=26476 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y= 0.001 Z= 0.005
|
||||
65.486247179,1783892227.045967340,55.000 s | samples=243 total=26719 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.000 Z=-0.001
|
||||
65.985974275,1783892227.545693874,55.500 s | samples=242 total=26961 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.003 Z= 0.001
|
||||
66.485857560,1783892228.045577049,56.000 s | samples=243 total=27204 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.007 Y=-0.001 Z=-0.001
|
||||
66.986460556,1783892228.546180010,56.500 s | samples=243 total=27447 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z= 0.002
|
||||
67.485719318,1783892229.045439005,57.000 s | samples=243 total=27690 | Temp=26.541 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.000 Z= 0.002
|
||||
67.985862730,1783892229.545582294,57.500 s | samples=243 total=27933 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.001 Z= 0.001
|
||||
68.486281736,1783892230.046001434,58.000 s | samples=243 total=28176 | Temp=26.535 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y= 0.003 Z=-0.004
|
||||
68.986207606,1783892230.545927525,58.500 s | samples=243 total=28419 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.002 Z= 0.004
|
||||
69.485857292,1783892231.045577288,59.000 s | samples=242 total=28661 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y= 0.003 Z=-0.000
|
||||
69.986322210,1783892231.546042442,59.500 s | samples=243 total=28904 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.007 Y= 0.002 Z= 0.001
|
||||
70.486347313,1783892232.046067238,60.000 s | samples=243 total=29147 | Temp=26.547 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z= 0.002
|
||||
70.985855320,1783892232.545575142,60.500 s | samples=243 total=29390 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.002
|
||||
71.486314782,1783892233.046034336,61.000 s | samples=243 total=29633 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y= 0.000 Z= 0.001
|
||||
71.986304711,1783892233.546024561,61.500 s | samples=243 total=29876 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y= 0.003 Z= 0.004
|
||||
72.485896359,1783892234.045616150,62.000 s | samples=243 total=30119 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y=-0.003 Z= 0.001
|
||||
72.986149071,1783892234.545868874,62.500 s | samples=243 total=30362 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.002 Z= 0.000
|
||||
73.486621990,1783892235.046341658,63.000 s | samples=242 total=30604 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.000 Z=-0.002
|
||||
73.985898352,1783892235.545618534,63.500 s | samples=243 total=30847 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.002
|
||||
74.485309289,1783892236.045029163,64.000 s | samples=243 total=31090 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.002 Z= 0.002
|
||||
74.986303319,1783892236.546022892,64.500 s | samples=243 total=31333 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.000 Z=-0.000
|
||||
75.486293976,1783892237.046013594,65.000 s | samples=243 total=31576 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.002 Z= 0.001
|
||||
75.985564944,1783892237.545284271,65.500 s | samples=243 total=31819 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y= 0.000 Z=-0.004
|
||||
76.485813614,1783892238.045533180,66.000 s | samples=243 total=32062 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.000 Z=-0.004
|
||||
76.986132475,1783892238.545852184,66.500 s | samples=242 total=32304 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z=-0.008
|
||||
77.485835530,1783892239.045555353,67.000 s | samples=243 total=32547 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.002 Z=-0.001
|
||||
77.985791601,1783892239.545511484,67.500 s | samples=243 total=32790 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.008 Y=-0.001 Z=-0.001
|
||||
78.486401361,1783892240.046120882,68.000 s | samples=243 total=33033 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y= 0.001 Z=-0.004
|
||||
78.985649306,1783892240.545368910,68.500 s | samples=243 total=33276 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.006 Y= 0.001 Z=-0.001
|
||||
79.485602237,1783892241.045321941,69.000 s | samples=243 total=33519 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y= 0.003 Z= 0.000
|
||||
79.986238657,1783892241.545958042,69.500 s | samples=243 total=33762 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.000 Z=-0.001
|
||||
80.486127274,1783892242.045846939,70.000 s | samples=243 total=34005 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.005 Z=-0.005
|
||||
80.985610727,1783892242.545330286,70.500 s | samples=242 total=34247 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y= 0.000 Z= 0.003
|
||||
81.486616363,1783892243.046335697,71.000 s | samples=243 total=34490 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.002 Z=-0.003
|
||||
81.986160169,1783892243.545879841,71.500 s | samples=243 total=34733 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y= 0.003 Z= 0.005
|
||||
82.486326818,1783892244.046046257,72.000 s | samples=243 total=34976 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.004 Z=-0.000
|
||||
82.985667722,1783892244.545387030,72.500 s | samples=243 total=35219 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y= 0.001 Z=-0.003
|
||||
83.486287741,1783892245.046007156,73.000 s | samples=243 total=35462 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.003 Z= 0.002
|
||||
83.986268487,1783892245.545988321,73.500 s | samples=243 total=35705 | Temp=26.547 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.001 Z=-0.002
|
||||
84.485598532,1783892246.045318365,74.000 s | samples=242 total=35947 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.001 Z= 0.002
|
||||
84.986077564,1783892246.545797110,74.500 s | samples=243 total=36190 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y= 0.002 Z=-0.003
|
||||
85.486361593,1783892247.046081781,75.000 s | samples=243 total=36433 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.000 Z=-0.006
|
||||
85.985679948,1783892247.545399904,75.500 s | samples=243 total=36676 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.003 Z=-0.002
|
||||
86.485914504,1783892248.045634031,76.000 s | samples=243 total=36919 | Temp=26.538 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y= 0.001 Z= 0.001
|
||||
86.986048123,1783892248.545768261,76.500 s | samples=243 total=37162 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y=-0.002 Z=-0.005
|
||||
87.485574298,1783892249.045294046,77.000 s | samples=243 total=37405 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.001 Z=-0.002
|
||||
87.985535919,1783892249.545255661,77.500 s | samples=243 total=37648 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.000 Z= 0.002
|
||||
88.486395094,1783892250.046114922,78.000 s | samples=242 total=37890 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.000 Z=-0.002
|
||||
88.985763940,1783892250.545483828,78.500 s | samples=243 total=38133 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.004 Z= 0.001
|
||||
89.485637900,1783892251.045357466,79.000 s | samples=243 total=38376 | Temp=26.547 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.001 Z=-0.001
|
||||
89.986368078,1783892251.546087980,79.500 s | samples=243 total=38619 | Temp=26.538 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y= 0.001 Z=-0.003
|
||||
90.486457019,1783892252.046176672,80.000 s | samples=243 total=38862 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.000 Z= 0.001
|
||||
90.986718077,1783892252.546438456,80.500 s | samples=243 total=39105 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.002 Z=-0.004
|
||||
91.486053643,1783892253.045773029,81.000 s | samples=243 total=39348 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.003 Z=-0.000
|
||||
91.986047098,1783892253.545766830,81.500 s | samples=242 total=39590 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.003 Z=-0.002
|
||||
92.485910909,1783892254.045630693,82.000 s | samples=243 total=39833 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.004
|
||||
92.986320826,1783892254.546040773,82.500 s | samples=243 total=40076 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.001 Z=-0.003
|
||||
93.486079621,1783892255.045799494,83.000 s | samples=243 total=40319 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y= 0.000 Z=-0.000
|
||||
93.985492302,1783892255.545211792,83.500 s | samples=243 total=40562 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y= 0.003 Z=-0.001
|
||||
94.485994475,1783892256.045714140,84.000 s | samples=243 total=40805 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.003 Z=-0.002
|
||||
94.986005800,1783892256.545725584,84.500 s | samples=243 total=41048 | Temp=26.547 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.003 Z= 0.000
|
||||
95.486609825,1783892257.046329498,85.000 s | samples=243 total=41291 | Temp=26.539 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.002 Z=-0.000
|
||||
95.986206945,1783892257.545926332,85.500 s | samples=242 total=41533 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.000 Z= 0.005
|
||||
96.486047133,1783892258.045766592,86.000 s | samples=243 total=41776 | Temp=26.539 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.009 Y= 0.000 Z= 0.003
|
||||
96.986051943,1783892258.545771837,86.500 s | samples=243 total=42019 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.001 Z=-0.001
|
||||
97.485690057,1783892259.045410156,87.000 s | samples=243 total=42262 | Temp=26.543 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y= 0.001 Z=-0.002
|
||||
97.986141133,1783892259.545860767,87.500 s | samples=243 total=42505 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y= 0.002 Z= 0.000
|
||||
98.486021876,1783892260.045741558,88.000 s | samples=243 total=42748 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.001 Z= 0.001
|
||||
98.986418602,1783892260.546138048,88.500 s | samples=243 total=42991 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.003 Z=-0.000
|
||||
99.486063226,1783892261.045782566,89.000 s | samples=242 total=43233 | Temp=26.547 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.007 Y= 0.002 Z=-0.000
|
||||
99.986917532,1783892261.546637297,89.500 s | samples=243 total=43476 | Temp=26.543 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y= 0.002 Z= 0.004
|
||||
100.486585122,1783892262.046304941,90.000 s | samples=243 total=43719 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.004 Z= 0.005
|
||||
100.985999120,1783892262.545718670,90.500 s | samples=243 total=43962 | Temp=26.552 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.005 Y= 0.001 Z=-0.002
|
||||
101.485442670,1783892263.045162439,91.000 s | samples=243 total=44205 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.004 Z=-0.002
|
||||
101.986030433,1783892263.545750380,91.500 s | samples=243 total=44448 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y= 0.001 Z= 0.001
|
||||
102.485945534,1783892264.045665264,92.000 s | samples=243 total=44691 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.001 Z= 0.005
|
||||
102.986132479,1783892264.545852423,92.500 s | samples=243 total=44934 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.004 Z= 0.001
|
||||
103.486023358,1783892265.045742989,93.000 s | samples=242 total=45176 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.003 Z= 0.001
|
||||
103.986389193,1783892265.546108961,93.500 s | samples=243 total=45419 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.001 Z=-0.001
|
||||
104.485760267,1783892266.045480490,94.000 s | samples=243 total=45662 | Temp=26.543 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y= 0.003 Z=-0.002
|
||||
104.985943473,1783892266.545663118,94.500 s | samples=243 total=45905 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y= 0.005 Z=-0.001
|
||||
105.486026326,1783892267.045745611,95.000 s | samples=243 total=46148 | Temp=26.547 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y=-0.003 Z=-0.002
|
||||
105.986368468,1783892267.546088219,95.500 s | samples=243 total=46391 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.002 Z=-0.006
|
||||
106.486018202,1783892268.045737743,96.000 s | samples=243 total=46634 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.006 Z= 0.003
|
||||
106.986172464,1783892268.545891762,96.500 s | samples=242 total=46876 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y=-0.007 Z=-0.005
|
||||
107.486129857,1783892269.045849562,97.000 s | samples=243 total=47119 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.003 Z= 0.000
|
||||
107.985953929,1783892269.545673847,97.500 s | samples=243 total=47362 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.001 Z= 0.004
|
||||
108.486355569,1783892270.046075344,98.000 s | samples=243 total=47605 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.002
|
||||
108.985809628,1783892270.545529366,98.500 s | samples=243 total=47848 | Temp=26.537 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y= 0.001 Z=-0.003
|
||||
109.485833924,1783892271.045553684,99.000 s | samples=243 total=48091 | Temp=26.546 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.006 Y= 0.001 Z= 0.003
|
||||
109.985865893,1783892271.545585871,99.500 s | samples=243 total=48334 | Temp=26.536 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y= 0.002 Z= 0.001
|
||||
110.486305155,1783892272.046025038,100.000 s | samples=243 total=48577 | Temp=26.538 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.002 Z= 0.000
|
||||
110.985819492,1783892272.545539379,100.500 s | samples=242 total=48819 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y= 0.000 Z=-0.000
|
||||
111.486824206,1783892273.046543598,101.000 s | samples=243 total=49062 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.002 Z= 0.003
|
||||
111.985840142,1783892273.545559645,101.500 s | samples=243 total=49305 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.003 Z=-0.004
|
||||
112.486231301,1783892274.045950651,102.000 s | samples=243 total=49548 | Temp=26.538 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.001 Z= 0.004
|
||||
112.986419061,1783892274.546139240,102.500 s | samples=243 total=49791 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.001 Z= 0.002
|
||||
113.486809904,1783892275.046529531,103.000 s | samples=243 total=50034 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.001 Z=-0.001
|
||||
113.986250220,1783892275.545970201,103.500 s | samples=243 total=50277 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y= 0.001 Z=-0.000
|
||||
114.486203809,1783892276.045923233,104.000 s | samples=242 total=50519 | Temp=26.542 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z= 0.000
|
||||
114.986922796,1783892276.546642542,104.500 s | samples=243 total=50762 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.001 Z=-0.001
|
||||
115.486991556,1783892277.046710968,105.000 s | samples=243 total=51005 | Temp=26.532 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.005 Z=-0.003
|
||||
115.986395769,1783892277.546115637,105.500 s | samples=243 total=51248 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.003 Z= 0.001
|
||||
116.487054734,1783892278.046774387,106.000 s | samples=243 total=51491 | Temp=26.537 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.002 Z=-0.001
|
||||
116.986780323,1783892278.546500444,106.500 s | samples=243 total=51734 | Temp=26.538 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.004 Z=-0.000
|
||||
117.486424399,1783892279.046144247,107.000 s | samples=243 total=51977 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.005 Z=-0.003
|
||||
117.986756791,1783892279.546476603,107.500 s | samples=242 total=52219 | Temp=26.545 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.004 Z=-0.004
|
||||
118.486244941,1783892280.045964718,108.000 s | samples=242 total=52461 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y= 0.000 Z=-0.002
|
||||
118.986271448,1783892280.545991182,108.500 s | samples=243 total=52704 | Temp=26.552 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.004 Z=-0.001
|
||||
119.485769823,1783892281.045489550,109.000 s | samples=243 total=52947 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y= 0.000 Z= 0.000
|
||||
119.986983917,1783892281.546703577,109.500 s | samples=243 total=53190 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y=-0.001 Z=-0.001
|
||||
120.486175548,1783892282.045895100,110.000 s | samples=243 total=53433 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.003 Z=-0.001
|
||||
120.985891848,1783892282.545611620,110.500 s | samples=243 total=53676 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.001 Z=-0.004
|
||||
121.486944548,1783892283.046664000,111.000 s | samples=243 total=53919 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.002 Z= 0.004
|
||||
121.986143919,1783892283.545863628,111.500 s | samples=242 total=54161 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.002 Z= 0.005
|
||||
122.486944596,1783892284.046664476,112.000 s | samples=243 total=54404 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.001 Z= 0.002
|
||||
122.986435118,1783892284.546154976,112.500 s | samples=243 total=54647 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y= 0.001 Z=-0.004
|
||||
123.486375627,1783892285.046095133,113.000 s | samples=243 total=54890 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.000 Z=-0.001
|
||||
123.986878444,1783892285.546598196,113.500 s | samples=243 total=55133 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y= 0.001 Z= 0.001
|
||||
124.486362177,1783892286.046081543,114.000 s | samples=243 total=55376 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.006 Y= 0.002 Z= 0.000
|
||||
124.986142693,1783892286.545862436,114.500 s | samples=243 total=55619 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.002 Z=-0.001
|
||||
125.486673060,1783892287.046392918,115.000 s | samples=242 total=55861 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y=-0.002 Z=-0.002
|
||||
125.986101719,1783892287.545821190,115.500 s | samples=242 total=56103 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.002 Z=-0.001
|
||||
126.486381055,1783892288.046100855,116.000 s | samples=243 total=56346 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.003 Z= 0.002
|
||||
126.986667295,1783892288.546386719,116.500 s | samples=243 total=56589 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.006 Z=-0.004
|
||||
127.486380535,1783892289.046099901,117.000 s | samples=243 total=56832 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.000 Z= 0.001
|
||||
127.986320428,1783892289.546039820,117.500 s | samples=243 total=57075 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.003 Z=-0.001
|
||||
128.486750574,1783892290.046469927,118.000 s | samples=243 total=57318 | Temp=26.548 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.001 Z= 0.003
|
||||
128.986756861,1783892290.546476364,118.500 s | samples=243 total=57561 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y= 0.005 Z= 0.000
|
||||
129.486326479,1783892291.046046019,119.000 s | samples=242 total=57803 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y= 0.002 Z=-0.007
|
||||
129.986754131,1783892291.546473742,119.500 s | samples=243 total=58046 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.007 Y= 0.003 Z=-0.002
|
||||
130.486282740,1783892292.046002150,120.000 s | samples=243 total=58289 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.003 Z=-0.004
|
||||
130.985639359,1783892292.545358896,120.500 s | samples=243 total=58532 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.007 Y=-0.001 Z=-0.000
|
||||
131.486675624,1783892293.046395302,121.000 s | samples=243 total=58775 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y= 0.000 Z= 0.004
|
||||
131.986058288,1783892293.545777559,121.500 s | samples=243 total=59018 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.006 Y= 0.000 Z= 0.002
|
||||
132.486252709,1783892294.045972109,122.000 s | samples=243 total=59261 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y=-0.001 Z= 0.003
|
||||
132.986733220,1783892294.546452761,122.500 s | samples=242 total=59503 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y= 0.002 Z= 0.001
|
||||
133.486739473,1783892295.046459198,123.000 s | samples=242 total=59745 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.001 Z= 0.002
|
||||
133.986071450,1783892295.545790911,123.500 s | samples=243 total=59988 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.007 Y=-0.001 Z= 0.005
|
||||
134.485625494,1783892296.045345068,124.000 s | samples=243 total=60231 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.006 Y=-0.001 Z=-0.003
|
||||
134.986735822,1783892296.546455622,124.500 s | samples=243 total=60474 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y= 0.002 Z= 0.002
|
||||
135.486005898,1783892297.045725346,125.000 s | samples=243 total=60717 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y= 0.001 Z=-0.003
|
||||
135.986229268,1783892297.545949221,125.500 s | samples=243 total=60960 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.007 Y=-0.000 Z= 0.000
|
||||
136.486610399,1783892298.046330214,126.000 s | samples=243 total=61203 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y=-0.002 Z=-0.004
|
||||
136.986148931,1783892298.545868874,126.500 s | samples=242 total=61445 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.006 Y=-0.004 Z=-0.001
|
||||
137.486038181,1783892299.045758009,127.000 s | samples=243 total=61688 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.008 Y= 0.001 Z= 0.001
|
||||
137.985601742,1783892299.545321465,127.500 s | samples=243 total=61931 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.011 Y=-0.001 Z= 0.001
|
||||
138.486753281,1783892300.046472788,128.000 s | samples=243 total=62174 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y=-0.001 Z= 0.004
|
||||
138.986033929,1783892300.545753241,128.500 s | samples=243 total=62417 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.009 Y=-0.002 Z=-0.004
|
||||
139.486014812,1783892301.045734644,129.000 s | samples=243 total=62660 | Temp=26.552 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.008 Y= 0.001 Z= 0.001
|
||||
139.986830900,1783892301.546550989,129.500 s | samples=243 total=62903 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z= 0.002
|
||||
140.486119810,1783892302.045839310,130.000 s | samples=242 total=63145 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.003 Z=-0.002
|
||||
140.986086257,1783892302.545805931,130.500 s | samples=242 total=63387 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y=-0.001 Z= 0.001
|
||||
141.486632905,1783892303.046352386,131.000 s | samples=243 total=63630 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.006 Y= 0.001 Z= 0.002
|
||||
141.986764033,1783892303.546483755,131.500 s | samples=243 total=63873 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.005 Z= 0.002
|
||||
142.485983380,1783892304.045703173,132.000 s | samples=243 total=64116 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y=-0.001 Z= 0.003
|
||||
142.985748864,1783892304.545468569,132.500 s | samples=243 total=64359 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.004 Z= 0.002
|
||||
143.486583768,1783892305.046303511,133.000 s | samples=243 total=64602 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.008 Z=-0.002
|
||||
143.986078219,1783892305.545797825,133.500 s | samples=243 total=64845 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.003 Z= 0.002
|
||||
144.485950142,1783892306.045669794,134.000 s | samples=242 total=65087 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.004 Z=-0.001
|
||||
144.986654600,1783892306.546374321,134.500 s | samples=243 total=65330 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.001
|
||||
145.486872429,1783892307.046591997,135.000 s | samples=243 total=65573 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.003 Z=-0.000
|
||||
145.985969928,1783892307.545689583,135.500 s | samples=243 total=65816 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.001 Z= 0.004
|
||||
146.486068978,1783892308.045788765,136.000 s | samples=243 total=66059 | Temp=26.540 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.001 Z=-0.002
|
||||
146.986742647,1783892308.546462297,136.500 s | samples=243 total=66302 | Temp=26.544 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z= 0.003
|
||||
147.486688659,1783892309.046408415,137.000 s | samples=243 total=66545 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.001 Z= 0.002
|
||||
147.986112782,1783892309.545832396,137.500 s | samples=242 total=66787 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.006 Z= 0.002
|
||||
148.486118096,1783892310.045837641,138.000 s | samples=242 total=67029 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y= 0.002 Z=-0.001
|
||||
148.986588982,1783892310.546308279,138.500 s | samples=243 total=67272 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z=-0.000
|
||||
149.486894164,1783892311.046613932,139.000 s | samples=243 total=67515 | Temp=26.552 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.000 Z= 0.004
|
||||
149.986077516,1783892311.545797348,139.500 s | samples=243 total=67758 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.003 Z= 0.003
|
||||
150.486834261,1783892312.046553850,140.000 s | samples=243 total=68001 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.001 Z=-0.004
|
||||
150.986120949,1783892312.545840740,140.500 s | samples=243 total=68244 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.002 Z= 0.001
|
||||
151.486785004,1783892313.046504498,141.000 s | samples=243 total=68487 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y= 0.000 Z=-0.002
|
||||
151.986908766,1783892313.546628714,141.500 s | samples=242 total=68729 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y=-0.004 Z= 0.002
|
||||
152.487083357,1783892314.046803236,142.000 s | samples=243 total=68972 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.001
|
||||
152.986568689,1783892314.546288490,142.500 s | samples=243 total=69215 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.001 Z=-0.002
|
||||
153.486066921,1783892315.045786858,143.000 s | samples=243 total=69458 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.006 Y=-0.001 Z= 0.003
|
||||
153.986893991,1783892315.546613693,143.500 s | samples=243 total=69701 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.004 Z=-0.003
|
||||
154.486570407,1783892316.046289921,144.000 s | samples=243 total=69944 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.002 Z=-0.001
|
||||
154.986073228,1783892316.545792818,144.500 s | samples=243 total=70187 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.005 Z=-0.002
|
||||
155.486762629,1783892317.046482086,145.000 s | samples=242 total=70429 | Temp=26.552 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.002 Z=-0.001
|
||||
155.986550233,1783892317.546269655,145.500 s | samples=242 total=70671 | Temp=26.549 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.003 Z=-0.001
|
||||
156.485929521,1783892318.045648813,146.000 s | samples=243 total=70914 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.000 Z=-0.003
|
||||
156.987096421,1783892318.546816111,146.500 s | samples=243 total=71157 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.005 Z= 0.000
|
||||
157.486617017,1783892319.046336651,147.000 s | samples=243 total=71400 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.003 Z=-0.001
|
||||
157.986591901,1783892319.546311617,147.500 s | samples=243 total=71643 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.003 Z=-0.006
|
||||
158.485888946,1783892320.045608759,148.000 s | samples=243 total=71886 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.006 Z=-0.001
|
||||
158.986674620,1783892320.546394348,148.500 s | samples=243 total=72129 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.002 Z= 0.004
|
||||
159.486666694,1783892321.046386480,149.000 s | samples=242 total=72371 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.002 Z=-0.003
|
||||
159.987113637,1783892321.546833754,149.500 s | samples=243 total=72614 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y= 0.001 Z= 0.001
|
||||
160.486575178,1783892322.046294689,150.000 s | samples=243 total=72857 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y= 0.000 Z=-0.005
|
||||
160.986792810,1783892322.546512842,150.500 s | samples=243 total=73100 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.002
|
||||
161.486113081,1783892323.045832396,151.000 s | samples=243 total=73343 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y= 0.006 Z=-0.004
|
||||
161.986696246,1783892323.546416044,151.500 s | samples=243 total=73586 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y=-0.002 Z=-0.000
|
||||
162.486436370,1783892324.046156406,152.000 s | samples=243 total=73829 | Temp=26.552 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y= 0.000 Z=-0.001
|
||||
162.987002416,1783892324.546721697,152.500 s | samples=242 total=74071 | Temp=26.553 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.002 Z= 0.001
|
||||
163.486539912,1783892325.046259642,153.000 s | samples=242 total=74313 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.002 Z= 0.000
|
||||
163.987094217,1783892325.546814203,153.500 s | samples=243 total=74556 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.007 Y=-0.001 Z= 0.001
|
||||
164.486814601,1783892326.046534061,154.000 s | samples=243 total=74799 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.000 Z= 0.001
|
||||
164.986505927,1783892326.546226263,154.500 s | samples=243 total=75042 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.003 Z= 0.001
|
||||
165.486573011,1783892327.046292543,155.000 s | samples=243 total=75285 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y= 0.005 Z= 0.002
|
||||
165.986802974,1783892327.546522379,155.500 s | samples=243 total=75528 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.000 Z=-0.001
|
||||
166.486409008,1783892328.046128750,156.000 s | samples=243 total=75771 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.000 Z= 0.004
|
||||
166.986596498,1783892328.546315670,156.500 s | samples=242 total=76013 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y= 0.001 Z=-0.000
|
||||
167.487017790,1783892329.046737194,157.000 s | samples=243 total=76256 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y= 0.001 Z= 0.004
|
||||
167.986612607,1783892329.546331882,157.500 s | samples=243 total=76499 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y= 0.002 Z=-0.003
|
||||
168.486611145,1783892330.046330929,158.000 s | samples=243 total=76742 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.003 Z= 0.004
|
||||
168.985690660,1783892330.545410633,158.500 s | samples=243 total=76985 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.004 Z=-0.003
|
||||
169.486800638,1783892331.046519995,159.000 s | samples=243 total=77228 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.001 Z= 0.007
|
||||
169.986465345,1783892331.546185255,159.500 s | samples=243 total=77471 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.005
|
||||
170.485744320,1783892332.045464277,160.000 s | samples=242 total=77713 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.004 Z= 0.002
|
||||
170.986500312,1783892332.546220064,160.500 s | samples=242 total=77955 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y=-0.001 Z=-0.001
|
||||
171.487322549,1783892333.047042370,161.000 s | samples=243 total=78198 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.003 Z= 0.001
|
||||
171.985695408,1783892333.545415401,161.500 s | samples=243 total=78441 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.006 Z= 0.001
|
||||
172.486768565,1783892334.046488285,162.000 s | samples=243 total=78684 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.005 Z=-0.005
|
||||
172.986599028,1783892334.546318531,162.500 s | samples=243 total=78927 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.001 Z=-0.000
|
||||
173.486810979,1783892335.046530247,163.000 s | samples=243 total=79170 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.003 Z=-0.004
|
||||
173.986198338,1783892335.545917749,163.500 s | samples=243 total=79413 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.004 Z= 0.000
|
||||
174.486812737,1783892336.046532393,164.000 s | samples=242 total=79655 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y=-0.004 Z=-0.000
|
||||
174.986514764,1783892336.546234608,164.500 s | samples=243 total=79898 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.003 Z= 0.002
|
||||
175.486354409,1783892337.046074152,165.000 s | samples=243 total=80141 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y= 0.001 Z=-0.005
|
||||
175.986505890,1783892337.546225548,165.500 s | samples=243 total=80384 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.000 Z=-0.004
|
||||
176.486828905,1783892338.046548367,166.000 s | samples=243 total=80627 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y=-0.003 Z=-0.004
|
||||
176.986556148,1783892338.546275854,166.500 s | samples=243 total=80870 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y= 0.000 Z=-0.001
|
||||
177.487382938,1783892339.047102690,167.000 s | samples=243 total=81113 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.007 Y= 0.001 Z=-0.002
|
||||
177.986860124,1783892339.546580076,167.500 s | samples=242 total=81355 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y= 0.000 Z= 0.001
|
||||
178.486624062,1783892340.046344042,168.000 s | samples=242 total=81597 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.006 Y=-0.000 Z=-0.000
|
||||
178.987590849,1783892340.547311068,168.500 s | samples=243 total=81840 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.004 Z= 0.004
|
||||
179.486850718,1783892341.046570778,169.000 s | samples=243 total=82083 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y= 0.002 Z= 0.000
|
||||
179.986468028,1783892341.546187878,169.500 s | samples=243 total=82326 | Temp=26.574 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.003 Z=-0.005
|
||||
180.487633028,1783892342.047352791,170.000 s | samples=243 total=82569 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y= 0.001 Z=-0.001
|
||||
180.986892341,1783892342.546611786,170.500 s | samples=243 total=82812 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y= 0.001 Z= 0.005
|
||||
181.487319176,1783892343.047039032,171.000 s | samples=243 total=83055 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y=-0.002 Z= 0.002
|
||||
181.987539410,1783892343.547259092,171.500 s | samples=242 total=83297 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.003 Z= 0.002
|
||||
182.486814741,1783892344.046534300,172.000 s | samples=243 total=83540 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y= 0.003 Z= 0.001
|
||||
182.986386382,1783892344.546105862,172.500 s | samples=243 total=83783 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.002 Z= 0.004
|
||||
183.487149513,1783892345.046869040,173.000 s | samples=243 total=84026 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.001 Z=-0.001
|
||||
183.986820123,1783892345.546540022,173.500 s | samples=243 total=84269 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.002
|
||||
184.486876459,1783892346.046596527,174.000 s | samples=243 total=84512 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z= 0.001
|
||||
184.987334335,1783892346.547054529,174.500 s | samples=243 total=84755 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.000 Z=-0.004
|
||||
185.486915351,1783892347.046635151,175.000 s | samples=242 total=84997 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.007 Y= 0.001 Z= 0.005
|
||||
185.986826927,1783892347.546546698,175.500 s | samples=242 total=85239 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.009 Y=-0.004 Z=-0.002
|
||||
186.486126215,1783892348.045845985,176.000 s | samples=243 total=85482 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y=-0.002 Z= 0.003
|
||||
186.986665950,1783892348.546385765,176.500 s | samples=243 total=85725 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y= 0.004 Z= 0.000
|
||||
187.486556188,1783892349.046276093,177.000 s | samples=243 total=85968 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y= 0.002 Z= 0.002
|
||||
187.986218601,1783892349.545938492,177.500 s | samples=243 total=86211 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z=-0.003
|
||||
188.487420069,1783892350.047139645,178.000 s | samples=243 total=86454 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.004
|
||||
188.986777579,1783892350.546497345,178.500 s | samples=243 total=86697 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.003 Z= 0.001
|
||||
189.486156203,1783892351.045876026,179.000 s | samples=242 total=86939 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y= 0.001 Z= 0.000
|
||||
189.987321838,1783892351.547041178,179.500 s | samples=243 total=87182 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.004 Z=-0.001
|
||||
190.486796386,1783892352.046515942,180.000 s | samples=243 total=87425 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.000 Z=-0.000
|
||||
190.987291386,1783892352.547011137,180.500 s | samples=243 total=87668 | Temp=26.574 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.001 Z= 0.002
|
||||
191.486745681,1783892353.046465635,181.000 s | samples=243 total=87911 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.003 Z=-0.004
|
||||
191.986766197,1783892353.546485901,181.500 s | samples=243 total=88154 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.002 Z=-0.001
|
||||
192.487132681,1783892354.046852112,182.000 s | samples=243 total=88397 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.000 Z= 0.000
|
||||
192.986611407,1783892354.546331406,182.500 s | samples=242 total=88639 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y= 0.001 Z= 0.000
|
||||
193.486061897,1783892355.045781136,183.000 s | samples=242 total=88881 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y= 0.003 Z=-0.000
|
||||
193.987235905,1783892355.546955585,183.500 s | samples=243 total=89124 | Temp=26.550 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.003 Z=-0.003
|
||||
194.486824333,1783892356.046543837,184.000 s | samples=243 total=89367 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.003 Z=-0.002
|
||||
194.986115347,1783892356.545834780,184.500 s | samples=243 total=89610 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y=-0.001 Z=-0.000
|
||||
195.487327076,1783892357.047046423,185.000 s | samples=243 total=89853 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y=-0.003 Z= 0.002
|
||||
195.986705083,1783892357.546424866,185.500 s | samples=243 total=90096 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.002 Z=-0.004
|
||||
196.486936253,1783892358.046655893,186.000 s | samples=243 total=90339 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.005 Z=-0.005
|
||||
196.987203780,1783892358.546923637,186.500 s | samples=242 total=90581 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.007 Y= 0.004 Z=-0.001
|
||||
197.486591083,1783892359.046310663,187.000 s | samples=243 total=90824 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.003 Z=-0.004
|
||||
197.986072796,1783892359.545792580,187.500 s | samples=243 total=91067 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.001 Z= 0.005
|
||||
198.487033640,1783892360.046752930,188.000 s | samples=243 total=91310 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.001 Z= 0.004
|
||||
198.986594390,1783892360.546314240,188.500 s | samples=243 total=91553 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.000 Z=-0.002
|
||||
199.487011471,1783892361.046731234,189.000 s | samples=243 total=91796 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.000 Z=-0.004
|
||||
199.986577433,1783892361.546297312,189.500 s | samples=243 total=92039 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.004 Z=-0.004
|
||||
200.486558479,1783892362.046278477,190.000 s | samples=242 total=92281 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.003 Z=-0.003
|
||||
200.987231340,1783892362.546950817,190.500 s | samples=242 total=92523 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.001 Z=-0.002
|
||||
201.487229595,1783892363.046949148,191.000 s | samples=243 total=92766 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y=-0.000 Z= 0.001
|
||||
201.986514616,1783892363.546234608,191.500 s | samples=243 total=93009 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.003 Z= 0.002
|
||||
202.487022565,1783892364.046742439,192.000 s | samples=243 total=93252 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y= 0.001 Z=-0.004
|
||||
202.987035122,1783892364.546754837,192.500 s | samples=243 total=93495 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y= 0.001 Z= 0.002
|
||||
203.486484473,1783892365.046203852,193.000 s | samples=243 total=93738 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y= 0.003 Z=-0.005
|
||||
203.986489230,1783892365.546208858,193.500 s | samples=243 total=93981 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y= 0.004 Z=-0.000
|
||||
204.487455095,1783892366.047174931,194.000 s | samples=242 total=94223 | Temp=26.574 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.004 Z= 0.005
|
||||
204.986713054,1783892366.546432734,194.500 s | samples=243 total=94466 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y= 0.002 Z=-0.001
|
||||
205.486275453,1783892367.045995235,195.000 s | samples=243 total=94709 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.007 Z= 0.000
|
||||
205.987349833,1783892367.547069788,195.500 s | samples=243 total=94952 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y= 0.002 Z= 0.002
|
||||
206.486635723,1783892368.046355247,196.000 s | samples=243 total=95195 | Temp=26.575 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y= 0.001 Z=-0.000
|
||||
206.986944287,1783892368.546664238,196.500 s | samples=243 total=95438 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.000 Z=-0.001
|
||||
207.486969433,1783892369.046689272,197.000 s | samples=243 total=95681 | Temp=26.575 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.004 Z= 0.001
|
||||
207.986616616,1783892369.546336174,197.500 s | samples=242 total=95923 | Temp=26.583 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.003 Z=-0.004
|
||||
208.485919818,1783892370.045639515,198.000 s | samples=242 total=96165 | Temp=26.582 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y= 0.001 Z=-0.000
|
||||
208.986948260,1783892370.546667814,198.500 s | samples=243 total=96408 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.001 Z= 0.001
|
||||
209.486385361,1783892371.046104908,199.000 s | samples=243 total=96651 | Temp=26.574 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.002 Z=-0.004
|
||||
209.989822129,1783892371.549541950,199.500 s | samples=243 total=96894 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.004 Z= 0.003
|
||||
210.486651398,1783892372.046370983,200.000 s | samples=243 total=97137 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z=-0.003
|
||||
210.986707192,1783892372.546427250,200.500 s | samples=243 total=97380 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.002 Z= 0.000
|
||||
211.487125642,1783892373.046845436,201.000 s | samples=243 total=97623 | Temp=26.574 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.002 Z=-0.003
|
||||
211.986421763,1783892373.546141624,201.500 s | samples=242 total=97865 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.001 Z=-0.000
|
||||
212.486961522,1783892374.046681404,202.000 s | samples=243 total=98108 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.001 Z=-0.003
|
||||
212.986928254,1783892374.546648026,202.500 s | samples=243 total=98351 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.007 Y= 0.002 Z= 0.000
|
||||
213.486998393,1783892375.046718121,203.000 s | samples=243 total=98594 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y= 0.003 Z=-0.002
|
||||
213.986287856,1783892375.546007633,203.500 s | samples=243 total=98837 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.000 Z=-0.007
|
||||
214.486954053,1783892376.046673775,204.000 s | samples=243 total=99080 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.006 Z=-0.001
|
||||
214.986633373,1783892376.546352863,204.500 s | samples=243 total=99323 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.003 Z=-0.001
|
||||
215.486840372,1783892377.046560049,205.000 s | samples=242 total=99565 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.002 Z= 0.001
|
||||
215.987134588,1783892377.546854496,205.500 s | samples=242 total=99807 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.003 Z=-0.004
|
||||
216.486497401,1783892378.046216965,206.000 s | samples=243 total=100050 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.002 Z=-0.001
|
||||
216.987010977,1783892378.546730518,206.500 s | samples=243 total=100293 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.002 Z=-0.001
|
||||
217.486871373,1783892379.046591043,207.000 s | samples=243 total=100536 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.004 Z=-0.004
|
||||
217.986569271,1783892379.546289206,207.500 s | samples=243 total=100779 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.001 Z= 0.001
|
||||
218.486871417,1783892380.046591282,208.000 s | samples=243 total=101022 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.006 Z=-0.001
|
||||
218.986411463,1783892380.546131372,208.500 s | samples=242 total=101264 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.003 Z=-0.001
|
||||
219.486693815,1783892381.046413660,209.000 s | samples=242 total=101506 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.000 Z=-0.003
|
||||
219.986975967,1783892381.546695709,209.500 s | samples=243 total=101749 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.003 Z=-0.002
|
||||
220.486853749,1783892382.046573877,210.000 s | samples=243 total=101992 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y=-0.002 Z=-0.001
|
||||
220.986454666,1783892382.546174049,210.500 s | samples=243 total=102235 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.003 Z=-0.006
|
||||
221.486827936,1783892383.046547413,211.000 s | samples=243 total=102478 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.001 Z= 0.001
|
||||
221.986341008,1783892383.546060324,211.500 s | samples=243 total=102721 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.004 Z= 0.000
|
||||
222.487381126,1783892384.047100782,212.000 s | samples=243 total=102964 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.001 Z=-0.000
|
||||
222.986924789,1783892384.546644211,212.500 s | samples=242 total=103206 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.004
|
||||
223.486323512,1783892385.046042919,213.000 s | samples=242 total=103448 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y= 0.003 Z=-0.000
|
||||
223.987005877,1783892385.546725750,213.500 s | samples=243 total=103691 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.003 Z=-0.002
|
||||
224.486774186,1783892386.046493769,214.000 s | samples=243 total=103934 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.003
|
||||
224.986994149,1783892386.546713829,214.500 s | samples=243 total=104177 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.002 Z= 0.003
|
||||
225.487466472,1783892387.047186136,215.000 s | samples=243 total=104420 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.002 Z= 0.003
|
||||
225.986970369,1783892387.546689749,215.500 s | samples=243 total=104663 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.001 Z= 0.000
|
||||
226.486772092,1783892388.046491385,216.000 s | samples=242 total=104905 | Temp=26.556 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.000 Z=-0.001
|
||||
226.986957161,1783892388.546676397,216.500 s | samples=242 total=105147 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.010 Y=-0.001 Z= 0.001
|
||||
227.488117679,1783892389.047837496,217.000 s | samples=243 total=105390 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.004 Z= 0.006
|
||||
227.986292813,1783892389.546012640,217.500 s | samples=243 total=105633 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.000 Z=-0.000
|
||||
228.487480473,1783892390.047199965,218.000 s | samples=243 total=105876 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.005 Z=-0.003
|
||||
228.986793992,1783892390.546513319,218.500 s | samples=243 total=106119 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y=-0.000 Z=-0.002
|
||||
229.486320998,1783892391.046040297,219.000 s | samples=243 total=106362 | Temp=26.576 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.002 Z= 0.002
|
||||
229.986804897,1783892391.546524525,219.500 s | samples=243 total=106605 | Temp=26.577 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.003 Z=-0.001
|
||||
230.486749371,1783892392.046469212,220.000 s | samples=242 total=106847 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.002 Z=-0.007
|
||||
230.986347160,1783892392.546066999,220.500 s | samples=242 total=107089 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.001 Z=-0.001
|
||||
231.486774419,1783892393.046494246,221.000 s | samples=243 total=107332 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.002 Z=-0.004
|
||||
231.987011756,1783892393.546731710,221.500 s | samples=243 total=107575 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.000 Z=-0.002
|
||||
232.486965187,1783892394.046684742,222.000 s | samples=243 total=107818 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.003
|
||||
232.987293449,1783892394.547012806,222.500 s | samples=243 total=108061 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.000 Z=-0.001
|
||||
233.486739643,1783892395.046459436,223.000 s | samples=243 total=108304 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.000 Z= 0.001
|
||||
233.986312740,1783892395.546032667,223.500 s | samples=242 total=108546 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z=-0.005
|
||||
234.487316260,1783892396.047036171,224.000 s | samples=242 total=108788 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.000 Z=-0.001
|
||||
234.987928778,1783892396.547648430,224.500 s | samples=243 total=109031 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.001 Z= 0.003
|
||||
235.487208278,1783892397.046927691,225.000 s | samples=243 total=109274 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.005 Z= 0.003
|
||||
235.986920126,1783892397.546639919,225.500 s | samples=243 total=109517 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.002 Z= 0.001
|
||||
236.486910228,1783892398.046629906,226.000 s | samples=243 total=109760 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y= 0.001 Z=-0.003
|
||||
236.987090529,1783892398.546809912,226.500 s | samples=243 total=110003 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.002 Z= 0.001
|
||||
237.486704784,1783892399.046424627,227.000 s | samples=243 total=110246 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.000 Z=-0.004
|
||||
237.986933770,1783892399.546653509,227.500 s | samples=242 total=110488 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.001 Z=-0.001
|
||||
238.487063868,1783892400.046783209,228.000 s | samples=242 total=110730 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.002 Y=-0.001 Z= 0.002
|
||||
238.987942239,1783892400.547662020,228.500 s | samples=243 total=110973 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.003 Z= 0.001
|
||||
239.486688954,1783892401.046408653,229.000 s | samples=243 total=111216 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.005 Y=-0.003 Z= 0.001
|
||||
239.986977231,1783892401.546697140,229.500 s | samples=243 total=111459 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.004 Z=-0.001
|
||||
240.487713310,1783892402.047432899,230.000 s | samples=243 total=111702 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y= 0.003 Z= 0.001
|
||||
240.987861401,1783892402.547581196,230.500 s | samples=243 total=111945 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.002 Z=-0.000
|
||||
241.486840618,1783892403.046560526,231.000 s | samples=242 total=112187 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.006 Z= 0.000
|
||||
241.987906470,1783892403.547626257,231.500 s | samples=242 total=112429 | Temp=26.551 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y=-0.002 Z= 0.002
|
||||
242.487109474,1783892404.046829224,232.000 s | samples=243 total=112672 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.003 Z=-0.000
|
||||
242.986740449,1783892404.546459913,232.500 s | samples=243 total=112915 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.002 Z=-0.003
|
||||
243.487746969,1783892405.047466993,233.000 s | samples=243 total=113158 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.002 Z=-0.001
|
||||
243.987718367,1783892405.547437906,233.500 s | samples=243 total=113401 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.001 Z=-0.001
|
||||
244.486738040,1783892406.046457767,234.000 s | samples=243 total=113644 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.002 Z=-0.003
|
||||
244.987748601,1783892406.547467947,234.500 s | samples=243 total=113887 | Temp=26.555 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.002
|
||||
245.487442854,1783892407.047162294,235.000 s | samples=242 total=114129 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.000 Z=-0.001
|
||||
245.986739830,1783892407.546459436,235.500 s | samples=242 total=114371 | Temp=26.554 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z= 0.001
|
||||
246.487711838,1783892408.047431707,236.000 s | samples=243 total=114614 | Temp=26.557 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y=-0.000 Z=-0.003
|
||||
246.987038016,1783892408.546757460,236.500 s | samples=243 total=114857 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y= 0.000 Z=-0.004
|
||||
247.487130335,1783892409.046849966,237.000 s | samples=243 total=115100 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.001 Z= 0.007
|
||||
247.987738238,1783892409.547457457,237.500 s | samples=243 total=115343 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y=-0.002 Z= 0.005
|
||||
248.487708080,1783892410.047427654,238.000 s | samples=243 total=115586 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y= 0.001 Z=-0.001
|
||||
248.987327623,1783892410.547047138,238.500 s | samples=242 total=115828 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.005 Y=-0.003 Z=-0.006
|
||||
249.486691787,1783892411.046411514,239.000 s | samples=242 total=116070 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.003 Z= 0.000
|
||||
249.987573967,1783892411.547293425,239.500 s | samples=243 total=116313 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.001
|
||||
250.487206247,1783892412.046925783,240.000 s | samples=243 total=116556 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.000 Z= 0.004
|
||||
250.987094610,1783892412.546814680,240.500 s | samples=243 total=116799 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.002 Z= 0.002
|
||||
251.487736360,1783892413.047456264,241.000 s | samples=243 total=117042 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.003 Z=-0.000
|
||||
251.987437455,1783892413.547157288,241.500 s | samples=243 total=117285 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.004 Y=-0.004 Z= 0.002
|
||||
252.487232598,1783892414.046952248,242.000 s | samples=243 total=117528 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y= 0.001 Z= 0.002
|
||||
252.987650061,1783892414.547369480,242.500 s | samples=242 total=117770 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y= 0.005 Z= 0.006
|
||||
253.487447436,1783892415.047167301,243.000 s | samples=242 total=118012 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.000 Z= 0.001
|
||||
253.986617022,1783892415.546336651,243.500 s | samples=243 total=118255 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.003 Z=-0.000
|
||||
254.487617989,1783892416.047337770,244.000 s | samples=243 total=118498 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y= 0.003 Z= 0.003
|
||||
254.987101724,1783892416.546821356,244.500 s | samples=243 total=118741 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.002 Z= 0.003
|
||||
255.486771838,1783892417.046491623,245.000 s | samples=243 total=118984 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.004 Z= 0.001
|
||||
255.987834400,1783892417.547554016,245.500 s | samples=243 total=119227 | Temp=26.579 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.005 Z=-0.003
|
||||
256.486985287,1783892418.046705008,246.000 s | samples=242 total=119469 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.000 Z=-0.000
|
||||
256.987014553,1783892418.546734333,246.500 s | samples=242 total=119711 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.003 Z= 0.001
|
||||
257.487763845,1783892419.047483444,247.000 s | samples=243 total=119954 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.007 Z=-0.004
|
||||
257.986893371,1783892419.546612740,247.500 s | samples=243 total=120197 | Temp=26.576 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.002 Z= 0.000
|
||||
258.486788334,1783892420.046507835,248.000 s | samples=243 total=120440 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.003 Z= 0.003
|
||||
258.987779663,1783892420.547498941,248.500 s | samples=243 total=120683 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.000 Z= 0.003
|
||||
259.486874416,1783892421.046594143,249.000 s | samples=243 total=120926 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.000 Z= 0.002
|
||||
259.986526316,1783892421.546245575,249.500 s | samples=243 total=121169 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.001 Z=-0.001
|
||||
260.487826153,1783892422.047545910,250.000 s | samples=242 total=121411 | Temp=26.562 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.004 Z=-0.008
|
||||
260.987059059,1783892422.546779156,250.500 s | samples=242 total=121653 | Temp=26.558 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.001 Z= 0.001
|
||||
261.487594166,1783892423.047313929,251.000 s | samples=243 total=121896 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y= 0.001 Z= 0.007
|
||||
261.987441766,1783892423.547161341,251.500 s | samples=243 total=122139 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y= 0.001 Z= 0.007
|
||||
262.487089389,1783892424.046809196,252.000 s | samples=243 total=122382 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y= 0.001 Z= 0.002
|
||||
262.987053558,1783892424.546773434,252.500 s | samples=243 total=122625 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.001 Z= 0.005
|
||||
263.487409762,1783892425.047129154,253.000 s | samples=243 total=122868 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y= 0.002 Z= 0.004
|
||||
263.986902886,1783892425.546622753,253.500 s | samples=242 total=123110 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y= 0.000 Z=-0.002
|
||||
264.486793161,1783892426.046512842,254.000 s | samples=242 total=123352 | Temp=26.563 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z= 0.000
|
||||
264.987835832,1783892426.547555447,254.500 s | samples=243 total=123595 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.007 Y=-0.003 Z= 0.001
|
||||
265.486855250,1783892427.046574831,255.000 s | samples=243 total=123838 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y=-0.007 Z= 0.001
|
||||
265.987776527,1783892427.547496557,255.500 s | samples=243 total=124081 | Temp=26.573 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.005 Z=-0.005
|
||||
266.487865067,1783892428.047585011,256.000 s | samples=243 total=124324 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.004 Z= 0.001
|
||||
266.986984762,1783892428.546704292,256.500 s | samples=243 total=124567 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y= 0.000 Z=-0.002
|
||||
267.487692712,1783892429.047412634,257.000 s | samples=243 total=124810 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.000 Z=-0.002
|
||||
267.987036239,1783892429.546756029,257.500 s | samples=242 total=125052 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y= 0.001 Z=-0.004
|
||||
268.486734065,1783892430.046453476,258.000 s | samples=242 total=125294 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y=-0.001 Z=-0.001
|
||||
268.987557284,1783892430.547276735,258.500 s | samples=243 total=125537 | Temp=26.573 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y=-0.000 Z=-0.004
|
||||
269.488094711,1783892431.047814369,259.000 s | samples=243 total=125780 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y=-0.002 Z=-0.002
|
||||
269.986484297,1783892431.546204090,259.500 s | samples=243 total=126023 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.003 Z=-0.002
|
||||
270.487753639,1783892432.047473431,260.000 s | samples=243 total=126266 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.002 Z=-0.003
|
||||
270.987103159,1783892432.546822548,260.500 s | samples=243 total=126509 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.001 Z= 0.001
|
||||
271.486832565,1783892433.046552658,261.000 s | samples=242 total=126751 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.000 Z= 0.004
|
||||
271.987479370,1783892433.547199011,261.500 s | samples=242 total=126993 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y=-0.007 Z=-0.005
|
||||
272.486834428,1783892434.046553850,262.000 s | samples=243 total=127236 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.001 Y=-0.001 Z=-0.000
|
||||
272.986462576,1783892434.546182156,262.500 s | samples=243 total=127479 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.003 Y= 0.001 Z= 0.004
|
||||
273.487480796,1783892435.047200441,263.000 s | samples=243 total=127722 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.000 Z= 0.001
|
||||
273.986980040,1783892435.546699524,263.500 s | samples=243 total=127965 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z= 0.001
|
||||
274.487427187,1783892436.047146797,264.000 s | samples=243 total=128208 | Temp=26.564 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.002 Z= 0.001
|
||||
274.987563845,1783892436.547283173,264.500 s | samples=243 total=128451 | Temp=26.559 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.003 Z= 0.002
|
||||
275.487473985,1783892437.047193527,265.000 s | samples=242 total=128693 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.002 Z= 0.001
|
||||
275.987037139,1783892437.546756983,265.500 s | samples=242 total=128935 | Temp=26.574 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.000 Y= 0.001 Z=-0.000
|
||||
276.487788271,1783892438.047507763,266.000 s | samples=243 total=129178 | Temp=26.576 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.002 Y=-0.003 Z=-0.004
|
||||
276.987557108,1783892438.547276497,266.500 s | samples=243 total=129421 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.005 Z= 0.002
|
||||
277.486589480,1783892439.046309233,267.000 s | samples=243 total=129664 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.003 Z= 0.002
|
||||
277.987464437,1783892439.547184467,267.500 s | samples=243 total=129907 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.003 Y=-0.006 Z=-0.000
|
||||
278.486716417,1783892440.046436071,268.000 s | samples=243 total=130150 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.004 Z= 0.000
|
||||
278.986826135,1783892440.546545982,268.500 s | samples=242 total=130392 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.001 Z= 0.001
|
||||
279.487515957,1783892441.047235489,269.000 s | samples=242 total=130634 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y=-0.000 Z=-0.005
|
||||
279.987670235,1783892441.547390223,269.500 s | samples=243 total=130877 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.008 Y=-0.003 Z=-0.002
|
||||
280.486800327,1783892442.046519995,270.000 s | samples=243 total=131120 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z=-0.003
|
||||
280.987469918,1783892442.547189951,270.500 s | samples=243 total=131363 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.001 Z=-0.006
|
||||
281.487355362,1783892443.047075033,271.000 s | samples=243 total=131606 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.001 Z=-0.004
|
||||
281.986756121,1783892443.546475887,271.500 s | samples=243 total=131849 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.004 Z= 0.002
|
||||
282.487516587,1783892444.047236443,272.000 s | samples=243 total=132092 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.003 Z= 0.001
|
||||
282.987463685,1783892444.547183275,272.500 s | samples=242 total=132334 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y=-0.002 Z=-0.004
|
||||
283.486765387,1783892445.046484709,273.000 s | samples=242 total=132576 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.007 Y=-0.002 Z= 0.000
|
||||
283.987483874,1783892445.547203541,273.500 s | samples=243 total=132819 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.007 Y=-0.001 Z=-0.001
|
||||
284.487513157,1783892446.047233343,274.000 s | samples=243 total=133062 | Temp=26.569 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.008 Y=-0.002 Z= 0.002
|
||||
284.986842750,1783892446.546562672,274.500 s | samples=243 total=133305 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.005 Y= 0.001 Z=-0.000
|
||||
285.487245665,1783892447.046965599,275.000 s | samples=243 total=133548 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.001 Z=-0.002
|
||||
285.987431710,1783892447.547151089,275.500 s | samples=243 total=133791 | Temp=26.565 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y= 0.000 Z=-0.003
|
||||
286.487941979,1783892448.047661781,276.000 s | samples=242 total=134033 | Temp=26.560 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y=-0.002 Z= 0.003
|
||||
286.987447789,1783892448.547167301,276.500 s | samples=242 total=134275 | Temp=26.573 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.001 Z=-0.002
|
||||
287.486731861,1783892449.046451807,277.000 s | samples=243 total=134518 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.002 Z= 0.003
|
||||
287.986796267,1783892449.546516180,277.500 s | samples=243 total=134761 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.001 Z=-0.003
|
||||
288.487491623,1783892450.047211409,278.000 s | samples=243 total=135004 | Temp=26.561 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y= 0.001 Z= 0.002
|
||||
288.987469719,1783892450.547189236,278.500 s | samples=243 total=135247 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.005 Y=-0.002 Z=-0.003
|
||||
289.487366488,1783892451.047086000,279.000 s | samples=243 total=135490 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.003 Z=-0.001
|
||||
289.987657220,1783892451.547376871,279.500 s | samples=243 total=135733 | Temp=26.582 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.003 Y=-0.002 Z= 0.003
|
||||
290.487493966,1783892452.047213793,280.000 s | samples=242 total=135975 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.001 Z= 0.001
|
||||
290.987616330,1783892452.547335863,280.500 s | samples=242 total=136217 | Temp=26.566 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.004 Z=-0.001
|
||||
291.487829847,1783892453.047549725,281.000 s | samples=243 total=136460 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.006 Y=-0.000 Z=-0.000
|
||||
291.987211230,1783892453.546931028,281.500 s | samples=243 total=136703 | Temp=26.574 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y=-0.000 Z= 0.001
|
||||
292.486769959,1783892454.046489239,282.000 s | samples=243 total=136946 | Temp=26.573 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.008 Y=-0.004 Z=-0.006
|
||||
292.987471024,1783892454.547190666,282.500 s | samples=243 total=137189 | Temp=26.573 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.005 Y=-0.006 Z=-0.003
|
||||
293.487427499,1783892455.047147036,283.000 s | samples=243 total=137432 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.010 Y=-0.001 Z= 0.002
|
||||
293.987859396,1783892455.547578812,283.500 s | samples=242 total=137674 | Temp=26.572 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.000 Z= 0.001
|
||||
294.487147621,1783892456.046867132,284.000 s | samples=242 total=137916 | Temp=26.579 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.001 Z= 0.000
|
||||
294.988450001,1783892456.548169613,284.500 s | samples=243 total=138159 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.001 Z=-0.005
|
||||
295.486574811,1783892457.046294451,285.000 s | samples=243 total=138402 | Temp=26.577 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y= 0.002 Z= 0.001
|
||||
295.987180344,1783892457.546899796,285.500 s | samples=243 total=138645 | Temp=26.577 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.006 Y= 0.001 Z=-0.005
|
||||
296.487165787,1783892458.046885967,286.000 s | samples=243 total=138888 | Temp=26.581 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.000 Y= 0.001 Z=-0.003
|
||||
296.987599229,1783892458.547318935,286.500 s | samples=243 total=139131 | Temp=26.579 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.000 Z=-0.001
|
||||
297.487736273,1783892459.047456026,287.000 s | samples=243 total=139374 | Temp=26.581 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y= 0.000 Z=-0.000
|
||||
297.987123654,1783892459.546843290,287.500 s | samples=242 total=139616 | Temp=26.577 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.003 Z=-0.007
|
||||
298.486648704,1783892460.046368599,288.000 s | samples=242 total=139858 | Temp=26.575 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.005 Y=-0.003 Z= 0.002
|
||||
298.987618543,1783892460.547338009,288.500 s | samples=243 total=140101 | Temp=26.579 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.000 Y= 0.002 Z=-0.002
|
||||
299.487362752,1783892461.047082424,289.000 s | samples=243 total=140344 | Temp=26.575 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.003 Z= 0.004
|
||||
299.987800843,1783892461.547520399,289.500 s | samples=243 total=140587 | Temp=26.576 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.006 Y= 0.002 Z=-0.004
|
||||
300.487790852,1783892462.047510624,290.000 s | samples=243 total=140830 | Temp=26.577 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.002 Z=-0.005
|
||||
300.987239452,1783892462.546959162,290.500 s | samples=243 total=141073 | Temp=26.577 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.002 Z=-0.001
|
||||
301.487156170,1783892463.046876192,291.000 s | samples=242 total=141315 | Temp=26.576 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.006 Y= 0.001 Z= 0.001
|
||||
301.987661672,1783892463.547381401,291.500 s | samples=242 total=141557 | Temp=26.576 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.002 Z=-0.001
|
||||
302.488270909,1783892464.047990561,292.000 s | samples=243 total=141800 | Temp=26.571 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.001 Z=-0.007
|
||||
302.987328968,1783892464.547048330,292.500 s | samples=243 total=142043 | Temp=26.577 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.000 Y=-0.006 Z=-0.004
|
||||
303.487842046,1783892465.047561884,293.000 s | samples=243 total=142286 | Temp=26.577 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.006 Y= 0.001 Z=-0.003
|
||||
303.987209158,1783892465.546928644,293.500 s | samples=243 total=142529 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.004 Y=-0.004 Z=-0.003
|
||||
304.487290698,1783892466.047010422,294.000 s | samples=243 total=142772 | Temp=26.579 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y= 0.000 Z=-0.003
|
||||
304.987897407,1783892466.547616959,294.500 s | samples=243 total=143015 | Temp=26.567 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.009 Y=-0.005 Z=-0.003
|
||||
305.487772719,1783892467.047492504,295.000 s | samples=242 total=143257 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.003 Y=-0.002 Z=-0.005
|
||||
305.987227628,1783892467.546947002,295.500 s | samples=242 total=143499 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.007 Y=-0.006 Z=-0.000
|
||||
306.487568615,1783892468.047288418,296.000 s | samples=243 total=143742 | Temp=26.576 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y=-0.000 Z= 0.001
|
||||
306.987267668,1783892468.546987772,296.500 s | samples=243 total=143985 | Temp=26.579 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X= 0.001 Y= 0.000 Z= 0.001
|
||||
307.488230335,1783892469.047950268,297.000 s | samples=243 total=144228 | Temp=26.579 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y= 0.003 Z=-0.004
|
||||
307.987562883,1783892469.547282696,297.500 s | samples=243 total=144471 | Temp=26.582 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.004 Y=-0.004 Z= 0.001
|
||||
308.487258116,1783892470.046977758,298.000 s | samples=243 total=144714 | Temp=26.583 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.001 Y=-0.002 Z=-0.005
|
||||
308.988243082,1783892470.547962666,298.500 s | samples=242 total=144956 | Temp=26.574 C | Accel[g] X=-0.011 Y=-0.005 Z= 1.000 | Gyro[dps] X=-0.001 Y=-0.003 Z=-0.003
|
||||
309.487839658,1783892471.047559261,299.000 s | samples=242 total=145198 | Temp=26.568 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.002 Y=-0.002 Z=-0.002
|
||||
309.987033256,1783892471.546753168,299.500 s | samples=243 total=145441 | Temp=26.570 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X=-0.004 Y=-0.000 Z=-0.003
|
||||
310.488057326,1783892472.047776699,300.000 s | samples=243 total=145684 | Temp=26.580 C | Accel[g] X=-0.011 Y=-0.005 Z= 0.999 | Gyro[dps] X= 0.002 Y=-0.001 Z=-0.002
|
||||
310.488248563,1783892472.047967672,Complete: samples=145684 expected<=150000 invalid=0
|
||||
|
@@ -0,0 +1,526 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Native Tkinter OpenStreetMap player for raw GPS and ESKF positions."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import io
|
||||
import math
|
||||
import queue
|
||||
import threading
|
||||
import urllib.request
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
import tkinter as tk
|
||||
from PIL import Image, ImageDraw, ImageTk
|
||||
from tkinter import ttk
|
||||
|
||||
from fusion_eskf import enu_to_geodetic
|
||||
|
||||
|
||||
BASE_DIR = Path(__file__).resolve().parent
|
||||
TILE_SIZE = 256
|
||||
MAX_MERCATOR_LAT = 85.05112878
|
||||
|
||||
|
||||
@dataclass
|
||||
class MapSample:
|
||||
t: float
|
||||
raw_lat: float
|
||||
raw_lon: float
|
||||
raw_height: float
|
||||
fused_lat: float
|
||||
fused_lon: float
|
||||
fused_height: float
|
||||
accepted: bool
|
||||
mahalanobis: float
|
||||
separation_m: float
|
||||
|
||||
|
||||
def load_samples(gps_path: Path, eskf_path: Path) -> list[MapSample]:
|
||||
with gps_path.open(newline="", encoding="utf-8") as stream:
|
||||
gps = list(csv.DictReader(stream))
|
||||
with eskf_path.open(newline="", encoding="utf-8") as stream:
|
||||
eskf = list(csv.DictReader(stream))
|
||||
if not gps or len(gps) != len(eskf):
|
||||
raise ValueError(
|
||||
f"GPS/ESKF row mismatch: gps={len(gps)}, eskf={len(eskf)}"
|
||||
)
|
||||
|
||||
reference = (
|
||||
float(np.median([float(row["lat_deg"]) for row in gps])),
|
||||
float(np.median([float(row["lon_deg"]) for row in gps])),
|
||||
float(np.median([float(row["height_m"]) for row in gps])),
|
||||
)
|
||||
fused_enu = np.array(
|
||||
[
|
||||
[float(row["eskf_e_m"]), float(row["eskf_n_m"]), float(row["eskf_u_m"])]
|
||||
for row in eskf
|
||||
]
|
||||
)
|
||||
fused_lla = enu_to_geodetic(fused_enu, reference)
|
||||
result = []
|
||||
for raw, filtered, corrected in zip(gps, eskf, fused_lla):
|
||||
result.append(
|
||||
MapSample(
|
||||
t=float(filtered["t_s"]),
|
||||
raw_lat=float(raw["lat_deg"]),
|
||||
raw_lon=float(raw["lon_deg"]),
|
||||
raw_height=float(raw["height_m"]),
|
||||
fused_lat=float(corrected[0]),
|
||||
fused_lon=float(corrected[1]),
|
||||
fused_height=float(corrected[2]),
|
||||
accepted=bool(int(filtered["gps_accepted"])),
|
||||
mahalanobis=float(filtered["mahalanobis2"]),
|
||||
separation_m=math.hypot(
|
||||
float(filtered["gps_e_m"]) - float(filtered["eskf_e_m"]),
|
||||
float(filtered["gps_n_m"]) - float(filtered["eskf_n_m"]),
|
||||
),
|
||||
)
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
def load_comparison_samples(path: Path, model: str) -> list[MapSample]:
|
||||
"""Load fixed/adaptive model_comparison.csv without an intermediate conversion."""
|
||||
with path.open(newline="", encoding="utf-8") as stream:
|
||||
rows = list(csv.DictReader(stream))
|
||||
if not rows:
|
||||
raise ValueError(f"empty model-comparison CSV: {path}")
|
||||
|
||||
prefix = "fixed" if model == "fixed" else "adaptive"
|
||||
required = {
|
||||
"t_s", "lat_deg", "lon_deg", "gps_e_m", "gps_n_m",
|
||||
f"{prefix}_e_m", f"{prefix}_n_m", f"{prefix}_gps_accepted",
|
||||
f"{prefix}_nis",
|
||||
}
|
||||
missing = required.difference(rows[0])
|
||||
if missing:
|
||||
raise ValueError(f"comparison CSV missing columns: {sorted(missing)}")
|
||||
|
||||
heights = np.array([float(row.get("height_m") or 0.0) for row in rows])
|
||||
reference = (
|
||||
float(np.median([float(row["lat_deg"]) for row in rows])),
|
||||
float(np.median([float(row["lon_deg"]) for row in rows])),
|
||||
float(np.median(heights)),
|
||||
)
|
||||
fused_enu = np.array(
|
||||
[
|
||||
[float(row[f"{prefix}_e_m"]), float(row[f"{prefix}_n_m"]), 0.0]
|
||||
for row in rows
|
||||
]
|
||||
)
|
||||
fused_lla = enu_to_geodetic(fused_enu, reference)
|
||||
result = []
|
||||
for row, corrected, raw_height in zip(rows, fused_lla, heights):
|
||||
result.append(
|
||||
MapSample(
|
||||
t=float(row["t_s"]),
|
||||
raw_lat=float(row["lat_deg"]),
|
||||
raw_lon=float(row["lon_deg"]),
|
||||
raw_height=float(raw_height),
|
||||
fused_lat=float(corrected[0]),
|
||||
fused_lon=float(corrected[1]),
|
||||
fused_height=float(corrected[2]),
|
||||
accepted=bool(int(row[f"{prefix}_gps_accepted"])),
|
||||
mahalanobis=float(row[f"{prefix}_nis"]),
|
||||
separation_m=math.hypot(
|
||||
float(row["gps_e_m"]) - float(row[f"{prefix}_e_m"]),
|
||||
float(row["gps_n_m"]) - float(row[f"{prefix}_n_m"]),
|
||||
),
|
||||
)
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
def latlon_to_world(lat: float, lon: float, zoom: int) -> tuple[float, float]:
|
||||
lat = max(-MAX_MERCATOR_LAT, min(MAX_MERCATOR_LAT, lat))
|
||||
scale = TILE_SIZE * (2**zoom)
|
||||
x = (lon + 180.0) / 360.0 * scale
|
||||
lat_rad = math.radians(lat)
|
||||
y = (1.0 - math.asinh(math.tan(lat_rad)) / math.pi) / 2.0 * scale
|
||||
return x, y
|
||||
|
||||
|
||||
def world_to_latlon(x: float, y: float, zoom: int) -> tuple[float, float]:
|
||||
scale = TILE_SIZE * (2**zoom)
|
||||
lon = x / scale * 360.0 - 180.0
|
||||
mercator = math.pi * (1.0 - 2.0 * y / scale)
|
||||
lat = math.degrees(math.atan(math.sinh(mercator)))
|
||||
return lat, lon
|
||||
|
||||
|
||||
class OsmTileStore:
|
||||
def __init__(self, root: tk.Tk, cache_dir: Path, redraw):
|
||||
self.root = root
|
||||
self.cache_dir = cache_dir
|
||||
self.redraw = redraw
|
||||
self.cache_dir.mkdir(parents=True, exist_ok=True)
|
||||
self.executor = ThreadPoolExecutor(max_workers=3, thread_name_prefix="osm")
|
||||
self.pending: set[tuple[int, int, int]] = set()
|
||||
self.completed: queue.Queue[tuple[tuple[int, int, int], str | None]] = queue.Queue()
|
||||
self.closed = False
|
||||
self.root.after(100, self._poll)
|
||||
|
||||
def path(self, z: int, x: int, y: int) -> Path:
|
||||
return self.cache_dir / str(z) / str(x) / f"{y}.png"
|
||||
|
||||
def request(self, z: int, x: int, y: int):
|
||||
key = (z, x, y)
|
||||
if key in self.pending or self.path(*key).exists() or self.closed:
|
||||
return
|
||||
self.pending.add(key)
|
||||
self.executor.submit(self._download, key)
|
||||
|
||||
def _download(self, key):
|
||||
z, x, y = key
|
||||
path = self.path(z, x, y)
|
||||
error = None
|
||||
try:
|
||||
request = urllib.request.Request(
|
||||
f"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
|
||||
headers={"User-Agent": "Rocket-GPS-Fusion/1.0 (local engineering viewer)"},
|
||||
)
|
||||
with urllib.request.urlopen(request, timeout=12) as response:
|
||||
content = response.read()
|
||||
image = Image.open(io.BytesIO(content))
|
||||
image.verify()
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.write_bytes(content)
|
||||
except Exception as exc: # network/cache failure is shown in the window
|
||||
error = str(exc)
|
||||
self.completed.put((key, error))
|
||||
|
||||
def _poll(self):
|
||||
changed = False
|
||||
errors = []
|
||||
while True:
|
||||
try:
|
||||
key, error = self.completed.get_nowait()
|
||||
except queue.Empty:
|
||||
break
|
||||
self.pending.discard(key)
|
||||
changed = True
|
||||
if error:
|
||||
errors.append(error)
|
||||
if changed:
|
||||
self.redraw(errors[-1] if errors else None)
|
||||
if not self.closed:
|
||||
self.root.after(100, self._poll)
|
||||
|
||||
def close(self):
|
||||
self.closed = True
|
||||
self.executor.shutdown(wait=False, cancel_futures=True)
|
||||
|
||||
|
||||
class GpsMapPlayer:
|
||||
def __init__(self, root: tk.Tk, samples: list[MapSample], cache_dir: Path):
|
||||
self.root = root
|
||||
self.samples = samples
|
||||
self.index = 0
|
||||
self.play_job = None
|
||||
self.zoom = 19
|
||||
self.center_lat = float(np.median([sample.raw_lat for sample in samples]))
|
||||
self.center_lon = float(np.median([sample.raw_lon for sample in samples]))
|
||||
self.drag_start = None
|
||||
self.internal_slider = False
|
||||
self.map_photo = None
|
||||
self.tile_error = None
|
||||
self.resize_job = None
|
||||
|
||||
root.title("GPS / IMU ESKF — OpenStreetMap sample oynatıcı")
|
||||
root.geometry("1180x780")
|
||||
root.minsize(760, 520)
|
||||
|
||||
controls = ttk.Frame(root, padding=(8, 7))
|
||||
controls.pack(side=tk.TOP, fill=tk.X)
|
||||
self.play_button = ttk.Button(controls, text="▶ Oynat", command=self.toggle_play)
|
||||
self.play_button.pack(side=tk.LEFT)
|
||||
ttk.Button(controls, text="↺ Başa al", command=self.reset).pack(side=tk.LEFT, padx=(5, 0))
|
||||
ttk.Button(controls, text="İzleri sığdır", command=self.fit_tracks).pack(side=tk.LEFT, padx=(5, 0))
|
||||
ttk.Button(controls, text="Konuma git", command=self.center_current).pack(side=tk.LEFT, padx=(5, 0))
|
||||
ttk.Button(controls, text="Haritayı yenile", command=self.draw).pack(side=tk.LEFT, padx=(5, 0))
|
||||
ttk.Button(controls, text="−", width=3, command=lambda: self.change_zoom(-1)).pack(side=tk.LEFT, padx=(14, 0))
|
||||
ttk.Button(controls, text="+", width=3, command=lambda: self.change_zoom(1)).pack(side=tk.LEFT)
|
||||
ttk.Label(controls, text="Hız:").pack(side=tk.LEFT, padx=(14, 4))
|
||||
self.speed = tk.StringVar(value="1")
|
||||
ttk.Combobox(controls, textvariable=self.speed, values=("0.5", "1", "2", "4"), width=4, state="readonly").pack(side=tk.LEFT)
|
||||
self.tick_label = ttk.Label(controls, text="")
|
||||
self.tick_label.pack(side=tk.RIGHT)
|
||||
|
||||
timeline = ttk.Frame(root, padding=(8, 0, 8, 6))
|
||||
timeline.pack(side=tk.TOP, fill=tk.X)
|
||||
self.slider = tk.Scale(
|
||||
timeline, from_=0, to=len(samples) - 1, resolution=1, orient=tk.HORIZONTAL,
|
||||
showvalue=False, command=self.on_slider, highlightthickness=0,
|
||||
)
|
||||
self.slider.pack(side=tk.LEFT, fill=tk.X, expand=True)
|
||||
self.time_label = ttk.Label(timeline, width=11, anchor=tk.E)
|
||||
self.time_label.pack(side=tk.RIGHT)
|
||||
|
||||
self.canvas = tk.Canvas(root, bg="#d9dde0", highlightthickness=0)
|
||||
self.canvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
|
||||
self.info = ttk.Label(root, padding=(9, 6), anchor=tk.W)
|
||||
self.info.pack(side=tk.BOTTOM, fill=tk.X)
|
||||
|
||||
self.canvas.bind("<ButtonPress-1>", self.pan_start)
|
||||
self.canvas.bind("<B1-Motion>", self.pan_move)
|
||||
self.canvas.bind("<MouseWheel>", self.mouse_zoom)
|
||||
self.canvas.bind("<Button-4>", lambda event: self.change_zoom(1))
|
||||
self.canvas.bind("<Button-5>", lambda event: self.change_zoom(-1))
|
||||
self.canvas.bind("<Configure>", self.on_resize)
|
||||
root.bind("<space>", lambda event: self.toggle_play())
|
||||
root.protocol("WM_DELETE_WINDOW", self.close)
|
||||
|
||||
self.tiles = OsmTileStore(root, cache_dir, self.tile_update)
|
||||
root.after(150, self.fit_tracks)
|
||||
|
||||
def tile_update(self, error=None):
|
||||
if error:
|
||||
self.tile_error = error
|
||||
self.draw()
|
||||
|
||||
def project(self, lat, lon):
|
||||
world_x, world_y = latlon_to_world(lat, lon, self.zoom)
|
||||
center_x, center_y = latlon_to_world(self.center_lat, self.center_lon, self.zoom)
|
||||
return (
|
||||
self.canvas.winfo_width() / 2 + world_x - center_x,
|
||||
self.canvas.winfo_height() / 2 + world_y - center_y,
|
||||
)
|
||||
|
||||
def draw(self):
|
||||
if not self.canvas.winfo_exists():
|
||||
return
|
||||
self.canvas.delete("all")
|
||||
width = max(1, self.canvas.winfo_width())
|
||||
height = max(1, self.canvas.winfo_height())
|
||||
map_image = Image.new("RGB", (width, height), "#d9dde0")
|
||||
image_draw = ImageDraw.Draw(map_image)
|
||||
center_x, center_y = latlon_to_world(self.center_lat, self.center_lon, self.zoom)
|
||||
left, top = center_x - width / 2, center_y - height / 2
|
||||
count = 2**self.zoom
|
||||
tx0, tx1 = math.floor(left / TILE_SIZE), math.floor((left + width) / TILE_SIZE)
|
||||
ty0, ty1 = math.floor(top / TILE_SIZE), math.floor((top + height) / TILE_SIZE)
|
||||
loaded_tiles = 0
|
||||
visible_tiles = 0
|
||||
for tile_y in range(ty0, ty1 + 1):
|
||||
if tile_y < 0 or tile_y >= count:
|
||||
continue
|
||||
for tile_x_unwrapped in range(tx0, tx1 + 1):
|
||||
visible_tiles += 1
|
||||
tile_x = tile_x_unwrapped % count
|
||||
px = round(tile_x_unwrapped * TILE_SIZE - left)
|
||||
py = round(tile_y * TILE_SIZE - top)
|
||||
path = self.tiles.path(self.zoom, tile_x, tile_y)
|
||||
if path.exists():
|
||||
try:
|
||||
with Image.open(path) as tile:
|
||||
map_image.paste(tile.convert("RGB"), (px, py))
|
||||
loaded_tiles += 1
|
||||
except Exception:
|
||||
path.unlink(missing_ok=True)
|
||||
self.tiles.request(self.zoom, tile_x, tile_y)
|
||||
else:
|
||||
image_draw.rectangle((px, py, px + TILE_SIZE, py + TILE_SIZE), fill="#e3e6e8", outline="#cdd1d4")
|
||||
self.tiles.request(self.zoom, tile_x, tile_y)
|
||||
|
||||
self.map_photo = ImageTk.PhotoImage(map_image)
|
||||
self.canvas.create_image(0, 0, image=self.map_photo, anchor=tk.NW)
|
||||
|
||||
shown = self.samples[: self.index + 1]
|
||||
self.draw_track([(s.raw_lat, s.raw_lon) for s in shown], "#d62728", 2)
|
||||
self.draw_track([(s.fused_lat, s.fused_lon) for s in shown], "#1769aa", 3)
|
||||
for sample in shown:
|
||||
x, y = self.project(sample.raw_lat, sample.raw_lon)
|
||||
color = "#d62728" if sample.accepted else "#e67e22"
|
||||
self.canvas.create_oval(x - 2, y - 2, x + 2, y + 2, fill=color, outline="")
|
||||
x, y = self.project(sample.fused_lat, sample.fused_lon)
|
||||
self.canvas.create_oval(x - 2, y - 2, x + 2, y + 2, fill="#1769aa", outline="")
|
||||
|
||||
current = self.samples[self.index]
|
||||
self.draw_marker(current.raw_lat, current.raw_lon, "#d62728" if current.accepted else "#e67e22", 8)
|
||||
self.draw_marker(current.fused_lat, current.fused_lon, "#2196f3", 7)
|
||||
self.canvas.create_rectangle(10, 10, 205, 77, fill="white", outline="#888")
|
||||
self.canvas.create_oval(22, 23, 32, 33, fill="#d62728", outline="")
|
||||
self.canvas.create_text(40, 28, text="Ham GPS", anchor=tk.W)
|
||||
self.canvas.create_oval(22, 43, 32, 53, fill="#2196f3", outline="")
|
||||
self.canvas.create_text(40, 48, text="ESKF + ZUPT", anchor=tk.W)
|
||||
self.canvas.create_oval(22, 61, 32, 71, fill="#e67e22", outline="")
|
||||
self.canvas.create_text(40, 66, text="Reddedilen GPS", anchor=tk.W)
|
||||
self.canvas.create_text(width - 8, height - 7, text="© OpenStreetMap contributors", anchor=tk.SE, fill="#333")
|
||||
status = f"OSM {loaded_tiles}/{visible_tiles} tile"
|
||||
if self.tile_error and loaded_tiles == 0:
|
||||
status += f" — bağlantı hatası: {self.tile_error}"
|
||||
elif loaded_tiles < visible_tiles:
|
||||
status += " yükleniyor…"
|
||||
self.canvas.create_rectangle(width - 245, 8, width - 8, 32, fill="white", outline="#999")
|
||||
self.canvas.create_text(width - 16, 20, text=status, anchor=tk.E, fill="#333")
|
||||
self.update_labels()
|
||||
|
||||
def draw_track(self, coordinates, color, width):
|
||||
if len(coordinates) > 1:
|
||||
pixels = [value for coordinate in coordinates for value in self.project(*coordinate)]
|
||||
self.canvas.create_line(*pixels, fill=color, width=width, smooth=False)
|
||||
|
||||
def draw_marker(self, lat, lon, color, radius):
|
||||
x, y = self.project(lat, lon)
|
||||
self.canvas.create_oval(x - radius, y - radius, x + radius, y + radius, fill=color, outline="white", width=2)
|
||||
|
||||
def update_labels(self):
|
||||
sample = self.samples[self.index]
|
||||
self.tick_label.configure(text=f"Sample {self.index + 1} / {len(self.samples)}")
|
||||
self.time_label.configure(text=f"{sample.t:.3f} s")
|
||||
gate = "KABUL" if sample.accepted else "RED"
|
||||
self.info.configure(
|
||||
text=(
|
||||
f"GPS {sample.raw_lat:.8f}, {sample.raw_lon:.8f}, h={sample.raw_height:.1f} m | "
|
||||
f"ESKF {sample.fused_lat:.8f}, {sample.fused_lon:.8f}, h={sample.fused_height:.1f} m | "
|
||||
f"yatay fark={sample.separation_m:.2f} m GPS={gate} NIS={sample.mahalanobis:.2f}"
|
||||
)
|
||||
)
|
||||
|
||||
def on_slider(self, value):
|
||||
if self.internal_slider:
|
||||
return
|
||||
requested_index = int(float(value))
|
||||
# Scale.set() also invokes this callback on some Tk builds. An unchanged
|
||||
# value is therefore a programmatic playback update, not user scrubbing.
|
||||
if requested_index == self.index:
|
||||
return
|
||||
self.stop()
|
||||
self.index = requested_index
|
||||
self.draw()
|
||||
|
||||
def set_index(self, index):
|
||||
self.index = max(0, min(len(self.samples) - 1, index))
|
||||
self.internal_slider = True
|
||||
self.slider.set(self.index)
|
||||
self.internal_slider = False
|
||||
self.draw()
|
||||
|
||||
def toggle_play(self):
|
||||
if self.play_job is not None:
|
||||
self.stop()
|
||||
return
|
||||
if self.index >= len(self.samples) - 1:
|
||||
self.set_index(0)
|
||||
self.play_button.configure(text="⏸ Duraklat")
|
||||
self.schedule_next()
|
||||
|
||||
def schedule_next(self):
|
||||
if self.index >= len(self.samples) - 1:
|
||||
self.stop()
|
||||
return
|
||||
dt = self.samples[self.index + 1].t - self.samples[self.index].t
|
||||
delay = max(60, min(2000, int(dt * 1000 / float(self.speed.get()))))
|
||||
self.play_job = self.root.after(delay, self.play_step)
|
||||
|
||||
def play_step(self):
|
||||
self.play_job = None
|
||||
self.set_index(self.index + 1)
|
||||
self.schedule_next()
|
||||
|
||||
def stop(self):
|
||||
if self.play_job is not None:
|
||||
self.root.after_cancel(self.play_job)
|
||||
self.play_job = None
|
||||
self.play_button.configure(text="▶ Oynat")
|
||||
|
||||
def reset(self):
|
||||
self.stop()
|
||||
self.set_index(0)
|
||||
|
||||
def center_current(self):
|
||||
sample = self.samples[self.index]
|
||||
self.center_lat = (sample.raw_lat + sample.fused_lat) / 2.0
|
||||
self.center_lon = (sample.raw_lon + sample.fused_lon) / 2.0
|
||||
self.zoom = 20
|
||||
self.draw()
|
||||
|
||||
def fit_tracks(self):
|
||||
width = max(400, self.canvas.winfo_width())
|
||||
height = max(300, self.canvas.winfo_height())
|
||||
coordinates = [(s.raw_lat, s.raw_lon) for s in self.samples]
|
||||
coordinates += [(s.fused_lat, s.fused_lon) for s in self.samples]
|
||||
self.center_lat = (min(x[0] for x in coordinates) + max(x[0] for x in coordinates)) / 2
|
||||
self.center_lon = (min(x[1] for x in coordinates) + max(x[1] for x in coordinates)) / 2
|
||||
for zoom in range(22, 1, -1):
|
||||
pixels = [latlon_to_world(lat, lon, zoom) for lat, lon in coordinates]
|
||||
span_x = max(x for x, _ in pixels) - min(x for x, _ in pixels)
|
||||
span_y = max(y for _, y in pixels) - min(y for _, y in pixels)
|
||||
if span_x <= width * 0.75 and span_y <= height * 0.75:
|
||||
self.zoom = zoom
|
||||
break
|
||||
self.draw()
|
||||
|
||||
def change_zoom(self, delta):
|
||||
self.zoom = max(2, min(22, self.zoom + delta))
|
||||
self.draw()
|
||||
|
||||
def mouse_zoom(self, event):
|
||||
self.change_zoom(1 if event.delta > 0 else -1)
|
||||
|
||||
def pan_start(self, event):
|
||||
self.drag_start = (event.x, event.y, *latlon_to_world(self.center_lat, self.center_lon, self.zoom))
|
||||
|
||||
def pan_move(self, event):
|
||||
if self.drag_start is None:
|
||||
return
|
||||
start_x, start_y, center_x, center_y = self.drag_start
|
||||
self.center_lat, self.center_lon = world_to_latlon(
|
||||
center_x - (event.x - start_x), center_y - (event.y - start_y), self.zoom
|
||||
)
|
||||
self.draw()
|
||||
|
||||
def on_resize(self, _event):
|
||||
if self.resize_job is not None:
|
||||
self.root.after_cancel(self.resize_job)
|
||||
self.resize_job = self.root.after(80, self.draw)
|
||||
|
||||
def close(self):
|
||||
self.stop()
|
||||
self.tiles.close()
|
||||
self.root.destroy()
|
||||
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"--comparison", type=Path,
|
||||
help="fixed/adaptive model_comparison.csv (overrides --gps/--eskf)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--model", choices=("fixed", "adaptive"), default="adaptive",
|
||||
help="model shown with --comparison (default: adaptive)",
|
||||
)
|
||||
parser.add_argument("--gps", type=Path, default=BASE_DIR / "output/gps_positions.csv")
|
||||
parser.add_argument("--eskf", type=Path, default=BASE_DIR / "output/eskf_positions.csv")
|
||||
parser.add_argument("--tile-cache", type=Path, default=BASE_DIR / "output/osm_tile_cache")
|
||||
parser.add_argument("--check", action="store_true", help="validate inputs and exit without opening a window")
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
samples = (
|
||||
load_comparison_samples(args.comparison, args.model)
|
||||
if args.comparison
|
||||
else load_samples(args.gps, args.eskf)
|
||||
)
|
||||
if args.check:
|
||||
print(
|
||||
f"map data OK: samples={len(samples)} duration={samples[-1].t:.3f}s "
|
||||
f"accepted={sum(s.accepted for s in samples)} rejected={sum(not s.accepted for s in samples)}"
|
||||
)
|
||||
return
|
||||
root = tk.Tk()
|
||||
GpsMapPlayer(root, samples, args.tile_cache)
|
||||
root.mainloop()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,988 @@
|
||||
t_s,lat_deg,lon_deg,gdop,tracked,height_m,gps_e_m,gps_n_m,fixed_e_m,fixed_n_m,adaptive_e_m,adaptive_n_m,fixed_speed_mps,adaptive_speed_mps,fixed_gps_accepted,adaptive_gps_accepted,fixed_nis,adaptive_nis
|
||||
0.0,40.77840358051433,29.435738161792692,1.933799818,0,0.0,1.8760291730182777,-4.276987524742524,1.8760291730182777,-4.276987524742524,1.8760291730182777,-4.276987524742524,0.0,0.0,1,1,0.0,0.0
|
||||
0.2994159310000001,40.77842721294085,29.435791387479995,1.9337201454,8,0.0,6.369144445092164,-1.652612866919309,3.373740081116865,-3.4021938681365658,3.380189936321635,-3.3998592146888136,0.0027218894544904196,0.034502365462190154,1,1,0.5891149016612667,0.5879305219085186
|
||||
0.6046808960000001,40.7784017718918,29.435639444474393,1.9336410567,8,0.0,-6.457325361922912,-4.477831803870162,0.9159521111476532,-3.6711033394869355,0.8758155215764742,-3.6702447657869968,0.0012580220746964232,0.11450895649210933,1,1,2.638956920651378,2.629149121291346
|
||||
0.8982611890000001,40.77850146329599,29.435738729370968,1.9335607411,8,0.0,1.9239392273740072,6.592858977977101,1.1175477154360258,-1.6182747672226356,1.070090027280187,-1.544479469466347,0.0004276862381390323,0.18144242946736952,1,1,1.9152772633382855,1.9021219860943355
|
||||
1.204044994,40.778472665000145,29.435741656332187,1.9334794343,8,0.0,2.1710231456995674,3.3948189870936836,1.2931310369852735,-0.7827473555472587,1.2868594621636436,-0.7697255549209164,0.0014424399905044929,0.010791258394337358,1,1,0.5020525526479035,0.5000879777159923
|
||||
1.497707227,40.77849103918546,29.435708820319867,1.9334010981,8,0.0,-0.6008696826082961,5.4352651469900914,1.0225555914009192,0.10558172166464141,1.0180131912830541,0.11470483567431178,0.0034570489852196774,0.03251863497551338,1,1,0.8526907572350553,0.8499068148573032
|
||||
1.7985326730000002,40.77838922260369,29.435762208981373,1.9333206155,8,0.0,3.9060055848543977,-5.8714273523513745,1.383000512963249,-0.641584386002112,1.3833873354003763,-0.6432008715361817,0.002871151144936227,0.0036624434247577737,1,1,0.9623802203397743,0.9618912246083648
|
||||
2.099654866,40.77851670183274,29.4356806874887,1.9332407477,8,0.0,-2.975735964660361,8.285093180519917,0.8986638088379557,0.3503211329313337,0.8989762573348861,0.3487792150644845,0.0019937093809747645,0.0021721324016881712,1,1,2.195266379069982,2.1960091980098344
|
||||
2.3993662089999996,40.778463972470185,29.435705597748857,1.9331604568,8,0.0,-0.8729073190023339,2.429516498706861,0.721453477735195,0.5582813847064294,0.7217844700508422,0.556806621761593,0.00320660435419521,0.003469754370184137,1,1,0.18913092697010847,0.18931190409513277
|
||||
2.698794436,40.77840680378446,29.43574832049169,1.9330814456,8,0.0,2.7335891935688124,-3.919044310732838,0.9044136011066612,0.15119954010186487,0.9047479690309705,0.14984136717669982,0.0021990026113169396,0.0019504170397618506,1,1,0.54079855319437,0.5404807055738382
|
||||
2.998809021,40.77844435853459,29.435750977385354,1.9330010217,8,0.0,2.957872746661765,0.2513967873343975,1.0755848779892874,0.15957856827611838,1.0759489833920433,0.15824614478844867,0.0031326325251847162,0.002746707068282884,1,1,0.13988562326417942,0.13983799912639175
|
||||
3.3044275869999997,40.77840407801559,29.435794331708518,1.9329201446,8,0.0,6.617687638853687,-4.221737475747049,1.5015662561094367,-0.17750924853835123,1.5019058303057506,-0.1787193868062662,0.0036781490044000198,0.00326493318944478,1,1,1.4212420146799145,1.4208734376175824
|
||||
3.598275283,40.77837794111587,29.43578410594582,1.9328402637,8,0.0,5.754468475671893,-7.124231156477233,1.8059281528335736,-0.6738028439558142,1.8058495116196267,-0.6749123027404894,0.002651798558635529,0.0019838571192595075,1,1,1.6094704053881461,1.609154485565505
|
||||
3.899059784,40.778435554445885,29.435781734158756,1.9327608312,8,0.0,5.5542460250273935,-0.7262924955105705,2.055330627580524,-0.6772788386559423,2.055415454715902,-0.678370311176377,0.0027764469192690143,0.0017728730762931284,1,1,0.47408596623877136,0.47406131786847616
|
||||
4.19883836,40.77843755726602,29.435676704393398,1.9326806553,8,0.0,-3.311977638915107,-0.5038814075271795,1.719964916421059,-0.6664433054480945,1.7199096210870044,-0.6674660191835773,0.0016531467382606328,0.0008905796564280788,1,1,0.9766846027376477,0.97667334642705
|
||||
4.498841884,40.77839872234027,29.435807276448703,1.9326004203,8,0.0,7.710435792970954,-4.816482165102874,2.072378211366327,-0.9106659963752388,2.0725057324318996,-0.9116807232705871,0.0020294514694522365,0.0013025520023601275,1,1,1.5832867132384887,1.5830443965285643
|
||||
4.803505964,40.7784768201001,29.435741393984753,1.9325226719,8,0.0,2.148876625150333,3.856241287130824,2.076712047960046,-0.6457330435324928,2.0767733349571964,-0.6466765076605737,0.0015335213223996228,0.0011469575370316734,1,1,0.4804168297690429,0.4806182070697955
|
||||
5.09723661,40.7784137593924,29.435803436978404,1.9324422657,8,0.0,7.386320087750056,-3.1466234634265358,2.3562119101785695,-0.7773874636788874,2.3562820425838096,-0.7782800548757816,0.0012316788704194392,0.0010420896702108507,1,1,1.0977747807616747,1.097649737095272
|
||||
5.399392542,40.77843873002103,29.43568550069533,1.9323620005,8,0.0,-2.56942638778941,-0.37364769411259774,2.1100105314763375,-0.7572194795001288,2.110170456191541,-0.7580983424892256,0.001730546106815501,0.0015298110692036945,1,1,0.8364587074318866,0.8365322449480709
|
||||
5.698799033,40.77846629241897,29.435687614459138,1.9322823002,8,0.0,-2.3909892969511826,2.6871462834798123,1.8954318536010493,-0.5931190397084318,1.8955689374100053,-0.5939512773238156,0.0012961888336402343,0.0011102070805012769,1,1,0.9500212039475907,0.9501950465357571
|
||||
5.998775618,40.77849406531105,29.435640563059465,1.9322031074,8,0.0,-6.362889699012486,5.771317980241834,1.5200046390750717,-0.3037209252922325,1.5202165636442204,-0.30454199075769406,0.0016502625617934572,0.0013890588066364144,1,1,3.217829244495583,3.218191051189703
|
||||
6.291277619000001,40.77849488249149,29.43574434627881,1.9321235244,8,0.0,2.398097550322912,5.862063219766571,1.558116785966293,-0.035499603756038,1.5582947442114699,-0.036270126841781214,0.001954096169279394,0.002583766265292999,1,1,0.8403512347031403,0.8405529808997062
|
||||
6.607424353,40.778450458261446,29.435674744619636,1.932043553,8,0.0,-3.4774138028570585,0.928769409965469,1.3480602915948225,0.0046694737388396565,1.3482226946324267,0.003947805859965389,0.0019862082327034994,0.0023873811116096287,1,1,0.8980372080453095,0.8981282765602214
|
||||
6.899374504,40.778440133790106,29.435668338134175,1.9319639376,8,0.0,-4.018226077739326,-0.21775901686796353,1.1333746033131855,-0.00418265291099973,1.1335804216851921,-0.004900190370411062,0.0016906557593848281,0.002220230633270574,1,1,1.0001301525519193,1.0002033406992257
|
||||
7.198795571000001,40.77852488478564,29.435700485986708,1.9318837646,8,0.0,-1.3044219698966109,9.193806584163243,1.0394454999580127,0.349770487967835,1.039626360376334,0.34910097897144843,0.0007721916728045807,0.001109146962168814,1,1,2.02679358787078,2.0271019323145394
|
||||
7.498851923,40.77841089560901,29.43573264031877,1.9318039387,8,0.0,1.4099264172185275,-3.4646490919558746,1.0533581853031693,0.20846927428463133,1.0535834558333512,0.2077954925441418,0.0007736929677820576,0.0010986664007790782,1,1,0.3182975969139356,0.3181766191136394
|
||||
7.799320026,40.7784257938476,29.435819483694267,1.9317252858,8,0.0,8.740923268477044,-1.8102002240427792,1.3281592271312532,0.1362833420823763,1.3283637434330329,0.13565191345750716,0.0008534599508995526,0.0009001733814915865,1,1,2.1473088380314516,2.1471391657050036
|
||||
8.104459811,40.778415921776975,29.435661112099734,1.9316435682,8,0.0,-4.628222778748101,-2.9064936997698227,1.1224363220648934,0.031290733778990054,1.1226261431937599,0.030685373304432176,0.000737683226838156,0.0010062272540820496,1,1,1.4378497140921167,1.4378497820696614
|
||||
8.398217017,40.77844270147452,29.435783044756644,1.9315646579,8,0.0,5.664881236835282,0.06738245835054515,1.2742425761760123,0.03247803347621894,1.2744599219305877,0.031871468186204045,0.003135591174304624,0.0035056708951839315,1,1,0.7207433061948548,0.7206731782014496
|
||||
8.69874909,40.7784014916905,29.43570518292982,1.9314854644,8,0.0,-0.9079256412020169,-4.50895081307888,1.2036530731702477,-0.11414612567104604,1.203853227559426,-0.11472252956399587,0.0020079562424762357,0.0022583891158386746,1,1,0.6131247611783226,0.613039373858275
|
||||
8.998985076,40.77846925735303,29.435771449422585,1.9314062164,8,0.0,4.686044323932888,3.016402206546507,1.312842145151976,-0.016214019136677832,1.3130677250835314,-0.0167941266431737,0.0016580178881156218,0.001978703957828842,1,1,0.6369242172478146,0.636948852497375
|
||||
9.303468345,40.77840654294092,29.43573019892447,1.9313250447,8,0.0,1.2038329557772183,-3.948011295775901,1.3094438956107368,-0.13549106684417392,1.3096548172738265,-0.1360441079611263,0.0034076042152377884,0.0036457418765724493,1,1,0.33584681534987193,0.3357512367668676
|
||||
9.597198627000001,40.77845012184061,29.435749832587,1.931245243,8,0.0,2.8612328750989406,0.8914097382380489,1.3550609400071774,-0.10527720583463347,1.3552641932115346,-0.10580345264495147,0.0036906820369429,0.003840603492673981,1,1,0.10737281424694788,0.1073742488551699
|
||||
9.904545092000001,40.77847322800052,29.435752676305622,1.9311674316,8,0.0,3.1012879413882173,3.457340300749516,1.4052760146588812,-0.0033275181821240535,1.4054939909002093,-0.003856510362266072,0.00612709597181908,0.006324119430450778,1,1,0.3828960412706013,0.3829529491194226
|
||||
10.203752696,40.77848843081386,29.43567908871659,1.9310863647,8,0.0,-3.1106995392589263,5.145607077882566,1.2794737589928482,0.13985753811687124,1.279679964099122,0.13935154730460433,0.0055398201539837155,0.005658038882499412,1,1,1.2932014545151103,1.2933856863682178
|
||||
10.511457429,40.77839577749796,29.435775044768214,1.9310055911,8,0.0,4.989555429290478,-5.143508138552299,1.3798851431219676,-0.003119478764811917,1.380086486891092,-0.0036070280568567537,0.004524803032502834,0.004587239339263981,1,1,1.09169949784561,1.0915305364084564
|
||||
10.803731761,40.778353603249464,29.435775958245696,1.9309281598,8,0.0,5.066671064944688,-9.826942628746584,1.4772878525047912,-0.2620037551887345,1.477497559906792,-0.26249346913653254,0.003781781821593584,0.0038697179559252014,1,1,2.5808356967173065,2.5805649390060865
|
||||
11.103447102,40.7784699729091,29.435688995797555,1.9308494069,8,0.0,-2.2743817524824212,3.095863307349983,1.380748078063429,-0.1757667270990382,1.3809534405673738,-0.17623835010934336,0.0026804311853128307,0.0027378040731610704,1,1,0.7413625750468794,0.7414893220787455
|
||||
11.397169866,40.77842628127675,29.43575771281247,1.9307695585,8,0.0,3.5264534370096423,-1.7560757167663323,1.4347616768862468,-0.21535682080149104,1.4349735484402781,-0.21583028106555885,0.004744460557980069,0.004817895076253644,1,1,0.21665758243710723,0.21659128489949894
|
||||
11.704310488,40.77845885554001,29.43569203598566,1.9306881725,8,0.0,-2.0177408023740764,1.8612835296099077,1.3502340987666999,-0.16460751594726353,1.3504359211689143,-0.16506427007670046,0.004542558330161809,0.004580114412023736,1,1,0.5143372702004643,0.5144301922438641
|
||||
11.996752059,40.778392914077855,29.435716870407507,1.9306085342,8,0.0,0.07868844898014081,-5.4614915527623475,1.3200059006169274,-0.29098840016059857,1.3202139346990642,-0.2914479501155187,0.006504537311783017,0.006551927577643143,1,1,0.6698915941900281,0.6698018403542698
|
||||
12.303790485,40.778438993997355,29.435675499771747,1.9305305764,8,0.0,-3.413667259673556,-0.34433288045947125,1.2095445391888422,-0.2921990048421637,1.2097426121958705,-0.2926425942341155,0.005789231813077581,0.005806107612328787,1,1,0.7909236717658705,0.7909905254871765
|
||||
12.597551967000001,40.77838963950479,29.43577436951176,1.9304503015,8,0.0,4.932553200049194,-5.825130027880204,1.2943599083083042,-0.41815659825741625,1.2945516643931934,-0.41858675641661414,0.004757775282714879,0.004755252790606214,1,1,1.1589363419546408,1.1587784264679828
|
||||
12.899611908,40.778461498526944,29.435752559214073,1.9303711352,8,0.0,3.0914040552869833,2.1547866162734812,1.3345442798223308,-0.3609114904097915,1.3347406168036589,-0.3613420738791471,0.006602708533136826,0.006599029059612293,1,1,0.2589283787204689,0.25895249581958446
|
||||
13.204269853,40.77847990035619,29.435739468277976,1.9302926326,8,0.0,1.9863156011362548,4.198302535776664,1.3486909771497468,-0.26158699027783333,1.3488810480410127,-0.262002731412918,0.0034510197564001995,0.003432829251858301,1,1,0.47002277351590005,0.4700987040404337
|
||||
13.497524760000001,40.7784704570854,29.43564584872411,1.9302130326,8,0.0,-5.916695953958433,3.149632919842207,1.1936867285987633,-0.188838446355667,1.1938799765308492,-0.18925546807839172,0.0022753610670409375,0.0022533844704204875,1,1,2.121746533900164,2.121911896799747
|
||||
13.799442923,40.77838350602374,29.43582852328038,1.9301329982,8,0.0,9.504017784610843,-6.506246353827541,1.3673935369944352,-0.3207557655301183,1.3675808588224103,-0.3211574877993363,0.0005403219925712529,0.0005449866763893905,1,1,3.3180005198855107,3.3177748564563214
|
||||
14.099330745,40.77840997653284,29.435690264283515,1.9300525211,8,0.0,-2.167302871111136,-3.5667119740203974,1.2949310271200596,-0.387162616783243,1.2951129469913902,-0.38755251626752213,0.000379546609366534,0.0003862338783260748,1,1,0.6731910323237051,0.6731809694915135
|
||||
14.403682506,40.77846126093405,29.435725232093937,1.9299747248,8,0.0,0.7845506931328207,2.1284014093087675,1.284807635272426,-0.33670729382374576,1.2849919441108009,-0.3370982201924424,0.0019187676731088495,0.0018986545798445234,1,1,0.14799065210231052,0.1480414786291766
|
||||
14.703696184,40.77837135248899,29.43569286491707,1.9298935955,8,0.0,-1.9477680632734962,-7.855897690899365,1.2210975423293728,-0.4845116443977518,1.2212765374471855,-0.4848917248945724,0.002604267676907347,0.002584837065480901,1,1,1.610458728518727,1.6103728059119753
|
||||
14.997318246,40.778435480409094,29.435770872894107,1.92981475,8,0.0,4.637378298751601,-0.7345148840752378,1.2872305499549659,-0.48937417115683085,1.2874121042160285,-0.48975562580401655,0.004259390295662358,0.004233583090911048,1,1,0.41495411210305017,0.41490505907055164
|
||||
15.299427962000001,40.778386053830225,29.43567407132164,1.9297346174,8,0.0,-3.5342545272596517,-6.2233186482193545,1.1957630658612808,-0.5978317679098708,1.1959388373607278,-0.5982010887744413,0.0012509292940070871,0.0012249223816931743,1,1,1.545935425614968,1.5459020522516007
|
||||
15.599259826,40.778467268323965,29.435672569731906,1.9296551165,8,0.0,-3.6610088054463588,2.79552068952942,1.105396939777569,-0.5347901380485061,1.105567036580592,-0.5351501776782986,0.0002924993409399989,0.0003254132736748636,1,1,1.0894442978168832,1.0895588199850514
|
||||
15.889450347,40.778447704840914,29.435543356974385,3.1537716348,8,0.0,-14.568670280619296,0.6230165981303059,0.8190689043563402,-0.5137124080892453,0.8192389021834987,-0.5140727003071628,0.0015397244381695529,0.0015734256545774463,1,1,8.7455330084459,8.745745078330192
|
||||
16.188684136,40.778420097475035,29.435654302182147,3.1537383581,8,0.0,-5.203090641073263,-2.442783606192825,0.7110203261233935,-0.5482408067673934,0.7111840757340386,-0.5485916131266049,0.0020170202427059218,0.0020409956568362758,1,1,1.3688649267684658,1.3689060674968816
|
||||
16.505404806,40.77840158753957,29.43580057700597,1.9294182801,8,0.0,7.144893032739503,-4.498303419700016,0.824442630854404,-0.6177533631202705,0.8246029713842765,-0.6180964288269912,0.0020191562282143283,0.002035847975857071,1,1,1.8125561070873037,1.8124211162263582
|
||||
16.803234713000002,40.778393398406216,29.435686233855815,1.9293370599,8,0.0,-2.5075374030479067,-5.407706644911563,0.7667183735930246,-0.7006407602433167,0.7668795784060614,-0.7009837972604279,0.0032647755261370494,0.0032870662995406093,1,1,0.8987816989248762,0.8987470547578988
|
||||
17.104228209,40.77841968092528,29.435640571779828,1.9292597648,8,0.0,-6.362160656023981,-2.489040394519866,0.6452246010914019,-0.7310438225302858,0.6453806251472578,-0.731378734884005,0.002848229006762861,0.002861921825417729,1,1,1.8756148382155624,1.8756686263000204
|
||||
17.398067873,40.77848488826989,29.43577638327284,1.9291810788,8,0.0,5.10254028072286,4.752209990064307,0.7199521919844307,-0.6393531544185119,0.7201101226485338,-0.639687867130798,0.004029280496798514,0.004047189272720581,1,1,1.367478625367771,1.3675099744765467
|
||||
17.699307978,40.778403972282184,29.43571793536183,1.9291012154,8,0.0,0.16858797790456023,-4.233482086044883,0.7108475490377526,-0.6984879399245838,0.7110009224469571,-0.6988142635392616,0.001456925188417972,0.0014680179730531169,1,1,0.2951084368860496,0.2950620796757905
|
||||
17.998765231,40.77844936248611,29.435731077862606,1.9290218084,8,0.0,1.278028869618921,0.8070832599155602,0.7201036779701292,-0.6740956792963482,0.7202589030167489,-0.6744226628639327,0.0004105783349529174,0.0004053869667273594,1,1,0.06133524208863037,0.06135091742359344
|
||||
18.303869328,40.77844579850604,29.435588397469377,1.9289410672,8,0.0,-10.76651952278867,0.41131231586864203,0.5365942157264029,-0.656815303833924,0.536744054371463,-0.6571343150244776,0.0009711763818533474,0.000983286217576236,1,1,4.7178890834124605,4.718029349139854
|
||||
18.596647616,40.778441118514294,29.4356832483125,1.928861611,8,0.0,-2.759564095744667,-0.10840633800698447,0.48474886423989555,-0.6481999151334571,0.48489461720137583,-0.6485117729237126,0.0013940965027369199,0.0014025331255790533,1,1,0.39307327851016793,0.3931156935551515
|
||||
18.903651592,40.77848179490511,29.43574167727673,1.9287851117,8,0.0,2.1727909077861303,4.408691541245621,0.5109171262779902,-0.5700925633901963,0.5110644591741226,-0.5704043867046867,0.002559006223510343,0.0025699294640911577,1,1,0.6647677315783008,0.6648203597857142
|
||||
19.204605389,40.77848544116944,29.435666387656877,1.9287033507,8,0.0,-4.182875293296129,4.813608704116825,0.43929716776090555,-0.48817398506800835,0.43944012416561806,-0.4884783475382975,0.0024919762199386367,0.002498036936015687,1,1,1.422739566477385,1.4228614912676851
|
||||
19.48954521,40.77841558948023,29.43577896778933,3.1533843315,8,0.0,5.320720957542818,-2.943394664984806,0.512698282957167,-0.5249705891252961,0.5128429548281093,-0.5252753137334745,0.0035409142683822926,0.003549332335463163,1,1,0.9810264828366717,0.980942011729803
|
||||
19.805143326,40.77845439544215,29.435643950705085,1.9285458575,8,0.0,-6.076921069673284,1.3659935390815496,0.41506647988059914,-0.49703839890388374,0.4152068085968427,-0.4973362172872604,0.00022086817532908896,0.00022331671372427753,1,1,1.624802222255786,1.6248943692244953
|
||||
20.099132665,40.778392994974915,29.435826501042683,1.928466214,8,0.0,9.333306507691162,-5.4525020839975085,0.5452617409967713,-0.569183575036231,0.5453994002301439,-0.5694754372631743,0.0003095536630178559,0.0003141350681540044,1,1,3.3737804319673477,3.3736272137899985
|
||||
20.39872323,40.778385289138086,29.43577209712901,1.9283873504,8,0.0,4.740727243140018,-6.308236752175739,0.6057362598133716,-0.6515924941084296,0.6058751918531879,-0.6518845032680808,0.0008985416832037437,0.0009100390063112218,1,1,1.3533573141032744,1.3532402489820166
|
||||
20.703805697,40.778418885225776,29.435751386721645,1.9283094729,8,0.0,2.992428538497479,-2.5774046570431577,0.6395804338840099,-0.6788456058693447,0.6397163723651451,-0.6791313270266783,0.0006424359654351859,0.000642096582272869,1,1,0.28475330909299373,0.2847052526725164
|
||||
21.003317045,40.77837444819497,29.435684850341598,1.9282283721,8,0.0,-2.624329368005439,-7.512120489685406,0.5938196644487562,-0.7742288071232942,0.5939530502800178,-0.7745094814464768,0.001459933306592803,0.0014577453552516476,1,1,1.409852930658532,1.4097986380941039
|
||||
21.304213061,40.77846176358296,29.435780409186748,1.9281509736,8,0.0,5.44239465724865,2.1842223420738742,0.6608980701750738,-0.733494339076973,0.6610322439366649,-0.7337744142666901,0.0005623674110162538,0.0005669429816336292,1,1,1.0309426036859377,1.0309327252686171
|
||||
21.604525116,40.778433079306254,29.43580411919713,1.928070836,8,0.0,7.443908327367255,-1.0011541708102532,0.7532915223710503,-0.7371155645656475,0.7534236592377782,-0.7373904514672628,0.0006200956114363849,0.000623482404225817,1,1,1.641627159489346,1.6415591932413012
|
||||
21.896475564,40.77847038889573,29.435700543912144,1.9279914945,8,0.0,-1.2995331877709904,3.142058233141158,0.7258112106735606,-0.6851224642645101,0.7259436916839335,-0.6853969373105855,0.002295722954815998,0.0022932751794607752,1,1,0.48247711727265763,0.4825444457764982
|
||||
22.198789579,40.77847484576242,29.43568653690301,1.9279124111,8,0.0,-2.4819522337666493,3.6369919250526506,0.6831515124774256,-0.6279209703637281,0.6832812932963817,-0.6281900562522674,0.002950175932005176,0.002946466810896041,1,1,0.7793808595923156,0.7794630347706514
|
||||
22.498106515,40.77853499164038,29.435729194666354,3.1530701562,8,0.0,1.1190550131527595,10.316169026421367,0.6889800868949564,-0.4849381022875284,0.6891105172198375,-0.4852070007917427,0.0047729799931911,0.004767551245386945,1,1,2.651916173382549,2.6520438410091853
|
||||
22.789179811,40.7785474061554,29.435737203806404,3.1530380703,8,0.0,1.7951556078462387,11.69479645547559,0.7032349592353627,-0.3278637384322022,0.7033627384390675,-0.32812665025253085,0.0045731871816038225,0.004566950718982115,1,1,3.320376481558726,3.320509682669859
|
||||
23.105511829,40.778489318122894,29.435684464755486,1.9276736208,8,0.0,-2.6568745725517746,5.244142241188377,0.6602418502342193,-0.2569162473187216,0.6603673661626104,-0.2571743754223159,0.004072384077866279,0.004066199973833729,1,1,1.08868254115449,1.0887774398359287
|
||||
23.405093508,40.77850485247412,29.43562469226881,1.9275954549,8,0.0,-7.702640639976041,6.96922970825946,0.5547056827245939,-0.16595886161797796,0.5548311348501913,-0.16621668175052723,0.0057742163319370295,0.00576587846913758,1,1,3.649286755869823,3.6494461024484965
|
||||
23.688622055,40.77851883029636,29.435627299627804,3.1529439628,8,0.0,-7.482535711153707,8.521461458843644,0.4544394943309547,-0.05804644658694395,0.45456180251852335,-0.058299015553611805,0.004798564041217052,0.0047903584878619485,1,1,3.9731323844308224,3.97330179735335
|
||||
23.988835266,40.778459195307526,29.43562346329335,3.1529101602,8,0.0,-7.80639143295803,1.899018425579606,0.35255257555987884,-0.03396249258900802,0.3526751009955623,-0.03421516996025734,0.006440865820138869,0.00643021887580011,1,1,2.520325178365437,2.520420559313978
|
||||
24.289281552,40.778421983517376,29.435672408942665,3.1528790175,8,0.0,-3.674584526359479,-2.233340222572947,0.303548418015348,-0.06067436156612256,0.3036680561949191,-0.06092214837704821,0.005393852412208911,0.005383780273546159,1,1,0.6858819944199931,0.6858924580969137
|
||||
24.589480088000002,40.77843092027631,29.43572904206966,3.1528463199,8,0.0,1.1061751115562624,-1.240917301204564,0.3132160765614209,-0.074820592423441,0.3133335229064458,-0.07506432277394279,0.004316583795740214,0.004308065648903456,1,1,0.05379673902945154,0.05377705586175547
|
||||
24.904696193,40.778470152075855,29.435770671775618,1.927199287,8,0.0,4.620398218162188,3.1157608012826534,0.36447652071077186,-0.037006977273441155,0.3645945795448769,-0.03725059615532464,0.005884600852465576,0.00587346713381682,1,1,0.8875402650130578,0.887538331577631
|
||||
25.188568232,40.7784552181851,29.43576479625052,3.1527816292,8,0.0,4.124409333384177,1.4573574928226078,0.40871090498389256,-0.01950167131552572,0.40882666954117575,-0.01974095689642541,0.004689826187564503,0.004680087090579917,1,1,0.5542602637659799,0.5542448323316905
|
||||
25.495245782,40.77846700662629,29.43577216413218,3.1527546903,8,0.0,4.746377589974405,2.7664598763268793,0.45919400612582084,0.01275822256577087,0.45931039380522803,0.012518907222780689,0.00614363670020827,0.006131060379665521,1,1,0.843704334231307,0.8436977122905652
|
||||
25.789386637,40.77845980842987,29.435699744363877,3.152723329,8,0.0,-1.3670282722814138,1.9671014449712945,0.43816912422250487,0.03513639921689238,0.4382832378658019,0.034901521775209096,0.002158797096285039,0.002147182688575623,1,1,0.20362394774938986,0.20365956152606932
|
||||
26.089111166,40.778520558277,29.435648212816318,3.1526873885,8,0.0,-5.717123855524338,8.71335149446529,0.3681477023901444,0.13339158006213792,0.36825959936212255,0.13316059983855888,0.001027066014137988,0.0010171501419187613,1,1,3.019768074531568,3.0199076663221405
|
||||
26.98855216,40.77840645635859,29.43581243934844,3.1525936736,8,0.0,8.146267961371919,-3.957621849455996,0.45577614200888894,0.08761171671453838,0.4558892972968317,0.08737968843238648,0.003843194943487394,0.00383040866237195,1,1,2.532015083205556,2.5319090700989633
|
||||
28.791236058,40.77845478498913,29.435714742206102,3.1524019849,8,0.0,-0.10096645154676422,1.4092500933092624,0.4495802706832877,0.10226386206372917,0.44969298597764645,0.10203373412436638,0.003926531762422649,0.003916408041050182,1,1,0.04973085636336654,0.04974900702271084
|
||||
29.091032879,40.77850718135098,29.43574302218089,3.1523720781,8,0.0,2.2863217860975684,7.227846965930563,0.46985065253880337,0.1804992962480815,0.4699619057711376,0.1802724815891812,0.003135021343319541,0.0031267431230279576,1,1,1.2442636512651037,1.2443212470124836
|
||||
29.390986357,40.778451705223326,29.435760078650773,3.1523409775,8,0.0,3.726167350413705,1.067244182732038,0.5055248881673797,0.19016160640163723,0.5056360676803956,0.1899355174900661,0.0042012764131519435,0.0041904088597882385,1,1,0.39638978800391234,0.3963726091399196
|
||||
29.690447683,40.77838054079751,29.43580318994049,3.1523105137,8,0.0,7.365469723704919,-6.83553605432756,0.5797136277229494,0.11463757371309988,0.5798234490680813,0.11441445144383873,0.003391522532996525,0.003382974464422411,1,1,2.7748896530684264,2.7747651337664503
|
||||
29.990430098,40.7784806282059,29.435678200640222,3.1522812027,8,0.0,-3.1856679704567368,4.279130393794931,0.5394546942753924,0.15889908623324459,0.5395642518767149,0.15867661935901273,0.004399518166844914,0.004388306890395009,1,1,0.8908641115791536,0.8909354157358198
|
||||
30.29026879,40.77847173400963,29.435699477698794,3.152246298,8,0.0,-1.389538894680663,3.2914326477171936,0.5189771095813551,0.19191332215361795,0.5190849578888715,0.19169412270562528,0.0035769496006852154,0.0035673142474470384,1,1,0.3503042004710301,0.35034997684557395
|
||||
30.590241892,40.77852767288516,29.435681348423824,3.1522176112,8,0.0,-2.9199418572904947,9.503424463264093,0.482901767615931,0.2889865436604755,0.48300799722475024,0.28877036142561496,0.002816457477843339,0.002808664691239217,1,1,2.3428362726463923,2.3429528225276726
|
||||
30.890283028,40.77830621187653,29.43583367404585,3.1521827837,8,0.0,9.938838186663398,-15.089731914991475,0.5811481308157215,0.130252556343775,0.5812544044154325,0.1300368259315425,0.0037439434982362856,0.0037341344830351016,1,1,8.435327875249783,8.435106962570167
|
||||
31.189484975,40.77851693985642,29.435735691576642,3.1521574434,8,0.0,1.66749974840467,8.311525211168814,0.5923094616330152,0.21386518752011324,0.5924143019333309,0.21365248708889717,0.0029856550567152543,0.002977478307713323,1,1,1.5246596340369925,1.5247293131456228
|
||||
31.492717318,40.77847817539459,29.43566637203108,3.152118321,8,0.0,-4.1841948202399735,4.006747106144281,0.5436653682020193,0.25222062895936564,0.5437698942260809,0.25200859177565194,0.0038654710063625564,0.0038547090421152653,1,1,1.1347574642423754,1.1348295716476433
|
||||
31.789832543,40.778464183377565,29.435751268025005,3.1520906317,8,0.0,2.982406579488892,2.4529382347891127,0.5682636902361993,0.2742730622504425,0.5683668080177605,0.27406403498877807,0.0003289995517294071,0.00032023296969268926,1,1,0.3200508341096145,0.32005325509524607
|
||||
32.08921806399999,40.77839931234905,29.43570152482604,3.152059307,8,0.0,-1.2167294101219024,-4.75096582456597,0.5504271811417407,0.2244080296931769,0.5505289057935536,0.22420153579265067,0.00046687534537132616,0.0004735364006112006,1,1,0.6734692735603566,0.6734359726766942
|
||||
32.389079372,40.77853403537212,29.43567214874932,3.1520316164,8,0.0,-3.696542878316264,10.209976628594383,0.508378968247182,0.32256199050895373,0.5084803003592017,0.3223564287904079,0.00040812003318976977,0.0003975113712941858,1,1,2.8546651308247086,2.854788155388801
|
||||
32.689234537999994,40.77845748406489,29.43570441189585,3.1520001,8,0.0,-0.9730126892821254,1.7089815160516795,0.4938589543534388,0.3360451723003741,0.4939588801016447,0.33584224371201193,0.0009201889193596452,0.0009272305790837039,1,1,0.1211227410784695,0.12114603573059414
|
||||
32.988796808,40.778429009080725,29.43580733985671,3.1519684314,8,0.0,7.715784960167613,-1.4531509221538348,0.5640336017854759,0.3187855809823013,0.5641334922543677,0.3185832664660109,0.003019450908408543,0.00302901991273402,1,1,1.9374547961377138,1.9373865047706886
|
||||
33.288705283,40.77841347819669,29.435756989134195,3.151934885,8,0.0,3.46536385367839,-3.1778530163213263,0.5919640242130506,0.28538109341327933,0.592062672586071,0.28518133514964733,0.003846047065114764,0.00385367404363236,1,1,0.5722493769365404,0.5721974445730194
|
||||
33.589466998999995,40.7784971811198,29.435725652121423,3.1519046542,8,0.0,0.8200074022093626,6.117324696746091,0.5941554201336592,0.3405883303391348,0.5942528402326875,0.3403910142898404,0.0037699632281937745,0.003775703064866895,1,1,0.7557314191272102,0.7557813277077342
|
||||
33.889093605999996,40.77843963036041,29.4357532678266,3.1518722633,8,0.0,3.151223510334609,-0.27366511648855135,0.6183158945277488,0.33482970085205255,0.6184130658738646,0.3346331500265064,0.005781265703946062,0.005788867369062856,1,1,0.24242510385271682,0.24240174882729895
|
||||
34.189172717999995,40.77839664859904,29.435829627894257,3.1518413013,8,0.0,9.597263377890203,-5.046768149981182,0.702472262926829,0.2848063305013632,0.7025684537071444,0.2846120225423048,0.003271672331153593,0.003277748522539543,1,1,3.528234891294071,3.528125754021099
|
||||
34.519418107999996,40.77843260845827,29.43574534793169,3.151812331,8,0.0,2.482655619834837,-1.0534449895310352,0.7189834533240229,0.2725093470491507,0.7190786890191839,0.27231703073594865,0.0014732252479954012,0.0014782534926413946,1,1,0.15317041140680845,0.15314664411056608
|
||||
34.788641911,40.77847580469088,29.435709909159584,3.1517798705,8,0.0,-0.5089540597169641,3.7434801747370026,0.7077125267166297,0.30415940262579105,0.7078072902279836,0.30396809306106015,0.0031875953341820957,0.0031939761434603346,1,1,0.32112670756029277,0.3211648429555226
|
||||
35.088461036,40.77844618534203,29.435684148218805,3.151746616,8,0.0,-2.6835971414969917,0.45426296734327076,0.6767418757142647,0.30551732524573944,0.676835488713545,0.3053281639216091,0.0023907578350884635,0.0023955307502266598,1,1,0.41232435282269075,0.4123485802845482
|
||||
35.389065548,40.77846639443702,29.435708364600067,3.1517170355,8,0.0,-0.6393400640054593,2.6984749922373372,0.6648440848621555,0.32699430342788427,0.6649373323617402,0.32680594710784344,0.0013151791203568249,0.001321360102105644,1,1,0.1890146693348287,0.18904371543686402
|
||||
35.689034631,40.77841348884622,29.43579812116226,3.1516869564,8,0.0,6.937578458953348,-3.1766679505364652,0.7211446966737967,0.295805233269569,0.7212369794506581,0.29561898206499787,0.00016028150491523405,0.00015527221702174663,1,1,1.6814099337448014,1.6813389289011162
|
||||
35.989158421,40.77843449124595,29.435705884029797,3.1516520616,8,0.0,-0.8487409273585799,-0.8443624852179418,0.70717530084702,0.28576880113765785,0.7072672612702655,0.2855832214713124,0.0012232682338004415,0.001216662983849528,1,1,0.11710579550978477,0.11710676336898879
|
||||
36.289071254,40.778396311670896,29.435770356307543,3.1516203205,8,0.0,4.593772672584688,-5.084188689445081,0.7414872980874218,0.23877170752591814,0.7415782671157458,0.23858816381856687,0.0017881061088838568,0.0017831417213109541,1,1,1.1806901105109315,1.1806204679422339
|
||||
36.588502766999994,40.77856277171582,29.43562244198484,3.151596156,8,0.0,-7.8925942248663175,13.401140243488873,0.6658769199526419,0.35297075964255253,0.6659667548477043,0.35278931804658475,0.0018245236762368018,0.0018204743099507063,1,1,6.513507320087543,6.513670376186222
|
||||
36.889472825999995,40.7785234048922,29.435720701083394,3.1515629112,8,0.0,0.40205933882379474,9.02946486167766,0.6636156277229753,0.4276387413597465,0.6637051143055904,0.4274581653054903,0.0028731204964527863,0.0028677278304059094,1,1,1.6725682732462919,1.672640121099107
|
||||
37.189041765,40.77839209521295,29.435724348066042,3.1515306139,8,0.0,0.7099250979840275,-5.552426162177485,0.6640082330991359,0.3765835217226624,0.6640967176669136,0.37640484391217194,0.0025824540987723936,0.0025779787644835237,1,1,0.7934677072617042,0.7934196029826617
|
||||
37.48903891,40.77842857909295,29.435807622333634,3.1515012298,8,0.0,7.739630668868682,-1.500900878661601,0.7244881837749758,0.3607368238684412,0.7245765078607175,0.3605588076318269,0.0035904620470297664,0.003584765893735309,1,1,1.8719783130975767,1.8719182223210133
|
||||
37.789058585,40.77849467752307,29.43568726294625,3.1514701721,8,0.0,-2.4206616684397018,5.839301559768012,0.6978104338893248,0.40671168204139246,0.6978977037546966,0.4065356507133606,0.0030982733196280514,0.0030936032813902335,1,1,1.0204460063149354,1.0205090214991113
|
||||
38.089290760999994,40.77842081424149,29.43570049816451,3.1514372958,8,0.0,-1.3033960004446346,-2.36318867063583,0.680967236725019,0.3836321850106464,0.6810535877737369,0.3834578914517198,0.002532667387636316,0.0025290230617592835,1,1,0.31375979136341803,0.3137506810394633
|
||||
38.389151584,40.77838485614874,29.435684929879628,3.1514080253,8,0.0,-2.6176146476997397,-6.356321111895532,0.6534458641738734,0.3279390382502334,0.653531809165179,0.32776541948637605,0.003457715403424592,0.003452957850102941,1,1,1.3980449560265749,1.3980130958350656
|
||||
38.688437621,40.778544280086706,29.435642843626034,3.151381964,8,0.0,-6.170368238889594,11.347650038066554,0.5969364033208869,0.41829238369503813,0.5970213174415843,0.4181206488212455,0.0009849385135798211,0.0009809353380190516,1,1,4.363849887667082,4.363976528051004
|
||||
38.989425704,40.77847662372459,29.435699974168486,3.1513527253,8,0.0,-1.3476286859906068,3.8344336701659274,0.5809094045543681,0.4460953810590305,0.5809939791463431,0.4459243714487798,0.0011014437580494222,0.0011060294189839592,1,1,0.3945347197021058,0.39457275708699663
|
||||
39.288997011999996,40.77857147337498,29.435659488911845,3.1513196867,8,0.0,-4.765235212647235,14.367453603353926,0.5373289037727571,0.5584777135814261,0.5374124673840623,0.5583086363231811,0.0026979510923852753,0.0027015112340576884,1,1,5.326194742964229,5.326332441924189
|
||||
39.589035884,40.77841360346507,29.435749945752523,3.151282704,8,0.0,2.870787459744625,-3.1639422641517823,0.5562483423743297,0.5286295239709135,0.5563311097440228,0.5284620256175906,0.0030547740972992586,0.003057715471538753,1,1,0.5027493526669368,0.502707498236966
|
||||
39.890092210999995,40.77842822243242,29.435717344752625,3.151254586,8,0.0,0.1187308698390127,-1.540511941741124,0.5526713718515884,0.5122253488130089,0.5527537983242496,0.5120585790287513,0.00505820695426734,0.005062189406618769,1,1,0.10190630674608289,0.10189347127799928
|
||||
40.188719766,40.77850745508881,29.435678007934722,3.1512270692,8,0.0,-3.2019341554928986,7.2582457896876456,0.5227558019971328,0.565426336986724,0.522837332881515,0.565261264529063,0.0046838829188861454,0.004686975590054647,1,1,1.5157049329916414,1.5157769163255357
|
||||
40.489483291,40.77848047444202,29.435614248785605,3.1511900228,8,0.0,-8.584243031252102,4.262059263078008,0.4505586760624504,0.594457582621165,0.45063976201748973,0.5942932369215881,0.006632989347304594,0.006636966520774187,1,1,3.2767861174863837,3.2768667303009424
|
||||
40.789169584,40.77848148514652,29.43564955084615,3.1511631358,8,0.0,-5.604175760775092,4.374294766507188,0.403023238593205,0.623794298048226,0.40310339483147895,0.6236315707834662,0.005797464895540634,0.005800721602972291,1,1,1.6316486294922903,1.6317112610908182
|
||||
41.089158104999996,40.77845621614109,29.435792343318337,3.1511325092,8,0.0,6.449829982784258,1.568181794823087,0.4501935172903327,0.6310826149223281,0.45027303677838765,0.6309213759430895,0.0047742668832386325,0.004776825671922571,1,1,1.330840725964879,1.3308128109841928
|
||||
41.389152368,40.778492369758204,29.435616998890254,3.1511012855,8,0.0,-8.35208804978342,5.583029442209614,0.38199182296033146,0.6690262736049651,0.38207086769142773,0.6688658118486337,0.006560441240243955,0.0065637919277475,1,1,3.322803855338794,3.3228897550267575
|
||||
41.688436091999996,40.778463014674855,29.43582452074224,3.1510730524,8,0.0,9.166127147653347,2.3231593048318557,0.44957867847984223,0.6815933599258275,0.4496571061251975,0.6814343957362984,0.0035411468066172402,0.003543753547405356,1,1,2.8277450763583714,2.8277070985577453
|
||||
41.989274132,40.77839927942781,29.435697406234564,3.1510361564,8,0.0,-1.5644058376493,-4.754621651112459,0.43419864435492556,0.6405667065277214,0.4342767423746373,0.6404083629274774,0.0023018866888163676,0.0023052417574324,1,1,0.801769342964071,0.8017421964238649
|
||||
42.289216724,40.778383842869104,29.435677867454565,3.151007215,8,0.0,-3.2137989142234384,-6.468845202527224,0.40652339774835344,0.5872464017451702,0.4066006995657694,0.5870894543558165,0.0001446420701696724,0.00014706447563296972,1,1,1.5998018653173813,1.5997723295383195
|
||||
42.589278983999996,40.77836440326905,29.43573746996272,3.1509753958,8,0.0,1.8176284887594307,-8.627606001208388,0.4171737931916517,0.5186648976763812,0.4172504143614158,0.5185092045817482,0.00015111081708547752,0.00015259832786245048,1,1,1.9573811162785044,1.9573091143807142
|
||||
42.888379316999995,40.778395206642365,29.43576750321833,3.1509444597,8,0.0,4.352925379018789,-5.206901841509025,0.44660005937864783,0.47628267151583453,0.4466764097268055,0.47612765381183464,0.0017580402731141053,0.0017610384740167494,1,1,1.283729220491972,1.2836677957579614
|
||||
43.189476981,40.77843151011311,29.435715415307047,3.1509176939,8,0.0,-0.044145794640948526,-1.1754162263793966,0.44296469518387904,0.4641817345150891,0.4430403485957628,0.4640280429850043,0.002470076905079742,0.002472371178831094,1,1,0.069239324860251,0.06923064867870178
|
||||
43.488982043,40.77837912681085,29.435832522597195,3.1508855096,8,0.0,9.841626206551629,-6.99255586866955,0.5123593613683011,0.40976248985634195,0.5124348411705794,0.4096094206060161,0.004133627941196508,0.004136636336848506,1,1,4.403817586015278,4.403715287095002
|
||||
43.789007518999995,40.778420510687354,29.435720782382912,3.150854447,8,0.0,0.40892296439272946,-2.3968983485555277,0.5115837395810462,0.38946595527435507,0.5116585292527143,0.38931416923329065,0.004079503278534705,0.004081936105688747,1,1,0.17538175455475608,0.17536325000023043
|
||||
44.088936503999996,40.778386871560095,29.43570977834195,3.1508201097,8,0.0,-0.5199978864231518,-6.132510877364868,0.5040510033251842,0.3426059488698544,0.5041251610510802,0.34245533810570594,0.0027172121798698704,0.002719146503655442,1,1,0.9831724382552486,0.9831340159759019
|
||||
44.388469437999994,40.77842643323763,29.435773276811712,3.1507928274,8,0.0,4.840308775758832,-1.7391997760532887,0.5354708148805365,0.32763860465990996,0.5355446926430047,0.3274886925951197,0.0013822851328722874,0.0013850401511079308,1,1,0.7708564494916629,0.7708193401116507
|
||||
44.689476412,40.77850936600729,29.43573170913787,3.1507649904,8,0.0,1.3313175796609438,7.470452006220507,0.5411778779531204,0.37836662063117277,0.5412511304123092,0.378217999862926,0.001472931104832785,0.0014749356729280027,1,1,1.1562773802632849,1.1563206867229785
|
||||
44.98923799,40.77846204671222,29.435682460689584,3.1507339341,8,0.0,-2.8260514128076792,2.2156622812465696,0.517092706183259,0.39127263298217496,0.5171655966408826,0.3911247118595074,0.0030242748049079155,0.0030267601092917873,1,1,0.4818156829911611,0.4818455921543676
|
||||
45.289042701999996,40.77851574808595,29.43571869322883,3.1507032371,8,0.0,0.23256394348260423,8.179179359317104,0.5151033073285057,0.4458412541509376,0.5151755640915782,0.44569462354752243,0.0005042807582479468,0.0005056401409132652,1,1,1.3505867070403084,1.3506393114992454
|
||||
45.588457055,40.77855466082285,29.43570873672361,3.1506752891,8,0.0,-0.6079259836012765,12.50042439867868,0.5071869093908011,0.5296666966343555,0.5072585609453275,0.5295213312402738,0.0007785698317766531,0.000776781508039605,1,1,3.2743139536158994,3.2743982213724636
|
||||
45.88948310999999,40.77846749861502,29.435676856842594,3.1506431774,8,0.0,-3.299106961235212,2.821094256075986,0.4804982740533065,0.54558797300944,0.48056956119828387,0.5454433167197551,0.0021827090653930054,0.0021804819855639,1,1,0.6365627866861124,0.6365972402386906
|
||||
46.18897381199999,40.778472615301645,29.435685351624226,3.1506124971,8,0.0,-2.582009106447514,3.389300118548075,0.4591833203006629,0.5650751030029902,0.45925397801471096,0.564931626971344,0.0024881918007127724,0.0024864518032322396,1,1,0.516296378974824,0.5163302853049998
|
||||
46.528340869,40.778522544888894,29.435713271527916,3.1505855212,8,0.0,-0.22511539244723036,8.933961806333802,0.4544378877456514,0.6221597327852312,0.454508004825547,0.6220173861354642,0.0022012407331015622,0.002199836557802663,1,1,1.5733604194973514,1.5734172155347326
|
||||
46.788909999,40.778482598251536,29.435708617662318,3.1505525704,8,0.0,-0.6179773459557099,4.497902570930634,0.44705999897466137,0.6485037742487425,0.4471297564931774,0.6483621909138297,0.0008494968920119827,0.0008475240023806432,1,1,0.37511798001351165,0.3751479485358046
|
||||
47.088456515999994,40.77848613620273,29.435690009020348,3.150518354,8,0.0,-2.1888487508801027,4.890791035035629,0.4290640875286167,0.6770308770656803,0.42913325675079783,0.6768904118153958,0.00039488588109202593,0.00039343067039814255,1,1,0.6493895089545341,0.6494293624559876
|
||||
47.389460519,40.77845909100149,29.43570294696719,3.1504897096,8,0.0,-1.096676473609267,1.887431244401095,0.41866368672091275,0.6852450811642423,0.4187325350750886,0.6851052943619248,0.0016164122410725274,0.0016143785345329592,1,1,0.1161081762249808,0.1161233417156567
|
||||
47.68891571699999,40.7784548420788,29.43569586171369,3.1504563556,8,0.0,-1.6947872275182096,1.415590073522819,0.4043976473293777,0.6900634499473134,0.40446592959329586,0.68992473651786,0.0020673235275179016,0.0020658587117895802,1,1,0.17218511950890422,0.17220008658878078
|
||||
47.989178843999994,40.778367807314424,29.43571174281143,3.1504267758,8,0.0,-0.3541646287168365,-8.249588249007873,0.3993264874807434,0.6309527200999987,0.39939446718186716,0.63081456761681,0.0033906120390614913,0.0033887986464403164,1,1,1.7971455970708736,1.7970940650165819
|
||||
48.289088385999996,40.778459236464506,29.435720899428716,3.1503993491,8,0.0,0.4188032969235828,1.9035847887802273,0.3994379530512278,0.6393179200212911,0.39950538682376346,0.6391808460936141,0.0005069890818849865,0.0005052277875937211,1,1,0.03601697593981743,0.036024688857122136
|
||||
48.588894419999995,40.77847771330894,29.435758261300773,3.1503703417,8,0.0,3.5727520386928755,3.955432345747584,0.4205009951931192,0.6609636601422658,0.4205679552325267,0.6608276052862486,0.000918700813770667,0.0009197336129746143,1,1,0.6059544159356771,0.6059592568987205
|
||||
48.888411078,40.778397856635124,29.43572250815144,3.1503355413,8,0.0,0.5546061724710648,-4.912622392046743,0.4213608901200333,0.6247969922281684,0.421427545869866,0.6246615582795894,0.0025529541412295143,0.002554457093047768,1,1,0.6912763969229734,0.6912419733566526
|
||||
49.189458052,40.778425929044644,29.43585258947234,3.150305858,8,0.0,11.535590816750615,-1.7951828165433363,0.4942215169820833,0.6091906308505514,0.4942877983872557,0.6090561558154722,0.0029182819724882124,0.0029195650897654852,1,1,4.564917073473157,4.564849317141567
|
||||
49.544478805,40.778583411761055,29.43567415004696,3.1502778576,8,0.0,-3.527598381178188,15.693206271253098,0.46799287920146027,0.7059828256861668,0.4680586669329136,0.7058493606790878,0.0025326527340624183,0.0025336709780089724,1,1,5.639414831277638,5.639524095144821
|
||||
49.789119776999996,40.77836850203985,29.43571267769131,3.1502433714,8,0.0,-0.27524544946941665,-8.172439254077354,0.46320455769602514,0.6493347384121521,0.46326999457237905,0.6492019052042115,0.001417116874596439,0.0014184818097576898,1,1,1.7724721701488144,1.7724229177644328
|
||||
50.088347637999995,40.77850879216929,29.435754958362686,3.1502210623,8,0.0,3.293928880689689,7.4067281213338125,0.48141554016831245,0.692213260436205,0.4814805450660817,0.6920814002259986,0.000747467569438347,0.0007485878925340368,1,1,1.3030086774340173,1.303035265284717
|
||||
50.38930668,40.77831894136932,29.43575492361996,3.1501846712,8,0.0,3.2910054005232827,-13.676132449502514,0.4994729884175991,0.6015605733114548,0.4995377060662382,0.6014292492779388,0.0023178182968544765,0.0023192626040275284,1,1,4.87397180138497,4.8738742471964835
|
||||
50.682736385999995,40.77847555660197,29.435748277526322,3.1501545248,8,0.0,2.7299594002395438,3.7159304796551456,0.5136593166239424,0.6211302067698041,0.513723596057227,0.6209998222964438,0.0008798016112762864,0.0008809861120924296,1,1,0.39432066362465856,0.39432847754683453
|
||||
50.988895772,40.778474767531506,29.435715184792926,3.1501276603,8,0.0,-0.06360490303694241,3.628303994470073,0.5100419783206097,0.6398119669409401,0.5101059524635513,0.639682205506809,0.0006445576689351272,0.0006436097582514585,1,1,0.21307203227848018,0.21309216759247934
|
||||
51.288892747,40.77862845257734,29.43571409270456,3.1500987602,8,0.0,-0.15579454438784104,20.694971458642705,0.5058218672887481,0.7641135502632229,0.5058853756682585,0.7639848242416414,0.0010849059784090072,0.0010860076727804353,1,1,8.960344518706924,8.960463170359592
|
||||
51.589470911999996,40.77849634891749,29.435746141875768,3.1500675006,8,0.0,2.549675004196942,6.0249093326989716,0.5186246316500076,0.7965359089562554,0.5186877282050194,0.7964080792634505,0.0017432980192758599,0.0017441627353302004,1,1,0.7655001841355297,0.7655209656836218
|
||||
51.889344689999994,40.77844312178997,29.43575803189796,3.1500364461,8,0.0,3.55338855817786,0.11405701786074124,0.5375523133632409,0.7923383176549832,0.537615129048281,0.792211101468419,0.0032529921647594198,0.0032541400174332684,1,1,0.34110480628344636,0.34108714656467104
|
||||
52.188994392999994,40.77846709768193,29.435692132687723,3.150005285,8,0.0,-2.0095773268321695,2.7765703232075416,0.5217605039063179,0.8044230489178009,0.521822861696319,0.8042967040752479,0.003201407599438308,0.003202285443732827,1,1,0.32056984490978946,0.3205925477548202
|
||||
52.500369416,40.77838558987141,29.4356907790631,3.1499705735,8,0.0,-2.1238478449799927,-6.2748416413330075,0.5054546173670806,0.7615314852163841,0.5055165365723016,0.7614059119321103,0.0028240608504063,0.0028247459778061143,1,1,1.366025834864739,1.365997899897803
|
||||
52.788839038999996,40.77848304207293,29.435725421966605,3.1499463836,8,0.0,0.8005787731505909,4.547188788312728,0.5072487012774487,0.7843469176286375,0.5073103171227783,0.7842219956632956,0.004185369680612269,0.004186288626095159,1,1,0.3218839249200345,0.3219037776114476
|
||||
53.089049566999996,40.77835668393341,29.435764720828086,3.1499126699,8,0.0,4.118048537928684,-9.48483441732261,0.5292629959888994,0.7227847704561404,0.5293242307936634,0.7226606022352876,0.0026297306645513044,0.0026304441521184975,1,1,2.813919672814271,2.813846645444994
|
||||
53.389416254,40.77843374365812,29.435622179734068,3.1498824506,8,0.0,-7.91474773585865,-0.927377655623018,0.4780327273591524,0.7129957570334993,0.4780936037004535,0.7128721749344692,0.0010593573386951034,0.0010601896428828988,1,1,2.6216320966042903,2.6216601469340346
|
||||
53.689334155,40.77841248189129,29.435734064256145,3.1498522767,8,0.0,1.5301299441908693,-3.2884930125467196,0.48437549286579895,0.6892524957957381,0.48443596667032296,0.6891296997503046,0.0011370071439555898,0.0011377419324195626,1,1,0.395929714394596,0.395903128347619
|
||||
53.988829366,40.778425240891124,29.43567921890042,3.1498244633,8,0.0,-3.099712848258644,-1.8716103448138173,0.4628673051047583,0.6741831416054822,0.462927476885551,0.6740609016476422,0.0024822363524000845,0.002483206485949547,1,1,0.6073216260757804,0.6073232087679803
|
||||
54.289017332,40.77842563289188,29.43566031330914,3.1497927025,8,0.0,-4.695653057607059,-1.8280779672187895,0.4320416800367871,0.6594962040869236,0.4321013965409461,0.6593747485148919,0.002795259625405041,0.0027960265872711467,1,1,1.095181182532732,1.0951898555756638
|
||||
54.588827548999994,40.778310098330316,29.435789517188933,3.1497580674,8,0.0,6.211272289715472,-14.65814674383391,0.46639560404368324,0.5701581475245555,0.4664549816911347,0.5700373666602706,0.0026063264853285776,0.0026069477060128798,1,1,6.4194918228391815,6.419384263535009
|
||||
54.889044037999994,40.778467922189854,29.435752619498523,3.1497358072,8,0.0,3.0964927453588573,2.868131996099033,0.4819398716588996,0.5834889462678448,0.48199899656627126,0.5833687621290137,0.0038927139571911834,0.0038935317679883678,1,1,0.365985212981783,0.36598633712225676
|
||||
55.189520755,40.77849105765125,29.435780672191903,3.1497074617,8,0.0,5.4645941689205415,5.437317758167805,0.5112410436457705,0.6114968258008093,0.5112998290760169,0.6113774198247155,0.0033958653744033816,0.0033965234908078824,1,1,1.4160682245261063,1.4160730036896498
|
||||
55.488833946,40.778494613428,29.435786061973417,3.1496767714,8,0.0,5.919578866029094,5.83218579580449,0.5429660021394007,0.641487816448829,0.5430245608556902,0.6413689991015393,0.004636110109789573,0.004636957713508437,1,1,1.6572228312517645,1.6572277149961545
|
||||
55.789004049,40.77847226898534,29.435782080768988,3.1496450034,8,0.0,5.583502502514502,3.350843476932623,0.572281073995772,0.6569486989543568,0.5723392981526052,0.6568306416104859,0.00394587568459337,0.0039465503107742874,1,1,1.0761496848091685,1.0761427970320872
|
||||
56.088854344999994,40.778495152975196,29.435785606871892,3.1496141938,8,0.0,5.881160867408408,5.892102280828491,0.6030227830281887,0.6866867953155343,0.6030806912068506,0.6865694793953927,0.003194058487707421,0.0031945899083728763,1,1,1.6224226972159657,1.6224279760813438
|
||||
56.389015093999994,40.778512135243034,29.43565130904455,3.1495895265,8,0.0,-5.4557527583665255,7.777976498669458,0.5681225279936647,0.7267981488019891,0.5681801083600809,0.7266814321631415,0.004325115525924964,0.004325808978444085,1,1,2.437838237427516,2.4379005107754765
|
||||
56.689234688,40.77848697716002,29.435704173126425,3.1495563372,8,0.0,-0.9931682742484478,4.984178772618127,0.5591589693119059,0.7507393484163873,0.5592161817534521,0.7506233569686087,0.0035179844764516395,0.00351854425596845,1,1,0.4908928233750163,0.49092138300935706
|
||||
56.98904271,40.778521711826315,29.435732299555834,3.149525907,8,0.0,1.3811581672366375,8.841450640432178,0.5638447409326685,0.7960083209276045,0.5639016815973601,0.7958929177641966,0.004599905073767787,0.0046006229835768965,1,1,1.4808737761175246,1.4809121876968283
|
||||
57.288881325999995,40.77843470284241,29.43573343110274,3.1494964967,8,0.0,1.4766809687201243,-0.8208646791244326,0.5690373822006274,0.787006151854688,0.5690939824915711,0.7868914369777376,0.0037674205254315555,0.003767992741694956,1,1,0.08811511733990524,0.08810308310974226
|
||||
57.588838200999994,40.77844116654543,29.435749794858413,3.1494624845,8,0.0,2.858048352065341,-0.10307246201191765,0.5820058150687238,0.7820620594598435,0.5820620904122839,0.7819480093509725,0.0029781379903063353,0.0029785818984982846,1,1,0.20590169839253175,0.20588784721457096
|
||||
57.889130644999995,40.778494725194314,29.435550459348704,3.1494361615,8,0.0,-13.969104407059985,5.844608213770419,0.5000309363366041,0.8099938816397776,0.5000868309692017,0.8098804062655902,0.003981839716330943,0.003982407508830237,1,1,8.178880483248717,8.178965039110707
|
||||
58.188936123,40.77841575461253,29.435668350366296,3.1494022629,8,0.0,-4.017194955952701,-2.9250576063754425,0.47476991764994647,0.7895013023103671,0.47482544114550573,0.7893884703826655,0.0031821963942377865,0.003182664307764639,1,1,1.043749038545401,1.0437483132344314
|
||||
58.489561325,40.77848652570221,29.43565158231333,3.149380418,8,0.0,-5.4326865339881945,4.934046476327092,0.4417370446587644,0.8121150325581198,0.44179226036835006,0.8120027487556426,0.004124419601047403,0.00412502034539564,1,1,1.6363564937274635,1.636400907393595
|
||||
58.789067603,40.77848357268817,29.43568939285317,3.1493475578,8,0.0,-2.240863348224513,4.606113709777378,0.42690043910425185,0.832724984746784,0.42695530228073064,0.8326133715445844,0.003363027391094196,0.0033635248017700554,1,1,0.578981533996158,0.579011126843136
|
||||
59.088818968,40.77847016992694,29.435739757853266,3.1493168851,8,0.0,2.0107607513870858,3.117741989688768,0.4356910667917156,0.8450648084656425,0.435745618692082,0.8449538383680001,0.001762929568650943,0.0017632988821005707,1,1,0.20635683106100441,0.20636193624251783
|
||||
59.389234067,40.77854406220457,29.435715853422725,3.149289383,8,0.0,-0.007161678006411052,11.323451735792895,0.43318486527920774,0.9014526831972628,0.43323915649166017,0.9013422876976984,0.0004647307361013931,0.0004641416025502108,1,1,2.450735014026025,2.4507885330538093
|
||||
59.689535283,40.77853080908435,29.435686250789846,3.149259988,8,0.0,-2.506102730470506,9.851698068181685,0.41711955332997663,0.949335186707705,0.41717350299679523,0.9492254624580951,0.00024781783890792235,0.0002473721085662589,1,1,2.0934699076621053,2.093525330812796
|
||||
59.988897032,40.77856016135169,29.435616705524676,3.1492335279,8,0.0,-8.376844347838288,13.11126080437524,0.3691371888346617,1.0142115334169535,0.3691908278021621,1.0141023679327703,0.0008317406466123516,0.0008320360993895393,1,1,6.071587235789132,6.071680781066598
|
||||
60.288797941,40.778488300990155,29.435686018588353,3.1492005098,8,0.0,-2.525705901670282,5.131189981309919,0.35347633752546337,1.0359906878245029,0.35352964077402066,1.035882163195755,0.001297623695210658,0.0012979877833414197,1,1,0.6784832611477536,0.678514414044062
|
||||
60.588769709,40.7784999843253,29.43565298453273,3.1491721266,8,0.0,-5.3143153831657965,6.428621489509195,0.3228938516704652,1.064411920472292,0.3229468082084071,1.064304023390837,0.0013917802670190232,0.0013920633158807636,1,1,1.8019359737597358,1.8019837188044354
|
||||
60.888190298999994,40.77834723406337,29.435735007698174,3.1491328852,8,0.0,1.6097734284069147,-10.534239922391494,0.3297670389847955,1.0035401768674919,0.3298197603716164,1.003432729311309,0.002202003229981143,0.002202417958727164,1,1,3.0540912072072706,3.0540305426273355
|
||||
61.189541600999995,40.77840107160111,29.435679526484524,3.1491111347,8,0.0,-3.0737488479798967,-4.555601001201653,0.31158202242578953,0.9744678785628789,0.3116344181952817,0.9743609985526531,0.0020170308450959983,0.002017371794031921,1,1,1.104306733578054,1.1042930378988258
|
||||
61.489276188,40.77842737682512,29.435718093397117,3.1490803131,8,0.0,0.18192867424315598,-1.6344163161952387,0.3108189832261421,0.9608626482072017,0.31087113563243446,0.960756252593715,0.002821094602070455,0.002821541901565809,1,1,0.15211179297422286,0.1520998600116164
|
||||
61.788814662,40.77854001020308,29.435653322532172,3.149049676,8,0.0,-5.285779577703516,10.873480358784343,0.2811752273652519,1.0122364892305866,0.2812270487610148,1.0121307154779313,0.0004055827989326434,0.00040516630668077007,1,1,3.3132836291329872,3.3133515324879106
|
||||
62.088847064,40.77845042818906,29.43569722034397,3.1490179644,8,0.0,-1.5800968289547617,0.9254292348756018,0.2713595308022213,1.0117872291818073,0.2714110504658064,1.0116820265897577,0.001786587754475713,0.0017862948601136432,1,1,0.12470225416151313,0.12470877737508099
|
||||
62.388744745,40.77858604545918,29.435592113943745,3.1489932406,8,0.0,-10.452766587362051,15.98568401090592,0.2149180767288838,1.0886757778139855,0.2149692910628968,1.0885711154859725,0.0039442843735638805,0.0039438882900662605,1,1,9.125773037095536,9.12588291985161
|
||||
62.689174851999994,40.778493035452065,29.435519072900938,3.1489641443,8,0.0,-16.618630143341342,5.656968436035975,0.126819299867525,1.1119992310986697,0.12687011862963396,1.1118951541208826,0.004164295487571013,0.0041639800787322805,1,1,10.651389093190934,10.65147226983628
|
||||
62.989254073,40.77839132913508,29.43567691611941,3.148930801,8,0.0,-3.294106796838667,-5.637498124027527,0.10887377861298889,1.0776793340517234,0.10892434906513215,1.0775756894745232,0.006256674505043421,0.006256276158030462,1,1,1.4349021176187011,1.4348833203218527
|
||||
63.288892639,40.77846973572951,29.43568879425698,3.1489019968,8,0.0,-2.2913950608573486,3.0695246070947517,0.09647252038514194,1.087760664111992,0.09652279136230213,1.087657590709971,0.0029042136810510577,0.0029038918624193074,1,1,0.29546125202791984,0.29547916364502563
|
||||
63.588853656,40.77842030151968,29.435630756610138,3.1488696899,8,0.0,-7.190721056085015,-2.420122860640715,0.05881641110856711,1.0700951340147937,0.058866366412786246,1.0699925903942338,0.001948057794763318,0.0019478142859337467,1,1,2.183094007250457,2.18310423314569
|
||||
63.888730355999996,40.77848183625231,29.435733050254253,3.1488390141,8,0.0,1.444530128287876,4.413282955136201,0.06592133207059228,1.0868468573927308,0.06597106590455858,1.0867447822187157,0.003944316689551661,0.003943994956776064,1,1,0.3178924068490637,0.31790270016680316
|
||||
64.189486319,40.778436657908856,29.435695697464375,3.1488096945,8,0.0,-1.7086530080438995,-0.6037552289023375,0.05683322020060916,1.0784258846659134,0.05688267692505586,1.0783243409379186,0.004039366890171286,0.004039115953151411,1,1,0.17685906621985756,0.1768577277641768
|
||||
64.615415439,40.778570863895126,29.435746985079323,3.1487877829,8,0.0,2.6208521312981703,14.299770020905848,0.06993370392517512,1.1442104679322798,0.06998292153602606,1.1441094790654005,0.004343439739754293,0.004343210257317157,1,1,4.128481932886994,4.128532584963378
|
||||
64.78885952099999,40.77836468880614,29.435744551476244,3.1487510063,8,0.0,2.4154242580843404,-8.59589704262049,0.0818578149427675,1.0959482389203228,0.08190681030887852,1.0958476843276925,0.00543490318280181,0.0054346357428993325,1,1,2.3101707499882305,2.310118621346679
|
||||
65.089866618,40.77852939739268,29.435828259204122,3.1487278421,8,0.0,9.48170468404887,9.694935878042852,0.12942824396592764,1.1383795192743948,0.1294770383298881,1.138279515354552,0.004586734102719411,0.004586525163206991,1,1,4.823330192723045,4.823335553691469
|
||||
65.389692496,40.77846889856515,29.435668942093326,3.1486962954,8,0.0,-3.9672403752697933,2.9765585243688037,0.10881882238852562,1.1473841883512987,0.10886736876088818,1.1472846318589325,0.006396061505599281,0.006395784360148192,1,1,0.6786900052380704,0.6787125739264844
|
||||
65.68912596,40.77847480951191,29.435678643598237,3.148664219,8,0.0,-3.148275395045465,3.6329665729422027,0.09244033346423948,1.1595486700069157,0.09248860509211441,1.1594496369632705,0.0034588446294304257,0.00345862259443858,1,1,0.5190153040531783,0.5190376869902942
|
||||
65.98887742,40.77843209372181,29.435742842451617,3.1486341117,8,0.0,2.2711522806263647,-1.1106063491187355,0.10336912956592713,1.1484747469296006,0.10341719571097895,1.1483761391776175,0.0022562244040518096,0.0022559458729768415,1,1,0.2854357233747716,0.28541813794189874
|
||||
66.289698002,40.778489826899246,29.435659288083265,3.1486070165,8,0.0,-4.782194237198661,5.300642732841497,0.07900722051735934,1.1686208201221207,0.07905500726645473,1.16852273118731,0.00016783325237559716,0.00016774854253928746,1,1,1.2421797960619698,1.2422149039742203
|
||||
66.58973032099999,40.778636393219315,29.43563497308363,3.1485809954,8,0.0,-6.834759752245044,21.576779976829012,0.044718619088774086,1.267141244056885,0.04476611921900486,1.2670437169139748,0.0008258376330284546,0.0008259916288091962,1,1,10.993690195755715,10.993803051609598
|
||||
66.88912220899999,40.77861585754581,29.435715975455505,3.1485539573,8,0.0,0.0031398576319536017,19.29629785011738,0.044478084742778264,1.3539103027238995,0.04452537017621357,1.353813277793758,0.0020616796493512176,0.0020618926034591044,1,1,7.2386758500107815,7.238754305189951
|
||||
67.18927083,40.77840073948864,29.435786635064694,3.1485179455,8,0.0,5.967965467684529,-4.592480200646836,0.07365062323764685,1.3253692963064723,0.07369769534034407,1.3252727311477621,0.0005374852560405201,0.0005375605971624323,1,1,2.049182656233937,2.0491368156683087
|
||||
67.488738575,40.77848868501745,29.435729809716122,3.1484917559,8,0.0,1.170975972276484,5.1738357322515975,0.07906816511080204,1.3438533114243654,0.0791150487369165,1.343757180790604,0.0014555610636539445,0.0014552906321587255,1,1,0.37311440759194625,0.37312724746958137
|
||||
67.789860656,40.77842924953514,29.43582200720052,3.1484582681,8,0.0,8.953947886908447,-1.4264471548020254,0.12240642450450408,1.3306141724675735,0.12245310764494136,1.3305185088178058,0.002536804226098403,0.0025366060694640797,1,1,3.0033666570895265,3.00332486879337
|
||||
68.08923236599999,40.778542445588855,29.435682302955698,3.148434229,8,0.0,-2.8393632946726237,11.143927704609926,0.10797956070261046,1.376992065091452,0.10802598768773954,1.3768969037662901,0.0027455685380294785,0.002745406364878185,1,1,2.4602062859348797,2.4602580271960264
|
||||
68.389522177,40.778529223007325,29.43570492197488,3.1484028316,8,0.0,-0.929952720237197,9.675564437455515,0.10298252370808732,1.4161638784948094,0.10302874837027982,1.4160691577187223,0.004440883421164383,0.004440667350454862,1,1,1.5724765437978585,1.5725151957287238
|
||||
68.689118237,40.77855836211088,29.435710966452714,3.1483742204,8,0.0,-0.4197008238269075,12.911451051729317,0.1004495148706164,1.4700419907231301,0.10049549782917182,1.4699477719643168,0.0022138072908947717,0.002213629501644988,1,1,2.952904908764229,2.952955128135168
|
||||
68.98970829699999,40.77840571242104,29.435751437677634,3.148340037,8,0.0,2.9967306480473686,-4.040239710330833,0.11438926895186823,1.444369441719895,0.11443507241101498,1.4442756152307958,0.0009103365070604187,0.0009101047728523774,1,1,0.9779642605656653,0.977931537972018
|
||||
69.290120661,40.778504491048565,29.435841524554103,3.1483151327,8,0.0,10.601518778800402,6.929097117504511,0.1646504873239454,1.4698564182423177,0.1646961116859647,1.4697630619211133,0.000817376228225676,0.000817543461436791,1,1,4.625427979362814,4.625416336431856
|
||||
69.589647621,40.77848140246436,29.435690247332367,3.1482872582,8,0.0,-2.1687315020453553,4.3651111409091845,0.15345594439158852,1.483281715147494,0.1535013357856277,1.4831888173124037,0.0014250929346593738,0.0014252316987630772,1,1,0.38251502177161956,0.38253471573199077
|
||||
69.889479016,40.778433361653796,29.43569903400673,3.1482530436,8,0.0,-1.426994535792335,-0.9698031858905128,0.14602479861617207,1.4719484994910619,0.14606997675983888,1.4718559903646968,0.0027186662453333585,0.002718852300119135,1,1,0.22388077152087174,0.22387577750363655
|
||||
70.192204754,40.77855131235932,29.435640517962703,3.1482289379,8,0.0,-6.366691131327076,12.128581475492423,0.1151275229998519,1.5209795135635111,0.1151724524356186,1.520887478916528,0.0027138665872745845,0.0027140144730167493,1,1,4.0550418490960185,4.055106907679395
|
||||
70.518667722,40.77845653890326,29.43570004594785,3.1481966788,8,0.0,-1.3415697458384017,1.604021725715878,0.10827420590105181,1.521378043525118,0.10831891522501012,1.521286432154964,0.002474150528498113,0.002474266628478272,1,1,0.07647748746249156,0.07648253575807534
|
||||
70.790606598,40.77852978658847,29.435645682675712,3.148171052,8,0.0,-5.9307078602199415,9.738152231747662,0.07984356044340896,1.5588336467696822,0.07988803136557376,1.558742465502292,0.003581413502531011,0.0035815634488667097,1,1,2.8156269265611487,2.815679878957396
|
||||
71.090603261,40.778465605732144,29.435781708114796,3.1481384716,8,0.0,5.552044988727166,2.610891661885839,0.10551900453247542,1.5636171337268383,0.10556328997386305,1.5635263733968523,0.0030025580986750722,0.003002674570382655,1,1,1.1017211216286802,1.1017078854530584
|
||||
71.39011213399999,40.778476908067034,29.435675304863796,3.1481115392,8,0.0,-3.4301187157576942,3.8660104644799187,0.0889574769933518,1.5740335714942006,0.0890015457401786,1.5739432195177991,0.004175796615826733,0.004175949399206314,1,1,0.5677141293880349,0.5677347034764826
|
||||
71.689906765,40.77854074090937,29.43570100089601,3.1480827768,8,0.0,-1.2609549919561591,10.954623242499377,0.08268931127687096,1.6163521999186432,0.0827331663449282,1.6162622916308658,0.0034590644644186563,0.0034591884627835873,1,1,2.0257323362324366,2.0257743667858055
|
||||
71.989661384,40.77846369747458,29.4357558206138,3.1480449716,8,0.0,3.3667191225878064,2.3989790527538526,0.09794088659630391,1.619843298398508,0.09798455641642845,1.619753775209775,0.004582361945610565,0.004582522790386847,1,1,0.4015765530825285,0.4015693256697817
|
||||
72.28985457099999,40.77840320058851,29.435676349357898,3.1480198439,8,0.0,-3.341950141333417,-4.319177628222751,0.08202504576581744,1.5932725297349692,0.0820684970956704,1.5931834013233366,0.0037947292110643693,0.00379485724025618,1,1,1.2113840025959606,1.2113711202332575
|
||||
72.589175531,40.778435571097546,29.435689067769726,3.1479892604,8,0.0,-2.268307301349485,-0.7244450696082034,0.07119478921397951,1.5829375723592505,0.07123802436253865,1.582848843207504,0.003019926036763837,0.0030200269203642235,1,1,0.31837602366834417,0.3183741660383675
|
||||
72.889448352,40.77850021061805,29.435736651421696,3.1479641963,8,0.0,1.7485266531517454,6.453749514216471,0.07890559437739167,1.6045724195968731,0.07894864964368817,1.6044840809328584,0.004043043676565921,0.004043176950047167,1,1,0.6297358666710633,0.6297499061819438
|
||||
73.188676174,40.778415618704635,29.435752557891938,3.1479349852,8,0.0,3.0912945728790984,-2.940150571145535,0.09266283813145204,1.5844586831472398,0.09270570518221113,1.5843707311482604,0.0032544239892847845,0.003254531144275737,1,1,0.7865763707845669,0.786549151804574
|
||||
73.48978705399999,40.77846113761968,29.435684150507115,3.1479052053,8,0.0,-2.6834033693068187,2.1147078388012828,0.08003422745155292,1.58677960079065,0.08007689687979955,1.5866920209165776,0.0042299954789126225,0.004230133117187237,1,1,0.2834990996690287,0.28350974100021176
|
||||
73.789872215,40.7784088322077,29.435758888722983,3.147876415,8,0.0,3.625720409176217,-3.6937882837449174,0.09612567539311287,1.5635878658184639,0.09616816162756485,1.5635006643057043,0.003443225955931304,0.0034433368440917305,1,1,1.0734899567087308,1.0734584649179073
|
||||
74.09892645699999,40.778473663982446,29.435727088804455,1.9143881153,8,0.0,0.9412870824872793,3.505755342578156,0.09996311820595442,1.57210774721999,0.10000541427334952,1.5720209342257692,0.0027382883964391725,0.0027383757411001074,1,1,0.10973060562819531,0.10973556828686623
|
||||
74.398636068,40.77846257230134,29.435674184587427,1.9143114167,8,0.0,-3.5246889968166917,2.274029057309451,0.08359171794903657,1.5751310241146212,0.08363381247757079,1.5750445856634476,0.003622802726718649,0.003622917456651439,1,1,0.4836153248581971,0.48362907038421776
|
||||
74.703659917,40.778450928013505,29.43564704847833,1.914235704,8,0.0,-5.815418902853092,0.9809366681867503,0.057104106947505194,1.5725702945697864,0.05714598447394896,1.5724842328741362,0.0029162814102197633,0.0029163736454168566,1,1,1.2597644565453037,1.259780028451169
|
||||
75.003143798,40.77850034210502,29.43573575018277,1.9141570341,8,0.0,1.67244747107881,6.468351076082584,0.06431455843081746,1.5937734027772674,0.06435625433695391,1.593687735310293,0.0022433054209321404,0.002243377085027502,1,1,0.6278975498376861,0.6279114540505112
|
||||
75.296021174,40.77844523664848,29.435736159429336,1.9140800721,8,0.0,1.7069959270180461,0.3489106128518742,0.07165475177022032,1.588378736698083,0.07169627195728624,1.588293423101357,0.003024315341668975,0.0030244125379349633,1,1,0.1316048101360679,0.1315951284252595
|
||||
75.599022296,40.77838582971378,29.435739583938844,1.9140027708,8,0.0,1.9960820720741292,-6.248207271382711,0.08021347377548975,1.554723441460561,0.08025481680934983,1.5546384766779968,0.002387138125017397,0.0023872150263692595,1,1,1.5015555752224161,1.5015200306938696
|
||||
75.90357703299999,40.77846218763495,29.435777273704467,1.9139245543,8,0.0,5.177708927828146,2.2313129681987296,0.10283313821015137,1.5575632675324758,0.10287432197177886,1.5574786587083989,0.0031594535784192942,0.003159554792121539,1,1,0.9450587368310444,0.9450461300809261
|
||||
76.20371588799999,40.77839095158866,29.435776262679518,1.9138492145,8,0.0,5.092367420583461,-5.6794234959781305,0.12486118921980481,1.5266974914750573,0.12490220910045084,1.526613229414305,0.0025272954251605185,0.0025273775934070886,1,1,2.062676277883815,2.0626342011517753
|
||||
76.503812091,40.77846790827697,29.435845840519296,1.9137704637,8,0.0,10.965862213011441,2.8665944476419294,0.17258596284683525,1.5324030324053683,0.17262684507212744,1.5323191338998012,0.0019523807296450383,0.0019524440027189375,1,1,4.268501827693617,4.268474843745702
|
||||
76.79764664999999,40.77852174670359,29.435659974075808,1.9136935145,8,0.0,-4.724283074111404,8.845325127259825,0.15114267424527045,1.5633747402508267,0.15118336323135625,1.563291209566149,0.002615133649041269,0.0026152164723182453,1,1,2.054407463198073,2.0544492093774007
|
||||
77.09914336,40.77841938782084,29.43574913481069,1.913617539,8,0.0,2.8023304884085882,-2.5215917364200098,0.16273342117514536,1.5461390736930711,0.16277394153885394,1.5460558871253491,0.0010885908403148238,0.0010886578536454933,1,1,0.624724891970458,0.6247019217527564
|
||||
77.39915077399999,40.778389822072675,29.435880426172602,1.9135399289,8,0.0,13.885469803456493,-5.804844557337945,0.22264837178962715,1.5151732686116632,0.22268877781515392,1.5150904015903504,0.001268261098987281,0.0012681949337932038,1,1,7.979622219469725,7.979554912920275
|
||||
77.698883719,40.77848233499378,29.435689533571548,1.9134628556,8,0.0,-2.2289844745901353,4.46866820428288,0.21194560666388662,1.527577047331544,0.21198582351724057,1.5274945417697579,0.002691965526134974,0.002691901499620264,1,1,0.4106310463525955,0.41064907954419083
|
||||
78.003583687,40.77852442971347,29.435668626097346,1.9133843461,8,0.0,-3.9939122461885463,9.143271949332956,0.19368320337249653,1.5593901228711333,0.1937232246481178,1.5593079943921837,0.002995183478659637,0.002995132286896745,1,1,1.928885624056799,1.928925787831426
|
||||
78.303063448,40.778429611185295,29.43571737488124,1.9133087502,8,0.0,0.12127421360216128,-1.386291452444392,0.1934327282389382,1.5471302113022296,0.1934725871559077,1.547048394396364,0.005205928582796235,0.005205859937236945,1,1,0.19354714167943038,0.19353656514836737
|
||||
78.604263272,40.77851218921071,29.435725441770785,1.913232615,8,0.0,0.802250216601798,7.783967622136425,0.19602773725863118,1.5730242628542292,0.1960674245467348,1.5729428122654021,0.004723054312026836,0.0047229998686442315,1,1,0.880144144278856,0.8801651349851525
|
||||
78.90355806699999,40.778504146731535,29.43565094074313,1.9131541493,8,0.0,-5.486844022045219,6.890855282735764,0.1716753399353031,1.5950144981097052,0.17171484268265894,1.5949333724559127,0.006855661420653102,0.006855588690712841,1,1,1.7922765567301295,1.792312095801146
|
||||
79.203795202,40.77848246566566,29.435696733698858,1.9130788565,8,0.0,-1.6211768192107283,4.483179110688989,0.16399859477676793,1.606911216484514,0.16403791639822773,1.6068304440431886,0.005907260301863047,0.005907200307981667,1,1,0.30155001614347876,0.30156555294273507
|
||||
79.503783238,40.77859666834944,29.435766746515082,1.913000209,8,0.0,4.28903429720585,17.165345916198834,0.18159075102964478,1.6708175014088702,0.1816299187885155,1.6707371056298659,0.004770960334170991,0.0047709140019873445,1,1,6.006718916154681,6.0067632342832376
|
||||
79.80332296,40.778502997067,29.435678310941867,1.9129246861,8,0.0,-3.1763556541626246,6.763184110976585,0.167317175424216,1.6917037873026004,0.1673561726344901,1.6916237158192686,0.006738213751396009,0.006738151361885547,1,1,0.983653212402013,0.9836809285977263
|
||||
80.103049324,40.77843974295802,29.435614702986882,1.9128459078,8,0.0,-8.545906287707195,-0.26115693308181837,0.13040564312366956,1.6837501832982036,0.13044444233063432,1.6836704397267128,0.0054482621083855685,0.005448214386909066,1,1,2.8169762522033825,2.8169937275259116
|
||||
80.401408375,40.77849865369653,29.435601101322437,1.9127693912,8,0.0,-9.694099783256396,6.280860095509579,0.08880969143103201,1.7024306289392996,0.0888482928442117,1.702351205038282,0.007326935671243976,0.007326872819727348,1,1,3.944264736406216,3.9443085011100085
|
||||
80.701565449,40.77848949862755,29.43573427759953,1.9126927122,8,0.0,1.5481378210663486,5.2641869009806825,0.09499180795945275,1.7168737794504023,0.09503024999424131,1.7167946966469891,0.003975116573763281,0.003975066223627155,1,1,0.3593577778276231,0.3593663304114892
|
||||
81.001458683,40.77849183399823,29.435520992446136,1.9126162257,8,0.0,-16.456589683345108,5.523547071780445,0.025483346713933916,1.7322258661313545,0.025521561267804485,1.7321471195116231,0.0017135837122690624,0.0017135412948753501,1,1,10.181535564765593,10.181594732999795
|
||||
81.303050078,40.77836559039068,29.43570178932148,1.9125384421,8,0.0,-1.194402276847541,-8.495776715038993,0.02033079739628794,1.6910612563883474,0.02036885616089593,1.6909827848022534,0.003480170407005472,0.003480115994945983,1,1,2.3850327211197264,2.3850001625534145
|
||||
81.596017138,40.77834295045471,29.435746185133826,1.9124626345,8,0.0,2.5533325592291467,-11.009932795892892,0.030913222732361845,1.6400754075514272,0.030951124232270227,1.639997230019141,0.003320276432509047,0.0033202355619032712,1,1,3.826143228285855,3.8260918614336283
|
||||
81.90378780399999,40.7784843932302,29.435761471149554,1.9123843608,8,0.0,3.8437150266314632,4.697235255999017,0.04678848611906166,1.6523076590023056,0.046826258317110944,1.652229781748063,0.005079619068027329,0.005079564973547102,1,1,0.7314710976599583,0.7314713463268838
|
||||
82.203667909,40.77855322862458,29.43561295126526,1.9123082895,8,0.0,-8.693765334311077,12.341384389180732,0.010506635735689232,1.694926982922738,0.010544212002733484,1.6948494513748507,0.0024938404754503707,0.0024937938040609673,1,1,5.295895857011414,5.295956700359975
|
||||
82.49752678899999,40.77856376717051,29.435625806988703,1.9122311111,8,0.0,-7.608533491378142,13.511684821633366,-0.021084679433591394,1.7419625079122607,-0.021047274368406595,1.7418852989720084,0.0012738964384393597,0.0012738278519411114,1,1,5.201271769012876,5.201333213094377
|
||||
82.799077195,40.778481429715676,29.435706545329698,1.9121543668,8,0.0,-0.7929158804333968,4.368137114357063,-0.024224305135625367,1.7523316780752327,-0.02418706175953101,1.7522547857385835,0.0023850542897103297,0.0023850018433342174,1,1,0.17516404237054242,0.17517515812554713
|
||||
83.099067222,40.77850692211167,29.43570005663846,1.912077071,8,0.0,-1.3406662716026847,7.199058305020436,-0.029602226959024452,1.7738430331684913,-0.029565142908030216,1.7737664575132097,0.002606370590372483,0.002606333423173773,1,1,0.7236047951777077,0.7236269918522843
|
||||
83.403588062,40.77856748384837,29.435712594407413,1.9120022094,8,0.0,-0.2822751324970774,13.924416620495705,-0.03070339270419076,1.8217192115231775,-0.030666456115599827,1.8216429587965453,0.004231928139424205,0.004231879890538396,1,1,3.2929287675391437,3.292970914538242
|
||||
83.703715678,40.77844604882486,29.43565604628396,1.9119233534,8,0.0,-5.055858024075712,0.43910402724725095,-0.05123615761210046,1.8162852634531612,-0.051199389898187,1.816209312502037,0.0018909487811767634,0.0018909135970536105,1,1,0.9514449314459468,0.9514535891924345
|
||||
84.00327469,40.77850755423206,29.435644570634278,1.9118477996,8,0.0,-6.024584155937467,7.269257369260063,-0.07560561979789476,1.837620414009811,-0.07556902165831508,1.8375447776403115,0.00029737673049003984,0.0002973525429638362,1,1,1.9469418894171835,1.9469761542446933
|
||||
84.30307048499999,40.77853543152473,29.435756148282664,1.9117724684,8,0.0,3.394376051262366,10.365018715215447,-0.06150130354778924,1.8708776665426627,-0.061464844729015256,1.8708023345204887,0.0011067818945991997,0.0011068189350099448,1,1,2.05419129607574,2.054210906805171
|
||||
84.601573621,40.77848453969878,29.43566758233393,1.9116922429,8,0.0,-4.0820252119455445,4.713500665672725,-0.07780758731568922,1.8819379181407645,-0.07777128698075007,1.8818628884960535,0.0016741547594635523,0.0016741854563270795,1,1,0.7618986440184821,0.7619187400291552
|
||||
84.903691938,40.7785152833012,29.435649236145938,1.9116173623,8,0.0,-5.630738714705631,8.127567321487613,-0.10027615339327689,1.906142948708824,-0.10024002330559853,1.9060682176558947,0.0030600904326690205,0.0030601312133062405,1,1,1.979303598435651,1.979338993300228
|
||||
85.203642041,40.77849183566626,29.435704564396435,1.9115393779,8,0.0,-0.9601386647727091,5.523714081667897,-0.10372619229342778,1.920118640682325,-0.10369020878244775,1.9200442076075446,0.003001936383730858,0.0030019685957911376,1,1,0.3183244903094167,0.3183387782718973
|
||||
85.49678156,40.778568987255845,29.43559223045333,1.9114630681,8,0.0,-10.44293397289255,14.091376822403262,-0.14537971735360825,1.9670539189791458,-0.14534391313331718,1.9669798001122787,0.004321459831542549,0.0043215012861632296,1,1,7.149667505761481,7.149734654282848
|
||||
85.804272637,40.77851435487333,29.435605562590695,1.9113867779,8,0.0,-9.317494204650483,8.02446947185276,-0.18211279453842247,1.9902939638086543,-0.18207716194158807,1.9902201414567995,0.003935904847252943,0.003935934660854813,1,1,3.84596029725348,3.8460039435123043
|
||||
86.10413949299999,40.77851681338476,29.43568585362283,1.9113088431,8,0.0,-2.5396305833168036,8.297480828081992,-0.19149227580887362,2.014399343788209,-0.19145679777673177,2.014325813184558,0.002274691848011217,0.0022747153243858685,1,1,1.0868277415051364,1.0868545451450051
|
||||
86.40376136799999,40.778484596616295,29.435693835753337,1.9112314601,8,0.0,-1.865810414677862,4.719820444311158,-0.198253935408128,2.0248203719443634,-0.19821859302795516,2.024747130029952,0.000683631253689328,0.0006836420489337246,1,1,0.26404047192082464,0.26405361712401315
|
||||
86.697568276,40.778508899795455,29.435712999476767,1.9111569766,8,0.0,-0.24808096335392268,7.418679239532034,-0.19840879823982813,2.045319563588461,-0.19837359955523315,2.0452466104818674,0.001144813876156571,0.0011447856982736428,1,1,0.6486473582132951,0.6486650972805569
|
||||
86.998911706,40.77859266480913,29.43567621041063,1.9110805763,8,0.0,-3.3536700326265048,16.72075376110213,-0.21098307558723664,2.101057244973596,-0.21094802477380897,2.1009845949035735,0.002853505321598589,0.00285346865603875,1,1,5.15931929798443,5.159375017534581
|
||||
87.30368421899999,40.77852521467072,29.435685724085946,1.911002823,8,0.0,-2.5505652728759305,9.230440523207395,-0.22020427484004942,2.12799971241299,-0.22016937120862617,2.1279273554990787,0.00047607769888067386,0.0004760560326658071,1,1,1.3301150020420782,1.3301439941074418
|
||||
87.60369062299999,40.77851662595604,29.43571518799114,1.9109248969,8,0.0,-0.06333488210449187,8.276666501881872,-0.21956617529400985,2.1511701765193405,-0.21953141032585624,2.151098103703288,0.0007079051001850644,0.0007079274671408763,1,1,0.8436853791138189,0.8437048196852337
|
||||
87.90350543299999,40.77859885825078,29.435720557978833,1.9108501617,8,0.0,0.38997855630586853,17.408532420411582,-0.2172018597499074,2.208616281303895,-0.21716722786771592,2.2085445127276064,0.0019722439666088987,0.0019722746720234946,1,1,5.202815171417603,5.202862661508486
|
||||
88.20290832399999,40.77847633393515,29.435680827299468,1.9107721552,8,0.0,-2.963935466860185,3.8022531307214873,-0.22795745376483934,2.2145482257749896,-0.22792296786490593,2.2144767268972525,0.0022596552591511573,0.002259680061749523,1,1,0.3281990713136408,0.32821101823154536
|
||||
88.495797164,40.77849745787444,29.435816982495943,1.9106956416,8,0.0,8.529772173516724,6.148063064203767,-0.19370007820238366,2.2293221630682374,-0.19366569787891633,2.229250947113249,0.0034621002435666877,0.003462132517564511,1,1,3.1057988220268262,3.105789605890638
|
||||
88.798443565,40.778520540609094,29.43568504960427,1.9106195153,8,0.0,-2.607502624089606,8.711387732408683,-0.20312035430522105,2.2534490467733126,-0.20308611719496042,2.253378104357692,0.003287737916522701,0.003287764558058192,1,1,1.1464569077004791,1.1464834636747496
|
||||
89.099553214,40.77849103039062,29.435752764886217,1.9105426494,8,0.0,3.108764752395407,5.434289111732661,-0.19023132031638723,2.2652503642225836,-0.19019720882860014,2.2651796885164206,0.0028251701850173774,0.0028251907568321594,1,1,0.6204048333576292,0.6204067309694093
|
||||
89.398994102,40.77848255364478,29.435663826125474,1.9104660178,8,0.0,-4.3991103148580875,4.492950288119842,-0.20657318663293495,2.2735523892183105,-0.20653921600567848,2.2734819865038984,0.003976520854272122,0.00397654696679689,1,1,0.7483202077895921,0.748337562821304
|
||||
89.703519707,40.7784883132365,29.435637941368018,1.9103882084,8,0.0,-6.584203553829357,5.132552430715641,-0.23125203609391906,2.284109692332539,-0.2312182151155374,2.2840395510000215,0.0033646013178807296,0.0033646220143944104,1,1,1.6464280701958527,1.6464526394306394
|
||||
89.988487974,40.77855377191578,29.435661211180143,3.1463354763,8,0.0,-4.619849225119419,12.401713014692108,-0.2482695253597982,2.321401617787735,-0.2482358522470666,2.3213317640307234,0.004421276120755165,0.004421303330871855,1,1,2.9755003954890475,2.9755427125967735
|
||||
90.304461398,40.77856838468992,29.435659258914214,1.9102374065,8,0.0,-4.78465094254485,14.024456280640598,-0.26569724961500224,2.3644029430751443,-0.26566371527687066,2.364333359286696,0.0007832454781870359,0.0007832747545514228,1,1,3.7943480741086626,3.794395522232206
|
||||
90.59828806099999,40.77851315377594,29.435674513097204,1.9101607137,8,0.0,-3.4969547771820952,7.891083015837208,-0.2781368354018109,2.384666112705613,-0.27810343564307316,2.3845968026328768,0.0009034847637839926,0.0009034694194930202,1,1,1.0568391595758042,1.05686410537675
|
||||
90.903870598,40.77843963287023,29.435687641505833,1.9100831477,8,0.0,-2.388707071398133,-0.2733866875112332,-0.2861873695789398,2.3749276057591757,-0.28615410857782664,2.374858527050416,0.0028170403218976937,0.0028170204651651125,1,1,0.31788414456158387,0.3178810018873681
|
||||
91.189242467,40.778511711501395,29.43562766224199,3.1462232888,8,0.0,-7.4519259984770185,7.730921886384986,-0.31359552374961425,2.394470634182429,-0.3135624060645668,2.3944018277572092,0.0013593257190981037,0.0013593145873436177,1,1,2.4880761177401296,2.488109769093449
|
||||
91.603450457,40.77851862853226,29.435692145075407,3.1461957114,8,0.0,-2.008530053125,8.49905212239586,-0.32006537245064026,2.4166503395649257,-0.32003238673221873,2.416581793516298,0.0007613500521478578,0.0007613385503104174,1,1,0.934288697542937,0.9343114673747904
|
||||
91.79959043699999,40.77842658949975,29.435631773836164,1.9098533928,8,0.0,-7.104849913146268,-1.721845098259949,-0.34586611706580284,2.401631993387293,-0.34583327773931893,2.4015636814167998,0.001961223489336728,0.0019612085722732217,1,1,2.039086347385755,2.0390898041779018
|
||||
92.09967432399999,40.77848042788556,29.435713378500402,1.9097777344,8,0.0,-0.21608531936952402,4.256884214088961,-0.3453980312602338,2.4083492261991606,-0.3453653165952512,2.408281173769272,0.002505220953772724,0.002505208650681687,1,1,0.07734768640238504,0.0773530300950482
|
||||
92.398874217,40.77851608457168,29.435659794603595,1.9097014217,8,0.0,-4.73943383616975,8.21654748719744,-0.36198636845200194,2.429256593416304,-0.3619537876238432,2.4291887771182625,0.004301389329217832,0.004301371856099323,1,1,1.4472863868279842,1.4473143656612972
|
||||
92.698315189,40.77857012409855,29.4356056610807,3.1460871667,8,0.0,-9.30917226675892,14.217621272827003,-0.3957804351662167,2.471618724627267,-0.39574800307987845,2.4715511839968642,0.004089169085208186,0.004089153020015607,1,1,5.980435988779908,5.980492607612616
|
||||
92.988465589,40.77849084083321,29.435757133191405,3.1460569257,8,0.0,3.4775205995942704,5.413238995217106,-0.38115374891157233,2.48218801462667,-0.38112142198219695,2.4821206993303124,0.005783479681277942,0.005783460034554947,1,1,0.7330410404784392,0.7330408545768282
|
||||
93.289537259,40.77840939797888,29.435762778537352,3.1460235065,8,0.0,3.954084228603063,-3.6309594375206826,-0.36489681352551073,2.4603158704189045,-0.36486460167352547,2.4602487998981974,0.002290537519677106,0.002290524123364414,1,1,1.5098895628425475,1.5098611235427244
|
||||
93.58941706899999,40.778573479682194,29.435581797914615,3.1460017748,8,0.0,-11.323607724528834,14.590260401635144,-0.4059281986239844,2.50357141773933,-0.4058961324971099,2.503504604372228,0.0013434358632442157,0.0013434253464775063,1,1,7.604379706267454,7.604441391881692
|
||||
93.905036076,40.77841134522044,29.435735392617005,1.9093179416,8,0.0,1.6422653147716202,-3.414719862166606,-0.398312636568735,2.4824874015757894,-0.39828068892933577,2.482420814035037,0.003100173176499309,0.0031001578354965757,1,1,0.9320238258968409,0.9320014615844779
|
||||
94.20477394,40.778597239349914,29.43572421159316,1.9092425058,8,0.0,0.6984024069278983,17.228754099925172,-0.3941939851662687,2.5347873310405635,-0.3941621533074512,2.534721003973454,0.0012833412317227446,0.0012833288991505292,1,1,4.8919568771064235,4.8919981351946085
|
||||
94.498687222,40.778536802855385,29.43570090483089,1.909165443,8,0.0,-1.2690645158650196,10.51730380668499,-0.39751709233906185,2.563017783658684,-0.3974853836911384,2.5629517149507786,0.0002590990850346799,0.00025911470929171484,1,1,1.4483848448714716,1.4484104553484256
|
||||
94.789561162,40.77844783044866,29.435690450590087,3.1458847168,8,0.0,-2.151574333626814,0.6369512743008834,-0.4039818471696189,2.556214734692993,-0.4039502593063454,2.5561488891982775,0.0012887041216985196,0.001288716937611405,1,1,0.19349822455240467,0.19349655401612167
|
||||
95.099541301,40.778514402059116,29.4356682913483,1.9090121907,8,0.0,-4.022171087793889,8.029704666372313,-0.41739196686807023,2.575483102695779,-0.4173605009426103,2.5754175000294106,0.0017460544892429863,0.0017460648187730093,1,1,1.1393669242976245,1.1393912252511276
|
||||
95.399011426,40.77842573022789,29.435759690616347,1.9089352108,8,0.0,3.6934123681879645,-1.8172694065373343,-0.40217944707774117,2.5600272950408183,-0.40214809561222736,2.5599619136389338,0.0030390046552720446,0.0030390171873559734,1,1,1.0386908368606413,1.0386686709828834
|
||||
95.688582099,40.77849027669242,29.43571384278131,3.1458022935,8,0.0,-0.1768924448335769,5.350590556929295,-0.4013881872532125,2.569819248203562,-0.4013569458594933,2.569754103784769,0.002871424982373979,0.00287143498266521,1,1,0.17546940782018566,0.17547703516019364
|
||||
95.98956008399999,40.77845448410623,29.435695395677165,3.145777654,8,0.0,-1.7341283023159728,1.3758373611548276,-0.40619917229018093,2.5655957629619355,-0.4061680570230106,2.5655308355761113,0.004126741835673534,0.004126755241683614,1,1,0.09574705348886105,0.09574658196102417
|
||||
96.305366596,40.778481303834894,29.435652485491886,1.9087066196,8,0.0,-5.356444022666303,4.3541599954664525,-0.4244058513038226,2.5718481058293134,-0.42437485819896564,2.5717834123024153,0.0037254319182762224,0.0037254432957932898,1,1,0.9536246004739458,0.9536408699406255
|
||||
96.60530161,40.778493611563,29.43572801124256,1.908628496,8,0.0,1.0191555408483528,5.720926763596529,-0.419151611788026,2.5827939554591057,-0.41912072634504677,2.5827294942188663,0.0030959586510305834,0.0030959673042539773,1,1,0.2961669219245316,0.2961727848116575
|
||||
96.89871962299999,40.778417765175355,29.43577683613616,1.9085527773,8,0.0,5.140774471377091,-2.701784658986681,-0.3987818358608826,2.564455593468863,-0.39875105471246947,2.5643913429459566,0.00423237029115978,0.004232381399528913,1,1,1.7357636923093533,1.7357361313905117
|
||||
97.189027556,40.77844437954463,29.435788848059172,3.1456600347,8,0.0,6.154774334187512,0.25373191019330316,-0.37493860250650235,2.5565016140746617,-0.3749079153750532,2.556437579134549,0.0016090251626102617,0.0016090333884486655,1,1,1.6655218700871643,1.6655007165077695
|
||||
97.48937717,40.77840063337643,29.435812705629804,3.145633157,8,0.0,8.168747170782739,-4.604261822539982,-0.3438104620122944,2.5317783623231347,-0.3437798651951374,2.53171453969989,0.00045415991099980986,0.0004541546531213433,1,1,3.7716945193764806,3.771655180800714
|
||||
97.789527958,40.77854257503045,29.435733820624105,3.1456078902,8,0.0,1.5095604780178171,11.15830175546494,-0.3371392114618715,2.5614512300392476,-0.3371087225755041,2.5613876398443236,0.000915870616382754,0.0009158909922791677,1,1,1.783178986220054,1.7831994552347992
|
||||
98.099535323,40.778554913845944,29.435773038361482,1.9082487379,8,0.0,4.820170400884329,12.52852406311855,-0.31848804525840013,2.5956064639935645,-0.3184576545217488,2.595543102475404,0.001361337412214667,0.0013613469666221853,1,1,3.173078922447873,3.1730958635376707
|
||||
98.389006496,40.77838534863251,29.43576868735708,3.1455491364,8,0.0,4.452886704960888,-6.301630097149172,-0.3012286823019939,2.5651882149249245,-0.301198389459696,2.565125065423041,0.0024155645834598423,0.002415572650757224,1,1,2.585059634778466,2.585024047690702
|
||||
98.688929457,40.77842497754614,29.43576435834033,3.1455227737,8,0.0,4.08744444157067,-1.9008542281834324,-0.2854405739142447,2.549990647754607,-0.2854103777073664,2.5499277007064367,0.002362238287150832,0.0023622414129015664,1,1,1.1383359738836165,1.1383138166887774
|
||||
98.997330076,40.7784298977768,29.435731733033457,1.9080196604,8,0.0,1.3333363437487007,-1.3544654528255489,-0.2795888240059937,2.536613457235992,-0.2795587413924961,2.5365507314427247,0.0034576149719509996,0.0034576192857814743,1,1,0.4343085939423306,0.43429411480126245
|
||||
99.298575628,40.778521206286555,29.435740483625654,1.9079436787,8,0.0,2.072026150619941,8.785310797958484,-0.27117507482875,2.5578724132714994,-0.27114508955666883,2.557809902717694,0.0030787326445790167,0.003078739100264935,1,1,1.069887737036069,1.0699001235807346
|
||||
99.58936618599999,40.77850254345403,29.43565531298126,3.1454390048,8,0.0,-5.117756375976028,6.712811646065166,-0.28852226871451064,2.571904501490261,-0.2884924067786319,2.5718422061935966,0.002542099044630687,0.00254210652220719,1,1,1.2308186171692996,1.2308406639913305
|
||||
99.889058235,40.77846016655081,29.43568632754108,3.1454097407,8,0.0,-2.499626332351082,2.00687093738285,-0.2964119488244376,2.5700322830383584,-0.2963821914103531,2.5699702035647647,0.0035229066003398713,0.003522916245785622,1,1,0.18316894325798366,0.18317212938911015
|
||||
100.19875499999999,40.77846220951318,29.43573047458142,1.9077133578,8,0.0,1.227101880277279,2.2337408299324264,-0.2909844367903271,2.568879670806553,-0.29095478549804643,2.568817795997715,0.000998941947713946,0.0009989505270465604,1,1,0.0861025364246829,0.08609834055192092
|
||||
100.49832922099999,40.778439123159544,29.435702426355896,3.1453536457,8,0.0,-1.1406248765532103,-0.3299901669924054,-0.29399321688351426,2.559164927486741,-0.29396366295660725,2.5591032558169142,0.0010112154057838616,0.0010112075226039528,1,1,0.21341099280476802,0.21340480704660608
|
||||
100.789541914,40.77842336320826,29.43576984700683,3.1453280046,8,0.0,4.550777521912647,-2.080125576783321,-0.27681257082648375,2.5436046130620036,-0.2767831164597976,2.543543140713349,0.0025403619775375996,0.0025403571575171742,1,1,1.3252186236175143,1.3251955493026033
|
||||
101.097651839,40.77842264250497,29.43574074659415,1.907484597,8,0.0,2.094228043701318,-2.1601605112720073,-0.2684593507242101,2.5278991740227683,-0.2684299967696564,2.527837907293185,0.0020407984055301445,0.0020407956321677645,1,1,0.6958962698734849,0.6958783433091926
|
||||
101.40386610499999,40.77848454403525,29.43571379018765,1.9074096649,8,0.0,-0.18133221947767766,4.713981106896729,-0.26808103691473845,2.535150457512993,-0.2680517842879902,2.5350893881128997,0.0010510802511064584,0.0010510780869259504,1,1,0.10685868297580776,0.1068644740682307
|
||||
101.69761073,40.778472778901666,29.435831095788785,1.9073332559,8,0.0,9.721166571268254,3.407473771161246,-0.2329180887712304,2.538071904942165,-0.2328889180032213,2.5380110441689903,0.00037444072179103035,0.00037444622321740264,1,1,3.610317161606567,3.610298484615746
|
||||
101.998529963,40.77839951658491,29.43588639792356,1.9072575166,8,0.0,14.389581153899682,-4.728271627629942,-0.18135973838776026,2.5139004038080053,-0.18133064046949926,2.5138397321538393,0.0013718661444087946,0.0013718713947215163,1,1,8.877203502701251,8.877153038743819
|
||||
102.299619759,40.778403752875136,29.435738351299943,1.9071808324,8,0.0,1.8920266753546964,-4.257846917684133,-0.1741733387917931,2.491513787229558,-0.17414433767463158,2.491453308627049,0.0017542291045939862,0.0017542354313623725,1,1,1.177566188361345,1.1775435152043523
|
||||
102.589449784,40.77842549908753,29.43574195482263,3.1451603455,8,0.0,2.1962221421145665,-1.8429380522594014,-0.16590012111930452,2.477229412627,-0.16587121495067378,2.477169125579758,0.0017326548865505245,0.0017326578648793535,1,1,0.6213678142615894,0.6213511682933236
|
||||
102.888820043,40.77846573991707,29.43574303859596,3.1451323912,8,0.0,2.287708905830628,2.625791119690802,-0.15727129469739276,2.4776594933058957,-0.15724248737596158,2.477599409670077,0.002690534911184899,0.0026905387820510265,1,1,0.21728073509417073,0.2172760268062494
|
||||
103.19557191999999,40.77850514756496,29.435568792701837,3.1451098067,8,0.0,-12.421470073766011,7.002005847815302,-0.20004913130897511,2.4925655085592737,-0.20002044682431205,2.49250562567903,0.0024248952716508644,0.002424899738087367,1,1,5.873100148262409,5.873137711486425
|
||||
103.490544777,40.77839930569831,29.435791804111016,3.1450787781,8,0.0,6.404317577007626,-4.751701717715483,-0.1770797262080916,2.4687272734169503,-0.1770511365066574,2.468667585257819,0.003341554230851528,0.00334155800353974,1,1,2.741235235075055,2.741202241778591
|
||||
103.79051285599999,40.7784749257107,29.435625903134813,3.1450533254,8,0.0,-7.6004273334231796,3.645873635235818,-0.20286006154706074,2.472629977297526,-0.20283158126575374,2.472570481309415,0.0028731209709984052,0.0028731259432605584,1,1,2.015409314486934,2.015427733454083
|
||||
104.090351966,40.77841634503295,29.43574825658433,3.1450263435,8,0.0,2.7281939782569253,-2.859492226347901,-0.19270050920053408,2.4552574521047674,-0.19267211810549573,2.4551981416961564,0.0023494915200630018,0.002349494993483855,1,1,0.9435284037026268,0.9435082373129426
|
||||
104.389806983,40.77842780570886,29.435727102963487,3.1449975084,8,0.0,0.9424829827748314,-1.5867888793652651,-0.18878053916918747,2.44202583657145,-0.18875225087497172,2.4419667177509017,0.0032042801303249313,0.003204284504091422,1,1,0.410803648845742,0.41079063430033097
|
||||
104.987601509,40.77838715145561,29.435794846287756,3.1449407994,8,0.0,6.661128223487629,-6.101425607283337,-0.16513497302660937,2.414217395883804,-0.16510676899558197,2.4141584684616033,0.0034288572319304523,0.003428859572455043,1,1,3.3177877141785297,3.3177512253676014
|
||||
105.288533049,40.77846216382953,29.43580035405293,3.1449158935,8,0.0,7.126065680357304,2.2286710036262396,-0.1399550724137456,2.4136436835884028,-0.13992695040047465,2.4135849380937993,0.0028119258004737327,0.0028119286115543375,1,1,1.915278549497782,1.9152632459093846
|
||||
105.588299162,40.77846169971941,29.43579029411358,3.144890674,8,0.0,6.276843244647709,2.1771309780926593,-0.11789319207303853,2.4129010513434523,-0.11786515133727225,2.412842495465837,0.0022296178807705742,0.0022296199087922493,1,1,1.4841271845769197,1.484113563002609
|
||||
105.889351366,40.778388648819615,29.435812094303827,3.1448580737,8,0.0,8.117142728472468,-5.935142440700305,-0.08954758394153112,2.385886816509528,-0.0895196280281664,2.385828443635583,0.0029894547302573996,0.0029894564715311177,1,1,3.9966701499532222,3.996631709356846
|
||||
106.189278637,40.77840557750106,29.435750195584248,3.1448353374,8,0.0,2.8918776837607414,-4.055222566483604,-0.07935161223082277,2.3651606272504333,-0.07932374463750984,2.365102430615614,0.002387401778956501,0.0023874033346079023,1,1,1.2455195808090649,1.2454968015428942
|
||||
106.791175527,40.77840323006157,29.43574337860497,3.144778087,8,0.0,2.3164133651908014,-4.315905047908086,-0.07113110075850416,2.343635126873031,-0.07110332517638407,2.343577113255705,0.0025118009886891074,0.0025118031090224824,1,1,1.2023184633380637,1.2022963094197625
|
||||
107.091497736,40.778436778988,29.435730719227195,3.1447502587,8,0.0,1.2477544380087653,-0.5903095265335452,-0.06660396734166393,2.3342169247891094,-0.066576285936159,2.334159087813497,0.0019750697659144632,0.001975071766606656,1,1,0.2546469287265158,0.2546366962354724
|
||||
107.390717099,40.77842286800877,29.435725388962275,3.144724253,8,0.0,0.7977933912840869,-2.135118651775233,-0.06368392482947031,2.3198834657293923,-0.06365633380845606,2.3198258201412676,0.002612155356439832,0.0026121579077035156,1,1,0.47245568541967436,0.47244243207368825
|
||||
107.69076054199999,40.77847437548708,29.435679079188088,3.1446967016,8,0.0,-3.1115045551059355,3.5847682605750473,-0.07405928675710421,2.323932381629599,-0.07403179698727018,2.3238749181411706,0.0020838146994083795,0.0020838178395598986,1,1,0.37023771045125037,0.37024701971042806
|
||||
107.990259152,40.778575978856864,29.435671971878207,3.1446739711,8,0.0,-3.7114713260220165,14.867785097533979,-0.08644709532398205,2.363967115421075,-0.08641970360342338,2.363909854180449,0.0026945958679444617,0.0026946003521457597,1,1,3.986240512509199,3.986279864851012
|
||||
108.290377153,40.77848803089528,29.435763304569612,3.144643253,8,0.0,3.9984852262883845,5.101196694746576,-0.07256719345477713,2.3726556430566137,-0.07253988698904752,2.3725985634359605,0.0007222983018188284,0.0007222910835521262,1,1,0.7680976689614438,0.768096600822383
|
||||
108.590324768,40.77840674691587,29.435810155729033,3.1446126187,8,0.0,7.95349315062081,-3.925355780912022,-0.04542784405095986,2.352651326689797,-0.04540061766788121,2.352594427296795,0.0021105285434090083,0.002110526884462772,1,1,3.204818000311497,3.204786174376157
|
||||
108.8897645,40.7784866879515,29.43571690840945,3.1445895836,8,0.0,0.08189631966750281,4.952062207680152,-0.044913909177813294,2.3609063455060246,-0.044886768587592676,2.3608496142451814,0.0044378626750388615,0.004437859448669967,1,1,0.15130161380385826,0.15130796421500153
|
||||
109.189272956,40.77837721391251,29.43579355552071,3.1445621139,8,0.0,6.5521673476258675,-7.204986154388666,-0.022703036420841424,2.3306718863097133,-0.022675976524992637,2.3306153306989055,0.0046108235578171735,0.004610822363879339,1,1,3.608651830395205,3.608614721330365
|
||||
109.489601521,40.778437751561064,29.43575687830399,3.144534226,8,0.0,3.456006717669939,-0.48230494820736625,-0.010882142044709489,2.321751514971228,-0.010855165779252813,2.321695115517193,0.00689682621425851,0.006896824678888186,1,1,0.6123240119892269,0.6123101306036841
|
||||
109.788668969,40.778472119259966,29.435873193916425,3.1445052662,8,0.0,13.27493272336549,3.3342263218730093,0.03371048508801465,2.3249704837090794,0.03373739510397354,2.3249142728007812,0.006291259068499985,0.006291257451895761,1,1,6.380301174463133,6.380277892794322
|
||||
110.088685347,40.77851461712074,29.435813746689142,3.1444834799,8,0.0,8.256615477610705,8.053590691168399,0.06125537899140779,2.3429241869042725,0.06128220589423718,2.3428681637621076,0.0053205581636758,0.005320556952973956,1,1,3.1673809060638636,3.167379330888535
|
||||
110.38830573199999,40.77851502614089,29.435674603109913,3.1444517653,8,0.0,-3.489356148547976,8.099008445764126,0.04944374815437101,2.3610314841820634,0.049470493409752236,2.3609756324273716,0.007436612455013347,0.007436609223763,1,1,1.1931448316254176,1.1931660847156957
|
||||
110.689310549,40.77844434129859,29.43566526139923,3.1444224258,8,0.0,-4.277952357592059,0.24948337890426078,0.034947347446852586,2.354386364692002,0.034973987073908454,2.3543306933901715,0.004342146250491533,0.004342143181090159,1,1,0.7739139660415919,0.7739170385390484
|
||||
110.989250537,40.77842957839253,29.435705245539097,3.1443996802,8,0.0,-0.9026400153982769,-1.3899330224764213,0.03185722645968709,2.34275830896186,0.031883787901157555,2.342702794908706,0.00342995672421923,0.0034299529147895323,1,1,0.3444188371333011,0.344411334860627
|
||||
111.28884737,40.778383721485675,29.43579639670037,3.1443683683,8,0.0,6.7920087572649965,-6.482322369857902,0.05434811322852545,2.3152519413477224,0.05437459233559115,2.315196594408384,0.003947427298284326,0.0039474251468377295,1,1,3.383328076488326,3.383293284323235
|
||||
111.588853558,40.77840727798202,29.435829072899192,3.1443440499,8,0.0,9.550411201158012,-3.866379195417343,0.08587352796041325,2.296040521764861,0.08589993058827533,2.2959853444043423,0.00377460847109771,0.003774607989483898,1,1,4.100356689097141,4.100323309839881
|
||||
111.888661488,40.778476237723346,29.435627351053608,3.1443190516,8,0.0,-7.478199317241971,3.791572028053035,0.060831207967230336,2.3006914429717287,0.060857520854505166,2.3006364272760895,0.005703134060648125,0.005703131557199411,1,1,2.1107054287738034,2.1107235001049798
|
||||
112.188572778,40.77842999711008,29.435769200210547,3.1442896734,8,0.0,4.496176917648033,-1.3434332844568146,0.07550362426453928,2.2894236921819426,0.07552985473283147,2.2893688479043037,0.0050102831822436324,0.0050102818955612815,1,1,1.0048058357714056,1.0047884842445727
|
||||
112.509268728,40.77848863702592,29.435727046805344,3.1442646497,8,0.0,0.9377414640198584,5.16850625736069,0.07834845210685203,2.2983295938851733,0.07837459930844246,2.2982749259998583,0.004206347306109525,0.004206346232175249,1,1,0.21168841573064553,0.21169383052364488
|
||||
112.78714309899999,40.77840758257461,29.435821719839687,3.1442312813,8,0.0,8.929692849047514,-3.8325550769532044,0.10757118925608085,2.279413489548924,0.10759726518395527,2.2793589733518664,0.005866659569088427,0.005866658480898435,1,1,3.660422913935731,3.66039127988533
|
||||
113.088659768,40.77833927598928,29.435735350146143,3.1442059424,8,0.0,1.638681852030667,-11.41798106521127,0.11259929292251043,2.2373433525825988,0.11262528701552782,2.237288992401715,0.004774282317951962,0.004774281998642834,1,1,4.269886588736204,4.269850393668102
|
||||
113.38886409,40.77839488894932,29.43576846383306,3.1441774564,8,0.0,4.434016986675925,-5.242181486790343,0.12684523186470037,2.2143108945800076,0.1268711465603753,2.2142566824047494,0.0064890181227647845,0.006489017777145021,1,1,1.9206069278767444,1.9205806898308344
|
||||
113.68951142099999,40.77838075838291,29.43575631724055,3.1441547012,8,0.0,3.4086467351803775,-6.811376155202259,0.1375951424922946,2.186704101358166,0.13762097452062413,2.186650049247359,0.005282433692013402,0.005282432778194828,1,1,2.205263947857198,2.2052359898025915
|
||||
113.989260915,40.77857874679042,29.435644907943733,3.1441334611,8,0.0,-5.996103370127801,15.175164594703089,0.11750225507419987,2.2264160709110565,0.11752800619696283,2.226362189914757,0.006914926362872633,0.006914922719672981,1,1,5.118596580204653,5.118639322938048
|
||||
114.289265556,40.77839690094162,29.435750382696117,3.1441005894,8,0.0,2.9076733595524717,-5.018751248606573,0.12663367274679935,2.2042956372324394,0.12665933592208567,2.204241916527815,0.005667024691023534,0.005667022225713598,1,1,1.451444959371552,1.4514223671001123
|
||||
114.588833337,40.778371307253465,29.435830762704406,3.1440673915,8,0.0,9.693063586560553,-7.86091499099751,0.15782618243143937,2.1736577170007365,0.15785177103246426,2.173604155309525,0.004482213970942784,0.004482213622408689,1,1,5.556513669247993,5.556471857456201
|
||||
114.888840037,40.77847669146775,29.435625682945115,3.1440462417,8,0.0,-7.6190147199372635,3.8419603197314127,0.13252747456278346,2.1787443355119405,0.13255297993422555,2.1786909251077833,0.005962483795458831,0.005962481494433777,1,1,2.240592704584958,2.240611032140692
|
||||
115.189560186,40.77835375135372,29.435740410425517,3.1440215412,8,0.0,2.065852061913539,-9.810497152035177,0.1388097281383493,2.142404939614427,0.13883514781732878,2.1423516839105816,0.004782591374005434,0.004782590091760635,1,1,3.34138934925154,3.3413572259576574
|
||||
115.489336112,40.77850261906437,29.43568273594442,3.1439931272,8,0.0,-2.8028137226797756,6.721206908725132,0.12924438405420857,2.1562554045435327,0.12926972613433363,2.156202304847968,0.0061929806253289464,0.006192977963715539,1,1,0.7794142708813215,0.7794305410871012
|
||||
115.78865623,40.778475859387065,29.43569758531993,3.1439690217,8,0.0,-1.549286326522283,3.7495543116374344,0.123809748254845,2.1610605360382493,0.12383499908110622,2.161007605764624,0.0021924365458718697,0.0021924351424033803,1,1,0.158123220540164,0.15813005850012807
|
||||
116.088615814,40.778488111275344,29.43569599085394,3.1439388386,8,0.0,-1.683884849376096,5.110121983174292,0.11792907119018955,2.169966243089534,0.11795424180810343,2.169913483524128,0.00021134244177629675,0.00021134744151075647,1,1,0.3117259101710598,0.31173616245232955
|
||||
116.38932000199999,40.77846074926609,29.4357319706018,3.1439150014,8,0.0,1.3533903590764036,2.071580954072881,0.12196168500877828,2.169638526797789,0.12198676883354997,2.169585913437358,0.0014693006602340892,0.00146930239686234,1,1,0.055193724080093584,0.0551912528971137
|
||||
116.689433934,40.77840232949211,29.435662316756446,3.1438865791,8,0.0,-4.526531013677266,-4.415911929128822,0.10696024500692757,2.149896088269294,0.10698524418128445,2.1498436299698245,0.002229338310967576,0.0022293403319958967,1,1,1.7459333195938835,1.7459262599496144
|
||||
116.988628421,40.77836464245484,29.435801153567763,3.1438573335,8,0.0,7.1935682542829955,-8.601041237681692,0.12977313708654445,2.1176544432658098,0.12979806133514427,2.1176021314272857,0.003815429085995529,0.003815430316174807,1,1,4.387639761029482,4.387601831021167
|
||||
117.288622656,40.778568635752734,29.435571040454743,3.1438344679,8,0.0,-12.231711651922023,14.052345269999602,0.09003751865335789,2.153358645125741,0.09006234766307909,2.153306499130192,0.0009808469585961992,0.000980850559779259,1,1,8.682115535445359,8.682165582853603
|
||||
117.58859688599999,40.77849198122573,29.43571859915703,3.1438061489,8,0.0,0.22462283973065378,5.539878347862469,0.0904873207582463,2.1634409060566284,0.09051206856791755,2.163388920252655,0.0004420848144718909,0.0004420807164761707,1,1,0.2565198014506812,0.2565274401068849
|
||||
117.889267597,40.77839819803216,29.435856545480497,3.1437760204,8,0.0,11.869547356349424,-4.874700887314883,0.12820725496462265,2.1425146417586425,0.1282319445030726,2.1424627995787477,0.0018213862147956293,0.0018213847989011073,1,1,6.103127284103215,6.103089944072038
|
||||
118.18925035699999,40.77848669861005,29.43557632569855,3.1437516721,8,0.0,-11.785566317985518,4.953255213612871,0.09013033403017254,2.15084360824079,0.09015492287381233,2.1507919214631355,0.002291899835912941,0.002291895506520516,1,1,5.2892229428024615,5.289250625558416
|
||||
118.488600464,40.77849404973213,29.435755113169805,3.1437264621,8,0.0,3.3069978404332434,5.769585951407449,0.10030172560338076,2.161649250392937,0.10032625203255219,2.1615977265287256,0.0036555601450566906,0.0036555561922853555,1,1,0.6649471531959904,0.6649497957756486
|
||||
118.788619989,40.77842343002102,29.435738228381336,3.1437000538,8,0.0,1.8816497820526588,-2.07270720408414,0.1060331341798202,2.1490688977124535,0.10605757737396075,2.1490175200690507,0.0007349358973861432,0.0007349319698955161,1,1,0.5143178476144177,0.5143049651818874
|
||||
119.088612536,40.77841724797491,29.435721974197453,3.1436732702,8,0.0,0.5095315814966738,-2.759221343040873,0.10735642600274618,2.1345333840416907,0.10738078624440303,2.134482147029845,0.00031330058027143705,0.00031329384383578876,1,1,0.54335276532033,0.543340800713253
|
||||
119.389304289,40.778555010876715,29.43574741326513,3.1436482881,8,0.0,2.656998549369945,12.539298202218301,0.11539086192466345,2.1652914288621576,0.11541516097794896,2.165240361358802,0.001504917318730227,0.0015049156789440834,1,1,2.649519218596993,2.649538523172747
|
||||
119.689220088,40.7784894541068,29.435625183544307,3.1436220583,8,0.0,-7.661170793669791,5.25924668947087,0.09074290400952228,2.1743505887866,0.0907671093179752,2.174299674053897,0.0019984215336126044,0.0019984176295411247,1,1,2.392096933943126,2.39211759231819
|
||||
119.98920987,40.778509657545804,29.43572685374226,3.1435966579,8,0.0,0.921443516978922,7.502827187886154,0.09335834997470006,2.1900785334248325,0.0933824872264046,2.1900277658398704,0.003310826859886012,0.0033108224813738507,1,1,0.6583176727253142,0.6583283306500893
|
||||
120.28859296499999,40.77843185199225,29.43573716801685,3.1435658946,8,0.0,1.7921374969607822,-1.1374504587575978,0.09873373931217969,2.1802792250444014,0.09875779910865987,2.180228607504231,0.0032396134284915896,0.003239610188322282,1,1,0.3509932553410093,0.35098276387917154
|
||||
120.58856737699999,40.778442055943685,29.435847773186666,3.1435402503,8,0.0,11.129015069048805,-0.004297304734079254,0.13352791919779672,2.173863630490778,0.13355191440537395,2.173813162627027,0.0028407490211356163,0.002840748409664825,1,1,4.489409511466889,4.48938545426255
|
||||
120.888605363,40.778413524637244,29.435714537943454,3.1435127454,8,0.0,-0.11820961674721693,-3.1726966192600923,0.13278306984022611,2.1582928329012603,0.13280699821880254,2.158242498436957,0.0040689064025109575,0.004068905636547095,1,1,0.6400878628145702,0.6400762548546381
|
||||
121.18918755899999,40.77846244238724,29.435755805129798,3.143485028,8,0.0,3.3654120845543414,2.259602070131082,0.1429327886759477,2.158570112566642,0.1429566415525474,2.1585199289728227,0.003452830433978393,0.0034528298303915777,1,1,0.37668336014476556,0.37667801527743955
|
||||
121.489205613,40.77838263271019,29.43582844269622,3.1434527747,8,0.0,9.497215287300426,-6.603227506222868,0.17239636570407496,2.13309475136314,0.17242016631604687,2.133044696822765,0.004641638673736179,0.004641639585374768,1,1,4.865063602849278,4.865027890056831
|
||||
121.789145445,40.77847370913209,29.43567250049038,3.1434353722,8,0.0,-3.666853561701711,3.510770041312065,0.16030136303250775,2.137091741163921,0.16032507829210035,2.13704183755032,0.0038874799851709692,0.0038874796682445856,1,1,0.5733307473589135,0.5733404056519693
|
||||
122.088818246,40.778403094175985,29.435672075938818,3.1434029104,8,0.0,-3.702696532168045,-4.330994527811425,0.14821207820497292,2.1183469626146647,0.1482357117878824,2.118297198707289,0.003117033656760767,0.003117032965093483,1,1,1.4710422640155771,1.4710344590087654
|
||||
122.388559152,40.77841889743876,29.43576156355079,3.1433774387,8,0.0,3.851518974574355,-2.576048013083667,0.15978808300176325,2.1047533063218107,0.1598116528332724,2.1047036775092574,0.00419709335024653,0.004197092651229228,1,1,0.9857658130169217,0.985749078894207
|
||||
122.689168354,40.77833883797665,29.435712424694895,3.1433486935,8,0.0,-0.29660262301134493,-11.466622379621743,0.1583589908061482,2.0655832315624236,0.15838248571949531,2.0655337359356647,0.0034062414384160673,0.003406242188924247,1,1,4.11705083442187,4.117021551082503
|
||||
122.9891725,40.77844602597569,29.435839041494376,3.1433232073,8,0.0,10.391917400982537,0.43657220076024206,0.19031199407403615,2.0608093767644378,0.19033542868890657,2.0607600144497,0.004443087725202034,0.004443088442920456,1,1,3.831957206090256,3.831936279663311
|
||||
123.288727228,40.77841181977343,29.435879546018008,3.1432974811,8,0.0,13.811165805475385,-3.3620082321242757,0.23267273717998893,2.0452514398891255,0.23269611834201467,2.0452022187538335,0.003633819237208848,0.003633821238948856,1,1,7.339915569859944,7.339880616033372
|
||||
123.588538808,40.77848512957943,29.435683041300923,3.1432771432,8,0.0,-2.7770374117047427,4.7790060887101875,0.22328914796150817,2.0530977352702764,0.22331244895097765,2.0530486621968214,0.002855506041197403,0.0028555066245484293,1,1,0.49307843367032744,0.49308950684157965
|
||||
123.88921323699999,40.77843506207809,29.43566032362046,3.1432464652,8,0.0,-4.694781950225928,-0.7809703504781954,0.2080777742093268,2.044977104623771,0.20810100273583598,2.0449281607197833,0.003787005558973908,0.003787005342796906,1,1,1.0506071693796004,1.0506092198075816
|
||||
124.18911326199999,40.77853053935242,29.435749425937747,3.1432219187,8,0.0,2.8269016505086224,9.821744553167576,0.21618129070747158,2.0672249894141768,0.21620444677724351,2.067176196759313,0.0011792246894583704,0.0011792240418339898,1,1,1.5965217714652395,1.596534371998691
|
||||
124.489114936,40.77841567457455,29.4357213452947,3.1431941188,8,0.0,0.45644193631239727,-2.933946869762632,0.21691316200708716,2.052957796704456,0.21693625014763504,2.052909141812188,0.0008826281849133495,0.0008826294915757334,1,1,0.5601729050677612,0.5601616145988129
|
||||
124.788740216,40.778388651942834,29.43587053895844,3.143162806,8,0.0,13.0508274622469,-5.9347885558104805,0.25657386241203417,2.03016977492723,0.25659689522523527,2.0301212475889066,0.0003212616247446809,0.00032126093536179515,1,1,7.357527848003391,7.35748914465636
|
||||
125.088768113,40.778461516095135,29.435678737539163,3.1431420998,8,0.0,-3.140345880624653,2.156737576774049,0.24609095830169062,2.030521949589776,0.24611391321821588,2.0304735610880345,5.8519117195495814e-05,5.852405998040691e-05,1,1,0.4160674564548092,0.4160733669453844
|
||||
125.389435857,40.77849320919432,29.435682669288667,3.143114647,8,0.0,-2.808440945073228,5.6762443338957205,0.2366770623933597,2.040897233359599,0.23669994457826973,2.0408489890306085,0.0021108569268517372,0.00211085816145272,1,1,0.6327052907915576,0.6327182147821521
|
||||
125.689345,40.7784290808341,29.435733279118242,3.1430861714,8,0.0,1.4638511235466352,-1.445186610940236,0.24045359063009594,2.0310059344687224,0.2404764050755166,2.0309578217220867,0.0011311955576921672,0.0011311959613675275,1,1,0.3254248056234729,0.3254152761385949
|
||||
125.989075179,40.778502027810255,29.435768697466404,3.1430623957,8,0.0,4.453732304741414,6.655549167284461,0.25341991212942644,2.044104943326307,0.253442659687972,2.044056968463942,0.0002462815135594291,0.0002462767276415297,1,1,1.1167425951536318,1.1167455986366475
|
||||
126.288543183,40.77847673754677,29.435758864280665,3.1430344977,8,0.0,3.623653388688345,3.847074343879688,0.2637336820878393,2.049199780248166,0.26375636570309435,2.049151943853579,0.0008228134382755611,0.0008228104559887031,1,1,0.4817538565312781,0.4817521916423865
|
||||
126.58914577499999,40.77847258121225,29.435692433189853,3.143010196,8,0.0,-1.9842098991981847,3.385514319661477,0.25684934403439497,2.052943869222146,0.2568719519420087,2.052896170396769,0.0011350395924740297,0.0011350379536918859,1,1,0.2219025937795806,0.22190911995737123
|
||||
126.88929318699999,40.77837723351552,29.435649491101845,3.1429807398,8,0.0,-5.60922791958964,-7.202810023416051,0.23891052520428033,2.026908713352519,0.23893306264953826,2.026861136157043,0.002037787037076496,0.0020377845595130144,1,1,3.1513658830765756,3.151355733667958
|
||||
127.188718272,40.77825552822179,29.435854030217985,3.1429480309,8,0.0,11.657243032092554,-20.71813024604464,0.23892291310441757,2.0268811451433852,0.2389454448365282,2.026833569980595,0.0019826881195843544,0.001982684650905441,0,0,16.241061897443448,16.240995051704477
|
||||
127.488510376,40.77836030593312,29.435852966611364,3.1429274489,8,0.0,11.567438883509798,-9.08260481432238,0.27358957634931563,1.995656031030936,0.2736120678696038,1.995608574803828,0.002858519562584219,0.0028585204927444223,1,1,7.377626207904406,7.377584205496573
|
||||
127.789462315,40.77842023892851,29.435790313219808,3.1429031967,8,0.0,6.278460024506259,-2.4270744161647864,0.2918986506320271,1.983200350322041,0.291921070935609,1.9831530290021167,0.00032947827308551413,0.0003294824753352475,1,1,1.7355829699125167,1.7355638748776276
|
||||
128.089336746,40.7784670823641,29.43573262747928,3.1428743994,8,0.0,1.4088413677402396,2.7748691455582333,0.29528861883622837,1.9854145737202453,0.2953109706544249,1.9853673855040668,0.0016736298818765657,0.0016736306780279016,1,1,0.058933429743495185,0.05893329734106899
|
||||
128.389099501,40.77844680093787,29.435854027621698,3.1428478077,8,0.0,11.656990427396023,0.5226333462901345,0.3299291657244396,1.9813275399371992,0.3299514651259866,1.9812804854011918,0.0037510098649057677,0.003751010831737392,1,1,4.698501225156817,4.698479838811903
|
||||
128.689268545,40.7784357250065,29.43584292893577,3.14282229,8,0.0,10.720082409320364,-0.7073461251771425,0.36148775076118794,1.973806248771187,0.3615099947041618,1.9737593192146194,0.002125371434739762,0.0021253726792885997,1,1,4.050752377321154,4.050730030992781
|
||||
128.988608949,40.778491299244465,29.435776183318172,3.1427967386,8,0.0,5.0856603717220255,5.464146325108953,0.37590583470689276,1.9835687018350137,0.37592801934092573,1.9835219117893539,0.0012296208782354866,0.001229624998404554,1,1,1.0758921587751669,1.0758918942126035
|
||||
129.288541346,40.77850997580776,29.435751400519617,3.1427704654,8,0.0,2.993589223438782,7.538170606977436,0.38379384266368294,1.9990321306701944,0.3838159603556514,1.9989854744376745,0.002635166292376154,0.002635164496858174,1,1,0.9353748581335738,0.9353822727375485
|
||||
129.589339752,40.77831782822091,29.435789304935206,3.1427435388,8,0.0,6.193353864950503,-13.799745305675255,0.4013500771835821,1.9551384471755096,0.4013721428746183,1.9550919066774872,0.0021544964407289907,0.002154492517153446,1,1,6.785823334098046,6.785781168159667
|
||||
129.889238206,40.77846441923689,29.435721199783014,3.1427195666,8,0.0,0.4441580510362093,2.4791297370203775,0.40154244626591024,1.956507744503093,0.40156443284048904,1.9564613333796173,0.001212465428236263,0.001212459474879536,1,1,0.006194757291595814,0.006195777988047577
|
||||
130.189047528,40.77837528869336,29.435891301292713,3.1426883418,8,0.0,14.803511017770704,-7.418769124799381,0.44498574128164886,1.9305629948518703,0.44500768450280836,1.9305167054139922,0.0004275831805251258,0.00042756853811995986,1,1,9.434426201618194,9.434383948827707
|
||||
130.48904063,40.778326252499234,29.435840443102265,3.1426634577,8,0.0,10.510254806394537,-12.864227482963841,0.47545778235291153,1.8895005018808417,0.4754796632912171,1.889454325432721,0.0012949661099783858,0.0012949609375993304,1,1,8.534386282728908,8.534339798974719
|
||||
130.788558713,40.77830632634613,29.435851724180797,3.1426402108,8,0.0,11.462566657513513,-15.07701790671003,0.5084630271466867,1.8426902816837594,0.5084848596557956,1.8426442203085571,0.0016979009037825692,0.0016979001764440421,1,1,10.773124620553697,10.773072318163644
|
||||
131.089458027,40.77830879635293,29.435678891621325,3.1426106875,8,0.0,-3.127346002374492,-14.802732788686043,0.4974869159894103,1.7968407513085494,0.4975086817546498,1.7967948086948415,0.0009182720262271652,0.0009182747901578325,1,1,6.659187761765714,6.65915926201433
|
||||
131.389366265,40.77837523911376,29.435958727962937,3.1425860802,8,0.0,20.49542593002838,-7.424261356530672,0.49755580496092716,1.7967104370343387,0.49757756329772035,1.7966644897762671,0.0013110153574515356,0.0013110151352055013,0,0,16.306070005950218,16.306019724527538
|
||||
131.689027369,40.77838770816593,29.435847143251394,3.1425599538,8,0.0,11.075847298291578,-6.039597847687764,0.5293347778676655,1.7751645804247267,0.5293564864606773,1.7751187549004077,0.002430677383149892,0.002430675424874303,1,1,5.402057938091289,5.40202527507587
|
||||
131.989302774,40.77823982743186,29.43579588119613,3.1425329074,8,0.0,6.748506327217826,-22.461703164904815,0.5293842816355597,1.7750823563416434,0.5294059843891806,1.7750365348335335,0.004391127649815792,0.004391126207891031,0,0,14.502018079791114,14.501958776597872
|
||||
132.288553114,40.77839461131796,29.435701920687006,3.1425095453,8,0.0,-1.1833123589805097,-5.27301357886437,0.5242013503001768,1.7557049266114162,0.5242229883526749,1.7556592238918012,0.004533994014164157,0.004533992505150612,1,1,1.214222820001185,1.214211083437787
|
||||
132.589069764,40.77842920980071,29.435672614177513,3.1424827938,8,0.0,-3.6572589614680666,-1.4308641591090927,0.5116118718020273,1.7469823653593723,0.5116334463716268,1.746936789684695,0.004072476754514126,0.004072476766706916,1,1,0.856551929557748,0.8565519510174752
|
||||
132.889341812,40.77842421644057,29.435792706244605,3.1424585342,8,0.0,6.4804699739532365,-1.985373009462464,0.5295614814425006,1.7366431579495656,0.5295829847520747,1.7365977012066314,0.005936731019089871,0.005936730253824895,1,1,1.5944696612725402,1.5944527936513502
|
||||
133.18916926699998,40.77841420225611,29.435765382437527,3.1424299404,8,0.0,4.173895622108842,-3.0974461210730824,0.5404545228918415,1.72342970792233,0.5404759718698203,1.7233843728674978,0.005084828075777502,0.005084827406557811,1,1,1.0000117462806193,0.9999962895850161
|
||||
133.512440094,40.77839068903962,29.43579414468564,3.1424070499,8,0.0,6.601901178761912,-5.708578276555128,0.5585901406830112,1.7030957765427246,0.558611534327802,1.7030505571829893,0.004218931985898458,0.004218931244690369,1,1,2.556378666309532,2.5563542558701675
|
||||
133.78957709099998,40.77843967377858,29.435843370377043,3.1423783308,8,0.0,10.757346609279926,-0.2688364016886193,0.5890821560345263,1.6976626703633335,0.5891034898292595,1.6976175779699323,0.005803125713107911,0.0058031244560428925,1,1,3.8344053498215027,3.8343856491040715
|
||||
134.089267823,40.77844426647733,29.43583310839,3.1423520713,8,0.0,9.891067045704832,0.24117987649397804,0.6168335508254776,1.6936952922367654,0.6168548334247056,1.693650315734215,0.00467250430241138,0.004672503636843219,1,1,3.1649143198115746,3.1648970831692242
|
||||
134.38918071999998,40.778444550789786,29.435721077025185,3.1423259752,8,0.0,0.433795423267697,0.2727460762812145,0.6163031312629367,1.6898070321206797,0.6163243445341617,1.6897621891796766,0.006307719049026887,0.006307718950848951,1,1,0.04626443333899618,0.046261862428303914
|
||||
134.68904839,40.77839768128546,29.435821706862416,3.142299509,8,0.0,8.928598680880572,-4.932089545349339,0.6410361451088165,1.6718121031451652,0.6410573080959623,1.6717673707627496,0.005117412031139475,0.005117410907297158,1,1,3.46804965320113,3.4680236857437508
|
||||
134.989035747,40.77838410754612,29.4358222537552,3.1422773477,8,0.0,8.974767196922798,-6.43944817775382,0.6658477130826532,1.6497227839367408,0.66586881225234,1.6496781793473272,0.006682666661258074,0.006682664418674488,1,1,3.9705648996052227,3.9705360030583794
|
||||
135.288436253,40.77844446549317,29.435846158879862,3.1422495074,8,0.0,10.9927408842844,0.26328206541102744,0.6964717307455448,1.6460056712111597,0.696492784203549,1.6459611800091547,0.00545628498419187,0.005456285526639996,1,1,3.8854062914431573,3.8853878209505335
|
||||
135.58908734,40.778371196118336,29.435668432548056,3.1422246791,8,0.0,-4.0102601538211555,-7.873261763513527,0.6825349590866906,1.620231579307849,0.682555944124998,1.6201871947467084,0.004308737176428459,0.004308737319821637,1,1,2.8204333495167035,2.820421581868906
|
||||
135.88898938,40.77838471285594,29.435827788256002,3.1421969161,8,0.0,9.441969529893628,-6.372228167690366,0.7084510446825901,1.598625662479365,0.708471977272515,1.598581405837011,0.0057246446478933415,0.005724644486720556,1,1,4.190153363856228,4.190124285215056
|
||||
136.188994188,40.77845530250711,29.43574274999597,3.1421697638,8,0.0,2.2633467289982083,1.4667206178185117,0.7130520945578704,1.5982890345744163,0.7130729690663148,1.5982448900798834,0.004586781115109512,0.004586780386980438,1,1,0.08750035884985818,0.08749775246607555
|
||||
136.489480767,40.77844593420132,29.43576612182648,3.1421492167,8,0.0,4.23631010278493,0.4263746120409648,0.7234380261695084,1.5950833100730268,0.723458833232127,1.59503929791455,0.005937964143216974,0.005937963341476585,1,1,0.4779216623971679,0.47791405620494076
|
||||
136.788988275,40.77838893248246,29.435784469280442,3.1421205557,8,0.0,5.78513891123314,-5.903643977185505,0.7383724869285445,1.5749410179649843,0.7383932435748213,1.5748971110077674,0.004813669668406951,0.004813668914274112,1,1,2.178053497237424,2.1780311704857573
|
||||
137.089040225,40.77853666439141,29.435662644761894,3.1420951179,8,0.0,-4.49883293162418,10.501928691470262,0.7229404413724491,1.5989540182936912,0.7229611398762618,1.5989102359943839,0.0037800483531315455,0.003780048407329214,1,1,2.766718227141105,2.7667435560992084
|
||||
137.389015153,40.77848492575677,29.435643948160696,3.1420677603,8,0.0,-6.077133075115743,4.756373630413831,0.7029136011593641,1.607373090966477,0.702934216351974,1.6073294313338164,0.005002749485135054,0.005002751153664579,1,1,1.8886231696437739,1.888639473080238
|
||||
137.68854106199998,40.77841901348641,29.435737817632003,3.1420404332,8,0.0,1.846975960498116,-2.563161734943216,0.7063077794675874,1.5962238569362048,0.7063283420481301,1.596180307637759,0.0039962671162268515,0.003996268844642135,1,1,0.43532988502884473,0.43532005677727764
|
||||
137.988988688,40.77843359383249,29.435669092396477,3.1420151278,8,0.0,-3.9545544398757726,-0.9440189093997032,0.6925132842663178,1.5894161754767113,0.69253377262658,1.5893727535742674,0.005171640329295074,0.005171642989883212,1,1,0.9267148958761285,0.9267168621331138
|
||||
138.289215452,40.77840668474178,29.435809698677552,3.1419880238,8,0.0,7.914910548884761,-3.932260231582844,0.7137536028305269,1.5746840332483674,0.7137740429129136,1.5746407158040734,0.004176069405626741,0.004176070437330364,1,1,2.5599327777586147,2.559911406022012
|
||||
138.589254213,40.77850494758424,29.43572605114033,3.1419639811,8,0.0,0.8536909695435926,6.979787695340513,0.7141980355036359,1.5890679435661264,0.7142184151181546,1.5890247401920194,0.0032752377498197417,0.003275239137242357,1,1,0.6527135014865106,0.6527237468478787
|
||||
138.88920914599998,40.77846574152323,29.43557003302724,3.1419371994,8,0.0,-12.31677378504446,2.6259793727789447,0.6760018687193269,1.5918676723425256,0.6760221747744317,1.5918245956458008,0.004350831131498275,0.0043508330000848585,1,1,6.142421621469757,6.142442751306653
|
||||
139.188554269,40.778431587521126,29.435645104007094,3.1419144814,8,0.0,-5.979565658601683,-1.1668176816010378,0.6566526704074362,1.5845154136542166,0.6566729103480494,1.5844724420744127,0.003486238693829387,0.003486240821753042,1,1,1.7659939259164288,1.765998358671385
|
||||
139.489151526,40.77846526114754,29.43581515459645,3.1418889557,8,0.0,8.375471855069085,2.572628324499649,0.6790101819104597,1.5871713010771706,0.6790303686605164,1.58712846082974,0.004471714293938422,0.00447171715659521,1,1,2.168708943795207,2.1686995782737384
|
||||
139.788953228,40.77847443398955,29.43572374732359,3.1418626177,8,0.0,0.6592117979129505,3.5912643133658744,0.6790301214771385,1.592463503269234,0.6790502502374366,1.5924207684127287,0.003610714400558041,0.0036107169527120953,1,1,0.089652252555326,0.08965611455617123
|
||||
140.089263138,40.77847694451548,29.43553823056465,3.1418382805,8,0.0,-15.001416145493101,3.8700724516816103,0.6334639159029047,1.598469955354876,0.6334839711119769,1.598427333386305,0.0028422310599863004,0.002842232714454555,1,1,8.97543787387185,8.97546495633057
|
||||
140.388965475,40.778444464272226,29.43576038490125,3.1418105573,8,0.0,3.752020282456564,0.2631392709645652,0.6424156920267154,1.5949803694921156,0.6424356902052094,1.594937864892949,0.00373409234807832,0.0037340937694398104,1,1,0.3902575038782908,0.39025045641335576
|
||||
140.689369536,40.77850459752443,29.435686307623964,3.1417864942,8,0.0,-2.5013059943644707,6.940914055924454,0.6333403912600759,1.6090725734767155,0.6333603315170528,1.6090301811092567,0.001138232699230627,0.0011382372558278063,1,1,0.9939510167126623,0.993965690797401
|
||||
140.98894317399998,40.778415160608574,29.43570363466247,3.1417587794,8,0.0,-1.0386244904549486,-2.9910225410744555,0.6284070860016219,1.5969585672079798,0.6284269613499005,1.5969162827624472,0.0010205602208302777,0.0010205656514597657,1,1,0.5729897429743943,0.5729834399102296
|
||||
141.289123966,40.778507230928575,29.435643399043258,3.141733719,8,0.0,-6.123485452670736,7.23335471863943,0.6089026933412695,1.6117875126459569,0.6089225072117009,1.6117453453402295,0.00036470924448651914,0.0003646865329896385,1,1,2.3517330294019287,2.3517533374720854
|
||||
141.588375736,40.778484294178405,29.435727622376163,3.1417081479,8,0.0,0.9863290469283658,4.686234660410693,0.6100128837562061,1.6198240640304415,0.610032637979698,1.619782010770089,0.00027997676673388925,0.0002799571862812544,1,1,0.2160938716733608,0.21609911934975984
|
||||
141.889571062,40.77844416849034,29.435714067801822,3.1416828125,8,0.0,-0.15789717141676457,0.23029185326352047,0.6077573616900064,1.6162532070278022,0.6077770644985747,1.6162112564347388,0.0022285212996162812,0.002228516278883498,1,1,0.0643431500749282,0.06434163473847469
|
||||
142.182408768,40.77844201324482,29.435755836771207,3.1416570472,8,0.0,3.3680841653785683,-0.009046594344832468,0.6157416583446761,1.6119611648318342,0.6157613024400135,1.6119193266087495,0.0012542922314201985,0.001254289416534356,1,1,0.33350434319248107,0.3334973813027209
|
||||
142.488918863,40.77847255619416,29.435789905014033,3.141626939,8,0.0,6.24399589839941,3.3827384370958864,0.6319318062259475,1.6166533848342735,0.6319514043540686,1.6166116570602043,0.0004001125858470446,0.0004001113577777869,1,1,1.211446250356652,1.2114415859743008
|
||||
142.788978299,40.778441084680324,29.435832852426625,3.1416052268,8,0.0,9.869460039031642,-0.11215752617501804,0.6585318506608657,1.612104140064991,0.658551397908777,1.6120625200271692,0.0007198249236826447,0.0007198190472918959,1,1,3.141541371909821,3.141525104047341
|
||||
143.088551933,40.77838020324658,29.435781677414063,3.1415770699,8,0.0,5.5494604543704495,-6.873022543415531,0.6725588386150292,1.5900309244897775,0.67257834232801,1.5899894097461724,0.0010953660121702487,0.001095361012274308,1,1,2.4688857493073124,2.4688630917151912
|
||||
143.389442727,40.77841533399286,29.43569408343181,3.1415531083,8,0.0,-1.8449042464438248,-2.9717681243993295,0.6653787842083843,1.5780683139338287,0.66539821517179,1.5780269018089341,0.0019705331223308785,0.0019705309324137142,1,1,0.6928155387489673,0.6928106204162281
|
||||
143.689528484,40.778482303293316,29.435687925099714,3.1415308371,8,0.0,-2.364765614093675,4.465147921932828,0.6566712928725646,1.5855973854363155,0.6566906694000016,1.585556084210075,0.001894159594920999,0.001894159574201126,1,1,0.5168839741528772,0.5168935545949069
|
||||
143.98936553299998,40.77834407635108,29.43581270358122,3.1414983472,8,0.0,8.168581164884177,-10.884898360107334,0.6782250291774341,1.553205596989514,0.678244355630014,1.5531643947787994,0.0027561534146880854,0.0027561533984922794,1,1,5.504246132092452,5.504212648236084
|
||||
144.288912886,40.77839373946665,29.4357731556702,3.1414752513,8,0.0,4.83008482482962,-5.369830860941981,0.6900804623351084,1.5352723625976967,0.6900997372889793,1.5352312629905427,0.002473191338521767,0.002473191367095944,1,1,1.690885625320338,1.6908671085355582
|
||||
144.58925174499998,40.778454612749634,29.435770405541263,3.1414484881,8,0.0,4.597924782869868,1.390124388191374,0.701230345710725,1.5349199130175954,0.701249572492418,1.5348789196907362,0.0020633125230049942,0.002063311536874787,1,1,0.5507692837385965,0.5507635874689751
|
||||
144.888420514,40.778386216344266,29.435812514809843,3.1414239824,8,0.0,8.152640610716935,-6.205267881869124,0.7225575381266882,1.5148641689772084,0.7225767107347957,1.514823277115528,0.002864419493728398,0.0028644172547773114,1,1,3.3378875210962518,3.3378630332848744
|
||||
145.189363943,40.77843197536449,29.435672924787706,3.1414004944,8,0.0,-3.631038245731466,-1.123749344353796,0.7101156696292317,1.5080843428768134,0.710134787117915,1.5080435543634716,0.0023636270837647418,0.002363626309202454,1,1,0.8383854468904874,0.8383866464247084
|
||||
145.489231569,40.77848167412765,29.435888455243045,3.1413772058,8,0.0,14.56323459623913,4.395293250826215,0.7496472091249183,1.5154876015717014,0.7496662779683175,1.515446922076754,0.003133260847092211,0.0031332584047303806,1,1,7.101457179725846,7.101443349863632
|
||||
145.789286803,40.778499705342966,29.435676517110036,3.1413501261,8,0.0,-3.327784304654101,6.397639445243289,0.7379899359542358,1.528077369982764,0.7380089505259703,1.5280367973765336,0.0025795659743992833,0.002579566632909629,1,1,1.1310702431182567,1.1310847124442442
|
||||
146.098223021,40.778503044660134,29.43574637786262,1.8961795295,8,0.0,2.5695958636832867,6.76846907539655,0.7431822914240027,1.5415466435854002,0.7432012561493769,1.5415061784336657,0.0011124375012239913,0.0011124369680605214,1,1,0.7338212988009514,0.7338282789624287
|
||||
146.416729742,40.77843040685191,29.43576245410378,1.8961028237,8,0.0,3.9266955005650876,-1.2979319300979288,0.752259751482276,1.5342678826015113,0.7522786624720681,1.5342275161077736,0.001291062750695328,0.0012910613889189231,1,1,0.5451574704650552,0.5451479900198413
|
||||
146.703373407,40.7783935771695,29.43575729977606,1.8960299371,8,0.0,3.4915881402594766,-5.387854650116511,0.760001906823725,1.5165294191405974,0.760020768787761,1.5164891548954782,0.0026546638436954866,0.0026546641518380284,1,1,1.339874631239546,1.3398584241718854
|
||||
146.988898516,40.77850181037041,29.43577829982384,3.1412474096,8,0.0,5.2643269620024045,6.631403084260625,0.7728206732169173,1.5296089277133056,0.7728394830926617,1.5295687603775998,0.004776192493950169,0.00477619228899282,1,1,1.3150382033478527,1.3150412755807661
|
||||
147.288885855,40.77853147095654,29.435759687121948,3.1412257311,8,0.0,3.6931115280150837,9.925199227051973,0.781047891248541,1.5510826462831793,0.7810666525699689,1.5510425914319461,0.00499925564066746,0.004999255023637122,1,1,1.8805484715310663,1.8805595628828342
|
||||
147.58896181,40.778456779373904,29.435838990918448,3.1411945863,8,0.0,10.387646294043414,1.630733066125327,0.8081521394557015,1.5512498087002171,0.8081708512038827,1.5512098641812855,0.004537986200589548,0.00453798583752755,1,1,3.325798118817116,3.3257852720969727
|
||||
147.88840324699999,40.778433221004356,29.4356546923973,3.1411748379,8,0.0,-5.170149098112225,-0.985420586604344,0.7913547378655406,1.5448421562867933,0.7913734003052142,1.544802295622359,0.006634378387449811,0.006634377355217966,1,1,1.4315941873882507,1.4315977272172067
|
||||
148.18938029699999,40.77853643597919,29.43567038952303,3.1411477326,8,0.0,-3.845049887781218,10.47656323082286,0.778269718305839,1.567540062625986,0.7782883178121826,1.567500314156944,0.005715310399569147,0.005715308411574756,1,1,2.5552431520700574,2.555265275241411
|
||||
148.48912920499998,40.77853526751418,29.435803993809156,3.1411274561,8,0.0,7.433312148044178,10.34680835706651,0.7970022960820276,1.5899862986526752,0.7970208627401617,1.5899466504041715,0.007742069070931355,0.007742067232477308,1,1,3.316327410607979,3.3163340602810116
|
||||
148.788927474,40.77853372225176,29.4357979563724,3.1410972212,8,0.0,6.923655021814996,10.17520704244852,0.8142580508955415,1.6117141272399875,0.8142765627031707,1.6116745868737363,0.006543778235237425,0.006543776782694764,1,1,2.997803612844837,2.9978106102381585
|
||||
149.088930576,40.77843748043218,29.435690325402717,3.1410719524,8,0.0,-2.1621425211456176,-0.5124142013893201,0.8059098157820821,1.6062891604007095,0.8059282681991966,1.6062497197824304,0.005273550796690946,0.005273549605481246,1,1,0.4199516639453097,0.4199518845900587
|
||||
149.388490023,40.778454153301084,29.43584882750935,3.141043031,8,0.0,11.21801504113947,1.3391098668429617,0.8351406285627065,1.6056940593643643,0.8351590482344353,1.6056547142713085,0.007121317216544509,0.0071213166668704815,1,1,3.9083946557936406,3.908380326792239
|
||||
149.689617584,40.7784452934037,29.435665770454964,3.1410213215,8,0.0,-4.23497970272805,0.3552142731408007,0.8209166127370378,1.6024799677486983,0.8209349687403048,1.6024407242718397,0.003935783475438831,0.003935781889642503,1,1,0.9612594785462416,0.9612640097628068
|
||||
149.989536307,40.77846979131055,29.43579366898959,3.1409907125,8,0.0,6.561736868932825,3.0756994147832,0.8369883511695965,1.6063083935404692,0.8370066748108769,1.6062692505586103,0.0027755466998835836,0.002775546447155622,1,1,1.236110455042212,1.236105433734845
|
||||
150.288849053,40.77838325810044,29.4358497229328,3.1409650529,8,0.0,11.293615357956938,-6.533775628913549,0.8662777849522466,1.585710398636981,0.8662960582194851,1.5856713470801405,0.003293999924431869,0.003294000515832027,1,1,5.419246819308715,5.419218786789793
|
||||
150.588852832,40.778480743253034,29.435779795098114,3.1409438461,8,0.0,5.390554055079028,4.29190761278633,0.8789552707398973,1.5924974116115604,0.8789734910497256,1.5924584557020127,0.0023316271298364976,0.0023316277821262147,1,1,0.9011010962117074,0.9010998571283388
|
||||
150.888974222,40.778492081269086,29.435707486881835,3.1409233689,8,0.0,-0.7134334777972584,5.550988156852919,0.8744647105233943,1.6025157688864364,0.874482886952041,1.602476922588236,0.0011219183710446754,0.001121921808505937,1,1,0.4411212633955015,0.4411302374514746
|
||||
151.19297228599999,40.77836761404488,29.4358557206129,3.1408894669,8,0.0,11.799920461609767,-8.271041367276661,0.9049722022983268,1.577679046153423,0.9049903331532009,1.5776402868228556,0.0014514595252942916,0.0014514615176623416,1,1,6.477545820781918,6.477514381633276
|
||||
151.491826135,40.77856639686361,29.435628634502276,3.1408723057,8,0.0,-7.3698454362592205,13.80371102731474,0.8818993675180428,1.6084237847527443,0.8819174498171723,1.6083851284328108,0.003131083628704804,0.003131082156129297,1,1,5.803964511289487,5.803996480962522
|
||||
151.791167147,40.77845860326579,29.435780127511762,3.1408458835,8,0.0,5.418616964187946,1.8332702783123553,0.8945417780330862,1.6089444678482936,0.8945598088905063,1.6089059091629812,0.0034956643113463115,0.0034956635095038046,1,1,0.7428401965936179,0.7428346730737609
|
||||
152.09132702899998,40.77850724400783,29.435696387023896,3.1408233391,8,0.0,-1.6504412014547727,7.234804816885843,0.8874479706769841,1.6229852242373004,0.887465943661645,1.6229467705948315,0.002372400895509338,0.002372399046716328,1,1,0.9398834980154849,0.9398964864793152
|
||||
152.39076318,40.77842717889647,29.435613932127186,3.1407951029,8,0.0,-8.610981026085419,-1.6563912149306634,0.8610305324560636,1.6148575349083065,0.8610484566187605,1.61481916939302,0.0010538551591076693,0.001053846868434731,1,1,3.4913644463446554,3.4913711233133573
|
||||
152.690737713,40.77857317909395,29.435713751898806,3.140771406,8,0.0,-0.1845641738026502,14.556871532283987,0.8581438021371771,1.6471430699418308,0.8581616742654095,1.6471048094685896,0.0013370357819164238,0.0013370329583257679,1,1,3.7780992174307872,3.7781227309570404
|
||||
152.990810539,40.77853563951784,29.435656280815877,3.1407466754,8,0.0,-5.036052945429765,10.388117207006202,0.8417459401755987,1.6690005823442673,0.8417637588616587,1.6689624133097616,0.0029315726899635155,0.002931569718666046,1,1,2.9574108987931047,2.9574334230177937
|
||||
153.29075203,40.77856435126231,29.435624580709323,3.1407214449,8,0.0,-7.712051187319201,13.576548107250376,0.8180636967347739,1.6986200881606477,0.8180814598946201,1.698582025359726,0.0033155660375890567,0.0033155601673998747,1,1,5.801749235958743,5.801780505685537
|
||||
153.590232898,40.77859134882573,29.435611020448224,3.140696046,8,0.0,-8.85675240627489,16.574618827268385,0.7913225557545884,1.73559044665869,0.7913402632415535,1.7355524897384635,0.002216982055446043,0.002216980136493556,1,1,8.312860696757285,8.312898354397248
|
||||
153.890176494,40.77844556498886,29.435709981128152,3.1406691677,8,0.0,-0.5028789708936107,0.3853725107316104,0.7876380562069976,1.7322986112979817,0.7876557118162322,1.732260745035903,0.0008597152272734364,0.0008597207780183928,1,1,0.10105008995110151,0.10104945315831024
|
||||
154.189771705,40.77847091874399,29.435638330599698,3.140643465,8,0.0,-6.5513477917938,3.2009004695032024,0.7674090382355926,1.7359380834647042,0.7674266447127779,1.7359003124171237,0.0011227891738126916,0.0011227976844297575,1,1,1.9892061406351857,1.9892179637944685
|
||||
154.48985778,40.77840595185098,29.435833560819635,3.1406167673,8,0.0,9.92926517925923,-4.013645055220395,0.7926600491553711,1.7216547565769367,0.7926776036183325,1.7216170686711716,0.002602817888076149,0.0026028209856818856,1,1,3.7629618157100966,3.7629404964182287
|
||||
154.796833553,40.77856802443552,29.435727925334522,3.1405949952,8,0.0,1.0119023803019764,13.98444868698277,0.7932752490529482,1.7520341875527972,0.7932927619910246,1.7519966036370858,0.0030603552776166873,0.003060355679405016,1,1,3.3583473375316832,3.3583676882011484
|
||||
155.089000877,40.77846200139409,29.435687781829962,3.1405732525,8,0.0,-2.376860631112056,2.2106295615158102,0.7845732823694719,1.753155107229705,0.7845907440662977,1.7531176164361262,0.0028523344980562596,0.0028523342372520927,1,1,0.36687876038306255,0.366883531112335
|
||||
155.389234869,40.77848912442888,29.435651749522517,3.1405440941,8,0.0,-5.4185711530733105,5.222634097960039,0.7674255969318298,1.7617457010995594,0.7674430074375511,1.7617083031215937,0.004291217164516667,0.004291216385503717,1,1,1.6553842671675942,1.6553978809440388
|
||||
155.688779722,40.77853700224908,29.43574402743687,3.1405214921,8,0.0,2.3711806208304775,10.53944667412397,0.7718708280071419,1.7833692112360051,0.77188819091463,1.7833319118321211,0.0037485726749830945,0.003748571783485142,1,1,1.812543765965432,1.812556407039904
|
||||
156.00472975099999,40.77843982653269,29.435632909592506,1.893723756,8,0.0,-7.0089721654487676,-0.25187761210427784,0.7505191432116526,1.7783328398985914,0.7505364478454661,1.7782956328955035,0.0031224703609071583,0.003122468866873682,1,1,2.27430547624669,2.27431182054342
|
||||
156.28894785,40.778424572739674,29.435699949611674,3.1404694954,8,0.0,-1.3497027332341989,-1.9458088400728455,0.7447020614121134,1.7692125901934979,0.7447193233118762,1.7691754680560197,0.004377759852195027,0.00437775785799426,1,1,0.46855111962933516,0.4685475529543293
|
||||
156.598681347,40.778476709628556,29.435685386480056,1.8935763877,8,0.0,-2.5790665494317624,3.8439735990034776,0.7356126627412085,1.7743133256268304,0.7356298747355148,1.7742762976872377,0.003590691684498167,0.0035906911313246764,1,1,0.49422995074492826,0.4942375241299439
|
||||
156.88921375,40.77855427289765,29.43563412774393,3.1404228485,8,0.0,-6.906128488250217,12.457348644221137,0.714609989246719,1.8005367980605254,0.714627150681519,1.8004998611822862,0.004824017917525749,0.004824017111938785,1,1,4.652056842798581,4.652083983921946
|
||||
157.189496968,40.778457687786485,29.43574607987994,3.1403953331,8,0.0,2.5444430256327464,1.7316050962566254,0.7196599405802999,1.8003517397849156,0.7196770547583627,1.8003148956196704,0.0039263740193353335,0.0039263728907663435,1,1,0.12076955637533039,0.12076717952105068
|
||||
157.488997099,40.77846261092988,29.43571922661555,3.140369853,8,0.0,0.2775906420629825,2.278317908252811,0.7183918071324146,1.8015554708954087,0.7184088797118915,1.8015187124102026,0.005133412617882691,0.00513341124807352,1,1,0.012139920044725066,0.012141251748869562
|
||||
157.790021033,40.77846395493502,29.43580012587442,3.1403459276,8,0.0,7.106803512331304,2.427572584484895,0.7358819759953156,1.803065051148651,0.7358990033110822,1.8030283850087636,0.004207421869270432,0.004207421315140828,1,1,1.4795581499297705,1.4795513163629146
|
||||
158.089564489,40.77842767731437,29.43572684339633,3.1403238319,8,0.0,0.9205712841500927,-1.6010470416336258,0.7363571023722506,1.7947803209565292,0.7363740862684416,1.7947437496448018,0.0033268938945390826,0.003326894650761682,1,1,0.2599040670033609,0.25989826885146544
|
||||
158.391882602,40.77850158308509,29.435576034799908,3.1403001515,8,0.0,-11.810120248459361,6.606170680874703,0.7021628555788697,1.8064781331695163,0.7021797812570425,1.8064416407822828,0.004432367814701006,0.00443236937085515,1,1,6.189900834609958,6.189924045204892
|
||||
158.688738836,40.77855592189616,29.435710541400987,3.1402761303,8,0.0,-0.45558206725508155,12.640466111886614,0.6990082465751358,1.8328755429689472,0.6990251262429461,1.832839152365988,0.003542650074656272,0.003542649305939043,1,1,2.66840534112477,2.668424399417115
|
||||
158.988835397,40.77848605046034,29.435669089583723,3.1402458751,8,0.0,-3.9547887705733036,4.881270106905151,0.686329912251793,1.8403210242908712,0.6863467449397433,1.8402847103642508,0.00458940047374427,0.004589399113971229,1,1,0.9879718684804977,0.9879824851601817
|
||||
159.28930716,40.77851639739412,29.43565156329079,3.1402240903,8,0.0,-5.434289909730148,8.251286780875711,0.6696935997735948,1.855883285064469,0.6697103811069831,1.855847069771112,0.003726505484966645,0.0037265044750179415,1,1,2.2675963419588108,2.2676141577902884
|
||||
159.589166345,40.77844700532853,29.435715881653355,3.1401960012,8,0.0,-0.004778563578921595,0.5453216769447303,0.6678473239848108,1.8527198539914604,0.667864062289661,1.8526837334176534,0.0029255348019986325,0.002925535447309881,1,1,0.05473597975509582,0.05473467716970319
|
||||
159.88941431199999,40.77841193812196,29.43560958897624,3.1401716164,8,0.0,-8.977615839954034,-3.3488731083850314,0.641664911975599,1.840075258784639,0.6416815943027839,1.8400392087411257,0.003876444881855835,0.0038764475735725674,1,1,3.956943017004993,3.956946257378157
|
||||
160.189259477,40.77842043744134,29.43570985679685,3.1401468149,8,0.0,-0.5133747508118451,-2.4050322838160954,0.6385435353010963,1.8298206354047417,0.6385601739127724,1.82978467729852,0.0030954576494698397,0.0030954595885462066,1,1,0.45036421460864295,0.45035877236492694
|
||||
160.488745711,40.77844244692214,29.435620983454612,3.1401221997,8,0.0,-8.015732172586432,0.039116682350723325,0.615042758454597,1.8254336484805613,0.6150593435507884,1.8253977656310127,0.003999996130306065,0.003999998431080827,1,1,2.770827899787235,2.7708353999598523
|
||||
160.7887518,40.77854077253941,29.43561825728424,3.1401014231,8,0.0,-8.245853195633405,10.958140229797134,0.5910886622165231,1.8475336060488488,0.591105198089266,1.8474978199707361,0.0032340114498995137,0.003234011393552597,1,1,4.691587704973365,4.691612924518016
|
||||
161.090036068,40.77841596269756,29.43566549611966,3.140070948,8,0.0,-4.258139942965614,-2.9019497055552987,0.5779684805562852,1.8360995801324749,0.5779849712549967,1.8360638859943479,0.0025386231538697145,0.0025386256222210656,1,1,1.3510408291784544,1.3510390226071185
|
||||
161.389200063,40.778473599469976,29.435640222163496,3.1400491668,8,0.0,-6.391668810556537,3.4985939541189253,0.5591160414947289,1.8400592607289048,0.5591324791443483,1.840023638582935,0.0033525378206391778,0.0033525412653781024,1,1,1.8123847590627873,1.8123956910176293
|
||||
161.689316478,40.778489635074884,29.43567390740377,3.1400246249,8,0.0,-3.548086364761874,5.279340015239074,0.5480348518893196,1.8483539409693674,0.5480512432314965,1.8483184145101013,0.002668809522250801,0.0026688095509764106,1,1,0.8720209857176184,0.8720313203438735
|
||||
161.988809355,40.77853859211894,29.435562191977372,3.1399996475,8,0.0,-12.978671693547232,10.716012126459253,0.5114878291678802,1.8697041248410902,0.5115041698828507,1.869668672751013,0.003451844456253305,0.003451841777153433,1,1,8.349744263376653,8.3497743137568
|
||||
162.289796324,40.77839547840681,29.43561552976486,3.1399717149,8,0.0,-8.476118383531757,-5.176718929720055,0.4873020685936653,1.8527534605571327,0.48731835776924004,1.8527180987346505,0.0028084842030713423,0.0028084832245811784,1,1,4.019663443413192,4.019662875688569
|
||||
162.58970542,40.77835841421677,29.435652213739182,3.1399449548,8,0.0,-5.379394277226717,-9.292686287977777,0.47154212068266377,1.8260303431657496,0.47155836242065696,1.8259950627026178,0.0022033240945971526,0.0022033247283377226,1,1,4.013487046923757,4.013476337990068
|
||||
162.88972467899998,40.778538073120124,29.435603610657207,3.1399261044,8,0.0,-9.482265632183697,10.658372197776622,0.4446638737461676,1.847168753900157,0.44468006565180757,1.8471335574136727,0.002911687153159379,0.0029116874651300213,1,1,5.31225486867667,5.31228043314672
|
||||
163.18969307999998,40.778456839978624,29.4357333031217,3.1399001231,8,0.0,1.465876796575838,1.6374560559785662,0.44745588517621987,1.8466811350684762,0.44747203496944143,1.8466460255831931,0.0023062397349614414,0.0023062410390421984,1,1,0.038564523765862356,0.038563002339862325
|
||||
163.489176909,40.77859211470857,29.435601869462285,3.1398787845,8,0.0,-9.629242828539311,16.659670798973156,0.42030883017218484,1.8821089267319469,0.42032492799686194,1.882073901538913,0.0029783916455639356,0.002978392061372393,1,1,8.557867256555822,8.557902204901106
|
||||
163.789245231,40.77857295342434,29.43568088313592,3.1398534325,8,0.0,-2.9592176750130132,14.53181159485723,0.41129207833846454,1.9123247619677686,0.4113081324579809,1.912289829963262,0.002426575754486746,0.002426570268004177,1,1,3.9837411149242232,3.9837648141550406
|
||||
164.08969056499998,40.778445804919166,29.43558266188397,3.1398274465,8,0.0,-11.250696323457065,0.41202521032078454,0.38005172701480977,1.9087197011705122,0.3800677278633658,1.9086848536658567,0.0018995088512448583,0.0018995052142566683,1,1,4.951919173133667,4.951930323358032
|
||||
164.419459126,40.778471638868574,29.43570277976488,3.1398012239,8,0.0,-1.1107908588853792,3.2808672219971675,0.37598665525222047,1.9120465190348057,0.3760026187329621,1.9120117502273313,0.0025538771085625547,0.0025538744582173987,1,1,0.12212537125362916,0.12212922641365054
|
||||
164.689492821,40.77848740374306,29.43563162685542,3.139778312,8,0.0,-7.11725099348533,5.031554013583465,0.35597941996636995,1.9194503732401944,0.3559953335701858,1.91941568879422,0.0020048487161100424,0.0020048477939509832,1,1,2.240933362908268,2.240946825198987
|
||||
164.98939984999998,40.77844062401545,29.435734618351564,3.1397529621,8,0.0,1.5769039779043201,-0.16332059625143036,0.35915348696236893,1.914514464916224,0.3591693611692626,1.914479865508402,0.002567492733919661,0.002567491963121019,1,1,0.15057430422318988,0.15056967831086185
|
||||
165.289254678,40.77849962763277,29.435598046434926,3.1397295669,8,0.0,-9.951981682616529,6.389015695790207,0.331646361666714,1.9251378432147166,0.33166218598815944,1.9251033253720768,0.002093799772002381,0.002093798008643948,1,1,4.278890902334563,4.27890961029194
|
||||
165.588712646,40.77842789321586,29.435761171371205,3.1397021229,8,0.0,3.818412103356652,-1.5770703351409006,0.3409654145431251,1.9168525795569389,0.3409812022020949,1.9168181426850748,0.001619129256204494,0.0016191297524862226,1,1,0.711988628256553,0.7119792524831918
|
||||
165.888739125,40.778394875469544,29.43570217360988,3.1396753251,8,0.0,-1.1619615290040495,-5.243679647771513,0.336936022469334,1.899827062770133,0.33695176253525927,1.899792703455901,0.0021475775628941006,0.002147578681130853,1,1,1.2260121768720316,1.2260028764446969
|
||||
166.189723884,40.77842562118199,29.43561304612469,3.139652881,8,0.0,-8.685774287378344,-1.8293747408641774,0.31289861953940057,1.8910222523379994,0.3129143134363006,1.8909879726393224,0.0017120813053406615,0.00171208080511149,1,1,3.2445941470443715,3.2445986622013705
|
||||
166.489099318,40.77846185455956,29.435683852999148,3.1396294194,8,0.0,-2.708517851067083,2.1943237547338774,0.30479409923454504,1.8917087373110018,0.30480975129120325,1.8916745398858037,0.0022023996545370975,0.0022023986591869008,1,1,0.3310662549657923,0.3310701374210678
|
||||
166.788732894,40.77858066379308,29.435583460103405,3.1396093415,8,0.0,-11.183290988745243,15.388053046780506,0.2742487605107548,1.923619662936141,0.2742643627852586,1.9235855513687223,0.001825850836075657,0.0018258446097472844,1,1,8.82303114527369,8.823064708630138
|
||||
167.089711987,40.77844066217428,29.435775101487646,3.1395764443,8,0.0,4.994340114393759,-0.15908155718596612,0.28681862896442034,1.918666017376831,0.28683418567916436,1.9186319838135126,0.0014104359749555183,0.0014104342312425808,1,1,0.8998093073282046,0.8998008285840697
|
||||
167.389623575,40.778410597956494,29.435686092838434,3.1395564341,8,0.0,-2.519440925373432,-3.4977029973839358,0.2793292760166265,1.9059540940093211,0.2793448025007598,1.9059201408216302,0.0018463907257520215,0.0018463886514266219,1,1,0.9387688692136215,0.9387637883575949
|
||||
167.68913317,40.77843573077489,29.435717145819346,3.1395320237,8,0.0,0.1019376458292036,-0.7067133065749233,0.2788731655646693,1.8997699512286417,0.27888864332160535,1.8997360757138972,0.001471263314817445,0.0014712627380546264,1,1,0.15351674615601277,0.15351298380009978
|
||||
167.989419097,40.77838866011134,29.435829442378168,3.1395019927,8,0.0,9.581603935914353,-5.933886748903846,0.3035888250738299,1.8813710851397332,0.3036042815242797,1.881337286983896,0.0018977104515124847,0.0018977156830885533,1,1,4.489072325561602,4.489050086412682
|
||||
168.289365201,40.778544789467304,29.43558199367558,3.1394850089,8,0.0,-11.307087207867855,11.404222627052288,0.27277840880365267,1.9037405632628397,0.2727938092316027,1.9037068478763126,0.0015310881358123116,0.0015310888129062004,1,1,6.883225253243824,6.883252549601417
|
||||
168.58924408299998,40.778407094535616,29.435790591102013,3.1394559176,8,0.0,6.301919057881719,-3.8867543281484602,0.2887400517872049,1.8901751925501964,0.28875541784528974,1.8901415530867671,0.0012060659703814094,0.0012060657132527582,1,1,2.0586971610914535,2.058681748661347
|
||||
168.888898793,40.77855972308429,29.435587208378085,3.1394368012,8,0.0,-10.866879625253372,13.062594607907647,0.2592223649993325,1.9163465839333846,0.2592376807928812,1.916313028219459,0.0015810549924086632,0.0015810555571662143,1,1,7.272031572472954,7.272060703452693
|
||||
169.189662492,40.77851423264229,29.43568029958163,3.1394087546,8,0.0,-3.0084817147241854,8.010890508972476,0.25058426652633103,1.9306352410343217,0.250599542022393,1.9306017675296614,0.001257986360814822,0.0012579861747567193,1,1,1.2140647232048223,1.2140774615659284
|
||||
169.489089455,40.778447013924335,29.435680738422803,3.1393842057,8,0.0,-2.971439407198943,0.5462768339463263,0.2420775033604929,1.9273883535757412,0.24209273407206025,1.9273549525935842,0.0016222832728001477,0.001622283400485337,1,1,0.416959491393621,0.41696096916372666
|
||||
169.789137993,40.77850604866645,29.43556250727052,3.139361675,8,0.0,-12.952062175122357,7.102073743921074,0.20722789877320047,1.9394935680590566,0.20724308327473212,1.9394602506077696,0.0013267112267140867,0.0013267126185693564,1,1,6.872264909522319,6.872287109503899
|
||||
170.088956705,40.77848520413143,29.43568137099672,3.1393383254,8,0.0,-2.918038198537491,4.787285114229181,0.1990098476124996,1.9461549541449419,0.1990249924733455,1.9461217141056826,0.00104112804712749,0.0010411295947385466,1,1,0.5330942440043943,0.5331019017002177
|
||||
170.389700694,40.77847322772026,29.43570444429342,3.139311447,8,0.0,-0.9702775784479942,3.457308591967475,0.1958776465468751,1.9496682626933068,0.1958927472570293,1.949635102862673,0.0013675148329238545,0.0013675160657858035,1,1,0.10025606798857302,0.10025958682310519
|
||||
170.689685722,40.77848732291905,29.435674965665633,3.1392863565,8,0.0,-3.4587520110289707,5.0225759248789155,0.18626603841952513,1.9568400472847358,0.18628109951958488,1.9568069660997036,0.0010832931764670195,0.0010832939371593583,1,1,0.692208920591602,0.6922174487259477
|
||||
170.98925884599998,40.77841679134944,29.435722904195806,3.1392632296,8,0.0,0.5880386229533974,-2.8099294251506595,0.18732372661647748,1.9457100961420004,0.18733874443107365,1.9456770870605908,0.0014006077261852004,0.0014006084682900136,1,1,0.5130802077476365,0.5130727300466967
|
||||
171.289082601,40.778507657178736,29.435658788363316,3.1392422304,8,0.0,-4.824377420677983,7.280688680187894,0.1741381837094292,1.9581418405549869,0.1741531615548622,1.9581089122873803,0.0011382140178266302,0.001138215082824623,1,1,1.5407009485197667,1.5407142366375262
|
||||
171.588802745,40.77852925712782,29.435688669570393,3.1392167584,8,0.0,-2.301918580429246,9.679353805085281,0.16764598937903094,1.9760600212291366,0.16766092317948525,1.9760271708667358,0.0001080494700858155,0.00010805351991594038,1,1,1.5519333627008027,1.5519473875741137
|
||||
171.888911464,40.778382581471305,29.43581578489772,3.1391897284,8,0.0,8.428689980672447,-6.608918857843982,0.18933723231113656,1.9561514248411687,0.18935213319278407,1.9561186536627377,0.002648128506737061,0.0026481292498298265,1,1,4.105166372362492,4.1051448863544175
|
||||
172.189695024,40.77851821365663,29.435642720955848,3.1391672663,8,0.0,-6.18072600122368,8.452982644017762,0.17261277191138905,1.9712114741524625,0.17262762939065868,1.9711787779180265,0.0038267849637301666,0.0038267852768444337,1,1,2.40485921670719,2.40487556504772
|
||||
172.489657789,40.7784935727331,29.43573310909315,3.139141913,8,0.0,1.4494968321274875,5.716614790185906,0.1759751115635383,1.979909042746351,0.17598992786350146,1.9798764335135584,0.006445542290674736,0.006445542487146619,1,1,0.371940120285367,0.3719442191117068
|
||||
172.789101789,40.7784550607901,29.435570941267468,3.1391200692,8,0.0,-12.240105504494766,1.439887803596885,0.14342443984640557,1.978647007553429,0.1434392132624307,1.9786144666421162,0.0035293979062704438,0.003529397980511463,1,1,5.562896765345073,5.562909239367301
|
||||
173.08925964099998,40.77841857597463,29.435753905484145,3.1390932075,8,0.0,3.20505320715541,-2.6117467926344653,0.15143613389612087,1.968035378980395,0.1514508706474055,1.9680029105483983,0.0018147790099023685,0.0018147785652370923,1,1,0.8082859787119416,0.8082760478869985
|
||||
173.388876889,40.77837731845515,29.43579740641867,3.1390713142,8,0.0,6.877246162714606,-7.193376439521539,0.16906827907149363,1.9468450108501818,0.1690829792245844,1.9468126155598622,0.0014039876697921304,0.0014039871026816878,1,1,3.5042491017133846,3.5042286751009635
|
||||
173.689738874,40.77846169862461,29.43575374597724,3.1390470761,8,0.0,3.1915861573099695,2.177007429400358,0.1769417569817769,1.9473970116729598,0.17695642077312687,1.9473646919170542,0.0023243882681985633,0.0023243863025923014,1,1,0.3304679924008838,0.3304651220805768
|
||||
173.989054228,40.77837690232732,29.435757083166482,3.1390181378,8,0.0,3.4733036190787328,-7.23958965876917,0.18562684473086272,1.9261408848199824,0.18564146555618358,1.9261086416913304,0.004821620118221793,0.004821616890657745,1,1,2.275884182800384,2.2758674436764337
|
||||
174.289047885,40.77846167731266,29.435671067633304,3.138997968,8,0.0,-3.787810663217133,2.174641026507137,0.17520725408846038,1.926760566298996,0.1752218380755211,1.9267283951139658,0.005285103645779494,0.005285102097132027,1,1,0.5704294406845813,0.5704339869759356
|
||||
174.588631312,40.77837332084391,29.435787627486338,3.1389727529,8,0.0,6.051744558488837,-7.637310395831568,0.1905333738026802,1.904739984025729,0.19054791867877782,1.9047078759453755,0.004015834357342122,0.004015834438057218,1,1,3.28685645011043,3.2868365307502394
|
||||
174.889630181,40.77845562710559,29.435613578285064,3.1389489555,8,0.0,-8.64084738524306,1.5027718543131703,0.16751958755030402,1.9038216107997883,0.1675340964792282,1.90378958688322,0.0034399526056240175,0.0034399529394612298,1,1,2.814791116172028,2.8147998025906635
|
||||
175.189405158,40.7784362326326,29.435828492871824,3.1389221101,8,0.0,9.501443292068561,-0.6509761002769904,0.19182371227977735,1.8979267376454863,0.19183818079777093,1.8978947838301745,0.0015822829539701578,0.001582291563386728,1,1,3.2859366299740387,3.2859232174915527
|
||||
175.48901052899998,40.77848655115668,29.43569019037718,3.1389008146,8,0.0,-2.173539276742973,4.936871512223905,0.1857488653474542,1.9049803752816339,0.18576331290805626,1.9049484934333463,0.001037156765380307,0.0010371726184741704,1,1,0.4078491457397601,0.40785595196427027
|
||||
175.78867259999998,40.77850977660568,29.435741095854056,3.1388767023,8,0.0,2.1237085019462354,7.5160489899368885,0.19074619168419202,1.9177921990671987,0.19076059198239054,1.9177603941844739,0.00037112652073161267,0.00037114847938726173,1,1,0.8382919758831096,0.8382979460168203
|
||||
176.089690124,40.77846928966859,29.435705241103914,3.1388507473,8,0.0,-0.9030138790359746,3.019989409463814,0.1879105711128762,1.920319326545679,0.18792493362046445,1.920287591030355,0.00047784749688952204,0.0004778496592277709,1,1,0.07024236335446778,0.07024506424750013
|
||||
176.432900252,40.77844209471615,29.4357430680438,3.1388257144,8,0.0,2.29019559452415,3.541634817298836e-07,0.19338560233869606,1.9159296377183452,0.19339993101250041,1.9158979796643998,0.0011755338191452192,0.0011755333346773484,1,1,0.24162857788096526,0.24162368010419327
|
||||
176.689333994,40.77850316809941,29.43568049509013,3.1388048568,8,0.0,-2.991978127252943,6.782177119596907,0.18511728056351445,1.9270596597511018,0.18513157030419056,1.9270280723487392,0.0006990332330406366,0.0006990328102306081,1,1,0.8944048843107614,0.8944150537877543
|
||||
176.989053453,40.77845631483919,29.43561381229718,3.1387757226,8,0.0,-8.621092865918195,1.5791443919580033,0.16220930481233084,1.9262488451106605,0.16222354820456675,1.9262173416873072,0.003046396834343447,0.0030463974674376196,1,1,2.797879100564685,2.7978876770701055
|
||||
177.289635532,40.778427292144315,29.435724926694157,3.1387542231,8,0.0,0.7587703711867811,-1.6438200518128452,0.16379807094145957,1.9181128186606708,0.16381228022850736,1.9180813797354548,0.0041013053139268485,0.004101304222868742,1,1,0.2973796472596051,0.29737401163154314
|
||||
177.589554652,40.77848056974773,29.435773887485244,3.138731707,8,0.0,4.891855608943157,4.272639566233182,0.1760359998632572,1.9234941261455296,0.17605017878333953,1.9234627570579124,0.00408665805140114,0.004086656976351698,1,1,0.9295256008448274,0.9295240614962893
|
||||
177.889383207,40.778395863606676,29.435873053365782,3.1387082595,8,0.0,13.26308313205883,-5.133935601085187,0.2099685955534178,1.9073807164296503,0.20998273459179612,1.9073494245876776,0.006339258357650186,0.006339255705814141,1,1,7.28530576719528,7.28528251350904
|
||||
178.188569651,40.7783885964721,29.43578250199226,3.1386856632,8,0.0,5.619067641984449,-5.940957930601049,0.22393189369534608,1.8895603478860314,0.2239460042578016,1.8895291182281102,0.005648323161967732,0.005648319946367522,1,1,2.429829021656341,2.4298125369312773
|
||||
178.48857826,40.77837808598709,29.435804699155625,3.1386590294,8,0.0,7.492872455884452,-7.108141707251412,0.24279732603157203,1.8690065626536077,0.24281139095731222,1.8689754181253422,0.007822647429051897,0.007822642363851707,1,1,3.711925845373879,3.7119059165383215
|
||||
178.78956344899998,40.77841799603584,29.43574292684061,3.1386382089,8,0.0,2.278276568721575,-2.676149121916038,0.2480149774931791,1.8587481117670446,0.24802901401086758,1.8587170268341486,0.006730283204961291,0.006730281118657388,1,1,0.6105813382342664,0.610572950281973
|
||||
179.08961284699998,40.77859216910981,29.435618036853423,3.138619476,8,0.0,-8.264454749670284,16.665710386183346,0.22600401743493023,1.8923462375040472,0.2260180168765847,1.8923152274473316,0.00548847995953992,0.00548847936415898,1,1,7.5067694857118905,7.506798651249753
|
||||
179.388993475,40.778448088206375,29.43566194130848,3.1385882222,8,0.0,-4.558221828007966,0.6655762626649744,0.21369445536439308,1.88955037099434,0.2137084088597605,1.8895194371795316,0.007476151459764659,0.007476150789848946,1,1,0.8586342541589618,0.8586373812125061
|
||||
179.688981505,40.7784076229616,29.43575965108538,3.1385629459,8,0.0,3.6900763116895816,-3.8280745812329973,0.2226444458230054,1.8766214621116992,0.22265836987681922,1.8765905931366258,0.006109009951716186,0.0061090087680589445,1,1,1.1654907377647588,1.1654793407551687
|
||||
179.988992835,40.778530746778976,29.435707022445907,3.138544176,8,0.0,-0.7526389681472899,9.844778694795018,0.2201514269491596,1.8946162983979469,0.22016530334647935,1.8945855121511845,0.008009475257029124,0.008009474445106943,1,1,1.4518342699213629,1.4518462272846697
|
||||
180.288680535,40.77853165485164,29.435829778066665,3.1385170969,8,0.0,9.609920928257164,9.945626025215633,0.24432757135494088,1.9128307405213432,0.24434142268427272,1.912800021616513,0.006576369278252832,0.006576368000517745,1,1,4.625165420347091,4.625167090570327
|
||||
180.58967718,40.77838110252193,29.4357548312218,3.1384904645,8,0.0,3.2832024160825926,-6.773159703222679,0.25211306460881105,1.8932472961894673,0.25212688876985145,1.8932166420173822,0.005215746397931981,0.005215744254755661,1,1,2.017332884961211,2.017317933129872
|
||||
180.888990229,40.778346105156274,29.435816407917432,3.1384657968,8,0.0,8.481287678057688,-10.659599950349998,0.2733606106347314,1.864851623899364,0.2733743892906967,1.8648210402022465,0.006951993796550355,0.006951989831543839,1,1,5.958932649719654,5.958907275574613
|
||||
181.18897607899999,40.778453142322945,29.435674287494322,3.1384451083,8,0.0,-3.5160024789295297,1.22683345901654,0.2635747034108029,1.8634645310373588,0.2635884526439961,1.8634340135368135,0.005572166496867213,0.005572164030050029,1,1,0.5266578311368081,0.5266607255364381
|
||||
181.489294029,40.77856632906132,29.43567994679734,3.1384240921,8,0.0,-3.038260048849179,13.79617856218672,0.2551345543446948,1.8902801585250868,0.2551482515462017,1.8902497210474807,0.007212248135917622,0.007212246535172482,1,1,3.57208962836049,3.572109153317858
|
||||
181.7886179,40.77838891236448,29.435678829385996,3.1383945819,8,0.0,-3.1325959250346465,-5.905879669084559,0.24641636614238424,1.8727625274414585,0.2464300350574934,1.872732152268971,0.005851438073222309,0.005851437567406238,1,1,1.7706976397103178,1.7706903890466335
|
||||
182.08953961699999,40.778317638246236,29.435823432823092,3.1383692747,8,0.0,9.07430886311338,-13.820838951723522,0.2690664366348919,1.8374809454572796,0.2690800727653664,1.837450626382105,0.004601183385597387,0.004601182668949654,1,1,8.307864082589804,8.307834090834909
|
||||
182.38955321,40.77835320781742,29.43577697115039,3.1383466853,8,0.0,5.152176863388519,-9.870855150854531,0.2815936919334623,1.8111504683122213,0.28160729579964977,1.8111202268100275,0.006092433802083686,0.0060924325201084885,1,1,3.9201355501067976,3.9201149040357057
|
||||
182.68894649199999,40.778384770517256,29.435777401677026,3.138322481,8,0.0,5.188517916603081,-6.365829100942984,0.2941647920084948,1.7928202974654301,0.29417836222724764,1.7927901123241687,0.004862200275941993,0.004862198669897324,1,1,2.3607356133024355,2.3607197552105643
|
||||
182.988958225,40.778468542255965,29.435769542220378,3.1383002339,8,0.0,4.525045507381281,2.936990841948119,0.3050028118507115,1.7953492269704197,0.3050163496691773,1.795319129178978,0.006278619263923337,0.006278617935168617,1,1,0.6744573758808675,0.6744547777024954
|
||||
183.288935339,40.778417585409386,29.435840260331606,3.1382740452,8,0.0,10.494811585898841,-2.7217419515079726,0.33107578576188657,1.7852475927388303,0.33108929292871236,1.7852175500510794,0.0050992569987482654,0.005099253066449445,1,1,4.198247454726489,4.19823143548819
|
||||
183.589498585,40.778479632130264,29.435789996597116,3.1382526375,8,0.0,6.251726334909281,4.168518519127738,0.3461630693728137,1.7906147204350287,0.34617654997489145,1.7905847456811197,0.004003245030448975,0.0040032420498438545,1,1,1.3903772320580965,1.3903746611106145
|
||||
183.88947185,40.778494691684735,29.435624494814647,3.1382365332,8,0.0,-7.719310147686622,5.840877834913751,0.32563109194803497,1.7996164449079062,0.3256445241087162,1.7995865418454353,0.005274355240929278,0.0052743534488561596,1,1,2.711160407362722,2.7111736592565148
|
||||
184.188947873,40.77846849032771,29.43570234486908,3.1382088044,8,0.0,-1.1475031861892906,2.9312229358580835,0.32184613293736536,1.802179433200379,0.32185953728453864,1.802149595613929,0.00420533279277998,0.004205331141356583,1,1,0.10680975071414901,0.10681268899350087
|
||||
184.488957137,40.77841708842597,29.4358035621518,3.1381837406,8,0.0,7.3968863959685995,-2.776935516949494,0.3399503663292015,1.7918713574180565,0.33996372317299983,1.7918415907054306,0.005431045275508664,0.00543104178488563,1,1,2.272437973646475,2.2724250444658742
|
||||
184.788601069,40.778379555356274,29.435844429711622,3.1381574807,8,0.0,10.8467814836856,-6.944964654481103,0.3667227514329499,1.7724348720596854,0.36673608831153065,1.7724051658131164,0.0044079014976260425,0.004407896504538619,1,1,5.683537935798548,5.683516194781588
|
||||
185.08950935,40.77845641970361,29.435798115235947,3.1381369929,8,0.0,6.937073716133125,1.5907877763315046,0.3834331983243293,1.772057329812868,0.38344650879020825,1.7720276884832813,0.0034517617108791236,0.0034517584998394303,1,1,1.5568336974257397,1.5568271362606187
|
||||
185.389059982,40.77849794547028,29.435730821200252,3.1381145753,8,0.0,1.2563614733753532,6.202205595423686,0.3857355361495651,1.7818685925954805,0.38574880254632155,1.7818390224792424,0.004546397043275275,0.004546394445177776,1,1,0.4656702887314093,0.46567531483041535
|
||||
185.68900233,40.778382585051965,29.435776156834077,3.1380882112,8,0.0,5.08343297193181,-6.608524278082748,0.3976490844512687,1.7632086351123033,0.397662321369028,1.763179127657882,0.003628132889900042,0.003628132800634352,1,1,2.3672956593393764,2.3672800857217147
|
||||
185.989531189,40.7784342621195,29.435688873046825,3.1380655067,8,0.0,-2.2847451325353845,-0.8698065896508707,0.3909049559523843,1.7573558963092424,0.39091815845073624,1.7573264531232375,0.004673738304053771,0.004673738500646974,1,1,0.41416622763763095,0.41416531798847095
|
||||
186.289454921,40.77844144166834,29.435722312310162,3.1380410626,8,0.0,0.5380736169422168,-0.07252069582583506,0.3912323371640074,1.7532896063900396,0.39124550525502855,1.7532602290023869,0.0037867660522894492,0.003786768259272384,1,1,0.07554271021751412,0.07554016432441538
|
||||
186.588963772,40.77846563084181,29.435729527519516,3.1380193326,8,0.0,1.1471543958404795,2.6136780885855764,0.39315708439729613,1.7551877020050006,0.39317021840399646,1.7551583865464526,0.00208611624127783,0.0020861172063713334,1,1,0.037125775311027905,0.037126186606748546
|
||||
186.888886282,40.77840694942789,29.435759801454015,3.1379941833,8,0.0,3.7027699182373772,-3.9028702418347403,0.4015669753382163,1.7426686720861355,0.4015800825431375,1.7426394231119136,0.00011811812127869146,0.0001181280010038291,1,1,1.1096194775221762,1.1096089361587487
|
||||
187.18947483099998,40.77840638074799,29.43576951751122,3.1379687469,8,0.0,4.522963869070822,-3.9660214780879515,0.41201758093937524,1.730021498167441,0.41203065476126705,1.7299923117845313,0.0016450873461632113,0.001645088206082976,1,1,1.3399106415361033,1.3398992909370318
|
||||
187.489448141,40.778469018705636,29.43553241945323,3.1379491444,8,0.0,-15.49197018463982,2.989915222042502,0.37163511692962037,1.732810490162624,0.3716481561724553,1.7327813649041892,0.003634403318913726,0.0036344020272429047,1,1,9.152868804501317,9.152885438899094
|
||||
187.789316839,40.77850298802215,29.435643432880497,3.1379250912,8,0.0,-6.120629431212367,6.762181531542947,0.35520223744884316,1.743934522965014,0.3552152370434186,1.743905467805797,0.0012917536803844485,0.0012917465494078823,1,1,2.0841123299526063,2.0841249705356226
|
||||
188.088952525,40.77837393246108,29.43571450008152,3.1379015842,8,0.0,-0.12140585340845043,-7.569393008782343,0.35402752796073206,1.7233144744645048,0.3540404869828885,1.723285478942721,0.00027243147731260964,0.00027240800790656166,1,1,1.944815428795947,1.9448037903889392
|
||||
188.388480262,40.77842793124901,29.435657448901267,3.137879984,8,0.0,-4.937455626269829,-1.572846105873847,0.340549567395364,1.716096178917429,0.3405625036631498,1.7160672497626952,0.0010470452032837637,0.0010470342444139449,1,1,1.251855947288956,1.2518566275829845
|
||||
188.689457227,40.77843529621165,29.435826850601128,3.1378547548,8,0.0,9.362809016250283,-0.7549654747547604,0.3634216940780965,1.71063401234155,0.36343459834588493,1.710605143748233,0.0014301746918838185,0.0014301743856755045,1,1,3.0705343883544445,3.070522782348913
|
||||
188.98890437699998,40.77840909569958,29.435690417910784,3.1378323596,8,0.0,-2.154334249869035,-3.664528183156641,0.3570042901570924,1.698752630901198,0.3570171580712366,1.6987238308661354,0.0024225838373474716,0.002422583450506842,1,1,0.8735863352168558,0.873581749021131
|
||||
189.289005469,40.778480012269185,29.435592901802234,3.137810954,8,0.0,-10.386275156614095,4.2107374479530435,0.32986990668417865,1.7043122354918097,0.32988273983056715,1.704283496149049,0.0023936745907860127,0.0023936752022862117,1,1,4.301335960986344,4.301349158340484
|
||||
189.58957121699999,40.77849432649621,29.43574692655508,3.137786273,8,0.0,2.615914743898469,5.8003202236980655,0.3356836414375358,1.713314480003495,0.33569644268056104,1.7132858002701847,0.00211689797690399,0.002116898682202078,1,1,0.5629733015347614,0.5629764440542371
|
||||
189.889496789,40.778430406429,29.435724144080634,3.1377594911,8,0.0,0.6927049961478912,-1.2979799027568322,0.3365166386724824,1.7067104193807692,0.3365294073717561,1.706681810751223,0.003046650931783129,0.003046651733940936,1,1,0.2070647402175883,0.20706055522670538
|
||||
190.188864531,40.778557816280745,29.435688280277102,3.1377400781,8,0.0,-2.334780232394759,12.850837173910653,0.3298097318723316,1.7311904682969734,0.32982246850289815,1.7311619213625256,0.0025856098573874475,0.00258561149271576,1,1,3.0301542054476687,3.0301709031295156
|
||||
190.488894182,40.7784766834672,29.435650779854964,3.137717265,8,0.0,-5.500427856962972,3.841069984502499,0.3150258048818516,1.7358484255603361,0.31503850199391215,1.7358199496408064,0.0034821025722846658,0.0034821049837025666,1,1,1.3246552116490464,1.3246632513480687
|
||||
190.789474974,40.77840018793022,29.435650721521462,3.1376890832,8,0.0,-5.50535846684344,-4.653730916213819,0.3004033353463176,1.7218184253696498,0.3004160025741342,1.7217900034790148,0.00031053083185067157,0.00031051898899912416,1,1,2.1327465443947946,2.132743746532034
|
||||
191.089658897,40.778500994650535,29.435670560227816,3.1376712541,8,0.0,-3.830641679814522,6.5408168154309685,0.2900058625586197,1.732379457237716,0.2900184967581112,1.7323511031342584,0.0005906506092380038,0.000590649468817899,1,1,1.133676848763935,1.1336867365485777
|
||||
191.388918077,40.77836126275744,29.43578685235551,3.1376406727,8,0.0,5.986311906789779,-8.976356444955893,0.30432485765905304,1.7089225752076376,0.3043374606503945,1.7088942764523503,0.0003080028655341998,0.0003080068899482657,1,1,3.7301649060929636,3.7301461561945697
|
||||
191.688893769,40.77841403593232,29.435648122655763,3.1376166878,8,0.0,-5.724744010534941,-3.1159152796353533,0.2891651329113354,1.6983767560555139,0.28917770313835983,1.6983485181977118,0.000925824801530361,0.0009258253523654326,1,1,1.830078706468485,1.830078087304736
|
||||
191.988897326,40.77852012082576,29.435630391731998,3.1376007716,8,0.0,-7.221511914288998,8.664774010651005,0.27019224948988996,1.71360708761506,0.27020478277712245,1.7135789173919596,0.0018001161563079766,0.0018001179985448939,1,1,3.11698619208554,3.1170017795220883
|
||||
192.288461941,40.77849433279623,29.43560462987787,3.1375750927,8,0.0,-9.396233095026517,5.801025336995804,0.2459434858632358,1.7225371861477088,0.24595598503569996,1.7225090765615707,0.0019286559471029486,0.0019286611135247,1,1,3.7413062774180017,3.7413201534842555
|
||||
192.589438354,40.778474181639645,29.435640196722094,3.1375553512,8,0.0,-6.393816422340478,3.563243680975477,0.22932778226666223,1.7265649707006803,0.22934025134499128,1.7265369172056773,0.0017703140837863898,0.0017703186032763908,1,1,1.664870289142613,1.6648785846947824
|
||||
192.889686026,40.778460607290214,29.435596883672446,3.137529098,8,0.0,-10.050143570680326,2.055821282320042,0.2033676024598745,1.7272699617257636,0.20338002866886426,1.7272419806245183,0.002612703329506475,0.0026127091811065347,1,1,3.8113388845000875,3.8113485303582397
|
||||
193.18963521,40.77843954473835,29.4356789322236,3.1375054852,8,0.0,-3.123912377357185,-0.2831734272787521,0.1951091155485343,1.7228815510681141,0.19512151079694456,1.7228536231877005,0.00224953152715771,0.00224953286899771,1,1,0.48934082372883725,0.4893412920401402
|
||||
193.488948282,40.7784288515074,29.43571639297788,3.1374810102,8,0.0,0.038385562165077505,-1.4706534006848342,0.19455894291544987,1.715948447688127,0.19457130802831085,1.7159205949484917,0.003021276674165051,0.0030212773359939845,1,1,0.22860545234053478,0.2286016115150357
|
||||
193.788848413,40.77837662240096,29.43565624036998,3.137458344,8,0.0,-5.039479250515869,-7.2706744757918464,0.18152609371589465,1.696372007918907,0.18153842463373004,1.6963442044132615,0.0025216886223822796,0.0025216890457672786,1,1,2.7907666496786545,2.7907601332374625
|
||||
194.098227565,40.77842244214222,29.43568303546644,1.8843874295,8,0.0,-2.777532548507419,-2.1824104948208998,0.174136020649503,1.6879409983563143,0.1741483196745775,1.6879132524753642,0.0020602402210704853,0.0020602401847138753,1,1,0.6515653476911688,0.6515631618974475
|
||||
194.399414171,40.778403038064624,29.435768640327982,1.8843145539,8,0.0,4.448915499634035,-4.3372252626675,0.18479852792334694,1.6748256863086215,0.18481079692950966,1.674798003211943,0.0027760025027868023,0.0027760019670834417,1,1,1.4693088950003317,1.4692976400605748
|
||||
194.698803695,40.77840074409981,29.43572899482489,1.8842414788,8,0.0,1.1021873813446317,-4.591970454957541,0.1871295080658786,1.661227873020796,0.18714174691289198,1.661200241416044,0.00037932493701979287,0.0003793140537749517,1,1,0.9072338068036158,0.9072252459572929
|
||||
194.998813003,40.77848595951128,29.435619472483495,1.884168815,8,0.0,-8.143277431112349,4.871173668742082,0.16618389920011278,1.6681956764166277,0.16619610952218097,1.6681681161446573,0.001996875305007348,0.0019968712800549713,1,1,2.73155801949541,2.7315693313828016
|
||||
195.298830719,40.778373549003426,29.43570546815805,1.8840956504,8,0.0,-0.8838480881479617,-7.611975786339903,0.16363275158437862,1.6480674723659245,0.1636449283909364,1.6480399614590533,0.003406282276020528,0.0034062807285274673,1,1,1.9627088036042697,1.9626983024534665
|
||||
195.598272536,40.778419367227556,29.435678750880566,3.1373160906,8,0.0,-3.1392216331819562,-2.5238784780443333,0.1553853950466423,1.639018972249355,0.15539753498815911,1.6389915230127112,0.0036453870231187894,0.0036453862224116143,1,1,0.7818670409666746,0.7818648142000624
|
||||
195.88939647,40.77835449741844,29.435671614880665,3.137290515,8,0.0,-3.741620099410641,-9.727646286653844,0.14563166462211585,1.6144126417440927,0.14564378324568164,1.6143852412658066,0.005763708109856664,0.0057637077312808266,1,1,3.432311169472566,3.43230064512509
|
||||
196.204794589,40.77845630286201,29.435675137386653,1.8838771496,8,0.0,-3.444257571967887,1.5778101134525573,0.13667542194043764,1.6143431029185658,0.13668750500696278,1.6143157666267862,0.005367028362542999,0.005367028845106977,1,1,0.46458941023910816,0.4645925007450153
|
||||
196.498729951,40.77843506617579,29.435719397220044,1.883804089,8,0.0,0.29199255627728954,-0.7805167850336099,0.1370762229790048,1.609143475382381,0.13708828273082788,1.6091161822708475,0.007436214663619788,0.007436215525947628,1,1,0.12892967680299366,0.12892661625612956
|
||||
196.80364507299998,40.77835997464983,29.435776698098223,1.8837333753,8,0.0,5.129126261702124,-9.119400957259307,0.14952136972145025,1.5859803442936444,0.14953339690338932,1.585953117436067,0.003542229576591647,0.003542232859758635,1,1,3.468402512158181,3.468385100919956
|
||||
197.10338542,40.77841178774884,29.435681609185583,1.8836595354,8,0.0,-2.897934381746613,-3.365576863404035,0.14187992772642308,1.575295739308612,0.1418919211423001,1.5752685781500595,0.0014476132405168705,0.0014476172957467413,1,1,0.8822179700284883,0.8822145929691984
|
||||
198.003359054,40.778507075647276,29.435775673292547,1.8834416452,8,0.0,5.042604740732503,7.2161099722803215,0.15417421883435492,1.5874917018427457,0.15418618766719663,1.5874645926888638,0.002079764605832402,0.0020797648198639246,1,1,1.5762116195765812,1.5762142243951465
|
||||
198.288789159,40.778429283577196,29.435743099525116,3.1371090333,8,0.0,2.2928535705995614,-1.4226718553220907,0.1595706626621541,1.5809996253927359,0.1595826055287379,1.5809725664706982,0.003944095604891089,0.003944096061509713,1,1,0.3671954910416911,0.36718999984875283
|
||||
198.59872189499998,40.77844973060298,29.43562095210856,1.883295724,8,0.0,-8.018377414258877,0.8479667313421684,0.13912247356509308,1.5794381665342414,0.13913438656513047,1.579411170979478,0.002837645212354247,0.0028376456543919627,1,1,2.422812011236876,2.4228181678431113
|
||||
198.898363157,40.778406708491325,29.435821676047347,1.8832235361,8,0.0,8.925996177008152,-3.9296217044952915,0.16111474375038132,1.5675133410775444,0.16112662569091996,1.5674863942418107,0.0018225231855965025,0.0018225224587191749,1,1,3.460849184194292,3.4608349956697553
|
||||
199.199573119,40.77849143910551,29.435637729123524,1.8831504311,8,0.0,-6.602120124655784,5.479679038914107,0.1441990051542143,1.575966026342361,0.14421085695462688,1.5759391430850358,0.00022443716271253436,0.00022443291980893878,1,1,1.9905935619447568,1.9906040628124506
|
||||
199.503358537,40.77837996290397,29.435766390121,1.8830770848,8,0.0,4.258962742063808,-6.8997133545013565,0.15445020560695538,1.5576999091741552,0.1544620286251207,1.5576730806653283,0.0005670762679737607,0.0005670761603996445,1,1,2.2143678613501607,2.214354169306553
|
||||
199.801808988,40.77839998705113,29.43582433553943,1.8830039199,8,0.0,9.150501667524837,-4.6760348564644305,0.17692563574179992,1.5442690016609857,0.17693743155861869,1.5442422278852,0.0016130377151606899,0.0016130371777694915,1,1,3.7849693165680858,3.7849541788024172
|
||||
200.103803665,40.77837464871457,29.435758650719883,1.8829319678,8,0.0,3.605630909201043,-7.489852450241851,0.18544144776258575,1.5248364020106429,0.18545321523274294,1.5248096827230033,0.0017315117829157663,0.0017315114475031207,1,1,2.2461605164148666,2.246146797995664
|
||||
200.403408367,40.778379706628506,29.43567642892927,1.882860799,8,0.0,-3.3352341926815976,-6.928173122014492,0.17672686839923052,1.5066296706196174,0.17673860479145617,1.5066030087134927,0.0027459529135830728,0.0027459522389422287,1,1,2.042296344484504,2.0422892452737678
|
||||
200.697249956,40.77843930844309,29.435667326997063,1.8827885503,8,0.0,-4.103582572036553,-0.30941344902684015,0.1660535265014462,1.5027429665676704,0.1660652319641014,1.5027163601706053,0.0024837048893056176,0.002483704764623227,1,1,0.7340732512798834,0.7340747103149432
|
||||
201.003342426,40.77826961243872,29.435857020625313,1.8827131427,8,0.0,11.909680308462512,-19.154082845919547,0.16605835146578873,1.5027860599376588,0.16607006486984155,1.5027594507428257,0.0020943454433804383,0.0020943446155940186,0,0,14.499389696345032,14.499355227963576
|
||||
201.30274884899998,40.77845961795863,29.435670603111923,1.88264209,8,0.0,-3.8270239406408164,1.9459505471453795,0.15610053177595667,1.5036899188382307,0.15611220601480152,1.503663372062576,0.0030466960863821915,0.0030466955075803483,1,1,0.5791585049392344,0.5791624009540786
|
||||
201.603816185,40.77834648303805,29.43579439774117,1.8825682945,8,0.0,6.62326759392655,-10.61763821496088,0.17221502603386268,1.477660689548908,0.1722266750738439,1.4776341934037651,0.002508815534132583,0.0025088142641310042,1,1,4.788384995662999,4.78836517852992
|
||||
201.903313054,40.77851426982384,29.435745284543195,1.8824974422,8,0.0,2.4773015634389504,8.015019309320255,0.17796812055333058,1.4916740750724016,0.17797973737012934,1.491647644545483,0.003414101549818827,0.0034141012662951948,1,1,1.1458164147672827,1.1458222126048387
|
||||
202.20365610599998,40.77843837666519,29.435739582994923,1.882424148,8,0.0,1.9960008173460537,-0.4128879054122067,0.18249383985792947,1.487576104100218,0.18250542757514893,1.4875497247597893,0.002810650051202107,0.0028106519309579166,1,1,0.20014132547700247,0.2001375544634093
|
||||
202.49680659199998,40.77841229091354,29.435706627170234,1.8823511536,8,0.0,-0.7860080257153637,-3.30970113582146,0.18006128880521255,1.4773356749296063,0.18007285363228226,1.4773093640263775,0.003661328525840862,0.0036613302648062767,1,1,0.5476985461900896,0.5476937069362678
|
||||
202.803949561,40.77837901931685,29.435711115585427,1.8822767285,8,0.0,-0.4071127104995654,-7.004499564711687,0.17861462096969166,1.4591350089035395,0.17862615261626263,1.4591087450348084,0.003037263987738196,0.0030372641413315333,1,1,1.6188020527194118,1.618792572955653
|
||||
203.10372321,40.77836308879845,29.43566084023364,1.8822064539,8,0.0,-4.6511763989241475,-8.773576232915838,0.1666320309292793,1.4372760907286484,0.16664353912542737,1.4372498754458787,0.0024251715057051087,0.0024251700771622513,1,1,3.1789550299499125,3.1789470426919997
|
||||
203.403557367,40.77834758830761,29.435770891770996,1.8821349401,8,0.0,4.638977929779445,-10.494899953332991,0.17770680536168962,1.4116482770263459,0.1777182748589912,1.4116221253454186,0.0032305591823803925,0.003230555156659256,1,1,3.9001392571778424,3.900121585593887
|
||||
203.697255741,40.77838061873024,29.435779310064056,1.88206207,8,0.0,5.34961733675878,-6.82688338499066,0.1905351918888635,1.3941072994478156,0.19054664239720692,1.3940811997464433,0.0025984116477883548,0.002598409018194957,1,1,2.4798248659015556,2.4798109631607033
|
||||
204.002727254,40.77834651019299,29.435846871125534,1.8819888093,8,0.0,11.052882253332182,-10.614617383963095,0.21743375263760886,1.3685212682642,0.21744518703893229,1.3684952246008417,0.002056160329294988,0.0020561559134670386,1,1,7.473500466026031,7.4734774943404325
|
||||
204.295587632,40.778377840964225,29.435844536766904,1.8819159084,8,0.0,10.855818981084703,-7.135347238685492,0.24392775466021363,1.350239859621142,0.24393914929669047,1.350213865525877,0.0027883384883392475,0.002788330218551863,1,1,5.694402846292954,5.6943841940779
|
||||
204.598281576,40.77837272180967,29.43572545016369,1.8818441521,8,0.0,0.802960393356739,-7.703835353335353,0.24526940893256116,1.3309724907408327,0.2452807800066672,1.330946550345423,0.0021727093594116047,0.0021727053383158073,1,1,1.8417510066449587,1.8417400364315384
|
||||
204.899521816,40.77830636919474,29.43573194383615,1.8817717054,8,0.0,1.351134030427457,-15.07226833462939,0.24810451332616015,1.2958822111696309,0.24811584673205886,1.2958563212352916,0.0028652295959427855,0.002865225911769376,1,1,6.0520454908907,6.052025580769795
|
||||
205.199422249,40.778358504483926,29.435761023143193,1.8816986966,8,0.0,3.8059032018471934,-9.28266313001344,0.2568718498348227,1.2734060193474397,0.25688315987707905,1.273380181085959,0.00047808272809452186,0.0004780898091336187,1,1,2.9551095475088056,2.955094407271865
|
||||
205.49928223999999,40.7783568015815,29.435663129975637,1.8816259739,8,0.0,-4.457885070398794,-9.471769443258308,0.24527047315922867,1.250438929726502,0.24528175548610615,1.2504131371626612,0.0020385254857703122,0.0020385313366149726,1,1,3.3794254664445074,3.3794169087712245
|
||||
205.803761229,40.77835894701687,29.435841299754355,1.8815547173,8,0.0,10.58256513294014,-9.233513428021352,0.27081792923753434,1.2281893834203501,0.27082918519971844,1.2281636487053849,0.0005874238598157226,0.0005874436105371199,1,1,6.3064793707616715,6.30645888809057
|
||||
206.097554296,40.778380667037844,29.43571347553041,1.8814822892,8,0.0,-0.20789472279492985,-6.821520773180533,0.26961279079632855,1.211097581734601,0.2696240174976368,1.21107189994896,0.00024693086914119735,0.00024693908988721123,1,1,1.4551620161960965,1.4551531529720407
|
||||
206.398312373,40.77844295509433,29.435767650641473,1.8814102482,8,0.0,4.3653671765741,0.09554596338295307,0.2797860595446556,1.2086910914969689,0.2797972622088038,1.2086654639831715,0.0008731528797623991,0.0008731533231260074,1,1,0.632496289067472,0.6324916936303913
|
||||
206.699349346,40.77845373883361,29.43579538089578,1.8813377633,8,0.0,6.706251188459845,1.293077948612149,0.29563094308561094,1.2088883468975136,0.29564211982271676,1.2088627744124363,0.0011070372697940362,0.0011070372721405741,1,1,1.4889641788805865,1.4889590845387968
|
||||
206.999284107,40.778319600275324,29.435822013741873,1.8812652044,8,0.0,8.954514807220336,-13.602956502160982,0.3171282124449206,1.1774173345320016,0.31713936360385164,1.1773918112014086,0.0017960897154288972,0.0017960894260616266,1,1,7.601601945491832,7.6015780498104615
|
||||
207.298699728,40.77831952084952,29.435816613475684,1.881192827,8,0.0,8.498643555673432,-13.611777244737079,0.33725616415756965,1.1460935993139643,0.33726729057368027,1.1460681278309088,0.0017139696165660871,0.0017139675118824564,1,1,7.296983735020562,7.2969602986240165
|
||||
207.598680059,40.778447572320665,29.435704393136852,1.881119664,8,0.0,-0.9745963987378412,0.6082860076487185,0.33397687921794417,1.144938466861682,0.33398797338531566,1.1449130512337786,0.0014813121391488138,0.0014813148531486581,1,1,0.06849245035402093,0.0684928905451594
|
||||
207.898450543,40.778420196352826,29.43574891967143,1.8810471114,8,0.0,2.7841691908570794,-2.431804567599472,0.34010018234214634,1.1373874878905539,0.34011125673579057,1.1373621228868458,0.0021052330144859955,0.0021052365694081985,1,1,0.5020715128716163,0.5020654916349271
|
||||
208.199318161,40.77838683977396,29.435681318005436,1.880975015,8,0.0,-2.922515833882387,-6.136040157845907,0.3320203247784912,1.1219973188006103,0.33203136893776813,1.1219720068733139,0.001766187544559959,0.0017661873212098012,1,1,1.5650159740174434,1.5650103393291257
|
||||
208.503253991,40.77836239148464,29.435761148830714,1.8809018889,8,0.0,3.8165130662948474,-8.851013148049237,0.3406254491728051,1.10093016204679,0.34063646962201194,1.1009048959220957,0.001418921978211027,0.001418920742655081,1,1,2.6586213880302276,2.658607336232746
|
||||
208.803271343,40.77835150789018,29.43579207675972,1.8808315683,8,0.0,6.427338190420659,-10.059630439006732,0.3556145492725981,1.0773129132136992,0.35562554116867034,1.0772877036472186,0.001989674445937075,0.0019896718046142647,1,1,4.116871529285409,4.11685410317997
|
||||
209.103664681,40.778387484194006,29.435685246574995,1.8807570017,8,0.0,-2.590880275294716,-6.06447767580451,0.3483630865940661,1.0622589237739035,0.3483740531462246,1.062233763387323,0.001601763898840477,0.0016017624505604733,1,1,1.4519089550989024,1.4519032490686206
|
||||
209.40379154,40.7784472683364,29.435679090434643,1.8806865215,8,0.0,-3.1105564277392435,0.5745292564900835,0.33983498796130324,1.0611835505940521,0.3398459214286902,1.061158448168237,0.002141123369144472,0.0021411230761745788,1,1,0.43660275162343637,0.43660493721370885
|
||||
209.703375993,40.77843002085358,29.43576648945156,1.8806133166,8,0.0,4.267344663701926,-1.3407967141257542,0.3495080634641533,1.0561528385609267,0.34951897657563763,1.0561277847420574,0.00033764440122521246,0.0003376438682505258,1,1,0.6849003478866222,0.6848945569951421
|
||||
209.997105258,40.778351616073536,29.43561227756269,1.8805403553,8,0.0,-8.750663165426241,-10.047614336366124,0.3270952425831555,1.032664562661725,0.32710611667038203,1.0326395579199987,0.002667329790182831,0.002667333346968347,1,1,5.738410308470687,5.738405036436584
|
||||
210.30334163,40.778422007511686,29.435664255275864,1.8804696759,8,0.0,-4.362887015293894,-2.2306752893084236,0.31559441413130895,1.0258511154819943,0.3156052650772114,1.0258261647838138,0.0010720982938649988,0.0010721035308462721,1,1,1.030751265218347,1.0307512996744304
|
||||
210.601585775,40.778446468683384,29.435641732658063,1.8803967141,8,0.0,-6.264161075248447,0.4857300828240922,0.2994715163457035,1.0247032920796286,0.2994823370312899,1.024678392654886,0.0003292705332953426,0.00032926926762202733,1,1,1.5672141219578744,1.5672186664492282
|
||||
210.903689564,40.77838044585693,29.43580779443754,1.8803239167,8,0.0,7.754164641530924,-6.846078772845334,0.3177112716030369,1.0081592382464615,0.31772206963755995,1.0081343916996592,0.000372328338931491,0.0003723255508845647,1,1,3.3867073067988867,3.3866927375570737
|
||||
211.197593596,40.778355727743374,29.435695442212452,1.8802519148,8,0.0,-1.7302025292361611,-9.591019906378072,0.31270303129799404,0.9858633326508203,0.3127137981249447,0.9858385352542092,0.0006877670148789008,0.000687763069314713,1,1,2.6597830039996047,2.659772835578337
|
||||
211.503211169,40.77840679849157,29.435613685966292,1.880180298,8,0.0,-8.631763657648913,-3.9196275587843483,0.2908010552338997,0.9755092790668034,0.29081178507565103,0.9754845303378343,0.0007795984251452814,0.0007795910938480305,1,1,3.4214213593014247,3.4214228635376998
|
||||
211.797321869,40.77840063439097,29.435588406434256,1.8801084917,8,0.0,-10.76577003259499,-4.604145837457868,0.26362733234566077,0.9638679542219707,0.2636380451409334,0.9638432588799138,0.0013406559909924479,0.0013406448120028645,1,1,5.102110941769847,5.102113337222612
|
||||
212.099385157,40.778441986664575,29.435743609554578,1.8800366392,8,0.0,2.3359079275501182,-0.01199871924507621,0.26874583834120214,0.9618073617007162,0.26875652385585314,0.9617827151458631,0.0011711067092452256,0.0011711047684967008,1,1,0.1760669820472405,0.1760643053199722
|
||||
212.403669907,40.77837244455465,29.435645281308926,1.879963598,8,0.0,-5.964603784282201,-7.734622062046354,0.25338116630629404,0.9436021291477614,0.25339182780492814,0.9435775378807004,0.001705449456976182,0.001705447995240205,1,1,3.089435152713188,3.0894303857386918
|
||||
212.697466513,40.77844612375042,29.4356823811804,1.8798917325,8,0.0,-2.8327639576077392,0.4474232981645018,0.24589330735332515,0.9425594360673296,0.24590394108318908,0.9425348909371241,0.0014825559853933724,0.0014825570425944375,1,1,0.3488582370706723,0.34886006408874065
|
||||
213.003196686,40.77826855077544,29.435729490295046,1.8798177604,8,0.0,1.1440154255460053,-19.271989642530656,0.2480959574271672,0.9002478967351839,0.24810656522413166,0.9002233984115127,0.0011754777601980923,0.0011754762575273278,1,1,9.153781587802461,9.153758738214012
|
||||
213.303339171,40.77845818452313,29.435673510910124,1.8797470607,8,0.0,-3.581558552388763,1.786767946036047,0.23866360743935935,0.9020882865076997,0.23867418832986734,0.9020638451984344,0.0016440741043368297,0.0016440739405492672,1,1,0.546244968732761,0.5462488672896212
|
||||
213.59705765799998,40.77837703561215,29.43567411128646,1.8796750972,8,0.0,-3.5308813196154247,-7.224788400916581,0.22947382043703007,0.8851076291046,0.22948437636560165,0.8850832353179829,0.0004017136658760388,0.00040171492800196836,1,1,1.9870762962653528,1.9870703004522694
|
||||
213.902787418,40.778479754208696,29.43579117095744,1.8796038504,8,0.0,6.350861407089911,4.182075367268003,0.24440093811073002,0.8919878209378711,0.2444114691858706,0.8919634779477926,0.0021827865762801373,0.0021827865169682203,1,1,1.5935793442397947,1.5935782772705076
|
||||
214.203773851,40.778483400908904,29.43577723330713,1.8795305399,8,0.0,5.174297089933433,4.587039155346793,0.2564448349347204,0.8996918409739181,0.25645533919988345,0.8996675525538329,0.0014725590459507402,0.0014725584772920098,1,1,1.1810321370350199,1.1810324110979058
|
||||
214.497051272,40.778454503160276,29.43564835980683,1.879457653,8,0.0,-5.704721127191648,1.3779553010794385,0.24188445116545437,0.9007659740786604,0.24189493554034208,0.900741733224444,0.001027366218397106,0.0010273622425704268,1,1,1.2861548683570876,1.2861599046954992
|
||||
214.803362253,40.77838557518989,29.43567591343296,1.879386405,8,0.0,-3.378750221061697,-6.276471553064781,0.23304813614146436,0.8857473235754707,0.2330585889437945,0.8857231337684933,0.00012215410146270008,0.00012214988991926537,1,1,1.6228558687087353,1.6228508345070134
|
||||
215.101510066,40.778396177564396,29.435703401153187,1.8793140776,8,0.0,-1.058336786150073,-5.099082515104769,0.22990740886420413,0.8732765228470056,0.22991783784579928,0.8732523818952068,0.00032102695281996494,0.0003210286928577512,1,1,0.859951913711663,0.8599464213078403
|
||||
215.400480348,40.778319668971584,29.435730310809223,1.8792423982,8,0.0,1.2132794372457427,-13.595333122743991,0.23228750284391617,0.8431119105535515,0.23229790323579014,0.8430878175381807,0.0008214002740408642,0.000821400401743239,1,1,4.709502044315108,4.709485705289478
|
||||
215.700195633,40.77838539384375,29.435740772492284,1.879170182,8,0.0,2.0964154394749603,-6.296610447296364,0.23684290130383068,0.8282744479154339,0.23685327972856823,0.8282504021762941,0.0009208652681479901,0.0009208640933089808,1,1,1.263583659632485,1.2635745782678105
|
||||
216.00039672399998,40.778422182954984,29.43571347773916,1.8790983798,8,0.0,-0.20770813812256336,-2.211193659087466,0.23576536679890955,0.8218866235225036,0.23577570991494584,0.8218626256048317,0.0008330183928646998,0.0008330185019208339,1,1,0.21341197285098779,0.21340904092884155
|
||||
216.303182489,40.77839311113945,29.43567050466202,1.8790249538,8,0.0,-3.8353385390676835,-5.4396069441293875,0.22583119311567415,0.808912583675862,0.2258415176813205,0.8088886378999044,0.0013228084561967897,0.0013228075112026174,1,1,1.4729896900647947,1.472986018060252
|
||||
216.601523173,40.778362486944324,29.435691344458284,1.8789533762,8,0.0,-2.0761199618042343,-8.84041307768799,0.22022121372092862,0.788851246950562,0.22023151025810733,0.788827350260619,0.001115848239676063,0.0011158479068456022,1,1,2.27019809664218,2.2701894905999493
|
||||
216.900576054,40.77842335533913,29.43572740832561,1.8788814848,8,0.0,0.9682605899648489,-2.0810007762391103,0.22204550651637023,0.7829036130989705,0.22205578207959126,0.7828797640058777,0.0015653209725649357,0.0015653210649637975,1,1,0.20408896634742574,0.20408534773337564
|
||||
217.20010550199999,40.77844320053309,29.435665610116406,1.8788096413,8,0.0,-4.248515022005863,0.1228017791665142,0.21117322502410768,0.7815351228155039,0.2111834746359117,0.7815113219077767,0.0006544588133671373,0.0006544583832293143,1,1,0.7302241629040939,0.730226771772249
|
||||
217.503157429,40.77831048788778,29.435787432858607,1.8787370371,8,0.0,6.035320477838103,-14.614886678379492,0.22529598698629674,0.7496074038221213,0.22530621210513907,0.7495836567053407,0.0019174876872303291,0.0019174887218713515,1,1,6.516307197218631,6.5162865315139
|
||||
217.804135812,40.77847375875316,29.435749504558714,1.8786664764,8,0.0,2.833540943955305,3.516280076679321,0.23168448238239514,0.7553334226997278,0.2316946859065631,0.755309714716238,0.004403101232322932,0.004403101661528463,1,1,0.41616809571812413,0.4161691078883561
|
||||
218.103661013,40.77842204224407,29.435797856855274,1.8785955436,8,0.0,6.915265748492547,-2.226816328670205,0.24790271255873075,0.7491311154600964,0.24791288793731034,0.7491074602894359,0.0034159085273191944,0.0034159089610256627,1,1,1.8089655948038033,1.8089575228697228
|
||||
218.42945709399999,40.77844831776813,29.435838359063354,1.8785216395,8,0.0,10.334308755823217,0.6910748174929201,0.27249098502485203,0.7490615970212633,0.2725011466045575,0.7490379844872871,0.002856426575822525,0.00285642871071442,1,1,3.6676101772150513,3.667602708968356
|
||||
218.704153195,40.77845118312924,29.435632528849606,1.8784505215,8,0.0,-7.0411118697137525,1.009268239525499,0.2546848782581774,0.7495719912653616,0.25469500925385724,0.7495484300842672,0.0012452048957170376,0.0012452049414761034,1,1,1.9297683994378938,1.9297740295307428
|
||||
219.004181954,40.77846708713197,29.43575428047271,1.8783779322,8,0.0,3.2367060067776388,2.7753991883484987,0.261902193665769,0.7537833217542098,0.2619123073608072,0.7537598111379874,0.00041496323085915055,0.0004149597203301749,1,1,0.41222123709942954,0.41222118895097737
|
||||
219.303729822,40.778367834075205,29.435776657759313,1.8783046769,8,0.0,5.125720392402699,-8.24661470920742,0.27374324571074693,0.7351755978696879,0.2737533303203073,0.7351521320225627,0.00028236796983608894,0.00028235076343754935,1,1,2.6617643884406834,2.661751391850088
|
||||
219.597420878,40.7784269744315,29.435733306699685,1.8782330943,8,0.0,1.466179493282298,-1.6791018352717515,0.27661519959276815,0.730217132757474,0.276625266693518,0.7301937151642636,0.0005412944530720926,0.0005412867678774667,1,1,0.1814246371571146,0.18142123931246742
|
||||
219.898670907,40.778397727667105,29.435745846127173,1.8781613733,8,0.0,2.524712759719399,-4.926943833072522,0.28210801078258935,0.7184877456134358,0.28211804239026256,0.7184643752876272,0.0011030116922565493,0.0011030050187450788,1,1,0.8968399605732542,0.8968324139847599
|
||||
220.203290468,40.77836531809471,29.435744826934403,1.8780903537,8,0.0,2.4386774179246227,-8.526014775389381,0.2873161203234197,0.6994520218933508,0.28732613555540587,0.6994286970697008,0.0011669345903467187,0.0011669285915601594,1,1,2.07608823673764,2.0760770259616677
|
||||
220.504153178,40.778302214164725,29.43579785626807,1.8780177716,8,0.0,6.915228604514771,-15.533679752963492,0.30335515083666464,0.66600026320427,0.3033651456972723,0.6659769819832451,0.0010449729825189344,0.0010449675485216577,1,1,7.468173979195554,7.468152279172194
|
||||
220.798015042,40.778391907513154,29.43574959581245,1.8779451737,8,0.0,2.8412477292521365,-5.573269643437831,0.3095355064979058,0.6530727031526301,0.3095454692293621,0.6530494714832739,0.0015546615234802398,0.0015546570290498455,1,1,1.1014779764607905,1.1014696623367997
|
||||
221.103546626,40.77836981508313,29.435701605783617,1.8778740963,8,0.0,-1.2098958033891969,-8.026626194176503,0.30585892054515135,0.6352292276182685,0.30586886317326556,0.6352060389931562,0.0013238140340414263,0.0013238107714031474,1,1,1.765584736693717,1.7655768212964233
|
||||
221.396133767,40.778395938382054,29.435775561612623,1.877802873,8,0.0,5.03318553375068,-5.125641990484539,0.31730644057619867,0.6232955960420693,0.3173163515295861,0.6232724599873054,0.0018237127541247862,0.0018237079899479256,1,1,1.5467332000039116,1.5467238491678725
|
||||
221.704136968,40.77837962605595,29.43571300869773,1.8777299475,8,0.0,-0.24730304396588826,-6.93712142130582,0.3159346049049901,0.6077738093605097,0.3159444952259833,0.6077507162268918,0.0015216827495664665,0.0015216809937599227,1,1,1.2879359066207903,1.2879284967111335
|
||||
221.998018709,40.77840338688656,29.435728676249507,1.8776586907,8,0.0,1.0752943703951896,-4.298489976430463,0.3177732347323761,0.5976400552398713,0.31778309763657936,0.5976170145355908,0.0019991794559796054,0.0019991779271038013,1,1,0.5583167316646561,0.5583111313662621
|
||||
222.30374358699999,40.77833408727785,29.435736510919863,1.8775857121,8,0.0,1.7366703462573105,-11.99418550577267,0.32120002625148636,0.5717875811830391,0.32120986773760946,0.5717645822348045,0.0016679250557948132,0.0016679243372727172,1,1,3.6132614483144097,3.6132474790840616
|
||||
222.60367732,40.77840936575174,29.435803838115056,1.8775161632,8,0.0,7.420183057765079,-3.6345355874180365,0.3383501682201864,0.5631357014282342,0.33835998430098846,0.5631127455510586,0.0013344749995741348,0.001334476075821044,1,1,2.211893546337456,2.211884188972653
|
||||
222.903126649,40.77839298314996,29.435795662109285,1.8774429472,8,0.0,6.729996316474193,-5.453818063950935,0.3538091538175515,0.5507997094542423,0.3538189530546453,0.5507768061844004,0.001783305589446969,0.001783307719106125,1,1,2.281248454112022,2.2812377602991654
|
||||
223.19716947,40.778453878089145,29.435812276464254,1.8773712475,8,0.0,8.132512092899734,1.3085436517097895,0.37256521659280833,0.5523542533721426,0.3725749927181339,0.5523313941746624,0.0014396150448015307,0.0014396144925120254,1,1,2.1941981969774798,2.1941934764370297
|
||||
223.504094339,40.77844719712638,29.435594663525315,1.8772983478,8,0.0,-10.237562156522694,0.5666278340824447,0.3469832109168459,0.5524094215121562,0.34699296739602364,0.5523866073420937,0.001117547362966183,0.0011175472810279266,1,1,4.058419430573946,4.0584269279173695
|
||||
223.79747769899998,40.77840687113963,29.43568975246989,1.8772273059,8,0.0,-2.21050840115362,-3.9115647197618473,0.34079764031249576,0.5432391627506332,0.34080736540118,0.5432163985131034,0.001519111762300173,0.001519112569695895,1,1,0.6807858016884525,0.6807830516461899
|
||||
224.103079004,40.778394052664005,29.435705760387044,1.8771545424,8,0.0,-0.8591789121631639,-5.335051936707622,0.33791368491237783,0.5312090427035483,0.3379233888034765,0.5311863226843865,0.0012034535038688424,0.0012034540521141713,1,1,0.8235501298917233,0.823544994581468
|
||||
224.403159232,40.77839176466972,29.435759434800573,1.8770846922,8,0.0,3.671819214949249,-5.5891319877186625,0.34593383321634436,0.5186568081068292,0.3459435091114921,0.5186341365240598,0.0015863149775842576,0.0015863147331946152,1,1,1.2371951954134424,1.237186654213223
|
||||
224.704340142,40.77839923750462,29.43574964308012,1.8770117664,8,0.0,2.8452375809780146,-4.759276823161542,0.3519474253056418,0.5078732377408789,0.3519570810350564,0.5078506120575461,0.0012802486025565206,0.0012802478313579048,1,1,0.8472674553274746,0.8472603669200368
|
||||
225.004250797,40.778397264489,29.43579464220671,1.8769408685,8,0.0,6.643899436698957,-4.9783770386183175,0.36707894741706565,0.4966451019060154,0.36708858034200526,0.4966225229591826,0.0009946219506710248,0.0009946214460473423,1,1,2.099357432257814,2.099347508272279
|
||||
225.304189007,40.77843657596619,29.43584761264241,1.8768677077,8,0.0,11.115463432284622,-0.6128467862840316,0.3930180568979333,0.494380916754208,0.39302766821805474,0.494358380709231,0.0013658301749417193,0.0013658296059215625,1,1,4.192333383947309,4.1923247993960295
|
||||
225.59740471199999,40.7783906897843,29.435759579990993,1.8767964801,8,0.0,3.6840757200762737,-5.708497605831223,0.4009254307498998,0.48168328829424667,0.40093501580708363,0.48166079464271133,0.0010530265636902309,0.0010530296100101746,1,1,1.24967485089353,1.2496663269424313
|
||||
225.89871691,40.77836714017492,29.435830635865898,1.8767243522,8,0.0,9.682356944726234,-8.323667520590407,0.42331241209868226,0.46374600673006505,0.4233219821684394,0.4637235613879624,0.0013961478057345472,0.0013961534806236524,1,1,4.837038924053677,4.837023660118792
|
||||
226.198442427,40.778377961394916,29.43578683669042,1.8766521772,8,0.0,5.98498801732467,-7.121978994178274,0.43665418771942593,0.4482671158819105,0.43666373492766375,0.4482447129115671,0.0011206201341520494,0.0011206177396581082,1,1,2.400166747964662,2.400155305113844
|
||||
226.504401759,40.778455578551075,29.435805482441257,1.8765819934,8,0.0,7.558985800791426,1.4973787094342723,0.453767878362788,0.45040703294794987,0.45377740626725405,0.45038467374840185,0.0008677844568407685,0.0008677818830154794,1,1,1.853365209653578,1.8533613551824653
|
||||
226.804354344,40.77840586665935,29.435656930173586,1.8765093203,8,0.0,-4.981246349347886,-4.0231105357091534,0.4407456099573461,0.44128360605558,0.44075511043386045,0.4412612951121733,0.0011492316982397613,0.001149230831977195,1,1,1.5118463963518751,1.511845661892681
|
||||
227.097996913,40.778399300716465,29.435851096096062,1.8764379346,8,0.0,11.409530060263748,-4.752248929384701,0.4670829570577403,0.43069438817791394,0.46709243624247243,0.4306721200871195,0.0009085388829871122,0.0009085394215784832,1,1,4.939807936320388,4.939795246739859
|
||||
227.398579071,40.77842418506909,29.435744812999804,1.8763666146,8,0.0,2.4374989572380965,-1.988859234277475,0.4718605369328504,0.42578556629431175,0.4718699947640189,0.42576334632661905,0.001194601986361658,0.001194603456095746,1,1,0.27069939198635856,0.27069563906136307
|
||||
227.698686455,40.77838093477489,29.435751210296182,1.8762948019,8,0.0,2.9775370450964163,-6.791788077795425,0.4778572545537739,0.41108783291466827,0.4778666894226148,0.41106565414173685,0.001015877644940646,0.0010158794146575367,1,1,1.3896625850006106,1.389653712560238
|
||||
227.998105586,40.77844006161899,29.435747827370694,1.8762229577,8,0.0,2.6919603854108027,-0.22577419345831803,0.483219039006137,0.40982760347916886,0.483228458506454,0.409805466192743,0.0036772865978491,0.0036772870553572487,1,1,0.18578388643067778,0.18578174814783976
|
||||
228.304100355,40.77838158337719,29.43572817037182,1.8761506379,8,0.0,1.0325903670655676,-6.719761560400556,0.48450605075565784,0.39531239954349495,0.4845154427650548,0.3952903093172053,0.0018940334669063068,0.0018940337722954325,1,1,1.1460068418607259,1.1459994206809965
|
||||
228.59732469099998,40.77841090645134,29.435743193591538,1.8760786939,8,0.0,2.300794944785008,-3.4634448310360186,0.48883959609060545,0.38744644590136684,0.4888489615623264,0.387424403126646,0.001863030144245177,0.0018630303504581474,1,1,0.4514437556825902,0.4514387196929251
|
||||
228.90359085699998,40.77833628761098,29.43581430235011,1.8760087463,8,0.0,8.303544468258826,-11.749834883422848,0.5076441278195517,0.3628383254426046,0.5076534826663395,0.3628163146585743,0.004531565752348692,0.0045315673928665616,1,1,5.491368620548629,5.4913513818057496
|
||||
229.195924064,40.77845085039007,29.43569420934831,1.875935546,8,0.0,-1.834273861617139,0.9723145583862798,0.5019837604948567,0.36405158917637903,0.501993084874263,0.36402963129536536,0.0029607829533504063,0.002960782866922423,1,1,0.2060143413896089,0.20601651865539042
|
||||
229.504060475,40.77838964238319,29.43584432106984,1.8758649896,8,0.0,10.837608700205054,-5.824804094353463,0.526769867786306,0.3514991904220666,0.5267791722616677,0.3514772698687932,0.0015268726368444186,0.0015268736325696132,1,1,4.706510507929912,4.706497486905225
|
||||
229.797861234,40.778411991829124,29.43572445627887,1.8757935513,8,0.0,0.7190598151621108,-3.3429143559114953,0.5272408591703609,0.34403232949253904,0.527250145879101,0.34401045432351907,0.0011157457677046052,0.0011157462285645578,1,1,0.3061337402689645,0.3061299944272008
|
||||
230.098667492,40.77840910129859,29.43574253217183,1.8757215072,8,0.0,2.2449603824078466,-3.6639063883482827,0.5313558251990035,0.335925025785251,0.5313650926093707,0.33590319276028324,0.0013261958871958438,0.001326195786732683,1,1,0.4650991179879995,0.4650940513260493
|
||||
230.403682002,40.778473251524595,29.435669768835325,1.8756507842,8,0.0,-3.8974496587436973,3.4599530162700236,0.520746255593776,0.3422468319132319,0.5207554986831923,0.3422250415859963,0.003884248656791716,0.0038842486408231045,1,1,0.9250717002185709,0.925077705667198
|
||||
230.69619139899999,40.77842355473847,29.43569655570499,1.8755789744,8,0.0,-1.6362038370302265,-2.05885743659348,0.5155774685064782,0.3373860811083143,0.5155866890140549,0.3373643401729151,0.0024929717229173424,0.0024929713189531647,1,1,0.2964745406408715,0.29647364189007747
|
||||
231.004029186,40.778392815171884,29.435643100100403,1.8755056086,8,0.0,-6.148731624312092,-5.472472473273146,0.49965140787688617,0.3256056203509687,0.4996606011963245,0.32558392374649375,0.0012360086990778083,0.0012360072864465179,1,1,2.354946650327664,2.3549454375656556
|
||||
231.304340343,40.7784537161567,29.435749479379794,1.8754371465,8,0.0,2.8314162852037197,1.2905571903255144,0.5052130413526893,0.3275921729529241,0.5052222181752748,0.32757051189337405,0.003683531007394035,0.003683529096457823,1,1,0.21681169556112603,0.21681108444059957
|
||||
231.603677679,40.77845302229531,29.4356463548844,1.8753641771,8,0.0,-5.873969335317464,1.2135059292583292,0.48997232808608354,0.3293688008433546,0.4899814799854155,0.32934718905014415,0.00296231071446397,0.0029623093939361955,1,1,1.4846110799886885,1.4846161567753506
|
||||
231.903411922,40.77841899030643,29.435716112683778,1.8752920436,8,0.0,0.014724171444929617,-2.56573609469621,0.48880165197587966,0.32355010759388375,0.48881078386318305,0.3235285312366862,0.002408108342291109,0.0024081072175382635,1,1,0.19532210426119614,0.1953196223360257
|
||||
232.203139158,40.77837529679758,29.4357550618519,1.875221561,8,0.0,3.30267165824727,-7.4178832153553635,0.49554228932684086,0.3079202270258848,0.49555140116606233,0.3078986958639054,0.0009438500024228905,0.000943852503499951,1,1,1.6237862356151964,1.6237769231434283
|
||||
232.504048445,40.77851423848855,29.43569903783948,1.8751490776,8,0.0,-1.4266692590079033,8.01153925997167,0.49097120465272326,0.3234681739574492,0.4909802983715896,0.32344668648389957,0.0002342992122339536,0.00023430826340894954,1,1,1.4585042107472483,1.4585128825774287
|
||||
232.797975695,40.778475965455186,29.43566570244591,1.8750779507,8,0.0,-4.240718824341382,3.761334188922853,0.4796341762988815,0.3304013356372666,0.4796432407476237,0.33037989260619816,0.00042492979245214367,0.00042494295140992793,1,1,1.0710823317704254,1.0710887310779245
|
||||
233.103650475,40.778387404135344,29.43571757075883,1.8750074655,8,0.0,0.13780956278075496,-6.073368611840325,0.4788480514910764,0.3175131416471701,0.47885710040680113,0.3174917386568901,0.0006871361814493176,0.0006871437317332498,1,1,0.9200087027399855,0.9200027925144351
|
||||
233.397409996,40.77843612958158,29.435619903931684,1.8749357989,8,0.0,-8.106862258083325,-0.6624215356757726,0.45828125524430335,0.3155043210346894,0.4582902693829876,0.3154829651760167,0.0012813636529060552,0.001281375031648689,1,1,2.678931705763391,2.6789363633593726
|
||||
233.698994417,40.77844858554569,29.435617140963426,1.874864594,8,0.0,-8.340100245056366,0.720808901976751,0.4373488966640236,0.31633362861440023,0.43735789268108094,0.3163123136238784,0.0012708930777778325,0.0012708991096932298,1,1,2.79452256743672,2.794528675327712
|
||||
233.999009825,40.77841274285302,29.435704151348613,1.8747928933,8,0.0,-0.995007782319349,-3.25951340006702,0.433814837458973,0.3091338185328807,0.4338238054815091,0.30911255009130884,0.0018259253829114844,0.0018259301558834888,1,1,0.35950503985825927,0.3595025646129588
|
||||
234.303976399,40.7783503798036,29.435802382801214,1.8747202999,8,0.0,7.297337260003907,-10.184903224593082,0.4502469750399182,0.28801907921008524,0.4502559263589258,0.28799784972494846,0.0016243893103530806,0.0016243896806059678,1,1,4.157593585452564,4.157579175392518
|
||||
234.603464756,40.7784270850753,29.435612640346,1.8746495159,8,0.0,-8.720028435097229,-1.6668098928948964,0.42843728315047797,0.28406945813666634,0.42844620909024705,0.28404826731422417,0.0013874601048478358,0.0013874595518569332,1,1,3.117102702233297,3.117106765019213
|
||||
234.89729492,40.77839962816219,29.435701528622516,1.8745782347,8,0.0,-1.2164089198976125,-4.715894893201043,0.4244251439938552,0.27404693693136617,0.424434051446473,0.27402579491468754,0.0018998424521913537,0.001899841544094713,1,1,0.6558264445389937,0.6558227726123061
|
||||
235.198597898,40.778400420256,29.435698638274424,1.874507348,8,0.0,-1.4604015139575655,-4.627933127461411,0.41998376610540983,0.26419199352737066,0.41999265097788985,0.26417088951124185,0.0015702710827482753,0.0015702712911253541,1,1,0.6647063082330129,0.664702888907038
|
||||
235.498969058,40.77838975015607,29.43561887182916,1.8744351933,8,0.0,-8.193994228674011,-5.812839353743999,0.3993610861113906,0.2519760638782689,0.3993699471544582,0.25195500765859924,0.002093634669633845,0.0020936351996029305,1,1,3.499742148538569,3.4997419392137417
|
||||
235.799091187,40.77837845929551,29.435656962999836,1.8743633442,8,0.0,-4.978477323920296,-7.066688064070396,0.38662847854851123,0.23729948171722204,0.3866373184728727,0.2372784631116545,0.001746486563305214,0.0017464823480283856,1,1,2.2388627132547225,2.2388592652657224
|
||||
236.10398003,40.77850912024744,29.4357399526365,1.8742930644,8,0.0,2.027202437584888,7.443160623498868,0.3905679724892619,0.2517115469978379,0.39057678583331773,0.25169056878076934,0.0014057668691371415,0.001405765118276658,1,1,1.2566215785527708,1.2566272990774303
|
||||
236.397326058,40.77843445595672,29.435708243441983,1.8742209728,8,0.0,-0.6495680872748898,-0.8482813614142438,0.3880203983083142,0.24959027717305768,0.38802920036577176,0.24956934694712937,0.0018541225874657075,0.0018541212298111296,1,1,0.0660242763317793,0.06602390756716243
|
||||
236.698585542,40.77840860320651,29.435713912952394,1.8741497953,8,0.0,-0.17096907660589777,-3.7192196674240585,0.3867249690440747,0.24159212104667166,0.3867337445334647,0.24157122929959843,0.0014840419937159476,0.0014840411041627006,1,1,0.3630216543439458,0.36301829823664866
|
||||
236.998413456,40.77842819531521,29.435744197206446,1.8740787669,8,0.0,2.385515810835463,-1.5435229137516973,0.3914382187543028,0.2380878369087016,0.3914469827107148,0.23806699125144423,0.001910855942672248,0.001910856224415803,1,1,0.21521030041531547,0.21520736890806544
|
||||
237.298380818,40.77838573721162,29.43570019023753,1.8740076051,8,0.0,-1.3293907606596405,-6.258479750380181,0.3873723507529732,0.22503987962271027,0.38738108952579525,0.2250190695417036,0.0013867365681161086,0.0013867362519934248,1,1,1.0492880772240585,1.049283113878421
|
||||
237.5990186,40.77839705819594,29.4356097754345,1.8739358096,8,0.0,-8.961877718215874,-5.001283363589881,0.3651859054168521,0.21457017200640782,0.3651946187907955,0.21454940376501225,0.0026741553562430803,0.0026741541779906615,1,1,3.7612593912875614,3.7612604222011075
|
||||
237.89849733399998,40.77838547660966,29.435742218272026,1.873864917,8,0.0,2.2184628993943853,-6.287419289465436,0.3695454892137715,0.20157935882180508,0.36955418909352566,0.20155862615617468,0.00516354321741951,0.005163542273364852,1,1,1.0679504252549497,1.0679432270800802
|
||||
238.20341391099998,40.77838385940646,29.435733984917754,1.8737925043,8,0.0,1.5234331427479744,-6.467009276314225,0.37229123129570957,0.18823486333504408,0.37229990542947067,0.1882141761408525,0.0032447467387313514,0.003244746346615678,1,1,1.0411128277963304,1.0411059305899577
|
||||
238.49739267799998,40.7784435902442,29.43570882838341,1.8737215641,8,0.0,-0.6001894157997919,0.16607785855090001,0.36999230829818164,0.1882207591252488,0.3700009703779877,0.18820010465145215,0.0027468699839592907,0.002746868970644,1,1,0.03410701572986012,0.03410760407871765
|
||||
238.802973632,40.778475651933356,29.43562087456319,1.8736508429,8,0.0,-8.02492038636351,3.7265208400471947,0.350059733898819,0.19527116970710065,0.3500683681028226,0.19525056234645966,0.001093646276526255,0.0010936484030636886,1,1,2.820351169492799,2.8203596720676343
|
||||
239.10404558599998,40.77836639924333,29.43566490063175,1.8735783027,8,0.0,-4.308412043775845,-8.405952773698434,0.3390235247041952,0.1781159389836183,0.339032140760666,0.1780953726747021,0.0002912945423452659,0.0002913042996820027,1,1,2.434556839780899,2.434551824419483
|
||||
239.404060208,40.77849545990445,29.435617323728852,1.8735091917,8,0.0,-8.324666015882116,5.9261890037082665,0.3184246228714701,0.1895661996686892,0.3184332111420105,0.18954567317665177,0.000396322169002088,0.0003963362962450848,1,1,3.4439119524227064,3.443922611238587
|
||||
239.703371632,40.77846789741666,29.43575255732999,1.873437127,8,0.0,3.0912447123014064,2.8653809396741172,0.3250361762324606,0.19490228010880148,0.3250447466215922,0.19488179481705703,0.0006776769965690713,0.0006776793082823395,1,1,0.4370805794112408,0.437081315126539
|
||||
240.00339100899998,40.77843244692648,29.43569479232553,1.8733647808,8,0.0,-1.7850615882608711,-1.071383235020676,0.3200425204105677,0.19238923355483575,0.32005107409286854,0.19236878855515435,0.000725017251185917,0.0007250191618282185,1,1,0.19633419389727108,0.1963343398089642
|
||||
240.303458012,40.7783535087132,29.435604609836872,1.8732944535,8,0.0,-9.397944726077357,-9.8374366156276,0.2969791103640811,0.17239630989805996,0.2969876369191199,0.1723759059002743,0.0012733485173187552,0.0012733521235690772,1,1,5.651309367529483,5.651306198518668
|
||||
240.603941376,40.778442121209686,29.43565622425751,1.8732243347,8,0.0,-5.040834455018314,0.002943812564574763,0.2843534506362698,0.1720727411116501,0.28436195957574784,0.17205237858614275,0.0011439822296616742,0.001143985100250409,1,1,1.0278598175169764,1.0278629459929205
|
||||
240.90407771,40.778400069265366,29.435766577948222,1.873152452,8,0.0,4.274817144821004,-4.666909416670184,0.29377052981110086,0.16241104491675104,0.29377901263582973,0.1623907215990095,0.0016484385068043525,0.001648439502695151,1,1,1.0970265892564293,1.097019741589182
|
||||
241.196263715,40.77847797284255,29.435691866214874,1.8730817211,8,0.0,-2.0320716359174584,3.9842528750361765,0.2882676753082723,0.17002044270972785,0.2882761392633683,0.1700001618103296,0.0014066821825869339,0.0014066814796138524,1,1,0.5212246402274606,0.5212295320248358
|
||||
241.502943265,40.77841183355128,29.435706682365904,1.8730098256,8,0.0,-0.7813486152532915,-3.360491044933594,0.28576153822897016,0.16295083525664475,0.28576997520463004,0.16293058968814308,0.0011541846321987993,0.0011541845040398155,1,1,0.31960390736283056,0.31960136084278223
|
||||
241.803949827,40.77844241202139,29.435726469274524,1.8729379106,8,0.0,0.8889891068396545,0.035236682803650374,0.28716363205574275,0.1627601483036626,0.2871720563502388,0.16273994678023743,0.001639689500302884,0.0016396907694606077,1,1,0.013484627078132914,0.013484144263815293
|
||||
242.097732219,40.778393239721154,29.435683573181016,1.8728672241,8,0.0,-2.7321418634602956,-5.425328483399784,0.2800762343640178,0.1516118775587248,0.28008463213148305,0.15159170615794315,0.0013407039341971497,0.001340704798287733,1,1,1.0260323160670748,1.0260291042621084
|
||||
242.398553786,40.77837912866129,29.43570941049786,1.8727956901,8,0.0,-0.5510500082140086,-6.992356896448742,0.2780183959507024,0.13748524665295903,0.2780267839190971,0.13746512989600812,0.0017980100018136242,0.0017980099169625774,1,1,1.1646889599187793,1.1646830321155817
|
||||
242.703429107,40.77846731217525,29.435790324489282,1.872726425,8,0.0,6.279406918921143,2.8003921152300366,0.29224690771817263,0.14275679417177292,0.2922552741430168,0.14273671022300133,0.0014325390915051446,0.0014325402282996376,1,1,1.4568368227490827,1.4568355875771573
|
||||
243.00344599,40.77833925426742,29.4357128021649,1.8726537721,8,0.0,-0.264737955324262,-11.420393446819183,0.29090354234053667,0.11986141160616692,0.29091189726641986,0.11984136872456841,0.0010911931229564003,0.001091191322196265,1,1,2.99721232065589,2.99720228529642
|
||||
243.303922716,40.77837506227821,29.43564414947851,1.8725817324,8,0.0,-6.060148567879667,-7.44392476051157,0.2759145442372441,0.10479755576858026,0.2759228707763977,0.1047775503925018,0.0014817604471938613,0.0014817629096017804,1,1,2.7318667395836176,2.7318637902154714
|
||||
244.20499095899999,40.77847556204007,29.43558942459408,1.872440186,8,0.0,-10.679808706289874,3.7165415773154544,0.24992577518693823,0.11199131780420217,0.24993408179422194,0.1119713536186585,0.003254291335348077,0.003254292577564968,1,1,4.618589242647213,4.61859904790043
|
||||
244.205245705,40.77840490942533,29.435617691840754,1.872440186,8,0.0,-8.293602662636495,-4.129408046756472,0.22971131101208864,0.10357198717521364,0.22971959650513388,0.10355206198023104,0.0032606901721407267,0.00326069233093294,1,1,3.033286911517838,3.0332882460750414
|
||||
244.504277957,40.778450612809635,29.435679526692216,1.8722991805,8,0.0,-3.0737290311828485,0.9459317504609521,0.22187420632227514,0.10522087709563362,0.22188246903741535,0.10520099764710476,0.0016374420908489803,0.001637442617053803,1,1,0.40927169243049105,0.4092744147456847
|
||||
244.803869763,40.778445657317974,29.435558649609035,1.8722270044,8,0.0,-13.277723349832824,0.3956375104070018,0.18992627447661095,0.10580313781131959,0.1899345147435841,0.10578328978037335,0.001116081797011459,0.0011160797883800794,1,1,6.572043532544761,6.5720518316207635
|
||||
245.103862302,40.77837630397565,29.435747570182325,1.8721555779,8,0.0,2.6702520504971368,-7.306036721570807,0.19578031638930782,0.09110473286345643,0.19578853746363115,0.09108492874389593,0.0012738469544812227,0.0012738465616716993,1,1,1.4486438353546107,1.4486357926166498
|
||||
245.397823819,40.778378103493196,29.435602319252673,1.8720849076,8,0.0,-9.591304060312156,-7.106195240257439,0.1726480011645227,0.07684305099056525,0.172656203537917,0.07682327066663353,0.003619378099113752,0.003619378219122315,1,1,4.610230247757278,4.610229679251928
|
||||
245.698597951,40.77835859734691,29.435643182747633,1.8720137163,8,0.0,-6.141757997750772,-9.272349161035171,0.15774354654871262,0.05834077974269533,0.1577517288398058,0.05832104343202901,0.004209504953159402,0.0042095065500930605,1,1,3.3895276500258595,3.38952312686543
|
||||
245.998403455,40.77841322954978,29.435731270122513,1.8719427325,8,0.0,1.294259436735146,-3.20546586023553,0.1603908091391098,0.051817526655754696,0.16039897042763906,0.051797817636485555,0.006551395515755127,0.0065513969481485225,1,1,0.2844600105094002,0.28445646133517183
|
||||
246.303297803,40.77831467461996,29.435681408649106,1.8718727984,8,0.0,-2.914867179408103,-14.149953525091448,0.1531520353229044,0.023744148523841612,0.15316017871343918,0.023724481119632036,0.006225127545002551,0.006225129543478679,1,1,4.84526832693582,4.845257637350572
|
||||
246.603164948,40.7784162648881,29.43567465604433,1.8718007034,8,0.0,-3.4848927874030373,-2.8683919644822686,0.14453603816997793,0.0180525780355542,0.14454416270121476,0.01803295931751752,0.005365056562129279,0.005365058492509264,1,1,0.6639666650638633,0.6639662620913956
|
||||
246.90388537799998,40.77843858266533,29.435694306987973,1.8717304153,8,0.0,-1.8260318209931452,-0.39001171075255,0.1399305853438995,0.017193050611596167,0.13993869008234386,0.017173449408393823,0.007559666145381732,0.007559667919777099,1,1,0.1437221283358415,0.14372292479344312
|
||||
247.197835847,40.77848328052397,29.43556796652423,1.8716597563,8,0.0,-12.491216950529822,4.5736791808334765,0.11010929232098318,0.026217452979995205,0.1101173749116814,0.0261979026240672,0.004379911598730591,0.004379911694107097,1,1,6.215698399433934,6.215709765964963
|
||||
247.503379437,40.77838528512769,29.43560597036657,1.8715874178,8,0.0,-9.283089283552398,-6.308677803385986,0.08797659407980049,0.013679227336722386,0.08798465181003981,0.013659714189731092,0.0021064912710073037,0.002106490130029314,1,1,4.077245464633409,4.077245403542634
|
||||
247.795757596,40.77839631543211,29.435659858914736,1.8715161823,8,0.0,-4.734013436999648,-5.083770920266028,0.0765555767476564,0.003631311586212887,0.07656361903197216,0.0036118324258768812,0.0012617734693012297,0.0012617697965548779,1,1,1.4185657182610356,1.4185640774971569
|
||||
248.103856684,40.778409259122895,29.435597565924084,1.8714461139,8,0.0,-9.992558130899715,-3.6463736571873335,0.05286313365677662,-0.0035876215727629196,0.05287115251132625,-0.0036070658309780967,0.00033835774519238654,0.0003383456021641194,1,1,3.9528391848687052,3.9528418450483285
|
||||
248.397820831,40.77848239711899,29.43564397924845,1.8713748124,8,0.0,-6.074508994459558,4.475569341576192,0.03830860058037832,0.005283363118115839,0.03831660412488014,0.005263963611543612,0.0009250200655124288,0.0009250171441026272,1,1,1.8015977213350336,1.8016051548275729
|
||||
248.698864305,40.778449121426775,29.435650327460717,1.871304333,8,0.0,-5.538619568690952,0.7803156710618457,0.025235806373473543,0.006789658919205244,0.025243788417191514,0.006770292132289762,0.0008166519818114456,0.0008166481814868844,1,1,1.134761676222841,1.1347655656054616
|
||||
249.003253358,40.778401592189496,29.435635784887655,1.8712327231,8,0.0,-6.766254294039242,-4.497787402770968,0.009261690929049982,-0.0020973430632929713,0.009269651444605391,-0.0021166719925164905,0.0016803334529892544,0.001680331651354018,1,1,2.1160801847889807,2.116080195993258
|
||||
249.297607967,40.77836436294798,29.43574442742413,1.8711623371,8,0.0,2.404952238881516,-8.632083473774246,0.014828485007690757,-0.019079830712557207,0.014836430428532693,-0.019099119276085853,0.0007955249629929528,0.0007955229668434082,1,1,1.8702190011554347,1.87021017587231
|
||||
249.603289926,40.778454572216745,29.43567872017082,1.8710905314,8,0.0,-3.141812378911433,1.385622465309221,0.007398732950969863,-0.016304149463934443,0.007406661470602816,-0.016323398906181733,0.00023325397475688623,0.00023325665241297837,1,1,0.40331109940374593,0.4033141184859223
|
||||
249.902843103,40.778404495728346,29.435694704356546,1.8710209889,8,0.0,-1.7924883552586288,-4.175353369986468,0.003146402051389073,-0.024506736760377443,0.0031543075544205644,-0.02452594870074622,0.0011307285289632134,0.0011307290115006954,1,1,0.5031005425258587,0.5030979950343001
|
||||
250.195721409,40.7784431153487,29.4356744197365,1.8709505328,8,0.0,-3.504839613870402,0.11334169488701473,-0.0050996870845134434,-0.02421487761306955,-0.005091796464637059,-0.02423405229459952,0.0014404263362057421,0.001440426935727799,1,1,0.4440923407070843,0.44409445967736666
|
||||
250.498857735,40.77834877863698,29.43572427444866,1.8708791288,8,0.0,0.7037110438853348,-10.362715740923027,-0.0034482312443966704,-0.04462294850334583,-0.0034403702694663597,-0.044642082094654326,0.002350255847173166,0.002350254279832207,1,1,2.4051350926063626,2.4051258373697033
|
||||
250.8032682,40.778366948425,29.43572488684224,1.8708074397,8,0.0,0.7554069034873657,-8.344967568844256,-0.0016523500104647171,-0.06090283962593708,-0.0016445010940888951,-0.06092193889750966,0.002290008152475706,0.002290005303825048,1,1,1.5594221701637554,1.5594146450052597
|
||||
251.097331104,40.77834036154527,29.435653676100838,1.870736261,8,0.0,-5.255948402656929,-11.297428795538153,-0.013982498616907316,-0.08296420170684357,-0.01397466654744608,-0.08298327164781473,0.0010420031816564138,0.0010419996088572097,1,1,3.8151052675485606,3.815098652534113
|
||||
251.403508599,40.778375049826494,29.435772235730493,1.8706674254,8,0.0,4.752428205349595,-7.4453084732126715,-0.00279950994102221,-0.09749003691255086,-0.0027916982389006462,-0.09750906243674079,0.0011516634566688811,0.001151659473214364,1,1,2.029608033268786,2.029599073694986
|
||||
251.702841875,40.778395630938384,29.435755666721537,1.8705953509,8,0.0,3.3537315362683686,-5.159784446206371,0.005094034692140776,-0.10740845468470851,0.005101828229148333,-0.10742744717609837,0.002493712788081112,0.002493712802929661,1,1,0.978512239185149,0.9785060457450021
|
||||
251.995891298,40.77835838275788,29.435725864131008,1.8705243305,8,0.0,0.8379061937192552,-9.296181692864028,0.007078356359036958,-0.12548477359970317,0.007086137088718185,-0.12550372869845042,0.004532567334811822,0.0045325679268532594,1,1,1.9106502486681254,1.9106419856509327
|
||||
252.303959259,40.77834355693214,29.435658735691373,1.8704527201,8,0.0,-4.8288356690063985,-10.942582569448096,-0.004298117227107738,-0.14669328208876548,-0.004290358392081082,-0.14671220308529176,0.004790854027597281,0.004790854339411236,1,1,3.456325514525482,3.4563190670634345
|
||||
252.597659952,40.77843104524323,29.435733376673415,1.870382508,8,0.0,1.4720863272242444,-1.2270397071627486,-0.0008332028891615269,-0.14881330920490543,-0.0008254663614476296,-0.14883219292664124,0.0042971121848921654,0.004297112393791256,1,1,0.10465138974262836,0.10464965120491575
|
||||
252.89827935899999,40.77841918020328,29.43565510190179,1.8703111512,8,0.0,-5.135581325244578,-2.5446463394042085,-0.012884209569810956,-0.15350966228045035,-0.012876483309923779,-0.15352851208394522,0.0062699713412475416,0.006269971161099857,1,1,1.0787600829379054,1.0787609293406801
|
||||
253.199395544,40.778441268434726,29.435688658512998,1.8702407746,8,0.0,-2.3028550419752283,-0.09175788673556623,-0.018260074702953058,-0.1533897373439734,-0.018252370899659816,-0.15340854800499693,0.00540464814498929,0.005404648157627899,1,1,0.189146420782862,0.18914774786164104
|
||||
253.498829379,40.77838596076062,29.43562549243817,1.8701698168,8,0.0,-7.635106988479567,-6.233650901174644,-0.03614575178118319,-0.16530653252360564,-0.03613806065512923,-0.16532531599992872,0.007294001100924441,0.007294000994751155,1,1,2.917322868469448,2.9173219917012845
|
||||
253.79883007,40.77839998757836,29.435677299033493,1.8700996896,8,0.0,-3.261782163626035,-4.675981243665913,-0.04370698667454899,-0.1741358025970515,-0.043699318656703706,-0.174154542816282,0.0032394847656155063,0.003239484881635499,1,1,0.8295206277837665,0.8295186325045976
|
||||
254.098853013,40.778407041696376,29.43570585313676,1.8700293717,8,0.0,-0.8513491536290807,-3.892624737269753,-0.04562428454936972,-0.18137981588184496,-0.04561662921466421,-0.18139851508033464,0.001119200796133918,0.001119202271631055,1,1,0.33232523717250784,0.33232257218906763
|
||||
254.40324349899998,40.77838996307826,29.435768229749904,1.8699569857,8,0.0,4.4142568676241885,-5.7891976424003175,-0.03511232389215112,-0.19241933790933297,-0.035104695189453215,-0.19243800855868684,0.0003743217710166123,0.00037431284581463883,1,1,1.4194121538879967,1.419405009307568
|
||||
254.702822183,40.7782757455183,29.43582730657157,1.8698874487,8,0.0,9.401322846110043,-18.47301026966307,-0.013041240644228794,-0.22815424530214265,-0.013033625993295259,-0.228172875618426,0.0011578778349243403,0.001157883803902981,1,1,10.673762793313264,10.673742359343525
|
||||
255.002856977,40.77837301041108,29.435791141758408,1.8698180947,8,0.0,6.348406696546362,-7.671783596429271,0.0017996941274959002,-0.24272085494610512,0.0018072891494452358,-0.24273944429862662,0.0013923926279304183,0.001392396805746462,1,1,2.696456775699731,2.6964470913336585
|
||||
255.303874811,40.77846952131679,29.435684924050943,1.8697457,8,0.0,-2.6181033600270127,3.04571426298868,-0.004196692578745813,-0.23629410490003697,-0.004189112841063309,-0.23631266747809196,0.0024918830316290764,0.0024918840885970895,1,1,0.4890004374769825,0.48900460476446916
|
||||
255.597620382,40.77835598178479,29.435758795475053,1.8696746006,8,0.0,3.617851628629885,-9.56280801940639,0.004234367047547299,-0.2545149484129262,0.00424192927644983,-0.254533473132534,0.0022851645404480267,0.0022851650080165627,1,1,2.4156348354804966,2.41562512391521
|
||||
255.898230781,40.778384154689235,29.435780419070618,1.8696044634,8,0.0,5.443235351216564,-6.434216390091125,0.017097087293088436,-0.26659548492225105,0.01710463257755822,-0.26661397839064577,0.0033853156754016884,0.0033853155481119606,1,1,1.9193859420172137,1.9193778615717236
|
||||
256.203232521,40.778360459279064,29.4357356189762,1.869534461,8,0.0,1.6613749944107912,-9.065584651904599,0.020897845326391523,-0.28375533677766296,0.020905374947674162,-0.2837737956637024,0.0029490261797576692,0.002949023468928643,1,1,1.826579150991076,1.826570987454278
|
||||
256.503226584,40.778369572867895,29.435744003044874,1.8694629915,8,0.0,2.3691274907986597,-8.053523826154093,0.026405516967047085,-0.2989074029187936,0.02641303095689404,-0.2989258337600643,0.0023932408616816545,0.0023932386609984485,1,1,1.5470494376711466,1.5470417536997465
|
||||
256.795776045,40.77834489953559,29.43571307179408,1.8693926558,8,0.0,-0.2419768059658273,-10.793488529287211,0.025795763499804822,-0.3194185574920843,0.025803255149920795,-0.319436943533592,0.0033762528700120088,0.0033762503093550645,1,1,2.4622858540958417,2.46227736434101
|
||||
257.098856879,40.77837186979553,29.435712998162465,1.8693216944,8,0.0,-0.24819242164161193,-7.798451244308456,0.02516810468578237,-0.3339822873916261,0.025175581080646388,-0.33400064602925794,0.0017790476878695098,0.0017790449269914485,1,1,1.2519473910848131,1.2519413943739253
|
||||
257.39912739,40.77835257410234,29.43571233527547,1.8692504556,8,0.0,-0.3041510284700475,-9.941230758849096,0.024387528436747165,-0.35276064084488323,0.02439498487185296,-0.35277895488168576,0.0002891603976864569,0.00028913980467266433,1,1,2.0652403409557007,2.065232644390455
|
||||
257.698216735,40.778375807552706,29.43573903347116,1.8691800375,8,0.0,1.9496138875179974,-7.361164528253353,0.02889381051969872,-0.3663933042644998,0.02890124963478015,-0.36641158752410685,0.0018242352017355983,0.001824235201956013,1,1,1.230601816857559,1.230595047266711
|
||||
258.003176337,40.77844261111333,29.435792119292163,1.8691101723,8,0.0,6.430919840306086,0.057348506880595194,0.04384713969379805,-0.3655886575671421,0.043854558330393596,-0.36560690415357766,0.0022956788602553494,0.002295679656790697,1,1,1.4817001282904914,1.4816970418555337
|
||||
258.303193329,40.778431256686,29.43570692242369,1.8690401152,8,0.0,-0.7610835969498512,-1.2035591745001961,0.04200112285384302,-0.36720163830600916,0.04200853059867662,-0.36721985092118686,0.004222778113559967,0.004222778640289012,1,1,0.039044728264725846,0.039044476226810405
|
||||
258.595767839,40.77842865340152,29.435817956882705,1.8689696388,8,0.0,8.612035103882679,-1.4926479766589635,0.06199559061615688,-0.3693874812759739,0.062002982169981555,-0.3694056550359718,0.0038811000754536565,0.0038811004377268294,1,1,2.6762733303073363,2.676267836909057
|
||||
258.90295921,40.77844045728286,29.43569754790541,1.8688974417,8,0.0,-1.5524455442203413,-0.18183619397680392,0.05830069067801272,-0.36901799659591666,0.058308066696178565,-0.36903614318299716,0.005791717562454971,0.005791717648705371,1,1,0.09476547618087959,0.0947664892317902
|
||||
259.195759989,40.778447874972564,29.435765602027736,1.8688267233,8,0.0,4.19243050281263,0.6418965104012601,0.06791247565867896,-0.36704903190789273,0.06791983481392054,-0.36706713628759974,0.00308495925513884,0.0030849584324357943,1,1,0.6390290903711655,0.639027710624369
|
||||
259.4987702,40.7784284671484,29.435757585135427,1.8687561158,8,0.0,3.515675297245937,-1.5133354897026579,0.07607002586274238,-0.36928137763836133,0.07607736411793409,-0.3692994550384923,0.0019511498561382056,0.0019511465460851237,1,1,0.45789235534423767,0.45788959945548074
|
||||
259.798197072,40.77833973492295,29.435676778367338,1.8686857354,8,0.0,-3.3057378822720005,-11.367016097447657,0.06810702620942732,-0.3906524043142377,0.0681143494840358,-0.39067044270571905,0.00018719389676799308,0.00018719828616969197,1,1,3.1135542808095265,3.113547192800336
|
||||
260.103172177,40.778432905557395,29.435626766760684,1.8686160907,8,0.0,-7.5275280231889905,-1.02044883279212,0.050374392900242884,-0.391884188160584,0.050381697981368004,-0.39190219271033827,0.00014909793573413896,0.00014909664267035108,1,1,2.088919937128567,2.0889234402998325
|
||||
260.40349658,40.778396817520814,29.435682433808257,1.8685447753,8,0.0,-2.828323400576923,-5.028015129346968,0.04364820382326302,-0.4008696535707875,0.04365549368114374,-0.4008876258094019,0.0019238326342102788,0.0019238320791295242,1,1,0.7788062568103641,0.7788040446597801
|
||||
260.70277942399997,40.77840604839624,29.43573600552332,1.8684756423,8,0.0,1.6940047491940478,-4.00293020234865,0.04750667570207275,-0.40787953439928853,0.047513945066485784,-0.4078974703952632,0.0007105963286368263,0.0007105957688105033,1,1,0.3879684547579805,0.3879646963412504
|
||||
261.003816434,40.778362569797586,29.435584802448577,1.868403248,8,0.0,-11.070011632534298,-8.831204271643314,0.02154813697328466,-0.4242389628307905,0.021555386051852223,-0.42425685881148445,0.00028168563299695823,0.0002816793173496363,1,1,6.040787743675412,6.0407868229365915
|
||||
261.297650958,40.77840886199906,29.435715938260483,1.8683330769,8,0.0,-4.5420365587021855e-10,-3.690480852677215,0.02150321749865364,-0.4305438318025053,0.021510455596180006,-0.43056170108088854,0.001468096478161118,0.001468094810346289,1,1,0.23828318344652544,0.23828058265452767
|
||||
261.598462546,40.778328273942115,29.435761969044197,1.8682629671,8,0.0,3.8857545153673887,-12.639753447194659,0.030506165750884898,-0.45423117711928385,0.03051338327393554,-0.4542490095671558,0.0011905929857185212,0.0011905936438686368,1,1,3.8675092772865827,3.8674975181579483
|
||||
261.899470071,40.778400708923314,29.435671203932788,1.8681922043,8,0.0,-3.7763082222925903,-4.595875911243264,0.021637442061275727,-0.46224636597210367,0.02164464840141954,-0.46226416828402783,6.0114770528650156e-05,6.0101051220257615e-05,1,1,0.9055834498329803,0.9055821329646258
|
||||
262.203066545,40.778435937568425,29.435683841552812,1.8681204686,8,0.0,-2.7094851609680464,-0.6837484666522313,0.015284536593212165,-0.4626894631076162,0.01529172177236729,-0.4627072317046498,0.0010938502350539303,0.0010938495119449802,1,1,0.27002402989331536,0.2700252721272182
|
||||
262.495636907,40.77837830692365,29.435701109903377,1.8680505626,8,0.0,-1.2517560581422378,-7.083610469952194,0.012272470381496281,-0.4754771137553851,0.01227964614064636,-0.4754948404600867,0.0022598882606979847,0.002259887834199681,1,1,1.0369182091801086,1.0369136137353792
|
||||
262.803131006,40.778379713001705,29.43569297053996,1.8679811235,8,0.0,-1.9388515184382364,-6.927465878450192,0.007764829695512367,-0.4879918283054654,0.007771984785960391,-0.4880095286039199,0.00047251267756173867,0.00047251155395555336,1,1,1.066960076804146,1.0669559749897561
|
||||
263.097157869,40.77843285925593,29.43575450786935,1.8679105698,8,0.0,3.255903650989196,-1.0255937037091647,0.015339387338627417,-0.48902307728724737,0.015346527116474818,-0.48904074359011335,0.0005659315266160428,0.0005659314344171942,1,1,0.3868345780797886,0.38683247693918965
|
||||
263.398739851,40.778370544090045,29.43574189454026,1.8678403603,8,0.0,2.191135132673317,-7.945670023867834,0.020396759858356314,-0.5034722780463358,0.02040388034176676,-0.5034899073111575,0.0006477747713256216,0.0006477726894947798,1,1,1.4124652919587546,1.4124582892497886
|
||||
263.698820351,40.7784140995454,29.43574504379109,1.8677702532,8,0.0,2.456981877933039,-3.1088528762040157,0.02607966155078086,-0.5084968167844738,0.026086767645891667,-0.5085144156980298,0.0014117231368100892,0.0014117224023464474,1,1,0.3656507056356911,0.3656474022036141
|
||||
264.003949791,40.778401152001614,29.435718081005206,1.8676989739,8,0.0,0.18088266548272972,-4.5466731913405765,0.026472066710475545,-0.5163013357206525,0.026479158208989332,-0.5163189088823913,0.0015727334086750233,0.0015727331164827236,1,1,0.3650562857436369,0.3650530305740346
|
||||
264.297152142,40.778338597721906,29.435761816315157,1.8676291151,8,0.0,3.872861074575014,-11.493301572772955,0.03538687837621304,-0.5375342262052224,0.03539394966000622,-0.537551753814564,0.0027023626983309463,0.002702361027890978,1,1,3.224499747399942,3.224489171269408
|
||||
264.598733941,40.778359822328575,29.43570787449016,1.8675585904,8,0.0,-0.6807143962270604,-9.13631792108533,0.03371548973808004,-0.5541332355805418,0.03372254676104104,-0.554150733062554,0.0014831872747214337,0.0014831858701132962,1,1,1.6698271314386197,1.6698207633380366
|
||||
264.898707141,40.77836041251583,29.43585375861125,1.8674879442,8,0.0,11.63429663680337,-9.070768738792587,0.06074729846032948,-0.57062240977024,0.06075433819840513,-0.5706398717333094,0.00046503890713768385,0.0004650360650463879,1,1,6.471795811480385,6.471783254206115
|
||||
265.198799547,40.77843236110008,29.435740715844574,1.8674173292,8,0.0,2.0916319726963564,-1.08091414566976,0.06543710882634389,-0.5715900330983716,0.06544413268934751,-0.5716074618111343,0.0017856712082826947,0.0017856719767857668,1,1,0.15452507528838155,0.15452364626489434
|
||||
265.49816246,40.77844331803786,29.43563694290694,1.8673467,8,0.0,-6.668494372970546,0.13585242339682213,0.0498037048469786,-0.5702189724843019,0.04981071481197337,-0.5702363701027369,0.003586566842087137,0.0035865669178609554,1,1,1.646092931729873,1.6460968945452132
|
||||
265.799137266,40.77844476600733,29.43564723792934,1.8672766254,8,0.0,-5.799426689701271,0.29664816266617794,0.036190081237507665,-0.5685471396406857,0.03619707252247256,-0.5685645031312925,0.003920062846434072,0.003920062537866784,1,1,1.2503097066407571,1.2503133360521062
|
||||
266.103734082,40.77839267934117,29.43577799046431,1.8672075947,8,0.0,5.238220574102215,-5.487557122972517,0.048237564342415995,-0.5780574635975074,0.04824453581167043,-0.5780747846223062,0.0026425397645398548,0.002642539713230709,1,1,1.5160740794665972,1.5160676453766007
|
||||
266.397635836,40.77842491832042,29.435769961847814,1.8671374164,8,0.0,4.560471867319042,-1.9074309447150921,0.05881752993909535,-0.5805828592335274,0.05882449124136821,-0.5806001608130144,0.0014882435103279249,0.0014882434129596968,1,1,0.7735111618272453,0.773507862325954
|
||||
266.70393255199997,40.77847871196993,29.435620745110544,1.8670660767,8,0.0,-8.035847923765408,4.066336776955324,0.03995888149676692,-0.5716475080557537,0.03996582292406223,-0.5716647691696636,0.00031882048535376,0.00031880976532475743,1,1,2.844636082022006,2.8446437331920666
|
||||
266.997077702,40.77843111487173,29.43572115520059,1.8669953251,8,0.0,0.44039478874005683,-1.2193076215099532,0.040928928732925786,-0.5728407358702998,0.04093585622070963,-0.5728579707299258,0.001461312587589016,0.0014613101568007806,1,1,0.015149939723729227,0.015149239656859376
|
||||
267.28943772499997,40.77856611151056,29.43568712928919,3.1321564693,8,0.0,-2.4319418883498662,13.772019406891511,0.03516337177702008,-0.5452325157625894,0.03517028284852895,-0.5452497137802765,0.0009174251444992961,0.0009174109475492065,1,1,4.81623452452191,4.816246801218312
|
||||
267.604625593,40.778403749262964,29.43581856769981,1.8668555553,8,0.0,8.6636012621175,-4.258243221229028,0.05516888975579505,-0.5524012195639709,0.055175785480539336,-0.552418379305306,0.0008248158752887647,0.0008248106841896774,1,1,2.992139217042728,2.992132065574111
|
||||
267.898563217,40.778414467338074,29.435738890886512,1.8667854009,8,0.0,1.9375762861718695,-3.0680097910819137,0.05961709190430493,-0.5571951835907869,0.059623971858461376,-0.5572123188086475,0.0005497146682650967,0.0005497052276237267,1,1,0.2690866409904365,0.2690837758494481
|
||||
268.198671988,40.77842736252956,29.435618042213434,1.8667143676,8,0.0,-8.264022702334513,-1.6359992236286103,0.040271413963860414,-0.5592799294783207,0.04027827988908825,-0.5592970311499887,0.0006138506611808055,0.0006138512659048421,1,1,2.523910748328973,2.523914053476729
|
||||
268.498461181,40.77849450527387,29.435646385043295,1.8666436907,8,0.0,-5.871419781070175,5.82017528216943,0.026514350675660242,-0.5469834307949581,0.026521195016046342,-0.5470005009958546,0.0023295397398220585,0.0023295403251683425,1,1,2.1689402510460596,2.1689480493291358
|
||||
268.803323789,40.778480802306916,29.43571962337061,1.8665751324,8,0.0,0.31108313584573805,4.298463568524063,0.02720127536790238,-0.5376759592757099,0.027208107111875754,-0.5376929957707003,0.003101911334266421,0.003101912635259296,1,1,0.5272854233588323,0.5272889773456325
|
||||
269.095690755,40.77846557130771,29.435721870863325,1.8665049638,8,0.0,0.5008081321367022,2.607066777840361,0.028307576021119215,-0.5316040612265255,0.028314400034608726,-0.5316210626136456,0.002098716262810868,0.002098717717747022,1,1,0.22895221966401902,0.22895437885728384
|
||||
269.398801643,40.77847796183296,29.435737232548487,1.8664343202,8,0.0,1.7975837764892042,3.983030203074934,0.03239656386800862,-0.5229571516932964,0.032403356882320856,-0.5229741203076743,0.0007872373600186915,0.0007872396511979227,1,1,0.5680792312381004,0.5680817911284771
|
||||
269.698685199,40.778360113092724,29.435704888685294,1.8663636392,8,0.0,-0.9327652654254683,-9.10402864369426,0.030166046738023266,-0.5394345350818718,0.03017283034831901,-0.539451472740221,0.000666695004068334,0.0006666974304878904,1,1,1.6781454577532942,1.6781394264756884
|
||||
269.999304213,40.77844665058678,29.4356807549698,1.8662937454,8,0.0,-2.9700425877608123,0.5059283337499504,0.02316822433790632,-0.537422824080294,0.02317498470153653,-0.5374397232357058,0.001977476281855874,0.001977478724481342,1,1,0.34893126018598747,0.3489335167667722
|
||||
270.317683614,40.77846722000605,29.43566254460974,1.8662247353,8,0.0,-4.507292087177806,2.790155469690085,0.012679115431599983,-0.5310319609647337,0.012685863100698516,-0.5310488293853246,0.0025629113228880967,0.0025629143729650073,1,1,0.9873194495799128,0.9873241712680006
|
||||
270.603775176,40.77851172515572,29.435688544218078,1.8661533765,8,0.0,-2.3125009521060256,7.732434805243405,0.007323645275153824,-0.5151922270352868,0.007330379128073625,-0.5152090673701216,0.002429754144747996,0.0024297568982230232,1,1,1.7200120578626814,1.7200194176669423
|
||||
270.903781795,40.778359639473614,29.43576297740185,1.8660817024,8,0.0,3.9708746020562837,-9.156622862314865,0.016456519595305037,-0.5317417833903499,0.01646323372096753,-0.5317585821207582,0.003667968195783532,0.003667969457796019,1,1,2.23421070683503,2.2342022869264984
|
||||
271.203331636,40.778456391939095,29.435642042270803,1.8660126271,8,0.0,-6.2380237904697555,1.5877039172089458,0.001977442741106906,-0.5276853728553583,0.0019841428281898096,-0.5277021426407725,0.0032476711442471864,0.003247671725548732,1,1,1.5107198527081296,1.510724472331234
|
||||
271.496976403,40.77846074857146,29.43577626402996,1.8659431323,8,0.0,5.092476089343584,2.071505443251148,0.013771658031207279,-0.5226666333426818,0.01377833960135221,-0.5226833666890602,0.004426263558067757,0.004426263865006536,1,1,1.0851639722031845,1.0851634605017293
|
||||
271.798729185,40.77846840049198,29.435750770192673,1.8658732451,8,0.0,2.940381250166614,2.9212472064386246,0.020545888968639216,-0.5160856093290682,0.02055255695162994,-0.5161023117683334,0.0038037375671328517,0.0038037371651585736,1,1,0.5737047686677266,0.5737059326396442
|
||||
272.10366485,40.77840123824636,29.43571724371075,1.8658022519,8,0.0,0.11020133283488182,-4.537095746299795,0.020746554200852436,-0.5237815009055405,0.02075321129900244,-0.5237981734529712,0.003117957648301108,0.0031179570793388018,1,1,0.3614001214628167,0.3613970780402866
|
||||
272.39761187,40.77838597660264,29.43573308778381,1.8657316159,8,0.0,1.4477003137336668,-6.231895445305646,0.024067562954186758,-0.5347353847877242,0.02407419595716572,-0.5347520215882239,0.004202354039596872,0.004202352979858269,1,1,0.8011098956725954,0.8011049616455704
|
||||
272.703279793,40.77847154874509,29.43571173288702,1.8656632251,8,0.0,-0.35500185948275753,3.270858967485367,0.023184661113473184,-0.527425214205673,0.023191285318778745,-0.5274418224174257,0.0014628712209266068,0.0014628696630891013,1,1,0.3286313630187103,0.32863437315839567
|
||||
273.003094967,40.778364253699756,29.435722488682437,1.8655920796,8,0.0,0.552962949903893,-8.644215817500074,0.024411927342510284,-0.5429276720725693,0.0244185408388732,-0.5429442491046976,0.0003158146557563724,0.00031581190118168585,1,1,1.4815527018226295,1.4815464269940473
|
||||
273.297118707,40.778440012602715,29.435745213249945,1.8655225069,8,0.0,2.471286011143832,-0.2312175085060522,0.03008385335662126,-0.542383439404635,0.030090443600554337,-0.5423999854768021,0.0021168129128983377,0.0021168125553859296,1,1,0.2180334853473863,0.21803255075807743
|
||||
273.603716544,40.77847453039997,29.43582016350287,1.865451615,8,0.0,8.798303771330357,3.6019758530959343,0.05034862361869065,-0.5344313074546495,0.05035520365862979,-0.5344478193522344,0.001654245929507148,0.001654243779935011,1,1,3.1555290679171204,3.1555279608336018
|
||||
273.90352843,40.77852500756873,29.435694837107444,1.8653816697,8,0.0,-1.7812787919491784,9.207441699454023,0.046154457198074476,-0.5158273323828039,0.04616101227604073,-0.5158438126835996,0.000561504033573902,0.0005614958622589801,1,1,2.240581237392372,2.2405892906562928
|
||||
274.203461392,40.77849891312218,29.43565508823533,1.8653127063,8,0.0,-5.136728855772641,6.309664653631608,0.0341627892162544,-0.5027762235437512,0.03416933345017181,-0.5027926740951448,0.0013702714560654902,0.0013702726744941915,1,1,2.008989521862182,2.008996998636442
|
||||
274.503190878,40.77840930939248,29.43573279774542,1.8652418312,8,0.0,1.4232158308531802,-3.6407978430512897,0.037375437693460724,-0.5088217433987654,0.03738195903087174,-0.5088381617975402,0.0019302271981442918,0.0019302270438345192,1,1,0.2894872976432987,0.28948433723178446
|
||||
274.796942255,40.778436936506125,29.43574870147503,1.8651714653,8,0.0,2.765749160318788,-0.5728167864349709,0.04368007796101421,-0.5088831615668183,0.0436865919552759,-0.5088995498668417,0.003703472191270626,0.0037034718151067684,1,1,0.268482354408134,0.26848102292872117
|
||||
275.09869335999997,40.77844077389611,29.435735298879305,1.865101194,8,0.0,1.6343516011881711,-0.1466763928129529,0.047354253226113356,-0.5082279128705245,0.04736074672616021,-0.5082442686214734,0.0035233581386081925,0.003523357814806155,1,1,0.09415707825998489,0.0941565968937198
|
||||
275.403607959,40.77843126516621,29.435688452834185,1.8650321074,8,0.0,-2.320218031819269,-1.2026171245079664,0.04188762435486227,-0.5094823785569244,0.04189411397698136,-0.50949870740496,0.005305495431705511,0.005305494528193287,1,1,0.21287218663893578,0.21287278966941062
|
||||
275.703580149,40.77847555969524,29.435711044396676,1.8649604569,8,0.0,-0.4131216079174549,3.7162734943495392,0.04083056107181559,-0.5014617718455481,0.04083702760737923,-0.5014780649399991,0.002673985078668962,0.002673983838466936,1,1,0.4062956180098812,0.4062989120829188
|
||||
275.99694287,40.778402320955024,29.435624283716603,1.8648905656,8,0.0,-7.737140964292904,-4.416857311408389,0.022836957346014177,-0.5088437698257628,0.02284342177604272,-0.5088600357648424,0.0014707979863197974,0.001470792128214171,1,1,2.5235853724182964,2.523586156391368
|
||||
276.310078498,40.778475646087394,29.435765396474178,1.8648217238,8,0.0,4.175076697398716,3.7258684768468466,0.03244767138878435,-0.5008110870268548,0.03245411317073399,-0.5008273185006582,0.0005541562461193973,0.0005541586067371315,1,1,1.0221382724053927,1.0221394155232764
|
||||
276.59754389799997,40.7784486703666,29.435733999475126,1.8647511737,8,0.0,1.5246605420247161,0.7302236926374158,0.03589437192984604,-0.4985190182431253,0.035900791766604635,-0.49853521965736,0.0011988913586041946,0.0011988931248315465,1,1,0.11413179542857488,0.11413199569666953
|
||||
276.903749533,40.77836012351905,29.43571022779326,1.8646802747,8,0.0,-0.4820570376592554,-9.102870846332024,0.03469503579016549,-0.5148381640136057,0.03470145247673888,-0.5148543321104618,0.0024564490746739557,0.0024564502493205033,1,1,1.6632241136421664,1.6632181279683838
|
||||
277.253018789,40.77848259016348,29.43573614322104,1.8646116246,8,0.0,1.7056267277892736,4.497004565861994,0.038556709924947634,-0.5053092746643914,0.03856310754398558,-0.5053254126682997,0.0027381537282979355,0.0027381551751229443,1,1,0.6616756315725953,0.6616784787836653
|
||||
277.552806772,40.778409472206064,29.435759889921606,1.8645401651,8,0.0,3.7102378868922754,-3.6227166628337053,0.04704586140825223,-0.511237899430308,0.04705224796654401,-0.5112540119928065,0.0024415791635839733,0.002441579427659343,1,1,0.703107296139343,0.703103353427973
|
||||
277.85264258,40.77845694172977,29.435721887623977,1.86447102,8,0.0,0.5022230687116407,1.6487553559595054,0.04808133731792524,-0.507121632154286,0.048087705831030135,-0.5071377040791933,0.0036224178940353624,0.0036224181083705175,1,1,0.11167289128085514,0.11167423542194782
|
||||
278.14541577,40.77836707052859,29.435571426991274,1.8644006696,8,0.0,-12.19911860838489,-8.331398001361254,0.019824073735034645,-0.5220025404581577,0.01983043136154663,-0.5220185857120627,0.003069567308124096,0.0030695678375371135,1,1,6.775265856728367,6.7752658665040775
|
||||
278.453550982,40.778469491421646,29.43569562696507,1.8643325576,8,0.0,-1.714603453743606,3.042394154312833,0.015771383017763603,-0.5152631896724139,0.015777714756780952,-0.5152791982899758,0.0042340960613768425,0.004234096912626522,1,1,0.39221923570300127,0.3922225832038125
|
||||
278.753031992,40.77846509686193,29.435741860885305,1.8642617962,8,0.0,2.1882910011019625,2.5543800564925894,0.020806887199797876,-0.5093960622321725,0.02081321040348087,-0.5094120421326519,0.003548893215653678,0.0035488931047381817,1,1,0.3806152960392518,0.38061649849698137
|
||||
279.053571579,40.77837356439389,29.435697242350678,1.8641909684,8,0.0,-1.5782409239373612,-7.61026656613379,0.01711462760903505,-0.5228980205743291,0.01712093837507715,-0.5229139709337781,0.0023170355769054594,0.0023170355232157674,1,1,1.2183432626922297,1.2183389232713144
|
||||
279.337674009,40.77843458032128,29.435747104350504,1.8641202098,8,0.0,2.6309259189670087,-0.8344702848381501,0.02315402459024496,-0.5235096553006668,0.02316031770355779,-0.5235255772414619,0.0005239727777502072,0.0005239728848550157,1,1,0.24849167114045556,0.24849026030434618
|
||||
279.653776611,40.778483675703235,29.435705472788424,1.8640522702,8,0.0,-0.8834557502899881,4.617553207803806,0.021055695057348122,-0.5137378488790896,0.021061972405651407,-0.5137537378907782,0.00023647713629930327,0.00023647612648083753,1,1,0.619945087037932,0.6199491542180581
|
||||
279.945972457,40.77835798986471,29.43573608565609,1.8639824319,8,0.0,1.7007704895269469,-9.339812184156104,0.02493929668476379,-0.5305149531067472,0.024945560785803407,-0.5305308131812239,0.0012444682444953795,0.0012444683334596747,1,1,1.8415713535948177,1.841564328533295
|
||||
280.248957964,40.77842419998581,29.435711663350787,1.8639119664,8,0.0,-0.36087210450800306,-1.9872031319486427,0.024040337987850813,-0.5332843391065581,0.02404658638442035,-0.5333001685498131,0.0017132096338155632,0.0017132100044362007,1,1,0.052758759697351235,0.052757901980492676
|
||||
280.548562937,40.77848874196225,29.435722065233033,1.863842055,8,0.0,0.5172159156931064,5.180159356249179,0.025183414158494816,-0.5224093356463093,0.02518965311122639,-0.5224251371110102,0.0012220087578827272,0.001222008505866488,1,1,0.73783614716609,0.7378399652595293
|
||||
280.853561045,40.778499217481496,29.435691985336117,1.8637735819,8,0.0,-2.022015223948035,6.343462138622753,0.02046723949350875,-0.5093720383488146,0.020473459859559937,-0.5093878090749568,0.0007522492578428156,0.0007522496750733378,1,1,1.2039592783169784,1.20396504477676
|
||||
281.153513976,40.778424245163755,29.435880043290453,1.8637031204,8,0.0,13.853141137322664,-1.9821731889247405,0.05233912093671414,-0.5121629176446382,0.0523453308134747,-0.5121786589744124,0.0020052250718539445,0.0020052243557178123,1,1,6.947251515469955,6.947244270131741
|
||||
281.445984137,40.77841307771924,29.435801408699323,1.8636330416,8,0.0,7.215100297535353,-3.2223231827093124,0.06890896725187318,-0.5173231798127742,0.06891516109942408,-0.5173388934426821,0.003884642667094518,0.0038846423595070337,1,1,2.0138077036296758,2.013802591418708
|
||||
281.748929683,40.778477210475685,29.435739104489205,1.8635630507,8,0.0,1.9556059998566557,3.899592296763361,0.07321153268514861,-0.5089238020826645,0.07321771481949867,-0.5089394840350296,0.004094431932613511,0.004094431078687067,1,1,0.5640706746794585,0.564072931612959
|
||||
282.035654474,40.77849920117509,29.435741867625833,1.8634944475,8,0.0,2.188858891173333,6.341651364899994,0.07801743147410825,-0.49591885119716217,0.0780236019309842,-0.49593449220503455,0.003607631328558844,0.0036076304559293235,1,1,1.209552390846519,1.2095562427770414
|
||||
282.478655942,40.778382379621114,29.435837658913734,1.8634245498,8,0.0,10.275214889742484,-6.6313319145169185,0.1017339327981461,-0.5075982599979534,0.1017400846084452,-0.5076138993447532,0.006305090338439426,0.00630509073650735,1,1,4.589660648922605,4.589651821180665
|
||||
282.653797839,40.77848096925571,29.435846079983772,1.8633539363,8,0.0,10.98607475536787,4.317011312628038,0.1266580077805244,-0.4984030825870439,0.12666415265540393,-0.4984186766910866,0.004745153896785031,0.004745152765181176,1,1,4.791338148589906,4.79133668201819
|
||||
282.945962441,40.77850952199352,29.43569061879391,1.8632833202,8,0.0,-2.1373732148521505,7.487774408188371,0.12157036688601629,-0.483298579602696,0.12157648947335772,-0.4833141561010779,0.006433706905528325,0.0064337058194905514,1,1,1.60932217858773,1.609328747942614
|
||||
283.254100359,40.77847870974214,29.435768669000304,1.8632129648,8,0.0,4.45133086107853,4.0660863584939095,0.1314828227589454,-0.47466694163209855,0.1314889339623243,-0.4746824812999799,0.00295865645636329,0.0029586565878053444,1,1,1.138183773664446,1.1381850252417132
|
||||
283.547773331,40.77833565485886,29.435701318308993,1.863143805,8,0.0,-1.234164001806263,-11.820106321933958,0.12833983894918588,-0.49618759785447936,0.12834593133345046,-0.49620311109470944,0.0009402140695173,0.000940215563085831,1,1,2.942107621058108,2.9421003458068395
|
||||
283.84849928,40.77839620178323,29.435774555457424,1.8630740656,8,0.0,4.948249568786988,-5.096391445310566,0.13945130626488994,-0.5048746020189891,0.13945739062526386,-0.5048900834235656,0.0003823620064183646,0.00038237045935631176,1,1,1.3102497259338701,1.3102444192094804
|
||||
284.153699044,40.77849051796704,29.435727692616215,1.8630048397,8,0.0,0.9922583545821632,5.3773840779408655,0.1414051881542343,-0.4937565089200425,0.14141125515542766,-0.49377196264726525,0.001270428106764889,0.0012704306380169757,1,1,0.7990255287497549,0.799029223139543
|
||||
284.445772773,40.77849898489181,29.435612425261077,1.8629345089,8,0.0,-8.738175688389257,6.317638019811987,0.12095629487549739,-0.4807996906426883,0.12096235243167375,-0.4808151085175721,0.0025240109094768776,0.0025240122309338705,1,1,3.8790070412803463,3.8790156291575437
|
||||
284.703913807,40.77847799793939,29.43570954518796,1.8628662126,8,0.0,-0.5396791594424482,3.987039609930951,0.11947197162738686,-0.4723889558473982,0.11947801218498404,-0.4724043496832732,0.0025019764353918757,0.0025019785741455247,1,1,0.4615802371508445,0.46158360371504464
|
||||
285.003496494,40.778405407798594,29.43580987751714,1.8627955949,8,0.0,7.930007682608311,-4.074064280511094,0.1374428398413276,-0.4791832621814127,0.13744887159877084,-0.47919863316182715,0.0022398816109552764,0.002239882289641697,1,1,2.489224420139096,2.489218537731793
|
||||
285.329661651,40.7784090601992,29.435710567679642,1.8627263611,8,0.0,-0.45336472248514836,-3.6684707873426023,0.13604104179245827,-0.4852213867608752,0.13604705441006829,-0.48523671587243883,0.003556861714417211,0.003556861867883652,1,1,0.2397604790011918,0.23975854778731923
|
||||
285.60354247099997,40.77847930035441,29.435695960345672,1.862655726,8,0.0,-1.6864604648910433,4.1316724872387205,0.13188237955962376,-0.47651227473097507,0.13188837728333314,-0.47652758154609914,0.0019283575817287421,0.001928358741082183,1,1,0.5958430073881843,0.595846960263557
|
||||
285.903968583,40.778513028126916,29.435773589162135,1.8625881835,8,0.0,4.866669925366916,7.877130512071152,0.1427279782105747,-0.46066831185931645,0.1427339667048089,-0.4606835814435276,0.00030696573168695,0.0003069781838966667,1,1,2.3668697931935228,2.366873452689379
|
||||
286.203994602,40.778478157432495,29.43572856002279,1.8625178365,8,0.0,1.0654817423492269,4.004751316623872,0.1448539533474083,-0.45227049903987543,0.14485992411629214,-0.4522857408063939,0.0005822472025388755,0.0005822510064373096,1,1,0.47606000090985207,0.4760626487697947
|
||||
286.49637725499997,40.778500403044,29.435725901674456,1.862448321,8,0.0,0.8410736851678395,6.475118185193008,0.14644315539867114,-0.43910039985937127,0.14644911716355388,-0.43911560768644414,0.0017035943866467126,0.00170359737171458,1,1,1.0892666304289507,1.0892710453322731
|
||||
286.8034896,40.778423326596666,29.43573308274801,1.8623776266,8,0.0,1.447274398814537,-2.0841925372394976,0.14943500642651453,-0.44226049843288606,0.14944095147864755,-0.44227567972576404,0.002174810692246147,0.0021748114994295997,1,1,0.12145161423287108,0.12144993762832561
|
||||
287.103105001,40.77844715298521,29.43570944946449,1.8623087004,8,0.0,-0.5477600286207291,0.5617189159963873,0.14782042321488167,-0.440367520266781,0.147826356653518,-0.440382671592187,0.0021329113231230113,0.002132911078909509,1,1,0.040037837770921604,0.04003881754346484
|
||||
287.406024891,40.77844074289191,29.435769357652376,1.8622398152,8,0.0,4.509466848201795,-0.15011820432739317,0.1578626328593462,-0.4398121833502879,0.15786854876643952,-0.4398273063741113,0.0032633986916103873,0.0032633979201019533,1,1,0.6877831836679075,0.6877815152389188
|
||||
287.705420613,40.778425235830575,29.43571893552072,1.8621688005,8,0.0,0.2530176460184867,-1.8721729609944688,0.15805869145338314,-0.4425114552863628,0.15806459745439533,-0.44252654984591167,0.0008959872320646715,0.0008959858495479985,1,1,0.046150040855132045,0.04614903261796901
|
||||
287.999613992,40.77842342314981,29.435773612750882,1.8620986847,8,0.0,4.868667739982337,-2.0734688877578913,0.1689406630891939,-0.44561007556594884,0.16894655209650764,-0.44562514951828835,0.0009877684276828071,0.00098776823161628,1,1,0.859444196055857,0.8594410909025137
|
||||
288.422501909,40.778396600835705,29.435689821346354,1.8620269827,8,0.0,-2.2046944422913417,-5.052078142786221,0.16342871711781864,-0.4542849526894222,0.1634345959859958,-0.4542999901920832,0.0009708227215204954,0.0009708223154031719,1,1,0.6770664344386244,0.6770643429285582
|
||||
288.603068671,40.77847394847096,29.43565842031119,1.8619605402,8,0.0,-4.855449439156105,3.5373492174598344,0.15191945199279444,-0.44678469920298036,0.15192531157717892,-0.4467997089033073,0.0011208212416876835,0.0011208205902385633,1,1,1.2640640589299272,1.264068865940041
|
||||
288.902953514,40.77848060234019,29.4356609022413,1.8618900578,8,0.0,-4.645933749044853,4.276258788361765,0.14088367594674264,-0.43784141163238216,0.1408895267204566,-0.43785639190417686,0.002198949567115158,0.00219894874349147,1,1,1.3281749026041532,1.3281800980122196
|
||||
289.201364419,40.778469600683394,29.435624829901744,1.8618202689,8,0.0,-7.691026255226662,3.054531426448056,0.12294629256742179,-0.4313062315924919,0.12295212306365447,-0.43132118519335877,0.002270275917379688,0.002270273119905911,1,1,2.484007140721217,2.484012778588071
|
||||
289.50151780699997,40.77848507021624,29.435676323190023,1.8617504973,8,0.0,-3.34415503190225,4.772414062986847,0.11501152138941041,-0.4215251731083931,0.1150173367403121,-0.4215400987968131,0.0019838195772140543,0.0019838183260356603,1,1,1.038215778009479,1.0382207113698736
|
||||
289.80366317,40.778454770348596,29.43564863568076,1.8616821124,8,0.0,-5.681432855734335,1.4076264464615855,0.10164844469522971,-0.4180057768166278,0.10165425357383126,-0.4180206697760428,0.002997051331219604,0.0029970505369434335,1,1,1.2860998939204427,1.286103546711942
|
||||
290.095804659,40.77851596409689,29.435754536580127,1.8616121216,8,0.0,3.2583232472155923,8.203168006432598,0.10890325819486608,-0.4018050029972335,0.10890905213142033,-0.40181986804402464,0.0015626709724286458,0.001562670127397195,1,1,2.0193082825214557,2.019312696222871
|
||||
290.401625944,40.77847315215088,29.43570897584156,1.8615430173,8,0.0,-0.587741286030388,3.448916599306437,0.10727708064470984,-0.39447974432439203,0.10728286739633182,-0.3944945829122995,0.0005494572164911659,0.0005494464579182985,1,1,0.34866607206871475,0.34866892061755217
|
||||
290.698537385,40.778526499419286,29.435707538389465,1.8614731228,8,0.0,-0.7090850313822714,9.373110969891599,0.10542359237663722,-0.376153222213583,0.10542935986600006,-0.3761680314187191,0.002009462185058731,0.0020094578747588943,1,1,2.1549274825199154,2.1549342967116227
|
||||
291.00366236,40.778432805674505,29.43559941335878,1.8614041841,8,0.0,-9.836601001157538,-1.0315380836292891,0.08265132984982464,-0.37738028014110975,0.08265708389344843,-0.377395057547286,0.0023481957988713453,0.0023481929687846894,1,1,3.573425032753611,3.5734287342818205
|
||||
291.297378658,40.77853760373921,29.435593774270117,1.861334388,8,0.0,-10.312615792302037,10.606248731216516,0.05877713042403492,-0.35666997402971856,0.05878287548316058,-0.3566847265410772,0.0013797947067331865,0.0013797907973492048,1,1,6.59059669783482,6.590608266502542
|
||||
291.59890084799997,40.778394797438345,29.43569245631502,1.8612648816,8,0.0,-1.982260071305146,-5.252344808634157,0.05412939201446163,-0.3658615246881083,0.05413512813655469,-0.3658762491063264,0.00021565394938578944,0.00021567115883374392,1,1,0.6855205664484654,0.6855181865660002
|
||||
291.903581292,40.77845871668496,29.435697762861718,1.8611963427,8,0.0,-1.5342993100614306,1.8458636108193818,0.050421219844125745,-0.3617221368348684,0.05042693539973924,-0.361736833742006,0.001043460112901829,0.0010434672385416762,1,1,0.2002215140884851,0.20022362502274468
|
||||
292.197475857,40.7784879940047,29.435720745921827,1.861126448,8,0.0,0.40584464382671925,5.097098941158925,0.05125408360000686,-0.3514529868357308,0.05125979011967435,-0.3514676534118702,0.001473228095611445,0.0014732280753143373,1,1,0.670103215901057,0.6701066524666481
|
||||
292.499643288,40.77845034567635,29.435757847486247,1.861056971,8,0.0,3.5378208233853914,0.916266904300936,0.059265514984961166,-0.34907235221541305,0.05927120230574506,-0.34908699798233905,0.002502690697400392,0.002502689626977859,1,1,0.474182565780663,0.4741819635914408
|
||||
292.799125292,40.778476202993254,29.435716828302226,1.8609868715,8,0.0,0.07513398070022136,3.7877114894194763,0.05927894103680406,-0.34130274145613904,0.05928461824658412,-0.341317354204704,0.002492091252946696,0.0024920915310111882,1,1,0.3822265976517029,0.3822292965341587
|
||||
293.102848167,40.77850012604128,29.43560540965969,1.8609163799,8,0.0,-9.330406048894021,6.444362966264757,0.03778713378717826,-0.32857722244491183,0.0377927968455479,-0.32859180740604266,0.00120660565536255,0.001206605981387281,1,1,4.207274094650401,4.20728236745255
|
||||
293.403487339,40.77844933635102,29.435546274855835,1.8608480144,8,0.0,-14.322353230992332,0.8041947075384607,0.004854104804345553,-0.3264150056019125,0.004859755171783595,-0.3264295665506053,0.0008512708682703447,0.0008512618974262015,1,1,7.463697535247503,7.463704138472637
|
||||
293.697267762,40.77838157852752,29.43566068734664,1.860778319,8,0.0,-4.664081273914343,-6.7202987184284115,-0.005788878603752825,-0.33843702001900816,-0.00578324394380625,-0.3384515513510248,0.00036542599551048124,0.0003654227994185586,1,1,1.6990670708987068,1.6990648143367004
|
||||
293.999421671,40.778435102191935,29.435621681278697,1.8607086088,8,0.0,-7.956825330840435,-0.7765129353195184,-0.02411581077628458,-0.3392640236068234,-0.02411018923205503,-0.33927852573451284,0.0009016551731517889,0.0009016553736797213,1,1,2.283598509081198,2.2836014554344333
|
||||
294.303466054,40.77843889120201,29.435746093424022,1.8606406168,8,0.0,2.5455870838244383,-0.35574861567541016,-0.018151502592004588,-0.33929750293395977,-0.018145894877065524,-0.3393119792271804,0.0014841597840254996,0.0014841665125567974,1,1,0.2380771078289514,0.23807605570037585
|
||||
294.59588363,40.77852413173927,29.435779819405692,1.8605717368,8,0.0,5.392602500986918,9.110182910580571,-0.005767639531687914,-0.3215405175881877,-0.005762037419731433,-0.3215549659340535,0.0015457469883353677,0.001545747092246014,1,1,3.0498953119867918,3.0498992316291704
|
||||
294.903861985,40.77849528461829,29.435579145718076,1.8605013859,8,0.0,-11.547509410257826,5.906727865535233,-0.032205328029261494,-0.30990608800195396,-0.03219975258727767,-0.3099205077711474,0.002514506113248388,0.0025145093045742394,1,1,5.669393283783169,5.669401954600905
|
||||
295.197253871,40.77849185307673,29.43565536534237,1.8604316438,8,0.0,-5.113337069439771,5.525649211919013,-0.04380651715476169,-0.29893885788340013,-0.04380094651521953,-0.2989532505087826,0.0003762809956650403,0.00037629557184628047,1,1,1.6914619725168643,1.691467777258253
|
||||
295.503542773,40.77847310419132,29.435735080078196,1.8603613714,8,0.0,1.615880440486946,3.4435908617503457,-0.039996337569406716,-0.2919588724201795,-0.03999078570077939,-0.29197323844455053,0.0010455602263896217,0.0010455601840048403,1,1,0.4121560478802612,0.4121577881741532
|
||||
295.803523839,40.77847304517244,29.435662101572948,1.8602930808,8,0.0,-4.544691197094904,3.4370380549209196,-0.050318235766726206,-0.2849491747659671,-0.0503126950288208,-0.2849635171444798,0.00306247269731427,0.0030624713210859467,1,1,1.0422130066155109,1.0422172042006126
|
||||
296.095727303,40.77849498252054,29.435606505542513,1.8602239175,8,0.0,-9.237896482250257,5.873176780946917,-0.07128787089368203,-0.2734572206474359,-0.07128235059739221,-0.2734715361946372,0.00325769399846943,0.003257691265109237,1,1,3.8905210576980034,3.890528669108107
|
||||
296.403943616,40.77839127063501,29.435723178907214,1.8601539481,8,0.0,0.611228983577091,-5.643995242934993,-0.06979597676702926,-0.283446138183139,-0.06979045607311188,-0.2834604293953764,0.005267798192979828,0.005267795708769472,1,1,0.661019372329357,0.661015665044523
|
||||
296.703605934,40.77846185928872,29.435634642329212,1.8600859525,8,0.0,-6.862698692265215,2.1948516115980246,-0.08528138335000224,-0.27882834254283456,-0.08527588115062022,-0.27884260782117526,0.004819833973090521,0.004819832622757608,1,1,1.80092527076214,1.800929554525846
|
||||
297.003464354,40.77849807386383,29.43560762699521,1.8600158112,8,0.0,-9.143227260325418,6.21646918929905,-0.10598281366814377,-0.26665891324001684,-0.105977323841246,-0.2666731454947523,0.004022463500303526,0.004022462968443368,1,1,3.9004949871185173,3.9005027186105936
|
||||
297.303459518,40.77845041228938,29.435611619106172,1.8599460962,8,0.0,-8.806234649174716,0.9236686482225022,-0.12592464319903773,-0.2644282519121231,-0.12591916405169493,-0.2644424639599494,0.005847892182137913,0.005847891776317347,1,1,2.76080131864475,2.7608055213289835
|
||||
297.597394934,40.77854067652657,29.43562119563562,1.8598762392,8,0.0,-7.997808859154116,10.947477766561237,-0.14389199965093763,-0.24346712706055723,-0.14388653684412192,-0.24348130578948932,0.0038268129221376754,0.0038268114367836135,1,1,5.041915807907935,5.041926030911262
|
||||
297.903355325,40.77840077555022,29.435652614984523,1.8598080388,8,0.0,-5.345519196637931,-4.588476051677996,-0.15584527240687074,-0.2515678674795991,-0.15583981851190548,-0.25158202726036344,0.0026177388380643875,0.0026177370316904512,1,1,1.3971974912860459,1.3971967883013254
|
||||
298.19638368,40.778479860295505,29.435648652587492,1.8597389096,8,0.0,-5.680003515359396,4.193855722979953,-0.16843029237966153,-0.24326718392520552,-0.16842485312738814,-0.24328131439273212,0.002463091568877899,0.002463089438016018,1,1,1.541676034635188,1.541681017729215
|
||||
298.503519924,40.778435100363744,29.435620651427634,1.8596689305,8,0.0,-8.043761543805353,-0.7767158621810663,-0.186409990567061,-0.2442667618275166,-0.18640456634806146,-0.24428086238675512,0.0025013094683768787,0.0025013081677313148,1,1,2.2425438264312745,2.242546577415127
|
||||
298.797368807,40.77849100051126,29.435653100585967,1.8595992072,8,0.0,-5.304519323320004,5.430972267982189,-0.1981413467204092,-0.23364290271079036,-0.19813593179019084,-0.23365698205938007,0.0012777159810454712,0.0012777136249515029,1,1,1.6638325764770057,1.6638381556546524
|
||||
299.098796635,40.77849337034291,29.4356698790049,1.8595302489,8,0.0,-3.8881483822973744,5.69414031234963,-0.20653641931227787,-0.22255990390967953,-0.20653101508489963,-0.22257395814120665,0.0002632981573869946,0.0002633040192970834,1,1,1.2757677978694841,1.2757729677413434
|
||||
299.403377976,40.77842920757582,29.435674793398185,1.8594619654,8,0.0,-3.473297206425162,-1.4311113205209014,-0.21406503013190234,-0.22482400647876785,-0.21405964223255528,-0.2248380309105097,0.0014829796141387845,0.0014829819265824965,1,1,0.41738085606006364,0.4173813696567063
|
||||
|
Binary file not shown.
|
After Width: | Height: | Size: 113 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 285 KiB |
@@ -0,0 +1,19 @@
|
||||
Fixed-stationary vs motion-capable ESKF
|
||||
========================================
|
||||
Common replay duration: 299.500 s
|
||||
GPS: 987 samples, mean rate 3.297 Hz
|
||||
IMU: 600 windows, mean rate 2.003 Hz, underlying samples 145684
|
||||
Timing: separate stationary captures replayed from t=0 (not hardware-synchronized)
|
||||
GPS update dimensions: 2-D horizontal (current level-2 firmware log has no height)
|
||||
ENU reference: lat=40.7784420947, lon=29.4357159383
|
||||
GPS max consecutive horizontal step: 29.842 m
|
||||
Raw GPS centered horizontal RMS/P95/max: 8.581 / 15.145 / 23.773 m
|
||||
Fixed model centered horizontal RMS/P95/max: 1.108 / 1.680 / 5.536 m
|
||||
Adaptive model centered horizontal RMS/P95/max: 1.108 / 1.680 / 5.536 m
|
||||
Fixed GPS accepted/rejected: 983/4
|
||||
Adaptive GPS accepted/rejected: 983/4
|
||||
IMU stationary detector true: 600/600 (100.00%)
|
||||
ZUPT updates fixed/adaptive: 600/598
|
||||
Final speed fixed/adaptive: 0.001128 / 0.001128 m/s
|
||||
Adaptive model uses a 3-window stationary decision; it does not assume zero velocity while motion is detected.
|
||||
No surveyed truth is available: scatter measures precision, not absolute position accuracy.
|
||||
@@ -0,0 +1,4 @@
|
||||
matplotlib>=3.8
|
||||
numpy>=1.26
|
||||
pillow>=10.0
|
||||
pyserial>=3.5
|
||||
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Capture a line-oriented bare-metal UART stream with host timestamps."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
import serial
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--port", default="/dev/ttyUSB2")
|
||||
parser.add_argument("--baud", type=int, default=115200)
|
||||
parser.add_argument("--duration", type=float, default=60.0)
|
||||
parser.add_argument("--output", type=Path, required=True)
|
||||
parser.add_argument(
|
||||
"--stop-text",
|
||||
help="stop early after a line containing this text (duration remains a limit)",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main() -> int:
|
||||
args = parse_args()
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
line_count = 0
|
||||
byte_count = 0
|
||||
start_wall_ns = time.time_ns()
|
||||
start_mono_ns = time.monotonic_ns()
|
||||
deadline_ns = start_mono_ns + int(args.duration * 1e9)
|
||||
|
||||
with serial.Serial(args.port, args.baud, timeout=0.1) as uart, args.output.open(
|
||||
"w", newline="", encoding="utf-8"
|
||||
) as stream:
|
||||
writer = csv.writer(stream)
|
||||
writer.writerow(["host_monotonic_s", "host_unix_s", "uart_line"])
|
||||
uart.reset_input_buffer()
|
||||
|
||||
while time.monotonic_ns() < deadline_ns:
|
||||
raw = uart.readline()
|
||||
if not raw:
|
||||
continue
|
||||
now_mono_ns = time.monotonic_ns()
|
||||
now_wall_ns = time.time_ns()
|
||||
byte_count += len(raw)
|
||||
line = raw.decode("utf-8", errors="replace").rstrip("\r\n")
|
||||
writer.writerow(
|
||||
[
|
||||
f"{(now_mono_ns - start_mono_ns) / 1e9:.9f}",
|
||||
f"{now_wall_ns / 1e9:.9f}",
|
||||
line,
|
||||
]
|
||||
)
|
||||
line_count += 1
|
||||
if args.stop_text and args.stop_text in line:
|
||||
break
|
||||
|
||||
elapsed_s = (time.monotonic_ns() - start_mono_ns) / 1e9
|
||||
print(
|
||||
f"captured lines={line_count} bytes={byte_count} "
|
||||
f"elapsed={elapsed_s:.3f}s output={args.output} "
|
||||
f"start_unix={start_wall_ns / 1e9:.6f}"
|
||||
)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Linearized same-input Monte Carlo comparison of legacy WLS and new FDE policy."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import math
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
|
||||
|
||||
CHI2_99 = {1: 6.634896601, 2: 9.210340372, 3: 11.34486673,
|
||||
4: 13.27670414, 5: 15.08627247}
|
||||
|
||||
|
||||
def design_matrix(count: int) -> tuple[np.ndarray, np.ndarray]:
|
||||
# Fixed, moderately realistic sky: azimuth degrees, elevation degrees.
|
||||
sky = np.array([
|
||||
[10.0, 72.0], [55.0, 28.0], [102.0, 46.0], [151.0, 19.0],
|
||||
[205.0, 61.0], [247.0, 34.0], [292.0, 23.0], [330.0, 52.0],
|
||||
[178.0, 38.0],
|
||||
])[:count]
|
||||
azimuth = np.radians(sky[:, 0])
|
||||
elevation = np.radians(sky[:, 1])
|
||||
los = np.column_stack((
|
||||
np.cos(elevation) * np.sin(azimuth),
|
||||
np.cos(elevation) * np.cos(azimuth),
|
||||
np.sin(elevation),
|
||||
))
|
||||
matrix = np.column_stack((-los, np.ones(count)))
|
||||
# Elevation-dependent standard deviation; low satellites carry less weight.
|
||||
sigma = 3.0 / np.maximum(np.sin(elevation), 0.20)
|
||||
return matrix, sigma
|
||||
|
||||
|
||||
def solve(matrix: np.ndarray, sigma: np.ndarray, observation: np.ndarray) -> tuple[np.ndarray, float, float, bool]:
|
||||
weight = 1.0 / np.square(sigma)
|
||||
normal = matrix.T @ (weight[:, None] * matrix)
|
||||
try:
|
||||
state = np.linalg.solve(normal, matrix.T @ (weight * observation))
|
||||
except np.linalg.LinAlgError:
|
||||
return np.full(4, np.nan), math.inf, math.inf, False
|
||||
residual = observation - matrix @ state
|
||||
chi2 = float(np.sum(weight * np.square(residual)))
|
||||
dof = len(observation) - 4
|
||||
threshold = CHI2_99.get(dof, 0.0)
|
||||
ratio = chi2 / threshold if threshold > 0.0 else math.inf
|
||||
return state, chi2, ratio, threshold > 0.0 and chi2 <= threshold
|
||||
|
||||
|
||||
def new_policy(matrix: np.ndarray, sigma: np.ndarray, observation: np.ndarray) -> tuple[np.ndarray, bool, bool]:
|
||||
full_state, _, full_ratio, full_pass = solve(matrix, sigma, observation)
|
||||
if full_pass or len(observation) < 7:
|
||||
return full_state, full_pass, False
|
||||
selected_state = full_state
|
||||
selected_ratio = full_ratio
|
||||
selected_pass = False
|
||||
fde_applied = False
|
||||
for excluded in range(len(observation)):
|
||||
keep = np.arange(len(observation)) != excluded
|
||||
state, _, ratio, passed = solve(matrix[keep], sigma[keep], observation[keep])
|
||||
if (passed and not selected_pass) or (passed == selected_pass and ratio < selected_ratio):
|
||||
selected_state = state
|
||||
selected_ratio = ratio
|
||||
selected_pass = passed
|
||||
fde_applied = True
|
||||
return selected_state, selected_pass, fde_applied
|
||||
|
||||
|
||||
def percentile(values: np.ndarray, percentage: float) -> float:
|
||||
return float(np.percentile(values, percentage))
|
||||
|
||||
|
||||
def scenario(rng: np.random.Generator, count: int, epochs: int, fault_m: float) -> dict[str, float | int]:
|
||||
matrix, sigma = design_matrix(count)
|
||||
old_horizontal = np.empty(epochs)
|
||||
new_horizontal = np.empty(epochs)
|
||||
delta = np.empty(epochs)
|
||||
valid = 0
|
||||
fde = 0
|
||||
improved = 0
|
||||
for epoch in range(epochs):
|
||||
observation = rng.normal(0.0, sigma)
|
||||
if fault_m != 0.0:
|
||||
observation[epoch % count] += fault_m
|
||||
old_state, _, _, _ = solve(matrix, sigma, observation)
|
||||
new_state, new_valid, fde_applied = new_policy(matrix, sigma, observation)
|
||||
old_horizontal[epoch] = np.linalg.norm(old_state[:2])
|
||||
new_horizontal[epoch] = np.linalg.norm(new_state[:2])
|
||||
delta[epoch] = np.linalg.norm(new_state[:3] - old_state[:3])
|
||||
valid += int(new_valid)
|
||||
fde += int(fde_applied)
|
||||
improved += int(new_horizontal[epoch] < old_horizontal[epoch])
|
||||
return {
|
||||
"satellites": count,
|
||||
"fault_m": fault_m,
|
||||
"epochs": epochs,
|
||||
"old_horizontal_mean_m": float(np.mean(old_horizontal)),
|
||||
"old_horizontal_p95_m": percentile(old_horizontal, 95.0),
|
||||
"new_horizontal_mean_m": float(np.mean(new_horizontal)),
|
||||
"new_horizontal_p95_m": percentile(new_horizontal, 95.0),
|
||||
"new_minus_old_mean_m": float(np.mean(new_horizontal - old_horizontal)),
|
||||
"solver_position_delta_mean_m": float(np.mean(delta)),
|
||||
"new_improved_rate_pct": 100.0 * improved / epochs,
|
||||
"new_valid_rate_pct": 100.0 * valid / epochs,
|
||||
"fde_rate_pct": 100.0 * fde / epochs,
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--epochs", type=int, default=20000)
|
||||
parser.add_argument("--seed", type=int, default=20260712)
|
||||
parser.add_argument("--fault-m", type=float, default=75.0)
|
||||
parser.add_argument("--output", type=Path, required=True)
|
||||
args = parser.parse_args()
|
||||
rng = np.random.default_rng(args.seed)
|
||||
rows = [
|
||||
scenario(rng, count, args.epochs, fault)
|
||||
for fault in (0.0, args.fault_m)
|
||||
for count in range(4, 10)
|
||||
]
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
with args.output.open("w", newline="", encoding="utf-8") as stream:
|
||||
writer = csv.DictWriter(stream, fieldnames=list(rows[0]))
|
||||
writer.writeheader()
|
||||
writer.writerows(rows)
|
||||
for row in rows:
|
||||
print(
|
||||
f"fault={row['fault_m']:>4.0f}m sats={row['satellites']} "
|
||||
f"old_mean={row['old_horizontal_mean_m']:.2f} "
|
||||
f"new_mean={row['new_horizontal_mean_m']:.2f} "
|
||||
f"delta={row['new_minus_old_mean_m']:+.2f} "
|
||||
f"improved={row['new_improved_rate_pct']:.1f}% "
|
||||
f"valid={row['new_valid_rate_pct']:.1f}% fde={row['fde_rate_pct']:.1f}%"
|
||||
)
|
||||
print(f"wrote {args.output}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,24 @@
|
||||
CC ?= cc
|
||||
CFLAGS ?= -std=c11 -O2 -Wall -Wextra -Wpedantic
|
||||
CFLAGS += -I../../gps_system/header
|
||||
LDLIBS ?= -lm
|
||||
|
||||
GPS_TIME_SOURCE := ../../gps_system/src/gps_time_anchor.c
|
||||
|
||||
.PHONY: all test benchmark clean
|
||||
|
||||
all: standalone_gps_integrity_test
|
||||
|
||||
standalone_gps_integrity_test: standalone_gps_integrity_test.c $(GPS_TIME_SOURCE)
|
||||
$(CC) $(CFLAGS) $^ -o $@ $(LDLIBS)
|
||||
|
||||
test: standalone_gps_integrity_test
|
||||
./standalone_gps_integrity_test
|
||||
|
||||
benchmark: standalone_gps_integrity_test
|
||||
./standalone_gps_integrity_test --bench-clean 100000
|
||||
./standalone_gps_integrity_test --bench-single 100000
|
||||
./standalone_gps_integrity_test --bench-double 100000
|
||||
|
||||
clean:
|
||||
rm -f standalone_gps_integrity_test standalone_gps_integrity_test_san standalone_gps_integrity_test_gprof gmon.out
|
||||
@@ -0,0 +1,864 @@
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "gps_time_anchor.h"
|
||||
|
||||
#define MAX_SATELLITES 9
|
||||
#define STATE_DIM 4
|
||||
#define PI 3.14159265358979323846
|
||||
|
||||
typedef struct {
|
||||
unsigned prn;
|
||||
double position_ecef_m[3];
|
||||
double pseudorange_m;
|
||||
double sigma_m;
|
||||
} measurement_t;
|
||||
|
||||
typedef struct {
|
||||
double state[STATE_DIM];
|
||||
double covariance_enu_m2[3][3];
|
||||
double hacc_m;
|
||||
double vacc_m;
|
||||
double residual_rms_m;
|
||||
double weighted_residual_rms_m;
|
||||
double chi_square;
|
||||
double chi_square_threshold;
|
||||
double chi_square_ratio;
|
||||
double quality_score;
|
||||
unsigned used_count;
|
||||
unsigned dof;
|
||||
uint32_t used_mask;
|
||||
uint32_t excluded_mask;
|
||||
bool residual_test_valid;
|
||||
bool chi_square_pass;
|
||||
bool fde_applied;
|
||||
bool solution_valid;
|
||||
} solution_t;
|
||||
|
||||
typedef enum {
|
||||
SOLVE_ABSOLUTE_WEIGHTS,
|
||||
SOLVE_NORMALIZED_WEIGHTS,
|
||||
SOLVE_UNIFORM_WEIGHTS
|
||||
} solve_weight_mode_t;
|
||||
|
||||
typedef struct {
|
||||
int week;
|
||||
double sec;
|
||||
} test_tow_t;
|
||||
|
||||
static int failures;
|
||||
static volatile double benchmark_sink;
|
||||
|
||||
#define CHECK(condition, message) do { \
|
||||
if (!(condition)) { \
|
||||
fprintf(stderr, "FAIL: %s\n", message); \
|
||||
failures++; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static double square(double x)
|
||||
{
|
||||
return x * x;
|
||||
}
|
||||
|
||||
static double test_tow_delta_sec(const test_tow_t* first, const test_tow_t* second)
|
||||
{
|
||||
double delta = (double)(first->week - second->week) * 604800.0 +
|
||||
first->sec - second->sec;
|
||||
if (delta > 302400.0) {
|
||||
delta -= 604800.0;
|
||||
} else if (delta < -302400.0) {
|
||||
delta += 604800.0;
|
||||
}
|
||||
return delta;
|
||||
}
|
||||
|
||||
static bool test_validate_tow(const test_tow_t tow[MAX_SATELLITES], unsigned count)
|
||||
{
|
||||
unsigned best_cluster = 0;
|
||||
for (unsigned candidate = 0; candidate < count; candidate++) {
|
||||
unsigned cluster = 0;
|
||||
for (unsigned row = 0; row < count; row++) {
|
||||
if (fabs(test_tow_delta_sec(&tow[row], &tow[candidate])) <= 0.001) {
|
||||
cluster++;
|
||||
}
|
||||
}
|
||||
if (cluster > best_cluster) {
|
||||
best_cluster = cluster;
|
||||
}
|
||||
}
|
||||
if (best_cluster <= count / 2u) {
|
||||
return false;
|
||||
}
|
||||
return best_cluster == count;
|
||||
}
|
||||
|
||||
static double vector_norm3(const double v[3])
|
||||
{
|
||||
return sqrt(square(v[0]) + square(v[1]) + square(v[2]));
|
||||
}
|
||||
|
||||
static double position_error_m(const solution_t* solution, const double truth[3])
|
||||
{
|
||||
double error[3] = {
|
||||
solution->state[0] - truth[0],
|
||||
solution->state[1] - truth[1],
|
||||
solution->state[2] - truth[2]
|
||||
};
|
||||
return vector_norm3(error);
|
||||
}
|
||||
|
||||
static bool inverse4(double input[STATE_DIM][STATE_DIM],
|
||||
double inverse[STATE_DIM][STATE_DIM])
|
||||
{
|
||||
double augmented[STATE_DIM][2 * STATE_DIM];
|
||||
double scale = 0.0;
|
||||
|
||||
for (unsigned row = 0; row < STATE_DIM; row++) {
|
||||
for (unsigned col = 0; col < STATE_DIM; col++) {
|
||||
augmented[row][col] = input[row][col];
|
||||
augmented[row][col + STATE_DIM] = (row == col) ? 1.0 : 0.0;
|
||||
if (fabs(input[row][col]) > scale) {
|
||||
scale = fabs(input[row][col]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!(scale > 0.0) || !isfinite(scale)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (unsigned pivot = 0; pivot < STATE_DIM; pivot++) {
|
||||
unsigned pivot_row = pivot;
|
||||
double pivot_magnitude = fabs(augmented[pivot][pivot]);
|
||||
for (unsigned row = pivot + 1; row < STATE_DIM; row++) {
|
||||
double magnitude = fabs(augmented[row][pivot]);
|
||||
if (magnitude > pivot_magnitude) {
|
||||
pivot_magnitude = magnitude;
|
||||
pivot_row = row;
|
||||
}
|
||||
}
|
||||
if (pivot_magnitude <= scale * DBL_EPSILON * 128.0) {
|
||||
return false;
|
||||
}
|
||||
if (pivot_row != pivot) {
|
||||
for (unsigned col = 0; col < 2 * STATE_DIM; col++) {
|
||||
double temporary = augmented[pivot][col];
|
||||
augmented[pivot][col] = augmented[pivot_row][col];
|
||||
augmented[pivot_row][col] = temporary;
|
||||
}
|
||||
}
|
||||
|
||||
double divisor = augmented[pivot][pivot];
|
||||
for (unsigned col = 0; col < 2 * STATE_DIM; col++) {
|
||||
augmented[pivot][col] /= divisor;
|
||||
}
|
||||
for (unsigned row = 0; row < STATE_DIM; row++) {
|
||||
if (row == pivot) {
|
||||
continue;
|
||||
}
|
||||
double factor = augmented[row][pivot];
|
||||
for (unsigned col = 0; col < 2 * STATE_DIM; col++) {
|
||||
augmented[row][col] -= factor * augmented[pivot][col];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned row = 0; row < STATE_DIM; row++) {
|
||||
for (unsigned col = 0; col < STATE_DIM; col++) {
|
||||
inverse[row][col] = augmented[row][col + STATE_DIM];
|
||||
if (!isfinite(inverse[row][col])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool solve_normal_equations(double normal[STATE_DIM][STATE_DIM],
|
||||
const double rhs[STATE_DIM],
|
||||
double update[STATE_DIM])
|
||||
{
|
||||
double inverse[STATE_DIM][STATE_DIM];
|
||||
if (!inverse4(normal, inverse)) {
|
||||
return false;
|
||||
}
|
||||
for (unsigned row = 0; row < STATE_DIM; row++) {
|
||||
update[row] = 0.0;
|
||||
for (unsigned col = 0; col < STATE_DIM; col++) {
|
||||
update[row] += inverse[row][col] * rhs[col];
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static double chi_square_threshold_99(unsigned dof)
|
||||
{
|
||||
static const double thresholds[] = {
|
||||
0.0,
|
||||
6.634896601,
|
||||
9.210340372,
|
||||
11.34486673,
|
||||
13.27670414,
|
||||
15.08627247
|
||||
};
|
||||
return (dof < (sizeof(thresholds) / sizeof(thresholds[0])))
|
||||
? thresholds[dof] : 0.0;
|
||||
}
|
||||
|
||||
static void geodetic_to_ecef(double latitude_rad, double longitude_rad,
|
||||
double height_m, double ecef_m[3])
|
||||
{
|
||||
const double semi_major_axis_m = 6378137.0;
|
||||
const double eccentricity_squared = 6.6943799901413165e-3;
|
||||
double sin_latitude = sin(latitude_rad);
|
||||
double cos_latitude = cos(latitude_rad);
|
||||
double prime_vertical_radius = semi_major_axis_m /
|
||||
sqrt(1.0 - eccentricity_squared * square(sin_latitude));
|
||||
|
||||
ecef_m[0] = (prime_vertical_radius + height_m) * cos_latitude * cos(longitude_rad);
|
||||
ecef_m[1] = (prime_vertical_radius + height_m) * cos_latitude * sin(longitude_rad);
|
||||
ecef_m[2] = (prime_vertical_radius * (1.0 - eccentricity_squared) + height_m) * sin_latitude;
|
||||
}
|
||||
|
||||
static void enu_axes(double latitude_rad, double longitude_rad, double axes[3][3])
|
||||
{
|
||||
double sin_latitude = sin(latitude_rad);
|
||||
double cos_latitude = cos(latitude_rad);
|
||||
double sin_longitude = sin(longitude_rad);
|
||||
double cos_longitude = cos(longitude_rad);
|
||||
|
||||
axes[0][0] = -sin_longitude;
|
||||
axes[0][1] = cos_longitude;
|
||||
axes[0][2] = 0.0;
|
||||
axes[1][0] = -sin_latitude * cos_longitude;
|
||||
axes[1][1] = -sin_latitude * sin_longitude;
|
||||
axes[1][2] = cos_latitude;
|
||||
axes[2][0] = cos_latitude * cos_longitude;
|
||||
axes[2][1] = cos_latitude * sin_longitude;
|
||||
axes[2][2] = sin_latitude;
|
||||
}
|
||||
|
||||
static void create_measurements(measurement_t measurements[MAX_SATELLITES],
|
||||
unsigned count,
|
||||
const double receiver_ecef_m[3],
|
||||
double latitude_rad,
|
||||
double longitude_rad,
|
||||
double receiver_clock_bias_m,
|
||||
const double noise_m[MAX_SATELLITES])
|
||||
{
|
||||
static const double azimuth_deg[MAX_SATELLITES] =
|
||||
{5.0, 52.0, 104.0, 158.0, 214.0, 267.0, 318.0, 74.0, 242.0};
|
||||
static const double elevation_deg[MAX_SATELLITES] =
|
||||
{72.0, 46.0, 31.0, 57.0, 26.0, 41.0, 12.0, 20.0, 35.0};
|
||||
double axes[3][3];
|
||||
enu_axes(latitude_rad, longitude_rad, axes);
|
||||
|
||||
for (unsigned index = 0; index < count; index++) {
|
||||
double azimuth = azimuth_deg[index] * PI / 180.0;
|
||||
double elevation = elevation_deg[index] * PI / 180.0;
|
||||
double los_enu[3] = {
|
||||
cos(elevation) * sin(azimuth),
|
||||
cos(elevation) * cos(azimuth),
|
||||
sin(elevation)
|
||||
};
|
||||
double los_ecef[3] = {0.0, 0.0, 0.0};
|
||||
for (unsigned component = 0; component < 3; component++) {
|
||||
for (unsigned enu = 0; enu < 3; enu++) {
|
||||
los_ecef[component] += axes[enu][component] * los_enu[enu];
|
||||
}
|
||||
}
|
||||
|
||||
double geometric_range_m = 20200000.0 + 170000.0 * index;
|
||||
measurements[index].prn = index + 1;
|
||||
for (unsigned component = 0; component < 3; component++) {
|
||||
measurements[index].position_ecef_m[component] =
|
||||
receiver_ecef_m[component] + geometric_range_m * los_ecef[component];
|
||||
}
|
||||
double elevation_sigma_m = 3.0 / sin(elevation);
|
||||
measurements[index].sigma_m = sqrt(square(2.4) + square(elevation_sigma_m));
|
||||
measurements[index].pseudorange_m = geometric_range_m +
|
||||
receiver_clock_bias_m + noise_m[index];
|
||||
}
|
||||
}
|
||||
|
||||
static bool solve_subset(const measurement_t measurements[MAX_SATELLITES],
|
||||
unsigned available_count,
|
||||
uint32_t used_mask,
|
||||
solve_weight_mode_t weight_mode,
|
||||
const double seed[STATE_DIM],
|
||||
double latitude_rad,
|
||||
double longitude_rad,
|
||||
solution_t* output)
|
||||
{
|
||||
memset(output, 0, sizeof(*output));
|
||||
output->used_mask = used_mask;
|
||||
output->excluded_mask = ((1u << available_count) - 1u) & ~used_mask;
|
||||
for (unsigned index = 0; index < available_count; index++) {
|
||||
if ((used_mask & (1u << index)) != 0u) {
|
||||
output->used_count++;
|
||||
}
|
||||
}
|
||||
if (output->used_count < STATE_DIM) {
|
||||
return false;
|
||||
}
|
||||
memcpy(output->state, seed, sizeof(output->state));
|
||||
|
||||
for (unsigned iteration = 0; iteration < 20; iteration++) {
|
||||
double normal[STATE_DIM][STATE_DIM] = {{0.0}};
|
||||
double rhs[STATE_DIM] = {0.0};
|
||||
double maximum_absolute_weight = 0.0;
|
||||
for (unsigned index = 0; index < available_count; index++) {
|
||||
if ((used_mask & (1u << index)) == 0u) {
|
||||
continue;
|
||||
}
|
||||
double absolute_weight = 1.0 / square(measurements[index].sigma_m);
|
||||
if (absolute_weight > maximum_absolute_weight) {
|
||||
maximum_absolute_weight = absolute_weight;
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned index = 0; index < available_count; index++) {
|
||||
if ((used_mask & (1u << index)) == 0u) {
|
||||
continue;
|
||||
}
|
||||
double receiver_to_satellite[3];
|
||||
for (unsigned component = 0; component < 3; component++) {
|
||||
receiver_to_satellite[component] =
|
||||
output->state[component] - measurements[index].position_ecef_m[component];
|
||||
}
|
||||
double geometric_range_m = vector_norm3(receiver_to_satellite);
|
||||
if (!(geometric_range_m > 1.0)) {
|
||||
return false;
|
||||
}
|
||||
double design_row[STATE_DIM] = {
|
||||
receiver_to_satellite[0] / geometric_range_m,
|
||||
receiver_to_satellite[1] / geometric_range_m,
|
||||
receiver_to_satellite[2] / geometric_range_m,
|
||||
1.0
|
||||
};
|
||||
double residual_m = measurements[index].pseudorange_m -
|
||||
geometric_range_m - output->state[3];
|
||||
double absolute_weight = 1.0 / square(measurements[index].sigma_m);
|
||||
double solve_weight = absolute_weight;
|
||||
if (weight_mode == SOLVE_NORMALIZED_WEIGHTS) {
|
||||
solve_weight /= maximum_absolute_weight;
|
||||
} else if (weight_mode == SOLVE_UNIFORM_WEIGHTS) {
|
||||
solve_weight = 1.0;
|
||||
}
|
||||
for (unsigned row = 0; row < STATE_DIM; row++) {
|
||||
rhs[row] += solve_weight * design_row[row] * residual_m;
|
||||
for (unsigned col = 0; col < STATE_DIM; col++) {
|
||||
normal[row][col] += solve_weight * design_row[row] * design_row[col];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double update[STATE_DIM];
|
||||
if (!solve_normal_equations(normal, rhs, update)) {
|
||||
return false;
|
||||
}
|
||||
for (unsigned index = 0; index < STATE_DIM; index++) {
|
||||
output->state[index] += update[index];
|
||||
}
|
||||
double position_update[3] = {update[0], update[1], update[2]};
|
||||
if (vector_norm3(position_update) < 1.0e-5 && fabs(update[3]) < 1.0e-5) {
|
||||
break;
|
||||
}
|
||||
if (iteration == 19) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
double absolute_normal[STATE_DIM][STATE_DIM] = {{0.0}};
|
||||
double residual_square_sum = 0.0;
|
||||
double absolute_weight_sum = 0.0;
|
||||
output->chi_square = 0.0;
|
||||
for (unsigned index = 0; index < available_count; index++) {
|
||||
if ((used_mask & (1u << index)) == 0u) {
|
||||
continue;
|
||||
}
|
||||
double receiver_to_satellite[3];
|
||||
for (unsigned component = 0; component < 3; component++) {
|
||||
receiver_to_satellite[component] =
|
||||
output->state[component] - measurements[index].position_ecef_m[component];
|
||||
}
|
||||
double geometric_range_m = vector_norm3(receiver_to_satellite);
|
||||
double design_row[STATE_DIM] = {
|
||||
receiver_to_satellite[0] / geometric_range_m,
|
||||
receiver_to_satellite[1] / geometric_range_m,
|
||||
receiver_to_satellite[2] / geometric_range_m,
|
||||
1.0
|
||||
};
|
||||
double residual_m = measurements[index].pseudorange_m -
|
||||
geometric_range_m - output->state[3];
|
||||
double absolute_weight = 1.0 / square(measurements[index].sigma_m);
|
||||
residual_square_sum += square(residual_m);
|
||||
output->chi_square += absolute_weight * square(residual_m);
|
||||
absolute_weight_sum += absolute_weight;
|
||||
for (unsigned row = 0; row < STATE_DIM; row++) {
|
||||
for (unsigned col = 0; col < STATE_DIM; col++) {
|
||||
absolute_normal[row][col] +=
|
||||
absolute_weight * design_row[row] * design_row[col];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
output->residual_rms_m = sqrt(residual_square_sum / output->used_count);
|
||||
output->weighted_residual_rms_m = sqrt(output->chi_square / absolute_weight_sum);
|
||||
output->dof = output->used_count - STATE_DIM;
|
||||
output->chi_square_threshold = chi_square_threshold_99(output->dof);
|
||||
output->residual_test_valid = output->dof > 0 && output->chi_square_threshold > 0.0;
|
||||
if (output->residual_test_valid) {
|
||||
output->chi_square_ratio = output->chi_square / output->chi_square_threshold;
|
||||
output->quality_score = 100.0 / (1.0 + output->chi_square_ratio);
|
||||
output->chi_square_pass = output->chi_square <= output->chi_square_threshold;
|
||||
} else {
|
||||
output->chi_square_ratio = INFINITY;
|
||||
output->quality_score = 0.0;
|
||||
}
|
||||
output->solution_valid = output->residual_test_valid && output->chi_square_pass;
|
||||
|
||||
double covariance_ecef[STATE_DIM][STATE_DIM];
|
||||
if (!inverse4(absolute_normal, covariance_ecef)) {
|
||||
return false;
|
||||
}
|
||||
double axes[3][3];
|
||||
enu_axes(latitude_rad, longitude_rad, axes);
|
||||
for (unsigned enu_row = 0; enu_row < 3; enu_row++) {
|
||||
for (unsigned enu_col = 0; enu_col < 3; enu_col++) {
|
||||
double covariance = 0.0;
|
||||
for (unsigned ecef_row = 0; ecef_row < 3; ecef_row++) {
|
||||
for (unsigned ecef_col = 0; ecef_col < 3; ecef_col++) {
|
||||
covariance += axes[enu_row][ecef_row] *
|
||||
covariance_ecef[ecef_row][ecef_col] *
|
||||
axes[enu_col][ecef_col];
|
||||
}
|
||||
}
|
||||
output->covariance_enu_m2[enu_row][enu_col] = covariance;
|
||||
}
|
||||
}
|
||||
output->hacc_m = sqrt(output->covariance_enu_m2[0][0] +
|
||||
output->covariance_enu_m2[1][1]);
|
||||
output->vacc_m = sqrt(output->covariance_enu_m2[2][2]);
|
||||
return isfinite(output->hacc_m) && isfinite(output->vacc_m);
|
||||
}
|
||||
|
||||
static bool solve_with_fde_minimum(const measurement_t measurements[MAX_SATELLITES],
|
||||
unsigned count,
|
||||
unsigned minimum_available_for_fde,
|
||||
const double seed[STATE_DIM],
|
||||
double latitude_rad,
|
||||
double longitude_rad,
|
||||
solution_t* selected,
|
||||
solution_t* full_solution)
|
||||
{
|
||||
uint32_t full_mask = (1u << count) - 1u;
|
||||
if (!solve_subset(measurements, count, full_mask, SOLVE_NORMALIZED_WEIGHTS,
|
||||
seed, latitude_rad, longitude_rad, full_solution)) {
|
||||
return false;
|
||||
}
|
||||
*selected = *full_solution;
|
||||
if (full_solution->chi_square_pass || count < minimum_available_for_fde) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool passing_candidate_found = false;
|
||||
for (unsigned excluded = 0; excluded < count; excluded++) {
|
||||
solution_t candidate;
|
||||
uint32_t candidate_mask = full_mask & ~(1u << excluded);
|
||||
if (!solve_subset(measurements, count, candidate_mask, SOLVE_NORMALIZED_WEIGHTS,
|
||||
full_solution->state, latitude_rad, longitude_rad, &candidate)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
bool choose = false;
|
||||
if (candidate.chi_square_pass) {
|
||||
choose = !passing_candidate_found ||
|
||||
candidate.chi_square_ratio < selected->chi_square_ratio;
|
||||
} else if (!passing_candidate_found &&
|
||||
candidate.chi_square_ratio < selected->chi_square_ratio) {
|
||||
choose = true;
|
||||
}
|
||||
if (choose) {
|
||||
*selected = candidate;
|
||||
selected->fde_applied = true;
|
||||
}
|
||||
if (candidate.chi_square_pass) {
|
||||
passing_candidate_found = true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool solve_with_fde(const measurement_t measurements[MAX_SATELLITES],
|
||||
unsigned count,
|
||||
const double seed[STATE_DIM],
|
||||
double latitude_rad,
|
||||
double longitude_rad,
|
||||
solution_t* selected,
|
||||
solution_t* full_solution)
|
||||
{
|
||||
return solve_with_fde_minimum(measurements, count, 7u, seed,
|
||||
latitude_rad, longitude_rad,
|
||||
selected, full_solution);
|
||||
}
|
||||
|
||||
static void print_solution(const char* label,
|
||||
const solution_t* solution,
|
||||
const double receiver_truth[3])
|
||||
{
|
||||
printf("%-24s used=%u excluded=0x%03x error=%7.2f m residual=%7.2f m "
|
||||
"chi2=%8.2f dof=%u ratio=%6.2f quality=%6.1f hAcc=%5.2f vAcc=%5.2f "
|
||||
"pass=%u valid=%u\n",
|
||||
label,
|
||||
solution->used_count,
|
||||
solution->excluded_mask,
|
||||
position_error_m(solution, receiver_truth),
|
||||
solution->residual_rms_m,
|
||||
solution->chi_square,
|
||||
solution->dof,
|
||||
solution->chi_square_ratio,
|
||||
solution->quality_score,
|
||||
solution->hacc_m,
|
||||
solution->vacc_m,
|
||||
solution->chi_square_pass,
|
||||
solution->solution_valid);
|
||||
}
|
||||
|
||||
static double monotonic_seconds(void)
|
||||
{
|
||||
struct timespec now;
|
||||
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||
return (double)now.tv_sec + (double)now.tv_nsec * 1.0e-9;
|
||||
}
|
||||
|
||||
static int run_benchmark(const char* scenario,
|
||||
unsigned iterations,
|
||||
const measurement_t clean[MAX_SATELLITES],
|
||||
unsigned satellite_count,
|
||||
const double seed[STATE_DIM],
|
||||
double latitude_rad,
|
||||
double longitude_rad)
|
||||
{
|
||||
measurement_t measurements[MAX_SATELLITES];
|
||||
memcpy(measurements, clean, sizeof(measurements));
|
||||
if (strcmp(scenario, "clean") == 0) {
|
||||
/* No injected fault: one WLS plus integrity/covariance work. */
|
||||
} else if (strcmp(scenario, "single") == 0) {
|
||||
measurements[2].pseudorange_m += 100.0;
|
||||
} else if (strcmp(scenario, "double") == 0) {
|
||||
measurements[2].pseudorange_m += 100.0;
|
||||
measurements[5].pseudorange_m += 50.0;
|
||||
} else {
|
||||
fprintf(stderr, "unknown benchmark scenario: %s\n", scenario);
|
||||
return 2;
|
||||
}
|
||||
|
||||
solution_t selected;
|
||||
solution_t full;
|
||||
for (unsigned warmup = 0; warmup < 1000; warmup++) {
|
||||
if (!solve_with_fde(measurements, satellite_count, seed,
|
||||
latitude_rad, longitude_rad, &selected, &full)) {
|
||||
return 3;
|
||||
}
|
||||
benchmark_sink += selected.quality_score * 1.0e-12;
|
||||
}
|
||||
|
||||
double start = monotonic_seconds();
|
||||
for (unsigned iteration = 0; iteration < iterations; iteration++) {
|
||||
/* Prevent whole-loop constant folding while keeping the scenario's
|
||||
* integrity classification unchanged. */
|
||||
measurements[0].pseudorange_m += (iteration & 1u) ? 1.0e-3 : -1.0e-3;
|
||||
if (!solve_with_fde(measurements, satellite_count, seed,
|
||||
latitude_rad, longitude_rad, &selected, &full)) {
|
||||
return 3;
|
||||
}
|
||||
benchmark_sink += selected.quality_score * 1.0e-12;
|
||||
}
|
||||
double elapsed = monotonic_seconds() - start;
|
||||
double nanoseconds_per_solution = elapsed * 1.0e9 / (double)iterations;
|
||||
printf("benchmark scenario=%s iterations=%u elapsed=%.6f s "
|
||||
"per_nav=%.1f ns (%.3f us) cpu@1Hz=%.6f%% cpu@10Hz=%.6f%% sink=%.9f\n",
|
||||
scenario, iterations, elapsed, nanoseconds_per_solution,
|
||||
nanoseconds_per_solution / 1000.0,
|
||||
nanoseconds_per_solution / 1.0e7,
|
||||
nanoseconds_per_solution / 1.0e6,
|
||||
benchmark_sink);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
const unsigned satellite_count = 7;
|
||||
const double latitude_rad = 39.925 * PI / 180.0;
|
||||
const double longitude_rad = 32.837 * PI / 180.0;
|
||||
const double receiver_height_m = 890.0;
|
||||
const double clock_bias_m = 74000.0;
|
||||
double receiver_truth[3];
|
||||
geodetic_to_ecef(latitude_rad, longitude_rad, receiver_height_m, receiver_truth);
|
||||
double seed[STATE_DIM] = {
|
||||
receiver_truth[0] + 120.0,
|
||||
receiver_truth[1] - 90.0,
|
||||
receiver_truth[2] + 60.0,
|
||||
clock_bias_m - 200.0
|
||||
};
|
||||
const double clean_noise[MAX_SATELLITES] =
|
||||
{1.2, -1.8, 0.6, 2.0, -1.0, 1.5, -2.2, 0.0, 0.0};
|
||||
measurement_t clean[MAX_SATELLITES];
|
||||
create_measurements(clean, satellite_count, receiver_truth,
|
||||
latitude_rad, longitude_rad, clock_bias_m, clean_noise);
|
||||
|
||||
if (argc >= 2 && strncmp(argv[1], "--bench-", 8) == 0) {
|
||||
unsigned iterations = (argc >= 3) ? (unsigned)strtoul(argv[2], NULL, 10) : 100000u;
|
||||
if (iterations == 0u) {
|
||||
iterations = 1u;
|
||||
}
|
||||
return run_benchmark(argv[1] + 8, iterations, clean, satellite_count,
|
||||
seed, latitude_rad, longitude_rad);
|
||||
}
|
||||
|
||||
puts("Synthetic standalone GPS integrity/FDE comparison");
|
||||
puts("quality = 100/(1 + chi_square/threshold); 50 is the 99% reject boundary\n");
|
||||
|
||||
const double receiver_samples_per_second = 16368000.0;
|
||||
int anchored_week = 0;
|
||||
double anchored_tow = 0.0;
|
||||
double anchor_age = 0.0;
|
||||
CHECK(gps_time_from_sample_anchor(2300, 46386.0,
|
||||
100000000u, 99999999.75,
|
||||
100000000u, 99999999.75,
|
||||
receiver_samples_per_second, 12.0,
|
||||
&anchored_week, &anchored_tow, &anchor_age) &&
|
||||
anchored_week == 2300 && fabs(anchored_tow - 46386.0) < 1.0e-9,
|
||||
"simultaneous HOW/nav-solve event must have zero elapsed time");
|
||||
CHECK(gps_time_from_sample_anchor(2300, 46386.0,
|
||||
100000000u, 99999999.75,
|
||||
103273600u, 103273599.75,
|
||||
receiver_samples_per_second, 12.0,
|
||||
&anchored_week, &anchored_tow, &anchor_age),
|
||||
"200 ms sample-anchor conversion should succeed");
|
||||
CHECK(anchored_week == 2300 && fabs(anchored_tow - 46386.2) < 1.0e-9,
|
||||
"200 ms event must be derived from receiver samples, not NAV timer ownership");
|
||||
|
||||
/* A channel enabled later receives a newer absolute HOW/sample anchor.
|
||||
* Both channels must still calculate the same time for a common epoch. */
|
||||
int late_week = 0;
|
||||
double late_tow = 0.0;
|
||||
CHECK(gps_time_from_sample_anchor(2300, 46392.0,
|
||||
198208000u, 198207999.5,
|
||||
214576000u, 214575999.5,
|
||||
receiver_samples_per_second, 12.0,
|
||||
&late_week, &late_tow, NULL),
|
||||
"late-enable channel anchor conversion should succeed");
|
||||
int early_week = 0;
|
||||
double early_tow = 0.0;
|
||||
CHECK(gps_time_from_sample_anchor(2300, 46386.0,
|
||||
100000000u, 99999999.5,
|
||||
214576000u, 214575999.5,
|
||||
receiver_samples_per_second, 12.0,
|
||||
&early_week, &early_tow, NULL),
|
||||
"early channel anchor conversion should succeed");
|
||||
CHECK(early_week == late_week && fabs(early_tow - late_tow) < 1.0e-9,
|
||||
"late-enable and early channels must agree at a common receiver sample");
|
||||
|
||||
CHECK(gps_time_from_sample_anchor(2300, 100.0,
|
||||
500000000u, 499999999.75,
|
||||
549104000u, 549103999.75,
|
||||
receiver_samples_per_second, 12.0,
|
||||
&anchored_week, &anchored_tow, &anchor_age) &&
|
||||
fabs(anchored_tow - 103.0) < 1.0e-9,
|
||||
"coalesced/missed NAV events must not lose elapsed GPS time");
|
||||
|
||||
uint32_t wrap_anchor = UINT32_MAX - 8183999u;
|
||||
uint32_t wrap_event = wrap_anchor + 16368000u;
|
||||
CHECK(gps_time_from_sample_anchor(2300, 200.0,
|
||||
wrap_anchor, (double)wrap_anchor - 0.25,
|
||||
wrap_event, (double)wrap_event - 0.25,
|
||||
receiver_samples_per_second, 12.0,
|
||||
&anchored_week, &anchored_tow, NULL) &&
|
||||
fabs(anchored_tow - 201.0) < 1.0e-9,
|
||||
"32-bit ABS_SAMPLE rollover must unwrap correctly");
|
||||
|
||||
CHECK(gps_time_from_sample_anchor(2300, 604794.0,
|
||||
700000000u, 699999999.5,
|
||||
814576000u, 814575999.5,
|
||||
receiver_samples_per_second, 12.0,
|
||||
&anchored_week, &anchored_tow, NULL) &&
|
||||
anchored_week == 2301 && fabs(anchored_tow - 1.0) < 1.0e-9,
|
||||
"GPS week rollover must increment the anchor week");
|
||||
CHECK(gps_time_resolve_how_week(true, 2300, 604794.0, 2300, 0.0) == 2301,
|
||||
"HOW seconds-of-week rollover must resolve to the next week");
|
||||
CHECK(!gps_time_from_sample_anchor(2300, 100.0,
|
||||
100000000u, 99999999.5,
|
||||
312784001u, 312784000.5,
|
||||
receiver_samples_per_second, 12.0,
|
||||
&anchored_week, &anchored_tow, NULL),
|
||||
"stale HOW anchor must be rejected");
|
||||
|
||||
test_tow_t mismatched_tow[MAX_SATELLITES] = {
|
||||
{2300, 46386.8}, {2300, 46386.8}, {2300, 46386.8},
|
||||
{2300, 46386.8}, {2300, 46386.8}, {2300, 46386.6},
|
||||
{2300, 46386.8}
|
||||
};
|
||||
CHECK(!test_validate_tow(mismatched_tow, 7u),
|
||||
"200 ms TOW mismatch must reject instead of copying the majority TOW");
|
||||
test_tow_t coherent_tow[MAX_SATELLITES] = {
|
||||
{2300, 46386.8}, {2300, 46386.8}, {2300, 46386.8},
|
||||
{2300, 46386.8}, {2300, 46386.8}, {2300, 46386.8},
|
||||
{2300, 46386.8}
|
||||
};
|
||||
CHECK(test_validate_tow(coherent_tow, 7u),
|
||||
"fully coherent TOW snapshot should pass");
|
||||
test_tow_t ambiguous_tow[MAX_SATELLITES] = {
|
||||
{2300, 100.0}, {2300, 100.0}, {2300, 101.0}, {2300, 101.0}
|
||||
};
|
||||
CHECK(!test_validate_tow(ambiguous_tow, 4u),
|
||||
"two-versus-two TOW split must reject the navigation epoch");
|
||||
test_tow_t excessive_tow[MAX_SATELLITES] = {
|
||||
{2300, 100.0}, {2300, 100.0}, {2300, 100.0}, {2300, 96.0}
|
||||
};
|
||||
CHECK(!test_validate_tow(excessive_tow, 4u),
|
||||
"large TOW disagreement must not be silently corrected");
|
||||
|
||||
solution_t absolute_solution;
|
||||
solution_t normalized_solution;
|
||||
uint32_t full_mask = (1u << satellite_count) - 1u;
|
||||
CHECK(solve_subset(clean, satellite_count, full_mask, SOLVE_ABSOLUTE_WEIGHTS,
|
||||
seed, latitude_rad, longitude_rad, &absolute_solution),
|
||||
"absolute-weight clean solve");
|
||||
CHECK(solve_subset(clean, satellite_count, full_mask, SOLVE_NORMALIZED_WEIGHTS,
|
||||
seed, latitude_rad, longitude_rad, &normalized_solution),
|
||||
"normalized-weight clean solve");
|
||||
print_solution("clean absolute", &absolute_solution, receiver_truth);
|
||||
print_solution("clean normalized", &normalized_solution, receiver_truth);
|
||||
double normalization_state_difference[3] = {
|
||||
absolute_solution.state[0] - normalized_solution.state[0],
|
||||
absolute_solution.state[1] - normalized_solution.state[1],
|
||||
absolute_solution.state[2] - normalized_solution.state[2]
|
||||
};
|
||||
CHECK(vector_norm3(normalization_state_difference) < 1.0e-5,
|
||||
"common weight normalization must not change WLS position");
|
||||
CHECK(normalized_solution.chi_square_pass, "clean epoch should pass chi-square");
|
||||
|
||||
measurement_t single_fault[MAX_SATELLITES];
|
||||
memcpy(single_fault, clean, sizeof(single_fault));
|
||||
single_fault[2].pseudorange_m += 100.0;
|
||||
solution_t single_full;
|
||||
solution_t single_selected;
|
||||
CHECK(solve_with_fde(single_fault, satellite_count, seed, latitude_rad, longitude_rad,
|
||||
&single_selected, &single_full), "single-fault FDE solve");
|
||||
print_solution("single fault: full", &single_full, receiver_truth);
|
||||
print_solution("single fault: selected", &single_selected, receiver_truth);
|
||||
CHECK(!single_full.chi_square_pass, "100 m fault should fail the global test");
|
||||
CHECK(single_selected.chi_square_pass, "leave-one-out should recover single fault");
|
||||
CHECK(single_selected.excluded_mask == (1u << 2), "FDE should exclude PRN 3 row");
|
||||
CHECK(position_error_m(&single_selected, receiver_truth) <
|
||||
position_error_m(&single_full, receiver_truth),
|
||||
"single-fault FDE should improve position");
|
||||
|
||||
/* With six available satellites, exclusion leaves five measurements and
|
||||
* only one residual DOF. This deterministic nominal-noise epoch is a
|
||||
* regression for the large exclusion-switch jumps seen on hardware. */
|
||||
const unsigned six_satellite_count = 6u;
|
||||
const double ambiguous_six_noise[MAX_SATELLITES] =
|
||||
{6.604, -11.586, 10.801, -5.068, 4.625, -22.908, 0.0, 0.0, 0.0};
|
||||
measurement_t ambiguous_six[MAX_SATELLITES];
|
||||
create_measurements(ambiguous_six, six_satellite_count, receiver_truth,
|
||||
latitude_rad, longitude_rad, clock_bias_m,
|
||||
ambiguous_six_noise);
|
||||
solution_t unsafe_six_selected;
|
||||
solution_t unsafe_six_full;
|
||||
solution_t guarded_six_selected;
|
||||
solution_t guarded_six_full;
|
||||
CHECK(solve_with_fde_minimum(ambiguous_six, six_satellite_count, 6u, seed,
|
||||
latitude_rad, longitude_rad,
|
||||
&unsafe_six_selected, &unsafe_six_full),
|
||||
"six-satellite legacy leave-one-out regression solve");
|
||||
CHECK(solve_with_fde(ambiguous_six, six_satellite_count, seed,
|
||||
latitude_rad, longitude_rad,
|
||||
&guarded_six_selected, &guarded_six_full),
|
||||
"six-satellite guarded FDE solve");
|
||||
print_solution("six sat: full", &unsafe_six_full, receiver_truth);
|
||||
print_solution("six sat: unsafe FDE", &unsafe_six_selected, receiver_truth);
|
||||
print_solution("six sat: guarded", &guarded_six_selected, receiver_truth);
|
||||
CHECK(!unsafe_six_full.chi_square_pass,
|
||||
"six-satellite regression epoch should fail the full global test");
|
||||
CHECK(unsafe_six_selected.fde_applied && unsafe_six_selected.chi_square_pass,
|
||||
"unsafe six-satellite leave-one-out should demonstrate a false isolation");
|
||||
CHECK(position_error_m(&unsafe_six_selected, receiver_truth) >
|
||||
position_error_m(&unsafe_six_full, receiver_truth) + 50.0,
|
||||
"unsafe six-satellite FDE should demonstrate the observed position regression");
|
||||
CHECK(!guarded_six_selected.fde_applied,
|
||||
"six-satellite solution must not replace full WLS with a one-DOF subset");
|
||||
CHECK(!guarded_six_selected.solution_valid,
|
||||
"failed six-satellite full solution must remain explicitly invalid");
|
||||
CHECK(memcmp(guarded_six_selected.state, guarded_six_full.state,
|
||||
sizeof(guarded_six_selected.state)) == 0,
|
||||
"guarded six-satellite output must retain the legacy full-WLS position");
|
||||
|
||||
measurement_t double_fault[MAX_SATELLITES];
|
||||
memcpy(double_fault, clean, sizeof(double_fault));
|
||||
double_fault[2].pseudorange_m += 100.0;
|
||||
double_fault[5].pseudorange_m += 50.0;
|
||||
solution_t double_full;
|
||||
solution_t double_selected;
|
||||
CHECK(solve_with_fde(double_fault, satellite_count, seed, latitude_rad, longitude_rad,
|
||||
&double_selected, &double_full), "double-fault best-effort solve");
|
||||
print_solution("two faults: full", &double_full, receiver_truth);
|
||||
print_solution("two faults: best effort", &double_selected, receiver_truth);
|
||||
CHECK(!double_full.chi_square_pass, "two-fault full solution should fail");
|
||||
CHECK(!double_selected.chi_square_pass,
|
||||
"one exclusion must not claim integrity with a remaining fault");
|
||||
CHECK(double_selected.chi_square_ratio < double_full.chi_square_ratio,
|
||||
"best-effort candidate should retain a measurable improvement");
|
||||
CHECK(position_error_m(&double_selected, receiver_truth) <
|
||||
position_error_m(&double_full, receiver_truth),
|
||||
"chosen synthetic best-effort case should improve position without passing integrity");
|
||||
CHECK(!double_selected.solution_valid,
|
||||
"improved but still inconsistent solution must remain operationally invalid");
|
||||
|
||||
double trusted_state[STATE_DIM];
|
||||
memcpy(trusted_state, normalized_solution.state, sizeof(trusted_state));
|
||||
if (double_selected.solution_valid) {
|
||||
memcpy(trusted_state, double_selected.state, sizeof(trusted_state));
|
||||
}
|
||||
CHECK(memcmp(trusted_state, normalized_solution.state, sizeof(trusted_state)) == 0,
|
||||
"invalid best-effort solution must not update trusted last_solution/PPS state");
|
||||
|
||||
measurement_t low_elevation_fault[MAX_SATELLITES];
|
||||
memcpy(low_elevation_fault, clean, sizeof(low_elevation_fault));
|
||||
low_elevation_fault[6].pseudorange_m += 100.0;
|
||||
solution_t weighted_low_elevation;
|
||||
solution_t uniform_low_elevation;
|
||||
CHECK(solve_subset(low_elevation_fault, satellite_count, full_mask,
|
||||
SOLVE_NORMALIZED_WEIGHTS, seed, latitude_rad, longitude_rad,
|
||||
&weighted_low_elevation), "weighted low-elevation solve");
|
||||
CHECK(solve_subset(low_elevation_fault, satellite_count, full_mask,
|
||||
SOLVE_UNIFORM_WEIGHTS, seed, latitude_rad, longitude_rad,
|
||||
&uniform_low_elevation), "uniform low-elevation solve");
|
||||
print_solution("low-el fault: weighted", &weighted_low_elevation, receiver_truth);
|
||||
print_solution("low-el fault: uniform", &uniform_low_elevation, receiver_truth);
|
||||
CHECK(position_error_m(&weighted_low_elevation, receiver_truth) <
|
||||
position_error_m(&uniform_low_elevation, receiver_truth),
|
||||
"elevation weighting should reduce a low-elevation fault's position effect");
|
||||
|
||||
CHECK(normalized_solution.covariance_enu_m2[0][0] > 0.0 &&
|
||||
normalized_solution.covariance_enu_m2[1][1] > 0.0 &&
|
||||
normalized_solution.covariance_enu_m2[2][2] > 0.0,
|
||||
"ENU covariance diagonal must be positive");
|
||||
|
||||
if (failures == 0) {
|
||||
puts("\nPASS: all synthetic integrity checks passed");
|
||||
return 0;
|
||||
}
|
||||
fprintf(stderr, "\n%d synthetic integrity check(s) failed\n", failures);
|
||||
return 1;
|
||||
}
|
||||
@@ -1,9 +1,15 @@
|
||||
TARGET := gps_system
|
||||
|
||||
# The current Genesys2 Rocket/fabric domain that clocks the UART is 50 MHz.
|
||||
# Keep the requested 115200 baud physical rather than producing 57600 baud
|
||||
# with the common 100 MHz fallback divider.
|
||||
BSP_UART_CLOCK_HZ ?= 50000000
|
||||
|
||||
APP_SRCS := \
|
||||
gps_test.c \
|
||||
src/gps_ip.c \
|
||||
src/gps_interrupt_handlers.c \
|
||||
src/gps_time_anchor.c \
|
||||
src/gps_pps.c \
|
||||
src/linked_list.c \
|
||||
src/NavEquations.c \
|
||||
@@ -17,3 +23,7 @@ LDLIBS += -lm
|
||||
ifeq ($(GPS_DEBUG),1)
|
||||
CFLAGS += -DDEBUG -DGPS_DEBUG_LEVEL=$(GPS_DEBUG_LEVEL)
|
||||
endif
|
||||
|
||||
ifeq ($(GPS_NAV_DIAGNOSTICS),1)
|
||||
CFLAGS += -DGPS_NAV_JUMP_DIAGNOSTICS=1
|
||||
endif
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
int main()
|
||||
{
|
||||
|
||||
gps_startup_initialization(10u);
|
||||
gps_startup_initialization(15);
|
||||
|
||||
acq_start_loop();
|
||||
|
||||
|
||||
@@ -5,6 +5,56 @@
|
||||
#include "gps_ip_defines.h"
|
||||
#include "matrixLib.h"
|
||||
|
||||
typedef struct {
|
||||
double ecef_m[3];
|
||||
double clock_bias_m;
|
||||
double latitude_deg;
|
||||
double longitude_deg;
|
||||
double height_m;
|
||||
double covariance_enu_m2[3][3];
|
||||
double hacc_m;
|
||||
double vacc_m;
|
||||
double gdop;
|
||||
double pdop;
|
||||
double hdop;
|
||||
double vdop;
|
||||
double tdop;
|
||||
double residual_rms_m;
|
||||
double max_abs_residual_m;
|
||||
double postfit_residual_m[GPS_TRCK_IP_COUNT];
|
||||
double elevation_deg[GPS_TRCK_IP_COUNT];
|
||||
double measurement_sigma_m[GPS_TRCK_IP_COUNT];
|
||||
double full_postfit_residual_m[GPS_TRCK_IP_COUNT];
|
||||
double full_elevation_deg[GPS_TRCK_IP_COUNT];
|
||||
double full_measurement_sigma_m[GPS_TRCK_IP_COUNT];
|
||||
double weighted_residual_rms_m;
|
||||
double weighted_residual_sum;
|
||||
double chi_square_threshold;
|
||||
double chi_square_ratio;
|
||||
double full_chi_square_ratio;
|
||||
double postfit_position_correction_m;
|
||||
double postfit_clock_correction_m;
|
||||
double full_postfit_position_correction_m;
|
||||
double full_postfit_clock_correction_m;
|
||||
double quality_score;
|
||||
unsigned int available_satellite_count;
|
||||
unsigned int used_satellite_count;
|
||||
unsigned int degrees_of_freedom;
|
||||
uint32_t used_row_mask;
|
||||
uint32_t excluded_row_mask;
|
||||
uint64_t candidate_cycles;
|
||||
uint64_t full_solution_cycles;
|
||||
uint64_t fde_cycles;
|
||||
uint64_t total_wls_cycles;
|
||||
unsigned int iteration_count;
|
||||
unsigned int fde_trial_count;
|
||||
bool candidate_valid;
|
||||
bool residual_test_valid;
|
||||
bool chi_square_pass;
|
||||
bool fde_applied;
|
||||
bool solution_valid;
|
||||
} gps_nav_solution_t;
|
||||
|
||||
void satpos(gps_ephemeris_t* eph, double* pos, double* vel, double* clk, double* clockCorr);
|
||||
void computeRange(double* psTVLTime, unsigned char sat_no, range_t* rho, gps_ephemeris_t* eph, ionoutc_t* ionoutc, double* xyz, t_temp_pos* tempPos, double* clockCorr, mat_type *satellitePositions, mat_type * velocities);
|
||||
double check_t(long double tkl);
|
||||
@@ -15,7 +65,7 @@
|
||||
mat_type * az, mat_type * el,
|
||||
const unsigned char* ura_indices,
|
||||
const ionoutc_t* ionoutc, double gps_tow,
|
||||
double solution_out[4]); // x/y/z and common clock bias in metres
|
||||
gps_nav_solution_t* solution_out);
|
||||
void rotateSatelliteSTD(double const traveltime, const mat_type* X_sat, mat_type* X_sat_rot);
|
||||
void topocent(const double* XPtr, const double* dxPtr, int size, t_phi_Lambda_h * phi_Lambda_h, t_topocentData* topcent);
|
||||
void togeod(double a, double finv, double X, double Y, double Z, t_phi_Lambda_h * phi_Lambda_h, t_topocentData* topcent);
|
||||
|
||||
@@ -3,6 +3,19 @@
|
||||
|
||||
#include "gps_ip_defines.h"
|
||||
|
||||
typedef struct {
|
||||
uint32_t event_overflow_total;
|
||||
uint32_t plic_drain_limit_total;
|
||||
uint32_t plic_repeat_total;
|
||||
uint32_t nav_epoch_coalesced_total;
|
||||
uint32_t satellite_connected_total;
|
||||
uint32_t satellite_lost_total;
|
||||
uint32_t last_connected_prn;
|
||||
uint32_t last_lost_prn;
|
||||
uint64_t last_connected_tick;
|
||||
uint64_t last_lost_tick;
|
||||
} gps_runtime_diagnostics_t;
|
||||
|
||||
bool assign_tracking_from_result(const gps_acq_result_t* result);
|
||||
void acq_intr_handler(unsigned char engine_id);
|
||||
void gps_dispatch_irq(unsigned int irq_id);
|
||||
@@ -10,6 +23,8 @@
|
||||
void gps_process_isr_events(void);
|
||||
void gps_acq_scheduler_run(void);
|
||||
void gps_background_task(void);
|
||||
bool gps_take_nav_solve_period_ready(void);
|
||||
void gps_get_runtime_diagnostics(gps_runtime_diagnostics_t* diagnostics);
|
||||
void trck_intr_handler(volatile gps_trck_t* const trck_ip, volatile gps_frame_t *gps_frame_parsed, volatile int unsigned gps_subframe[10], unsigned char trck_ip_no);
|
||||
|
||||
|
||||
|
||||
@@ -45,11 +45,26 @@
|
||||
#define GPS_ACQ_INTR_LINE(index) (BSP_GPS_ACQ_IRQ + ((unsigned int)(index) * BSP_GPS_ACQ_IRQ_STRIDE))
|
||||
#define GPS_EVENT_QUEUE_SIZE 64u
|
||||
#define GPS_SYSTICK_HZ 20u
|
||||
#define GPS_NAV_SOLVE_TIMER_TICK_MS 20u
|
||||
#define GPS_NAV_SOLVE_TIMER_TICKS 50u
|
||||
#define GPS_NAV_SOLVE_PERIOD_MS (GPS_NAV_SOLVE_TIMER_TICKS * GPS_NAV_SOLVE_TIMER_TICK_MS)
|
||||
/* Keep integrity statistics active, but do not let leave-one-out FDE
|
||||
* replace the full-WLS position until the real measurement-noise model
|
||||
* is calibrated. The live stationary test produced a 22.7% exclusion
|
||||
* rate and substantially worse position dispersion. */
|
||||
#define GPS_NAV_ENABLE_FDE 0u
|
||||
#define GPS_PROFILE_CPU_HZ 50000000ULL
|
||||
#define GPS_ACQ_RETRY_DELAY_TICKS (GPS_SYSTICK_HZ / 2u)
|
||||
#define GPS_ACQ_STUCK_WARN_TICKS (GPS_SYSTICK_HZ * 2u)
|
||||
#define GPS_NAV_STATUS_LOG_PERIOD_TICKS GPS_SYSTICK_HZ
|
||||
#define GPS_TRK_MEASUREMENT_STALE_TICKS (GPS_SYSTICK_HZ * 3u)
|
||||
#define GPS_NAV_ABS_SAMPLE_SYNC_WINDOW_MS 25u
|
||||
#define GPS_NAV_TOW_CLUSTER_TOLERANCE_SEC 0.001
|
||||
#define GPS_HOW_ANCHOR_MAX_AGE_SEC 12.0
|
||||
|
||||
_Static_assert(GPS_NAV_SOLVE_PERIOD_MS == 1000u, "NAV solve period must be 1 second");
|
||||
_Static_assert((GPS_NAV_ENABLE_FDE == 0u) || (GPS_NAV_ENABLE_FDE == 1u),
|
||||
"GPS_NAV_ENABLE_FDE must be zero or one");
|
||||
|
||||
#if (ACQ_ENGINE_COUNT < 1UL)
|
||||
#error "ACQ_ENGINE_COUNT must be at least 1"
|
||||
@@ -430,13 +445,19 @@
|
||||
unsigned int gps_get_acq_intr_line(unsigned int engine_id);
|
||||
bool gps_prn_valid(unsigned int prn_no);
|
||||
uint64_t gps_get_systick(void);
|
||||
static inline uint64_t gps_read_cycle_counter(void)
|
||||
{
|
||||
uint64_t cycles;
|
||||
asm volatile("rdcycle %0" : "=r"(cycles));
|
||||
return cycles;
|
||||
}
|
||||
bool gps_get_ionoutc(ionoutc_t* ionoutc);
|
||||
void gps_background_task(void);
|
||||
void gps_process_isr_events(void);
|
||||
void gps_acq_scheduler_run(void);
|
||||
// parse functions. Generic parse function.
|
||||
unsigned char parse_subframe(int unsigned* subframe, gps_frame_t* gps_frame,
|
||||
bool update_tow);
|
||||
unsigned int* how_tow_sec_out);
|
||||
#ifdef EKF_ENABLE
|
||||
void calculate_position(Ekf* g_ekf);
|
||||
#else
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
* Verbosity is cumulative:
|
||||
* 1: navigation result (position and DOP)
|
||||
* 2: tracked channel/PRN summary
|
||||
* 3: state transitions, warnings and errors
|
||||
* 4: per-epoch and low-level diagnostic detail
|
||||
* 3: state transitions, warnings/errors and integrity summary
|
||||
* 4: performance, NAV satellite and low-level diagnostic detail
|
||||
*
|
||||
* The aliases keep call sites descriptive without creating extra verbosity
|
||||
* levels. GPS_DEBUG_LEVEL should normally be in the range 1..4.
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#ifndef GPS_TIME_ANCHOR_H_INCLUDED
|
||||
#define GPS_TIME_ANCHOR_H_INCLUDED
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define GPS_TIME_WEEK_SECONDS 604800.0
|
||||
#define GPS_TIME_HALF_WEEK_SECONDS 302400.0
|
||||
|
||||
/* Resolve the week of a newly received HOW against the previous HOW anchor.
|
||||
* The HOW contains seconds-of-week; the signed half-week rule makes the
|
||||
* Saturday/Sunday rollover explicit without depending on a NAV timer. */
|
||||
int gps_time_resolve_how_week(bool previous_valid,
|
||||
int previous_week,
|
||||
double previous_tow_sec,
|
||||
int fallback_week,
|
||||
double how_tow_sec);
|
||||
|
||||
/* Convert a receiver-sample timestamp to GPS time from a HOW/sample anchor.
|
||||
* raw counters are modulo 2^32. max_age_sec must keep the signed difference
|
||||
* unambiguous (and also rejects a stale HOW anchor). */
|
||||
bool gps_time_from_sample_anchor(int anchor_week,
|
||||
double anchor_tow_sec,
|
||||
uint32_t anchor_raw_sample,
|
||||
double anchor_corrected_sample,
|
||||
uint32_t event_raw_sample,
|
||||
double event_corrected_sample,
|
||||
double samples_per_second,
|
||||
double max_age_sec,
|
||||
int* event_week_out,
|
||||
double* event_tow_sec_out,
|
||||
double* elapsed_sec_out);
|
||||
|
||||
#endif
|
||||
@@ -3,17 +3,16 @@
|
||||
|
||||
#include "gps_ip_defines.h"
|
||||
|
||||
typedef enum {
|
||||
GPS_TOW_SOURCE_HOW = 0,
|
||||
GPS_TOW_SOURCE_NAV_SOLVE
|
||||
} gps_tow_source_t;
|
||||
|
||||
typedef struct gps_ephem_ll {
|
||||
volatile gps_ephemeris_t* data_p;
|
||||
unsigned char tracking_ip_no;
|
||||
struct gps_ephem_ll* next;
|
||||
volatile unsigned int gps_subframe_mask;
|
||||
volatile gps_tow_source_t gps_tow_source;
|
||||
volatile gpstime_t gps_how_tow;
|
||||
volatile uint32_t gps_how_abs_sample;
|
||||
volatile double gps_how_corrected_abs_sample;
|
||||
volatile uint64_t gps_how_tick;
|
||||
volatile bool gps_how_anchor_valid;
|
||||
volatile uint32_t gps_nav_solve_sequence;
|
||||
volatile uint32_t gps_nav_solve_consumed_sequence;
|
||||
volatile uint32_t gps_last_nav_solve_abs_sample;
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "gps_ip_defines.h"
|
||||
#include "gps.h"
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include "defines.h"
|
||||
|
||||
|
||||
@@ -370,6 +371,36 @@ static double covariance_along_axis(const mat_type* covariance, const double axi
|
||||
return value;
|
||||
}
|
||||
|
||||
static double covariance_between_axes(const mat_type* covariance,
|
||||
const double first_axis[3],
|
||||
const double second_axis[3])
|
||||
{
|
||||
double value = 0.0;
|
||||
for(int row = 0 ; row < 3 ; row++)
|
||||
{
|
||||
for(int col = 0 ; col < 3 ; col++)
|
||||
{
|
||||
value += first_axis[row] * covariance->matrix[row][col] * second_axis[col];
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
static double least_squares_chi_square_threshold_99(unsigned int degrees_of_freedom)
|
||||
{
|
||||
/* 99th percentile for chi-square distributions with 1..5 DOF. The
|
||||
* current hardware has at most nine GPS channels and four WLS states. */
|
||||
static const double threshold[6] = {
|
||||
0.0,
|
||||
6.634896601,
|
||||
9.210340372,
|
||||
11.34486673,
|
||||
13.27670414,
|
||||
15.08627247
|
||||
};
|
||||
return (degrees_of_freedom < 6u) ? threshold[degrees_of_freedom] : 0.0;
|
||||
}
|
||||
|
||||
static bool least_squares_solve_weighted_update(const mat_type* A,
|
||||
const mat_type* omc,
|
||||
const double* weights,
|
||||
@@ -492,22 +523,118 @@ static double klobuchar_delay_meters(const ionoutc_t* ionoutc,
|
||||
return obliquity * delay_seconds * SPEED_OF_LIGHT;
|
||||
}
|
||||
|
||||
static bool least_squares_build_postfit(const mat_type* satpos,
|
||||
const mat_type* obs,
|
||||
int satellite_count,
|
||||
const unsigned char* ura_indices,
|
||||
const ionoutc_t* ionoutc,
|
||||
double gps_tow,
|
||||
const double state[4],
|
||||
mat_type* design,
|
||||
mat_type* az,
|
||||
mat_type* el,
|
||||
double* residuals_m,
|
||||
double* absolute_weights)
|
||||
{
|
||||
if((satpos == NULL) || (obs == NULL) || (ura_indices == NULL) ||
|
||||
(state == NULL) || (design == NULL) || (az == NULL) || (el == NULL) ||
|
||||
(residuals_m == NULL) || (absolute_weights == NULL))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const double dtr = 0.01745329251994329576923690768489;
|
||||
for(int i = 0 ; i < satellite_count ; i++)
|
||||
{
|
||||
double dx = satpos->matrix[i][0] - state[0];
|
||||
double dy = satpos->matrix[i][1] - state[1];
|
||||
double dz = satpos->matrix[i][2] - state[2];
|
||||
double approximate_range = sqrt(dx*dx + dy*dy + dz*dz);
|
||||
if(!isfinite(approximate_range) || (approximate_range <= 1.0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
double travel_time = approximate_range / SPEED_OF_LIGHT;
|
||||
double omega_tau = OMEGA_EARTH * travel_time;
|
||||
double cos_omega_tau = cos(omega_tau);
|
||||
double sin_omega_tau = sin(omega_tau);
|
||||
double rotated_satellite[3] = {
|
||||
cos_omega_tau * satpos->matrix[i][0] + sin_omega_tau * satpos->matrix[i][1],
|
||||
-sin_omega_tau * satpos->matrix[i][0] + cos_omega_tau * satpos->matrix[i][1],
|
||||
satpos->matrix[i][2]
|
||||
};
|
||||
double difference[3] = {
|
||||
rotated_satellite[0] - state[0],
|
||||
rotated_satellite[1] - state[1],
|
||||
rotated_satellite[2] - state[2]
|
||||
};
|
||||
double geometric_range = normVect(difference);
|
||||
if(!isfinite(geometric_range) || (geometric_range <= 1.0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
t_phi_Lambda_h geodetic;
|
||||
t_topocentData topocentric;
|
||||
memset(&geodetic, 0, sizeof(geodetic));
|
||||
memset(&topocentric, 0, sizeof(topocentric));
|
||||
topocent(state, difference, 3, &geodetic, &topocentric);
|
||||
az->matrix[0][i] = topocentric.azim;
|
||||
el->matrix[0][i] = topocentric.elv;
|
||||
|
||||
double weight = least_squares_measurement_weight(ura_indices[i], topocentric.elv, true);
|
||||
if(!isfinite(weight) || (weight <= 0.0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
absolute_weights[i] = weight;
|
||||
|
||||
double iono = klobuchar_delay_meters(ionoutc, gps_tow,
|
||||
geodetic.phi, geodetic.lambda,
|
||||
topocentric.azim, topocentric.elv);
|
||||
double trop = 0.0;
|
||||
if((topocentric.elv > 0.0) &&
|
||||
(topocentric.height >= -1000.0) && (topocentric.height <= 15000.0))
|
||||
{
|
||||
trop = tropo(sin(topocentric.elv * dtr), topocentric.height / 1000.0);
|
||||
if(!isfinite(trop) || (trop < 0.0))
|
||||
{
|
||||
trop = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
residuals_m[i] = obs->matrix[0][i] - geometric_range - state[3] - trop - iono;
|
||||
if(!isfinite(residuals_m[i]))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
for(int component = 0 ; component < 3 ; component++)
|
||||
{
|
||||
design->matrix[i][component] = -difference[component] / geometric_range;
|
||||
}
|
||||
design->matrix[i][3] = 1.0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool gps_wls_last_solution_valid = false;
|
||||
static double gps_wls_last_solution[4] = {0.0, 0.0, 0.0, 0.0};
|
||||
|
||||
// Function leastSquaresSTD
|
||||
// Definition : initialize all matc cpp class variables.
|
||||
// Arguments :
|
||||
// satpos - type mat_type*, matc class type replacement
|
||||
// obs - type mat_type*, matc class type replacement
|
||||
bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber,
|
||||
mat_type * az, mat_type * el,
|
||||
const unsigned char* ura_indices,
|
||||
const ionoutc_t* ionoutc, double gps_tow,
|
||||
double solution_out[4])
|
||||
static bool least_squares_candidate(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber,
|
||||
mat_type * az, mat_type * el,
|
||||
const unsigned char* ura_indices,
|
||||
const ionoutc_t* ionoutc, double gps_tow,
|
||||
const double seed[4], bool seed_valid,
|
||||
gps_nav_solution_t* solution_out)
|
||||
{ //TODO computeRange i kapatmıştım, onu tekrar açmalıyım.
|
||||
static bool last_solution_valid = false;
|
||||
static double last_solution[4] = {0.0, 0.0, 0.0, 0.0};
|
||||
|
||||
if((satpos == NULL) || (obs == NULL) || (az == NULL) || (el == NULL) ||
|
||||
(ura_indices == NULL) ||
|
||||
(ura_indices == NULL) || (solution_out == NULL) ||
|
||||
(satpos->matrix == NULL) || (obs->matrix == NULL) ||
|
||||
(ActiveSatellitesNumber < MIN_NEEDED_SATELLITE) ||
|
||||
((unsigned int)ActiveSatellitesNumber > GPS_TRCK_IP_COUNT))
|
||||
@@ -516,6 +643,8 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
ActiveSatellitesNumber);
|
||||
return false;
|
||||
}
|
||||
memset(solution_out, 0, sizeof(*solution_out));
|
||||
uint64_t candidate_start_cycles = gps_read_cycle_counter();
|
||||
|
||||
//BURASI MATLAB GIRDILERININ KULLANILARAK, LEAST SQUARE IN, CROSS-CHECK ETMEK ICIN KULLANILDIGI YER. KALDIRILABILIR
|
||||
//*****************************************************************************************************************
|
||||
@@ -601,14 +730,14 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
//initialize_vec(&obs->matrix[0][0], precisePseudoRanges); //TODO:Burası DEBUG da kontrol edilecek YUSUF, belki de hiç precisePseudoRanges olmamalı
|
||||
mat_type* omc = create_matrix(1, ActiveSatellitesNumber, "omc"); //1x6 matrix for DEBUG
|
||||
mat_type* A = create_matrix(ActiveSatellitesNumber, 4, "A"); //6x4 matrix for DEBUG
|
||||
double* satWeights = (double*)malloc(ActiveSatellitesNumber * sizeof(double));
|
||||
if((posVec == NULL) || (omc == NULL) || (A == NULL) || (satWeights == NULL))
|
||||
double* absoluteWeights = (double*)malloc(ActiveSatellitesNumber * sizeof(double));
|
||||
if((posVec == NULL) || (omc == NULL) || (A == NULL) || (absoluteWeights == NULL))
|
||||
{
|
||||
GPS_LOG(DEBUG_ERROR, GPS_LOG_CAT_MEM, "least squares matrix allocation failed\r\n");
|
||||
free_matrix(posVec);
|
||||
free_matrix(omc);
|
||||
free_matrix(A);
|
||||
free(satWeights);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
@@ -619,30 +748,31 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
initialize_all(0.0, A);
|
||||
for(int i = 0 ; i < ActiveSatellitesNumber ; i++)
|
||||
{
|
||||
satWeights[i] = least_squares_measurement_weight(ura_indices[i], 0.0, false);
|
||||
absoluteWeights[i] = least_squares_measurement_weight(ura_indices[i], 0.0, false);
|
||||
}
|
||||
|
||||
bool seeded_from_last_solution = last_solution_valid;
|
||||
bool seeded_from_last_solution = seed_valid && (seed != NULL);
|
||||
for(int i = 0 ; seeded_from_last_solution && (i <= POSITION_VECTOR_COL) ; i++)
|
||||
{
|
||||
if(!isfinite(last_solution[i]))
|
||||
if(!isfinite(seed[i]))
|
||||
{
|
||||
seeded_from_last_solution = false;
|
||||
last_solution_valid = false;
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "discarded non-finite cached position\r\n");
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "discarded non-finite WLS seed\r\n");
|
||||
}
|
||||
}
|
||||
if(seeded_from_last_solution)
|
||||
{
|
||||
for(int i = 0 ; i <= POSITION_VECTOR_COL ; i++)
|
||||
{
|
||||
posVec->matrix[0][i] = last_solution[i];
|
||||
posVec->matrix[0][i] = seed[i];
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int iteration_count = 0u;
|
||||
//=============== Iteratively Find receiver position =================================================================
|
||||
for (unsigned iteration = 0; iteration < NUMBER_OF_ITERATIONS; iteration++)
|
||||
{
|
||||
iteration_count = iteration + 1u;
|
||||
mat_type* Rot_X = create_matrix(1, 3, "Rot_X"); //1x3 matrix for DEBUG
|
||||
if(Rot_X == NULL)
|
||||
{
|
||||
@@ -713,7 +843,7 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
//TODO: topocent e giren matrix lerin elemanları doğru yükleniyor mu diye bakılacak. !!!!!!!!!!!!!!!!!1
|
||||
az->matrix[0][i] = topcent->azim;
|
||||
el->matrix[0][i] = topcent->elv;
|
||||
satWeights[i] = least_squares_measurement_weight(ura_indices[i], topcent->elv, true);
|
||||
absoluteWeights[i] = least_squares_measurement_weight(ura_indices[i], topcent->elv, true);
|
||||
iono = klobuchar_delay_meters(ionoutc, gps_tow,
|
||||
phi_lambda_h->phi, phi_lambda_h->lambda,
|
||||
topcent->azim, topcent->elv);
|
||||
@@ -771,13 +901,18 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
// for(int n = 0 ; n < posVec->rows*posVec->columns ; n++)
|
||||
// posVec->matrix[0][n] = 0; // TODO rank 4'ten kucukse denklem cozulemez, dolayısıyla bır ust sevıyeye donulmesi gerekir..
|
||||
//}
|
||||
if(!least_squares_normalize_weights(satWeights, ActiveSatellitesNumber))
|
||||
double solveWeights[GPS_TRCK_IP_COUNT];
|
||||
for(int weight_index = 0 ; weight_index < ActiveSatellitesNumber ; weight_index++)
|
||||
{
|
||||
solveWeights[weight_index] = absoluteWeights[weight_index];
|
||||
}
|
||||
if(!least_squares_normalize_weights(solveWeights, ActiveSatellitesNumber))
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "weighted least squares rejected invalid URA/elevation weights\r\n");
|
||||
goto least_squares_fail;
|
||||
}
|
||||
double xVec[4] = {0.0, 0.0, 0.0, 0.0};
|
||||
bool weighted_ok = least_squares_solve_weighted_update(A, omc, satWeights, xVec);
|
||||
bool weighted_ok = least_squares_solve_weighted_update(A, omc, solveWeights, xVec);
|
||||
if(!weighted_ok)
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV,
|
||||
@@ -805,9 +940,14 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
#ifdef COUT_DEBUG
|
||||
printf(" posVec[0]: %.12lf \n posVec[1]: %.12lf \n posVec[2]: %.12lf \n posVec[3]: %.12lf \n",posVec->matrix[0][0],posVec->matrix[0][1],posVec->matrix[0][2],posVec->matrix[0][3] );
|
||||
#endif
|
||||
double norm = normVect(xVec);
|
||||
double update_norm = sqrt((xVec[0] * xVec[0]) +
|
||||
(xVec[1] * xVec[1]) +
|
||||
(xVec[2] * xVec[2]) +
|
||||
(xVec[3] * xVec[3]));
|
||||
|
||||
if(norm < 1e-4)
|
||||
/* Position and receiver clock bias are all WLS states. Ignoring the
|
||||
* clock term can stop with an unconverged common-mode residual. */
|
||||
if(update_norm < 1e-4)
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -827,7 +967,7 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
ecef_radius, X1, Y1, Z1);
|
||||
free_matrix(A);
|
||||
free_matrix(posVec);
|
||||
free(satWeights);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
@@ -841,29 +981,108 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
phi_lambda_h->phi, phi_lambda_h->lambda, phi_lambda_h->height);
|
||||
free_matrix(A);
|
||||
free_matrix(posVec);
|
||||
free(satWeights);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* DOP describes geometry, not the URA/elevation stochastic model used by
|
||||
* WLS. Build an unweighted normal matrix, then rotate its ECEF position
|
||||
* covariance into local ENU before reporting horizontal and vertical DOP. */
|
||||
double residuals_m[GPS_TRCK_IP_COUNT];
|
||||
if(!least_squares_build_postfit(satpos, obs, ActiveSatellitesNumber,
|
||||
ura_indices, ionoutc, gps_tow,
|
||||
posVec->matrix[0], A, az, el,
|
||||
residuals_m, absoluteWeights))
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "post-fit residual construction failed\r\n");
|
||||
free_matrix(A);
|
||||
free_matrix(posVec);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
}
|
||||
|
||||
double residual_square_sum = 0.0;
|
||||
double absolute_weight_sum = 0.0;
|
||||
double weighted_residual_sum = 0.0;
|
||||
for(int i = 0 ; i < ActiveSatellitesNumber ; i++)
|
||||
{
|
||||
residual_square_sum += residuals_m[i] * residuals_m[i];
|
||||
absolute_weight_sum += absoluteWeights[i];
|
||||
weighted_residual_sum += absoluteWeights[i] * residuals_m[i] * residuals_m[i];
|
||||
}
|
||||
if(!isfinite(residual_square_sum) || !isfinite(absolute_weight_sum) ||
|
||||
!isfinite(weighted_residual_sum) || (absolute_weight_sum <= 0.0))
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "post-fit residual statistics invalid\r\n");
|
||||
free_matrix(A);
|
||||
free_matrix(posVec);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned int degrees_of_freedom = (unsigned int)ActiveSatellitesNumber - 4u;
|
||||
double chi_square_threshold = least_squares_chi_square_threshold_99(degrees_of_freedom);
|
||||
bool residual_test_valid = (degrees_of_freedom > 0u) && (chi_square_threshold > 0.0);
|
||||
double chi_square_ratio = residual_test_valid
|
||||
? (weighted_residual_sum / chi_square_threshold)
|
||||
: INFINITY;
|
||||
bool chi_square_pass = residual_test_valid &&
|
||||
(weighted_residual_sum <= chi_square_threshold);
|
||||
|
||||
/* Absolute weights retain the physical 1/m^2 scale needed by covariance.
|
||||
* The normalized weights above are used only by the numerical WLS solve. */
|
||||
mat_type* covariance_normal = least_squares_weighted_normal_matrix(A, absoluteWeights);
|
||||
mat_type* position_covariance = (covariance_normal != NULL)
|
||||
? calculate_matrix_inverse(covariance_normal) : NULL;
|
||||
free_matrix(covariance_normal);
|
||||
if(position_covariance == NULL)
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "position covariance skipped singular geometry\r\n");
|
||||
free_matrix(A);
|
||||
free_matrix(posVec);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
}
|
||||
double postfit_rhs[4] = {0.0, 0.0, 0.0, 0.0};
|
||||
for(int col = 0 ; col < 4 ; col++)
|
||||
{
|
||||
for(int row = 0 ; row < ActiveSatellitesNumber ; row++)
|
||||
{
|
||||
postfit_rhs[col] += A->matrix[row][col] * absoluteWeights[row] * residuals_m[row];
|
||||
}
|
||||
}
|
||||
double postfit_correction[4] = {0.0, 0.0, 0.0, 0.0};
|
||||
for(int row = 0 ; row < 4 ; row++)
|
||||
{
|
||||
for(int col = 0 ; col < 4 ; col++)
|
||||
{
|
||||
postfit_correction[row] += position_covariance->matrix[row][col] * postfit_rhs[col];
|
||||
}
|
||||
}
|
||||
solution_out->postfit_position_correction_m = normVect(postfit_correction);
|
||||
solution_out->postfit_clock_correction_m = postfit_correction[3];
|
||||
|
||||
/* DOP describes geometry only, so it uses an unweighted normal matrix. */
|
||||
double dop_weights[GPS_TRCK_IP_COUNT];
|
||||
for(int i = 0 ; i < ActiveSatellitesNumber ; i++)
|
||||
{
|
||||
dop_weights[i] = 1.0;
|
||||
}
|
||||
mat_type* dop_normal = least_squares_weighted_normal_matrix(A, dop_weights);
|
||||
free_matrix(A);
|
||||
mat_type* dop_covariance = (dop_normal != NULL) ? calculate_matrix_inverse(dop_normal) : NULL;
|
||||
free_matrix(dop_normal);
|
||||
if(dop_covariance == NULL)
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "DOP skipped singular geometry\r\n");
|
||||
free_matrix(position_covariance);
|
||||
free_matrix(A);
|
||||
free_matrix(posVec);
|
||||
free(satWeights);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
@@ -897,8 +1116,10 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV,
|
||||
"DOP rejected invalid ENU geometry h2=%e v2=%e p2=%e t2=%e g2=%e\r\n",
|
||||
hdop2, vdop2, pdop2, tdop2, gdop2);
|
||||
free_matrix(position_covariance);
|
||||
free_matrix(A);
|
||||
free_matrix(posVec);
|
||||
free(satWeights);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
@@ -909,37 +1130,85 @@ bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber
|
||||
double hdop = sqrt(hdop2);
|
||||
double vdop = sqrt(vdop2);
|
||||
double tdop = sqrt(tdop2);
|
||||
GPS_LOG(DEBUG_STATUS, GPS_LOG_CAT_NAV,
|
||||
"DOP GDOP=%.10lf PDOP=%.10lf HDOP=%.10lf VDOP=%.10lf TDOP=%.10lf\r\n",
|
||||
gdop, pdop, hdop, vdop, tdop);
|
||||
(void)gdop;
|
||||
(void)pdop;
|
||||
(void)hdop;
|
||||
(void)vdop;
|
||||
(void)tdop;
|
||||
GPS_LOG(DEBUG_STATUS, GPS_LOG_CAT_NAV,
|
||||
"position lat=%.20lf lon=%.20lf height=%.20lf\r\n",
|
||||
phi_lambda_h->phi, phi_lambda_h->lambda, phi_lambda_h->height);
|
||||
int UTMzone = findUtmZone(phi_lambda_h->phi, phi_lambda_h->lambda);
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "UTM zone=%d\r\n", UTMzone);
|
||||
(void)UTMzone;
|
||||
|
||||
for(int i = 0 ; i <= POSITION_VECTOR_COL ; i++)
|
||||
const double* enu_axes[3] = {east, north, up};
|
||||
for(int row = 0 ; row < 3 ; row++)
|
||||
{
|
||||
last_solution[i] = posVec->matrix[0][i];
|
||||
if(solution_out != NULL)
|
||||
for(int col = 0 ; col < 3 ; col++)
|
||||
{
|
||||
solution_out[i] = posVec->matrix[0][i];
|
||||
solution_out->covariance_enu_m2[row][col] =
|
||||
covariance_between_axes(position_covariance, enu_axes[row], enu_axes[col]);
|
||||
}
|
||||
}
|
||||
last_solution_valid = true;
|
||||
free_matrix(position_covariance);
|
||||
free_matrix(A);
|
||||
|
||||
double horizontal_variance = solution_out->covariance_enu_m2[0][0] +
|
||||
solution_out->covariance_enu_m2[1][1];
|
||||
double vertical_variance = solution_out->covariance_enu_m2[2][2];
|
||||
if(!isfinite(horizontal_variance) || !isfinite(vertical_variance) ||
|
||||
(horizontal_variance < 0.0) || (vertical_variance < 0.0))
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV,
|
||||
"position covariance rejected hvar=%e vvar=%e\r\n",
|
||||
horizontal_variance, vertical_variance);
|
||||
free_matrix(posVec);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
}
|
||||
|
||||
for(int component = 0 ; component < 3 ; component++)
|
||||
{
|
||||
solution_out->ecef_m[component] = posVec->matrix[0][component];
|
||||
}
|
||||
solution_out->clock_bias_m = posVec->matrix[0][3];
|
||||
solution_out->latitude_deg = phi_lambda_h->phi;
|
||||
solution_out->longitude_deg = phi_lambda_h->lambda;
|
||||
solution_out->height_m = phi_lambda_h->height;
|
||||
solution_out->hacc_m = sqrt(horizontal_variance);
|
||||
solution_out->vacc_m = sqrt(vertical_variance);
|
||||
solution_out->gdop = gdop;
|
||||
solution_out->pdop = pdop;
|
||||
solution_out->hdop = hdop;
|
||||
solution_out->vdop = vdop;
|
||||
solution_out->tdop = tdop;
|
||||
solution_out->residual_rms_m = sqrt(residual_square_sum / (double)ActiveSatellitesNumber);
|
||||
for(int i = 0 ; i < ActiveSatellitesNumber ; i++)
|
||||
{
|
||||
solution_out->postfit_residual_m[i] = residuals_m[i];
|
||||
solution_out->elevation_deg[i] = el->matrix[0][i];
|
||||
solution_out->measurement_sigma_m[i] = 1.0 / sqrt(absoluteWeights[i]);
|
||||
if(fabs(residuals_m[i]) > solution_out->max_abs_residual_m)
|
||||
{
|
||||
solution_out->max_abs_residual_m = fabs(residuals_m[i]);
|
||||
}
|
||||
}
|
||||
solution_out->weighted_residual_rms_m = sqrt(weighted_residual_sum / absolute_weight_sum);
|
||||
solution_out->weighted_residual_sum = weighted_residual_sum;
|
||||
solution_out->chi_square_threshold = chi_square_threshold;
|
||||
solution_out->chi_square_ratio = chi_square_ratio;
|
||||
solution_out->quality_score = residual_test_valid ? (100.0 / (1.0 + chi_square_ratio)) : 0.0;
|
||||
solution_out->available_satellite_count = (unsigned int)ActiveSatellitesNumber;
|
||||
solution_out->used_satellite_count = (unsigned int)ActiveSatellitesNumber;
|
||||
solution_out->degrees_of_freedom = degrees_of_freedom;
|
||||
solution_out->used_row_mask = (1u << (unsigned int)ActiveSatellitesNumber) - 1u;
|
||||
solution_out->excluded_row_mask = 0u;
|
||||
solution_out->candidate_valid = true;
|
||||
solution_out->residual_test_valid = residual_test_valid;
|
||||
solution_out->chi_square_pass = chi_square_pass;
|
||||
solution_out->fde_applied = false;
|
||||
solution_out->solution_valid = chi_square_pass;
|
||||
solution_out->iteration_count = iteration_count;
|
||||
solution_out->candidate_cycles = gps_read_cycle_counter() - candidate_start_cycles;
|
||||
|
||||
//free(phi_lambda_h, sizeof(t_phi_Lambda_h));
|
||||
//free(topcent, sizeof(t_topocentData));; //TODO: re-create by malloc
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
free_matrix(posVec);
|
||||
free(satWeights);
|
||||
free(absoluteWeights);
|
||||
//===============================================================================================
|
||||
return true;
|
||||
|
||||
@@ -947,12 +1216,227 @@ least_squares_fail:
|
||||
free_matrix(A);
|
||||
free_matrix(omc);
|
||||
free_matrix(posVec);
|
||||
free(satWeights);
|
||||
free(absoluteWeights);
|
||||
free(phi_lambda_h);
|
||||
free(topcent);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool leastSquaresSTD(mat_type* satpos, mat_type* obs, int ActiveSatellitesNumber,
|
||||
mat_type * az, mat_type * el,
|
||||
const unsigned char* ura_indices,
|
||||
const ionoutc_t* ionoutc, double gps_tow,
|
||||
gps_nav_solution_t* solution_out)
|
||||
{
|
||||
if(solution_out == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
memset(solution_out, 0, sizeof(*solution_out));
|
||||
uint64_t total_wls_start_cycles = gps_read_cycle_counter();
|
||||
|
||||
gps_nav_solution_t full_solution;
|
||||
if(!least_squares_candidate(satpos, obs, ActiveSatellitesNumber,
|
||||
az, el, ura_indices, ionoutc, gps_tow,
|
||||
gps_wls_last_solution,
|
||||
gps_wls_last_solution_valid,
|
||||
&full_solution))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
gps_nav_solution_t selected_solution = full_solution;
|
||||
bool passing_candidate_found = full_solution.chi_square_pass;
|
||||
uint32_t full_row_mask = (1u << (unsigned int)ActiveSatellitesNumber) - 1u;
|
||||
uint64_t fde_start_cycles = 0u;
|
||||
unsigned int fde_trial_count = 0u;
|
||||
|
||||
/* Six available measurements leave only five after exclusion (one residual
|
||||
* DOF). In that geometry several leave-one-out candidates can pass while
|
||||
* producing widely separated positions. Keep the legacy full-WLS position
|
||||
* as an explicitly invalid best effort until at least two residual DOF remain
|
||||
* after exclusion (seven available measurements). */
|
||||
if((GPS_NAV_ENABLE_FDE != 0u) && !full_solution.chi_square_pass &&
|
||||
(ActiveSatellitesNumber >= 7))
|
||||
{
|
||||
fde_start_cycles = gps_read_cycle_counter();
|
||||
for(int excluded_row = 0 ; excluded_row < ActiveSatellitesNumber ; excluded_row++)
|
||||
{
|
||||
fde_trial_count++;
|
||||
int subset_count = ActiveSatellitesNumber - 1;
|
||||
mat_type* subset_satpos = create_matrix(subset_count, 3, "fdeSatpos");
|
||||
mat_type* subset_obs = create_matrix(1, subset_count, "fdeObs");
|
||||
mat_type* subset_az = create_matrix(1, subset_count, "fdeAz");
|
||||
mat_type* subset_el = create_matrix(1, subset_count, "fdeEl");
|
||||
unsigned char subset_ura[GPS_TRCK_IP_COUNT];
|
||||
if((subset_satpos == NULL) || (subset_obs == NULL) ||
|
||||
(subset_az == NULL) || (subset_el == NULL))
|
||||
{
|
||||
free_matrix(subset_satpos);
|
||||
free_matrix(subset_obs);
|
||||
free_matrix(subset_az);
|
||||
free_matrix(subset_el);
|
||||
GPS_LOG(DEBUG_ERROR, GPS_LOG_CAT_MEM, "FDE subset allocation failed\r\n");
|
||||
break;
|
||||
}
|
||||
initialize_all(0.0, subset_satpos);
|
||||
initialize_all(0.0, subset_obs);
|
||||
initialize_all(0.0, subset_az);
|
||||
initialize_all(0.0, subset_el);
|
||||
|
||||
int subset_row = 0;
|
||||
for(int original_row = 0 ; original_row < ActiveSatellitesNumber ; original_row++)
|
||||
{
|
||||
if(original_row == excluded_row)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
for(int component = 0 ; component < 3 ; component++)
|
||||
{
|
||||
subset_satpos->matrix[subset_row][component] =
|
||||
satpos->matrix[original_row][component];
|
||||
}
|
||||
subset_obs->matrix[0][subset_row] = obs->matrix[0][original_row];
|
||||
subset_ura[subset_row] = ura_indices[original_row];
|
||||
subset_row++;
|
||||
}
|
||||
|
||||
double full_seed[4] = {
|
||||
full_solution.ecef_m[0], full_solution.ecef_m[1],
|
||||
full_solution.ecef_m[2], full_solution.clock_bias_m
|
||||
};
|
||||
gps_nav_solution_t candidate;
|
||||
bool candidate_ok = least_squares_candidate(subset_satpos, subset_obs, subset_count,
|
||||
subset_az, subset_el, subset_ura,
|
||||
ionoutc, gps_tow,
|
||||
full_seed, true, &candidate);
|
||||
free_matrix(subset_satpos);
|
||||
free_matrix(subset_obs);
|
||||
free_matrix(subset_az);
|
||||
free_matrix(subset_el);
|
||||
if(!candidate_ok)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
candidate.available_satellite_count = (unsigned int)ActiveSatellitesNumber;
|
||||
candidate.used_row_mask = full_row_mask & ~(1u << (unsigned int)excluded_row);
|
||||
candidate.excluded_row_mask = 1u << (unsigned int)excluded_row;
|
||||
candidate.fde_applied = true;
|
||||
double mapped_residuals[GPS_TRCK_IP_COUNT] = {0.0};
|
||||
double mapped_elevations[GPS_TRCK_IP_COUNT] = {0.0};
|
||||
double mapped_sigmas[GPS_TRCK_IP_COUNT] = {0.0};
|
||||
subset_row = 0;
|
||||
for(int original_row = 0 ; original_row < ActiveSatellitesNumber ; original_row++)
|
||||
{
|
||||
if(original_row != excluded_row)
|
||||
{
|
||||
mapped_residuals[original_row] = candidate.postfit_residual_m[subset_row];
|
||||
mapped_elevations[original_row] = candidate.elevation_deg[subset_row];
|
||||
mapped_sigmas[original_row] = candidate.measurement_sigma_m[subset_row];
|
||||
subset_row++;
|
||||
}
|
||||
}
|
||||
memcpy(candidate.postfit_residual_m, mapped_residuals, sizeof(mapped_residuals));
|
||||
memcpy(candidate.elevation_deg, mapped_elevations, sizeof(mapped_elevations));
|
||||
memcpy(candidate.measurement_sigma_m, mapped_sigmas, sizeof(mapped_sigmas));
|
||||
|
||||
bool choose_candidate = false;
|
||||
if(candidate.chi_square_pass)
|
||||
{
|
||||
choose_candidate = !passing_candidate_found ||
|
||||
(candidate.chi_square_ratio < selected_solution.chi_square_ratio);
|
||||
}
|
||||
else if(!passing_candidate_found &&
|
||||
(candidate.chi_square_ratio < selected_solution.chi_square_ratio))
|
||||
{
|
||||
/* Preserve the best statistical improvement as an explicitly invalid
|
||||
* best-effort navigation result. */
|
||||
choose_candidate = true;
|
||||
}
|
||||
if(choose_candidate)
|
||||
{
|
||||
selected_solution = candidate;
|
||||
}
|
||||
if(candidate.chi_square_pass)
|
||||
{
|
||||
passing_candidate_found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
selected_solution.available_satellite_count = (unsigned int)ActiveSatellitesNumber;
|
||||
selected_solution.full_chi_square_ratio = full_solution.chi_square_ratio;
|
||||
selected_solution.full_postfit_position_correction_m =
|
||||
full_solution.postfit_position_correction_m;
|
||||
selected_solution.full_postfit_clock_correction_m =
|
||||
full_solution.postfit_clock_correction_m;
|
||||
memcpy(selected_solution.full_postfit_residual_m,
|
||||
full_solution.postfit_residual_m,
|
||||
sizeof(selected_solution.full_postfit_residual_m));
|
||||
memcpy(selected_solution.full_elevation_deg,
|
||||
full_solution.elevation_deg,
|
||||
sizeof(selected_solution.full_elevation_deg));
|
||||
memcpy(selected_solution.full_measurement_sigma_m,
|
||||
full_solution.measurement_sigma_m,
|
||||
sizeof(selected_solution.full_measurement_sigma_m));
|
||||
selected_solution.full_solution_cycles = full_solution.candidate_cycles;
|
||||
selected_solution.fde_trial_count = fde_trial_count;
|
||||
selected_solution.fde_cycles = (fde_start_cycles != 0u)
|
||||
? (gps_read_cycle_counter() - fde_start_cycles) : 0u;
|
||||
selected_solution.total_wls_cycles = gps_read_cycle_counter() - total_wls_start_cycles;
|
||||
selected_solution.solution_valid = selected_solution.candidate_valid &&
|
||||
selected_solution.residual_test_valid &&
|
||||
selected_solution.chi_square_pass;
|
||||
if(selected_solution.solution_valid)
|
||||
{
|
||||
gps_wls_last_solution[0] = selected_solution.ecef_m[0];
|
||||
gps_wls_last_solution[1] = selected_solution.ecef_m[1];
|
||||
gps_wls_last_solution[2] = selected_solution.ecef_m[2];
|
||||
gps_wls_last_solution[3] = selected_solution.clock_bias_m;
|
||||
gps_wls_last_solution_valid = true;
|
||||
}
|
||||
*solution_out = selected_solution;
|
||||
|
||||
GPS_LOG(DEBUG_STATUS, GPS_LOG_CAT_NAV,
|
||||
"GDOP=%.10lf\r\n", solution_out->gdop);
|
||||
GPS_LOG(DEBUG_STATUS, GPS_LOG_CAT_NAV,
|
||||
"position lat=%.20lf lon=%.20lf height=%.3lf\r\n",
|
||||
solution_out->latitude_deg, solution_out->longitude_deg,
|
||||
solution_out->height_m);
|
||||
GPS_LOG(DEBUG_EVENTS, GPS_LOG_CAT_NAV,
|
||||
"NAVSOL valid=%u integrity=%u fde=%u sats=%u/%u excluded=0x%03x "
|
||||
"residual_rms=%.3lf max_residual=%.3lf weighted_rms=%.3lf "
|
||||
"chi2=%.3lf dof=%u threshold=%.3lf ratio=%.3lf quality=%.1lf "
|
||||
"hacc=%.3lf vacc=%.3lf\r\n",
|
||||
solution_out->solution_valid ? 1u : 0u,
|
||||
solution_out->chi_square_pass ? 1u : 0u,
|
||||
solution_out->fde_applied ? 1u : 0u,
|
||||
solution_out->used_satellite_count,
|
||||
solution_out->available_satellite_count,
|
||||
solution_out->excluded_row_mask,
|
||||
solution_out->residual_rms_m,
|
||||
solution_out->max_abs_residual_m,
|
||||
solution_out->weighted_residual_rms_m,
|
||||
solution_out->weighted_residual_sum,
|
||||
solution_out->degrees_of_freedom,
|
||||
solution_out->chi_square_threshold,
|
||||
solution_out->chi_square_ratio,
|
||||
solution_out->quality_score,
|
||||
solution_out->hacc_m,
|
||||
solution_out->vacc_m);
|
||||
for(int row = 0 ; row < ActiveSatellitesNumber ; row++)
|
||||
{
|
||||
if((solution_out->used_row_mask & (1u << (unsigned int)row)) != 0u)
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV,
|
||||
"postfit row=%d residual=%.3lf m\r\n",
|
||||
row, solution_out->postfit_residual_m[row]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void rotateSatelliteSTD(double const traveltime, const mat_type* X_sat, mat_type* X_sat_rot) // x_sat -> vector type
|
||||
{
|
||||
double omegatau = OMEGA_EARTH * traveltime;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "gps_interrupt_handlers.h"
|
||||
#include "Navigation.h"
|
||||
#include "gps_pps.h"
|
||||
#include "gps_time_anchor.h"
|
||||
#include <bsp/irq.h>
|
||||
#include <bsp/mmio.h>
|
||||
#include <bsp/plic.h>
|
||||
@@ -68,6 +69,8 @@ static volatile unsigned int gps_plic_drain_limit_count = 0;
|
||||
static volatile unsigned int gps_plic_repeat_count = 0;
|
||||
static volatile bool gps_acq_schedule_pending = true;
|
||||
static volatile bool gps_timer_maintenance_pending = true;
|
||||
static volatile bool gps_nav_solve_period_pending = false;
|
||||
static volatile gps_runtime_diagnostics_t gps_runtime_diagnostics;
|
||||
static unsigned int gps_acq_round_robin_prn = 0;
|
||||
|
||||
#define GPS_PLIC_DRAIN_LIMIT (GPS_TRCK_IP_COUNT + GPS_ACQ_IP_COUNT + 4u)
|
||||
@@ -98,45 +101,6 @@ static double gps_correct_abs_sample(uint32_t abs_sample, uint32_t rem_code_phas
|
||||
return (double)abs_sample - ((double)rem_code_phase / CODE_FREQ_BASIS);
|
||||
}
|
||||
|
||||
static double gps_normalize_tow(double tow_sec, volatile int* week)
|
||||
{
|
||||
while(tow_sec >= SECONDS_IN_WEEK)
|
||||
{
|
||||
tow_sec -= SECONDS_IN_WEEK;
|
||||
if(week != NULL)
|
||||
{
|
||||
(*week)++;
|
||||
}
|
||||
}
|
||||
while(tow_sec < 0.0)
|
||||
{
|
||||
tow_sec += SECONDS_IN_WEEK;
|
||||
if(week != NULL)
|
||||
{
|
||||
(*week)--;
|
||||
}
|
||||
}
|
||||
return tow_sec;
|
||||
}
|
||||
|
||||
static bool gps_advance_tow_from_nav_timer(volatile gps_ephemeris_t* eph,
|
||||
uint32_t nav_solve_timer,
|
||||
uint32_t event_count,
|
||||
double* delta_sec_out)
|
||||
{
|
||||
if((eph == NULL) || (nav_solve_timer == 0u) || (event_count == 0u))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
double delta_sec = (double)event_count * (double)nav_solve_timer * 0.020;
|
||||
eph->tow.sec = gps_normalize_tow(eph->tow.sec + delta_sec, &eph->tow.week);
|
||||
if(delta_sec_out != NULL)
|
||||
{
|
||||
*delta_sec_out = delta_sec;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static uint64_t gps_systick_interval(void)
|
||||
{
|
||||
uint64_t interval = BSP_CLINT_TIMEBASE_HZ / GPS_SYSTICK_HZ;
|
||||
@@ -176,6 +140,7 @@ static bool gps_event_push_isr(const gps_isr_event_t* event)
|
||||
if(next == gps_event_tail)
|
||||
{
|
||||
gps_event_overflow_count++;
|
||||
gps_runtime_diagnostics.event_overflow_total++;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -243,6 +208,52 @@ static bool gps_take_timer_maintenance_pending(void)
|
||||
return pending;
|
||||
}
|
||||
|
||||
bool gps_take_nav_solve_period_ready(void)
|
||||
{
|
||||
bool tracking_shadow_pending = false;
|
||||
bool acquisition_shadow_pending = false;
|
||||
uint64_t irq_state = bsp_irq_save();
|
||||
for(unsigned int i = 0 ; i < GPS_TRCK_IP_COUNT ; i++)
|
||||
{
|
||||
if(trk_shadow[i].drop_pending || trk_shadow[i].nav_bits_pending ||
|
||||
trk_shadow[i].nav_solve_pending || trk_shadow[i].misc_pending)
|
||||
{
|
||||
tracking_shadow_pending = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(unsigned int i = 0 ; i < GPS_ACQ_IP_COUNT ; i++)
|
||||
{
|
||||
if(acq_shadow_pending[i])
|
||||
{
|
||||
acquisition_shadow_pending = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
bool pipeline_idle = (gps_event_head == gps_event_tail) &&
|
||||
!tracking_shadow_pending && !acquisition_shadow_pending;
|
||||
bool ready = gps_nav_solve_period_pending && pipeline_idle;
|
||||
if(ready)
|
||||
{
|
||||
/* One foreground attempt per hardware NAV period. A failed WLS is not
|
||||
* retried by an unrelated NAV-bit, acquisition or SysTick wake-up. */
|
||||
gps_nav_solve_period_pending = false;
|
||||
}
|
||||
bsp_irq_restore(irq_state);
|
||||
return ready;
|
||||
}
|
||||
|
||||
void gps_get_runtime_diagnostics(gps_runtime_diagnostics_t* diagnostics)
|
||||
{
|
||||
if(diagnostics == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
uint64_t irq_state = bsp_irq_save();
|
||||
*diagnostics = gps_runtime_diagnostics;
|
||||
bsp_irq_restore(irq_state);
|
||||
}
|
||||
|
||||
static void gps_clear_tracking_slot(unsigned char trck_ip_no)
|
||||
{
|
||||
if(trck_ip_no >= GPS_TRCK_IP_COUNT)
|
||||
@@ -277,6 +288,10 @@ static void gps_runtime_state_init(void)
|
||||
gps_plic_repeat_count = 0;
|
||||
gps_acq_schedule_pending = true;
|
||||
gps_timer_maintenance_pending = true;
|
||||
gps_nav_solve_period_pending = false;
|
||||
memset((void*)&gps_runtime_diagnostics, 0, sizeof(gps_runtime_diagnostics));
|
||||
gps_runtime_diagnostics.last_connected_prn = GPS_PRN_INVALID;
|
||||
gps_runtime_diagnostics.last_lost_prn = GPS_PRN_INVALID;
|
||||
gps_acq_round_robin_prn = 0;
|
||||
|
||||
for(unsigned int i = 0 ; i < GPS_ACQ_IP_COUNT ; i++)
|
||||
@@ -441,6 +456,7 @@ void gps_irq_handler(void)
|
||||
{
|
||||
bsp_plic_complete(irq_id);
|
||||
gps_plic_repeat_count++;
|
||||
gps_runtime_diagnostics.plic_repeat_total++;
|
||||
return;
|
||||
}
|
||||
seen_mask |= irq_bit;
|
||||
@@ -451,6 +467,7 @@ void gps_irq_handler(void)
|
||||
}
|
||||
|
||||
gps_plic_drain_limit_count++;
|
||||
gps_runtime_diagnostics.plic_drain_limit_total++;
|
||||
}
|
||||
|
||||
static bool gps_tracking_prn_active(unsigned int prn_no)
|
||||
@@ -483,6 +500,9 @@ static void gps_mark_satellite_tracking(unsigned int prn_no, unsigned char trck_
|
||||
satellite_tracking_ip[prn_no] = trck_ip_no;
|
||||
if((previous_state != GPS_SAT_TRACKING) || (previous_ip != trck_ip_no))
|
||||
{
|
||||
gps_runtime_diagnostics.satellite_connected_total++;
|
||||
gps_runtime_diagnostics.last_connected_prn = prn_no;
|
||||
gps_runtime_diagnostics.last_connected_tick = gps_get_systick();
|
||||
GPS_LOG(DEBUG_INFO, GPS_LOG_CAT_TRK,
|
||||
"satellite connected: prn=%u trk=%u previous=%s previous_trk=%u\r\n",
|
||||
prn_no, trck_ip_no, gps_satellite_state_name(previous_state), previous_ip);
|
||||
@@ -500,6 +520,9 @@ static void gps_mark_satellite_lost(unsigned int prn_no)
|
||||
satellite_tracking_ip[prn_no] = GPS_PRN_INVALID;
|
||||
if(previous_state != GPS_SAT_LOST)
|
||||
{
|
||||
gps_runtime_diagnostics.satellite_lost_total++;
|
||||
gps_runtime_diagnostics.last_lost_prn = prn_no;
|
||||
gps_runtime_diagnostics.last_lost_tick = gps_get_systick();
|
||||
GPS_LOG(DEBUG_INFO, GPS_LOG_CAT_TRK,
|
||||
"satellite lost: prn=%u previous=%s previous_trk=%u\r\n",
|
||||
prn_no, gps_satellite_state_name(previous_state), previous_ip);
|
||||
@@ -623,7 +646,8 @@ void trck_intr_handler(volatile gps_trck_t* const trck_ip,
|
||||
event.status = status_reg;
|
||||
event.control = trck_ip->CONTROL_REG;
|
||||
event.prn = trck_ip->PRN_NUMBER;
|
||||
/* Hardware updates ABS_SAMPLE when the nav-solve interrupt is raised. */
|
||||
/* Hardware latches ABS_SAMPLE and REM_CODE_PHASE together for both a valid
|
||||
* subframe and a nav-solve event. */
|
||||
event.abs_sample_raw = trck_ip->ABS_SAMPLE;
|
||||
event.rem_code_phase = trck_ip->REM_CODE_PHASE_REG;
|
||||
event.corrected_abs_sample = gps_correct_abs_sample(event.abs_sample_raw, event.rem_code_phase);
|
||||
@@ -889,15 +913,39 @@ static void gps_process_tracking_nav_bits(const gps_isr_event_t* event)
|
||||
|
||||
gps_frame_parsed->gps_ephems.abs_sample = event->corrected_abs_sample;
|
||||
gps_frame_parsed->gps_ephems.SVID = (unsigned char)event->prn;
|
||||
/* Enabling an interrupt is not a timing event. HOW remains the TOW owner
|
||||
* until this channel's first nav-solve event is actually consumed. */
|
||||
bool update_tow = node->gps_tow_source == GPS_TOW_SOURCE_HOW;
|
||||
unsigned int how_tow_sec = 0u;
|
||||
unsigned char subframe_id = parse_subframe((unsigned int*)gps_subframe,
|
||||
(gps_frame_t*)gps_frame_parsed,
|
||||
update_tow);
|
||||
&how_tow_sec);
|
||||
if((subframe_id >= 1u) && (subframe_id <= 5u))
|
||||
{
|
||||
node->gps_subframe_mask |= (1u << subframe_id);
|
||||
int fallback_week = gps_frame_parsed->gps_ephems.tow.week;
|
||||
if(subframe_id == 1u)
|
||||
{
|
||||
/* WN is ten bits in LNAV. Keeping it in the same modulo domain as
|
||||
* the ephemeris is sufficient for satellite-time differences. */
|
||||
fallback_week = (int)((gps_subframe[2] >> 20) & 0x3ffu);
|
||||
}
|
||||
/* A subframe-1 WN is authoritative in its native 10-bit domain. On
|
||||
* other subframes, resolve the HOW seconds rollover from the previous
|
||||
* anchor. This also upgrades a pre-SF1 temporary week immediately. */
|
||||
int anchor_week = (subframe_id == 1u) ? fallback_week :
|
||||
gps_time_resolve_how_week(node->gps_how_anchor_valid,
|
||||
node->gps_how_tow.week,
|
||||
node->gps_how_tow.sec,
|
||||
fallback_week,
|
||||
(double)how_tow_sec);
|
||||
node->gps_how_tow.week = anchor_week;
|
||||
node->gps_how_tow.sec = (double)how_tow_sec;
|
||||
node->gps_how_abs_sample = event->abs_sample_raw;
|
||||
node->gps_how_corrected_abs_sample = event->corrected_abs_sample;
|
||||
node->gps_how_tick = event->tick;
|
||||
node->gps_how_anchor_valid = true;
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV,
|
||||
"HOW anchor: trk=%u prn=%u week=%d tow=%.3f abs=%u corrected=%.6f\r\n",
|
||||
trck_ip_no, event->prn, anchor_week, (double)how_tow_sec,
|
||||
event->abs_sample_raw, event->corrected_abs_sample);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -934,6 +982,8 @@ static void gps_process_tracking_nav_solve(const gps_isr_event_t* event)
|
||||
}
|
||||
if(nav_solve_event_count > event->nav_solve_event_count)
|
||||
{
|
||||
gps_runtime_diagnostics.nav_epoch_coalesced_total +=
|
||||
nav_solve_event_count - event->nav_solve_event_count;
|
||||
GPS_LOG(DEBUG_WARNING, GPS_LOG_CAT_NAV,
|
||||
"recovered %u coalesced nav-solve epochs: trk=%u prn=%u\r\n",
|
||||
nav_solve_event_count, trck_ip_no, event->prn);
|
||||
@@ -947,26 +997,39 @@ static void gps_process_tracking_nav_solve(const gps_isr_event_t* event)
|
||||
node->gps_last_pps_capture_sequence += nav_solve_event_count;
|
||||
}
|
||||
|
||||
double tow_delta_sec = 0.0;
|
||||
if(!gps_advance_tow_from_nav_timer(&gps_frame_parsed->gps_ephems,
|
||||
event->nav_solve_timer,
|
||||
nav_solve_event_count,
|
||||
&tow_delta_sec))
|
||||
if(!node->gps_how_anchor_valid)
|
||||
{
|
||||
GPS_LOG(DEBUG_WARNING, GPS_LOG_CAT_NAV,
|
||||
"nav solve has invalid timer: trk=%u prn=%u timer=%u\r\n",
|
||||
trck_ip_no, event->prn, event->nav_solve_timer);
|
||||
"nav solve rejected without HOW/sample anchor: trk=%u prn=%u\r\n",
|
||||
trck_ip_no, event->prn);
|
||||
return;
|
||||
}
|
||||
if(node->gps_tow_source == GPS_TOW_SOURCE_HOW)
|
||||
int tow_week = 0;
|
||||
double tow_sec = 0.0;
|
||||
double tow_delta_sec = 0.0;
|
||||
if(!gps_time_from_sample_anchor(node->gps_how_tow.week,
|
||||
node->gps_how_tow.sec,
|
||||
node->gps_how_abs_sample,
|
||||
node->gps_how_corrected_abs_sample,
|
||||
event->abs_sample_raw,
|
||||
event->corrected_abs_sample,
|
||||
SAMPLES_PER_CODE * 1000.0,
|
||||
GPS_HOW_ANCHOR_MAX_AGE_SEC,
|
||||
&tow_week,
|
||||
&tow_sec,
|
||||
&tow_delta_sec))
|
||||
{
|
||||
node->gps_tow_source = GPS_TOW_SOURCE_NAV_SOLVE;
|
||||
GPS_LOG(DEBUG_INFO, GPS_LOG_CAT_NAV,
|
||||
"TOW ownership transferred to nav solve: trk=%u prn=%u tow=%.3f\r\n",
|
||||
trck_ip_no, event->prn, gps_frame_parsed->gps_ephems.tow.sec);
|
||||
GPS_LOG(DEBUG_WARNING, GPS_LOG_CAT_NAV,
|
||||
"nav solve rejected by stale/invalid HOW anchor: trk=%u prn=%u anchor_tow=%.3f anchor_abs=%u event_abs=%u\r\n",
|
||||
trck_ip_no, event->prn, node->gps_how_tow.sec,
|
||||
node->gps_how_abs_sample, event->abs_sample_raw);
|
||||
return;
|
||||
}
|
||||
gps_frame_parsed->gps_ephems.tow.week = tow_week;
|
||||
gps_frame_parsed->gps_ephems.tow.sec = tow_sec;
|
||||
gps_frame_parsed->gps_ephems.abs_sample = event->corrected_abs_sample;
|
||||
node->gps_nav_solve_sequence += nav_solve_event_count;
|
||||
gps_nav_solve_period_pending = true;
|
||||
node->gps_last_nav_solve_abs_sample = event->abs_sample_raw;
|
||||
node->gps_last_nav_solve_corrected_abs_sample = event->corrected_abs_sample;
|
||||
if(event->pps_capture_valid)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include "NavEquations.h"
|
||||
#include "Navigation.h"
|
||||
#include "gps_ip_defines.h"
|
||||
@@ -131,6 +133,94 @@ static bool gps_snapshot_has_svid(const gps_ephemeris_t snapshot[GPS_TRCK_IP_COU
|
||||
return false;
|
||||
}
|
||||
|
||||
static uint32_t gps_nav_tow_mismatch_total;
|
||||
static uint32_t gps_nav_tow_reject_total;
|
||||
|
||||
static double gps_snapshot_tow_delta_sec(const gpstime_t* first, const gpstime_t* second)
|
||||
{
|
||||
double delta = ((double)(first->week - second->week) * 604800.0) +
|
||||
(first->sec - second->sec);
|
||||
if(delta > 302400.0)
|
||||
{
|
||||
delta -= 604800.0;
|
||||
}
|
||||
else if(delta < -302400.0)
|
||||
{
|
||||
delta += 604800.0;
|
||||
}
|
||||
return delta;
|
||||
}
|
||||
|
||||
static bool gps_validate_snapshot_tow(const gps_ephemeris_t snapshot[GPS_TRCK_IP_COUNT],
|
||||
unsigned int satellite_count)
|
||||
{
|
||||
if((snapshot == NULL) || (satellite_count < MIN_NEEDED_SATELLITE))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned int reference_row = 0u;
|
||||
unsigned int reference_cluster_count = 0u;
|
||||
for(unsigned int candidate = 0u ; candidate < satellite_count ; candidate++)
|
||||
{
|
||||
unsigned int cluster_count = 0u;
|
||||
for(unsigned int row = 0u ; row < satellite_count ; row++)
|
||||
{
|
||||
double delta = gps_snapshot_tow_delta_sec(&snapshot[row].tow,
|
||||
&snapshot[candidate].tow);
|
||||
if(fabs(delta) <= GPS_NAV_TOW_CLUSTER_TOLERANCE_SEC)
|
||||
{
|
||||
cluster_count++;
|
||||
}
|
||||
}
|
||||
if(cluster_count > reference_cluster_count)
|
||||
{
|
||||
reference_cluster_count = cluster_count;
|
||||
reference_row = candidate;
|
||||
}
|
||||
}
|
||||
|
||||
if(reference_cluster_count <= (satellite_count / 2u))
|
||||
{
|
||||
gps_nav_tow_reject_total++;
|
||||
GPS_LOG(DEBUG_WARNING, GPS_LOG_CAT_NAV,
|
||||
"NAV epoch rejected: no majority TOW cluster sats=%u best_cluster=%u rejects=%u\r\n",
|
||||
satellite_count, reference_cluster_count, gps_nav_tow_reject_total);
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned int mismatch_count = 0u;
|
||||
double maximum_mismatch_sec = 0.0;
|
||||
unsigned int maximum_mismatch_row = reference_row;
|
||||
for(unsigned int row = 0u ; row < satellite_count ; row++)
|
||||
{
|
||||
double delta = gps_snapshot_tow_delta_sec(&snapshot[row].tow,
|
||||
&snapshot[reference_row].tow);
|
||||
if(fabs(delta) <= GPS_NAV_TOW_CLUSTER_TOLERANCE_SEC)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
mismatch_count++;
|
||||
if(!isfinite(delta) || (fabs(delta) > fabs(maximum_mismatch_sec)))
|
||||
{
|
||||
maximum_mismatch_sec = delta;
|
||||
maximum_mismatch_row = row;
|
||||
}
|
||||
}
|
||||
if(mismatch_count != 0u)
|
||||
{
|
||||
gps_nav_tow_mismatch_total += mismatch_count;
|
||||
gps_nav_tow_reject_total++;
|
||||
GPS_LOG(DEBUG_WARNING, GPS_LOG_CAT_NAV,
|
||||
"NAV epoch rejected: TOW mismatch count=%u SVID=%u delta=%.6lf s reference_svid=%u mismatches=%u rejects=%u\r\n",
|
||||
mismatch_count, snapshot[maximum_mismatch_row].SVID,
|
||||
maximum_mismatch_sec, snapshot[reference_row].SVID,
|
||||
gps_nav_tow_mismatch_total, gps_nav_tow_reject_total);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static int32_t gps_sign_extend(uint32_t value, unsigned int bits)
|
||||
{
|
||||
if((bits == 0u) || (bits >= 32u))
|
||||
@@ -418,15 +508,13 @@ static void gps_stage_ephemeris_subframe(const unsigned int* subframe,
|
||||
}
|
||||
|
||||
unsigned char parse_subframe(int unsigned* subframe, gps_frame_t* gps_frame,
|
||||
bool update_tow)
|
||||
unsigned int* how_tow_sec_out)
|
||||
{
|
||||
unsigned char subframe_id = (unsigned char)((subframe[1] >> 8) & 0x07);
|
||||
unsigned int how_tow = (subframe[1] >> 13) * 6u;
|
||||
if(update_tow)
|
||||
if(how_tow_sec_out != NULL)
|
||||
{
|
||||
gps_frame->gps_ephems.tow.sec = (double)how_tow;
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "tow.sec initialized from HOW as %lf\n",
|
||||
gps_frame->gps_ephems.tow.sec);
|
||||
*how_tow_sec_out = how_tow;
|
||||
}
|
||||
if((subframe_id >= 1u) && (subframe_id <= 3u))
|
||||
{
|
||||
@@ -708,9 +796,11 @@ static void gps_consume_nav_sequences_locked(const unsigned char snapshot_ips[GP
|
||||
static bool nav_software_from_snapshot(const gps_ephemeris_t* ephemeris,
|
||||
const uint64_t pps_counters[GPS_TRCK_IP_COUNT],
|
||||
const uint32_t pps_capture_sequences[GPS_TRCK_IP_COUNT],
|
||||
unsigned int satellite_count)
|
||||
unsigned int satellite_count,
|
||||
gps_nav_solution_t* solution_out)
|
||||
{
|
||||
if((ephemeris == NULL) || (satellite_count < MIN_NEEDED_SATELLITE))
|
||||
if((ephemeris == NULL) || (solution_out == NULL) ||
|
||||
(satellite_count < MIN_NEEDED_SATELLITE))
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "nav solve skipped, usable satellites=%u\r\n", satellite_count);
|
||||
return false;
|
||||
@@ -731,7 +821,9 @@ static bool nav_software_from_snapshot(const gps_ephemeris_t* ephemeris,
|
||||
ionoutc_t ionoutc_snapshot;
|
||||
const ionoutc_t* ionoutc = gps_get_ionoutc(&ionoutc_snapshot) ? &ionoutc_snapshot : NULL;
|
||||
bool ok = false;
|
||||
double solution[4] = {0.0, 0.0, 0.0, 0.0};
|
||||
gps_nav_solution_t solution;
|
||||
memset(&solution, 0, sizeof(solution));
|
||||
memset(solution_out, 0, sizeof(*solution_out));
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "Klobuchar correction %s for this solve\r\n",
|
||||
(ionoutc != NULL) ? "available" : "waiting for subframe 4 page 18");
|
||||
|
||||
@@ -802,14 +894,28 @@ static bool nav_software_from_snapshot(const gps_ephemeris_t* ephemeris,
|
||||
|
||||
ok = leastSquaresSTD(satellitePositions, localPseudoRanges, satellite_count, az, el,
|
||||
ura_indices,
|
||||
ionoutc, ephemeris[0].tow.sec, solution);
|
||||
if(ok && (pps_capture_sequences[minimum_index] != 0u))
|
||||
ionoutc, ephemeris[0].tow.sec, &solution);
|
||||
if(ok && solution.fde_applied)
|
||||
{
|
||||
for(unsigned int row = 0 ; row < satellite_count ; row++)
|
||||
{
|
||||
if((solution.excluded_row_mask & (1u << row)) != 0u)
|
||||
{
|
||||
GPS_LOG(DEBUG_WARNING, GPS_LOG_CAT_NAV,
|
||||
"FDE excluded row=%u SVID=%u\r\n", row, ephemeris[row].SVID);
|
||||
}
|
||||
}
|
||||
}
|
||||
bool pps_reference_used = ok &&
|
||||
((solution.used_row_mask & (1u << minimum_index)) != 0u);
|
||||
if(ok && solution.solution_valid && pps_reference_used &&
|
||||
(pps_capture_sequences[minimum_index] != 0u))
|
||||
{
|
||||
/* The synthetic STARTOFFSET datum is absorbed by WLS b. Removing b/c
|
||||
* recovers the reference satellite's physical flight time; POSTPONE_TOW
|
||||
* is applied exactly once here, just as it is in satpos(). */
|
||||
double receiver_tow = ephemeris[minimum_index].tow.sec + POSTPONE_TOW +
|
||||
(STARTOFFSET / 1000.0) - (solution[3] / SPEED_OF_LIGHT);
|
||||
(STARTOFFSET / 1000.0) - (solution.clock_bias_m / SPEED_OF_LIGHT);
|
||||
if(!gps_pps_commit_solution(pps_counters[minimum_index],
|
||||
ephemeris[minimum_index].tow.week,
|
||||
receiver_tow))
|
||||
@@ -817,6 +923,18 @@ static bool nav_software_from_snapshot(const gps_ephemeris_t* ephemeris,
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "PPS anchor skipped: mailbox busy or invalid time\r\n");
|
||||
}
|
||||
}
|
||||
else if(ok && solution.solution_valid && !pps_reference_used)
|
||||
{
|
||||
GPS_LOG(DEBUG_WARNING, GPS_LOG_CAT_NAV,
|
||||
"PPS anchor protected: FDE excluded pseudorange reference row=%u SVID=%u\r\n",
|
||||
minimum_index, ephemeris[minimum_index].SVID);
|
||||
}
|
||||
else if(ok && !solution.solution_valid)
|
||||
{
|
||||
GPS_LOG(DEBUG_WARNING, GPS_LOG_CAT_NAV,
|
||||
"PPS/last_solution protected from invalid best-effort NAVSOL quality=%.1lf ratio=%.3lf\r\n",
|
||||
solution.quality_score, solution.chi_square_ratio);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if(preciseTxTimes != NULL) free_matrix(preciseTxTimes);
|
||||
@@ -828,9 +946,118 @@ cleanup:
|
||||
free(rho0);
|
||||
free(psTVLtime);
|
||||
free(clockCorr);
|
||||
*solution_out = solution;
|
||||
return ok;
|
||||
}
|
||||
|
||||
#ifdef GPS_NAV_JUMP_DIAGNOSTICS
|
||||
static void gps_log_nav_jump_diagnostic(const gps_nav_solution_t* solution,
|
||||
const gps_ephemeris_t* ephemeris,
|
||||
unsigned int satellite_count)
|
||||
{
|
||||
static bool previous_valid = false;
|
||||
static double previous_ecef_m[3];
|
||||
static double previous_height_m = 0.0;
|
||||
static uint32_t previous_excluded_mask = 0u;
|
||||
static uint32_t previous_satellite_mask = 0u;
|
||||
static uint64_t last_jump_log_tick = 0u;
|
||||
if((solution == NULL) || (ephemeris == NULL))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
double step_3d_m = 0.0;
|
||||
double vertical_step_m = 0.0;
|
||||
if(previous_valid)
|
||||
{
|
||||
double delta[3] = {
|
||||
solution->ecef_m[0] - previous_ecef_m[0],
|
||||
solution->ecef_m[1] - previous_ecef_m[1],
|
||||
solution->ecef_m[2] - previous_ecef_m[2]
|
||||
};
|
||||
step_3d_m = normVect(delta);
|
||||
vertical_step_m = solution->height_m - previous_height_m;
|
||||
}
|
||||
bool exclusion_changed = previous_valid &&
|
||||
(solution->excluded_row_mask != previous_excluded_mask);
|
||||
uint32_t satellite_mask = 0u;
|
||||
for(unsigned int row = 0 ; row < satellite_count ; row++)
|
||||
{
|
||||
if(ephemeris[row].SVID < 32u)
|
||||
{
|
||||
satellite_mask |= 1u << ephemeris[row].SVID;
|
||||
}
|
||||
}
|
||||
bool satellite_set_changed = previous_valid && (satellite_mask != previous_satellite_mask);
|
||||
bool position_jumped = previous_valid && (step_3d_m >= 20.0);
|
||||
uint64_t now = gps_get_systick();
|
||||
bool rate_limit_pass = (now - last_jump_log_tick) >= GPS_SYSTICK_HZ;
|
||||
if(exclusion_changed || satellite_set_changed || (position_jumped && rate_limit_pass))
|
||||
{
|
||||
double minimum_abs_sample = ephemeris[0].abs_sample;
|
||||
for(unsigned int row = 1u ; row < satellite_count ; row++)
|
||||
{
|
||||
if(ephemeris[row].abs_sample < minimum_abs_sample)
|
||||
{
|
||||
minimum_abs_sample = ephemeris[row].abs_sample;
|
||||
}
|
||||
}
|
||||
gps_runtime_diagnostics_t runtime_diagnostics;
|
||||
gps_get_runtime_diagnostics(&runtime_diagnostics);
|
||||
uint64_t loss_age_ticks = (runtime_diagnostics.satellite_lost_total != 0u)
|
||||
? (now - runtime_diagnostics.last_lost_tick) : 0u;
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV,
|
||||
"NAVDIAG step3d=%.2lf vertical=%.2lf valid=%u fde=%u "
|
||||
"excluded=0x%03x previous_excluded=0x%03x svmask=0x%08x previous_svmask=0x%08x "
|
||||
"full_ratio=%.3lf selected_ratio=%.3lf math_corr=%.6lf full_math_corr=%.6lf "
|
||||
"math_clock_corr=%.6lf full_math_clock_corr=%.6lf "
|
||||
"isr_overflow=%u plic_repeat=%u drain_limit=%u coalesced=%u "
|
||||
"lost_total=%u last_lost_prn=%u loss_age_ticks=%lu\r\n",
|
||||
step_3d_m, vertical_step_m,
|
||||
solution->solution_valid ? 1u : 0u,
|
||||
solution->fde_applied ? 1u : 0u,
|
||||
solution->excluded_row_mask, previous_excluded_mask,
|
||||
satellite_mask, previous_satellite_mask,
|
||||
solution->full_chi_square_ratio, solution->chi_square_ratio,
|
||||
solution->postfit_position_correction_m,
|
||||
solution->full_postfit_position_correction_m,
|
||||
solution->postfit_clock_correction_m,
|
||||
solution->full_postfit_clock_correction_m,
|
||||
runtime_diagnostics.event_overflow_total,
|
||||
runtime_diagnostics.plic_repeat_total,
|
||||
runtime_diagnostics.plic_drain_limit_total,
|
||||
runtime_diagnostics.nav_epoch_coalesced_total,
|
||||
runtime_diagnostics.satellite_lost_total,
|
||||
runtime_diagnostics.last_lost_prn,
|
||||
(unsigned long)loss_age_ticks);
|
||||
for(unsigned int row = 0 ; row < satellite_count ; row++)
|
||||
{
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV,
|
||||
"NAVSAT row=%u svid=%u abs_sample=%.6lf raw_delta_m=%.2lf "
|
||||
"full_residual=%.2lf elevation=%.1lf sigma=%.2lf used=%u excluded=%u\r\n",
|
||||
row, ephemeris[row].SVID,
|
||||
ephemeris[row].abs_sample,
|
||||
((ephemeris[row].abs_sample - minimum_abs_sample) / SAMPLES_PER_CODE) *
|
||||
(SPEED_OF_LIGHT / 1000.0),
|
||||
solution->full_postfit_residual_m[row],
|
||||
solution->full_elevation_deg[row],
|
||||
solution->full_measurement_sigma_m[row],
|
||||
(solution->used_row_mask & (1u << row)) ? 1u : 0u,
|
||||
(solution->excluded_row_mask & (1u << row)) ? 1u : 0u);
|
||||
}
|
||||
last_jump_log_tick = now;
|
||||
}
|
||||
for(int component = 0 ; component < 3 ; component++)
|
||||
{
|
||||
previous_ecef_m[component] = solution->ecef_m[component];
|
||||
}
|
||||
previous_height_m = solution->height_m;
|
||||
previous_excluded_mask = solution->excluded_row_mask;
|
||||
previous_satellite_mask = satellite_mask;
|
||||
previous_valid = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef EKF_ENABLE
|
||||
void calculate_position(Ekf* g_ekf)
|
||||
#else
|
||||
@@ -857,6 +1084,8 @@ void calculate_position()
|
||||
#ifdef EKF_ENABLE
|
||||
(void)g_ekf;
|
||||
#endif
|
||||
bool nav_period_ready = gps_take_nav_solve_period_ready();
|
||||
uint64_t nav_period_start_cycles = nav_period_ready ? gps_read_cycle_counter() : 0u;
|
||||
|
||||
uint64_t irq_state = bsp_irq_save();
|
||||
|
||||
@@ -873,16 +1102,21 @@ void calculate_position()
|
||||
/* The nav-bit snapshot is used only to qualify ephemeris and select the
|
||||
* channels. Position input must come from a coherent nav-solve epoch. */
|
||||
gps_enable_nav_solve_for_snapshot_locked(snapshot_ips, ready_count);
|
||||
satellite_count = gps_collect_nav_snapshot_locked(snapshot, snapshot_ips, true, true);
|
||||
coherent_nav_count = satellite_count;
|
||||
run_nav = (satellite_count >= MIN_NEEDED_SATELLITE) &&
|
||||
(satellite_count >= ready_count);
|
||||
initial_run = !gps_initial_position_valid;
|
||||
if(run_nav)
|
||||
if(nav_period_ready)
|
||||
{
|
||||
gps_capture_nav_metadata_locked(snapshot_ips, snapshot_sequences,
|
||||
snapshot_pps_counters, snapshot_pps_sequences,
|
||||
satellite_count);
|
||||
satellite_count = gps_collect_nav_snapshot_locked(snapshot, snapshot_ips, true, true);
|
||||
coherent_nav_count = satellite_count;
|
||||
bool tow_coherent = (satellite_count >= MIN_NEEDED_SATELLITE) &&
|
||||
(satellite_count >= ready_count) &&
|
||||
gps_validate_snapshot_tow(snapshot, satellite_count);
|
||||
run_nav = tow_coherent;
|
||||
initial_run = !gps_initial_position_valid;
|
||||
if(run_nav)
|
||||
{
|
||||
gps_capture_nav_metadata_locked(snapshot_ips, snapshot_sequences,
|
||||
snapshot_pps_counters, snapshot_pps_sequences,
|
||||
satellite_count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -914,14 +1148,67 @@ void calculate_position()
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "nav solve period\r\n");
|
||||
}
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV, "navigation software running with %u satellites\r\n", satellite_count);
|
||||
gps_nav_solution_t nav_solution;
|
||||
memset(&nav_solution, 0, sizeof(nav_solution));
|
||||
uint64_t nav_software_start_cycles = gps_read_cycle_counter();
|
||||
bool nav_ok = nav_software_from_snapshot(snapshot, snapshot_pps_counters,
|
||||
snapshot_pps_sequences, satellite_count);
|
||||
snapshot_pps_sequences, satellite_count,
|
||||
&nav_solution);
|
||||
uint64_t nav_software_cycles = gps_read_cycle_counter() - nav_software_start_cycles;
|
||||
if(nav_ok)
|
||||
{
|
||||
uint64_t consume_irq_state = bsp_irq_save();
|
||||
gps_consume_nav_sequences_locked(snapshot_ips, snapshot_sequences, satellite_count);
|
||||
bsp_irq_restore(consume_irq_state);
|
||||
if(initial_run)
|
||||
}
|
||||
uint64_t foreground_cycles = gps_read_cycle_counter() - nav_period_start_cycles;
|
||||
uint64_t period_budget_cycles = (GPS_PROFILE_CPU_HZ * GPS_NAV_SOLVE_PERIOD_MS) / 1000u;
|
||||
bool period_overrun = foreground_cycles >= period_budget_cycles;
|
||||
gps_runtime_diagnostics_t runtime_diagnostics;
|
||||
gps_get_runtime_diagnostics(&runtime_diagnostics);
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV,
|
||||
"NAVPERF period_ms=%u cpu_hz=%lu foreground_cycles=%lu "
|
||||
"nav_cycles=%lu wls_cycles=%lu full_cycles=%lu "
|
||||
"fde_cycles=%lu fde_trials=%u selected_iterations=%u sats=%u/%u "
|
||||
"fde=%u valid=%u budget_cycles=%lu overrun=%u math_corr=%.6lf "
|
||||
"math_clock_corr=%.6lf "
|
||||
"isr_overflow=%u plic_repeat=%u drain_limit=%u coalesced=%u lost=%u "
|
||||
"tow_mismatch=%u tow_rejected=%u\r\n",
|
||||
GPS_NAV_SOLVE_PERIOD_MS,
|
||||
(unsigned long)GPS_PROFILE_CPU_HZ,
|
||||
(unsigned long)foreground_cycles,
|
||||
(unsigned long)nav_software_cycles,
|
||||
(unsigned long)nav_solution.total_wls_cycles,
|
||||
(unsigned long)nav_solution.full_solution_cycles,
|
||||
(unsigned long)nav_solution.fde_cycles,
|
||||
nav_solution.fde_trial_count,
|
||||
nav_solution.iteration_count,
|
||||
nav_solution.used_satellite_count,
|
||||
nav_solution.available_satellite_count,
|
||||
nav_solution.fde_applied ? 1u : 0u,
|
||||
nav_solution.solution_valid ? 1u : 0u,
|
||||
(unsigned long)period_budget_cycles,
|
||||
period_overrun ? 1u : 0u,
|
||||
nav_solution.postfit_position_correction_m,
|
||||
nav_solution.postfit_clock_correction_m,
|
||||
runtime_diagnostics.event_overflow_total,
|
||||
runtime_diagnostics.plic_repeat_total,
|
||||
runtime_diagnostics.plic_drain_limit_total,
|
||||
runtime_diagnostics.nav_epoch_coalesced_total,
|
||||
runtime_diagnostics.satellite_lost_total,
|
||||
gps_nav_tow_mismatch_total,
|
||||
gps_nav_tow_reject_total);
|
||||
(void)foreground_cycles;
|
||||
(void)nav_software_cycles;
|
||||
(void)period_budget_cycles;
|
||||
(void)period_overrun;
|
||||
(void)runtime_diagnostics;
|
||||
#ifdef GPS_NAV_JUMP_DIAGNOSTICS
|
||||
gps_log_nav_jump_diagnostic(&nav_solution, snapshot, satellite_count);
|
||||
#endif
|
||||
if(nav_ok)
|
||||
{
|
||||
if(initial_run && nav_solution.solution_valid)
|
||||
{
|
||||
gps_initial_position_valid = true;
|
||||
}
|
||||
@@ -929,7 +1216,8 @@ void calculate_position()
|
||||
* perturb collection of the input epoch. */
|
||||
if(GPS_DEBUG_ENABLED(DEBUG_CHANNELS))
|
||||
{
|
||||
GPS_LOG(DEBUG_CHANNELS, GPS_LOG_CAT_TRK, "tracked=%u prns=[", busy_count);
|
||||
GPS_LOG(DEBUG_CHANNELS, GPS_LOG_CAT_TRK,
|
||||
"tracked satellites=%u prns=[", busy_count);
|
||||
for(unsigned int i = 0 ; i < busy_count ; i++)
|
||||
{
|
||||
PRINT_DEBUG(DEBUG_CHANNELS, "%s%u",
|
||||
@@ -1040,10 +1328,18 @@ void gps_startup_initialization(unsigned int nsp_tick)
|
||||
{
|
||||
|
||||
(void)bsp_irq_save();
|
||||
GPS_LOG(DEBUG_EVENTS, GPS_LOG_CAT_NAV,
|
||||
"NAV schedule timer_ticks=%u tick_ms=%u period_ms=%u profile_cpu_hz=%lu fde_enabled=%u\r\n",
|
||||
nsp_tick, GPS_NAV_SOLVE_TIMER_TICK_MS,
|
||||
nsp_tick * GPS_NAV_SOLVE_TIMER_TICK_MS,
|
||||
(unsigned long)GPS_PROFILE_CPU_HZ,
|
||||
GPS_NAV_ENABLE_FDE);
|
||||
gps_init_acq_tables();
|
||||
gps_pps_init(nsp_tick);
|
||||
gps_ionoutc_valid = false;
|
||||
gps_last_ionoutc = (ionoutc_t){0};
|
||||
gps_nav_tow_mismatch_total = 0u;
|
||||
gps_nav_tow_reject_total = 0u;
|
||||
for(unsigned int i = 0 ; i < GPS_ACQ_IP_COUNT ; i++)
|
||||
{
|
||||
acq_ips[i]->CONTROL_REG = (1u << GPS_ACQ_INTPRT_CLR);
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
#include "gps_time_anchor.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <stddef.h>
|
||||
|
||||
static double gps_time_normalize_week(double tow_sec, int* week)
|
||||
{
|
||||
while(tow_sec >= GPS_TIME_WEEK_SECONDS)
|
||||
{
|
||||
tow_sec -= GPS_TIME_WEEK_SECONDS;
|
||||
(*week)++;
|
||||
}
|
||||
while(tow_sec < 0.0)
|
||||
{
|
||||
tow_sec += GPS_TIME_WEEK_SECONDS;
|
||||
(*week)--;
|
||||
}
|
||||
return tow_sec;
|
||||
}
|
||||
|
||||
int gps_time_resolve_how_week(bool previous_valid,
|
||||
int previous_week,
|
||||
double previous_tow_sec,
|
||||
int fallback_week,
|
||||
double how_tow_sec)
|
||||
{
|
||||
if(!previous_valid || !isfinite(previous_tow_sec) || !isfinite(how_tow_sec))
|
||||
{
|
||||
return fallback_week;
|
||||
}
|
||||
|
||||
int week = previous_week;
|
||||
double delta_sec = how_tow_sec - previous_tow_sec;
|
||||
if(delta_sec < -GPS_TIME_HALF_WEEK_SECONDS)
|
||||
{
|
||||
week++;
|
||||
}
|
||||
else if(delta_sec > GPS_TIME_HALF_WEEK_SECONDS)
|
||||
{
|
||||
week--;
|
||||
}
|
||||
return week;
|
||||
}
|
||||
|
||||
bool gps_time_from_sample_anchor(int anchor_week,
|
||||
double anchor_tow_sec,
|
||||
uint32_t anchor_raw_sample,
|
||||
double anchor_corrected_sample,
|
||||
uint32_t event_raw_sample,
|
||||
double event_corrected_sample,
|
||||
double samples_per_second,
|
||||
double max_age_sec,
|
||||
int* event_week_out,
|
||||
double* event_tow_sec_out,
|
||||
double* elapsed_sec_out)
|
||||
{
|
||||
if((event_week_out == NULL) || (event_tow_sec_out == NULL) ||
|
||||
!(samples_per_second > 0.0) || !(max_age_sec > 0.0) ||
|
||||
!isfinite(anchor_tow_sec) || !isfinite(anchor_corrected_sample) ||
|
||||
!isfinite(event_corrected_sample))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/* The integer part is unwrapped modulo 2^32. Preserve the code-phase
|
||||
* fractions from both simultaneous ABS_SAMPLE/REM_CODE_PHASE latches. */
|
||||
int32_t raw_delta = (int32_t)(event_raw_sample - anchor_raw_sample);
|
||||
double anchor_fraction = anchor_corrected_sample - (double)anchor_raw_sample;
|
||||
double event_fraction = event_corrected_sample - (double)event_raw_sample;
|
||||
double sample_delta = (double)raw_delta + event_fraction - anchor_fraction;
|
||||
double elapsed_sec = sample_delta / samples_per_second;
|
||||
if(!isfinite(elapsed_sec) || (elapsed_sec < -0.001) ||
|
||||
(elapsed_sec > max_age_sec))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
int event_week = anchor_week;
|
||||
double event_tow_sec = gps_time_normalize_week(anchor_tow_sec + elapsed_sec,
|
||||
&event_week);
|
||||
*event_week_out = event_week;
|
||||
*event_tow_sec_out = event_tow_sec;
|
||||
if(elapsed_sec_out != NULL)
|
||||
{
|
||||
*elapsed_sec_out = elapsed_sec;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -60,7 +60,12 @@ bool insert_element(volatile gps_ephem_ll_t** node,
|
||||
new_node->tracking_ip_no = trck_ip_no;
|
||||
new_node->next = NULL;
|
||||
new_node->gps_subframe_mask = 0u;
|
||||
new_node->gps_tow_source = GPS_TOW_SOURCE_HOW;
|
||||
new_node->gps_how_tow.week = 0;
|
||||
new_node->gps_how_tow.sec = 0.0;
|
||||
new_node->gps_how_abs_sample = 0u;
|
||||
new_node->gps_how_corrected_abs_sample = 0.0;
|
||||
new_node->gps_how_tick = 0u;
|
||||
new_node->gps_how_anchor_valid = false;
|
||||
new_node->gps_nav_solve_sequence = 0u;
|
||||
new_node->gps_nav_solve_consumed_sequence = 0u;
|
||||
new_node->gps_last_nav_solve_abs_sample = 0u;
|
||||
|
||||
@@ -491,12 +491,9 @@ mat_type* calculate_matrix_inverse(mat_type* matrix)
|
||||
// Create a new matrix to store the inverse
|
||||
mat_type* inverse = create_matrix(n, n, "inverse_matrix");
|
||||
|
||||
// Create a temporary matrix to store intermediate results
|
||||
mat_type* temp = create_matrix(n, n, "temp_matrix");
|
||||
if((inverse == NULL) || (temp == NULL))
|
||||
if(inverse == NULL)
|
||||
{
|
||||
free_matrix(inverse);
|
||||
free_matrix(temp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -524,7 +521,6 @@ mat_type* calculate_matrix_inverse(mat_type* matrix)
|
||||
"singular/ill-conditioned matrix, pivot=%e tolerance=%e\r\n",
|
||||
maxVal, pivot_tolerance);
|
||||
free_matrix(inverse);
|
||||
free_matrix(temp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -566,15 +562,11 @@ mat_type* calculate_matrix_inverse(mat_type* matrix)
|
||||
GPS_LOG(DEBUG_TRACE, GPS_LOG_CAT_NAV,
|
||||
"inverse produced non-finite value at row=%d col=%d\r\n", row, col);
|
||||
free_matrix(inverse);
|
||||
free_matrix(temp);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Free the temporary matrix
|
||||
free_matrix(temp);
|
||||
|
||||
return inverse;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
TARGET := pmod_spi_test
|
||||
APP_SRCS := pmod_spi_test.c
|
||||
BSP_SRCS := init.c uart.c plic.c irq.c spi_flash.c pmod_spi.c
|
||||
BSP_SRCS := init.c uart.c pmod_spi.c
|
||||
|
||||
# Genesys2 defaults. Board-level builds may override these on the command line.
|
||||
BSP_UART_CLOCK_HZ ?= 50000000
|
||||
BSP_CLINT_TIMEBASE_HZ ?= 500000
|
||||
|
||||
include ../common/app.mk
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,12 +1,12 @@
|
||||
MARCH=rv64imafdc_zicsr_zifencei
|
||||
MABI=lp64d
|
||||
BSP_UART_CLOCK_HZ=100000000
|
||||
BSP_UART_CLOCK_HZ=50000000
|
||||
BSP_UART_BAUDRATE=115200
|
||||
BSP_CLINT_TIMEBASE_HZ=1000000
|
||||
BSP_CLINT_TIMEBASE_HZ=500000
|
||||
BSP_DTIM_BASE=0x80000000
|
||||
BSP_DTIM_SIZE=0x00100000
|
||||
GPS_DEBUG=
|
||||
GPS_DEBUG_LEVEL=
|
||||
CFLAGS=-march=rv64imafdc_zicsr_zifencei -mabi=lp64d -mcmodel=medany -Os -ffreestanding -fno-builtin -fno-common -Wall -Wextra -I../bsp/include -DBSP_UART_CLOCK_HZ=100000000UL -DBSP_UART_BAUDRATE=115200UL -DBSP_CLINT_TIMEBASE_HZ=1000000UL -DBSP_DTIM_BASE=0x80000000UL -DBSP_DTIM_SIZE=0x00100000UL
|
||||
CFLAGS=-march=rv64imafdc_zicsr_zifencei -mabi=lp64d -mcmodel=medany -Os -ffreestanding -fno-builtin -fno-common -Wall -Wextra -I../bsp/include -DBSP_UART_CLOCK_HZ=50000000UL -DBSP_UART_BAUDRATE=115200UL -DBSP_CLINT_TIMEBASE_HZ=500000UL -DBSP_DTIM_BASE=0x80000000UL -DBSP_DTIM_SIZE=0x00100000UL -DREPORT_DURATION_S=300u
|
||||
LDFLAGS=-T ../common/linker_ram.ld -nostartfiles -static -Wl,--gc-sections -Wl,--defsym=__dtim_base=0x80000000 -Wl,--defsym=__dtim_size=0x00100000 -Wl,-Map,build/pmod_spi_test.map
|
||||
LDLIBS=-Wl,--start-group -lc -lgcc -Wl,--end-group
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+14638
-13787
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -137,34 +137,9 @@ Discarded input sections
|
||||
.bss 0x0000000000000000 0x0 build/bsp_init.c.o
|
||||
.data 0x0000000000000000 0x0 build/bsp_uart.c.o
|
||||
.bss 0x0000000000000000 0x0 build/bsp_uart.c.o
|
||||
.text 0x0000000000000000 0x3a build/bsp_plic.c.o
|
||||
.data 0x0000000000000000 0x0 build/bsp_plic.c.o
|
||||
.bss 0x0000000000000000 0x0 build/bsp_plic.c.o
|
||||
.comment 0x0000000000000000 0x1a build/bsp_plic.c.o
|
||||
.note.GNU-stack
|
||||
0x0000000000000000 0x0 build/bsp_plic.c.o
|
||||
.riscv.attributes
|
||||
0x0000000000000000 0x74 build/bsp_plic.c.o
|
||||
.text 0x0000000000000000 0x42 build/bsp_irq.c.o
|
||||
.data 0x0000000000000000 0x0 build/bsp_irq.c.o
|
||||
.bss 0x0000000000000000 0x0 build/bsp_irq.c.o
|
||||
.comment 0x0000000000000000 0x1a build/bsp_irq.c.o
|
||||
.note.GNU-stack
|
||||
0x0000000000000000 0x0 build/bsp_irq.c.o
|
||||
.riscv.attributes
|
||||
0x0000000000000000 0x78 build/bsp_irq.c.o
|
||||
.text 0x0000000000000000 0x1fa build/bsp_spi_flash.c.o
|
||||
.data 0x0000000000000000 0x0 build/bsp_spi_flash.c.o
|
||||
.bss 0x0000000000000000 0x0 build/bsp_spi_flash.c.o
|
||||
.comment 0x0000000000000000 0x1a build/bsp_spi_flash.c.o
|
||||
.note.GNU-stack
|
||||
0x0000000000000000 0x0 build/bsp_spi_flash.c.o
|
||||
.riscv.attributes
|
||||
0x0000000000000000 0x74 build/bsp_spi_flash.c.o
|
||||
.data 0x0000000000000000 0x0 build/bsp_pmod_spi.c.o
|
||||
.bss 0x0000000000000000 0x0 build/bsp_pmod_spi.c.o
|
||||
.data 0x0000000000000000 0x0 build/pmod_spi_test.c.o
|
||||
.bss 0x0000000000000000 0x0 build/pmod_spi_test.c.o
|
||||
.text 0x0000000000000000 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-printf.o)
|
||||
.data 0x0000000000000000 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-printf.o)
|
||||
.bss 0x0000000000000000 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-printf.o)
|
||||
@@ -424,9 +399,6 @@ LOAD build/common_start.S.o
|
||||
LOAD build/common_syscalls.c.o
|
||||
LOAD build/bsp_init.c.o
|
||||
LOAD build/bsp_uart.c.o
|
||||
LOAD build/bsp_plic.c.o
|
||||
LOAD build/bsp_irq.c.o
|
||||
LOAD build/bsp_spi_flash.c.o
|
||||
LOAD build/bsp_pmod_spi.c.o
|
||||
LOAD build/pmod_spi_test.c.o
|
||||
0x0000000080000000 __dtim_base = 0x80000000
|
||||
@@ -444,411 +416,418 @@ LOAD /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a
|
||||
0x0000000000004000 STACK_SIZE = DEFINED (STACK_SIZE)?STACK_SIZE:0x4000
|
||||
0x0000000080000000 . = ORIGIN (ram)
|
||||
|
||||
.text 0x0000000080000000 0x9b50
|
||||
.text 0x0000000080000000 0xa508
|
||||
*(.text.start)
|
||||
.text.start 0x0000000080000000 0x42 build/common_start.S.o
|
||||
.text.start 0x0000000080000000 0x46 build/common_start.S.o
|
||||
0x0000000080000000 _start
|
||||
*(.text .text.*)
|
||||
.text 0x0000000080000042 0x13a build/common_syscalls.c.o
|
||||
0x0000000080000042 _sbrk
|
||||
0x000000008000008c _write
|
||||
0x00000000800000cc _read
|
||||
0x000000008000010c _close
|
||||
0x0000000080000110 _fstat
|
||||
0x0000000080000132 _isatty
|
||||
0x0000000080000138 _lseek
|
||||
0x000000008000014c _getpid
|
||||
0x0000000080000150 _kill
|
||||
0x0000000080000164 _exit
|
||||
.text 0x000000008000017c 0x10 build/bsp_init.c.o
|
||||
0x000000008000017c bsp_init
|
||||
.text 0x000000008000018c 0xaa build/bsp_uart.c.o
|
||||
0x000000008000018c bsp_uart_putc
|
||||
0x00000000800001ba bsp_uart_getc_nonblocking
|
||||
0x00000000800001d2 bsp_uart_wait_tx_idle
|
||||
0x00000000800001e0 bsp_uart_init_baudrate
|
||||
0x000000008000021e bsp_uart_clock_hz
|
||||
0x0000000080000226 bsp_uart_baudrate
|
||||
0x000000008000022e bsp_uart_divisor
|
||||
.text 0x0000000080000236 0x2fc build/bsp_pmod_spi.c.o
|
||||
0x0000000080000268 bsp_pmod_spi_init
|
||||
0x0000000080000286 bsp_pmod_spi_set_mode
|
||||
0x00000000800002be bsp_pmod_spi_mode
|
||||
0x00000000800002ce bsp_pmod_spi_set_quad
|
||||
0x00000000800002d4 bsp_pmod_spi_set_timing
|
||||
0x00000000800002e6 bsp_pmod_spi_select
|
||||
0x0000000080000312 bsp_pmod_spi_deselect
|
||||
0x0000000080000342 bsp_pmod_spi_ready
|
||||
0x0000000080000356 bsp_pmod_spi_ctrl
|
||||
0x000000008000035e bsp_pmod_spi_rx
|
||||
0x0000000080000366 bsp_pmod_spi_xfer8
|
||||
0x000000008000047e bsp_pmod_spi_xfer32
|
||||
0x00000000800004a8 bsp_pmod_spi_transfer
|
||||
0x00000000800004ea bsp_pmod_spi_transaction
|
||||
0x00000000800004f0 bsp_pmod_spi_write_reg8
|
||||
0x000000008000050c bsp_pmod_spi_read_regs
|
||||
0x0000000080000514 bsp_pmod_spi_read_reg8
|
||||
.text 0x0000000080000532 0x14 build/pmod_spi_test.c.o
|
||||
.text.startup 0x0000000080000546 0x2e2 build/pmod_spi_test.c.o
|
||||
0x0000000080000546 main
|
||||
.text.printf 0x0000000080000828 0x30 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-printf.o)
|
||||
0x0000000080000828 printf
|
||||
.text.__errno 0x0000000080000858 0xa /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-errno.o)
|
||||
0x0000000080000858 __errno
|
||||
.text 0x0000000080000046 0x13a build/common_syscalls.c.o
|
||||
0x0000000080000046 _sbrk
|
||||
0x0000000080000090 _write
|
||||
0x00000000800000d0 _read
|
||||
0x0000000080000110 _close
|
||||
0x0000000080000114 _fstat
|
||||
0x0000000080000136 _isatty
|
||||
0x000000008000013c _lseek
|
||||
0x0000000080000150 _getpid
|
||||
0x0000000080000154 _kill
|
||||
0x0000000080000168 _exit
|
||||
.text 0x0000000080000180 0x10 build/bsp_init.c.o
|
||||
0x0000000080000180 bsp_init
|
||||
.text 0x0000000080000190 0xaa build/bsp_uart.c.o
|
||||
0x0000000080000190 bsp_uart_putc
|
||||
0x00000000800001be bsp_uart_getc_nonblocking
|
||||
0x00000000800001d6 bsp_uart_wait_tx_idle
|
||||
0x00000000800001e4 bsp_uart_init_baudrate
|
||||
0x0000000080000222 bsp_uart_clock_hz
|
||||
0x000000008000022a bsp_uart_baudrate
|
||||
0x0000000080000232 bsp_uart_divisor
|
||||
.text 0x000000008000023a 0x31e build/bsp_pmod_spi.c.o
|
||||
0x000000008000028e bsp_pmod_spi_init
|
||||
0x00000000800002ac bsp_pmod_spi_set_mode
|
||||
0x00000000800002e4 bsp_pmod_spi_mode
|
||||
0x00000000800002f4 bsp_pmod_spi_set_quad
|
||||
0x00000000800002fa bsp_pmod_spi_set_timing
|
||||
0x000000008000030c bsp_pmod_spi_select
|
||||
0x0000000080000338 bsp_pmod_spi_deselect
|
||||
0x0000000080000368 bsp_pmod_spi_ready
|
||||
0x000000008000037c bsp_pmod_spi_ctrl
|
||||
0x0000000080000384 bsp_pmod_spi_rx
|
||||
0x000000008000038c bsp_pmod_spi_xfer8
|
||||
0x00000000800004a4 bsp_pmod_spi_xfer32
|
||||
0x00000000800004ce bsp_pmod_spi_transfer
|
||||
0x0000000080000510 bsp_pmod_spi_transaction
|
||||
0x0000000080000516 bsp_pmod_spi_write_reg8
|
||||
0x0000000080000532 bsp_pmod_spi_read_regs
|
||||
0x000000008000053a bsp_pmod_spi_read_reg8
|
||||
.text 0x0000000080000558 0x226 build/pmod_spi_test.c.o
|
||||
.text.startup 0x000000008000077e 0x792 build/pmod_spi_test.c.o
|
||||
0x000000008000077e main
|
||||
.text.printf 0x0000000080000f10 0x30 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-printf.o)
|
||||
0x0000000080000f10 printf
|
||||
.text.__errno 0x0000000080000f40 0xa /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-errno.o)
|
||||
0x0000000080000f40 __errno
|
||||
.text._vfprintf_r
|
||||
0x0000000080000862 0x2088 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
0x0000000080000862 _vfprintf_r
|
||||
0x0000000080000f4a 0x2088 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
0x0000000080000f4a _vfprintf_r
|
||||
.text.__sbprintf
|
||||
0x00000000800028ea 0x92 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
0x0000000080002fd2 0x92 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
.text.__sprint_r
|
||||
0x000000008000297c 0x26 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-sprint_r.o)
|
||||
0x000000008000297c __sprint_r
|
||||
0x0000000080003064 0x26 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-sprint_r.o)
|
||||
0x0000000080003064 __sprint_r
|
||||
.text.__sflush_r
|
||||
0x00000000800029a2 0x1b2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fflush.o)
|
||||
0x00000000800029a2 __sflush_r
|
||||
0x000000008000308a 0x1b2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fflush.o)
|
||||
0x000000008000308a __sflush_r
|
||||
.text._fflush_r
|
||||
0x0000000080002b54 0x3c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fflush.o)
|
||||
0x0000000080002b54 _fflush_r
|
||||
0x000000008000323c 0x3c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fflush.o)
|
||||
0x000000008000323c _fflush_r
|
||||
.text.stdio_exit_handler
|
||||
0x0000000080002b90 0x16 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x0000000080003278 0x16 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
.text.cleanup_stdio
|
||||
0x0000000080002ba6 0x44 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x000000008000328e 0x44 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
.text.global_stdio_init.part.0
|
||||
0x0000000080002bea 0x10e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
.text.__sinit 0x0000000080002cf8 0x18 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x0000000080002cf8 __sinit
|
||||
0x00000000800032d2 0x10e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
.text.__sinit 0x00000000800033e0 0x18 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x00000000800033e0 __sinit
|
||||
.text.__sfp_lock_acquire
|
||||
0x0000000080002d10 0x2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x0000000080002d10 __sfp_lock_acquire
|
||||
0x00000000800033f8 0x2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x00000000800033f8 __sfp_lock_acquire
|
||||
.text.__sfp_lock_release
|
||||
0x0000000080002d12 0x2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x0000000080002d12 __sfp_lock_release
|
||||
0x00000000800033fa 0x2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x00000000800033fa __sfp_lock_release
|
||||
.text.__sfvwrite_r
|
||||
0x0000000080002d14 0x358 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fvwrite.o)
|
||||
0x0000000080002d14 __sfvwrite_r
|
||||
0x00000000800033fc 0x358 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fvwrite.o)
|
||||
0x00000000800033fc __sfvwrite_r
|
||||
.text._fwalk_sglue
|
||||
0x000000008000306c 0x7e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fwalk.o)
|
||||
0x000000008000306c _fwalk_sglue
|
||||
.text.__sread 0x00000000800030ea 0x38 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-stdio.o)
|
||||
0x00000000800030ea __sread
|
||||
0x0000000080003754 0x7e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fwalk.o)
|
||||
0x0000000080003754 _fwalk_sglue
|
||||
.text.__sread 0x00000000800037d2 0x38 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-stdio.o)
|
||||
0x00000000800037d2 __sread
|
||||
.text.__swrite
|
||||
0x0000000080003122 0x52 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-stdio.o)
|
||||
0x0000000080003122 __swrite
|
||||
.text.__sseek 0x0000000080003174 0x3e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-stdio.o)
|
||||
0x0000000080003174 __sseek
|
||||
0x000000008000380a 0x52 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-stdio.o)
|
||||
0x000000008000380a __swrite
|
||||
.text.__sseek 0x000000008000385c 0x3e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-stdio.o)
|
||||
0x000000008000385c __sseek
|
||||
.text.__sclose
|
||||
0x00000000800031b2 0x6 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-stdio.o)
|
||||
0x00000000800031b2 __sclose
|
||||
0x000000008000389a 0x6 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-stdio.o)
|
||||
0x000000008000389a __sclose
|
||||
.text.__swsetup_r
|
||||
0x00000000800031b8 0xf2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-wsetup.o)
|
||||
0x00000000800031b8 __swsetup_r
|
||||
.text.strncpy 0x00000000800032aa 0x82 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-strncpy.o)
|
||||
0x00000000800032aa strncpy
|
||||
0x00000000800038a0 0xf2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-wsetup.o)
|
||||
0x00000000800038a0 __swsetup_r
|
||||
.text.strncpy 0x0000000080003992 0x82 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-strncpy.o)
|
||||
0x0000000080003992 strncpy
|
||||
.text._localeconv_r
|
||||
0x000000008000332c 0x6 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-localeconv.o)
|
||||
0x000000008000332c _localeconv_r
|
||||
0x0000000080003a14 0x6 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-localeconv.o)
|
||||
0x0000000080003a14 _localeconv_r
|
||||
.text._close_r
|
||||
0x0000000080003332 0x30 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-closer.o)
|
||||
0x0000000080003332 _close_r
|
||||
0x0000000080003a1a 0x30 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-closer.o)
|
||||
0x0000000080003a1a _close_r
|
||||
.text._lseek_r
|
||||
0x0000000080003362 0x36 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-lseekr.o)
|
||||
0x0000000080003362 _lseek_r
|
||||
.text._read_r 0x0000000080003398 0x36 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-readr.o)
|
||||
0x0000000080003398 _read_r
|
||||
0x0000000080003a4a 0x36 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-lseekr.o)
|
||||
0x0000000080003a4a _lseek_r
|
||||
.text._read_r 0x0000000080003a80 0x36 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-readr.o)
|
||||
0x0000000080003a80 _read_r
|
||||
.text._write_r
|
||||
0x00000000800033ce 0x36 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-writer.o)
|
||||
0x00000000800033ce _write_r
|
||||
.text.memmove 0x0000000080003404 0x2f8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memmove.o)
|
||||
0x0000000080003404 memmove
|
||||
.text 0x00000000800036fc 0x192 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memset.o)
|
||||
0x00000000800036fc memset
|
||||
.text.memcpy 0x000000008000388e 0x192 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memcpy.o)
|
||||
0x000000008000388e memcpy
|
||||
.text.strlen 0x0000000080003a20 0x9a /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-strlen.o)
|
||||
0x0000000080003a20 strlen
|
||||
.text.memchr 0x0000000080003aba 0x156 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memchr.o)
|
||||
0x0000000080003aba memchr
|
||||
.text.frexpl 0x0000000080003c10 0xa0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libm_a-frexpl.o)
|
||||
0x0000000080003c10 frexpl
|
||||
0x0000000080003ab6 0x36 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-writer.o)
|
||||
0x0000000080003ab6 _write_r
|
||||
.text.memmove 0x0000000080003aec 0x2f8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memmove.o)
|
||||
0x0000000080003aec memmove
|
||||
*fill* 0x0000000080003de4 0x0
|
||||
.text 0x0000000080003de4 0x192 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memset.o)
|
||||
0x0000000080003de4 memset
|
||||
.text.memcpy 0x0000000080003f76 0x192 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memcpy.o)
|
||||
0x0000000080003f76 memcpy
|
||||
.text.strlen 0x0000000080004108 0x9a /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-strlen.o)
|
||||
0x0000000080004108 strlen
|
||||
.text.memchr 0x00000000800041a2 0x156 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memchr.o)
|
||||
0x00000000800041a2 memchr
|
||||
.text.frexpl 0x00000000800042f8 0xa0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libm_a-frexpl.o)
|
||||
0x00000000800042f8 frexpl
|
||||
.text._malloc_trim_r
|
||||
0x0000000080003cb0 0xc8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-freer.o)
|
||||
0x0000000080003cb0 _malloc_trim_r
|
||||
.text._free_r 0x0000000080003d78 0x240 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-freer.o)
|
||||
0x0000000080003d78 _free_r
|
||||
0x0000000080004398 0xc8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-freer.o)
|
||||
0x0000000080004398 _malloc_trim_r
|
||||
.text._free_r 0x0000000080004460 0x240 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-freer.o)
|
||||
0x0000000080004460 _free_r
|
||||
.text._ldtoa_r
|
||||
0x0000000080003fb8 0x168 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-ldtoa.o)
|
||||
0x0000000080003fb8 _ldtoa_r
|
||||
0x00000000800046a0 0x168 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-ldtoa.o)
|
||||
0x00000000800046a0 _ldtoa_r
|
||||
.text._ldcheck
|
||||
0x0000000080004120 0x76 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-ldtoa.o)
|
||||
0x0000000080004120 _ldcheck
|
||||
.text.__gdtoa 0x0000000080004196 0x116a /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gdtoa.o)
|
||||
0x0000000080004196 __gdtoa
|
||||
0x0000000080004808 0x76 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-ldtoa.o)
|
||||
0x0000000080004808 _ldcheck
|
||||
.text.__gdtoa 0x000000008000487e 0x116a /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gdtoa.o)
|
||||
0x000000008000487e __gdtoa
|
||||
.text.__rv_alloc_D2A.part.0
|
||||
0x0000000080005300 0x1e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x00000000800059e8 0x1e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
.text.__rv_alloc_D2A
|
||||
0x000000008000531e 0x44 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x000000008000531e __rv_alloc_D2A
|
||||
0x0000000080005a06 0x44 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x0000000080005a06 __rv_alloc_D2A
|
||||
.text.__nrv_alloc_D2A
|
||||
0x0000000080005362 0x72 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x0000000080005362 __nrv_alloc_D2A
|
||||
0x0000000080005a4a 0x72 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x0000000080005a4a __nrv_alloc_D2A
|
||||
.text.__freedtoa
|
||||
0x00000000800053d4 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x00000000800053d4 __freedtoa
|
||||
0x0000000080005abc 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x0000000080005abc __freedtoa
|
||||
.text.__quorem_D2A
|
||||
0x00000000800053e4 0x17c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x00000000800053e4 __quorem_D2A
|
||||
0x0000000080005acc 0x17c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x0000000080005acc __quorem_D2A
|
||||
.text.__rshift_D2A
|
||||
0x0000000080005560 0xa2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gmisc.o)
|
||||
0x0000000080005560 __rshift_D2A
|
||||
0x0000000080005c48 0xa2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gmisc.o)
|
||||
0x0000000080005c48 __rshift_D2A
|
||||
.text.__trailz_D2A
|
||||
0x0000000080005602 0x40 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gmisc.o)
|
||||
0x0000000080005602 __trailz_D2A
|
||||
0x0000000080005cea 0x40 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gmisc.o)
|
||||
0x0000000080005cea __trailz_D2A
|
||||
.text._malloc_r
|
||||
0x0000000080005642 0x656 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x0000000080005642 _malloc_r
|
||||
0x0000000080005d2a 0x656 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x0000000080005d2a _malloc_r
|
||||
.text.__malloc_lock
|
||||
0x0000000080005c98 0x2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mlock.o)
|
||||
0x0000000080005c98 __malloc_lock
|
||||
0x0000000080006380 0x2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mlock.o)
|
||||
0x0000000080006380 __malloc_lock
|
||||
.text.__malloc_unlock
|
||||
0x0000000080005c9a 0x2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mlock.o)
|
||||
0x0000000080005c9a __malloc_unlock
|
||||
.text._Balloc 0x0000000080005c9c 0x70 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080005c9c _Balloc
|
||||
.text._Bfree 0x0000000080005d0c 0x12 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080005d0c _Bfree
|
||||
0x0000000080006382 0x2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mlock.o)
|
||||
0x0000000080006382 __malloc_unlock
|
||||
.text._Balloc 0x0000000080006384 0x70 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080006384 _Balloc
|
||||
.text._Bfree 0x00000000800063f4 0x12 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x00000000800063f4 _Bfree
|
||||
.text.__multadd
|
||||
0x0000000080005d1e 0xf0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080005d1e __multadd
|
||||
0x0000000080006406 0xf0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080006406 __multadd
|
||||
.text.__hi0bits
|
||||
0x0000000080005e0e 0x68 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080005e0e __hi0bits
|
||||
0x00000000800064f6 0x68 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x00000000800064f6 __hi0bits
|
||||
.text.__lo0bits
|
||||
0x0000000080005e76 0xbc /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080005e76 __lo0bits
|
||||
.text.__i2b 0x0000000080005f32 0x7c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080005f32 __i2b
|
||||
0x000000008000655e 0xbc /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x000000008000655e __lo0bits
|
||||
.text.__i2b 0x000000008000661a 0x7c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x000000008000661a __i2b
|
||||
.text.__multiply
|
||||
0x0000000080005fae 0x1d0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080005fae __multiply
|
||||
0x0000000080006696 0x1d0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080006696 __multiply
|
||||
.text.__pow5mult
|
||||
0x000000008000617e 0xee /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x000000008000617e __pow5mult
|
||||
0x0000000080006866 0xee /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080006866 __pow5mult
|
||||
.text.__lshift
|
||||
0x000000008000626c 0x110 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x000000008000626c __lshift
|
||||
.text.__mcmp 0x000000008000637c 0x36 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x000000008000637c __mcmp
|
||||
.text.__mdiff 0x00000000800063b2 0x1ae /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x00000000800063b2 __mdiff
|
||||
.text.__b2d 0x0000000080006560 0xde /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080006560 __b2d
|
||||
0x0000000080006954 0x110 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080006954 __lshift
|
||||
.text.__mcmp 0x0000000080006a64 0x36 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080006a64 __mcmp
|
||||
.text.__mdiff 0x0000000080006a9a 0x1ae /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080006a9a __mdiff
|
||||
.text.__b2d 0x0000000080006c48 0xde /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080006c48 __b2d
|
||||
.text._realloc_r
|
||||
0x000000008000663e 0x468 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-reallocr.o)
|
||||
0x000000008000663e _realloc_r
|
||||
0x0000000080006d26 0x468 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-reallocr.o)
|
||||
0x0000000080006d26 _realloc_r
|
||||
.text._fclose_r
|
||||
0x0000000080006aa6 0xb2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fclose.o)
|
||||
0x0000000080006aa6 _fclose_r
|
||||
0x000000008000718e 0xb2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fclose.o)
|
||||
0x000000008000718e _fclose_r
|
||||
.text.__smakebuf_r
|
||||
0x0000000080006b58 0x106 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-makebuf.o)
|
||||
0x0000000080006b58 __smakebuf_r
|
||||
0x0000000080007240 0x106 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-makebuf.o)
|
||||
0x0000000080007240 __smakebuf_r
|
||||
.text._fstat_r
|
||||
0x0000000080006c5e 0x34 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fstatr.o)
|
||||
0x0000000080006c5e _fstat_r
|
||||
0x0000000080007346 0x34 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fstatr.o)
|
||||
0x0000000080007346 _fstat_r
|
||||
.text._isatty_r
|
||||
0x0000000080006c92 0x30 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-isattyr.o)
|
||||
0x0000000080006c92 _isatty_r
|
||||
.text._sbrk_r 0x0000000080006cc2 0x30 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-sbrkr.o)
|
||||
0x0000000080006cc2 _sbrk_r
|
||||
0x000000008000737a 0x30 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-isattyr.o)
|
||||
0x000000008000737a _isatty_r
|
||||
.text._sbrk_r 0x00000000800073aa 0x30 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-sbrkr.o)
|
||||
0x00000000800073aa _sbrk_r
|
||||
.text.__assert_func
|
||||
0x0000000080006cf2 0x40 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-assert.o)
|
||||
0x0000000080006cf2 __assert_func
|
||||
0x00000000800073da 0x40 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-assert.o)
|
||||
0x00000000800073da __assert_func
|
||||
.text._calloc_r
|
||||
0x0000000080006d32 0xa8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-callocr.o)
|
||||
0x0000000080006d32 _calloc_r
|
||||
0x000000008000741a 0xa8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-callocr.o)
|
||||
0x000000008000741a _calloc_r
|
||||
.text.__ascii_mbtowc
|
||||
0x0000000080006dda 0x3e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mbtowc_r.o)
|
||||
0x0000000080006dda __ascii_mbtowc
|
||||
0x00000000800074c2 0x3e /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mbtowc_r.o)
|
||||
0x00000000800074c2 __ascii_mbtowc
|
||||
.text.__ascii_wctomb
|
||||
0x0000000080006e18 0x20 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-wctomb_r.o)
|
||||
0x0000000080006e18 __ascii_wctomb
|
||||
0x0000000080007500 0x20 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-wctomb_r.o)
|
||||
0x0000000080007500 __ascii_wctomb
|
||||
.text.fiprintf
|
||||
0x0000000080006e38 0x32 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fiprintf.o)
|
||||
0x0000000080006e38 fiprintf
|
||||
0x0000000080007520 0x32 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-fiprintf.o)
|
||||
0x0000000080007520 fiprintf
|
||||
.text._vfiprintf_r
|
||||
0x0000000080006e6a 0xe10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
0x0000000080006e6a _vfiprintf_r
|
||||
0x0000000080007552 0xe10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
0x0000000080007552 _vfiprintf_r
|
||||
.text.__sbprintf
|
||||
0x0000000080007c7a 0x92 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
.text.abort 0x0000000080007d0c 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-abort.o)
|
||||
0x0000000080007d0c abort
|
||||
.text.raise 0x0000000080007d1c 0x6c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-signal.o)
|
||||
0x0000000080007d1c raise
|
||||
.text._kill_r 0x0000000080007d88 0x34 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-signalr.o)
|
||||
0x0000000080007d88 _kill_r
|
||||
0x0000000080008362 0x92 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
.text.abort 0x00000000800083f4 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-abort.o)
|
||||
0x00000000800083f4 abort
|
||||
.text.raise 0x0000000080008404 0x6c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-signal.o)
|
||||
0x0000000080008404 raise
|
||||
.text._kill_r 0x0000000080008470 0x34 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-signalr.o)
|
||||
0x0000000080008470 _kill_r
|
||||
.text._getpid_r
|
||||
0x0000000080007dbc 0x4 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-signalr.o)
|
||||
0x0000000080007dbc _getpid_r
|
||||
.text 0x0000000080007dc0 0x9a /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(eqtf2.o)
|
||||
0x0000000080007dc0 __eqtf2
|
||||
0x0000000080007dc0 __netf2
|
||||
.text 0x0000000080007e5a 0xb6 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(getf2.o)
|
||||
0x0000000080007e5a __getf2
|
||||
0x0000000080007e5a __gttf2
|
||||
.text 0x0000000080007f10 0xb6 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(letf2.o)
|
||||
0x0000000080007f10 __letf2
|
||||
0x0000000080007f10 __lttf2
|
||||
.text 0x0000000080007fc6 0x612 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(multf3.o)
|
||||
0x0000000080007fc6 __multf3
|
||||
.text 0x00000000800085d8 0x7f8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(subtf3.o)
|
||||
0x00000000800085d8 __subtf3
|
||||
.text 0x0000000080008dd0 0x64 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(unordtf2.o)
|
||||
0x0000000080008dd0 __unordtf2
|
||||
.text 0x0000000080008e34 0x92 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(fixtfsi.o)
|
||||
0x0000000080008e34 __fixtfsi
|
||||
.text 0x0000000080008ec6 0x52 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(floatsitf.o)
|
||||
0x0000000080008ec6 __floatsitf
|
||||
.text 0x0000000080008f18 0xc2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(extenddftf2.o)
|
||||
0x0000000080008f18 __extenddftf2
|
||||
.text 0x0000000080008fda 0x32 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(_clzsi2.o)
|
||||
0x0000000080008fda __clzdi2
|
||||
0x00000000800084a4 0x4 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-signalr.o)
|
||||
0x00000000800084a4 _getpid_r
|
||||
.text 0x00000000800084a8 0x9a /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(eqtf2.o)
|
||||
0x00000000800084a8 __eqtf2
|
||||
0x00000000800084a8 __netf2
|
||||
.text 0x0000000080008542 0xb6 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(getf2.o)
|
||||
0x0000000080008542 __getf2
|
||||
0x0000000080008542 __gttf2
|
||||
.text 0x00000000800085f8 0xb6 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(letf2.o)
|
||||
0x00000000800085f8 __letf2
|
||||
0x00000000800085f8 __lttf2
|
||||
.text 0x00000000800086ae 0x612 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(multf3.o)
|
||||
0x00000000800086ae __multf3
|
||||
.text 0x0000000080008cc0 0x7f8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(subtf3.o)
|
||||
0x0000000080008cc0 __subtf3
|
||||
.text 0x00000000800094b8 0x64 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(unordtf2.o)
|
||||
0x00000000800094b8 __unordtf2
|
||||
.text 0x000000008000951c 0x92 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(fixtfsi.o)
|
||||
0x000000008000951c __fixtfsi
|
||||
.text 0x00000000800095ae 0x52 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(floatsitf.o)
|
||||
0x00000000800095ae __floatsitf
|
||||
.text 0x0000000080009600 0xc2 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(extenddftf2.o)
|
||||
0x0000000080009600 __extenddftf2
|
||||
.text 0x00000000800096c2 0x32 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(_clzsi2.o)
|
||||
0x00000000800096c2 __clzdi2
|
||||
*(.rodata .rodata.*)
|
||||
*fill* 0x000000008000900c 0x4
|
||||
*fill* 0x00000000800096f4 0x4
|
||||
.rodata.str1.8
|
||||
0x0000000080009010 0x437 build/pmod_spi_test.c.o
|
||||
0x28b (size before relaxing)
|
||||
0x00000000800096f8 0x6df build/pmod_spi_test.c.o
|
||||
0x52e (size before relaxing)
|
||||
.rodata._vfprintf_r.str1.8
|
||||
0x0000000080009447 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
0x0000000080009dd7 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
0x5a (size before relaxing)
|
||||
*fill* 0x0000000080009447 0x1
|
||||
*fill* 0x0000000080009dd7 0x1
|
||||
.rodata._vfprintf_r
|
||||
0x0000000080009448 0x16c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
*fill* 0x00000000800095b4 0x4
|
||||
0x0000000080009dd8 0x16c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
*fill* 0x0000000080009f44 0x4
|
||||
.rodata.zeroes.0
|
||||
0x00000000800095b8 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
0x0000000080009f48 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
.rodata.blanks.1
|
||||
0x00000000800095c8 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
*fill* 0x00000000800095d8 0x8
|
||||
.rodata.cst16 0x00000000800095e0 0x60 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
0x0000000080009f58 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
*fill* 0x0000000080009f68 0x8
|
||||
.rodata.cst16 0x0000000080009f70 0x60 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
0x30 (size before relaxing)
|
||||
.rodata.memchr
|
||||
0x0000000080009640 0x20 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memchr.o)
|
||||
.rodata.cst16 0x0000000080009660 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libm_a-frexpl.o)
|
||||
0x0000000080009fd0 0x20 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-memchr.o)
|
||||
.rodata.cst16 0x0000000080009ff0 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libm_a-frexpl.o)
|
||||
0x10 (size before relaxing)
|
||||
.rodata.cst16 0x0000000080009660 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-ldtoa.o)
|
||||
.rodata.cst16 0x0000000080009ff0 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-ldtoa.o)
|
||||
0x20 (size before relaxing)
|
||||
.rodata 0x0000000080009660 0x14 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-ldtoa.o)
|
||||
.rodata 0x0000000080009ff0 0x14 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-ldtoa.o)
|
||||
.rodata.__gdtoa.str1.8
|
||||
0x0000000080009674 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gdtoa.o)
|
||||
0x000000008000a004 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gdtoa.o)
|
||||
0x1a (size before relaxing)
|
||||
.rodata.__rv_alloc_D2A.part.0.str1.8
|
||||
0x0000000080009674 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x000000008000a004 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-dmisc.o)
|
||||
0x7c (size before relaxing)
|
||||
.rodata.__multadd.str1.8
|
||||
0x0000000080009674 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x000000008000a004 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x76 (size before relaxing)
|
||||
*fill* 0x0000000080009674 0x4
|
||||
.rodata.p05.0 0x0000000080009678 0xc /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
*fill* 0x0000000080009684 0x4
|
||||
*fill* 0x000000008000a004 0x4
|
||||
.rodata.p05.0 0x000000008000a008 0xc /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
*fill* 0x000000008000a014 0x4
|
||||
.rodata.__mprec_tens
|
||||
0x0000000080009688 0xc8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x0000000080009688 __mprec_tens
|
||||
0x000000008000a018 0xc8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mprec.o)
|
||||
0x000000008000a018 __mprec_tens
|
||||
.rodata._setlocale_r.str1.8
|
||||
0x0000000080009750 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-locale.o)
|
||||
0x000000008000a0e0 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-locale.o)
|
||||
0x11 (size before relaxing)
|
||||
.rodata.str1.8
|
||||
0x0000000080009750 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-locale.o)
|
||||
0x000000008000a0e0 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-locale.o)
|
||||
0x2 (size before relaxing)
|
||||
.rodata.__assert_func.str1.8
|
||||
0x0000000080009750 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-assert.o)
|
||||
0x000000008000a0e0 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-assert.o)
|
||||
0x47 (size before relaxing)
|
||||
.rodata._ctype_
|
||||
0x0000000080009750 0x101 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-ctype_.o)
|
||||
0x0000000080009750 _ctype_
|
||||
0x000000008000a0e0 0x101 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-ctype_.o)
|
||||
0x000000008000a0e0 _ctype_
|
||||
.rodata._vfiprintf_r.str1.8
|
||||
0x0000000080009851 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
0x000000008000a1e1 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
0x37 (size before relaxing)
|
||||
*fill* 0x0000000080009851 0x3
|
||||
*fill* 0x000000008000a1e1 0x3
|
||||
.rodata._vfiprintf_r
|
||||
0x0000000080009854 0x16c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
0x000000008000a1e4 0x16c /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
.rodata.zeroes.0
|
||||
0x00000000800099c0 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
0x000000008000a350 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
.rodata.blanks.1
|
||||
0x00000000800099d0 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
.rodata 0x00000000800099e0 0x100 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(_clz.o)
|
||||
0x00000000800099e0 __clz_tab
|
||||
0x000000008000a360 0x10 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
.rodata 0x000000008000a370 0x100 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/libgcc.a(_clz.o)
|
||||
0x000000008000a370 __clz_tab
|
||||
*(.srodata .srodata.*)
|
||||
.srodata.cst8 0x0000000080009ae0 0x70 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
.srodata.cst8 0x000000008000a470 0x98 build/pmod_spi_test.c.o
|
||||
0x28 (size before relaxing)
|
||||
.srodata.cst8 0x000000008000a508 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfprintf.o)
|
||||
0x8 (size before relaxing)
|
||||
.srodata.cst8 0x0000000080009b50 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gdtoa.o)
|
||||
.srodata.cst8 0x000000008000a508 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-gdtoa-gdtoa.o)
|
||||
0x68 (size before relaxing)
|
||||
.srodata.cst8 0x0000000080009b50 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
.srodata.cst8 0x000000008000a508 0x0 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-vfiprintf.o)
|
||||
0x8 (size before relaxing)
|
||||
|
||||
.rela.dyn 0x0000000080009b50 0x0
|
||||
.rela.dyn 0x000000008000a508 0x0
|
||||
.rela.text.start
|
||||
0x0000000080009b50 0x0 build/common_start.S.o
|
||||
.rela.text 0x0000000080009b50 0x0 build/common_start.S.o
|
||||
0x0000000080009b50 . = ALIGN (0x8)
|
||||
0x000000008000a350 PROVIDE (__global_pointer$ = (. + 0x800))
|
||||
0x000000008000a508 0x0 build/common_start.S.o
|
||||
.rela.text 0x000000008000a508 0x0 build/common_start.S.o
|
||||
0x000000008000a508 . = ALIGN (0x8)
|
||||
0x000000008000ad08 PROVIDE (__global_pointer$ = (. + 0x800))
|
||||
|
||||
.data 0x0000000080009b50 0xb48
|
||||
.data 0x000000008000a508 0xb48
|
||||
*(.sdata .sdata.*)
|
||||
.sdata 0x0000000080009b50 0x4 build/bsp_pmod_spi.c.o
|
||||
*fill* 0x0000000080009b54 0x4
|
||||
.sdata 0x000000008000a508 0x4 build/bsp_pmod_spi.c.o
|
||||
*fill* 0x000000008000a50c 0x4
|
||||
.sdata._impure_ptr
|
||||
0x0000000080009b58 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-impure.o)
|
||||
0x0000000080009b58 _impure_ptr
|
||||
0x000000008000a510 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-impure.o)
|
||||
0x000000008000a510 _impure_ptr
|
||||
.sdata.__malloc_sbrk_base
|
||||
0x0000000080009b60 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x0000000080009b60 __malloc_sbrk_base
|
||||
0x000000008000a518 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000a518 __malloc_sbrk_base
|
||||
.sdata.__malloc_trim_threshold
|
||||
0x0000000080009b68 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x0000000080009b68 __malloc_trim_threshold
|
||||
0x000000008000a520 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000a520 __malloc_trim_threshold
|
||||
*(.data .data.*)
|
||||
.data._impure_data
|
||||
0x0000000080009b70 0x158 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-impure.o)
|
||||
0x0000000080009b70 _impure_data
|
||||
.data.__sglue 0x0000000080009cc8 0x18 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x0000000080009cc8 __sglue
|
||||
0x000000008000a528 0x158 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-impure.o)
|
||||
0x000000008000a528 _impure_data
|
||||
.data.__sglue 0x000000008000a680 0x18 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x000000008000a680 __sglue
|
||||
.data.__malloc_av_
|
||||
0x0000000080009ce0 0x810 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x0000000080009ce0 __malloc_av_
|
||||
0x000000008000a698 0x810 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000a698 __malloc_av_
|
||||
.data.__global_locale
|
||||
0x000000008000a4f0 0x1a8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-locale.o)
|
||||
0x000000008000a4f0 __global_locale
|
||||
0x000000008000aea8 0x1a8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-locale.o)
|
||||
0x000000008000aea8 __global_locale
|
||||
|
||||
.bss 0x000000008000a698 0x2a0
|
||||
0x000000008000a698 __bss_start = .
|
||||
.bss 0x000000008000b050 0x378
|
||||
0x000000008000b050 __bss_start = .
|
||||
*(.sbss .sbss.*)
|
||||
.sbss 0x000000008000a698 0x8 build/common_syscalls.c.o
|
||||
.sbss 0x000000008000a6a0 0x10 build/bsp_pmod_spi.c.o
|
||||
.sbss 0x000000008000b050 0x8 build/common_syscalls.c.o
|
||||
.sbss 0x000000008000b058 0x10 build/bsp_pmod_spi.c.o
|
||||
.sbss 0x000000008000b068 0x1c build/pmod_spi_test.c.o
|
||||
*fill* 0x000000008000b084 0x4
|
||||
.sbss.__stdio_exit_handler
|
||||
0x000000008000a6b0 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x000000008000a6b0 __stdio_exit_handler
|
||||
.sbss.errno 0x000000008000a6b8 0x4 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-reent.o)
|
||||
0x000000008000a6b8 errno
|
||||
*fill* 0x000000008000a6bc 0x4
|
||||
0x000000008000b088 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x000000008000b088 __stdio_exit_handler
|
||||
.sbss.errno 0x000000008000b090 0x4 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-reent.o)
|
||||
0x000000008000b090 errno
|
||||
*fill* 0x000000008000b094 0x4
|
||||
.sbss.__malloc_max_total_mem
|
||||
0x000000008000a6c0 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000a6c0 __malloc_max_total_mem
|
||||
0x000000008000b098 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000b098 __malloc_max_total_mem
|
||||
.sbss.__malloc_max_sbrked_mem
|
||||
0x000000008000a6c8 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000a6c8 __malloc_max_sbrked_mem
|
||||
0x000000008000b0a0 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000b0a0 __malloc_max_sbrked_mem
|
||||
.sbss.__malloc_top_pad
|
||||
0x000000008000a6d0 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000a6d0 __malloc_top_pad
|
||||
0x000000008000b0a8 0x8 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000b0a8 __malloc_top_pad
|
||||
*(.bss .bss.*)
|
||||
.bss.__sf 0x000000008000a6d8 0x210 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x000000008000a6d8 __sf
|
||||
.bss 0x000000008000b0b0 0xb4 build/pmod_spi_test.c.o
|
||||
*fill* 0x000000008000b164 0x4
|
||||
.bss.__sf 0x000000008000b168 0x210 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-findfp.o)
|
||||
0x000000008000b168 __sf
|
||||
.bss.__malloc_current_mallinfo
|
||||
0x000000008000a8e8 0x50 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000a8e8 __malloc_current_mallinfo
|
||||
0x000000008000b378 0x50 /tools/toolchains/rvtc-medany/lib/gcc/riscv64-unknown-elf/16.1.0/../../../../riscv64-unknown-elf/lib/libc.a(libc_a-mallocr.o)
|
||||
0x000000008000b378 __malloc_current_mallinfo
|
||||
*(COMMON)
|
||||
0x000000008000a938 __bss_end = .
|
||||
0x000000008000a940 . = ALIGN (0x10)
|
||||
0x000000008000a940 _end = .
|
||||
0x000000008000b3c8 __bss_end = .
|
||||
0x000000008000b3d0 . = ALIGN (0x10)
|
||||
0x000000008000b3d0 _end = .
|
||||
[!provide] PROVIDE (end = .)
|
||||
0x000000008000a940 __heap_start = .
|
||||
0x000000008000b3d0 __heap_start = .
|
||||
0x00000000800fc000 __heap_end = ((ORIGIN (ram) + LENGTH (ram)) - STACK_SIZE)
|
||||
0x0000000080100000 _stack_top = (ORIGIN (ram) + LENGTH (ram))
|
||||
OUTPUT(build/pmod_spi_test.elf elf64-littleriscv)
|
||||
|
||||
@@ -7,26 +7,94 @@
|
||||
#include "bsp/uart.h"
|
||||
|
||||
/* ICM-42686-P/ICM-42688-P user bank 0 registers. */
|
||||
#define ICM_DEVICE_CONFIG 0x11u
|
||||
#define ICM_TEMP_DATA1 0x1du
|
||||
#define ICM_INT_STATUS 0x2du
|
||||
#define ICM_PWR_MGMT0 0x4eu
|
||||
#define ICM_GYRO_CONFIG0 0x4fu
|
||||
#define ICM_ACCEL_CONFIG0 0x50u
|
||||
#define ICM_WHO_AM_I 0x75u
|
||||
#define ICM_DEVICE_CONFIG 0x11u
|
||||
#define ICM_TEMP_DATA1 0x1du
|
||||
#define ICM_INT_STATUS 0x2du
|
||||
#define ICM_PWR_MGMT0 0x4eu
|
||||
#define ICM_GYRO_CONFIG0 0x4fu
|
||||
#define ICM_ACCEL_CONFIG0 0x50u
|
||||
#define ICM_GYRO_CONFIG1 0x51u
|
||||
#define ICM_GYRO_ACCEL_CONFIG0 0x52u
|
||||
#define ICM_ACCEL_CONFIG1 0x53u
|
||||
#define ICM_INT_SOURCE0 0x65u
|
||||
#define ICM_WHO_AM_I 0x75u
|
||||
|
||||
#define ICM_SPI_READ 0x80u
|
||||
#define ICM_SPI_DUMMY 0xffu
|
||||
#define ICM_SPI_READ 0x80u
|
||||
#define ICM_SPI_DUMMY 0xffu
|
||||
#define ICM_DATA_READY 0x08u
|
||||
|
||||
#define ICM42686_WHO_AM_I 0x44u
|
||||
#define ICM42688_WHO_AM_I 0x47u
|
||||
#define ICM42686_WHO_AM_I 0x44u
|
||||
#define ICM42688_WHO_AM_I 0x47u
|
||||
|
||||
#define ICM_ODR_500HZ 0x0fu
|
||||
#define ICM_PWR_LOW_NOISE 0x0fu
|
||||
#define ICM_FILTER_BW_12P5HZ 0x77u
|
||||
|
||||
#define CALIBRATION_SAMPLES 2500u
|
||||
#define CALIBRATION_DISCARD 100u
|
||||
#define CALIBRATION_ATTEMPTS 3u
|
||||
#define CALIBRATION_TIMEOUT_S 8u
|
||||
#define REPORT_PERIOD_MS 500u
|
||||
#ifndef REPORT_DURATION_S
|
||||
#define REPORT_DURATION_S 60u
|
||||
#endif
|
||||
#define REPORT_COUNT ((REPORT_DURATION_S * 1000u) / REPORT_PERIOD_MS)
|
||||
|
||||
#define IMU_AXIS_COUNT 6u
|
||||
#define IMU_FIELD_COUNT 7u
|
||||
|
||||
typedef enum {
|
||||
CAPTURE_IDLE = 0,
|
||||
CAPTURE_CALIBRATION,
|
||||
CAPTURE_RUN
|
||||
} capture_mode_t;
|
||||
|
||||
typedef struct {
|
||||
int16_t temperature;
|
||||
int16_t accel[3];
|
||||
int16_t gyro[3];
|
||||
} imu_raw_sample_t;
|
||||
|
||||
static volatile capture_mode_t capture_mode = CAPTURE_IDLE;
|
||||
static volatile uint32_t calibration_discard;
|
||||
static volatile uint32_t calibration_count;
|
||||
static volatile int64_t calibration_sum[IMU_AXIS_COUNT];
|
||||
static volatile uint64_t calibration_sum_sq[IMU_AXIS_COUNT];
|
||||
|
||||
static volatile uint32_t run_window_count;
|
||||
static volatile uint32_t run_total_count;
|
||||
static volatile int64_t run_window_sum[IMU_FIELD_COUNT];
|
||||
|
||||
static volatile uint32_t invalid_sample_count;
|
||||
|
||||
static int32_t accel_bias_raw[3];
|
||||
static int32_t gyro_bias_raw[3];
|
||||
static int32_t gyro_full_scale_mdps;
|
||||
|
||||
static uint64_t time_now(void)
|
||||
{
|
||||
return bsp_read64(BSP_CLINT_MTIME);
|
||||
}
|
||||
|
||||
static uint64_t ticks_from_ms(uint32_t ms)
|
||||
{
|
||||
return ((uint64_t)BSP_CLINT_TIMEBASE_HZ * ms + 999u) / 1000u;
|
||||
}
|
||||
|
||||
static void delay_us(uint32_t us)
|
||||
{
|
||||
const uint64_t ticks =
|
||||
((uint64_t)BSP_CLINT_TIMEBASE_HZ * us + 999999u) / 1000000u;
|
||||
const uint64_t start = bsp_read64(BSP_CLINT_MTIME);
|
||||
while ((bsp_read64(BSP_CLINT_MTIME) - start) < ticks) {
|
||||
const uint64_t start = time_now();
|
||||
while ((time_now() - start) < ticks) {
|
||||
}
|
||||
}
|
||||
|
||||
static void delay_ms(uint32_t ms)
|
||||
{
|
||||
const uint64_t ticks = ticks_from_ms(ms);
|
||||
const uint64_t start = time_now();
|
||||
while ((time_now() - start) < ticks) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,96 +113,428 @@ static int16_t be16(const uint8_t *p)
|
||||
return (int16_t)(((uint16_t)p[0] << 8) | p[1]);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
static void icm_read_sample(imu_raw_sample_t *sample)
|
||||
{
|
||||
uint8_t raw[14];
|
||||
long accel_full_scale_mg;
|
||||
long gyro_full_scale_mdps;
|
||||
|
||||
printf("\nICM-42686-P/ICM-42688-P PMOD SPI test\n");
|
||||
printf("SPI MMIO: 0x%08lx, Genesys2 PMOD JC\n",
|
||||
bsp_pmod_spi_read_regs(ICM_TEMP_DATA1 | ICM_SPI_READ,
|
||||
ICM_SPI_DUMMY,
|
||||
raw,
|
||||
sizeof(raw));
|
||||
sample->temperature = be16(&raw[0]);
|
||||
sample->accel[0] = be16(&raw[2]);
|
||||
sample->accel[1] = be16(&raw[4]);
|
||||
sample->accel[2] = be16(&raw[6]);
|
||||
sample->gyro[0] = be16(&raw[8]);
|
||||
sample->gyro[1] = be16(&raw[10]);
|
||||
sample->gyro[2] = be16(&raw[12]);
|
||||
}
|
||||
|
||||
static int sample_valid(const imu_raw_sample_t *sample)
|
||||
{
|
||||
if (sample->temperature == INT16_MIN) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < 3u; ++i) {
|
||||
if ((sample->accel[i] == INT16_MIN) ||
|
||||
(sample->gyro[i] == INT16_MIN)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void capture_sample(const imu_raw_sample_t *sample)
|
||||
{
|
||||
if (!sample_valid(sample)) {
|
||||
invalid_sample_count++;
|
||||
return;
|
||||
}
|
||||
|
||||
if (capture_mode == CAPTURE_CALIBRATION) {
|
||||
if (calibration_discard != 0u) {
|
||||
calibration_discard--;
|
||||
return;
|
||||
}
|
||||
|
||||
if (calibration_count < CALIBRATION_SAMPLES) {
|
||||
const int32_t values[IMU_AXIS_COUNT] = {
|
||||
sample->accel[0], sample->accel[1], sample->accel[2],
|
||||
sample->gyro[0], sample->gyro[1], sample->gyro[2]
|
||||
};
|
||||
|
||||
for (unsigned i = 0; i < IMU_AXIS_COUNT; ++i) {
|
||||
calibration_sum[i] += values[i];
|
||||
calibration_sum_sq[i] += (uint64_t)((int64_t)values[i] * values[i]);
|
||||
}
|
||||
calibration_count++;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (capture_mode == CAPTURE_RUN) {
|
||||
run_window_sum[0] += sample->temperature;
|
||||
run_window_sum[1] += sample->accel[0];
|
||||
run_window_sum[2] += sample->accel[1];
|
||||
run_window_sum[3] += sample->accel[2];
|
||||
run_window_sum[4] += sample->gyro[0];
|
||||
run_window_sum[5] += sample->gyro[1];
|
||||
run_window_sum[6] += sample->gyro[2];
|
||||
run_window_count++;
|
||||
run_total_count++;
|
||||
}
|
||||
}
|
||||
|
||||
static int poll_data_ready(void)
|
||||
{
|
||||
if ((icm_read_reg(ICM_INT_STATUS) & ICM_DATA_READY) == 0u) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
imu_raw_sample_t sample;
|
||||
icm_read_sample(&sample);
|
||||
capture_sample(&sample);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int64_t divide_round_nearest(int64_t numerator, int64_t denominator)
|
||||
{
|
||||
if (numerator >= 0) {
|
||||
return (numerator + denominator / 2) / denominator;
|
||||
}
|
||||
return -((-numerator + denominator / 2) / denominator);
|
||||
}
|
||||
|
||||
static uint64_t integer_sqrt(uint64_t value)
|
||||
{
|
||||
uint64_t result = 0u;
|
||||
uint64_t bit = UINT64_C(1) << 62;
|
||||
|
||||
while (bit > value) {
|
||||
bit >>= 2;
|
||||
}
|
||||
while (bit != 0u) {
|
||||
if (value >= result + bit) {
|
||||
value -= result + bit;
|
||||
result = (result >> 1) + bit;
|
||||
} else {
|
||||
result >>= 1;
|
||||
}
|
||||
bit >>= 2;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static void reset_calibration_capture(void)
|
||||
{
|
||||
capture_mode = CAPTURE_IDLE;
|
||||
calibration_discard = CALIBRATION_DISCARD;
|
||||
calibration_count = 0u;
|
||||
for (unsigned i = 0; i < IMU_AXIS_COUNT; ++i) {
|
||||
calibration_sum[i] = 0;
|
||||
calibration_sum_sq[i] = 0u;
|
||||
}
|
||||
capture_mode = CAPTURE_CALIBRATION;
|
||||
}
|
||||
|
||||
static int wait_for_calibration(void)
|
||||
{
|
||||
const uint64_t timeout_ticks =
|
||||
(uint64_t)BSP_CLINT_TIMEBASE_HZ * CALIBRATION_TIMEOUT_S;
|
||||
const uint64_t start = time_now();
|
||||
|
||||
while (calibration_count < CALIBRATION_SAMPLES) {
|
||||
(void)poll_data_ready();
|
||||
if ((time_now() - start) >= timeout_ticks) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int calculate_calibration(void)
|
||||
{
|
||||
int64_t sum[IMU_AXIS_COUNT];
|
||||
uint64_t sum_sq[IMU_AXIS_COUNT];
|
||||
int64_t mean[IMU_AXIS_COUNT];
|
||||
uint64_t sigma[IMU_AXIS_COUNT];
|
||||
const int64_t accel_counts_per_g = 16384;
|
||||
|
||||
capture_mode = CAPTURE_IDLE;
|
||||
for (unsigned i = 0; i < IMU_AXIS_COUNT; ++i) {
|
||||
sum[i] = calibration_sum[i];
|
||||
sum_sq[i] = calibration_sum_sq[i];
|
||||
}
|
||||
for (unsigned i = 0; i < IMU_AXIS_COUNT; ++i) {
|
||||
mean[i] = divide_round_nearest(sum[i], CALIBRATION_SAMPLES);
|
||||
const uint64_t mean_square = sum_sq[i] / CALIBRATION_SAMPLES;
|
||||
const uint64_t square_of_mean = (uint64_t)(mean[i] * mean[i]);
|
||||
const uint64_t variance =
|
||||
mean_square > square_of_mean ? mean_square - square_of_mean : 0u;
|
||||
sigma[i] = integer_sqrt(variance);
|
||||
}
|
||||
|
||||
const uint64_t accel_norm = integer_sqrt(
|
||||
(uint64_t)(mean[0] * mean[0]) +
|
||||
(uint64_t)(mean[1] * mean[1]) +
|
||||
(uint64_t)(mean[2] * mean[2]));
|
||||
const uint64_t accel_sigma_limit = (uint64_t)accel_counts_per_g / 50u;
|
||||
const uint64_t gyro_sigma_limit =
|
||||
(uint64_t)divide_round_nearest((int64_t)32768 * 1000,
|
||||
gyro_full_scale_mdps);
|
||||
const int64_t gyro_mean_limit =
|
||||
divide_round_nearest((int64_t)32768 * 2000, gyro_full_scale_mdps);
|
||||
|
||||
int stable =
|
||||
(accel_norm >= (uint64_t)(accel_counts_per_g * 8 / 10)) &&
|
||||
(accel_norm <= (uint64_t)(accel_counts_per_g * 12 / 10));
|
||||
|
||||
for (unsigned i = 0; i < 3u; ++i) {
|
||||
if ((sigma[i] > accel_sigma_limit) ||
|
||||
(sigma[i + 3u] > gyro_sigma_limit) ||
|
||||
(mean[i + 3u] < -gyro_mean_limit) ||
|
||||
(mean[i + 3u] > gyro_mean_limit)) {
|
||||
stable = 0;
|
||||
}
|
||||
}
|
||||
|
||||
printf("cal raw mean A=%ld,%ld,%ld G=%ld,%ld,%ld norm=%lu\n",
|
||||
(long)mean[0], (long)mean[1], (long)mean[2],
|
||||
(long)mean[3], (long)mean[4], (long)mean[5],
|
||||
(unsigned long)accel_norm);
|
||||
printf("cal raw sigma A=%lu,%lu,%lu G=%lu,%lu,%lu: %s\n",
|
||||
(unsigned long)sigma[0], (unsigned long)sigma[1],
|
||||
(unsigned long)sigma[2], (unsigned long)sigma[3],
|
||||
(unsigned long)sigma[4], (unsigned long)sigma[5],
|
||||
stable ? "PASS" : "MOVING/UNSTABLE");
|
||||
|
||||
if (!stable || (accel_norm == 0u)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < 3u; ++i) {
|
||||
const int64_t expected_gravity = divide_round_nearest(
|
||||
mean[i] * accel_counts_per_g, (int64_t)accel_norm);
|
||||
accel_bias_raw[i] = (int32_t)(mean[i] - expected_gravity);
|
||||
gyro_bias_raw[i] = (int32_t)mean[i + 3u];
|
||||
}
|
||||
|
||||
printf("cal bias raw A=%ld,%ld,%ld G=%ld,%ld,%ld\n",
|
||||
(long)accel_bias_raw[0], (long)accel_bias_raw[1],
|
||||
(long)accel_bias_raw[2], (long)gyro_bias_raw[0],
|
||||
(long)gyro_bias_raw[1], (long)gyro_bias_raw[2]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void reset_run_capture(void)
|
||||
{
|
||||
capture_mode = CAPTURE_IDLE;
|
||||
run_window_count = 0u;
|
||||
run_total_count = 0u;
|
||||
for (unsigned i = 0; i < IMU_FIELD_COUNT; ++i) {
|
||||
run_window_sum[i] = 0;
|
||||
}
|
||||
capture_mode = CAPTURE_RUN;
|
||||
}
|
||||
|
||||
static uint32_t take_run_window(int64_t sum[IMU_FIELD_COUNT],
|
||||
uint32_t *total_count)
|
||||
{
|
||||
const uint32_t count = run_window_count;
|
||||
|
||||
for (unsigned i = 0; i < IMU_FIELD_COUNT; ++i) {
|
||||
sum[i] = run_window_sum[i];
|
||||
run_window_sum[i] = 0;
|
||||
}
|
||||
run_window_count = 0u;
|
||||
*total_count = run_total_count;
|
||||
return count;
|
||||
}
|
||||
|
||||
static void print_run_window(unsigned report_index)
|
||||
{
|
||||
int64_t sum[IMU_FIELD_COUNT];
|
||||
uint32_t total_count;
|
||||
const uint32_t count = take_run_window(sum, &total_count);
|
||||
|
||||
if (count == 0u) {
|
||||
printf("%02u.%03us n=0 total=%u NO POLLING DATA\n",
|
||||
(report_index * REPORT_PERIOD_MS) / 1000u,
|
||||
(report_index * REPORT_PERIOD_MS) % 1000u,
|
||||
total_count);
|
||||
return;
|
||||
}
|
||||
|
||||
double mean[IMU_FIELD_COUNT];
|
||||
for (unsigned i = 0; i < IMU_FIELD_COUNT; ++i) {
|
||||
mean[i] = (double)sum[i] / (double)count;
|
||||
}
|
||||
|
||||
const double temperature_c = 25.0 + mean[0] / 132.48;
|
||||
const double ax_g = (mean[1] - (double)accel_bias_raw[0]) / 16384.0;
|
||||
const double ay_g = (mean[2] - (double)accel_bias_raw[1]) / 16384.0;
|
||||
const double az_g = (mean[3] - (double)accel_bias_raw[2]) / 16384.0;
|
||||
const double gyro_scale_dps = (double)gyro_full_scale_mdps / 1000.0;
|
||||
const double gx_dps =
|
||||
(mean[4] - (double)gyro_bias_raw[0]) * gyro_scale_dps / 32768.0;
|
||||
const double gy_dps =
|
||||
(mean[5] - (double)gyro_bias_raw[1]) * gyro_scale_dps / 32768.0;
|
||||
const double gz_dps =
|
||||
(mean[6] - (double)gyro_bias_raw[2]) * gyro_scale_dps / 32768.0;
|
||||
|
||||
printf("%02u.%03u s | samples=%3u total=%5u | "
|
||||
"Temp=%6.3f C | "
|
||||
"Accel[g] X=% .3f Y=% .3f Z=% .3f | "
|
||||
"Gyro[dps] X=% .3f Y=% .3f Z=% .3f\n",
|
||||
(report_index * REPORT_PERIOD_MS) / 1000u,
|
||||
(report_index * REPORT_PERIOD_MS) % 1000u,
|
||||
count, total_count, temperature_c,
|
||||
ax_g, ay_g, az_g, gx_dps, gy_dps, gz_dps);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
uint8_t gyro_config0;
|
||||
uint8_t accel_config0;
|
||||
|
||||
printf("\nICM PMOD 500 Hz SPI polling test\n");
|
||||
printf("SPI=0x%08lx Genesys2 PMOD JC\n",
|
||||
(unsigned long)BSP_PMOD_SPI_BASE);
|
||||
printf("pins: CS=JC1 MOSI=JC2 MISO=JC3 SCK=JC4\n");
|
||||
printf("SPI pins: CS=JC1 MOSI=JC2 MISO=JC3 SCK=JC4\n");
|
||||
printf("INT1/JC9 is not used; samples are read by polling INT_STATUS.\n");
|
||||
|
||||
bsp_pmod_spi_init();
|
||||
bsp_pmod_spi_set_mode(BSP_PMOD_SPI_MODE_SINGLE);
|
||||
bsp_pmod_spi_set_timing(10u, 10u, 10u, 10u);
|
||||
delay_us(1000u);
|
||||
|
||||
printf("WHO_AM_I reads:");
|
||||
uint8_t who_am_i = 0u;
|
||||
for (unsigned attempt = 0; attempt < 4u; ++attempt) {
|
||||
who_am_i = icm_read_reg(ICM_WHO_AM_I);
|
||||
printf(" %02x", who_am_i);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
/*
|
||||
* Keep DEVICE_CONFIG.SPI_MODE at its reset value. Although the RTL shifts
|
||||
* and samples on the falling edge, board propagation makes it interoperate
|
||||
* with the sensor's default mode-0 timing. Switching the sensor to mode 1
|
||||
* breaks this working timing relationship on the current bitstream.
|
||||
*/
|
||||
const uint8_t who_am_i = icm_read_reg(ICM_WHO_AM_I);
|
||||
const uint8_t device_config = icm_read_reg(ICM_DEVICE_CONFIG);
|
||||
printf("DEVICE_CONFIG=0x%02x (expected 0x00)\n", device_config);
|
||||
|
||||
if (who_am_i == ICM42686_WHO_AM_I) {
|
||||
accel_full_scale_mg = 32000l;
|
||||
gyro_full_scale_mdps = 4000000l;
|
||||
printf("WHO_AM_I=0x%02x: ICM-42686-P PASS\n", who_am_i);
|
||||
} else if (who_am_i == ICM42688_WHO_AM_I) {
|
||||
accel_full_scale_mg = 16000l;
|
||||
gyro_full_scale_mdps = 2000000l;
|
||||
printf("WHO_AM_I=0x%02x: ICM-42688-P PASS\n", who_am_i);
|
||||
if (who_am_i == ICM42688_WHO_AM_I) {
|
||||
gyro_config0 = (7u << 5) | ICM_ODR_500HZ;
|
||||
accel_config0 = (3u << 5) | ICM_ODR_500HZ;
|
||||
gyro_full_scale_mdps = 15625;
|
||||
printf("WHO_AM_I=0x%02x ICM-42688-P\n", who_am_i);
|
||||
} else if (who_am_i == ICM42686_WHO_AM_I) {
|
||||
gyro_config0 = (7u << 5) | ICM_ODR_500HZ;
|
||||
accel_config0 = (4u << 5) | ICM_ODR_500HZ;
|
||||
gyro_full_scale_mdps = 31250;
|
||||
printf("WHO_AM_I=0x%02x ICM-42686-P\n", who_am_i);
|
||||
} else {
|
||||
printf("WHO_AM_I=0x%02x: FAIL (expected 0x44 or 0x47)\n", who_am_i);
|
||||
printf("SPI communication failed. DK J4: CS=1 SCK=2 MOSI=3 MISO=4 GND=7.\n");
|
||||
printf("Hold the DK SAMG55 in reset so it cannot contend for the sensor SPI bus.\n");
|
||||
printf("WHO_AM_I=0x%02x FAIL (expected 0x44 or 0x47)\n", who_am_i);
|
||||
bsp_uart_wait_tx_idle();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Enable accelerometer and gyroscope in low-noise mode. */
|
||||
icm_write_reg(ICM_PWR_MGMT0, 0x0fu);
|
||||
delay_us(50000u);
|
||||
|
||||
const uint8_t pwr = icm_read_reg(ICM_PWR_MGMT0);
|
||||
const uint8_t gyro_cfg = icm_read_reg(ICM_GYRO_CONFIG0);
|
||||
const uint8_t accel_cfg = icm_read_reg(ICM_ACCEL_CONFIG0);
|
||||
printf("PWR_MGMT0=0x%02x GYRO_CONFIG0=0x%02x ACCEL_CONFIG0=0x%02x\n",
|
||||
pwr, gyro_cfg, accel_cfg);
|
||||
printf("units: temperature=mC accel=mg gyro=mdps\n");
|
||||
|
||||
for (unsigned sample = 0; sample < 40u; ++sample) {
|
||||
const uint8_t status = icm_read_reg(ICM_INT_STATUS);
|
||||
bsp_pmod_spi_read_regs(ICM_TEMP_DATA1 | ICM_SPI_READ,
|
||||
ICM_SPI_DUMMY,
|
||||
raw,
|
||||
sizeof(raw));
|
||||
|
||||
const int16_t temp = be16(&raw[0]);
|
||||
const int16_t ax = be16(&raw[2]);
|
||||
const int16_t ay = be16(&raw[4]);
|
||||
const int16_t az = be16(&raw[6]);
|
||||
const int16_t gx = be16(&raw[8]);
|
||||
const int16_t gy = be16(&raw[10]);
|
||||
const int16_t gz = be16(&raw[12]);
|
||||
|
||||
const long temp_mc = 25000l + (long)(((int64_t)temp * 100000) / 13248);
|
||||
const long ax_mg = (long)(((int64_t)ax * accel_full_scale_mg) / 32768);
|
||||
const long ay_mg = (long)(((int64_t)ay * accel_full_scale_mg) / 32768);
|
||||
const long az_mg = (long)(((int64_t)az * accel_full_scale_mg) / 32768);
|
||||
const long gx_mdps = (long)(((int64_t)gx * gyro_full_scale_mdps) / 32768);
|
||||
const long gy_mdps = (long)(((int64_t)gy * gyro_full_scale_mdps) / 32768);
|
||||
const long gz_mdps = (long)(((int64_t)gz * gyro_full_scale_mdps) / 32768);
|
||||
|
||||
printf("%02u st=%02x T=%ld A=%ld,%ld,%ld G=%ld,%ld,%ld\n",
|
||||
sample, status, temp_mc,
|
||||
ax_mg, ay_mg, az_mg, gx_mdps, gy_mdps, gz_mdps);
|
||||
delay_us(100000u);
|
||||
if (device_config != 0x00u) {
|
||||
printf("DEVICE_CONFIG=0x%02x FAIL (SPI mode must remain 0)\n",
|
||||
device_config);
|
||||
bsp_uart_wait_tx_idle();
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("IMU read complete\n");
|
||||
/* Configuration registers are changed while accel and gyro are off. */
|
||||
delay_ms(50u);
|
||||
icm_write_reg(ICM_PWR_MGMT0, 0x00u);
|
||||
delay_ms(1u);
|
||||
icm_write_reg(ICM_INT_SOURCE0, 0x00u);
|
||||
|
||||
icm_write_reg(ICM_GYRO_CONFIG0, gyro_config0);
|
||||
icm_write_reg(ICM_ACCEL_CONFIG0, accel_config0);
|
||||
|
||||
/* Third-order UI/DEC2 filters and 12.5 Hz LPF at a 500 Hz ODR. */
|
||||
const uint8_t gyro_config1 =
|
||||
(icm_read_reg(ICM_GYRO_CONFIG1) & 0x10u) | 0xcau;
|
||||
const uint8_t accel_config1 =
|
||||
(icm_read_reg(ICM_ACCEL_CONFIG1) & 0xe1u) | 0x14u;
|
||||
icm_write_reg(ICM_GYRO_CONFIG1, gyro_config1);
|
||||
icm_write_reg(ICM_ACCEL_CONFIG1, accel_config1);
|
||||
icm_write_reg(ICM_GYRO_ACCEL_CONFIG0, ICM_FILTER_BW_12P5HZ);
|
||||
|
||||
/* Do not route data-ready to INT1; this test uses SPI polling only. */
|
||||
icm_write_reg(ICM_INT_SOURCE0, 0x00u);
|
||||
|
||||
icm_write_reg(ICM_PWR_MGMT0, ICM_PWR_LOW_NOISE);
|
||||
delay_ms(50u);
|
||||
|
||||
printf("CFG PWR=%02x GYRO=%02x ACCEL=%02x FILT=%02x G1=%02x A1=%02x\n",
|
||||
icm_read_reg(ICM_PWR_MGMT0), icm_read_reg(ICM_GYRO_CONFIG0),
|
||||
icm_read_reg(ICM_ACCEL_CONFIG0),
|
||||
icm_read_reg(ICM_GYRO_ACCEL_CONFIG0),
|
||||
icm_read_reg(ICM_GYRO_CONFIG1), icm_read_reg(ICM_ACCEL_CONFIG1));
|
||||
printf("POLL INT_SOURCE0=%02x (expected 00: INT1 disabled)\n",
|
||||
icm_read_reg(ICM_INT_SOURCE0));
|
||||
|
||||
if ((icm_read_reg(ICM_PWR_MGMT0) != ICM_PWR_LOW_NOISE) ||
|
||||
(icm_read_reg(ICM_GYRO_CONFIG0) != gyro_config0) ||
|
||||
(icm_read_reg(ICM_ACCEL_CONFIG0) != accel_config0) ||
|
||||
(icm_read_reg(ICM_GYRO_ACCEL_CONFIG0) != ICM_FILTER_BW_12P5HZ) ||
|
||||
(icm_read_reg(ICM_INT_SOURCE0) != 0x00u)) {
|
||||
printf("Sensor configuration read-back failed\n");
|
||||
bsp_uart_wait_tx_idle();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Clear any stale data-ready status before polling starts. */
|
||||
(void)icm_read_reg(ICM_INT_STATUS);
|
||||
capture_mode = CAPTURE_IDLE;
|
||||
|
||||
printf("Keep the board motionless for calibration; starting in 3 seconds.\n");
|
||||
delay_ms(3000u);
|
||||
|
||||
int calibrated = 0;
|
||||
for (unsigned attempt = 1u;
|
||||
(attempt <= CALIBRATION_ATTEMPTS) && !calibrated;
|
||||
++attempt) {
|
||||
printf("Calibration %u/%u: collecting %u samples (5 s)...\n",
|
||||
attempt, CALIBRATION_ATTEMPTS, CALIBRATION_SAMPLES);
|
||||
reset_calibration_capture();
|
||||
if (!wait_for_calibration()) {
|
||||
printf("Calibration timeout: got %u/%u polling samples.\n",
|
||||
calibration_count, CALIBRATION_SAMPLES);
|
||||
const uint8_t status = icm_read_reg(ICM_INT_STATUS);
|
||||
printf("DIAG INT_STATUS=%02x PWR=%02x\n", status,
|
||||
icm_read_reg(ICM_PWR_MGMT0));
|
||||
break;
|
||||
}
|
||||
calibrated = calculate_calibration();
|
||||
}
|
||||
|
||||
if (!calibrated) {
|
||||
capture_mode = CAPTURE_IDLE;
|
||||
icm_write_reg(ICM_PWR_MGMT0, 0x00u);
|
||||
delay_ms(1u);
|
||||
icm_write_reg(ICM_INT_SOURCE0, 0x00u);
|
||||
printf("Calibration failed; keep the kit still and restart the test.\n");
|
||||
bsp_uart_wait_tx_idle();
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Starting %u s capture: 500 Hz SPI polling, UART every 500 ms.\n",
|
||||
(unsigned)REPORT_DURATION_S);
|
||||
printf("Each line is the average of samples read in that 500 ms window.\n");
|
||||
reset_run_capture();
|
||||
|
||||
const uint64_t run_start = time_now();
|
||||
const uint64_t report_ticks = ticks_from_ms(REPORT_PERIOD_MS);
|
||||
for (unsigned report = 1u; report <= REPORT_COUNT; ++report) {
|
||||
const uint64_t deadline = run_start + (uint64_t)report * report_ticks;
|
||||
while (time_now() < deadline) {
|
||||
(void)poll_data_ready();
|
||||
}
|
||||
print_run_window(report);
|
||||
}
|
||||
|
||||
capture_mode = CAPTURE_IDLE;
|
||||
icm_write_reg(ICM_PWR_MGMT0, 0x00u);
|
||||
delay_ms(1u);
|
||||
icm_write_reg(ICM_INT_SOURCE0, 0x00u);
|
||||
(void)icm_read_reg(ICM_INT_STATUS);
|
||||
|
||||
printf("Complete: samples=%u expected<=%u invalid=%u\n",
|
||||
run_total_count, 500u * REPORT_DURATION_S,
|
||||
invalid_sample_count);
|
||||
bsp_uart_wait_tx_idle();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
monitor reset halt
|
||||
load
|
||||
|
||||
set $mie = 0
|
||||
set $mstatus = 0x6000
|
||||
set {unsigned long long}0x02004000 = 0xffffffffffffffff
|
||||
load
|
||||
set $mie = 0
|
||||
set $mstatus = 0x6000
|
||||
set $sp = (unsigned long)&_stack_top
|
||||
set $pc = _start
|
||||
monitor resume
|
||||
|
||||
@@ -275,7 +275,9 @@ def main():
|
||||
|
||||
rocket_bscan_dmi_tunnel u_rocket_bscan_dmi_tunnel (
|
||||
.tck(bscan_tck),
|
||||
.reset(fabric_reset | bscan_reset),
|
||||
// Keep the transport TAP alive while the fabric is in reset. Otherwise
|
||||
// OpenOCD cannot examine the target to diagnose a PLL/reset-ready failure.
|
||||
.reset(bscan_reset),
|
||||
.bscan_capture(bscan_capture),
|
||||
.bscan_sel(bscan_sel),
|
||||
.bscan_shift(bscan_shift),
|
||||
|
||||
Reference in New Issue
Block a user