从零开始使用Realsense D435i运行VINS-Mono

  • 从零开始使用Realsense D435i运行VINS-Mono
    • (1)安装测试librealsense SDK 2.0
    • (2)安装测试realsense
    • (3)安装测试VINS-Mono
    • (4)在D435i上运行VINS-Mono

从零开始使用Realsense D435i运行VINS-Mono

这次测试D435i过程还是比较顺利的,仅仅花了一个下午就搞定了,比之前测试ZR300和SR300要好多了,下面是我用D435i跑VINS-Mono的全过程(没啥技术含量),首先说下我的电脑配置,
我的电脑的配置:
CPU:Intel® Core™ i5-4590 CPU @ 3.30GHz × 4
内存:11.7 GiB
显卡:GeForce GTX 750 Ti/PCIe/SSE2
系统版本:Ubuntu16.04
系统内核:4.15.0-47-generic(命令:cat /proc/version)
ROS版本:Kinetic

(1)安装测试librealsense SDK 2.0

librealsense SDK相当于相机的驱动,SR300和ZR300的支持驱动是librealsense SDK 1.0,而D435i是librealsense SDK 2.0,貌似一台电脑上不能同时装两个SDK,所以要注意下。SDK的安装方式有两种,一个是从源码编译安装,一个是直接命令行安装,之前librealsense SDK 1.0我采用的是从源码编译安装,感觉比较麻烦,所以这次用尝试下了直接命令行安装,没想到出乎意料地顺利。
官方安装教程Intel® RealSense™ SDK 2.0,这里我把当回搬运工:

  1. 注册公匙
sudo apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C8B3A55A6F3EFCDE
  1. 添加repositories(Ubuntu 16 LTS)
sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main" -u
  1. 安装library
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
  1. 安装developer和debug packages
sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg
  1. 测试SDK
realsense-viewer

运行完上面测试命令之后会弹出来一个看上去还满酷的SDK界面,打开三个按钮可以看到RGB、双目和IMU的结果就证明你的SDK装成功了。

(2)安装测试realsense

这个realsense指的是对应的realsense相机的ROS包,官方教程如下ROS Wrapper for Intel® RealSense™ Devices
这里就很简单啦,先进入你的ROS工作空间

cd ~/catkin_ws/src
git clone https://github.com/intel-ros/realsense.git
cd ..
catkin_make
rospack profile
source devel/setup.sh

然后运行(不加filters:=pointcloud好像没有点云的节点)

roslaunch realsense2_camera rs_camera.launch filters:=pointcloud

打开rviz,添加PointCloud2的mudule就可以看到点云,如下

(3)安装测试VINS-Mono

这一步先用数据集测试VINS-Mono
同样,进入你的ROS工作空间

cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
cd ..
catkin_make
source ~/catkin_ws/devel/setup.bash

这里编译可能需要安装ceres,安装ceres的步骤自行百度就好,编译源码的同时可以把数据集给下了,测试用的bag文件会比较方便,数据集地址

然后打开三个terminal,分别运行

roslaunch vins_estimator euroc.launch
roslaunch vins_estimator vins_rviz.launch
rosbag play MH_01_easy.bag

结果如下图

有趣的是,数据集里面可以看到测试人员开始的时候拿着摄像头前后左右晃了晃,这个应该是给IMU初始化用的。

(4)在D435i上运行VINS-Mono

前面都测试好之后就可以再D435i上运行VINS-Mone了,这里特地感谢下博客如何用Realsense D435i运行VINS-Mono等VIO算法 获取IMU同步数据的作者Manii,让这个过程变得非常简单,如果大家需要对这个过程有一个更加详细的了解可以去参考那个博客,研究出来下面的步骤还是挺费时间的,这里我简单说下流程:

  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"/>
  1. 修改VINS-Mono包里的realsense_color_config.yaml文件

第一处,修改订阅的topic

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

第二处,修改相机内参,这里先再次打开运行realsesne包,然后可以通过如下命令获取相机内参

rostopic echo /camera/color/camera_info

第三处,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.80       # gravity magnitude

第五处,是否需要在线估计同步时差,根据上述博主的建议这里选择不需要

#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               # unit: s. rolling shutter read out time per frame (from data sheet).

3. 打开摄像头,运行VINS-Mono

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

结果如下:

步骤到此就结束啦,五一假期闲着没事在实验室测试了下VINS,之后好好学习下原理读下源码,如果可以的话应用到自己项目中来。

此外,对SLAM算法感兴趣的同学可以看考我的博客SLAM算法总结——经典SLAM算法框架总结

从零开始使用Realsense D435i运行VINS-Mono相关推荐

  1. D435i运行VINS

    原文https://blog.csdn.net/qq_41839222/article/details/86503113 从零开始使用Realsense D435i运行VINS-Mono 从零开始使用 ...

  2. Realsense D435i 运行 Vins-fusion

    无人机控制和规划都需要定位信息,飞控输出的位置信息一是精度低,二是室内环境无法使用,三是本身有漂移.港科大高飞博士在其最近的路径规划文章中均使用d435i跑vins来提供位置和姿态信息,本文记录整个调 ...

  3. 的环境下 qt 运行在_Ubuntu16.04环境下运行vins mono(环境配置及编译)之ROS kinetic的安装...

    所需环境:ubuntu16.04+ROS kinetic+opencv 3.3.1+eigen3.3.3+ceres solver 1.14 1.ROS Kinetic 的安装 (1)设置source ...

  4. VINS on RealSense D435i

    关于Realsense D435i运行VINS系列 前言 在SLAM中,主要是以激光SLAM和视觉SLAM为主,激光雷达直接可以获取三维点云坐标信息,所以激光SLAM会比视觉SLAM稳定许多,但是由于 ...

  5. ublox f9p,Realsense D435i相关资料

    一.Realsense D435i使用笔记 1.Realsense D435i使用笔记 2.Inter Realsense D435i标定详细步骤_高喜天天的博客-CSDN博客 3.Realsense ...

  6. realsense d435i标定imu与camera

    realsense d435i标定imu与camera 1.标定目的 realsense d435i包含两个红外相机.红外发射器.RGB相机和IMU四个模块,显然四个传感器的空间位置是不同的,我们在处 ...

  7. 在 NVIDIA jetson tx2 上基于 realsense d435i 相机运行 vins 相关配置

    在 NVIDIA jetson tx2 上基于 realsense d435i 相机运行 vins 相关配置 一.tx2刷机 二.安装librealsense,realsense驱动 1.安装依赖库 ...

  8. Ubuntu 18.04 ———(Intel RealSense D435i)运行VINS-Mono

    Intel RealSense D435i 一.准备工作 二.修改参数 rs_camera.launch realsense_color_config.yaml 参考文献 一.准备工作 1.Intel ...

  9. m2dgr数据集在vins mono运行

    m2dgr数据集在vins mono运行 1.代码的修改 1.1 yaml文件的修改 1.2修改VINS-mono轨迹保存代码 1.3修改launch文件 2 EVO显示轨迹 2.1运行比较结果 参考 ...

最新文章

  1. 整理Simple.Data使用方法
  2. Java LinkedList类基本用法
  3. Boost:是否支持sse2指令的测试程序
  4. C语言数组中两个数字之间的最大差的算法(附完整源码)
  5. Filter_细节_过滤器拦截路径配置
  6. C++定义隐式转换函数,将类转换为内部的一个成员变量
  7. 真正的大学老师,是那些无需打卡和考评,也会不可遏止地要去读书写作和上课的人...
  8. python中两个集合的运算并交补_三种方式实现 Python 中的集合的交、并、补运算...
  9. XproerIM-V1,2,12,65475发布。
  10. [转]Qt 之 QFileSystemWatcher
  11. j2ee不同数据库的驱动和URL写法
  12. ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)
  13. 自动驾驶最全基础知识、课程、论文、数据集、开源软件等资源整理分享
  14. 使用者多注意! 多件恶意软件潜入Google Play商店
  15. Node-Red UI界面基础设计
  16. illumina测序的一些注意事项
  17. 机器学习笔试面试题目 二
  18. CIO圈子里的“老行家”:太平绅士赖锡璋
  19. c语言计算平时成绩30%和期末成绩,C语言程序设计C
  20. 初二因式分解奥数竞赛题_因式分解(竞赛题)含答案

热门文章

  1. RocketMQ主机磁盘空间有限,如何无限期延长消息存储?
  2. 搞 java7 年,我有点想法想和大家聊聊
  3. java.io,PrintWriter可以用来创建一个文件并向本文文件写入数据
  4. Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析
  5. unity 删除子节点_【Unity文档】Realtime GI介绍(一)
  6. web.xml中web-app标签报错
  7. POJ-2942:吃糖果
  8. 2020 我的C++的学习之路 第十章 对象和类
  9. 变频器怎么设置_如何利用串口调试软件与变频器通信?
  10. 上海11月份计算机方面的会议,计算机类 | 10月截稿会议信息6条