在了解了光轴编码器的工作原理和安装方法后,现在将它安装在已经搭建好的抓手机器人上,开始了解对它的编程控制。在开始编程之前,要对光轴编码器的传感器端口进行配置,如下图所示。配置方法可以借鉴电动机配置过程。由于所有程序在开始编写之前都需要对电动机和传感器进行配置,为了避免内容重复,后面可能会省略部分配置过程。
为了熟悉光轴编码器的编程控制,下面先来练习一个使用光轴编码器控制抓手机器人左侧轮胎旋转1800°的程序。在给抓手机器人下载该程序之前,假设已经在抓手机器人左右轮胎的轴上安装了光轴编码器,并将两个光轴编码器的杜邦线分别接在控制器数字端口的1,2和10,11。实例程序如下图所示。
机器人在执行程序之前将等待2000ms;
将右光轴编码器的读数重置为0;
将左光轴编码器的读数重置为0;
利用while循环控制前进距离,并将该循环条件设置为读取左光轴编码器的数值小于1800°;
将63赋值给左电动机作为左电动机功率;
}
(1)在该程序中,“Sensor Value[传感器名称]”命令是读取所有VEX机器人传感器的数值命令。
(2)在使用轴角编码器之前,将编码器清零很重要。如果编码器的值大于零,则机器人行进的距离将小于正确的距离;如果编码器的值小于零,则机器人行进的距离将大于正确的距离。清零编码器可以提高机器人动作的一致性和精度。
(3)while是一个循环命令,用于控制程序结构。它负责让其内部,即花括号内的循环体反复执行,直到不满足while后圆括号内的条件。当条件不满足时,程序会跳出while循环,继续执行后面的程序。在每次开始while循环之前,总是先检查条件是否满足,所以有时候会出现while下面花括号内的循环体一次也不执行的情况。下表是对while循环命令的解释和对使用规则的具体说明。
注:关于数据类型请阅读知识拓展部分。
在大部分情况下,机器人会因为一些环境条件或自身结构问题而导致走斜。根据之前的思路,可以使用光轴编码器对机器人进行自动矫直,这里就以抓手机器人为例来进行程序矫直。假设已经按照之前配置传感器和电动机的方式分别配置好了它们。需要注意的是,所有用到电动机和传感器的程序都需要根据连接的端口进行配置,后面将不再赘述该内容。抓手机器人自动矫直示例程序如下图所示。
将右光轴编码器的读数重置为0;
将左光轴编码器的读数重置为0;
利用while循环控制前进距离,并将该循环条件设置为读取左光轴编码器的数值小于1260°;
利用if命令做条件判断,条件为左光轴编码器的读数大于右光轴编码器的读数;(www.daowen.com)
将63赋值给右电动机作为右电动机功率;
将50赋值给左电动机作为左电动机功率;
再次利用if命令做条件判断,条件为左光轴编码器的读数小于右光轴编码器的读数;
将50赋值给右电动机作为右电动机功率;
将63赋值给左电动机作为左电动机功率;
第三次利用if命令做条件判断,条件为左光轴编码器的读数等于右光轴编码器的读数;
将63赋值给右电动机作为右电动机功率;
将63赋值给左电动机作为左电动机功率;
}
该程序中的if是另一个程序流程控制命令,它通常用来根据后面圆括号内的条件做判断,然后选择执行下面的语句。与while不同的是,它最多执行一次语句,而while则可以反复多次执行里面的语句。常见的if命令有三种表达结构,下面将给出每种结构的用法:第一种,if(条件){语句};第二种,if(条件){语句}else{语句};第三种,if(条件){语句}elseif(条件){语句}else{语句}。第一种用法相当于第二种用法的简化,第二种用法也是最常见的一种。第三种用法相当于第二种用法的变化应用,相当于做完一次判断,再做更进一步的判断。下表就第二种用法做结构说明。
在上面的示例程序中,利用if做了三次判断,来确定到底发生了哪种情况,然后根据相应的情况分别执行不同的语句。
由于上面的示例程序中包含多个表示功率的数字,当需要修改功率时,需要修改每个数字,这样做很不方便。好在编程语言提供了一种叫作定义变量的处理方法。变量是程序中数据的临时存放场所,在代码中可以使用一个变量,也可以使用多个变量,变量中可以存放数值、单词、日期及属性。经过定义变量处理后的示例程序如下图所示。
在该程序中定义了两个整型变量,即normalspeed(正常速度)和slowspeed(慢速),并给它们分别赋予了一个初值,这样就方便多了。
(1)这里的int表示定义的变量是整数类型。整型和前面提到的布尔类型都属于数据类型的一种。
(2)编程语言中的变量一般分两类:一类为全局变量;另一类为局部变量。使用一个变量需要有三个主要步骤:①引入(创建)一个变量;②给该变量设定一个数值(赋值);③使用该变量获取存储的数值。变量名称规则:变量名称中不能含有空格;变量名称中不能含有符号;变量名称不能以数字开始;变量名称不能与已有的保留词相同。如果想了解更多的变量知识,请自行查阅其他书籍。
在编程时,当出现大段的重复代码时,往往会将该段代码定义为一个函数,相当于将该段代码变成一个加工厂,只关心该段代码需要输入什么和最终输出什么,而不再关心中间的运行过程,这样大大增加了程序的适用范围,缩短了主函数(task main()里面的部分)的长度,在主函数中也可以对该定义函数进行多次调用,这样就使得程序更简洁明了。函数一般分为无参函数和带参函数,下面分别给出将上面的程序用函数处理后的两种示例代码,如下图所示。
现在就可以下载程序到抓手机器人了,然后根据实际环境来调试机器人。调试的时候,可以通过Robot下的Debugger Windows窗口去选择打开传感器(Sensor)来实时观察光轴编码器的读数。调试时记得将抓手机器人轮胎悬空。当然,也可以去完成虚拟世界中的Driving Straight I和Driving Straight Ⅱ来检验自己的学习情况。这两个挑战都要求机器人不要碰到障碍物,从一端移动到另一端。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。