Galactic到Humble [待校准@899]

从ROS2 Galactic到Humble,稳定性改进添加我们不会具体地址。 [待校准@900]

Smac规划器的主要改进 [待校准@901]

在2D和混合-A*的实施中,Smac规划器得到了显著改进,使得路径更好、更快、质量更高。 [待校准@902]

  • 碰撞检查拒绝碰撞更快查询costmap坐标少 [待校准@903]

  • 零拷贝冲突检查对象 [待校准@904]

  • 预计算碰撞检查足迹方向所以不需要trig在运行 [待校准@905]

  • 仅当机器人处于可能的内切区域时才检查完整的SE2足迹 [待校准@906]

  • 计算可能的内切区域,或部分足迹可能与边界碰撞的成本,以检查全部足迹。否则,检查中心成本,因为承诺不会处于潜在的碰撞状态 [待校准@907]

  • 将混合-A*planner重命名为Smac规划器混合 [待校准@908]

  • 预计算的Reedshepp和杜宾路径脱机所以在运行只是查找表 [待校准@909]

  • Replacing the wavefront heuristic with a new, and novel, heuristic dubbed the obstacle heuristic. This computes a Dijkstra's path using Differential A* search taking into account the 8 connected space, as well as weights for the cost at the positions to guide the heuristic into the center of aisle ways. It also downsamples the costmap such that it can reduce the number of expansions by 75% and have a very small error introduced into the heuristic by being off by at most a partial fraction of a single cell distance

  • 改进解析展开算法可能性循环的路径,尽可能去除 [待校准@911]

  • 改进分析扩展以提供最大路径长度以防止靠近障碍物的踢脚线 [待校准@912]

  • 2DA*旅行成本和启发式改进,以加快计划时间并显著提高路径质量 [待校准@913]

  • 用定制的梯度下降实现取代了平滑器 [待校准@914]

  • 摘要共同事业planners成utils文件 [待校准@915]

  • 调整成本函数 [待校准@916]

  • 预计算障碍启发式动态规划扩大最少节点数 [待校准@917]

  • 缓存启发式设置启用25hz规划速率缓存障碍启发式值目标保持不变 [待校准@918]

  • 利用dubin和芦苇绵羊空间的对称性将缓存大小减少50%,以增加可用于启发式查找的窗口大小。 [待校准@919]

  • 所有定向箱的预计算原语 [待校准@920]

  • Smac规划器2D参数现在可重构 [待校准@921]

  • 混合A*和状态栅格规划现在都完全可以接受 [待校准@922]

  • 混合-A*和状态晶格对路径平滑进行了参数化读取。 [待校准@923]

  • 平滑器现在启用了运动学上可行的边界条件。 [待校准@924]

  • State Lattice supports turning in place primitive types [待校准@925]

  • Retrospective penalty added to speed up the planner, making it prioritize later search branches before earlier ones, which have negligible chance to improve path in vast majority of situations

这些改进的是: [待校准@926]
  • 计划2-3x尽快以前,200ms几乎所有情况,尽快NavFn和全球规划器 (但现在运动学可行)。典型规划时间sub-100ms甚至没有利用缓存或采样功能。 [待校准@927]

  • 通过改进的平滑和一种将机器人隐式地引导到过道中心的新颖的启发式方法,路径的质量明显更高。这使得尽可能远离障碍的道路更加平滑。 [待校准@928]

  • 使用缓存或downsampler参数化,可以轻松实现路径规划sub-50ms几乎任何大小的空间。 [待校准@929]

  • 平滑现在能够多做改进可以创建运动学可行边界条件,甚至逆转。 [待校准@930]

做了额外的改进,包括一个 analytic_expansion_max_length 参数,这样分析扩展的潜在长度是有限的。如果长度太远,则拒绝此扩展。这防止了不安全的捷径进入远离目标本身的高成本区域,让搜索在分析扩展将其带回家之前接近的工作。这绝不应该小于使用的最小转弯半径的4-5倍,否则计划时间将开始增加。 [待校准@931]

此外,如果您有先前存在的配置,则遍历成本和启发式成本计算已更新,需要重新调整惩罚函数。算法的默认值也被适当地重新调整为与以前相似的盒子行为的变化 (作为参考)。 [待校准@932]

简单 (Python) 控制命令 [待校准@933]

这个 This PR 介绍新包Nav2,称为 nav2_simple_commander 。它是一套功能对象, BasicNavigator ,可用于构建Nav2供电自治任务Python3不含关于自己Nav2,ROS 2,或Action服务器细节。它包含一个简单API以普通类型 (主要 PoseStamped ) 和处理所有实现细节后面的引擎盖。例如,这是一个简易导航任务使用此API: [待校准@934]

def main():
    rclpy.init()
    navigator = BasicNavigator()

    # Set our demo's initial pose
    initial_pose = PoseStamped()
    ... populate pose ...
    navigator.setInitialPose(initial_pose)

    # Wait for navigation to fully activate
    navigator.waitUntilNav2Active()

    # Go to our demos first goal pose
    goal_pose = PoseStamped()
    ... populate pose ...
    navigator.goToPose(goal_pose)

    while not navigator.isNavComplete():
        feedback = navigator.getFeedback()
        ... do something with feedback ...

        # Basic navigation timeout
        if Duration.from_msg(feedback.navigation_time) > Duration(seconds=600.0):
            navigator.cancelNav()

    result = navigator.getResult()
    if result == NavigationResult.SUCCEEDED:
        print('Goal succeeded!')
    elif result == NavigationResult.CANCELED:
        print('Goal was canceled!')
    elif result == NavigationResult.FAILED:
        print('Goal failed!')

这个 The full API can be found in the README of the package 。在之前的链接中,也可以在包的源代码中找到许多注释良好的示例和演示。 [待校准@935]

减少节点和执行程序 [待校准@936]

为了nav2充分利用ROS 2,我们需要减少节点执行者在nav2,可以提高性能。 [待校准@937]

这个功能已经在 the ticket #816 中讨论过了,并且在 [待校准@938]

延长BtServiceNode处理服务结果 [待校准@945]

这个 PR addresses this Ticket ,并增加了一个虚拟的 on_completion() 功能到 BtServiceNode 类 ( here )。与已经存在的虚拟 on_wait_for_result() 函数类似,它可以在子类中被覆盖,以便通过一些用户定义的操作对相应的事件做出反应。添加的 on_completion() 功能将在 BtServiceNode 的服务交互成功完成后调用。 [待校准@946]

/**
* @brief Function to perform some user-defined operation upon successful
* completion of the service. Could put a value on the blackboard.
* @return BT::NodeStatus Returns SUCCESS by default, user may override to return another value
*/
virtual BT::NodeStatus on_completion()
{
  return BT::NodeStatus::SUCCESS;
}

返回的 “BT:: nodestatus” 将设置BT节点的当前状态。由于函数可以访问服务的结果,因此返回的节点状态可以依赖于这些服务结果,例如。 BtServiceNode 的正常行为不受引入 on_completion() 功能的影响,因为如果服务交互成功完成,默认实现仍然简单地返回 “bt::NodeStatus:: success”。 [待校准@947]

包括新旋转垫片控制器插件 [待校准@948]

这个 PR 介绍新 nav2_rotation_shim_controller 。该控制器将检查粗糙标题差别关于机器人和新收到路径。如果内门槛,将请求传递到主控制器执行。如果是外面的门槛,控制器将旋转机器人的路径标题。一旦它在公差范围内,它就会将控制执行从这个旋转垫片控制器传递到主控制器插件上。此时,机器人仍然是旋转,允许电流插件采取控制平滑切换到路径跟踪。 [待校准@949]

旋转垫片控制器适用于: [待校准@950]

  • 可以就地旋转的机器人,如差分和全向机器人。 [待校准@951]

  • 当开始跟踪一条与机器人当前航向明显不同的新路径时,优先选择就地旋转而不是'spiral out'。 [待校准@952]

  • 使用非运动学上可行的planner,如NavFn、Theta *,或Smac 2D (可行planner等Smac Hybrid-A*和点阵将启动搜索机器人的实际启动标题,无需旋转)。 [待校准@953]

在Gazebo产生机器人 [待校准@954]

这个 PR 删除pkg nav2_gazebo_spawner 内nav2_bringup目录。而不是 nav2_gazebo_spawner 节点 spawn_entity.pygazebo_ros 是推荐产卵机器人凉亭。请注意 [待校准@955]

  • gazebo启动时要保证 libgazebo_ros_init.solibgazebo_ros_factory.so 工作正确。 [待校准@956]

  • spawn_entity节点无法在启动文件中将/tf和/tf_static重新映射为tf和tf_static,仅用于多机器人情况。通过添加重新映射参数 “<重新映射>/tf:= tf</重新映射> `` `` <重新映射>/tf_static,解决了此问题: 在SDF文件中发布转换的每个插件的ros2标签下 = tf_static</remap>''。区分不同机器人的tf至关重要。 [待校准@957]

恢复行为超时 [待校准@958]

Nav2中的恢复,旋转和备份,现在有 time_allowance 端口在BT节点请求字段行动指定超时。这有助于确保机器人在被卡住或无法在合理的时间段内备份全部距离的情况下,能够退出备份或旋转的原始行为。 [待校准@959]

新参数 use_final_approach_orientation 3 2D规划器 [待校准@960]

这个 ` PR <https://github.com/ros-planning/navigation2/pull/2488>`_ 添加新参数 use_final_approach_orientation 3 2Dplanners (θ *,Smac规划器2D和NavFn), false 默认。如果 true ,pose的路径生成planner将方向设置为方法取向,即方向矢量连接最后两点的路径。它允许发送机器人位置 (x,y) 而不是姿势 (x,y,θ) 有效忽略目标取向。例如,下面,同一目标的取向指出左屏幕, use_final_approach_orientation=false (左) 和 use_final_approach_orientation=true (右) [待校准@961]

../_images/use_final_approach_orientation_false.gif ../_images/use_final_approach_orientation_true.gif

Smac规划器2D和Theta*: 修复被忽略的目标方向 [待校准@962]

忽略目标姿态方向的 This PR fixes the issue (最终路径姿态方向始终设置为0)。 [待校准@963]

SmacPlanner2D、NavFn和Theta*: 修复小路径角案例 [待校准@964]

这个 PR 确保planners不失败时距离启动目标小 (即。当它们在同一个costmap单元格上时),在这种情况下,输出路径由单个姿态构造。 [待校准@965]

动态参数变更检测的变更与修复行为 [待校准@966]

https://github.com/ros-planning/navigation2/pull/2576 and this PR 修改方法抓变化动态参数。动机是解决问题 ''void on_parameter_event_callback(const rcl_interfaces: 味精: ParameterEvent: SharedPtr事件) ”呼吁各参数变化每节点导致有害参数变化如果2不同节点的参数名称。 [校准@小鱼]

动态参数 [待校准@968]

新增动态参数: [待校准@969]

BTAction节点异常更改 [待校准@974]

当BT操作节点由于网络或操作服务器故障而引发异常时,它们现在返回 FAILURE 的状态代码,以使行为树中的特定操作失败以做出反应。这与从网络引发的异常发送到根树的先验相反,根树将被视为任务级故障,树无法对此做出反应。 [待校准@975]

BT Navigator Groot多重导航器 [待校准@976]

这个 PR 为NavToPose和navvia poses导航器类型的groot监视创建单独的参数,以便您可以通过ZMQ发布者单独跟踪每个行为树的状态。在我们向BT navigator添加了多个导航器类型之后,这解决了一个长期存在的问题,即您只能查看nav来实时执行BT。BT。CPP和Groot一次只支持一个静态ZMQ流,因此,有一个奇怪的地方,你必须在切换树后本地重置Groot,以便通过BT姿势查看导航的实时流 (如果使用的话)。这是BT.CPP和Groot库的状态,不是我们可以在Nav2中解决的问题。 [待校准@977]

由于这个怪癖和几乎可以肯定的关于该主题的门票输入,对于使用Groot的实时BT监控的完全弃用,未来有一些想法。然而,Groot将始终支持可视化行为树XML文件和修改,而不支持在机器人导航期间实时可视化BT执行。 [待校准@978]

删除运动学限制RPP [待校准@979]

参数 max_linear_accelmax_linear_decel 与引起不稳定性的控制器中的运动限制一起被移除。相反,如果您想要类似的行为,请使用ROS生态系统中可用的速度平滑器。 [待校准@980]

删除使用方法速度缩放参数在RPP [待校准@981]

参数 use_approach_linear_velocity_scaling 删除赞成总是帮助光滑过渡目标。 这个 PR 实现。 [待校准@982]

将AMCL运动模型重构为插件 [待校准@983]

这个 PR 为AMCL目前使用的不同运动模型创建插件。此功能使用户能够使用任何自定义运动模型,方法是将其创建为插件,并将robot_model_type参数更改为nav2_params.yaml文件中插件的名称。这有助于使用自定义运动模型,而无需修改AMCL源代码。 [校准@小鱼]

放弃对Nav2实时Groot监控的支持 [待校准@985]

这是一个很棒的功能创意,但从未完全实现,尤其是在我们在BT navigator服务器中引入了多种Navigator类型之后。我们主要遇到的问题是,零MQ阻止用户在同一进程中生成多个记录器类型。由于英国电信导航系统有多个服务器,它们之间的交换以供查看,从来没有一个干净的切换,导致人们提交票证,或者出现讨厌的日志,或者ZMQ在后台崩溃。BT.CPP客户端这't allow us to have a clean shutdown process so we'重新留下希望ZMQ正确处理情况,很少。此外,Groot一次仅支持可视化一种类型的树,因此对于经常在导航器类型之间切换的应用程序,不可能使用单个groot客户端,这导致了极大的挫败感。 [待校准@987]

所以,我提出这是删除活监测BT从Nav2。** 我们仍然可以使用格鲁特修改、可视化和一般工作行为树 **,唯一正在删除生活查看执行行为树Nav2目前执行 (用来照亮盒子当前节点)。这令人怀疑阀门总之,因为树蜱所以快速难以可视化得到有意义见解事情系统移动很快。 [待校准@988]

Replanning Only if Path is Invalid

This PR creates two new condition BT node to facilitate replanning only if path becomes invalid rather than constantly replanning. These new nodes were integrated into the default BT.

Fix CostmapLayer clearArea invert param logic [待校准@989]

这个PR fixes the invert paramlogic of the CostmapLayer clearArea fonction. Hence correcting the behavior of the clearAroundRobot and clearExceptRegion services and their corresponding BT actions. [校准@小鱼]

Dynamic Composition [待校准@991]

This PR provides a optional bringup based on ROS2 dynamic composition for users. It can be used to compose all Nav2 nodes in a single process instead of launching these nodes separately, which is useful for embedded systems users that need to make optimizations due to harsh resource constraints. it's used by default, but can be disabled by using the launch argument use_composition:=False. [待校准@992]

Some experiments to show performance improvement of dynamic composition, and the cpu and memory are captured by psutil : [待校准@993]

CPU: Intel(R) i7-8700 (6Cores 12Threads), Memory: 32GB [待校准@994]

cpu(%) [待校准@995]

memory(%) [待校准@996]

normal multiple processes [待校准@997]

44 [待校准@998]

0.76 [待校准@999]

dynamic composition (use component_container_isolated) [待校准@1000]

38 [待校准@1001]

0.23 [待校准@1002]

The way of dynamic composition consumes lower memory(saves ~70%), and lower cpu (saves ~13%) than normal multiple processes. [待校准@1003]

BT Cancel Node

This PR caters the users with an abstract node to develop cancel behaviors for different servers present in the Nav2 stack such as the controller_server, recovery_server and so on. As a start, this PR also provides the CancelControl behavior to cancel the goal given to the controller_server.