ROS2学习经验1(C++写节点编译出现的一些问题总结,及注意事项)

本文介绍了在ROS开发中遇到的路径警告问题,如何管理和自定义环境变量以确保正确路径,以及在C++项目中处理头文件找不到的问题,包括检查VSCode配置和CMakeLists.txt文件的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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}。

第三行的效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值