Как решить “CMake Error at /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:229”

Вопрос или проблема

Когда я пытаюсь собрать пакет с:

CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(my_msgs)
find_package(rosidl_default_generators REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(std_msgs REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/ArrayPoseStampedWithCovariance.msg"
  DEPENDENCIES std_msgs geometry_msgs
)

ament_export_dependencies(rosidl_default_runtime)
ament_package()

и:

package.xml 
<?xml version="1.0"?>
<package format="3">
    <name>my_msgs</name>
    <version>0.0.0</version>
    <description>TODO: Описание пакета</description>
    <maintainer email="[email protected]">mats</maintainer>
    <license>TODO: Заявление о лицензии</license>

    <buildtool_depend>ament_cmake</buildtool_depend>
    <build_depend>rosidl_default_generators</build_depend>
    <depend>std_msgs</depend>
    <depend>geometry_msgs</depend>
    
    <exec_depend>rosidl_default_runtime</exec_depend>
    <exec_depend>rosidl_runtime_py</exec_depend>
    
    <test_depend>ament_lint_auto</test_depend>
    <test_depend>ament_lint_common</test_depend>

    <export>
        <build_type>ament_cmake</build_type>
        <member_of_group>rosidl_interface_packages</member_of_group>
    </export>
</package>

Произошла следующая ошибка:

CMake Error at /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:229 (message):
  Пакеты, устанавливающие интерфейсы, должны включать
  '<member_of_group>rosidl_interface_packages</member_of_group>' в своем
  package.xml
Call Stack (most recent call first):
  CMakeLists.txt:8 (rosidl_generate_interfaces)

Как это исправить?

Вам нужно переместить строку <member_of_group>rosidl_interface_packages</member_of_group> после <exec_depend>rosidl_default_runtime</exec_depend>.

Ответ или решение

Чтобы решить проблему с ошибкой CMake, возникающей при сборке пакета ROS, необходимо выполнить несколько шагов, основанных на представленном коде и сообщении об ошибке. Ошибка, с которой вы столкнулись, гласит:

CMake Error at /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:229 (message):
  Packages installing interfaces must include
  '<member_of_group>rosidl_interface_packages</member_of_group>' in their
  package.xml

Эта ошибка указывает на то, что пакет, который вы пытаетесь собрать, не соответствует требованиям для установки интерфейсов ROSIDL, так как отсутствует необходимый элемент <member_of_group>.

Рекомендации для решения проблемы:

  1. Корректная позиция элемента <member_of_group>: В вашем package.xml элемент <member_of_group> должен находиться в правильной позиции. На данный момент он расположен в блоке <export>, что может не соответствовать требованиям CMake. Его следует переместить после деклараций зависимостей, чтобы CMake мог корректно распознать эту информацию.

  2. Обновленный package.xml: Вот переработанный вариант вашего package.xml, с учетом необходимых изменений:

<?xml version="1.0"?>
<package format="3">
    <name>my_msgs</name>
    <version>0.0.0</version>
    <description>TODO: Package description</description>
    <maintainer email="example@email.com">mats</maintainer>
    <license>TODO: License declaration</license>

    <buildtool_depend>ament_cmake</buildtool_depend>
    <build_depend>rosidl_default_generators</build_depend>
    <depend>std_msgs</depend>
    <depend>geometry_msgs</depend>

    <exec_depend>rosidl_default_runtime</exec_depend>
    <exec_depend>rosidl_runtime_py</exec_depend>

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

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

    <member_of_group>rosidl_interface_packages</member_of_group>
</package>
  1. Пересборка проекта: После обновления файла package.xml не забудьте пересобрать ваш проект, чтобы изменения вступили в силу. Для этого выполните следующие команды в терминале:
# Перейдите в директорию вашего рабочего пространства
cd ~/your_workspace
# Сборка проекта с использованием colcon
colcon build

Заключение

Следуя этим указаниям, вы сможете устранить ошибку компиляции, связанную с rosidl_generate_interfaces. Помните, что соблюдение структуры и правил оформления файлов конфигурации ROS является ключевым элементом успешной сборки пакетов. Если же проблема все еще проявляется, рекомендуется проверить другие зависимости или конфигурации, которые могут мешать процессу сборки.

Оцените материал
Добавить комментарий

Капча загружается...