1.出现路径警告例如:
[0.191s] WARNING:colcon.colcon_core.prefix_path.colcon:The path '/home/su/code/ROS/src/install' in the environment variable COLCON_PREFIX_PATH doesn't exist
[0.191s] WARNING:colcon.colcon_ros.prefix_path.ament:The path '/home/su/code/ROS/src/install/village_li' in the environment variable AMENT_PREFIX_PATH doesn't exist
[0.161s] WARNING:colcon.colcon_ros.prefix_path.ament:The path '/home/su/code/ROS/install/village_li' in the environment variable AMENT_PREFIX_PATH doesn't exist
基本上会出现这种问题:
这是因为在运行source install/setup.sh命令时,在/dev_ws和/dev_ws/src目录下执行该命令,会往AMENT_PREFIX_PATH,CMAKE_PREFIX_PATH,COLCON_PREFIX_PATH三个地方添加环境变量。
我们可以使用printenv AMENT_PREFIX_PATH指令去查看现在所存在的变量
printenv AMENT_PREFIX_PATH
/home/su/code/ROS/install/village_wang:/home/su/code/ROS/install/village_li:/home/su/code/ROS/src/install/village_li:/opt/ros/humble
如果变量过多,可能没有办法去准确去找到我们所需要的路径
那么我们可以对其进行自定义:
这样设置好了之后路径就是我们想要的路径了
CMAKE_PREFIX_PATH=/home/su/code/ROS/install
OLCON_PREFIX_PATH=/home/su/code/ROS/install
2.尤其是C++文件出现找不到头文件的情况
/home/su/code/ROS/src/village_wang/src/wang2.cpp:2:10: fatal error: std_msgs/msg/string.hpp: 没有那个文件或目录
2 | #include "std_msgs/msg/string.hpp"
| ^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [CMakeFiles/wang2_node.dir/build.make:76:CMakeFiles/wang2_node.dir/src/wang2.cpp.o] 错误 1
gmake[1]: *** [CMakeFiles/Makefile2:137:CMakeFiles/wang2_node.dir/all] 错误 2
gmake: *** [Makefile:146:all] 错误 2
首先我们先检查Vscode的配置文件,头文件是否包含进来了这里面包含了已有的文件
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/opt/ros/humble/include/**",
"/opt/ros/humble/include/std_msgs/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
其次:我们要在CMakeLists.txt,文件中进行修改,因为C++在编译的过程中需要配置CMake文件,看看在最后是不是加上了这两句话。
#第一行是制定将 src/wang2.cpp 编译成一个可执行文件,并且命名为 wang2_node,并且在这个文件中我们定义了一个wang2的节点
add_executable(wang2_node src/wang2.cpp)
#第二行是添加依赖项
ament_target_dependencies(wang2_node rclcpp std_msgs)
#第三行是制定安装的路径,它将 wang2_node 安装到 ${PROJECT_NAME} 目录下的 lib 子目录中。
install(TARGETS
wang2_node
DESTINATION lib/${PROJECT_NAME}
)
如果你希望将 wang2_node 安装到其他目录,你可以将 DESTINATION 参数的值修改为你想要的路径。例如,如果你想将它安装到 ${PROJECT_NAME} 目录下的 bin 子目录中,可以将 DESTINATION 参数的值修改为 bin/${PROJECT_NAME}。
第三行的效果