Semi-direct Visual Odometry(SVO)安装配置

本文详细介绍如何在ROS环境中安装配置SVO( Semi-direct Visual Odometry ),包括所需依赖库Sophus、FAST、g2o的安装过程及ROS相关设置。此外还提供了运行示例数据的步骤。

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

ROS下的SVO安装配置

大致是按照作者给的步骤走的,代码地址点这里作者给的步骤点这里

SVO支持用ros和没有ros情况下运行,我试了没有ros的情况,也试了在ros运行,这里选择ros下的安装。

SVO需要建立两个工作空间workspace,一个用来放cmake工程,包括Sopuhus(一个李群库,懵逼),Fast(特征检测),还有可选的库g2o(图优化),另一个工作空间放ROS-Catkin工程rpg_vikit(vision kit)和rpg_svo(svo工程文件)。保证clone到正确的目录里。

1 Sophus李群库

Sophus实现李群代数,用来描述刚体运动变换的,安装步骤如下,一般不会出错。

cd workspace
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff
mkdir build
cd build
cmake ..
make

make后不需要install,cmake ..会将包地址写到~/.cmake/packages/目录下,cmake可以找到这里

2 Fast 角点检测库

用来检测角点的,基本不会错,步骤如下:

cd workspace
git clone https://github.com/uzh-rpg/fast.git
cd fast
mkdir build
cd build
cmake ..
make

3 g2o - General Graph Optimization (可选)

在需要运行bundle adjustment时要安装,在做visual odometry时不是必要安装的。作者在MAV上没有运行g2o。g2o的安装依赖包括:cmake, libeigen3-dev, libsuitesparse-dev, libqt4-dev, qt4-qmake, libqglviewer-qt4-dev。可以用apt-get install分别安装。安装步骤:

cd workspace
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build
cd build
cmake ..
make
sudo make install

如果不想在系统安装的话,可以将cmake指令用cmake .. -CMAKE_INSTALL_PREFIX:PATH=$HOME/installdir代替。

4 vikit - Some useful tools that we need

vikit库包含相机模型、一些svo用到的数学和插值函数,vikit是一个catkin工程,所以需要下载到catkin工作空间的目录

cd catkin_ws/src
git clone https://github.com/uzh-rpg/rpg_vikit.git

5 ROS 依赖项

有时候cmake-modules会丢失 (required for including Eigen in ROS Indigo),不懂这个干嘛的,按照步骤装。

sudo apt-get install ros-indigo-cmake-modules

indigo换成自己的ros版本。

6 SVO安装

现在可以编译build svo了,把它clone到catkin工作空间。

cd catkin_ws/src
git clone https://github.com/uzh-rpg/rpg_svo.git

以下三句很重要,我没有运行这几句,roslaunch一直出错

source devel/setup.bash
echo “source ~/catkin_ws/devel/setup.bash” >> ~/.bashrc
source ~/.bashrc

如果安装了g2o的话,把svo/CmakeLists.txt里的HAVE_G20设置为TRUE。
d如果把g2o安装在$HOME/installdir的话,需要设置环境变量G2O_ROOT告诉find_package.

export G2O_ROOT=$HOME/installdir

d最后编译build svo

catkin_make

7 下载数据run

下载数据,数据地址点这里,比较大,有1.7g左右,下载完成后放在catkin_ws/src目录下(究竟放哪里比较好不清楚,这里反正是可以运行的)。

d打开四个terminal运行

1) terminal for roscore

roscore

2) terminal for roslaunch

roslaunch svo_ros test_rig3.launch

3) terminal for rviz (robot visualizer)

rosrun rviz rviz -d /home/your_pc_name/catkin_ws/rpg_svo/svo_ros/rviz_config.rviz

4) terminal for rosbag

cd ~/catkin_ws/src
rosbag play airground_rig_s3_2013-03-18_21-38-48.bag

现在应该就可以看到运行的效果了,包括跟踪的特征点和Rviz里面移动的相机,如果想看到跟踪到的特征数、fps和跟踪质量tracking quality的话,运行GUI。

若是需要用自己的摄像头运行程序,需要对相机进行标定,并修改/catkin_ws/src/rpg_svo/svo_ros/param目录下camera_atan.yaml, camera_pinhole.yaml的相机参数。或者将camera文件起一个不一样的名字,然后修改launchFile,目录为svo_ros/launch/live.launch,更改为新的标定yaml文件。最后运行roslaunch svo_ros live.launch。这个还没试,以后试过了更新。

快捷键

s :start/restart
q :quit
r :reset

ROS安装参考

  1. http://www.jianshu.com/p/04be841e2293
  2. http://blog.youkuaiyun.com/u013453604/article/details/49386953
### 关于CNN-SVO的复现方法 #### 背景介绍 CNN-SVO 是一种结合卷积神经网络 (Convolutional Neural Network, CNN) 和半直接法视觉里程计 (Semi-Direct Visual Odometry, SVO) 的技术方案。该方法旨在利用深度学习的优势来提升传统 SVO 方法的效果,特别是在特征提取阶段[^4]。 #### 复现步骤概述 以下是实现 CNN-SVO 模型的关键部分: --- #### 数据准备 为了训练和验证 CNN-SVO 模型,需要收集并整理用于训练的数据集。通常情况下,这些数据来自公开可用的 SLAM 数据库,例如 KITTI 数据集或 TUM RGB-D 数据集。确保数据集中包含时间同步的图像序列以及对应的地面真值位姿信息。 --- #### 特征提取模块设计 在 CNN-SVO 中,CNN 部分主要负责从输入图像中提取鲁棒的特征表示。可以选择经典的 CNN 架构作为基础模型,例如 ResNet 或 VGG。以下是一个简单的 PyTorch 实现示例: ```python import torch.nn as nn class FeatureExtractor(nn.Module): def __init__(self): super(FeatureExtractor, self).__init__() self.cnn = nn.Sequential( nn.Conv2d(in_channels=3, out_channels=64, kernel_size=7, stride=2, padding=3), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2), nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding=1), nn.ReLU() ) def forward(self, x): return self.cnn(x) ``` 上述代码定义了一个基本的 CNN 结构,用于从输入图像中提取空间特征[^1]。 --- #### 时间序列建模 由于视觉里程计涉及连续帧之间的关系建模,因此可以采用循环神经网络 (Recurrent Neural Network, RNN) 来捕捉时序依赖性。具体来说,长短时记忆网络 (Long Short-Term Memory, LSTM) 是更优的选择,因为它能够有效缓解梯度消失问题[^2]。 下面展示如何将 LSTM 整合到整体架构中: ```python class PoseEstimator(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(PoseEstimator, self).__init__() self.lstm = nn.LSTM(input_dim, hidden_dim, batch_first=True) self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, features): lstm_out, _ = self.lstm(features) pose = self.fc(lstm_out[:, -1, :]) # 取最后一个时间步的输出 return pose ``` 此模块接收由 CNN 提取的空间特征,并将其转换为相机位姿估计结果。 --- #### 训练过程配置 完成模型搭建后,需设置损失函数和优化器以指导训练过程。对于视觉里程计任务,常用的损失函数包括欧氏距离误差和平移旋转角度误差组合形式。以下提供一段完整的训练脚本片段: ```python criterion = nn.MSELoss() # 均方误差损失 optimizer = torch.optim.Adam(model.parameters(), lr=0.001) for epoch in range(num_epochs): model.train() total_loss = 0 for images, poses in dataloader: optimizer.zero_grad() cnn_features = feature_extractor(images) predicted_poses = pose_estimator(cnn_features.view(len(images), -1)) loss = criterion(predicted_poses, poses) loss.backward() optimizer.step() total_loss += loss.item() avg_loss = total_loss / len(dataloader) print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {avg_loss:.4f}') ``` 以上代码展示了如何联合训练 CNN 和 LSTM 组件[^3]。 --- #### 测试与评估 经过充分训练之后,在独立测试集上验证模型性能至关重要。可以通过计算平均绝对误差 (MAE) 或均方根误差 (RMSE) 等指标衡量预测精度。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值