Python掌控遙控車

簡單一點 數碼 2

本文將從多個方面介紹如何使用Python進行遙控車開發,並提供完整的代碼示例。

在使用Python控制遙控車之前,我們需要先搭建遙控車的硬件環境。具體步驟如下:

1、購買遙控車底盤和相關傳感器模塊。

2、按照用戶手冊對遙控車底盤進行組裝。

3、按照傳感器模塊的說明安裝相應傳感器。

4、將樹莓派與底盤連接。

搭建好硬件環境後,我們就可以進行Python程序編寫了。

在控制遙控車運動時,我們需要控制底盤上的電機,從而改變車的運動狀態。具體步驟如下:

1、使用GPIO庫初始化引腳。

import RPi.GPIO as GPIO

def init():
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)

    GPIO.setup(18, GPIO.OUT)
    GPIO.setup(23, GPIO.OUT)
    GPIO.setup(24, GPIO.OUT)
    GPIO.setup(25, GPIO.OUT)

def forward():
    GPIO.output(18, GPIO.HIGH)
    GPIO.output(23, GPIO.LOW)
    GPIO.output(24, GPIO.HIGH)
    GPIO.output(25, GPIO.LOW)

def backward():
    GPIO.output(18, GPIO.LOW)
    GPIO.output(23, GPIO.HIGH)
    GPIO.output(24, GPIO.LOW)
    GPIO.output(25, GPIO.HIGH)

def left():
    GPIO.output(18, GPIO.LOW)
    GPIO.output(23, GPIO.HIGH)
    GPIO.output(24, GPIO.HIGH)
    GPIO.output(25, GPIO.LOW)

def right():
    GPIO.output(18, GPIO.HIGH)
    GPIO.output(23, GPIO.LOW)
    GPIO.output(24, GPIO.LOW)
    GPIO.output(25, GPIO.HIGH)

def clean():
    GPIO.cleanup()

2、使用以上代碼進行車的控制。

下面的代碼通過鍵盤輸入控制遙控車的運動方向。

import cv2
import numpy as np
from car import *

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower = np.array([0,80,80])
    upper = np.array([20,255,255])
    mask = cv2.inRange(hsv,lower,upper)
    res = cv2.bitwise_and(frame,frame,mask=mask)
    gray = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)
    ret, threshold = cv2.threshold(gray,3,255,cv2.THRESH_BINARY)
    contours, hierarchy = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    if len(contours)>0:
        c = max(contours, key=cv2.contourArea)
        ((x,y),radius) = cv2.minEnclosingCircle(c)
        M = cv2.moments(c)
        cx = int(M['m10']/M['m00'])
        cy = int(M['m01']/M['m00'])

        cv2.circle(frame,(int(x),int(y)),int(radius),(0,255,255),2)
        cv2.circle(frame,(cx,cy),5,(0,0,255),-1)

        if cx>=250:
            right()
        elif cx150:
            forward()
        else:
            left()
    else:
        stop()

    cv2.imshow('frame',frame)
    k = cv2.waitKey(5)&0xff
    if k==27:
        break

clean()
cap.release()
cv2.destroyAllWindows()

通過讀取傳感器信息,我們可以對車周圍環境進行感知和避障。具體步驟如下:

1、安裝傳感器模塊,並導入相關庫。

import RPi.GPIO as GPIO
import time

TRIG = 16
ECHO = 12

GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)

2、編寫函數讀取傳感器數據。

def distance():
    GPIO.output(TRIG, 0)
    time.sleep(0.000002)
    GPIO.output(TRIG, 1)
    time.sleep(0.00001)
    GPIO.output(TRIG,0)
    while GPIO.input(ECHO) == 0:
        pass
    pulse_start = time.time()
    while GPIO.input(ECHO) == 1:
        pass
    pulse_end = time.time()
    pulse_duration = (pulse_end - pulse_start) * 1000000
    distance = pulse_duration * 17 / 1000 / 2
    return distance

3、在控制遙控車的代碼中使用距離函數。

from sensor import *

while True:
    dis = distance()
    if dis < 10:
        stop()
        time.sleep(1)
        backward()
        time.sleep(1)
        left()
        time.sleep(1)
    else:
        forward()

clean()

除了通過編寫程序實現遙控車運動外,我們還可以通過手機等遙控設備進行遙控。具體步驟如下:

1、安裝Flask框架並導入相關函數庫。

from flask import Flask, render_template, request, jsonify
from car import *

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

@app.route("/forward")
def forward():
    forward()
    return 'True'

@app.route("/backward")
def backward():
    backward()
    return 'True'

@app.route("/left")
def left():
    left()
    return 'True'

@app.route("/right")
def right():
    right()
    return 'True'

@app.route("/stop")
def stop():
    stop()
    return 'True'

2、編寫HTML頁面進行遙控。

<!DOCTYPE html>
<html>
<head>
	<title>遙控車控制頁面</title>
	<script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script>
	<script>
		$(document).keydown(function(event){
			if(event.keyCode==38){    //按上方向鍵
				$.get("/forward");
			}
			if(event.keyCode==40){    //按下方向鍵
				$.get("/backward");
			}
			if(event.keyCode==37){    //按左方向鍵
				$.get("/left");
			}
			if(event.keyCode==39){    //按右方向鍵
				$.get("/right");
			}
			if(event.keyCode==73){    //按i鍵
				$.get("/stop");
			}
		});
		document.onkeyup = function(event){
			$.get("/stop");
		}
	</script>
</head>
<body>
	<h1>遙控車控制頁面</h1>
	<p>使用方向鍵控制遙控車運動,按i鍵停止</p>
</body>
</html>

使用以上代碼即可通過鍵盤或網頁進行遙控。

回復

共1條回復 我來回復
  • 暫無回復內容