经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
Ardupilot的Copter的throttle_loop
来源:cnblogs  作者:奔鹏  时间:2021/3/8 12:10:24  对本文有异议

copter的throttle_loop()任务定义在任务列表中

  1. 1 //频率 50 最大运行时间75us
  2. 2 SCHED_TASK(throttle_loop, 50, 75),
throttle_loop - 应该以50HZ运行
  1. 1 void Copter::throttle_loop()
  2. 2 {
  3. 3 //更新throttle_low_comp值(控制油门的优先级 VS 高度控制)
  4. 4 update_throttle_mix();
  5. 5
  6. 6 //检查自动armed状态
  7. 7 update_auto_armed();
  8. 8
  9. 9
  10. 10 //补偿地面效应
  11. 11 update_ground_effect_detector();
  12. 12 update_ekf_terrain_height_stable();
  13. 13 }
update_throttle_mix
  1. 1 //根据vehicle状态来设置电机throttle_low_comp值
  2. 2 //当油门高于悬停油门时,较低的值优先于飞行员/自动驾驶油门而不是姿态控制,而较高的值则优先于姿态控制而不是油门
  3. 3 void Copter::update_throttle_mix()
  4. 4 {
  5. 5 attitude_control->set_throttle_mix_man();
  6. 6 }
AC_AttitudeControl_Multi
  1. 1 class AC_AttitudeControl_Multi
  2. 2 {
  3. 3 //设置所需的油门与姿态混合 (实际混合会在1到2秒内转换为该值 )
  4. 4 void set_throttle_mix_min() override { _throttle_rpy_mix_desired = _thr_mix_min};
  5. 5 }
ap_t
  1. 1 typedef union
  2. 2 {
  3. 3 struct
  4. 4 {
  5. 5 uint8_t unused1 : 1; // 0
  6. 6 uint8_t unused_was_simple_mode : 2; // 1,2
  7. 7 uint8_t pre_arm_rc_check : 1; // 3
  8. 8 //当rc 输入 pre-arm检查已经完全成功时为真
  9. 9 uint8_t pre_arm_check : 1; // 4
  10. 10 //当所有的pre-arm检查(rc,accel,calibration,gps,lock)已经被执行时,为真
  11. 11 uint8_t auto_armed : 1; // 5
  12. 12 //从开始停止自动执行,直到油门上升
  13. 13 uint8_t logging_started : 1; // 6
  14. 14 //日志记录开始就为真
  15. 15 uint8_t land_complete : 1; // 7
  16. 16 //当探测到着陆就为真
  17. 17 uint8_t new_radio_frame : 1; // 8
  18. 18 //当来自radio的pwm数据来执行时,为真
  19. 19 uint8_t usb_connected_unused : 1; // 9 // UNUSED
  20. 20 uint8_t rc_receiver_present : 1; // 10
  21. 21 //有rc接收机时为真
  22. 22 uint8_t compass_mot : 1; // 11
  23. 23 //正在进行罗盘校准为真
  24. 24 uint8_t motor_test : 1; // 12
  25. 25 //执行电机测试时为真
  26. 26 uint8_t initialised : 1; // 13
  27. 27 //一旦init_ardupilot函数完成,就为真,到gps的扩展状态不发送,直到这个完成
  28. 28 uint8_t land_complete_maybe : 1; // 14
  29. 29 //如果已经着陆就为真
  30. 30 uint8_t throttle_zero : 1; // 15
  31. 31 // 如果油门杆为零且反跳,则为true,它确定飞行员是否在不使用电动机互锁时打算关闭
  32. 32 uint8_t system_time_set_unused : 1; // 16
  33. 33 //系统时间已经从cps设置,为真
  34. 34 uint8_t gps_glitching : 1; // 17
  35. 35 //GPS错误影响导航准确度
  36. 36 uint8_t using_interlock : 1; // 20
  37. 37 // aux switch motor interlock function is in use
  38. 38 //辅助开关电机互锁功能在使用
  39. 39 uint8_t land_repo_active : 1; // 21
  40. 40 // 如果飞行员超越着陆位置,则为true
  41. 41 uint8_t motor_interlock_switch : 1; // 22
  42. 42 // 如果飞行员请求启用电机互锁,则为true
  43. 43 uint8_t in_arming_delay : 1; // 23
  44. 44 // 当我们武装但正在等待旋转电机时为真
  45. 45 uint8_t initialised_params : 1; // 24
  46. 46 // true when the all parameters have been initialised. we cannot send parameters to the GCS until this is done
  47. 47 //当所有参数已经初始化,我们不能发送参数到GPS,直到这个完成
  48. 48 uint8_t unused3 : 1; // 25
  49. 49
  50. 50 //当指南针的初始化位置已经设置为真,
  51. 51 uint8_t unused2 : 1; // 26
  52. 52 //辅助开关rc_override是允许的
  53. 53 uint8_t armed_with_switch : 1; // 27
  54. 54 //使用arm开关来armed
  55. 55 };
  56. 56 uint32_t value;
  57. 57 } ap_t;
update_auto_armed
  1. 1 //更新auto_armed标志的状态
  2. 2 void Copter::update_auto_armed()
  3. 3 {
  4. 4 if(ap.auto_armed)
  5. 5 {
  6. 6 }
  7. 7 }
baro_ground_effect.cpp
  1. 1 void update_ground_effect_detector(void);

 

原文链接:http://www.cnblogs.com/beepeg/p/14473375.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号