Resolvido: adicione arquivos de serviço em setup.py ROS2

Nos últimos anos, o campo da robótica tem visto um aumento nos avanços e nas tecnologias adotadas. Um deles é o ROS2 (Robot Operating System 2), uma estrutura de middleware de código aberto que fornece ferramentas, bibliotecas e convenções para desenvolver, testar e manter aplicações de robôs. Este artigo se aprofunda na adição de arquivos de serviço em um pacote ROS2 usando setup.py, uma habilidade essencial para desenvolvedores que trabalham com esta plataforma. Começaremos com uma breve introdução, apresentaremos uma solução para o problema, orientaremos você em um guia passo a passo e discutiremos tópicos relacionados para uma compreensão mais profunda.

A configuração de um arquivo de serviço no pacote ROS2 envolve duas etapas principais: criar um arquivo de definição de mensagem de serviço (.srv) e adicionar as configurações necessárias nos arquivos package.xml e setup.py. Neste tutorial, criaremos um serviço simples que recebe uma string de entrada e retorna o comprimento da entrada fornecida.

Primeiro, vamos preparar nosso espaço de trabalho. Crie um pacote ROS2 chamado “string_length_service” com o seguinte comando:

""
ros2 pkg create –build-type ament_python string_length_service
""

Agora, crie um diretório chamado “srv” dentro do pacote “string_length_service” para armazenar nosso arquivo de definição de mensagem de serviço:

""
mkdir srv
""

Dentro do diretório “srv”, crie um arquivo chamado “StringLength.srv” com o seguinte conteúdo:

""
string entrada_string
-
comprimento int64
""

No arquivo package.xml, certifique-se de adicionar as dependências necessárias:

“`xml
std_msgs
service_interface_packages
ament_cmake
ament_cmake_auto
matplotlib
""

Agora, vamos para a parte central deste artigo – adicionar arquivos de serviço em setup.py. Abra o arquivo “setup.py” e inclua o seguinte código:

“`Píton
da configuração de importação de ferramentas de instalação
de glob importar glob

nome_do_pacote = 'string_length_service'

configurar(
nome = nome_do_pacote,
versão='0.0.0′,
pacotes=[nome_do_pacote],
arquivos_dados=[
('share/ament_index/resource_index/packages',
['recurso/' + nome_do_pacote]),
('compartilhar/' + nome_do_pacote, ['pacote.xml']),
('compartilhar/' + nome_do_pacote, glob('srv/*'))
],
install_requires=['setuptools'],
zip_safe = Verdadeiro,
mantenedor='nome_do_desenvolvedor_aqui',
mantenedor_email='developer_email_here',
description='Um serviço para calcular o comprimento da string',
licença='MIT',
testes_require=['pytest'],
pontos_de_entrada={
'console_scripts': [
'string_length_server = ' + package_name + '.string_length_server:main',
'string_length_client = ' + package_name + '.string_length_client:main',
],
},
)
""

Vamos agora discutir o que este código faz: O arquivo setup.py usa setuptools para distribuir e gerenciar nosso pacote. A variável package_name contém o nome do nosso pacote. A lista data_files especifica os arquivos de recurso, package.xml e serviço necessários a serem distribuídos junto com o pacote. install_requires lista os pacotes necessários e entry_points define nossos arquivos executáveis ​​de serviço. Certifique-se de substituir 'developer_name_here' e 'developer_email_here' pelos valores adequados.

Usando rclpy e std_srvs

Depois de configurar os arquivos de serviço em setup.py, é necessário implementar o código do servidor e do cliente usando a biblioteca cliente Python ROS2, rclpy e std_srvs para os tipos de serviço padrão.

Crie os arquivos “string_length_server.py” e “string_length_client.py” dentro do diretório do seu pacote e implemente o código do servidor e do cliente. Você pode encontrar detalhes sobre como escrever código de servidor e cliente na documentação do ROS2.

Construindo e testando o serviço

Por fim, construa e teste seu pacote usando os seguintes comandos:

""
fonte /opt/ros/foxy/setup.bash
colcon build –packages-select string_length_service
fonte install/setup.bash
""

Após a construção bem-sucedida, execute o servidor e o cliente usando dois terminais separados:

""
ros2 execute string_length_service string_length_server
""

""
ros2 execute string_length_service string_length_client
""

Este guia apresentou uma explicação detalhada sobre como adicionar arquivos de serviço em setup.py para pacotes ROS2 enquanto abordava tópicos relacionados como rclpy e std_srvs. Seguindo essas etapas, você pode criar e distribuir seus serviços ROS2 de forma eficiente e organizada, facilitando as interações dentro de suas aplicações robóticas. Boa sorte e boa codificação!

Artigos relacionados:

Deixe um comentário