• Lv0
    粉丝5

积分71 / 贡献0

提问3答案被采纳0文章1

[经验分享] 深爱农——基于OpenHarmony的智慧农业中控系统【OHMG】 原创 精华

gengbin 显示全部楼层 发表于 2023-12-1 15:19:35

深爱农——基于 OpenHarmony 的智慧农业中控系统

一. 项目描述

摘要: 深爱农——基于 OpenHarmony 的智慧农业中控系统旨在打造一个高效,智能的自动化的农业生产管理平台,来改进现代农业生产。这个系统将充当一个智能中心,用于监测和控制各种智能农业设备,包括无人机、移动机器人、自动灌溉系统和环境监测系统等。各种智能设备将搭载 OpenHarmony 操作系统,通过OpenHarmony分布式架构的特点组成互联的系统网络,实现高效组网通信。这个系统将不仅提高农业生产效率,还有助于可持续农业实践的推广。

  • 软件分类: 农业管理、监控系统
  • 应用领域: 智慧农业、农业管理、农业科技
  • 开放源码组织认可的开放源码许可证类型: Apache License 2.0

二. 项目成果展示

1) 视频链接

【深爱农 | 基于OpenHarmony的智慧农业中控系统】

深爱农应用纯享版

2)目录结构


.
├─DOC # 文档及图片资源目录
├─Drone # 无人机代码库
├─HarmonyFarmApp #智慧农业中控应用APP
├─Monitor_irrigation(hi3861)  # 灌溉系统及环境监测代码库
├─spark_noetic # 播种机器人SPARK代码库
├─harmonyFarm.hap # 应用HAP包
└─README.md # 项目文档

3) 硬件展示

  • 应用测硬件 应用测使用DAYU200开发板以及DAYU800开发板进行开发,均搭载OpenHarmony-3.2Release版本代码,屏幕尺寸涵盖小,中,大型设备,利用一次开发多端部署特性进行页面编写,提高应用的硬件兼容性,且DAYU800搭载平头哥曳影TH1520芯片,同时满足RISC-V架构与OpenHarmony的兼容性技术要求。
dayu200 dayu800 正面 dayu800 背面
dayu200.jpg dayu800_1.jpg dayu800_2.jpg
  • 设备测硬件 设备测硬件目前由农业无人机,播种机器人(SPARK-H),灌溉系统组成,三者皆使用了OpenHarmony开发板进行控制及通信,芯片使用Hi3861。其中无人机采用OpenHarmony开发板与TX2平台进行上下位机进行控制;SPARK-H机器人是由本队成员与深圳未来创想有限公司联合开发设计的全国首款OpenHarmony+机器人产品,背后连接了星火派OpenHarmony开发板;灌溉系统由OpenHarmony开发板进行多传感器的驱动。设备统一搭载OpenHarmony-v3.2-release轻量系统进行开发,实现设备操作系统统一化,便于实现硬件互助,资源共享,真正实现万物互联。
农业无人机 播种机器人 灌溉系统
drone.png spark.png image-20231118234756847.png

4) 应用展示

无人机 播种机器人 灌溉系统
无人机工作.gif 播种机工作.gif 灌溉机工作.gif

三. 设计思路与方案

(一)软件背景及应用场景

中国政府在“十三五”规划中提出了加快农业现代化、推进智慧农业的目标,更加注重科技创新和信息化手段的运用,推进数字农业的发展。近年来,全球人口不断增加,而耕地面积有限,农业生产的资源压力越来越大,这就需要借助智能化、信息化工具来提高农业生产的效率。通过智慧农业项目,可以实现农事作业的精准化管理,提高农业生产效益,减少资源的浪费,提高农产品的品质和产量。

OpenHarmony系统是一种开源的、可跨设备的操作系统,它可以在不同类型的设备上运行,包括智能手机、平板电脑、智能电视以及物联网设备等,而农业的硬件监测系统复杂,所以OpenHarmony操作系统在智能农业领域的应用前景非常广阔。其可以为智能农业提供一个高度可靠和安全的操作系统,同时也具有高度可扩展性和兼容性,可以对接智能传感器和其他物联网设备,从而实现智能农业生产的全面自动化和数字化。同时,OpenHarmony系统分布式架构可以做到让农户远程在手机上观察大棚内各项指标情况,各个指标检测机器都会通过OpenHarmony系统向手机传输信息。

因此,OpenHarmony操作系统在智能农业领域的应用前景非常广阔,有望为智能农业的发展提供更高效、更稳定、更可靠的技术支持。我们的团队利用OpenHarmony的这一优势,结合无人机、移动机器人和环境监测系统等先进技术,打造了一款全新的智慧农业解决方案。

title.jpg

1) 智能农田监测与管理:

  • 实时监测土壤湿度、温度、光照等环境参数。
  • 利用环境监测系统对农田进行精确的数据采集和分析。
  • 根据监测数据智能调整灌溉系统,实现精准的水资源利用。

2) 自动化灌溉系统:

  • 农民可以通过中控平台实时监测农田的土壤湿度、温度等环境参数。
  • 根据监测结果,灵活调整自动灌溉系统的工作模式,确保作物得到精准的水分供给。
  • 远程控制功能使农民能够根据实际需要随时调整灌溉计划,响应气象变化和作物生长状况。

3) 智能植保无人机:

  • 农民可以远程启动和控制植保无人机的飞行。
  • 在检测到植物病害或虫害时,通过中控平台下达指令,实现无人机的智能巡视和植物保护任务。
  • 远程操控功能提高了响应速度,降低了植保任务的时间成本。

4) 移动机器人农业作业:

  • 中控平台允许农民远程调度移动机器人进行不同的农业作业,如土地耕作、种植和收割。
  • 实现远程路径规划和作业监控,提高了作业的灵活性和效率。
  • 农民可以根据实时需求,随时调整移动机器人的工作任务,实现更加智能和高效的农田管理。

(二)设计思路

1) 应用功能性设计

  • 作为智慧农业中控应用,整体应用应该具备管理农业设备环境数据监测的能力。
  • 能够监测农业设备数量,在线情况
  • 能够监测设备运转情况,须有日志功能,记录设备工作信息,警报,便于及时采取相应措施。
  • 直观显示环境数据,使用图表的方式进行显示。
  • 提供设备配置,操作界面,例如植保无人机,播种机器人,灌溉系统的操作页面。
  • 账号及安全功能

2) 硬件兼容性设计

  • 农田规模较大时,设备控制量多时,单设备可能无法满足大规模数据的控制及监控,并且不同功能所需要的屏幕尺寸和硬件不同,需考虑应用的硬件兼容性,避免性能过剩,节约设备成本。
  • 多硬件之间随意调用、互助共享,让用户享受无缝的农业全场景体验,例如使用智慧大屏进行数据监控,便携平板进行设备管理,移动小型设备进行实地设备操作。
  • 考虑到以上问题,可以利用 OpenHarmony一次开发,多端部署的技术特性,高效构建多端可运行的应用。

3) 场景,设备可拓展性设计

  • 不同农田对可能对应不同的作物,需要不同的设备,不同的灌溉方案,应用应该提供灵活的方案定制功能,为各个方案分配对应的设备。
  • 使用到的农业设备多种多样,为每个设备提供统一的开发模板,相同类型的设备提供统一的操作页面,便于后续不同设备的加入,使支持灵活的设备拓展

4)模块功能设计

  • 植保无人机:实现指定路线巡逻,进行农药喷洒或者灌溉撒种,应用需要与无人机上的 OpenHarmony 模块通信,能够控制无人机自动完成工作,并监控无人机的工作状态,包括无人机航线,高度,无人机模块在线情况等。
  • 播种机器人:实现指定路线的建图导航,配合激光雷达,摄像头和机械臂,实现精准的移动播种工作,应用需要与移动机器人上的星火派OpenHarmony开发板进行通信,控制机器人自动完成播种,进行实时的状态显示,播种进度,机器人模块在线情况,并提供底盘控制以及移动建图的功能,便于适应复杂多变的实际环境。
  • 灌溉及环境监测系统:实现土壤及空气的数据监测,并根据监测到的数据,自动进行决策和调整,实现精准灌溉精准施肥,减少资源浪费和环境污染。使用搭载 OpenHarmony 系统的设备进行传感器驱动,并进行与中控平台的通信,中控平台可以配置灌溉系统的模式,配置触发条件,阀门大小,灌溉时间等,还可提供定时灌溉及自动灌溉模式,以适应特殊环境。

5) 数据存储与持久化设计

  • 为确保数据的完整,避免数据的丢失,进行更好的数据管理,使用关系型数据库进行数据存储。
  • 为实现多设备之间数据的流转,同步,需使用分布式软总线能力,进行分布式数据管理

(三)系统架构

智慧农业中控系统的架构分为应用层,OpenHarmony 设备层,智能设备层。

应用层通过 Deveco Studio 开发工具,基于 Stage 模型和 ArkTs 语言编写 OpenHarmony 应用程序,包括用户程序框架,Ability 框架,UI 框架的实现,最终实现智慧农业中控应用。

OpenHarmony 设备层主要包括标准系统设备以及轻量系统设备的应用,中控系统应用主要部署在标准系统设备上,并利用 OpenHarmony 一次开发多端部署的特性,可以支持不同设备的适配显示,轻量系统设备主要用于智能农业设备例如无人机,传感器的驱动及通信载体,不同 OpenHarmony 设备之间连接上局域网或者近场通信后通过软总线或者其他通信协议进行设备组网,数据传输,实现设备间的互联互通。

智能设备层则是实际执行相应的农业工作以及检测环境状况的设备,包括植保无人机进行农药喷洒,移动机器人播种插秧或者收割,自动灌溉系统进行灌溉,环境监测系统监测温湿度风力等环境条件并实行相应的措施防范,还可以根据农田的需求和规模逐步增加设备和传感器的连接。

系统架构图:

systm_struct.png

系统流程图:

systm.png

(四)通讯架构

智慧农业系统智慧设备通过接入局域网内,便使用 UDP 进行对外广播自身设备名称、设备类型等数据,以此等待富设备响应。智慧设备与富设备互相连接上后,便可通过协定好的通讯协议进行数据传输、指令收发,实现多设备的互联协同。

通讯协议.md

image-20231117200511258.png

(五)应用 UI 设计

UI 设计方面采用一次开发多端部署的技术,随着终端设备形态日益多样化,分布式技术逐渐打破单一硬件边界,使得应用可以在不同的硬件设备之间随意调用、互助共享,让用户享受无缝的全场景体验。“一次开发,多端部署”能力,使得智慧农业中控应用可以部署在不同的设备上,例如使用智慧大屏进行数据监控,便携平板进行设备管理,移动小型设备进行实地设备操作。基于一种设计,高效构建多端可运行的应用,节约了大量的开发成本。“一次开发,多端部署”能力参考一次开发多端部署能力

  • 主页(数据监控页)
小设备 中设备 大设备
de52e90777b632c65254b5053bf8027a.png 73054987e30a055aff318328a46a5152.png 472bb45a134f377f99630ed14a028052.png 8e958189cab3709c44b41205b76194c0.png
  • 设备列表页
小设备 中设备 大设备
1c89f07b1dda6ec46789f7f07a6910c4.png 6ccc26ec8826642e7a6e68a2a3480b3f.png 30c3eb1fef4368c7141235ece55461c6.png
  • 设备操作页面
自动灌溉页面 无人机操作页面 播种机操作页面
fde14e1f849c34f1801aebfbfa86ef86.png 5a6a5ea58b6c50624fb1fd01c45163b1.png fa7a18d0c28fb48ab9f65cff93e3b94a.png
6935e5a8ad9d72b5998c700da8229696.png 9ad9023b9c00999628f76cc9c91542eb.png 6cc7c04c7bdcc50e6622c00431aa9a13.png
  • 其他页面
账户页面 设备搜索页面 SPARK-H 手动建图页面
476355ff6948ff37e6f7c472a1cdedd6.png 060d83a75668ced831f785b589bfb3cb.png 3c3ba9d375ceea55b0711bb44a62d286.png

(六) 系统特点及创新

基于 OpenHarmony 的智能化架构:项目以 OpenHarmony 操作系统作为核心,每个设备均搭载OpenHarmony操作系统模块,利用其分布式架构特点实现智能农业设备之间的互联互通,实现面向全场景、全连接、全智能的智能化农业中控系统。依赖分布式软总线的各种智能设备能够自发现组网,依赖分布式数据管理及分布式任务调度,应用跨设备运行时数据无缝衔接,为打造一致、流畅的用户体验创造了基础条件。这种基于 OpenHarmony 的智能化架构在农业领域中尚属较为新颖和创新,分布式架构软硬结合在 OpenHarmony 领域也属于较为少有的应用,并且支持系统的灵活拓展,可以根据农田的需求和规模逐步增加设备和传感器的连接。

统一OS,弹性部署:本项目用到大量的OpenHarmony设备,包括L0,L2设备,并且型号也不尽相同,如DAYU200,DAYU800,HiSpark-Pegasus,星火派等,有arm架构也有RISC-V架构,OpenHarmony 统一OS,弹性部署的特性,使得只需要一份全量代码,便可以进行不同设备统一代码统一平台进行开发,比起传统的一份代码开发一个工程,更加的省时省力,不同工程按需弹性话配置所需组件,通过组件化和组件弹性化等设计方法,做到硬件资源的可大可小,在多种终端设备间,按需弹性部署,全面覆盖了ARM、RISC-V、x86等各种CPU,提高了开发效率,降低开发成本。

一次开发,多端部署:随着终端设备形态日益多样化,分布式技术逐渐打破单一硬件边界,使得应用可以在不同的硬件设备之间随意调用、互助共享,让用户享受无缝的全场景体验。“一次开发,多端部署”能力,使得智慧农业中控应用可以部署在不同的设备上,例如使用智慧大屏进行数据监控,便携平板进行设备管理,移动小型设备进行实地设备操作。基于一种设计,高效构建多端可运行的应用,节约了大量的开发成本,提高了应用的硬件兼容性。

智能农业设备的集成与优化:项目集成了多种智能农业设备,如无人机、移动机器人、自动灌溉系统和环境监测系统等,实现了设备之间的协同工作和数据共享。分布式数据管理可以实现实时的数据共享与处理,将农田中收集的数据通过总线传输到中心控制系统或云平台进行分析和处理。通过优化设备的功能和性能,提高了设备的智能化水平和农业生产效率。

精准农业管理:项目通过传感器检测环境温湿度、风力等参数,并将数据实时传输到中控平台上进行分析和决策。基于这些数据和决策结果,项目实现了精准农业管理,包括精确的农药使用、合理的灌溉量等,从而减少了资源浪费和环境污染。

可持续农业实践的推广:项目的创新之处还在于其推广可持续农业实践的理念。通过智能化的农业生产管理和资源利用优化,项目有助于推动农业向更加可持续、环保的方向发展,提高农业生产的可持续性和生态效益。

(六)关键技术

1. 一次开发,多端部署

一次开发,多端部署是指通过一套代码,可以在多个不同的平台上进行部署和运行。这种开发模式可以提高开发效率和代码重用性,同时降低维护成本。对于随尺寸变化组件结构相同的场景,可以在开发过程中灵活使用自适应布局能力来达到目标效果。对于随尺寸变化组件结构不同的场景,更适合使用响应式布局能力来实现不同尺寸下的不同显示的效果。本项目中大量用到一次开发多端部署特性,成功适配了小型屏幕设备(DAYU200),中型屏幕(竖屏)及大型屏幕(横屏)平板设备(DAYU800),使得项目的场景应变能力,多设备协同能力及用户体验感得到显著提升,并节约了开发成本。

2. 分布式技术

OpenHarmony的分布式软总线提供了一种高效的通信机制,用于在分布式系统中进行模块之间的通信和数据传输。提供了可靠的消息传递机制,确保消息的可靠性和有序性。分布式数据管理提供了分布式数据存储和管理的解决方案,便于不同设备之间的数据交换与同步,提高设备的协同工作能力,分布式关系型数据库的使用,对于农业方案,设备,传感器数据的管理不仅提供数据持久化功能,还便于数据在设备间的流转。分布式任务调度和执行的机制,用于在分布式系统中管理和调度任务。支持任务的分布式调度和负载均衡,实现任务的高效执行和资源的合理利用。

3. OpenHarmony 南向设备开发及传感器技术

OpenHarmony是一个面向多种设备的全场景操作系统,不仅支持L0设备进行应用开发,还支持L2设备进行设备驱动开发,并且使用统一OS,弹性部署,一套代码适配本次项目中的所有OpenHarmony设备,使用统一的OpenHarmony-3.2Release版本进行开发。本项目需要进行大量传感器的驱动开发,利用各种传感器(如温度传感器、光照传感器等)获取环境数据,并熟悉操作设备外设进行设备之间的通信,能够使用网络协议栈进行网络编程,并通过OpenHarmony操作系统进行处理和分析。

4. 无人机飞控技术

本无人机底层使用TX2、STM32采集无人机飞行时的飞行姿态、飞行位置等数据,如MPU7050提供了飞行姿态信息,光流传感器、激光传感器、T265传感器提供了飞行定位导航信息,电机编码器提供无人机电机转速,将多种传感器数据融合以实现无人机的飞行控制。

5. ROS 机器人系统技术

ROS(Robot Operating System)是一个开源的机器人系统软件平台。它提供了一系列工具、库和软件包,用于开发、控制和管理机器人系统。ROS可以支持不同硬件平台和操作系统,并提供了丰富的功能和接口,方便机器人开发和应用,便于进行机器人底盘移动,机械臂控制,视觉识别,SLAM建图导航等功能以实现机器智能化,自动化。需要开发者掌握ROS的应用编写技术,熟练ROS的通信机制以及编译流程,协调机器人各个部分的控制以及配合,需要开发者对于自动建图导航算法有一定的了解,根据实际场景优化导航算法,并且要掌握Linux的串口通信技术,使NUC与OpenHarmony开发板星火派进行通信,实现OpenHarmony控制节点,接入OpenHarmony生态体系,实现万物互联。

(七)应用社会与经济效益

  1. 利用高科技推进致富,推动农业可持续发展 OpenHarmony系统的分布式应用架构及系统能力,可以实现对于农业生产的全面自动化和数字化。这不仅有利于农业生产的高效化和智能化,同时也将为农业产业的数字化转型和升级提供重要支持。通过数字化手段,农业生产者可以更加精细化地管理农业生产,提高资源利用效率。同时,其可以帮助人们从繁重的体力劳动中解脱出来,优化农村现实人员结构,帮助妇女老人也能实现增收。 首先,我们的系统可以提高农业生产效率。通过实时监测农田的环境状况,如土壤湿度、温度、光照强度等,我们可以为农民提供精准的种植建议和决策支持。例如,根据土壤湿度、温度和作物生长情况等信息,我们可以为农民推荐合适的灌溉方案和施肥策略,从而提高农作物的产量和品质。此外,通过与无人机、移动机器人等设备的深度集成,我们的系统可以实现农业生产的自动化和智能化,大大提高作业效率和准确性。 其次,我们的系统有助于降低农业生产成本。传统的农业生产过程中,农民需要投入大量的人力、物力和财力进行管理和维护。而我们的系统可以实现远程监控和管理,使得农民可以随时随地查看农田的信息,进行精细化管理。同时,通过与无人机、移动机器人等设备的深度集成,我们的系统可以实现农业生产的自动化和智能化,减少人工投入,降低生产成本。
  2. 实现产业涵养劳动力,增加就业岗位 OpenHarmony系统的开发、载入、使用、维护和升级,需要大量的技术人才和运营人员,这可以增加就业机会,促进社会和谐稳定。
  3. 保护农业种植数据,成为国家安全后盾 OpenHarmony系统的安全性与稳定性高,对保护我国农业种植数据有重要的意义,是守护我国粮食安全的强大后盾。开源OpenHarmony系统的可拓展性与可兼容性强,可应用于多种农作物的生长数据收集分析上,未来系统发展成熟,可将技术开源,让更多的人使用我们的系统,助力于中国农业智能化发展。
  4. 协调城乡差距,实现创新、协调、绿色等新发展理念 OpenHarmony系统的应用可以帮助农村地区解决信息技术落后的问题,从而缩小城乡之间的差距。通过与城市和其他农村地区建立连接,农村地区可以获得更多的资源和技术支持,促进城乡协调发展。其次传统的农业生产过程中,过度使用化肥、农药等化学物质,导致环境污染和生态破坏。而我们的系统可以为农民提供精准的施肥建议和灌溉方案,减少化肥、农药的使用量,降低对环境的污染。同时,通过与环境监测系统的深度集成,我们的系统可以实时监测农田的环境状况,为农业生产提供科学依据,促进农业绿色发展。

四. 开发指导

1. 智慧农业中控应用

1.1 目录介绍

应用的工程结构设计参考一多工程管理进行构建。将工程分为common,features,product三层工程结构,features层暂无需设置。

公共特性目录common存放工具库、公共配置等,编译成HAR包,结构如下:

common
└─src
    ├─main
    │  ├─ets
    │  │  ├─model # 数据结构模块
    │  │  │      BasicDataSource.ets # IDataSource用于数据懒加载
    │  │  │      Main.ets # 类定义
    │  │  └─util # 通用工具类
    │  │          Logger.ts # 日志
    │  │          Style.ts # 样式定义
    │  └─resources
    └─index.ts #声明外部接口组件

产品定制层 product,创建使用默认设备default,主功能模块的实现,编译为一个Entry类型的HAP包。

default/src
├─main
│  │  module.json5
│  │
│  ├─ets
│  │  ├─entryability
│  │  │      EntryAbility.ts #主入口
│  │  │
│  │  └─pages
│  │      │  DeviceDiscovery.ets # 设备发现页
│  │      │  Index.ets #主页
│  │      │  RobotManual.ets # 机器操作页
│  │      │
│  │      ├─common # 通用组件
│  │      │      Constant.ets # 弹窗
│  │      │      DeviceCard.ets # 设备卡片
│  │      │      DeviceDialog.ets #远程设备列表
│  │      │      Extend.ets # 拓展样式
│  │      │      TabBarItem.ets # TabBar样式
│  │      │      TextInputDialog.ets # 文本输入弹窗
│  │      │   
│  │      │
│  │      ├─components # 主组件
│  │      │      AddDevice.ets # 添加设备组件
│  │      │      DeviceContent.ets # 设备管理页
│  │      │      DeviceList.ets # 设备列表组件
│  │      │      DeviceStatistics.ets # 设备总览组件
│  │      │      HomeContent.ets # 主页内容
│  │      │      HumidityBar.ets # 湿度柱状图组件
│  │      │      IndexHeader.ets # 主页头
│  │      │      IndexTitleBar.ets # 主页标题栏
│  │      │      MeteorologicalAxis.ets # 气象折线组件
│  │      │      MyAccount.ets # 账号页面
│  │      │      RoboControl.ets 
│  │      │      SolutionSideBar.ets #方案管理侧边栏
│  │      │      SolutionTitleBar.ets # 方案管理标题栏
│  │      │      StatusLogs.ets # 设备日志组件
│  │      │
│  │      ├─dialog
│  │      │      DroneDialog.ets # 无人机操作弹窗
│  │      │      IrrigateDialog.ets # 灌溉机操作弹窗
│  │      │      RobotDialog.ets # 播种机操作弹窗
│  │      │
│  │      ├─features
│  │      │      SoilFeature.ts # 土壤湿度画布
│  │      │
│  │      ├─model
│  │      │      DeviceType.ets 
│  │      │      RdbConst.ets
│  │      │      RdbDataManagement.ets # 数据库数据管理类
│  │      │      RdbModel.ets # 关系型数据库封装
│  │      │      RemoteDeviceModel.ets # 连接设备管理
│  │      │      TcpSocket.ts # TCP接口封装
│  │      │      UdpSocket.ts # UDP接口封装
│  │      │
│  │      └─utils # 工具类
│  │              DataHandle.ets # 接收设备数据处理
│  │              Decode.ets # 字符串工具
│  │              Util.ets # 其他工具类
│  │
│  └─resources # 资源
└─ohosTest

1.2 UI页面实现

UI界面的实现设计的内容较多,主要展示用到的核心组件内容以及个部件的作用,如下表,具体实现参考对应部件代码:

类型 简介 实现方案 对应部件
主页面 主页 Tabs页签,实现数据监控页,设备管理也及账户页的切换,根据断点设置BarPosition方向,适应不同设备 Index
页签容器 数据监控页 包含各类子组件,栅格布局能力GridRowGridCol,实现组件不同设备不同的布局效果。 HomeContent
页签容器 设备页 包含各设备子组件,使用SideBarContainer实现侧边栏,使用Swiper组件进行不同方案的切换 DeviceContent
页签容器 账户页 展示头像,通过List组件显示账户信息 MyAccount
组件 主页标题栏 显示logo及应用名称,又上角点击使用自定义弹窗组件展示其他功能,包括分布式流转,横竖屏切换,测试数据以及退出应用 IndexTitleBar
组件 主页头部 自适应布局相对布局,农业方案Circle沿中心图标弧形排列,并根据屏幕大小调整圆弧方向,可切换进行切换方案 IndexHeader
组件 设备总览 自适应布局延伸能力,使用List组件罗列设备在线及离线情况 DeviceStatistics
组件 操作记录 自适应布局延伸能力,使用List组件罗列设备运行事件,警告事件 StatusLogs
组件 湿度监测 使用'@ohos/mpchart'三方库绘制柱状图,直观显示土壤湿度及空气湿度数据 HumidityBar
组件 温度监测 使用'@ohos/mpchart'三方库绘制折线图,直观显示土壤温度及空气温度数据及变化趋势 MeteorologicalAxis
组件 侧边栏 展示和选择各类智慧农业方案,Search组件进行方案搜索,List组件罗列当前方案,并绑定各类手势实现方案增加删除 SolutionSideBar
组件 侧边标题栏 展示当前农业方案及拉起关闭侧边栏 SolutionTitleBar
组件 设备列表 使用Scroll进行设备滑动选择,List展示各类设备 DeviceList
组件 设备卡片 单设备展示,显示设备信息,在线情况,并绑定对应的dialogController进行进一步的设备控制 DeviceCard
组件 添加设备 router跳转到设备发现页面进行设备搜索 AddDevice
页面 设备发现 使用loadingProgress() 显示连接过程,发现设备后使用List组件显示设备信息,进行连接操作 DeviceDiscovery
页面 机器人控制 网络连接机器人后提供各类Button发送信息控制机器人运动及建图 RobotManual
弹窗 无人机配置 栅格布局能力适应布局,图片自适应缩放自适应均分能力自适应折行能力对设备数据进行显示,使用响应式布局能力结合Grid组件实现进度条的显示 DroneDialog
弹窗 机器人配置 栅格布局能力适应布局,图片自适应缩放自适应均分能力自适应折行能力对设备数据进行显示,使用响应式布局能力结合Grid组件实现进度条的显示 RobotDialog
弹窗 灌溉机配置 自定义画布Canvas绘制湿度条,自适应均分能力自适应折行能力对设备数据进行显示,Rect绘制强度选择条,Slider组件进行数据设置,TimePickerDialog组件选择时间,并控制组件的显隐及使能去能 IrrigateDialog

1.3 分布式软总线连接

设备软总线连接接口在RemoteDeviceModel中,源码参考RemoteDeviceModel.ets

使用@ohos.distributedDeviceManager 接口,首先通过createDeviceManager创建设备管理器实例,然后通过getTrustedDeviceListSync同步获取所有可信设备列表;接口调用参考IndexTitleBar,使用showDiainfo进行弹窗显示,registerDeviceListCallback注册监听回调,发现设备或查找到已认证设备会弹窗显示,使用selectDevice()连接选择的设备,如果是已新人设备调用startAbility远程拉取设备应用,为信任设备则调用authenticateDevice接口进行PIN码认证在拉取应用。

设备连接:首先通过on方法注册设备状态,例如发现设备,设备连接失败,然后通过startDeviceDiscovery方法发现周边设备,然后选择连接设备,再用startAbility 启动连接设备的应用。

RemoteDevice.png

具体实现参考分布式软总线连接拉取应用

1.4 分布式关系型数据库设计实现

在数据持久化方面,使用分布式关系型数据进行数据持久化管理,将农业数据存储和管理分布在多个节点上的数据库系统,实现多设备数据的同步。在智慧农业应用中,选择使用分布式关系型数据库来存储和管理农业方案、设备信息、参数和事件历史数据等。

数据库表格设计如下: FarmingPrograms 表格:

字段名 数据类型 描述
id INT 方案ID(主键)
programName VARCHAR 方案名
cropType VARCHAR 作物名

Devices 表格:

字段名 数据类型 描述
id INT 设备ID(主键)
deviceName VARCHAR 设备名
deviceType VARCHAR 设备类型
deviceNumber VARCHAR 设备号
netAddress VARCHAR 设备网络地址
port INT 设备端口号
farmingProgramId INT 所属方案ID(外键)

Parameters 表格:

字段名 数据类型 描述
id INT 参数ID(主键)
deviceId INT 所属设备ID(外键)
parameter VARCHAR 参数名
value VARCHAR 参数值

Historys 表格:

字段名 数据类型 描述
id INT 参数ID(主键)
farmingProgramId INT 所属方案ID(外键)
deviceId INT 所属设备ID(外键)
event VARCHAR 事件
eventTime VARCHAR 事件发生时间
eventLevel INT 事件级别

数据库的创建增、删、改、查操作都在RdbModel中,源码参考RdbModel.ets

RdbDataManagement类,用于管理数据库的操作,对数据库操作的封装,包括数据的增删改查以及数据同步等功能。源码参考RdbDataManagement.ets

有关分布式关系型数据库的具体实现与接口设计参考数据持久化及关系型数据库

1.5 三方库@ohos/mpchar的使用

在智慧农业中控应用中需要监测各类传感器数据并显示,最好使用图表的方式进行数据的展示,@ohos/mpchar库正好提供了绘制图标组件的功能,包括曲线图、柱形图、饼状图、蜡烛图、气泡图,雷达图等自定义图表库。极大提高了开发者的工作效率,并且能开发出比较美观的图表。

智慧农业中控应用中湿度数据使用柱状图进行显示,具体参考HumidityBar.ets。温度数据使用折线图进行显示,具体参考HumidityBar.ets

使用三方库的使用一般分为以下步骤,具体的mpchar库的使用参考mpchar三方库使用.

thirdLib

1.6 设备通信实现

不同应用终端设备间的数据传输依赖分布式软总线能力以及分布式数据库,进行数据传输与交换,应用测与农业设备测进行交互由于OpenHarmony暂未打通L0设备与L2设备之间的软总线能力,所以L0设备与L2设备之间的通信依赖于TCP或者UDP协议,具体的接口实现参考UdpSocket.ts,TcpSocket.ts.

依照通讯协议.md,实现应用测的协议编解码,具体代码参考DataHandle.ets

1.7 其他

横竖屏切换

先导入common和Window获取设备context及窗口管理能力

import common from '@ohos.app.ability.common
import Window from '@ohos.window'

使用getLastWindow(context)获取当前窗口,使用setPreferredOrientation设置窗口显示方向,支持一下模式:

Orientation.png

参考代码:

private changeOrientation() {
    let windowClass = null;
    //获取上下文
    //var context = getContext(this) as any
    // 获取上下文,使用common模块
    var context = getContext(this) as common.UIAbilityContext;
    let promise = Window.getLastWindow(context);
    promise.then((data) => {
      windowClass = data;
      if (this.portrait) {
        //切换成横屏
        let orientation = Window.Orientation.LANDSCAPE;
        windowClass.setPreferredOrientation(orientation, (err) => {
        });
        this.portrait = !this.portrait
        console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));
      }
      else {
        //切换成竖屏
        let orientation = Window.Orientation.PORTRAIT;
        windowClass.setPreferredOrientation(orientation, (err) => {
        });
        this.portrait = !this.portrait
        console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));
      }
    }).catch((err) => {
      console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err));
    });
  }
全屏显示

通过设置setWindowSystemBarEnable接口的names参数来控制导航栏、状态栏 的可见模式 names参数设置为['navigation'],设置顶部状态栏不可见。 names参数设置为['status'],设置底部导航栏不可见。 names参数设置为空,即[],设置底部导航栏、顶部状态栏都不可见

onWindowStageCreate(windowStage: window.WindowStage) {

    let names: Array<'status' | 'navigation'> = ['navigation'];
    let windowClass = null;
    windowStage.getMainWindow((err, data) => {
    if (err.code) {
      console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
      return;
    }
    windowClass = data;
    console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
    windowClass.setWindowSystemBarEnable(names, (err) => {
      if (err.code) {
        console.error('Failed to set the system bar to be invisible. Cause:' + JSON.stringify(err));
        return;
      }
      console.info('Succeeded in setting the system bar to be invisible.');
    });
  });
}

1.8 运行环境

相关权限: ohos.permission.DISTRIBUTED_DATASYNC ohos.permission.ACCESS_SERVICE_DM "ohos.permission.INTERNET" "ohos.permission.GET_WIFI_INFO"

本示例的同步功能需要两台设备组网后测试; 本示例设备需要连接设备添加到数据库,主页右上角功能栏提供测试样例。 本示例仅支持标准系统上运行,支持设备:DAYU200,DAYU800。 本示例为Stage模型,支持API9版本SDK,SDK版本号(API Version 9 Release),镜像版本号(3.2 Release) 本示例需要使用DevEco Studio 版本号(3.2 Release)及以上版本才可编译运行。 本示例需要使用@ohos.distributedDeviceManager系统权限的系统接口。使用Full SDK时需要手动从镜像站点获取,并在DevEco Studio中替换,具体操作可参考替换指南。

2. 农业无人机

农业无人机致力于低空灌溉作业,解决灌溉地形复杂,灌溉面积大等工作情景。

传统农业无人机通过接入海思 Hi3861,搭载 OpenHarmony 轻量化操作系统,与中控系统的各个智能设备组成高效互联的系统网络,实现数据流转、无人机控制。打破传统无人机独立工作,信息单一的种种难题,实现数据集中管理和分析,满足用户对灌溉的不同需求,提高设备的灵活性和功能性。

2.1无人机架构

当前整体无人机分成了三大部分:底层传感器、底层处理芯片、顶层信息交互芯片。底层处理芯片暨下位机,负责处理复杂的定位计算、执行具体的控制任务。顶层信息交互芯片暨上位机,负责与OpenHarmony智慧中控系统通讯,接收控制指令以及传输无人机实时飞行状态信息。

本无人机底层使用TX2、STM32采集无人机飞行时的飞行姿态、飞行位置等数据,如MPU7050提供了飞行姿态信息,光流传感器、激光传感器、T265传感器提供了飞行定位导航信息,电机编码器提供无人机电机转速,将多种传感器数据融合以实现无人机的飞行控制。下视摄像头作为辅助定位功能,可通过下视摄像头实现判断降落点是否正确等功能。

在底层之上,通过采用了海思Hi3861芯片,将无人机接入OpenHarmony系统中,底层收集到的各类信息都可以通过OpenHarmony系统流转到各类OpenHarmony富设备中,并且可以被OpenHarmony富设备所控制,无人机成为万物互联的一部分,避免了无人机信息孤岛。

image-20231117165737374.png

2.2流程图

OH.jpg

2.3程序设计

无人机发现可信任局域网后,自动连接到局域网中,并且在局域网中搜索OpenHarmony富设备。与OpenHarmony富设备连接后,OpenHarmony富设备可通过一系列指令控制无人机,无人机在起飞前被设定好飞行路径,便可起飞按照预定预定路线进行飞行。

在飞行状态中,无人机后台实时接收陀螺仪、光流传感器、T265追踪相机等传感器数据进行对自身的定位定高,主程序是按照预定路线进行飞行,子程序是实时响应OpenHarmony富设备发送当前飞行状态,并监视是否接收到急停或者返航指令。但预定路线飞行完毕后,便自动返回起飞点降落。

image-20231117192557016.png

2.4代码架构

base_connect:集成网络连接API、设置WIFI名称密码IP等

base_FSR:封装中控、无人机底层通信协议,提供与中控、无人机底层通信收发的API

wifi_connect_demo:程序运行主函数

OH_drone
    ├─base_connect.c
    ├─base_connect.h
    ├─base_FSR.c
    ├─base_FSR.h
    └─wifi_connect_demo.c

2.5 底层关键技术

农业无人机关键技术方案参见:农业无人机.md

3. 播种机器人

3.1 架构图

spark架构图.jpg

3.2 流程图

image-20231119193946384.png

机器人整体在结构上分为三个部分

  • 星火派 作为数据传输节点,通过 TCP 协议与 中控设备 进行数据交互,再通过串口通信向 上位机 NUC 传达中控设备的命令,并且收集 NUC 传回的操控数据等。
  • 上位机 NUC 使用 LINUX 系统通过 ROS 机器人操作系统,借助串口通信进行控制、导航算法的运行,以及一些高级传感器的驱动。例如使用激光雷达、深度相机进行建图和避障导航,对机械臂进行控制等等。
  • 底盘 搭载着执行器和传感器装置,负责具体指令的执行,使 spark 机器人能够进行整体移动、机械臂移动,同时回传 IMU 以及里程计的信息等。

3.3 使用的技术

  • ROS 话题通信

    具体实现是通过节点 node 之间穿的 message 进行信息传输

    • Node Master 相当于管理中心,管理 node 通讯。不同的 node 在创建时会在 master 处进行注册,之后将 node 收入 ROS 程序中。ROS 程序启动时,首先启动 master,即常用的 roscore 命令,然后管理器再依次启动 node。
    • Node 节点 是 ROS 中执行运算任务的进程,一个功能模块通常由多个节点组成。在通信中分为发布节点 publisher 用于发布话题和订阅节点 subscriber 用于订阅话题消息。
    • message 是节点之间传递信息的数据格式,支持标准数据类型,也支持自定义消息类型。

    建立数据通讯具体步骤如下:

    • publisher 注册发布话题 -> subscriber 注册订阅话题 -> master 信息匹配 -> subscriber 发送连接请求 -> publisher 确认连接请求 -> 建立网络连接 -> publisher 向 subscriber 发布数据
  • 激光 SLAM 算法

    Gmapping 是一个基于 2D 激光雷达使用 RBPF(Rao-Blackwellized Particle Filters)算法完成二维栅格地图构建的 SLAM 算法。 SLAM 算法采用粒子滤波来估计机器人的位姿,并为每一个粒子构建一个地图。即每个粒子都包含了机器人的轨迹和对应的环境地图。 经过计算之后每个粒子都携带这上一时刻的位姿、权重、地图。 通过公式可以根据上一时刻机器人轨迹通过里程计的状态传播之后,得到该粒子的预测位姿。 根据预测位姿在观测模型的作用下,得到该粒子代表的当前机器人轨迹,也就是完成了该粒子的机器人位姿估计。 根据机器人轨迹结合观测数据,即可闭式得到该粒子代表的地图。 这样每一个粒子都存储了一个机器人轨迹,以及一张环境地图。

3.4 星火派

星火派开发板支持 LiteOS、OpenHarmony 等系统,支持外接多种传感器,让开发者通过一台设备就能控制所有终端设备。开发板已通过了 OpenHarmony 生态产品兼容认证,可以满足多种基于OpenHarmony开发的市场应用场景。

3.5 开发文档

主流程代码.py 整个程序的流程如下:

  1. 星火派等待接入局域网
// wifi设置
  else if (!strcmp(result.data.c_str(), "wifi_msg"))
  {
    std::fstream m_fs;
    m_fs.open("/home/spark/wifi_info.txt", ios::in);
    if (!m_fs.is_open())
    {
      cout << "读取文件失败" << endl;
    }
    string buf;
    string str_buf;
    str_buf = "set_wifi:";
    while (getline(m_fs, buf))
    {
      cout << buf << endl;
      str_buf = str_buf + buf;
    }
    printf("msg:%s\n", str_buf.c_str());
    if (!str_buf.empty())
    {
      _serial.write(str_buf);
      printf("send:%s\n", str_buf.c_str());
    }
  }
  1. 等待上层中控设备发送模式命令(auto/manual)
// 模式接收并设置
  else if (!strcmp(result.data.c_str(), "auto"))
  {
    control_mode_cmd.data = "auto_mode";
    mode_pub.publish(control_mode_cmd);
  }
  else if (!strcmp(result.data.c_str(), "manual"))
  {
    control_mode_cmd.data = "manual_mode";
    mode_pub.publish(control_mode_cmd);
  }
  1. NUC 接收到模式命令,进行相应操作
rospy.Subscriber('control_mode', String, control_mode) # 根据control_mode收到的模式,执行control_mode函数
  • 上位机 NUC 思路:作为小车控制的话题发布方,需要先通过串口通信,从 星火派 处得到 中控设备 发来的命令,再对机械臂或底盘进行相应操作。向 机械臂底盘 发送命令时,通过 ROS 话题通信发送命令,并且同样通过话题得到两者传回的状态信息,进行相应的调整。 NUC 从星火派处获得命令并发送命令到底盘和机械臂.cpp NUC 发送信息到星火派.cpp
  • 星火派端 思路:星火派端负责数据通信转接,因此需要实现不同的数据收发功能。与上层 中控设备端 的数据传送,需要用到 TCP 协议,进行数据包的接收解析和打包发送。与 上位机 NUC 的数据传送,使用串口通信,将上层 中控设备 发来的命令信息通过串口传输给 NUC
  • 机械臂端 思路:通过 ROS 话题通信从 NUC 发布的控制机械臂运动话题获取控制信息,然后进行相应的操作。同时将机械臂的状态将消息传回。
  • 底盘端 思路:通过 ROS 话题通信,从 NUC 处发布的控制底盘运动话题获取运动信息,然后进行运动和导航,将导航和建图数据传回 NUC

3.6 使用文档

在工作空间 spark_noetic 目录下输入:

source devel/setup.bash
roslaunch spark_hm_task_match run.launch

3.7 应用场景介绍

因为具有激光雷达、深度摄像头、SLAM 建图导航等多个算法,目前 Spark 机器人可实现的功能有APP 远程控制、机械臂抓取、地点导航与避障、视觉跟随等,未来可应用到各种适合机器人代替作业的场景,如农业种植、餐厅送餐、快递配送、工厂制造、养老助残陪护、消毒清洁运输等场景。在农业种植中,机械臂可以执行插秧操作,同时避障算法可以支持 spark 在田间穿梭,做到节省人力的效果。spark 上配备的摄像头可以支持远程观察植物长势,利于劳动者远程管理。

4. 环境监测&自动灌溉系统

4.1 简介

环境监测&自动灌溉系统主要负责采集土壤以及水流的基本情况,然后可以决策是否驱动电磁阀。

image-20231118234825853.png

系统架构 图

4.2 各个功能特点

4.2.1 土壤环境监测
  • 设备

土壤环境监测主要采用的是下图所示的土壤温湿度+EC+PH 传感器(五插针土壤四参数传感器是性能稳定灵敏度高,响应快,输出稳定,适用于 各种土质。是观测和研究盐渍土的发生、演变、改良以及水盐动态的重要工具。),采用的是 RS485 串口传输方式,但是由于 hi3861 的开发板并没有相对应的接口,所以额外使用 TTL 转 RS485 模块进行数据传输。

image-20231118234857756.png

土壤温湿度+EC+PH 传感器 图

image-20231118234911369.png

TTL 转 RS485 模块 图

代码思路:

① 初始化 GPIO 和 UART1 参数

② 循环中通过 UART1 发送预定义数据给土壤传感器,请求传感器的响应。

查询电导率温度水分 PH 值传感器(地址为 1)的数据,主机 → 从机

image-20231118235038403.png

③ 若传感器接收正确,返回以下数据,从机 → 主机,然后进行解析。

image-20231118235104245.png

温度计算:

当温度低于 0 ℃ 时温度数据以补码的形式上传。

温度:FF9B H(十六进制)= -101 => 温度 = -10.1℃

水分计算:

水分:292 H (十六进制)= 658 => 湿度 = 65.8%,即土壤体积含水率为 65.8%。

电导率计算:

电导率:3E8 H (十六进制)= 1000 电导率 = 1000 us/cm

PH 值计算:

PH 值:38H(十六进制)=56 => PH 值=5.6

④ 将处理后的测量数值打印输出,并通过延时实现周期性的数据交互。

4.2.2 自动灌溉系统

灌溉系统主要采用的是多合一的水流量传感器

image-20231118235235148.png

  • 水流量的测量

采用的是霍尔水流量传感器。霍尔水流量传感器主要水流转子组件和霍尔元件组成。当水流流过传感器时,水流会推动磁性转子转动,霍尔元器件就会输出对应的脉冲信号,再由微处理器(MCU)的 GPIO 引脚对脉冲信号进行上升沿触发计数,根据脉冲数与水流量的对应关系,就可以实现对水流量的记录,同时在相对较短的时间测得的水流量除以这段时间,就可以得到水的流速。

假设 x 为微处理器的脉冲数,p 为 1L 水所需的脉冲数,f 为实际水流量(单位为 L),v 为水流速(单位为 L/s)。根据霍尔水流量传感器的原理,我们可以得到下面关系:

image-20231118235306749.png

系数 P 一方面可以在购买传感器时,卖家会提供,另一方面可以通过大量的实验计算获得。因此只需要测得脉冲数 x 即可根据公式计算出水流量 f 和流速 v。

微处理器要读取霍尔传感器传输的脉冲信号,只需要设置其 GPIO 引脚对脉冲信号的上升沿触发计数,再根据商家提供的脉冲周期数和水流总数的关系就能推断出实际的水流量。

在实际的部署测试中,我们采用多次测量取平均值的方法求得实际的脉冲数与水流量的关系更厂商提供的存在 0.4%的相对误差。由于误差很小就直接采用了厂商提供的传感器参数(流过一升水发出 900 个脉冲信号,p=900)。

  • 温度数据采集

水温数据的采集我们使用的是热敏电阻来获得。热敏电阻是一种电阻值会随着温度变化而变化的电阻器件。每一种电阻都会有类似如下图所示的温度特性表,详细记录着每个温度对应的阻值。

image-20231118235404541.png

因此我们只需要知道电阻,即可通过查表的方式获得对应大概的温度。但是微处理器不具备直接测量电阻的功能,因此我们设计了如下电路用于测量热敏电阻的阻值。

在电路图中 R 是一个已知的定值电阻,Rt 是待测的温敏电阻,VCC 表示电源正极,一般由微处理器提供 3.3 或 5V 的电压。在这个电路图中 ADC 代表的是微处理器的 ADC 引脚,该引脚具有采集电压的功能。假设 Rt 为热敏电阻阻值,R 为已知的定值电阻阻值,Va 为 ADC 测得的电压,Vc 为 Vcc 供电的电压。根据欧姆定律可以得到下面式子。

image-20231118235438515.png

根据上述公式,只需要知道测量点 ADC 电压的大小,即可得到热敏电阻测得的温度值 t。

  • 关键代码

water_sensor.c

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论2

nhzzm

沙发 发表于 2023-12-5 23:41:03
有看了视频,感觉你们的团队是真的厉害,连无人机也弄了,而且ui页面也做得贼好看,大佬

mvpint

来自手机 板凳 发表于 2023-12-11 16:44:15
参考一下,学习一下😺😺😺

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部