rosrunでバイナリの実行ファイルがcannot launch nodeになるときは

devel/lib/(rospackage)/(executable) がちゃんと存在して、実行属性もついてて、絶対パスなら動くのに、

ERROR: cannot launch node of type [(rospackage)/(executable)]: can't locate node [(executable)] in package [(rospackage)]

などとエラーになって動かなかった。
だいたいこういうのはcatkin_makeのあとのsource devel/setup.bashを忘れているのだが、改めてこれを実行しても直らない。

ところであなたはワークスペースシンボリックリンクにしていないか。
私はこのとき、ゆえあって~/catkin_ws_xxxを~/catkin_wsにシンボリックリンクしていた。
ふと思い立ってシンボリックリンクを削除し、~/catkin_ws_xxxを~/catkin_wsにリネームすると、嘘のようにエラーが消えた。

何かシンボリックリンクまわりで不具合があるようだけど、rosrunのPythonスクリプトを追いかける気力はなかった。