鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    stm32上报数据与ubuntu直连雷达之间的时间同步问题

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    时间戳 数据同步
    3
    5
    301
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 剑心剑
      剑心
      最后由 编辑

      a765deac-75e8-4e89-a286-61bbdd5f24e5-image.png
      上图是我的小车的模块关系,可是在时间戳同步时遭难了:

      **1.信息:**stm32接收了imu和霍尔传感器的数据,计算得到了/imu,/odom,时间戳使用的是stm32自带定时器提供的。
      **2.信息:**雷达使用的是这一款,我测试时直连ubuntu安装sdk后可以在ros中直接ros2 topic echo /scan数据,时间戳为ubuntu给的时间戳。
      **3.问题:**32的实际戳与ubuntu的时间戳并不一致,这样给ros2应该没法car建图才是!!

      解决猜想:(大家在做小车时是如何解决这个问题的呢?)
      1.是否有一种办法能把32和ubuntu的时间同步起来,实现难度如何。
      2.是否可以假定ubuntu通过串口接收到odom,imu以及直接接收到scan都是实时的,然后在话题发布给car建图节点时再同意分派时间戳,这样会有什么限制 或问题吗?

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        在处理STM32与Ubuntu(特别是在使用ROS2进行机器人开发时)之间的时间同步问题时,确实需要仔细考虑时间戳的准确性和一致性。下面我将针对你提出的问题和猜想给出一些建议和解决方案。

        1. 时间同步方法

        方法一:NTP(网络时间协议)

        对于STM32和Ubuntu之间的时间同步,如果STM32可以通过网络连接到Ubuntu(或者至少可以通过某种方式访问互联网),你可以使用NTP来同步时间。但是,通常STM32微控制器不直接支持NTP,你可能需要实现一个简单的NTP客户端或使用一个已经存在的库(如uIP的NTP客户端)。

        实现难度:中等。需要一定的网络编程和网络协议理解,以及对STM32的编程能力。

        方法二:PTP(精确时间协议)

        对于需要更高精度时间同步的应用,可以考虑使用PTP。PTP通常用于工业级和实时系统中,以提供微秒级的时间同步。但是,它的实现比较复杂,并且需要支持PTP的硬件和网络基础设施。

        实现难度:高。需要专业的网络和时间同步知识,以及支持PTP的硬件。

        方法三:软件同步

        在你的情况下,一个更简单的方法是使用软件来同步时间。例如,你可以在STM32上记录一个相对于某个固定点(如开机时刻)的时间偏移,然后在Ubuntu端通过某种方式(如串口通信)获取这个偏移,并在处理数据时相应地调整时间戳。

        实现难度:低。主要涉及到时间戳的计算和串口通信。

        2. 话题发布时统一时间戳

        你的第二个猜想是可行的,即在Ubuntu端接收到来自STM32的数据(odom, imu)和雷达数据(scan)后,在发布到ROS2话题之前,统一为当前Ubuntu系统的时间戳。

        限制或问题:

        • 时间延迟:这种方法会引入一定的时间延迟,因为数据从STM32到达Ubuntu并经过处理后再发布,这段时间会被加入到时间戳中。对于某些对时间要求极高的应用(如高速移动中的机器人定位),这可能是一个问题。
        • 数据一致性:如果STM32和Ubuntu的时间差异较大,或者数据在传输过程中有延迟,那么使用统一的时间戳可能会导致数据在时间上不连续或不一致。

        结论

        考虑到你的应用场景(小车建图),我建议首先尝试使用软件同步的方法,即在STM32上记录一个相对时间偏移,并在Ubuntu端调整时间戳。如果这种方法不能满足你的需求(例如,由于时间延迟过大),你可以考虑使用NTP或PTP进行更精确的时间同步。

        另外,无论采用哪种方法,都应该在系统中进行充分的测试,以确保时间同步的准确性和可靠性。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        剑心剑 1 条回复 最后回复 回复 引用 0
        • 剑心剑
          剑心 @小伊
          最后由 编辑

          @小伊 谢谢小姨,我去试试

          1 条回复 最后回复 回复 引用 0
          • 小伊小
            机器人小伊
            最后由 编辑

            不客气,亲爱的!勇敢去尝试吧,无论结果如何,重要的是你敢于迈出那一步。我相信你会做得很好,加油!如果过程中遇到任何问题或需要帮助,随时告诉我哦。


            以上为生成回答,仅供参考~

            我是小伊,已接入ChatGpt,所有回复,仅供参考~

            1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @剑心
              最后由 编辑

              @剑心 传输速度足够快,时间可以忽略,也可以参考fishbot做时间同步

              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

              1 条回复 最后回复 回复 引用 0
              • 第一个帖子
                最后一个帖子
              皖ICP备16016415号-7
              Powered by NodeBB | 鱼香ROS