Sylphase SDGPS
The software-defined GPS(/GNSS) toolkit
*-kf2

The Kalman filter takes the GNSS observables along with barometer, magnetometer, and IMU measurements and fuses them into a solution.

kf2 Nodes

Initialization

The one-kf2 node requires rotation to calibrate the magnetometer. Specifically, it requires about 30 degrees of rotation about the yaw axis.

Until sufficient rotation has happened, one-kf2 will output solution messages of the form {"running": false, "running_reason": "waiting for magnetic calibration"}.

If you'd like to test the one-kf2 node on live GPS data, but can't because your Infix-1 is stationary and preventing initialization, reference synthesize-sensor-measurements on how to mock sensor data to let one-kf2 initialize.

Solution output

The one-kf2 node outputs a large number of fields. Fields prefixed with an "X_" are not stabilized and should not be used.

Here is an example of the output during initialization, while one-kf2 is waiting for a GNSS fix:

{
"sdgps::interfaces::solution::SolutionPacket" : {
"X_accel_bias" : [ 0.0000000000000000, 0.0000000000000000, 0.0000000000000000 ],
"X_accel_bias_covariance" : [
[ 0.0062510749744625000, 0.0000000000000000, 0.0000000000000000 ],
[ 0.0000000000000000, 0.0062510749744625000, 0.0000000000000000 ],
[ 0.0000000000000000, 0.0000000000000000, 0.0062510749744625000 ]
],
"X_gyro_bias" : [ -0.00057706238340883890, 0.00024862855266896016, -0.00017708089326785363 ],
"X_gyro_bias_covariance" : [
[ 0.0026184345459683706, 0.00010055658221744327, -2.8116439007226303e-07 ],
[ 0.00010055658221744327, 0.0030165009458443001, -8.9736551722897655e-07 ],
[ -2.8116439007226303e-07, -8.9736551722897655e-07, 0.0030411465985336838 ]
],
"X_mag_bias" : [ 2.7433737317718951e-07, -1.9756771713252596e-08, -6.6702835713159767e-07 ],
"X_mag_bias_covariance" : [
[ 1.5422481132322387e-11, 6.0885373022384227e-13, 8.6653689808473921e-13 ],
[ 6.0885373022384227e-13, 1.7650772585281308e-11, 1.3803383320815771e-11 ],
[ 8.6653689808473921e-13, 1.3803383320815771e-11, 9.8973127237071267e-09 ]
],
"X_mag_scale" : [
[ 0.99999993988514380, -4.2241294338448780e-05, 6.2186783160690747e-06 ],
[ -4.2241294338448780e-05, 0.99996760560284337, 4.6383753166456834e-05 ],
[ 6.2186783160690747e-06, 4.6383753166456834e-05, 0.99998113066840433 ]
],
"X_receiver_time" : 0.74450000000000005,
"index" : 744,
"running" : false,
"running_reason" : "waiting for GNSS fix (not enough SVs: have 0, need >= 4)"
}
}

Here is an example of one-kf2's output when a GNSS fix has been acquired, but one-kf2 is waiting for sufficient rotation to learn the magnetic calibration:

{
"sdgps::interfaces::solution::SolutionPacket" : {
"X_accel_bias" : [ 0.0000000000000000, 0.0000000000000000, 0.0000000000000000 ],
"X_accel_bias_covariance" : [
[ 0.0062510749744625000, 0.0000000000000000, 0.0000000000000000 ],
[ 0.0000000000000000, 0.0062510749744625000, 0.0000000000000000 ],
[ 0.0000000000000000, 0.0000000000000000, 0.0062510749744625000 ]
],
"X_gyro_bias" : [ -0.00034814446450547113, 0.00031038145347773760, 0.00034203236642600410 ],
"X_gyro_bias_covariance" : [
[ 0.0018695640069675314, 0.00083119317555558638, 1.3664452635462799e-07 ],
[ 0.00083119317555558638, 0.0017438252827245190, -2.5080990695033896e-06 ],
[ 1.3664452635462799e-07, -2.5080990695033896e-06, 0.0026022086005140031 ]
],
"X_mag_bias" : [ 4.0483642951484596e-08, -6.8979717164080412e-08, -1.0750388397756641e-06 ],
"X_mag_bias_covariance" : [
[ 4.9428397236502462e-12, 2.0874630156515155e-12, 8.1285887133900700e-12 ],
[ 2.0874630156515155e-12, 4.6282453881052288e-12, 5.9920429439398657e-12 ],
[ 8.1285887133900700e-12, 5.9920429439398657e-12, 9.8132958367200180e-09 ]
],
"X_mag_scale" : [
[ 1.0000432062784419, -0.00011523997324052737, 1.4272759017946502e-05 ],
[ -0.00011523997324052737, 0.99992848366133247, 4.2476019669408644e-05 ],
[ 1.4272759017946502e-05, 4.2476019669408644e-05, 0.99997554051636595 ]
],
"X_receiver_time" : 1.8745000000000001,
"index" : 1874,
"running" : false,
"running_reason" : "waiting for magnetic calibration"
}
}

Last, here is an example of the output of one-kf2 when its initialization has completed and it's running:

{
"sdgps::interfaces::solution::SolutionPacket" : {
"X_accel_bias" : [ -0.18048637196770734, 0.18792477979030106, 0.015964156026444361 ],
"X_accel_bias_covariance" : [
[ 0.0052516867846866266, -0.00018201674006931457, -1.4103049477036328e-05 ],
[ -0.00018201674006931457, 0.0038644969223932115, 8.1091277271370536e-05 ],
[ -1.4103049477036328e-05, 8.1091277271370536e-05, 0.00073998360618490158 ]
],
"X_acceleration_body" : [ -0.23120150917534171, -0.34770449249413404, -0.15601391381734397 ],
"X_air_pressure" : 101317.85627279003,
"X_air_pressure_variance" : 0.052668079891985221,
"X_angular_velocity_body_covariance" : [
[ 0.00046256130230625848, 1.5868019069946381e-05, 4.8031976642459784e-05 ],
[ 1.5868019069946381e-05, 0.00050785895332240336, 0.00011348773814844671 ],
[ 4.8031976642459784e-05, 0.00011348773814844671, 0.00072975776732861638 ]
],
"X_clock_error" : 3.4832359219194586e-11,
"X_full_variance" : [ 1.9392267382826092e-18, 5.1283660161666337e-21, 0.11567881712563410, 0.41171758126248525, 0.18684886936110340, 2.8887857488906490e-05,
0.00010112088915041830, 4.6009676205326501e-05, 6.4482025162597981e-05, 0.00042650311939939749, 9.2902619039214203e-05, 0.00018799614315576270,
0.00031244900798181938, 0.00019214109668113226, 9.5933883787339676e-05, 0.0051860276302262134, 9.5605753007502574e-05, 0.0038411795180127001,
9.4866399789844319e-05, 0.00081205424308894566, 0.00027478884698135320, 0.00032476225769755295, 0.00027524159044036757, 0.00036145545678205668,
0.00027746016948057008, 0.00054119722112602416, 0.052668079891985221, 4.4669497022886358e-22, 95.454293023259140, 0.11527697940472093,
0.11527697940472093, 255.04794604805866, 268.02961109958136, 0.11527697940472093, 0.11527697940472093, 105.07298717033110, 0.11527697940472093,
0.11527697940472093, 0.11527697940472093, 128.60852637294118, 0.11527697940472093, 0.11527697940472093, 0.11527697940472093, 133.08394687344096,
0.11527697940472093, 0.11527697940472093, 0.11527697940472093, 0.11527697940472093, 0.11527697940472093, 227.09662512746237, 0.11527697940472093,
0.11527697940472093, 125.37966825286891, 241.87699469550040, 0.11527697940472093, 0.11527697940472093, 106.36214553242046, 0.11527697940472093,
0.11527697940472093, 0.11527697940472093, 227.09662512746237, 9.9989985144818295e-13, 1.3381342436162929e-12, 9.9989979754258927e-13,
1.2907064328315249e-12, 9.9989917614915879e-13, 1.2558634932785752e-12, 9.9854661474647929e-07, 8.5461549884154758e-05, 9.9726255877644767e-07,
7.2621742818174343e-05, 9.9591160267359386e-07, 5.9114045018200000e-05, 9.9938248152232985e-07, 9.3820910834678913e-05, 9.9915660690836896e-07,
9.1563906384414183e-05, 9.9982683681724035e-07, 9.8259547697201823e-05, 2.6968051890118244e-14, 2.6773406985200223e-14, 2.4631975678344363e-14,
9.6079617009431923e-05, 9.5046343646458374e-05, 9.5267248887398004e-05, 0.012587538211625421, 0.011290524881395184, 0.011760719072433163,
0.00046256113657096987, 0.00050785879010300280, 0.00072975761643578115 ],
"X_gravity_model_error_ecef" : [ -0.00055611772101124850, -0.00047965348788072391, -0.0013139189267081712 ],
"X_gravity_model_error_ecef_covariance" : [
[ 9.6079617009431923e-05, 1.9997435399563029e-07, 6.3658287019352012e-08 ],
[ 1.9997435399563029e-07, 9.5046343646458374e-05, 2.6618141249369612e-07 ],
[ 6.3658287019352012e-08, 2.6618141249369612e-07, 9.5267248887398004e-05 ]
],
"X_gyro_bias" : [ -0.080481829996254278, 0.024288978244777066, 0.063483838040499993 ],
"X_gyro_bias_covariance" : [
[ 6.2561302306258463e-05, 1.5868019069946381e-05, 4.8031976642459784e-05 ],
[ 1.5868019069946381e-05, 0.00010785895332240334, 0.00011348773814844671 ],
[ 4.8031976642459784e-05, 0.00011348773814844671, 0.00032975776732861641 ]
],
"X_mag_bias" : [ 9.6613560155106607e-06, -1.1861532163304550e-07, 5.1394200123299194e-07 ],
"X_mag_bias_covariance" : [
[ 3.3896150266335745e-13, -2.1128997145211674e-14, 1.1752624388816765e-14 ],
[ -2.1128997145211674e-14, 2.9135741963237695e-13, 6.1510553737059012e-14 ],
[ 1.1752624388816765e-14, 6.1510553737059012e-14, 2.5638523033521938e-13 ]
],
"X_mag_scale" : [
[ 1.0392627665592986, 0.050415112641695611, 0.071950709561908147 ],
[ 0.050415112641695611, 0.99111452672760159, 0.011878091697234701 ],
[ 0.071950709561908147, 0.011878091697234701, 0.98422188384190501 ]
],
"X_magnetic_model_error_ecef" : [ 7.6250392784308454e-08, -1.5979266393438775e-07, 8.0953233689721494e-08 ],
"X_magnetic_model_error_ecef_covariance" : [
[ 2.6968051890118244e-14, 1.7566511309685556e-16, 4.2537337285268781e-16 ],
[ 1.7566511309685556e-16, 2.6773406985200223e-14, -2.7560418556311284e-16 ],
[ 4.2537337285268781e-16, -2.7560418556311284e-16, 2.4631975678344363e-14 ]
],
"X_position_relative_position_orientation_ecef_covariance" : [
[ 0.10884929339847631, -0.029905312893828341, -0.012410735816970385, 1.6505430071468742e-05, -2.6703755437856381e-06,
-5.5723015739984618e-06, -2.6795237984903021e-07, 5.1547171664287170e-06, 2.6116443578531451e-07 ],
[ -0.029905312893828341, 0.41854710498964298, -0.074869402386322947, -3.5019327925837653e-05, 4.2664083324627360e-05,
3.5103912569032459e-05, -2.1136149098196934e-06, 1.0721153105063062e-06, -5.5004032954649051e-07 ],
[ -0.012410735816970385, -0.074869402386322947, 0.18684886936110340, 8.5013988869948428e-06, 4.4911634975255826e-07,
2.7786150713587596e-06, -1.7205236236137841e-06, 1.8252990851041101e-07, -6.6783201287092739e-07 ],
[ 1.6505430071468742e-05, -3.5019327925837653e-05, 8.5013988869948428e-06, 2.7227845149042640e-05, -7.2145670192810585e-06,
-3.4541956551839958e-06, -6.9769702113095278e-07, 3.8826844989445946e-06, -4.6191194142644380e-07 ],
[ -2.6703755437856381e-06, 4.2664083324627360e-05, 4.4911634975255826e-07, -7.2145670192810585e-06, 0.00010277155382785515,
-2.0591586332792516e-05, -2.5404084766653199e-07, -1.4235750122543225e-06, 1.7267269807496640e-07 ],
[ -5.5723015739984618e-06, 3.5103912569032459e-05, 2.7786150713587596e-06, -3.4541956551839958e-06, -2.0591586332792516e-05,
4.6009676205326501e-05, 3.4077655493272696e-08, -2.5140894954885677e-06, 5.0156768268595319e-07 ],
[ -2.6795237984903021e-07, -2.1136149098196934e-06, -1.7205236236137841e-06, -6.9769702113095278e-07, -2.5404084766653199e-07,
3.4077655493272696e-08, 5.7051074030288172e-05, -3.0922825306205449e-05, 1.1669853522518272e-05 ],
[ 5.1547171664287170e-06, 1.0721153105063062e-06, 1.8252990851041101e-07, 3.8826844989445946e-06, -1.4235750122543225e-06,
-2.5140894954885677e-06, -3.0922825306205449e-05, 0.00043393407053170718, -0.00011165899903668155 ],
[ 2.6116443578531451e-07, -5.5004032954649051e-07, -6.6783201287092739e-07, -4.6191194142644380e-07, 1.7267269807496640e-07,
5.0156768268595319e-07, 1.1669853522518272e-05, -0.00011165899903668155, 9.2902619039214176e-05 ]
],
"X_receiver_time" : 16.292500000000000,
"X_relative_position_orientation_enu_covariance" : [
[ 2.6665488061145768e-05, -3.8601555594889076e-06, -5.6974120458366045e-06, -2.3036604032955447e-07, 1.4635460459683995e-06, -3.4495572669071674e-06 ],
[ -3.8601555594889067e-06, 4.2889123076655200e-05, -1.4464218275396678e-05, -4.6768060058406926e-07, -1.0571037726831602e-06, 2.9707853489625697e-06 ],
[ -5.6974120458366054e-06, -1.4464218275396681e-05, 0.00010645446404442334, 2.1110858296818866e-07, 2.4185102701345007e-07, -3.3223453768660718e-07 ],
[ -2.3036604032955445e-07, -4.6768060058406926e-07, 2.1110858296818866e-07, 5.5587670110695105e-05, 7.0172107680545180e-06, -1.9092143707189543e-05 ],
[ 1.4635460459683993e-06, -1.0571037726831602e-06, 2.4185102701345007e-07, 7.0172107680545189e-06, 8.0236891559480914e-05, -8.9968587373251942e-05 ],
[ -3.4495572669071670e-06, 2.9707853489625697e-06, -3.3223453768660739e-07, -1.9092143707189540e-05, -8.9968587373251928e-05, 0.00044806320193103354 ]
],
"X_velocity_body_covariance" : [
[ 0.00017781362023856838, 1.9077285207047412e-05, 4.1040669193979391e-05 ],
[ 1.9077285207047412e-05, 0.00020229257208371714, 2.2440744890032931e-05 ],
[ 4.1040669193979391e-05, 2.2440744890032931e-05, 0.00030051291848938357 ]
],
"X_velocity_ecef_covariance" : [
[ 0.00018450193138135060, -1.6346796473175603e-05, -1.8548570255729477e-05 ],
[ -1.6346796473175603e-05, 0.00031593624309134225, -2.2613747904627459e-05 ],
[ -1.8548570255729477e-05, -2.2613747904627459e-05, 0.00019214109668113226 ]
],
"X_velocity_enu_covariance" : [
[ 0.00018251903751219460, -1.7792084923712690e-05, -1.2007365935205686e-05 ],
[ -1.7792084923712687e-05, 0.00020578540032081309, -4.3901574881861697e-05 ],
[ -1.2007365935205684e-05, -4.3901574881861691e-05, 0.00030427483332081740 ]
],
"angular_velocity_body" : [ 0.081646262333019110, -0.039265244071737274, 0.94183168781555071 ],
"index" : 16292,
"orientation_ecef" : {
"w" : -0.37589861217999027,
"x" : -0.13999364985319315,
"y" : -0.46792980519561655,
"z" : 0.78749203727500072
},
"orientation_enu" : {
"w" : -0.36462144291409859,
"x" : 0.014195353066640524,
"y" : 0.012052985895440845,
"z" : 0.93096961327938010
},
"position_ecef" : [ 740883.02743816178, -5497747.6232617674, 3136908.3360938709 ],
"relative_position_ecef" : [ 7.0101814344525337e-05, 0.0073388120799791068, 0.0060512408004197620 ],
"relative_position_enu" : [ 0.0010496010844138085, 0.0088523868763818268, -0.0033187612732383468 ],
"running" : true,
"time" : {
"fs" : 292499998218732,
"sec" : 1194020116
},
"velocity_body" : [ -0.045883884025517331, -0.052821583770864537, -0.010028930665227462 ],
"velocity_ecef" : [ -0.0083907485703161831, 0.044362819513334491, 0.054383504474009123 ],
"velocity_enu" : [ -0.0023907510605262069, 0.069567221785036285, -0.012276641971471287 ]
}
}