一、前言
1.1 項目介紹
【1】項目功能介紹
隨著科技的進步和農業(yè)現(xiàn)代化的發(fā)展,農業(yè)生產效率與質量的提升成為重要的研究對象。其中,果蔬采摘環(huán)節(jié)在很大程度上影響著整個產業(yè)鏈的效益。傳統(tǒng)的手工采摘方式不僅勞動強度大、效率低下,而且在勞動力成本逐漸上升的背景下,越來越難以滿足大規(guī)模種植基地的需求。人工采摘還可能因不規(guī)范的操作導致果實損傷,影響商品果率。
基于視覺識別技術的自動采摘機器人的研發(fā),正是針對這一問題提出的創(chuàng)新解決方案。本項目采用樹莓派4B作為主控芯片,因其具有強大的計算能力和豐富的擴展接口,可以方便地集成各種傳感器和執(zhí)行機構,實現(xiàn)對復雜環(huán)境下的實時圖像采集與處理。
項目利用百度飛漿(PaddlePaddle)深度學習框架中的目標檢測和分類算法,通過安裝在機器人上的高清攝像頭獲取果樹圖像,并進行實時分析,精準識別出果實的位置、大小以及成熟度等信息。當成功識別到目標果實后,主控系統(tǒng)將根據(jù)識別結果快速計算出機械手臂的最佳運動路徑,控制其移動至指定位置,以最適宜的方式完成果實的高效、無損采摘。
基于視覺識別的自動采摘機器人設計與實現(xiàn)項目旨在解決傳統(tǒng)農業(yè)中人工采摘的瓶頸問題,通過人工智能與自動化技術的深度融合,提高果園管理的智能化水平,降低勞動成本,提高生產效率,從而推動我國乃至全球農業(yè)產業(yè)向更加智能、高效的現(xiàn)代農業(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)計和質量評估,為農業(yè)生產提供有價值的數(shù)據(jù)支持。
本項目實現(xiàn)的功能是一個完整的自動采摘機器人系統(tǒng),從視覺識別到機械手臂控制,再到果實收集與處理,形成了一個高效、智能的自動化采摘流程。這不僅大大提高了農業(yè)生產的效率和質量,也展示了人工智能技術在現(xiàn)代農業(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)不僅提高了果園采摘的效率和準確性,降低了人力成本,同時也為農業(yè)生產的現(xiàn)代化和智能化發(fā)展提供了新的解決方案和思路。該系統(tǒng)的成功應用將為農業(yè)生產帶來革命性的變革,推動農業(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ù)支持,為農業(yè)生產決策提供參考 | |
通信與監(jiān)控 | - 實現(xiàn)遠程監(jiān)控和控制功能 |
二、樹莓派4B環(huán)境搭建
【1】硬件環(huán)境介紹
樹莓派是什么?Raspberry Pi(中文名為“樹莓派”,簡寫為RPi,或者RasPi/RPi)是為學生計算機編程教育而設計,只有信用卡大小的卡片式電腦,其系統(tǒng)基于Linux。
【2】資料下載
第一步,先將樹莓派4B需要使用的資料下載下來。
【3】準備需要的配件
(1)準備一張至少32G的TFT卡,用來燒寫系統(tǒng)。
(2)準備一個讀卡器,方便插入TFT卡,好方便插入到電腦上拷貝系統(tǒng)
(3)樹莓派主板一個
(4)一根網(wǎng)線(方便插路由器上與樹莓派連接)
(5)一根type-C的電源線。用自己Android手機的數(shù)據(jù)線就行,拿手機充電器供電。
【4】準備燒寫系統(tǒng)
(1)安裝鏡像燒寫工具
(2)格式化SD卡
將TFT卡通過讀卡器插入到電腦上,將TFT卡格式化。
(3)燒寫系統(tǒng)
**接下來準備燒寫的系統(tǒng)是這一個系統(tǒng):**將系統(tǒng)解壓出來。
然后打開剛才安裝好的鏡像燒寫工具,在軟件中選擇需要安裝的 img(鏡像)文件,“Device”下選擇SD的盤符,然后選擇“Write”,然后就開始安裝系統(tǒng)了,根據(jù)你的SD速度,安裝過程有快有慢。
注意:從網(wǎng)盤下載下來的鏡像如果沒有解壓就先解壓,釋放出img文件。
下面是燒寫的流程:
點擊YES
,開始燒寫。
燒寫過程中:
安裝結束后會彈出完成對話框,說明安裝就完成了,如果不成功,需要關閉防火墻一類的軟件,重新插入SD進行安裝。
需要注意的是,安裝完,windows系統(tǒng)下看到SD只有74MB了,這是正?,F(xiàn)象,因為linux下的磁盤分區(qū)win下是看不到的。 燒錄成功后windows系統(tǒng)可能會因為無法識別分區(qū)而提示格式化分區(qū),此時**千萬不要格式化!不要格式化!不要格式化!**點擊取消,然后彈出內存卡,插入到樹莓派上。
至此,樹莓派燒寫成功。
【5】啟動系統(tǒng)
(1)樹莓派供電
由于我買的樹莓派開發(fā)板不帶電源線,就采用Android手機的充電線供電。 使用Type-C供電時,要求電源頭的參數(shù)要求,電壓是5V,電流是3A。
我的充電器是小米的120W有線快充,剛好滿足要求。
(2)啟動樹莓派(以Type-C供電示例)
燒寫完后把MicroSD卡直接插入樹莓派的MicroSD卡插槽,如果有顯示器就連接顯示器,有DHMI線機也可以連接外接的顯示器,有鼠標、鍵盤都可以插上去,就可以進入樹莓派系統(tǒng)了。
但是,我這塊板子就一個主板,什么都沒有。就拿網(wǎng)線將樹莓派的網(wǎng)口與路由器連接。
上電之后,開發(fā)板的指示燈會閃爍,說明已經啟動。
(3)查看開發(fā)板的IP地址
現(xiàn)在板子沒屏幕,想要連接板子,只能通過SSH遠程登錄的方式,當前燒寫的這個系統(tǒng)默認開機就啟動了SSH,所以只要知道開發(fā)板的IP地址就可以遠程登錄進去。
**如何知道樹莓派板子的IP地址?**方法很多,最簡單是直接登錄路由器的后臺界面查看連接進入的設備。
我使用的小米路由器,登錄后臺,看到了樹莓派的IP地址。
(4)SSH方式登錄開發(fā)板
當前燒寫系統(tǒng)的登錄賬號和密碼如下:
賬號:pi 密碼:yahboom
打開SSH遠程登錄工具:PuTTY_0.67.0.0.exe
。
輸入IP地址和端口號,點擊open。
然后輸入賬號和密碼。
輸入用戶名 pi
按下回車,然后再輸入密碼 yahboom
。 注意:Linux下為了保護隱私,輸入密碼是不可見的,你只需要正常輸入,按下回車鍵確定 即可。
正常情況下,就登錄成功了。
接下來看看聯(lián)網(wǎng)情況。 ping一下百度測試互聯(lián)網(wǎng)是否暢通,因為接下來要在線安裝軟件包。
ping www.baidu.com
可以看到網(wǎng)絡沒有問題。
提示: 按下 Ctrl + C
可以終止命令行。 這算是Linux基礎。
【6】windows遠程登錄桌面
為了方便圖形化方式開發(fā),可以使用windows系統(tǒng)通過遠程桌面登錄樹莓派,就可以看到界面了,不過需要先安裝工具。
(1)安裝xdrp
在樹莓派的命令行終端輸入命令:
sudo apt-get install xrdp
按下回車之后,會彈出確認窗口。輸入 y
之后,按下回車,繼續(xù)安裝。
安裝完畢:
(2)打開windows遠程桌面
在windows電腦上打開運行命令的窗口,輸入mstsc
來打開遠程桌面。
打開遠程桌面的窗口:
(3)連接樹莓派遠程桌面
打開遠程桌面后,輸入樹莓派開發(fā)板的IP地址,點擊連接。
如果彈出窗口,就選擇是
。
接下來就進入到樹莓派開發(fā)板的遠程桌面的登錄窗口了。
接下來輸入面賬號和密碼。
賬號:pi 密碼:yahboom
輸入后點擊OK
按鈕登錄。
正常情況下,就順利的進入樹莓派的桌面了。接下來就可以進行遠程桌面開發(fā)了。
【7】擴展樹莓派SD卡可用空間
樹莓派系統(tǒng)默認啟動時,樹莓派默認沒有把整個存儲空間拓展到整張卡中,如果需要使用整個SD卡,這時候可以通過人為的把存儲空間拓展到整張卡上。
(1)查看內存使用情況
打開命令行終端,輸入df -h
命令。
(2)擴展內存
<1> 打開樹莓派命令行終端輸入:
pi@raspberrypi:~ $ sudo raspi-config
<2> 在彈出的命令行里選擇Advanced Options
<3> 選擇第一個選項。
<4> 點擊確定
<5> 點擊右邊的Finish
按鈕保存退出。
確定之后,關閉界面,系統(tǒng)會自動重啟,重啟之后,使用df命令查看是否擴展成功(我這里插的是32G的SD卡)。
可以看到,我的系統(tǒng)已經擴展成功了,目前可以內存空間是19G。
【8】樹莓派連接WIFI
(1)配置需要連接的WIFI
點擊右上角的數(shù)據(jù)連接圖標,打開WIFI列表,點擊想要的WIFI進行連接。
輸入密碼:
連接成功后的效果:
(2)通過WIFI的IP地址登錄遠程桌面
在路由器的后臺可以看到,目前樹莓派連入了兩個IP地址。接下來把網(wǎng)線拔掉,使用WIFI無線也可以直接連接無線桌面,這樣就不用插網(wǎng)線了。
賬號和密碼:
賬號: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;
}
四、總結
隨著農業(yè)技術的不斷進步,自動化、智能化已成為現(xiàn)代農業(yè)生產的重要趨勢。本項目通過結合視覺識別技術、機器人技術和自動化控制技術,成功設計并實現(xiàn)了基于視覺識別的自動采摘機器人系統(tǒng)。這一創(chuàng)新性的成果不僅提高了果園采摘的效率和準確性,降低了人力成本,還為農業(yè)生產的現(xiàn)代化和智能化發(fā)展提供了新的解決方案和思路。