摘要:本項目重點研究依賴于開源機器人操作系統(tǒng)ROS平臺,在3D動態(tài)模擬器軟件Gazebo中,通過鍵盤或Xbox360控制模擬UAV Hector Quadrotor從而實現(xiàn)四旋翼室內(nèi)與室外的仿真飛行。
關(guān)鍵詞:ROS; Gazebo;Hector;Quadrotor
中圖分類號:TP311 文獻標(biāo)識碼:A
文章編號:1009-3044(2020)08-0259-02
新手在練習(xí)四旋翼飛行器控制飛行時,經(jīng)常會因技術(shù)不夠熟練而出現(xiàn)炸機的現(xiàn)象,損壞飛行器硬件造成不必要的損失。通過采用實時仿真的形式,降低練習(xí)時的損耗。本項目重點研究hector_quadrotor飛行器自主導(dǎo)航,避障和路徑規(guī)劃。軟件依賴于機器人操作系統(tǒng)(ROS)軟件。ROS提供硬件抽象,設(shè)備驅(qū)動,庫,可視化工具,消息傳遞,包管理等。Gazebo提供精確和高效地模擬復(fù)雜室內(nèi)和室外環(huán)境中飛行器的能力[1]。
在ROS環(huán)境下,無人機的仿真有三種實現(xiàn)方式,一種是mav-ros配合sitl的仿真,其次是hector_quadrotor ros package,第三種是ETH新出的一個gazebo環(huán)境仿真包。在上述三種方式中,sitl的設(shè)置比較煩瑣,無人機的控制主要通過指令實現(xiàn)。hec-tor_quadrotor開發(fā)比較完善,不僅可以使用xbox作為飛機的遙控器,而且還可以使用鍵盤對無人機進行控制。rotorS是新出的包,里邊給}H了幾種商用的飛機模型,控制指令是ros meassage[2]。本文重點介紹Hector Quadrotor四旋翼控制模擬的實現(xiàn)方法。
Hector Quadrotor是用于ROS Gazebo環(huán)境中的模擬四旋翼UAV ,Hector Quadrotor綜合功能包里包含了UAV的URDF描述建模、飛行控制以及在Gazebo中運行四旋翼飛行器仿真的啟動文件等。
Hector Quadrotor有兩個仿真應(yīng)用場景,分別為室內(nèi)和室外,本文以此分為兩部分闡述在Gazebo中模擬Hector四旋翼飛行器。
1 準(zhǔn)備工作
仿真之前需要安裝Hector Quadrotor功能包,以安裝Hector Quadroter的ROS Indigo版本,執(zhí)行命令
$ sudo apt-get update
$sudo apt-get install ros-indigo-hector-quadrotor-demo
大量的ROS功能包被下載并且安裝,hector_quadrotor_demo就是下載的主要hector_quadrotor包。其中包與四旋翼無人機系統(tǒng)建模,控制及仿真相關(guān)的包。Hector_quadrotor_description提供了通用的四旋翼URDF模型以及各種各樣的傳感器。Hector_quadrotor_gazebo包含了在Gazebo中運行四旋翼模型所需要的launch file以及依賴信息。Hector_quadrotor_teleop包含一個允許使用gamepad控制旋翼的節(jié)點。Hector_quadrotor_gazebo_plugins提供在Gazebo仿真環(huán)境中進行四旋翼仿真的所需的特定的plugins。[3]
2 在Gazebo中啟動Hector四旋翼飛行器
在仿真之前,首先在終端窗口執(zhí)行$ roscore命令啟動ros-master。
2.1 室外飛行Hector
室外飛行的軟件已經(jīng)包含在Hector_quadrotor中,鍵入以下命令啟動室外仿真:
$ roslaunch hector_quadrotor_demo outdoor_flight_gazebo.launch
命令執(zhí)行完成后,會在Gazebo中加載一個滾動景觀環(huán)境,并生成一個Hector Quadrotor模型。同時啟動一個rvIz節(jié)點,為四旋翼飛行器戶外飛行配置。大量的飛行坐標(biāo)和控制參數(shù)信息也會初始化并加載給Parameter Server。Quadrotor_propulsion插件的四旋翼推理模型參數(shù)和quadrotor_aerodvnamics插件的阻力模型參數(shù)會顯示出來。然后出現(xiàn)physics dynamic reconfig-ure ready。
2.2 室內(nèi)飛行Hector
在hector_quadrotor綜合功能包里包含四旋翼飛行器室內(nèi)的SLAM例程軟件,鍵入以下命令啟動仿真:
$ roslaunch hector_quadrotor_demo indoor_slam_gazebo.launch
仿真啟動之后,將在rviz和Gazebo中顯示W(wǎng)illow Garage辦公室,Hector開始位于室內(nèi)房間的地板上。此時通過執(zhí)行hec-tor_quadrotor_teleop xbox_controller.launch控制Hector的飛行。
3 控制Hector四旋翼的飛行
在Gazeboo中啟動HectorQuadrotor后,四旋翼飛行器出現(xiàn)在模擬場景的地面上,準(zhǔn)備起飛。在它的主電機座上有一個紅色標(biāo)記指示了它的前進方向。要實現(xiàn)對Hec-tor Quadrotor的控制飛行,可以通過Xbox 360控制器或者計算機的鍵盤。
3.1 Xbox360控制四旋翼飛行
要將仿真四旋翼飛行器飛行起來,必須啟動Xbox 360控制器的操縱桿控制器軟件。打開另一個終端窗口,通過hec-tor_quadrotor_teleop功能包中的啟動文件來啟動操縱桿控制器:
$ roslaunch hector_quadrotor_teleop xbox_controller.launch
這個過程會啟動一個j oy_node節(jié)點,用來處理Xbox 360控制器上左操縱桿和右操縱桿的操作輸入。此節(jié)點發(fā)布的消息包含操縱桿軸和按鈕的當(dāng)前狀態(tài)。而quadrotor_teleop節(jié)點會訂閱這些信息,然后在主題cmd_vel上發(fā)布提供了四旋翼飛行器飛行的速度和方向的消息。用操縱桿控制飛行器在模擬的戶外環(huán)境飛行。飛行員的視圖可以在rviz屏幕左下角的攝像頭圖像視圖中看到。
3.2 鍵盤控制四旋翼飛行
執(zhí)行命令git clone https://github.com/ros-teleop/teleop_twist_keyboardT載ROS Python包,放在建立的工作空間并編譯。使用命令
$ rosrun teleop_twist_keyboardteleop_twist_keyboard.py運行該節(jié)點。注意首先按t建讓飛機飛起來才能進行其他控制,否則現(xiàn)象是控制鍵飛機沒有反應(yīng)。鼠標(biāo)指針必須位于teleop_twist_keyboard終端窗口,否則鍵盤無法控制模擬四旋翼飛行。
3.3 rqt_graph工具查看節(jié)點和主題之間的交互關(guān)系
在終端窗口執(zhí)行命令$ros run rqt_graph rqt_graph,rqLgrph工具中顯示活動節(jié)點和主題之間的交互關(guān)系。圖中橢圓形框表示當(dāng)前活動的節(jié)點,矩形框表示主題,節(jié)點發(fā)布消息到主題用箭頭指向表示。
4 結(jié)論
在實踐環(huán)節(jié)中引入Hector四旋翼仿真,從室內(nèi)和室外兩類不同環(huán)境下模擬四旋翼飛行器的飛行。極大限度降低了初學(xué)者對四旋翼硬件耗材的依賴,降低了新手訓(xùn)練時的經(jīng)濟成本。
參考文獻:
[1] Wil Selby.ros integration[EB/OL].https://www.wilselby.com/re-search/ros-integration/,2017.
[2] Carol Fairchild and Thomas L.Harman.《ROS /robotics By Ex-ample》[M]。Making a Robot Fly[C].北京:機械工業(yè)出版社,2018.
【通聯(lián)編輯:光文玲】
基金項目:大學(xué)生創(chuàng)新、創(chuàng)業(yè)實踐項目(項目編號:201911050032T)
作者簡介:滕步煒(1974-),男,計算機網(wǎng)絡(luò)控制工程碩士,副教授,主要研究方向為計算機技術(shù)領(lǐng)域的教學(xué)與科研工作。