菜单

ego_planner自主规划模块

下载

本篇内容:如何运行ego-planner以及控制无人机进行规划避障
本篇内容属于高级飞行,真机运行时具有一定的危险和炸机风险,请注意做好保护措施,未了解过的用户可以先观看从0制作自主空中机器人 | 开源 | 浙江大学Fast-Lab课程

关于Ego-Planner

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

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

ego_planner路径与主要文件

  • Sunray/Simulation/sunray_simulator/sunray_sim_ego.launch
  • Sunray/Simulation/sunray_simulator/sunray_sim_ego_global_map.launch
  • Sunray/Simulation/sunray_simulator/map_generator.launch

相关节点与参数说明

ego-planner:主节点

  • fsm*: 规划器状态机参数
    • flight_type:控制飞行模式,不同数值对应不同的目标点设置方式
    • thresh_replan_time:重规划的时间间隔,数值越小规划频率越高
    • thresh_no_replan_meter: 距离终点小于此阈值时停止规划
    • planning_horizon:规划的时间范围,通常建议将 规划范围 设置为 传感器感知范围的1.5倍
    • realworld_experiment: 区分仿真和实际环境的标志位
  • grip_map:网格地图参数
    • resolution:定义了栅格地图的 分辨率
    • obstacles_inflation:表示障碍物膨胀半径
    • ground_height:地面高度
    • virtual_ceil_height:表示 虚拟天花板高度
    • map_size_*: 地图大小
  • manager:规划管理器参数
    • drone_id: 无人机 ID,用于多机协同
    • max_vel::最大飞行速度限制
    • max_acc: 最大加速度限制
    • max_jerk: 最大加加速度限制
    • control_points_distance: 控制点间距,影响轨迹平滑度
  • optimization:B 样条优化参数
    • lambda_smooth: 平滑系数:较高的‌lambda_smooth‌值会使轨迹更加平滑,减少急剧的转向和加速,从而提高行驶的稳定性和舒适性
    • lambda_collision:避障系数:较低的‌lambda_smooth‌值可能会使轨迹更接近障碍物,但有助于更好地避开障碍物,尤其是在复杂环境中
    • lambda_feasibility: 可行性权重,确保轨迹可执行
  • point_cloud_transform:ego-planner的规划结果以一个自定义的话题输出,需要转换为sunray控制节点中的对应的消息
    • input_point_topic:输入的局部点云话题
    • output_point_topic:输出的全局点云话题
    • odom_topic:用于坐标转换的里程计话题
    • frame_id:全局坐标系下的点云数据中填充的 frame_id
    • child_frame_id:全局坐标系下的点云数据中填充的 child_frame_id
  • positionCmd2sunray:ego-planner的规划结果以一个自定义的话题输出,需要转换为sunray控制节点中的对应的消息
    • cmd_sub_topic:需要订阅的positionCmd话题
    • control_pub_topic:转换结果发布的话题
    • control_type:控制类型 0:XyzPosYaw 1:XyzVelYaw 2:XyzPosVelYaw
    • enable_yaw:是否控制偏航角,true:无人机偏航角会进行转动 false:无人机偏航角固定不动
  • goal2swarm:该节点的作用是接收rviz中的2DNav指点信息并重新赋值Z的高度,以新话题发布
    • uav_num:无人机数量,单机转态下写1即可
    • goal_type:默认选择1 订阅move_base_simple/goal话题
    • use_hight:是否自定高度,true:z=z_hight
    • z_hight:自定义目标点高度
  • traj_server:将 ego_planner 输出的 B 样条轨迹转换为位置指令(position_cmd),供无人机控制器使用
    • time_forward:轨迹前瞻时间(秒),决定提前多久计算未来位置指令,影响轨迹跟踪的平滑性

接口说明

在Sunray的控制模块中通过订阅两个话题实现对无人机状态和任务的控制

  • sunray/setup
    消息定义:Sunray/General_Module/sunray_common/sunray_msgs/msg/UAVSetup.msg
    消息说明:该消息用于对控制模块中的模式设置解锁上锁停桨等操作,详细功能请阅读消息定义
    • 例:执行解锁
    复制代码
    rostopic pub /uav1/sunray/setup sunray_msgs/UAVSetup "header:
    seq: 0
    stamp:
       secs: 0
       nsecs: 0
       frame_id: ''
    cmd: 1
    px4_mode: ''
    control_state: ''" -1
    • 例:切换至CMD_CONTROL
    复制代码
    rostopic pub /uav1/sunray/setup sunray_msgs/UAVSetup "header:
    seq: 0
    stamp:
       secs: 0
       nsecs: 0
       frame_id: ''
    cmd: 4
    px4_mode: ''
    control_state: 'CMD_CONTROL'" -1
  • sunray/uav_control_cmd
    消息定义:Sunray/General_Module/sunray_common/sunray_msgs/msg/UAVControlCMD.msg
    消息说明:该消息用于对无人机发布控制方式与对应控制项的值,详细功能请阅读消息定义
    • 例:发布位置控制
    复制代码
    rostopic pub /uav1/sunray/uav_control_cmd sunray_msgs/UAVControlCMD "header:
       seq: 0
       stamp: {secs: 0, nsecs: 0}
       frame_id: ''
    cmd: 1
    desired_pos: [1.0, 1.0, 1.0]
    desired_vel: [0.0, 0.0, 0.0]
    desired_acc: [0.0, 0.0, 0.0]
    desired_att: [0.0, 0.0, 0.0]
    desired_thrust: 0.0
    desired_yaw: 0.0
    desired_yaw_rate: 0.0
    latitude: 0.0
    longitude: 0.0
    altitude: 0.0"  -1

操作演示

以下基于仿真演示

在仿真场景中,可脱离 QGC 实现控制: 当use_rc_control参数设为false时,需通过键盘控制输入 102 先切换至 Offboard 模式,再输入 101 执行解锁操作

脚本启动前提:切换到脚本所在的根目录~/Sunray/scripts_sim下进行操作!

以下操作基于无人机已经起飞!!!

  • 单个无人机EGO测试脚本(EGO地图输入来自三维激光雷达实时点云)
复制代码
## 脚本启动
./sunray_uav_ego_sim.sh
/
  • 单个无人机EGO测试脚本(EGO地图输入来自map_generator生成的全局点云)
复制代码
## 脚本启动
./sunray_uav_ego_global_map_sim.sh
/
上一个
视觉识别与控制模块
下一个
fuel未知环境探索模块
最近修改: 2025-06-16