問題の説明
今日、ROS プロジェクトの Python パッケージの落とし穴を発見しました。それは、自分で作成した .py ファイルを直接インポートするのが難しいということです。
コマンドを直接使用する
python3 test.py
実行には問題ありませんが、rosrun または roslaunch コマンドを使用すると、エラーが報告されます。
rosrun control test.py
roslaunch control xxx.launch
エラーメッセージは次のとおりです。
Traceback (most recent call last):
File "/home/lanx/Program/robot/devel/lib/control/test.py", line 15, in <module>
exec(compile(fh.read(), python_script, 'exec'), context)
File "/home/lanx/Program/robot/src/control/scripts/test.py", line 5, in <module>
import Agent
ModuleNotFoundError: No module named 'Agent'
問題の原因
ネットで色々な方法を試してみましたが、
- catkin_python_setup() を設定するために setup.py を追加しましたが、失敗しました
- インポートする必要がある .py ファイルをサブフォルダーに配置し、__init__.py を追加します。失敗しました
- ROS ノードにインポートする必要がある .py ファイルをコンパイルしてインポートしますが、失敗します。
1 日苦労した結果、ROS パッケージの CMakeLists.txt で宣言する必要がないことがわかりました。
catkin_install_python(PROGRAMS
scripts/test.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
ROS ノードとして作成する必要がある .py ファイルは、許可を与えることでソースの後に rosrun コマンドを使用して見つけることができます。
chmod +x test.py
使用する場合は、test.py を対応する独自の .py ファイルに置き換えてください。