首先是时间,点云的时间是绝对时间,所以不能用加法
修改过后,scan start和end差距过大,六十多秒。
这里的timestamp要double转float,这里有个古老知识要复习,float是32位,有23位是数字,为什么只有8位一样?
首先,float 是 32位, 其中有23位用于存放尾数, 带有一个固定隐含位… 所以float的有24个二进制有效位位数.
其次,2^24共有8个十进制位. 所以有些编译器 float的有效数字位是 8位 , 有些有效数字位是 7位.(注意不是小数的位数, 是有效数字位)
而double有15~16位有效数字。
所以,timestamp用float是装不下的,所以需要把lio-sam的数据结构改double,从需求看,整数秒有10位,多出5位比毫秒还低,足够用了。
然后直接改VelodynePointXYZIRT的time数据类型为double就好了
不一定要修改这个,只是因为using PointXYZIRT = VelodynePointXYZIRT;
自己定义一个
最后就是回到问题原点,这里不要再加float转换了,不然白改。