65.9K
CodeProject 正在变化。 阅读更多。
Home

将 Intel® RealSense™ 技术与 Intel® Edison 开发平台结合使用

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2015 年 6 月 12 日

CPOL

14分钟阅读

viewsIcon

32855

本文档中有两个此类应用的示例:一个示例使用 Intel RealSense 3D 摄像头作为输入,Intel® Edison 板作为输出,SDK 触发板上的 LED 灯。

获取新的 Intel® 物联网开发人员套件,这是一个完整的软硬件解决方案,可让开发人员使用 Intel® Galileo 和 Intel® Edison 板创建令人兴奋的新解决方案。访问 Intel® 物联网开发人员中心

引言

在移动电话普及的时代,我们现在看到了智能设备的兴起,它们连接到我们从未想象过的东西,构建了一个我们称之为“物联网”或 IoT 的世界。物联网设备仍处于起步阶段,从带有计步器的手表到通过手机启动的汽车。物联网设备有趣之处在于它们可以配备各种低成本传感器,这些传感器可以读取我们手机或电脑上找不到的温度、湿度、心率等信息,从而使这些信息在我们的生活中首次触手可及。借助 Intel® Edison 平台和 Intel® Quark™ 处理器,我们可以轻松构建收集传感器信息并创建创新产品的原型。

Intel 的另一项创新是 Intel® RealSense™ 技术。借助 Intel RealSense 3D 摄像头和 SDK,应用程序可以执行手势检测、面部分析、背景分割、语音识别、语音合成等功能,几乎就像一个能够检测许多事物的超级传感器。结合 Intel® Edison 套件的多功能用途及其输出,我们可以构建许多既有用又有趣的创意应用程序。

本文档中有两个此类应用的示例:一个示例使用 Intel RealSense 3D 摄像头作为输入,Intel® Edison 板作为输出,SDK 触发板上的 LED 灯。在第二个示例中,它使用 Intel® Edison 板作为输入,Intel RealSense 3D 摄像头作为输出,语音合成用于朗读板上的传感器数据。

硬件

  • 带有 Arduino* 分线板的 Intel® Edison 板
  • Seeed Grove* – 入门套件 Plus - Intel® 物联网版
  • 第四代(或更高版本)Intel® 酷睿™ 处理器
  • 8GB 可用硬盘空间
  • USB 3.0
  • 一款 Intel® RealSense™ 3D 摄像头 F200(系统集成版或外设版)
  • (可选)搭载第四代 Intel 酷睿处理器的 Intel® NUC(下一代计算)

软件

什么是 Intel® RealSense™ SDK?

Intel RealSense SDK 通过结合硬件、软件和 3D 摄像头,提供面部分析、手部和手指跟踪、语音识别、语音合成、增强现实对象跟踪、背景分割、增强现实等众多功能。当前 SDK 支持 Microsoft .NET 4.0 框架、Unity* Pro 4.1.0 或更高版本、Processing* 2.2.1 或更高版本以及 JDK 1.7.0_11 或更高版本。在我们的示例中,我们将使用 .NET 和 C#。

可以使用 Intel RealSense SDK 开发的典型应用程序包括沉浸式协作、游戏、自然交互、交互式故事叙述和 Intel® Capture and Share,但这仅仅是可能性的冰山一角。

有关 Intel RealSense 技术的更多信息,请访问 http://www.intel.com/content/www/us/en/architecture-and-technology/realsense-overview.html

您可以从 https://software.intel.com/en-us/realsense/home/download 下载免费的 SDK。

硬件近距离观察

Intel® Edison 板是拟议系列低成本通用计算平台中的首批产品之一。它旨在为物联网项目提供快速简便的原型制作,同时为商业化提供产品就绪的路径。

Intel® Edison 板使用 22nm 双核 Intel® Atom™ SoC,运行频率为 500MHz。它支持 40 个 GPIO,包括 1GB LPDDR3 RAM、4GB EMMC 存储、双频 Wi-Fi* 和蓝牙*,所有这些都包含在一个小巧的外形中。

它运行完整的 Linux* 内核,为了获得最佳性能,您需要编写硬件级别的 Linux 代码。

此外,Intel® Edison 板版本的 Linux 包含一个作为 Linux 程序的 Arduino 实现。简而言之,这意味着您可以编写熟悉的 Arduino 草图并在板上运行它们。这正是我们将要做的。

在此处了解有关 Intel® Edison 板的更多信息:http://www.intel.com/content/www/us/en/do-it-yourself/edison.html

Arduino* 分线板

Arduino 分线板有两个目的。首先,它提供了一个更大的原型制作平台,可以轻松访问 IO 引脚。其次,它提供了一个与 Arduino 兼容的硬件平台,这意味着我们可以将标准的 Arduino 扩展板与 Intel® Edison 板一起使用。图 1 显示了安装在 Arduino 分线板上的板。

图 1. 安装在 Arduino* 分线板上的 Intel® Edison 板

Grove Starter Kit Plus

该套件的全名是“Grove Starter Kit Plus - Intel® IoT Edition”,最初是为 Intel Galileo 第二代板设计的。幸运的是,通过 Arduino 分线板,它可以与 Intel® Edison 板完全兼容。

该套件(如图 2 所示)旨在简化传感器、执行器和扩展板的使用和原型制作。它包含一个与 Arduino 兼容的扩展板,带有标准化的四个 (4) 针连接器。这些连接器连接到 IO 端口,通过随附的电缆与套件中的传感器和控件连接。这意味着您可以构建项目,而无需处理小电线和上拉/下拉电阻,也无需担心极性。

在此处了解更多或购买该套件:http://www.seeedstudio.com/depot/Grove-starter-kit-plus-Intel-IoT-Edition-for-Intel-Galileo-Gen-2-p-1978.html

Grove 套件的创建者 Seeed Studios 在线提供了许多有用的资源。

我建议在此处克隆或下载 Sketchbook Starter 仓库:http://Github.com/Seeed-Studio/Sketchbook_Starter_Kit_V2.0

并在此处将 Grove Wiki 页面加入书签

http://www.seeedstudio.com/wiki/index.php?title=Main_Page#Grove

图 2. Grove Starter Kit Plus - Intel® 物联网版

一款 Intel® RealSense™ 3D 摄像头 F200

无论是系统集成版还是外设版,Intel RealSense 3D 摄像头都专为游戏互动、娱乐、摄影和内容创作而设计。3D 摄像头是一款复杂的传感器,在某种程度上,它也是物联网的一部分(毕竟,它的名字是 RealSense)。 该摄像头的最低要求是 USB3、第四代 Intel® 酷睿™ 处理器和 8GB 硬盘空间。

该摄像头(如图 3 所示)具有全 1080p 彩色和深度传感器,可为 PC 提供 3D 视觉和身临其境的体验。

您可以在 https://software.intel.com/en-us/realsense/devkit 购买包含摄像头的完整开发人员套件。

图 3. Intel® RealSense™ 3D 摄像头 F200

Intel® 下一代计算 (Intel® NUC),搭载第四代 Intel® 酷睿™ 处理器或更高版本

Intel NUC 是一个可选设备,可用作 Intel RealSense 3D 摄像头和 Intel® Edison 模块的集中式集线器,还可以处理其他功能,例如将数据存储和检索到云端以及进行进一步分析。它不是开发所必需的,因为您可以通过 USB 串行端口连接摄像头和 Intel® Edison 分线板套件。但是,如果使用,可以处理从摄像头接收到的信息并将其发送到板上以激活警报、电机、LED 等输出。从板上的传感器接收到的信息可以发送到 Intel NUC,使用 Intel RealSense SDK 激活语音合成。

由于摄像头需要 USB3、8GB RAM 和第四代(或更高版本)Intel 酷睿处理器,Intel NUC(如图 4 所示)轻松满足这些要求。另一个优点是其用户界面,带有 HDMI 端口,如果需要,可以轻松用作计算机。如果您没有配备所需软件的 PC,Intel NUC 可以是一个相对便宜的选择。

有关 Intel NUC 的更多详细信息,请访问:http://www.intel.com/content/www/us/en/nuc/products-overview.html

图 4. 搭载第四代 Intel® 酷睿™ 处理器的 Intel® NUC

安装软件并准备编码

我们将使用两个代码示例

  1. 捕获 Intel RealSense 3D 摄像头的姿势以控制 Intel® Edison 板上的 LED。
  2. 使用 Intel® Edison 板温度传感器的数据激活 Intel RealSense SDK 语音合成。

适用于 Intel® 物联网平台的 Arduino IDE

您需要下载特别准备的 Arduino IDE 版本才能将 Sketches 部署到您的板上。当前版本是 1.6.0,可在此处获取

https://software.intel.com/en-us/articles/install-arduino-ide-on-intel-iot-platforms

Intel® Edison 板驱动程序

您还需要从以下位置下载并安装 Intel® Edison 板的驱动程序

https://software.intel.com/en-us/iot/hardware/edison/downloads

它应该是列出的页面上“驱动程序软件”下的最后一个链接。当前版本是 1.2.1。

有关进一步说明,请参阅入门指南

https://software.intel.com/en-us/iot/library/edison-getting-startedVisual Studio

Visual Studio 是一个全面的开发人员工具和服务集合,可帮助您为多个平台创建应用程序。Intel RealSense SDK 需要 Visual Studio 和 Windows 8.1 作为最低软件要求。Visual Studio 支持 C、C++、VB.NET、C#、F#、M、Python*、Ruby、JavaScript* 以及许多其他语言。本指南特别使用 C#。

您可以免费下载 Visual Studio Express Edition。可以通过 DreamSpark*(针对学生)和 BizSpark*(针对初创公司)等计划免费获得商业版 Visual Studio。

您可以在 https://www.visualstudio.com/ 找到有关 Visual Studio 的更多信息,在 https://msdn.microsoft.com/en-us/default.aspx 找到有关 C# 的更多信息

Intel® RealSense™ SDK

Intel RealSense SDK 允许开发人员利用前面描述的功能来利用 3D 功能。当前版本是 4.0.0.112526(或 Gold R2 版本),可在此处获取

https://software.intel.com/en-us/intel-realsense-sdk/download

测试 Intel® Edison 板

在开始下面的演练之前,请确保您能够运行 Blink 示例草图。它包含在 Arduino IDE 下载包中,位于 examples -> 01.Basics -> Blink 文件夹。

https://software.intel.com/en-us/blinking-led-with-arduino-ide-on-intel-edison-board

安装 Visual Studio* 和 Intel® RealSense™ SDK

安装 Visual Studio 应该非常简单。然而,Intel RealSense SDK 需要将 3D 摄像头插入 USB3 才能安装。当您在桌面上看到 Intel RealSense SDK 示例浏览器(图 5)时,即表示安装成功,您可以在其中浏览 C++ 和 C# 示例。还提供特定于摄像头的示例;我们将使用 Hand Viewer 示例。

F200 Depth Camera Manager 必须在安装 SDK 后单独下载。它位于

https://software.intel.com/en-us/intel-realsense-sdk/download.

没有摄像头管理器,代码示例将无法正确初始化。

图 5. Intel® RealSense™ 示例浏览器

示例 #1:将信号从 Intel® RealSense™ 3D 摄像头发送到 Intel® Edison 板

对于第一个示例,我们将构建一个简单的应用程序,该应用程序使用手势将信号从摄像头发送到板上的 LED 以进行控制。

Intel® Edison 板的代码

我们首先需要构建代码的接收端。我们将 Grove 套件连接到 Arduino 分线板,然后将 LED 插座套件 v1.3 连接到 D2,如图 6 所示。

图 6. LED 插座套件 v1.3 连接到 Arduino* 扩展板上的 Grove Kit D2。

将 USB 端口连接到您的 PC 或 Intel NUC,使用 Windows* 设备管理器查找 Intel® Edison 板正在使用的串行端口。从图 7 中可以看出,在这种情况下它是“COM16”。当我们将板连接到 PC 时,Windows 会自动检测到板并分配端口。

图 7. 显示 Intel® Edison 板虚拟 COM 端口的 Windows* 设备管理器

在 Arduino IDE 的 Tools 下,我们将选择“Intel® Edison”作为板,选择“COM16”作为端口,如图 8 和 9 所示。

图 8. Arduino* IDE 中的板选择

图 9. Arduino* IDE 中的端口选择

最后,我们来编写一些程序。由于该板用作输出设备,以下几行代码将控制其串行端口,其中 1 打开灯,0 关闭灯。

const int ledPin = 2;     // the number of the pushbutton pin
void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()>0) 
  /* read the most recent byte */
  {
    int tmp = Serial.parseInt();
    if(tmp == 0)
    {
      // turn LED off:
      digitalWrite(ledPin, LOW);
    }
    else if (tmp == 1)
    {
        // turn LED on:
        digitalWrite(ledPin, HIGH);
    }
  }
}

至此,Intel® Edison 板的代码示例已完成。

Intel® RealSense™ 应用程序的代码

在 C# F200 示例下,有一个 Hand Viewer 应用程序。单击右侧的源文件,然后打开 RSSDK/FF_HandsViewer.cs 文件夹。将整个文件夹复制到桌面,以便我们可以修改此项目。

我们将使用的特定手势是张开手指。如果您愿意,可以随时切换到其他手势。图 10 显示了为此示例选择张开手指手势。

图 10. 使用 Hand Viewer 跟踪张开手指手势

MainForm.cs 中修改并添加以下代码。该程序相对简单,因为我们只是声明串行端口并跟踪最后一个手势。当手势不同时,我们会更改 LED 的标志。UpdateInfo 是现有示例代码更新用户手势的地方。我们可以使用 status 变量来跟踪是否正在给出张开手指手势。当给出该手势时,我们将 SerialPort 的标志设置为 1 并打开 LED。当手势结束时,我们向标志发送 0 来关闭 LED。

using System.IO.Ports;
…
public partial class MainForm : Form 
{
	private SerialPort _serialPort;
private int _lastGesture;
	…
public MainForm(PXCMSession session) 
{
	…
	_serialPort = new SerialPort();
_serialPort.PortName = "COM16"; //Serial port Edison is connected to
            _serialPort.BaudRate = 9600;
            _serialPort.ReadTimeout = 500;
            _serialPort.WriteTimeout = 500;
}

private void WriteToSerialPort(int value)
{
            if (_lastGesture != write)
            {
                Console.WriteLine(write.ToString());
                _serialPort.Write(write.ToString());
            }
            _lastGesture = write;
}

public void UpdateInfo(string status,Color color)
{
…

            if (status.Contains("spreadfingers") || status.Contains("spreadfingers"))
            {
                WriteToSerialPort(1);
            }
            else
            {
                WriteToSerialPort(0);
            }          
 }

        private void Start_Click(object sender, EventArgs e)
        {
            …
            _serialPort.Open();
        }

       private void Stop_Click(object sender, EventArgs e)
        {
            …
            _serialPort.Close();
        }

如果一切正常,请单击开始按钮,将跟踪设置为张开手指。然后,当手指张开时,LED 应该亮起,如图 11 所示。

图 11. 使用张开手指手势通过 Intel® Edison 板点亮 LED

示例 #2:读取 Intel® Edison 板的数据并使用 Intel® RealSense™ 应用程序进行输出

在此示例中,我们将连接到 Intel® Edison 板的温度传感器用作输入,并在 Intel RealSense 应用程序中使用语音合成,使传感器数据更加人性化。

Intel® Edison 板的代码

Grove* - Temperature sensor v1.1 是一个模拟传感器,我们可以通过 Grove 套件将其插入板上的 A0。以下 Arduino 代码以摄氏度读取温度。代码每 15 秒延迟一次,以便扬声器中的文本到语音部分有时间完成。您可以根据需要调整延迟。您还可以添加额外的逻辑,在温度过高或过低时发送警告。

#include <math.h>
int a;
float temperature;
int B=3975;                  //B value of the thermistor
float resistance;

void setup()
{
  Serial.begin(9600);  
}

void loop()
{
  a=analogRead(0);
  resistance=(float)(1023-a)*10000/a; //get the resistance of the sensor;
  temperature=1/(log(resistance/10000)/B+1/298.15)-273.15;//convert to temperature via datasheet ;
  Serial.print("Current temperature is ");
  Serial.print(temperature);
  Serial.println(" celcius");

  delay(15000);
}

Intel® RealSense™ 应用程序

在 Common Samples 下,您会看到 Speech Synthesis。复制源文件夹“ambitious, persistence, resilient risk taker”,就像我们在上一个 Hand Viewer 示例中所做的那样。界面可能不会改变,但目标是使用语音合成来朗读板上的传感器数据。我们仍然使用“COM16”。

像这样更改 MainForm.cs 文件

using System.IO.Ports;
…
public partial class MainForm : Form 
{
        private SerialPort _serialPort;
        private static bool _continue;
        protected static string curr_module_name;
        protected static uint curr_language;
        protected static int curr_volume;
        protected static int curr_pitch;
        protected static int curr_speech_rate;

        Thread readThread = new Thread(Read);

        static public void Read()
        {
            while (_continue)
            {
                try
                {
                    string message = _serialPort.ReadLine();
                    Console.WriteLine(message);
                    VoiceSynthesis.Speak(curr_module_name, (int)curr_language, message, curr_volume, curr_pitch, curr_speech_rate);
                }
                catch (TimeoutException) { }
            }
        }

        public MainForm(PXCMSession session)
        {
            …
            _serialPort = new SerialPort();
            _serialPort.PortName = "COM16"; //Serial port Edison is connected to
            _serialPort.BaudRate = 9600;
            _serialPort.ReadTimeout = 500;
            _serialPort.WriteTimeout = 500;
	
            _serialPort.Open();
            _continue = true;
            readThread.Start();
        }
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            _continue = false;
            readThread.Join();
            _serialPort.Close();
        }
        …	
}

如果一切运行正常,程序将每 15 秒朗读一次温度传感器数据。您可以根据个人需求修改程序,例如更改界面或简单地将 VoiceSynthesis.csVoiceOut.cs 复制到您自己的项目中。

展望未来

我希望这两个示例能帮助开发人员和企业家扩展他们的思维,并想出更多利用这两种技术强大功能的想法。我构思的一个原型是 Anti-Snoozer,其中 Intel RealSense 3D 摄像头检测到驾驶员是否感到困倦,并通过 Intel Edison 板发送警报,以提供额外的警告唤醒驾驶员。利用这两种技术强大功能的组合有数千种可能性。那么,您将制造什么?

关于作者

Peter Ma 在 Web、移动和物联网应用程序开发方面拥有超过 14 年的经验。他之前曾在五家初创公司工作,专注于数据库、Web 后端、Web 前端、移动(Android* 和 iOS*)和物联网开发。他是 Intel® 软件创新者,使用 Intel® 技术构建各种演示。

Peter 目前居住在旧金山,担任快速原型专家,为大公司和初创公司提供咨询。他业余时间参加许多黑客马拉松,并且经常获胜(!)。人们形容他雄心勃勃、坚持不懈、坚韧且敢于冒险。

版权所有 2015 Peter Ma

根据 Apache 许可证 2.0 版(“许可证”)许可;除非符合许可证的规定,否则您不得使用本文件。您可以在以下网址获取许可证副本

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”分发,不附带任何形式的保证或许可。有关控制许可证下的权限和限制的具体语言,请参阅许可证。

Intel® 物联网开发者中心

立即开始创新!Intel® 物联网开发者计划提供知识、工具、套件以及专家社区,助您快速轻松地将您的创新想法转化为物联网解决方案。

通过适用于 Intel® Edison 和 Intel® Galileo 平台的 Intel® 物联网开发人员套件,梦想它,实现它。这些套件是多功能、性能优化的集成端到端物联网解决方案,支持各种编程环境、工具、安全、云连接和硬件。

如需更多资源并了解新的 Intel® 物联网开发者套件 v1.0 如何帮助您简化物联网项目

© . All rights reserved.