標題:
openmv機械臂
[打印本頁]
作者:
55555977
時間:
2020-2-24 12:29
標題:
openmv機械臂
import sensor, image, time
from pid import PID
from pyb import Servo
pan_servo=Servo(1)
#tilt_servo=Servo(2)
s1 = Servo(3) # P9 Only for OpenMV3 M7
myservo=s1.angle
s2 = Servo(2) # P9 Only for OpenMV3 M7
myservow=s2.angle
red_threshold = (90, 30, -8, -43, 21, 65)
time.sleep(800)
myservo(40)
time.sleep(1000)
myservo(-50)
time.sleep(1000)
myservo(10)
time.sleep(1000)
#for i in range(5):
myservow(20)
time.sleep(800)
pan_pid = PID(p=0.09, i=0, imax=90) #脫機運行或者禁用圖像傳輸,使用這個PID
tilt_pid = PID(p=0.05, i=0, imax=90) #脫機運行或者禁用圖像傳輸,使用這個PID
#pan_pid = PID(p=0.1, i=0, imax=90)#在線調(diào)試使用這個PID
#tilt_pid = PID(p=0.1, i=0, imax=90)#在線調(diào)試使用這個PID
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.
K=913#the value should be measured
def find_max(blobs):
max_size=0
for blob in blobs:
if blob[2]*blob[3] > max_size:
max_blob=blob
max_size = blob[2]*blob[3]
return max_blob
while(True):
clock.tick() # Track elapsed milliseconds between snapshots().
img = sensor.snapshot() # Take a picture and return the image.
blobs = img.find_blobs([red_threshold])
if blobs:
max_blob = find_max(blobs)
pan_error = max_blob.cx()-img.width()/2
tilt_error = max_blob.cy()-img.height()/2
#print("pan_error: ", pan_error)
img.draw_rectangle(max_blob.rect()) # rect
img.draw_cross(max_blob.cx(), max_blob.cy()) # cx,
#print(tilt_servo.angle())
#print(pan_servo.angle())
pan_output=pan_pid.get_pid(pan_error,1)/2
tilt_output=tilt_pid.get_pid(tilt_error,1)
#print("pan_output",pan_output)
pan_servo.angle(pan_servo.angle()+pan_output)
#tilt_servo.angle(tilt_servo.angle()-tilt_output)
if len(blobs) == 1:
b = blobs[0]
Lm = (b[2]+b[3])/2
length = K/Lm
print(length)
print(max_blob.cx(),max_blob.cy())
widtha=(img.width()/2)*11/10
widthb=(img.width()/2)*9/10
heighta=(img.height()/2)*11/10
heightb=(img.height()/2)*9/10
if widthb<max_blob.cx()< widtha or heightb< max_blob.cy() < heighta:
print(231)
if length < 15:
print (123)
for t in range(4):
myservow(70)
time.sleep(50)
if widthb<max_blob.cx()< widtha or heightb< max_blob.cy() < heighta and length < 13 :
while(True):
myservo(-40)
time.sleep(600)
復(fù)制代碼
作者:
aktuan007
時間:
2021-1-24 14:40
這個貌似只有一點啊,能給個完整的不兄弟
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1