路径跟踪之导航向量场(二)——三维导航向量场

上一期文章介绍了二维平面下的导航向量场计算方法,本期文章将介绍三维空间中,导航向量场及扩展。

本文主要介绍论文[1]中提出的一种基于导航向量场的航迹跟踪算法。此外,虽然本文以三维航迹为例进行介绍,但该方法可非常方便的拓展到高维曲线中。

在文章的评论区,给大家准备了相关文献和仿真代码的领取~

导航向量场优势

路径跟踪算法有多种不同的实现方法,主要可分为基于控制论的和基于几何的两大类。其中基于控制论的方法往往实现困难,在非完整约束下导出的控制律复杂,往往难以应用于实际工程中;而基于几何的方法主要有视线法和本文针对的向量场法两大类。

基于视线的方法通过不断将无人机航向与视线方向对齐来实现航迹的跟踪,而向量场法则根据期望航迹计算直接导出每个点对应的期望飞行方向。视线法可适用于任何轨迹,而向量场法则适用于可解析表达的轨迹。通过参数曲线拟合、分段等手段可大大拓展向量场法可使用的轨迹类型。有文章[2]表明,在这几类算法中,基于向量场的航迹跟踪算法所需要的控制消耗最少且跟踪精度最高。相较于其他基于导航向量场的航迹跟踪算法,本文所介绍的方法还具有计算量小、实现简单等优点。

三维导航向量场

有些向量场构建方式是计算无人机到曲线上距离最近的点,构建收敛项使得无人机收敛至期望轨迹。上一期文章中,我们也介绍过通过设计隐函数来表示期望轨迹,将坐标点带入轨迹函数算作距离误差,巧妙的避免的计算欧式距离、寻找最近点的繁琐计算。基于误差计算收敛项和传播项,构建导航向量场。接下来介绍三维空间如何表示期望轨迹和误差,以及导航向量场的构建。

期望轨迹和误差的表示

曲线定义:一条 n n n维的曲线可表示为 n − 1 n-1 n1个隐函数的零水平集的交集。以三维曲线为例:
P = { x : ϕ i ( x ) = 0 , i = 1 , 2 } \mathcal P = \{\pmb x:\phi_i(\pmb x)=0, i=1,2\} P={x:ϕi(x)=0,i=1,2}
式中 x = [ x , y , z ] ∈ R 3 \pmb x=[x,y,z]\in\mathbb R^{3} x=[x,y,z]R3表示三维空间中的点, ϕ i ( x ) = 0 \phi_i(\pmb x)=0 ϕi(x)=0表示 ϕ i \phi_i ϕi的零水平集,也即是一个曲面。

为更好的说明水平集的概念,举例:一个原点为 ( 0 , 0 , 0 ) (0, 0, 0) (0,0,0)、半径为 10 10 10的曲面可表示为: ϕ ( x ) = x 2 + y 2 + z 2 − 10 = 0 \phi(\pmb x)=\sqrt{x^2 + y^2 + z^2}-10=0 ϕ(x)=x2+y2+z2 10=0;而隐函数 ϕ ( x ) \phi(\pmb x) ϕ(x) k k k水平集即是 ϕ ( x ) = k \phi(\pmb x)=k ϕ(x)=k时的解,显然 ϕ ( x ) \phi(\pmb x) ϕ(x)的不同水平集是互不相交的同心圆面,可以证明任意一个隐函数的不同水平集都是互不相交的。

误差定义:得益于水平集的概念,我们可以直接利用当前点所处的水平集来表示误差,从而避免了计算欧式距离误差。点 x \pmb x x处的误差为:
e ( x ) = [ e 1 ( x ) , e 2 ( x ) ] \pmb e(\pmb x) = \begin{bmatrix}e_1(\pmb x), e_2(\pmb x)\end{bmatrix} e(x)=[e1(x),e2(x)]
式中 e i ( x ) = ϕ i ( x ) e_i(\pmb x) = \phi_i(\pmb x) ei(x)=ϕi(x)

导航向量场的构建

导航向量场由传播项和收敛项两项组成:
χ ( x ) = χ t ( x ) + χ n ( x ) \chi(\pmb x) = \chi_t(\pmb x)+\chi_n(\pmb x) χ(x)=χt(x)+χn(x)
式中 χ t \chi_t χt为传播项,指引着无人机沿着期望轨迹的方向前进; χ n \chi_n χn为收敛项,为无人机提供靠近期望航迹的方向。

传播项 χ t \chi_t χt即为曲线的切线方向:
χ t = a ∇ ϕ 1 × ∇ ϕ 2 \chi_t=a\nabla\phi_1\times \nabla\phi_2 χt=aϕ1×ϕ2
式中 a = 1 a=1 a=1 − 1 -1 1,决定无人机沿着曲线正向或者逆向运动。 ∇ ϕ 1 \nabla\phi_1 ϕ1 ∇ ϕ 2 \nabla\phi_2 ϕ2为曲面的偏导。

收敛项 χ n \chi_n χn可构建为:
χ n = − ∑ i = 1 2 k i ϕ i ∇ ϕ i \chi_n = -\sum_{i=1}^{2} k_i\phi_i\nabla\phi_i χn=i=12kiϕiϕi
式中 k i > 0 k_i>0 ki>0为收敛项增益系数。

可以证明,无人机沿着导航向量场提供的方向飞行,最终可收敛到期望轨迹上。证明过程见《Path following control in 3D using a vector field》的Proposition 1。

有意思的是, χ n \chi_n χn χ t \chi_t χt是互相垂直的。 χ n \chi_n χn的方向是当前点所在的两个水平集指向各自的0水平集的法向量的矢量和,因此 χ n \chi_n χn总是使得误差减小;而 χ t \chi_t χt是当前点所在两水平集的公切线,沿着 χ t \chi_t χt飞行并不会导致水平集的变化。两者相互作用各司其职,使得无人机在沿着期望轨迹方向飞行的同时误差逐渐收敛。

注意:

  1. 导航向量场中可能存在奇异点,也就是 χ ( x ) = 0 \chi(\pmb x)=\pmb 0 χ(x)=0的点。幸运的是这些点为不稳定点,可使无人机保持上一时刻的飞行方向,从而飞过奇异点。
  2. 导航向量场仅提供期望飞行方向信息,不指示速度,因此可对其进行归一化后使用。

数值仿真

为便于分析算法效果,令:
x ˙ = v χ ( x ) ∣ ∣ χ ( x ) ∣ ∣ \dot{\pmb x}=v\frac{\chi(\pmb x)}{||\chi(\pmb x)||} x˙=v∣∣χ(x)∣∣χ(x)
进行数值仿真实验。式中 v v v为设定的速度,本次仿真设定为1。

以一个球面和一个圆柱面相交形成的期望轨迹为例(具体参数参见附录的代码)。分别设置收敛项的增益系数为0.1(蓝色轨迹)和0.5(红色轨迹)。可见收敛项增益越大,曲线越快的收敛至期望轨迹;而增益越小,收敛越慢但曲线相对而言更加平缓。读者可根据自身需求选择合适的增益。

总结

本文所介绍的基于导航向量场的航迹跟踪方法可引导无人机平稳的收敛至期望轨迹并稳定跟踪。该方法计算量小、实现简单,并且该方法仅提供导航信息(期望飞行方向),因此使用者可根据所应用的具体对象的运动/动力学模型设计航向控制器,从而将GVF应用于不同模型。

不过,该方法有一个的缺点:期望轨迹局限性大。该方法中期望轨迹由两个曲面相交得到,实际应用场景中期望轨迹往往并不是解析表达的(比如多个航迹点形成的期望轨迹),这种情况下如何根据期望轨迹反推曲面是一个难题。一个直观的解决思路时利用分段的方法,将期望轨迹拟合为分段的解析表达形式,但该方法又将引入如何在不同段间切换向量场的难题。

后续将介绍该论文作者的后续工作[3],该文章将期望轨迹进行参数化,从而解决向量场的奇异点问题。这种实现方法也为我们提供了另一个解决期望轨迹无法解析表达问题的可能性:用户可首先利用参数曲线对轨迹进行拟合,得到与原始轨迹十分接近的有解析表达式的参数曲线,再利用该方法构建导航向量场。敬请期待!

后台回复“GVF3d”,即可领取相关文献和仿真代码。

参考文献及链接

[1]Yao W. Path following control in 3D using a vector field[M]//Guiding Vector Fields for Robot Motion Control. Cham: Springer Nature Switzerland, 2023: 39-62.

[2]Sujit P B, Saripalli S, Sousa J B. Unmanned aerial vehicle path following: A survey and analysis of algorithms for fixed-wing unmanned aerial vehicless[J]. IEEE Control Systems Magazine, 2014, 34(1): 42-59.

[3]Yao W, de Marina H G, Lin B, et al. Singularity-free guiding vector field for robot navigation[J]. IEEE Transactions on Robotics, 2021, 37(4): 1206-1221.

END

后续会陆续带来规划、控制相关的文章、仿真分享。

迅翼SwiftWing致力于固定翼技术共享,汇聚固定翼领域技术极客,推动固定翼技术持续创新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法-生物地理学算法(BBO)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 生物地理学优化算法 (Biogeography-Based Optimization, BBO) 是一种基于生物地理学原理的元启发式优化算法,由Dan Simon于2008年提出。BBO通过模拟物种在不同栖息地之间的迁移过程来搜索最优解&…

【JavaEE】——四次挥手,TCP状态转换,滑动窗口,流量控制

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:断开连接的本质 二:四次挥手 1:FIN 2:过程梳理 …

自制RK3588板卡调试,解决启动卡死问题

自制RK3588板卡调试,解决启动卡死问题。 1:首次加载后,启动卡住在HDMI。log如下。 DDR 3488111f83 cym 24/04/12-12:49:26,fwver: v1.17 LPDDR4X, 1560MHz channel[0] BW16 Col10 Bk8 CS0 Row17 CS1 Row17 CS2 Die BW16 Size4096MB channel…

新时代AI桌宠:XGO Rider让你的办公室瞬间高大上

​ XGO Rider Luwu 智能打造了桌面双轮足式机器人 XGO Rider,这款全球首创的轮腿式桌面AI机器人,正在悄然改变我们的办公环境。它不仅是一个高科技玩具,更是一个能大幅提升工作效率和办公室科技感的智能助手。 XGO Rider 新时代“桌宠” micr…

基于java+springboot的宇宙动漫网站

文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图 前言 文章底部名片,获取项目的完整演示视频,免费解答技术疑问 项目介绍 本系统为用户而设计制作宇宙动漫网站,旨在实现宇宙动漫智能化、现代化管理。本宇宙动漫管理自…

爬虫——scrapy的基本使用

一,scrapy的概念和流程 1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 框架就是把之前简单的操作抽象成一套系统,这样我们在使用框架的时候,它会自动的帮我们完成很…

【数据结构与算法】之有序链表去重(保留重复元素)

目录 1.问题描述 2.思路讲解 3.Java 代码实现 4.代码解释 5.复杂度分析 6.其它方法 6.1 递归实现 6.2 双指针 7.总结 相关教程: 有序链表去重(不保留重复元素) 数据结构之链表详解 递归详解 1.问题描述 给定一个已排序的单链表…

Java可以做人工智能吗-回答是当然可以

Java在人工智能应用开发中的角色与优势 人工智能主要分为两个部分:一个是做底层的大语言模型的训练,另一个是基于大模型进行业务应用。Java最适合做的就是第二个方面,即基于大模型构建业务应用。由于过去大量的企业级应用都是使用Java开发的…

网络服务请求流程简单理解

网络流程: DNS负责将域名解析为IP地址,ALB可以在多个服务实例之间分配流量,APISIX作为API网关处理更细粒度的流量管理,Service在Kubernetes中为Pod提供稳定的访问入口,而Kubernetes则负责整个应用的部署、扩展和运维。…

Java项目-基于springboot框架的逍遥大药房管理系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

【UML】一个UML学习的还不错的几个帖子

https://segmentfault.com/a/1190000042775634 寂然解读设计模式 - UML类图&类的六大关系-阿里云开发者社区

金融衍生品中的风险对冲策略分析

金融衍生品是现代金融市场中不可或缺的一部分,它们通过标的资产的价格波动为投资者提供了多样的风险管理工具。随着市场的不确定性和复杂性增加,风险对冲成为企业和个人投资者的首要任务。本文将深入探讨金融衍生品中的常见风险对冲策略,分析…

Java中Log4j的配置与使用详细解析

Log4j Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件。 也可以控制每一条日志的输出格式; 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 这些…

【视频编码】BD-BR和BD-PSNR

目录 1.BD-BR2.BD-PSNR 在视频编码标准中,常使用BD-BR来描述一个算法的优劣性。在评估新的算法时,需要测试4个码率点,获得对应的4个PSNR点,这样能够在R-D平面获取一条R-D曲线。同样地,基于前面4个码率点,在…

最佳简历--JAVA程序员的项目经验如何写

小熊学Java全能学习+面试指南:https://www.javaxiaobear.cn 首先你要明确,你能干什么,包括你自己编写的专业技能,到底会不会,怎么运用到技术上的? 1、你能干什么? 你能干什么,其实就展现你的能力,这是简历中最重要的部分,你需要证明前面说的你会的东东; 这就有点…

【前端】如何制作一个自己的网页(14)

当我们还需要对网页中的内容进行局部样式的修改。这时候,就需要用到HTML中的重要元素:span。 span是一个行内元素,可以对HTML文档中的内容进行局部布局。 如图,我们给标题和段落元素的部分内容设置了各种样式。 接下来&#xff0…

rk3588 opencv 的使用

-------------------------------------------------------------------------------------------------------- 目前是 3588 上无法 直接编译出 C程序。 报错如下: -----------------------------------------------------------------------------------------…

LeetCode 精选 75 回顾

目录 一、数组 / 字符串 1.交替合并字符串 (简单) 2.字符串的最大公因子 (简单) 3.拥有最多糖果的孩子(简单) 4.种花问题(简单) 5.反转字符串中的元音字母(简单&a…

【版本管理】cmake 编译的 c++ 可执行文件输出 git commit 版本(即 hash 值)

文章目录 问题解决方法1. cmake 中获取 git version2. 程序中输出 git version3. 运行效果 问题 常常排查 bug 时,不知道当前运行的可执行文件到底是哪个版本代码编译出来的,无法快速判断需要修改哪一份代码。因此需要输出可执行文件的源码 git commit …