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

    第三章 自定义消息msg 编译错误

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    ros2 msg 编译错误
    5
    8
    1.5k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • liusiyu_alex_nuaaL
      liusiyu_alex_nuaa
      最后由 编辑

      CMakeLists.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_package(ament_cmake REQUIRED)
      find_package(builtin_interfaces REQUIRED)
      find_package(rosidl_default_generators REQUIRED)

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

      if(BUILD_TESTING)
      find_package(ament_lint_auto REQUIRED)
      set(ament_cmake_copyright_FOUND TRUE)
      set(ament_cmake_cpplint_FOUND TRUE)
      ament_lint_auto_find_test_dependencies()
      endif()

      ament_package()

      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="lsy@todo.todo">lsy</maintainer>
      <license>Apache-2.0</license>

      <member_of_group>rosidl_interface_packages </member_of_group>

      <buildtool_depend>ament_cmake</buildtool_depend>

      <depend>builtin_interfaces</depend>
      <depend>rosidl_default_generators</depend>

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

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

      报错信息如下
      CMake Error at /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:240 (list):
      list index: 1 out of range (-1, 0)
      Call Stack (most recent call first):
      CMakeLists.txt:14 (rosidl_generate_interfaces)

      CMake Error at /opt/ros/humble/share/rosidl_generator_c/cmake/rosidl_generator_c_generate_interfaces.cmake:69 (message):
      Target dependency
      '/chapt3/topic_practice_ws/build/status_interfaces/rosidl_adapter/status_interfaces/msg/SystemStatus.idl'
      does not exist
      Call Stack (most recent call first):
      /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
      /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:286 (ament_execute_extensions)
      CMakeLists.txt:14 (rosidl_generate_interfaces)

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

        这个错误通常发生在CMake配置过程中,特别是在使用rosidl_generate_interfaces时,它负责根据.msg或.srv文件生成相应的ROS接口代码。错误提示表明在尝试访问列表索引时出现了范围错误,以及生成的IDL文件不存在。这里有几个可能的原因和解决方案:

        1. 检查.msg文件路径

        确保SystemStatus.msg文件的路径正确无误,并且CMake能够正确找到它。在你的CMakeLists.txt中,你指定了"msg/SystemStatus.msg",这意味着CMake将在当前CMakeLists.txt文件所在的目录下的msg子目录中查找这个文件。请检查这个路径是否正确。

        2. 确保.msg文件存在且格式正确

        检查SystemStatus.msg文件是否确实存在于指定的路径中,并且其内容格式符合ROS的.msg文件规范。例如,一个简单的.msg文件可能看起来像这样:

        # SystemStatus.msg
        Header header
        bool is_active
        

        3. 检查CMakeLists.txt中的rosidl_generate_interfaces调用

        确保rosidl_generate_interfaces函数的调用正确无误。你已经正确地指定了依赖项builtin_interfaces,但请确保没有其他语法错误或遗漏。

        4. 清理并重新构建

        有时候,旧的构建文件或缓存可能会导致问题。尝试清理你的构建目录(通常是build或devel文件夹),然后重新运行CMake配置和构建过程。

        # 在你的工作空间中
        rm -rf build/ devel/
        mkdir build
        cd build
        cmake ..
        make
        

        5. 检查ROS环境

        确保你的ROS环境已经正确设置,并且所有的依赖包都已正确安装。你可以通过运行rosdep install --from-paths src --ignore-src -r -y来安装所有缺失的依赖。

        6. 查看CMake的详细输出

        运行CMake时,可以添加-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON选项来获取更详细的输出,这有助于诊断问题。

        7. 检查ROS版本和CMake版本

        确保你使用的ROS版本和CMake版本与你的项目和依赖包兼容。

        8. 检查package.xml

        虽然package.xml文件与这个具体的CMake错误不直接相关,但确保它的内容正确且格式良好也是很重要的。你已经提供了一个看起来正确的package.xml,但请确保所有标签都正确关闭,并且没有不可见的特殊字符或编码问题。

        通过以上步骤,你应该能够诊断并解决这个CMake错误。如果问题仍然存在,请检查是否有任何特定的ROS社区或论坛可以提供更具体的帮助。


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

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

        1 条回复 最后回复 回复 引用 0
        • liusiyu_alex_nuaaL
          liusiyu_alex_nuaa
          最后由 编辑

          跑github上小鱼的例程也是同样的报错

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

          CMake Error at /opt/ros/humble/share/rosidl_generator_c/cmake/rosidl_generator_c_generate_interfaces.cmake:69 (message):
          Target dependency
          '/ros2bookcode-master/chapt3/topic_practice_ws/build/status_interfaces/rosidl_adapter/status_interfaces/msg/SystemStatus.idl'
          does not exist
          Call Stack (most recent call first):
          /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
          /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:286 (ament_execute_extensions)
          CMakeLists.txt:13 (rosidl_generate_interfaces)


          Failed <<< status_interfaces [0.24s, exited with code 1]

          Summary: 0 packages finished [0.36s]
          1 package failed: status_interfaces
          1 package had stderr output: status_interfaces
          2 packages not processed

          2 1 条回复 最后回复 回复 引用 0
          • 2
            2352947187 @liusiyu_alex_nuaa
            最后由 编辑

            @liusiyu_alex_nuaa 我也遇到同样的问题

            liusiyu_alex_nuaaL 1 条回复 最后回复 回复 引用 0
            • liusiyu_alex_nuaaL
              liusiyu_alex_nuaa @2352947187
              最后由 编辑

              @2352947187 我解决了,是因为该文件的路径中含有中文,把整个工作空间换个路径,然后把除了src的其他文件删除,再colcon build就可以了

              2 L 2 条回复 最后回复 回复 引用 0
              • 2
                2352947187 @liusiyu_alex_nuaa
                最后由 编辑

                @liusiyu_alex_nuaa 谢了兄弟,我搞了一天😤

                1 条回复 最后回复 回复 引用 0
                • L
                  luyuan @liusiyu_alex_nuaa
                  最后由 编辑

                  @liusiyu_alex_nuaa 谢了,兄弟。

                  1 条回复 最后回复 回复 引用 0
                  • F
                    Freyr
                    最后由 编辑

                    @liusiyu_alex_nuaa 谢了,大兄弟

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