Ubuntu20.04用D435i运行VINS-Mono

2023-05-16

Ubuntu20.04用D435i运行VINS-Mono

  • 一、安装VINS-Mono
    • 1.首先安装需要的ros包,如果安装的是完整ros,应该是都安装过的
    • 2.安装ceres solver,进VINS-Mono给的链接:
    • 3.安装VINS-Mono
  • 二、安装realsense
    • 1.安装相机驱动
    • 2.安装realsense-ros
  • 三、用D435i运行VINS-Mono
    • 1.修改realsense包里的rs_camera.launch文件
    • 2.修改VINS-Mono包里的realsense_color_config.yaml文件
    • 3.打开相机,运行VINS-Mono

搜到的一些资料都是Ubuntu16.04下用D435i运行VINS-Mono,ros版本都是Kinetic,对于Ubuntu20.04下的noetic版本的ros的资料较少,走了一些坑,终于算是跑起来了,记录一下过程
电脑配置:Intel NUC 12WSKi5(8+512)
系统:Ubuntu20.04
ros版本:noetic

参考:https://blog.csdn.net/qq_41839222/article/details/86552367
https://blog.csdn.net/weixin_44580210/article/details/89789416
https://blog.csdn.net/Chasinglight/article/details/128328183
https://blog.csdn.net/zardforever123/article/details/129042974

前置要求:
1.已经安装完成Ubuntu20.04系统
2.已经安装完成ROS-noetic
3.更换过国内源,并且有梯子(有些步骤如果下载缓慢就需要梯子)

一、安装VINS-Mono

直接进入VINS-Mono在Github的开源地址:
https://github.com/HKUST-Aerial-Robotics/VINS-Mono
根据里面的步骤:

1.首先安装需要的ros包,如果安装的是完整ros,应该是都安装过的

sudo apt-get install ros-noetic-cv-bridge ros-noetic-tf ros-noetic-message-filters ros-noetic-image-transport

2.安装ceres solver,进VINS-Mono给的链接:

http://ceres-solver.org/installation.html
根据官网步骤:
首先安装依赖glog和eigen3:终端中逐行输入以下代码

# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev libgflags-dev
# Use ATLAS for BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse (optional)
sudo apt-get install libsuitesparse-dev

将下载好的ceres-solver-2.1.0.tar.gz移到主目录下,在主目录下打开终端:逐行输入以下代码

tar zxf ceres-solver-2.1.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-2.1.0
make -j3
make test
# Optionally install Ceres, it can also be exported using CMake which
# allows Ceres to be used without requiring installation, see the documentation
# for the EXPORT_BUILD_DIR option for more information.
sudo make install

安装完成后验证安装:

bin/simple_bundle_adjuster ../ceres-solver-2.1.0/data/problem-16-22106-pre.txt

输出跟官网一致则ceres solver安装成功:

  iter      cost      cost_change  |gradient|   |step|    tr_ratio  tr_radius  ls_iter  iter_time  total_time
     0  4.185660e+06    0.00e+00    1.09e+08   0.00e+00   0.00e+00  1.00e+04       0    7.59e-02    3.37e-01
     1  1.062590e+05    4.08e+06    8.99e+06   5.36e+02   9.82e-01  3.00e+04       1    1.65e-01    5.03e-01
     2  4.992817e+04    5.63e+04    8.32e+06   3.19e+02   6.52e-01  3.09e+04       1    1.45e-01    6.48e-01
     3  1.899774e+04    3.09e+04    1.60e+06   1.24e+02   9.77e-01  9.26e+04       1    1.43e-01    7.92e-01
     4  1.808729e+04    9.10e+02    3.97e+05   6.39e+01   9.51e-01  2.78e+05       1    1.45e-01    9.36e-01
     5  1.803399e+04    5.33e+01    1.48e+04   1.23e+01   9.99e-01  8.33e+05       1    1.45e-01    1.08e+00
     6  1.803390e+04    9.02e-02    6.35e+01   8.00e-01   1.00e+00  2.50e+06       1    1.50e-01    1.23e+00

Solver Summary (v 2.1.0-eigen-(3.4.0)-lapack-suitesparse-(5.10.1)-acceleratesparse-eigensparse-no_openmp)

                                     Original                  Reduced
Parameter blocks                        22122                    22122
Parameters                              66462                    66462
Residual blocks                         83718                    83718
Residuals                              167436                   167436

Minimizer                        TRUST_REGION

Dense linear algebra library            EIGEN
Trust region strategy     LEVENBERG_MARQUARDT

                                        Given                     Used
Linear solver                     DENSE_SCHUR              DENSE_SCHUR
Threads                                     1                        1
Linear solver ordering              AUTOMATIC                 22106,16
Schur structure                         2,3,9                    2,3,9

Cost:
Initial                          4.185660e+06
Final                            1.803390e+04
Change                           4.167626e+06

Minimizer iterations                        7
Successful steps                            7
Unsuccessful steps                          0

Time (in seconds):
Preprocessor                         0.121654

  Residual only evaluation           0.065968 (7)
  Jacobian & residual evaluation     0.303356 (7)
  Linear solver                      0.436650 (7)
Minimizer                            0.890535

Postprocessor                        0.001684
Total                                1.013873

Termination:                      CONVERGENCE (Function tolerance reached. |cost_change|/cost: 1.769756e-09 <= 1.000000e-06)

3.安装VINS-Mono

主目录下新建一个工作空间,拷下VINS-Mono的github代码

mkdir -p ~/vinsmono_ws/src
cd ~/vinsmono_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git

然后需要对拷下来的代码进行更改以适配Ubuntu20.04和ros noetic
更改1:将所有文件夹下的CMakeLists.txt文件由C++11全部修改为C++14编译,具体有ar_demo,benchmark_publisher,camera_model,feature_tracker,pose_graph,vins_estimator这些文件夹

#set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_FLAGS "-std=c++14")

ROS noetic版本自带OpenCV4,而VINS-Mono中开发使用的是OpenCV3,修改VINS-Mono代码兼容OpenCV4。
更改2:在camera_model/include/chessboard下的头文件Chessboard.h中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>

更改3:在camera_model/include/calib的头文件CameraCalibration.h、pose_graph/src下的头文件pose_graph.hkeyframe.h以及pose_graph/src/ThirdParty/DVision下的头文件BRIEF.h中添加

#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>

更改完成,之后编译文件

cd ~/vinsmono_ws
catkin_make
echo "source ~/vinsmono_ws/devel/setup.bash" >> ~/.bashrc

运行之前在对应的配置文件***_config.yaml中修改结果输出目录,比如要运行Euroc数据集,则在euroc_config.yaml中更改

output_path: "your_path/output"

Euroc数据集可前往官网下载,从官网给的下载地址中下载,下载其中的bag文件,比如V1_01_easy.bag。将其放在目录~/dataset/下,然后分别打开三个终端

roslaunch vins_estimator euroc.launch 
roslaunch vins_estimator vins_rviz.launch
rosbag play ~/dataset/V1_01_easy.bag

运行结果如下图,如果运行起来了那就表示VINS-Mono安装成功
rviz

二、安装realsense

1.安装相机驱动

进入realsense官网的linux安装驱动链接,首先注册公钥:

sudo mkdir -p /etc/apt/keyrings
curl -sSf https://librealsense.intel.com/Debian/librealsense.pgp | sudo tee /etc/apt/keyrings/librealsense.pgp > /dev/null

确认https支持是否已经下载:

sudo apt-get install apt-transport-https

将服务器添加到存储库列表:

echo "deb [signed-by=/etc/apt/keyrings/librealsense.pgp] https://librealsense.intel.com/Debian/apt-repo `lsb_release -cs` main" | \
sudo tee /etc/apt/sources.list.d/librealsense.list
sudo apt-get update

安装库:

sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils

可选择安装developer和debug包

sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg

都安装完成后,插上相机,运行realsense,注意D435i需要连接USB3.0的口

realsense-viewer

运行结果如下图,注意左上方是否是USB3.*,USB2传输速率不足会很卡。
realsense软件图

2.安装realsense-ros

还是进realsense-ros的github官网,跟着官网的步骤来:
https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy
根据步骤:首先创建工作空间

mkdir -p ~/realsense_ws/src
cd ~/realsense_ws/src/

拷下realsense-ros的代码:

git clone https://github.com/IntelRealSense/realsense-ros.git
cd realsense-ros/
git checkout `git tag | sort -V | grep -P "^2.\d+\.\d+" | tail -1`
cd ..

确认ddynamic_reconfigure是否已经安装:

sudo apt-get install ros-noetic-ddynamic-reconfigure

编译文件:

catkin_init_workspace
cd ..
catkin_make clean
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install

添加.bashrc

echo "source ~/realsense_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证安装:
启动相机节点:

roslaunch realsense2_camera rs_camera.launch

查看话题列表,列表如下图所示:

rostopic list

realsense话题列表
运行以下代码可查看rgb图和深度图:

rosrun rqt_image_view rqt_image_view

realsense rgb图和深度图
运行如下代码可以查看点云图:

roslaunch realsense2_camera demo_pointcloud.launch

三、用D435i运行VINS-Mono

这里再贴一下参考:
从零开始使用Realsense D435i运行VINS-Mono
如何用Realsense D435i运行VINS-Mono等VIO算法 获取IMU同步数据

1.修改realsense包里的rs_camera.launch文件

第一处,修改unite_imu_method如下,这里是让IMU的角速度和加速度作为一个topic输出

<arg name="unite_imu_method"      default="copy"/>

第二处,修改enable_sync参数为true,这里是开机相机和IMU的同步

<arg name="enable_sync"           default="true"/>

然后是第三处,realsense默认图片流开启,但imu流却是关闭的,需要打开imu流:不然就会出现错误:执行roslaunch vins_estimator realsense_color.launch指令时提示:no previous pose graph,且打开rviz时无轨迹,fixed frame报错unknown frame world,这个上述博主都没讲到,不知是否是版本原因。

<arg name="enable_gyro"         default="true"/>
<arg name="enable_accel"        default="true"/>

2.修改VINS-Mono包里的realsense_color_config.yaml文件

第一处,修改订阅的topic

imu_topic: "/camera/imu"
image_topic: "/camera/color/image_raw"

第二处,修改相机内参,这里先再次打开运行realsesne

roslaunch realsense2_camera rs_camera.launch

然后可以通过如下命令获取相机内参

rostopic echo /camera/color/camera_info

请添加图片描述
图片的宽和高分别填入:

image_width: 1280
image_height: 720

K里面第1个是fx,第3个是cx,第5个是fy,第6个是cy,照读出来的对应填写即可。

projection_parameters:
   fx: 910.2757568359375
   fy: 909.9263305664062
   cx: 652.0943603515625
   cy: 379.8188781738281

第三处,IMU到相机的变换矩阵,这里因为没有去搞外参,所以选2自动修正

# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 2   # 0  Have an accurate extrinsic parameters. We will trust the following imu^R_cam, imu^T_cam, don't change it.
                        # 1  Have an initial guess about extrinsic parameters. We will optimize around your initial guess.
                        # 2  Don't know anything about extrinsic parameters. You don't need to give R,T. We will try to calibrate it. Do some rotation movement at beginning.                        
#If you choose 0 or 1, you should write down the following matrix.

第四处,IMU参数,这里全部修改注释给的参数

#imu parameters       The more accurate parameters you provide, the better performance
acc_n: 0.2          # accelerometer measurement noise standard deviation. #0.2
gyr_n: 0.05         # gyroscope measurement noise standard deviation.     #0.05
acc_w: 0.02         # accelerometer bias random work noise standard deviation.  #0.02
gyr_w: 4.0e-5       # gyroscope bias random work noise standard deviation.     #4.0e-5
g_norm: 9.805       # gravity magnitude

第五处,是否需要在线估计同步时差,因为realsense D435i已经做好了硬件同步,这里选择不需要

#unsynchronization parameters
estimate_td: 0                      # online estimate time offset between camera and imu
td: 0.000                           # initial value of time offset. unit: s. readed image clock + td = real image clock (IMU clock)

第六处,相机曝光改成全局曝光

#rolling shutter parameters
rolling_shutter: 0                      # 0: global shutter camera, 1: rolling shutter camera
rolling_shutter_tr: 0.033               # unit: s. rolling shutter read out time per frame (from data sheet). 

第七处,搜索output,把两个output_path改为自己的路径

output_path: "/home/zz/output/"
pose_graph_save_path: "/home/zz/output/pose_graph/"

3.打开相机,运行VINS-Mono

首先对realsense_ws和vinsmono_ws进行重新编译

cd ~/realsense_ws
catkin_make
cd ~/vinsmono_ws
catkin_make

打开相机,运行VINS-Mono,分别打开三个终端输入如下代码

roslaunch realsense2_camera rs_camera.launch 
roslaunch vins_estimator realsense_color.launch 
roslaunch vins_estimator vins_rviz.launch

拿着D435i在房间内走了一下,结果如下图所示
VINS-Mono运行的rviz界面
这样整个过程就走通了,最后如果rviz的Global Status一开始显示错误的话,就把相机拿起来动一动就可以了。
整个过程有些是必须从国外的源下载的,碰到有下载缓慢的情况,就把梯子开全局,速度就会上去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu20.04用D435i运行VINS-Mono 的相关文章

随机推荐

  • Ominibus F4V3 Pro飞控原理图和接线图

    Ominibus F4V3 Pro飞控接线图如下图所示 部分实物接线图如下 注意上图中 xff0c 电流计入口 描述是错误的 xff0c 最形象的是第一个接线图 xff0c 那里表的很清楚 电源这块接线为电池接线到飞控板上的电池 43 和电
  • Mini Crossbow AAT自动跟踪云台设置(配合TeleFlyTiny模块)

    飞行器在空中 xff0c 位置和方位时刻变化 xff0c 而我们使用的图传接收机 xff0c 需要时刻保持跟随飞行器材能捕获较好的图像 xff0c 靠人去调整地面天线角度是不太合适的 xff0c 所以我们可以使用AAT自动跟踪云台来完成调整
  • Mission Planner安卓安装包

    可以在安卓手机上安装并使用的安装包 下载地址 xff1a https download csdn net download xjhappyarrow 22864716 spm 61 1001 2014 3001 5503
  • Docker 相关配置文件路径

    配置文件参数 xff1a 1 优先解析在config file命令行参数 2 在root模式下 Docker Daemon 默认配置文件路径 etc docker daemon json 3 在rootless模式下 默认配置文件路径在 d
  • 1. 【gRPC系列学习】 gRPC起源、优缺点

    gRPC是一项进程间通信技术 xff0c 可以用来连接 调用 操作 调试分布式异构应用程序 xff0c 就像调用本地函数一样 gRPC主要采用同步的请求 响应进行通信 xff0c 但建立连接后 xff0c 它可以完全以异步模式进行操作 1
  • stlink灯一直闪

    灯闪说明stlink工作不正常 原因可能是 xff1a 1 stlink供电不足 试着用外部电源和stlink同时给板子供电 2 电脑的USB口硬件 xff08 USB口烧了 xff0c 但可能性比较少 xff09 或USB相关驱动有问题
  • stlink使用笔记

    1 stlink灯一直闪 2 当用外部电源 xff08 外部 就是不直接使用stlink为板子供电 xff09 为板子供电时 xff0c 如果要用stlink xff08 SWD模式 xff09 xff0c 那么不能只插SWCLK和SWDI
  • 先电OpenStack创建云主机报错500

    现象 xff1a 从报错中可定位到问题出在nova的conductor组件中 日志 xff1a 查看 var log nova nova conductor log 从日志中可以观察到是因为找不到cpu特性 解决方法 xff1a 进入 us
  • MAVROS + APM + pixhawk 填坑日记(一)

    64 TOC MAVROS 43 APM 43 pixhawk 填坑日记 一 树莓派和pixhawk通过usb串口连接 xff0c 想通过mavros读取飞控上关于GPS的位置信息 rostopic list可以看到mavros发布的话题消
  • ubuntu搭建APT源简单方法

    一 为什么需要搭建APT源 原因如下 xff1a 1 在公司内网离线情况下 xff0c ubuntu无法通过apt原生源进行下载 2 有些源国内无法正常访问 xff0c 需要翻墙 基于以上原因 xff0c 需要自建APT源 二 准备条件 需
  • 加速度计参数讲解

    测量范围 FS也称量程 xff0c 单位为g 地球重力 xff0c 是指加速度计能测量到的正反方向最大加速度的额定值范围 常见有 xff08 2g 4g 8g 16g up to 400g 灵敏度 分辨率Sensitivity Resolu
  • vim 编辑器---批量注释和批量取消注释/去除黄色阴影

    添加注释 ctrl 43 v 进入块选泽模式 上下键选中需要注释的行 按大写 I 进入插入模式 xff0c 输入注释符 按两次 ESC 退出 xff0c 即完成添加注释 取消注释 ctrl 43 v 进入块选泽模式 上下键选中需要注释的行
  • 作业—FreeRTOS入门

    FreeRTOS入门 零 需求软件 xff08 自行下载 xff09 一 任务要求二 FreeRTOS的使用1 原理2 多任务程序3 烧录代码4 结果 三 注意事项四 参考资料 零 需求软件 xff08 自行下载 xff09 1 keil5
  • Flask 案例

    创建news xff0c 根目录下创建settings文件 config py文件 xff0c 编写配置项 xff0c 配置项必须大写 class DeFaultConfig SECRET KEY 61 39 39 SQLALCHEMY D
  • 三 Gazebo学习总结之制作一个模型及导入网格

    Models从简单的形状到复杂的机器人都有 它指的是 lt model gt SDF标签 xff0c 从本质上来说是links joints collision objects visuals和plugins的集合 xff0c 生成一个模型
  • STM32F103V跑NuttX之一——下载nuttX及编译烧录

    下载nuttX及编译 1 NuttX官方链接2 NuttX及App工程下载3 编译NuttX中STM32F103V nsh测试例程4 在ubuntu下使用串口来烧录目标文件至STM32F103V4 1 ubuntu下stm32flash工具
  • Win10遍历句柄表+修改权限过Callback保护

    本帖转载于http www m5home com bbs thread 8847 1 1 html 本想发到看雪 xff0c 但自己太菜 xff0c 看雪 牛人 又太多 xff0c 想想还是发到紫水晶吧 感谢 TA 的 WIN64 教程带我
  • Pixhawk飞控源码目录结构及编译流程分析

    xff08 PS xff1a 这是第一次写博客 xff0c 以前也有记录一些经验总结心得什么的 xff0c 不过都是手写笔记或者记在word上 xff0c csdn看了好久 xff0c 总觉的只索取不付出心里有些过意不去 xff0c 以后尽
  • 无刷电机驱动解析

    1 概述 无霍尔的BLDC控制方案与有霍尔BLDC的基本原理相似 都是用所谓 六步换向法 根据转子当前的位置 按照一定的顺序给定子绕组通电使BLDC电机转动 所不同的是无霍尔BLDC不需要霍尔效应传感器 通过检测定子绕组的反电动势过零点来判
  • Ubuntu20.04用D435i运行VINS-Mono

    Ubuntu20 04用D435i运行VINS Mono 一 安装VINS Mono1 首先安装需要的ros包 xff0c 如果安装的是完整ros xff0c 应该是都安装过的2 安装ceres solver xff0c 进VINS Mon