针对小直升机在optitrack移植过程中出现的两个Bug进行解析:

1)高度的控制如何实现,在直升机中,存在油门和总螺距的一起联动问题。
2)在切换的瞬间,会有一个大的偏差,需要查看log并想办法修复这个问题.

问题1) 解答:

loiter模式下, 摇杆的位置对应的是给定的target_climb_rate, 详见代码如下:

对应语句为

target_climb_rate = get_pilot_desired_climb_rate(channel_throttle->get_control_in());

其中考虑了遥控器的死区.
然后通过upodate_z_controller()函数计算出需要的油门控制量, 由于loiter模式下有几个子模式,仅截取其中一个子模式进行说明

上图中 pos_control->set_alt_target_from_climb_rate_ff(target_climb_rate, G_Dt, false); 函数中,会将上面计算出来的target_climb_rate转换成 _pos_target 或者_vel_desired
同时,遥控器的油门通道值还会影响高度通道acc的积分值, 详细见下图中_attitude_control.get_throttle_in()函数

再次跳转进入run_z_controller()函数中,可以看到由于之前油门值影响了_pos_target 或者_vel_desired, 进而_pos_error.z开始起作用,后面的PID运算开始发挥作用

直到下图的内容, 最终将计算出来 thr_out 送出去

因此,通过前面的分析,可以,得到如下结论: 通过油门摇杆的改变, 间接改变了油门的输出量, 其中用到PID控制器, 油门量对应的给定的爬上速率.
而我们需要将联动的两个通道也和 thr_out关联起来即可.
在ArduPilot中修改直升机 主桨转速 的函数在 copter.cpp中的 throttle_loop中 50Hz, heli_update_rotor_speed_targets();

跳转进该函数, 可得到下图:

这其中的get_pilot_desired_rotor_speed()函数 为获取辅助通道的值

通过仿真测试得到如果输入值为1800则对应的值为0.8, 猜测为 (1800−1000)∗0.001=0.8(1800-1000)*0.001 = 0.8(1800−1000)∗0.001=0.8
上文中提到的油门通道的thr_out 平衡点的输出值为 0.5

问题2) 解答:

在模式的切换时候, 是有Bug的.
在模式切换的时候, 下图的loiter_nav->init_target():

跳转进去会有一个xy_controller的初始化函数,如下

_pos_control.init_xy_controller();

继续跳转进去得

上图显示的是已经修改后的loiter模式初始化部分,可以看出对于四旋翼, 其悬停的时候_ahrs.roll_sensor是在零度附近的. 而直升机在悬停的时候,是有一个可以设置的参数来进行调节的, 默认为3度. 故在这个地方,也就是模式的切换初期,我们需要先将这个数值给减去,(后面可以看到, 还会再次进行这个值的累加, 因此这个地方时还是有必要先减去这个数值的)
同时, 在 void AC_PosControl::run_xy_controller(float dt)函数中( AC_PosControl.cpp文件中)

这个两个计算vel_xy_i的地方也需要进行首次进入的积分值清零, 如下图中的reset_I(); 所示. 对于Vector2f AC_PID_2D::get_i_shrink() 也需要做同样的处理.

这样在后面的给定姿态角度的时候,就不会出现突变的问题了

注:在高度控制中,check_for_ekf_z_reset()中, shift_alt_target()函数,在模式切换的时候,会对高度通道产生影响,需要针对小直升机进行屏蔽,另外, 实际飞机测试中,由于小直升机存在“围绕原点”画圈的现象,通过增大位置环的D值,可以实现定点效果。

ArduPilot-Mocap转换解析相关推荐

  1. Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution

    在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧.scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成.scalaz typ ...

  2. Java web/springboot上传word/doc/docx文档(含图片)与HTML富文本导入/导出互相转换解析!附项目源码

    测试效果 先看下效果 文档内容如下: 上传 上传docx文档 查看解析内容 <html><head><style>p{margin-top:0pt;margin-b ...

  3. ArduPilot姿态控制方法解析---(倾转分离)

    先给出一些预备知识: 欧拉角:即所谓的Roll , Pitch , Yaw. 而事实上,根据其定义,欧拉角的具有不同的表示.存在先绕哪个轴,后绕哪个轴转的差别(将旋转分解成绕三个轴的转角).这种表示方 ...

  4. PDF转换解析工具—XPDF

    最近一直在研究PDF的解析,发现有很多的软件或SDK可以 预处理.这里 预处理的意思仅仅是转换一种存储格式,还需要我们进一步的结构化处理.现在介绍几种预处理方案: 第一.使用OCR软件识别. 这个做的 ...

  5. java 线程状态_JAVA线程漫谈:线程状态与状态转换解析

    线程使用方式 JDK线程的顶层抽象是Runnable接口,本质上,线程相关的类都是基于Runnable和Thread实现类实现. JDK API级别有不同的创建线程的方式,但本质是还是基于Runnab ...

  6. SQL Server 透视与逆透视转换解析

    本篇文章聊聊T-SQL中对数据进行透视转换 (pivoting).逆透视转换 (unpivoting) 相关技术. 透视转换是把数据从行的状态旋转为列的状态,逆透视转换则是把数据从列的状态旋转为行的状 ...

  7. CSS3 转换解析及制作立方体相册

    CSS3 转换 通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 一.它是如何工作? 转换的效果是让某个元素改变形状,大小和位置. 可以使用 2D 或 3D 转换来转换您的元素. ...

  8. SAP 中货币汇率转换解析

    汇率维护在ERP中可以使用事务代码OB07或者OB08,每次不同币别的汇率更改在正式生产系统中都会新创建一条记录,保存之后会存储在表TCURR中,可以通过函数CONVERT_TO_LOCAL_CURR ...

  9. Golang 基础案例集合:中文拼音转换、解析二维码、压缩 zip、执行定时任务

    前言 曾经,因为不够注重基础吃了好多亏.总是很喜欢去看那些高大上的东西,却忽略了最基本的东西.然后会错误的以为自己懂的很多,但是其实是沙堆中筑高台,知道很多高大上的架构,但是基础的东西却不太了解.我觉 ...

最新文章

  1. MarkdownView:Markdown 文档预览视图组件
  2. 神经网络php代码,慢慢研究
  3. Java IO流之【缓冲流和文件流复制文件对比】
  4. 程序运行依赖的重要文件版本不对_Deno核心模块:灵活依赖amp;安全沙箱
  5. 安卓+php推,使用 PHP 消息队列实现 Android 与 Web 通信
  6. cetos 中vsftpd从安装到配置完全教程
  7. c++string类的常用方法详解
  8. python程序设计与应用第1章
  9. ios怎么创建html文件夹,ios 创建html文件
  10. python廖老师_Python3.5-20190518-廖老师-自我笔记-面向对象
  11. Type Dynamic Web Module 4.0 requires Java 1.8 or newer----彻底杀死Bug
  12. java 产生随机数_java生成随机数
  13. BZOJ4372 烁烁的游戏(动态点分治+线段树)
  14. Log4j.properties配置详解【log4j配置文件】
  15. Android中矢量图形的相关知识
  16. .如何彻底删除oracle,如何做到Oracle完全卸载
  17. 电脑chm文件打不开解决方法
  18. html5 生日贺卡在线制作软件,可在线制作或打印的个性化照片贺卡
  19. 【无标题】我们的三周年————致我的小宝贝
  20. 福特FORD EDI需求分析

热门文章

  1. TaoTao要吃鸡(01背包)
  2. 使用nacos-server1.2.1版本,项目启动时疯狂的循环打印日志问题
  3. mini2440 H-flasher Flash id does not match问题的解决
  4. The Squared Mosquito Coil dfs
  5. 未能找到服务器主机名,未能找到主机名服务器
  6. php scws 获取分词结果,php实现scws中文分词搜索的方法
  7. 计算机考证报名照片是什么底
  8. Self-Attentive 基于自注意力分类的非结构化日志异常检测
  9. 谷歌母公司Q4营收753亿美元同比增32% 全年营收2576亿美元
  10. IBM SPSS Modeler通过数据挖掘我们能从股市数据得到什么