使用C++与SQLite导入rosbag至数据库时,VSCode头文件缺失报错求助
解决VS Code中引入rosbag头文件找不到的问题
问题描述
我想用C++和SQLite将rosbag内容导入数据库,但在VS Code编写代码时,引入<rosbag/bag.h>和<rosbag/view.h>头文件出现如下错误:
main.cpp:2:10: fatal error: rosbag/bag.h: No such file or directory
2 | #include <rosbag/bag.h>
| ^~~~~~~~~~~~~~
参考ROS官方示例编写的代码如下:
#include <ros/ros.h> #include <rosbag/bag.h> #include <rosbag/view.h> int main(int argc, char **argv) { rosbag::Bag bag; bag.open("input.bag", rosbag::bagmode::Read); rosbag::View view(bag); ros::Time bag_begin_time = view.getBeginTime(); ros::Time bag_end_time = view.getEndTime(); std::cout << "ROS bag time: " << (bag_end_time - bag_begin_time).toSec() << "(s)" << std::endl; bag.close(); return 0; }
解决方案
1. 确认ROS环境与rosbag包安装
- 安装对应ROS版本的rosbag包(以Noetic为例):
sudo apt-get install ros-noetic-rosbag - 每次打开终端后,必须加载ROS环境变量:
source /opt/ros/noetic/setup.bash # 若使用自定义catkin工作空间,额外加载工作空间配置 source ~/catkin_ws/devel/setup.bash
2. 配置VS Code的C/C++包含路径
- 打开VS Code命令面板(Ctrl+Shift+P),输入
C/C++: Edit Configurations (JSON),打开c_cpp_properties.json文件 - 在
includePath数组中添加ROS头文件根路径,替换<你的ROS版本>为实际版本(如noetic/melodic):{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/opt/ros/<你的ROS版本>/include/**" ], "compilerPath": "/usr/bin/g++", "cppStandard": "c++17", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 }
3. 使用Catkin构建系统编译项目
ROS项目不能直接用普通g++编译,必须依赖Catkin构建流程:
- 将代码放入catkin工作空间的
src目录,创建新package:cd ~/catkin_ws/src catkin_create_pkg bag_to_sqlite roscpp rosbag - 把
main.cpp移至该package的src目录下 - 修改
package.xml,添加依赖声明:<build_depend>roscpp</build_depend> <build_depend>rosbag</build_depend> <exec_depend>roscpp</exec_depend> <exec_depend>rosbag</exec_depend> - 修改
CMakeLists.txt,添加编译规则:add_executable(bag_reader src/main.cpp) target_link_libraries(bag_reader ${catkin_LIBRARIES}) - 回到工作空间根目录编译:
cd ~/catkin_ws catkin_make source devel/setup.bash - 运行编译后的节点:
rosrun bag_to_sqlite bag_reader
4. 验证头文件路径
用以下命令确认rosbag头文件的实际存在路径:
rospack find rosbag
输出路径的../include/rosbag目录下应存在bag.h和view.h,若不存在则说明rosbag包未正确安装。
内容的提问来源于stack exchange,提问作者mykl
相关产品推荐
相关产品推荐

