teb_local_planner 功能包学习笔记

teb_local_planner软件包为2D导航堆栈的base_local_planner实现了一个插件。称为“定时弹性带”的基础方法可以在轨迹执行时间,与障碍物的分离以及在运行时遵守运动动力学约束的方面局部优化机器人的轨迹。

 

该软件包作为ROS导航软件包的插件,实现了用于移动机器人导航和控制的在线最佳本地轨迹规划器。由全局计划程序生成的初始轨迹在运行时进行了优化,从而最大程度地缩短了轨迹执行时间(时间最优目标), 与障碍物分离并遵守运动动力学约束,例如满足最大速度和加速度。

当前的实现符合非完整机器人(差速驱动和类似汽车的机器人)的运动学。自Kinetic以来,就提供了对完整机器人的支持。

通过解决稀疏的标量化多目标优化问题,可以有效地获得最优轨迹。用户可以为优化问题提供权重,以便在目标冲突的情况下指定行为。

 

 

话题

 

发表的话题

〜<名称> / global_plan(nav_msgs / Path

  • 本地计划者当前正在尝试的全局计划。主要用于可视化目的。

〜<名称> / local_plan(nav_msgs / Path

  • teb_local_planner优化并遵循的本地计划或轨迹。主要用于可视化目的。

〜<名称> / teb_poses(geometry_msgs / PoseArray

  • 当前本地计划的离散姿态列表(SE2)。主要用于可视化目的。

〜<名称> / teb_markers(visualization_msgs / Marker

  • teb_local_planner通过具有不同名称空间的标记来提供规划场景的其他信息。命名空间PointObstaclesPolyObstacles:可视化优化过程中当前考虑的所有点和多边形障碍。命名空间TebContainer:可视化位于替代拓扑中的所有找到和优化的轨迹(仅在启用并行计划的情况下)。发布了更多信息,例如优化足迹模型。

〜<名称> / teb_feedback(teb_local_planner / FeedbackMsg

  • 反馈消息包含计划的轨迹,包括速度轮廓和时间信息以及障碍物列表。主要用于评估和调试。必须启用参数〜<名称> / publish_feedback。

 

订阅的主题

〜<名称> / odomnav_msgs / Odometry

  • 里程表信息可为本地计划者提供机器人的当前速度。通过重新映射或通过更改参数〜<name> / odom_topic来更改此主题。

〜<名称> /障碍(costmap_converter / ObstacleArrayMsg

  • 提供自定义障碍物,如点,线或多边形形状的障碍物(作为成本图障碍物的替代或替代)。

 

〜<名称> / via_points(nav_msgs / Path

  • 提供自定义通孔(您需要将〜<name> / global_plan_viapoint_sep设置为零或负)

 

参数

teb_local_planner软件包允许用户设置参数以自定义行为。这些参数分为几类:机器人配置,目标公差,轨迹配置,障碍,优化,独特拓扑中的规划以及其他参数。选择其中一些以符合base_local_planner的要求。可以在运行时使用rqt_reconfigure修改许多(但不是全部)参数。

 

机械手配置参数

〜<名称> / acc_lim_x(double,默认值:0.5)

  • 机器人的最大平移加速度,单位为米/秒^ 2

〜<名称> / acc_lim_theta(double,默认值:0.5)

  • 机器人的最大角加速度,以弧度/秒^ 2为单位

〜<名称> / max_vel_x(double,默认值:0.4)

  • 机器人的最大平移速度,以米/秒为单位

〜<名称> / max_vel_x_backwards(double,默认值:0.2)

  • 向后行驶时机器人的最大绝对平移速度,以米/秒为单位。请参阅优化参数weight_kinematics_forward_drive

〜<名称> / max_vel_theta(double,默认值:0.3)

  • 机器人的最大角速度(弧度/秒)

以下参数仅与汽车机器人相关:

〜<名称> / min_turning_radius(double,默认值:0.0)

  • 车形机器人的最小转弯半径(差速驱动机器人设置为零)。

〜<名称> /轴距(double,默认值:1.0)

  • 后桥和前桥之间的距离。对于后轮机器人,该值可能为负(仅当〜<name> / cmd_angle_instead_rotvel设置为true时才需要)。

〜<名称> / cmd_angle_instead_rotvel(bool,默认:false)

  • 用相应的转向角[-pi / 2,pi / 2]代替指令速度消息中的转速。注意,根据应用改变偏航率的语义不是可取的。在这里,它仅符合舞台模拟器所需的输入。ackermann_msgs中的数据类型更合适,但move_base不支持。本地计划程序无意自己发送命令。

 

以下参数仅与完整的机器人相关:ROS动力学的新特性

请注意,请大幅度降低〜<name> / weight_kinematics_nh,以便在顺应纵向运动与不顺应横向运动(分层)之间进行权衡。

〜<名称> / max_vel_y(double,默认值:0.0)

  • 机器人的最大起步速度(对于非完整机器人,应为零!)
〜<名称> / acc_lim_y(double,默认值:0.5)
  • 机器人的最大踩踏加速度

以下参数与用于优化的封装模型相关(请参见避免教程和机器人封装模型)。版本0.3的新功能

〜<名称> / footprint_model / type(字符串,默认值:“点”)

  • 指定用于优化的机器人足迹模型类型。不同的类型是“点”,“圆形”,“线”,“ two_circles”和“多边形”。模型的类型会显着影响所需的计算时间。

〜<名称> / footprint_model / radius(double,默认值:0.2)

  • 该参数仅与“圆形”类型相关。它包含圆的半径。圆心位于机器人的旋转轴上。

〜<名称> / footprint_model / line_start(double [2],默认值:[- 0.3,0.0 ])

  • 此参数仅与“线”类型相关。它包含线段的起始坐标。

〜<名称> / footprint_model / line_end(double [2],默认值:[ 0.3,0.0 ])

  • 此参数仅与“线”类型相关。它包含线段的结束坐标。

〜<名称> / footprint_model / front_offset(double,默认值:0.2)

  • 该参数仅与类型“ two_circles”相关。它描述了前圆的中心沿机器人的x轴偏移了多少。假定机器人的旋转轴位于[0,0]。

〜<名称> / footprint_model / front_radius(double,默认值:0.2)

  • 该参数仅与类型“ two_circles”相关。它包含前圆的半径。

〜<名称> / footprint_model / rear_offset(double,默认值:0.2)

  • 该参数仅与类型“ two_circles”相关。它描述了后圆心沿机器人的负x轴偏移了多少。假定机器人的旋转轴位于[0,0]。

〜<名称> / footprint_model / rear_radius(double,默认值:0.2)

  • 该参数仅与类型“ two_circles”相关。它包含后圆的半径。

〜<名称> / footprint_model / vertices(double [],默认值:[[0.25,-0.05],[...],...])

  • 此参数仅与“多边形”类型相关。它包含多边形顶点的列表(每个2d坐标)。多边形始终是封闭的:不要在末端重复第一个顶点。

〜<名称> / is_footprint_dynamic(bool,默认:false)

  • 如果为true,则在检查轨迹可行性之前更新覆盖区

 

目标容忍参数

〜<名称> / xy_goal_tolerance(double,默认值:0.2)

  • 到目标位置的最终欧几里得距离,以米为单位

〜<名称> / yaw_goal_tolerance(double,默认值:0.2)

  • 允许的最终方向误差(以弧度为单位)

〜<名称> / free_goal_vel(bool,默认:false)

  • 消除目标速度限制,使机器人可以最大速度到达目标

 

轨迹配置参数

〜<名称> / dt_ref(double,默认值:0.3)

  • 轨迹的所需时间分辨率(由于时间分辨率是优化的一部分,因此轨迹不固定为dt_ref,但是如果违反dt_ref + -dt_hysteresis,则将在迭代之间调整轨迹的大小。

〜<名称> / dt_hysteresis(double,默认值:0.1)

  • 用于根据当前时间分辨率自动调整大小的磁滞,通常大约为 建议使用dt_ref的10%

〜<名称> / min_samples(int,默认值:3)

  • 最小样本数(应始终大于2)

〜<名称> / global_plan_overwrite_orientation(bool,默认:true)

  • 覆盖全局计划者提供的局部子目标的方向(因为它们通常仅提供2D路径)

〜<名称> / global_plan_viapoint_sep(double,默认值:-0.1(禁用))

  • 如果为正,则从全局计划中引出通孔点(路径遵循模式)。该值确定参考路径的分辨率(如果为负值,则禁用全局规划中每两个连续通孔之间的最小距离)。请参阅参数weight_viapoint以调整强度。版本0.4中的新功能

〜<名称> / max_global_plan_lookahead_dist(double,默认值:3.0)

  • 指定考虑优化的全局计划子集的最大长度(累积欧几里得距离)。然后,实际长度由本地成本图大小和此最大界限的逻辑结合确定。设置为零或负数以停用此限制。

〜<名称> / force_reinit_new_goal_dist(double,默认值:1.0)

  • 如果更新的先前目标的间隔大于指定值(以米为单位),则重新初始化轨迹(跳过热启动)

〜<名称> / feasibility_check_no_poses(int,默认值:4)

  • 指定在每个采样间隔内应检查可行性的预测计划上的姿势。

〜<名称> / publish_feedback(bool,默认值:false)

  • 发布包含完整轨迹和活动障碍物列表的计划者反馈(仅应启用评估或调试)。请参阅上面的发行商列表。

〜<名称> / shrink_horizo​​n_backup(bool,默认:true)

  • 在自动检测到问题(例如,不可行)的情况下,允许计划者临时缩小范围(50%)。另请参阅参数shrink_horizo​​n_min_duration。

 

〜<名称> / allow_init_with_backwards_motion(bool,默认值:false)

  • 如果为true,则可以通过向后运动来初始化基础轨迹,以防目标在本地成本图中落后于起点(仅在机器人配备了后部传感器的情况下才建议这样做)。
〜<名称> / exact_arc_length(bool,默认值:false)
  • 如果为true,则计划程序将在速度,加速度和转弯速率计算中使用精确的弧长(->增加的cpu时间),否则将使用欧几里得近似。
〜<名称> / shrink_horizo​​n_min_duration(double,默认值:10.0)
  • 如果检测到不可行的轨迹,请为缩小的水平线指定最小持续时间(请参考参数shrink_horizo​​n_backup以激活缩小的水平线模式)。

 

障碍物参数

〜<名称> / min_obstacle_dist(double,默认值:0.5)

  • 与障碍物的最小期望距离(以米为单位)

〜<名称> / include_costmap_obstacles(bool,默认:true)

  • 指定是否应考虑本地成本图的障碍。标记为障碍物的每个单元都被视为点障碍物。因此,请勿选择成本图的非常小的分辨率,因为它会增加计算时间。在将来的版本中,将解决这种情况,并为动态障碍提供附加的api。

〜<名称> / costmap_obstacles_behind_robot_dist(double,默认值:1.0)

  • 限制在机器人后面进行规划时要考虑的已占用的局部成本图障碍(以米为单位指定距离)。

〜<名称> / obstacle_poses_affected(int,默认值:30)

  • 每个障碍物位置都附加到轨迹上最接近的姿势,以保持一定距离。也可以考虑其他邻居。请注意,此参数可能会在将来的版本中删除,因为障碍关联策略已在动力学+中进行了修改。请参阅legacy_obstacle_association的参数描述。

〜<名称> / inflation_dist(double,默认值:动力学前:0.0,动力学+:0.6)

  • 具有非零惩罚成本的障碍物周围的缓冲区(应大于min_obstacle_dist才能生效)。另请参阅权重weight_inflation。

 

〜<名称> / include_dynamic_obstacles(bool,默认值:false)

  • 如果将此参数设置为true,则将通过等速模型在优化过程中预测和考虑速度为非零的障碍物的运动(通过用户在主题〜/障碍物上提供的障碍物或从costmap_converter获得)。 新的
〜<名称> / legacy_obstacle_association(bool,默认:false)
  • 修改了将轨迹姿态与障碍物联系起来以进行优化的策略(请参阅变更日志)。您可以通过将此参数设置为true来切换到旧策略/上一个策略。旧策略:针对每个障碍物,找到最近的TEB姿势;新策略:对于每个姿势,仅找到“相关”障碍。
〜<名称> / obstacle_association_force_inclusion_factor(double,默认值:1.5)
  • 非遗留障碍物关联策略尝试在优化过程中仅将相关障碍物与离散轨迹连接起来。但是,必须将指定距离内的所有障碍物都包括在内(作为min_obstacle_dist的倍数)。例如,选择2.0以便在2.0 * min_obstacle_dist的半径内强制考虑障碍。[仅当参数legacy_obstacle_association为false时才使用此参数]
〜<名称> / obstacle_association_cutoff_factor(double,默认值:5)
  • 见obstacle_association_force_inclusion_factor,但超出[值]的倍数* min_obstacle_dist一切障碍,在优化过程中被忽略。首先处理参数barrier_association_force_inclusion_factor。[仅当参数legacy_obstacle_association为false时才使用此参数]

仅当需要costmap_converter插件时,以下参数才相关(请参阅教程):

〜<名称> / costmap_converter_plugin(字符串,默认值:“”)

  • 定义插件名称以将成本图单元格转换为点/线/多边形。设置一个空字符串以禁用转换,以便将所有单元格都视为点障碍。

〜<名称> / costmap_converter_spin_thread(bool,默认:true)

  • 如果设置为true,costmap转换器将在另一个线程中调用其回调队列。

〜<名称> / costmap_converter_rate(double,默认值:5.0)

  • 费率,用于定义costmap_converter插件处理当前成本图的频率(该值不应比成本图更新率高很多)[以Hz为单位]。

 

优化参数

〜<名称> / no_inner_iterations(int,默认值:5)

  • 每次外部循环迭代中调用的实际求解器迭代次数。参见参数no_outer_iterations。

〜<名称> / no_outer_iterations(int,默认值:4)

  • 每次外部循环迭代都会根据所需的时间分辨率dt_ref自动调整轨迹的大小,并调用内部优化器(执行no_inner_iterations)。因此,每个计划周期中求解程序迭代的总数是两个值的乘积。

〜<名称> / penalty_epsilon(double,默认值:0.1)

  • 为惩罚函数增加一个小的安全余量,以实现硬约束近似

〜<名称> / weight_max_vel_x(double,默认值:2.0)

  • 满足最大允许平移速度的优化权重

〜<名称> / weight_max_vel_theta(double,默认值:1.0)

  • 满足最大允许角速度的优化权重

〜<名称> / weight_acc_lim_x(double,默认值:1.0)

  • 满足最大允许平移加速度的优化权重

〜<名称> / weight_acc_lim_theta(double,默认值:1.0)

  • 满足最大允许角加速度的优化权重

〜<名称> / weight_kinematics_nh(double,默认值:1000.0)

  • 用于满足非完整运动学的优化权重(此参数必须很高,因为运动学方程构成了一个等式约束,即使值1000也不意味着由于与其他成本相比较小的“原始”成本值而导致的矩阵条件不佳) 。

〜<名称> / weight_kinematics_forward_drive(double,默认值:1.0)

  • 优化权重,用于迫使机器人仅选择前进方向(正向速度)。较小的重量(例如1.0)仍然允许向后行驶。大约1000的值几乎可以防止向后驱动(但不能保证)。

〜<名称> / weight_kinematics_turning_radius(double,默认值:1.0)

  • 优化重量,以实现最小转弯半径(仅适用于汽车类机器人)。

〜<名称> / weight_optimaltime(double,默认值:1.0)

  • 收缩轨迹过渡/执行时间的最优化权重

〜<名称> / weight_obstacle(double,默认值:50.0)

  • 优化重量以保持与障碍物的最小距离

〜<名称> / weight_viapoint(double,默认值:1.0)

  • 优化权重,以最小化到通孔的距离(分别为参考路径)。版本0.4中的新功能

〜<名称> / weight_inflation(double,默认值:0.1)

  • 通胀惩罚的优化权重(应该很小)。

 

〜<名称> / weight_adapt_factor(double,默认值:2.0)

  • 在每次外部TEB迭代中,一些特殊权重(当前为weight_obstacle)都将以此因子重复缩放(weight_new = weight_old * factor)。迭代地增加权重而不是设置较大的先验值会导致底层优化问题的更好的数值条件。

 

独特拓扑中的并行规划

〜<名称> / enable_homotopy_class_planning(bool,默认:true)

  • 在独特的拓扑中激活并行规划(由于同时优化了多个轨迹,因此需要更多的CPU资源)

〜<名称> / enable_multithreading(bool,默认:true)

  • 激活多个线程以计划不同线程中的每个轨迹

〜<名称> / max_number_classes(int,默认值:4)

  • 指定要考虑的最大不同轨迹数(限制计算工作量)

〜<名称> / selection_cost_hysteresis(double,默认值:1.0)

  • 指定新候选人必须具有多少轨迹成本才能选择之前的轨迹(如果new_cost <old_cost * factor,则进行选择)。

〜<名称> / selection_obst_cost_scale(double,默认值:100.0)

  • 仅选择“最佳”候选者的障碍物成本条件的额外缩放。

〜<名称> / selection_viapoint_cost_scale(double,默认值:1.0)

  • 仅为了选择“最佳”候选者而对通孔成本条款进行额外的缩放。版本0.4中的新功能

〜<名称> / selection_alternative_time_cost(bool,默认值:false)

  • 如果为true,则将时间成本(时间差平方的总和)替换为总过渡时间(时间差之和)。

〜<名称> / roadmap_graph_no_samples(int,默认值:15)

  • 指定为创建路线图而生成的样本数

〜<名称> / roadmap_graph_area_width(double,默认值:6)

  • 在起点和目标之间的矩形区域中采样随机关键点/航路点。以米为单位指定该区域的宽度。

〜<名称> / h_signature_prescaler(double,默认值:1.0)

  • 标度内部参数(H-signature),用于区分同伦类。警告:仅当您在本地成本图中观察到障碍物过多的问题时,才减小此参数,请勿将其选择得太低,否则障碍物将无法彼此区分(0.2 <<= 1)。

〜<名称> / h_signature_threshold(double,默认值:0.1)

  • 如果实部和复杂部的差都低于指定的阈值,则假定两个H签名相等。

〜<名称> / obstacle_heading_threshold(double,默认值:1.0)

  • 在障碍物航向和目标航向之间指定标量乘积的值,以便将它们(障碍物)考虑在内进行探索。

〜<名称> / visualize_hc_graph(bool,默认值:false)

  • 可视化为探索独特轨迹而创建的图形(rviz中的检查标记消息)

〜<名称> / viapoints_all_candidates(bool,默认:true)

  • 如果为true,则将不同拓扑的所有轨迹都附加到该组通孔点,否则,只有与初始/全局计划共享相同拓扑的轨迹才与它们相连(对test_optim_node无效)。版本0.4中的新功能

 

〜<名称> / switching_blocking_period(double,默认值:0.0)

  • 指定允许切换到新的等效类之前需要终止的持续时间(以秒为单位)。

 

杂项参数

〜<名称> / odom_topic(字符串,默认值:“ odom ”)

  • 测距消息的主题名称,由机器人驱动程序或模拟器提供。

〜<名称> / map_frame(字符串,默认值:“ odom ”)

  • 全局规划框架(在使用静态地图的情况下,通常必须将此参数更改为“ / map”。

 

 

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

N1CROWN

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值