运动仿真——phased.Platform

在雷达仿真过程中,运动仿真的必要性,以及运动仿真可以实现哪些功能,在matlab对应的user guide中已经讲的很清楚了,这里不再赘述。

本文主要介绍phased.Platform的一些“坑”,和典型的用法。

第一坑:系统对象机制

系统对象(system object)在调用的时候,返回当前的状态值,并计算下一状态值存储在系统对象中,直到调用release函数复位。假如仿真的时间步长为T,第一次调用系统对象返回零时刻的状态值。如果我们想要知道nT时刻的返回值,则需要调用系统对象函数n+1次。

第二坑:InitialVelocity属性

在帮助文档是这么描述该属性

![[file-20250324223332955.png]]

红框中说:当MotionModel设置为Velocity且VelocitySource设置为Input port的时候,InitialVelocity起作用。但是问题来了,当VelocitySource设置为Input port的时候,系统对象调用的形式必须满足[Pos,Vel] = platform(T,V),那么在调用的时候必须还要输入V参数,可以推断,第一次调用系统对象时,返回的Vel值应该是Initialvelocity,而输入参数V则是为了更新下一次数据使用。更新原则为:Pos = Pos + T*VVel = V

验证代码如下:

clear;clc;v0 = [1, 2, 3]';
v1 = [2, 3, 4]';
v2 = [3, 4, 5]';rdPlatform = phased.Platform();
rdPlatform.MotionModel = 'Velocity';
rdPlatform.InitialPosition = [0;0;0];
rdPlatform.VelocitySource = 'Input port';
rdPlatform.InitialVelocity = v0;T = 1;% 输出pos=initialPosition=[0,0,0],vel=[1,2,3],
% 更新vel = [2,3,4]
% 更新pos = initialPosition + T*v1 =[2,3,4]
[pos, vel] = rdPlatform(T, v1)% 输出pos = [2,3,4]和vel=[2,3,4]
% 更新vel = [3,4,5]
% 更新pos=[2,3,4]+[3,4,5]=[5,7,9]
[pos, vel] = rdPlatform(T, v2)% 输出pos = [5,7,9]和vel=[1,2,3]
% 更新vel = [1,2,3]
% 更新pos=[5,7,9]+[1,2,3]=[6,9,12]
[pos, vel] = rdPlatform(T, v0)

第三坑:Velocity属性

每次调用函数的时候,都不需要更新velocity,这是最基本的用法。

![[file-20250323211714998.png]]

由于velocity这个属性tunable,所以在仿真过程中可以更新velocity的值,。

clear;clc;rdPlatform = phased.Platform();
rdPlatform.MotionModel = 'Velocity';
rdPlatform.InitialPosition = [0;0;0];
rdPlatform.VelocitySource = 'Property';
rdPlatform.Velocity = [10;20;-10];T = 1;[pos, vel] = rdPlatform(T)
rdPlatform.Velocity = [10;10;-10];
[pos, vel] = rdPlatform(T)rdPlatform.Velocity = [0;10;-10];
[pos, vel] = rdPlatform(T)

第四坑:旋转模式

旋转模式比较复杂,首先看旋转模式的定义:
![[file-20250324230251365.png]]

这里说,在Circulor模式下,沿着平台方向坐标系中方位指向的顺时针方向旋转,这个说法非常难懂。需要弄懂什么是orientation axes和aizmuth direction。

根据系统对象调用的规则:[Pos,Vel,Laxes] = step(___)可以返回局部坐标系,而局部坐标系Laxes定义如下:

file-20250323224914971

可以知道Laxes就是platform orientation axes,也叫platform axes,Laxes是绕着运动轨迹的方向进行旋转,这句话也非常难懂。

先说结论:

(1)平台仿真中包含了三个坐标系,第一个是全局坐标系,不用细说;

(2)第二个是平台局部坐标系,该坐标系随着速度矢量的变化而变化;

解释如下

假如每一时刻的速度矢量为 v i v_i vi,由速度矢量确定的坐标系(我自己写一个函数,来确定平台局部坐标系,该函数根据x轴来确定局部坐标系,因此叫xaxes)为 P i P_i Pi,那么 P i P_i Pi可以由 P 1 P_1 P1通过线性变换 T i T_i Ti得到,写作

P i = T i × P 1 P_i=T_i\times P_1 Pi=Ti×P1

由此可以得到线性变换为 T i = P i × P 1 T T_i=P_i\times P_1^T Ti=Pi×P1T,假设平台没有旋转运动,那么平台初始的局部坐标系 L 1 L_1 L1就是单位矩阵 I 3 I_3 I3,第 i i i时刻的局部坐标系 L i L_i Li就是 L i = T i × L 1 = P i × P 1 T L_i=T_i\times L_1=P_i\times P_1^T Li=Ti×L1=Pi×P1T


clear;clc;
close all;v = [10; -10; 10];
scanrate = 10;
initaxes = azelaxes(-23, 10);rdPlatform = phased.Platform(...'MotionModel','Acceleration', ...'InitialPosition',[10,20,30]',...'InitialVelocity',v, ...'AccelerationSource','Property', ...'Acceleration',[-20,10,-10]');rdPlatform.ScanMode = 'None';
rdPlatform.InitialScanAngle = 0;
rdPlatform.AzimuthScanRate = scanrate;
rdPlatform.InitialOrientationAxes = initaxes;
rdPlatform.OrientationAxesOutputPort = true;T = 0.1
refpos = [0; 0; 0];figure;
ha = axes("Parent", gcf);
hold(ha, 'on');
xlabel('x')
ylabel('y')
zlabel('z')v0 = xaxes(v);
R1 = azelaxes(0, 20);for i = 1:50[pos, vel, lax] = rdPlatform(T);xaxes(vel)*transpose(v0)*initaxeslaxpltax(ha, pos, vel, lax);endaxis(ha, 'equal')

(3)第三个是平台上的旋转坐标系,该坐标系绕着平台局部坐标系的z轴转动。

假设旋转坐标系的初始为 R 1 R_1 R1,旋转角度为 θ \theta θ,那么旋转变换可以表示为 r o t z ( θ ) \rm{rotz}(\theta) rotz(θ),那么加旋转的局部坐标系就是 r o t z ( θ ) × R 1 \rm{rotz}(\theta)\times R_1 rotz(θ)×R1

clear;clc;close all;v = [0; 0; 0];scanrate = 10;rdPlatform = phased.Platform(...
'MotionModel','Acceleration', ...
'InitialPosition',[0,0,0]',...
'InitialVelocity',v, ...
'AccelerationSource','Property', ...
'Acceleration',[0, 0, 0]');rdPlatform.ScanMode = 'Circular';
rdPlatform.InitialScanAngle = 0;
rdPlatform.AzimuthScanRate = scanrate;
rdPlatform.InitialOrientationAxes = azelaxes(0, -20);
rdPlatform.OrientationAxesOutputPort = true;T = 1;refpos = [0; 0; 0];figure;ha = axes("Parent", gcf);
hold(ha, 'on');
xlabel('x')
ylabel('y')
zlabel('z')v0 = xaxes(v);R1 = azelaxes(0, -20);for i = 1:5[pos, vel, lax] = rdPlatform(T);% [~, ang] = rangeangle(lax(:,1))% R = rotz(scanrate*(i-1)*T);rotz(-scanrate*(i-1)*T) * R1laxpltax(ha, pos, vel, lax);
endaxis(ha, 'equal')

(4)包含平动和转动的运动状态,改状态下返回的Laxes值目前机理还不清楚。带讨论

附件

function lax = xaxes(x)x = x / norm(x);
% define vector v in x-y plane of global coordinate system
v = [0; 0; 1];
% compute y;
y = cross(v, x);
y = y / norm(y);
% compute z;
z = cross(x, y);
% construct local axes;
lax = [x, y, z];
end
function pltax(ha, pos, vel, ax)vel = vel / norm(vel);
scatter3(ha, pos(1), pos(2), pos(3), 'k');
quiver3(ha, pos(1), pos(2), pos(3), vel(1), vel(2), vel(3), 'k', 'MaxHeadSize', 2, 'AutoScale', 'off');
quiver3(ha, pos(1), pos(2), pos(3), ax(1, 1), ax(2, 1), ax(3, 1), 'b', 'MaxHeadSize', 2, 'AutoScale', 'off');
quiver3(ha, pos(1), pos(2), pos(3), ax(1, 2), ax(2, 2), ax(3, 2), 'r', 'MaxHeadSize', 2, 'AutoScale', 'off');
quiver3(ha, pos(1), pos(2), pos(3), ax(1, 3), ax(2, 3), ax(3, 3), 'r', 'MaxHeadSize', 2, 'AutoScale', 'off');end

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

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

相关文章

用selenium+ChromeDriver豆瓣电影 肖申克的救赎 短评爬取(pycharm 爬虫)

一、豆瓣电影 肖申克的救赎 短评url=https://movie.douban.com/subject/1292052/comments 二、基本知识点讲解 1. Selenium 的基本使用 Selenium 是一个用于自动化浏览器操作的库,常用于网页测试和爬虫。代码中使用了以下 Selenium 的核心功能: webdriver.Chrome: 启动 Chr…

万象更新(一)VTK 坐标轴、相机方向坐标轴、立方体坐标轴

VTK 坐标轴、相机方向坐标轴、立方体坐标轴 1. 坐标轴、相机方向坐标轴、立方体坐标轴2. 坐标轴3. 相机方向坐标轴4. 立方体坐标轴 1. 坐标轴、相机方向坐标轴、立方体坐标轴 在 VTK(Visualization Toolkit)中,与坐标轴相关的组件主要包括 坐…

【Golang】go语言上下文context

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

ROS2与OpenAI Gym集成指南:从安装到自定义环境与强化学习训练

1.理解 ROS2 和 OpenAI Gym 的基本概念 ROS2(Robot Operating System 2):是一个用于机器人软件开发的框架。它提供了一系列的工具、库和通信机制,方便开发者构建复杂的机器人应用程序。例如,ROS2 可以处理机器人不同组…

基于Spring Boot的乡村养老服务管理系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

### Java二维字符矩阵输入解析:正确读取由0和1组成的矩阵

在解决LeetCode等编程平台上的算法问题时,正确处理输入数据是解题的第一步。本文以Java语言为例,详细讲解如何正确读取由0和1组成的二维字符矩阵,并解决输入过程中可能遇到的换行符问题。 --- #### **问题背景** 题目要求从输入中读取一个二…

SEO监控看板搭建:基于Data Studio的实时数据可视化

在当今数字化营销的时代,SEO(搜索引擎优化)已经成为企业获取流量、提升品牌曝光的重要手段。然而,SEO的效果往往需要通过数据来评估和优化。为了更高效地监控SEO表现,许多企业开始使用数据可视化工具来搭建SEO监控看板…

模糊数学 | 模型 / 集合 / 关系 / 矩阵

注:本文为来自 “模糊数学 | 模型及其应用” 相关文章合辑。 略作重排。 如有内容异常,请看原文。 模糊数学模型:隶属函数、模糊集合的表示方法、模糊关系、模糊矩阵 wamg 潇潇 于 2019-05-06 22:35:21 发布 1.1 模糊数学简介 1965 年&a…

如何根据目标网站调整Python爬虫的延迟时间?

一、为什么需要调整爬虫的延迟时间? 1. 反爬虫机制的挑战 大多数网站(尤其是电商平台如淘宝)都部署了反爬虫机制,用于检测异常的访问行为。如果爬虫的请求频率过高,可能会触发以下反制措施: IP封禁&…

【嵌入式学习2】内存管理

## C语言编译过程 预处理:宏定义展开、头文件展开、条件编译,这里并不会检查语法,将#include #define这些头文件内容插入到源码中 gcc -E main.c -o main.i 编译:检查语法,将预处理后文件编译生成汇编文件&#xff…

案例分享|树莓派媒体播放器,重构商场广告的“黄金三秒”

研究显示,与传统户外广告相比,数字户外广告在消费者心中的记忆率提高了17%,而动态户外广告更是能提升16%的销售业绩,整体广告效率提升了17%。这一显著优势,使得越来越多资源和技术流入数字广告行业。 户外裸眼3D广告 无…

WindowsPE文件格式入门02.选项头其它和节表

https://www.bpsend.net/thread-444-1-1.html 选项头 IMAGE_OPTIONAL_HEADER:以供操作系统加载PE文件使用,32位必选。 重要字段: DWORD AddressOfEntryPoint; 入口点 DWORD ImageBase 建议模块地址…

【Arm+Qt+Opencv】基于人脸识别考勤系统实战

1.编译时问题汇总 windows下编译opencv-4.5.4 opencv-4.5.4编译 问题1:配套使用opencv-4.5.4,opencv_contrib-4.5.4,cmake3.22.3问题会少一点 问题2:在windows下哪里执行该命令 解决: 问题3:在对应cmake中搜索不到要修改的配置…

Linux与HTTP中的Cookie和Session

HTTP中的Cookie和Session 本篇介绍 前面几篇已经基本介绍了HTTP协议的大部分内容,但是前面提到了一点「HTTP是无连接、无状态的协议」,那么到底有什么无连接以及什么是无状态。基于这两个问题,随后解释什么是Cookie和Session,以…

【Tauri2】001——安装及运行

前言 笔者其实不想写教程,写教程很麻烦。 但是网上关于Tauri2的教程,要么不全,要么是Tauri1的,真的太少了,虽然有官网,还是太少了。 问Ai,也感觉比较离谱,有很多时候,…

【DFS】羌笛何须怨杨柳,春风不度玉门关 - 4. 二叉树中的深搜

本篇博客给大家带来的是二叉树深度优先搜索的解法技巧,在后面的文章中题目会涉及到回溯和剪枝,遇到了一并讲清楚. 🐎文章专栏: DFS 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的…

操作系统导论——第13章 抽象:地址空间

一、早期系统 从内存来看,早期的机器并没有提供多少抽象给用户。基本上,机器的物理内存如图13.1所示 操作系统曾经是一组函数(实际上是一个库),在内存中(在本例中,从物理地址0开始)&…

网络爬虫-2:基础与理论

一.同步加载与异步加载 1.1同步加载定义: 页面所有内容一起加载出来,当某一个数据加载有问题,整个页面就不会加载出来(如HiFiNi音乐网站),所以又叫阻塞模式 1.2爬取步骤: 看netword->document 2.1异步加载定义: 数据是分开加载的,当某一份数据有异常时,不影响其他数据…

【Docker系列五】Docker Compose 简介

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

本地安装deepseek大模型,并使用 python 调用

首先进入 ollama 官网 https://ollama.com/点击下载 下载完成后所有都是下一步,就可以 点击搜索 Models : https://ollama.com/search然后点击下载: 选择后复制: ollama run deepseek-r1:32b例如: 让它安装完成后&#xff1…