ROS项目中运用到哪些设计模式作为机器人软件开发及算法设计人员需要了解哪些设计模式

我在专栏(无人机软件架构知多少)介绍了四种用于移动机器人的架构:Garlan 和 Shaw 列出了移动机器人的基本设计需求,如:(1)慎思规划和反应式行为;(2)容许不确定性;(3)考虑危险;(4)灵活性强。针对这些要求,他们评估了四种 用于移动机器人的架构,包括控制回路(control loop)、分层(layers)、隐式调用(implicit invocation)、黑板(blackboard),如图 1 所示。闭环控制解决方案推荐用于不处理复杂外部事件的简单机器人系统。分层构架能很好实现构件的组织,但是在实时环境中处理外部事件时其反应过慢。第三个 解决方案隐式调用围绕事件处理实现,用于任务控制架构(TCA)。
  推荐 TCA 用于较复杂的机器人项目,并已在众多移动机器人上得到应用。TCA 为性能、容 错、安全性和并发性提供了一套完整的任务协调机制和规定。TCA 架构由位于同一层次的任务或任务树组成。在运行过程中任务树会作很多动态调整以适应环境条件和机器人状态的改变。第四种解决方案黑板构架由一个中心黑板或 数据库构成,负责接收和发送命令、共享数据和解决冲突。它支持并发性且有异常处理程序来处理不确定性。
ROS项目中运用到哪些设计模式作为机器人软件开发及算法设计人员需要了解哪些设计模式

图1 移动机器人架构类型
对号入座的话,ROS的topic机制应属于4黑板机制。另外在专栏(机器人软件架构》介绍了SPA、基于行为、混合式。以ROS的导航包为例:ROS项目中运用到哪些设计模式作为机器人软件开发及算法设计人员需要了解哪些设计模式

【ROS项目中运用到哪些设计模式作为机器人软件开发及算法设计人员需要了解哪些设计模式】 图6 ROS导航包
导航包整体上是SPA结构,左右两侧是感知S,包括传感器数据/里程计/地图等,中间框图是Global和Local两级规划P,最后发送cmd_vel给行动A。
如果世界是完美的,那按照规划的地图行进到目的地就完事了。然而基于行为方法就是为了处理各种意外而生的。当机器人遇到障碍物或是被卡住的时候,内嵌的基于行为的系统就开始发挥作用。会根据情况,在“行为库”recovery_behaviors中调用某一预先设定的“行为”来摆脱困境。
ROS项目中运用到哪些设计模式作为机器人软件开发及算法设计人员需要了解哪些设计模式

图7 recovery_behaviors
默认的行为是:首先,清除机器人地图指定区域以外的障碍。接下来,如果可能的话,机器人将执行一个原地旋转清理空间。如果这也失败了,机器人将更激进地清理地图,清除一切可以原地旋转的矩形区域以外的障碍。这将是另一个就地旋转紧随其后。如果这些都失败了,机器人将认为其目标不可行,停止运行并通知用户。
当然,你还可以针对各种意外设计更为复杂的recovery_behaviors “行为库”以备调用。


    推荐阅读