logo
carrot

太阳当空照,花儿对我笑

巡山机器人

8/19/2023, 10:37:27 AM
  1. 首页
  2. /
  3. 正文

创作灵感

2024年3月30日,四川省西昌市突发森林大火,宁南县森林草原防灭火专业扑火队员紧急奔赴现场救援。3月31日凌晨,21名消防队员和一名当地向导在救火途中突遇风向大变,火借风势,一行人被熊熊烈火团团围困,只有3人幸存,19人不幸遇难。此次森林火灾与2019年凉山木里森林火灾仅相隔一年,2019年火灾致27名消防员和4名地方干部群众共31人牺牲。同一季节,同是凉山,悲剧重演,令人无比痛心。全世界范围内,消防员几乎都是和平年代里牺牲最多的职业。在我国,消防部队纳入中国人民武装警察部队序列,所以每次任务叫“出警”。他们一次次“逆行”,赴汤蹈火,用身躯筑起“防火线”。山东省泰安市消防支队原支队长许传升告诉《生命时报》记者,培养一名合格的消防员至少需要1159小时,也就是145天的时间。消防员的日常训练包括单兵训练、班组训练、中队合成训练等,其中单兵训练又包括体能训练、技能训练、心理训练、战术训练、理论学习。在现代灭火救援任务中,无论是先进的装备,还是完备的战术,最终都得依靠作战主体—消防员去操纵、实施,因此体能是消防员的第一素质,也是有效完成各类灭火救援任务的根本保障。消防战士们每天都要进行大量训练,如百米负重跑、10层负重登楼操、搬运重物折返跑等,提高自身速度、耐力、力量、爆发力、协调性等,以支撑他们在救援现场的体能。

我们不希望再看到消防员因山风突变等原因被火海吞噬,所以我们设计了一款四足仿生巡山灭火一体机器人。

四足仿生是为了更好的在复杂的山地环境行走。我们设想着机器人从天而降扑灭火海的画面。

创作过程

  1. 3D建模并打印了机器人外壳

  2. 设计单片机程序,使用8舵机驱动机器人,下面展示核心代码。

    #include "conf.h"
    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    #include "vkml.h"
    #include <Series.h>
    #include <Ticker.h>
    #include <DNSServer.h>
    #include <WiFiUdp.h>
    #include <Servo.h>
    
    int servoOffsets[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    // Servos matrix
    const int ALLMATRIX = 9; // GPIO14 + GPIO12 + GPIO13 + GPIO15 + GPIO16 + GPIO5 + GPIO4 + GPIO2 + Run Time
    const int ALLSERVOS = 8; // GPIO14 + GPIO12 + GPIO13 + GPIO15 + GPIO16 + GPIO5 + GPIO4 + GPIO2
    
    // MG90S servo PWM pulse traveling
    const int PWMRES_Min = 1; // PWM Resolution 1
    const int PWMRES_Max = 180; // PWM Resolution 180
    const int SERVOMIN = 400; // 400
    const int SERVOMAX = 2400; // 2400
    
    // Servo delay base time
    const int BASEDELAYTIME = 10; // 10 ms
    
    // Motion data index
    int Servo_PROGRAM;
    
    // Servo ID
    int GPIO_ID;
    int GPIO14_PWM;
    int GPIO12_PWM;
    int GPIO13_PWM;
    int GPIO15_PWM;
    int GPIO16_PWM;
    int GPIO5_PWM;
    int GPIO4_PWM;
    int GPIO2_PWM;
    
    // Backup servo value
    int Running_Servo_POS [ALLMATRIX];
    
    Servo GPIO14SERVO;
    Servo GPIO12SERVO;
    Servo GPIO13SERVO;
    Servo GPIO15SERVO;
    Servo GPIO16SERVO;
    Servo GPIO5SERVO;
    Servo GPIO4SERVO;
    Servo GPIO2SERVO;
    
    VKML vkml;
    
    WiFiUDP Udp;
    char udpPacketBuffer[UDP_TX_PACKET_MAX_SIZE + 1];
    
    DNSServer dnsServer;
    
    Ticker ticker;
    
    CONF conf;
    WiFiClient wifiClient;
    PubSubClient MQTT(wifiClient);
    
    void (*resetFunc)(void) = 0;
    
    String ssid = conf.get("ssid"), pwd = conf.get("pwd"), sn = conf.get("sn"), sk = conf.get("sk");
    
    Series fastLoopTasks;
    Series slowLoopTasks;
    Series mqttCallbackTasks;
    bool slowLoopReady = false;
    
    void setup() {
      Serial.begin(115200);
      delay(1000);
      Serial.println();
    
      //初始化spider
      spiderSetup();
    
      //检测是否被设置过
      if (conf.get("status") == "") {
        WiFi.mode(WIFI_AP_STA);
        //没有配网,开启热点
        Serial.print("Setting soft-AP ... ");
        Serial.println(WiFi.softAP("rabbit-chameleon", "") ? "Ready" : "Failed!");
        Serial.println("IP address: ");
        Serial.println(WiFi.softAPIP());
        //开启dns服务器
        dnsServer.start(53, "rabbit.com", WiFi.softAPIP());
        fastLoopTasks.add([]() {
          dnsServer.processNextRequest();
        });
        //开启udp
        Udp.begin(8888);
        fastLoopTasks.add([]() {
          udpServerLoop();
        });
      } else {
        //已经配网连接wifi
        connectWiFi();
        //开启mqtt
        connectMQTT();
        slowLoopTasks.add([]() {
          //定时检测wifi连接状态
              if (WiFi.status() != WL_CONNECTED) {
            connectWiFi();
          }
          //定时检测mqtt连接状态
          if (!MQTT.connected()) {
            Servo_PROGRAM_Lie();
            connectMQTT();
          }
        });
        //servoSetup();
        //dhtSetup();
        //smeSetup();
        //waterSetup();
      }
    
      ticker.attach(1, []() {
        slowLoopReady = true;
      });
    }
    
    void loop() {
      fastLoopTasks.run();
      if (slowLoopReady) {
        //slowLoop
        slowLoopTasks.run();
        slowLoopReady = false;
      }
    }
    
    
  3. 采用WiFi控制,编写上位机,下面展示上位机核心代码。

    <!DOCTYPE html>
    <html lang="zh">
    	<head>
    		<meta charset="UTF-8">
    		<meta http-equiv="X-UA-Compatible" content="IE=edge">
    		<meta name="viewport" content="width=device-width, initial-scale=1.0">
    		<title>操控系统</title>
    		<style>
    			* {
    				margin: 0;
    				padding: 0;
    				webkit-user-select: none;
    				-webkit-touch-callout: none;
    			}
    		</style>
    		<link rel="stylesheet" href="./function.min.css">
    		<link rel="stylesheet" href="./handsome.min.css">
    	</head>
    	<body>
    		<!-- 摄像头 -->
    		<div>
    			<video id="huamian" style="width: 100vw;height: 100vh;object-fit: fill;" autoplay>
    			  <source src="./huoqingshipin.mp4" type="video/mp4">
    			</video>
    		</div>
    		<!-- 地图 -->
    		<div style="position: fixed;top: 10px; left: 10px;border-style: solid; border-radius: 9%;overflow: hidden;">
    			<div id="map" style="width: 150px;height: 130px;"></div>
    		</div>
    
    		<div style="position: fixed;top: 10px; left: 200px;">
    			<p id="tip" style="color: red;"></p>
    			<a href="./xunhang.html">
    				<button>设置巡航</button>
    			</a>
    		</div>
    
    
    		<!-- 操作 -->
    		<div style="position: fixed;bottom: 150px;right: 100px;">
    			<a id="water">
    				<img style="width: 50px; display: inline-block; border-style:solid;border-radius:33px;overflow: hidden;" src="./flow.png" alt="喷水">
    			</a>
    
    		</div>
    		<!-- package -->
    		<script src="https://cdn.jsdelivr.net/gh/jquery/jquery@3.6.4/dist/jquery.min.js"></script>
    		<script src="./function.js"></script>
    		<script src="./vkml.js"></script>
    
    		<!-- js -->
    		<script src="joy.js"></script>
    		<div id="joyDiv" style="position: fixed; bottom: 50px; left: 50px; width:100px;height:100px;"></div>
    		<script src="yaogan.js"></script>
    
    
    		<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=znq4fk9w4xce6yZ3juZogmzpIM1M8gkV"></script>
    		<script src="ditu.js"></script>
    		<script src="./mqtt.js"></script>
    		<script src="tongxin.js"></script>
    		<script type="text/javascript">
    			window.addEventListener('contextmenu', function(e) {
    				e.preventDefault();
    			})
    		</script>
    <!-- 		<script>
    			$.message({
    				title: "通知",
    				message: "提交失败,检查网络问题",
    				type: 'warning'
    			})
    		</script> -->
    	</body>
    </html>
    
  4. 使用esp-cam作为图传模块。

  5. 使用火焰红外传感器作为探火模块。

  6. 使用ATGM332D GPS北斗双模定位模块提供gps信息。

功能

  1. 定点巡航
    基于gps进行定位巡航。
  2. 远程操控
    机器人接入mqtt服务器,进而实现远程操控。
  3. 灭火
    喷射灭火剂进行灭火。
  4. 探火
    红外传感器+图传探火。

答辩

各位评委老师好,很荣幸能够参加本次决赛答辩。我们的参赛作品是四足仿生巡山灭火一体机器人。

整体展示:我们的产品采用的是四足仿生结构。采用八个舵机灵活控制行走,可在复杂崎岖路面行走。使用esp32-cam图传模块将图像传至上位机实时显示。上位机与机器人主控采用mqtt协议通讯进行数据上报与远程控制。上位机采用了轮盘摇杆控制机器人行走。机器人可利用gps按设置的点阵定点巡航,发现火情后及时上报。通过人工远程操控喷射灭火剂进行灭火。

产品整体创新点:集四足仿生,图像传递,火情探测,位置定位,远程控制于一体。

创新点1:传统轮式机器人难以适应森林环境的复杂路面,我们采用四足仿生结构,自由度提高,可在复杂地形行走。

创新点2:基于esp-cam的图传模块,将路况进行实时传递给操作者。esp32获取图像数据后首先发送到服务器上 , 然后由服务器转发到对应的APP上 . 此方法可实现 "多对多"的数据传输.。

创新点3:使用火焰红外传感器作为探火模块,了解着火点,对其进行准确灭火。火焰传感器利用红外线对对火焰非常敏感的特点,使用特制的红外线接受管来检测火焰,然后把火焰的亮度转化为高低变化的电平信号,输入到 中央处理器 中,中央处理器根据信号的变化做出相应的程序处理。

创新点4:采用WiFi控制,编写上位机,进行低延迟操纵。

请各位评委老师和专家批评指正。

热门文章
标签云
© 2021 Copyright 本站由 upyun 提供储存服务