在11(2)中已经将人工势场法避障代码迁移至AirSim中,但是有一些待解决问题,这里一并说明后续的解决方案。

1.障碍物检验

之前使用了AirSim中提供的目标识别接口,主要问题在于

  1. 受到可搜索目标种类的限制,无法识别的物体不会被视作障碍物;
  2. 检测距离受限,在距离小于3米时难以识别。

在拿到了障碍物检测接口后,对相关部分进行替换,以上问题得到较好的解决。这部分内容不是本人负责,相关代码可参考:https://github.com/Kun-k/airsim_python/tree/main/ObstacleDetection。该接口可实时检测障碍物,并返回box3D类型的障碍物信息,如下所示:

'box3D': <Box3D> {   'max': <Vector3r> {   'x_val': 4.900000095367432,
'y_val': 0.7999999523162842,
'z_val': 0.5199999809265137},
'min': <Vector3r> {   'x_val': 3.8999998569488525,
'y_val': -0.19999998807907104,
'z_val': 1.5199999809265137}},

box3D类型提供了8个顶点信息,8个顶点可组成一个立方体,进而得到想要的障碍物信息。

这里取用了x−yx-yxy平面内的4个顶点计算斥力。需注意以下两点:

  1. 检测障碍物时的距离阈值,与避障时的距离阈值定义不同,故计算斥力时需再次确认障碍物是否在距离阈值内。
  2. 直接获取的障碍物信息是在机体坐标系下的信息,需变换至全局坐标系再进行计算。

2.无人机速率和偏航控制

在之前使用LQR方法进行控制,能够较好地控制无人机跟踪目标状态,实现无人机机头朝向与飞行方向的一致。但为了进行速度、加速度限幅,目标状态的速度和加速度并不匹配,控制误差也较大,对无人机的速度限制效果一般。

参考三维航路点跟踪时使用的控制器限幅方法,通过当前速度对控制器输出进行限制,进行如下调整:

# 无障碍物时,三维航路点跟踪的控制器输出
U1 = np.array((K0 * Pt_matrix + K1 * A.dot(Pt_matrix)).T)[0]
if np.linalg.norm(U1, ord=np.inf) > Ul_track:U1 = U1 * Ul_track / np.linalg.norm(U1, ord=np.inf)
U = -(U1 + V_curr) / K2      # 有障碍物时的控制器输出
U = Fatt + Frep
if np.linalg.norm(U, ord=np.inf) > Ul_avoid:U = Ul_avoid * U / np.linalg.norm(U, ord=np.inf)
U = (U - V_curr) / K2    # 改进部分

3.改进局部极小值判断方法

考虑下图所示的情况,无人机由轨迹1-2切换至轨迹2-3时,在航路点2处先减速再加速。

此时速度较小,如加速过程中检测到障碍物,会认为满足航路点检测条件,产生不必要的避障动作。

解决方法为,只在加速运动的过程中进行局部极小值检验。

4.实现效果

改进APF方法与RRT方法结合进行避障飞行

RRT+APF无人机避障飞行

11(3)-AirSim+四旋翼仿真-AirSim中人工势场法方法改进相关推荐

  1. 基于人工势场法的二维平面内无人机的路径规划的matlab仿真,并通过对势场法改进避免了无人机陷入极值的问题

    目录 1.算法描述 2.matlab算法仿真效果 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 人工势场法原理是:首先构建一个人工虚拟势场,该势场由两部分组成,一部分是目标点对移动机器 ...

  2. 第四章:文法中的递归以及消除方法

    在介绍递归文法之前,首先介绍一下递归下降分析器及其原理,然后分析右递归是如何处理的,再来分析左递归和间接左递归. 递归下降分析器 自顶向下语法分析的目的是为输入串寻找最左推导,或者说,从根节点(文法开 ...

  3. 【ParaView教程】第四章 常见问题 —— ParaView中的各种流线生成方法

    流线主要可以分为空间流线和面流线,空间流线是在三维的计算域上生成的流线,面流线是在二维面上生成的流线.下面分别进行介绍. 空间流线 通过点源或线源生成流线 通过点源生成流线的内容可以参考[ParaVi ...

  4. 【AirSim】05.四旋翼的简单动作指令

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.AirSim提供了哪些和移动有关的API? 二.用好`moveByVelocityZ()` 总结 前言 为实现四旋 ...

  5. 四旋翼动力学和仿真翻译(Quadcopter Dynamics and Simulation)

    本文翻译自Andrew Gibiansky的同名文章,该文献介绍了四旋翼的动力学模型和Matlab仿真的具体实现,对四旋翼入门非常有好处.原文如下 http://andrew.gibiansky.co ...

  6. 【飞行器】基于matlab四旋翼无人机控制仿真【含Matlab源码 2238期】

    ⛄一.四旋翼飞行器简介 0 引 言 四旋翼飞行器由于具有可垂直起降.机动性强.操作方便等诸多优点,在军事和民用场合得到广泛应用,从而成为众多学者的研究热点.四旋翼飞行器是具有四输入.六输出的欠驱动.非 ...

  7. 四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(一)

    这里写自定义目录标题 应用环境 hector_quadrotor 功能包结构简介 hector_quadrotor 功能包安装 1. 安装所需依赖库 2. 下载.安装hector_quadrotor ...

  8. 四旋翼无人机建模 (附github源代码)

    前言 四旋翼无人机的应用十分广泛,而且四旋翼无人机是非常理想的控制模型.因为四旋翼是四输入(四个螺旋桨的升力) 六输出 (三个位置,三个姿态角)的欠驱动系统,而且四旋翼的三个姿态角之间是互相耦合的,并 ...

  9. matlab simulink四旋翼无人机模糊PID控制姿态

    1.内容简介 略 532-可以交流.咨询.答疑 2.内容说明 四旋翼无人机控制灵活.安全性能较高,能够实现空中悬停.翻滚.任意角度横 向飞行,常常替代人们从事高空危险作业,给我们的生活与工作带来了很多 ...

  10. python turtle 绘图_谈一下Pycharm中关联系统Python解释器的方法

    大家知道,PyCharm是一款著名的Python IDE开发工具,是拥有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,具备基本的调试.语法高亮.Project管理.代码跳转.智能提示 ...

最新文章

  1. Can't create handler inside thread Thread that has not called Looper.prepare()
  2. LeetCode First Missing Positive
  3. 060_Unicode字符编码
  4. JSON 数据 演示
  5. SAP Spartacus Unit List树形数据的加载
  6. CVPR 2019 Oral 目标跟踪最强算法SiamRPN++开源实现
  7. 计算机教育专业需要学什么,教育知识:计算机专业都学什么
  8. 谷粒商城高级篇爬坑笔记--错误异常信息乱码问题
  9. SQLServer数据库字典维护方法
  10. php定时器使用,PHP实现javascript的定时器
  11. 地理加权归回模型 (GWR) 参数估计
  12. 澜沧江某水电站下坝址坝址初步设计
  13. win10微信打电话对方听不到你的声音,你能听到对方声音
  14. H3C交换机机框首次启动报错“The device (FFFFFFFF-40) doesn‘t support this kind of board.”
  15. 经典DP题目-滑雪问题
  16. Netty系列进阶篇一:阻塞和多路复用到底是个啥?
  17. 设计模式之访问者模式(Vistor)
  18. 【数据库】用户管理---君权神授
  19. ArcGIS工具 - 批量删除空图层
  20. android 根据图片路径获取图片缩略图

热门文章

  1. php 后台运行,php程序后台运行的实现方法
  2. XP桌面背景文件路径
  3. iOS手势UIGestureRecognizer的使用及手势冲突的解决办法【转】
  4. web前端js上传文件
  5. 助你成为专业终端人,阿里巴巴第三届终端练习生计划开启报名!
  6. 中国版Kindle Paperwhite使用评测
  7. python aiml开发文档_使用Python AIML搭建聊天机器人的方法示例
  8. 绕过广告拦截插件的解决方案
  9. 计算机英语名词解释之软件工程篇
  10. js ajax上传file文件上传,使用ajaxfileupload.js实现上传文件功能