(这里总结了大部分网上主流的解决方案)
前两天加了个功能,编译发现出现如下问题
ERROR: cannot launch node of type [decision/decision]: Cannot locate node of type [decision] in package [decision]. Make sure file exists in package path and permission is set to executable (chmod +x)
图中 ERROR: cannot launch node of type后面指的是你的[功能包/节点],意思就是说找不到这个节点,打不开这包
也就是说看似编译通过,但是没有生成可执行文件
接下来我们可以通过下面这几个方式来查看我们的具体问题
一.查找问题
(1)你可以通过rosrun命令来查询是不是存在
rosrun [package_name] [node_name]
如果可以查询到,那么建议你将工作空间下的devel和build删除,重新通过catkin_make指令编译就好了,然后在你正式运行.launch文件之前要记得在当前工作空间setup一下
source devel/setup.bash
(2) rosrun命令找不到
如果你也和我一样,rosrun命令找不到,那你可以去你的工作空间devel/lib/下面查找,看有没有你所需要的文件,针对我刚才的报错查找有没有decision,那就三你也可以在工作空间中通过以下指令查看
ls devel/lib
检查是否生成了可执行文件,如果没有生成,删除dev和build文件夹,重新编译。
如果还是没有,那就问题大了,因为以上就是网上主流的全部解决方案,所以接下来和我一样一步步查错吧(已解决)
因为我们是devel/lib/下面没有,所以我当时就在想是不是cmake问题,因为之前为了加log功能,我有做修改,然后就针对这个问题去查找了(cmake编译后devel中没有)词条,成功看到了一个大佬解决方案,接下来,我这里也转述下
其实很简单就是我们的cmake修改后我给catkin_package()丢了,我们在CMakeLists.txt文件中重新添加catkin_package()
命令就行修改后如下。
具体的catkin_package要如何添加,我将文档内容作了翻译,友友作为参考
catkin_package
宏:这个宏用于为你的包生成 CMake 配置文件。它可以声明一些信息,以便传递给依赖于你的包的其他项目。INCLUDE_DIRS
:如果你的包包含头文件,可以取消注释这一行来指定包含目录。这样,依赖于你的包的项目就可以找到这些头文件。LIBRARIES
:如果你在这个项目中创建了其他项目也需要的库,可以在这里列出。CATKIN_DEPENDS
:列出依赖于你的包的其他 Catkin 包。DEPENDS
:列出你的项目所需的系统依赖项,这些依赖项也可能被依赖于你的项目的其他项目所需要。