机器人/设计基础/基础编程
如今使用可编程组件变得很容易。在早期,你必须用汇编语言编写代码,将其烧录到EPROM中,将EPROM插入其插座,并希望你没有犯任何错误。因为如果你犯了错误,你必须在数百行神秘的汇编代码中查找错误,并且必须使用一个新的EPROM。如今你有了可以在电路中重新编程的闪存。你有了C和Basic编译器来编写你的代码。大多数微控制器在芯片上集成了大量硬件(UART、看门狗、实时时钟、RAM、ROM、EEPROM等),并且有针对不同编程语言的库可用,这使得编码LC显示屏或伺服电机变得非常容易。更不用说你还有仿真器(一种插入微控制器插座的特殊连接器,允许PC模拟微控制器)和模拟器(在PC上模拟微控制器并允许运行其代码)来查找错误。
一个很好的入门微控制器是Atmel AVR ATtiny2313(以前:AT90S2313)或ATMEGA8535(以前:AT90S8535)(Atmel)。它便宜,在芯片上拥有所有基本功能,并且有大量专门的网站。8535更贵,但内存更大,并且有一个片上ADC。AVR结合Bascom-AVR几乎是开始使用微控制器的最简单方法。
有关详细信息,请参阅嵌入式系统/Atmel AVR。
有关其他流行的微控制器,请参阅机器人/计算机控制/接口/微控制器。
有关一种AVR开发方法,请参阅通用工程介绍/Arduino和电机/Arduino介绍。
在控制机器人方面,PC比微控制器具有许多优势。但是它有两个缺点,使它几乎不可能用于小型机器人项目
- 首先:它又大又重。
- 其次:现代PC消耗大量电力。
这意味着PC仅限于系留或大型机器人。如果电力不是问题,PC提供了大量的RAM和硬盘空间以及充足的CPU性能。加上一个非常方便的用户界面。此外,网络功能对于某些应用也可能非常有用。为你的机器人提供无线连接(红外、无线电、WiFi、蓝牙等)以及PC上的类似接口,可以将线缆问题减少到有限距离(或在红外的情况下为视线)问题。
如果你打算在你的项目中使用PC,你可能希望使用Linux发行版作为操作系统,因为它允许轻松访问计算机的任何部分。另一个操作系统选择是较旧的MS-DOS,尽管MS-DOS缺乏多线程(但这些可以在你的软件中添加)并且具有糟糕的内存管理(还记得640Kb限制吗?)。
笔记本电脑只有尺寸不利。笔记本电脑提供了PC的优势,而没有巨大的功耗。笔记本电脑的缺点是电池续航时间有限。电池续航时间有限。html
PDA(Personal Digital Assistant)只不过是手持式PC(Personal Computer)。大多数情况下,这些设备使用缩小的RISC(Reduced Instruction Set Chip)处理器,以实现快速的执行时间,并且还使设备保持比普通笔记本电脑更小巧轻便。一些PDA甚至内置GPS,这使得它对于户外机器人应用非常有趣。缺点是价格。PDA可用于娱乐,但也可以作为出色的商业工具,尤其是在配备手写笔的情况下。
Gameboy(经典、高级、彩色和DS)可以成为非常强大的设备。这些已被用于许多项目(请参阅Google)。唯一的缺点是构建充当连接器的特殊PCB。
Gameboy Advance也是一个出色的机器人平台。有一些完整的开源开发套件可用(基于GCC的C/C++加上ARM汇编)。还有一个不错的套件(Charmed Labs)可用于连接乐高机器人电机/传感器,并提供比乐高RCX更多的控制。该套件拥有4MB闪存和几百KB RAM,潜力巨大。但是,该套件并不真正适合完全初学者,因为设置GNU工具可能非常复杂,尽管开发环境因此非常丰富。
有关编写Game Boy Advance软件的技巧,请参阅GBA开发。
可编程逻辑控制器(PLC)是专用的工业计算机,旨在易于与电路接口。大多数PLC是可扩展的,但也有一些紧凑的“一体化”解决方案。它们具有出色的位操作功能,以及用于多种特殊信号的附加卡,如高速计数器、模拟I/O、网络和现场总线(RS-232、RS422、RS-485、以太网、DeviceNet、Profibus等)、脉冲输出、伺服控制等。越来越多的特殊输入包含在PLC CPU单元中。PLC传统上用于控制自动化工厂,每个PLC可能控制多台机器。它们通常使用专用编程语言,最常见的是梯形图或SFC。
PLC的大小从大约5x5x5厘米不等(也有一种PLC IC可用,但出于本书的目的,我们选择忽略这一事实)。最小的PLC功能非常有限,只有几个I/O和非常有限的内存,以及在数据处理和计算方面非常有限的指令集。如果你有丰富的电气系统经验,但对设计和焊接PCB以及编程计算机感到畏惧(即,你是电工),那么PLC尤其适合你。它们在具有许多专用传感器和输出的非常大型系统中也表现出色,因为通常会有制造商提供的标准解决方案可用。
PLC的缺点是价格——它们可能相当昂贵,通常至少比微控制器高一个数量级。它们也比微控制器消耗更多电流,但比计算机少。另一方面,与计算机相比,它们的计算能力较弱。它们不适合进行繁重的信号处理工作。
PLC最适合大型机器人,但也适用于中型项目。
通常会同时使用电脑/笔记本电脑/PDA和(一个或多个)微控制器,因为这两种设备可以互补各自的局限性。例如,电脑/笔记本电脑/PDA具有大容量内存和强大的处理能力的优势,但缺乏在机器人领域非常实用的特定输出,比如PWM。微控制器通常具有独立于微控制器其余部分运行的PWM通道,但其处理速度和内存有限。
将这两种设备连接起来可以获得两全其美的好处。
此页面讨论了一些可用的编程语言,并提供了下载这些语言编译器的链接。
语言的选择取决于以下几点
- 之前的经验。如果您已经熟悉某种特定的编程语言,您可能希望使用该语言来编程您的机器人。
- 您打算投入多少时间和精力。并非每种语言都同样易于使用。语言的大部分复杂性来自于允许更多底层访问。基本上,语言赋予用户越多的控制权,使用起来就越困难,但也越强大。理论上,汇编语言允许程序员编写速度最快、代码最小的程序。然而,这仅适用于经验丰富的程序员。现代编译器可以生成接近手工编写的汇编代码的代码。在大多数情况下,使用汇编语言会不必要地使程序复杂化,除非在C或Basic程序中使用内联汇编。通常,这些代码只有几行,直接与内存交互,或者必须在已知的时间内执行。对于大多数(如果不是全部)项目,Basic或C等语言就足够了。只有当您打算将微控制器或PC推至其性能极限时,才值得花费精力编写汇编代码。
- 您的目标。如果您想要一个简单的机器人,根本不需要汇编代码。使用现代微控制器,您可以轻松编写粗略的Basic代码,并仍然拥有足够的速度和内存。如果您打算构建一个具有几十个传感器、图像识别和语音识别功能的尖端机器人,您将需要编写完美的代码,并且需要为某些组件使用汇编语言才能获得足够的速度,并能够将代码放入微控制器有限的内存中。大多数项目都介于这两个极端之间,编写良好的Basic或C代码绰绰有余。了解(一些)汇编语言非常有用,因为它可以帮助您了解处理器的运作方式。这些见解使您成为一名更好的程序员。
- 可用性。并非所有语言都适用于所有微控制器。Urbi是开源的,C和Basic以及Forth很常见,通常作为免费软件提供,其他语言可能以商业方式提供,或者根本不可用。
本节并非旨在教授编程基础知识,而仅涉及大多数编程教程和初学者书籍中未涉及的要点。
- 风格。“风格”是指您如何缩进代码行,以及如何选择变量和函数名称。选择一种风格并在整个程序中坚持使用它。特别是对于函数和变量,您应该确定何时使用大写字母、下划线以及何时将单词连接在一起。在所有地方都这样做可以更容易地避免拼写错误。
- 使用有意义的名称。函数、过程和变量应该具有有意义的名称。它们的用途应该很清楚。
- 编码前进行计划。在软件开发中,在编码之前有两个重要的步骤:需求分析和软件架构。第一步是确定程序预期执行的操作、预期输入、应生成的输出以及其环境的限制是什么。后者涉及确定程序的结构方式、使用哪些数据类型、使用哪些算法、输入如何进入程序以及如何确保其有效性以及如何格式化输出。使用这些步骤的简化版本将使编写体面的程序变得容易得多。如果您打算构建一个更复杂的机器人,您将需要投入更多时间来规划您的软件。首先写下所有软件需求。然后选择一些最关键的需求并对其进行细化。首先实现这些需求。在完成这些需求后(包括对其进行彻底测试),选择一组新的需求并对其进行细化和实现。通过分步进行,您可以避免一开始就必须写下所有内容(并做出许多假设),并能够利用通过编码部分内容获得的见解。
- 使用PDL(程序开发语言)PDL是一种编写函数的方法。它涉及用简单的英语写下函数的各个步骤,而不涉及特定于语言的内容,然后将这些步骤细化为更小的步骤,直到编写代码比进一步拆分步骤更容易。之后将PDL行保留为注释。
- 仿真和调试学习使用模拟器。在模拟器中查找错误比在硬件中更容易。还要学习使用调试器。它是您查找错误的最佳帮手。
- 如果您的软件在PC上运行,日志文件可能很有用。但是要谨慎选择软件记录的内容。如果您打算长时间运行软件,这些日志文件可能会变得非常庞大。如果您想记录一段时间内的传感器数据,请注意,可以通过在数据之间添加空格以分隔列,并在换行符之间添加换行符以分隔行,将这些数据导入Excel。参见 w:逗号分隔值。
- Khepera III 工具箱:一本维基教科书,其中包含有关如何编程特定机器人的详细信息
- Urbiforge:一个提供Urbiscript编程教程的网站