ROS2 humble + vocode + C++ 错误合集(自用)


前言

自用,持续更、不定时更
如果对于以下的问题有更好的方法,或是以下哪部分内容存在错误,欢迎大家指出和更正,非常希望能和大家一起交流!!


一、检测到 #include 错误。请更新includePath。

检测到 #include 错误。请更新includePath。已为此翻译单元(/home/lty/ros2_21_tutorials/learning_node_cpp/src/node_helloworld_class.cpp)禁用波形曲线。C/C++(1696)

方法一: 找到.vscode文件中c_cpp_properties.json
添加以下两行代码

"/opt/ros/humble/include/**", 
"/opt/ros/humble/include/std_msgs"

crtl+s保存之后报错消除

代码整体:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/opt/ros/humble/include/**", 
                //在ROS2中,通常会将ROS2的头文件安装在 /opt/ros/humble/include 目录下,其中 humble 是你所使用的ROS2发行版。
                //因此,添加这些路径可以确保编译器能够找到ROS2的头文件,从而顺利编译和构建你的ROS2节点程序。
                "/opt/ros/humble/include/std_msgs"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

在这里插入图片描述
方法二: 将鼠标放在红波浪线上,点击快速修复 -> 编辑includePath设置
在这里插入图片描述
在这里插入图片描述
在包含路径下添加刚刚两行代码在这里插入图片描述



二、虚拟机打开笔记本内置摄像头灯亮却黑屏问题

1.连接摄像头
虚拟机 -> 可移动设备 -> Bison Intergrated Camera(不同电脑名字不一样) -> 连接 -> 确定
在这里插入图片描述
2.下载webcam

sudo apt install webcam

3.下载cheese

sudo apt install cheese

4.虚拟机设置

虚拟机 -> 设置 在这里插入图片描述
USB控制器 -> USB兼容性 (2改3,3改2)
在这里插入图片描述

5.打开cheese

cheese

若提示未发现设备可能是步骤1没有连接



三、bash: install/setup.bash: 没有那个文件或目录

source install/setup.bash
//将bash改成sh
source install/setup.sh


四、rclcpp/rclcpp.hpp: 没有那个文件或目录



五、colcon: error: unrecognized arguments: --packages-select learning_topic

输入 colcon build --packages-select learning_topic

xx:~/ros2_ws$ colcon build --packages-select learning_topic

出现报错

usage: colcon [-h] [--log-base LOG_BASE] [--log-level LOG_LEVEL] {build,test,test-result} ...
colcon: error: unrecognized arguments: --packages-select learning_topic

方法:
输入sudo apt install python3-colcon-common-extensions,(重新)安装colcon后即可
在这里插入图片描述



六、找不到自定义的接口包

从错误消息来看,CMake在尝试查找learning_ros2_interfaces包的配置文件时失败了。这通常意味着CMake在预期的路径中没有找到这个包,或者该包尚未被安装。
在这里插入图片描述
可能原因:
(1)检查CMakeLists.txt
确保CMakeLists.txt文件正确调用了find_package

find_package(learning_ros2_interfaces REQUIRED)

在这里插入图片描述

ament_target_dependencies(interfaces_robot
  rclcpp
  learning_ros2_interfaces
)

在这里插入图片描述

(2)检查package.xml

  <depend>learning_ros2_interfaces</depend>

在这里插入图片描述

(3)若是误删接口某些文件或改动过接口文件名
简单粗暴:重建功能包
补充:
删除了learning_ros2_interfaces接口包后,重建接口包重新编译,出现警告仍然显示之前接口包路径不存在时,可以尝试以下具体步骤来解决问题:

  • 清理构建系统缓存文件
    在ROS 2工作空间中执行以下命令,清理构建系统生成的缓存文件
cpp rm -rf install build log
  • 重新构建项目
colcon build
  • 重新加载配置文件:
    如果在修改shell配置文件后没有重新加载配置文件,可以执行以下命令重新加载配置文件:
   source ~/.bashrc

通过执行以上具体步骤,解决警告显示路径不存在的问题。



七、ros2 param dump /turtlesim 无反应/未保存

输入ros2 param dump /turtlesim,没有显示保存文件
在这里插入图片描述
解决方法:
(1)输入命令

ros2 param dump /turtlesim --output-dir ~/turtle_ws

出现--output-dir选项被弃用的警告,并建议使用重定向来保存到文件,将输出保存到/home/***/turtle_ws/turtlesim.yaml文件中。

WARNING: '--output-dir' is deprecated; use redirection to save to a file
Saving to:  /home/***/turtle_ws/turtlesim.yaml

可以通过路径找到此文件,可在此文件内直接改动param
在这里插入图片描述
(2)将小乌龟关闭重新打开,输入命令,后边是刚刚保存的路径

ros2 param load /turtlesim /home/***/turtle_ws/turtlesim.yaml

注: /turtlesim [空格]/home/***/turtle_ws/turtlesim.yaml
在这里插入图片描述
(3)补充:输入加载命令时出错,注意文件路径(同上)

ros2 run turtlesim turtlesim_node --ros-args --params-file /home/***/turtle_ws/turtlesim.yaml



八、创建srv文件时出现"fatal error: xxx/xxx.h: 没有那个文件或目录"

编写服务自定义接口时,编译出现错误
在这里插入图片描述
但是我是没有编写msg文件的。

经过检查可能有以下原因:

(1).srv的文件编写时,格式出现错误
在这里插入图片描述
(2)看CmakeLists.txt有没有添加依赖和srv文件目录
在这里插入图片描述
(3)看在package.xml中有没有添加xxx.srv所需的依赖
在这里插入图片描述
经过检查,重新编译,成功。

在这里插入图片描述

九、删掉某个文件后,编译仍然出现not found: “/home/***/towm_ws/install/learning_interfaces/share/删掉的文件名/local_setup.sh”

在这里插入图片描述
去工作空间的buildinstall中删掉相关的文件夹

在这里插入图片描述
删掉后,报错消失。

在这里插入图片描述


十、bash: 未预期的记号 “newline” 附近有语法错误

输入

conda create -n ros2 python=<3.10>

出现报错

bash: 未预期的记号 "newline" 附近有语法错误

<> 去掉即可

conda create -n ros2 python=3.10

在这里插入图片描述

十一、jupyter中/home/xxx/minicnda3/lib/libstdc+t.so.6: version 'GLIBcx_3.4.38’not found

jupyter输入代码运行时,出现报错/home/xxx/minicnda3/lib/libstdc+t.so.6: version 'GLIBcx_3.4.38'not found

在这里插入图片描述
参考大佬文章:解决 libstdc++.so.6: version ‘GLIBCXX_3.4.30‘ not found 问题

第一步: 使用 ll 命令列出了/xxx/../lib/libstdc++.so.6 这个符号链接的详细信息。

ll /home/lty/miniconda3/envs/ros2/bin/../lib/libstdc++.so.6

第二步: 使用 strings 命令和 grep 工具尝试查找libstdc++.so.6文件中是否包含特定的版本字符串GLIBCXX_3.4.30

strings libstdc++.so.6 | grep GLIBCXX_3.4.30

很明显,并没有

第三步: 用于安装 plocate 包,它是 mlocate 的一个分支,用于跟踪文件系统上文件的位置。

sudo apt install plocate

在这里插入图片描述

第四步: 使用locate命令来搜索文件

locate libstdc++.so.6

在这里插入图片描述
第五步: 使用strings命令和grep查找到了/usr/lib/x86_64-linux-gnu/libstdc++.so.6文件确实包含GLIBCXX_3.4.30版本。

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4.30

第六步: 删除/home/lty/miniconda3/envs/ros2/bin/../lib/libstdc++.so.6这个符号链接。

rm /home/lty/miniconda3/envs/ros2/bin/../lib/libstdc++.so.6

第七步: 创建一个指向 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 的符号链接到指定的 Conda环境中。

ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 

在这里插入图片描述
现在,Conda环境ros 2应该链接到了系统中正确的libstdc++.so.6版本。这应该解决了之前遇到的版本不兼容问题。

重新启动jupyter,无报错。
在这里插入图片描述

十二、failed to create symbolic link ‘/home/xxx/learning_interfaces2’ because existing path cannot be removed: Is a directory

在这里插入图片描述
问题原因
错误信息 “because existing path cannot be removed: Is a directory” 指出在尝试删除一个路径时,该路径实际上是一个目录,而不是一个文件。

解决方法
删除或重命名现有目录:

rm -rf /home/xxx/learning_interfaces2

十三、正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 6347(unattended-upgr)持有

今天在Ubuntu下安装软件时,出现报错!

sudo apt install ros-$ROS-DISTRO-xacro

在这里插入图片描述
报错信息: 正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 6347(unattended-upgr)持有
问题原因: 根据提供的信息,进程 6347(/usr/bin/python3 /usr/bin/unattended-upgrade)正在运行并占用了 dpkg 锁,导致我们无法安装软件包。
解决方法:
方法一:运行以下命令来终止进程:

sudo kill -9 6347

方法二:等待一会就能下载了。。

再次安装就能安装成功啦!

总结

自用

<think>好的,我现在需要解决用户在VSCode中编写ROS2 C++代码时遇到的`#include "rclcpp/rclcpp.hpp"`无法打开的问题。根据用户提供的引用信息,特别是引用[2],问题通常是因为C/C++插件找不到头文件路径。我需要一步步分析可能的解决方案。 首先,用户提到在Ubuntu下使用ROS Humble,头文件路径应该是`/opt/ros/humble/include/**`。但VSCode的C/C++插件默认可能没有包含这个路径。解决方法涉及修改`includePath`设置,添加ROS2的路径。用户需要打开配置,可能通过点击错误提示的小灯泡,或者手动编辑`c_cpp_properties.json`文件。此外,还需要确保安装了必要的插件,如C/C++扩展和ROS扩展。 接下来,我需要验证这些步骤是否可行。比如,添加`/opt/ros/humble/**`到includePath是否正确,是否覆盖所有子目录。另外,检查工作区配置是否正确,是否有多个配置文件导致冲突。可能还需要用户重新加载窗口或重启VSCode使配置生效。同时,提醒用户确认ROS2环境是否已正确source,因为如果终端没有source环境变量,VSCode可能无法识别路径。 最后,考虑是否有其他可能性,如路径拼写错误、权限问题,或者ROS2安装不完整。但根据引用[2]的描述,主要问题还是includePath的设置,所以应优先指导用户完成这一步骤,并确保配置正确。如果问题依旧存在,可能需要进一步检查系统环境或重新安装ROS2相关包。</think>### 解决ROS2 C++中`#include <rclcpp/rclcpp.hpp>`头文件无法打开的问题 #### 1. 确认ROS2环境配置 在编写ROS2 C++代码前,需确保已正确配置ROS2环境: ```bash source /opt/ros/humble/setup.bash # 根据ROS2版本替换为对应的路径 ``` 如果未执行此操作,VSCode可能无法识别ROS2的路径[^2]。 --- #### 2. 配置VSCode的C/C++插件 **步骤:** 1. **点击错误提示**:当出现`#include "rclcpp/rclcpp.hpp"`红色波浪线时,点击错误位置。 2. **选择“快速修复”**:点击出现的小灯泡图标,选择 **“编辑 "includePath" 设置”**。 3. **添加ROS2头文件路径**: - 在C/C++配置的 **包含路径(Include Path)** 中,添加以下路径: ```json "/opt/ros/humble/**" // 双星号表示递归包含所有子目录[^2] ``` - 确保路径与实际安装的ROS2版本(如`humble`、`galactic`)一致。 4. **保存配置**:修改后保存,VSCode会自动生成/更新`c_cpp_properties.json`文件,路径通常位于`.vscode/c_cpp_properties.json`。 --- #### 3. 验证配置文件 检查`c_cpp_properties.json`是否包含类似以下内容: ```json { "configurations": [ { "name": "Linux", "includePath": [ "/opt/ros/humble/**", // 关键路径 "${workspaceFolder}/**" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "gnu17", "cppStandard": "gnu++14" } ], "version": 4 } ``` --- #### 4. 安装VSCode扩展(可选但推荐) - **C/C++扩展**:提供代码提示和错误检测。 - **ROS扩展**:增强ROS2开发支持(如消息生成、节点调试)。 --- #### 5. 重新加载VSCode 修改配置后,重启VSCode或按`Ctrl+Shift+P`执行`Reload Window`,使配置生效。 --- #### 6. 其他可能原因 - **未正确安装ROS2包**:通过命令检查: ```bash sudo apt install ros-humble-rclcpp # 替换为对应版本 ``` - **权限问题**:确保`/opt/ros/humble`目录可读: ```bash sudo chmod -R a+r /opt/ros/humble ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值