ubuntu 18.04 安装 realsense d435 驱动和 realsense-viewer。

RealSense D435简介

RealSense D435是英特尔推出的一款RGB-D相机:官网,后文使用D435简称此相机。

RGB-D相机和我们平时使用的相机的不同之处在于,RGB-D相机可以在拍摄彩色画面(RGB)的同时,提供拍摄场景的深度数据(Depth),D435就是这样的一款相机。

D435采用的是RGB-D相机中的双目视觉方案来获取深度数据,介绍双目视觉方案之前,需要先引入视差的概念。我们左眼和右眼看到同一个物品的位置是不同的,这个位置的不同被称作“视差”。举个例子,你可以把一个物品放在你的正前方,尝试单独闭上左眼或右眼,你面前的这个物品在左眼和右眼看到的画面中会出现位置变化,这便是“视差”的现象。

关于双目视觉方案的原理可以进一步阅读:【知乎】视觉深度、标定、立体匹配,本文只做基础介绍。

所谓双目视觉方案,就是模拟人的双眼,用两颗焦距相同的镜头(下图中的Left/Right Imager,D435使用的是两颗红外镜头),从不同的角度拍摄图像,然后通过特征匹配计算视差,进而推导场景的深度。

双目视觉方案的主要缺陷在于场景中的纹理较弱的情况下,比如白墙,两颗摄像头看到的都是一个相对光滑的平面,这种弱纹理场景无法找到足够的匹配点,视差计算精度降低,进一步导致推导出的深度数据精度降低。为此,D435在双目视觉方案的基础上,新增了一个红外点阵投影仪(下图中的IR Projector),向场景中投射肉眼不可见的红外点阵,以加强环境中的纹理,辅助双目视觉匹配,提高深度数据的精度。

image.png

RealSense D435相机需要通过一根USB 3.1 TypeC高速数据线与电脑相连,一定要是USB 3.0及以上的数据线,不能使用USB 2.0数据线,传输速率不够。这里特别提醒一下,手机厂家给的数据线一般都不能用(尝试过vivo和华为的TypeC线,都只识别出了USB 2.0),即便链接手机的时候支持USB 3.0,链接D435相机的时候也可能无法支持,建议购买一根绿联的USB 3.0 TypeC数据线。

准备好相机和USB 3.0数据线后,就可以开始本文的驱动安装操作了。

在AMD64上安装realsense驱动

操作系统:AMD64,Ubuntu 18.04 LTS,VMware虚拟机安装

x86的机器安装realsense驱动比较简单,直接根据github仓库中的文档进行安装就可以了:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md

这里把安装命令拷贝如下,注意安装过程中不要将D435链接至电脑。

1
2
3
4
5
6
7
8
9
sudo mkdir -p /etc/apt/keyrings

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

# add new server
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 -y

命令执行结果如下图所示

image.png

随后安装四个软件包,前两个必装,后两个选装

1
2
3
4
5
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
# 可选
sudo apt-get install librealsense2-dev # 可以使用-lrealsense2来编译代码
sudo apt-get install librealsense2-dbg

安装好了之后查看版本信息,确保包含realsense字样。

1
2
3
4
5
king@ubuntu:~$ modinfo uvcvideo | grep "version:"
version: 1.1.2.realsense-1.3.18
srcversion: 51A4A0210E91BE50A7BA2BB
king@ubuntu:~$ dkms status
librealsense2-dkms, 1.3.18, 5.4.0-150-generic, x86_64: installed

现在可以插上D435相机了(注意VMware中选择D435链接至虚拟机),使用realsense-viewer命令启动软件,如下图所示,此时就是已经识别到我们的D435相机了。这里有一个很明显的USB 2.1的标识,代表我们的数据线不支持USB 3.0,这会影响到D435相机的数据传输。

image.png

以绿联的USB 3.0数据线为例,插上之后会显示USB 3.2,此时就是符合需求的。在左侧面板中,可以分别打开深度相机和RGB相机,开启之后会在右侧的主界面中显示相机拍摄的画面。在Stereo Module选项关闭状态的时候,还可以勾选上左右红外相机,让红外相机的原始图像也显示在右侧界面中。

image.png

在我的测试中,执行了realsense-viewer命令还会出现如下警告

1
2
king@ubuntu:~$ realsense-viewer
05/04 18:06:56,380 INFO [139813411274368] (backend-v4l2.cpp:646) Cannot access /sys/class/video4linux

虽然出现了这个警告,但似乎并不影响realsense-viewer程序的使用,整个操作、录制视频的过程都没有出现崩溃。我执行realsense-viewer命令的时候D435相机并没有连接到电脑上,不确定是否和相机没有链接有关系。

ROS环境下使用D435

如果想要在ROS环境下使用D435相机,还需要安装ROS的realsense驱动(请先保证本地已经安装ROS环境)

1
2
3
sudo apt-get install -y ros-melodic-realsense2-camera
sudo apt-get install -y ros-melodic-realsense2-description
sudo apt-get install -y ros-melodic-rgbd-launch

至此,AMD64下的realsense驱动就已经安装好了,可以正常使用相机了。你可以尝试用如下命令在ROS环境下启动D435相机,开始广播深度和彩色图像的Topic。

1
roslaunch realsense2_camera rs_camera.launch

image.png

在ARM64上安装realsense驱动

操作系统:ARM64(MAC M3),Ubuntu 22.04 LTS虚拟机,Docker启动的ubuntu:18.04容器

在ARM64的设备上安装realsense驱动就有点难办了,不能直接一股脑执行上面的安装命令了,需要我们从源码编译realsense,这里给出几个参考博客:

首先安装如下依赖项

1
2
3
4
sudo apt-get install -y cmake git 
sudo apt-get install -y libusb-1.0-0-dev pkg-config
sudo apt-get install -y libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev
sudo apt-get install -y openssl libssl-dev

克隆源代码,进入目录中,cmake构建项目

1
2
3
4
5
6
7
8
9
10
11
# 克隆代码
git clone https://github.com/IntelRealSense/librealsense.git
cd ~/librealsense
mkdir build && cd build
# 使用RSUSB版本的后端
cmake .. \
-DBUILD_EXAMPLES=true \
-DCMAKE_BUILD_TYPE=release \
-DFORCE_RSUSB_BACKEND=ON
make -j4
sudo make install

cmake构建成功的截图如下,构建过程中涉及从github拉代码,可能会出现各类网络问题,自行解决啦。

image.png

make编译完成的输出如下

1
2
3
4
5
6
7
8
9
10
11
[ 98%] Building CXX object tools/depth-quality/CMakeFiles/rs-depth-quality.dir/depth-quality-model.cpp.o
[ 99%] Linking CXX executable ../../Release/realsense-viewer
[ 99%] Built target realsense-viewer
[ 99%] Building CXX object tools/depth-quality/CMakeFiles/rs-depth-quality.dir/__/__/third-party/imgui/imgui.cpp.o
[ 99%] Building CXX object tools/depth-quality/CMakeFiles/rs-depth-quality.dir/__/__/third-party/imgui/imgui_draw.cpp.o
[ 99%] Building CXX object tools/depth-quality/CMakeFiles/rs-depth-quality.dir/__/__/third-party/imgui/imgui_impl_glfw.cpp.o
[ 99%] Building C object tools/depth-quality/CMakeFiles/rs-depth-quality.dir/__/__/third-party/glad/glad.c.o
[100%] Building C object tools/depth-quality/CMakeFiles/rs-depth-quality.dir/__/__/third-party/tinyfiledialogs/tinyfiledialogs.c.o
[100%] Linking CXX executable ../../Release/rs-depth-quality
[100%] Built target rs-depth-quality
[root:/work/pkg/librealsense-master/build]#

make install的部分输出如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- Installing: /usr/local/bin/rs-fw-update
-- Set runtime path of "/usr/local/bin/rs-fw-update" to ""
-- Installing: /usr/local/bin/rs-embed
-- Installing: /usr/local/bin/rs-data-collect
-- Set runtime path of "/usr/local/bin/rs-data-collect" to ""
-- Installing: /usr/local/bin/realsense-viewer
-- Set runtime path of "/usr/local/bin/realsense-viewer" to ""
-- Installing: /root/Documents/librealsense2/presets
-- Installing: /root/Documents/librealsense2/presets/sample.preset
-- Installing: /usr/local/bin/rs-depth-quality
-- Set runtime path of "/usr/local/bin/rs-depth-quality" to ""
-- Installing: /usr/local/bin/rs-rosbag-inspector
-- Set runtime path of "/usr/local/bin/rs-rosbag-inspector" to ""
-- Installing: /usr/local/bin/rs-benchmark
-- Set runtime path of "/usr/local/bin/rs-benchmark" to ""
-- Installing: /usr/local/lib/libfw.a
[root:/work/pkg/librealsense-master/build]#

此时环境中就已经有realsense-viewer了,可以使用该命令启动程序了

image.png

将D435通过数据线连接MAC,可以在MAC的设备详情中找到USB一栏,确定是链接在USB 3.1总线而不是USB 2.0总线上。设备详情页面通过按下option+点击左上角苹果图标,点击系统信息可以打开。

image.png

在parallels顶栏的设备选项中,在USB与蓝牙设置中找到D435相机,勾选它让它直连虚拟机。

image.png

注意,docker容器必须用特权模式创建,才能和宿主机共享USB设备,可以在容器内终端执行命令确认相机是否已经连接。插入d435相机后需要重启容器,才能看到USB设备。

1
2
3
4
5
6
7
8
9
10
11
12
[root:/]# ls /dev/video* -l
crw-rw---- 1 root video 81, 0 Mar 2 13:16 /dev/video0
crw-rw---- 1 root video 81, 1 Mar 2 13:16 /dev/video1
crw-rw---- 1 root video 81, 2 Mar 2 13:16 /dev/video2
crw-rw---- 1 root video 81, 3 Mar 2 13:16 /dev/video3
crw-rw---- 1 root video 81, 4 Mar 2 13:16 /dev/video4
crw-rw---- 1 root video 81, 5 Mar 2 13:16 /dev/video5
crw-rw---- 1 root video 81, 6 Mar 2 13:16 /dev/video6
crw-rw---- 1 root video 81, 7 Mar 2 13:16 /dev/video7
crw-rw---- 1 root video 81, 8 Mar 2 13:16 /dev/video8
crw-rw---- 1 root video 81, 9 Mar 2 13:16 /dev/video9
[root:/]#

此时再执行realsense-viewer命令,已经能正常使用相机了

image.png

因为在docker容器内是以root身份执行的realsense-viewer,右上角会弹出一个提示

image.png

可以根据里面的命令修复一下,就不会弹出这个提示了

1
cp ~/.99-realsense-libusb.rules /etc/udev/rules.d/99-realsense-libusb.rules && udevadm control --reload-rules && udevadm trigger

ROS环境下使用D435

如果想在ROS环境下使用realsense-viewer,同样是安装依赖包,安装了之后就能和x86的机器一样正常使用相机了。

1
2
3
4
sudo apt-get install -y \
ros-melodic-realsense2-camera \
ros-melodic-realsense2-description \
ros-melodic-rgbd-launch

image.png

不过,在我的测试中,在ARM64上使用D435相机执行ORB-SLAM2的时候会出现严重掉帧(在x86机器上不会出现),不确定是否和我在虚拟机里面套娃docker有关系。建议还是优先使用x86设备来操作D435相机。

The end

希望本文能帮到你,主要是提供了arm64设备上安装realsense驱动的方式,很多博客针对这部分的记录都不够详细。