孫作雷, 張波, 曾連蓀
(1.上海海事大學 信息工程學院,上海 201306; 2.中國科學院 上海高等研究院,上海 201210)
隨著工業、軍事及民用領域對自動化和人工智能技術需求的日益增長,與移動機器人相關的理論及應用已成為研究熱點[1-3].無論導航算法還是智能辨識技術的應用研究都需利用移動機器人平臺進行成果驗證,這已成為移動機器人研究領域的慣例.目前,市場上已有一些廣泛應用于科研的移動機器人平臺,它們是理論算法驗證的重要載體,并在越來越多的論著中被提及.例如,Segway公司的Segway RMP平臺[4],ActivMedia公司的Pioneer[5]等.
但是,結合國內研究現狀,這些移動機器人平臺用于科研時具有如下弊端:(1)底層軟硬件設計細節不開放,軟件代碼不開源,不利于后期的維護和升級,也不利于二次開發;(2)售價較高,且多為國外產品,小型科研組難以承擔較為高昂的硬件設備預算.因此,設計并實現小型的低成本實驗機器人平臺是開展移動機器人相關研究的起點.本文闡述一個低成本實驗機器人平臺的搭建,其整體構建基于市場上現有的開源硬件Arduino板卡[6]和跨平臺開源圖形軟件包Qt[7].該平臺具有如下特點:(1)可擴展性強,可在通信規約中靈活添加功能;(2)所使用的軟硬件均開源,可免費用于科研.
從功能獨立和系統模塊化的角度考慮,系統整體的設計分為上位機和下位機兩部分.上位機和下位機直接通過通信規約相聯系.為本平臺所設計的通信規約在本文第2.1節中有詳細介紹.系統的硬件設計框架見圖1.

圖1 開源實驗機器人平臺的硬件設計框架
下位機由機器人機械框架、車輪、驅動電機、電機編碼器、電機驅動板、傳感器接口板、嵌入式控制板和鋰電池組成.其中,機械框架采用兩層設計:底層艙內存放4路電機和4路16線2相編碼器(見圖2),根據編碼器測量的機器人輪子的轉數,可間接計算機器人的相對位移和轉角;上層艙存放板卡和電池(見圖3).下位機的主要作用是將上位機發來的動作指令翻譯為驅動電機的控制信號,發送給電機驅動板,以控制相應車輪的轉速從而實現機器人不同形式的運動;同時,利用Arduino微控制板結合傳感器接口板讀取編碼器數據,為機器人相對運動估計提供基準,并將相對運動信息傳回上位機,時刻響應上位機下發的其他指令.

圖2 下位機底層艙 圖3 下位機上層艙
下位機的Arduino Mega 2560控制板集成有串口轉USB的芯片,這使上位機與下位機之間基于RS 232通信.此外,如圖3所示,Arduino控制板與傳感器擴展板插疊使用,可有效確保板卡之間連接的可靠性和下位機艙內的空間緊湊度.
上位機負責響應用戶對機器人下發的各種動作指令,并回顯機器人實時相對位置及健康狀態信息.上位機使用通用的筆記本電腦搭建,對筆記本硬件沒有特別要求.平臺上搭載的傳感器,如視覺傳感器,直接與機載的筆記本電腦相連,進行數據讀取和保存.
平臺的軟件設計是本文所開發平臺的設計重點,其主要思路是基于上位機和下位機間的通信規約,操作串口實現對通信包的捕獲、解析和發送,并重構用于指令反饋的握手數據包.
本文所設計的通信規約是連接機器人下位機和上位機的語法基礎.為提高通信的可靠性和可維護性,在規約的設計中突出3點細節:(1)具有自校驗能力.實際通信中的錯誤可能來自于誤碼或控制邏輯錯誤;即使上位機下發的指令沒有誤碼,機器人也有可能無法完成指令.(2)可以滿足多種控制需求.不但能實現對機器人的精確PID控制,而且還能實現簡單的操控類指令.(3)具有靈活的可擴展性.在實際的科研過程中,隨著算法的調整或不同實驗場景的設定,可能需要對機器人功能進行調整、增加或刪除.與同類設計大多以ASCII碼傳輸指令不同,本文的上位機與下位機的通信包為二進制流.每個規約通信包至少包含8個字段.字段具體定義見表1.

表1 上位機與控制板通信規約字段概覽
通信規約中的參數段主要用于描述移動機器人的相對運動狀態,相對移動具體定義參見文獻[8].概括地說,參數段可包含3類:笛卡爾坐標,單位為cm,x和y坐標分別用2 byte有符號數表示;極坐標,半徑單位為cm,用2 byte有符號數表示,偏角單位為0.1°,用2 byte有符號數表示;相對運動,位移單位為cm,轉角單位為0.1°.上述數據均以原始的16進制發送,且先發高字節,后發低字節.
下位機的軟件設計使用Arduino語言,基于模塊化思想,可分為指令解析與反饋模塊、電機驅動模塊和編碼器讀取與相對運動解算模塊.下位機軟件設計的核心思想是利用串口接收到兩幀數據指令包之間的時間間隔作為協議解析的觸發.通常可將該時間間隔取為串口傳輸單一字節所用時間的5~10倍.該時間與波特率相關.目前平臺下位機使用的Arduino控制板串口波特率配置為115~200 bit/s,則接收1 byte持續的時間為(8+1+1)/115 200≈0.087 ms(除8 bit數據位之外,還包括1 bit起始位和1 bit停止位).這里數據幀之間的時間間隔取為1 byte傳輸時間的7倍,約0.6 ms.即,如果在0.6 ms的時間內沒有數據進入,則判定一幀數據已傳輸完畢.
如果使用通常的嵌入式微處理器實現上述過程,應同時使用串口接收中斷和定時器中斷.但是,本文所使用的Arduino控制板屏蔽了AVR單片機的定時器中斷,僅提供讀取系統時鐘的接口.因此,使用Arduino實現上述解析過程時,需首先開辟足夠大的用戶緩存區Buf用以存儲串口接收到的數據,并在串口接收中斷事件中讀取系統時鐘賦給全局時間標志.具體地,當有連續數據進入時,在串口接收中斷事件中完成數據讀取并給全局時間重新賦值.這里對“連續數據”的定義是基于相鄰字節之間的時間間隔小于0.6 ms.在主程序中比較全局時間與當前系統時鐘的時間差,如果大于0.6 ms,則認定完整的數據包已被接收,轉向數據包解析.具體的下位機規約通信包解析流程見圖4.
為確保本文所提平臺的跨平臺特性,上位機的軟件編寫整體依托跨平臺的圖形軟件包Qt的開源版本[7],串口通信由Qt下的開源跨平臺串口處理組件Qextserialport[9]實現.這可確保上位機軟件在Windows和各種Linux發行版本和Mac OX下運行.這種軟件設計有兩點益處:(1)使用通用操作系統為基于本機器人平臺的算法設計及驗證提供便利,可以更方便、高效地繼承領域內的開源軟件資源;(2)可回避使用嵌入式CPU板卡實現導航算法的開發難度,縮短開發周期.
上位機的規約通信包解析過程與下位機有較大差別,因PC操作系統(無論Linux還是Windows),都不是實時操作系統(Real Time Operation System, RTOS),系統并發很多進程,這使事件跳轉無法做到實時.例如Qt中的定時器QTimer,雖然定時精度達到毫秒級,但跳轉到串口事件耗時遠遠大于毫秒.因此,靠時間間隔來自然分包的方式在PC編程中不可行.據此,上位機端的規約通信包解析需要逐字節進行.在緩沖區存入最小長度的串口接收數據,且確認初始字節為協議包頭后觸發協議包的解析.邊接收數據邊解析.同時,針對PC端內存充足的特點,開辟環狀緩沖區以存儲串口接收的數據.

圖4 下位機規約通信包解析流程
目前的上位機軟件僅運行一個用戶線程.在同一個線程中,串口有數據進入后,會跳入串口事件.如果在處理串口事件的過程中有新數據進入,串口事件的處理并不會被打斷,而是待串口事件處理完后再一次跳入,中途進入串口的數據已由開源的第三方串口組件Qextserialport緩存,可從串口緩沖區內讀取.這一操作對用戶來說是完全透明的.此外,在上位機軟件開發中,基于Qt中QByteArray類的各種成員函數可簡化對規約通信包中各字段的判斷和提取流程.

圖5 實驗機器人平臺
本文所提出的平臺整機見圖5.使用12 V鋰電池供電,電機轉速可達到251 r/min,減速比為1∶131,整機輸出功率為60 W,電機標稱輸入電壓為12 V.本平臺配置的電機驅動板可以為電機提供最大12 A的電流,并且能在幾秒鐘內獲得15 A的峰值電流,并具有過量電流和熱量保護.這使本平臺具有較好的載重和機動性能.可載重6 kg,滿足搭載一臺通用筆記本電腦、視覺傳感器及其支架的需求,負重狀態下可攀越坡度小于35°的路面.平坦地面的最大行駛速度為0.8 m/s,能滿足室外數據采集的需求.
提出一種低成本的實驗機器人平臺設計方案,闡述其軟件和硬件的設計和實現細節.該平臺基于開源軟硬件測試環境開發,具有低成本、跨平臺、功能擴展靈活的特點.本方案可方便機器人研究團隊快速搭建實驗機器人平臺,驗證理論算法.未來本平臺將集成微軟的景深視覺傳感器Kinect.景深視覺觀測數據的讀取和緩存與本文已經完成的上位機和下位機軟件相融合是下一階段的主要工作.
參考文獻:
[1] 楊蕊蕊, 朱大奇. 基于生物啟發模型的自治水下機器人平面軌跡跟蹤控制[J]. 上海海事大學學報, 2011, 32(3): 58-63.
[2] 張穎, 張有志, 方敏. 基于CAN總線多主節點結構的自治水下機器人通信系統[J]. 上海海事大學學報, 2010, 31(1): 39-42.
[3] 李欣, 朱大奇. 基于人工勢場法的自治水下機器人路徑規劃[J]. 上海海事大學學報, 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/.