菜单

EGO-Planner自主规划

下载

本篇内容:如何运行ego-planner以及控制无人机进行规划避障
注意:本篇需要拥有外部定位支持,以下基于FastLio2定位实现(https://wiki.yundrone.cn/docs/CklZxSfn)
本篇内容属于高级飞行,具有一定的危险和炸机风险,请注意做好保护措施,未了解过的用户可以先观看从0制作自主空中机器人 | 开源 | 浙江大学Fast-Lab课程

关于Ego-Planner

Ego-Planner 是一种用于机器人导航和路径规划的算法,它基于局部规划的概念,旨在为机器人提供实时、高效和可靠的路径规划。Ego-Planner 的出现为机器人导航和路径规划领域提供了一种高效、实时的解决方案,对于提高机器人的自主性和实用性具有重要意义。

使用前建议熟悉外部定位飞行指令控制飞行

启动节点

运行mavros连接飞控

bash 复制代码
# 打开终端 启动ros
cd ~/Sunray
roscore

# 启动mavros连接无人机
roslaunch sunray_uav_control sunray_mavros_exp.launch 

运行定位算法

bash 复制代码
# 启动MID360
roslaunch sunray_planner_util msg_mid360.launch

# 启动FastLio2算法 输出的里程计话题为 /Odometry
roslaunch sunray_planner_utils mapping_mid360.launch

# 运行外部定位模块 定位源话题为/Odometry
roslaunch sunray_uav_control external_fusion.launch external_source:=0 position_topic:=/Odometry

运行控制节点

bash 复制代码
# 启动节点
roslaunch sunray_uav_control sunray_control_node.launch

启动Ego-planner算法

bash 复制代码
## 启动节点 
## 此节点为mid360激光雷达版启动节点 基于深度图或其他雷达需要自行修改相应配置
roslaunch sunray_planner_utils sunray_ego_single_mid360.launch
## 如果 rviz没有启动可以手动启动 与sunray_ego_single_mid360.launch 中的参数有关
roslaunch sunray_planner_utils rviz_sunray.launch

正确运行时会在rviz中显示出膨胀的点云数据,使用2DNavGoal工具在rviz中点击发布目标点即可开始规划与移动

相关说明

sunray_ego_single_mid360.launch

ego-planner相关参数

  • map_size_*:地图大小
  • run_in_single.launch
    • odom_topic:全局坐标系下的里程计话题
    • cloudpoint2_topic:全局坐标系下的点云话题
    • max_vel:最大规划速度(建议由小到大尝试 不要超过2m/s)
    • max_acc:最大规划加速度
    • planning_horizon:规划的时间范围,通常建议将 规划范围 设置为 传感器感知范围的1.5倍
    • flight_type1: use 2D Nav Goal to select goal 2: use global waypoints below 4:订阅自定义的话题
    • goal_name:目标点自定义话题名,flight_type=4 时需要
  • advanced_param_exp.xml
    • resolution:定义了栅格地图的 分辨率
    • obstacles_inflation:表示障碍物膨胀半径
    • ground_height:地面高度
    • virtual_ceil_height:表示 虚拟天花板高度
    • visualization_truncate_height:表示可视化膨胀地图截断高度

相关节点与参数说明

  • positionCmd2sunray:ego-planner的规划结果以一个自定义的话题输出,需要转换为sunray控制节点中的对应的消息
    • cmd_sub_topic:需要订阅的positionCmd话题
    • control_pub_topic:转换结果发布的话题
    • control_type:控制类型 0:XyzPosYaw 1:XyzVelYaw 2:XyzPosVelYaw
    • enable_yaw:是否控制偏航角,true:无人机偏航角会进行转动 false:无人机偏航角固定不动
  • point_cloud_transform:ego-planner中接受的点云帧需是一个全局坐标系下的点云数据,因此需要将点云做坐标转换
    • input_point_topic:局部坐标系下的点云话题
    • output_point_topic:转为全局坐标系下的点云后需要发布到的话题
    • odom_topic:需要转换到的全局坐标系里程计话题
    • frame_id:全局坐标系下的点云数据中填充的 frame_id
    • child_frame_id:全局坐标系下的点云数据中填充的 child_frame_id
  • goal2swarm:该节点的作用是接收rviz中的2DNav指点信息并重新赋值Z的高度,以新话题发布
    • uav_num:无人机数量,单机转态下写1即可
    • goal_type:默认选择1 订阅move_base_simple/goal话题
    • use_hight:是否自定高度,true:z=z_hight
    • z_hight:自定义目标点高度
  • livox2point.launch:mid360驱动发布点云数据消息类型不是pointcloud2,因此需要做转换
    • pointcloud_topic:转换为pointcloud2格式后发布的话题
    • livox_topic:mid360原始消息话题
    • filter_distance:过滤半径

过程演示

最近修改: 2025-07-31