本发明涉及除螨机器人技术领域,具体涉及一种应用于床被除螨机器人的场景识别软件算法。
背景技术:
当前除螨机器人在场景识别、切换工作模式下有以下缺陷:不识别场景,不会区分当前工作环境是在被子里面还是被子外面;工作模式单一,在被子里面和被子外面采取相同的工作策略;主要靠码盘判定碰撞,停止运动一段时间后才会避障,不够灵活。
因此,有必要设计一种算法执行效率高,无需码盘的场景识别算法。
技术实现要素:
本发明的目的通过以下技术方案来实现:
本发明提出一种应用于床被除螨机器人的场景识别软件算法,具体包括如下步骤:
步骤1:开启床被除螨机器人;
步骤2:床被除螨机器人向前行走,控制模块每隔设定时间检测床被除螨机器人前端的碰撞传感器状态,若碰撞传感器向控制模块发送有障碍信号,则执行步骤3,否则执行步骤4;
步骤3:控制模块控制碰撞次数变量自增一,并重复步骤2;
步骤4:控制模块保存碰撞次数变量,并对碰撞次数变量进行判断,若碰撞次数变量>设定次数,则执行步骤5,否则执行步骤6;
步骤5:控制模块控制工作场景变量=1,碰撞次数变量清零,执行步骤7;
步骤6:控制模块控制工作场景变量=0,碰撞次数变量清零,执行步骤7;
步骤7:当工作场景变量为1时,控制模块调用内行走程序,否则调用外行走程序;
步骤8:控制模块判断是否关机,是则结束运行,否则返回步骤2。
优选的,所述内行走程序包括如下步骤:
步骤1:内行走程序接收指令开始运行;
步骤2:内行走程序每隔设定时间检测一次碰撞传感器数据,若前方有障碍,则执行步骤3,否则执行步骤5;
步骤3:内行走程序反馈至控制模块控制床被除螨机器人继续前进,碰撞次数变量自增,内行走程序实时对碰撞次数变量进行判断,若碰撞次数变量>设定次数,则执行步骤4,否则执行步骤5;
步骤4:内行走程序判断遇障,后退一段距离,转弯后执行步骤5;
步骤5:碰撞次数变量清零,床被除螨机器人沿当前方向直线行走;
步骤7:内行走程序判断控制模块是否发生关机信号,若是,则结束运行,否则返回步骤2。
优选的,所述外行走程序包括如下步骤:
步骤1:外行走程序接收指令开始运行;
步骤2:外行走程序每隔设定时间检测一次碰撞传感器数据,若检测到前方有障碍,则执行步骤3,否则执行步骤4;
步骤3:外行走程序反馈至控制模块控制床被除螨机器人后退,并根据碰撞传感器数据转弯后执行步骤4;
步骤4:床被除螨机器人沿当前方向直行;
步骤5:外行走程序判断控制模块是否发生关机信号,若是则结束运行,否则返回至步骤2。
优选的,控制模块默认初始工作场景变量为0。
优选的,所述设定时间为5~10ms,所述设定次数为280~320。
本发明提出的一种应用于床被除螨机器人的场景识别软件算法,具有以下有益效果:
(1)成本低,无需在机器人上添加码盘,只需要前端测距传感器即可运行;
(2)可以识别当前工作场景、从而切换工作策略;
(3)可以在被子内外切换不同工作模式,检测到在被子外时实行软碰撞避障功能;
(4)可以在被覆盖情况下运用传感器判断真正遇障情况。
附图说明
图1是本发明的算法调用流程图;
图2是本发明的内行走程序流程图;
图3是本发明的外行走程序流程图。
具体实施方式
下文将结合具体实施例对本发明的技术方案做更进一步的详细说明。下列实施例仅为示例性地说明和解释本发明,而不应被解释为对本发明保护范围的限制。凡基于本发明上述内容所实现的技术均涵盖在本发明旨在保护的范围内。
除非另有说明,以下实施例中使用的原料和试剂均为市售商品,或者可以通过已知方法制备。
该算法通过检测床被除螨机器人前方的碰撞传感器传来的数据判断是否有障碍,并根据连续检测到障碍的次数(300次)或时间(3s)来进行场景识别,从而完成根据当前环境切换对应工作模式的功能。
实施例1
本发明提出一种应用于床被除螨机器人的场景识别软件算法,具体包括如下步骤:
步骤1:开启床被除螨机器人,控制模块初始化工作场景变量workmode为0;
步骤2:床被除螨机器人向前行走,控制模块每隔10ms检测床被除螨机器人前端的碰撞传感器状态,若碰撞传感器向控制模块发送有障碍信号,则执行步骤3,否则执行步骤4;
步骤3:控制模块控制碰撞次数变量impctcount自增一,并重复步骤2;
步骤4:控制模块保存碰撞次数变量impctcount,并对碰撞次数变量impctcount进行判断,若碰撞次数变量impctcount>300,则执行步骤5,否则执行步骤6;
步骤5:控制模块控制工作场景变量workmode=1,碰撞次数变量impctcount清零,执行步骤7;
步骤6:控制模块控制工作场景变量workmode=0,碰撞次数变量impctcount清零,执行步骤7;
步骤7:当工作场景变量workmode为1时,控制模块调用内行走程序,否则调用外行走程序;
步骤8:控制模块判断是否关机,是则结束运行,否则返回步骤2。
所述内行走程序包括如下步骤:
步骤1:内行走程序接收指令开始运行;
步骤2:内行走程序每隔10ms检测一次碰撞传感器数据,若前方有障碍,则执行步骤3,否则执行步骤5;
步骤3:内行走程序反馈至控制模块控制床被除螨机器人继续前进,碰撞次数变量impctcount自增,内行走程序实时对碰撞次数变量impctcount进行判断,若碰撞次数变量impctcount>300,则执行步骤4,否则执行步骤5;
步骤4:内行走程序判断遇障,后退一段距离,转弯后执行步骤5;
步骤5:碰撞次数变量impctcount清零,床被除螨机器人沿当前方向直线行走;
步骤7:内行走程序判断控制模块是否发生关机信号,若是,则结束运行,否则返回步骤2。
所述外行走程序包括如下步骤:
步骤1:外行走程序接收指令开始运行;
步骤2:外行走程序每隔10ms检测一次碰撞传感器数据,若检测到前方有障碍,则执行步骤3,否则执行步骤4;
步骤3:外行走程序反馈至控制模块控制床被除螨机器人后退,并根据碰撞传感器数据转弯后执行步骤4;
步骤4:床被除螨机器人沿当前方向直行;
步骤5:外行走程序判断控制模块是否发生关机信号,若是则结束运行,否则返回至步骤2。
床被除螨机器人的工作场景包括外行走(在被子或床单上行走,需要床被除螨机器人保留软碰撞功能保证行走更加灵活智能,即当碰撞传感器检测到前方有障碍时,不碰撞到障碍的情况下就开始后退转弯进入避障姿态,这样可以避免床被除螨机器人和障碍碰撞)和内行走(在被子内行走,这种状态下,盖住机器的被子会被碰撞传感器检测到,但此时床被除螨机器人不需要后退避障而应该直接向前走,保证床被除螨机器人能在被子内行走,直到前方碰撞到真正的障碍导致床被除螨机器人不能向前时才后退进入避障姿态),因为在不同场景需要执行不同的工作策略,所以需要对当前场景进行识别判断。初始时,工作模式默认为在被子外面。因为床被除螨机器人在被子中行走时,位于床被除螨机器人前端的碰撞传感器会一直检测到障碍,所以当碰撞传感器读取到障碍时,控制模块开始对碰撞次数变量impctcount计数,直到碰撞传感器不再读取到障碍,计数完毕。
计数完毕后,判断连续检测到障碍的次数是否大于300(每隔10ms检测一次传感器,300次即连续3秒检测到障碍),若碰撞次数变量impctcount大于300,则将工作模式切换为在被子内行走且计数清零,若碰撞次数变量impctcount小于300,则当做被子外行走遇障进行障碍处理。
本实施例中,床被除螨机器人在被子内遇障判定:因为在被子内遇到碰撞传感器检测障碍时采取的策略是继续向前走,所以需要识别床被除螨机器人真正遇到障碍而不能向前的情况。
在被子中时,床被除螨机器人在碰撞传感器检测到障碍时会继续前进,所以当有障碍在床被除螨机器人前方致使床被除螨机器人一直抵在障碍上时,床被除螨机器人前方的碰撞传感器会一直检测到有障碍。因此检测到障碍不直接后退,而是碰撞次数变量impctcount开始计数,同时判断连续检测到障碍的次数是否大于300(每隔10ms检测一次传感器,300次即连续3秒检测到障碍),若碰撞次数变量impctcount大于300,则床被除螨机器人后退转向进入避障姿态。这样就可以避免床被除螨机器人被障碍挡住不能前行的情况。
实施例2
本发明提出一种应用于床被除螨机器人的场景识别软件算法,具体包括如下步骤:
步骤1:开启床被除螨机器人,控制模块初始化工作场景变量workmode为0;
步骤2:床被除螨机器人向前行走,控制模块每隔9ms检测床被除螨机器人前端的碰撞传感器状态,若碰撞传感器向控制模块发送有障碍信号,则执行步骤3,否则执行步骤4;
步骤3:控制模块控制碰撞次数变量impctcount自增一,并重复步骤2;
步骤4:控制模块保存碰撞次数变量impctcount,并对碰撞次数变量impctcount进行判断,若碰撞次数变量impctcount>280,则执行步骤5,否则执行步骤6;
步骤5:控制模块控制工作场景变量workmode=1,碰撞次数变量impctcount清零,执行步骤7;
步骤6:控制模块控制工作场景变量workmode=0,碰撞次数变量impctcount清零,执行步骤7;
步骤7:当工作场景变量workmode为1时,控制模块调用内行走程序,否则调用外行走程序;
步骤8:控制模块判断是否关机,是则结束运行,否则返回步骤2。
所述内行走程序包括如下步骤:
步骤1:内行走程序接收指令开始运行;
步骤2:内行走程序每隔9ms检测一次碰撞传感器数据,若前方有障碍,则执行步骤3,否则执行步骤5;
步骤3:内行走程序反馈至控制模块控制床被除螨机器人继续前进,碰撞次数变量impctcount自增,内行走程序实时对碰撞次数变量impctcount进行判断,若碰撞次数变量impctcount>280,则执行步骤4,否则执行步骤5;
步骤4:内行走程序判断遇障,后退一段距离,转弯后执行步骤5;
步骤5:碰撞次数变量impctcount清零,床被除螨机器人沿当前方向直线行走;
步骤7:内行走程序判断控制模块是否发生关机信号,若是,则结束运行,否则返回步骤2。
所述外行走程序包括如下步骤:
步骤1:外行走程序接收指令开始运行;
步骤2:外行走程序每隔9ms检测一次碰撞传感器数据,若检测到前方有障碍,则执行步骤3,否则执行步骤4;
步骤3:外行走程序反馈至控制模块控制床被除螨机器人后退,并根据碰撞传感器数据转弯后执行步骤4;
步骤4:床被除螨机器人沿当前方向直行;
步骤5:外行走程序判断控制模块是否发生关机信号,若是则结束运行,否则返回至步骤2。
实施例3
本发明提出一种应用于床被除螨机器人的场景识别软件算法,具体包括如下步骤:
步骤1:开启床被除螨机器人,控制模块初始化工作场景变量workmode为0;
步骤2:床被除螨机器人向前行走,控制模块每隔5ms检测床被除螨机器人前端的碰撞传感器状态,若碰撞传感器向控制模块发送有障碍信号,则执行步骤3,否则执行步骤4;
步骤3:控制模块控制碰撞次数变量impctcount自增一,并重复步骤2;
步骤4:控制模块保存碰撞次数变量impctcount,并对碰撞次数变量impctcount进行判断,若碰撞次数变量impctcount>320,则执行步骤5,否则执行步骤6;
步骤5:控制模块控制工作场景变量workmode=1,碰撞次数变量impctcount清零,执行步骤7;
步骤6:控制模块控制工作场景变量workmode=0,碰撞次数变量impctcount清零,执行步骤7;
步骤7:当工作场景变量workmode为1时,控制模块调用内行走程序,否则调用外行走程序;
步骤8:控制模块判断是否关机,是则结束运行,否则返回步骤2。
所述内行走程序包括如下步骤:
步骤1:内行走程序接收指令开始运行;
步骤2:内行走程序每隔5ms检测一次碰撞传感器数据,若前方有障碍,则执行步骤3,否则执行步骤5;
步骤3:内行走程序反馈至控制模块控制床被除螨机器人继续前进,碰撞次数变量impctcount自增,内行走程序实时对碰撞次数变量impctcount进行判断,若碰撞次数变量impctcount>320,则执行步骤4,否则执行步骤5;
步骤4:内行走程序判断遇障,后退一段距离,转弯后执行步骤5;
步骤5:碰撞次数变量impctcount清零,床被除螨机器人沿当前方向直线行走;
步骤7:内行走程序判断控制模块是否发生关机信号,若是,则结束运行,否则返回步骤2。
所述外行走程序包括如下步骤:
步骤1:外行走程序接收指令开始运行;
步骤2:外行走程序每隔5ms检测一次碰撞传感器数据,若检测到前方有障碍,则执行步骤3,否则执行步骤4;
步骤3:外行走程序反馈至控制模块控制床被除螨机器人后退,并根据碰撞传感器数据转弯后执行步骤4;
步骤4:床被除螨机器人沿当前方向直行;
步骤5:外行走程序判断控制模块是否发生关机信号,若是则结束运行,否则返回至步骤2。
相关变量的定义:
workmode工作模式
impactcount碰撞次数
impactperiod碰撞判定值
modetransperiod模式切换判定值
api的设计:
get_touch获取传感器数据方法:
输入:
输出传入传感器方向是否检测到障碍,0:无障碍,1:有障碍。
dropdeal对碰撞进行处理:
输入:无
输出:无
adjust调整姿态进行避障:
输入:
输出:动作状态,0:完成1:未完成。
back机器后退:
输入:无
输出:动作状态,0:完成1:未完成。
turn机器转向:
输入:
输出:动作状态,0:完成1:未完成。
以上所述,仅为本发明较佳的具体实施方式。但是,本发明不限定于上述实施方式。凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。