You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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构建流程:

  1. 将代码放入catkin工作空间的src目录,创建新package:
    cd ~/catkin_ws/src
    catkin_create_pkg bag_to_sqlite roscpp rosbag
    
  2. 把main.cpp移至该package的src目录下
  3. 修改package.xml,添加依赖声明:
    <build_depend>roscpp</build_depend>
    <build_depend>rosbag</build_depend>
    <exec_depend>roscpp</exec_depend>
    <exec_depend>rosbag</exec_depend>
    
  4. 修改CMakeLists.txt,添加编译规则:
    add_executable(bag_reader src/main.cpp)
    target_link_libraries(bag_reader ${catkin_LIBRARIES})
    
  5. 回到工作空间根目录编译:
    cd ~/catkin_ws
    catkin_make
    source devel/setup.bash
    
  6. 运行编译后的节点:
    rosrun bag_to_sqlite bag_reader
    

4. 验证头文件路径

用以下命令确认rosbag头文件的实际存在路径:

rospack find rosbag

输出路径的../include/rosbag目录下应存在bag.h和view.h,若不存在则说明rosbag包未正确安装。


内容的提问来源于stack exchange,提问作者mykl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:35:21