劉廣亮,劉成業(yè), 鄭江花
(齊魯工業(yè)大學(山東省科學院),山東省科學院自動化研究所,山東省機器人與制造自動化技術(shù)重點實驗室,山東 濟南 250014)
移動機器人由于功能需求不同,結(jié)構(gòu)形式和控制實現(xiàn)方式差別較大。具備相同功能的機器人,不同的生產(chǎn)廠家會采用不同的硬件(如電機、控制器等)和接口協(xié)議,使用的導航、路徑規(guī)劃、機器視覺等相關(guān)算法也不盡相同。一個穩(wěn)定可靠的機器人系統(tǒng)需要將眾多不同的硬件和不同接口協(xié)議算法集成起來,從而成為擴展性強、可配置、接口適應性良好的機器人系統(tǒng)。
ROS(robot operating system)是面向機器人應用的開源的元操作系統(tǒng)[1],與平常我們理解的計算機操作系統(tǒng)不同,是一種平臺架構(gòu)[2],設(shè)計的主要目的是為機器人研究和開發(fā)者提供框架和代碼復用的支持,因此ROS具有良好的擴展性。ROS提供了大量的工具包和廣泛的庫文件,已經(jīng)形成一種生態(tài)系統(tǒng),擁有大量開發(fā)者支持,提供了一站式的解決方案。
ROS應用領(lǐng)域眾多,如移動機器人、關(guān)節(jié)機器人、服務機器人、水下機器人等,已經(jīng)成為機器人開放性的標準配置,通過ROS可以實現(xiàn)對已有機器人的二次開發(fā)。百度無人駕駛系統(tǒng)Apollo平臺在設(shè)計中就參考了ROS的系統(tǒng)架構(gòu),同時優(yōu)化了通信機制及數(shù)據(jù)兼容性[3]。
ROS實現(xiàn)移動機器人運動控制的核心是ros_control設(shè)計與配置,通過自定義,可以實現(xiàn)對不同硬件接口協(xié)議的耦合,滿足不同機器人硬件配置的要求。本文設(shè)計了移動機器人控制架構(gòu),基于ros_control控制機制,配置差速運動控制器和機械臂關(guān)節(jié)控制器,設(shè)計了RobotHW硬件控制接口,采用CAN協(xié)議實現(xiàn)數(shù)據(jù)底層通信,完成對移動機器人的運動控制??刂破髟O(shè)計部分可以通過修改配置文件中的參數(shù),在不用重新編譯源代碼的情況下實現(xiàn)對機器人的靈活配置,以適應不同機器人的結(jié)構(gòu)形式和控制模式。
系統(tǒng)總體架構(gòu)包括遙控端和本體端兩大部分[2,4](圖1),遙控端與本體端之間通過遠程通信模塊進行通信。遠程通信模塊可以實現(xiàn)數(shù)據(jù)和圖像長距離穩(wěn)定通信,可視通信距離可以達到1 km。
遙控端由操控計算機、顯示屏、操控桿、視頻服務器、數(shù)傳模塊和圖傳模塊等6部分組成。操控計算機負責發(fā)出控制指令并接收本體端的數(shù)據(jù)信息,顯示屏完成實時遠程視頻圖像監(jiān)控,同時監(jiān)控車體姿態(tài)、電流電壓以及其他探測傳感器信息。
操控部分包括搖桿操控、鍵盤或者屏幕的鼠標操控,系統(tǒng)可以同時適應不同操控模式,實現(xiàn)對機器人的遠程操控。
遠程通信模塊包括數(shù)傳模塊和圖傳模塊,圖傳模塊負責接收機器人本體端的視頻信息并顯示在監(jiān)視器上,數(shù)傳模塊負責操控端指令下達和車體數(shù)據(jù)接收。
機器人本體端由車載計算機、電源模塊、視覺系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、運動控制系統(tǒng)、數(shù)傳模塊和圖傳模塊等7部分組成。
車載計算機是核心,負責機器人系統(tǒng)運算和各部分的通信。
視覺系統(tǒng)負責機器人視頻和圖像采集,機器人本體由多部攝像機提供視頻和圖像,包括左右云臺攝像機、全景攝像系統(tǒng)和機械臂端攝像機。視覺系統(tǒng)根據(jù)遠程操控端指令分別提供各個攝像機圖像視頻信息,經(jīng)處理后通過圖傳模塊發(fā)送給遠程操控端。
數(shù)據(jù)采集系統(tǒng)負責傳感器的數(shù)據(jù)采集,經(jīng)處理后發(fā)送給遠程操控端顯示。傳感器包括姿態(tài)傳感器、超聲避障傳感器、激光雷達和Kinect相機。
運動控制系統(tǒng)包括車體運動控制和機械臂運動控制部分。
針對機器人的控制,ROS系統(tǒng)提供了獨立開發(fā)包ros_control,ros_control是ROS為開發(fā)者提供的應用系統(tǒng)與機器人載體之間的中間件,包含控制器接口、傳動裝置接口、硬件接口、控制器工具箱等功能包。用戶可以在ros_control已有功能包基礎(chǔ)上,根據(jù)接口協(xié)議編寫硬件接口,簡單而快速地完成機器人應用的開發(fā)[5](圖2)。
圖2 ros_control 實現(xiàn)機制Fig.2 ros_control implementation mechanism
開發(fā)者要真正實現(xiàn)對機器人的控制,需要根據(jù)機器人具體設(shè)計指標要求進行設(shè)計和配置工作,實現(xiàn)控制系統(tǒng)對不同硬件環(huán)境條件的適應,因為不同的硬件(如不同的伺服電機、編碼器)需要不同的硬件接口協(xié)議設(shè)計,同時要在配置文件中進行參數(shù)配置(如速度和加速度等),從而保證控制系統(tǒng)的靈活性和可擴展性。
控制系統(tǒng)的設(shè)計與配置工作主要包括控制器設(shè)計、控制器配置、硬件接口配置、硬件接口設(shè)計、硬件通信實現(xiàn)5個部分。
控制器設(shè)計是根據(jù)機器人功能要求設(shè)計自己的定制控制器。在ros_control中內(nèi)置很多控制器,如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。因為控制設(shè)計沒有特殊要求,所以直接使用了ros_control基礎(chǔ)包,然后進行必要的控制配置就可以實現(xiàn)所要求的功能。
控制器配置主要是對每個控制器具體參數(shù)進行配置,如機器人差速運動參數(shù)包括左右輪對應關(guān)節(jié)、左右輪直徑、輪距、更新頻率、速度限制、加速度限制等。通過參數(shù)配置實現(xiàn)對機器人運動速度進行S曲線[6]平滑,保證運動速度控制穩(wěn)定連續(xù)流暢,避免了手動控制時控制速度值的跳動。
硬件接口配置是指不同硬件(如電機)具有不同通信參數(shù)(如通信方式和地址)和通信協(xié)議,系統(tǒng)提供專門的配置文件進行參數(shù)配置。例如電機通信參數(shù)設(shè)置我們是通過配置電機參數(shù)文件(motors_spec.yaml)來完成。在此文件中可以配置電機轉(zhuǎn)速、力矩參數(shù)、位置讀取和寫入地址、速度讀取和寫入地址、電流讀取和寫入地址等參數(shù)。這些配置參數(shù)將被繼承自RobotHW的接口類讀取到,并用于接口通信和兩輪差速運動控制中。
硬件接口設(shè)計是指在兩輪差速運動模型中,差速運動控制器需要對每個輪運動速度進行穩(wěn)定流暢的控制,而運動速度是由電機轉(zhuǎn)速決定的,如何實現(xiàn)對不同型號電機的控制是ros_control功能包設(shè)計的關(guān)鍵。在圖2中可以看到,對電機控制是通過RobotHW接口來實現(xiàn)的。我們設(shè)計了接口類GammabotHW ,繼承自 hardware_interface::RobotHW。在接口類GammabotHW中可以監(jiān)聽遙控桿節(jié)點發(fā)出的以cmd_vel為話題(topic)的控制信息即Twist消息。Twist消息包含了機器人運動的線速度和角速度信息,二者又分別包括了3個運動方向的線速度和3個角度方向的角速度。
在兩輪差速運動中,只是用到一個運動方向的線速度值和一個水平轉(zhuǎn)向的角速度值。接口類GammabotHW監(jiān)聽到搖桿發(fā)出的消息中的這兩個速度值,同時結(jié)合read函數(shù)讀取的當前機器人速度值和配置文件速度加速度控制策略,依據(jù)S曲線模型[6]進行速度值平滑優(yōu)化,得到最優(yōu)速度值,然后再通過write函數(shù)下達指令。
接口類GammabotHW中實現(xiàn)的另一個重要功能是建立循環(huán)進程,實時執(zhí)行read和write操作。read函數(shù)完成電機轉(zhuǎn)速的讀取,write函數(shù)完成電機運轉(zhuǎn)速度指令下達。實時性是由ros_control差速運動模型來保證。
硬件通信的底層實現(xiàn)核心是read和write函數(shù)的功能實現(xiàn),由電機控制器的通信系統(tǒng)來完成。采用PCAN-Basic API通信方式,在硬件上,通過USB轉(zhuǎn)CAN硬件設(shè)備實現(xiàn)與電機控制器的數(shù)據(jù)通信。在通信軟件系統(tǒng)中,按照CAN通信協(xié)議和電機控制器指令協(xié)議,設(shè)計了PCAN-USB的通信模塊接口類和串口通信協(xié)議,實現(xiàn)了電機指令的底層數(shù)據(jù)傳輸。
構(gòu)建主要的ROS功能包和接口層,見表1~2。
表1 主要的ROS功能包
表2 主要接口層
通過ros_control控制機制實現(xiàn)對機器人運動的控制,必須按照ros_control的機制模式與步驟進行編程設(shè)計和配置。ros_control的運動控制機制設(shè)計實現(xiàn)步驟包括4個部分(圖3):上層配置文件、配置服務器、硬件接口層設(shè)計和硬件執(zhí)行層設(shè)計[7-8]。
圖3 ros_control 接口實現(xiàn)Fig.3 Interface implementation of ros_control
機器人運行控制系統(tǒng)編寫具體實現(xiàn)包括如下步驟:
機器人系統(tǒng)包括遠程操控端和車體端兩個系統(tǒng)部分,因此上層配置文件也包括了遠程操控端和車體端兩個部分。車體端配置文件是gammbot_bringup包中的gammabot.launch,此文件主要由3個部分的內(nèi)容組成:系統(tǒng)參數(shù)設(shè)置、系統(tǒng)啟動節(jié)點和啟動其他模塊或服務的launch啟動文件。系統(tǒng)參數(shù)設(shè)置中可以設(shè)置是否可以啟動或停止某些傳感器(如深度相機)的啟動、端口參數(shù)設(shè)置以及是否仿真運行等。系統(tǒng)需要的啟動節(jié)點主要有robot_state_publisher、gammabot_services_node。gammabot.launch中執(zhí)行的其他啟動文件有g(shù)ammabot_hw.launch(接口啟動文件)、gammabot_hw_controllers.launch(控制器啟動文件)、twist_mux.launch(多路復用姿態(tài)信息控制啟動文件)等。
遠程操控端的配置啟動文件是gammabot_gui包中的showgui.launch文件,在此文件中啟動gammabot_gui節(jié)點用來顯示監(jiān)控屏幕,同時啟動joy_node節(jié)點接收遙控桿控制信息。
ROS另一個強大功能就是參數(shù)配置服務器。用戶可以在launch文件中直接配置節(jié)點參數(shù),也可通過加載參數(shù)文件(一般為yaml格式文件)配置參數(shù),系統(tǒng)啟動后參數(shù)自動加載,用戶就可以在系統(tǒng)的其他部分通過參數(shù)服務器調(diào)用或者設(shè)置參數(shù)。系統(tǒng)中的參數(shù)文件包括遙控桿配置參數(shù)文件(joy_profiles.yaml)、控制器配置文參數(shù)文件(gammabot_control.yaml)、仿真參數(shù)文件(gammabot_gazebo.xacro)、關(guān)節(jié)配置文件(joints_config.yaml)、電機配置文件(motors_spec.yaml)等。
依據(jù)ros_control的設(shè)計機制[9],在硬件接口層我們構(gòu)建3層架構(gòu)模式:接口管理層(GammabotHW)、接口配置層和接口實現(xiàn)層。
接口管理層(GammabotHW)通過接口注冊函數(shù)完成各類接口的注冊,執(zhí)行實時監(jiān)聽消息。同時建立循環(huán)進程,循環(huán)執(zhí)行的read和write完成狀態(tài)讀取和指令下達。接口配置層包括差速運動控制接口配置類(BaseDiffDrive)、機械臂控制配置類(ArmBuilder)、控制板控制配置類(BaseboardPub),主要完成從ROS讀取在步驟2中配置的參數(shù),并調(diào)用接口執(zhí)行。接口實現(xiàn)層包括差速運動接口類(DiffDrive、Motor)、機械臂運動接口類(ArmhwInterface)、控制板控制接口類(MbdInterface),具體完成運動控制實現(xiàn),調(diào)用通信層實現(xiàn)與底層硬件(控制板和電機等)數(shù)據(jù)交互。
此部分采用了CAN通信方式,通過編寫獨立的CAN通信模塊來完成。Motor類通過CAN通信接口完成電機讀寫操作。
圖4 移動機器人探測抓取放射源Fig.4 Detecting and capturing radioactive source by mobile robot
這樣,基于ROS移動探測作業(yè)機器人的控制系統(tǒng),實現(xiàn)了機器人本體運動、云臺控制、六軸機械臂控制、圖像采集、IMU姿態(tài)數(shù)據(jù)采集以及探測傳感器數(shù)據(jù)采集等功能。
研發(fā)的移動探測作業(yè)機器人樣機經(jīng)過測試(圖4),機器人能夠自動探測環(huán)境輻射劑量率,并給出放射源方位信息。操作人員遠程操控機器人找到放射源,并借助遠程視頻監(jiān)視系統(tǒng)操作機器人機械手臂及抓手,實現(xiàn)對放射源進行拾取和有效處置。
本文采用ros_control控制機制,設(shè)計實現(xiàn)了機器人差速運動控制系統(tǒng),系統(tǒng)具有良好擴展性和定制化可配置能力,通過設(shè)置配置文件的不同參數(shù)和定制化硬件接口協(xié)議,可以快速適用不同硬件的機器人控制系統(tǒng)。研發(fā)的機器人樣機系統(tǒng)可以適應不同的電機驅(qū)動模式、通信接口、速度與加速度控制模式、攝像視頻系統(tǒng)以及機械臂結(jié)構(gòu)形式等,同時系統(tǒng)支持搖桿、鼠標、鍵盤等多種操控方式,具有方便、靈活、遠程操控功能。所有這些適應不同機器人的硬件配置組合都可以通過配置文件參數(shù)修改或者模塊定制化接口實現(xiàn)快速切換。
但是,基于ROS搭建的機器人控制系統(tǒng)也存在結(jié)構(gòu)松散、通信阻塞和穩(wěn)定性等方面的不足。因此,我們下一步將在原有機器人控制系統(tǒng)的基礎(chǔ)上,在集中式控制、通信接口模塊和前端交互模塊進行優(yōu)化設(shè)計,在已完成輪式電池驅(qū)動探測機器人樣機的基礎(chǔ)上,繼續(xù)開展液壓驅(qū)動和內(nèi)燃機驅(qū)動移動探測機器人控制系統(tǒng)的研究。