它就是今年无数硬件创客眼中的最炫装备
本文作者谢榕,是一名Jetson以及CUDA资深用户和业余开发者,重点研究异构计算在数据分析中的应用。本文将从他的角度,介绍Jetson TX1的基本使用、环境搭建、软硬件配置,以及他的使用感受,帮助Jetson开发者快速上手实战!
从一线“网红”们说起
智能无人机、自主机器人、智能摄像机、自动驾驶……今年最令硬件创客们着迷的词汇,想必就是这些一线“网红”了。而这些网红的背后,几乎都和计算机视觉与深度学习密切相关。
深度学习是人工智能领域一个最新的分支,可以帮助计算机理解图像、声音和文本,但需要强大的数据处理能力作为支撑。
在今年的Embedded World、SX Create、FIRST Championship等大型活动中,你都可以看到很多小型团队或者创业公司,所打造的应用了深度学习技术的机器人和无人机系统。一套套完美的解决方案,背后都有一个共同点——NVIDIA Jetson TX1!
如果说Arduino或者树梅派是很多创客们此前的最爱,那么Jetson TX1就是今年他们眼中的最酷“玩具”!
创客们对Jetson兴趣十足,比如上面这个就是基于Jetson TX1,以GoPro为基础,实现了运动拍摄中的目标自动跟踪
什么是Jetson TX1
Jetson TX1是NVIDIA第二代嵌入式平台开发者套件,虽然只有信用卡大小,但Jetson TX1 GPU模块的浮点运算能力却达到1 Teraflops,相比Jetson TK1有巨幅提升。如此强大的性能,Jetson TX1显然是智能无人机、机器人最理想的嵌入式解决方案。
▲Jetson TX1 核心模块
别看核心模块只有信用卡大小,身体里可暗藏玄机:内建256个CUDA核心的NVIDIA Maxwell GPU,64位ARM A57 CPU,4GB LPDDR4内存、16GB闪存、蓝牙、802.11ac Wi-Fi模块和千兆以太网卡,运行Linux for Tegra操作系统。
▲Jetson TX1 开发者套件
配上坐骑后的Jetson TX1是这个样子的。主板提供了USB 3.0 Type A、USB 2.0、HDMI、M.2 Key E、PCI-E x4、千兆以太网、SD、SATA数据和供电等接口,俨然是台全功能的PC;既然是开发者套件,怎能少了针对硬件创客的扩展接口:GPIO、I2C、I2S、SPI、带流控制的TTL UART、显示器扩展头和摄像头扩展头一个不少。
▲Jetson TX1 开发者套件内容详情
作为上一代Jetson TK1的用户,自然不会放过性能如此强悍的Jetson TX1。经过了一段时间的使用和体验,这里向大家分享一下粗浅的使用体验,同时以个人观点聊聊Jetson TX1到底能为我们带来哪些想象空间!
开箱体验与基本使用
1开箱体验
Jetson TX1自带了底座,十分贴心。虽然包装盒内没有附带任何光盘等介质,但Jetson TX1线上资源十分丰富,囊括文档及软件工具,并且获取十分方便。
▲Jetson TX1 开发者套件庐山真面目
Jetson TX1模块已预先安装在主板上,Wi-Fi天线连接线也已接好,同时整个核心模块由一个巨大的散热片覆盖,并配备了风扇,为了保证系统运行稳定和兼顾控制能耗,按照系统设定,该风扇仅在系统高负荷运行时才会启动,平时系统主要依靠散热片被动散热,由此可见NVIDIA在保证系统稳定并兼顾控制能耗上的细致,毕竟这样一块计算能力达到1Teraflops的Jetson TX1,功耗峰值才10W。
▲Jetson TX1与Jetson TK1
由于配备了更多的扩展接口,所以Jetson TX1比Jetson TK1主板面积要大一些。较大的外形也暗示着TX1拥有的更强性能和带给开发者的想象空间。
2开发环境搭建
在正式进入Jetson TX1开发的奇幻之旅前,先简单介绍一下Jetson TX1开发环境的配置,在这里我们需要预先准备下列项目:
NVIDIA开发者账号
该账号需要在NVIDIA官网的开发者页面进行注册,并同时加入“Embedded Development Program”。这样就可以获取Jetson TX1相关的全部文档和软件包资源,包括嵌入式系统镜像、开发工具以及NVIDIA提供的各种工具和软件库。
▲注册NVIDIA开发者帐号并加入“Embedded Development Program”
▲NVIDIA为开发者提供了涵盖Jetson TX1方方面面的文档资源和软件资源
▲Jetson TX1相关的文档和软件工具都可以通过Embedded Download Center下载
安装妥当的Jetson TX1
正确的电源、鼠标、键盘,网络和显示器连接。Jetson TX1开发套件提供了2个USB接口,包括一个USB 2.0 Micro,虽然通过转接器可以连接标准USB接口的设备,但是开发过程中经常需要将Jetson TX1通过USB连接至Host电脑,所以这里我推荐大家可以使用USB 3.0 HUB来解决USB接口不足的问题。
▲安装妥当的Jetson TX1
JetPack开发工具套件
可以登录NVIDIA Embedded Download Center下载。
一台运行Ubuntu Linux 64位操作系统的Host电脑。
操作系统推荐使用Ubuntu 14.04 LTS 64位版本,同时至少有10GB硬盘空闲空间。
准备完毕后,在Host电脑为JetPack安装包增加运行权限并执行,JetPack安装程序将通过图形界面引导开发者完成开发环境的配置,开发者只需依照自己的开发配置在安装程序的引导下做出选择即可,整个过程非常简约,界面友好。
值得注意的是JetPack安装程序不仅可以在Host电脑和Jetson TX1上搭建开发环境,同时还可以对Jetson TX1进行刷机,用来恢复出场设置和升级最新的操作系统版本,使用JetPack刷机比用命令行工具更加简便和不易出错。
▲在Host电脑上为JetPack安装包添加运行权限并执行
▲全程只需要依据安装引导进行配置即可
▲在Jetson TX1上测试开发编译环境是否安装成功
3小试牛刀——运行/开发环境初探
运行环境方面,JetPack搭建好开发环境后,Jetson TX1将重启并引导之图形界面。目前Jetson TX1上最新的操作系统为Linux For Tegra R24.1,该操作系统在用于ARM架构的Ubuntu 14.04 LTS版本基础上定制开发。Ubuntu在国内拥有庞大的用户基础和社区环境,基于Ubuntu定制开发的Linux For Tegra对于发者们来说,在界面,命令和操作习惯等方面非常熟悉,极易上手;与此同时,开发者使用过程中遇到的问题,除了官方论坛外,也可以在更广泛的Ubuntu操作系统社区环境内向众大神寻求帮助。
▲Jetson TX1操作系统 Linux for Tegra概览
一般来说,针对嵌入式平台的开发有两种编译模式:原生编译和交叉编译。原生编译就是直接在嵌入式平台上编译代码并运行,而交叉编译就是在个人电脑等平台编译代码,然后加载到嵌入式平台运行。我们在Jetson TX1开发上使用交叉编译。这里需要提醒一下各位小伙伴,交叉编译需要在Jetson TX1和Host电脑间同步代码,所以需要提前安装和配置Git,否则在后续编译执行的时候会报错的呦,开发工具会深情地问你“Can you tell me who you are”。
▲NVDIA Nsight启动界面
▲NVDIA Nsight操作界面
Jetson TX1使用的开发工具NVDIA Nsight是基于eclipse定制开发,其界面和操作习惯于eclipse基本保持一致,消除了开发人员的熟悉工具的时间和精力消耗。
接下来分享下在Jetson TX上创建,编辑,生成和运行一个项目的过程。
新建项目
▲NVIDIA Nsight新建项目中目标系统设置
▲NVIDIA Nsight新建项目中目标系统设置
▲NVIDIA Nsight新建项目中目标系统设置
由于使用交叉编译模式,所以在新建项目时,需要指定目标系统,即实际编译运行程序的系统——Jetson TX1。这里按提示输入Jetson TX1的网络地址,用户名,以及Jetson TX1上CUDA Toolkit的安装路径就可以了。
如果不知道Jetson TX1上CUDA Toolkit的路径也没有关系,新建项目向导很贴心的设置了一个“自动检测”的功能,只要轻轻一点,向导会自动搜寻CUDA Toolkit的路径,非常方便。
编辑代码
▲NVIDIA Nsight代码编辑视图
NVIDIA Nsight代码编辑与eclipse完全一致,只是增加针对CUDA代码的代码补全,高亮提示以及语法检查,用惯eclipse的开发者绝对能感觉到屠龙在手,天下我有。
生成/运行项目
▲NVIDIA Nsight远程运行项目对话框
▲NVIDIA Nsight远程运行项目对话框
同样的,在按照工具的提示配置好Jetson TX1后,就可以完成程序的编译,运行,然后坐等收获结果!
软硬件配置概览
在简单介绍了Jetson TX1以及它的开发环境后,现在从Jetson TX1的软硬件配置入手,来探索Jetson TX1开发者套件带给广大开发者的无限可能。
CUDA
CUDA是整套平台的核心,保证了Jetson TX1超高的计算性能。同时,Jetson TX1也支持各种基于CUDA跨架的软件库,从而可以用于多种高并行度计算和高数据密度的应用场景,如机器学习,深度学习,大数据实施分析以及物联网边缘计算等。
GPIO、I2C、I2S、SPI、带流控制的TTL UART等接口
丰富的接口给了今后基于Jetson TX1进行扩展开发的无限可能,即可以通过TTL UART、GPIO等接口实现其它单片机、嵌入式系统的所有功能外,还能通过自身强大的性能,升任其它单片机、嵌入式系统,如树梅派等无力支撑的高数据密度业务和高处理实时性业务,如智能机器人,机器人,无人驾驶汽车等。
摄像头扩展头
通过将摄像头(最高支持4K)与Jetson TX1连接,并借助OpenCV和Visionworks进行视觉计算。
PCIe x4接口
这使得Jetson TX1与其它扩展板卡得以结合,并碰撞出创新的火花。如可以通过PCIe x4接口将可编程的FPGA接入系统,协助处理通信,加解密等业务,从而进一步提升Jetson TX1针对特殊应用场景的性能。
USB 2.0 Client/Host接口
USB2.0 Client/Host口也为很多应用提供便利。一方面通过USB Host可以将各种USB外设连接在Jetson TX1上,此外,也可以通过 USB Client 将Jetson TX1作为外设连接至电脑或其它设备,开发者完全可以随意定义这个USB Client的具体行为和功能,即可以将Jetson TX1开发为具备任何希望功能的外设连接至电脑或其它设备。
初步的使用感受
在基础开发环境配置过程中,最令人映像深刻的感受有以下两点:
NVIDIA提供的工具软件包强大且易用
首先,JetPack为用户提供了从Jetson TX1系统镜像烧录,到Jetson TX1和Host电脑开发环境安装配置的一站式解决方案,省去了用户用在分别安装、配置各个组件,解决版本匹配和组件间依赖关系上的时间和精力,使用户可以方便快捷的完成环境的准备,并将精力集中在产品的研发上。相比之下,我之前在PC和其他嵌入式平台上,往往总要在环境配置上耗费很多时间,需要想方设法地去解决组件版本不匹配和软件依赖关系不满足等问题。
其次,JetPack在安装配置过程中向用户提供了非常详尽的操作引导,使用户,尤其是新手可以很顺利的完成基础环境的配置。例如在Jetson TX1操作系统映像烧录过程开始时,安装程序会弹出提示窗口,详细的介绍了如何将Jetson TX1设置为recovery模式以及相应的注意事项,并要求用户确认准备妥当后按键继续,最大程度的避免了用户操作不当造成的系统损坏;再例如在配置Jetson TX1软件环境时,安装程序会以图示的形式让用户选择Jetson TX1与Host电脑的连接方式,直观易懂。
Jetson TX1相关的辅助资源非常丰富
NVIDIA围绕Jetson TX1提供了从用户手册,产品设计文档,到工具软件和内核源码等全套资料,便于不同水平的用户查阅;同时还有专门针对Jetson嵌入式平台的开发者论坛,方便用户针对文档中未涉及的问题和使用经验进行提问和交流,NVIDIA的官方支持人员也会在论坛中回复大家提出的各种技术问题,为用户的开发过程提供有力支持。在本次编译环境的配置过程中,我就曾遇到交叉编译报错,eclipse提示在Jetson TX1上找不到对应路径的问题,当时查阅了很多文档但都没有找到问题所在,最终在开发者论坛中通过查阅开发者的历史提问找到的问题所在,是Jetson TX1端的Git没有正确配置,最终配置好Git后,编译错误也迎刃而解。
Jetson TX1凭借强悍的计算性能,相对超低的能耗,丰富的文档和资源和多样化的扩展接口,得以成为开发者和创客们的有力工具。后面,作者还将深入到不同的应用场景,深入探索Jetson TX1究竟如何帮助开发者实现无限可能,敬请期待!■