はじめに
Roboticsを扱うにあたってC++は避けて通れない道ですが、私自身まだまだ初学者であり、nodeもpythonに置き換えたいな……と密かに企んでいる中でふとscriptsとnodeの違いはなんだ??と疑問に思いました。また、roslaunchを行うにあたって影響はないのか疑問に思ったので誰得?って感じですが(自分のために)まとめてみます。
Nodeファイルの役割
Nodeファイルの役割は、特定の用途が定められているわけではありませんが、Nodeを配置するために使用されます。これは特に決まった規則があるわけではありません。ですのでチームやプロジェクトの規則に従ってください。
NodeはROSシステムにおける基本的な実行単位であり、各Nodeは独立したプロセスとして動作し、他のNodeと通信を行います。NodeはC++or Pythonで実装されることが一般的です。Nodeの役割は、センサーからデータを取得したり、制御コマンドを発行したりするなど、特定の機能を実行することです。
scriptsファイルの役割と格納するファイルの種類
一般的には、pythonスクリプトなどのインタプリタ言語のスクリプトを配置する場所として使用されます。
このディレクトリに置かれたスクリプトは、実行可能なファイルとして使用され、CmakeLists.txtでインストールされます。
なぜscriptsファイルがpythonのようなインタプリタ言語ファイルの格納に適しているのか
scriptsディレクトリがPythonスクリプトを整理して配置する場所として適している理由はいくつかあります。以下にその主な理由を説明します。
1.コンパイルの必要がない
インタプリタ言語: Pythonはインタプリタ言語であり、コンパイルが不要です。これに対して、C++などの言語はコンパイルが必要であり、通常srcディレクトリに配置されます。Pythonスクリプトはそのまま実行可能であるため、scriptsディレクトリに配置するのが適しています。
2.プロジェクトの可読性と整理
ディレクトリ構造の明確化: scriptsディレクトリにPythonスクリプトを配置することで、どのファイルがPythonスクリプトであるかが明確になります。これにより、プロジェクトの構造が整理され、可読性が向上します。
分離と整理: コンパイルが必要なファイルと不要なファイルを分離することで、ビルドシステムの管理が容易になります。
3.標準的な慣習とベストプラクティス
コミュニティの標準: ROSコミュニティでは、Pythonスクリプトをscriptsディレクトリに配置することが一般的な慣習です。これに従うことで、他の開発者もディレクトリ構造を理解しやすくなります。
ドキュメントとサポート: 多くのROSドキュメントやチュートリアルでも、Pythonスクリプトはscriptsディレクトリに配置することが推奨されています。これに従うことで、ドキュメントとの整合性が保たれ、サポートを受けやすくなります。
4.インストールと実行の容易さ
catkin_install_python: CMakeLists.txtでcatkin_install_pythonを使用して、scriptsディレクトリ内のPythonスクリプトを簡単にインストールできます。これにより、スクリプトが適切な場所にインストールされ、rosrunやroslaunchで簡単に実行できます。
nodeファイルにpythonファイルを格納することは出来ますが、管理の一貫性が欠けてしまい、ビルドプロセスが複雑になってしまう恐れがあります。
launchファイルの役割
launchファイルには主に5つの役割があります。
1. 複数のノードの起動
複数のノードを一度に起動するための設定を提供します。これにより、個別にノードを起動する手間を省くことができます。
2.パラメータの設定
ROSパラメータサーバーにパラメータを設定することができます。これにより、ノードが起動時に必要とするパラメータを一元管理できます。
3. ノードのリマッピング
トピックやサービスの名前をリマッピングする設定を行うことができます。これにより、ノード間の通信設定を柔軟に変更することができます。
4. ノードの設定
各ノードの名前、出力先、起動するパッケージや実行ファイルを指定することができます。ノードのログ出力先などの設定も行えます。
5. 機能の統合
単一のlaunchファイルで、複数の機能を持つノードや、複数のlaunchファイルを呼び出すことができ、複雑なシステムの起動を簡略化します。
まとめ
今回は、scripts,node,launchファイルのそれぞれの役割とその違いについて説明しました。一般的に、scriptsにはインタプリタ言語であるpython,nodeにはC++等のファイルを格納するのが管理をする上で良いとされているということでした。