pid.py(直接在网上复制即可)

from pyb import millis
from math import pi, isnanclass PID:_kp = _ki = _kd = _integrator = _imax = 0_last_error = _last_derivative = _last_t = 0_RC = 1/(2 * pi * 20)def __init__(self, p=0, i=0, d=0, imax=0):self._kp = float(p)self._ki = float(i)self._kd = float(d)self._imax = abs(imax)self._last_derivative = float('nan')def get_pid(self, error, scaler):tnow = millis()dt = tnow - self._last_toutput = 0if self._last_t == 0 or dt > 1000:dt = 0self.reset_I()self._last_t = tnowdelta_time = float(dt) / float(1000)output += error * self._kpif abs(self._kd) > 0 and dt > 0:if isnan(self._last_derivative):derivative = 0self._last_derivative = 0else:derivative = (error - self._last_error) / delta_timederivative = self._last_derivative + \((delta_time / (self._RC + delta_time)) * \(derivative - self._last_derivative))self._last_error = errorself._last_derivative = derivativeoutput += self._kd * derivativeoutput *= scalerif abs(self._ki) > 0 and dt > 0:self._integrator += (error * self._ki) * scaler * delta_timeif self._integrator < -self._imax: self._integrator = -self._imaxelif self._integrator > self._imax: self._integrator = self._imaxoutput += self._integratorreturn outputdef reset_I(self):self._integrator = 0self._last_derivative = float('nan')

main.py

import sensor, image, timefrom pid import PID
from pyb import Servopan_servo=Servo(1)
tilt_servo=Servo(2)pan_servo.calibration(500,2500,500)
tilt_servo.calibration(500,2500,500)red_threshold  = (13, 49, 18, 61, 6, 47)pan_pid = PID(p=0.07, 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)#在线调试使用这个PID
#tilt_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PIDsensor.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.def find_max(blobs):max_size=0for blob in blobs:if blob[2]*blob[3] > max_size:max_blob=blobmax_size = blob[2]*blob[3]return max_blobwhile(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()/2tilt_error = max_blob.cy()-img.height()/2print("pan_error: ", pan_error)img.draw_rectangle(max_blob.rect()) # rectimg.draw_cross(max_blob.cx(), max_blob.cy()) # cx, cypan_output=pan_pid.get_pid(pan_error,1)/2tilt_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)

OpenMV:02追小球的云台相关推荐

  1. 基于STM32+Openmv的追小球(颜色追踪)小车——一篇解决所有基本问题

    去年由于参加电赛接触到了openmv和k210,虽然没有拿到奖但还是收获很多的,最近看到openmv有一个追小球小车的例程,秉承着学习的态度(主要是觉得买openmv现成的小车模块直接下载代码实现功能 ...

  2. K210追小球程序与STM32最小系统板通信(自主学习)

    本人先通过学习OPENMV,再延申到K210中.(主要是OPENMV我还没买屏幕,但是K210有)在OPENMV官网中,有相关追小球的函数,但是是用OPENMV单片机来进行调试的.在网上找到的相关源码 ...

  3. 基于OpenMV和正点原子开发的自动追球小车(带云台舵机)

    电赛备赛前,通过OpenMV加舵机云平台由,做了一个追着球跑的小车,由于疫情,以前录制的视频也删除了,最终呈现的效果和B站一位Up主的相似,大家可以参考参考,链接如下:STM32 颜色识别 自动跟随小 ...

  4. OpenMV:14巡线小车

    文章目录 追小球的小车 巡线小车 这个例子展示了在OpenMV Cam上使用get_regression()方法获得ROI的线性回归.使用这种方法,可以轻松让机器人跟踪所有指向相同大致方向的线. 本例 ...

  5. python游戏编程培训

    准备好了吗?我们即将开始激动人心的游戏编程之旅. 或许你之前学习过一点编程,但若是你从没接触过游戏编程,那么你仍然会对游戏程序的运行感到不解.游戏程序不像计算一个公式或谜题,得到答案之后程序就结束了, ...

  6. 通讯型高清视频会议摄像机

    通讯型高清视频会议摄像机 首先理解一下这几个专业词的含义:(如不想看可以网上查串口通信协议) 波特率:  单片机或计算机在串口通信时的速率.指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数 ...

  7. 2019电赛----模拟电磁曲射炮

    1.吐槽电赛 2019.TI杯8月2号电赛号角其实已经吹响,虽然仅仅是清单公布,但是淘宝上早已经腥风血雨,特别是带处理器的摄像头openmv.大功率舵机以及云台一售而空,作为只会控制题的本小白,当然不 ...

  8. 2019电赛总结(一)

    2019电赛总结(一) 文章目录 2019电赛总结(一) 4 那之前 5 电赛初期 6 电赛中期 7 电赛强化练习 8 电赛预热阶段8月初 9 那以后 4 那之前 2019电赛总结(序) 5 电赛初期 ...

  9. 展厅空间设计 | 品牌与消费者的深层连接

    展厅是企业的"名片",展厅的整体大小.色调搭配.设计手法都要尽善尽美,才能让企业在竞争中脱颖而出.未来,评价一个展厅是否成功的标准不是看它的展厅是否华丽.奢侈,而是看它的沟通能力. ...

最新文章

  1. 从农场女孩到首位图灵奖女性获得者,回顾法兰西斯·艾伦的辉煌一生
  2. Swift基础之闭包
  3. Sublime Text2 常用快捷键
  4. Oracle日期相关
  5. 假设以带头结点的循环链表表示队列_关于反转链表,看这一篇就够了!
  6. antd table设置表格一个单元格的字体颜色_alireacttable:高性能 React 表格组件
  7. 18-elasticsearch集群健康为黄色
  8. OpenEDR:安全厂商Comodo 开源 EDR 解决方案
  9. 剑指offer(C++)-JZ22:链表中倒数最后k个结点(数据结构-链表)
  10. 淘宝天猫京东商品详情一键铺货到拼多多平台店铺接口代码对接教程
  11. 学前端的记录帖html+css b站千峰19版
  12. 计算机专业英语缩略词
  13. assert:python断言报错语句
  14. maccms-cve_2017_17733漏洞复现
  15. LayUI复杂表头多一列
  16. 关于提问的一些书籍及文章
  17. 今年最后一月数据库排名公布!前三难以撼动!
  18. YOLOv5-网络结构
  19. 31 个Python代码实现的常用功能(附案例源码)
  20. 必看干货!微信营销话术,微信营销技巧有哪些

热门文章

  1. Java面试大厂名企高频真题--02并发篇
  2. 【100个 Unity实用技能】☀️ | 修改Unity UI控件中默认字体配置
  3. Es的针对于nested类型的多重子聚合
  4. 树形DP+并查集+左偏树, HDU-5575,Discover Water Tank,2015上海现场赛D题
  5. pythonxy安装包_apachecn-ds-zh
  6. 2.4G WIFI热点扫描模块 AP扫描 路测 WLAN 产品说明书
  7. uni-app 输入框键盘把背景图顶上去
  8. 2017.1.14【初中部 GDKOI】模拟赛B组 心灵终结 题解
  9. 新浪IaskSpider
  10. iOS攻防 - (六)iOS应用使用Clutch脱壳