要約
ROSでpythonスクリプト書いてlaunchファイルのノードに追加してroslaunch
で実行してみたら
ERROR: cannot launch node of type [hoge_pkg/huga.py]: can't locate node [huga.py] in package [hoge_pkg]
とか急に言われて「?」となったらchmod +x huga.py
したかどうか思い出した方がいい。
pythonスクリプトとlaunchファイルを一気に作るとやりがちなミス。
rosrun
またはroslaunch
でpythonスクリプトを実行するときはシバンと実行権限を忘れないように。
具体的に
例えばhoge_pkgというパッケージにhuga.pyを作成して
huga.launch
<launch>
<!-- このへんにrosparamとかargとかいろいろタグつける -->
<node pkg="hoge_pkg" name="huga" type="huga.py" output="screen" />
</launch>
上のようなhuga.launchを作成した上でそのままターミナルで
$ roslaunch hoge_pkg huga.launch
を実行するとタイトルのようなエラーが出る。
この状態で
$ rosrun hoge_pkg huga.py
を実行すると今度は
[rosrun] Couldn't find executable named huga.py below /home/user1/catkin_ws/src/hoge_pkg
[rosrun] Found the following, but they're either not files,
[rosrun] or not executable:
[rosrun] /home/user1/catkin_ws/src/hoge_pkg/src/huga.py
のようなエラーが現れて、2つのエラーはファイルの実行権限を与えれば解消することがわかる。つまり
$ chmod +x huga.py
でOK.
ROSじゃなかったらpythonスクリプトはふつうpython
コマンドで実行するからシバン(#!/usr/bin/env python
←こんなん)なくても実行権限与えなくても動作する。
ROSだとpython
コマンドで実行しないからシバンも実行権限も必要。