现在我们已经对事件的使用以及判断有了些认识,只是之前的事件都被定义为Robolab 的标准事件,而事件本身应该包含 7 个事件特征,在标准事件中对于一些高级参数无需我们进行设定。然而,对于需要使用复杂的传感器信息的时候,标准事件的局限性就显现出来了。
比如在 Robocup 竞赛中,对于营救项目中的绿色遇难者,机器人应该做出准确的识别,我们知道绿色的反射光强度应该是介于黑色和白色之间,在定义事件的时候无论是用 还是 都不能概括光值落在黑色与白色之间的情况;此外,当机器人的光线传感器从白色场地扫过黑色寻迹线时,会有瞬间的数值同样落在黑色与白色之间,而这对于绿色遇难者的判别无疑是一个干扰信号,对于这种干扰,标准事件图标也没有相应的参数给与控制。
为此我们必须要了解高级事件的一些特性,对于高级事件通常有 7 个参数:
1.事件类型——指明事件是低值触发、高值触发还是中值触发,相应的图标如下:
2.事件参数——指明定义为哪一个事件,红、蓝、黄或者白色事件
3.事件源——指明事件监控的传感器端口的数值、容器的值或者定时器的数值
4.上阈值——事件触发的取值上限
5.下阈值——事件触发的取值下限
6.滞后(h)——事件监控时为了防止输入信号的跳变引起的干扰,所设置的一个对于
上限值和下限值的缓冲区域,通过如下程序进行测试,
因为角度传感器的返回值易于控制,所以事先通过程序制定 1 号端口为角度传感器来进行实验
结果如下:对于高值和低值事件,①、③和⑤会触发;而对于中值事件,只有④会被触发。
6.持续时间(d)——事件触发之前,事件源必须维持在事件类型所定义的范围之内一定时间,该参数的单位为 1/100 秒。如果将 duration 参数设置为 100,则至少要 1 秒钟之后才会触发事件,这个参数对于 Robocup 比赛中识别绿色受难者时避免黑线带来的干扰时具有重大意义,只是遗憾的是很多 Robolab 的版本对于这个参数都存在Bug,当然也包括 Robolab2.9。
最后,我们来讨论一下事件的状态。Robolab 为事件执行的情况设置了事件状态容器 ,这个容器的数值由事件源和事件定义时的上阈值以及下阈值之间的关系确定。
程序范例:
在上面的实验程序中,对于中值事件,我希望知道在事件触发时,角度传感器到底是从高值下降至中值区还是从低值上升到中值区。
本站内容未经许可,禁止任何网站及个人进行转载。