ROS2使用glog库部分问题整理

文章讲述了作者在从ROS1迁移至ROS2环境中使用glog时遇到的编译错误,涉及抽象类和纯虚函数的实现问题。通过源码安装与在线安装glog的对比,作者解决了因头文件路径问题导致的编译问题,最终通过修改本地logging.h文件解决了冲突。

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

本来是在ros1下调用glog库是正常的。
然后最近需要在ros2环境下工作,就顺便安装一下glog。

先说一下错误信息

‘GLOG_EXPORT’ does not name a type
这个会附带很长的相关报错。
例如下面这样
error <glog/logging.h> was not include correctly. See the documentation for how to consume the library.
解决方法:
在CMakeList中添加
add_compile_definitions(GLOG_USE_GLOG_EXPORT)

error: invalid new-expression of abstract class type’logger::Logger’
logger::Logger* logger = new Logger(google::base::GetLogger(google::INFO))

后面的note信息是:
because the following virtual functions are pure within ‘logger::Logger’:
class Logger : public google::base::Logger {

/usr/local/include/glog/logging.h
‘virtual void google::base::Logger::Write(bool, const char*, size_t)’
virtual void Write(bool force_flush,

查询了一下’invalid new-expression of abstract class type’是因为实例化了抽象类导致的。
而当前的Logger类的父类是google::base::Logger类,父类也是一个抽象类,所以应该是继承父类时,其纯虚函数Write未在子类中实现导致子类Logger也是抽象类。

分析出原因后,我发现我在Ros2安装时是源码安装的,其安装目录为usr/local/include,而其中的google::base::Logger类的Write是这样的
virtual void Write(bool force_flush, const std::chrono::system_clock::time_point& time stamp, const char* message, size_t message_len) = 0;

这与logger.h中的子类Write函数是无法对应的。
所以是最好在线安装,
因为我当前主机不能连接网络,所以去Ubuntu官网下载了gflags和glog的deb并安装了。
发现其安装目录是在usr/include下。
但我的工程死活索引不到usr/include下的logging.h文件(被自己菜到崩溃…)如果有懂的大佬可以教学一下。

所以我就直接修改了usr/local/include下的logging.h文件
将Write函数修改为与子类一致即可:
virtual void Write(bool force_flush, time_t time_stamp, const_char* message, int message_len) = 0;

问题解决。

<think>好的,我需要帮助用户了解如何在Ubuntu 20.04上配置VINS-Fusion。首先,我得回忆一下之前用户提供的引用内容,里面提到了几个关键步骤,比如安装ROS Noetic、配置依赖项、下载和编译VINS-Fusion,以及可能需要的GPU支持。 首先,用户的问题是关于配置VINS-Fusion,所以应该分步骤来写。根据引用[2],Ubuntu 20.04需要安装ROS Noetic,所以第一步肯定是安装ROS。然后引用[1]和[2]都提到了安装必要的依赖,比如ceres-solver和OpenCV。需要确保这些依赖的安装步骤正确,特别是ceres的编译安装,可能需要从源码构建。 接下来是下载VINS-Fusion的代码,用户可能需要克隆GitHub仓。然后编译,这里要注意编译的命令,比如使用catkin_make或者catkin build,但根据引用[3],用户进入VINS-Fusion-gpu文件夹后可能需要进行编译,所以可能需要指导用户正确使用catkin工具。 另外,引用[3]提到了GPU版本,可能需要配置CUDA或相关的GPU支持,但用户的问题中没有明确是否需要GPU配置。可能需要提到这一点作为可选步骤,或者根据引用中的信息,指出如何进入GPU版本的文件夹进行编译。 还要注意环境变量的设置,比如在.bashrc中添加source命令,确保ROS环境正确加载。同时,数据集测试部分也是关键,需要告诉用户如何下载公开数据集并运行程序,验证配置是否成功。 可能存在的一些问题包括依赖项安装失败、ROS包缺失、编译错误等。需要提醒用户注意这些常见问题,比如检查依赖是否安装正确,确保所有ROS依赖已安装,网络问题导致克隆仓失败等。 最后,生成相关问题时,要考虑用户可能的后续疑问,比如环境配置问题、如何运行自己的数据、GPU加速方法等。这些可以帮助用户进一步解决问题。 现在需要将以上思考整理成一个结构清晰的步骤指南,确保每个步骤都正确引用提供的资料,同时遵循系统级指令,比如使用正确的中文,LaTeX格式,添加引用标识等。</think>### 如何在 Ubuntu 20.04 上配置 VINS-Fusion 以下是分步配置流程,结合引用内容和实际操作要点: --- #### **1. 安装 ROS Noetic** VINS-Fusion 依赖 ROS 框架,Ubuntu 20.04 需安装 ROS Noetic: ```bash sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` 安装依赖工具: ```bash sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool sudo rosdep init rosdep update ``` [^2] --- #### **2. 安装依赖** - **Eigen3**(线性代数): ```bash sudo apt install libeigen3-dev ``` - **Ceres Solver**(优化): ```bash sudo apt install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev git clone https://github.com/ceres-solver/ceres-solver.git cd ceres-solver mkdir build && cd build cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF make -j4 sudo make install ``` - **OpenCV**(默认已包含在 ROS Noetic 中,无需额外安装)。 --- #### **3. 下载并编译 VINS-Fusion** 克隆代码仓: ```bash mkdir -p ~/vins_ws/src cd ~/vins_ws/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git ``` 编译项目: ```bash cd ~/vins_ws catkin_make echo "source ~/vins_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc ``` [^1][^3] --- #### **4. (可选)GPU 支持配置** 若需启用 GPU 加速,确保已安装 CUDA 和 cuDNN,并重新编译: ```bash cd ~/vins_ws/src/VINS-Fusion git checkout gpu_support cd ~/vins_ws catkin_make -DCUDA_USE=ON ``` --- #### **5. 测试运行** 下载公开数据集(如 [EuRoC MAV Dataset](https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets))并运行: ```bash roslaunch vins vins_rviz.launch rosrun vins vins_node src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml rosbag play YOUR_DATASET.bag ``` 观察 RVIZ 中的实时轨迹和特征点。 --- #### **常见问题** - **依赖项缺失**:若编译报错,检查是否遗漏 `libsuitesparse-dev` 或 `libgflags-dev`。 - **ROS 环境未加载**:确保 `source ~/.bashrc` 或重启终端。 - **CUDA 兼容性**:GPU 版本需匹配 CUDA 和显卡驱动版本。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值