无人机自主探索FUEL:代码阅读2--算法重要参数

这篇具有很好参考价值的文章主要介绍了无人机自主探索FUEL:代码阅读2--算法重要参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、 主要launch文件 exploration.launch

 <!-- 整体地图尺寸   size of map, change the size in x, y, z according to your application  50 50 10-->
  <arg name="map_size_x" value="50.0"/>
  <arg name="map_size_y" value="50.0"/>
  <arg name="map_size_z" value=" 10.0"/>
  <!-- 无人机初始位置 -->
  <arg name="init_x" value="0"/>
  <arg name="init_y" value="0"/>
  <arg name="init_z" value="1.0"/> 
  
    <!-- 边对界簇做AABB框的参数 改变探索范围 -10.-15010152 -->
    <arg name="box_min_x" value="-5.0"/>
    <arg name="box_min_y" value="-15.0"/>
    <arg name="box_min_z" value=" 0.0"/>
    <arg name="box_max_x" value="5.0"/>
    <arg name="box_max_y" value="15.0"/>
    <arg name="box_max_z" value=" 2.0"/>

  <!-- ODOM对应的topic -topic of your odometry such as VIO or LIO -->
  <arg name="odom_topic" value="/state_ukf/odom" />
 <!-- 相机内参  intrinsic params of the depth camera -->
    <arg name="cx" value="321.04638671875"/>
    <arg name="cy" value="243.44969177246094"/>
    <arg name="fx" value="387.229248046875"/>
    <arg name="fy" value="387.229248046875"/>

    <!-- 无人机速度、加速度上限  maximum velocity and acceleration the drone will reach -->
    <arg name="max_vel" value="2.0" />
    <arg name="max_acc" value="2.0" />

    <!-- 轨迹id,函数displayTrajWithColor中对traj_cmd_进行显示 -->
    <param name="traj_server/pub_traj_id" value="4" type="int"/>
    <param name="traj_server/init_x" value="$(arg init_x)" type="double"/>
    <param name="traj_server/init_y" value="$(arg init_y)" type="double"/>
    <param name="traj_server/init_z" value="$(arg init_z)" type="double"/>
    <!-- 传感器视角范围 80*60deg  0.69对应80deg-->
    <param name="perception_utils/top_angle" value="0.56125" type="double"/>
    <param name="perception_utils/left_angle" value="0.69222" type="double"/>
    <param name="perception_utils/right_angle" value="0.68901" type="double"/>
    <!-- 传感器最大范围 原4.5m 改动每变化?-->
    <param name="perception_utils/max_dist" value="4.5" type="double"/>
    <!-- FOV上下左右距离 原1.0  改小后,FOV对应红色边框变小-->
    <param name="perception_utils/vis_dist" value="1.0" type="double"/>
  

其中,在改变了地图尺寸时,会出现将扫描后的内容重复拼接出现的情况,例如将地图尺寸设为x=20, y=20
无人机自主探索FUEL:代码阅读2--算法重要参数,无人机,算法,FUEL

2. 算法主要参数文件 algorighm.xml

exploration.launch中被调用
主要节点以及算法参数:

    <remap from ="/odom_world" to="$(arg odometry_topic)"/>
    <remap from ="/map_ros/pose"   to = "$(arg sensor_pose_topic)"/>      位置信息
    <remap from ="/map_ros/depth" to = "$(arg depth_topic)"/>             深度信息

 <!-- 障碍物膨胀系数 -->
    <param name="sdf_map/obstacles_inflation"     value="0.199" /> 
    <param name="sdf_map/local_bound_inflate"    value="0.5"/>
    <!-- 地图边缘 原 50-->
    <param name="sdf_map/local_map_margin" value="50"/>


	 <!-- Fsm fast_exploration_fsm.cpp 中使用-->
    <!-- 轨迹基本执行后重规划时间阈值 -->
    <param name="fsm/thresh_replan1" value="0.5" type="double"/>
    <!-- 边界被覆盖,重新规划时间阈值 -->
    <param name="fsm/thresh_replan2" value="0.5" type="double"/>
    <!-- 定时重规划时间 -->
    <param name="fsm/thresh_replan3" value="1.5" type="double"/>


		<!-- Exploration manager 对应使用在 fast_exploration_manager.cpp中-->
		 <param name="exploration/refine_local" value="true" type="bool"/>
    <!-- 进行优化的视点数量上限 -->
    <param name="exploration/refined_num" value="7" type="int"/>
     <!-- 全环境搜索的截断半径,应该与fast_exploration_manageer.cpp中的radius_far联系起来 -->
    <param name="exploration/refined_radius" value="5.0" type="double"/>
    
    <!-- max_decay,top_view_num在函数getNViewPoints中用于获得N个视点 -->
    <param name="exploration/max_decay" value="0.8" type="double"/>
    <param name="exploration/top_view_num" value="15" type="int"/>
    <!-- 计算视点代价函数的参数 -->
    <param name="exploration/vm" value="$(eval 1.0 * arg('max_vel'))" type="double"/>
    <param name="exploration/am" value="$(eval 1.0 * arg('max_acc'))" type="double"/>
    <param name="exploration/yd" value="$(eval 60 * 3.1415926 / 180.0)" type="double"/>
    <param name="exploration/ydd" value="$(eval 90 * 3.1415926 / 180.0)" type="double"/>
    <param name="exploration/w_dir" value="1.5" type="double"/>      没有用到
    <!-- 旅行商算法求解依赖路径 -->
    <param name="exploration/tsp_dir" value="$(find lkh_tsp_solver)/resource" type="string"/>
 <!-- 在planner_manager.cpp中使用 -->
  <!-- 簇聚类与检查相关系数 -->
    <param name="frontier/cluster_min" value="100" type="int"/>        
    <!-- 对簇主成分分析的参数 -->
    <param name="frontier/cluster_size_xy" value="2.0" type="double"/>
    <!-- 未查到使用 -->
    <param name="frontier/cluster_size_z" value="10.0" type="double"/>
    <!-- 检测视点覆盖率的参数 -->
    <param name="frontier/min_candidate_dist" value="0.75" type="double"/>
    <!-- //检测簇距离的参数 -->
    <param name="frontier/min_candidate_clearance" value="0.21" type="double"/>
    <!-- dphi,rnum,rmin,rmax:在sampleViewpoints函数中用于检测视点覆盖率 -->
    <param name="frontier/candidate_dphi" value="$(eval 15 * 3.1415926 / 180.0)" type="double"/>
    <param name="frontier/candidate_rnum" value="3" type="int"/>
    <param name="frontier/candidate_rmin" value="1.5" type="double"/>
    <param name="frontier/candidate_rmax" value="2.5" type="double"/>
    <!-- 簇降采样参数 -->
    <param name="frontier/down_sample" value="3" type="int"/>;
    <!-- 用于保留视点数量的参数 -->
    <param name="frontier/min_visib_num" value="15" type="int"/>;

(1)vm,am,yd,ydd,w_dir

在函数ViewNode::computeCost中被使用,用于计算视点之间的位置、速度、yaw角代价,对应原文VI.C部分,公式(1),最后得到将代价保存在FIS中,当簇过时代价一并删除
(但其中仅vm,yd,w_dir使用了)

double ViewNode::computeCost(const Vector3d& p1, const Vector3d& p2, const double& y1, const double& y2,
                             const Vector3d& v1, const double& yd1, vector<Vector3d>& path) {
  // Cost of position change
  double pos_cost = ViewNode::searchPath(p1, p2, path) / vm_;

  // Consider velocity change
  if (v1.norm() > 1e-3) {
    Vector3d dir = (p2 - p1).normalized();
    Vector3d vdir = v1.normalized();
    double diff = acos(vdir.dot(dir));
    pos_cost += w_dir_ * diff;
  }

  // Cost of yaw change
  double diff = fabs(y2 - y1);
  diff = min(diff, 2 * M_PI - diff);
  double yaw_cost = diff / yd_;
  return max(pos_cost, yaw_cost);
}

!!!

其中,在计算代价时使用了A* 来计算无碰撞路径,调用了Astar2.cpp,在簇不同时调用Astar2.cpp的次数不同,即Astar2.cpp仅用于计算簇的代价,是仅用2个视点进行规划。主体算法的规划使用kinodynamicAstar.cpp来计算。 可以在终端中看出规划的使用区别:

[FSM]: from PLAN_TRAJ to EXEC_TRAJ
[ INFO] [1689835929.587823117]: [FSM]: state: EXEC_TRAJ
[FSM]: from EXEC_TRAJ to PLAN_TRAJ
[ WARN] [1689835930.017565323]: Replan: cluster covered=====================================
[ WARN] [1689835930.027529959]: min_id 0.000000 0.000000 0.000000: 
[ WARN] [1689835930.027559013]: max_id 0.000000 0.000000 0.000000: 
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------

[ WARN] [1689835930.033240569]: Cost mat: 0.001881, TSP: 0.000355
[Dijkstra Search] Node: 17, edge: 30
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
[Kino replan]: start: start_pt = -1.03064  8.31489  1.16124, start_vel = -0.382292  0.385339 -0.232095, start_acc =  -1.54011 -0.202278 -0.704203
[Kino replan]:  goal: end_pt = -2.92632  7.96307  1.18743, end_vel = 0 0 0
--------------KinodynamicAstar begin to search ----------------------
vel:-1.4467, acc:2.02864
near end
[non uniform B-spline] A size	120
[planner manager] B-spline时间间隔: dt_yaw: 0.0769338, start yaw:   3.01219  0.361323 -0.590218, end_yaw: -2.26126
[FSM]: from PLAN_TRAJ to EXEC_TRAJ
[FSM]: from EXEC_TRAJ to PLAN_TRAJ
[ WARN] [1689835930.469860361]: Replan: traj fully executed=================================
[ WARN] [1689835930.477673706]: min_id 0.000000 0.000000 0.000000: 
[ WARN] [1689835930.477725216]: max_id 0.000000 0.000000 0.000000: 
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------

[ WARN] [1689835930.481764293]: Cost mat: 0.001246, TSP: 0.000382
[Dijkstra Search] Node: 17, edge: 30
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
------------------- Astar2 begin to search ---------------------
[Kino replan]: start: start_pt = -1.27208  8.47133  1.06096, start_vel = -0.793755  0.295399 -0.209913, start_acc =  -1.53363 -0.305818 0.0625115
[Kino replan]:  goal: end_pt = -3.78867  5.34186  1.14388, end_vel = 0 0 0
--------------KinodynamicAstar begin to search ----------------------
open set empty, no path!

(2)“sdf_map/local_map_margin”

map_ros.cpp中被用到,具体的效果影响不是很确定。

  Eigen::Vector3i min_cut = map_->md_->local_bound_min_ - Eigen::Vector3i(map_->mp_->local_map_margin_,
                                                                          map_->mp_->local_map_margin_,
                                                                          map_->mp_->local_map_margin_);
  Eigen::Vector3i max_cut = map_->md_->local_bound_max_ + Eigen::Vector3i(map_->mp_->local_map_margin_,
                                                                          map_->mp_->local_map_margin_,
                                                                          map_->mp_->local_map_margin_);

(3)与exploration.launch重复的参数(修改时需要注意修改哪个文件)


    <param name="perception_utils/top_angle" value="0.56125" type="double"/>;      传感器向上角度60<param name="perception_utils/left_angle" value="0.69222" type="double"/>;      传感器左右角度80<param name="perception_utils/right_angle" value="0.68901" type="double"/>;
    <param name="perception_utils/max_dist" value="4.5" type="double"/>;         仿真实验中调整后区别不大,不知道是否表示传感器向前方探测的距离(m)
    <param name="perception_utils/vis_dist" value="1.0" type="double"/>;     传感器FOV尺寸(红色三角)

!!!:
其中,在heading_planner.cpp中,写死了相机FOV的参数,可能影响了在algorithm.xml中调参的效果

// camera FoV params
        far_ = 4.5;
// normals of hyperplanes
        const double top_ang = 0.56125;

        const double left_ang = 0.69222;
        const double right_ang = 0.68901;

3. 影响时间的参数

所在文件 参数名称 具体含义
algorithm.xml <param name="fsm/replan_time" value="0.200" type="double"/> 重规划时间

To be continue …文章来源地址https://www.toymoban.com/news/detail-657147.html

到了这里,关于无人机自主探索FUEL:代码阅读2--算法重要参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于视觉的无人机自主降落系统设计

    无人机的自主化降落过程里,从传统的地标识别法里面可以看到,实验需要大量的实验测试。为了解决这一问题,提出了一种基于仿射不变矩和支持向量机的方法。第一,六个以某个半径画圆将其组合为整体图标,可以被认为是无人机自主降落的地面标识。这是因为无人机自

    2024年01月25日
    浏览(34)
  • 【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 ​ 随着

    2023年04月22日
    浏览(79)
  • 【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)

      💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 对于

    2024年04月28日
    浏览(29)
  • 【无人机】基于遗传算法混合粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)

      💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 对于

    2024年04月25日
    浏览(36)
  • 超维空间S2无人机使用说明书——55、代码详解:基础PID算法控制无人机的跟随代码详解

    PID,即比例 Proportion、积分 Integral 和微分 Derivative 三个单词的缩写;比例积分微分控制,简称PID控制。 简单讲,根据给定值和实际输出值构成控制偏差,将偏差按比例、积分和微分通过线性组合构成控制量,对被控对象进行控制。 常规 PID 控制器作为一种线性控制器。 步骤

    2024年01月21日
    浏览(42)
  • 基于和声算法的无人机航迹规划-附代码

    摘要:本文主要介绍利用和声算法来优化无人机航迹规划。 和声算法原理请参考:https://blog.csdn.net/u011835903/article/details/118724731 ? 环境模型的建立是考验无人机是否可以圆满完成人类所赋予各项任务的基 础和前提,其中第一步便是如何描述规划空间中的障碍物。首先我们将采

    2024年02月06日
    浏览(41)
  • 基于蜣螂算法的无人机航迹规划-附代码

    摘要:本文主要介绍利用蜣螂算法来优化无人机航迹规划。 蜣螂搜索算法的具体原理参考博客:https://blog.csdn.net/u011835903/article/details/128280084 ​ 环境模型的建立是考验无人机是否可以圆满完成人类所赋予各项任务的基 础和前提,其中第一步便是如何描述规划空间中的障碍物

    2024年02月11日
    浏览(27)
  • 基于松鼠算法的无人机航迹规划-附代码

    摘要:本文主要介绍利用松鼠算法来优化无人机航迹规划。 松鼠算法原理请参考:https://blog.csdn.net/u011835903/article/details/116223542 ? 环境模型的建立是考验无人机是否可以圆满完成人类所赋予各项任务的基 础和前提,其中第一步便是如何描述规划空间中的障碍物。首先我们将采

    2024年02月06日
    浏览(27)
  • 基于供需算法的无人机航迹规划-附代码

    摘要:本文主要介绍利用供需算法来优化无人机航迹规划。 供需算法原理请参考:https://blog.csdn.net/u011835903/article/details/118800934 ? 环境模型的建立是考验无人机是否可以圆满完成人类所赋予各项任务的基 础和前提,其中第一步便是如何描述规划空间中的障碍物。首先我们将采

    2024年02月06日
    浏览(28)
  • 基于野狗算法的无人机航迹规划-附代码

    摘要:本文主要介绍利用野狗算法来优化无人机航迹规划。 野狗算法原理请参考:https://blog.csdn.net/u011835903/article/details/122368818 ? 环境模型的建立是考验无人机是否可以圆满完成人类所赋予各项任务的基 础和前提,其中第一步便是如何描述规划空间中的障碍物。首先我们将采

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包