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>
使用以上代码即可通过键盘或网页进行遥控。