使用全包套件组装、启动、探索和开发小型无人机

作者:Stephen Evanczuk

投稿人:DigiKey 北美编辑

四旋翼无人机,即四轴飞行器,在各种应用中发挥的作用日趋重要,但这方面的设计仍然相当复杂,需综合机械、电子和软件子系统方面的知识。虽然设计人员有能力学习掌握所需的知识,但无人机开发套件可以为他们提供一个良好的开端,集合了无人机飞行理论和实践经验累积所需的所有元素。

本文介绍了 STMicroelectronics 开发套件,该套件可为开发人员提供易于组装的小型四轴飞行器无人机,同时也充分展示了所有多旋翼飞行器必备的复杂飞行控制系统。

四轴飞行器动力学

就最常见的形式而言,四轴飞行器为航空摄影、现场检测、监控等众多应用提供了相当稳定的平台。与固定翼飞机,甚至可变螺距直升机不同,由于小型高效直流电机的广泛应用,固定螺距多旋翼无人机的设计相对简单,且易于构建。

这些无人机的机械简单性和空气动力学稳定性,主要源自各旋翼间的协调配合以控制各种动作,而不像飞机利用飞行表面控制,或如直升机利用主旋翼和尾桨的配合。

在四轴飞行器中,位于机身对角线上的一对电机旋转方向相同,而与另一对电机的旋转方向相反。若四个电机的转速相同,无人机则可上升、下降或悬停。如果某对对角电机比另一对电机转速快,则无人机发生偏航,保持在同一水平面绕重心旋转(图 1,左)。

图 1:无人机通过不同的转速组合操控动作,例如偏航动作(左)时两个对角电机 (M2, M4) 同时加速;或一个对角电机 (M2) 加速,同时另一对角电机 (M4) 减速,从而完成更复杂的俯仰、滚转动作(右)。(图片来源:STMicroelectronics)

如果前(或后)旋翼电机转速发生变化,无人机就会像固定翼飞机上升或下降飞行一样,机头上升或下降。若左或右旋翼作出类似调节,将导致无人机滚转,即绕中心线旋转。通过调节对角电机或单个电机的相对速度,无人机可轻松实现更复杂的飞行姿态(俯仰、偏航和滚转的组合)(图 1,右)。

无人机的飞行控制系统负责调节适当的电机转速,实现所需的飞行姿态,从而完成所需操作。

例如在实践中,不仅在转弯时,即使在水平飞行期间,控制系统也需要不断调节电机转速,以校正诸如风、热流或湍流的扰动力。即使在室内操纵小型无人机,飞行控制系统也需要测量无人机的实际姿态和所需姿态之间的差值。

对于工程师而言,利用误差信号校正电机转速是常见的控制回路反馈问题,可以通过比例-积分-微分 (PID) 控制器来解决。而所剩的唯一概念挑战则是确定测量无人机姿态的方法,不过使用高精度智能传感器数据来做欧拉角计算,即可轻松解决这一问题。

欧拉角可表示物体相对于某个 xyz 参考坐标系的 XYZ 坐标系方向,这两个坐标平面相交于直线 N(图 2)。而欧拉角的定义为:

  • α:x 轴与 N 之间的夹角
  • ß:z 轴与 Z 轴之间的夹角
  • γ:N 与 X 轴之间的夹角

图 2: 欧拉角 (α, ß, γ) 描述了旋转坐标系 (XYZ) 相对于固定参考坐标系 (xyz) 的相对方向,两个坐标平面相交于直线 N。(图片来源:Wikimedia Commons CC BY 3.0)

对于飞行控制系统,物体坐标系和参考坐标系直接对应为无人机的当前方向 (XYZ) 及所需姿态 (xyz)。而欧拉角则表示无人机所需的轴向旋转以实现所需姿态。尽管多年来用于确定当前方向的原始数据一直由机械陀螺仪提供,但高精度微机电系统 (MEMS) 加速计和陀螺仪的出现,使该方法甚至可以应用于轻小型无人机。

如今,各种形状和大小的无人机都依赖基于传感器的姿态和航向参考系统 (AHRS),该系统可为欧拉角计算提供位置信息。而欧拉角用于为 PID 控制器提供误差信号,PID 控制器则管理电机转速以实现所需飞行操作。挑战在于在移动平台上使用软件实现该方法,该平台必须能够完成计算并以所需的速度和精度来调整电机。

STMicroelectronics 的 STEVAL-DRONE01 小型无人机套件及相关软件提供了该方法的工作示例,可作为探索无人机飞行控制系统细节的基础。

小型无人机套件整装待“飞”

STEVAL-DRONE01 套件囊括了构建小型四轴飞行器所需的所有组件。除了塑料机身外,该套件还包括四个 8.5 x 20 mm、3.7 V、8520 无铁芯直流电机,每个电机的推力约为 35 g,并且配备 65 mm 螺旋桨。电机和螺旋桨配成两对,可顺时针和逆时针旋转。与 3.7 V 锂离子聚合物 (LiPo) 电池组装后,无人机总重量(或空中总重量,AUW)小于 70 g,无人机操作时的最佳推力重量比约为 2:1。

然而,除了机械部件外,该套件的核心组件是 STMicroelectronics 的 STEVAL-FCU001V1 飞行控制器单元 (FCU) 电路板及相关软件包,这些部件共同实现了上述飞行控制系统功能。FCU 电路板是高能效的复杂多传感器系统,具有低功耗蓝牙 (BLE) 连接功能(图 3)。

图 3: STMicroelectronics 的 STEVAL-FCU001V1 飞行控制器单元是完整的电池供电多传感器系统,具有 BLE 连接和直流电机驱动功能。(图片来源:STMicroelectronics)

该电路板配备基于 32 位 Arm® Cortex®-M4 的 STMicroelectronics STM32F401 微控制器,具有三个不同的 MEMS 传感器,分别用于测量无人机定位和导航的不同特征,包括:

  • STMicroelectronics 的 LSM6DSL iNEMO 惯性测量装置 (IMU),集成了 AHRS 功能所需的加速计和陀螺仪
  • STMicroelectronics 的 LIS2MDL 磁力仪,为实现方向检测功能提供数据
  • STMicroelectronics 的 LPS22HD 压力传感器,用于提供垂直定位数据,分辨率为 8 cm

在传感器输入端,FCU 的 STM32F401 微控制器通过共享 SPI 总线与各传感器连接。在电机输出端,微控制器的 TIM4 通用定时器提供脉冲宽度调制 (PWM) 信号,用于控制 STMicroelectronics 的 STL6N3LLH6 MOSFET 功率晶体管的栅极,以驱动无人机的直流电机。

FCU 提供两个选项用于接收用户控制命令:用户可以在智能手机上,通过蓝牙连接板载 STMicroelectronics 的 SPBTLE-RF 模块来控制无人机,该模块包括该公司推出的 BlueNRG-MS 收发器,提供最佳功耗的蓝牙堆栈。或者,用户可以使用基于标准无线电控制 (RC) PWM 的遥控器。最后,对于电池和电源管理,该电路板包括 STMicroelectronics 的 STC4054 锂离子电池充电器 IC 和 LD39015 低压差 (LDO) 稳压器。

如图 3 所示,FCU 还支持与外部电子速度控制器 (ESC) 的连接,例如 STMicroelectronics 的 STEVAL-ESC001V1。ESC 允许系统驱动更稳定的三相电机,使得 FCU 可以应用于承载能力较大的四轴飞行器设计。

为简化飞行准备和控制,该套件预先配置为通过 STMicroelectronics 的 STDrone Android 移动应用程序来使用蓝牙连接选项。该应用程序设计为虚拟遥控器,可为用户提供简单的飞行控制界面,具有控制图标和两个虚拟操纵杆(图 4)。

图 4: STMicroelectronics 的 STDrone Android 移动应用程序为用户提供虚拟遥控器,可操作由该公司的 STEVAL-DRONE01 开发套件构建的小型无人机。(图片来源:STMicroelectronics)

组装后,无人机操作员可以在移动设备上使用 STDrone 应用程序启动和控制无人机。起飞前,操作员需将无人机放置在平坦表面上,触摸应用程序的“校准”图标直至图标变为绿色,则表示校准已完成。为了安全起见,无人机电机最初会通过软件禁用,要求用户在应用程序中点击另一个图标来“装载”无人机。此时,应用程序用户界面的功能则类似于遥控器,允许用户移动虚拟操纵杆,以调整无人机的电机转速和飞行姿态。

尽管超轻型 STMicroelectronics 无人机的质量和功率不足以进行广泛的户外应用,但是操作员如需在户外操作小型无人机,则需要了解无人机在预定操作区域的飞行限制。操作小型无人机可能不需要操作许可证,或为这类小型无人机注册。不过,操作员仍需要遵守相关要求。

具体飞行要求包括:保持视距,最大高度不得超过 400 ft;避开禁飞区,例如美国规定为机场 5 ml 范围内,英国规定为 1 km 范围内;避免在体育赛事或紧急行动场地附近进行操作等。无人机操作员可以使用移动应用程序,例如美国联邦航空管理局的 B4UFLY 应用程序,或英国国家空中交通管理局 (NATS) 的 Drone Assist(无人机助手)应用程序,这些应用程序都可根据用户的 GPS 定位提供当地空域限制的相关信息。

飞行控制软件

对于工程师而言,STMicroelectronics 无人机套件的 FCU 具有一大亮眼功能,即相关软件包,STMicroelectronics 将其保存在开源的 github 存储库中。该应用程序基于 STMicroelectronics 的 STM32Cube 框架,建立在蓝牙堆栈中间件和底层驱动层之上。驱动层使用 STM32Cube 硬件抽象层 (HAL) 和 STEVAL-FCU001V1 板级支持包 (BSP) 处理硬件交互的细节。驱动层包括所有上述 FCU 电路板设备的驱动程序。

该应用程序的软件架构围绕三个独立模块构建,这些模块分别用于遥控、位置确定和 PID 控制(图 5):

  • 遥控模块处理来自 STDrone 移动应用程序或 RC 遥控器的输入,从应用程序采集数据值或转换遥控器 PWM 数据,然后将数据值转换为所需飞行姿态的欧拉角。
  • 位置确定模块从 LSM6DSL IMU 采集加速计和陀螺仪数据,用于欧拉角计算所需的 AHRS 位置测定值,从而确定无人机的当前飞行姿态。虽然来自 LIS2MDL 磁力仪和 LPS22HD 压力传感器的数据也会得到采集,但截止本文撰写时,这些数据不适用于现有软件版本中的无人机飞行控制计算。
  • PID 控制模块使用所需姿态欧拉角与当前姿态欧拉角之间的差值来完成位置误差计算。该模块采用传统 PID 控制方法,使用误差信号调节各电机转速,使无人机实现所需姿态。

图 5: STMicroelectronics 小型无人机飞行控制软件功能围绕独立的模块构建,分别用于处理遥控输入(蓝色框,标记(1))、位置确定(红色框,(2))和 PID 控制(深蓝色框,(3))。随后 PID 控制驱动四轴飞行器的四个电机。(图片来源:STMicroelectronics)

使用这种功能架构,无人机应用程序将这些模块整合到所需工作流中,从而将用户操作命令转换为执行这些操作所需的电机转速调整(图 6)。尽管整体功能比较复杂,但更新飞行控制参数的主循环相对简单。

图 6: STMicroelectronics 小型无人机飞行控制软件实现一个连续读取传感器数据的工作流,更新无人机的当前飞行姿态,调整无人机四个电机的转速,从而达到飞行所需的推力,实现俯仰、滚转和偏航的动作组合。(图片来源:STMicroelectronics)

调用初始化硬件和软件系统等一系列例程后,应用程序主例程 main.c 进入无限循环(清单 1)。在主循环中,更新过程调用一系列例程来执行上述飞行控制核心算法。

复制while (1)
  {
  ...if (tim9_event_flag == 1)
    {     // Timer9 event: frequency 800Hz
      tim9_event_flag = 0;
  ...// AHRS update, quaternion & true gyro data are stored in ahrs
      ahrs_fusion_ag(&acc_ahrs, &gyro_ahrs, &ahrs);

      // Calculate euler angle drone
      QuaternionToEuler(&ahrs.q, &euler_ahrs);

      
      #ifdef REMOCON_BLE
      
          gRUD = (joydata[2]-128)*(-13);
          gTHR = joydata[3]*13;
          gAIL = (joydata[4]-128)*(-13);
          gELE = (joydata[5]-128)*13;
          
          /* joydata[6]: seek bar data*/
          /* joydata[7]: additional button data
                        first bit: Takeoff (0 = Land,  1 = Takeoff)
                        second bit: Calibration When it changes status is active
                        third bit: Arming (0 = Disarmed,  1 = Armed) */
          gJoystick_status = joydata[7];
          if ((gJoystick_status&0x04)==0x04){
            rc_enable_motor = 1;
            fly_ready = 1;
            BSP_LED_On(LED2);
          }
          else {
            rc_enable_motor = 0;
            fly_ready = 0;
          }
          

          if (connected){
            rc_connection_flag = 1;         /* BLE Remocon connected flag for enabling motor output */
            SendMotionData();
            SendBattEnvData();
            SendArmingData();            
          }
          else{
            rc_connection_flag = 0;
            gTHR=0;
            rc_enable_motor = 0;
            fly_ready = 0;
            BSP_LED_Off(LED1);
            BSP_LED_Off(LED2);
          }
          
          if (joydata[7]&0x02){
            rc_cal_flag = 1;
            BSP_LED_On(LED1);
          }
          
          
      #endif
          
      #ifdef REMOCON_PWM
  ...#endif
      
      
      // Get target euler angle from remote control
      GetTargetEulerAngle(&euler_rc, &euler_ahrs);

  ...FlightControlPID_OuterLoop(&euler_rc_fil, &euler_ahrs, &ahrs, &pid);
      
  ...}
  ...}

在此循环中,微控制器的 TIM9 通用定时器用作事件标志以控制更新速率。发生更新计时器的事件时,主循环调用 AHRS 更新例程 ahrs_fusion_ag(),该例程使用来自加速计 (acc_ahrs) 和陀螺仪 (gyro_ahrs) 的最新数据,执行更新涉及的传感器融合计算。然后,QuaternionToEuler() 例程使用该结果数据(四元数形式)来计算无人机当前飞行姿态的欧拉角。

此时,如果已启用蓝牙 (#ifdef REMOCON_BLE),应用程序主循环将使用蓝牙采集所需飞行姿态的相关数据;如果已启用外部 RC 遥控器,则应用程序将使用遥控器采集相关数据。而代码更新对应传统 RC 遥控器数据的四个变量:gRUD(方向舵位置,即偏航)、gAIL(副翼位置,即滚转)、gELE(升降舵位置,即俯仰)和 gTHR(节流阀位置)。采集了这些数据后,主循环使用例程 GetTargetEulerAngle() 来计算所需飞行姿态的欧拉角,以执行无人机操作员的命令。不过在执行计算之前,主循环这部分的功能对无人机操作员而言至关重要。若出于任何原因导致蓝牙连接失败,代码将停止电机。显然,这将致使无人机即刻不受控制地下降。然而有个简单却意义重大的软件扩展,可能会使用 LIS2MDL 磁力仪和 LPS22HD 压力传感器数据,在停止电机前,使无人机飞回起始点,并控制下降速度以平稳降落。

最后,主循环调用例程 FlightControlPID_OuterLoop(),更新 PID 控制器的目标值。此外,FlightControlPID_innerLoop() 则属于回调操作的一部分,旨在中断 TIM9 定时器事件。TIM9 定时器事件频率设定为 800 Hz。每次中断时,回调例程读取传感器,筛选原始数据,更新与变量 acc_ahrs 和 gyro_ahrs 相关的先进先出 (FIFO) 缓冲器。这两个变量在上述主循环中均已提及。回调例程使用无人机当前飞行姿态的更新数据,调用 FlightControlPID_innerLoop(),重新计算各电机的 PWM 值。最后,回调例程调用 set_motor_pwm(),为微控制器的 PWM 输出赋值,并结束更新过程。

开发人员可以使用各种工具链修改开源软件包,轻松探索其他飞行控制方案。这些工具链包括适用于 ARM 的 IAR Embedded Workbench、适用于 STM32 的 KEIL RealView 微控制器开发套件,以及 STMicroelectronics 推出基于 Windows 的免费版 System Workbench for STM32 集成开发环境 (IDE)。在对修改过的代码进行编译后,开发人员可以使用 STMicroelectronics 的 ST-LINK/V2 在线调试器和编程器,或连接 STMicroelectronics 的 STM32 Nucleo 开发板与套件随附的 JTAG 串行线调试 (SWD) 适配器板,将固件加载到 FCU 中。

总结

在航空摄影、现场检测、监控等众多应用中,多旋翼无人机因机械设计颇为简单而深受青睐。这些无人机使用智能传感器为控制算法提供数据,采用复杂的飞行控制软件,支持稳定操作,并能快速响应无人机操作员的操作命令。

虽然开发人员可以自行寻找并组装所需的机械、电气和软件组件,但 STMicroelectronics 推出的全面小型无人机开发套件,使其能够更轻松地引入小型无人机的设计和操作。通过探索甚至修改相关的开源飞行控制软件,开发人员可以快速获取多旋翼无人机飞行动力学和控制算法方面的经验。

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。

关于此作者

Stephen Evanczuk

Stephen Evanczuk 拥有 20 多年的电子行业编辑经验,主题涉猎广泛,涵盖硬件、软件、系统以及包括物联网在内的各种应用。他拥有神经网络领域的神经科学博士学位,曾经从事航空航天领域大规模分布式安全系统和算法加速方法方面的工作。目前,他不是在撰写技术和工程文章,就是在研究深度学习在识别和推荐系统方面的应用。

关于此出版商

DigiKey 北美编辑