• 使用nmea+pps为激光雷达做授时,然后使用gtimu协议中的周和周内秒计算imu数据的时间戳,结果相差一秒,同样来自gps时间,到底imu和雷达的时间戳哪个是对的呢


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 战榔 2024-05-18 09:53 采纳率: 0% 浏览 11 首页/ 服务器 / 使用nmea+pps为激光雷达做授时,然后使用gtimu协议中的周和周内秒计算imu数据的时间戳,结果相差一秒,同样来自gps时间,到底imu和雷达的时间戳哪个是对的呢 unixc++自动驾驶 使用nmea+pps为激光雷达做授时,输出的时间戳差不多比ros时间戳,也就是unix时间快19s,然后使用gtimu协议中的周和周内秒计算imu数据的时间戳,得到的时间戳比ros时间戳快18s,同样来自gps时间,到底imu和雷达的时间戳相差了1s,到底哪个是对的呢?gps时间和utc时间之间的闰秒到底是相差18s还是19秒呢?imu时间戳计算代码和各个时间戳的比较 : 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • 阿里嘎多学长 2024-05-18 10:05
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      您想要解决的问题: 您想要解决的问题是关于使用NMEA+PPS为激光雷达授时,并使用GTIMU协议计算IMU数据的时间戳时,发现IMU和激光雷达的时间戳存在1秒的差异。您需要确定哪个时间戳是正确的,并理解GPS时间和UTC时间之间闰秒的差异。

      图片内容

      • 第一张图片展示了IMU时间戳的计算代码,包括如何使用GPS周和周内秒来计算时间戳。
      • 第二张图片提供了GPS时间戳、ROS时间戳和激光雷达时间戳的比较,显示了它们之间的差异。

      问题出现原因: 问题出现的原因是在授时过程中,可能存在同步误差或者计算误差。由于IMU和激光雷达的时间戳都来源于GPS时间,但与ROS时间戳相比存在差异,这可能意味着在时间戳的计算或者同步过程中有误差发生。

      问题解决方案

      1. 校准时间戳:首先,需要校准IMU和激光雷达的时间戳,确保它们与ROS时间戳同步。
      2. 检查PPS信号:确认PPS(脉冲每秒钟)信号是否准确无误地被激光雷达和IMU接收和处理。
      3. 验证GTIMU协议:检查GTIMU协议的实现是否正确,确保周和周内秒的计算无误。
      4. 考虑闰秒:了解GPS时间和UTC时间之间的闰秒差异,并在时间戳计算中考虑这一因素。

      提供代码: 由于我无法直接修改图片中的代码,我将提供一个概念性的解决方案,您可以根据这个解决方案调整您的代码。

      // 假设gps_weeks, sec_in_week, le9已经正确获取
      // 假设pps_offset是PPS信号的偏移量(可能需要根据实际情况调整)
      int pps_offset = 19; // 假设PPS信号比ROS时间快19秒
      
      // 计算IMU时间戳
      imu_msg.header.stamp.sec = gps_weeks * 604800 + (int)sec_in_week + 315964800 - pps_offset;
      imu_msg.header.stamp.nsec = (sec_in_week - (int)sec_in_week) * 1e9;
      
      // 校准激光雷达时间戳(如果需要)
      // lidar_msg.header.stamp.sec = ...;
      // lidar_msg.header.stamp.nsec = ...;
      

      代码运行方式

      • 确保您的开发环境支持C++。
      • 将上述代码片段集成到您的授时和时间戳处理流程中。
      • 运行您的自动驾驶系统,并观察时间戳是否同步。

      代码预期运行结果: 如果代码正确运行,IMU和激光雷达的时间戳应该与ROS时间戳同步,误差应该在可接受的范围内。

      推荐相关链接

      展开全部

      评论 编辑记录
    • 关注

      上午好☀️☀️☀️️
      本答案参考ChatGPT-3.5

      1. 分析问题

      根据描述,可以得到以下信息:

      • 使用 nmea+pps 为激光雷达做授时,输出的时间戳比 Unix 时间快 19s。
      • 使用 gtimu 协议中的周和周内秒计算 IMU 数据的时间戳,得到的时间戳比 Unix 时间快 18s。
      • 两者均来自 GPS 时间,但时间戳相差了 1s。
      • 要确定 GPS 时间和 UTC 时间之间的闰秒,以便确定 IMU 时间戳的正确性。
      1. 解决方案

      根据上述信息,可以得出以下解决方案:

      • 确定 GPS 时间和 UTC 时间之间的闰秒数量。根据国际地球自转服务系统(IERS)发布的数据,最近的闰秒是在 2016 年 12 月 31 日。因此,当前应该是 UTC 时间比 GPS 时间快 18s。这也解释了为什么使用 nmea+pps 授时的时间戳比 Unix 时间快 19s,而使用 gtimu 协议计算 IMU 时间戳的时间戳比 Unix 时间快 18s。
      • 确保使用的时间戳都是基于 UTC 时间。如果使用的是 GPS 时间,需要将其转换为 UTC 时间。具体方法为:将 GPS 时间加上当前的闰秒数量(即18s)即可得到 UTC 时间。
      • 确定 IMU 时间戳计算的正确性。根据代码,计算 IMU 时间戳的公式为:
      // 每周秒数:3600*24*7=604800
      // GPS 起始时间与 UTC 起始时间之间的相隔的秒数:31594800
      imu_msg.header.stamp.sec = (gps weeks * 604800) + 315964800;
      imu_msg.header.stamp.nsec = (sec in week * 1e9);
      

      因此,只需要确保 gps weeks 和 sec in week 的值是正确的即可。其中,gps weeks 应该来自 GPS 数据的 week 字段,而 sec in week 应该来自 GTIMU 协议的 TimeOfWeek 字段。如果这两个值都是正确的,则 IMU 时间戳的计算就是正确的。

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    Redis
    记录一次压测性能调优
    Java之通配符
    Android自定义 View惯性滚动效果(不使用Scroller)
    管理文件系统
    npm报错,显示certificate has expired
    / 将 Month 转换为整数:int monthAsInt = static_cast<int>(month);“static_cast”是干啥的?
    pc端使用微信扫码登录(思路篇)
    C++ Break、Continue 和 数组操作详解
    【MAPBOX基础功能】09、mapbox绘制线图层并进行添加、删除、更新、显隐等操作
  • 原文地址:https://ask.csdn.net/questions/8105338