这个主要是自己的一个项目的一部分内容,该项目已申请专利。
前面主要是姿态结算、传感器校准算法等,不是讨论的重点,等专利授权可以展开简单讲一下原理。这里,只讨论其中的一个附件。
下面介绍一下Processing:
1、最大的好处是 开源开源开源,相比于破解版Matlab、LabView
2、在可视化解决方案中,Processing做Demo效率最高,我手写QT双缓冲绘图并不如Processing的渲染速度,OpenGL调用极其简单,相比于Python/C++/QT,开发速度快一倍,当然实际做产品还是QT、MFC那些
3、入门极其简单
不过也有很尴尬的地方:
1、不能称为界面开发,而是画板,所以也只能做Demo
2、功能少的可怜,但语言简单正是其强大之处,现在有兼容openCV的版本,开发非常快(不要提算法,算法和逻辑本身和GUI就没啥关系)
出于种种原因,并不会提供全部代码,只会开源一部分。
首先是通信:
在 SETUP里:
keng=new Serial(this,"COM4",9600);
应该很容易理解吧。
接着Loop里:
if (keng.available()>0)
{
if(keng.readBytesUntil(10,inBuffer)>0)
{
String input = new String(inBuffer);
String inputArr[]=split(input,",");
ax=float(inputArr[0]);
ay=float(inputArr[1]);
az=float(inputArr[2]);
gx=float(inputArr[3]);
gy=float(inputArr[4]);
gz=float(inputArr[5]);
mx=float(inputArr[6]);
my=float(inputArr[7]);
mz=float(inputArr[8]);
anglex=float(inputArr[9]);
angley=float(inputArr[10]);
anglez=float(inputArr[11]);
time=float(inputArr[12]);
}
}
主要讲两个部分,一个是示波器,一个是3D开发。
1、示波器
步骤:
(0)定义在哪个地方作图,坐标范围。
(1)根据画布尺寸大小 计算出 在画布的位置。比如 传感器测出来 x=10,对应画布的点的坐标。
(2)将若干点坐标连成线。
(3)有点像进栈出栈似的,数组动态更新。
if(tt<100)
{
realanglex[tt]=90-anglex/1.5;
}
if(tt>99)
{
for(q=0;q<99;q++)
{
realanglex[q]=realanglex[q+1];
}
realanglex[99]=90-anglex/1.5;
for(p=0;p<98;p++)
{
stroke(255);
line(750+5*p,realanglex[p],750+5*(p+1),realanglex[p+1]);
}
}
tt=tt+1;
if(tt>199)
{
tt=tt-100;
}
2、3D开发
对于单个3D物体的开发,非常简单,在机械臂仿真会讲复杂的开发是怎么回事,现在直接上代码。
box(280,30,30);
fill(120,0,255);
translate(0,0,0);
box(31,31,280);
fill(0,255,230);
translate(0,-20,-130);
box(10,15,10);
translate(0,anglex,0);
...
做出来的最终结果图:
No.1 初始化
No.2
No.3 运行状态
No.4 逻辑判断表