回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

无人巡逻车 简单

头像 于恺 2024.01.15 174 2

随着人工智能及无人驾驶技术的发展,无人驾驶巡逻车已成为现代安全部门的一项重要装备。这种车辆可对校园公共安全实行无死角巡逻,不仅有助于缩短反应时间,增强保安效能,而且能够有效地保障校园的安全与稳定。无人巡逻车工作方式有两种,一种是设定巡逻路线,巡逻车按照规划路线巡逻;一种是人远程遥控巡逻,人通过网络遥控车辆行驶,通过摄像头查看巡逻的环境。

图1车外观.jpg

轮式移动机器人是移动机器人中应用最多的一种机器人,在校园平坦地面上,采用轮式移动方式让巡逻车移动速度快、高效。所以可以采用麦昆小车底盘,使用马达驱动无人车的移动。使用行空板作为小车主控,行空板带有WIFI模块,能够通过网络远程获取到实时画面,也可以实现远程控制机器人。图2车辆接线图.png

巡逻车要实现以下功能,能够实现无人驾驶,管理员通过网络控制的方式实现对巡逻车的远程操控,实现对校园各点的巡逻;管理员能够实时调取巡逻车的视频画面,及时发现问题;能够实现远程喊话,督促学生早点回家、禁止打闹,根据功能要求设计思维导图如下。图4无人巡逻车设计思维导图.png

根据思路要求首先要设计SIOT(物联网数据平台)主题为siot/camera(存储实时图像数据)、siot/run(控制车辆移动的数据)、siot/news(实时喊话数据的传输)。图5 SIOT主题设置.png

图6 官方库设置.png

行空板连接网络,初始化MQTT协议,在这一定要让SIOT服务器与行空板连接同一个局域网内的无线网络,端口、用户名、密码默认的就可以,无需改动。这里订阅消息发送的订阅,分别是siot/run、siot/news。

图9 MQTT设置.png

控制车辆移动及语音播报

图14控制车辆流程图.png

可视化平台设计

图16管理界面可视化.png

图15控制车辆程序.png

代码
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.libs.dfrobot_dualuse_shield import DFRobot_DualuseShield
import base64
from io import BytesIO
from PIL import Image
from dfrobot_speech_synthesis import *
from pinpong.board import Board
from unihiker import GUI
import siot
import cv2

# 事件回调函数
def on_message_callback(client, userdata, msg):
    if (msg.topic == "siot/run"):
        if (msg.payload.decode() == "front"):
            p_mbt0014_motor.run(p_mbt0014_motor.ALL, p_mbt0014_motor.CW, 100)
        else:
            if (msg.payload.decode() == "right"):
                p_mbt0014_motor.run(p_mbt0014_motor.M1, p_mbt0014_motor.CCW, 100)
                p_mbt0014_motor.run(p_mbt0014_motor.M2, p_mbt0014_motor.CW, 100)
            else:
                if (msg.payload.decode() == "left"):
                    p_mbt0014_motor.run(p_mbt0014_motor.M1, p_mbt0014_motor.CW, 100)
                    p_mbt0014_motor.run(p_mbt0014_motor.M2, p_mbt0014_motor.CCW, 100)
                else:
                    if (msg.payload.decode() == "behind"):
                        p_mbt0014_motor.run(p_mbt0014_motor.ALL, p_mbt0014_motor.CCW, 100)
                    else:
                        p_mbt0014_motor.stop(p_mbt0014_motor.ALL)
    else:
        gravity_sstts.speak(msg.payload.decode())
def u_thread1_function():
    while True:
        if vd.grab():
            ret, grab = vd.read()
            siot.publish(topic="siot/camera", data=base642base64(grab))
        else:
            print("没有下一帧")


siot.init(client_id="2772934995473315",server="192.168.101.72",port=1883,user="siot",password="dfrobot")
Board().begin()
u_gui=GUI()
p_mbt0014_motor = DFRobot_DualuseShield()
siot.connect()
siot.loop()
gravity_sstts = DFRobot_SpeechSynthesis_I2C()
siot.set_callback(on_message_callback)
siot.getsubscribe(topic="siot/news")
siot.getsubscribe(topic="siot/run")

def frame2base64(frame):
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    img = Image.fromarray(frame) #将每一帧转为Image
    output_buffer = BytesIO() #创建一个BytesIO
    img.save(output_buffer, format='JPEG') #写入output_buffer
    byte_data = output_buffer.getvalue() #在内存中读取
    base64_data = base64.b64encode(byte_data) #转为BASE64
    return base64_data #转码成功 返回base64编码

def base642base64(frame):
    data=str('data:image/png;base64,')
    base64data = str(frame2base64(frame))
    framedata = base64data[2:(len(base64data)-1)]
    base642base64_data = data + str(framedata)
    return base642base64_data
vd = cv2.VideoCapture()
vd.open(0)
while not (vd.isOpened()):
    print("摄像头初始化中……")
gravity_sstts.begin(gravity_sstts.V2)
gravity_sstts.speak("你好")
p1=u_gui.draw_image(image="robot.png",x=0,y=0)
p1.config(w=240)
thread1=u_gui.start_thread(u_thread1_function)

while True:
    pass

评论

user-avatar
  • 伦**

    伦**2024.03.13

    太厉害了!!!

    0
    • 许培享

      许培享2024.01.20

      上视频🎵

      0