move_base介绍

move_base是ROS中的导航框架,包含actionlib、全局和局部规划器,维护两个costmap。当无法找到路径时,recovery behaviors进行障碍物清理。主要参数包括costmap_common_params.yaml等,用于设置障碍物检测、地图更新频率等。在rviz中,全局帧设为map以正确显示。

move_bae框架

参考:http://wiki.ros.org/move_base

构成

它由如下三部分构成:

  • 实现一个actionlib,用于设定目标位置。
  • 连接global planer和local planner,用于实现导航。可以通过重新实现nav_core::BaseGlobalPlanner 和 nav_core::BaseLocalPlanner 的接口,修改global planer和local planner的导航策略
  • 维护两个two costmaps,一个为global planer,另一个为local planner
  • recovery_behaviors: 如果找不到一条到达目标的路径,它就会运行一些清理机制,把地图中一些无效障碍物清理掉,重新制定路径。

节点组成如下图所示:

这里写图片描述

recovery_behaviors默认策略:

这里写图片描述

move_base参数

costmap_common_params.yaml

  • robot_radius: 0.165 机器人底盘形状,圆形使用robot_radius,非圆形使用footprint
  • footprint: [[x0, y0], [x1, y1]
### `teb_local_planner` 中各类主题的作用 #### `global_plan` `global_plan` 是由全局规划器(如 `global_planner` 或 `navfn`)生成的全局路径,通常是一组从起始点到目标点的离散路径点。`teb_local_planner` 使用 `global_plan` 作为参考路径,结合局部传感器数据进行局部轨迹优化,确保机器人沿着全局路径前进的同时避开局部障碍物[^1]。 #### `local_plan` `local_plan` 是 `teb_local_planner` 实时生成的局部轨迹,通常基于当前机器人的状态、目标点以及感知到的障碍物信息。与 `global_plan` 不同,`local_plan` 更关注短期内的运动控制,例如避障、动态调整速度和方向,确保机器人安全、高效地跟踪全局路径[^1]。 #### `obstacles` `obstacles` 表示从传感器数据(如激光雷达)或代价地图中提取的障碍物信息。`teb_local_planner` 通过 `obstacles` 计算轨迹点与障碍物之间的距离,并在优化过程中引入代价函数来避免碰撞。障碍物信息通常以点、线段或多边形形式表示,用于构建避障约束。 #### `parameter_descriptions` `parameter_descriptions` 是 `teb_local_planner` 的参数描述信息,用于提供所有可配置参数的详细说明。这些参数包括轨迹优化的权重、避障距离、机器人动力学约束等。通过 `parameter_descriptions`,用户可以了解每个参数的具体作用及其合理取值范围。 #### `parameter_updates` `parameter_updates` 用于动态更新 `teb_local_planner` 的运行时参数。通过 `dynamic_reconfigure` 接口,用户可以在不重启节点的情况下调整避障距离、轨迹优化权重等参数,从而适应不同的环境和任务需求。 #### `teb_feedback` `teb_feedback` 提供了 `teb_local_planner` 的内部反馈信息,例如当前轨迹的优化状态、避障行为的执行情况以及轨迹跟踪的误差。这些信息可用于调试或可视化,帮助开发者分析规划器的性能。 #### `teb_markers` `teb_markers` 是用于可视化 `teb_local_planner` 内部状态的标记信息,例如轨迹点、障碍物、速度矢量等。通过 `teb_markers`,用户可以在 RViz 中实时查看规划器的运行情况,便于调试和优化。 #### `teb_poses` `teb_poses` 表示 `teb_local_planner` 生成的优化轨迹中的各个位姿点。这些位姿点描述了机器人在轨迹上的位置和方向,用于生成最终的控制指令(如速度和角速度)[^1]。 #### `via_points` `via_points` 是用户指定的中间路径点,用于引导 `teb_local_planner` 在规划过程中经过特定位置。这些点通常用于任务规划或路径约束,确保机器人按照预设路径移动。 #### `cancel` `cancel` 用于取消当前的导航任务。当接收到 `cancel` 命令时,`teb_local_planner` 会停止轨迹优化并清除当前任务,机器人将停止运动或返回初始状态。 --- ### 示例代码:`teb_local_planner` 中避障代价函数的实现 以下是一个简化的示例,展示了 `teb_local_planner` 如何在轨迹优化中加入避障代价函数: ```cpp void TebOptimalPlanner::addObstacleCosts(Trajectory& trajectory, const std::vector<ObstaclePtr>& obstacles) { for (const auto& obstacle : obstacles) { for (int i = 0; i < trajectory.size(); ++i) { double dist = obstacle->distance(trajectory[i].position()); if (dist < min_obstacle_dist_) { // 引入二次惩罚项作为避障代价 double cost = 1.0 / (dist + 1e-5); // 防止除零 trajectory[i].cost += cost; } } } } ``` 该函数通过计算轨迹点与障碍物之间的距离来构造代价函数,距离越小,代价越大,从而引导优化器避开障碍物。 --- ### 示例配置文件:`teb_local_planner_params.yaml` ```yaml TebLocalPlannerROS: min_obstacle_dist: 0.5 costmap_obstacles_behind_robot_dist: 1.0 include_costmap_obstacles: true ``` 这些参数将影响避障行为,确保机器人在复杂环境中安全导航。 --- ### `rqt_reconfigure` 动态调整避障参数 运行以下命令打开参数调整界面: ```bash rosrun rqt_reconfigure rqt_reconfigure ``` 在界面中选择 `/move_base/TebLocalPlannerROS` 节点,可以调整如下参数: - `min_obstacle_dist`:定义轨迹与障碍物之间的最小安全距离。 - `costmap_obstacles_behind_robot_dist`:控制代价地图中障碍物的检测范围。 - `include_costmap_obstacles`:决定是否启用代价地图中的障碍物避障功能。 通过动态调整这些参数,可以在不同场景下优化避障性能,提高机器人的导航鲁棒性。 --- ### 编译与运行 在查看和修改代码后,需要重新编译 `teb_local_planner` 包。进入工作空间根目录并执行: ```bash cd ~/catkin_ws catkin_make ``` 确保编译成功后,启动 ROS 节点并加载配置文件以运行 `teb_local_planner`: ```bash roslaunch your_robot_navigation move_base.launch ``` 其中 `move_base.launch` 文件应配置为使用 `TebLocalPlannerROS` 作为局部规划器: ```xml <param name="base_local_planner" value="teb_local_planner/TebLocalPlannerROS"/> ``` --- ### `teb_local_planner` 的避障算法优化策略 `teb_local_planner` 在避障过程中不仅依赖于代价函数,还结合了轨迹优化算法(如 g2o)来寻找最优路径。优化器通过最小化包含避障代价的目标函数,生成一条安全且动态可行的轨迹。这种策略在处理动态障碍物和狭窄通道时表现出色[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值