当前位置:网站首页>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
边栏推荐
- Latest Android advanced interview questions summary, Android interview questions and answers
- NVR hard disk video recorder is connected to easycvr through the national standard gb28181 protocol. What is the reason why the device channel information is not displayed?
- Dayu200 experience officer MPPT photovoltaic power generation project dayu200, hi3861, Huawei cloud iotda
- Restore backup data on persistent volumes
- 双塔模型的最强出装,谷歌又开始玩起“老古董”了?
- It's worth seeing. Interview sites and interview skills
- Relationship between URL and URI
- Jerry's power on automatic pairing [chapter]
- MIT6.S081-Lab9 FS [2021Fall]
- Google SEO external chain backlinks research tool recommendation
猜你喜欢
Embedded development: how to choose the right RTOS for the project?
Jerry's manual matching method [chapter]
Debugging and handling the problem of jamming for about 30s during SSH login
Wechat official account oauth2.0 authorizes login and displays user information
The strongest installation of the twin tower model, Google is playing "antique" again?
Node:504 error reporting
The whole network "chases" Zhong Xuegao
2022 how to evaluate and select low code development platforms?
How to turn on win11 game mode? How to turn on game mode in win11
Tcp/ip protocol stack
随机推荐
Typescript TS basic knowledge type declaration
Develop those things: go plus c.free to free memory, and what are the reasons for compilation errors?
QT compile IOT management platform 39 alarm linkage
Automatic classification of defective photovoltaic module cells in electronic images
Use json Stringify() to realize deep copy, be careful, there may be a huge hole
The function is really powerful!
PDF文档签名指南
L2:ZK-Rollup的现状,前景和痛点
How does win11 unblock the keyboard? Method of unlocking keyboard in win11
DNS series (I): why does the updated DNS record not take effect?
operator
ByteDance senior engineer interview, easy to get started, fluent
Use camunda to do workflow design and reject operations
Dry goods sharing | devaxpress v22.1 original help document download collection
嵌入式开发:如何为项目选择合适的RTOS?
Use blocconsumer to build responsive components and monitor status at the same time
【Azure微服务 Service Fabric 】在SF节点中开启Performance Monitor及设置抓取进程的方式
Ad domain group policy management
[JDBC Part 1] overview, get connection, CRUD
Programming mode - table driven programming