我的AI之路(37)--使用深度相机之Intel Realsense D435(i)

      使用Realsense D435可以获得彩色图和同步的深度图,D435i 还可以获得IMU数据,支持在 Linux \ Windows \ Mac OS \ Android上使用。支持库可以从SDK源码编译出来后安装,或者直接在线安装,https://github.com/IntelRealSense/librealsense可以下载SDK源码,机器人的下位机上一般使用Ubuntu操作系统,上位机使用Andorid,因此可以着重琢磨D435(i)在Linux和Android上的使用,不过对Android的支持没有对Linux的支持那么成熟,在Linux上使用D435(i)相机是首选。

    在Ubuntu上安装支持包的步骤:

   1. sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE

   2. Ubuntu 16 LTS:
   sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main" -u
      Ubuntu 18 LTS:
   sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main" -u 

  3. sudo apt-get install librealsense2-dkms

      sudo apt-get install librealsense2-utils

   4.如果你需要写代码调用其API实现目标识别和测距等定制功能,比如设置相机的分辨率、帧率、循环获取相机的彩色图数据和深度图数据后识别目标并根据目标坐标获取对应的距离等,那么还需要安装开发用的支持包:

     sudo apt-get install librealsense2-dev

并且编译选项中使用 g++ -std=c++11 <*.cpp> -lrealsense2

如果还需要debug功能,另外还需安装:

    sudo apt-get install librealsense2-dbg

扫描二维码关注公众号,回复: 10784208 查看本文章

安装到上面第三步,相机的驱动就有了,可以查看一下:

 modinfo uvcvideo | grep "version:" 

可以打印出包含 realsense以及版本号的字符串

     如果要快速检查相机是否可用了,可以使用上面步骤安装的这个工具realsense-viewer,在/usr/bin下,直接在命令行敲realsense-viewer即可运行系统启动一个窗口,如果相机插入USB3端口后可用的话,这个窗口里面左侧显示一些开关可以打开color图,depth图和陀螺仪图和设置参数,右上方按钮可以进行2D/3D切换。

     如果相机连接不正常,realsense-viewer的窗口左侧什么都没有,这是可以查看设备: ls /dev,看/dev/video*之类的设备节点是否存在,如果HID-SENSOR*节点存在但是video*之类的节点则不存在,估计是相机的uvcvideo驱动模块没有加载,执行命令:

   sudo modprobe uvcvideo

报错: could not insert 'uvcvideo': Required key not available

一般原因是由于你的机器上的引导系统使用的是uFEI并且启用了secure boot,这种情况下,需要将uvcvideo驱动模块注册,在上面第三步安装中,会弹出个窗口,在你点确定后会提示你输入密码,这个实际上是用来给uvcvideo模块注册用的,输入密码两次后确定,记住这个密码,然后选reboot重启,重新启动中会进入Perform MOK management的蓝色屏幕提示你注册模块:

选择Enroll MOK回车

选择Continue回车

选择Yes回车

输入前面安装时输入的密码然后回车,然后在弹出窗口中选择reboot并回车重启后应该就可以了,查看/dev下应该有了HID-SENSOR*和video*之类的节点:

    把相机插入USB3端口再运行realsense-viewer启动窗口,这个窗口里面左侧应该显示一些开关可以打开color图,depth图和陀螺仪图和设置参数,点击那些on/off按钮可以打开和关闭对应的图像在窗口右侧的显示。

     有点要注意的是,如果受限于网络不能在线安装,想使用SDK源码编译出支持包和realsense-viewer等工具(注意加上BUILD_EXAMPLES选项后,会自动把examples和tools目录加入到编译任务中),进入到librealsense目录下后执行下面的步骤:

     mkdir build
     cd build
     cmake ../ -DBUILD_EXAMPLES=true
     make
     sudo make install

如果执行上面步骤后发现执行realsense-viewer时可执行文件找不到,可能是CMAKE_INSTALL_BINDIR没定义,则设置CMAKE_INSTALL_BINDIR或者修改tools/realsense-viewer/CMakeLists.txt:

install(
    TARGETS
    realsense-viewer
    RUNTIME DESTINATION bin
    DESTINATION ${CMAKE_INSTALL_BINDIR}
)

基于librealsense做开发的话,在执行上面的安装步骤后在/usr/lib/x86_64-linux-gnu下应该有了librealsense2.so,在/usr/include下应该有了librealsense2/rs.hpp,在你的源码文件里增加包含:

#include <librealsense2/rs.hpp>

   另外如果用到了cv-helpers.hpp这个文件里的API,还需要把这个文件从SDK源码包librealsense的include目录里拷贝或者包含到你的项目中来,然后在源码中增加包含:

#include "realsense2/cv-helpers.hpp"

    关于具体的API调用,Intel实在是太懒了,在SDK的页面或源码https://github.com/IntelRealSense/librealsense里只给了一个简单示例没有任何规矩系统性的说明,你只有自己看examples目录下的多个示例源码,自己找符合自己需要的API来调用。我把示例源码看了一遍,根据我们使用的需要(获取图像识别目标并测距)写出了自己的代码并经过调试达到了稳定好用,具体代码涉及到商业秘密不便说。

     最后编译源码时记得使用-std=c++11标记,并使用-lrealsense2链接librealsense2.so库。

    

发布了61 篇原创文章 · 获赞 90 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/XCCCCZ/article/details/103793193