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>
使用以上代碼即可通過鍵盤或網頁進行遙控。