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

设计与编程人工智能机器人入门指南;C#、C++ (第一部分)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.77/5 (19投票s)

2014年7月2日

CPOL

13分钟阅读

viewsIcon

102109

downloadIcon

1510

如果您擅长高中数学、基础C++,并且对电子学略知一二,那么您可以按照本系列教程制作您自己的DIY人工智能机器人。

引言

本文为那些具备C#、C、电子学基础知识,以及高中三角学和物理学知识,并希望在真正“工作”的事物上测试自己的编码技能,即能够物理移动并对人类行为做出响应的事物的人,提供了一份[最入门的]应用机器人入门指南。

我记得我人生中能够用C++编写“Hello! World”应用程序,用C#制作简单的图形计算器,并拆卸(然后成功重新组装)家里几乎所有家用电子产品的那段时光。(我不是说很遥远的未来,那大概是2008年,我刚高中毕业)。我开始搜索,想知道如何在家里制作机器人。令我畏惧的东西像“DLD”、“并行端口接口”、“微控制器”、“PLC”、“PIC”、“伺服电机”、“ADC”、“DAC”等概念在眼前闪过,天知道我有多困惑,不知道从何开始,也不知道该先学什么!但现在我知道了。这就是为什么我将从不同网站、书籍、经验和我老师的讲座中收集到的所有知识总结在这篇文章中。

要求

要跟上本系列的文章,您必须具备

扎实的 C#、C++ 知识,高中三角学,基础电子学,以及当然,[耐心+ 决心]。

一台同时拥有 串行端口并行端口 并且运行Windows操作系统的计算机/笔记本电脑。(不推荐Win 8)

我无意吓跑您,事实上,我所说的是,您不能沮丧,因为有时在代码和硬件中追踪一个简单的bug可能需要数晚的思考。

目录

我的文章将包含机器人学以下部分的全面且“足够开始”的知识。在本系列结束时,跟随者将能够夸耀自己的第一个AI机器人。

您将按以下顺序学习。(文章标题的文本可能会有所不同)

  1. 选择接口/控制类型(第一部分文章)
    1. 硬件选择
    2. 编程语言选择
  2. 准备所需物品(第一部分文章)
  3. 准备我们的实践基本工具
    1. 准备IDE
    2. 准备模拟器
    3. 准备硬件
    4. 为任何类型的机器人编写基础框架代码
  4. 通过计算机操作一些输出设备
    1. 首次测试我们的系统
    2. 在GUI中实现继电器和开关与计算机的接口
    3. 伺服电机与计算机的GUI接口
    4. 简单的直流变速电机GUI接口
  5. 测量物理量
    1. 计算机上测量室温
    2. 使用声纳测量距离
    3. 测量电机速度
    4. 测量两个物理连杆之间的角度
  6. 学习一些非常强大的机器人工具
    1. 使用摄像头测量物体距离
    2. 机器人的语音合成/识别系统
    3. 人脸检测
  7. 整合知识;创建我们的第一个机器人
    1. 设计/编程一个简单的4DOF机器人手臂
    2. 识别视线内的彩色球并将其转换为计算机语言
    3. 教会系统检测人脸、响应语音指令并拾取要求的球


我曾帮助过我的两个同伴做过同样的事情。其中一人制作了一个人形机器人ROBOx。高4英尺的ROBOx能够行走、说话并与周围的事物互动。

1. 选择接口类型

接口是用于连接两个实体通信的方法。例如,计算机显示器为机器和人提供了接口,而我们的网卡为计算机和网络提供了接口。事实上,这个问题可能有成千上万种答案,而且都对。让我们了解其中一种易于在家实践且足够强大的商用产品接口。

如果您不了解以下术语,请点击链接查看。

并行端口(PC背面紫色的25针端口)

串行端口(PC背面绿色的9针端口)

微控制器(一种小型集成电路,可以独立运行C++程序。它拥有自己的RAM、ROM、处理器和其他运行C++编写的程序所需的东西)

我们将开发的一般接口包括:

1. 我们(人类)与计算机(一个简单的GUI)之间的接口

2. 计算机与微控制器之间的接口

3. 微控制器与电机/传感器之间的接口。

事实上,这个过程可以描述为:

步骤1. 桌面计算机通过串行端口向微控制器下达指令,告诉它做什么。

步骤2. 微控制器驱动电机、执行器和其他输出设备。

步骤3. 微控制器通过读取传感器信息来获取反馈。

步骤4. 微控制器还会将反馈信息告知PC。

步骤5. 当我们命令计算机做某事时,计算机将向我们展示实际发生的情况。

这不就是机器人应该做的事情吗?正是如此。现在,我们已经了解了接口的基本概念以及机器人的主要组成部分,让我们深入了解更多细节。

1.1. 微控制器

A microcontroller mounted on a bread board

(大多数)微控制器是集成电路,需要通过(在我们的文章中)提供5V直流电源来供电。这也可以是USB端口提供的电源,实际上USB端口的电压约为5V。

微控制器存储着编译好的机器语言程序,该程序最初是用计算机语言编写的,在我们的例子中是C语言。就像我们在编程中声明变量并为其赋值然后取回它们一样,微控制器自带一些内置的预定义“变量式”空间,即寄存器,它们拥有预定义且专用的名称,与变量非常相似。在我们的例子中,这些寄存器大多是8位宽的。分配给某些寄存器的值不仅保存在内存中,还作为电压输出显示在微控制器集成电路的某些引脚上。1表示约5V,0表示约0V。

因此,通过改变这些寄存器的值并读回它们,微控制器就可以根据给定的C++程序来操作继电器和晶体管,这些继电器和晶体管可以进一步用于驱动电机。

在种类繁多的微控制器中,我选择了Intel AVR架构,特别是Atmel MegaAVR系列。这些器件价格便宜(起价1美元),易于编程,无需购买昂贵的编程器即可在家轻松编程,并拥有所有必要的组件和功能,可用于我们的机器人。

1.2. 如果微控制器本身就能像计算机一样工作,为什么还要引入计算机?

如果这些微控制器如此强大,为什么我们还要费力地连接PC之类的东西?有人可能会问,也必须问。否则,我的推理将白费,而发明在实现之前就已夭折。

微控制器的问题在于其非常低的系统时钟速度(不是时钟速度,微控制器的时钟执行的任务与你电脑中的处理器类似)和有限的编程内存。而且情况比你现在想象的还要糟糕。让我们快速比较一下。

  • 我们的计算机的处理器速度从900MHz到几GHz不等,还有多核处理器,而最强大的微控制器之一只有120MHz。我们将要使用的微控制器是16MHz。
  • 我们通常在电脑中有几GB的内存,而微控制器只有几MB,我们即将使用的只有512字节!!
  • 我们的计算机拥有几TB的硬盘驱动器,可以自行写入。而控制器只有几KB。

当我们谈论机器人时,我们谈论的是视觉系统、语音合成和人工智能,微控制器在处理能力方面无法与台式计算机/笔记本电脑相比。

所以!我们在两者之间找到了一个折衷方案。一个混合系统,将由台式计算机集中编程和教授所有智能,并通过主计算机的串行端口传输命令来与电机、执行器、传感器、摄像头和许多其他设备进行交互。

请注意

在本文中,为便于演示,所有编码和电子器件均针对Atmega 16L/A完成。

2. 准备物品

2.1. 制作你的第一个微控制器支持板

这个简单的工具将用于放置你的微控制器,为其供电,并提供一些启动必需品。

2.1.1 面包板

我想是时候认识你未来的好朋友了,面包先生。

这个奇妙而简单的发明让你可以在它数百个孔中的任何一个上连接不同的电子元件,这些孔内部具有通用电气连接。

2.1.2 数据手册

数据手册始终是解决大多数用户关于组件问题的最终答案。我们只将它们用作参考,不必随时阅读全部内容。此链接是atmega16的数据手册,我们将在后续讨论中使用。下载并保存在易于访问的位置。

2.1.3. 组件

我们的支持板将包含一些基本组件:

  • 一个5V电源,在纵向插槽中提供,这样我们可以在电路中的任何地方需要时使用它。
  • 一个LED,通过一个电阻连接到5V。阅读这篇文章,它也将对其他概念有所帮助。
  • 一个自动和手动复位电路(去抖动电路
  • 一个16MHz的晶体。这个组件实际上以16MHz的频率为控制器提供脉冲,以便控制器以16MHz运行。
  • 当然,还有一个微控制器,对于本文,我们使用的是Atmel ATmega16。

您将把这些组件连接到面包板上。

供电方面,您有两个选择:

  • 使用USB连接器输出的5V电源。正如前面图片所示的USB端口示意图,使用一根损坏的USB线从连接器中提取GND和5V线。此时不要将其连接到面包板。
  • 使用一个输出电压在6V DC和3V DC之间的DC适配器,以及图中所示的7805稳压器IC。(建议使用9V电源,非必需。)7805连接

现在,您需要将组件安装到面包板上。请遵循以下原理图。

  • Atmega 16 connection

然后,将5V电源连接到控制器的VCC和AVCC以及GND。

电源LED D1应该会亮起。如果未亮起,常见原因包括:

  • 电源无电
  • 连接松动
  • 电源、7805或LED连接反向
  • 组件损坏

找出问题并解决,使LED亮起,或者,惊慌失措!

后者绝不推荐,因为它毫无益处。

2.2 获取编程器/烧录器

2.2.1 简介和需要做的事情

(不是烧毁,是烧录)

编程器是将程序从计算机复制到微控制器的设备。

通常,用于编程/烧录控制器的编程器有两种类型:

通用编程器(例如此链接

(ISP),例如此链接

我们将使用ISP。ISP经济实惠、速度快且便携。它们不需要将IC从主电路上拆卸下来,唯一的缺点是,它们只能编程有限的控制器IC。

市面上有许多编程器,您可以购买一个,也可以自己制作一个。相信我,后者并不像听起来那么难,而且在大多数情况下,这是获取编程器更经济的方式。

请按照此链接准备好您的ISP。

注意:您一定不要在面包板上制作编程器,因为它可能会导致复杂性,甚至永远无法成功工作。请使用焊线板和电烙铁。有关焊接指南,此处有一个非常好的视频指南。

另外,从附件下载ISP编程器软件并将其安装到C:\ISPProg

2.2.2 我的自制在系统编程器

下图是我个人用于SPI通信和编程的一个ISP。我从上面提到的同一链接获取的。

这是我使用的一个非常简单且原始的编程器的视觉图。我与此编程器一起使用并行端口扩展线。

2.3. 将所有东西连接起来

找到您PC上的并行端口。

将您的ISP插入并行端口,连接到支持板,然后为板供电。

现在在Windows下打开ISP编程器软件,在顶部的下拉列表中选择“AVR”。然后,转到“Setup”。选择“SI Prog”,应用,然后点击“READ SIGNATURE”。

这是设置基础知识的最关键点。

在此屏幕上,您必须检测到“ATMEGA16L”设备。如果显示“Bad or unkown signature”(签名错误或未知),请尝试以下解决方案之一:

  • 根据上面提供的IKA logic网站链接验证所有连接。
  • 将时钟速度更改为1000000Hz。
  • 在设置中将引脚配置更改为“AEC Prog”或“ISP Prog”。
  • 缩短编程器使用的电线长度(控制器与编程器之间的电缆最长不得超过1英尺)。
  • 验证编程器供电端有完美的5V。
  • 验证7805没有发热。否则,请在7805 IC上使用散热器。
  • 当然,您可以联系我,以便我们一起讨论并解决问题。

2.4. 安装软件

2.4.1 推荐的IDE

我们将用于计算机端应用程序的开发环境是“MS Visual Studio”,最好是V2008或V2010。获取DVD/互联网副本并进行安装。在安装过程中确保安装MS Visual C#和.Net Framework 3.5,但您可以跳过以下内容:

  • MS Office开发,
  • MS Visual C++、VB和其他语言
  • MS移动设备开发工具
  • Web开发工具

我们将用于控制器端程序的开发环境是HP Infotech Codevision AVR。不幸的是,它是评估版本。我们鼓励您购买完整版,但评估版就足够了。在此搜索并下载它。

2.4.2 备用IDE(可选)

如果您找不到Codevision AVR,也可以使用VMLAB,这是一个免费软件,但您将失去CodeWizard AVR的清晰度和Codevision AVR的智能提示。

  • 此处下载VMLAB。安装到C:\VMLAB。
  • 此处下载WINAVR。安装到C:\WINAVR。
  • 将两者都安装在C驱动器的根目录下。
  • 创建任何项目时请记住这一点:
  • 转到 Project > New Project(项目>新建项目)

Future reference

2.4.3 ISP编程器

如果您已从第2.2节下载了ISP编程器,请跳过此部分。

从附件下载ISP编程器并将其安装到C:\ISPProg。

2.4.4 ISIS Proteus

这个强大的软件是用于电子电路仿真、调试和制作PCB的完整解决方案。这个工具对您来说不是必需的,因为您可能不想购买许可证(除非您不愿侮辱开发者,并从洪流中下载完整的Proteus 7 Professional)。

2.5 第一部分总结

到本部分结束时,您应该已经学会了以下内容,如果还没有,您可以随时谷歌搜索,或者在最坏的情况下,问我。

  • 通过计算机编程软件上的ISP检测到ATMEGA16L IC。
  • 如何安装MS Visual Studio(MS VS08)、Codevision AVR和/或VMLAB。
  • 为微控制器支持板供电时的注意事项(Do's and Don'ts)。
  • 制作5V直流稳压电源。
  • 通用焊接技巧。

在下一部分,我们将学习如何:

  • 为微控制器编写“hello, world!”程序(一个LED闪烁应用程序)。
  • 在微控制器电路的实时仿真中模拟代码。
  • 首次对您的微控制器进行编程,第二次也是如此。

请提供您的反馈,我随时为您提供帮助!

© . All rights reserved.