Redirecting...

This page has moved to https://docs.px4.io/master/zh/dev_airframes/adding_a_new_frame.html.

Click here if you are not redirected.

添加一个新的机型

PX4使用存储的配置作为机型的起始点。 The configurations are defined in config files that are stored in the ROMFS/px4fmu_common/init.d folder. The config files reference mixer files that describe the physical configuration of the system, and which are stored in the ROMFS/px4fmu_common/mixers folder.

Adding a configuration is straightforward: create a new config file in the init.d/airframes folder (prepend the filename with an unused autostart ID), add the name of your new airframe config file to the CMakeLists.txt in the relevant section, then build and upload the software.

如果不想创建自己的配置文件,也可以用SD卡上的文本文件替换掉已有的自定义配置文件,具体细节请查看自定义系统启动页。

To determine which parameters/values need to be set in the configuration file, you can first assign a generic airframe and tune the vehicle, and then use param show-for-airframe to list the parameters that changed.

配置文件概述

配置和混控文件中的机型配置包括如下几个主要模块:

  • 机架说明文档(被Airframes ReferenceQGroundControl) 使用。
  • 飞机特定的参数设置,包括参数整定增益
  • 应该启动的应用,例如多旋翼或者固定翼的控制器,着陆检测等等。
  • 系统(固定翼,飞翼或者多旋翼)的物理配置。 在这里我们称之为 混控器

上述几个模块在很大程度上都是相互独立的,这就意味着很多配置共用同一套机架的物理结构、启动同样的应用,仅在参数整定增益上有较大区别。

New airframe files are only automatically added to the build system after a clean build (run make clean).

Config File

A typical configuration file is shown below (original file here).

The first section is the airframe documentation. This is used in the Airframes Reference and QGroundControl.

#!nsh
#
# @name Wing Wing (aka Z-84) Flying Wing
#
# @url https://docs.px4.io/master/en/framebuild_plane/wing_wing_z84.html
#
# @type Flying Wing
# @class Plane
#
# @output MAIN1 left aileron
# @output MAIN2 right aileron
# @output MAIN4 throttle
#
# @output AUX1 feed-through of RC AUX1 channel
# @output AUX2 feed-through of RC AUX2 channel
# @output AUX3 feed-through of RC AUX3 channel
#
# @maintainer Lorenz Meier <lorenz@px4.io>
#

The next section specifies vehicle-specific parameters, including tuning gains:

sh /etc/init.d/rc.fw_defaults

if [ $AUTOCNF = yes ]
then
  param set BAT_N_CELLS 2
  param set FW_AIRSPD_MAX 15
  param set FW_AIRSPD_MIN 10
  param set FW_AIRSPD_TRIM 13
  param set FW_R_TC 0.3
  param set FW_P_TC 0.3
  param set FW_L1_DAMPING 0.74
  param set FW_L1_PERIOD 16
  param set FW_LND_ANG 15
  param set FW_LND_FLALT 5
  param set FW_LND_HHDIST 15
  param set FW_LND_HVIRT 13
  param set FW_LND_TLALT 5
  param set FW_THR_LND_MAX 0
  param set FW_PR_FF 0.35
  param set FW_RR_FF 0.6
  param set FW_RR_P 0.04
fi

Set frame type (MAV_TYPE):

# 配置此为固定翼
set MAV_TYPE 1

Set the mixer to use:

# 设定混控
set MIXER wingwing

Configure PWM outputs (specify the outputs to drive/activate, and the levels).

# 向 ESC 提供一个常值 1000 us 脉冲
set PWM_OUT 4
set PWM_DISARMED 1000

If you want to reverse a channel, never do this on your RC transmitter or with e.g RC1_REV. The channels are only reversed when flying in manual mode, when you switch in an autopilot flight mode, the channels output will still be wrong (it only inverts your RC signal). Thus for a correct channel assignment change either your PWM signals with PWM_MAIN_REV1 (e.g. for channel one) or change the signs of the output scaling in the corresponding mixer (see below).

Mixer File

First read Concepts > Mixing. This provides background information required to interpret this mixer file.

A typical mixer file is shown below (original file here). A mixer filename, in this case wingwing.main.mix, gives important information about the type of airframe (wingwing), the type of output (.main or .aux) and lastly that it is a mixer file (.mix).

The mixer file contains several blocks of code, each of which refers to one actuator or ESC. So if you have e.g. two servos and one ESC, the mixer file will contain three blocks of code.

The plugs of the servos / motors go in the order of the mixers in this file.

So MAIN1 would be the left aileron, MAIN2 the right aileron, MAIN3 is empty (note the Z: zero mixer) and MAIN4 is throttle (to keep throttle on output 4 for common fixed wing configurations).

A mixer is encoded in normalized units from -10000 to 10000, corresponding to -1..+1.

M: 2
O:      10000  10000      0 -10000  10000
S: 0 0  -6000  -6000      0 -10000  10000
S: 0 1   6500   6500      0 -10000  10000

Where each number from left to right means:

  • M: 数字 2 表示该输出通道对应两个控制输入, 该参数表示混控器将接受到的控制输入的数量。
  • O: Indicates the output scaling (1 in negative, 1 in positive), offset (zero here), and output range (-1..+1 here).
    • If you want to invert your PWM signal, the signs of the output scalings have to be changed: O: -10000 -10000 0 -10000 10000
    • 如果这一行设定的是如下默认值,那么我们也可以(也应该)完全省略这一行: O: 10000 10000 0 -10000 10000
  • S:表示第一个输入的缩放器:它取控制组 #0 (Flight Control) 的第一个控制量(滚转)作为输入。 它将滚转控制输入 * 0.6 进行缩放并反转输入量的正负号(-0.6 在缩放后的单位中变成了 -6000)。 该混控器不施加任何偏移量(0)且输出量幅值在 (-1.. +1)这个范围内。
  • S:表示第二个输入的缩放器:它取控制组 #0 (Flight Control) 的第二个控制量(俯仰)作为输入。 \ It scales the pitch control input * 0.65. 不施加任何偏移量(0)并且输出量的幅值在 (-1.. +1)这个范围内。

In short, the output of this mixer would be SERVO = ( (roll input * -0.6 + 0) * 1 + (pitch input * 0.65 + 0) * 1 ) * 1 + 0

Behind the scenes, both scalers are added, which for a flying wing means the control surface takes maximum 60% deflection from roll and 65% deflection from pitch.

The complete mixer looks like this:

Delta-wing mixer for PX4FMU
===========================

Designed for Wing Wing Z-84

This file defines mixers suitable for controlling a delta wing aircraft using
PX4FMU. The configuration assumes the elevon servos are connected to PX4FMU
servo outputs 0 and 1 and the motor speed control to output 3. Output 2 is
assumed to be unused.

Inputs to the mixer come from channel group 0 (vehicle attitude), channels 0
(roll), 1 (pitch) and 3 (thrust).

See the README for more information on the scaler format.

Elevon mixers
-------------
Three scalers total (output, roll, pitch).

The scaling factor for roll inputs is adjusted to implement differential travel
for the elevons.

This first block of code is for Servo 0...

M: 2
O:      10000  10000      0 -10000  10000
S: 0 0  -6000  -6000      0 -10000  10000
S: 0 1   6500   6500      0 -10000  10000

And this is for Servo 1...

M: 2
O:      10000  10000      0 -10000  10000
S: 0 0  -6000  -6000      0 -10000  10000
S: 0 1  -6500  -6500      0 -10000  10000

Note that in principle, you could implement left/right wing asymmetric mixing, but in general the two blocks of code will be numerically equal, and just differ by the sign of the third line (S: 0 1), since to roll the plane, the two ailerons must move in OPPOSITE directions.
The signs of the second lines (S: 0 0) are indentical, since to pitch the plane, both servos need to move in the SAME direction.

Output 2
--------
This mixer is empty.

Z:

Motor speed mixer
-----------------
Two scalers total (output, thrust).

This mixer generates a full-range output (-1 to 1) from an input in the (0 - 1)
range.  Inputs below zero are treated as zero.

M: 1
O:      10000  10000      0 -10000  10000
S: 0 3      0  20000 -10000 -10000  10000

增加一个新的机型组(Airframe Group)

Airframe "groups" are used to group similar airframes for selection in QGroundControl and in the Airframe Reference documentation (PX4 DevGuide and PX4 UserGuide). Every group has a name, and an associated svg image which shows the common geometry, number of motors, and direction of motor rotation for the grouped airframes.

The airframe metadata files used by QGroundControl and the documentation source code are generated from the airframe description, via a script, using the build command: make airframe_metadata

For a new airframe belonging to an existing group, you don't need to do anything more than provide documentation in the airframe description located at ROMFS/px4fmu_common/init.d.

If the airframe is for a new group you additionally need to:

  1. 向文档仓库添加该机型组的 svg 图像文件(如果未添加图像文件则会显示一个占位符图像):
  2. Add a mapping between the new group name and image filename in the srcparser.py method GetImageName() (follow the pattern below): def GetImageName(self):

        """
        Get parameter group image base name (w/o extension)
        """
        if (self.name == "Standard Plane"):
            return "Plane"
        elif (self.name == "Flying Wing"):
            return "FlyingWing"
         ...
    

    ...

        return "AirframeUnknown"
    
  3. 更新 QGroundControl

    • 将该机型组的 svg 图像文件添加至: src/AutopilotPlugins/Common/images
    • Add reference to the svg image into qgcimages.qrc, following the pattern below:

         ...
         <file alias="Airframe/AirframeSimulation">src/AutoPilotPlugins/Common/Images/AirframeSimulation.svg</file>
         <file alias="Airframe/AirframeUnknown">src/AutoPilotPlugins/Common/Images/AirframeUnknown.svg</file>
         <file alias="Airframe/Boat">src/AutoPilotPlugins/Common/Images/Boat.svg</file>
         <file alias="Airframe/FlyingWing">src/AutoPilotPlugins/Common/Images/FlyingWing.svg</file>
         ... > 
      

      Note 剩下的机型元数据会自动包含在固件中(只要 srcparser.py 完成了更新)。

调参

The following PX4 User Guide topics explain how to tune the parameters that will be specified in the config file:

将新的机型加入到 QGroundControl

To make a new airframe available for section in the QGroundControl airframe configuration:

  1. 创建一个干净的生成(例如,先运行 make clean 指令,然后再运行 make px4_fmu-v5_default
  2. 打开 QGC 然后如下图所示单击 Custom firmware file...

    QGC 载入自定义固件

    随后你将会被要求选择需要被载入的 .px4 固件文件(该文件是一个被压缩的 JSON 文件,文件内包含了机型的元数据)。

  3. Navigate to the build folder and select the firmware file (e.g. PX4-Autopilot/build/px4_fmu-v5_default/px4_fmu-v5_default.px4).

  4. 单击 OK 开始载入固件。

  5. 重启 QGroundControl

The new airframe will then be available for selection in QGroundControl.

results matching ""

    No results matching ""