基于ROS和Gazebo的Hector四旋翼仿真

2020-05-13 14:15滕步炜
电脑知识与技术 2020年8期

摘要:本项目重点研究依赖于开源机器人操作系统ROS平台,在3D动态模拟器软件Gazebo中,通过键盘或Xbox360控制模拟UAV Hector Quadrotor从而实现四旋翼室内与室外的仿真飞行。

关键词:ROS; Gazebo;Hector;Quadrotor

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2020)08-0259-02

新手在练习四旋翼飞行器控制飞行时,经常会因技术不够熟练而出现炸机的现象,损坏飞行器硬件造成不必要的损失。通过采用实时仿真的形式,降低练习时的损耗。本项目重点研究hector_quadrotor飞行器自主导航,避障和路径规划。软件依赖于机器人操作系统(ROS)软件。ROS提供硬件抽象,设备驱动,库,可视化工具,消息传递,包管理等。Gazebo提供精确和高效地模拟复杂室内和室外环境中飞行器的能力[1]。

在ROS环境下,无人机的仿真有三种实现方式,一种是mav-ros配合sitl的仿真,其次是hector_quadrotor ros package,第三种是ETH新出的一个gazebo环境仿真包。在上述三种方式中,sitl的设置比较烦琐,无人机的控制主要通过指令实现。hec-tor_quadrotor开发比较完善,不仅可以使用xbox作为飞机的遥控器,而且还可以使用键盘对无人机进行控制。rotorS是新出的包,里边给}H了几种商用的飞机模型,控制指令是ros meassage[2]。本文重点介绍Hector Quadrotor四旋翼控制模拟的实现方法。

Hector Quadrotor是用于ROS Gazebo环境中的模拟四旋翼UAV ,Hector Quadrotor综合功能包里包含了UAV的URDF描述建模、飞行控制以及在Gazebo中运行四旋翼飞行器仿真的启动文件等。

Hector Quadrotor有两个仿真应用场景,分别为室内和室外,本文以此分为两部分阐述在Gazebo中模拟Hector四旋翼飞行器。

1 准备工作

仿真之前需要安装Hector Quadrotor功能包,以安装Hector Quadroter的ROS Indigo版本,执行命令

$ sudo apt-get update

$sudo apt-get install ros-indigo-hector-quadrotor-demo

大量的ROS功能包被下载并且安装,hector_quadrotor_demo就是下载的主要hector_quadrotor包。其中包与四旋翼无人机系统建模,控制及仿真相关的包。Hector_quadrotor_description提供了通用的四旋翼URDF模型以及各种各样的传感器。Hector_quadrotor_gazebo包含了在Gazebo中运行四旋翼模型所需要的launch file以及依赖信息。Hector_quadrotor_teleop包含一个允许使用gamepad控制旋翼的节点。Hector_quadrotor_gazebo_plugins提供在Gazebo仿真环境中进行四旋翼仿真的所需的特定的plugins。[3]

2 在Gazebo中启动Hector四旋翼飞行器

在仿真之前,首先在终端窗口执行$ roscore命令启动ros-master。

2.1 室外飞行Hector

室外飞行的软件已经包含在Hector_quadrotor中,键入以下命令启动室外仿真:

$ roslaunch hector_quadrotor_demo outdoor_flight_gazebo.launch

命令执行完成后,会在Gazebo中加载一个滚动景观环境,并生成一个Hector Quadrotor模型。同时启动一个rvIz节点,为四旋翼飞行器户外飞行配置。大量的飞行坐标和控制参数信息也会初始化并加载给Parameter Server。Quadrotor_propulsion插件的四旋翼推理模型参数和quadrotor_aerodvnamics插件的阻力模型参数会显示出来。然后出现physics dynamic reconfig-ure ready。

2.2 室内飞行Hector

在hector_quadrotor综合功能包里包含四旋翼飞行器室内的SLAM例程软件,键入以下命令启动仿真:

$ roslaunch hector_quadrotor_demo indoor_slam_gazebo.launch

仿真啟动之后,将在rviz和Gazebo中显示Willow Garage办公室,Hector开始位于室内房间的地板上。此时通过执行hec-tor_quadrotor_teleop xbox_controller.launch控制Hector的飞行。

3 控制Hector四旋翼的飞行

在Gazeboo中启动HectorQuadrotor后,四旋翼飞行器出现在模拟场景的地面上,准备起飞。在它的主电机座上有一个红色标记指示了它的前进方向。要实现对Hec-tor Quadrotor的控制飞行,可以通过Xbox 360控制器或者计算机的键盘。

3.1 Xbox360控制四旋翼飞行

要将仿真四旋翼飞行器飞行起来,必须启动Xbox 360控制器的操纵杆控制器软件。打开另一个终端窗口,通过hec-tor_quadrotor_teleop功能包中的启动文件来启动操纵杆控制器:

$ roslaunch hector_quadrotor_teleop xbox_controller.launch

这个过程会启动一个j oy_node节点,用来处理Xbox 360控制器上左操纵杆和右操纵杆的操作输入。此节点发布的消息包含操纵杆轴和按钮的当前状态。而quadrotor_teleop节点会订阅这些信息,然后在主题cmd_vel上发布提供了四旋翼飞行器飞行的速度和方向的消息。用操纵杆控制飞行器在模拟的户外环境飞行。飞行员的视图可以在rviz屏幕左下角的摄像头图像视图中看到。

3.2 键盘控制四旋翼飞行

执行命令git clone https://github.com/ros-teleop/teleop_twist_keyboardT载ROS Python包,放在建立的工作空間并编译。使用命令

$ rosrun teleop_twist_keyboardteleop_twist_keyboard.py运行该节点。注意首先按t建让飞机飞起来才能进行其他控制,否则现象是控制键飞机没有反应。鼠标指针必须位于teleop_twist_keyboard终端窗口,否则键盘无法控制模拟四旋翼飞行。

3.3 rqt_graph工具查看节点和主题之间的交互关系

在终端窗口执行命令$ros run rqt_graph rqt_graph,rqLgrph工具中显示活动节点和主题之间的交互关系。图中椭圆形框表示当前活动的节点,矩形框表示主题,节点发布消息到主题用箭头指向表示。

4 结论

在实践环节中引入Hector四旋翼仿真,从室内和室外两类不同环境下模拟四旋翼飞行器的飞行。极大限度降低了初学者对四旋翼硬件耗材的依赖,降低了新手训练时的经济成本。

参考文献:

[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].北京:机械工业出版社,2018.

【通联编辑:光文玲】

基金项目:大学生创新、创业实践项目(项目编号:201911050032T)

作者简介:滕步炜(1974-),男,计算机网络控制工程硕士,副教授,主要研究方向为计算机技术领域的教学与科研工作。