搞了半天还没看到有用的东西,接下来开始看角速度环、电机控制、姿态角获取、角度环这部分,一起看是因为联系比较紧密。
下午看高度和位置部分。。。。

首先看姿态角速度环控制:

Att_1level_Ctrl(2*1e-3f);

进入函数,开头有一个这个

ctrl_parameter_change_task();

注释说是改变控制参数任务,应该是用户进行pid参数调整的一个入口?回来再仔细看。

 for(u8 i = 0;i<3;i++)
{att_1l_ct.exp_angular_velocity[i] = val_2[i].out;// val_2[i].out;//
}

目标角速度,或者说期望角速度赋值,这个值val_2[i],实际上就是二环,也就是姿态角度环的输出。具体来讲,对于给定的状态,可以是静止,可以是前进,如果是静止,那么姿态角为零,如果是前进,俯仰角保持一定角度。总之就是为了满足给定的状态必须要保持一个一定的姿态,也就是我们想要达到的姿态,也就是期望角度,如果我们能测得当前角度,就可以对两者利用pid得到增量,也就是计算出我们需要多大的角速度。
得到了我们需要的角速度,也就是我们要达到的角速度,即期望角速度,如果已知现在的角速度,那么可以再利用pid,得到角速度的增量,即角加速度,也就是电机输出。

 att_1l_ct.exp_angular_velocity[ROL] = LIMIT(att_1l_ct.exp_angular_velocity[ROL],-MAX_ROLLING_SPEED,MAX_ROLLING_SPEED);att_1l_ct.exp_angular_velocity[PIT] = LIMIT(att_1l_ct.exp_angular_velocity[PIT],-MAX_ROLLING_SPEED,MAX_ROLLING_SPEED);

期望角速度限幅,因为不能让它很大。

att_1l_ct.fb_angular_velocity[ROL] = ( sensor.Gyro_deg[X] );
att_1l_ct.fb_angular_velocity[PIT] = (-sensor.Gyro_deg[Y] );
att_1l_ct.fb_angular_velocity[YAW] = (-sensor.Gyro_deg[Z] );

反馈角速度赋值,也就是陀螺仪测得的当前角速度值。

 for(u8 i = 0;i<3;i++){PID_calculate( dT_s,           0,           att_1l_ct.exp_angular_velocity[i],          att_1l_ct.fb_angular_velocity[i],           &arg_1[i], &val_1[i],CTRL_1_INTE_LIM *flag.taking_off           )   ; ct_val[i] = (val_1[i].out);}

pid计算,并把结果赋给ct_val[i]

mc.ct_val_rol =                   FINAL_P *ct_val[ROL];
mc.ct_val_pit = X_PROPORTION_X_Y *FINAL_P *ct_val[PIT];
mc.ct_val_yaw =                   FINAL_P *ct_val[YAW];

注释写的是:赋值,最终比例调节。这里的FINAL_P 是电机输出控制系数。

mc.ct_val_rol = LIMIT(mc.ct_val_rol,-1000,1000);
mc.ct_val_pit = LIMIT(mc.ct_val_pit,-1000,1000);
mc.ct_val_yaw = LIMIT(mc.ct_val_yaw,-400,400);

然后限幅,没了。。。

反正思路很简单也很明了,接下来看电机输出控制:

Motor_Ctrl_Task(u8 dT_ms)if(flag.unlock_sta)
{       IDLING = 10*LIMIT(Ano_Parame.set.idle_speed_pwm,0,30);if(flag.motor_preparation == 0){motor_prepara_cnt += dT_ms;if(flag.motor_preparation == 0){            if(motor_prepara_cnt<300){motor[m1] = IDLING;}else if(motor_prepara_cnt<600){motor[m2] = IDLING;}else if(motor_prepara_cnt<900){motor[m3] = IDLING;}    else if(motor_prepara_cnt<1200){ motor[m4] = IDLING;}else{flag.motor_preparation = 1;motor_prepara_cnt = 0;}}}
}

如果解锁,IDLING(空挡?)赋值,然后接下来看不懂了。。。应该是确定点击准备好。

else
{flag.motor_preparation = 0;
}

否则电机没准备好

 if(flag.motor_preparation == 1){  motor_step[m1] = mc.ct_val_thr  +mc.ct_val_yaw -mc.ct_val_rol +mc.ct_val_pit;motor_step[m2] = mc.ct_val_thr  -mc.ct_val_yaw +mc.ct_val_rol +mc.ct_val_pit;motor_step[m3] = mc.ct_val_thr  +mc.ct_val_yaw +mc.ct_val_rol -mc.ct_val_pit;motor_step[m4] = mc.ct_val_thr  -mc.ct_val_yaw -mc.ct_val_rol -mc.ct_val_pit;for(i=0;i<MOTORSNUM;i++){   motor_step[i] = LIMIT(motor_step[i],IDLING,1000);
//          motor_lpf[i] += 0.5f *(motor_step[i] - motor_lpf[i]) ;        }}for(i=0;i<MOTORSNUM;i++)
{if(flag.unlock_sta){if(flag.motor_preparation == 1){motor[i] = LIMIT(motor_step[i],IDLING,999);}}else{      motor[i] = 0;} }//ÅäÖÃÊä³ö
for(u8 i =0;i<4;i++)
{Drv_MotorPWMSet(i,motor[i]);
}

赋值、限幅、输出等等。。也比较简单,不浪费时间了

匿名无人机飞控代码整理3相关推荐

  1. 匿名无人机飞控代码整理

    看了半天,各部分都看得都很零散,写的也很简略,但目前为止还是无法对系统各部分做具体一点的整合,今天试试看... 1.先从主函数起,进入主轮询函数 Main_Task(); 这个主函数的调用就在一个wh ...

  2. 匿名无人机飞控代码整理1

    工程估计要看很多遍才能顺下来,而且有的地方需要看的比较细,对于一些比较重要又比较难的部分打算写下来一点一点分析. 姿态解算部分先跳过,姑且就认为它的imu算法(长的一批)可以得到正确的姿态信息. 这次 ...

  3. 匿名无人机飞控代码整理2

    这次是开关状态任务Swtich_State_Task(1) 首先,仍然不知道这是啥 然后,开始看程序... switchs.baro_on = 1; 命名带baro,通常是气压的意思,这里是气压开关打 ...

  4. 2021-05-24匿名凌霄飞控代码解读Drv_AnoOf.c和LX_FC_EXT_Sensor.c

    5.24:匿名凌霄飞控代码解读Drv_AnoOf.c和LX_FC_EXT_Sensor.c 注意:两部分的代码结合读,先看懂AnoOf.c然后再看对光流数据处理的文件Sensor.c 1.Drv_An ...

  5. 一飞智控CEO齐俊桐:一篇文章教你看透无人机飞控这十年

    origin: http://www.leiphone.com/news/201702/YO2bskI7smE1U8TA.html "无人机"--又一个被国人玩坏了的单词 ▲ 科幻 ...

  6. 【匿名无人机】遥控器重新对码步骤

    本篇只针对拓空者对码错误:红灯呼吸频闪,  已明确判断为对码错误的情况进行设置. [匿名无人机]遥控器升级中文版固件_FS-i6S 目录 1.遥控器型号 2.接收机型号 3.对码过程 4.接收机设置S ...

  7. 无人机飞控 ardupilot Copter-4.0.7 库简介

    无人机飞控 ardupilot Copter-4.0.7 库简介 官方文档-库说明 核心库: 库名称 作用 AP_AHRS 使用 DCM 或 EKF 进行姿态估计 AP_Common 所有草图和库所需 ...

  8. 无人机飞控 ardupilot Copter-4.0.7 库示例

    无人机飞控 ardupilot Copter-4.0.7 库示例 亲自使用库的示例是探索学习代码的第一步.遵循arduino传统,我们为大多数库提供了示例."示例"只是一个主程序, ...

  9. 无人机相关资料整理-备忘

    近期一直在学习无人机相关基础知识以及平台搭建方面的知识,搜集了很多网站的相关信息,有一些比较有用的github.中英文资料.谈论区网址.还收藏了一些免费的课程,以及自己已购买的课程的链接.有些普及的教 ...

最新文章

  1. java 的HashMap底层数据结构
  2. Hexo框架+Github Page搭建博客(附下载主题、导出CSDN博客至Hexo博客)
  3. 【Flink】Flink 报错 exited with a non-zero exit code 1
  4. 一本内行人写给行内人的安全经典--全面揭秘曾经热炒一时的“入侵腾讯事件”...
  5. 吴恩达新研究:AI看心电图,诊断心律失常准确率超过人类医生丨Nature
  6. 5000的台式计算机,预算5000的台式组装机配置清单_预算5000的台式组装机配置
  7. oracle清楚表空间碎片,ORACLE表空间的碎片整理
  8. angular获取当前路由信息
  9. python创作音乐: 计算机创作,计算音乐
  10. UOS主动安全防护计划(UAPP)正式发布,共建信创基础软件平台安全底座
  11. JMeter Linux下执行测试
  12. X书Scheme跳转到指定页面
  13. Unity —— 百度人脸识别SDK使用
  14. 如何将打开的多个excel文件,显示为独立窗口?
  15. mysql关系图查看
  16. 硬件在环系统环境架构
  17. 解决标题党的计算机算法用户app,今日头条算法工程师:做好推荐必须打击标题党...
  18. 前端学习第一天--编程软件vscode使用、HTML标签
  19. 如果更有效预防应力作用?PCB设计如何考虑应力作用? 应力对元器件失效问题的讨论
  20. CTFShow-大赛原题改编(未完慢慢更)

热门文章

  1. android 中的二维码生成与去除白边
  2. Consul入门05 - 健康检测 1
  3. this ts 方法获取_浅谈 JavaScript / TS 中的 this
  4. 数字调制解调—MSK
  5. 艾永亮:区域性企业如何进入全国市场?
  6. 医院排班算法 护士排班法
  7. 2020省赛->棋盘放麦子
  8. CSS弹性布局网格布局
  9. 超宽带(UWB)学习笔记——基于相位的测距方法
  10. 5G自组网调度指挥系统现场救援人员的千里眼