JokerJohn / LIO_SAM_6AXIS

LIO_SAM for 6-axis IMU and GNSS.
630 stars 124 forks source link

simpleGpsOdom 关于 error origin ? #53

Closed sywinyin closed 1 year ago

sywinyin commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

JokerJohn commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

sywinyin commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

感谢您及时的回复。 那么为什么,要使用三个一样的条件呢? if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000)

JokerJohn commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

感谢您及时的回复。 那么为什么,要使用三个一样的条件呢? if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000)

随便设置的工程阈值,一般不会超过这个数值,不必纠结。

sywinyin commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

感谢您及时的回复。 那么为什么,要使用三个一样的条件呢? if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000)

随便设置的工程阈值,一般不会超过这个数值,不必纠结。

随便设置的阈值,我理解的。 我的意思,为什么不是 if (abs(enu.x()) > 10000 || abs(enu.y()) > 10000 || abs(enu.z()) > 10000)

JokerJohn commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

感谢您及时的回复。 那么为什么,要使用三个一样的条件呢? if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000)

随便设置的工程阈值,一般不会超过这个数值,不必纠结。

随便设置的阈值,我理解的。 我的意思,为什么不是 if (abs(enu.x()) > 10000 || abs(enu.y()) > 10000 || abs(enu.z()) > 10000)

明白你的意思了,这个是笔误了,下波更新再改吧。

sywinyin commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

感谢您及时的回复。 那么为什么,要使用三个一样的条件呢? if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000)

随便设置的工程阈值,一般不会超过这个数值,不必纠结。

随便设置的阈值,我理解的。 我的意思,为什么不是 if (abs(enu.x()) > 10000 || abs(enu.y()) > 10000 || abs(enu.z()) > 10000)

明白你的意思了,这个是笔误了,下波更新再改吧。

OK ,感谢您。 另外,想问一下的是, 原点是在 *.launch里 这里设置的吗? image

JokerJohn commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

感谢您及时的回复。 那么为什么,要使用三个一样的条件呢? if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000)

随便设置的工程阈值,一般不会超过这个数值,不必纠结。

随便设置的阈值,我理解的。 我的意思,为什么不是 if (abs(enu.x()) > 10000 || abs(enu.y()) > 10000 || abs(enu.z()) > 10000)

明白你的意思了,这个是笔误了,下波更新再改吧。

OK ,感谢您。 另外,想问一下的是, 原点是在 *.launch里 这里设置的吗? image

对,launch中修改原点是为了rviz-satellite插件可视化时候的正确显示。

sywinyin commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

感谢您及时的回复。 那么为什么,要使用三个一样的条件呢? if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000)

随便设置的工程阈值,一般不会超过这个数值,不必纠结。

随便设置的阈值,我理解的。 我的意思,为什么不是 if (abs(enu.x()) > 10000 || abs(enu.y()) > 10000 || abs(enu.z()) > 10000)

明白你的意思了,这个是笔误了,下波更新再改吧。

OK ,感谢您。 另外,想问一下的是, 原点是在 *.launch里 这里设置的吗? image

对,launch中修改原点是为了rviz-satellite插件可视化时候的正确显示。

我运行的campus_large_dataset.bag, if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000) 这个条件被激活了, 我应该怎么做呢, 是要在launch里修改原点吗?

JokerJohn commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

感谢您及时的回复。 那么为什么,要使用三个一样的条件呢? if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000)

随便设置的工程阈值,一般不会超过这个数值,不必纠结。

随便设置的阈值,我理解的。 我的意思,为什么不是 if (abs(enu.x()) > 10000 || abs(enu.y()) > 10000 || abs(enu.z()) > 10000)

明白你的意思了,这个是笔误了,下波更新再改吧。

OK ,感谢您。 另外,想问一下的是, 原点是在 *.launch里 这里设置的吗? image

对,launch中修改原点是为了rviz-satellite插件可视化时候的正确显示。

我运行的campus_large_dataset.bag, if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000) 这个条件被激活了, 我应该怎么做呢, 是要在launch里修改原点吗?

launch里修改原点不会影响算法。两个办法。

  1. 如果你确保转换后的ENU坐标无误,可以注释掉这几行代码。
  2. bag包播放的起点选择GNSS状态比较好的位置,比如RTK fix区域。
sywinyin commented 1 year ago

感谢作者。 image simpleGpsOdom.cpp第66行,或运算的三个条件都是一样的,有没有问题? 另外,为何这样子判断就是Error Origin ?

如果起点ENU坐标太大,说明起点和坐标原点距离太远了(10km),球面当作平面处理的话,z的误差就会很大。建议重新设定ENU原点。

感谢您及时的回复。 那么为什么,要使用三个一样的条件呢? if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000)

随便设置的工程阈值,一般不会超过这个数值,不必纠结。

随便设置的阈值,我理解的。 我的意思,为什么不是 if (abs(enu.x()) > 10000 || abs(enu.y()) > 10000 || abs(enu.z()) > 10000)

明白你的意思了,这个是笔误了,下波更新再改吧。

OK ,感谢您。 另外,想问一下的是, 原点是在 *.launch里 这里设置的吗? image

对,launch中修改原点是为了rviz-satellite插件可视化时候的正确显示。

我运行的campus_large_dataset.bag, if (abs(enu.x()) > 10000 || abs(enu.x()) > 10000 || abs(enu.x()) > 10000) 这个条件被激活了, 我应该怎么做呢, 是要在launch里修改原点吗?

launch里修改原点不会影响算法。两个办法。

  1. 如果你确保转换后的ENU坐标无误,可以注释掉这几行代码。
  2. bag包播放的起点选择GNSS状态比较好的位置,比如RTK fix区域。

第1点试过了,地图乱飞。 第2点还没试。 谢谢您。

JokerJohn commented 1 year ago

想起来了,出现这个可能的原意是下面这行代码,你的精度和纬度的位置放反了,导致出现ENU坐标超过10000,这是明显不正常的。请检查经纬度是否填反了,大概率是这个原因。