- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PX4源码分析,以及思路随笔。
目录:
1.0 环境安装
1.1 roll pitch yaw
2.1 loop()
3.1 fastloop()
3.1 .1 read_AHRS()
ins.update()
3.1.2 rate_controller_run()
_motors.set_roll()
(嵌套了rate_bf_to_motor_roll)
3.1.3 motors_output()
update_throttle_filter()
update_battery_resistance()
update_lift_max_from_batt_voltage()
output_logic()
output_armed_stabilizing()
1.0环境安装
首先安装 px4_toolchain_installer_v14_win.exe,并配置好java环境(安装jdk,32位)。
安装GitHub
网站: /dev/docs/building-px4-with-make.html
若提示失败,在IE浏览器中打开网页,http变为https,不断尝试。
克隆程序(需要翻墙),可能多次失败。
从C:\px4\toolchain\msys\1.0内的eclipse批处理文件打开eclipse。
按照/dev/docs/editing-the-code-with-eclipse.html从第二张图开始。
注:第二张图位置为ardupilot的位置。
返回目录
1.1 ROLL YAW PITCH
/yuzhongchun/article/details在航空中,pitch, yaw, roll如图2所示。
pitch是围绕X轴旋转,也叫做俯仰角,如图3所示。
yaw是围绕Y轴旋转,也叫偏航角,如图4所示。
roll是围绕Z轴旋转,也叫翻滚角,如图5所示。
返回目录
2.1 loop函数:
Setup各种初始化,先忽略。
2.初始定义
第一个是函数名,第二个单位为赫兹为过多少时间调用一次,第三个单位为微秒,即为最大花费时间。
const AP_Scheduler::Task Copter::scheduler_tasks[] = {
SCHED_TASK(rc_loop, 100, 130), /* 控制角 */
SCHED_TASK(throttle_loop, 50, 75), /*油门控制*/
SCHED_TASK(update_GPS, 50, 200), /* GPS更新*/
3.从Loop()开始。
(1)等待数据
ins.wait_for_sample();?
我认为ins是 Inertial Sensor,也就是指惯性传感器。
void AP_InertialSensor::wait_for_sample(void)
uint32_t timer = micros();
(2)计算最大循环时间 。
perf_info_check_loop_time(timer - fast_loopTimer); 检查循环时间
被PI Loops使用??
G_Dt = (float)(timer - fast_loopTimer) / 1000000.0f;
fast_loopTimer = timer; 记录当前循环时间
mainLoop_count++; 主要循环的故障检测
(3)快速循环,主要的循环,重要的一步!!!!!!!!!!!!因此首选需主要研究此函数!
fast_loop();
(4)任务调度
scheduler.tick(); 告诉调度程序,一个流程已经走完??
uint32_t time_available = (timer + MAIN_LOOP_MICROS) - micros();
任务周期
scheduler.run(time_available);任务调度
返回目录
3.1 fastloop()函数
Fastloop,最关键的循环(400hz),下面对每个函数进行工作的分析。
1.更新传感器并更新姿态的函数
read_AHRS();
2.进行角速度PID运算的函数
attitude_control.ra
文档评论(0)