• 方案介紹
    • 一、前言
    • 二、樹莓派4B環(huán)境搭建
    • 三、代碼設計
    • 四、總結
  • 附件下載
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

基于視覺識別的自動采摘機器人設計與實現(xiàn)

06/01 08:16
703
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

更多詳細資料請聯(lián)系.docx

共1個文件

一、前言

1.1 項目介紹

【1】項目功能介紹

隨著科技的進步和農(nóng)業(yè)現(xiàn)代化的發(fā)展,農(nóng)業(yè)生產(chǎn)效率與質量的提升成為重要的研究對象。其中,果蔬采摘環(huán)節(jié)在很大程度上影響著整個產(chǎn)業(yè)鏈的效益。傳統(tǒng)的手工采摘方式不僅勞動強度大、效率低下,而且在勞動力成本逐漸上升的背景下,越來越難以滿足大規(guī)模種植基地的需求。人工采摘還可能因不規(guī)范的操作導致果實損傷,影響商品果率。

基于視覺識別技術的自動采摘機器人的研發(fā),正是針對這一問題提出的創(chuàng)新解決方案。本項目采用樹莓派4B作為主控芯片,因其具有強大的計算能力和豐富的擴展接口,可以方便地集成各種傳感器和執(zhí)行機構,實現(xiàn)對復雜環(huán)境下的實時圖像采集與處理。

項目利用百度飛漿(PaddlePaddle深度學習框架中的目標檢測和分類算法,通過安裝在機器人上的高清攝像頭獲取果樹圖像,并進行實時分析,精準識別出果實的位置、大小以及成熟度等信息。當成功識別到目標果實后,主控系統(tǒng)將根據(jù)識別結果快速計算出機械手臂的最佳運動路徑,控制其移動至指定位置,以最適宜的方式完成果實的高效、無損采摘。

基于視覺識別的自動采摘機器人設計與實現(xiàn)項目旨在解決傳統(tǒng)農(nóng)業(yè)中人工采摘的瓶頸問題,通過人工智能與自動化技術的深度融合,提高果園管理的智能化水平,降低勞動成本,提高生產(chǎn)效率,從而推動我國乃至全球農(nóng)業(yè)產(chǎn)業(yè)向更加智能、高效的現(xiàn)代農(nóng)業(yè)轉型。

【2】設計實現(xiàn)的功能

(1)視覺識別:借助高性能的攝像頭和圖像處理算法(本項目采用百度飛漿的目標識別和分類算法),機器人能夠捕捉到果園中的果實圖像,并準確地從中識別出目標果實。

(2)定位與導航:在識別到果實后,系統(tǒng)會通過計算果實的空間坐標和距離,確定機械手臂需要到達的精確位置。同時,機器人會根據(jù)果園內的環(huán)境信息和路徑規(guī)劃算法,自動導航至目標果實附近。

(3)機械手臂控制:一旦機器人到達目標位置,機械手臂會在系統(tǒng)的精確控制下,自動調整姿態(tài)和動作,以輕柔而準確的方式采摘果實。這一過程涉及到復雜的機械動力學和協(xié)同控制算法,確保采摘動作的高效和安全。

(4)果實收集與處理:采摘下來的果實會被機器人收集到專門的容器中,以便后續(xù)的分揀、包裝和處理。系統(tǒng)還可以對采摘的果實進行數(shù)量統(tǒng)計和質量評估,為農(nóng)業(yè)生產(chǎn)提供有價值的數(shù)據(jù)支持。

本項目實現(xiàn)的功能是一個完整的自動采摘機器人系統(tǒng),從視覺識別到機械手臂控制,再到果實收集與處理,形成了一個高效、智能的自動化采摘流程。這不僅大大提高了農(nóng)業(yè)生產(chǎn)的效率和質量,也展示了人工智能技術在現(xiàn)代農(nóng)業(yè)領域的廣闊應用前景。

【3】項目硬件模塊組成

(1)主控板:采用樹莓派4B開發(fā)板作為整個系統(tǒng)的主控芯片。樹莓派是一款功能強大且易于使用的計算機主板,具備高性能的處理器、充足的內存和存儲空間,以及豐富的接口和擴展功能,可以滿足本項目對計算和控制的需求。

(2)視覺系統(tǒng):視覺系統(tǒng)包括高性能的攝像頭和圖像處理單元。攝像頭負責捕捉果園中的圖像信息,而圖像處理單元則基于百度飛漿的目標識別和分類算法,對圖像進行處理和分析,以識別和定位目標果實。

(3)機械手臂:機械手臂是實現(xiàn)自動采摘的關鍵部件,由多個關節(jié)和執(zhí)行器組成,可以在三維空間內自由移動和旋轉。通過精確的控制算法,機械手臂能夠準確地到達目標果實的位置,并執(zhí)行采摘動作。

(4)傳感器和導航系統(tǒng):為了實現(xiàn)自動導航和精確定位,項目中還集成了多種傳感器和導航系統(tǒng)。這些傳感器可以感知環(huán)境信息,如距離、方位、障礙物等,而導航系統(tǒng)則根據(jù)這些信息規(guī)劃出機器人的最佳路徑。

(4)電源和供電系統(tǒng):為了保證機器人的持續(xù)工作,項目中還包括了電源和供電系統(tǒng)。電源負責為各個硬件模塊提供穩(wěn)定的電力供應,而供電系統(tǒng)則可以根據(jù)實際需要調整電力輸出,以滿足機器人在不同工作狀態(tài)下的能耗需求。

本項目的硬件模塊組成包括主控板、視覺系統(tǒng)、機械手臂、傳感器和導航系統(tǒng)、電源和供電系統(tǒng)以及其他輔助模塊。這些硬件模塊相互協(xié)作,共同實現(xiàn)了基于視覺識別的自動采摘機器人系統(tǒng)的功能。

【3】功能總結

系統(tǒng)集成了先進的視覺識別技術、機械手臂控制技術以及自動導航技術,能夠自動識別和定位果園中的目標果實,并通過機械手臂完成采摘動作。整個過程無需人工干預,實現(xiàn)了果園采摘的自動化和智能化。

功能包括果實的自動識別和定位、機械手臂的自動導航和控制以及果實的自動收集和處理。通過高性能的攝像頭和圖像處理算法,系統(tǒng)能夠準確捕捉和識別目標果實的圖像信息;借助精確的導航和控制算法,機械手臂能夠自動導航至果實位置并完成采摘;最后,采摘下來的果實會被自動收集并進行后續(xù)處理。

本項目的功能實現(xiàn)不僅提高了果園采摘的效率和準確性,降低了人力成本,同時也為農(nóng)業(yè)生產(chǎn)的現(xiàn)代化和智能化發(fā)展提供了新的解決方案和思路。該系統(tǒng)的成功應用將為農(nóng)業(yè)生產(chǎn)帶來革命性的變革,推動農(nóng)業(yè)向更高效、更環(huán)保、更可持續(xù)的方向發(fā)展。

1.2 設計思路

(1)需求分析:對果園采摘的實際需求進行分析,明確項目需要解決的問題和達到的目標。了解果園的環(huán)境特點、果實類型和生長狀況,以及采摘作業(yè)的流程和要求,為后續(xù)設計提供基礎依據(jù)。

(2)技術選型:根據(jù)需求分析的結果,選擇合適的技術方案。選用樹莓派4B開發(fā)板作為主控芯片,利用其高性能的處理器和豐富的接口資源,實現(xiàn)機器人的控制和管理。同時,采用百度飛漿的目標識別和分類算法,通過視覺系統(tǒng)實現(xiàn)對目標果實的準確識別和定位。

(3)硬件設計:根據(jù)技術選型,設計機器人的硬件結構。包括攝像頭的選型和布局,確保能夠捕捉到清晰、穩(wěn)定的圖像信息;機械手臂的設計和選型,使其能夠適應果園環(huán)境和采摘需求;導航和傳感器系統(tǒng)的設計和選型,實現(xiàn)機器人的自動導航和精確定位。

(4)軟件設計:編寫機器人的控制程序和算法。通過圖像處理算法實現(xiàn)對目標果實的識別和定位,將結果傳遞給導航和控制系統(tǒng);根據(jù)導航和傳感器系統(tǒng)提供的信息,規(guī)劃機器人的運動路徑和動作,控制機械手臂完成采摘動作;實現(xiàn)果實的計數(shù)、分類和收集等功能,以及數(shù)據(jù)的存儲和傳輸。

(5)系統(tǒng)集成與測試:將各個硬件模塊和軟件程序進行集成,并進行系統(tǒng)測試和調試。確保各個模塊之間的通信和協(xié)作正常,機器人能夠準確識別和采摘目標果實,并實現(xiàn)自動導航和收集等功能。

1.3 系統(tǒng)功能總結

功能模塊 功能描述
視覺識別 - 通過高性能攝像頭捕捉果園圖像
- 利用百度飛漿的目標識別和分類算法,識別目標果實
- 確定果實的空間坐標和距離
導航與定位 - 根據(jù)果園環(huán)境信息和路徑規(guī)劃算法,自動導航至目標果實附近
- 集成多種傳感器,感知環(huán)境信息,如距離、方位、障礙物等
機械手臂控制 - 在系統(tǒng)精確控制下,自動調整姿態(tài)和動作,采摘果實
- 確保采摘動作的高效和安全
果實收集與處理 - 采摘下來的果實被自動收集到專門容器中
- 對采摘的果實進行數(shù)量統(tǒng)計和質量評估
- 提供數(shù)據(jù)支持,為農(nóng)業(yè)生產(chǎn)決策提供參考
通信與監(jiān)控 - 實現(xiàn)遠程監(jiān)控和控制功能

二、樹莓派4B環(huán)境搭建

【1】硬件環(huán)境介紹

樹莓派是什么?Raspberry Pi(中文名為“樹莓派”,簡寫為RPi,或者RasPi/RPi)是為學生計算機編程教育而設計,只有信用卡大小的卡片式電腦,其系統(tǒng)基于Linux

image-20230222220821492

【2】資料下載

第一步,先將樹莓派4B需要使用的資料下載下來。

image-20230222214743788

【3】準備需要的配件

(1)準備一張至少32G的TFT卡,用來燒寫系統(tǒng)。

(2)準備一個讀卡器,方便插入TFT卡,好方便插入到電腦上拷貝系統(tǒng)

(3)樹莓派主板一個

(4)一根網(wǎng)線(方便插路由器上與樹莓派連接)

(5)一根type-C的電源線。用自己Android手機的數(shù)據(jù)線就行,拿手機充電器供電。

image-20230222215214788

image-20230222215230700

image-20230222215246793

【4】準備燒寫系統(tǒng)

(1)安裝鏡像燒寫工具

image-20230222215354199

image-20230222215404779

(2)格式化SD卡

將TFT卡通過讀卡器插入到電腦上,將TFT卡格式化。

image-20230222215625025

image-20230222215701338

(3)燒寫系統(tǒng)

**接下來準備燒寫的系統(tǒng)是這一個系統(tǒng):**將系統(tǒng)解壓出來。

image-20230222223022944

然后打開剛才安裝好的鏡像燒寫工具,在軟件中選擇需要安裝的 img(鏡像)文件,“Device”下選擇SD的盤符,然后選擇“Write”,然后就開始安裝系統(tǒng)了,根據(jù)你的SD速度,安裝過程有快有慢。

注意:從網(wǎng)盤下載下來的鏡像如果沒有解壓就先解壓,釋放出img文件。

image-20230222220145324

下面是燒寫的流程:

image-20230222220325807

點擊YES,開始燒寫。

image-20230222220347360

燒寫過程中:

image-20230222220422721

安裝結束后會彈出完成對話框,說明安裝就完成了,如果不成功,需要關閉防火墻一類的軟件,重新插入SD進行安裝。

image-20230222222036811

需要注意的是,安裝完,windows系統(tǒng)下看到SD只有74MB了,這是正?,F(xiàn)象,因為linux下的磁盤分區(qū)win下是看不到的。 燒錄成功后windows系統(tǒng)可能會因為無法識別分區(qū)而提示格式化分區(qū),此時**千萬不要格式化!不要格式化!不要格式化!**點擊取消,然后彈出內存卡,插入到樹莓派上。

image-20230222222207411

至此,樹莓派燒寫成功。

【5】啟動系統(tǒng)

(1)樹莓派供電

由于我買的樹莓派開發(fā)板不帶電源線,就采用Android手機的充電線供電。 使用Type-C供電時,要求電源頭的參數(shù)要求,電壓是5V,電流是3A。

我的充電器是小米的120W有線快充,剛好滿足要求。

image-20230222221409160

image-20230222221435491

(2)啟動樹莓派(以Type-C供電示例)

燒寫完后把MicroSD卡直接插入樹莓派的MicroSD卡插槽,如果有顯示器就連接顯示器,有DHMI線機也可以連接外接的顯示器,有鼠標、鍵盤都可以插上去,就可以進入樹莓派系統(tǒng)了。

但是,我這塊板子就一個主板,什么都沒有。就拿網(wǎng)線將樹莓派的網(wǎng)口與路由器連接。

image-20230222223207997

上電之后,開發(fā)板的指示燈會閃爍,說明已經(jīng)啟動。

(3)查看開發(fā)板的IP地址

現(xiàn)在板子沒屏幕,想要連接板子,只能通過SSH遠程登錄的方式,當前燒寫的這個系統(tǒng)默認開機就啟動了SSH,所以只要知道開發(fā)板的IP地址就可以遠程登錄進去。

**如何知道樹莓派板子的IP地址?**方法很多,最簡單是直接登錄路由器的后臺界面查看連接進入的設備。

我使用的小米路由器,登錄后臺,看到了樹莓派的IP地址。

image-20230222223441177

(4)SSH方式登錄開發(fā)板

當前燒寫系統(tǒng)的登錄賬號和密碼如下:

賬號:pi 密碼:yahboom

打開SSH遠程登錄工具:PuTTY_0.67.0.0.exe。

image-20230222223700940

輸入IP地址和端口號,點擊open。

image-20230222223752958

然后輸入賬號和密碼。

image-20230222223815162

輸入用戶名 pi按下回車,然后再輸入密碼 yahboom。 注意:Linux下為了保護隱私,輸入密碼是不可見的,你只需要正常輸入,按下回車鍵確定 即可。

正常情況下,就登錄成功了。

image-20230222223840293

接下來看看聯(lián)網(wǎng)情況。 ping一下百度測試互聯(lián)網(wǎng)是否暢通,因為接下來要在線安裝軟件包。

ping www.baidu.com

image-20230222224200466

可以看到網(wǎng)絡沒有問題。

提示: 按下 Ctrl + C 可以終止命令行。 這算是Linux基礎。

【6】windows遠程登錄桌面

為了方便圖形化方式開發(fā),可以使用windows系統(tǒng)通過遠程桌面登錄樹莓派,就可以看到界面了,不過需要先安裝工具。

(1)安裝xdrp

在樹莓派的命令行終端輸入命令:

sudo apt-get install xrdp

按下回車之后,會彈出確認窗口。輸入 y之后,按下回車,繼續(xù)安裝。

image-20230222224534775

安裝完畢:

image-20230222224724318

(2)打開windows遠程桌面

在windows電腦上打開運行命令的窗口,輸入mstsc來打開遠程桌面。

image-20230222224920925

打開遠程桌面的窗口:

image-20230222224953096

(3)連接樹莓派遠程桌面

打開遠程桌面后,輸入樹莓派開發(fā)板的IP地址,點擊連接。

image-20230222225040460

如果彈出窗口,就選擇。

image-20230222225121454

接下來就進入到樹莓派開發(fā)板的遠程桌面的登錄窗口了。

image-20230222225204850

接下來輸入面賬號和密碼。

賬號:pi 密碼:yahboom

輸入后點擊OK按鈕登錄。

image-20230222225405070

正常情況下,就順利的進入樹莓派的桌面了。接下來就可以進行遠程桌面開發(fā)了。

image-20230222225519317

【7】擴展樹莓派SD卡可用空間

樹莓派系統(tǒng)默認啟動時,樹莓派默認沒有把整個存儲空間拓展到整張卡中,如果需要使用整個SD卡,這時候可以通過人為的把存儲空間拓展到整張卡上。

(1)查看內存使用情況

打開命令行終端,輸入df -h 命令。

image-20230222225925276

(2)擴展內存

<1> 打開樹莓派命令行終端輸入:

pi@raspberrypi:~ $ sudo raspi-config

<2> 在彈出的命令行里選擇Advanced Options

image-20230222230513705

<3> 選擇第一個選項。

image-20230222230539460

<4> 點擊確定

image-20230222230550004

<5> 點擊右邊的Finish按鈕保存退出。

確定之后,關閉界面,系統(tǒng)會自動重啟,重啟之后,使用df命令查看是否擴展成功(我這里插的是32G的SD卡)。

可以看到,我的系統(tǒng)已經(jīng)擴展成功了,目前可以內存空間是19G。

image-20230222230727040

【8】樹莓派連接WIFI

(1)配置需要連接的WIFI

點擊右上角的數(shù)據(jù)連接圖標,打開WIFI列表,點擊想要的WIFI進行連接。

image-20230302232003214

輸入密碼:

image-20230302232119543

連接成功后的效果:

image-20230302232504724

(2)通過WIFI的IP地址登錄遠程桌面

在路由器的后臺可以看到,目前樹莓派連入了兩個IP地址。接下來把網(wǎng)線拔掉,使用WIFI無線也可以直接連接無線桌面,這樣就不用插網(wǎng)線了。

image-20230302232814697

賬號和密碼:

賬號:pi 密碼:yahboom

三、代碼設計

3.1 舵機控制代碼(機械手臂控制)

C語言代碼: 使用wiringPi庫控制樹莓派上的GPIO引腳,實現(xiàn)對舵機的控制。通過servo_rotate()函數(shù)可以控制舵機旋轉到指定的角度。在main()函數(shù)中,使用鍵盤輸入獲取目標角度,并調用servo_rotate()函數(shù)控制舵機旋轉到目標角度。

舵機的控制方式為PWM脈沖寬度調制,即將角度轉換為脈寬值并輸出對應的高低電平信號。將舵機信號線連接到GPIO18引腳,通過digitalWrite()函數(shù)輸出高低電平來控制舵機旋轉。

#include <wiringPi.h>
#include <stdio.h>

#define SERVO_PIN 18 // SG90舵機信號線連接的GPIO引腳

void servo_rotate(int angle) {
    int pulse_width = (angle * 11) + 500; // 將角度轉換為脈寬值
    digitalWrite(SERVO_PIN, HIGH); // 輸出高電平
    delayMicroseconds(pulse_width); // 延時脈寬值對應的時間
    digitalWrite(SERVO_PIN, LOW); // 輸出低電平
    delay(20 - pulse_width / 1000); // 延時剩余時間
}

int main(void) {
    wiringPiSetupGpio(); // 初始化wiringPi庫
    pinMode(SERVO_PIN, OUTPUT); // 將舵機信號線接口設為輸出模式

    while(1) {
        // 從鍵盤輸入目標角度
        printf("Enter the angle to rotate (0-180): ");
        fflush(stdout);
        int angle;
        scanf("%d", &angle);

        // 旋轉到目標角度
        if(angle >= 0 && angle <= 180) {
            servo_rotate(angle);
        } else {
            printf("Invalid angle! Please enter an angle between 0 and 180.n");
        }
    }

    return 0;
}

Pyhon代碼: 使用RPi.GPIO庫來控制樹莓派上的GPIO引腳,實現(xiàn)對舵機的控制。通過setup()函數(shù)進行初始化設置,并通過set_angle()函數(shù)控制舵機旋轉到指定的角度。

main()函數(shù)中,使用鍵盤輸入獲取目標角度,并調用set_angle()函數(shù)控制舵機旋轉到目標角度。

import RPi.GPIO as GPIO
import time

SERVO_PIN = 18  # SG90舵機信號線連接的GPIO引腳

def setup():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(SERVO_PIN, GPIO.OUT)
    global servo_pwm
    servo_pwm = GPIO.PWM(SERVO_PIN, 50)  # 創(chuàng)建PWM對象,頻率設置為50Hz
    servo_pwm.start(0)  # 啟動PWM輸出,初始占空比設為0

def set_angle(angle):
    duty_cycle = (angle / 18) + 2.5  # 將角度轉換為占空比值
    servo_pwm.ChangeDutyCycle(duty_cycle)
    time.sleep(0.3)  # 等待舵機轉到指定角度

def main():
    setup()

    while True:
        # 從鍵盤輸入目標角度
        angle = int(input("Enter the angle to rotate (0-180): "))

        # 旋轉到目標角度
        if 0 <= angle <= 180:
            set_angle(angle)
        else:
            print("Invalid angle! Please enter an angle between 0 and 180.")

if __name__ == '__main__':
    try:
        main()
    finally:
        servo_pwm.stop()  # 停止PWM輸出
        GPIO.cleanup()  # 清理GPIO資源

3.2 調用算法識別目標

(1)安裝PaddlePaddle和PaddleDetection庫:

  • 先安裝Python和pip。然后,打開終端并執(zhí)行以下命令安裝PaddlePaddle和PaddleDetection庫:
    pip install paddlepaddle paddlepaddle-gpu
    pip install paddlehub
    pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple
    

(2)下載預訓練模型:

  • 百度飛槳提供了預訓練的目標檢測模型,可以從PaddleDetection的GitHub頁面下載這些模型。選擇適合的任務的模型,并將其解壓到合適的目錄中。

(3)編寫調用代碼:

  • 創(chuàng)建一個Python腳本文件,例如detect_fruits.py,并使用以下代碼編寫腳本:
    import paddlehub as hub
    import cv2
    
    def detect_fruits(image_path, model_path):
        # 加載模型
        module = hub.Module(name='yolov3_mobilenet_v1_coco2017')
        input_dict = {'image': [image_path]}
    
        # 目標檢測
        results = module.object_detection(data=input_dict)
    
        # 處理結果
        for result in results:
            if len(result['data']) > 0:
                for obj in result['data']:
                    label = obj['label']
                    confidence = obj['confidence']
                    left, top, right, bottom = obj['left'], obj['top'], obj['right'], obj['bottom']
                    print(f"Label: {label}, Confidence: {confidence:.2f}")
                    print(f"Bounding Box: ({left}, {top}), ({right}, {bottom})")
    
        # 可視化結果
        img = cv2.imread(image_path)
        for result in results:
            module.visualize(data=result, output_dir='output', score_thresh=0.5, use_visualize=True, visualization=True, plot_bbox=True, save_bbox_txt=True, image=img)
    
    if __name__ == '__main__':
        image_path = 'path/to/your/image.jpg'  # 替換為你的圖片路徑
        model_path = 'path/to/your/model'  # 替換為你的模型路徑
        detect_fruits(image_path, model_path)
    

    在上面的代碼中,使用PaddleHub庫加載了預訓練的yolov3_mobilenet_v1_coco2017模型,并將其應用于指定的圖像。然后,處理檢測結果并進行輸出。最后,使用OpenCV庫可視化結果并保存到指定目錄中。

(4)運行腳本:

  • 將目標果實圖像放置在與腳本相同的目錄下(或根據(jù)需要修改圖像路徑)。然后,在終端中執(zhí)行以下命令運行腳本:
    python detect_fruits.py
    

腳本將分析圖像并輸出檢測到的目標果實的標簽、置信度和邊界框。會生成一個帶有目標果實標注的圖像。

3.3 機器人小車控制代碼

小車的電機驅動采用L298N模塊,連接在GPIO17、GPIO18、GPIO27和GPIO22上。 使用了wiringPi庫來控制樹莓派上的GPIO引腳,實現(xiàn)對小車電機驅動的控制。通過setup()函數(shù)進行初始化設置,并通過forward()、backward()turn_left()turn_right()函數(shù)控制小車前進、后退和轉彎。其中,stop()函數(shù)用于停止小車運動。

#include <wiringPi.h>

#define MOTOR_ENA_PIN 0  // L298N模塊ENA引腳連接的GPIO引腳
#define MOTOR_ENB_PIN 2  // L298N模塊ENB引腳連接的GPIO引腳
#define MOTOR_IN1_PIN 3  // L298N模塊IN1引腳連接的GPIO引腳
#define MOTOR_IN2_PIN 4  // L298N模塊IN2引腳連接的GPIO引腳
#define MOTOR_IN3_PIN 5  // L298N模塊IN3引腳連接的GPIO引腳
#define MOTOR_IN4_PIN 6  // L298N模塊IN4引腳連接的GPIO引腳

void setup() {
    wiringPiSetup();  // 初始化wiringPi庫
    pinMode(MOTOR_ENA_PIN, OUTPUT);
    pinMode(MOTOR_ENB_PIN, OUTPUT);
    pinMode(MOTOR_IN1_PIN, OUTPUT);
    pinMode(MOTOR_IN2_PIN, OUTPUT);
    pinMode(MOTOR_IN3_PIN, OUTPUT);
    pinMode(MOTOR_IN4_PIN, OUTPUT);
}

void forward() {
    digitalWrite(MOTOR_IN1_PIN, HIGH);
    digitalWrite(MOTOR_IN2_PIN, LOW);
    digitalWrite(MOTOR_IN3_PIN, LOW);
    digitalWrite(MOTOR_IN4_PIN, HIGH);
    digitalWrite(MOTOR_ENA_PIN, HIGH);
    digitalWrite(MOTOR_ENB_PIN, HIGH);
}

void backward() {
    digitalWrite(MOTOR_IN1_PIN, LOW);
    digitalWrite(MOTOR_IN2_PIN, HIGH);
    digitalWrite(MOTOR_IN3_PIN, HIGH);
    digitalWrite(MOTOR_IN4_PIN, LOW);
    digitalWrite(MOTOR_ENA_PIN, HIGH);
    digitalWrite(MOTOR_ENB_PIN, HIGH);
}

void turn_left() {
    digitalWrite(MOTOR_IN1_PIN, LOW);
    digitalWrite(MOTOR_IN2_PIN, HIGH);
    digitalWrite(MOTOR_IN3_PIN, LOW);
    digitalWrite(MOTOR_IN4_PIN, HIGH);
    digitalWrite(MOTOR_ENA_PIN, HIGH);
    digitalWrite(MOTOR_ENB_PIN, HIGH);
}

void turn_right() {
    digitalWrite(MOTOR_IN1_PIN, HIGH);
    digitalWrite(MOTOR_IN2_PIN, LOW);
    digitalWrite(MOTOR_IN3_PIN, HIGH);
    digitalWrite(MOTOR_IN4_PIN, LOW);
    digitalWrite(MOTOR_ENA_PIN, HIGH);
    digitalWrite(MOTOR_ENB_PIN, HIGH);
}

void stop() {
    digitalWrite(MOTOR_ENA_PIN, LOW);
    digitalWrite(MOTOR_ENB_PIN, LOW);
}

int main() {
    setup();

    while (1) {
        // 從鍵盤輸入指令
        char cmd = getchar();
        getchar();  // 忽略回車符

        // 根據(jù)指令執(zhí)行動作
        switch (cmd) {
            case 'w':  // 前進
                forward();
                break;
            case 's':  // 后退
                backward();
                break;
            case 'a':  // 左轉
                turn_left();
                break;
            case 'd':  // 右轉
                turn_right();
                break;
            case 'x':  // 停止
                stop();
                break;
            default:
                break;
        }
    }

    return 0;
}

四、總結

隨著農(nóng)業(yè)技術的不斷進步,自動化、智能化已成為現(xiàn)代農(nóng)業(yè)生產(chǎn)的重要趨勢。本項目通過結合視覺識別技術、機器人技術和自動化控制技術,成功設計并實現(xiàn)了基于視覺識別的自動采摘機器人系統(tǒng)。這一創(chuàng)新性的成果不僅提高了果園采摘的效率和準確性,降低了人力成本,還為農(nóng)業(yè)生產(chǎn)的現(xiàn)代化和智能化發(fā)展提供了新的解決方案和思路。

  • 更多詳細資料請聯(lián)系.docx
    下載

相關推薦