求两点连线与其中一点为球心球的交点——赋MATLAB代码
在轨迹规划过程中,常将其它智能体视为具有一定半径的球形障碍物(或圆形障碍物)。若求智能体与障碍物最近的边缘点,其本质即求两点连线与其中一点为球心球的交点。
求的方法有多种,这里采用雅克比矩阵的方法。
雅克比矩阵求坐标
我们设定智能体(其中一点)的坐标为,障碍物中心(另一点,同时为球心)坐标为,障碍物为半径为。则智能体与障碍物中心距离为
则,可求其雅可比矩阵为:
由雅克比矩阵我们可得到:
其中,为沿连线远离球心方向上变化的距离,为三维坐标的变化。由此,可得
其中,为雅可比矩阵的伪逆,可求得通过
由此,我们得到相距球心且在两点连线上的点的坐标为:
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代码相关推荐
- js 计算在AB两点连线上,距离A点一定距离的点的坐标
/*** @description 获取在AB两点连线上,以AB为方向,距离A点,L处的点的坐标* @param A:{x,z} 点A* @param B:{x,z} 点B* @param L 距A点 ...
- unity3d:向量计算:获得两点连线的垂直向量,判断目标方位(前后左右)
获得两点连线垂直向量 /// <summary>/// 获取某向量的垂直向量/// </summary>public static Vector3 GetVerticalDir ...
- 求大神帮忙,想要一元20次方程的解matlab代码,在线等,(解一元20次方程的解matlab代码)
求大神帮忙,想要一元20次方程的解matlab代码,在线等,(解一元20次方程的解matlab代码) 已知y是一个1*101的数组如下,函数如下,想求得x 135 130 134 128 129 13 ...
- css 定位连线_前端css实现两点连线
// dots是点的集合 : Array dots.map((dot, index) => { // 最后一个点没有连线 if (!dot[index + 1]) return; const A ...
- 点到另外两点连线的垂足计算
假设空间某点O的坐标为(Xo,Yo,Zo),空间某条直线上两点A和B的坐标为:(X1,Y1,Z1),(X2,Y2,Z2),设点O在直线AB上的垂足为点N,坐标为(Xn,Yn,Zn).点N坐标解算过程如 ...
- html5点线动画,HTML5带音效的两点连线动画
JavaScript 语言: JaveScriptBabelCoffeeScript 确定 (function() { var App = function() { this.el_svg = doc ...
- python 两点连线 matplotlib
1. 若想要将两点之间连接起来: import matplotlib.pyplot as plt p1 = [x1, y1] #点p1的坐标值 p2 = [x2, y2] #点p2的坐标值 plt.p ...
- python求两个数的最大值、用带参函数实现_Python有参函数使用代码实例
这篇文章主要介绍了Python有参函数使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.给定验证码长度n,生成随机验证码,验证码由数字 ...
- unity随机获取两个坐标点之间连线上的一点
/// <summary>/// 返回两个坐标点连线上的随机一点/// </summary>/// <param name="post1">&l ...
最新文章
- VUE 新手入门感慨
- 为别人做嫁衣——代理模式
- 安装了silverlight还是提示_win10系统安装.netframework3.5方法
- SQLServer查找已知数相邻前后数
- 设计psd分层素材模板|家居海报设计思路!
- CentOS/Ubuntu/Debian常用版本更换国内源的方法
- 第三季-第14课-有名管道通讯编程
- Ubuntu解决包依赖关系
- Java搭建网站相关知识整理(新手上路)
- 如何根据芯片手册时序图编写驱动程序
- wps垂直居中快捷键_水平与垂直居中怎么设置 在wps中的水平垂直居中在哪
- DM7在linux下部署
- 美国这100年来一共发生了多少次金融危机
- React之Protals详解
- 生成树协议STP(Spanning Tree Protocol)
- Android 之注册Facebook开发者账号
- 哪款蓝牙耳机的续航比较好?四款续航时间长的蓝牙耳机测评
- 机器人学关于SE(3)、se(3)、SO(3)、so(3)的理解
- AD10 PCB文件统一设置字体大小(默认字体大小)
- 有什么项目工时管理工具?