这篇博客只要对垂直起降过程和控制逻辑进行分析。
版本:V1.10.2
源码位置:
~src/modules/vtol_att_control/vtol_att_control_main.cpp
~src/modules/vtol_att_control/tiltrotor.cpp
~src/modules/vtol_att_control/mc_att_control_main.cpp
~src/modules/vtol_att_control/FixedwingAttitudeControl.cpp

1. 介绍

在垂起起降飞机中,固件里一共分了三类:
standard:传统的升推结合的类型;
tailsitter: 尾座式
tiltrotor: Y3类型的,前面是倾转旋翼,后面一个水平旋翼。
这里我们之研究tiltrotor类型。

2. vtol_att_control_main

这个主函数是对垂起控制的总体控制,任何类型飞机都走这个流程,区别就在于里面状态更新函数根据不同飞机不一样。

从上图可以看出,在垂起阶段飞控通过判断飞机类型对不同飞机进行操纵,然后再根据状态机实时更新飞机状态。
这里有几个注意点:

  • 关于是否有操纵输入(actuators),这是在固定翼或者旋翼控制里面发布的,如果更新了就为真,没有发布就为假
  • 关于虚拟控制量(**_virtual_att_sp),以旋翼模式为例,在旋翼姿态控制主函数里面(mc_att_control::Run)有一个设置指令值发布的uorb ID,就在vehicle_status_poll里面进行了判断,如果是垂起飞机,指令值就先发布到虚拟控制量,到后面不同飞机模式更新(update_fw_state/update_mc_state/update_transition_state)的时候再拷贝到真实控制量里面。
  • 有很多函数为同构函数(类似于get_mode),需要根据不同的类对象进入,这个在类初始化里面就有判断,根据不同类型飞机实例化不同的对象。

3. tiltrotor.cpp

这一部分是对tiltrotor类型的飞机的具体控制,包括状态更新和控制输出分配。

3.1 update_vtol_state


这是对飞行状态更新流程判断,下面有几个注意点:

  • 有两类飞行模式,vtol_mode是具体过程分别有:MC_MODE;FW_MODE;TRANSITION_FRONT_P1;TRANSITION_FRONT_P2;TRANSITION_BACK.
    _vtol_mode是再上面一级的封装,有ROTORY_MODE;FW_MODE;TRANSITION_TO_FW;TRANSITION_TO_MC;
  • switch-case语句,如果case后面有break则结束switch,没有的话就进行下一个case,下面是一个例子
 // map tiltrotor specific control phases to simple control modesswitch (_vtol_schedule.flight_mode) {case vtol_mode::MC_MODE:_vtol_mode = mode::ROTARY_WING;break;case vtol_mode::FW_MODE:_vtol_mode = mode::FIXED_WING;break;case vtol_mode::TRANSITION_FRONT_P1:case vtol_mode::TRANSITION_FRONT_P2:_vtol_mode = mode::TRANSITION_TO_FW;break;case vtol_mode::TRANSITION_BACK:_vtol_mode = mode::TRANSITION_TO_MC;break;}
  • 这里就很明显P1和P2阶段都被分到了TRANSITION_TO_FW模式,如果再看外围的话,TRANSITION_TO_FW和TRANSITION_TO_MC是一起控制。
  • 关于中断控制的逻辑(还不是很确定)
    在垂起转平飞失败之后会进入到旋翼模式判断下的MC_MODE,如果固定翼过渡切回去的话还是会变成MC_MODE,也就是说不论怎么中断过渡过程都会变成旋翼模式。

3.2 update_transition_state

这个函数主要是控制旋翼倾转还有控制权重计算。
旋翼倾转由_tilt_control里面控制,根据时间变化
权重计算由下面策略计算,首先对符号进行说明:
vav_ava​:当前飞行速度;
vbv_bvb​:权重开始变化时候的速度;
vtv_tvt​:转为固定翼的时候的速度;
wrw_rwr​:旋翼滚转权重;
wyw_ywy​:旋翼偏航权重;
wpw_pwp​:旋翼俯仰权重。
对于滚转通道,按照下面公式计算:
wr=va−vbvt−vbw_r=\frac{v_a-v_b}{v_t-v_b} wr​=vt​−vb​va​−vb​​
对于偏航通道,如果在偏航控制解除之前(ARSP_CTRL_DISABLE),偏航和滚转的权重相同。
对于俯仰通道,在过渡阶段控制指令为1,切到固定翼模式之后(FW_MODE)直接变成0。

4. 内环控制

前面讲的都是外环控制,至于内环姿态控制,有一个需要注意的点:
在旋翼阶段,姿态控制是由旋翼模态全权控制,但是在过渡阶段,角度率的指令值是由固定翼解算发布

在mc_att_control::Run中由下面一段判断

bool run_att_ctrl = _v_control_mode.flag_control_attitude_enabled && (is_hovering || is_tailsitter_transition);

这里run_att_ctrl只有在姿态控制开启并且飞机处于巡航或者是尾座式飞机的时候才会对姿态进行控制,如果不是的话,就直接读取角速率控制值:

else {/* attitude controller disabled, poll rates setpoint topic */if (_v_rates_sp_sub.update(&_v_rates_sp)) {_rates_sp(0) = _v_rates_sp.roll;_rates_sp(1) = _v_rates_sp.pitch;_rates_sp(2) = _v_rates_sp.yaw;_thrust_sp = -_v_rates_sp.thrust_body[2];}

但是由于这种情况下不发布角速率控制值,反而在固定翼里面发布,因为在固定翼里面有一个下面这个函数

FixedwingAttitudeControl::vehicle_control_mode_poll()
{_vcontrol_mode_sub.update(&_vcontrol_mode);if (_vehicle_status.is_vtol) {const bool is_hovering = _vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING&& !_vehicle_status.in_transition_mode;const bool is_tailsitter_transition = _vehicle_status.in_transition_mode && _is_tailsitter;if (is_hovering || is_tailsitter_transition) {_vcontrol_mode.flag_control_attitude_enabled = false;_vcontrol_mode.flag_control_manual_enabled = false;}}
}

在这个函数里面明确规定在巡航或者是尾座式飞机里面,_vcontrol_mode.flag_control_attitude_enabled = false;
_vcontrol_mode.flag_control_manual_enabled = false;
因此在主函数Run里面就不对姿态进行控制,但是其他情况就会控制姿态并发布角速度的指令值,因此在旋翼角速率控制就会用到固定翼发布的指令。

5. 目前还存在的问题

  1. 遥控器切换模式时代码如何检测
  2. 为什么过渡阶段一定是定高控制
  3. 过度模式下旋翼模式控制有一个比重,固定翼模式的比重在哪里,如何融合的。

PX4垂直起降过程研究总结相关推荐

  1. lte盲重定向_TD-LTE网络基于PS业务的重定向过程研究

    凌启东 冉东辉 许雨亭 摘要:当前移动通信网络中多种网络共存,不同通信网络间的互操作过程对于提升网络质量有着重要的意义.重定向是现阶段基于PS业务的互操作使用的主要手段,分析了重定向算法,研究了重定向 ...

  2. ZigBee设备OTA过程研究及优化

    参考文档:AN728: Over-the-Air Bootload Server and Client Setup>> 烧录文件下载>> 实验环境:EFR32MG1P232F2 ...

  3. PX4垂起(Tiltrotor)偏航控制研究

    PX4垂起(Tiltrotor)偏航控制研究 PX4垂起(Tiltrotor)偏航控制研究 1. 问题描述 2. 过渡过程中为什么没有偏航角度控制 问题1:为什么在过渡阶段固定翼位置控制没有起作用? ...

  4. Cell封面:王二涛组在丛枝菌根共生“自我调节”研究中取得重大进展(视频+漫画解读)...

    科 研 进 展 2021年10月12日,分子植物卓越中心王二涛研究团队在国际顶尖学术期刊<细胞>(Cell)上发表题为"A phosphate starvation respon ...

  5. 华中农大在土壤矿物-微生物相互作用研究方面取得新进展

    近日,华中农业大学农业微生物学国家重点实验室.资源与环境学院土壤生物化学团队在Applied and Environmental Microbiology 在线发表题为"Outer memb ...

  6. fopen_s不接受两个参数_如何利用SPC来管理制造过程,不懂SPC还敢混“质”场?

    请点击上面 免费关注本账号! 必读 →  2019年4-5月开课计划(IASC-CN俱乐部) PC是汽车行业品质管理的重要工具之一,AIAG为此写了一整本书.这篇文章略去SPC一些基础知识的介绍,直接 ...

  7. 材料凝固计算机模拟,金属基复合材料凝固过程计算机模拟Ⅲ.pdf

    金属基复合材料凝固过程计算机模拟Ⅲ,金属基复合材料,金属复合材料,金属陶瓷复合材料,金属基复合材料ppt,金属基复合材料导论,无机非金属基复合材料,双金属复合材料,金属基陶瓷复合材料,金属基复合材料的 ...

  8. ppap文件过程流程图制作_收藏 | 据说PPAP的精华都在这个PPT里!一起来鉴定下

    一组数字的PPAP 3种情况必须提交 8种情况通知提交 5种提交等级 3种提交状态 18份提交内容 "3"--以下3种情况,必须向顾客提交PPAP: 1)一种新的零件或产品: 2) ...

  9. 【2017年第3期】面向共享的政府大数据质量标准化问题研究

    洪学海1,王志强2,杨青海2 1.中国科学院计算技术研究所,北京 100190 2. 中国标准化研究院,北京 100191 摘要:回顾了国内外数据质量研究与实践的进展,重点对ISO 8000数据质量国 ...

最新文章

  1. Python模块学习 ---- re正则表达式
  2. was java heap space_实战项目中Java heap space错误的解决
  3. ffmpeg libx264_编程小短文:FFmpeg视频画面尺寸调整,必知必会
  4. 中奖名单模板_春分纪中奖名单出炉~才艺主公用“树叶阵法”致敬率土!
  5. Redis 内存用完会怎样?
  6. MCU加密技术分析(二)
  7. git提交代码到github
  8. python图像处理笔记-八-针孔照相机模型与照相机标定
  9. 怎么语音转文字?快来看看这些方法
  10. 架构设计 例子和实践 系统设计说明书
  11. Win10激活-记录篇
  12. [转载]如何塑造个人品牌:张何个人网络品牌营销全攻略
  13. 博士申请 | 香港大学黄凯斌教授招收6G通信与机器学习方向全奖博士生
  14. Python实现线性判别分析教程
  15. 手机、平板与手表,华为一个都不能少
  16. 攻防世界 MISC 新手练习区 writeup 001-006
  17. 大数据再出发-19Flink
  18. React前端库,table中的每列内容,进行强制换行的解决方法
  19. Python究竟是个啥?为什么985的学生都在学它?早就该曝光了
  20. 在RHEL4的GNOME环境下编译安装eva0.4.1

热门文章

  1. 算法乐趣--三只水桶等分水问题
  2. linux下automake用法
  3. android Java开发设计模式及在android中的应用解析
  4. AAAI 2017论文简析:利用可拍照移动设备感知空气质量---Crowdsensing Air Quality with Camera-enabled Mobile Devices
  5. 乐视电视发布声明,谴责电商平台强迫为其价格补贴买单
  6. EPS加密文件与解密
  7. 2016 ACOUG ASIA TOUR | 8月启程,东北三城技术联动
  8. 说说我的2015(做了一年多的程序媛)
  9. 二级建筑网络图计算机,浙江省计算机二级 办公软件 习题效果图-.pdf
  10. 恒大发布亚冠客战济州联海报:神兵天降