当前位置:网站首页>VTOL in Px4_ att_ Control source code analysis [supplement]
VTOL in Px4_ att_ Control source code analysis [supplement]
2022-07-07 22:16:00 【r1ch4rd】
VTOL Source code analysis supplement
The last article roughly analyzed PX4 For in the VTOL Control strategy :
The above figure is taken from the developer Roman Bapst A piece of The notes
Among them VTOL Controller The last part also makes a more detailed illustration :
Add :
fill_actuator_outputs():
Composite model (Standard)
The function is mainly used in various models , Calculate all kinds of flight_mode Under the actuator Output .
multirotor controls:
// roll
_actuators_out_0->control[actuator_controls_s::INDEX_ROLL] =
_actuators_mc_in->control[actuator_controls_s::INDEX_ROLL] * _mc_roll_weight;
// pitch
_actuators_out_0->control[actuator_controls_s::INDEX_PITCH] =
_actuators_mc_in->control[actuator_controls_s::INDEX_PITCH] * _mc_pitch_weight;
// yaw
_actuators_out_0->control[actuator_controls_s::INDEX_YAW] =
_actuators_mc_in->control[actuator_controls_s::INDEX_YAW] * _mc_yaw_weight;
// throttle
_actuators_out_0->control[actuator_controls_s::INDEX_THROTTLE] =
_actuators_mc_in->control[actuator_controls_s::INDEX_THROTTLE] * _mc_throttle_weight;
_actuators_mc_in
yes mc_att_control
Calculated results of , The above function is used to recalculate the expected output value according to the weight , The same applies to fixed wing mode .
Each output update_transition_state() Calculated mc The weight
_mc_roll_weight = mc_weight; _mc_pitch_weight = mc_weight; _mc_yaw_weight = mc_weight; _mc_throttle_weight = mc_weight;
In rotor mode, the input quantity is multiplied by each weight : When switching modes , The weight of the rotor represents the proportion assigned by the rotor motor under the composite model ; In full rotor mode ,mc The weight of 1, Fixed wing motor off .
fixed wing controls:
// roll
_actuators_out_1->control[actuator_controls_s::INDEX_ROLL] =
-_actuators_fw_in->control[actuator_controls_s::INDEX_ROLL];
// pitch
_actuators_out_1->control[actuator_controls_s::INDEX_PITCH] =
_actuators_fw_in->control[actuator_controls_s::INDEX_PITCH];
// yaw
_actuators_out_1->control[actuator_controls_s::INDEX_YAW] =
_actuators_fw_in->control[actuator_controls_s::INDEX_YAW];
_actuators_out_1->control[actuator_controls_s::INDEX_AIRBRAKES] = _reverse_output;
- Aileron locked : Set all outputs to zero
_actuators_out_1->control[actuator_controls_s::INDEX_ROLL] = 0.0f; _actuators_out_1->control[actuator_controls_s::INDEX_PITCH] = 0.0f; _actuators_out_1->control[actuator_controls_s::INDEX_YAW] = 0.0f; _actuators_out_1->control[actuator_controls_s::INDEX_AIRBRAKES] = 0.0f;
- Ailerons not locked : Do not change the yaw output , Only roll and pitch outputs
// roll
_actuators_out_1->control[actuator_controls_s::INDEX_ROLL] =
-_actuators_fw_in->control[actuator_controls_s::INDEX_ROLL];
// pitch
_actuators_out_1->control[actuator_controls_s::INDEX_PITCH] =
_actuators_fw_in->control[actuator_controls_s::INDEX_PITCH];
_actuators_out_1->control[actuator_controls_s::INDEX_YAW] = 0.0f;
_actuators_out_1->control[actuator_controls_s::INDEX_AIRBRAKES] = 0.0f;
Tailstock type (Tailsitter)
Pay attention to two points under the tailstock :
- In rotor mode, the aileron is used to control the yaw angle :
// NOTE: There is no mistake in the line below, multicopter yaw axis is controlled by elevon roll actuation!
_actuators_out_1->control[actuator_controls_s::INDEX_ROLL] =
_actuators_mc_in->control[actuator_controls_s::INDEX_YAW]; //roll elevon
_actuators_out_1->control[actuator_controls_s::INDEX_PITCH] =
_actuators_mc_in->control[actuator_controls_s::INDEX_PITCH]; //pitch elevon
The picture above shows the tailstock VTOL, Observe to understand the principle , That is, the differential pressure is changed through the differential aileron , Make the body yaw .
Inverse conversion TRANSITION_TO_MC
Motor mixed control at :
// in transition engines are mixed by weight (BACK TRANSITION ONLY)
_actuators_out_0->timestamp = _actuators_mc_in->timestamp;
_actuators_out_1->timestamp = _actuators_mc_in->timestamp;
_actuators_out_0->control[actuator_controls_s::INDEX_ROLL] = _actuators_mc_in->control[actuator_controls_s::INDEX_ROLL]
* _mc_roll_weight;
_actuators_out_0->control[actuator_controls_s::INDEX_PITCH] =
_actuators_mc_in->control[actuator_controls_s::INDEX_PITCH] * _mc_pitch_weight;
_actuators_out_0->control[actuator_controls_s::INDEX_YAW] = _actuators_mc_in->control[actuator_controls_s::INDEX_YAW] *
_mc_yaw_weight;
_actuators_out_0->control[actuator_controls_s::INDEX_THROTTLE] =
_actuators_mc_in->control[actuator_controls_s::INDEX_THROTTLE];
// NOTE: There is no mistake in the line below, multicopter yaw axis is controlled by elevon roll actuation!
_actuators_out_1->control[actuator_controls_s::INDEX_ROLL] = -_actuators_fw_in->control[actuator_controls_s::INDEX_ROLL]
* (1 - _mc_yaw_weight);
_actuators_out_1->control[actuator_controls_s::INDEX_PITCH] =
_actuators_mc_in->control[actuator_controls_s::INDEX_PITCH] * _mc_pitch_weight;
// **LATER** + (_actuators_fw_in->control[actuator_controls_s::INDEX_PITCH] + _params->fw_pitch_trim) *(1 - _mc_pitch_weight);
_actuators_out_1->control[actuator_controls_s::INDEX_THROTTLE] =
_actuators_fw_in->control[actuator_controls_s::INDEX_THROTTLE];
Tilting (Tiltrotor)
- In rotor mode :
Recalculate the motor output according to the weight
_actuators_out_0->timestamp = _actuators_mc_in->timestamp;
_actuators_out_0->control[actuator_controls_s::INDEX_ROLL] = _actuators_mc_in->control[actuator_controls_s::INDEX_ROLL] * _mc_roll_weight; _actuators_out_0->control[actuator_controls_s::INDEX_PITCH] = _actuators_mc_in->control[actuator_controls_s::INDEX_PITCH] * _mc_pitch_weight; _actuators_out_0->control[actuator_controls_s::INDEX_YAW] = _actuators_mc_in->control[actuator_controls_s::INDEX_YAW] * _mc_yaw_weight;
- Fixed wing mode :
_actuators_out_1->timestamp = _actuators_fw_in->timestamp;
_actuators_out_1->control[actuator_controls_s::INDEX_ROLL] =
-_actuators_fw_in->control[actuator_controls_s::INDEX_ROLL];
_actuators_out_1->control[actuator_controls_s::INDEX_PITCH] =
(_actuators_fw_in->control[actuator_controls_s::INDEX_PITCH] + _params->fw_pitch_trim);
_actuators_out_1->control[actuator_controls_s::INDEX_YAW] =
_actuators_fw_in->control[actuator_controls_s::INDEX_YAW]; // yaw
_actuators_out_1->control[4] = _tilt_control;
vtol_type.cpp:
VtolType::update_mc_state() Copy the virtual attitude expectation to the actual attitude expectation
void VtolType::update_fw_state()
// copy virtual attitude setpoint to real attitude setpoint
VtolType::check_quadchute_condition()
Fixed wing mode uses tecs Track tracking , Used during conversion local_pos_sp
边栏推荐
- Jerry's about TWS channel configuration [chapter]
- Google SEO external chain backlinks research tool recommendation
- Jerry's test box configuration channel [chapter]
- Record a garbled code during servlet learning
- The function is really powerful!
- JNI primary contact
- It's worth seeing. Interview sites and interview skills
- #DAYU200体验官#MPPT光伏发电项目 DAYU200、Hi3861、华为云IotDA
- SAR影像质量评估
- QT compile IOT management platform 39 alarm linkage
猜你喜欢
Virtual machine network configuration in VMWare
EasyCVR配置中心录像计划页面调整分辨率时的显示优化
PDF文档签名指南
Time standard library
Have you ever been confused? Once a test / development programmer, ignorant gadget C bird upgrade
Ad domain group policy management
Application practice | the efficiency of the data warehouse system has been comprehensively improved! Data warehouse construction based on Apache Doris in Tongcheng digital Department
Overseas agent recommendation
Validutil, "Rethinking the setting of semi supervised learning on graphs"
Display optimization when the resolution of easycvr configuration center video recording plan page is adjusted
随机推荐
怎样写一个增广矩阵到txt文件中
反爬通杀神器
The latest Android interview collection, Android video extraction audio
Jerry's configuration of TWS cross pairing [article]
operator
null == undefined
使用 CustomPaint 绘制基本图形
Ant destination multiple selection
The difference between NPM uninstall and RM direct deletion
Record a garbled code during servlet learning
Backup tidb cluster to persistent volume
Use blocconsumer to build responsive components and monitor status at the same time
Relationship between URL and URI
Build your own website (18)
Display optimization when the resolution of easycvr configuration center video recording plan page is adjusted
ByteDance senior engineer interview, easy to get started, fluent
Jerry's fast pairing does not support canceling pairing [article]
如何选择合适的自动化测试工具?
双塔模型的最强出装,谷歌又开始玩起“老古董”了?
为什么Win11不能显示秒数?Win11时间不显示秒怎么解决?