shallowlife / SC-LIO-SAM_based_relocalization

Scan Context is used to get initial guess instead of selecting by user in rviz.
24 stars 2 forks source link

重定位问题 #2

Open Rosa712 opened 4 months ago

Rosa712 commented 4 months ago

想请问作者是不是重定位初始化仅使用performSCLoopClosure()这个函数而没有使用ICPLocalizeInitialize()和ICPscanMatchGlobal()这两个函数。还有就是搜索回环后cloudScanForInitialize是不是没有重置导致不会进行下一次回环搜索,如终端所示 image image

shallowlife commented 4 months ago

你好,时间过太久了哈哈哈看了下,没清空cloudScanForInitialize的话,确实不会第二次搜索,因为只为了处理第一帧,当时想法应该是如果第一帧SC匹配失败,那么就去globalLocalizeThread线程去完成定位,即手动给方向的方法,globalLocalizeThrea线程相对独立,一直在后台跑。由于我没有过多测试,因此不清楚globalLocalizeThread线程是否能够达到“SC匹配失败,那么就去globalLocalizeThread线程去完成定位”的想法。你的"loop searching!!!"打印出现在SCloop之后,是不是说明已经又一次进行了一次SC搜索,讲道理cloudScanForInitialize都没清空你怎么进行的第二次?最方便的解决方法,config文件改一下historyKeyframeFitnessScore阈值,让它先匹配成功上哈哈哈。

Rosa712 commented 4 months ago

我的"loop searching!!!"打印出现在SCloop之后是检查有没有进行下一次回环检测,后面我尝试将cloudScanForInitialize清空,出现了如图情况,即搜索到这次播放bag新产生sc描述子,而不是从文件中加载的sc描述子 image

你好,时间过太久了哈哈哈看了下,没清空cloudScanForInitialize的话,确实不会第二次搜索,因为只为了处理第一帧,当时想法应该是如果第一帧SC匹配失败,那么就去globalLocalizeThread线程去完成定位,即手动给方向的方法,globalLocalizeThrea线程相对独立,一直在后台跑。由于我没有过多测试,因此不清楚globalLocalizeThread线程是否能够达到“SC匹配失败,那么就去globalLocalizeThread线程去完成定位”的想法。你的"loop searching!!!"打印出现在SCloop之后,是不是说明已经又一次进行了一次SC搜索,讲道理cloudScanForInitialize都没清空你怎么进行的第二次?最方便的解决方法,config文件改一下historyKeyframeFitnessScore阈值,让它先匹配成功上哈哈哈。

shallowlife commented 4 months ago

cloudScanForInitialize清空后,新雷达帧产生的SC也会加入到匹配队列,所以单纯清空cloudScanForInitialize感觉还是有些问题的。可能还需要一些其他手段哈哈,比如只匹配加载的SC和最新的SC,不加入新扫描生成的SC到匹配队列这样,或者最新生成的SC匹配完加载的SC之后,如果不成功就直接给他扔出队列,保证下一次匹配,候选队列里还是加载的SC。

Rosa712 commented 4 months ago

cloudScanForInitialize清空后,新雷达帧产生的SC也会加入到匹配队列,所以单纯清空cloudScanForInitialize感觉还是有些问题的。可能还需要一些其他手段哈哈,比如只匹配加载的SC和最新的SC,不加入新扫描生成的SC到匹配队列这样,或者最新生成的SC匹配完加载的SC之后,如果不成功就直接给他扔出队列,保证下一次匹配,候选队列里还是加载的SC。

感谢作者,我已经对代码进行修改且使用bag进行测试没有问题。但是今天在实际场景中测试出现了问题如 Initializing Fail1 the size of incoming lasercloud: 7543 QFileSystemWatcher::removePaths: list is empty QFileSystemWatcher::removePaths: list is empty the pose before initializing is: x-3.51125 y-43.3161 z-0.733442 the translation of odom relative to Map before initializing is: x-3.51125 y-43.3161 z-0.733442 the icp score in initializing process is: 1.33213 the pose after initializing process is: 0.993838 -0.0270782 -0.107503 -3.51125 0.0332231 0.99789 0.0557859 -43.3161 0.105766 -0.0590136 0.99264 -0.733441 0 0 0 1 transformTobeMapped R_P_Y: -0.0206136 0.00853096 -1.57078 the pose of odom relative to Map: x-3.51125 y-43.3161 z-0.733441 终端显示在scantomap的icp优化后位姿x-3.51125 y-43.3161 z-0.733441没有改变,这和我使用bag进行测试时不同,还有就是出现了QFileSystemWatcher::removePaths: list is empty

shallowlife commented 4 months ago

实际问题可能需要你自己调试解决了,我猜QFileSystemWatcher有可能是代码中有些发给rviz的数据有问题引起的报错。

Rosa712 commented 4 months ago

实际问题可能需要你自己调试解决了,我猜QFileSystemWatcher有可能是代码中有些发给rviz的数据有问题引起的报错。

好的 谢谢作者