新聞中心

        EEPW首頁 > 機器人 > 設計應用 > 一種倉庫搬運機器人的設計與實現*

        一種倉庫搬運機器人的設計與實現*

        作者:嚴毓培,尹雪梅,湯佩豫,黎偉,鄧澤霖,朱貴芳(珠海城市職業技術學院,廣東珠海 519090) 時間:2022-12-20 來源:電子產品世界 收藏
        編者按:大部分的機器人設計都是基于ROS系統,該系統的優點是功能豐富、設計快速,缺點是設計的硬件成本高、功耗高,ROS系統龐大,實時性不高。針對以上缺點,本文闡述的物流機器人的設計是基于ARM架構的S5PV210的CPU,運行嵌入式Linux操作系統,由單片機、S5PV210主板和APP3部分組成。該設計降低了硬件成本、節省了電池功耗,可根據定制需求開發,實時性較高,且運行穩定、負載量大,可在室內動態環境中自主導航并完成相關搬運服務。目前該物流機器人已經制作完成。

        *基金項目:廣東省普通高校特色創新類項目(自然科學)(2018GKTSCX056);

        本文引用地址:http://www.104case.com/article/202212/441869.htm

        廣東普通高校重點項目(自然科學)(2019GZDXM014);

        珠海城市職業技術學院2021年科研項目(KY2021Y01Z);

        2020年教育部高等學校項目(2020ITA03008)

        0 引言

        目前大部分的機器人都是基于ROS 系統實現,一般ROS 在Ubentu 系統中的穩定性最好,因此需要Intel或者高性能 架構的CPU 的支撐,但存在的問題是硬件成本高,功耗高,產品的體積大。同時ROS 系統中有很多功能對于某些特定的應用場景而言是冗余的,這些冗余的功能會使系統龐大,占用很多內存和CPU的資源,而且機器人反應不夠靈敏,實時性較差。如果將ROS 移植到基于 架構的低成本低功耗的CPU上,或者對ROS 系統進行裁剪以去掉冗余的部分,存在工作難度大周期長的問題,而且ROS 后期運行時不夠穩定。因此要設計一款在特定應用場景中運行的低成本、低功耗的機器人,不應采用ROS 系統開發,而應根據具體需求采用適用于特定應用場景下的定制化的軟硬件設計方案,在降低成本、功耗、體積的同時可以提高系統的穩定性和實時性。

        1 硬件設計

        本文闡述的如圖1 所示,硬件部分由 主板和電路板組成,具體的硬件框架如圖2 所示。

        1671530396996146.png

        圖1

        1671530442295669.png

        圖2 硬件框架圖

        其中ARM 主板采用了S5PV210 的CPU,帶有512M 的RAM 和512 M 的flash,LCD 觸摸屏,SD 卡插槽,3 個USB接口和4 個串口,運行 操作系統[1],如圖3 所示。利用該主板可實現機器人的激光雷達掃描,LCD 觸摸屏顯示,機器人與手機APP 之間的藍牙通信,運行mjpeg-stream 的實時web 視頻顯示等功能。

        1671530516591047.png

        圖3 ARM開發板

        因ARM 主板運行的是 系統,該系統是非實時系統,無法準確讀取25 kHz 的光電編碼器的脈沖,因此用進行電機控制和光電編碼器的脈沖讀取,與S5PV210 主板之間用自定義的通信協議傳輸電機數據[2],如圖4 所示。

        1671584436499851.png

        圖4 單片機主板

        1671584657499366.png

        圖5 SCM6716電路板

        1671530894965914.png

        圖6 外接模塊

        SCM6716 的電流驅動模塊,可輸出的最大瞬時電流達2 A,如圖5 所示。該機器人采用了直流電機搭配減速電機的方式,增強驅動力,可以負載超100 kg 重物。

        機器人外接模塊可以為機器人提供更加豐富的功能,如圖6 所示,其中USB 攝像頭用來提供機器人現場的視頻,USB WiFi 模塊用來將攝像頭的視頻傳輸到web頁面瀏覽,串口藍牙模塊用來和手機APP 連接,飛控模塊包含GPS,陀螺儀,電子羅盤,加速度計等傳感器,并內置了傳感器融合等算法,為室內機器人判斷運動方向提供參考[3]

        機器人可連接激光傳感器,該傳感器可以掃描周圍的環境,得到周圍6 m 范圍內的每個障礙物的角度和距離,如圖7 所示。

        1671530979259277.png

        圖7 激光傳感器

        2 軟件設計

        2.1 單片機的軟件設計

        機器人的直流電機連接著減速電機,因此光電編碼器1 s 可以讀入25 kHz 的脈沖, 但 操作系統是非實時的操作系統,讀取脈沖不夠準確[4],因此用單片機來讀取25 kHz 的脈沖,并將脈沖值通過串口自定義的簡單協議傳給ARM 開發板。

        單片機采用STC15F2K60S2,其中外部中斷0 和外部中斷1 分別用來讀取左右兩個電機的光電編碼器的脈沖,定時器0 設置為8 位重裝用以設置波特率為115 200。定時器1 每4 ms 中斷1 次,在中斷服務程序里,生成可以驅動直流電機轉速的占空比,每200 ms 計算1次輪子的速度,假設兩個電機的光電編碼器的脈沖數為P,輪子轉一圈是25 000 個脈沖,輪子的半徑是r,則輪子的速度為2×3.14×9/25 000,并進行1 s 的定時[5]

        串口中斷服務程序根據從ARM 板獲取到的串口信息控制兩個電機的啟動停止、轉動方向、設定速度,如圖8 所示,可通過手機APP 或者機器人的液晶觸摸屏上的按鈕來發送這些指令,因點擊按鈕是間斷性的動作,同時發送兩次設定速度的按鈕的時間間隔會比較久,所以在獲取設定速度時如果buffer[2]的值有可能等于13,即’/r’,也不會認為這是新的一條指令。

        1671531186613163.png

        圖8 單片機串口中斷服務程序

        1671531256553963.png

        圖9 發送實時電機速度的協議

        主程序每秒鐘發送兩個電機的速度到ARM 板,因嵌入式系統底層讀取串口數據是不定時的,很多情況下會讀取到一個不完整的包[6],考慮到機器人的速度不可能達到65 535 mm/s,因此可以將通信協議簡單設計如下:

        當嵌入式Linux 讀到兩個連續的0xFF,則認為是1個新的包的開始,將后面接收到的數據存放起來,直到讀滿6 個字節再開始計算兩個輪子的速度。

        主程序中每秒將計算設定速度的上下限,上限是設定速度的105%,下限是設定速度的95%,當電機的速度在上下限之間不需調節占空比,否則每200 ms 調節1次占空比。

        2.2 嵌入式Linux的軟件設計

        1671531340956601.png

        圖10 嵌入式Linux的軟件結構

        系統從QT 的TMainForm 進入后分別對mjpeg-stream,GPIO,串口,液晶屏,攝像頭進行初始化,并啟動QT的定時器,每1 秒刷新1 次控件。

        在robot_start 的進程中設置1 個死循環,不斷從串口0 連接的串口藍牙模塊來獲取手機APP 發送過來的命令并加以執行,同時不斷從串口3 連接的單片機來獲取機器人的速度,通過與設定的速度對比后向單片機發送占空比,并根據累積的脈沖數計算機器人行走的總里程和某時刻的朝向。

        由于GPS 傳感器、陀螺儀、加速度計、磁力計和電子羅盤等傳感器在室內無法使用,該方法使用里程計信息對機器人的位置和角度進行計算,因此機器人的朝向可以通過剛體的運動進行計算得出。

        移動機器人的輪子由電機帶動,輪子的直徑為D,則輪子的周長為πD,電機轉動的圈數m 可以由光電編碼器獲取,當機器人在前進或者后退狀態,移動機器人移動的距離S 可以由S = m×πD 得到[7]

        image.png

        圖11 移動機器人的旋轉示意圖

        當移動機器人在左轉或者右轉狀態,左轉或者右轉的角度可以由圖11 中的弧線S 獲取,機器人的初始位置在黃色的位置,旋轉過一定角度θ2 后到了綠色的位置,從圖1 可知θ1 = θ2,如果可以得到圖11 中的長度AC,則通過弧線S 和AC 則可求出機器人旋轉的角度θ1,則旋轉角度θ2 也可以得到[8]

        1671532759442327.png

        圖12 移動機器人的觀測模型

        從圖12 可知,機器人的重心位置在A,對于前后左右對稱的機器人,A 是機器人的中心位置,如果不是前后左右對稱的機器人,A 的位置可以通過測量得到,B 是機器人左邊沿的中點,C 是左上輪的中心點,因此ABBC 的長度可以通過測量得到,則AC 的長度可通過余弦定理得到:

        1671532832809884.png

        機器人后端的光電編碼器得到的反饋脈沖數的總數是P,如果機器人的輪子旋轉2π,光電編碼器得到的反饋脈沖數是F,則旋轉的圈數M = P/F,則旋轉角度θ2的弧度值為

        1671532892563912.png

        圖5 中綠色方塊代表在移動機器人,紅色圓圈代表導航的終點位置,A 代表移動機器人的初始位置,C 代表移動機器人在某一時刻的位置,B 點為導航的終點位置[9],由圖5可知:

        1671532947860741.png

        其中:

        1671532990651181.png

        因為ABα 為移動機器人在初始位置時獲取的導航終點位置和終點角度,可以由手機APP 輸入,以便告知初始位置的機器人,導航終點的距離和角度,因此BXBY可以式(3)計算得出。

        接下來計算CXCY ,因為機器人運動的距離會不斷地累積,因此可知

        1671533084936118.png

        式(4)中i 為機器人根據表1 和表2 轉變運動狀態的次數,S 為機器人在前進和后退時移動的距離,前進時S 為正值,后退時S 為負值,β 為機器人在左轉和右轉時轉動的角度,右轉時β 為正值,左轉時β 為負值,Sβ 可由里程計信息得出[10]

        由上得出BXBY CXCY ,則BC 的值便可以求出,接下來求移動機器人在任意一點C 的終點角度θ,首先γ 可由下式得出,

        1671564966928849.png

        由圖5 可知,θ =γ β, 因此機器人在任意位置的終點角度θ 便可求出,需要注意的是當θ<0時,θ=θ+2π,因此移動機器人在任意位置相對于導航終點的距離和終點角度都可以求出,結合上面的分析,移動機器人在未知室內動態環境中,在無傳感器,無地圖和動態避障的情況下導航到終點。

        根據以上公式,機器人在每1 s 求1 次角度,并計算角度的累計和,以此判斷出機器人的朝向,因為激光數據處理的進程也會對角度數據進行讀寫操作,因此在以上流程執行前需要加上互斥鎖mutex_lock,執行完畢后關閉互斥鎖[11]

        串口3 連接飛控模塊,根據模塊提供的通信協議,每1 s 獲取1 次飛控模塊的經緯度的數據,經度和緯度數據都是4 個字節,需要拼接后得到十進制的經緯度,當機器人如果到室外運動時可以通過經緯度對機器人進行粗略的定位。

        機器人每1 s 也會判斷設定速度是否發生改變,如果改變了就會根據新的設定速度計算占空比并下發到單片機,如果機器人按照設定速度來調整占空比,會出現機器人的速度忽大忽小的情況,因此將速度上限定為設定速度的101%,速度下限定為設定速度的99%,誤差率為± 1%,當機器人的速度在速度的上下限范圍內則不用調整占空比,機器人可以運行得更平穩[12]

        1671565060414960.png

        圖13 機器人液晶觸摸屏設計

        機器人的液晶觸摸屏采用QT 的圖形界面進行設計,其中界面布局可以在QT designer 中完成,并在QT designer 中直接添加槽函數,可通過qt_second() 函數每秒鐘對界面的控件進行刷新,當按鈕單擊后按鈕文本會發生變化,可通過  PushButton -> setText 函數完成按鈕文本的設計,同樣設定速度的輸入框可以通過 LineEdit1 -> setText (QString::number (setup_speed));完成設計,單擊+、- 兩個按鈕可以修改機器人的設定速度,當機器人的設定速度大于1000mm/s 或者小于0 時,彈出警告框QMessageBox::information(this,”Error”,“speed should be in range 0-999 mm/s”);,設定速度、兩個電機的速度、經緯度數據可通過以下TextLabel2->setText(QString::number(setup_speed)+”mm/s”);等函數完成顯示。

        1671586750172693.png

        1671565170793232.png

        圖14 遠程監控

        機器人通過以上mjpeg-streamer 組件的代碼完成了web遠程監控的功能,可在遠程打開fi refox 瀏覽器看到機器人上攝像頭拍到的視頻。

        image.png

        圖15 移動機器人的旋轉決策

        激光探頭可以測量到周圍障礙物的距離和角度,當激光探頭發現在320° ~ 40° 的范圍內,在距離激光探頭1 m 的范圍內有移動障礙物,則變量stop_forward = 1,否則該變量為0,該角度和距離可以根據實際機器人的情況做相應調整。同理當激光探頭發現在40°~140°的范圍內,在距離激光探頭1 m 的范圍內有障礙物,則變量stop_right=1,否則該變量為0。

        如果變量stop_forward=1,則此時機器人需要旋轉到某個角度,從周圍障礙物的縫隙中出去,圖15中障礙物的縫隙的角度θ1~θ4 可以計算得出,例如θ1=θB-θA,OAOB 的值可以通過激光探頭的輸出數據得出,則根據余弦定理,障礙物縫隙的大小可通過下式得出

        1671565351686395.png

        當導航的終點在機器人的左側時,此時機器人可以沿著θ3/2 的方向移動出去。

        image.png

        圖16 移動機器人的移動決策過程

        圖16 中的紅色圓圈是導航的終點,綠色的是機器人,黑色的是障礙物,機器人的初始位置在底部,此時機器人左右分別有障礙物1 和障礙物2,如果按照逆時針來計算角度,圖3 中的θ1 是機器人在初始位置的終點相對于機器人的角度,把這個角度叫做終點角度。

        表1 終點角度和旋轉方向的關系

        1671587209449504.png


        根據表1 的內容,移動機器人可判斷下一秒是前進、右轉、左轉或者后退,如果沿著終點角度的方向有障礙物,則根據表2 的判斷,移動機器人計算出一個與終點角度最近且縫隙間隔大于機器人寬度的角度,沿著該角度的中線方向移動出去。

        表2 前方1 m范圍內有障礙物時的判斷

        1671587377259203.png

        1671587628469770.png

        1671587663879292.png

        結合以上的內容,可以了解到機器人在周圍布滿障礙物的情況下該如何決策,比如在圖4 中,機器人在初始位置position1 應前進,但此時前方有障礙物,此時左邊無障礙物,根據表1 向左轉至position2 后再向前移動,在前進的過程中一直監測終點角度,當移動至position3時突然前方出現了移動障礙物3,結合表1 和表2,則機器人應向右轉,在旋轉的過程中一直檢測終點角度,當終點角度滿足表1 的前進時,機器人則向著終點前進,如果在前進的過程中又出現了其他的障礙物,則機器人根據實時監測到的終點角度和表1 與表2 的內容,迭代地進行決策,直到達到終點。

        以上導航過程不需要事先對周圍環境建圖,也不需要傳感器的數據,在整個導航過程中可以根據實際移動障礙物的情況做出實時判斷,適合在室內未知動態環境中進行導航。該方法簡單高效,使用成本較低的CPU甚至MCU 就可以實現,同時可節省機器人的功耗和體積。

        在激光掃描的進程中,機器人根據表1 和表2 進行相應的運動決策,激光傳感器7 圈/s,因激光傳感器的精度有限,加上環境噪聲的影響,在激光掃描的過程中會出現一些噪點,通過計算7 個點/s 落在了哪個角度區域,選擇擁有點數最多的角度區域作為判斷下一步動作的依據,如圖17 所示, 20° ~ 160° 的區域有5 個黑色的點, 200° ~ 340° 的區域有1 個紅色的點, 340° ~360° 的區域有1 個紅色的點, 20° ~ 160° 區域對應的動作是右轉,因此機器人下一秒的動作是右轉。可利用狀態機處理該部分代碼,一共有3 種狀態:①在左轉或者右轉中以尋找終點方位的狀態,②前進或者后退中不斷向終點靠近,③尋找新的空隙的狀態。

        2.3 安卓端軟件設計

        機器人通過串口藍牙模塊和安卓手機連接,主要修改的文件是安卓系統里的BluetoothChat.java 文件,以下是控件的初始化。

        APP 的其他控件功能如下:bluetooth data buffer 區域顯示的是機器人和安卓手機通過藍牙通信的數據,full screen 按鈕可將該區域全屏顯示,hex display 單選框可以切換該區域數據的十六進制和十進制的顯示,clear screen 按鈕可以清空該區域的數據顯示,connect 按鈕可以啟動或者關閉安卓手機和機器人之間的連接,stop 按鈕可以啟動或者停止機器人,speed(mm/s) 用來顯示機器人的實時速度,hex output單選框用來切換速度的十六進制或十進制的顯示,longitude 顯示機器人所在位置的經度,latitude顯示機器人所在位置的緯度,angle 需要輸入機器人相對于導航終點的朝向角度,distance 需要輸入機器人相對于導航終點的距離,這是一種角坐標的表示,有了這兩個數據就可以確定導航終點相對于機器人的具體位置,laser scan stop 按鈕可以切換激光傳感器的啟動和停止,send speed 按鈕可以發送機器人的設定速度,send position 按鈕會將angle 輸入框和distance 輸入框的內容發送到機器人,以便機器人了解導航終點的位置,navigation 按鈕用來切換手動移動和自動導航模式,整體界面左下方的上下左右四個箭頭按鈕可以控制機器人前進、后退、左轉和右轉,界面右下方顯示機器人的實時速度,電機1 和電機2 的速度,以及距離機器人最近的障礙物的距離。

        1671566080707153.png

        圖17 動作判斷依據

        1671566129561882.png

        圖18 利用狀態機處理部分代碼

        1671566161553292.png

        圖19 軟件設計

        4 結束語

        本文闡述了一種非ROS 系統的定制化物流機器人的設計方法,通過該方法設計,可以節省機器人的成本和功耗,在實現豐富的定制化功能的同時,可根據手機APP 上輸入的終點位置和角度,在室內動態未知環境中導航到終點,通過實驗驗證,機器人運行穩定高效,說明該設計方法具有一定的實用性和可靠性。

        參考文獻:

        [1] 蘇青.多機器人路徑規劃與協同避碰研究[D].南京:南京郵電大學,2014.

        [2] 張文輝,齊乃明,尹洪亮.自適應神經變結構的機器人軌跡跟蹤控制[J].控制與決策,2011(7):33-37.

        [3]鮑敦橋.仿真類人機器人設計及高層決策方法的研究[D].合肥:合肥工業大學,2009.

        [4]余婷.多機器人隊列曲線運動研究[D].上海:上海交通大學,2009.

        [5]韓雪峰.導盲機器人[D].哈爾濱:哈爾濱工程大學,2009.

        [6] 馬斌奇.多機器人協作與控制策略研究[D].西安:西安電子科技大學,2009.

        [7] YAN Y P, WONG S F, A navigation algorithm of the mobile robot in the indoor and dynamic environment based on the PF-SLAM algorithm[J].Cluster Computing,2019(12):133-139.

        [8] YAN Y P, LI Y M. Mobile robot autonomous path planning based on fuzzy logic and filter smoothing in dynamic environment[C].12th World Congress on Intelligent Control and Automation,2016,6.

        [9] HE P. Consensus of uncertain parabolic PDE agents via adaptive unit-vector control scheme[J]. IET Control Theory & Applications,2018,12(18):2488-2494.

        [10] ZHU S P, XIA L M. Human action recognition based on fusion feathers extraction of adaptive background subtraction and optical flow model, mathematical problems in engineering [J].2015(4).

        [11] YAN Y P, LI Y M, Autonomous path planning and navigation of a mobile robot with multi-sensors based on fuzzy logic in dynamic environment[J].International Journal of Intelligent Systems and Applications in Robotics, 2016,7(1):1-14.

        [12] YAN Y P, WONG S F. A navigation algorithm for the mobile robot in the indoor and dynamic environment based on the image recognition algorithm[J].The Hong Kong Institution of Engineers,2018.

        (本文來源于《電子產品世界》雜志2022年12月期)



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 郧西县| 海伦市| 那坡县| 泸州市| 达孜县| 上犹县| 施甸县| 上栗县| 冀州市| 黎川县| 南丹县| 吕梁市| 南昌市| 鲁山县| 咸丰县| 通城县| 安义县| 潜山县| 泾阳县| 汉川市| 新宁县| 柳河县| 二手房| 金昌市| 廉江市| 天台县| 正定县| 汶川县| 弋阳县| 潞西市| 无为县| 彝良县| 台湾省| 那坡县| 金坛市| 榆林市| 藁城市| 大名县| 交城县| 常熟市| 柳河县|