Resuelto: agregue archivos de servicio en setup.py ROS2

En los últimos años, el campo de la robótica ha experimentado un aumento en los avances y las tecnologías adoptadas. Uno de ellos es ROS2 (Robot Operating System 2), un marco de middleware de código abierto que proporciona herramientas, bibliotecas y convenciones para desarrollar, probar y mantener aplicaciones de robots. Este artículo profundiza en cómo agregar archivos de servicio en un paquete ROS2 usando setup.py, una habilidad esencial para los desarrolladores que trabajan con esta plataforma. Comenzaremos con una breve introducción, presentaremos una solución al problema, lo guiaremos a través de una guía paso a paso y discutiremos temas relacionados para una comprensión más profunda.

Configurar un archivo de servicio en el paquete ROS2 implica dos pasos principales: crear un archivo de definición de mensaje de servicio (.srv) y agregar las configuraciones necesarias en los archivos package.xml y setup.py. En este tutorial, crearemos un servicio simple que toma una cadena de entrada y devuelve la longitud de la entrada proporcionada.

Primero, preparemos nuestro espacio de trabajo. Cree un paquete ROS2 llamado "string_length_service" con el siguiente comando:

"`
ros2 paquete crear –tipo de compilación ament_python string_length_service
"`

Ahora, cree un directorio llamado "srv" dentro del paquete "string_length_service" para almacenar nuestro archivo de definición de mensajes de servicio:

"`
servicio mkdir
"`

Dentro del directorio “srv”, cree un archivo llamado “StringLength.srv” con el siguiente contenido:

"`
cadena cadena_entrada
-
longitud int64
"`

En el archivo package.xml, asegúrese de agregar las dependencias necesarias:

“`xml
std_msgs
paquetes_interfaz_servicio
ament_cmake
ament_cmake_auto
matplotlib
"`

Ahora, pasemos a la parte principal de este artículo: agregar archivos de servicio en setup.py. Abra el archivo "setup.py" e incluya el siguiente código:

“`pitón
desde la configuración de importación de herramientas de configuración
desde glob importar glob

nombre_paquete = 'servicio_longitud_cadena'

configuración(
nombre = nombre_paquete,
versión = '0.0.0',
paquetes = [nombre_paquete],
archivos_datos=[
('compartir/ament_index/resource_index/paquetes',
['recurso/' + nombre_paquete]),
('compartir/' + nombre_paquete, ['paquete.xml']),
('compartir/' + nombre_paquete, glob('srv/*'))
],
install_requires=['setuptools'],
zip_safe=Verdadero,
mantenedor = 'desarrollador_nombre_aquí',
mantenedor_email='desarrollador_email_aquí',
descripción='Un servicio para calcular la longitud de una cadena',
licencia = 'MIT',
tests_require=['pytest'],
puntos_entrada={
'console_scripts': [
'string_length_server = ' + nombre_paquete + '.string_length_server:main',
'string_length_client = ' + nombre_paquete + '.string_length_client:main',
],
},
)
"`

Analicemos ahora qué hace este código: El archivo setup.py utiliza herramientas de configuración para distribuir y administrar nuestro paquete. La variable package_name contiene el nombre de nuestro paquete. La lista data_files especifica los archivos de recursos, paquetes.xml y servicios necesarios que se distribuirán junto con el paquete. install_requires enumera los paquetes necesarios y los puntos de entrada definen los archivos ejecutables de nuestro servicio. Asegúrese de reemplazar 'developer_name_here' y 'developer_email_here' con los valores adecuados.

Usando rclpy y std_srvs

Después de configurar los archivos de servicio en setup.py, es necesario implementar el código del servidor y del cliente utilizando la biblioteca de cliente Python ROS2, rclpy y std_srvs para los tipos de servicio estándar.

Cree los archivos “string_length_server.py” y “string_length_client.py” dentro del directorio de su paquete e implemente el código del servidor y del cliente. Puede encontrar detalles sobre cómo escribir código de servidor y cliente en la documentación de ROS2.

Construyendo y probando el servicio

Finalmente, compila y prueba tu paquete usando los siguientes comandos:

"`
fuente /opt/ros/foxy/setup.bash
colcon build –packages-select string_length_service
fuente de instalación/setup.bash
"`

Después de la compilación exitosa, ejecute el servidor y el cliente usando dos terminales separadas:

"`
ros2 ejecuta string_length_service string_length_server
"`

"`
ros2 ejecuta string_length_service string_length_client
"`

Esta guía presentó una explicación detallada sobre cómo agregar archivos de servicio en setup.py para paquetes ROS2 mientras aborda temas relacionados como rclpy y std_srvs. Siguiendo estos pasos, podrá crear y distribuir sus servicios ROS2 de manera eficiente y organizada, facilitando las interacciones dentro de sus aplicaciones robóticas. ¡Buena suerte y feliz codificación!

Artículos Relacionados:

Deja un comentario