解決済み: setup.py ROS2 にサービス ファイルを追加

近年、ロボット工学の分野では急速な進歩と採用技術が見られます。 その 2 つは ROS2 (ロボット オペレーティング システム 2) です。これは、ロボットのアプリケーションを開発、テスト、保守するためのツール、ライブラリ、規約を提供するオープンソースのミドルウェア フレームワークです。 この記事では、setup.py を使用して ROSXNUMX パッケージにサービス ファイルを追加する方法について詳しく説明します。これは、このプラットフォームを使用する開発者にとって必須のスキルです。 簡単な紹介から始めて、問題の解決策を提示し、ステップバイステップのガイドに従って説明し、より深い理解を得るために関連トピックについて説明します。

ROS2 パッケージでのサービス ファイルのセットアップには、サービス メッセージ定義ファイル (.srv) の作成と、package.xml および setup.py ファイルへの必要な構成の追加という XNUMX つの主な手順が含まれます。 このチュートリアルでは、入力文字列を受け取り、提供された入力の長さを返す単純なサービスを作成します。

まず、ワークスペースを準備しましょう。 次のコマンドを使用して、「string_length_service」という名前の ROS2 パッケージを作成します。

「 `
ros2 pkg create –build-type ament_python string_length_service
「 `

ここで、「string_length_service」パッケージ内に「srv」という名前のディレクトリを作成し、サービス メッセージ定義ファイルを保存します。

「 `
mkdirサーバー
「 `

「srv」ディレクトリ内に、次の内容を含む「StringLength.srv」という名前のファイルを作成します。

「 `
文字列入力_文字列
-
int64の長さ
「 `

package.xml ファイルに、必要な依存関係を必ず追加してください。

「`xml」
std_msgs
サービスインターフェイスパッケージ
ament_cmake
ament_cmake_auto
matplotlib
「 `

さて、この記事の中核部分である setup.py へのサービス ファイルの追加に移りましょう。 「setup.py」ファイルを開き、次のコードを含めます。

「パイソン
setuptools importsetupから
グロブからグロブをインポート

package_name = 'string_length_service'

設定(
名前=パッケージ名、
バージョン='0.0.0'、
パッケージ=[パッケージ名]、
データファイル=[
('share/ament_index/resource_index/packages',
['resource/' + package_name])、
('share/' + package_name, ['package.xml']),
('share/' + package_name, glob('srv/*'))
],
install_requires=['セットアップツール'],
zip_safe=真、
メンテナー='開発者名_ここ',
Maintainer_email='developer_email_here',
description='文字列の長さを計算するサービス',
ライセンス='MIT'、
testing_require=['pytest'],
エントリポイント={
'コンソールスクリプト': [
'string_length_server = ' + package_name + '.string_length_server:main',
'string_length_client = ' + パッケージ名 + '.string_length_client:main',
],
},
)
「 `

このコードが何を行うかについて説明しましょう。 setup.py ファイルは、setuptools を使用してパッケージを配布および管理します。 package_name 変数はパッケージの名前を保持します。 data_files リストでは、パッケージとともに配布される必要なリソース、package.xml、およびサービス ファイルを指定します。 install_requires は必要なパッケージをリストし、entry_points はサービスの実行可能ファイルを定義します。 「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
「 `

ビルドが成功したら、XNUMX つの別々の端末を使用してサーバーとクライアントを実行します。

「 `
ros2 実行 string_length_service string_length_server
「 `

「 `
ros2 実行 string_length_service string_length_client
「 `

このガイドでは、rclpy や std_srvs などの関連トピックに触れながら、ROS2 パッケージの setup.py にサービス ファイルを追加する方法について詳しく説明しました。 これらの手順に従うことで、効率的かつ組織的な方法で ROS2 サービスを作成および配布し、ロボット アプリケーション内での対話を容易にすることができます。 頑張ってコーディングを楽しんでください!

関連記事:

コメント