- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Ardupilot-ArduCopter-3.2.1 源码解读
ArduCopter-3.2.1源码解读本文针对多轴飞行器最简单常见的stabilize_run模式(即自稳模式)的代码进行解读。首先,在进行代码解读之前,首先我们要先想好,一个飞行器要工作在stabilize_run模式,需要什么输入,最后输出了什么东西。很容易地,我们知道在stabilize_run模式下,飞行器要周期性地检测陀螺仪信号来更新计算目前的角度,检测加速度计和电子罗盘来修正分别修正pitch、roll和Yaw;同时要检测遥控器的输入,转化为相应的油门值、pitch目标值、roll目标值、Yaw转动速度目标值。然后把上面的输入进行PID运算,最后输出各个电机的PWM值。因此,我们需要从ArduCopter-3.2.1源码中找到下面的程序:程序是如何周期性运行的;程序在哪里更新各个传感器的值(加速度计、陀螺仪、电子罗盘);飞行器姿态解算;遥控器的输入是在哪些程序检测,并转换成pitch、roll、yaw目标值的;PID的计算;电机PWM值输出;下面,我们根据上面的思路找到相应的程序并进行解读。程序的周期性运行首先,我们先了解程序是如何周期性运行的。在ArduPilot官网的“Scheduling Code to Run Intermittently (Code Overview)”做出了介绍(网址:/wiki/apmcopter-code-overview/code-overview-scheduling-your-new-code-to-run-intermittently/)。要让程序周期性运行,有两种办法,一种是在AP_Scheduler::Taskscheduler_tasks[] PROGMEM列表里面添加函数,并定义多少时间运行一次以及设置超时,另一种是在fast_loop()函数里面新增代码。scheduler_tasks[]可以在ArduCopter.cpp里找到:从里面我们可以看到,scheduler_tasks的程序,最快执行周期是2.5ms(硬件对应pixhawk)。并且里面的程序包括rc_loop和throttle_loop,这两个程序就是从遥控器接收油门、yaw、pitch、roll控制量的程序(不过我没细看这两个程序,也没想明白为什么没把throttle当做遥控器的一部分,高那么复杂)。其中rc_loop的执行周期是4*2.5=10ms。另外一个周期性函数,就是fast_loop()了。在ArduCopter.cpp我们可以找到它,它的执行时间是2.5ms。更新传感器和更新姿态程序周期性运行的问题解决了,接下来我们找程序在哪里更新各个传感器的值,在哪里更新姿态、进行PID运算以及输出pwm。其实在程序fast_loop()里面,就找到了。read_AHRS()就是更新传感器并更新姿态的函数;attitude_control.rate_controller_run()是进行角速度PID运算的函数;motors_output()是输出电机PWM值的函数。下面分别对这些函数作一一分解并进行分析。read_AHRS()里面调用的是ahrs.update(),ahrs是类AP_AHRS_DCM的一个实例,因此我们在AP_AHRS_DCM.cpp找到了AP_AHRS_DCM::update(void)的定义:AP_AHRS_DCM::update(void)里面,使用_ins.update()来更新陀螺仪加速度计。在这个函数里面,调用_backends[i]-update();这里才是更新陀螺仪加速度计动作的函数。但是很多人在这里就无法进一步往下看了,因为AP_InertialSensor_Backend的update()是没有进一步定义的。我们去找_backends的定义:AP_InertialSensor_Backend *_backends[INS_MAX_BACKENDS];可以看到_backends[]是个指针数组,我们找到这些指针指向哪些变量,就可以找到该变量对应的类里面的update()函数了(这个不得不表达一下对ArduCopter源码的怨恨,太多的嵌套,太多的子类,找个函数像找迷宫一样。我无法想象结构这么不清晰的程序是怎么维护的)。通过有哪些信誉好的足球投注网站_backends,在AP_InertialSensor.cpp找到了void AP_InertialSensor::_add_backend(AP_InertialSensor_Backend *(detect)(AP_InertialSensor ))函数的定义,再找到了AP_InertialSensor::_detect_backends(void)函数里进行了_add_backend(AP_InertialSensor_PX4::dete
您可能关注的文档
- Access2010 第九章.ppt
- ACM之图论.ppt
- Access数据库实用教程第1章数据库系统概述.ppt
- AD9854并行和串行驱动.doc
- Acusolve-通用流体计算仿真.pptx
- adaboost算法原理.ppt
- ACS6000培训.ppt
- AD768 16高速数模转换器(中文).docx
- ADAMS建模与修改上机实验二 (续).doc
- Adams实例练习1-胡伟钢12116322.docx
- 2025年金肯职业技术学院单招职业适应性测试题库带答案.docx
- 2025年钦州幼儿师范高等专科学校单招综合素质考试题库完美版.docx
- 2025年钟山职业技术学院单招职业适应性考试题库参考答案.docx
- 2025年金华职业技术学院单招职业技能测试题库附答案.docx
- 2025年闽南理工学院单招职业技能测试题库审定版.docx
- 2025年闽南理工学院单招综合素质考试题库审定版.docx
- 2025年闽南理工学院单招职业倾向性考试题库汇编.docx
- 2025年闽南理工学院单招职业倾向性考试题库推荐.docx
- 2025年闽北职业技术学院单招综合素质考试题库1套.docx
- 2025年长沙轨道交通职业学院单招职业技能考试题库一套.docx
最近下载
- 2017年山东省青岛市城阳七年级英语下册 Unit 1-2 复习练习题(无答案)(新版)人教新目标版.doc VIP
- 输变电工程标准工艺(变电工程土建分册)2022版.pdf VIP
- 个人防护用品培训.ppt VIP
- 启动仪式开业典礼模板《启动仪式全程安排及总结》PPT课件.pptx VIP
- 如何做一个出色的班组长.pptx VIP
- 2025年度卫生招聘考试(财务)新版真题卷(附详细解析).docx VIP
- 2025必威体育精装版乡村医生考试试题库含答案.docx VIP
- 全国突发急性传染病防控技能竞赛笔试复习测试附答案(一).doc
- 如何做一个出色的班组长.pptx VIP
- 560期货交易技术策略系统.docx VIP
文档评论(0)