Ubuntu 16.04 + Intelrealsense Depth Camera D455 + VINS-Mono配置全记录

2023-05-16

Ubuntu 16.04 + IntelRealsense Depth Camera D455 + VINS-Mono配置全记录

文章目录

  • Ubuntu 16.04 + IntelRealsense Depth Camera D455 + VINS-Mono配置全记录
    • 配置及环境
    • VMWare Workstation 16 Player + Ubuntu 16.04 配置
    • VINS-Mono配置
      • ROS-Kinetic
      • OpenCV 3.3.1
      • Eigen 3.3.3
      • Ceres-solver 1.13.0
      • VINS-Mono
    • IntelRealsense Depth Camera D455配置
      • librealsense SDK 2.0
      • 安装realsense对应的ros包
      • VINS-Mono + D455
    • 参考文献
    • Github Issue

最近要用深度相机来构造运动轨迹,于是买了D455深度相机想跑一下港科大VINS-Mono,但是由于这款相机太新了,再加上网络问题,配置环境时踩了无数的坑,于是把这一路的流程记录下来,供大家参考交流。

配置及环境

  • VMWare Workstation 16 Player + Ubuntu 16.04 LTS
  • Intelrealsense Depth Camera D455
  • ROS Kinetic
  • OpenCV 3.3.1
  • Eigen 3.3.3
  • Ceres-solver 1.13.0
    其中我一开始用的是Oracle Virtual Box,但是之后在虚拟机上使用深度相机时出现了问题,无法使用其Motion Module。于是去Github上问了IntelRealsense官方的librealsense里面提了issue,他们说建议使用双系统,如果非要使用虚拟机的话,建议使用VMWare Workstation Player。另外,VMWare这款是免费的,Pro才要收费,所以可以放心下载。

VMWare Workstation 16 Player + Ubuntu 16.04 配置

VMWare下载链接:点击下载Windows版即可
Ubuntu16镜像:选择ubuntu-16.04.7-desktop-amd64.iso下载即可,也可根据自己PC的情况自行选择。
Ubuntu清华源:选择Ubuntu 16.04 LTS。
更新完之后运行如下命令:

sudo apt-get update
sudo apt-get upgrade

VINS-Mono配置

ROS-Kinetic

官方配置文档

  • 设置source.list:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  • 设置密钥:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  • 下载Kinetic,推荐下载那个最完整的版本:
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
  • 初始化环境:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  • 下载依赖包:
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
  • 初始化rosdep:
sudo rosdep init
rosdep update

这一步最容易出错,一般是网络问题,要么是无法init,要么是update时hit超时,折腾了我好久。我查了很多解决方案,但是最靠谱的还是挂vpn。可以下一个lantern,这一步就不算啥问题了:配置方法

但是还有问题,即wget无法连接到raw.githubusercontent.com,所以可以直接从github下载这个deb包,再采用之后的命令进行安装。Deb链接

如果这样还是不能init成功的话,还有个方法就是从网上找一个init操作生成的那个文件,然后在对应的目录下自己手动新建然后把文件内容粘进去,再直接运行rosdep update,应该就可以了,我自己在两台虚拟机上试了下,都OK的。

OpenCV 3.3.1

先安装添加依赖包:

sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev libtbb-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libpng-dev libdc1394-22-dev

源码链接
直接下载源码,然后解压,再进入相应文件夹:

cd opencv-3.3.1/
mkdir build
cd build
cmake ..
make -j16  # 表示开16个线程来进行编译, 也可换成4或8,32等
sudo make install

其实这一步我自己也不确定要不要装,因为ros-kinetic本身其实是有集成opencv3.3.1的,保险起见还是装上吧。

Eigen 3.3.3

源码链接
首先去官网下载eigen 3.3.3版本的源码,然后解压,剩下就跟上面的差不多操作了。

Ceres-solver 1.13.0

源码链接
先添加依赖项:

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.4 libgflags-dev libgoogle-glog-dev libgtest-dev

剩下就是解压,进入相应文件夹,与opencv安装相同。

VINS-Mono

首先安装依赖包:

sudo apt-get install ros-kinetic-cv-bridge ros-kinetic-tf ros-kinetic-message-filters ros-kinetic-image-transport
sudo apt-get install python-roslaunch

之后就可以构建VINS-Mono了:

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

与此同时,可以下载一个EuRoC数据集来测试一下是否成功,下载其中一个如Machine Hall 01的Ros Bag即可。
同时打开三个窗口,在每个窗口都运行如下命令:

source ~/catkin_ws/devel/setup.bash

然后三个窗口依次分别执行以下三条命令即可:

roslaunch vins_estimator euroc.launch 
roslaunch vins_estimator vins_rviz.launch
rosbag play ~/Download/MH_01_easy.bag # 这里的路径取决于你把MH这个bag放在了哪里

运行成功的图我也没截,大家可以去我的参考文献中看下。

IntelRealsense Depth Camera D455配置

到了这里才刚刚进入正题,因为我们配置的目的肯定不是跑个别人的数据集呀。但是在网上找到的基本都是D435i的配置博客,基本很顺利,但是到了最后就没办法运行VINS-Mono,接下来就从头开始介绍下配置方法。

librealsense SDK 2.0

这一步可以参考官方链接,或者按照下面的命令执行。之后如果相机运行有问题也可以去这个Github仓库里提issue,他们都回复很快并且很有耐心,感恩!

  • 注册公钥:
sudo apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C8B3A55A6F3EFCDE
  • 添加仓库:
sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main" -u
  • 安装依赖包:
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg
  • 测试:
realsense-viewer

如果一切正常那么应该会弹出一个viewer界面,应该跟windows下的viewer差不多,然后分别点击三个Module的开关,看是否能够正常获取IMU,深度信息以及RGB图像。
如果不可以的话,那么首先尝试打开VMWare虚拟机的UBS 3.1口,然后再重启虚拟机试试,应该就没有太大问题了。
另外,由于UBS 3.0的传输问题,如果同时打开深度相机,RGB以及IMU的话,经常会出现类似Incomplete video frame detectedAsic Temperature value is not valid等Warning,这是正常现象,可调低帧率或者打开不同的窗口,下面贴一段官方人员回复我的解决方案:

This is expected behavior. It is a known issue that when Depth, RGB and Motion Module are enabled simulateously then errors can occur, most commonly Frames Not Received on the RGB stream.
Whilst there are workarounds in C++ and Python code, there is no fix for it in the Viewer other than to avoid enabling all three streams (for example, use Depth / Motion Module, Color / Motion Module, or just use Depth + RGB and use the Motion Module on its own in a different Viewer session.

安装realsense对应的ros包

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

VINS-Mono + D455

以下要修改一些文件,建议对相关文件做备份后再修改,以免修改后无效又无法回溯。

  • 修改rs_camera.launch文件:
cd ~/catkin_ws/src/realsense/realsense2_camera/launch
gedit rs_camera.launch

然后将相关属性修改为如下:

<arg name="enable_accel"      default="true"/>
<arg name="enable_gyro"       default-"true"/>
<arg name="unite_imu_method"      default="copy"/>
<arg name="enable_sync"           default="true"/>

这里前两句是分别开启加速度传感器和陀螺仪,然后第三条是将两者合并作为一个Topic输出,默认情况下其实是两个分别输出的。第四句是开启IMU和相机的同步。

  • 修改realsense_color_config.yaml文件:
cd ~/catkin_ws/src/VINS-Mono/config/realsense
gedit realsense_color_config.yaml

然后进行修改:

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

这里的一个坑就是要修改image的大小为:

image_width: 1280
image_height: 720

如果不修改,那么后续执行命令运行VINS-Mono后,会出现feature_tracker的process挂掉的error并且无轨迹输出,还会提醒OpenCV的goodFeatureToTrack的函数报错。
我的Debug方式是查看报错的log文件内容,然后看到其中有一行输出是wrong size。之后查看feature_tracker的源码中的feature_tracker.cpp,发现其中有一个if判断语句,然后里面包含了wrong size的输出。该判断语句是判断两个size是否不等,于是我添加了一行代码使之输出两个size的大小,重新进行catkin_make,然后再执行造成报错的相关指令,进入保存错误的log文件中,发现两个size果然不同,按照第二个size的大小对这个yaml进行设置,即可解决问题。

相机外参矩阵:可根据自身需求进行修改

# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 0   # 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与相机之间的时间差:

#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). 

最后再打开三个终端,首先都运行(每次打开一个终端第一次执行前都要):

source ~/catkin_ws/devel/setup.bash

最后三个终端依次运行:

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

结果如下,总算是跑出来了,虽然延迟还是很严重,还没有进行校准等,后续再进行修改。
效果一般

参考文献

如何用Realsense D435i运行VINS-Mono等VIO算法 获取IMU同步数据
从零开始使用Realsense D435i运行VINS-Mono
VINS-Mono环境配置与测试笔记
Ubuntu16.04编译并运行VINS-MONO

Github Issue

我当时碰到问题提的两条issue,大家可以看看官方的回答。
https://github.com/IntelRealSense/librealsense/issues/8859
https://github.com/IntelRealSense/librealsense/issues/8851

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

Ubuntu 16.04 + Intelrealsense Depth Camera D455 + VINS-Mono配置全记录 的相关文章

随机推荐