一次从文本中读取时间戳的过程

在一些SLAM数据集中,有的时候需要将数据集提供的groundtruh转换下格式,例如转换成TUM的格式,那么就需要读取位姿的时间戳,并保存到txt文件中,但是时间戳一般都是比较大的值,如

#timestamp, p_RS_R_x [m], p_RS_R_y [m], p_RS_R_z [m], q_RS_w [], q_RS_x [], q_RS_y [], q_RS_z [], v_RS_R_x [m s^-1], v_RS_R_y [m s^-1], v_RS_R_z [m s^-1], b_w_RS_S_x [rad s^-1], b_w_RS_S_y [rad s^-1], b_w_RS_S_z [rad s^-1], b_a_RS_S_x [m s^-2], b_a_RS_S_y [m s^-2], b_a_RS_S_z [m s^-2]
1403638519492829440,4.460675,-1.680515,0.579614,0.238261,-0.757610,-0.348629,-0.497711,0.006246,-0.001431,-0.004391,-0.001806,0.020940,0.076870,-0.020544,0.124837,0.061800

那么在读取文件,将其写入到另外一个txt文件的时候,直接将dStamp输入到txt文件中就会出现精度损失,

Vector3d p_wi;
Quaterniond q_wi;
q_wi = Quaterniond(estimator.Rs[WINDOW_SIZE]);
p_wi = estimator.Ps[WINDOW_SIZE];
vPath_to_draw.push_back(p_wi);
double dStamp = estimator.Headers[WINDOW_SIZE];
mav_poses<<dStamp  <<" "<<p_wi(0)<<" "<<p_wi(1)<<" "<<p_wi(2)<<" "<<q_wi.x()<<" "<<q_wi.y()<<" "<<q_wi.z()<<" "<<q_wi.w()<<endl;

存储到txt中的时间戳将变为

1.4036e+18

显然这是不合理的,正确的做法是

mav_poses<<std::to_string(dStamp/ 1e9)

即利用to_string函数,保证精度。
具体的解释,参考 https://www.cnblogs.com/chorulex/p/7660187.html \url{https://www.cnblogs.com/chorulex/p/7660187.html} https://www.cnblogs.com/chorulex/p/7660187.html
另外在EuRoC数据中,注意其中groundtruth的格式,timestamp,tx,ty,tz,qw,qx,qy,qz,…
这个顺序需要注意。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值