树莓派替我玩Timberman

10 篇文章 0 订阅
5 篇文章 0 订阅

项目缘由与总结

手机上的Timberman游戏被朋友挑战,无奈只能达到300多分,突发奇想做一个自动化的系统来替代人进行操作,反超朋友记录
Timberman游戏规则简单,应该很轻松就能做出一套系统来实现自动化操作,况且机器毕竟是机器,依赖于算法做出的判断基本不会出错。
但是实践下来,遇到了不少问题,最终这套系统没有按照理想的情况运行下去,原因如下
1. 树莓派处理速度不够理想,无法瞬间得出运算结果
2. 手里只有盛辉MG995型舵机,实在是大材小用,树莓派也不能很好的进行驱动,也没有单独为他购置一套设备
3. 常规电容笔的工作是依赖于传递人手的电容进行工作的
4. 准备着手准备毕业设计,这个小东西只能暂时搁置了
等将来入手性能更加强大的树莓派2之后,再重启这个小项目吧,下面简单记录一下这个小东西

设备图片

这里写图片描述

实现思路

  1. 获取图像
  2. 切割
  3. 灰度化
  4. 与标准图进行对比
  5. 判断相似度
  6. 做出响应

工具

  • 树莓派及摄像头
  • 一个稳定的支撑平台
  • Python Imaging Library 库(简称pil库)

源代码

源代码十分简单,都是直接调用pil库的函数直接运行,舵机因为硬件问题调试的不是很完美,等着以后有了新装备再来完善

#!/usr/bin/python
#coding: utf8
import math
import os
import operator
import time
import signal
import atexit
#import cv2.cv as cv
import RPi.GPIO as GPIO
from PIL import Image

atexit.register(GPIO.cleanup)
servopin = 11
GPIO.setmode(GPIO.BOARD)
GPIO.setup(servopin, GPIO.OUT, initial=False)
p = GPIO.PWM(servopin,50) #50HZ

while (True):
    os.system('fswebcam -r 320×240 -d /dev/video0 -p yuyv -S 5 /root/timberman/testpictire.jpg')
    time.sleep(0.5) 
    takeimg = Image.open('testpictire.jpg')#打开图片
    region = (50,50,150,220) #设置切割接线

    ctake = takeimg.crop(region) #切割
    Lctake = ctake.convert('L') #灰度化
    Lctake.save('fintest.jpg')

    standimage = Image.open('Lstand.jpg')

    h1 = Lctake.histogram()
    h2 = standimage.histogram()

    rms = math.sqrt(reduce(operator.add,  list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) )

    if rms<1000:
        #p = GPIO.PWM(servopin,50) #50HZ
        p.start(0)
        for i in range(0,181,5):
            p.ChangeDutyCycle(2.5 + 10 * i / 180) #设置转动角度
            time.sleep(0.02)                      #等该20ms周期结束
            p.ChangeDutyCycle(0)                  #归零信号

    else:
        #p = GPIO.PWM(servopin,50) #50HZ
        p.start(0)
        for i in range(181,0,-5):
            p.ChangeDutyCycle(2.5 + 10 * i / 180) #设置转动角度
            time.sleep(0.02)                      #等该20ms周期结束
            p.ChangeDutyCycle(0)                  #归零信号

后期需要改进项

  • 优化代码
  • 调整舵机可控性
  • 针对不同场景建立大量标准图,对各个场景进行优化,增加判断准确度
  • 提高程序运行响应速度甚至考虑通过Arduino控制将项目移植到电脑上,通过PC进行运算
  • 研究一下如何优雅的让电容笔工作
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值