在轨迹规划过程中,常将其它智能体视为具有一定半径的球形障碍物(或圆形障碍物)。若求智能体与障碍物最近的边缘点,其本质即求两点连线与其中一点为球心球的交点。

求的方法有多种,这里采用雅克比矩阵的方法。

雅克比矩阵求坐标

我们设定智能体(其中一点)的坐标为,障碍物中心(另一点,同时为球心)坐标为,障碍物为半径为。则智能体与障碍物中心距离

则,可求其雅可比矩阵为:

由雅克比矩阵我们可得到:

其中,为沿连线远离球心方向上变化的距离,为三维坐标的变化。由此,可得

其中,为雅可比矩阵的伪逆,可求得通过

由此,我们得到相距球心且在两点连线上的点的坐标为:

MATLAB函数

由以上公式可构建MATLAB函数为:

function fpo=State3(xi,xo,r)
pd=norm(xi-xo,2);
JA=[(xi(1,1)-xo(1,1))/pd,(xi(2,1)-xo(2,1))/pd,(xi(3,1)-xo(3,1))/pd];
pJA=pinv(JA);
fpo=xo+pJA*r;
end

MATLAB实例

clear;
clc;
close all;%%
%参数设定
Rer=1.3;                            %球半径
UAV1=[5;5;5];                       %障碍物坐标
UAV2=[6.5; 6.5; 5.8];               %另一点坐标
fpo=State3(UAV2,UAV1,Rer);          %计算坐标
%%
figure
h1=plot3(UAV1(1,1),UAV1(2,1),UAV1(3,1),'^g','LineWidth',2); hold on;
h2=plot3(UAV2(1,1),UAV2(2,1),UAV2(3,1),'b^','LineWidth',2);
h3=plot3(fpo(1,1),fpo(2,1),fpo(3,1),'r*','LineWidth',2);
h4=plot3([UAV1(1,1),fpo(1,1)],[UAV1(2,1),fpo(2,1)],[UAV1(3,1),fpo(3,1)],':r','LineWidth',2);
plot3([UAV2(1,1),fpo(1,1)],[UAV2(2,1),fpo(2,1)],[UAV2(3,1),fpo(3,1)],'b','LineWidth',1);
[x,y,z]=ellipsoid(UAV1(1,1),UAV1(2,1),UAV1(3,1),Rer,Rer,Rer);
re=[1 1 1];
colormap(re)
surf(x,y,z);
alpha(0.7);
legend([h2,h1,h3,h4],'智能体中心','障碍物中心','交点','球体半径');
xlabel("x (m)");
ylabel("y (m)");
zlabel("z (m)");
axis equal;%%
function fpo=State3(xi,xo,r)
pd=norm(xi-xo,2);
JA=[(xi(1,1)-xo(1,1))/pd,(xi(2,1)-xo(2,1))/pd,(xi(3,1)-xo(3,1))/pd];
pJA=pinv(JA);
fpo=xo+pJA*r;
end

求两点连线与其中一点为球心球的交点——赋MATLAB代码相关推荐

  1. js 计算在AB两点连线上,距离A点一定距离的点的坐标

    /*** @description 获取在AB两点连线上,以AB为方向,距离A点,L处的点的坐标* @param A:{x,z} 点A* @param B:{x,z} 点B* @param L 距A点 ...

  2. unity3d:向量计算:获得两点连线的垂直向量,判断目标方位(前后左右)

    获得两点连线垂直向量 /// <summary>/// 获取某向量的垂直向量/// </summary>public static Vector3 GetVerticalDir ...

  3. 求大神帮忙,想要一元20次方程的解matlab代码,在线等,(解一元20次方程的解matlab代码)

    求大神帮忙,想要一元20次方程的解matlab代码,在线等,(解一元20次方程的解matlab代码) 已知y是一个1*101的数组如下,函数如下,想求得x 135 130 134 128 129 13 ...

  4. css 定位连线_前端css实现两点连线

    // dots是点的集合 : Array dots.map((dot, index) => { // 最后一个点没有连线 if (!dot[index + 1]) return; const A ...

  5. 点到另外两点连线的垂足计算

    假设空间某点O的坐标为(Xo,Yo,Zo),空间某条直线上两点A和B的坐标为:(X1,Y1,Z1),(X2,Y2,Z2),设点O在直线AB上的垂足为点N,坐标为(Xn,Yn,Zn).点N坐标解算过程如 ...

  6. html5点线动画,HTML5带音效的两点连线动画

    JavaScript 语言: JaveScriptBabelCoffeeScript 确定 (function() { var App = function() { this.el_svg = doc ...

  7. python 两点连线 matplotlib

    1. 若想要将两点之间连接起来: import matplotlib.pyplot as plt p1 = [x1, y1] #点p1的坐标值 p2 = [x2, y2] #点p2的坐标值 plt.p ...

  8. python求两个数的最大值、用带参函数实现_Python有参函数使用代码实例

    这篇文章主要介绍了Python有参函数使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.给定验证码长度n,生成随机验证码,验证码由数字 ...

  9. unity随机获取两个坐标点之间连线上的一点

    /// <summary>/// 返回两个坐标点连线上的随机一点/// </summary>/// <param name="post1">&l ...

最新文章

  1. VUE 新手入门感慨
  2. 为别人做嫁衣——代理模式
  3. 安装了silverlight还是提示_win10系统安装.netframework3.5方法
  4. SQLServer查找已知数相邻前后数
  5. 设计psd分层素材模板|家居海报设计思路!
  6. CentOS/Ubuntu/Debian常用版本更换国内源的方法
  7. 第三季-第14课-有名管道通讯编程
  8. Ubuntu解决包依赖关系
  9. Java搭建网站相关知识整理(新手上路)
  10. 如何根据芯片手册时序图编写驱动程序
  11. wps垂直居中快捷键_水平与垂直居中怎么设置 在wps中的水平垂直居中在哪
  12. DM7在linux下部署
  13. 美国这100年来一共发生了多少次金融危机
  14. React之Protals详解
  15. 生成树协议STP(Spanning Tree Protocol)
  16. Android 之注册Facebook开发者账号
  17. 哪款蓝牙耳机的续航比较好?四款续航时间长的蓝牙耳机测评
  18. 机器人学关于SE(3)、se(3)、SO(3)、so(3)的理解
  19. AD10 PCB文件统一设置字体大小(默认字体大小)
  20. 有什么项目工时管理工具?

热门文章

  1. 使用小程序云开发添加背景音乐
  2. 基于大数据技术之电视收视率企业项目实战(hadoop+Spark)
  3. gem devise配置
  4. 2020 中秋、国庆快乐!
  5. man page 中代号的意思
  6. Receptive Field Block Net 论文阅读
  7. 沃趣赵晨 | 从技术岗位到产品经理:漫谈IT产品经理的生存之道
  8. Foo,getName题解分析
  9. 三月的雨季给我带来了希望
  10. Excel VLOOKUP() 函数实现自动填充内容