菜单

fuel未知环境探索模块

下载

本篇内容:如何运行在仿真中运行FULE位置环境探索算法
本篇内容属于高级飞行,真机运行时具有一定的危险和炸机风险,请注意做好保护措施,

FUEL 是一种专为无人机(UAV)设计的未知环境探索算法,旨在高效构建环境地图并规划探索路径。

安装依赖

复制代码
git clone -b v2.7.1 https://github.com/stevengj/nlopt.git
cd nlopt
mkdir build
cd build
cmake ..
make
sudo make install

sudo apt-get install libarmadillo-dev

编译FUEL模块

注意:在由于在ego-planner和fuel中包含了一个同名的节点,因此这个两个不能同时编译在环境中会导致运行报错,如果已经编译了ego-planner需要在Sunray/build文件夹下将ego-planner和fuel(如果存在)删除然后重新编译FUEL

复制代码
catkin_make --source FUEL --build build/FUEL

相关节点与参数说明(sunray_sim_fuel.launch)

exploration_node:负责地图构建、前沿点检测、轨迹规划与优化

  • sdf_map:有符号距离场地图
    • resolution:地图分辨率(0.1m),决定地图细节精度
    • obstacles_inflation:障碍物膨胀半径(0.35m),用于避障安全距离
    • box_min/max_x/y/z:有效探索区域边界,限制地图构建范围(如 x 轴 - 10.0~10.0m)
    • p_hit/p_miss:点云命中 / 未命中的概率(0.65/0.35),用于更新地图 occupancy 概率
  • map_ros:基于 ROS 的地图相关参数或接口
    • cx/cy/fx/fy:相机内参,用于深度图像与点云的投影转换
    • depth_filter_maxdist/mindist:深度滤波距离阈值(5.0m/0.2m),过滤无效深度数据
  • cloud_topic:输入点云话题(默认使用全局点云/uav1/global_points)
  • fsm/thresh_replan1/2/3:重规划触发阈值(0.5/0.5/1.5),基于环境变化动态调整路径
  • frontier:探索边界 / 前沿
    • cluster_min:前沿点聚类最小点数(100),过滤无效前沿区域
    • min_candidate_dist:候选探索点最小距离(0.75m),避免密集采样
  • manager/max_vel/acc:最大速度 / 加速度(1.0m/s/1.0m/s²),限制无人机运动能力
  • optimization/ld_smooth:轨迹平滑权重(20.0),平衡轨迹平滑度与路径长度
  • astar/resolution_astar:A * 算法搜索分辨率(0.2m),影响路径搜索精度

traj_server:管理轨迹发布与时间参数

  • time_forward:轨迹前瞻时间(1.5s),决定提前规划的轨迹长度
  • init_x/y/z:无人机初始位置(0, 0, 1.2m),用于轨迹初始化
  • perception_utils/max_dist:感知最大距离(4.5m),限制传感器有效范围

waypoint_generator:生成航点目标,对接move_base_simple/goal话题

  • waypoint_type:航点类型(point),指定生成点目标而非路径
  • odom:订阅里程计话题(/uav1/sunray/gazebo_pose),获取无人机当前位姿

positionCmd2sunray:exploration_node的规划结果以一个自定义的话题输出,需要转换为sunray控制节点中的对应的消息

  • cmd_sub_topic:需要订阅的positionCmd话题
  • control_pub_topic:转换结果发布的话题
  • control_type:控制类型 0:XyzPosYaw 1:XyzVelYaw 2:XyzPosVelYaw
  • enable_yaw:是否控制偏航角,true:无人机偏航角会进行转动 false:无人机偏航角固定不动

point_cloud_transform:exploration_node的规划结果以一个自定义的话题输出,需要转换为sunray控制节点中的对应的消息

  • input_point_topic:输入的局部点云话题
  • output_point_topic:输出的全局点云话题
  • odom_topic:用于坐标转换的里程计话题
  • frame_id:全局坐标系下的点云数据中填充的 frame_id
  • child_frame_id:全局坐标系下的点云数据中填充的 child_frame_id

接口说明

在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

运行算法

FUEL算法可能会因为依赖包版本、话题订阅等多种原因报错,rviz和算法同时启动也容易报错退出,因此Sunray的启动方法中将启动rviz和算法的启动分成单独的启动launch
仿真中使用了点云数据与仿真定位作为传感器输入,如果真机运行需要自行修改对应的话题和参数

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

复制代码
## 运行fuel脚本
./fuel_sim.sh
/
上一个
ego_planner自主规划模块
下一个
二次开发
最近修改: 2025-06-16