说明:本案例以追踪一个坐标点为例。当OpenMV4识别到矩形坐标后,将矩形坐标的一个点与OpenMV4的图像中心作比较,获得距离图像中心的差值。控制思想与案例二:任意颜色线循迹一致。将坐标点与图像中心的差值发送给梁山派,由梁山派根据差值控制云台。
-
当坐标点在图像中心点的右边时,差值为负,梁山派控制云台右转;
-
当坐标点在图像中心点的左边时,差值为正,梁山派控制云台左转;
以上为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章节:舵机二维云台控制与矩形坐标定位
立创开发板


登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!