孫作雷, 張波, 曾連蓀
(1.上海海事大學(xué) 信息工程學(xué)院,上海 201306; 2.中國科學(xué)院 上海高等研究院,上海 201210)
隨著工業(yè)、軍事及民用領(lǐng)域?qū)ψ詣?dòng)化和人工智能技術(shù)需求的日益增長,與移動(dòng)機(jī)器人相關(guān)的理論及應(yīng)用已成為研究熱點(diǎn)[1-3].無論導(dǎo)航算法還是智能辨識技術(shù)的應(yīng)用研究都需利用移動(dòng)機(jī)器人平臺進(jìn)行成果驗(yàn)證,這已成為移動(dòng)機(jī)器人研究領(lǐng)域的慣例.目前,市場上已有一些廣泛應(yīng)用于科研的移動(dòng)機(jī)器人平臺,它們是理論算法驗(yàn)證的重要載體,并在越來越多的論著中被提及.例如,Segway公司的Segway RMP平臺[4],ActivMedia公司的Pioneer[5]等.
但是,結(jié)合國內(nèi)研究現(xiàn)狀,這些移動(dòng)機(jī)器人平臺用于科研時(shí)具有如下弊端:(1)底層軟硬件設(shè)計(jì)細(xì)節(jié)不開放,軟件代碼不開源,不利于后期的維護(hù)和升級,也不利于二次開發(fā);(2)售價(jià)較高,且多為國外產(chǎn)品,小型科研組難以承擔(dān)較為高昂的硬件設(shè)備預(yù)算.因此,設(shè)計(jì)并實(shí)現(xiàn)小型的低成本實(shí)驗(yàn)機(jī)器人平臺是開展移動(dòng)機(jī)器人相關(guān)研究的起點(diǎn).本文闡述一個(gè)低成本實(shí)驗(yàn)機(jī)器人平臺的搭建,其整體構(gòu)建基于市場上現(xiàn)有的開源硬件Arduino板卡[6]和跨平臺開源圖形軟件包Qt[7].該平臺具有如下特點(diǎn):(1)可擴(kuò)展性強(qiáng),可在通信規(guī)約中靈活添加功能;(2)所使用的軟硬件均開源,可免費(fèi)用于科研.
從功能獨(dú)立和系統(tǒng)模塊化的角度考慮,系統(tǒng)整體的設(shè)計(jì)分為上位機(jī)和下位機(jī)兩部分.上位機(jī)和下位機(jī)直接通過通信規(guī)約相聯(lián)系.為本平臺所設(shè)計(jì)的通信規(guī)約在本文第2.1節(jié)中有詳細(xì)介紹.系統(tǒng)的硬件設(shè)計(jì)框架見圖1.
圖1 開源實(shí)驗(yàn)機(jī)器人平臺的硬件設(shè)計(jì)框架
下位機(jī)由機(jī)器人機(jī)械框架、車輪、驅(qū)動(dòng)電機(jī)、電機(jī)編碼器、電機(jī)驅(qū)動(dòng)板、傳感器接口板、嵌入式控制板和鋰電池組成.其中,機(jī)械框架采用兩層設(shè)計(jì):底層艙內(nèi)存放4路電機(jī)和4路16線2相編碼器(見圖2),根據(jù)編碼器測量的機(jī)器人輪子的轉(zhuǎn)數(shù),可間接計(jì)算機(jī)器人的相對位移和轉(zhuǎn)角;上層艙存放板卡和電池(見圖3).下位機(jī)的主要作用是將上位機(jī)發(fā)來的動(dòng)作指令翻譯為驅(qū)動(dòng)電機(jī)的控制信號,發(fā)送給電機(jī)驅(qū)動(dòng)板,以控制相應(yīng)車輪的轉(zhuǎn)速從而實(shí)現(xiàn)機(jī)器人不同形式的運(yùn)動(dòng);同時(shí),利用Arduino微控制板結(jié)合傳感器接口板讀取編碼器數(shù)據(jù),為機(jī)器人相對運(yùn)動(dòng)估計(jì)提供基準(zhǔn),并將相對運(yùn)動(dòng)信息傳回上位機(jī),時(shí)刻響應(yīng)上位機(jī)下發(fā)的其他指令.
圖2 下位機(jī)底層艙 圖3 下位機(jī)上層艙
下位機(jī)的Arduino Mega 2560控制板集成有串口轉(zhuǎn)USB的芯片,這使上位機(jī)與下位機(jī)之間基于RS 232通信.此外,如圖3所示,Arduino控制板與傳感器擴(kuò)展板插疊使用,可有效確保板卡之間連接的可靠性和下位機(jī)艙內(nèi)的空間緊湊度.
上位機(jī)負(fù)責(zé)響應(yīng)用戶對機(jī)器人下發(fā)的各種動(dòng)作指令,并回顯機(jī)器人實(shí)時(shí)相對位置及健康狀態(tài)信息.上位機(jī)使用通用的筆記本電腦搭建,對筆記本硬件沒有特別要求.平臺上搭載的傳感器,如視覺傳感器,直接與機(jī)載的筆記本電腦相連,進(jìn)行數(shù)據(jù)讀取和保存.
平臺的軟件設(shè)計(jì)是本文所開發(fā)平臺的設(shè)計(jì)重點(diǎn),其主要思路是基于上位機(jī)和下位機(jī)間的通信規(guī)約,操作串口實(shí)現(xiàn)對通信包的捕獲、解析和發(fā)送,并重構(gòu)用于指令反饋的握手?jǐn)?shù)據(jù)包.
本文所設(shè)計(jì)的通信規(guī)約是連接機(jī)器人下位機(jī)和上位機(jī)的語法基礎(chǔ).為提高通信的可靠性和可維護(hù)性,在規(guī)約的設(shè)計(jì)中突出3點(diǎn)細(xì)節(jié):(1)具有自校驗(yàn)?zāi)芰?實(shí)際通信中的錯(cuò)誤可能來自于誤碼或控制邏輯錯(cuò)誤;即使上位機(jī)下發(fā)的指令沒有誤碼,機(jī)器人也有可能無法完成指令.(2)可以滿足多種控制需求.不但能實(shí)現(xiàn)對機(jī)器人的精確PID控制,而且還能實(shí)現(xiàn)簡單的操控類指令.(3)具有靈活的可擴(kuò)展性.在實(shí)際的科研過程中,隨著算法的調(diào)整或不同實(shí)驗(yàn)場景的設(shè)定,可能需要對機(jī)器人功能進(jìn)行調(diào)整、增加或刪除.與同類設(shè)計(jì)大多以ASCII碼傳輸指令不同,本文的上位機(jī)與下位機(jī)的通信包為二進(jìn)制流.每個(gè)規(guī)約通信包至少包含8個(gè)字段.字段具體定義見表1.
表1 上位機(jī)與控制板通信規(guī)約字段概覽
通信規(guī)約中的參數(shù)段主要用于描述移動(dòng)機(jī)器人的相對運(yùn)動(dòng)狀態(tài),相對移動(dòng)具體定義參見文獻(xiàn)[8].概括地說,參數(shù)段可包含3類:笛卡爾坐標(biāo),單位為cm,x和y坐標(biāo)分別用2 byte有符號數(shù)表示;極坐標(biāo),半徑單位為cm,用2 byte有符號數(shù)表示,偏角單位為0.1°,用2 byte有符號數(shù)表示;相對運(yùn)動(dòng),位移單位為cm,轉(zhuǎn)角單位為0.1°.上述數(shù)據(jù)均以原始的16進(jìn)制發(fā)送,且先發(fā)高字節(jié),后發(fā)低字節(jié).
下位機(jī)的軟件設(shè)計(jì)使用Arduino語言,基于模塊化思想,可分為指令解析與反饋模塊、電機(jī)驅(qū)動(dòng)模塊和編碼器讀取與相對運(yùn)動(dòng)解算模塊.下位機(jī)軟件設(shè)計(jì)的核心思想是利用串口接收到兩幀數(shù)據(jù)指令包之間的時(shí)間間隔作為協(xié)議解析的觸發(fā).通??蓪⒃摃r(shí)間間隔取為串口傳輸單一字節(jié)所用時(shí)間的5~10倍.該時(shí)間與波特率相關(guān).目前平臺下位機(jī)使用的Arduino控制板串口波特率配置為115~200 bit/s,則接收1 byte持續(xù)的時(shí)間為(8+1+1)/115 200≈0.087 ms(除8 bit數(shù)據(jù)位之外,還包括1 bit起始位和1 bit停止位).這里數(shù)據(jù)幀之間的時(shí)間間隔取為1 byte傳輸時(shí)間的7倍,約0.6 ms.即,如果在0.6 ms的時(shí)間內(nèi)沒有數(shù)據(jù)進(jìn)入,則判定一幀數(shù)據(jù)已傳輸完畢.
如果使用通常的嵌入式微處理器實(shí)現(xiàn)上述過程,應(yīng)同時(shí)使用串口接收中斷和定時(shí)器中斷.但是,本文所使用的Arduino控制板屏蔽了AVR單片機(jī)的定時(shí)器中斷,僅提供讀取系統(tǒng)時(shí)鐘的接口.因此,使用Arduino實(shí)現(xiàn)上述解析過程時(shí),需首先開辟足夠大的用戶緩存區(qū)Buf用以存儲串口接收到的數(shù)據(jù),并在串口接收中斷事件中讀取系統(tǒng)時(shí)鐘賦給全局時(shí)間標(biāo)志.具體地,當(dāng)有連續(xù)數(shù)據(jù)進(jìn)入時(shí),在串口接收中斷事件中完成數(shù)據(jù)讀取并給全局時(shí)間重新賦值.這里對“連續(xù)數(shù)據(jù)”的定義是基于相鄰字節(jié)之間的時(shí)間間隔小于0.6 ms.在主程序中比較全局時(shí)間與當(dāng)前系統(tǒng)時(shí)鐘的時(shí)間差,如果大于0.6 ms,則認(rèn)定完整的數(shù)據(jù)包已被接收,轉(zhuǎn)向數(shù)據(jù)包解析.具體的下位機(jī)規(guī)約通信包解析流程見圖4.
為確保本文所提平臺的跨平臺特性,上位機(jī)的軟件編寫整體依托跨平臺的圖形軟件包Qt的開源版本[7],串口通信由Qt下的開源跨平臺串口處理組件Qextserialport[9]實(shí)現(xiàn).這可確保上位機(jī)軟件在Windows和各種Linux發(fā)行版本和Mac OX下運(yùn)行.這種軟件設(shè)計(jì)有兩點(diǎn)益處:(1)使用通用操作系統(tǒng)為基于本機(jī)器人平臺的算法設(shè)計(jì)及驗(yàn)證提供便利,可以更方便、高效地繼承領(lǐng)域內(nèi)的開源軟件資源;(2)可回避使用嵌入式CPU板卡實(shí)現(xiàn)導(dǎo)航算法的開發(fā)難度,縮短開發(fā)周期.
上位機(jī)的規(guī)約通信包解析過程與下位機(jī)有較大差別,因PC操作系統(tǒng)(無論Linux還是Windows),都不是實(shí)時(shí)操作系統(tǒng)(Real Time Operation System, RTOS),系統(tǒng)并發(fā)很多進(jìn)程,這使事件跳轉(zhuǎn)無法做到實(shí)時(shí).例如Qt中的定時(shí)器QTimer,雖然定時(shí)精度達(dá)到毫秒級,但跳轉(zhuǎn)到串口事件耗時(shí)遠(yuǎn)遠(yuǎn)大于毫秒.因此,靠時(shí)間間隔來自然分包的方式在PC編程中不可行.據(jù)此,上位機(jī)端的規(guī)約通信包解析需要逐字節(jié)進(jìn)行.在緩沖區(qū)存入最小長度的串口接收數(shù)據(jù),且確認(rèn)初始字節(jié)為協(xié)議包頭后觸發(fā)協(xié)議包的解析.邊接收數(shù)據(jù)邊解析.同時(shí),針對PC端內(nèi)存充足的特點(diǎn),開辟環(huán)狀緩沖區(qū)以存儲串口接收的數(shù)據(jù).
圖4 下位機(jī)規(guī)約通信包解析流程
目前的上位機(jī)軟件僅運(yùn)行一個(gè)用戶線程.在同一個(gè)線程中,串口有數(shù)據(jù)進(jìn)入后,會跳入串口事件.如果在處理串口事件的過程中有新數(shù)據(jù)進(jìn)入,串口事件的處理并不會被打斷,而是待串口事件處理完后再一次跳入,中途進(jìn)入串口的數(shù)據(jù)已由開源的第三方串口組件Qextserialport緩存,可從串口緩沖區(qū)內(nèi)讀取.這一操作對用戶來說是完全透明的.此外,在上位機(jī)軟件開發(fā)中,基于Qt中QByteArray類的各種成員函數(shù)可簡化對規(guī)約通信包中各字段的判斷和提取流程.
圖5 實(shí)驗(yàn)機(jī)器人平臺
本文所提出的平臺整機(jī)見圖5.使用12 V鋰電池供電,電機(jī)轉(zhuǎn)速可達(dá)到251 r/min,減速比為1∶131,整機(jī)輸出功率為60 W,電機(jī)標(biāo)稱輸入電壓為12 V.本平臺配置的電機(jī)驅(qū)動(dòng)板可以為電機(jī)提供最大12 A的電流,并且能在幾秒鐘內(nèi)獲得15 A的峰值電流,并具有過量電流和熱量保護(hù).這使本平臺具有較好的載重和機(jī)動(dòng)性能.可載重6 kg,滿足搭載一臺通用筆記本電腦、視覺傳感器及其支架的需求,負(fù)重狀態(tài)下可攀越坡度小于35°的路面.平坦地面的最大行駛速度為0.8 m/s,能滿足室外數(shù)據(jù)采集的需求.
提出一種低成本的實(shí)驗(yàn)機(jī)器人平臺設(shè)計(jì)方案,闡述其軟件和硬件的設(shè)計(jì)和實(shí)現(xiàn)細(xì)節(jié).該平臺基于開源軟硬件測試環(huán)境開發(fā),具有低成本、跨平臺、功能擴(kuò)展靈活的特點(diǎn).本方案可方便機(jī)器人研究團(tuán)隊(duì)快速搭建實(shí)驗(yàn)機(jī)器人平臺,驗(yàn)證理論算法.未來本平臺將集成微軟的景深視覺傳感器Kinect.景深視覺觀測數(shù)據(jù)的讀取和緩存與本文已經(jīng)完成的上位機(jī)和下位機(jī)軟件相融合是下一階段的主要工作.
參考文獻(xiàn):
[1] 楊蕊蕊, 朱大奇. 基于生物啟發(fā)模型的自治水下機(jī)器人平面軌跡跟蹤控制[J]. 上海海事大學(xué)學(xué)報(bào), 2011, 32(3): 58-63.
[2] 張穎, 張有志, 方敏. 基于CAN總線多主節(jié)點(diǎn)結(jié)構(gòu)的自治水下機(jī)器人通信系統(tǒng)[J]. 上海海事大學(xué)學(xué)報(bào), 2010, 31(1): 39-42.
[3] 李欣, 朱大奇. 基于人工勢場法的自治水下機(jī)器人路徑規(guī)劃[J]. 上海海事大學(xué)學(xué)報(bào), 2010, 31(2): 35-39.
[4] BROOKS A, KAUPP T, MAKARENKO A. Randomised MPC-based motion-planning for mobile robot obstacle avoidance[C]// IEEE Int Conf Robotics and Automation, 2009: 3962-3967.
[5] CHEN Z, BIRCHFIELD S T. Qualitative vision-based path following[J]. IEEE Trans Robotics, 2009, 25(3): 749-754.
[6] Arduino. An open-source electronics prototyping platform[EB/OL]. [2012-12-18] http://www.arduino.cc/.
[7] Digia Plc. Qt open-source project[EB/OL]. [2013-01-18] http://qt-project.org/.
[8] SMITH R, SELF M, CHEESEMAN P. Estimating uncertain spatial relationships in robotics[J]. Autonomous Robot Vehicles, 1990: 167-193.
[9] Qextserialport. Open-source serial port library for Qt[EB/OL]. [2012-12-31] https://code.google.com/p/qextserialport/.