openmv,巡线两条黄线,如果有一条黄线突然没有了怎么靠另一条黄线寻线,但不影响啊后来的两条黄线巡线
时间: 2024-03-17 09:44:12 浏览: 105
如果一条黄线突然消失了,您可以使用另一条黄线来控制机器人的运动,直到找到第一条黄线。以下是一个简单的代码示例,它可以实现这一点:
```python
import sensor, image, time
from pyb import UART
uart = UART(3, 9600) # 初始化串口对象
sensor.reset() # 重置摄像头
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为RGB565
sensor.set_framesize(sensor.QQVGA) # 设置帧大小为QQVGA
sensor.skip_frames(time = 2000) # 跳过摄像头启动时的帧
yellow_threshold = (60, 100, -40, 40, -30, 30) # 黄色的阈值
last_line_lost = False # 上一条黄线是否丢失
last_line_center = 0 # 上一条黄线的中心点x坐标
while(True):
img = sensor.snapshot() # 拍摄一张图像
blobs = img.find_blobs([yellow_threshold]) # 查找黄色区域
if len(blobs) == 2: # 如果找到了两个色块
x1 = blobs[0].cx() # 第一个色块的中心点x坐标
x2 = blobs[1].cx() # 第二个色块的中心点x坐标
if x1 > x2: # 如果第一个色块在右边
x1, x2 = x2, x1 # 交换x1和x2
if x1 < 80 and x2 > 80: # 如果两个色块跨越了中线
x = (x1 + x2) // 2 # 计算中心点x坐标
if last_line_lost: # 如果上一条黄线丢失了
last_line_center = x # 记录当前黄线的中心点x坐标
last_line_lost = False # 上一条黄线已找到
elif abs(x - last_line_center) < 30: # 如果当前黄线和上一条黄线很接近
last_line_center = x # 更新上一条黄线的中心点x坐标
uart.write("f") # 直行
elif x < 60: # 如果机器人太靠左
uart.write("l") # 向左转
elif x > 100: # 如果机器人太靠右
uart.write("r") # 向右转
else: # 如果机器人在中间
uart.write("f") # 直行
elif x1 < 80: # 如果机器人在左边
uart.write("l") # 向左转
elif x2 > 80: # 如果机器人在右边
uart.write("r") # 向右转
else: # 如果机器人在中间
uart.write("f") # 直行
elif len(blobs) == 1: # 如果只找到了一个色块
x = blobs[0].cx() # 找到中心点x坐标
if last_line_lost: # 如果上一条黄线丢失了
last_line_center = x # 记录当前黄线的中心点x坐标
last_line_lost = False # 上一条黄线已找到
elif abs(x - last_line_center) < 30: # 如果当前黄线和上一条黄线很接近
last_line_center = x # 更新上一条黄线的中心点x坐标
uart.write("f") # 直行
elif x < 60: # 如果机器人太靠左
uart.write("l") # 向左转
elif x > 100: # 如果机器人太靠右
uart.write("r") # 向右转
else: # 如果机器人在中间
uart.write("f") # 直行
else: # 如果没有找到黄色区域
last_line_lost = True # 上一条黄线丢失了
uart.write("s") # 停止
```
这个代码示例使用了两个色块来检测黄线,并使用串口将控制信号发送给小车。如果一条黄线突然消失了,机器人将使用另一条黄线来控制运动,直到找到第一条黄线。代码中的条件语句可以根据您的实际情况进行修改。
阅读全文