В последние годы в области робототехники наблюдается всплеск достижений и внедренных технологий. Одним из них является ROS2 (Операционная система робота 2), среда промежуточного программного обеспечения с открытым исходным кодом, которая предоставляет инструменты, библиотеки и соглашения для разработки, тестирования и поддержки приложений роботов. В этой статье рассматривается добавление служебных файлов в пакет ROS2 с помощью setup.py, что является важным навыком для разработчиков, работающих с этой платформой. Мы начнем с краткого введения, представим решение проблемы, проведем вас через пошаговое руководство и обсудим связанные темы для более глубокого понимания.
Настройка служебного файла в пакете ROS2 включает два основных этапа: создание файла определения служебного сообщения (.srv) и добавление необходимых конфигураций в файлы package.xml и setup.py. В этом уроке мы создадим простой сервис, который принимает входную строку и возвращает ее длину.
Для начала подготовим наше рабочее место. Создайте пакет ROS2 с именем «string_length_service» с помощью следующей команды:
«`
ros2 pkg create –тип сборки ament_python string_length_service
«`
Теперь создайте каталог с именем «srv» внутри пакета «string_length_service» для хранения файла определения нашего служебного сообщения:
«`
мкдир срв
«`
Внутри каталога «srv» создайте файл с именем «StringLength.srv» со следующим содержимым:
«`
строка входная_строка
-
длина int64
«`
В файл package.xml обязательно добавьте необходимые зависимости:
«`xml
«`
Теперь давайте перейдем к основной части этой статьи — добавлению служебных файлов в setup.py. Откройте файл «setup.py» и включите следующий код:
«`питон
из настройки импорта setuptools
из glob import glob
package_name = 'string_length_service'
настраивать(
имя = имя_пакета,
версия = '0.0.0',
пакеты = [имя_пакета],
data_files=[
('share/ament_index/resource_index/packages',
['ресурс/' + имя_пакета]),
('share/' + package_name, ['package.xml']),
('share/' + package_name, glob('srv/*'))
],
install_requires=['setuptools'],
zip_safe = Правда,
сопровождающий = 'developer_name_here',
Maintenanceer_email = 'developer_email_here',
описание='Сервис для расчета длины строки',
лицензия = 'MIT',
tests_require=['pytest'],
enter_points={
'console_scripts': [
'string_length_server = ' + package_name + '.string_length_server:main',
'string_length_client = ' + package_name + '.string_length_client:main',
],
},
)
«`
Давайте теперь обсудим, что делает этот код: Файл setup.py использует setuptools для распространения и управления нашим пакетом. Переменная package_name содержит имя нашего пакета. В списке data_files указаны необходимые файлы ресурсов, package.xml и служебные файлы, которые будут распространяться вместе с пакетом. install_requires перечисляет необходимые пакеты, а входные_точки определяют исполняемые файлы нашей службы. Обязательно замените «developer_name_here» и «developer_email_here» правильными значениями.
Использование rclpy и std_srvs
После настройки служебных файлов в setup.py необходимо реализовать код сервера и клиента, используя клиентскую библиотеку ROS2 Python, rclpy и std_srvs для стандартных типов сервисов.
Создайте файлы «string_length_server.py» и «string_length_client.py» внутри каталога вашего пакета и реализуйте код сервера и клиента. Подробности о написании серверного и клиентского кода можно найти в документации ROS2.
Сборка и тестирование сервиса
Наконец, соберите и протестируйте свой пакет, используя следующие команды:
«`
источник /opt/ros/foxy/setup.bash
colcon build –packages-select string_length_service
исходный код install/setup.bash
«`
После успешной сборки запустите сервер и клиент, используя два отдельных терминала:
«`
ros2 запустить string_length_service string_length_server
«`
«`
ros2 запустить string_length_service string_length_client
«`
В этом руководстве представлено подробное объяснение добавления служебных файлов в setup.py для пакетов ROS2, а также затронуты связанные темы, такие как rclpy и std_srvs. Выполнив эти шаги, вы сможете эффективно и организованно создавать и распространять свои сервисы ROS2, облегчая взаимодействие внутри ваших роботизированных приложений. Удачи и приятного кодирования!