【SLAM】ubuntu 18.04 安装 RealSense D435 相机驱动(ARM64/AMD64)
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),向场景中投射肉眼不可见的红外点阵,以加强环境中的纹理,辅助双目视觉匹配,提高深度数据的精度。
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 | sudo mkdir -p /etc/apt/keyrings |
命令执行结果如下图所示
随后安装四个软件包,前两个必装,后两个选装
1 | sudo apt-get install librealsense2-dkms |
安装好了之后查看版本信息,确保包含realsense字样。
1 | king@ubuntu:~$ modinfo uvcvideo | grep "version:" |
现在可以插上D435相机了(注意VMware中选择D435链接至虚拟机),使用realsense-viewer
命令启动软件,如下图所示,此时就是已经识别到我们的D435相机了。这里有一个很明显的USB 2.1的标识,代表我们的数据线不支持USB 3.0,这会影响到D435相机的数据传输。
以绿联的USB 3.0数据线为例,插上之后会显示USB 3.2,此时就是符合需求的。在左侧面板中,可以分别打开深度相机和RGB相机,开启之后会在右侧的主界面中显示相机拍摄的画面。在Stereo Module选项关闭状态的时候,还可以勾选上左右红外相机,让红外相机的原始图像也显示在右侧界面中。
在我的测试中,执行了realsense-viewer命令还会出现如下警告
1 | king@ubuntu:~$ realsense-viewer |
虽然出现了这个警告,但似乎并不影响realsense-viewer程序的使用,整个操作、录制视频的过程都没有出现崩溃。我执行realsense-viewer命令的时候D435相机并没有连接到电脑上,不确定是否和相机没有链接有关系。
ROS环境下使用D435
如果想要在ROS环境下使用D435相机,还需要安装ROS的realsense驱动(请先保证本地已经安装ROS环境)
1 | sudo apt-get install -y ros-melodic-realsense2-camera |
至此,AMD64下的realsense驱动就已经安装好了,可以正常使用相机了。你可以尝试用如下命令在ROS环境下启动D435相机,开始广播深度和彩色图像的Topic。
1 | roslaunch realsense2_camera rs_camera.launch |
在ARM64上安装realsense驱动
操作系统:ARM64(MAC M3),Ubuntu 22.04 LTS虚拟机,Docker启动的ubuntu:18.04容器
在ARM64的设备上安装realsense驱动就有点难办了,不能直接一股脑执行上面的安装命令了,需要我们从源码编译realsense,这里给出几个参考博客:
- Ubuntu18.04——基于X86和Arm安装并配置Realsense-ros环境_librealsense-CSDN博客
- Ubuntu——librealsense编译报错:The RandR headers were not found等类似报错解决方案汇总-CSDN博客
- github.com/IntelRealSense/librealsense/blob/master/doc/installat…
首先安装如下依赖项
1 | sudo apt-get install -y cmake git |
克隆源代码,进入目录中,cmake构建项目
1 | # 克隆代码 |
cmake构建成功的截图如下,构建过程中涉及从github拉代码,可能会出现各类网络问题,自行解决啦。
make编译完成的输出如下
1 | [ 98%] Building CXX object tools/depth-quality/CMakeFiles/rs-depth-quality.dir/depth-quality-model.cpp.o |
make install的部分输出如下
1 | -- Installing: /usr/local/bin/rs-fw-update |
此时环境中就已经有realsense-viewer了,可以使用该命令启动程序了
将D435通过数据线连接MAC,可以在MAC的设备详情中找到USB一栏,确定是链接在USB 3.1总线而不是USB 2.0总线上。设备详情页面通过按下option+点击左上角苹果图标,点击系统信息可以打开。
在parallels顶栏的设备选项中,在USB与蓝牙设置中找到D435相机,勾选它让它直连虚拟机。
注意,docker容器必须用特权模式创建,才能和宿主机共享USB设备,可以在容器内终端执行命令确认相机是否已经连接。插入d435相机后需要重启容器,才能看到USB设备。
1 | [root:/]# ls /dev/video* -l |
此时再执行realsense-viewer命令,已经能正常使用相机了
因为在docker容器内是以root身份执行的realsense-viewer,右上角会弹出一个提示
可以根据里面的命令修复一下,就不会弹出这个提示了
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 | sudo apt-get install -y \ |
不过,在我的测试中,在ARM64上使用D435相机执行ORB-SLAM2的时候会出现严重掉帧(在x86机器上不会出现),不确定是否和我在虚拟机里面套娃docker有关系。建议还是优先使用x86设备来操作D435相机。
The end
希望本文能帮到你,主要是提供了arm64设备上安装realsense驱动的方式,很多博客针对这部分的记录都不够详细。