Вопрос или проблема
Когда я пытаюсь собрать пакет с:
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>
.
Рекомендации для решения проблемы:
-
Корректная позиция элемента
<member_of_group>
: В вашемpackage.xml
элемент<member_of_group>
должен находиться в правильной позиции. На данный момент он расположен в блоке<export>
, что может не соответствовать требованиям CMake. Его следует переместить после деклараций зависимостей, чтобы CMake мог корректно распознать эту информацию. -
Обновленный
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>
- Пересборка проекта: После обновления файла
package.xml
не забудьте пересобрать ваш проект, чтобы изменения вступили в силу. Для этого выполните следующие команды в терминале:
# Перейдите в директорию вашего рабочего пространства
cd ~/your_workspace
# Сборка проекта с использованием colcon
colcon build
Заключение
Следуя этим указаниям, вы сможете устранить ошибку компиляции, связанную с rosidl_generate_interfaces
. Помните, что соблюдение структуры и правил оформления файлов конфигурации ROS является ключевым элементом успешной сборки пакетов. Если же проблема все еще проявляется, рекомендуется проверить другие зависимости или конфигурации, которые могут мешать процессу сборки.