W ostatnich latach w dziedzinie robotyki nastąpił gwałtowny rozwój i przyjęcie technologii. Jednym z nich jest ROS2 (Robot Operating System 2), platforma oprogramowania pośredniego typu open source, która udostępnia narzędzia, biblioteki i konwencje do tworzenia, testowania i utrzymywania aplikacji robotów. W tym artykule szczegółowo opisano dodawanie plików usług do pakietu ROS2 przy użyciu pliku setup.py, niezbędnej umiejętności programistów pracujących z tą platformą. Zaczniemy od krótkiego wprowadzenia, przedstawimy rozwiązanie problemu, przeprowadzimy Cię przez przewodnik krok po kroku i omówimy powiązane tematy w celu głębszego zrozumienia.
Konfiguracja pliku usługi w pakiecie ROS2 obejmuje dwa główne kroki: utworzenie pliku definicji komunikatu usługi (.srv) oraz dodanie niezbędnych konfiguracji w plikach package.xml i setup.py. W tym samouczku utworzymy prostą usługę, która pobiera ciąg wejściowy i zwraca długość podanych danych wejściowych.
Najpierw przygotujmy nasze miejsce do pracy. Utwórz pakiet ROS2 o nazwie „string_length_service” za pomocą następującego polecenia:
„„
ros2 pkg create – typ kompilacji ament_python string_length_service
„„
Teraz utwórz katalog o nazwie „srv” w pakiecie „string_length_service”, w którym będziesz przechowywać plik definicji komunikatu serwisowego:
„„
mkdir srv
„„
W katalogu „srv” utwórz plik o nazwie „StringLength.srv” o następującej zawartości:
„„
ciąg wejściowy_ciąg
-
długość int64
„„
W pliku package.xml pamiętaj o dodaniu niezbędnych zależności:
„`xml
„„
Przejdźmy teraz do zasadniczej części tego artykułu – dodania plików usług w setup.py. Otwórz plik „setup.py” i dołącz następujący kod:
„pyton”
z setuptools import setup
z globala importuj glob
nazwa_pakietu = 'usługa długości_stringu'
organizować coś(
nazwa=nazwa_pakietu,
wersja='0.0.0′,
pakiety=[nazwa_pakietu],
pliki_danych=[
(„udział/indeks_amentu/indeks_zasobu/pakiety”,
['zasób/' + nazwa_pakietu]),
(„udział/” + nazwa_pakietu, [„pakiet.xml”]),
('udział/' + nazwa_pakietu, glob('srv/*'))
],
install_requires=['narzędzia konfiguracyjne'],
zip_safe=Prawda,
konserwator='nazwa_programisty_tutaj',
keeper_email='developer_email_here',
opis='Usługa obliczania długości łańcucha znaków',
licencja='MIT',
testy_require=['pytest'],
punkty_wejściowe={
„skrypty_konsoli”: [
'string_length_server = ' + nazwa_pakietu + '.string_length_server:main',
'string_length_client = ' + nazwa_pakietu + '.string_length_client:main',
],
},
)
„„
Omówmy teraz, co robi ten kod: Plik setup.py wykorzystuje narzędzia setuptools do dystrybucji i zarządzania naszym pakietem. Zmienna nazwa_pakietu przechowuje nazwę naszego pakietu. Lista data_files określa niezbędne zasoby, pliki package.xml i pliki usług, które mają być dystrybuowane wraz z pakietem. install_requires zawiera listę wymaganych pakietów, a wpisy_punktów definiują pliki wykonywalne naszej usługi. Pamiętaj, aby zastąpić „nazwa_programisty_tutaj” i „tutaj_email_programisty” właściwymi wartościami.
Używanie rclpy i std_srvs
Po skonfigurowaniu plików usług w setup.py konieczne jest zaimplementowanie kodu serwera i klienta przy użyciu biblioteki klienta ROS2 Python Client Library, rclpy i std_srvs dla standardowych typów usług.
Utwórz pliki „string_length_server.py” i „string_length_client.py” w katalogu pakietu i zaimplementuj kod serwera i klienta. Szczegóły dotyczące pisania kodu serwera i klienta można znaleźć w dokumentacji ROS2.
Budowanie i testowanie usługi
Na koniec zbuduj i przetestuj swój pakiet, używając następujących poleceń:
„„
źródło /opt/ros/foxy/setup.bash
kompilacja colcon – pakiety-wybierz usługę długości_ciągu
źródłowy install/setup.bash
„„
Po pomyślnej kompilacji uruchom serwer i klienta, korzystając z dwóch oddzielnych terminali:
„„
ros2 uruchom usługę długości_ciągu_serwer_długości_ciągu
„„
„„
ros2 uruchom usługę string_length_string_length_client
„„
W tym przewodniku przedstawiono szczegółowe wyjaśnienie dodawania plików usług w setup.py dla pakietów ROS2, poruszając jednocześnie powiązane tematy, takie jak rclpy i std_srvs. Wykonując poniższe kroki, możesz tworzyć i dystrybuować usługi ROS2 w wydajny i zorganizowany sposób, ułatwiając interakcje w aplikacjach robotycznych. Powodzenia i przyjemnego kodowania!