1. 搭建VIO开发环境
任务目标
本案例完成VIO(视觉惯性里程计)开发环境的基础搭建:在Ubuntu 20.04系统中安装ROS Noetic、Eigen 3、Ceres Solver,并验证相机与IMU驱动能够正常发布数据。完成本案例后,你将拥有一个可运行后续VIO算法的最小开发环境。
环境与依赖
- 操作系统:Ubuntu 20.04 LTS(64位)
- ROS发行版:Noetic(与Ubuntu 20.04对应)
- Eigen:3.3.7或更高版本(线性代数库)
- Ceres Solver:1.14.0或更高版本(非线性优化库)
- 相机驱动:usb_cam(USB摄像头)或对应型号驱动
- IMU驱动:根据实际硬件选择(本案例以ROS标准imu_message为例)
安装步骤
以下命令在终端中依次执行,完成核心依赖安装:
# 1. 安装ROS Noetic(桌面完整版)
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 install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update
sudo apt install ros-noetic-desktop-full
# 2. 初始化ROS环境
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo rosdep init
rosdep update
# 3. 安装Eigen(系统自带3.3.7,确认版本)
sudo apt install libeigen3-dev
pkg-config --modversion eigen3
# 4. 安装Ceres Solver依赖并编译安装
sudo apt install libgoogle-glog-dev libgflags-dev libatlas-base-dev libsuitesparse-dev
cd ~/Downloads
wget http://ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar zxf ceres-solver-1.14.0.tar.gz
cd ceres-solver-1.14.0
mkdir build && cd build
cmake ..
make -j4
sudo make install
# 5. 安装usb_cam驱动(用于USB摄像头)
sudo apt install ros-noetic-usb-cam
# 6. 创建工作空间
mkdir -p ~/vio_ws/src
cd ~/vio_ws/src
catkin_init_workspace
cd ~/vio_ws
catkin_make
echo "source ~/vio_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
驱动验证
完成安装后,按以下步骤验证相机和IMU驱动是否正常工作:
1. 相机驱动验证
# 终端1:启动roscore
roscore
# 终端2:启动usb_cam节点(默认读取/dev/video0)
rosrun usb_cam usb_cam_node
# 终端3:查看相机话题是否发布
rostopic list | grep /usb_cam/image_raw
# 终端4:查看图像话题消息频率(应约30Hz)
rostopic hz /usb_cam/image_raw
通过条件:rostopic hz输出频率稳定在25~30Hz,且无报错信息。
2. IMU驱动验证(以通用IMU消息为例)
# 若使用真实IMU(如BMI088),需安装对应驱动;此处用ROS自带imu_simulator模拟验证消息通路
sudo apt install ros-noetic-imu-simulator
# 终端1:启动模拟IMU节点
rosrun imu_simulator imu_simulator
# 终端2:查看IMU话题
rostopic echo /imu/data -n 1
通过条件:rostopic echo输出包含orientation、angular_velocity、linear_acceleration字段,且数值在合理范围内(加速度约9.8m/s²,角速度接近0)。
环境自检脚本
将以下脚本保存为check_vio_env.sh,一键验证所有依赖是否就绪:
#!/bin/bash
echo "=== VIO环境检查 ==="
echo "1. ROS版本:"
echo $ROS_DISTRO
echo "2. Eigen版本:"
pkg-config --modversion eigen3
echo "3. Ceres版本:"
ls /usr/local/lib/libceres.so && echo "Ceres已安装"
echo "4. usb_cam包:"
rospack find usb_cam
echo "5. 相机设备:"
ls /dev/video* 2>/dev/null || echo "未检测到摄像头"
echo "=== 检查完成 ==="
运行bash check_vio_env.sh,若输出中ROS为noetic、Eigen版本≥3.3.7、Ceres库存在、usb_cam路径正确,则环境搭建成功。
常见问题
- usb_cam无法打开设备:确认摄像头连接,运行
lsusb查看设备;若权限不足,执行sudo usermod -a -G video $USER后重新登录。 - Ceres编译失败:确认已安装libsuitesparse-dev,且CMake版本≥3.5。
- roscore启动失败:检查
~/.bashrc中ROS环境变量是否已正确source。
完成以上步骤后,你的VIO开发环境已具备运行后续视觉惯性里程计算法的基础条件。下一步可开始采集相机与IMU的标定数据。