说明:本案例以追踪一个坐标点为例。当OpenMV4识别到矩形坐标后,将矩形坐标的一个点与OpenMV4的图像中心作比较,获得距离图像中心的差值。控制思想与案例二:任意颜色线循迹一致。将坐标点与图像中心的差值发送给梁山派,由梁山派根据差值控制云台。
  1. 当坐标点在图像中心点的右边时,差值为负,梁山派控制云台右转;
  1. 当坐标点在图像中心点的左边时,差值为正,梁山派控制云台左转;
以上为X轴控制的思想,Y轴同理。

接线

使用梁山派上的串口1(TX=PA2 RX=PA3) 连接 OpenMV4 的串口3(TX=P5 RX=P4)。 舵机云台的X轴左右转动的舵机信号线接入PA5;Y轴上下转动的舵机信号线接入PA1;
下方连接图中的OpenMV4是Plus型号,但是与普通版通用。
OpenMV4
梁山派
二维云台 X轴舵机
二维云台 Y轴舵机
接线图
VIN
5V
X
X
GND
GND
X
X
P4
PA3
X
X
P5
PA2
X
X
X
5V
5V
5V
X
GND
GND
GND
X
PA5
SIG
 
X
PA1
 
SIG

OpenMV4代码

说明:OpenMV4的代码以案例四为例进行修改。本案例只识别一个角点,其余角点的定位,请查看案例四:任意角度矩形识别与边角定位
 

梁山派OpenMV4解析代码

说明:初始化两个PWM用于控制云台舵机。需要注意的是如何解析OpenMV4发送过来的XY轴的差值。OpenMV4的差值以 [X,Y] 的格式发送给梁山派。
X轴的差值解析:
例如:buff=[-12,32],进入X轴解析函数后,先将buff的数据保存到temp里。
这是为了保护buff里的数据不被修改,因为我们后面还要通过buff解析Y轴数据
 
接着通过让temp的下标不断自增,找到","的下标位置i,将temp下标位置i之前的内容,复制到temp。我们带入参数模拟。
原来的参数如下。
下标
0
1
2
3
4
5
6
7
temp
[
-
1
2
3
2
]
通过以下代码找到了“,”的下标位4。
i=0; while( temp[i] != ',' ) { i++; }
再通过以下代码,将“,”之前的内容重新保存到temp。
//从temp2里复制长度为i的字符串到temp1 strncpy(temp, temp, i);
Temp的内容修改内容如下:
下标
0
1
2
3
4
temp
[
-
1
2
通过将i下标内容修改为字符串结束符‘\0’,Temp的内容又修改如下:
下标
0
1
2
3
4
temp
[
-
1
2
\0
通过atoi函数将temp的字符串数据转为整形数据,但是atoi函数要求只转换与数字相关的字符串,我们的temp里面还有一个“[”,因此传入的字符串数据从下标1的地址进行转换。
//保存数据 openmv_data_x = atoi(&temp[1]);
最终X轴变量openmv_data_x 为 -12.
 
2.50章节:舵机二维云台控制与矩形坐标定位
\n#技术交流#
#技术交流#
立创开发板

还没有评论,抢个沙发!