1. 初识OpenVINS:为什么选择它来做RGB-D建图?
大家好,我是老张,在机器人感知和视觉SLAM这块儿摸爬滚打了十来年。今天想和大家聊聊一个我个人非常喜欢,并且在项目里反复验证过的工具——OpenVINS。如果你正在为机器人、无人机或者AR/VR设备寻找一个稳定、高效的视觉惯性里程计(VIO)方案,特别是手头有像Intel RealSense D435i这样的RGB-D相机,那这篇文章可能就是为你准备的。
OpenVINS是什么?简单说,它是一个开源的视觉惯性状态估计器。它的核心是一个扩展卡尔曼滤波器(EKF),能把相机拍到的图像特征点和IMU(惯性测量单元)的数据巧妙地融合在一起,实时估算出设备在空间中的位置、姿态和速度。和那些基于优化的SLAM系统(比如VINS-Mono, ORB-SLAM3)相比,基于滤波器的OpenVINS计算量更可控,对硬件要求相对友好,在资源受限的嵌入式设备上跑起来也更“稳”。
那为什么特别适合RGB-D相机呢?传统的单目VIO有个老大难问题:尺度不确定性。单目相机没法直接知道一个像素点对应真实世界多远的距离,就像你闭上一只眼睛,很难准确判断一个物体离你有多远。而RGB-D相机(比如RealSense D系列)天生就自带一个深度传感器,能直接给出每个像素点的深度信息。OpenVINS能很好地利用这个深度信息,在系统启动的瞬间就确定正确的尺度,避免了单目系统那段令人头疼的“初始化漂移期”。实测下来,用D435i配合OpenVINS,在室内环境下,建图和定位的精度和稳定性都非常出色,对于做机器人自主导航或者AR场景构建的朋友来说,这无疑是个好消息。
2. 从零开始:搭建你的OpenVINS开发环境
万事开头难,环境配置是第一个坎。别担心,我带着你一步步走,把我踩过的坑都给你标出来。
2.1 系统与ROS基础
首先,我强烈推荐使用 Ubuntu 18.04 + ROS Melodic 这个组合。虽然新版的Ubuntu 20.04/22.04和ROS Noetic/Humble也能搞,但OpenVINS的一些依赖(尤其是某些版本的OpenCV)在旧系统上兼容性最好,能省去大量折腾的时间。如果你已经装好了ROS Melodic,那么恭喜你,基础工作完成了一大半。
接下来是安装一些通用依赖。打开终端,一条命令搞定:
sudo apt-get update
sudo apt-get install -y git cmake build-essential libeigen3-dev libboost-all-dev
2.2 搞定OpenCV:避开网络“墙”的坑
OpenVINS需要OpenCV来处理图像。ROS Melodic自带OpenCV 3.2,这个版本其实可以直接用,编译OpenVINS时能通过。但如果你想用更新的一些特性,或者未来做其他开发,可以自己安装OpenCV 3.4或4.x。这里有个经典大坑,就是编译OpenCV时下载ippicv等第三方库会失败,因为源文件在国外。
我的解决方案:别硬等它下载失败。先去网上(比如GitHub)搜索ippicv_2020_lnx_intel64_20191018_general.tgz这个文件,手动下载下来。然后找到你OpenCV编译目录下的3rdparty/ippicv文件夹,把下载好的文件放进去,并重命名为ippicv.cmake里期望的名字(通常是ippicv_2020_lnx_intel64_20191018_general.tgz)。接着重新cmake和make,就能顺利跳过了。这个法子百试百灵。
2.3 创建工作空间与克隆代码
现在来准备OpenVINS的家。我们创建一个Catkin工作空间:
mkdir -p ~/catkin_ov/src
cd ~/catkin_ov/src
克隆OpenVINS的代码。官方仓库在GitHub,国内访问可能慢,我们可以用Gitee的镜像:
git clone https://gitee.com/hongliyu-lvliyu/open_vins.git
克隆完成后,目录结构应该是~/catkin_ov/src/open_vins。
2.4 编译与第一个“拦路虎”
进入工作空间根目录,开始编译:
cd ~/catkin_ov
catkin build -DDISABLE_MATPLOTLIB=ON
这里加-DDISABLE_MATPLOTLIB=ON是因为默认的绘图工具可能带来额外的依赖问题,我们先关掉它,保证核心功能能先跑起来。
编译时你很可能遇到的第一个错误:提示‘ROS_ERROR’ was not declared in this scope。别慌,这个问题很常见。错误原因是某个源文件里用了ROS_ERROR打印日志,但没有包含ROS的头文件。
解决步骤:
- 根据编译错误提示的路径,找到那个.cpp文件。
- 打开它,在文件开头的
#include区域,添加一行#include <ros/ros.h>。 - 保存文件,重新执行
catkin build。
可能遇到的第二个警告:WARNING: Your current environment‘s CMAKE_PREFIX_PATH is different from the cached CMAKE_PREFIX_PATH...。这个警告提示你环境变量有变化。最干净的处理方式是:
catkin clean
5758



被折叠的 条评论
为什么被折叠?



