PX4之飞行控制框架

PX4的飞行控制程序通过模块来实现,与飞控相关的模块主要有commander,navigator,pos_control,att_control这几个,分别可以在src/modules目录中找到。
commander - 指令/事件处理模块,处理指令、遥控器输入和各种事件,设定飞行器状态和控制模式
navigator - 导航模块,根据指定的任务输出导航轨迹
pos_control - 位置控制,根据指定的轨迹或者位置实施位置控制,输出飞行器目标姿态
att_control - 姿态控制,控制飞行器姿态,使飞行器达到预期的速度/加速度等

整体的控制框架大致如下:

其中,commander用于事件的处理,事件的类型可以包括遥控操作、用户指令、状态判断等。navigation, pos control, att control三个模块依次实现层级的飞行控制,从飞行轨迹到电机输出。每一层的输出是下一个环节的输入值,比如navigation的输入为设定的轨迹,输出为位置/速度的设定值,作为pos control的输入,pos control的输出为姿态的设定值,作为att control的输入,att control实现姿态控制,它的输出为电机的控制信号。commander处理信息和事件时会更改飞行器状态(vehicle status)和控制模式(control modes)的值,从而来确定控制系统的运行模式,比如手动控制、位置控制、定高控制、自动起飞等。

 1. commander
由commander.cpp实现,它的主要作用是对事件/消息做出响应,并根据事件/消息控制飞行器的状态和飞行模式,分析commander.cpp的源代码,它的输入输出如下图

其中椭圆形表示模块,在程序中对应具体的module实现,方形表示信息,通过orb_publish,orb_subscribe等函数发布和订阅。commander的主要输入包括遥控器输入(manual_control_setpoint)、飞行器命令(vehicle_command)和着陆判断(vehicle_land_detect)、电池状态(battery_status、system_power)等信息。输出主要有飞行器状态(vehicle_state)、飞行器控制模式(vehicle_control_mode)等信息。其中黄色部分为最主要输出信息。

 2 navigator
navigator主要用来实现导航功能,即根据用户指定的任务给出飞行器需要实现的轨迹。它的消息输入输出结构如下图

主要的输入为位置信息(vehicle_global_position,vehicle_local_position)、飞行器命令和任务指令(vehicle_command,mission),飞行器状态(vehicle_status)。输出为位置设定值(position_setpoint_triplet)和任务结果(mission_result)。

 3 pos_control
pos_control主要用来实现位置/速度控制,根据设定的位置/速度输出需要实现飞行器姿态。它的消息输入输出结构如下图

主要的输入信息为飞行器状态(vehicle_status),控制模式(vehicle_control_mode),位置设定值(position_setpoint_triplet)等,主要的输出为飞行器的姿态设定值(vehicle_attitude_setpoint),用于后续的姿态控制。

 4 att_control
att_control主要用来实现姿态控制,即控制飞行器达到指定的姿态,飞行器的速度、位置等状态都通过姿态控制来实现。它的消息输入输出结构如下图

它的主要输入信息为飞行器状态(vehicle_status),控制模式(vehicle_control_mode),姿态设定值(vehicle_attitude_setpoint),手动控制输入(manual_control_setpoint)等。它的输出主要为电机控制信号(actuators_control_0)。

 5 整体控制框架

整体控制框架如上图所示,里面主要包含commander,navigator,pos_control,att_control等模块,主要的逻辑如前面所述,navigator、pos_control、att_control形成串级的控制系统,每一层的输出为下一层的输入。commander作为主要的调度方,接收各种信息和事件,主要通过vehicle_status和control_mode这两个变量来控制三个控制模块的运作。从而使飞行器实现不同模式的控制。

 

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值