机器人创新教学中编程框架的建立

发表时间:2020/12/31   来源:《教学与研究》2020年26期   作者:王春
[导读] 本文介绍了机器人创新教学中,
        王春
        襄阳技师学院,湖北襄阳  441021
        【摘要】本文介绍了机器人创新教学中,在基于Basra的模块化移动机器人平台如何建立编程框架,包括编程的思想、条件的判断、循环的次数、有限状态机。
        【关键词】移动机器人  传感器   有限状态机
        
        机器人创新教学是高校创新实践的的经典项目,而基于Basra的模块化移动机器人平台拥有完善的教学体系和开放度极高的系统,其最大特点是能够很好的兼容市面上常见的机械零件、电子部件以及世界上通用的创客平台,可以做到学以致用、一通百通。学生在掌握平台的机械零部件、电子元器件的基本用法后,配合特定的机构,特定的电子模块以及特定的场景就可以开始编程了吗?并不是,而是要先建立编程的框架,编程框架,分下面几部分。
一、编程的思想
        在动手对完整的复杂的机器人编程之前,需要统一思路,以规避编程中的思维误区,编程时我们会遇到四个层次的语言,第一层人类语言,第二层机械语言,第三层电路语言,第四层程序语言。
        下面双轮小车平台前进为例进行解释








1、自然语言
        用自然语言表述就是小车前进,这样的语言机器人自然是听不懂的,机器人只能接受程序代码,那么前进如何用代码表示呢?完全没有头绪,从函数库也找不到哪个函数负责前进?但是通过观察发现,前进等于两个轮子的某种运动状态组合,于是我们可以进入机械语言阶段。
2、机械语言
        我们把观察的结果用机械语言表述为:
        前进=左轮逆时针转+右轮顺时针转(设车轮一侧为车头万向轮,一侧为车尾,从车尾向车头看,作为左右的参照)
        这比前面进了一步,但是还有些问题,因为轮子的这种运动还是没办法用代码表示,所以我们继续观察又发现:轮子是被电机带动才能转动的,于是我们可以进入电路语言阶段。
3、电路语言
        我们把轮子的转动情况转化为电机的转动情况,于是可以用电路语言进行翻译:前进=左侧直流端口的电机逆时针转+右侧直流端口的电机顺时针转。
在电路的语境中,我们很容易搞清楚左侧电流端口号及右侧电流端口号,Basra上就是D5/D6或D9/D10。
4、程序语言
再将电路语言翻译成程序语言,写成相应的代码就容易多了。
左侧直流端口的电机逆时针转,右侧直流端口的电机顺时针转
在Basra的环境下,可以写作









        学生可能会问你这么设置端口一定是对的吗?为什么不是(7,2)(8,1),5低6高?答案是:不一定对,我们永远逃不掉最后一个重要的步骤,那就是调试,不做调试,不下结论。但经过分析推理,离正确答案就很接近了。所以翻译到这一步,我们和机器人总算可以对话了。这四步翻译的作用可以表述为:第一层,自然语言——我们直观想法是什么?第二层,机械语言——机械运动的形式是什么?第三层,电路语言——电机是如何转动的?第四层,程序语言——如何实现编程?
        当我们尝试控制一个机器人,都要按照这个层次顺序完成,从自然语言到程序语言的转换,许多新手开始编程时,总是试图将自然语言直接转化为程序语言,结果发现根本无从下手,最重要的是前三层,只要推进到第二层,第四层参考几个例程就能解决,而前三层的翻译其实是很简单的。
        
二、条件判断
        条件判断就是IF或者IF…ELSE语句,多用于传感器触发条件比较简单,触发效率不需要太高的地方;或者判断串口数据的地方。比如说设计一个扫地机器人,编写清扫及避障程序
        机器人安装有三个传感器,左右两侧安装的是触须传感器,中间安装的是近红外传感器,驱动是左右两个轮子舵机,中间安装扫把轮子舵机,它的条件判断的思路是:
        扫地机器人在正常情况下,自主前进并扫地,但当安装左侧触须传感器,检测到障碍时机器人右转;安装在扫地机器人的右侧触须传感器,检测到障碍时机器人左转;近红外传感器在中间检测到障碍时,机器人后退。
        
三、循环次数
可以使用FOR循环控制机器人完成任务的次数或者控制机械手爪实现不同的抓取速率。

四、有限状态机
        有限状态机表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型,它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上判断事件。由于有限状态机有有限个状态,因此可以在实际中发现。有限状态机可以广泛的应用于机器人多个传感器触发组合状态的判断,大大提高了检测效率。
        之前我们了解过条件判断,机器人的传感器触发一般用条件做判断。这时机器人程序一般思路是:
        如果机器人的某几个传感器触发了机器人的某几个电机做什么事,做多久;
        如果机器人的另外几个传感器触发了,机器人的某几个电机做了什么事?做多久;
        所以我们总是要用到大量的IF语句,比如双轮小车的某个功能:
        如果机器人的一号传感器触发了,机器人的左侧电机顺时针转,机器人的右侧电机逆时针转持续五秒;
        如果机器人的二号传感器出发了,机器人的左侧电机逆时针转,机器人的右侧电机顺时针转持续五秒,否则,都不转。
        在只有一个传感器的情况下,假设这是个数字量传感器,那么可以得到一个状态表格,这个传感器有两个状态。而当有两个传感器时,则有四个状态。

        
      

        
        在编程时,状态罗列的越全,未来机器人的bug越少,但是随着传感器的增多,状态按2的n次方增加,大量的IF语句使执行效率变得很低,经常会出现识别不灵的情况,我们有必要换一种高效的写法,多个确定数量的传感器的触发组合,符合有限状态机的概念,有限状态机一般由SWITCH语句来实现,它是将每组传感器返回值看成一个二进制值,采用这种编码方式,只要知道序号,也就知道了传感的触发状态。
        
        只有建立了编程框架,才能高效、准确的进行机器人的编程,达到事半功倍的效果。
        
        
        
        
        
参考文献:
[1] 吕克·若兰. 移动机器人原理与设计 [M]. 机械工业出版社2018
[2] 邓三鹏. 移动机器人技术应用 [M]. 机械工业出版社2018

        
        
        
       
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: