yincheng.zhong
2025-11-23 212ccb49d3e7c7fa138c5f9d335d0b8c5a08d2a3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
o
ÿ' iã@s^ddlZddlmmZddlZddlZddlm Z   dZ
dd„Z dd„Z dd „Z d
d „ZdS) éN)ÚgeozX$GNGGA,080112.000,3949.8105069,N,11616.6876082,E,4,44,0.42,48.502,M,-6.684,M,1.0,0409*73c    CsŽt t¡}|j}tj}d}||ƒ}||k}|sdt d|fd||f¡dt  ¡vs,t 
|¡r1t  |¡ndt  |¡dt  ¡vsAt 
t¡rFt  t¡ndt  |¡t  |¡t  |¡dœ}dd|i}t t  |¡ƒ‚d}}}}}|j}tj}d   }||ƒ}||k}|sÍt d|fd
||f¡dt    ¡vs•t 
|¡ršt  |¡ndt  |¡dt  ¡vsªt 
t¡r¯t  t¡ndt  |¡t  |¡t  |¡dœ}dd|i}t t  |¡ƒ‚d}}}}}|j}tj}d }||ƒ}||k}|s;t d|fd ||f¡dt  ¡vst 
|¡rt  |¡ndt  |¡dt    ¡vst 
t¡rt  t¡ndt  |¡t  |¡t  |¡dœ}dd|i}t t  |¡ƒ‚d}}}}}dS) Ngdpœ-CêC@©ú==©zp%(py2)s
{%(py2)s = %(py0)s.latitude_deg
} == %(py10)s
{%(py10)s = %(py6)s
{%(py6)s = %(py4)s.approx
}(%(py8)s)
}ÚoriginÚpytest©Úpy0Úpy2Úpy4Úpy6Úpy8Úpy10úassert %(py12)sÚpy12g«Á\ÔÌ]@©zq%(py2)s
{%(py2)s = %(py0)s.longitude_deg
} == %(py10)s
{%(py10)s = %(py6)s
{%(py6)s = %(py4)s.approx
}(%(py8)s)
}gÇK7‰A@H@©zn%(py2)s
{%(py2)s = %(py0)s.altitude_m
} == %(py10)s
{%(py10)s = %(py6)s
{%(py6)s = %(py4)s.approx
}(%(py8)s)
})rÚ parse_originÚ
GGA_SAMPLEÚ latitude_degrÚapproxÚ
@pytest_arÚ_call_reprcompareÚ @py_builtinsÚlocalsÚ_should_repr_global_nameÚ  _safereprÚAssertionErrorÚ_format_explanationÚ longitude_degÚ
altitude_m©rÚ @py_assert1Ú @py_assert5Ú @py_assert7Ú @py_assert9Ú @py_assert3Ú @py_format11Ú @py_format13©r)ú6E:\GIT\Lawnmower_STM32H7\python\tests_hitl\test_geo.pyÚtest_parse_origin_from_gga ó
ÒÒàr+c   CsŽt d¡}|j}tj}d}||ƒ}||k}|sdt d|fd||f¡dt ¡vs,t    |¡r1t 
|¡ndt 
|¡dt ¡vsAt  t¡rFt 
t¡ndt 
|¡t 
|¡t 
|¡dœ}dd |i}t t  |¡ƒ‚d}}}}}|j }tj}d
}||ƒ}||k}|sÍt d|fd ||f¡dt ¡vs•t    |¡ršt 
|¡ndt 
|¡dt ¡vsªt  t¡r¯t 
t¡ndt 
|¡t 
|¡t 
|¡dœ}dd |i}t t  |¡ƒ‚d}}}}}|j}tj}d }||ƒ}||k}|s;t d|fd ||f¡dt ¡vst    |¡rt 
|¡ndt 
|¡dt ¡vst    t¡rt 
t¡ndt 
|¡t 
|¡t 
|¡dœ}dd |i}t t  |¡ƒ‚d}}}}}dS)Nz3949.8105,N,11616.6876,E,50.0gxz¥,CêC@rrrrrrrgµŠþÐÌ]@rgI@r)rrrrrrrrrrrrrrr r!r)r)r*Útest_parse_origin_short_formatr,r-c    CsNt t¡}d\}}}t ||||¡\}}}t |||¡\}}}   ||jd}
||jd} | |jd} t |
| | |j|j¡\} }}t j
}d}|||d}| |k}|s­t   d|fd| |f¡d t  ¡vsht  | ¡rmt  | ¡nd d
t  ¡vsyt  t ¡r~t  t   ¡nd
t  |¡d t  ¡vsŽt  |¡r“t  |¡nd t  |¡t  |¡d œ}d d|i}tt  |¡ƒ‚d}}}}t   j
}d}|||d}||k}|s#t   d|fd||f¡dt  ¡vsÜt  |¡rát  |¡ndd
t  ¡vsít  t ¡ròt  t   ¡nd
t  |¡dt  ¡vst  |¡r   t  |¡ndt  |¡t  |¡d œ}d d|i}tt  |¡ƒ‚d}}}}t j
}d}|||d}||k}|st   d|fd||f¡dt  ¡vsTt  |¡rYt  |¡ndd
t  ¡vsgt  t   ¡rlt  t ¡nd
t  |¡dt  ¡vs~t  |¡rƒt  |¡ndt  |¡t  |¡d œ}d d|i}tt  |¡ƒ‚d}}}}dS)N)g@gÀg333333ó?réég{®Gáz„?)Úabsr)zY%(py0)s == %(py9)s
{%(py9)s = %(py4)s
{%(py4)s = %(py2)s.approx
}(%(py5)s, abs=%(py7)s)
}Úeast_rtrÚeast)r    r
r Úpy5Úpy7Úpy9zassert %(py11)sÚpy11Únorth_rtÚnorthÚup_rtÚup)rrrZ
enu_to_llaZ geo_to_ecefZecefZ ecef_to_enuZ latitude_radZ longitude_radrrrrrrrrrr)rr2r8r:ZlatZlonZaltÚxÚyÚzZdxZdyZdzr1r7r9r&Ú @py_assert6Ú @py_assert8r"Ú @py_format10Ú @py_format12r)r)r*Útest_enu_roundtrip_accuracys
 
æìørBcCsÜtj}tj}d}||ƒ}||ƒ}tj}d}||ƒ}||k}|st d|fd||f¡dt    ¡vs4t 
t¡r9t  t¡ndt  |¡dt  ¡vsIt 
t¡rNt  t¡ndt  |¡t  |¡t  |¡t  |¡dt  ¡vsjt 
t¡rot  t¡ndt  |¡t  |¡t  |¡dœ }   d   d
|   i}
t t  |
¡ƒ‚d}}}}}}}}}tj}tj}d}||ƒ}||ƒ}tj}d}||ƒ}||k}|s/t d|fd||f¡dt  ¡vsÔt 
t¡rÙt  t¡ndt  |¡dt  ¡vsét 
t¡rît  t¡ndt  |¡t  |¡t  |¡t  |¡dt  ¡vs t 
t¡rt  t¡ndt  |¡t  |¡t  |¡dœ } d   d
|   i}
t t  |
¡ƒ‚d}}}}}}}}}tj}tj}d}| }||ƒ} || ƒ} tj} d }| |ƒ}| |k}|sØt d|fd | |f¡dt    ¡vs{t 
t¡r€t  t¡ndt  |¡dt    ¡vs’t 
t¡r—t  t¡ndt  |¡t  |¡t  | ¡t  | ¡dt    ¡vsµt 
t¡rºt  t¡ndt  | ¡t  |¡t  |¡d œ }dd|i}t t  |¡ƒ‚d}}}}} } }} }}dS)Ngg€V@r)zÖ%(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.heading_math_to_nav
}(%(py9)s
{%(py9)s = %(py5)s
{%(py5)s = %(py3)s.radians
}(%(py7)s)
})
} == %(py19)s
{%(py19)s = %(py15)s
{%(py15)s = %(py13)s.approx
}(%(py17)s)
}rÚmathr) r    r
Úpy3r3r4r5r6Úpy13Úpy15Úpy17Úpy19zassert %(py21)sZpy21g€f@)zÙ%(py12)s
{%(py12)s = %(py2)s
{%(py2)s = %(py0)s.heading_math_to_nav
}(%(py10)s
{%(py10)s = %(py5)s
{%(py5)s = %(py3)s.radians
}(-%(py7)s)
})
} == %(py20)s
{%(py20)s = %(py16)s
{%(py16)s = %(py14)s.approx
}(%(py18)s)
}) r    r
rDr3r4rrÚpy14Zpy16Zpy18Zpy20zassert %(py22)sZpy22)rZheading_math_to_navrCÚradiansrrrrrrrrrr)r"Ú @py_assert4r>r?Ú @py_assert10Ú @py_assert14Ú @py_assert16Z @py_assert18Ú @py_assert12Ú @py_format20Z @py_format22r%Ú @py_assert11Z @py_assert15Z @py_assert17Z @py_assert19Z @py_assert13Z @py_format21Z @py_format23r)r)r*Útest_heading_math_to_nav(s þ@þFþ\rR)ÚbuiltinsrÚ_pytest.assertion.rewriteÚ  assertionÚrewriterrCrZhitlrrr+r-rBrRr)r)r)r*Ú<module>s"