diff --git a/carsrun/appCam.py b/carsrun/appCam.py index 1568e9e..d35ba90 100644 --- a/carsrun/appCam.py +++ b/carsrun/appCam.py @@ -19,6 +19,8 @@ from car import CAR import threading import cv2 app = Flask(__name__, static_url_path='') +# 照片保存路径 +PHOTO_PATH = "photo.jpg" def gen_frames(): # generate frame by frame from camera picam2 = Picamera2() @@ -42,6 +44,18 @@ def index(): def video_feed(): #Video streaming route. Put this in the src attribute of an img tag return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame') +#--------------------------------------------------------------------------------- +@app.route('/take_photo') +def take_photo(): + picam2 = Picamera2() + picam2.configure(picam2.create_video_configuration(main={"format": 'XRGB8888', "size": (640, 480)})) + picam2.start() + frame = picam2.capture_array() # Capture a single frame + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + cv2.imwrite(PHOTO_PATH, frame) # Save the frame as a JPEG file + + return send_file(PHOTO_PATH, as_attachment=True) # Send the file to download +#--------------------------------------------------------------------------------------- # def gen(camera): # """Video streaming generator function.""" @@ -69,9 +83,6 @@ car = CAR() @app.route('/control/') def control_index(): word = """指令:\n - /led: 灯光闪烁\n - /led_light: 打开全部灯光\n - /led_dark: 关闭全部灯光\n /stop(/Q): 小车停止运动\n /forward(/W): 小车开始运动\n /back(/S): 小车向后运动\n diff --git a/carsrun/car.py b/carsrun/car.py index c72f49a..f6b1743 100644 --- a/carsrun/car.py +++ b/carsrun/car.py @@ -3,11 +3,11 @@ import os import time import RPi.GPIO as GPIO from base_ctrl import BaseController -####################################### -#############信号引脚定义############## -####################################### + + GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) +#底盘连接 def is_raspberry_pi5(): with open('/proc/cpuinfo', 'r') as file: for line in file: @@ -17,75 +17,18 @@ def is_raspberry_pi5(): else: return False +#云台连接 + base = BaseController('/dev/ttyAMA0', 115200) class CAR: - def __init__(self): - self.LED0 = 10 #LED0的IO口定义 - self.LED1 = 9 #LED1的IO口定义 - self.LED2 = 25 #LED2的IO口定义 - self.ENA = 13 #//L298 使能A - self.ENB = 20 #//L298 使能B - self.IN1 = 19 #//电机接口1 - self.IN2 = 16 #//电机接口2 - self.IN3 = 21 #//电机接口3 - self.IN4 = 26 #//电机接口4 - GPIO.setup(self.LED0, GPIO.OUT, initial=GPIO.HIGH) ##led0初始化为高电平 - GPIO.setup(self.LED1, GPIO.OUT, initial=GPIO.HIGH) ##led1初始化为高电平 - GPIO.setup(self.LED2, GPIO.OUT, initial=GPIO.HIGH) ##led2初始化为高电平 - GPIO.setup(self.ENA, GPIO.OUT, initial=GPIO.LOW) ##ENA初始化为低电平 - GPIO.setup(self.ENB, GPIO.OUT, initial=GPIO.LOW) ##ENB初始化为低电平 - GPIO.setup(self.IN1, GPIO.OUT, initial=GPIO.LOW) ##IN1初始化为低电平 - GPIO.setup(self.IN2, GPIO.OUT, initial=GPIO.LOW) ##IN2初始化为低电平 - GPIO.setup(self.IN3, GPIO.OUT, initial=GPIO.LOW) ##IN3初始化为低电平 - GPIO.setup(self.IN4, GPIO.OUT, initial=GPIO.LOW) ##IN4初始化为低电平 - - def led(self): - GPIO.output(self.LED0,False) - GPIO.output(self.LED1,False) - GPIO.output(self.LED2,False)###LED0,LED1,LED2 = 亮 亮 亮 - time.sleep(0.5) - GPIO.output(self.LED0,True) - GPIO.output(self.LED1,False) - GPIO.output(self.LED2,False)###LED0,LED1,LED2 = 灭 亮 亮 - time.sleep(0.5) - GPIO.output(self.LED0,False) - GPIO.output(self.LED1,True) - GPIO.output(self.LED2,False)###LED0,LED1,LED2 = 亮 灭 亮 - time.sleep(0.5) - GPIO.output(self.LED0,False) - GPIO.output(self.LED1,False) - GPIO.output(self.LED2,True)###LED0,LED1,LED2 = 亮 亮 灭 - time.sleep(0.5) - GPIO.output(self.LED0,False) - GPIO.output(self.LED1,False) - GPIO.output(self.LED2,False)###LED0,LED1,LED2 = 亮 亮 亮 - time.sleep(0.5) - GPIO.output(self.LED0,True) - GPIO.output(self.LED1,True) - GPIO.output(self.LED2,True)###LED0,LED1,LED2 = 灭 灭 灭 - time.sleep(0.5) - print("run: led") - - def led_light(self): - GPIO.output(self.LED0,False) - GPIO.output(self.LED1,False) - GPIO.output(self.LED2,False)###LED0,LED1,LED2 = 亮 亮 亮 - print("run: led_light") - - def led_dark(self): - GPIO.output(self.LED0,True) - GPIO.output(self.LED1,True) - GPIO.output(self.LED2,True)###LED0,LED1,LED2 = 灭 灭 灭 - print("run: led_dark") + input_x = 0 + input_y = 0 + input_speed = 0 + input_acc = 0 def stop(self): # 停止运行 - GPIO.output(self.ENA,False) - GPIO.output(self.ENB,False) - GPIO.output(self.IN1,False) - GPIO.output(self.IN2,False) - GPIO.output(self.IN3,False) - GPIO.output(self.IN4,False) + base.send_command({"T":1,"L":0,"R":0}) print("run: stop move") def Q(self): # 停止的快捷键 @@ -95,7 +38,7 @@ class CAR: def forward(self): # 前进 base.send_command({"T":1,"L":0.2,"R":0.2}) - time.sleep(2) + time.sleep(1) base.send_command({"T":1,"L":0,"R":0}) print("run: move !!!!forward") @@ -105,12 +48,9 @@ class CAR: self.forward() def back(self): # 后退 - GPIO.output(self.ENA,True) - GPIO.output(self.ENB,True) - GPIO.output(self.IN1,True) - GPIO.output(self.IN2,False) - GPIO.output(self.IN3,True) - GPIO.output(self.IN4,False) + base.send_command({"T":1,"L":-0.2,"R":-0.2}) + time.sleep(1) + base.send_command({"T":1,"L":0,"R":0}) print("run: move back") def S(self): # 后退的快捷键 @@ -119,12 +59,9 @@ class CAR: self.back() def left(self): # 左转 - GPIO.output(self.ENA,True) - GPIO.output(self.ENB,True) - GPIO.output(self.IN1,False) - GPIO.output(self.IN2,True) - GPIO.output(self.IN3,True) - GPIO.output(self.IN4,False) + base.send_command({"T":1,"L":-0.2,"R":0.2}) + time.sleep(0.5) + base.send_command({"T":1,"L":0,"R":0}) print("run: move left") def A(self): # 左转的快捷键 @@ -133,15 +70,28 @@ class CAR: self.left() def right(self): # 右转 - GPIO.output(self.ENA,True) - GPIO.output(self.ENB,True) - GPIO.output(self.IN1,True) - GPIO.output(self.IN2,False) - GPIO.output(self.IN3,False) - GPIO.output(self.IN4,True) + base.send_command({"T":1,"L":0.2,"R":-0.2}) + time.sleep(0.5) + base.send_command({"T":1,"L":0,"R":0}) print("run: move right") def D(self): # 右转的快捷键 self.right() def d(self): - self.right() \ No newline at end of file + self.right() + + def up(self): + self.input_y+=10 + base.gimbal_ctrl(self.input_x, self.input_y, self.input_speed, self.input_acc) + + def down(self): + self.input_y-=10 + base.gimbal_ctrl(self.input_x, self.input_y, self.input_speed, self.input_acc) + + def yunleft(self): + self.input_x-=10 + base.gimbal_ctrl(self.input_x, self.input_y, self.input_speed, self.input_acc) + + def yunright(self): + self.input_x+=10 + base.gimbal_ctrl(self.input_x, self.input_y, self.input_speed, self.input_acc) \ No newline at end of file diff --git a/carsrun/templates/index-t.html b/carsrun/templates/index-t.html index b0afa2a..0279e62 100644 --- a/carsrun/templates/index-t.html +++ b/carsrun/templates/index-t.html @@ -22,6 +22,7 @@ +
实时视频流

小车控制界面

@@ -29,19 +30,38 @@
- +
-
+
- + - + + + + +
+ +
+ + +
+
+ +
- + + + + +
+
@@ -75,8 +95,13 @@