亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種物流機器人的設計與實現(xiàn)

        2023-05-30 09:56:20嚴毓培馬維旻楊裕尹雪梅潘強湯佩豫黎偉
        電子產(chǎn)品世界 2023年1期
        關(guān)鍵詞:單片機

        嚴毓培 馬維旻 楊裕 尹雪梅 潘強 湯佩豫 黎偉

        摘要:為了節(jié)省機器人開發(fā)的成本和功耗,工業(yè)領(lǐng)域一般采用非ROS系統(tǒng)開發(fā)機器人,本文闡述的倉儲物流機器人的設計基于ARM架構(gòu)的S5PV210的CPU,運行嵌入式Linux操作系統(tǒng),降低了硬件成本,節(jié)省了電池功耗,同時根據(jù)定制需求開發(fā),實時性比較高。機器人的ARM主板和單片機主板間通過定制的通信協(xié)議通信,外接了各種傳感器以加強機器人的感知能力,通過嵌入式Linux下多進程的開發(fā)以實現(xiàn)多功能同步,圖形界面采用嵌入式QT開發(fā),通過mjpeg-streamer實現(xiàn)web遠程視頻監(jiān)控,并設計了安卓APP以提供操控的便攜性。

        關(guān)鍵詞:物流機器人;ARM;嵌入式Linux;單片機;QT圖形界面

        *基金項目:

        1)廣東省普通高校特色創(chuàng)新類項目(自然科學)(2018GKTSCX056)

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

        3)珠海城市職業(yè)技術(shù)學院2021年科研項目(KY2021Y01Z)

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

        5)2022年廣東省科技創(chuàng)新戰(zhàn)略專項資金(pdjh2022b0992)

        6)2021年校級質(zhì)量工程師資項目(ZLJS2020120622,ZLJS2020120623,ZLJS2020120624)

        0 引言

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

        1硬件設計

        本文中所設計的物流機器人如圖1所示,硬件部分由 ARM 主板和單片機電路板組成,具體的硬件框架如圖2所示。

        其中 ARM 主板采用了 S5PV210的 CPU,帶有512 MB 的 RAM和512 M 的flash,LCD 觸摸屏,SD 卡插槽,3個 USB 接口和4個串口,運行嵌入式 Linux 操作系統(tǒng)[1],如圖3所示。利用該主板可實現(xiàn)機器人的激光雷達掃描,LCD 觸摸屏顯示,機器人與手機 APP 之間的藍牙通信,運行mjpeg-streamer 的實時 web 遠程視頻監(jiān)控等功能。

        ARM 主板的 CPU 是 S5PV210,運行嵌入式 Linux 系統(tǒng),嵌入式 Linux 系統(tǒng)是非實時系統(tǒng),無法準確讀取25 kHz 的光電編碼器的脈沖,因此用單片機進行電機控制和光電編碼器的脈沖讀取,單片機與 ARM 主板之間用自定義的通信協(xié)議傳輸光電編碼器讀取的數(shù)據(jù)[2],如圖4所示。

        機器人外接模塊可以為機器人提供更加豐富的功能,如圖5所示,其中 USB 攝像頭用來提供機器人現(xiàn)場的視頻,USB-Wi-Fi 模塊用來將攝像頭的視頻傳輸?shù)竭h程客戶端的 web 頁面,串口藍牙模塊用來和手機 APP 連接,飛控模塊包含 GPS,陀螺儀,電子羅盤,加速度計等傳感器,并內(nèi)置了傳感器融合等算法,為室內(nèi)機器人判斷運動方向提供參考[3]。

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

        2軟件設計

        2.1單片機的軟件設計

        機器人的直流電機連接著減速電機,因此光電編碼器一秒鐘可以讀入25 kHz 的脈沖,但嵌入式 Linux 操作系統(tǒng)是非實時的操作系統(tǒng),讀取脈沖不夠準確[4],因此用單片機來讀取25 kHz 的脈沖,并將脈沖值通過串口自定義的簡單協(xié)議傳給 ARM 開發(fā)板。

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

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

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

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

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

        2.2 嵌入式Linux的軟件設計

        系統(tǒng)從 QT 的TMainForm進入后分別對mjpegstreamer,GPIO,串口,液晶屏,攝像頭進行初始化,并啟動 QT 的定時器,每 1 s 刷新一次控件。

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

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

        移動機器人的輪子由電機帶動,輪子的直徑為 D,則輪子的周長為πD,電機轉(zhuǎn)動的圈數(shù) m 可以由光電編碼器獲取,當機器人在前進或者后退狀態(tài),移動機器人移動的距離 S 可以由 S = m×πD得到。

        機器人在每 1 s 求 1 次角度,并計算角度的累計和,以此判斷出機器人的朝向,因為激光數(shù)據(jù)處理的進程也會對角度數(shù)據(jù)進行讀寫操作,因此在以上流程執(zhí)行前需要加上互斥鎖mutex_lock,執(zhí)行完畢后關(guān)閉互斥鎖 [8]。

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

        機器人每 1 s 也會判斷設定速度是否發(fā)生改變,如果改變了就會根據(jù)新的設定速度計算占空比并下發(fā)到單片機,如果機器人按照設定速度來調(diào)整占空比,會出現(xiàn)機器人的速度忽大忽小的情況,因此將速度上限定為設定速度的105%,速度下限定為設定速度的95%,誤差率為±5%,當機器人的速度在速度的上下限范圍內(nèi)則不用調(diào)整占空比,機器人可以運行得更平穩(wěn)[9]。

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

        機器人通過以上mjpeg-streamer 組件的代碼完成了web 遠程視頻監(jiān)控的功能,可在遠程打開firefox瀏覽器看到機器人上攝像頭拍到的視頻[11],相關(guān)實現(xiàn)代碼如下:

        if(webcamera==0)

        {

        int mjpg_streamer2;

        char arg[40]=”/mjgp-streamer/start_uvc_yuv.

        sh”;

        mjpg_streamer2=system(arg);

        if((mjpg _ streamer2==127)||(mjpg _ streamer2<0))

        webcamera=0;

        else

        webcamera=1;

        printf(“the mjgp_streamer2 is %i\n ”,mjpg_ streamer2);

        }

        激光探頭可以測量到周圍障礙物的距離和角度,當激光探頭發(fā)現(xiàn)在320~40的范圍內(nèi),在距離激光探頭1 m 的范圍內(nèi)有移動障礙物,則變量stop_forward=1,否則該變量為0,該角度和距離可以根據(jù)實際機器人的情況做相應調(diào)整。同理當激光探頭發(fā)現(xiàn)在40到140的范圍內(nèi),在距離激光探頭1 m 的范圍內(nèi)有障礙物,則變量stop_right =1,否則該變量為0。如果變量 stop_ forward =1,則此時機器人需要旋轉(zhuǎn)到某個角度,從周圍障礙物的縫隙中出去。

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

        if(angle<last_data[0]){

        new_start=1;

        if((max_data[1]>=40.0)&&

        (max_data[1]<=140.0))

        turning_right++;

        else if((max_data[1]>=220.0)&&

        (max_data[1]<=320.0))

        turning_left++;}

        if((angle>320)||(angle<40)){

        if((distance<800.0)&&(distan

        ce>0.0)){

        stop_forward++;}}

        if((destination _ angle >40)&&(destination _

        angle<320)){

        if(angle<=(360-destination_

        angle+30))&&(angle>=(360-destination_angle-30))){

        if((distance<1000.0)&&(dista

        nce>0.0)){

        stop_destination++;}}}

        可利用狀態(tài)機處理該部分代碼,一共有3種狀態(tài),第1種是在左轉(zhuǎn)或者右轉(zhuǎn)中以尋找終點方位的狀態(tài),第2種是前進或者后退中不斷向終點靠近,第3種狀態(tài)是

        尋找新的空隙的狀態(tài)。

        2.3安卓端的軟件設計

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

        mInputEditText =(EditText) findViewById(R . id.editText1);

        mInputEditText.setGravity(Gravity.TOP);?? mInputEditText .setSelection(mInputEditText .

        getText().length(),

        mInputEditText.getText().length());

        mInputEditText.clearFocus();

        mInputEditText.setFocusable(false);

        mStartButton=(Button)super .findViewById(R . id.button_start);

        forward=(ImageButton)super .findViewById(R . id.imageButton_forward);

        backward=(ImageButton)super.findViewById(R. id.imageButton_backward);

        left=(ImageButton)super .findViewById(R . id.imageButton_left);

        right=(ImageButton)super .findViewById(R . id.imageButton_right);

        mS tartButton . s etOnClickListener(newShowStart());

        f o r w a r d . s e t O n C l i c k L i s t e n e r(n e w ShowForward());

        right.setOnClickListener(new ShowRight());

        ba c kward . se t OnCli c kList e ne r(ne wShowBackward());

        left.setOnClickListener(new ShowLeft());

        mTitle =(TextView) findViewById(R .id .title_ left_text);

        mTitle.setText(R.string.app_name);

        mTitle =(TextView) findViewById(R .id .title_ right_text);

        HEXCheckBox =(CheckBox) findViewById(R. id.radioMale);

        breakButton=(Button) findViewById(R . id.button_break);

        m Bl u e t o ot hAdapt e r = Bl u e t o ot hAdapt e r . getDefaultAdapter();

        checkBox_sixteen =(CheckBox) findViewById(R.id.checkBox_sixteen);

        如果在 APP 上按下啟動按鈕,按鈕的文本會變成“停止”,同時向機器人的串口藍牙模塊發(fā)送”Start ”字符串,機器人通過串口收到后調(diào)用 start()函數(shù)啟動機器人,以下是安卓端的具體實現(xiàn)。

        class ShowStart implements OnClickListener{

        public void onClick(View v){

        String message1;

        if(system_start==true){

        system_start=false;

        mStartButton.setText(“Start ”);

        message1=“stop\r ”;

        }

        else{

        system_start=true;

        mStartButton.setText(“Stop”);

        message1=“start\r ”;

        }

        try {

        message1.getBytes(“ISO_8859_1”);} catch(UnsupportedEncodingExceptione){

        e.printStackTrace();}

        sendMessage(message1);}}

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

        3結(jié)束語

        本文闡述了一種非 ROS 系統(tǒng)的定制化物流機器人的軟硬件設計方案,該設計方案可以節(jié)省機器人的成本和功耗,并增強了系統(tǒng)的穩(wěn)定性和實時性,通過實驗驗證,機器人運行穩(wěn)定高效,說明該設計方案具有一定的實用性和可靠性。

        參考文獻:

        [1]毛文平,李帥永,謝現(xiàn)樂,等.基于自適應機制改進蟻群算法的移動機器人全局路徑規(guī)劃[J].控制與決策,2022,(2):19-25.

        [2]潘圓媛.物聯(lián)網(wǎng)環(huán)境下的移動機器人定位的應用[J].科技資訊,2022,20(16):20.

        [3]蘇青.多機器人路徑規(guī)劃與協(xié)同避碰研究[D].南京:南京郵電大學,2014.

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

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

        [6]朱可平,王菲菲,吳加.移動機器人核心技術(shù)發(fā)展趨勢[J].物流技術(shù)與應用,2022,27(9):5.

        [7]毛福新,閆光輝,陳俏銳,等.智能物流場景搬運機器人系統(tǒng)優(yōu)化[J].天津職業(yè)技術(shù)師范大學學報,2022,32(3):7.

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

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

        [10]李橙,衛(wèi)星,周游,等.基于激光視覺引導的智能物流分揀機器人控制研究[J].激光雜志,2022,43(8):43.

        [11]張文輝,齊乃明,尹洪亮.自適應神經(jīng)變結(jié)構(gòu)的機器人軌跡跟蹤控制[J].控制與決策,2011,26(4):4-6.

        [12]付曉艷,白雪,魏博凝.基于機器學習的物流自動分揀機器人定位精度檢測算法[J].自動化與儀器儀表,2022(8):5-9.

        猜你喜歡
        單片機
        基于單片機的SPWM控制逆變器的設計與實現(xiàn)
        電子制作(2019年13期)2020-01-14 03:15:28
        基于單片機的層次漸變暖燈的研究
        電子制作(2019年15期)2019-08-27 01:12:10
        基于單片機的多功能智能插排
        電子制作(2019年11期)2019-07-04 00:34:48
        基于單片機的便捷式LCF測量儀
        電子制作(2019年9期)2019-05-30 09:42:02
        小議PLC與單片機之間的串行通信及應用
        電子制作(2018年12期)2018-08-01 00:48:04
        MSP430單片機在仿真中要注意的幾點問題
        電子制作(2017年9期)2017-04-17 03:00:53
        基于單片機的平衡控制系統(tǒng)設計
        電子制作(2017年19期)2017-02-02 07:08:27
        基于單片機的三維LED點陣設計
        電子制作(2016年21期)2016-05-17 03:52:51
        Microchip推出兩個全新PIC單片機系列
        基于Proteus的單片機控制系統(tǒng)的仿真設計
        精品无码专区久久久水蜜桃| 国产视频激情在线观看| 日日噜噜夜夜狠狠久久丁香五月 | 蜜桃视频一区视频二区| 国内嫩模自拍诱惑免费视频| 久热国产vs视频在线观看| 国产免费破外女真实出血视频| 五月天婷婷一区二区三区久久| 中文字幕av素人专区| 欧美村妇激情内射| 亚洲精品毛片一区二区三区| 中文字幕成人精品久久不卡| 亚州无吗一区二区三区| 日本真人做人试看60分钟| 在线看亚洲十八禁网站| 久久国产高潮流白浆免费观看| 中文字幕国产亚洲一区| 色avav色av爱avav亚洲色拍| 亚洲美女啪啪| 亚洲av午夜福利一区二区国产| 国产性自爱拍偷在在线播放 | 国产人成午夜免电影观看| 国产人成在线免费视频| 日本激情网站中文字幕| 欧美粗大猛烈老熟妇| 91成人午夜性a一级毛片| 女同舌吻互慰一区二区| 97se狠狠狠狠狼鲁亚洲综合色| 欧美性群另类交| 日本熟妇高潮爽视频在线观看| 真实夫妻露脸爱视频九色网 | 国产成人精品无码片区在线观看 | 99久久精品国产一区二区蜜芽| 精品视频在线观看一区二区有| 亚洲精品第一页在线观看 | 草草影院ccyy国产日本欧美 | 国产偷v国产偷v亚洲偷v| 日本一二三区在线视频观看| 男人的天堂中文字幕熟女人妻| 国产裸体歌舞一区二区| 免费人成黄页网站在线观看国内|