劉廣亮,劉成業, 鄭江花
(齊魯工業大學(山東省科學院),山東省科學院自動化研究所,山東省機器人與制造自動化技術重點實驗室,山東 濟南 250014)
移動機器人由于功能需求不同,結構形式和控制實現方式差別較大。具備相同功能的機器人,不同的生產廠家會采用不同的硬件(如電機、控制器等)和接口協議,使用的導航、路徑規劃、機器視覺等相關算法也不盡相同。一個穩定可靠的機器人系統需要將眾多不同的硬件和不同接口協議算法集成起來,從而成為擴展性強、可配置、接口適應性良好的機器人系統。
ROS(robot operating system)是面向機器人應用的開源的元操作系統[1],與平常我們理解的計算機操作系統不同,是一種平臺架構[2],設計的主要目的是為機器人研究和開發者提供框架和代碼復用的支持,因此ROS具有良好的擴展性。ROS提供了大量的工具包和廣泛的庫文件,已經形成一種生態系統,擁有大量開發者支持,提供了一站式的解決方案。
ROS應用領域眾多,如移動機器人、關節機器人、服務機器人、水下機器人等,已經成為機器人開放性的標準配置,通過ROS可以實現對已有機器人的二次開發。百度無人駕駛系統Apollo平臺在設計中就參考了ROS的系統架構,同時優化了通信機制及數據兼容性[3]。
ROS實現移動機器人運動控制的核心是ros_control設計與配置,通過自定義,可以實現對不同硬件接口協議的耦合,滿足不同機器人硬件配置的要求。本文設計了移動機器人控制架構,基于ros_control控制機制,配置差速運動控制器和機械臂關節控制器,設計了RobotHW硬件控制接口,采用CAN協議實現數據底層通信,完成對移動機器人的運動控制。控制器設計部分可以通過修改配置文件中的參數,在不用重新編譯源代碼的情況下實現對機器人的靈活配置,以適應不同機器人的結構形式和控制模式。
系統總體架構包括遙控端和本體端兩大部分[2,4](圖1),遙控端與本體端之間通過遠程通信模塊進行通信。遠程通信模塊可以實現數據和圖像長距離穩定通信,可視通信距離可以達到1 km。
遙控端由操控計算機、顯示屏、操控桿、視頻服務器、數傳模塊和圖傳模塊等6部分組成。操控計算機負責發出控制指令并接收本體端的數據信息,顯示屏完成實時遠程視頻圖像監控,同時監控車體姿態、電流電壓以及其他探測傳感器信息。
操控部分包括搖桿操控、鍵盤或者屏幕的鼠標操控,系統可以同時適應不同操控模式,實現對機器人的遠程操控。
遠程通信模塊包括數傳模塊和圖傳模塊,圖傳模塊負責接收機器人本體端的視頻信息并顯示在監視器上,數傳模塊負責操控端指令下達和車體數據接收。
機器人本體端由車載計算機、電源模塊、視覺系統、數據采集系統、運動控制系統、數傳模塊和圖傳模塊等7部分組成。
車載計算機是核心,負責機器人系統運算和各部分的通信。
視覺系統負責機器人視頻和圖像采集,機器人本體由多部攝像機提供視頻和圖像,包括左右云臺攝像機、全景攝像系統和機械臂端攝像機。視覺系統根據遠程操控端指令分別提供各個攝像機圖像視頻信息,經處理后通過圖傳模塊發送給遠程操控端。
數據采集系統負責傳感器的數據采集,經處理后發送給遠程操控端顯示。傳感器包括姿態傳感器、超聲避障傳感器、激光雷達和Kinect相機。
運動控制系統包括車體運動控制和機械臂運動控制部分。
針對機器人的控制,ROS系統提供了獨立開發包ros_control,ros_control是ROS為開發者提供的應用系統與機器人載體之間的中間件,包含控制器接口、傳動裝置接口、硬件接口、控制器工具箱等功能包。用戶可以在ros_control已有功能包基礎上,根據接口協議編寫硬件接口,簡單而快速地完成機器人應用的開發[5](圖2)。

圖2 ros_control 實現機制Fig.2 ros_control implementation mechanism
開發者要真正實現對機器人的控制,需要根據機器人具體設計指標要求進行設計和配置工作,實現控制系統對不同硬件環境條件的適應,因為不同的硬件(如不同的伺服電機、編碼器)需要不同的硬件接口協議設計,同時要在配置文件中進行參數配置(如速度和加速度等),從而保證控制系統的靈活性和可擴展性。
控制系統的設計與配置工作主要包括控制器設計、控制器配置、硬件接口配置、硬件接口設計、硬件通信實現5個部分。
控制器設計是根據機器人功能要求設計自己的定制控制器。在ros_control中內置很多控制器,如Diff_drive_controller、effort_controllers、joint_state_controller、position_controllers、velocity_controllers、joint_trajectory_controllers等。本文的機器人控制主要用到了Diff_drive_controller、joint_state_controller、velocity_controllers、joint_trajectory_controllers。因為控制設計沒有特殊要求,所以直接使用了ros_control基礎包,然后進行必要的控制配置就可以實現所要求的功能。
控制器配置主要是對每個控制器具體參數進行配置,如機器人差速運動參數包括左右輪對應關節、左右輪直徑、輪距、更新頻率、速度限制、加速度限制等。通過參數配置實現對機器人運動速度進行S曲線[6]平滑,保證運動速度控制穩定連續流暢,避免了手動控制時控制速度值的跳動。
硬件接口配置是指不同硬件(如電機)具有不同通信參數(如通信方式和地址)和通信協議,系統提供專門的配置文件進行參數配置。例如電機通信參數設置我們是通過配置電機參數文件(motors_spec.yaml)來完成。在此文件中可以配置電機轉速、力矩參數、位置讀取和寫入地址、速度讀取和寫入地址、電流讀取和寫入地址等參數。這些配置參數將被繼承自RobotHW的接口類讀取到,并用于接口通信和兩輪差速運動控制中。
硬件接口設計是指在兩輪差速運動模型中,差速運動控制器需要對每個輪運動速度進行穩定流暢的控制,而運動速度是由電機轉速決定的,如何實現對不同型號電機的控制是ros_control功能包設計的關鍵。在圖2中可以看到,對電機控制是通過RobotHW接口來實現的。我們設計了接口類GammabotHW ,繼承自 hardware_interface::RobotHW。在接口類GammabotHW中可以監聽遙控桿節點發出的以cmd_vel為話題(topic)的控制信息即Twist消息。Twist消息包含了機器人運動的線速度和角速度信息,二者又分別包括了3個運動方向的線速度和3個角度方向的角速度。
在兩輪差速運動中,只是用到一個運動方向的線速度值和一個水平轉向的角速度值。接口類GammabotHW監聽到搖桿發出的消息中的這兩個速度值,同時結合read函數讀取的當前機器人速度值和配置文件速度加速度控制策略,依據S曲線模型[6]進行速度值平滑優化,得到最優速度值,然后再通過write函數下達指令。
接口類GammabotHW中實現的另一個重要功能是建立循環進程,實時執行read和write操作。read函數完成電機轉速的讀取,write函數完成電機運轉速度指令下達。實時性是由ros_control差速運動模型來保證。
硬件通信的底層實現核心是read和write函數的功能實現,由電機控制器的通信系統來完成。采用PCAN-Basic API通信方式,在硬件上,通過USB轉CAN硬件設備實現與電機控制器的數據通信。在通信軟件系統中,按照CAN通信協議和電機控制器指令協議,設計了PCAN-USB的通信模塊接口類和串口通信協議,實現了電機指令的底層數據傳輸。
構建主要的ROS功能包和接口層,見表1~2。

表1 主要的ROS功能包

表2 主要接口層
通過ros_control控制機制實現對機器人運動的控制,必須按照ros_control的機制模式與步驟進行編程設計和配置。ros_control的運動控制機制設計實現步驟包括4個部分(圖3):上層配置文件、配置服務器、硬件接口層設計和硬件執行層設計[7-8]。

圖3 ros_control 接口實現Fig.3 Interface implementation of ros_control
機器人運行控制系統編寫具體實現包括如下步驟:
機器人系統包括遠程操控端和車體端兩個系統部分,因此上層配置文件也包括了遠程操控端和車體端兩個部分。車體端配置文件是gammbot_bringup包中的gammabot.launch,此文件主要由3個部分的內容組成:系統參數設置、系統啟動節點和啟動其他模塊或服務的launch啟動文件。系統參數設置中可以設置是否可以啟動或停止某些傳感器(如深度相機)的啟動、端口參數設置以及是否仿真運行等。系統需要的啟動節點主要有robot_state_publisher、gammabot_services_node。gammabot.launch中執行的其他啟動文件有gammabot_hw.launch(接口啟動文件)、gammabot_hw_controllers.launch(控制器啟動文件)、twist_mux.launch(多路復用姿態信息控制啟動文件)等。
遠程操控端的配置啟動文件是gammabot_gui包中的showgui.launch文件,在此文件中啟動gammabot_gui節點用來顯示監控屏幕,同時啟動joy_node節點接收遙控桿控制信息。
ROS另一個強大功能就是參數配置服務器。用戶可以在launch文件中直接配置節點參數,也可通過加載參數文件(一般為yaml格式文件)配置參數,系統啟動后參數自動加載,用戶就可以在系統的其他部分通過參數服務器調用或者設置參數。系統中的參數文件包括遙控桿配置參數文件(joy_profiles.yaml)、控制器配置文參數文件(gammabot_control.yaml)、仿真參數文件(gammabot_gazebo.xacro)、關節配置文件(joints_config.yaml)、電機配置文件(motors_spec.yaml)等。
依據ros_control的設計機制[9],在硬件接口層我們構建3層架構模式:接口管理層(GammabotHW)、接口配置層和接口實現層。
接口管理層(GammabotHW)通過接口注冊函數完成各類接口的注冊,執行實時監聽消息。同時建立循環進程,循環執行的read和write完成狀態讀取和指令下達。接口配置層包括差速運動控制接口配置類(BaseDiffDrive)、機械臂控制配置類(ArmBuilder)、控制板控制配置類(BaseboardPub),主要完成從ROS讀取在步驟2中配置的參數,并調用接口執行。接口實現層包括差速運動接口類(DiffDrive、Motor)、機械臂運動接口類(ArmhwInterface)、控制板控制接口類(MbdInterface),具體完成運動控制實現,調用通信層實現與底層硬件(控制板和電機等)數據交互。
此部分采用了CAN通信方式,通過編寫獨立的CAN通信模塊來完成。Motor類通過CAN通信接口完成電機讀寫操作。

圖4 移動機器人探測抓取放射源Fig.4 Detecting and capturing radioactive source by mobile robot
這樣,基于ROS移動探測作業機器人的控制系統,實現了機器人本體運動、云臺控制、六軸機械臂控制、圖像采集、IMU姿態數據采集以及探測傳感器數據采集等功能。
研發的移動探測作業機器人樣機經過測試(圖4),機器人能夠自動探測環境輻射劑量率,并給出放射源方位信息。操作人員遠程操控機器人找到放射源,并借助遠程視頻監視系統操作機器人機械手臂及抓手,實現對放射源進行拾取和有效處置。
本文采用ros_control控制機制,設計實現了機器人差速運動控制系統,系統具有良好擴展性和定制化可配置能力,通過設置配置文件的不同參數和定制化硬件接口協議,可以快速適用不同硬件的機器人控制系統。研發的機器人樣機系統可以適應不同的電機驅動模式、通信接口、速度與加速度控制模式、攝像視頻系統以及機械臂結構形式等,同時系統支持搖桿、鼠標、鍵盤等多種操控方式,具有方便、靈活、遠程操控功能。所有這些適應不同機器人的硬件配置組合都可以通過配置文件參數修改或者模塊定制化接口實現快速切換。
但是,基于ROS搭建的機器人控制系統也存在結構松散、通信阻塞和穩定性等方面的不足。因此,我們下一步將在原有機器人控制系統的基礎上,在集中式控制、通信接口模塊和前端交互模塊進行優化設計,在已完成輪式電池驅動探測機器人樣機的基礎上,繼續開展液壓驅動和內燃機驅動移動探測機器人控制系統的研究。