1. 无人机结构设计
本节提出一种新型的复合式无人机,以下是设计的总体方案。
首先,选定复合式无人机的翼型、雷诺数 [1]、升力系数,通过这些参数确定翼展和翼面积,由此来确定复合式无人机的大体布局,由于是航模对精度要求不大,只需满足自己的需求即可 [2]。
其次,利用solidworks确定无人机的转动惯量和质心等物理参数,为编写Gazebo的SDF代码做准备。
1.1. 无人机的机翼设计
机翼是复合式无人机中固定翼的重要部分,而机翼展长和弦长又是机翼的重要参数,其设计和制造决定无人机飞行的稳定性能和气动性能。
机翼的翼型确定,翼型是机翼等翼面的二维截面,对于机翼和气动性能都很重要,所以在本文中选用比较权威的NACA翼型,由于此飞机是轻量级的复合式无人机,属于低速翼型,往往是圆头具有弯度的厚翼,所以选用NACA四位数的翼型,这里选用NACA6409的翼型,升力系数较大,阻力系数较低,在合乎情理的设计下可以获得最高理论的升租比。二维翼型的参数描述如图1所示 [3]。
1) 选取合适的升力系数
根据所建三维模型,翼肋根部弦长为b0 = 420 mm,翼肋梢部弦长为b1 = 216 mm。复合式无人机重量m是根据所建三维模型,经过评估测量属性,得到质量大约是18 kg,巡航速度设为20 m/s;由于是轻量级亚音速飞机,其展弦比范围是6~12。将翼肋根部弦长和翼肋梢部弦长输入软件Profili 2.2后进行仿真,得出合适的升力系数CL、阻力系数CD和攻角α。根据式(2),计算出雷诺数为429,000 [4],这里我们选取雷诺数为400,000,图2和图3是不同雷诺数下的曲线图以及Re = 400,000下部分攻角的气动力系数表表1。
本文计算了机翼攻角从−6˚到13˚下的升阻力系数,从曲线图中看出,攻角在8˚之前呈直线形式上升,在8˚~11˚时增势放缓,攻角11˚时升力系数达到最大;而阻力系数在8˚之前增势平缓,但是超过8˚后呈指数增长;升阻比系数直到6˚时达到最大,往后升阻比系数逐渐下降。
综上,选取攻角为4˚、升力系数1.1050,阻力系数0.0098,接下来将计算复合式无人机的具体尺寸。

Figure 2. Lift drag coefficient curves at different Reynolds numbers
图2. 不同雷诺数下的升力阻力系数曲线图

Figure 3. Graph of lift-drag ratio at different Reynolds numbers
图3. 不同雷诺数下的升阻比曲线图

Table 1. Re = 400,000 Partial aerodynamic coefficients at different angles of attack
表1. Re = 400,000不同攻角下的部分气动力系数
2) 对机翼各部分的计算
通过计算,无人机的机翼参数全部确定,所得参数结果如表2无人机的参数表,机翼三维图如图4。
1.2. 无人机的机身设计
无人机的机身以“大雁”为灵感,整体以流线型为大体设计,减小飞机的整体阻力,并且在机身尾部配有可装东西的空间,机尾装配有螺旋桨;并且机翼两边有副翼。机身结构如图5。
1.3. 无人机的总体布局
复合式无人机采用常规的四旋翼与固定翼的无人机布局方案,即:固定翼机翼两侧的机臂用来安装四旋翼,整体布局呈一个正方形,机体腹部为无人机的质心,如图6所示,其与四旋翼的质心相重合。四旋翼与固定翼错开,以减少旋翼流场与机翼流场的相互干扰,提高无人机的整体稳定性,起落架由四个支撑架组成来提高复合式无人机升降过程的稳定性 [5]。
2. 基于Gazebo的模型
2.1. 创建基本SDF模型
标准化的机器人描述格式是一种描述各种机器人的结构、关节、自由度的XML代码。不能进行实物试验时,常用此种文件进行3D仿真,而三维仿真软件Gazebo中的各种机器人就是基于XML的SDF文件。最基本的元素是连接
和关节
,名称是唯一的。此处设定机身是一个基础连接
,其他连接
都会以此为准进行转动,所以之间还会有一个关节
以此来与基础连接作相对运动。各机构之间的联系如
图7。

Figure 7. Connection diagram of various mechanisms
图7. 各机构连接图
2.2. 添加物理和碰撞属性
如果我们想在Gazebo中仿真的话,那么物理和碰撞属性就是必不可少的,此处我们就需要在所有link中添加inertial和collision元素,并添加无人机的结构数据,来对我们建立的模型进行仿真,这样便于碰撞计算。利用设计出的无人机数据完成的base_link的代码如下图8。
2.3. 添加传感器
在完成模型的大致创建后,需要对无人机添加合适的传感器代码,有的代码在Gazebo中已经完成开发,可以在Gazebo提供的库中直接去调用它,并修改传感器数据,这里用到了GPS、磁力计、气压计、IMU、mavlink,还有电机控制代码等。
3. ROS下的软件在环仿真
ROS是一种机器人操作系统,主要是通过ros master管理器控制节点(node)来执行机器人的每个动作。此处设计一个键盘控制无人机的python脚本,用此节点发布topic消息,Mavros接收到消息后,通过mavlink传给px4_sitl,最后来控制Gazebo中无人机的飞行,以此来达到仿真的目的。
3.1. ROS发布订阅信息
通过python程序去引入服务消息的.py包,如解锁消息类CommandBool、设置模式类SetMode;并且首先要订阅无人机的状态消息如状态类State,所以引入话题消息的.py包;最后如果要使无人机动作的话,引入RC通道值类OverrideRCIn的消息包,至此一个完整的无人机的工作状态确立,可以查看节点状态图9。
3.2. .launch文件
.launch文件将所有的节点都写在一块,省去了每启动一个节点都打开一个终端的动作,.launch文件中有PX4_command.launch节点、启动gazebo节点、启动Mavros节点、启动无人机模型节点等。
3.3. 仿真
在终端命令行启动vtol8_px4.launch文件后,gazebo也会随之启动,会看到自己的模型出现在地图中间,然后启动QGroundControl地面站监控无人机飞行情况,如图10所示,在scripts文件夹下启动外部控制程序python脚本,解锁后,就可以看到图中复合式无人机起飞,起飞效果如下图10所示。
在仿真飞行完成后,利用QGroundControl地面站下载飞行日志后,在PX4官网中上传飞行日志,即可得到飞行的数据,如下图11~14为旋翼模式飞行数据曲线,图15、图16是复合式无人机状态下的飞行日志 [6] [7]。

Figure 11. Rotor mode flight trajectory diagram
图11. 旋翼模式飞行轨迹图

Figure 15. Trajectory diagram of composite flight mode
图15. 复合飞行模式的轨迹图
图11~14为只有四旋翼模式下的手动控制曲线,从图11中曲线可以看出,飞机的飞行高度一直在5米到10米左右,并且进行过一次偏航;如图12所示,也可以看出期间也进行过滚转和俯仰的动作指令,偏航是发生在2分10秒;图13是原始加速度分析,红绿色线与蓝色线隔开,并没有过多发生接触,说明有良好的振动;图14是加速度功率谱密度,理想的情况是,只有少数赫兹的最低部分是黄色,其余部分大多为绿色或蓝色。如图所示只有8Hz以下才是黄色,其他赫兹大部分为蓝绿色,这是极好的振动曲线。从上面的数据分析可知,在利用px4_sitl中的standard_vtol固件的情况下,对所设计的无人机进行仿真,可以达到预期的飞行,也验证所设计无人机的正确性,若进行实物飞行也不会有太大的风险。
图15是在四旋翼和固定翼复合模式的情况下航迹点飞行图,黄色小圈是设定点,可以看到,虽然飞行不稳,但无人机可以到达指定地点;图16可以看出各个执行机构的输出,最底下蓝色为四旋翼模式,红色为过渡模式,此处的无人机飞行缺点是,四旋翼和固定翼模式没有区分,尽管固定翼模式下各个执行机构都在工作,但还是有四旋翼模式工作。
4. 总结
本文首先对复合式无人机结构进行设计,并进行了solidworks绘制;然后利用设计的无人机结构数据,编写基于XML格式的复合式无人机模型代码;最后基于ROS系统利用PX4固件、Gazebo仿真器、QGroundControl地面站对所设计的无人机模型进行了在环仿真,通过PX4飞行日志分析数据,验证设计的复合式无人机四旋翼模式在Gazebo环境中可以正常飞行,起落稳定,四旋翼到固定翼的过渡状态正常切换,所设计的无人机达到了预期效果。本文提供了一种对自己所设计的模型进行仿真和控制开发的新思路,可以大大缩短研发周期。