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

    ros2 自定义 oled srv 服务,编译找不到 <fishbot_interfaces/srv/oled_control.h>

    已定时 已固定 已锁定 已移动 未解决
    ROS 2相关问题
    ros2 humble 自定义接口
    4
    4
    341
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • J
      joe
      最后由 编辑

      报错信息如下:
      屏幕截图 2024-08-18 214552.png

      目录结构如下:
      屏幕截图 2024-08-18 214659.png

      如图,按照鱼哥的ros2动手教程弄的 extra_packages下就是fishbot_interfaces,目录如下:
      屏幕截图 2024-08-18 214931.png

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

        要解决你在ROS 2项目中遇到的找不到自定义服务文件(<fishbot_interfaces/srv/oled_control.h>)的问题,首先需要确保你的服务定义已经被正确包含在你的项目中,并且你的项目设置正确以包含这些文件。以下是一些步骤和建议,帮助你解决这个问题:

        1. 检查服务定义

        首先,确保你已经在fishbot_interfaces包中正确定义了oled_control.srv服务文件。通常,这个文件位于fishbot_interfaces/srv目录下,并且文件扩展名为.srv。

        例如,fishbot_interfaces/srv/oled_control.srv的内容可能看起来像这样:

        ---
        int32 message
        ---
        bool success
        

        2. 检查CMakeLists.txt

        在fishbot_interfaces包的CMakeLists.txt文件中,确保你已经使用find_package指令来查找依赖(如果有的话),并且已经通过rosidl_generate_interfaces来生成ROS 2接口文件。

        例如:

        cmake_minimum_required(VERSION 3.0.2)
        project(fishbot_interfaces)
        
        # Find dependencies
        find_package(ament_cmake REQUIRED)
        find_package(rosidl_default_generators REQUIRED)
        
        # Generate interfaces
        rosidl_generate_interfaces(${PROJECT_NAME}
          "srv/oled_control.srv"
        )
        
        ament_package()
        

        3. 检查setup.py

        如果你的ROS 2包是一个Python包,setup.py也需要包含你的服务定义。通常,在纯C++项目中这一步可以跳过。

        4. 检查你的工作空间

        确保你的ROS 2工作空间(workspace)已经被正确构建。你可以在包含fishbot_interfaces包的工作空间目录下运行以下命令来构建整个工作空间:

        colcon build --packages-select fishbot_interfaces
        

        或者如果你想要构建整个工作空间:

        colcon build
        

        5. 包含路径

        确保在你的使用fishbot_interfaces包的CMakeLists.txt中,已经包含了fishbot_interfaces包,这样编译器就能找到服务头文件。你可以通过find_package来实现这一点:

        find_package(fishbot_interfaces REQUIRED)
        

        然后在你的源代码中包含头文件:

        #include <fishbot_interfaces/srv/oled_control.hpp>
        

        注意ROS 2中,自动生成的接口文件使用.hpp扩展名,而不是.h。

        6. 清理和重建

        如果更改了CMakeLists.txt或setup.py文件,有时需要清理旧的构建文件并重新构建。你可以通过以下命令来清理工作空间:

        colcon build --packages-select fishbot_interfaces --symlink-install --packages-skip-dependencies --cmake-clean-first
        

        或者如果你想要清理整个工作空间:

        colcon build --symlink-install --packages-skip-dependencies --cmake-clean-first
        

        7. 检查IDE设置

        如果你在使用IDE(如VSCode、CLion等),确保IDE的项目设置包括了ROS 2工作空间的包含路径。

        按照这些步骤操作后,你的ROS 2项目应该能够找到并正确包含fishbot_interfaces/srv/oled_control.hpp头文件。如果问题仍然存在,请检查每一步是否有遗漏或错误。


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

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

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

          @joe 需要重新构建microros,你展示的构建结果是x86主机上的,pio需要的是esp32-xtenor 交叉编译的头文件和库。请参考视频教程操作试试

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

          1 1 条回复 最后回复 回复 引用 0
          • 1
            1246725901 @小鱼
            最后由 编辑

            @小鱼 删除 libmicroros 后 ,重新编译 一致 downloading

            Requirement already satisfied: importlib-resources in /home/everbright/.platformio/penv/lib/python3.8/site-packages (6.4.4)
            Requirement already satisfied: zipp>=3.1.0 in /home/everbright/.platformio/penv/lib/python3.8/site-packages (from importlib-resources) (3.20.1)
            Installing pyyaml with pip at PlatformIO environment
            /home/everbright/.platformio/penv/bin/python -m pip install pyyaml
            Requirement already satisfied: pyyaml in /home/everbright/.platformio/penv/lib/python3.8/site-packages (6.0.2)
            Installing markupsafe==2.0.1 with pip at PlatformIO environment
            /home/everbright/.platformio/penv/bin/python -m pip install markupsafe==2.0.1
            Requirement already satisfied: markupsafe==2.0.1 in /home/everbright/.platformio/penv/lib/python3.8/site-packages (2.0.1)
            Configuring featheresp32 with transport serial
            Downloading micro-ROS dev dependencies

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