EGO-Planner 教程

EGO-Planner 教程

ego-planner项目地址:https://gitcode.com/gh_mirrors/eg/ego-planner

1. 项目介绍

EGO-Planner 是一个轻量级的梯度基局部路径规划器,专为四轴飞行器设计,不依赖于ESDF(欧几里得Signed Distance Field)构造。相比于现有的先进方法,它显著减少了计算时间,总的规划时间仅为大约1毫秒,并且不需要预先计算ESDF。该项目由Zhou等人发表在RA-L上,并提供了YouTube和bilibili上的演示视频。

2. 项目快速启动

系统要求

确保你的Ubuntu版本是16.04, 18.04 或 20.04 并已安装ros-desktop-full

安装步骤

  1. 安装Armadillo库(EGO-Planner的依赖)

    sudo apt-get install libarmadillo-dev
    
  2. 从GitHub克隆代码

    git clone https://github.com/ZJU-FAST-Lab/ego-planner.git
    cd ego-planner
    
  3. 使用Catkin构建项目

    catkin_make
    
  4. 源设置文件并启动

    source devel/setup.bash
    roslaunch ego_planner simple_run.launch
    

如果你的网络连接到GitHub较慢,也可以尝试从Gitee仓库同步:

git clone https://gitee.com/iszhouxin/ego-planner.git

3. 应用案例和最佳实践

EGO-Planner被广泛用于实时的四轴飞行器本地规划任务中,尤其适用于时间敏感的应用。为了获得最佳性能:

  • 在复杂的环境中测试规划能力。
  • 结合不同的传感器数据,如激光雷达和视觉信息,以增强避障效果。
  • 考虑与其他高级控制策略结合,例如 Teach-Repeat-Replan 方法。

4. 典型生态项目

  • Fast-Planner: Zhou Boyu 的 Fast-Planner 提供了极高的路径规划速度,是 EGO-Planner 的灵感来源之一。
  • LBFGS-Lite: 用于优化的L-BFGS求解器,轻量级且易于集成。
  • mockamap: William Wu 制作的地图模拟器,可用于EGO-Planner的仿真场景。
  • Teach-Repeat-Replan: 一种开放式实现的硬件架构,可以用于自动驾驶系统的学习和重复规划。

要了解更多关于EGO-Planner的信息,查阅其相关论文和社区资源,以及查看GitHub仓库中的示例代码和文档。

ego-planner项目地址:https://gitcode.com/gh_mirrors/eg/ego-planner

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Ego-Planner是一个基于ROS的路径规划器,它可以在给定的地图和起点、终点信息下,生成一条可行的路径。以下是Ego-Planner的代码框架: 1. 首先需要定义一个EgoPlanner类,其中包含了一些必要的成员变量和函数。 ```c++ class EgoPlanner { private: ros::NodeHandle nh_; ros::Subscriber sub_map_; ros::Subscriber sub_pose_; ros::Subscriber sub_goal_; ros::Publisher pub_path_; nav_msgs::OccupancyGrid map_; geometry_msgs::PoseStamped start_; geometry_msgs::PoseStamped goal_; public: EgoPlanner(); // 构造函数 ~EgoPlanner(); // 析构函数 void mapCallback(const nav_msgs::OccupancyGrid::ConstPtr& msg); // 地图回调函数 void poseCallback(const geometry_msgs::PoseStamped::ConstPtr& msg); // 当前位置回调函数 void goalCallback(const geometry_msgs::PoseStamped::ConstPtr& msg); // 目标位置回调函数 void plan(); // 路径规划函数 }; ``` 2. 在构造函数中,需要完成ROS节点的初始化、订阅和发布话题的设置。 ```c++ EgoPlanner::EgoPlanner() { nh_ = ros::NodeHandle("~"); sub_map_ = nh_.subscribe("map", 1, &EgoPlanner::mapCallback, this); sub_pose_ = nh_.subscribe("pose", 1, &EgoPlanner::poseCallback, this); sub_goal_ = nh_.subscribe("goal", 1, &EgoPlanner::goalCallback, this); pub_path_ = nh_.advertise<nav_msgs::Path>("path", 1); } ``` 3. 在地图、当前位置和目标位置的回调函数中,需要将接收到的信息保存到对应的成员变量中。 ```c++ void EgoPlanner::mapCallback(const nav_msgs::OccupancyGrid::ConstPtr& msg) { map_ = *msg; } void EgoPlanner::poseCallback(const geometry_msgs::PoseStamped::ConstPtr& msg) { start_ = *msg; } void EgoPlanner::goalCallback(const geometry_msgs::PoseStamped::ConstPtr& msg) { goal_ = *msg; } ``` 4. 在路径规划函数中,需要调用路径规划算法,生成一条可行的路径,并将路径发布出去。 ```c++ void EgoPlanner::plan() { // 调用路径规划算法,生成一条可行的路径 std::vector<geometry_msgs::PoseStamped> path = pathPlanning(map_, start_, goal_); // 将路径发布出去 nav_msgs::Path path_msg; path_msg.header.frame_id = "map"; path_msg.header.stamp = ros::Time::now(); path_msg.poses = path; pub_path_.publish(path_msg); } ``` 5. 在主函数中,创建EgoPlanner对象,并进入ROS循环。 ```c++ int main(int argc, char** argv) { ros::init(argc, argv, "ego_planner"); EgoPlanner planner; ros::Rate rate(10); while (ros::ok()) { planner.plan(); ros::spinOnce(); rate.sleep(); } return 0; } ``` 以上就是Ego-Planner的代码框架,其中路径规划算法需要根据具体情况进行选择和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌爱芝Sherard

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值