当前位置:网站首页>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
边栏推荐
- Win11U盘不显示怎么办?Win11插U盘没反应的解决方法
- Preparing for the interview and sharing experience
- 建立自己的网站(18)
- Take the intersection of two sets
- NVR硬盤錄像機通過國標GB28181協議接入EasyCVR,設備通道信息不顯示是什麼原因?
- Automatic classification of defective photovoltaic module cells in electronic images
- Ant destination multiple selection
- Build your own website (18)
- ByteDance Android interview, summary of knowledge points + analysis of interview questions
- 648. Word replacement
猜你喜欢
Reinforcement learning - learning notes 9 | multi step TD target
The latest Android interview collection, Android video extraction audio
Kirin Xin'an operating system derivative solution | storage multipath management system, effectively improving the reliability of data transmission
Dayu200 experience officer MPPT photovoltaic power generation project dayu200, hi3861, Huawei cloud iotda
Paint basic graphics with custompaint
Google SEO external chain backlinks research tool recommendation
Ad domain group policy management
How to make agile digital transformation strategy for manufacturing enterprises
The strongest installation of the twin tower model, Google is playing "antique" again?
Two kinds of updates lost and Solutions
随机推荐
How to realize the movement control of characters in horizontal game
Jerry's test box configuration channel [chapter]
Use blocconsumer to build responsive components and monitor status at the same time
Qt编写物联网管理平台39-报警联动
Which futures company is the safest to open a futures account?
Jenkins user rights management
Wechat official account oauth2.0 authorizes login and displays user information
[JDBC Part 1] overview, get connection, CRUD
L2: current situation, prospects and pain points of ZK Rollup
反爬通杀神器
Tupu digital twin coal mining system to create "hard power" of coal mining
The new version of onespin 360 DV has been released, refreshing the experience of FPGA formal verification function
[开源] .Net ORM 访问 Firebird 数据库
Dbsync adds support for mongodb and ES
Why can't win11 display seconds? How to solve the problem that win11 time does not display seconds?
Pre sale 179000, hengchi 5 can fire? Product power online depends on how it is sold
Pdf document signature Guide
ByteDance Android interview, summary of knowledge points + analysis of interview questions
Meta force force meta universe system development fossage model
客户案例|华律网,通过观测云大幅缩短故障定位时间