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

    Micro-ros作为订阅者订阅自定义float32[] data (数组类型)话题接口,无法进入回调函数

    已定时 已固定 已锁定 已移动
    MicroROS
    自定义数组类型msg接口 microros自定义接口 micro-ros
    2
    4
    360
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 1
      1976933473
      最后由 编辑

      自定义的数组类型话题接口,在ROS2节点间测试中正常,但是当micro-ros作为订阅节点 就无法进入回调函数中。66a8ea4c-5e40-4eee-b0b7-ff4603b86215-图片.png
      9b775eea-b69c-442d-a25f-39bc9bed273c-图片.png
      27c628e1-94e8-4fa1-a3ad-6598b59ce2b5-图片.png

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

        当你在使用Micro-ROS作为订阅者订阅自定义的float32[](即浮点数组)类型的话题时,遇到无法进入回调函数的问题,可能有几个原因和解决方案需要考虑。这里列出一些常见的检查点和解决步骤:

        1. 检查ROS 2消息类型定义

        确保你的ROS 2消息类型(.msg文件)和对应的服务类型(如果有的话,.srv文件)已经正确定义,并且已经生成了对应的C/C++头文件。对于float32[],你应该在.msg文件中有一个类似下面的定义:

        # Example.msg
        float32[] data
        

        然后确保你使用ros2_cli_cpp或者类似的工具生成了C++代码。

        2. 检查Micro-ROS客户端配置

        在Micro-ROS中,你需要确保你的客户端配置(通常是colcon.meta或CMakeLists.txt中的设置)包含了必要的依赖项和消息类型。这包括消息类型的定义和任何必要的序列化/反序列化库。

        3. 检查Micro-ROS的回调实现

        确保你的回调函数签名与Micro-ROS期望的签名相匹配。对于数组类型,Micro-ROS可能期望你使用特定的数据结构或方式来接收数据。查看Micro-ROS的文档或示例代码,了解如何正确处理数组类型的数据。

        4. 调试和日志

        • 增加日志输出:在你的回调函数和其他关键位置增加日志输出,以帮助确定代码的执行流程。
        • 检查网络问题:由于Micro-ROS通常运行在资源受限的设备上,网络问题可能导致消息无法正确接收。确保网络设置正确,并且没有防火墙或路由器规则阻止消息传递。
        • 使用ROS 2命令行工具:使用ros2 topic echo等ROS 2命令行工具来检查话题上是否有数据发布,并验证数据的格式和内容。

        5. 检查Micro-ROS和ROS 2的兼容性

        确保你使用的Micro-ROS版本与ROS 2版本兼容。不匹配的版本可能会导致意外的行为或错误。

        6. 示例和文档

        查看Micro-ROS的官方文档和示例代码,看看是否有关于订阅数组类型话题的特定指导或示例。

        7. 社区支持

        如果以上步骤都无法解决问题,考虑在Micro-ROS的GitHub仓库、论坛或相关社区中寻求帮助。提供尽可能详细的描述和代码示例,以便他人更容易理解问题并提供帮助。

        通过上述步骤,你应该能够更接近问题的根源,并找到解决问题的方法。如果问题依然存在,可能需要更深入地检查Micro-ROS的底层实现或寻求专业的技术支持。


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

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

        1 条回复 最后回复 回复 引用 0
        • 1
          1976933473 @1976933473
          最后由 编辑

          @1976933473 秃头学生党求助各位大佬,请各位不吝赐教,问题解决,请大佬喝杯霸王茶姬。

          1 1 条回复 最后回复 回复 引用 0
          • 1
            1976933473 @1976933473
            最后由 编辑

            @1976933473
            我个人又经过测试,选择了LaserScan类型数据话题接口进行测试,LaserScan类型数据中有简单的数据如float32 angle_min和int32 sec 等也有float32[] ranges、float32[] intensities,
            经过测试,micro-ros作为发布节点,ROS2订阅节点可以正常获取float32[] ranges数据,

            但是ROS2作为发布节点,micro-ros作为订阅节点,如果float32[] ranges、float32[] intensities被赋值那么就无法进入micro-ros的接收回调函数中,即无法获取如何数据,
            如果float32[] ranges、float32[] intensities为空列表,可以正常获取float32 angle_min和int32 sec 等简单类型数据值!!!

            使用ubuntu22.04 ,ros2-humble, ESP32-S3运行micro-ros

            个人认为这个ROS系统bug

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