说多了,感觉要跑题了。如果你有兴趣,并想了解更多关于编程机器人来处理未知的东西,推荐Ronald Arkin的《Behavior-Based Robotics》和Thomas Braun的《嵌入式机器人学:基于嵌入式系统的移动机器人设计和应用》。慎思式的机器人编程方法,从中级到高级的探讨,推荐Christopher A. Rouff等人的《Agent Technology from a Formal Perspective》。
一张图小结一下:
二、混合系统:实践的产物
没有万灵的结构,混合系统结合了SPA和反应体系的原理,将多种混合系统应用于在传感器和电机输出间进行协调来完成任务。混合结构相结合最具吸引力的好处可能是:系统按照有利于完成任务的标准进行设计,而非刻板的遵循某一教条。但再复杂的机构,基本上也都是二者的组合。以ROS的导航包为例:
图6 ROS导航包
导航包整体上是SPA结构,左右两侧是感知S,包括传感器数据/里程计/地图等,中间框图是Global和Local两级规划P,最后发送cmd_vel给行动A。
如果世界是完美的,那按照规划的地图行进到目的地就完事了。然而基于行为方法就是为了处理各种意外而生的。当机器人遇到障碍物或是被卡住的时候,内嵌的基于行为的系统就开始发挥作用。会根据情况,在“行为库”recovery_behaviors中调用某一预先设定的“行为”来摆脱困境。
图7 recovery_behaviors
默认的行为是:首先,清除机器人地图指定区域以外的障碍。接下来,如果可能的话,机器人将执行一个原地旋转清理空间。如果这也失败了,机器人将更激进地清理地图,清除一切可以原地旋转的矩形区域以外的障碍。这将是另一个就地旋转紧随其后。如果这些都失败了,机器人将认为其目标不可行,停止运行并通知用户。
当然,你还可以针对各种意外设计更为复杂的recovery_behaviors “行为库”以备调用。
三、安全自主机器人应用框架
现在还有一种基于场景和态势的设计框架SARAA,我觉得很有趣。安全自主机器人应用架构(SARAA,Safe Autonomous Robot Application Architecture, SARAA)是一种强调安全性的自主机器人的开发方法。
图8 SARAA
SARAA机器人总结
在《机器人编程实战》(2017年出版)书中,详细介绍了编程一个机器人自主执行其任务、构成了所谓SARAA的7项技术:
软件机器人框架
ROLL模型
REQUIRE
RSVP
SPACES
STORIES
PASS
我们称具有这种体系结构的机器人为SARAA机器人。当正确地实现时,这些编程技术产生一个基于知识的机器人控制器。因此,一个SARAA机器人是一个可以在预先设定的场景和态势中自主行动的知识型机器人。其中一个设计思想是根据场景和态势对前提/后置条件的判断以提高安全性。
感兴趣可访问Ctest实验室,SARAA已经用于在开源机器人平台内工作,例如Arduino、Linux和ROS。如果对编程SARAA机器人的场景和态势很好理解与恰当定义,则SARAA机器人的设计有助于提升机器人的安全性。