• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 关于缩进



    • 0_1521720361513_474257a2-0b9a-4270-85b7-db878696f366-image.png
      之前编号的程序,一段时间之后加了几句话,就编译不通过了,提示缩进错误,求解决方案



    • 缩进错了,按照逻辑调整一下缩进

      也只能这样呀



    • @kidswong999
      0_1521721906524_ef042009-d229-4394-bed1-2158d5fa5534-image.png
      真的有问题么?查了很多次了





    • 你把,代码用格式复制一下



    • import sensor, image, time, math,pyb
      from pyb import Servo
      from pyb import UART
      from pid import PID
      from pyb import millis
      from pyb import Pin, Timer
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QQVGA)
      sensor.skip_frames(time = 2000)
      sensor.set_auto_gain(False)
      sensor.set_auto_whitebal(False)
      f_x = (12 / 3.984) * 160
      f_y = (12 / 2.952) * 120
      c_x = 160 * 0.5
      c_y = 120 * 0.5
      s1 = Servo(1)
      s1.angle(0)
      x_pid = PID(p=3, i=0.05, imax=50)
      x1_pid = PID(p=3, i=0.02, imax=50)
      uart = UART(1, 115200)
      uart.init(115200, bits=8, parity=None, stop=1)
      flag=3
      flag1=1
      flag2=0
      c1=-38
      f=0
      f0=0
      def tick(timer):
      	from pyb import Servo
      	global flag
      	global s1
      	print("Timer callback")
      	s1.angle(0)
      	flag=3
      tim = Timer(5, freq=0.1)
      tim.callback(tick)
      def tick1(timer):
      	global flag
      	global f
      	global f0
      	global z0
      	print("Timer1 callback")
      	if flag==3 and f==0:
      		if f0==0:
      			flag=4
      			uart.writechar(66)
      		else:
      			if z0>-20:
      				 uart.writechar(83)
      			else:
      				 uart.writechar(67)
      				 flag=4
      tim1 = Timer(3, freq=0.3)
      tim1.callback(tick1)
      while(True):
      	while(flag!=2):
      		res=uart.readchar()
      		if res>=85 and res<=125:
      			res=res-105
      			out=x1_pid.get_pid(res,1)+105;
      			if out>125:
      				out=125
      			if out<85:
      				out=85
      			uart.writechar(int(out))
      		if res==67:
      			flag=3
      		if res==66:
      			flag=4
      		while(flag==3):
         			img = sensor.snapshot()
      			for tag in img.find_apriltags(families=image.TAG16H5,fx=f_x, fy=f_y, cx=c_x, cy=c_y):
      				f=1
      				if flag1==0 :                
      					uart.writechar(65)
      					flag1=1
      				else:
      					img.draw_rectangle(tag.rect(), color = (255, 0, 0))
      					print_args = (tag.x_translation(), tag.z_translation())
      					print("Tx: %f, ,Tz %f" % print_args)
      					x_output=x_pid.get_pid(tag.x_translation(),1)
      					x_output=x_output*1.2+105
      					if tag.z_translation()<-15:
      						uart.writechar(int(x_output))
      						print("out!!  %f" % x_output)
      						z0=tag.z_translation()
      					else:
      						uart.writechar(83)
      						flag=2
      						flag3=0
      						print("浇水2" )
      			f0=f
      			f=0
      		while (flag==4):
      			print("执行了一次4" )
      			uart.writechar(66)
      			for i in range(90):
      				print("i= %d" %i )
      				s1.pulse_width(1500 - i*10)
      				img = sensor.snapshot()
      				for tag in img.find_apriltags(families=image.TAG16H5,fx=f_x, fy=f_y, cx=c_x, cy=c_y):
      					print_args = (tag.x_translation(), tag.z_translation())
      					if tag.x_translation()<3 and tag.x_translation()>-3 :
      						c=int(i/10)
      						c1=-10
      						out=c+105
      						uart.writechar(int(out))
      						flag=3
      						pyb.delay(300)
                              s1.angle(0)
                      if flag==3:
      					break
                  if flag==4:
      				for i in range(180):
      					print("i= %d" %i )
      					s1.pulse_width(600 + i*10)
      					img = sensor.snapshot()
      					for tag in img.find_apriltags(families=image.TAG16H5,fx=f_x, fy=f_y, cx=c_x, cy=c_y):
      						print_args = (tag.x_translation(), tag.z_translation())
      						if tag.x_translation()<3 and tag.x_translation()>-3 :
      							c=int(-(i-90)/10)
      							if c>0:
      								c1=10
      							else:
      								c1=-10
      							out=c+105
      							uart.writechar(out)
      							flag=3
      							pyb.delay(300)
      							s1.angle(0)
      					if flag==3:
      						break
      			if flag==4:
      				for i in range(90):
      					print("i= %d" %i )
      					s1.pulse_width(2400 - i*10)
      					img = sensor.snapshot()
      					for tag in img.find_apriltags(families=image.TAG16H5,fx=f_x, fy=f_y, cx=c_x, cy=c_y):
      						print_args = (tag.x_translation(), tag.z_translation())
      						if tag.x_translation()<3 and tag.x_translation()>-3 :
      							c=int(-(90-i)/10)
      							out=c+105
      							uart.writechar(out)
      							flag=3
      							c1=10
      							pyb.delay(300)
      							s1.angle(0)
      					if flag==3:
      						break
      				if flag==4:
      					uart.writechar(67)
      					pyb.delay(2000)
      


    • 为什么在IDE里编辑的格式和粘贴在这里的不同呢



    • 我帮你把缩进对齐了,并且OpenMV u盘中保存了pid.py文件,运行后没有问题了。

      就是两个问题,你自己检查校对一下。
      1.要把pid.py放进openmv的u盘。
      2.缩进要对齐。(主要是你代码里if flag==4: 这里)

      import sensor, image, time, math,pyb
      from pyb import Servo
      from pyb import UART
      from pid import PID
      from pyb import millis
      from pyb import Pin, Timer
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QQVGA)
      sensor.skip_frames(time = 2000)
      sensor.set_auto_gain(False)
      sensor.set_auto_whitebal(False)
      f_x = (12 / 3.984) * 160
      f_y = (12 / 2.952) * 120
      c_x = 160 * 0.5
      c_y = 120 * 0.5
      s1 = Servo(1)
      s1.angle(0)
      x_pid = PID(p=3, i=0.05, imax=50)
      x1_pid = PID(p=3, i=0.02, imax=50)
      uart = UART(1, 115200)
      uart.init(115200, bits=8, parity=None, stop=1)
      flag=3
      flag1=1
      flag2=0
      c1=-38
      f=0
      f0=0
      def tick(timer):
      	from pyb import Servo
      	global flag
      	global s1
      	print("Timer callback")
      	s1.angle(0)
      	flag=3
      tim = Timer(5, freq=0.1)
      tim.callback(tick)
      def tick1(timer):
      	global flag
      	global f
      	global f0
      	global z0
      	print("Timer1 callback")
      	if flag==3 and f==0:
      		if f0==0:
      			flag=4
      			uart.writechar(66)
      		else:
      			if z0>-20:
      				 uart.writechar(83)
      			else:
      				 uart.writechar(67)
      				 flag=4
      tim1 = Timer(3, freq=0.3)
      tim1.callback(tick1)
      while(True):
      	while(flag!=2):
      		res=uart.readchar()
      		if res>=85 and res<=125:
      			res=res-105
      			out=x1_pid.get_pid(res,1)+105;
      			if out>125:
      				out=125
      			if out<85:
      				out=85
      			uart.writechar(int(out))
      		if res==67:
      			flag=3
      		if res==66:
      			flag=4
      		while(flag==3):
         			img = sensor.snapshot()
      			for tag in img.find_apriltags(families=image.TAG16H5,fx=f_x, fy=f_y, cx=c_x, cy=c_y):
      				f=1
      				if flag1==0 :                
      					uart.writechar(65)
      					flag1=1
      				else:
      					img.draw_rectangle(tag.rect(), color = (255, 0, 0))
      					print_args = (tag.x_translation(), tag.z_translation())
      					print("Tx: %f, ,Tz %f" % print_args)
      					x_output=x_pid.get_pid(tag.x_translation(),1)
      					x_output=x_output*1.2+105
      					if tag.z_translation()<-15:
      						uart.writechar(int(x_output))
      						print("out!!  %f" % x_output)
      						z0=tag.z_translation()
      					else:
      						uart.writechar(83)
      						flag=2
      						flag3=0
      						print("浇水2" )
      			f0=f
      			f=0
      		while (flag==4):
      			print("执行了一次4" )
      			uart.writechar(66)
      			for i in range(90):
      				print("i= %d" %i )
      				s1.pulse_width(1500 - i*10)
      				img = sensor.snapshot()
      				for tag in img.find_apriltags(families=image.TAG16H5,fx=f_x, fy=f_y, cx=c_x, cy=c_y):
      					print_args = (tag.x_translation(), tag.z_translation())
      					if tag.x_translation()<3 and tag.x_translation()>-3 :
      						c=int(i/10)
      						c1=-10
      						out=c+105
      						uart.writechar(int(out))
      						flag=3
      						pyb.delay(300)
                              s1.angle(0)
                      if flag==3:
      					break
                      if flag==4:
      				for i in range(180):
      					print("i= %d" %i )
      					s1.pulse_width(600 + i*10)
      					img = sensor.snapshot()
      					for tag in img.find_apriltags(families=image.TAG16H5,fx=f_x, fy=f_y, cx=c_x, cy=c_y):
      						print_args = (tag.x_translation(), tag.z_translation())
      						if tag.x_translation()<3 and tag.x_translation()>-3 :
      							c=int(-(i-90)/10)
      							if c>0:
      								c1=10
      							else:
      								c1=-10
      							out=c+105
      							uart.writechar(out)
      							flag=3
      							pyb.delay(300)
      							s1.angle(0)
      					if flag==3:
      						break
                      if flag==4:
      				for i in range(90):
      					print("i= %d" %i )
      					s1.pulse_width(2400 - i*10)
      					img = sensor.snapshot()
      					for tag in img.find_apriltags(families=image.TAG16H5,fx=f_x, fy=f_y, cx=c_x, cy=c_y):
      						print_args = (tag.x_translation(), tag.z_translation())
      						if tag.x_translation()<3 and tag.x_translation()>-3 :
      							c=int(-(90-i)/10)
      							out=c+105
      							uart.writechar(out)
      							flag=3
      							c1=10
      							pyb.delay(300)
      							s1.angle(0)
      					if flag==3:
      						break
      				if flag==4:
      					uart.writechar(67)
      					pyb.delay(2000)