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

    自定义通信接口例子中 SystemStatus.msg构建功能包时报错 CMakeLists.txt:16 (rosidl_generate_interfaces),哪位i大神能否指点下?非常感谢

    已定时 已固定 已锁定 已移动
    动手学ROS2
    通信接口例子中构建功能包时报错 ros2学习
    2
    2
    132
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • D
      davidliu77
      最后由 编辑

      自定义通信接口例子,SystemStatus.msg 构建功能包时,命令行
      colcon build --packages-select status_interfaces

      报错信息如下:

      Starting >>> status_interfaces
      --- stderr: status_interfaces
      CMake Error at /opt/ros/jazzy/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:234 (list):
      list index: 1 out of range (-1, 0)
      Call Stack (most recent call first):
      CMakeLists.txt:16 (rosidl_generate_interfaces)

      CMake Error at /opt/ros/jazzy/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:234 (list):
      list index: 1 out of range (-1, 0)
      Call Stack (most recent call first):
      CMakeLists.txt:16 (rosidl_generate_interfaces)

      CMake Error at /opt/ros/jazzy/share/rosidl_generator_type_description/cmake/rosidl_generator_type_description_generate_interfaces.cmake:68 (message):
      Target dependency
      '/ROS2/pkg_ws/build/status_interfaces/rosidl_adapter/status_interfaces/msg/SystemStatus.idl'
      does not exist
      Call Stack (most recent call first):
      /opt/ros/jazzy/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
      /opt/ros/jazzy/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:280 (ament_execute_extensions)
      CMakeLists.txt:16 (rosidl_generate_interfaces)

      操作步骤如下:
      1.使用下面命令创建工作区间后
      ros2 pkg create status_interfaces --build-type ament_cmake --dependencies rosidl_default_generators builtin_interfaces --license Apache-2.0

      2.建立文件 status_interfaces/msg/SystemStatus.msg

      3.CMLists.txt内容如下
      cmake_minimum_required(VERSION 3.8)
      project(status_interfaces)

      if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
      add_compile_options(-Wall -Wextra -Wpedantic)
      endif()

      find dependencies

      find_package(ament_cmake REQUIRED)
      find_package(rclcpp REQUIRED)
      find_package(std_msgs REQUIRED)
      find_package(rosidl_default_generators REQUIRED)

      find_package(builtin_interfaces REQUIRED)

      rosidl_generate_interfaces(${PROJECT_NAME}
      "msg/SystemStatus.msg"
      DEPENDENCIES builtin_interfaces
      )

      if(BUILD_TESTING)
      find_package(ament_lint_auto REQUIRED)

      the following line skips the linter which checks for copyrights

      comment the line when a copyright and license is added to all source files

      set(ament_cmake_copyright_FOUND TRUE)

      the following line skips cpplint (only works in a git repo)

      comment the line when this package is in a git repo and when

      a copyright and license is added to all source files

      set(ament_cmake_cpplint_FOUND TRUE)
      ament_lint_auto_find_test_dependencies()
      endif()

      ament_package()

      4.package.xml内容如下
      <?xml version="1.0"?>
      <?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
      <package format="3">
      <name>status_interfaces</name>
      <version>0.0.0</version>
      <description>TODO: Package description</description>
      <maintainer email="d@todo.todo">d</maintainer>
      <license>Apache-2.0</license>

      <buildtool_depend>ament_cmake</buildtool_depend>

      <depend>rclcpp</depend>
      <depend>std_msgs</depend>
      <build_depend>rosidl_default_generators</build_depend>
      <exec_depend>rosidl_default_runtime</exec_depend>
      <member_of_group>rosidl_interface_packages</member_of_group>
      <depend>builtin_interfaces</depend>

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

      <export>
      <build_type>ament_cmake</build_type>
      </export>
      </package>

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

        从你提供的错误信息和构建步骤来看,这里有几个潜在的问题和改进点:

        1. CMakeLists.txt 中的依赖项:

          • 你在 CMakeLists.txt 中包含了 find_package(rclcpp REQUIRED) 和 find_package(std_msgs REQUIRED),但这两个包在生成消息接口时并不是必需的。rclcpp 是用于 ROS 2 客户端库的,而 std_msgs 包含了标准消息类型。对于你的自定义消息包,这些依赖是不必要的。
        2. 错误的依赖声明:

          • 在 rosidl_generate_interfaces 调用中,你指定了 DEPENDENCIES builtin_interfaces。这通常是正确的,但错误可能源于其他配置问题或版本不兼容。
        3. CMake 和 ROS 2 版本兼容性:

          • 错误信息中提到了列表索引超出范围,这可能是由于 ROS 2 的某个版本与你的 CMakeLists.txt 配置不兼容。确保你的 ROS 2 环境是最新的,或者至少是与你的教程或示例代码兼容的版本。
        4. 清理和重建:

          • 有时候,旧的构建文件可能会导致问题。尝试完全清理你的工作空间(删除 build 和 install 文件夹),然后重新构建。
        5. 检查 SystemStatus.msg 文件:

          • 确保 SystemStatus.msg 文件格式正确,没有语法错误。
        6. 更新 package.xml:

          • 你的 package.xml 中包含了不必要的依赖,如 rclcpp 和 std_msgs。这些应该只在需要使用这些库的功能时才包含。

        下面是一个简化和更新的 CMakeLists.txt 和 package.xml 示例:

        CMakeLists.txt

        cmake_minimum_required(VERSION 3.5)
        project(status_interfaces)
        
        # 默认设置编译选项
        if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
          add_compile_options(-Wall -Wextra -Wpedantic)
        endif()
        
        # 查找必需的包
        find_package(ament_cmake REQUIRED)
        find_package(rosidl_default_generators REQUIRED)
        find_package(builtin_interfaces REQUIRED)
        
        # 生成接口
        rosidl_generate_interfaces(${PROJECT_NAME}
          "msg/SystemStatus.msg"
          DEPENDENCIES builtin_interfaces
        )
        
        install(TARGETS
          ${PROJECT_NAME}__msg__target
          DESTINATION lib/${PROJECT_NAME}
        )
        
        ament_package()
        

        package.xml

        <package format="3">
          <name>status_interfaces</name>
          <version>0.0.0</version>
          <description>The status_interfaces package</description>
          <maintainer email="your_email@todo.todo">your_name</maintainer>
          <license>Apache-2.0</license>
        
          <buildtool_depend>ament_cmake</buildtool_depend>
          <build_depend>rosidl_default_generators</build_depend>
          <exec_depend>rosidl_default_runtime</exec_depend>
          <depend>builtin_interfaces</depend>
        
          <export>
            <build_type>ament_cmake</build_type>
          </export>
        </package>
        

        请确保你的 ROS 2 环境设置正确,并且所有依赖项都已正确安装。然后尝试再次构建你的包。如果问题仍然存在,请检查 ROS 2 的版本和任何已知的兼容性问题。


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

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

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