本节会讨论可以基于你机器和环境的一个不同的算法
Planner and Controller Servers¶
导航算法在Nav2中通过使用运行在ROS action servers 的插件来实现—— the planner, controller and recovery servers(等等)。在本节中,我们将讨论Planner和Controller Servers,它们是navigation的核心。这些servers可以实现一个或多个算法插件,每个插件都有自己的配置,为特定的动作或机器人状态定制。本指南将重点介绍基于机器人类型和机器人部署环境的不同算法。本指南将不包括recoveries,smoothers等,因为这些依赖于应用,而不是硬件/环境提供一般的建议。
planner server 用于计算机器人的路径。比如,一个插件可能在计算两个点之间的最短路径,而另一个插件可以计算到覆盖整个机器人环境的位置的路径。
controller server 可以完成局部的控制,在完成全局路径的情况下,避障,甚至充电等
因此上述两个planner 和 controller servers 配置了不同的插件,不同的插件处理不同的任务。
可以看 Navigation Servers ,查看更多细节
Selecting the Algorithm Plugins¶
本节讨论Planner 和 Controller Servers的各种算法插件,讨论算法插件的目的,以及适配的机器人类型。最后我们对每一个server的插件都给出了配置案例
插件可以自己写一个,详见 Writing a New Planner Plugin 和 Writing a New Controller Plugin. 目前可以使用的插件详情可见Navigation Plugins Section.
Planner Server¶
planner server 的插件算法利用传感器感知到的环境查找路径。planner server 的插件可能会利用网格空间(grid space)进行查找,例如 NavFn Planner
, Smac Planner 2D
, 和 Theta Star Planner
.
- NavFn Planner: A*或者Dijkstra的导航算法
- Smac 2D planner :2D A*导航算法
- Theta Star planner :Theta* 导航算法
在使用网格空间的算法时,您可能会遇到一个问题,即不能保证为任何类型的机器人生成可驾驶的路径。例如,由于NavFn Planner使用机器人的圆形足迹(通过近似机器人的最大横截面半径),并检查每个成本地图网格单元的碰撞,因此不能保证在狭窄的空间中为非圆形机器人规划可行路径。
此外,这些算法也不适合阿克曼和有腿机器人,因为它们有转向约束。也就是说,这些插件最适合用于那些可以朝任何方向行驶或原地安全旋转的机器人,比如圆形差速的机器人和圆形的全向机器人。
其他的的planner算法,如Smac Hybrid-A* planner 就可以支持任何形状的阿克曼结构或者有腿的机器人,它是一个高度优化和完全可重构的Hybrid-A*实现,支持Dubin和Reeds-Shepp运动模型。
该算法扩展了机器人的候选路径,同时考虑了机器人的最小转弯半径约束和机器人的全避碰足迹。因此,这个插件适用于任意形状的机器人,需要全足迹碰撞检查。它也可用于高速机器人,必须小心导航,以避免在高速下翻车、打滑或倾倒负载。
还有基于State Lattice planner 的 Smac Lattice planner
插件。该插件通过扩展机器人状态空间,同时确保路径符合机器人的运动学约束来实现功能。该算法提供了最小的控制集,允许它支持差速、全向和阿克曼车辆的任何形状和大小的最小重新配置。
Summary¶
Plugin Name | Supported Robot Types |
---|---|
NavFn Planner | Circular Differential, Circular Omnidirectional |
Smac Planner 2D | Circular Differential, Circular Omnidirectional |
Theta Star Planner | Circular Differential, Circular Omnidirectional |
Smac Hybrid-A* Planner | Non-circular or Circular Ackermann, Non-circular or Circular Legged |
Smac Lattice Planner | Non-circular Differential, Non-circular Omnidirectional |
Example Configuration¶
1 | planner_server: |
上面给了一个插件的配置案例,planner_plugins 接受一个list,list中是给插件起的名字,这里就是GridBased,对每一个planner_plugins,我们都需要在指定plugin的类型。详情看 Configuration Guide
Controller Server
默认的控制器是DWB controller.
它实现了一个改进的动态窗口方法(DWA)算法与可配置的插件来计算机器人的控制命令。这个控制器利用了Trajectory Generator plugin
来生成多种可能的轨迹,然后由一个或多个Critic plugins
进行评估,每个插件可能会根据它们的配置情况给出不同的分数。他们分数的合就是这条轨迹的分数,分数最高的这条轨迹将会决定速度的指令。DWB控制器可用于圆形或非圆形差速机器人,圆形或非圆形全向机器人。在配置 Trajectory Generation plugin
的情况下,它也可以配置为阿克曼和有腿的机器人。此插件会考虑机器人的最小曲率约束。
另外一个控制器: TEB controller ,
它是MPC时间最优控制器。根据机器人的运动学约束条件,根据机器人的执行时间、距离障碍物的距离以及机器人的可行性,实现了基于时间弹性带(Timed Elastic Band, TEB)算法的机器人轨迹优化。该控制器可用于差速、全向、阿克曼和有腿的机器人。
最后一个例子:Regulated Pure Pursuit controller (RPP) .
该控制器实现了Pure Pursuit算法的变体,并添加了规则启发式函数来管理碰撞和速度约束。这种变化是针对服务或工业机器人的需要而实施的,适用于差动、阿克曼和有腿的机器人。
Summary¶
Plugin Name | Supported Robot Types | Task |
---|---|---|
DWB controller | Differential, Omnidirectional | Dynamic obstacle avoidance |
TEB Controller | Differential, Omnidirectional, Ackermann, Legged | Dynamic obstacle avoidance |
RPP controller | Differential, Ackermann, Legged | Exact path following |
他们全都可以适用于圆形和非圆形的机器人
Example Configuration¶
1 | planner_server: |
和上面那个配置一样。详情见Configuration Guide
Planner Server和Controller Server,以及Nav2的其他的服务,是通过生命周期节点在ROS 2中启动。生命周期节点允许更容易地启动和关闭服务器。生命周期节点管理将在下一篇教程中讨论。
Conclusion
每一个server都又一些算法插件来只支持
以上讨论了上面算法适配什么机器人,对部分插件的配置做了简单的案例展示。