首页 > 最新资讯 > 知乎大咖详述 Jetson 系列的多样化应用
知乎大咖详述 Jetson 系列的多样化应用

知乎大咖详述 Jetson 系列的多样化应用

2020-06-05 18:33

#人工智能 #深度学习


一款外观小巧,但功能强大的开发者工具可以用来做什么?Jetson “家族”告诉你答案。

 

自 Jetson 系列产品推出以来,就在不断满足广大开发者和创新者的各种想象。近期,一位知乎极具影响力的 KOL 袁博融(HIT Robot Group DL 工程师,拥有 7,418 名粉丝)通过 Jetson 系列产品,实现了多样化的应用。

 

使用 Jetson+ 双目相机模组自制深度相机

 

 

很多 Jetson 开发者在刚接触这个平台时都会有个疑问,为什么预装的 OpenCV 竟然没有 GPU 加速。

 

NVIDIA 论坛上的解释说,OpenCV 的 GPU 部分可能存在 Bug,不能保证稳定性。于是大家要在 Jetson 上使用有 GPU 支持的 OpenCV,就要从源码编译。

 

实际上,除了 OpenCV,Jetson 平台上的计算机视觉库还有另一个选择,就是 NVIDIA 的 VisionWorks。

 

VisionWorks 包含了大量算法,大部分都使用了 GPU 加速。同时 VisionWorks 也可以和 OpenCV 一起使用。下面是 VisionWorks 的算法清单:

 

IMAGE ARITHMETIC

 

  • Absolute Difference

  • Accumulate Image

  • Accumulate Squared

  • Accumulate Weighted

  • Add / Subtract / Multiply +

  • Channel Combine

  • Channel Extract

  • Color Convert +

  • CopyImage

  • Convert Depth

  • Magnitude

  • MultiplyByScalar

  • Not / Or / And / Xor

  • Phase

  • Table Lookup

  • Threshold

 

FLOW & DEPTH

 

  • Median Flow

  • Optical Flow (LK) +

  • Semi-Global Matching

  • Stereo Block Matching

  • IME Create Motion Field

  • IME Refine Motion Field

  • IME Partition Motion Field

 

GEOMETRIC TRANSFORMS

 

  • Affine Warp +

  • Warp Perspective +

  • Flip Image

  • Remap

  • Scale Image +

 

FILTERS

 

  • BoxFilter

  • Convolution

  • Dilation Filter

  • Erosion Filter

  • Gaussian Filter

  • Gaussian Pyramid

  • Laplacian3x3

  • Median Filter

  • Scharr3x3

  • Sobel 3x3

 

FEATURES

 

  • Canny Edge Detector

  • FAST Corners +

  • FAST Track +

  • Harris Corners +

  • Harris Track

  • Hough Circles

  • Hough Lines

 

ANALYSIS

 

  • Histogram

  • Histogram Equalization

  • Integral Image

  • Mean Std Deviation

  • Min Max Locations

 

在刷好 JetPack 后,一般就会自动执行 /usr/share/visionworks/sources/install-samples.sh 将 VisionWorks 示例放到用户目录下,如果不慎删除可以再手动执行。关于示例的运行可以参考官方文档。

 

在这篇文章中,我们还为大家介绍了 VisionWorks 的一个特别的使用方式,即在 ROS 中使用 GPU 加速调用双目相机并生成视差图和点云。ROS 包已更新至 GitHub(以下链接)。

 

https://github.com/borongyuan/jetson_csi_stereo_ros

 

这部分使用了微雪推出的 Jetson 双目相机模组,不到 300 元就能买到。

 

http://www.waveshare.net/wiki/IMX219-83_Stereo_Camera

 

这个模组其实是将 2 个 CSI 相机和 1 个 IMU 做到同一块电路板上,但并没有硬件同步。有硬件同步的双目深度相机如 ZED、小觅、INDEMIND 效果更好,但价格都较高。

 

得益于 GPU 加速,使用廉价的双目模组也能取得很好的效果。相机的读取和解码通过 gscam 包使用了 Gstreamer,尽管没有硬件同步,左右相机间也几乎没有延迟。

 

在整个流程中,图像获取和处理部分都使用了 GPU。我们目前建议用 Jetson Xavier NX 进行测试。

 

要跑整套流程,可以参考以下主要步骤:

 

  • apt 安装 ROS 非 OpenCV 依赖的部分

  • 编译安装依赖 OpenCV 的 ROS 包

  • 双目相机标定

  • 运行 Pipeline

 

用这种特殊的方式安装部分 ROS 包是因为 JetPack 4.3 和 4.4 预装的是 OpenCV 4.1,而 ROS Melodic 预编译用的是 OpenCV 3。

 

用 apt 安装使用相关包一般不会有问题,但会导致我们用到的 gpu_stereo_image_proc 无法编译。

 

使用 jetson_csi_stereo.launch 即可以启动 2 个相机,其中包含 Gstreamer 的配置字符串。

 

相机图像消息分别发布到 /stereo/left/image_raw和/stereo/right/image_raw,可以使用 rqt 来查看。这里发布的是原始图像,未经过校准,此时的 camera_info 也是空的或错误的。

 

建议先检查一下左右图像有没有搞反。如果在 Jetson Xavier NX 开发者套件上,CAM0 和 CAM1 实际反了,需要在 launch 文件修改 Gstreamer 字符串中的 sensor-id。如果相机安装方式不同,导致图像颠倒,flip-method 也要修改。

 

接下来,为了能顺利进行视差计算,我们需要对双目相机进行标定。标定包括两个相机的内参和外参。这里直接使用 ROS 的相机标定工具,参考 ROS 中的教程即可。

 

http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration

 

如果还想尝试相机和 IMU 联合标定,可以试试 kalibr 标定工具。标定成功后更新到 cfg 目录下的 left.yaml 和 right.yaml。下次再启动相机时就可以发布正确的 camera_info。

 

完成相机标定后,就可以生成校准后的图像,并计算视差,生成点云。ROS 包 stereo_image_proc 就实现了这一系列流程。但其使用 CPU 运算,在 PC 上都未必能流畅运行,更不用说 Jetson。我们使用的 gpu_stereo_image_proc 提供了和 stereo_image_proc 几乎一样的功能和接口,但内部使用 VisionWorks 的 GPU 版 SGBM 算法,性能要好很多。跑整套流程只需要 jetson_csi_stereo_pipeline.launch 这一个文件,其中已包含 jetson_csi_stereo.launch。

 

运行参数中,只需将 shrink_scale 改为 4。具体参数大家可以使用 rqt_reconfigure 自行试验。

 

要在 rviz 中可视化点云,需要将 Fixed Frame 设为 stereo_left_image_raw。

 

为 Jetson 安装 WPS, QQ, VSCode, TeamViewer, NoMachine 等应用



 

Jetson 不光可以用于开发,而且还可以用来当做办公的小电脑。对于小标题中列出的可安装工具,大家可能会觉得很惊讶。由于社区开发者对 arm64 软件生态上的建设,这些现在都可以进行安装。

 

WPS Office

 

Linux 上最佳的办公软件,免费无广告。最早发布的那个版本测试启动不了,但后来更新的几版都能正常使用。安装很简单,可以从 WPS Office for Linux 官网下载 arm64 的 deb 包。

 

至于启动时提示字体缺失等问题,需要通过网上搜索自行解决,因为官方也无法提供版权字体。

 QQ

 

虽说目前安装微信比较困难,但可以安装 QQ。同时,NVIDIA 也为开发者朋友们建了多个 QQ 群。以后 Jetson 上遇到什么问题直接截图群聊就好了。安装同样很简单,即通过 QQ for Linux 官网下载 arm64 的 deb 包。

 

VSCode

 

这个虽然不是官方编译,但有社区维护,同样能及时更新。安装有脚本,也很方便。

 

https://github.com/JetsonHacksNano/installVSCode

 

可以直接执行 installVSCode.sh,Jetson系列都能用。可以安装部分插件,比如改简体中文,Python 插件。之后可使用 apt-get 更新。

 

TeamViewer

 

这个安装步骤较多。TeamViewer 其实还没有推出官方的 arm64 版,可以安装的其实是TeamViewer Host for Raspberry Pi。树莓派版为 armhf 架构,于是需要装一些 armhf 的依赖。

 

sudo dpkg --add-architecture armhf
sudo apt-get update
sudo apt-get install libxtst6:armhf

 

然后再 dpkg 安装下载好的 armhf 版 deb 包。最后,如果缺依赖,还要再修复一下。

 

sudo apt-get install -f

 

TeamViewer 连接后可能资源占用会较高。而且官方现在查商业用途越来越严,容易被误伤。下面的 NoMachine 也是一个不错的远程桌面选择。

 

NoMachine

 

NoMachine 也是跨平台的远程桌面工具。Jetson 系列 K1 之前都是 ARMv7 的 CPU,X1 之后都是 ARMv8,因此大家可以从官网页面下载 ARMv8 的 deb 包。

 

在 Jetson 上用 NoMachine 体验要比 VNC 和 TeamViewer 好很多,而且想要更好连接的可以选择加硬件。

 

DFRobot 的 LattePanda Streaming Cable 也可以直接用。这样就可以用笔记本屏幕当显示器来做 Jetson 开发。实际通过 USB 虚拟网卡进行连接,又快又稳。

 

Vivaldi 浏览器

 

Vivaldi 浏览器采用 Chromium 引擎,可定制化程度高,保留了简洁的风格。Vivaldi 其实也有 arm64 编译,但因还未正式推出,链接被官方隐藏了起来。

 

流程是先从官网页面复制 Linux DEB ARM 的链接,链接最后是 armhf.deb,改成 arm64.deb 就可以进行下载。

 

 

相关新闻