docs(i18n): PX4 guide translations (Crowdin) - ko (#26688)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
This commit is contained in:
PX4 Build Bot 2026-03-11 17:00:24 +11:00 committed by GitHub
parent 02d9c32645
commit a36334de50
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 495 additions and 324 deletions

View File

@ -779,6 +779,7 @@
- [Streaming Messages](mavlink/streaming_messages.md)
- [Receiving Messages](mavlink/receiving_messages.md)
- [Custom MAVLink Messages](mavlink/custom_messages.md)
- [Message Signing](mavlink/message_signing.md)
- [Protocols/Microservices](mavlink/protocols.md)
- [Standard Modes Protocol](mavlink/standard_modes.md)
- [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md)

View File

@ -151,36 +151,35 @@ else {
## 커밋과 커밋 메시지
Use descriptive, multi-paragraph commit messages for all non-trivial changes.
쉽게 이해할 수 있는 한 줄 요약과 자세한 세부정보도 기록하십시오.
PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles.
```plain
Component: Explain the change in one sentence. Fixes #1234
### Format
Prepend the software component to the start of the summary
line, either by the module name or a description of it.
(e.g. "mc_att_ctrl" or "multicopter attitude controller").
If the issue number is appended as <Fixes #1234>, Github
will automatically close the issue when the commit is
merged to the master branch.
The body of the message can contain several paragraphs.
Describe in detail what you changed. Link issues and flight
logs either related to this fix or to the testing results
of this commit.
Describe the change and why you changed it, avoid to
paraphrase the code change (Good: "Adds an additional
safety check for vehicles with low quality GPS reception".
Bad: "Add gps_reception_check() function").
Reported-by: Name <email@px4.io>
```
type(scope): short description of the change
```
**Use **`git commit -s`** to sign off on all of your commits.** This will add `signed-off-by:` with your name and email as the last line.
Where **type** is the category of change (`feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `build`, `ci`, `style`, `chore`, `revert`) and **scope** is the module or area affected (e.g. `ekf2`, `mavlink`, `navigator`). See the full [types and scopes tables](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) in CONTRIBUTING.md.
This commit guide is based on best practices for the Linux Kernel and other [projects maintained](https://github.com/torvalds/subsurface-for-dirk/blob/a48494d2fbed58c751e9b7e8fbff88582f9b2d02/README#L88-L115) by Linus Torvalds.
Append `!` before the colon to mark a breaking change: `feat(ekf2)!: remove deprecated API`.
### 예
```
feat(ekf2): add height fusion timeout. Fixes #1234
The previous implementation did not handle the case where
height fusion data stops arriving mid-flight. This adds a
configurable timeout that falls back to barometric height.
Tested in SITL with simulated sensor dropout.
Signed-off-by: Your Name <your@email.com>
```
The body of the message can contain several paragraphs. Describe in detail what you changed and why. Link related issues and flight logs. Describe the change and why you made it, rather than paraphrasing the code change.
**Use `git commit -s` to sign off on all of your commits.** This adds `Signed-off-by:` with your name and email as the last line.
## Pull Requests

View File

@ -49,15 +49,15 @@ PX4 기능 추가 절차는 다음과 같습니다. 다음 예제를 따라 PX4
git add <file name>
```
If you prefer having a GUI to add your files see [Gitk](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces) or [`git add -p`](https://nuclearsquid.com/writings/git-add/).
If you prefer having a GUI to add your files see [Gitk](https://git-scm.com/book/en/v2/Git-in-Other-Environments-Graphical-Interfaces) or [`git add -p`](https://nuclearsquid.com/writings/git-add/).
- 변경 사항을 설명하는 메시지와 함께 추가된 파일을 커밋합니다.
```sh
git commit -m "<your commit message>"
git commit -s -m "feat(ekf2): add height fusion timeout"
```
For a good commit message, please refer to the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section.
Use [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`. For details on types and scopes, see the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section.
- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot) has changed.
PX4 prefers a linear commit history and uses [git rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing).

View File

@ -136,13 +136,13 @@ The following list shows the build commands for the [Pixhawk standard](../flight
- [mRo Pixhawk (FMUv3)](../flight_controller/mro_pixhawk.md): `make px4_fmu-v3_default` (supports 2MB Flash)
- [Holybro pix32 (FMUv2)](../flight_controller/holybro_pix32.md): `make px4_fmu-v2_default`
- [Holybro pix32 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Pixfalcon (FMUv2)](../flight_controller/pixfalcon.md): `make px4_fmu-v2_default`
- [Pixfalcon (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Dropix (FMUv2)](../flight_controller/dropix.md): `make px4_fmu-v2_default`
- [Dropix (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Pixhawk 1 (FMUv2)](../flight_controller/pixhawk.md): `make px4_fmu-v2_default`
- [Pixhawk 1 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
:::warning
You **must** use a supported version of GCC to build this board (e.g. the `gcc-arm-none-eabi` package from the current Ubuntu LTS, which is the same toolchain used by CI) or remove modules from the build.

View File

@ -71,7 +71,7 @@ PX4 _developers_ need to know the FMU version of their board, as this is require
주요 차이점은 아래와 같습니다.
- **FMUv2:** Single board with STM32427VI processor ([Pixhawk 1 (Discontinued)](../flight_controller/pixhawk.md), [pix32](../flight_controller/holybro_pix32.md), [Pixfalcon](../flight_controller/pixfalcon.md), [Drotek DroPix](../flight_controller/dropix.md))
- **FMUv2:** Single board with STM32427VI processor (Pixhawk 1 (discontinued), Holybro pix32 (discontinued), Pixfalcon (discontinued), Drotek DroPix (discontinued))
- **FMUv3:** Identical to FMUv2, but usable flash doubled to 2MB ([Hex Cube Black](../flight_controller/pixhawk-2.md),[CUAV Pixhack v3](../flight_controller/pixhack_v3.md),[mRo Pixhawk](../flight_controller/mro_pixhawk.md), [Pixhawk Mini (Discontinued)](../flight_controller/pixhawk_mini.md))
- **FMUv4:** Increased RAM. 더 빨라진 CPU. 더 많은 직렬 포트. No IO processor ([Pixracer](../flight_controller/pixracer.md))
- **FMUv4-PRO:** Slightly increased RAM. 더 많은 직렬 포트. IO processor ([Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md))

View File

@ -6,7 +6,7 @@ It is small, rugged and just large enough to host a [Pixracer](../flight_control
주요 정보:
- **Frame:** Wing Wing Z-84
- **Flight controller:** Pixracer
- **Flight controller:** Pixracer (Discontinued)
![Wing Wing Z-84 build](../../assets/airframes/fw/wing_wing/wing_wing_build11.jpg)
@ -31,8 +31,8 @@ Any small (>=12A) ESC will do:
- [Pixracer](../flight_controller/pixracer.md) kit (including GPS and power module)
- FrSky D4R-II 수신기 또는 동급 (설명서에 따라 PPM 합계 출력으로 점퍼됨)
- [Mini telemetry set](../flight_controller/pixfalcon.md#availability) for Holybro pix32
- [Digital airspeed sensor](../flight_controller/pixfalcon.md#availability) for Holybro pix32 / Pixfalcon
- _Mini telemetry set_ for Holybro pix32
- _Digital airspeed sensor_ for Holybro pix32 / Pixfalcon
- 1800 mAh 2S LiPo Battery - e.g. Team Orion 1800mAh 7.4V 50C 2S1P with XT 60 plug.
### 권장 예비 부품

View File

@ -3,6 +3,7 @@
:::warning
Discontinued
The Falcon Venturi FPV Wing frame on which this vehicle is based is no longer available.
The Dropix FC used by this vehicle is discontinued.
:::
The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been designed to work with PX4 and the Dropix (Pixhawk compatible) flight controller. 소형 GoPro 카메라를 장착할 수 있습니다.
@ -13,7 +14,7 @@ RTF 키트에는 RC 수신기와 텔레메트리를 제외하고, 시스템에
주요 정보:
- **Frame:** Falcon Vertigo Hybrid VTOL
- **Flight controller:** Dropix
- **Flight controller:** Dropix (Discontineud)
- **Wing span:** 1.3m
![Falcon Vertigo Hybrid VTOL RTF](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_complete.jpg)
@ -115,21 +116,17 @@ RTF 키트는 아래와 같이 조립하여야 합니다.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_23_dropix_and_other_electronics.jpg" width="500px" title="Falcon Vertigo Electronics" />
:::info
General information about connecting Dropix can be found in [Dropix Flight Controller](../flight_controller/dropix.md).
:::
#### Connect the ESC power connector and pass the signals cables to the flight controller
#### ESC 전원 커넥터를 연결하고, 신호 케이블을 비행 컨트롤러에 연결합니다.
1. XT60 커넥터를 사용하여 ESC를 전원 모듈에 연결합니다.
1. Connect the ESC to the power module using the XT60 connector
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_25_aileron_esc_connections.jpg" width="500px" title="" />
2. 신호 케이블을 비행 컨트롤러로 연결합니다.
2. Pass the signals cables through to the flight controller
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_27_gps_esc_servo_connections.jpg" width="500px" title="GPS, ESC, Servo connections" />
#### 모터 배선
#### Motor Wiring
Motor and servo wiring is nearly entirely up to you, but should match the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) configuration, as shown in the airframe reference.
The geometry and output assignment can be configured in the [Actuators Configuration](../config/actuators.md#actuator-outputs)
@ -139,81 +136,81 @@ For example, you might wire it up like this example (orientation as if "sitting
| 포트 | 연결 |
| ------ | ---------------------- |
| MAIN 1 | Front right motor, CCW |
| MAIN 2 | 후방 촤즉 모터, 반시계 방향 |
| MAIN 3 | 전방 좌측 모터, 시계방향 |
| MAIN 4 | 후방 우측 모터, 시계 방향 |
| AUX 1 | 좌측 보조익 |
| AUX 2 | 우측 보조익 |
| AUX 3 | 승강타 |
| AUX 4 | 방향타 |
| AUX 5 | 스로틀 |
| MAIN 2 | Back left motor, CCW |
| MAIN 3 | Front left motor, CW |
| MAIN 4 | Back right motor, CW |
| AUX 1 | Left aileron |
| AUX 2 | Right aileron |
| AUX 3 | Elevator |
| AUX 4 | Rudder |
| AUX 5 | Throttle |
<a id="dropix_back"></a>
#### 비행 컨트롤러 연결 : 모터, 서보, RC 수신기, 전류 센서
#### Flight Controller Connections: Motors, Servos, RC receiver, current sensor
아래 이미지는 dropix 비행 컨트롤러의 뒷면을 보여, 주며 쿼드 모터 케이블, 에일러론 신호 케이블, 스로틀 모터, 전류 센서 및 수신기 (RC IN) 입력 핀을 연결하기위한 출력 핀을 강조하여 표시합니다.
The image below shows back of the dropix flight controller, highlighting the outputs pins to connect quad motors cables, aileron signal cables, throttle motor, and the current sensor and receiver (RC IN) input pins.
<img id="dropix_outputs" src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_33_dropix_outputs.jpg" width="500px" title="Dropix motor/servo outputs" />
1. 쿼드 모터 신호 케이블을 연결합니다.
1. Connect quad motors signal cables.
2. 보조 출력에 에일러론 케이블과 스로틀 모터를 연결합니다.
2. Connect the aileron cables and throttle motor in the auxiliary outputs.
3. ESC의 스로틀 모터 신호 케이블을 적절한 비행 컨트롤러 보조 포트에 연결합니다. ESC를 스로틀 모터에 연결합니다.
3. Connect the throttle motor signal cable from the ESC to the appropriate flight controller auxiliary port. Connect the ESC to the throttle motor.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_37_connect_throttle_motor.jpg" width="500px" title="Connect throttle motor" />
4. 수신기를 RC IN에 연결합니다.
4. Connect the receiver (RC IN).
<a id="dropix_front"></a>
#### 비행 컨트롤러 연결 : 원격 측정, 대기 속도 센서, GPS, 부저 및 안전 스위치
#### Flight Controller Connections: Telemetry, Airspeed Sensor, GPS, Buzzer and Safety Switch
센서 입력, 원격 측정, 부저 및 안전 스위치는 아래 연결 다이어그램과 같이 비행 컨트롤러의 전면에 위치합니다.
The sensor inputs, telemetry, buzzer and safety switch are located in the front of the flight controller, as shown in the connection diagram below.
<img src="../../assets/flight_controller/dropix/dropix_connectors_front.jpg" width="500px" alt="Dropix connectors front" title="Dropix connectors front" />
1. 그림과 같이 원격 측정, 대기 속도 센서, GPS, 부저 및 안전 스위치를 연결합니다.
1. Connect the telemetry, airspeed sensor, GPS, buzzer and safety switch as shown.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_39_connect_sensors.jpg" width="500px" title="Connect sensors" />
#### 비행 컨트롤러 : 전원 모듈 및 외부 USB 연결
#### Flight Controller: Connect power module and external USB
USB 포트, 전원 모듈 및 외부 USB에 대한 입력은 비행 컨트롤러의 오른쪽에 있습니다.
The inputs for the USB port, power module and external USB are located on the right side of the flight controller.
1. 그림과 같이 전원과 USB를 연결합니다.
1. Connect power and USB as shown
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_41_connect_power_module_usb.jpg" width="500px" title="Connect power module and USB" />
:::tip
The external USB is optional.
비행 컨트롤러를 장착 후, USB 포트에 액세스하기 어려운 경우에 사용하여야 합니다.
It should be used if access to the USB port is difficult once the flight controller is mounted.
:::
#### -- 피토 튜브 (대기 속도 센서) 설치
#### Install the pitot tube (airspeed sensor)
피토 튜브는 비행기 전면에 설치되며 튜브를 통해 대기 속도 센서에 연결됩니다.
The pitot tube is installed on the front of the plane and connected to the airspeed sensor via a tube.
:::warning
It is important that nothing obstructs airflow to the Pitot tube. 이것은 고정익 비행과 쿼드에서 비행기로의 전환에 매우 중요합니다.
It is important that nothing obstructs airflow to the Pitot tube. This is critical for fixed-wing flight and for transitioning from quad to plane.
:::
1. 비행기 전면에 피토 튜브를 설치합니다
1. Install the Pitot tube in the front of the plane
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_43_airspeed_sensor_mounting.jpg" width="500px" title="Airspeed sensor mounting" />
2. 연결 튜브를 고정하고 구부러 지거나 꼬이지 않았는 지 확인합니다.
2. Secure the connecting tubing and ensure that it is not bent/kinked.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_45_airspeed_sensor_tubing.jpg" width="500px" title="Airspeed sensor mounting" />
3. 튜브를 대기 속도 센서에 연결합니다.
3. Connect the tubes to the airspeed sensor.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_47_connect_airspeed_sensor_tubing.jpg" width="500px" title="Connect airspeed sensor and tubing" />
#### 수신기 및 원격 측정 모듈 설치 / 연결
#### Install/connect receiver and telemetry module
1. 수신기와 원격 측정 모듈을 차량 프레임 외부에 붙여 넣습니다.
1. Paste the receiver and telemetry module to the outside of the vehicle frame.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_49_receiver_mounting.jpg" width="500px" title="Paste receiver" />
@ -225,27 +222,27 @@ It is important that nothing obstructs airflow to the Pitot tube. 이것은 고
<a id="compass_gps"></a>
#### GPS / 나침반 모듈
#### GPS/Compass module
GPS / 나침반 모듈은 기본 방향으로 날개에 이미 장착되어 있습니다. 이를 위해 추가 작업을 할 필요가 없습니다!
The GPS/Compass module is already mounted on the wing, in the default orientation. You don't need to have to do anything extra for this!
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_gps_compass.jpg" width="500px" title="GPS/Compass" />
<a id="flight_controller_orientation"></a>
#### 비행 컨트롤러 장착 및 방향 설정
#### Mount and orient the flight controller
1. 비행 컨트롤러 방향을 270도로 설정합니다.
1. Set your flight controller orientation to 270 degrees.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_53_flight_controller_orientation.jpg" width="500px" title="Flight controller orientation" />
2. 진동 감쇠폼을 사용하여 컨트롤러를 제자리에 고정합니다.
2. Secure the controller in place using vibration damping foam.
### 4 단계 : 최종 조립 확인
### Step 4: Final Assembly Checks
마지막 조립 단계는 차량이 안정적이고 모터가 올바르게 설정되었는 지 확인하는 것입니다.
The final assembly step is to check the vehicle is stable and that the motors have been set up correctly.
1. 모터가 올바른 방향으로 회전하는지 확인하십시오 (아래 QuadX 다이어그램 참조).
1. Check that the motors turn in the correct directions (as in the QuadX diagram below).
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_35_quad_motor_directions.png" width="200px" title="Quad motor order/directions" />
@ -254,12 +251,12 @@ GPS / 나침반 모듈은 기본 방향으로 날개에 이미 장착되어 있
:::
2. 차량이 예상 무게 중심 주변에서 균형을 이루는 지 확인하십시오.
- 손가락으로 기체의 무게 중심을 잡고 차량이 안정적인지 확인하십시오.
2. Check the vehicle is balanced around the expected centre of gravity
- Hold the vehicle with your fingers at the center of gravity and check that the vehicle remains stable.
![Level Centre of Gravity](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_57_level_centre_of_gravity.jpg)
- 차량이 앞이나 뒤로 기울면 모터를 움직여 균형을 잡으십시오.
- If the vehicle leans forward or backwards, move the motors to balance it.
![Level Motors](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_55_level_motors.jpg)
@ -267,7 +264,7 @@ GPS / 나침반 모듈은 기본 방향으로 날개에 이미 장착되어 있
Perform the normal [Basic Configuration](../config/index.md).
참고:
Notes:
1. For [Airframe](../config/airframe.md) select the vehicle group/type as _Standard VTOL_ and the specific vehicle as [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) as shown below.
@ -279,7 +276,7 @@ Perform the normal [Basic Configuration](../config/index.md).
4. The default parameters are often sufficient for stable flight. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md).
보정을 마치면 VTOL이 비행할 준비가 됩니다.
After you finish calibration the VTOL is ready to fly.
## 비디오

View File

@ -11,6 +11,7 @@ It also links instructions for how you can add PX4 support for:
- [Streaming MAVLink messages](../mavlink/streaming_messages.md)
- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md)
- [Custom MAVLink Messages](../mavlink/custom_messages.md)
- [Message Signing](../mavlink/message_signing.md)
- [Protocols/Microservices](../mavlink/protocols.md)
:::info

View File

@ -0,0 +1,126 @@
# MAVLink Message Signing
[MAVLink 2 message signing](https://mavlink.io/en/guide/message_signing.html) allows PX4 to cryptographically verify that incoming MAVLink messages originate from a trusted source (authentication).
:::info
This mechanism does not _encrypt_ the message payload.
:::
## 개요
When signing is enabled, PX4 appends a 13-byte [signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message.
Incoming messages are checked against the shared secret key, and unsigned or incorrectly signed messages are rejected (with [exceptions for safety-critical messages](#unsigned-message-allowlist)).
The signing implementation is built into the MAVLink module and is always available — no special build flags are required.
It is enabled and disabled at runtime through the [MAV_SIGN_CFG](../advanced_config/parameter_reference.md#MAV_SIGN_CFG) parameter.
## Enable/Disable Signing
The [MAV_SIGN_CFG](../advanced_config/parameter_reference.md#MAV_SIGN_CFG) parameter controls whether signing is active:
| Value | Mode | 설명 |
| ----- | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| 0 | Disabled (default) | No signing. All messages are accepted regardless of signature. |
| 1 | Non-USB | Signing is enabled on all links **except** USB serial connections. USB links accept unsigned messages. |
| 2 | Always | Signing is enforced on all links, including USB. |
:::warning
Setting `MAV_SIGN_CFG` alone does not enable signing — a secret key must also be present (see [Key Provisioning](#key-provisioning) below).
If no key has been set (or the key is all zeros with a zero timestamp), all messages are accepted regardless of this parameter.
:::
To **disable** signing, set `MAV_SIGN_CFG` to zero.
## Key Provisioning
The signing key is set by sending the MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (ID 256) to PX4.
This message contains:
- A 32-byte secret key
- A 64-bit initial timestamp
:::warning
For security, PX4 only accepts `SETUP_SIGNING` messages received on a **USB** connection.
The message is silently ignored on all other link types (telemetry radios, network, and so on).
This ensures that an attacker cannot remotely change the signing key.
:::
## Key Storage
The secret key and timestamp are stored on the SD card at:
```txt
/mavlink/mavlink-signing-key.bin
```
The file is a 40-byte binary file:
| Offset | Size | Content |
| ------ | -------- | -------------------------------------------------------- |
| 0 | 32 bytes | Secret key |
| 32 | 8 bytes | Timestamp (`uint64_t`, little-endian) |
The file is created with mode `0600` (owner read/write only), and the containing `/mavlink/` directory is created with mode `0700` (owner only).
On startup, PX4 reads the key from this file.
If the file exists and contains a non-zero key or timestamp, signing is initialized automatically.
:::info
The timestamp in the file is set when `SETUP_SIGNING` is received.
A graceful shutdown also writes the current timestamp back, but in practice most vehicles are powered off by pulling the battery, so the on-disk timestamp will typically remain at the value from the last key provisioning.
:::
:::info
Storage of the key on the SD card means that signing can be disabled by removing the card.
Note that this requires physical access to the vehicle, and therefore provides the same level of security as allowing signing to be modified via the USB channel.
:::
## How It Works
### Initialization
1. The MAVLink module calls `MavlinkSignControl::start()` during startup.
2. The `/mavlink/` directory is created if it doesn't exist.
3. The `mavlink-signing-key.bin` file is opened (or created empty).
4. If a valid key is found (non-zero key or timestamp), signing is marked as initialized.
5. The `accept_unsigned` callback is registered with the MAVLink library.
### Outgoing Messages
When signing is initialized, the `MAVLINK_SIGNING_FLAG_SIGN_OUTGOING` flag is set, which causes the MAVLink library to automatically append a [SHA-256 based signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message.
### Incoming Messages
For each incoming message, the MAVLink library checks whether a valid signature is present.
If the message is unsigned or has an invalid signature, the library calls the `accept_unsigned` callback, which decides whether to accept or reject the message based on:
1. **Signing not initialized** — If no key has been loaded, all messages are accepted.
2. **Allowlisted message** — Certain [safety-critical messages](#unsigned-message-allowlist) are always accepted.
3. **Sign mode** — The `MAV_SIGN_CFG` parameter determines behavior:
- Mode 0 (disabled): All unsigned messages are accepted.
- Mode 1 (non-USB): Unsigned messages are accepted only on USB links.
- Mode 2 (always): Unsigned messages are rejected on all links.
## Unsigned Message Allowlist
The following messages are **always** accepted unsigned, regardless of the signing mode.
These are safety-critical messages that may originate from systems that don't support signing:
| 메시지 | ID | Reason |
| -------------------------------------------------------------------------------------------- | --- | -------------------------------------------------------- |
| [RADIO_STATUS](https://mavlink.io/en/messages/common.html#RADIO_STATUS) | 109 | Radio link status from SiK radios and other radio modems |
| [ADSB_VEHICLE](https://mavlink.io/en/messages/common.html#ADSB_VEHICLE) | 246 | ADS-B traffic information for collision avoidance |
| [COLLISION](https://mavlink.io/en/messages/common.html#COLLISION) | 247 | Collision threat warnings |
## Security Considerations
- **Physical access required for key setup**: The `SETUP_SIGNING` message is only accepted over USB, so an attacker must have physical access to the vehicle to provision or change the key.
- **Key not exposed via parameters**: The secret key is stored in a separate file on the SD card, not as a MAVLink parameter, so it cannot be read back through the parameter protocol.
- **SD card access**: Anyone with physical access to the SD card can read or modify the `mavlink-signing-key.bin` file, or just remove the card.
Ensure physical security of the vehicle if signing is used as a security control.
- **Replay protection**: The MAVLink signing protocol includes a timestamp that prevents replay attacks.
The on-disk timestamp is updated when a new key is provisioned via `SETUP_SIGNING`.
A graceful shutdown also persists the current timestamp, but since most vehicles are powered off by pulling the battery, the timestamp will typically reset to the value from the last key provisioning on reboot.
- **No encryption**: Message signing provides authentication and integrity, but messages are still sent in plaintext.
An eavesdropper can read message contents but cannot forge or modify them without the key.

View File

@ -30,6 +30,7 @@ These services are known to be supported in some form:
- [Landing Target Protocol](https://mavlink.io/en/services/landing_target.html)
- [Manual Control (Joystick) Protocol](https://mavlink.io/en/services/manual_control.html)
- [MAVLink Id Assignment (sysid, compid)](https://mavlink.io/en/services/mavlink_id_assignment.html)
- [Message Signing](../mavlink/message_signing.md) ([MAVLink spec](https://mavlink.io/en/guide/message_signing.html))
- [Mission Protocol](https://mavlink.io/en/services/mission.html)
- [Offboard Control Protocol](https://mavlink.io/en/services/offboard_control.html)
- [Remote ID](../peripherals/remote_id.md) ([Open Drone ID Protocol](https://mavlink.io/en/services/opendroneid.html))

View File

@ -96,203 +96,203 @@ They are not build into the module, and hence are neither published or subscribe
:::details
See messages
- [GpioConfig](../msg_docs/GpioConfig.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [Event](../msg_docs/Event.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [EventV0](../msg_docs/EventV0.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [LedControl](../msg_docs/LedControl.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [Gripper](../msg_docs/Gripper.md)
- [Mission](../msg_docs/Mission.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [Rpm](../msg_docs/Rpm.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [Rpm](../msg_docs/Rpm.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [Event](../msg_docs/Event.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [LedControl](../msg_docs/LedControl.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [Mission](../msg_docs/Mission.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [InputRc](../msg_docs/InputRc.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [Vtx](../msg_docs/Vtx.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [Ping](../msg_docs/Ping.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [Gripper](../msg_docs/Gripper.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [Ping](../msg_docs/Ping.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
:::

View File

@ -12,13 +12,15 @@ These are covered in [Application/Module Template](../modules/module_template.md
다음과 같은 것이 필요합니다.
- [PX4 SITL Simulator](../simulation/index.md) _or_ a [PX4-compatible flight controller](../flight_controller/index.md).
- [Gazebo Simulator](../sim_gazebo_gz/index.md) (or another [PX4 SITL Simulator](../simulation/index.md)) _or_ a [PX4-compatible flight controller](../flight_controller/index.md).
- [PX4 Development Toolchain](../dev_setup/dev_env.md) for the desired target.
- [Download the PX4 Source Code](../dev_setup/building_px4.md#download-the-px4-source-code) from Github
The source code [PX4-Autopilot/src/examples/px4_simple_app](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/px4_simple_app) directory contains a completed version of this tutorial that you can review if you get stuck.
- Rename (or delete) the **px4_simple_app** directory.
:::tip
Rename (or delete) the **px4_simple_app** directory.
:::
## 간단한 어플리케이션
@ -34,7 +36,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
```c
/****************************************************************************
*
* Copyright (c) 2012-2022 PX4 Development Team. All rights reserved.
* Copyright (c) 2012-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -67,7 +69,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
```
- 기본 헤더 아래에 다음 코드를 복사합니다.
이것은 기여한 모든 파일에 첨부하여야 합니다.
Similar code should be present in all contributed files!
```c
/**
@ -150,6 +152,9 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
)
```
Note that in your own modules you'd use the current copyright year!
We're using `2015` here to match the example.
The `px4_add_module()` method builds a static library from a module description.
- The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`).
@ -170,7 +175,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
4. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)).
아래 텍스트를 복사하십시오.
```text
```txt
menuconfig EXAMPLES_PX4_SIMPLE_APP
bool "px4_simple_app"
default n
@ -185,27 +190,34 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
Applications are added to the build/firmware in the appropriate board-level _px4board_ file for your target:
- PX4 SITL (Simulator): [PX4-Autopilot/boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board)
- Pixhawk v1/2: [PX4-Autopilot/boards/px4/fmu-v2/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v2/default.px4board)
- Pixracer (px4/fmu-v4): [PX4-Autopilot/boards/px4/fmu-v4/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v4/default.px4board)
- Pixhawk 6X (px4/fmu-v6x): [PX4-Autopilot/boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)
- _px4board_ files for other boards can be found in [PX4-Autopilot/boards/](https://github.com/PX4/PX4-Autopilot/tree/main/boards)
To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) `make px4_fmu-v4_default boardconfig`:
To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup).
For example, to edit the board config for FMUv6x you would do:
```sh
make fmu-v6x_default boardconfig
```
And then enable the app in the _boardconfig_ UI as shown:
```txt
examples --->
[x] PX4 Simple app ----
```
:::info
The line will already be present for most files, because the examples are included in firmware by default.
Examples are opt-in and not included in firmware by default (although they are in SITL).
You must explicitly enable them as shown above.
:::
보드별 명령어를 사용하여, 예제를 빌드합니다.
- jMAVSim Simulator: `make px4_sitl_default jmavsim`
- Pixhawk v1/2: `make px4_fmu-v2_default` (or just `make px4_fmu-v2`)
- Pixhawk v3: `make px4_fmu-v4_default`
- Other boards: [Building the Code](../dev_setup/building_px4.md#building-for-nuttx)
- Gazebo Simulator: `make px4_sitl gz_x500`
- Pixhawk 6X: `make px4_fmu-v6x_default`
- Other boards: [Building the Code](../dev_setup/building_px4.md)
## 앱 테스트(하드웨어)
@ -213,8 +225,7 @@ The line will already be present for most files, because the examples are includ
업로더를 활성화한 다음 보드를 재설정합니다.
- Pixhawk v1/2: `make px4_fmu-v2_default upload`
- Pixhawk v3: `make px4_fmu-v4_default upload`
- Pixhawk 6X: `make px4_fmu-v6x_default upload`
보드 재설정전에 컴파일 메시지를 인쇄하고 마지막에 다음을 인쇄합니다.
@ -299,14 +310,14 @@ The benefits of the PX4 hardware abstraction comes into play here!
센서 드라이버와 어떤 식으로든 상호 작용할 필요가 없으며, 보드 또는 센서가 업데이트된 경우 앱을 업데이트할 필요도 없습니다.
:::
Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [SensorCombined](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg) topic, which holds the synchronized sensor data of the complete system.
Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [VehicleAcceleration](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAcceleration.msg) topic, which holds the filtered vehicle acceleration data.
주제 구독은 간단합니다.
```cpp
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
```
The `sensor_sub_fd` is a topic handle and can be used to very efficiently perform a blocking wait for new data.
@ -317,9 +328,9 @@ Adding `poll()` to the subscription looks like (_pseudocode, look for the full i
```cpp
#include <poll.h>
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
/* one could wait for multiple topics with this technique, just using one here */
px4_pollfd_struct_t fds[] = {
@ -327,26 +338,26 @@ px4_pollfd_struct_t fds[] = {
};
while (true) {
/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */
int poll_ret = px4_poll(fds, 1, 1000);
..
if (fds[0].revents & POLLIN) {
/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */
int poll_ret = px4_poll(fds, 1, 1000);
..
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct sensor_combined_s raw;
struct vehicle_acceleration_s accel;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw);
orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)raw.accelerometer_m_s2[0],
(double)raw.accelerometer_m_s2[1],
(double)raw.accelerometer_m_s2[2]);
}
(double)accel.xyz[0],
(double)accel.xyz[1],
(double)accel.xyz[2]);
}
}
```
아래의 명령어로 앱을 다시 컴파일합니다.
```sh
make
make px4_sitl_default
```
### uORB 구독 테스트
@ -405,7 +416,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
```c
/****************************************************************************
*
* Copyright (c) 2012-2019 PX4 Development Team. All rights reserved.
* Copyright (c) 2012-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -454,7 +465,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
#include <math.h>
#include <uORB/uORB.h>
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
#include <uORB/topics/vehicle_attitude.h>
__EXPORT int px4_simple_app_main(int argc, char *argv[]);
@ -463,8 +474,8 @@ int px4_simple_app_main(int argc, char *argv[])
{
PX4_INFO("Hello Sky!");
/* subscribe to sensor_combined topic */
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
/* subscribe to vehicle_acceleration topic */
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
/* limit the update rate to 5 Hz */
orb_set_interval(sensor_sub_fd, 200);
@ -505,20 +516,20 @@ int px4_simple_app_main(int argc, char *argv[])
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct sensor_combined_s raw;
struct vehicle_acceleration_s accel;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw);
orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)raw.accelerometer_m_s2[0],
(double)raw.accelerometer_m_s2[1],
(double)raw.accelerometer_m_s2[2]);
(double)accel.xyz[0],
(double)accel.xyz[1],
(double)accel.xyz[2]);
/* set att and publish this information for other apps
the following does not have any meaning, it's just an example
*/
att.q[0] = raw.accelerometer_m_s2[0];
att.q[1] = raw.accelerometer_m_s2[1];
att.q[2] = raw.accelerometer_m_s2[2];
att.q[0] = accel.xyz[0];
att.q[1] = accel.xyz[1];
att.q[2] = accel.xyz[2];
orb_publish(ORB_ID(vehicle_attitude), att_pub, &att);
}
@ -530,7 +541,6 @@ int px4_simple_app_main(int argc, char *argv[])
}
PX4_INFO("exiting");
return 0;
}
```

View File

@ -22,7 +22,8 @@ PX4-Autopilot contains a template for writing a new application (module) that ru
요약
1. Specify the dependency on the work queue library in the cmake definition file ([CMakeLists.txt](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/work_item/CMakeLists.txt)):
```
```txt
...
DEPENDS
px4_work_queue
@ -48,9 +49,11 @@ PX4-Autopilot contains a template for writing a new application (module) that ru
4. Implement the `ScheduledWorkItem::Run()` method to perform "work".
5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id.
5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id).
6. Schedule the work queue task using one of the scheduling methods (in the example we use `ScheduleOnInterval` from within the `init` method).
6. Schedule the work queue task using one of the scheduling methods.
In the example, `init()` calls `registerCallback()` on a uORB subscription so that `Run()` is triggered whenever a new `sensor_accel` message is published.
`ScheduleOnInterval` is an alternative for fixed-rate scheduling.
## 작업
@ -66,6 +69,6 @@ PX4/PX4-Autopilot contains a template for writing a new application (module) tha
[startup script](../concept/system_startup.md).
- 명령줄 인수 구문 분석.
- Documentation: the `PRINT_MODULE_*` methods serve two purposes (the API is
documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.8.0/src/platforms/px4_module.h#L381)):
documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.17/platforms/common/include/px4_platform_common/module.h)):
- They are used to print the command-line usage when entering `module help` on the console.
- They are automatically extracted via script to generate the [Modules & Commands Reference](../modules/modules_main.md) page.

View File

@ -926,7 +926,7 @@ that can be accepted by most ESCs and servos.
It is typically started with:
```
pca9685_pwm_out start -a 0x40 -b 1
pca9685_pwm_out start -X -a 0x40 -b 1
```
### Usage {#pca9685_pwm_out_usage}

View File

@ -130,6 +130,32 @@ adis16507 <command> [arguments...]
status print status info
```
## adis16607
Source: [drivers/imu/analog_devices/adis16607](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16607)
### Usage {#adis16607_usage}
```
adis16607 <command> [arguments...]
Commands:
start
[-s] Internal SPI bus(es)
[-S] External SPI bus(es)
[-b <val>] board-specific bus (default=all) (external SPI: n-th bus
(default=1))
[-c <val>] chip-select pin (for internal SPI) or index (for external SPI)
[-m <val>] SPI mode
[-f <val>] bus frequency in kHz
[-q] quiet startup (no message if no device found)
[-R <val>] Rotation
default: 0
stop
status print status info
```
## bmi055
Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055)

View File

@ -59,7 +59,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide).
### 시뮬레이션
- TBD
- SIH: Add option to set wind velocity ([PX4-Autopilot#26467](https://github.com/PX4-Autopilot/pull/26467))
<!-- MOVED THIS TO v1.17

View File

@ -156,6 +156,12 @@ The airplane needs to takeoff in manual mode at full throttle.
Also, if the airplane crashes the state estimator might lose its fix.
:::
## Simulation Configuration
### Wind
SIH supports setting a wind velocity with the PX4 parameters [`SIH_WIND_N`](../advanced_config/parameter_reference.md#SIH_WIND_E) and [`SIH_WIND_E`](../advanced_config/parameter_reference.md#SIH_WIND_E) [m/s]. The parameters can also be changed during flight to simulate changing wind.
## Display/Visualisation (optional)
The SIH-simulated vehicle can be displayed using [jMAVSim](../sim_jmavsim/index.md) as a visualiser.

View File

@ -86,7 +86,8 @@ vtxtable save
This will create a VTX table with 5 power levels.
```nsh> vtxtable status
```sh
nsh> vtxtable status
INFO [vtxtable] VTX table "Peak THOR T67":
INFO [vtxtable] Power levels:
INFO [vtxtable] 1: 0 = 25