当前位置:网站首页>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 test box configuration channel [chapter]
- 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?
- [azure microservice service fabric] the service fabric cluster hangs up because the certificate expires (the upgrade cannot be completed, and the node is unavailable)
- Ad domain group policy management
- Qt编写物联网管理平台39-报警联动
- Dayu200 experience officer MPPT photovoltaic power generation project dayu200, hi3861, Huawei cloud iotda
- It's worth seeing. Interview sites and interview skills
- Tcp/ip protocol stack
- The whole network "chases" Zhong Xuegao
- Use blocconsumer to build responsive components and monitor status at the same time
猜你喜欢
OpenGL configuration vs2019
The maximum number of meetings you can attend [greedy + priority queue]
海外代理推荐
【Azure微服务 Service Fabric 】如何转移Service Fabric集群中的种子节点(Seed Node)
如何选择合适的自动化测试工具?
Use json Stringify() to realize deep copy, be careful, there may be a huge hole
Customer case | China law network, through observing the cloud, greatly shortens the time of fault location
Win11时间怎么显示星期几?Win11怎么显示今天周几?
How does win11 unblock the keyboard? Method of unlocking keyboard in win11
Solve the problem of uni in uni app Request sent a post request without response.
随机推荐
Code of "digital image processing principle and Practice (matlab version)" part2[easy to understand]
Meta force force meta universe system development fossage model
Main functions of OS, Sys and random Standard Libraries
How does win11 unblock the keyboard? Method of unlocking keyboard in win11
大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
PDF文档签名指南
Customer case | China law network, through observing the cloud, greatly shortens the time of fault location
What if the win11u disk does not display? Solution to failure of win11 plug-in USB flash disk
Interview question 01.02 Determine whether it is character rearrangement - auxiliary array algorithm
Reinforcement learning - learning notes 8 | Q-learning
Dbsync adds support for mongodb and ES
Pre sale 179000, hengchi 5 can fire? Product power online depends on how it is sold
如何实现横版游戏中角色的移动控制
NVR硬盤錄像機通過國標GB28181協議接入EasyCVR,設備通道信息不顯示是什麼原因?
L2: current situation, prospects and pain points of ZK Rollup
Dayu200 experience officer MPPT photovoltaic power generation project dayu200, hi3861, Huawei cloud iotda
强化学习-学习笔记9 | Multi-Step-TD-Target
Codemail auto collation code of visual studio plug-in
用语雀写文章了,功能真心强大!
ByteDance senior engineer interview, easy to get started, fluent