RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程

RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程

  • [1. 背景介绍](#1. 背景介绍)
  • [2. 问题描述](#2. 问题描述)
  • [3. 解决过程](#3. 解决过程)
    • [3.1 卸载旧版本](#3.1 卸载旧版本)
    • [3.2 安装 Suitesparse v5.8.0](#3.2 安装 Suitesparse v5.8.0)
    • [3.3 安装 Ceres Solver v2.0.0](#3.3 安装 Ceres Solver v2.0.0)
    • [3.4 解决编译爆内存问题](#3.4 解决编译爆内存问题)

同步发布在个人笔记RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程

1. 背景介绍

最近遇到一个需求,就是在 RISC-V 开发板:进迭时空 MUSE Pi Pro 上部署开源的 MSCKF 方案 open_vins

  • 进迭时空 MUSE Pi Pro
    MUSE Pi Pro 单板计算机将 RISC-V 八核处理器、存储硬盘、通用接口部件和扩展接口布置在同一块电路板上,支持 UEFI 启动以及多种操作系统和应用的运行,是一款完整的计算机系统产品。MUSE Pi Pro 为 1.8 寸单板,能够满足大语言模型应用、机器人、教育科研和物联网等场景中低功耗、空间紧凑情况下的算力需求,为 AI 新时代提供计算能力和丰富的接口扩展。
  • open_vins
    OpenVINS 项目包含一些核心计算机视觉代码以及最先进的基于滤波器的视觉惯性估计器。核心滤波器是一个扩展的卡尔曼滤波器,它将惯性信息与稀疏的视觉特征轨迹融合在一起。这些视觉特征轨迹利用多态约束卡尔曼滤波器 (MSCKF) 滑动窗口公式进行融合,该公式允许 3D 特征更新状态估计,而无需直接估计滤波器中的特征状态。受基于图的优化系统的启发,包含的过滤器具有模块化,允许使用适当的基于类型的状态系统方便地进行协方差管理。

2. 问题描述

在一般民用平台上部署官方是有详细可靠的步骤的Open_vins Getting Started >> Installation Guide

bash 复制代码
# ROS2 安装过程略去
# 安装相关依赖
sudo apt-get install ros-$ROS2_DISTRO-ros2bag ros-$ROS2_DISTRO-rosbag2* # rosbag utilities (seems to be separate)
sudo apt-get install libeigen3-dev libboost-all-dev libceres-dev

# 下载 open_vins 源码并编译
mkdir -p ~/workspace/catkin_ws_ov/src/
cd ~/workspace/catkin_ws_ov/src/
git clone https://github.com/rpng/open_vins/
cd ..
catkin build # ROS1
colcon build # ROS2
colcon build --event-handlers console_cohesion+ --packages-select ov_core ov_init ov_msckf ov_eval # ROS2 with verbose output

但是当在 RISC-V 平台(MUSE Pi Pro)上部署时,会遇到依赖安装上的问题。
主要有:

  1. Ceres Solver 最小二乘问题非线性优化库
    使用 libceres-dev 安装时,由于现在官方源里的 ceres 版本已经来到 v2.2.0,而 open_vins 适应的是 v2.0.0 及更早的版本。所以直接安装是不能成功编译的。故需要下载旧版本的 ceres 源码,手动编译安装。
    open_vins 不适配最新的 ceres 库是因为,自 v2.1.0 版本之后,类 LocalParameterization 被替换为类 Manifold了。
  2. Suitesparse 稀疏矩阵计算库
    在通过源码编译 ceres v2.0.0 时,通过官方源安装的 libsuitesparse-dev 又因为版本太新而无法编译,经过查阅发布时间,此时需要 v 5.8.0 的 Suitesparse 库。仍然需要手动源码安装。
  3. open_vins 编译卡死开发板
    依赖全部安装成功后,编译时会屡次卡死开发板。原因是内存不足导致的系统死机。

3. 解决过程

3.1 卸载旧版本

如果已经通过apt-get install 方式安装了错误版本的库,可以通过下述命令卸载错误的库以及相关的依赖。

bash 复制代码
### 相关命令
sudo apt remove example-package		# 删除软件包
sudo apt purge example-package		# 删除软件包,并且删除与该软件包相关的所有配置文件

sudo apt autoremove -s		# 查看卸载完成后不再需要的依赖包,并未直接卸载
sudo apt autoremove		# 卸载相关无用依赖包

### 本文相关
sudo apt remove libceres-dev libsuitesparse-dev
sudo apt purge libceres-dev libsuitesparse-dev

sudo apt autoremove -s
sudo apt autoremove

3.2 安装 Suitesparse v5.8.0

手动下载正确版本的源码,并解压。
Suitesparse 下载地址

安装相关依赖

bash 复制代码
sudo apt-get install libopenblas-dev
sudo apt-get install libgmp-dev
sudo apt-get install libmpfr-dev

由于 v5.8.0 的源码没有适配 Cmake 工具,所以仍然需要使用 make 命令进行编译安装

bash 复制代码
# 编译,可以指定使用几个 cpu 核
make -j4
# 安装,注意此版本必须指定安装位置为 /usr/local !!!
# 否则会安装在当前位置,无法被别的库默认搜索到
sudo make install INSTALL=/usr/local

# 卸载操作
sudo make uninstall DESTDIR=/path/to/installation
sudo make uninstall PREFIX=/path/to/installation

运行结束后,可以去路径 /usr/local 下的 includelib 文件夹查看是否有 Suitesparse 相关的文件。

3.3 安装 Ceres Solver v2.0.0

已经完成上一步的安装后,就可以开始安装 ceres 库了。

手动下载正确版本的源码,并解压。
Ceres Solver 下载地址

安装相关依赖

bash 复制代码
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev
# BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3 一般已经在安装 ROS 时安装过了
sudo apt-get install libeigen3-dev 
# SuiteSparse and CXSparse 已经通过上一步手动安装过了,故不需要再运行
sudo apt-get install libsuitesparse-dev

在 Ceres 源码文件夹内进行安装

bash 复制代码
mkdir build
cd build
cmake ..
make -j4
make test
# 默认安装在 /usr/local,无需指定
sudo make install

注意: 查看 cmake 的返回信息,是否包含成功找到 Suitesparse 库的字段,一般为如下形式:

bash 复制代码
-- Found LAPACK library: /usr/lib/riscv64-linux-gnu/libopenblas.so;-lm;-ldl
-- Found AMD headers in: /usr/local/include
-- Found AMD library: /usr/local/lib/libamd.so
-- Found CAMD headers in: /usr/local/include
-- Found CAMD library: /usr/local/lib/libcamd.so
-- Found COLAMD headers in: /usr/local/include
-- Found COLAMD library: /usr/local/lib/libcolamd.so
-- Found CCOLAMD headers in: /usr/local/include
-- Found CCOLAMD library: /usr/local/lib/libccolamd.so
-- Found CHOLMOD headers in: /usr/local/include
-- Found CHOLMOD library: /usr/local/lib/libcholmod.so
-- Found SUITESPARSEQR headers in: /usr/local/include
-- Found SUITESPARSEQR library: /usr/local/lib/libspqr.so
-- Found Intel Thread Building Blocks (TBB) library (2020.2 / 11102) include location: /usr/include. Assuming SuiteSparseQR was compiled with TBB.
-- Found SUITESPARSE_CONFIG headers in: /usr/local/include
-- Found SUITESPARSE_CONFIG library: /usr/local/lib/libsuitesparseconfig.so
-- Found LIBRT library: /usr/lib/riscv64-linux-gnu/librt.a
-- Adding librt: /usr/lib/riscv64-linux-gnu/librt.a to SuiteSparse_config libraries (required on Linux & Unix [not OSX] if SuiteSparse is compiled with timing).
-- Found METIS library: /usr/local/lib/libmetis.so
-- Found SuiteSparse: TRUE (found version "5.8.0")
-- Found SuiteSparse 5.8.0, building with SuiteSparse.
-- Found CXSparse: /usr/local/include (found version "3.2.0")
-- Found CXSparse version: 3.2.0, building with CXSparse.
-- Building without Apple's Accelerate sparse support.
-- Found Google Flags (gflags) version 2.2.2: /usr/lib/riscv64-linux-gnu/cmake/gflags
-- No preference for use of exported glog CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported glog CMake configuration if available.
-- Found installed version of glog: /usr/lib/riscv64-linux-gnu/cmake/glog
-- Detected glog version: 0.6.0
-- Found Glog: glog::glog
-- Found Google Log (glog). Assuming glog was built with gflags support as gflags was found. This will make gflags a public dependency of Ceres.

运行结束后,可以去路径 /usr/local 下的 includelib 文件夹查看是否有 Ceres 相关的文件。

3.4 解决编译爆内存问题

最后一步就是编译 open_vins 源码了,爆内存问题已通过下文笔记解决:
Ubuntu创建修改 Swap 文件分区的步骤------解决嵌入式开发板编译ROS2程序卡死问题

相关推荐
派阿喵搞电子26 分钟前
在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新
c++·qt·ubuntu·ui
5:004 小时前
云备份项目
linux·开发语言·c++
码农101号5 小时前
Linux中shell编程表达式和数组讲解
linux·运维·服务器
云道轩5 小时前
升级centos 7.9内核到 5.4.x
linux·运维·centos
是小满满满满吗5 小时前
传输层:udp与tcp协议
linux·服务器·网络
爱学习的小道长5 小时前
Ubuntu Cursor升级成v1.0
linux·运维·ubuntu
EelBarb5 小时前
seafile:ubuntu搭建社区版seafile12.0
linux·运维·ubuntu
Xam_d_LM5 小时前
【Latex】Windows/Ubuntu 绘制 eps 矢量图通用方法(drawio),支持插入 Latex 数学公式
linux·ubuntu·科研·矢量图·drawio
Mintimate6 小时前
云服务器 Linux 手动 DD 安装第三方 Linux 发行版:原理与实战
linux·运维·服务器