The manifest must not contain the following tags: 和 ffatal error: ros / ros.h : 没有那个文件或目录
在《机器人操作系统中》根据第三章建立agitr软件包,并新建了hello.cpp文件,内容是从书中复制的(问题就出在这里)。在工作目录运行 catkin_make 命令时,出现-错误
“The manifest (with format version 2) must not contain the following tags: run_depend”
这个问题在https://answers.ros.org/question/292888/error-the-manifest-with-format-version-2-must-not-contain-the-following-tags-run_depend/ 找到了:是把run_depend 更改成exec_depend.
改完之后就再次运行命令 :catkin_make,又出现问题
fatal error: ros / ros.h : 没有那个文件或目录。
按照书上的提示说很可能是CMakeLists.txt中头文件的包含问题,CMakeLists.txt的有效内容如下:
cmake_minimum_required(VERSION 2.8.3)
project(agitr)
find_package(catkin REQUIRED)
find_package(catkin REQUIRED COMPONENTS roscpp)
catkin_package()#这个包是找到/home/chen/program/ros_project/src/agitr中的include目录,所以如果软件包中没有include,就应该置为空
include_directories(
include
${catkin_INCLUDE_DIRS}#catkin_INCLUDE_DIRS这个参数指向路径catkin编译器的包含路径
)#包含头文件的路径,用到什么库的头文件把include的路径放在这里就行了。
add_executable(hello hello.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})
其中的语句都有解释。改完之后还是提示找不到头文件,最后在hello.cpp中把头文件包含改成绝对路径。就在这时,发现<>中的ros/ros.h中间又空格,删掉之后,竟然好了。找了一大圈,竟然是这个不是问题的问题,但是错误一直提示 fatal error: ros / ros.h : 没有那个文件或目录,问题也确实出在这里。这就是错误定位的能力问题了。
在顺利编译通过之后,运行 在工作区(刚才编译的地方)运行命令 :source devel/setup.bash 这个自动生成的脚本文件设置了若干环境变量,从而使 ROS 能够找到你创建的功能包和新生成的可执行文件。最后运行执行命令: (首先打开roscore)rosrun agitr hello ,出现以下错误:
terminate called after throwing an instance of 'ros::InvalidNameException'
what(): Character [ ] at element [5] is not valid in Graph Resource Name [hello _ros]. Valid characters are a-z, A-Z, 0-9, / and _.
已放弃 (核心已转储)
意思是说[hello _ros]在第[5](即第6个)个元素无效。看一下hello.cpp确实hello与_ros之间有一个空格,更改保存之后再次运行:rosrun agitr hello 同样出错。原因是源文件更改之后生成的可执行文件还是更改之前的执行的可执行文件也是之前的。所以更改源文件之后要重新编译(这个在vs或者linux下的qtcreator没有什么疑问)catkin_make,source devel/setup.bash,最后执行 rosrun agitr hello,出现正确结果:
[ INFO] [1535530121.928409762]: Hello , ??? ROS!