千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 全局路径规划与局部路径规划

全局路径规划与局部路径规划

来源:千锋教育
发布人:xqq
时间: 2023-11-22 23:41:36 1700667696

一、什么是全局路径规划

全局路径规划是确定一条从起点到终点的路径规划问题。通常情况下所使用的方法是利用搜索算法,如A*搜索算法等。

通常情况下,全局路径规划的输入以地图形式提供。在地图中包含障碍物和起点终点。算法通过地图信息寻找最短可行路径并返回路径。

下面我们来看一个示例代码:


/**
 * @brief Global path plan algorithm
 * @param[in] start_pose Start Pose of robot
 * @param[in] goal_pose Goal Pose of robot
 * @param[out] plan_path Planned path from start to goal
 * @return True if success / False if fail
 */
bool globalPathPlan(const Pose& start_pose, const Pose& goal_pose, std::vector& plan_path)
{
  // Algorithm implementation
  // ...
  return true;
}

二、什么是局部路径规划

局部路径规划是在当前位置周围小范围内搜索出一条可行路径。通常情况下所使用的方法包括动态窗口法、VFH法、探索法等。

局部路径规划的输入为机器人当前位置以及全局规划的路线,输出为机器人执行路径。

下面我们来看一个示例代码:


/**
 * @brief Local path planning algorithm
 * @param[in] current_pose Current Pose of robot
 * @param[in] global_path Global path planned for robot
 * @param[out] local_plan Local path for robot to execute
 * @return True if success / False if fail
 */
bool localPathPlan(const Pose& current_pose, const std::vector& global_path, std::vector& local_plan)
{
  // Algorithm implementation
  // ...
  return true;
}

三、全局路径规划的优化

在实际使用中,全局路径规划的计算量较大,因此需要进行优化。

(1)地图预处理。对于静态环境中,可以预处理地图,计算出点之间的距离以及避障代价,以加快全局路径规划的速度。

(2)路径平滑。通过对规划的路径进行平滑处理,可以去掉路径中的抖动,使得路径更加平滑,避免机器人运动时的抖动。

下面我们来看一个实现地图预处理和路径平滑的代码:


/**
 * @brief Global path plan algorithm with map preprocessing and path smoothing
 * @param[in] start_pose Start Pose of robot
 * @param[in] goal_pose Goal Pose of robot
 * @param[out] plan_path Planned path from start to goal
 * @param[in] map_data Data of map
 * @return True if success / False if fail
 */
bool globalPathPlan(const Pose& start_pose, const Pose& goal_pose, std::vector& plan_path, const MapData& map_data)
{
  // Map preprocessing
  MapProcessor map_processor(map_data);
  // Smooth path
  PathSmoother path_smoother;
  // Algorithm implementation
  // ...
  return true;
}

四、局部路径规划的优化

在实际使用中,局部路径规划的计算量同样较大,因此需要进行优化。

(1)机器人运动约束。对于机器人的移动速度和加速度等进行限制,以减少计算量。

(2)地图障碍物检测。对于动态环境中,需要实时更新地图障碍物信息,以确保检测到移动的障碍物。

下面我们来看一个实现机器人约束和地图障碍物检测的代码:


/**
 * @brief Local path planning algorithm with robot constraint and obstacle detection
 * @param[in] current_pose Current Pose of robot
 * @param[in] global_path Global path planned for robot
 * @param[out] local_plan Local path for robot to execute
 * @param[in] robot_config Configuration of robot
 * @param[in] map_data Data of map
 * @return True if success / False if fail
 */
bool localPathPlan(const Pose& current_pose, const std::vector& global_path, std::vector& local_plan, const RobotConfig& robot_config, const MapData& map_data)
{
  // Robot constraint
  RobotConstraint robot_constraint(robot_config);
  // Obstacle detection
  ObstacleDetector obstacle_detector(map_data);
  // Algorithm implementation
  // ...
  return true;
}

五、启发式算法的应用

针对高维空间的路径规划问题,启发式算法能够有效地解决计算复杂度高的问题。例如RRT算法和PRM算法,它们在搜索过程中通过构建随机树或随机图来缩小搜索范围。

下面我们来看一个实现PRM算法的代码:


/**
 * @brief Global path plan algorithm with PRM method
 * @param[in] start_pose Start Pose of robot
 * @param[in] goal_pose Goal Pose of robot
 * @param[out] plan_path Planned path from start to goal
 * @param[in] map_data Data of map
 * @return True if success / False if fail
 */
bool globalPathPlanWithPRM(const Pose& start_pose, const Pose& goal_pose, std::vector& plan_path, const MapData& map_data)
{
  // PRM method implementation
  PRM prm(map_data);
  plan_path = prm.get_plan(start_pose, goal_pose);
  
  return true;
}

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT