Matlab实现姿态角变化可视化实时显示

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在使用AppDesigner 做上位机的过程中,想着利用Unity3D做一个可视化的界面来显示姿态角,奈何C#基础薄弱,而且Matlab于Unity之间的联动异常复杂,只好放弃这种做法,偶然在b站上面看到,Matlab自身也可以做一个可视化的界面,尽管可能建模没那么好看(以至于只能使用长方体代替),但是能够实现功能总是好的。下面我将介绍一下Matlab如何实现这个姿态角变化的可视化。


一、Patch函数

首先要介绍一下这个Patch函数,这个函数用来绘制一个或多个填充多边形区域,多个咱们暂且不说,咱们只说我们用到的,下面是官网上的解释。
在这里插入图片描述
可以看到,当我们指定了面和顶点之后,就可以绘制一个正方形,那么我们推广一下,这里只是四个顶点,一个长方体有8个顶点,而且长方体是三维物体,左边点肯定是3维坐标点,最终的矩阵应该是3行8列;f是8个顶点,那么6个面每个面都需要4个点来产生,于是f应该是4行6列的矩阵;比如我们可以设为如下的方式(举个例子可能看起来不是很好);
在这里插入图片描述

v = [0 0 0;0 3 0;3 3 0;3 0 0;0 0 3;0 3 3;3 3 3;3 0 3];
f = [1 2 3 4;5 6 7 8;1 4 8 5;1 2 6 5;2 3 7 6;3 4 8 7];
  aaa=patch('Faces',f,'Vertices',v');

如果不选颜色,画出的图可能是黑色的。

二、计算旋转矩阵

1、rotx、roty、rotz函数使用

以rotx函数为例:实际上就是绕x轴旋转一定的角度,我们也叫横滚角(roll),rotx的参数就是这个横滚角,计算后我们得到的是绕x轴的旋转矩阵。类似的,我们也可以得到绕y轴和z轴的旋转矩阵如下所示:

Rx = rotx(roll);
Ry = roty(pitch);
Rz = rotz(yaw);

2.任意角的旋转矩阵

显然,我们只需要分别绕x、y、z旋转即可,Rotation_Mat是旋转矩阵,代码如下(示例):

  Rotation_Mat = Rz*Ry*Rx*v';

三、绘图

1、绘制旋转之后的图像

 delete(aaa);
  aaa=patch('Faces',f,'Vertices',Rotation_Mat');

重新绘制旋转之后的图像之前要把原来的给删除,不然会出现重影的现象。之后要在循环中一直收姿态角的数据传给旋转矩阵,然后不停的使用patch函数进行绘图。
—**

2、上位机有关代码

下面这部分是上位机中有关绘制3D图的相关代码,其中是在AppDesigner中写的。

A = fread(s,3,'int16')/32768*180;
roll = A(1);
pitch = A(2);
yaw = A(3);              
Rx = rotx(roll);
Ry = roty(pitch);
Rz = rotz(yaw);
Rotation_Mat = Rz*Ry*Rx*Cubic_Point';
     aaa=patch(app.Obiect_3D,'Faces',Cubic_Plane,'Vertices',Rotation_Mat','FaceVertexCData',Cubic_Corlor,'FaceColor','flat');
view(app.Obiect_3D,3); 
axis(app.Obiect_3D,[-3,3,-3,3,-3,3]);%坐标系范围
   
set(app.Obiect_3D, 'XGrid', 'on');
set(app.Obiect_3D, 'YGrid', 'on');
set(app.Obiect_3D, 'ZGrid', 'on');
xlabel(app.Obiect_3D,'X-axis');
ylabel(app.Obiect_3D,'Y-axis');
zlabel(app.Obiect_3D,'Z-axis');
drawnow;
delete(aaa);

总结

这里只是一个方法,代码不一定所有都环境下都适用,如有错误,请各位大佬指正。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值