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

    服务接口报错

    已定时 已固定 已锁定 已移动 已解决
    综合问题
    自定义接口 cmake报错 ros2
    4
    7
    641
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 32797253273
      printf("⁧⁧ ;("⁧‭
      最后由 编辑

      CMake Error at /opt/ros/humble/share/ament_cmake_target_dependencies/cmake/ament_target_dependencies.cmake:77 (message):
      ament_target_dependencies() the passed package name 'test_serivce_rclcpp'
      was not found before
      Call Stack (most recent call first):
      CMakeLists.txt:22 (ament_target_dependencies)
      42846654-0bb8-4316-9f01-679710652228-图片.png
      CMakeLists.txt文件如下配置:
      find_package(ament_cmake REQUIRED)
      find_package(rclcpp REQUIRED)
      find_package(rosidl_default_generators REQUIRED)
      find_package(test_serivce_rclcpp REQUIRED)
      rosidl_generate_interfaces(${PROJECT_NAME}
      "srv/CheckFloat.srv"
      )

      add_executable(check_float_client src/check_float_client.cpp)
      target_include_directories(check_float_client PUBLIC
      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
      $<INSTALL_INTERFACE:include>)
      target_compile_features(check_float_client PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17
      ament_target_dependencies(
      check_float_client
      "rclcpp"
      "test_serivce_rclcpp"
      )

      install(TARGETS check_float_client
      DESTINATION lib/${PROJECT_NAME})

      add_executable(check_float_server src/check_float_server.cpp)

      target_include_directories(check_float_server PUBLIC
      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
      $<INSTALL_INTERFACE:include>)
      target_compile_features(check_float_server PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17

      ament_target_dependencies(
      check_float_server
      "rclcpp"
      "test_serivce_rclcpp"
      )

      install(TARGETS check_float_server
      DESTINATION lib/${PROJECT_NAME})
      package.xml如下:

      <buildtool_depend>ament_cmake</buildtool_depend>

      <depend>rclcpp</depend>
      <depend>example_ros2_interfaces</depend>

      <test_depend>ament_lint_auto</test_depend>
      <test_depend>ament_lint_common</test_depend>

      <export>
      <build_type>ament_cmake</build_type>
      </export>
      报错
      d65ffd0f-5208-4d7c-afb6-87cdb27a164f-42846654-0bb8-4316-9f01-679710652228-图片-resized.png

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

        这个错误表明CMake在尝试解析依赖关系时找不到名为test_serivce_rclcpp的包。从错误信息和你提供的CMakeLists.txt和package.xml文件来看,有几个潜在的问题需要解决:

        1. 拼写错误:在CMakeLists.txt中,find_package(test_serivce_rclcpp REQUIRED)的test_serivce_rclcpp可能是拼写错误。你可能想写的是test_service_rclcpp或者另一个包名。请检查你的工作空间或ROS 2包索引中是否确实存在test_serivce_rclcpp这个包。

        2. 未安装的依赖:如果test_service_rclcpp(或正确的包名)是一个外部包,你需要确保它已经被安装在你的ROS 2工作空间中。你可以使用colcon build --packages-select your_package_name来构建你的工作空间(替换your_package_name为你的工作空间中的包名),并确保所有依赖都已满足。

        3. 包名不一致:在CMakeLists.txt中引用的包名和在package.xml中列出的依赖可能不一致。你需要确保两者都使用了正确的包名。

        4. 错误的依赖:如果test_service_rclcpp是你自己的包,并且它是作为服务接口的一部分,那么你可能不需要将它作为一个依赖项添加到find_package中。相反,你应该确保在CMakeLists.txt中正确生成了服务接口,并在你的客户端和服务器可执行文件中包含了必要的头文件。

        5. package.xml文件:在package.xml中,你应该列出所有你的包所依赖的外部包。如果test_service_rclcpp是一个你正在开发的包,并且它位于同一个工作空间中,那么你可能不需要在package.xml中列出它作为一个依赖项,除非它是一个元包(meta-package)。但是,如果你的包依赖于另一个工作空间中的包,你需要确保那个工作空间已经被构建并安装,或者你已经将那个包的源代码包含在你的工作空间中。

        6. 重新同步工作空间:如果你添加了新的包或更改了package.xml文件,确保你已经重新同步了你的工作空间。你可以使用colcon build --symlink-install来构建和安装你的工作空间,并使用source install/setup.bash(或setup.zsh,取决于你的shell)来设置环境变量。

        解决以上问题后,你应该能够成功编译你的ROS 2包。


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

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

        1 条回复 最后回复 回复 引用 0
        • 8679758198
          圆梦 @3279725327
          最后由 编辑

          @3279725327 这个我遇到过好像是你的接口驱动的问题

          1 条回复 最后回复 回复 引用 0
          • 8679758198
            圆梦 @3279725327
            最后由 编辑

            @3279725327 尝试更新下电脑上板子的驱动程序

            32797253273 2 条回复 最后回复 回复 引用 0
            • 32797253273
              printf("⁧⁧ ;("⁧‭ @867975819
              最后由 编辑

              @867975819 怎么更新呢

              1 条回复 最后回复 回复 引用 0
              • 32797253273
                printf("⁧⁧ ;("⁧‭ @867975819
                最后由 编辑

                @867975819 解决好久一直没找到解决方法

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

                  @3279725327 在 服务接口报错 中说:

                  CMake Error at /opt/ros/humble/share/ament_cmake_target_dependencies/cmake/ament_target_dependencies.cmake:77 (message):
                  ament_target_dependencies() the passed package name 'test_serivce_rclcpp'
                  was not found before
                  Call Stack (most recent call first):
                  CMakeLists.txt:22 (ament_target_dependencies)
                  42846654-0bb8-4316-9f01-679710652228-图片.png
                  CMakeLists.txt文件如下配置:
                  find_package(ament_cmake REQUIRED)
                  find_package(rclcpp REQUIRED)
                  find_package(rosidl_default_generators REQUIRED)
                  find_package(test_serivce_rclcpp REQUIRED)
                  rosidl_generate_interfaces(${PROJECT_NAME}
                  "srv/CheckFloat.srv"
                  )

                  add_executable(check_float_client src/check_float_client.cpp)
                  target_include_directories(check_float_client PUBLIC
                  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
                  $<INSTALL_INTERFACE:include>)
                  target_compile_features(check_float_client PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17
                  ament_target_dependencies(
                  check_float_client
                  "rclcpp"
                  "test_serivce_rclcpp"
                  )

                  install(TARGETS check_float_client
                  DESTINATION lib/${PROJECT_NAME})

                  add_executable(check_float_server src/check_float_server.cpp)

                  target_include_directories(check_float_server PUBLIC
                  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
                  $<INSTALL_INTERFACE:include>)
                  target_compile_features(check_float_server PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17

                  ament_target_dependencies(
                  check_float_server
                  "rclcpp"
                  "test_serivce_rclcpp"
                  )

                  install(TARGETS check_float_server
                  DESTINATION lib/${PROJECT_NAME})
                  package.xml如下:

                  <buildtool_depend>ament_cmake</buildtool_depend>

                  <depend>rclcpp</depend>
                  <depend>example_ros2_interfaces</depend>

                  <test_depend>ament_lint_auto</test_depend>
                  <test_depend>ament_lint_common</test_depend>

                  <export>
                  <build_type>ament_cmake</build_type>
                  </export>
                  报错
                  d65ffd0f-5208-4d7c-afb6-87cdb27a164f-42846654-0bb8-4316-9f01-679710652228-图片-resized.png

                  @小伊 怎么解决这个问题

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

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

                    这个错误表明CMake在尝试解析依赖关系时找不到名为test_serivce_rclcpp的包。从错误信息和你提供的CMakeLists.txt和package.xml文件来看,有几个潜在的问题需要解决:

                    1. 拼写错误:在CMakeLists.txt中,find_package(test_serivce_rclcpp REQUIRED)的test_serivce_rclcpp可能是拼写错误。你可能想写的是test_service_rclcpp或者另一个包名。请检查你的工作空间或ROS 2包索引中是否确实存在test_serivce_rclcpp这个包。

                    2. 未安装的依赖:如果test_service_rclcpp(或正确的包名)是一个外部包,你需要确保它已经被安装在你的ROS 2工作空间中。你可以使用colcon build --packages-select your_package_name来构建你的工作空间(替换your_package_name为你的工作空间中的包名),并确保所有依赖都已满足。

                    3. 包名不一致:在CMakeLists.txt中引用的包名和在package.xml中列出的依赖可能不一致。你需要确保两者都使用了正确的包名。

                    4. 错误的依赖:如果test_service_rclcpp是你自己的包,并且它是作为服务接口的一部分,那么你可能不需要将它作为一个依赖项添加到find_package中。相反,你应该确保在CMakeLists.txt中正确生成了服务接口,并在你的客户端和服务器可执行文件中包含了必要的头文件。

                    5. package.xml文件:在package.xml中,你应该列出所有你的包所依赖的外部包。如果test_service_rclcpp是一个你正在开发的包,并且它位于同一个工作空间中,那么你可能不需要在package.xml中列出它作为一个依赖项,除非它是一个元包(meta-package)。但是,如果你的包依赖于另一个工作空间中的包,你需要确保那个工作空间已经被构建并安装,或者你已经将那个包的源代码包含在你的工作空间中。

                    6. 重新同步工作空间:如果你添加了新的包或更改了package.xml文件,确保你已经重新同步了你的工作空间。你可以使用colcon build --symlink-install来构建和安装你的工作空间,并使用source install/setup.bash(或setup.zsh,取决于你的shell)来设置环境变量。

                    解决以上问题后,你应该能够成功编译你的ROS 2包。


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

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

                    1 条回复 最后回复 回复 引用 0
                    • 小鱼小 小鱼 将这个主题标记为已解决,在
                    • 第一个帖子
                      最后一个帖子
                    皖ICP备16016415号-7
                    Powered by NodeBB | 鱼香ROS