机器人编程实战
上QQ阅读APP看书,第一时间看更新

4.1 微控制器的实际检验

我们想要在微控制器上检验的一些情况是:

·可供程序使用的实际内存是多少?

·是否有闪存或从微控制器上可访问的辅助存储?

·微控制器上的数据传输速率是多少?

我们不希望出现这样一种情况,传感器产生的数据或正在生成的数据超过了微处理器和内存可以处理的能力。我们不希望传感器、电动机和微处理器数据传输速率之间出现不匹配。在开发有用的机器人应用程序时,数据采集速率与数据处理速率是需要考虑的一个重要方面。

微控制器通常使用某种工具来报告系统信息。微控制器工作的运行环境也有某种报告系统信息的方式。本书中,我们将引领你从基本原理开始。

访问信息取决于微控制器所支持的机器人种类。有些机器人通过数字显示器向程序员发送反馈,其他一些机器人将反馈写到程序员可访问的内部存储器或某种外部存储设备。让我们看一看两种常见的低成本机器人微控制器:Arduino Uno和Mindstorms EV3。

图4-3给出了一张用于控制一个基于Arduino机器人手臂的Arduino Uno微控制器照片,本书中我们也将基于该型微控制器的机器人手臂作为代码示例。

Arduino ShowInfo是一个可以用微控制器实现的例子,它可以用于获得连接到一个基于Arduino机器人的微控制器的实际规范。键入命令,然后按回车键,我们的ShowInfo版本给程序员呈现了一个如代码清单4-1所示的菜单。

代码清单4-1 Arduino ShowInfo菜单

图4-3 Arduino Uno微控制器的照片

代码清单4-2和代码清单4-3给出了用于速度测试选项的输出示例。

代码清单4-2 用于速度测试选项的Arduino ShowInfo实用程序的输出示例

接下来代码清单4-3是用于速度运行时开销补偿的速度输出示例。中断后仍在运行,因为millis()用于定时功能。

代码清单4-3 用于速度测试运行时开销补偿的输出示例

ShowInfo实用程序为基于Arduino的微控制器工作。大多数微控制器有它们自己的“show info”实用程序版本。对于已经嵌入Linux的微控制器,有更多的选项来查找信息。例如,Mindstorms EV3和WowWee公司的RS Media微控制器已经在处理器上嵌入Linux和信息,打开proc/info可以显示关于处理器的一些信息。例如,命令:

在EV3微控制器上产生的输出如代码清单4-4所示。

代码清单4-4 EV3微控制器上more/proc/cpuinfo命令的输出结果

在EV3上执行命令uname:

展示的是LINUX的版本和EV3的处理器。

在EV3控制器上运行free命令展示的输出如代码清单4-5所示。

代码清单4-5 EV3控制器上运行free命令的输出示例

这些数值给出了微控制器组件的一些识别信息,比如:

·处理器类型

·处理器速度

·内存容量

·可用内存

·已用内存空间

为了避免因出厂信息与实际使用之间的差异带来的问题,需要提前将运行微控制器实用程序或观察/proc/cpuinfo和/proc/meminfo发现的信息与微控制器附带的说明书或数据手册进行对比,并且注意其中任何重要的差异。可用内存限制了可加载到机器人的程序大小,或机器人实时可以处理的传感器或通信数据量。

然而,处理器速度将限制机器人执行指令的效率,以及处理器和端口之间的数据传输速率;可用内存对于处理传感器数据的效率和可处理数据量有重要影响。记住,处理器控制机器人的数据和信号流。因此,像这样的问题:

·机器人可以处理多少数据?

·机器人能同时处理的最大数据块是多大?

·机器人可以同时发送或接收多少个信号?

·机器人可以处理信号或数据的速度有多快?

都由微控制器的实际能力来回答。微控制器中ATmega、ARM7和ARM9系列最受欢迎,它们也许是用于移动和自主机器人最常见的低成本微控制器。所有在本书中用作例子的机器人都使用这三个系列的微控制器。