New Crowdin translations - ko

This commit is contained in:
Crowdin Bot
2025-06-12 08:53:45 +10:00
committed by Hamish Willee
parent e0b5342e98
commit 359d58effd
14 changed files with 837 additions and 561 deletions
+1
View File
@@ -733,6 +733,7 @@
- [Protocols/Microservices](mavlink/protocols.md) - [Protocols/Microservices](mavlink/protocols.md)
- [Standard Modes Protocol](mavlink/standard_modes.md) - [Standard Modes Protocol](mavlink/standard_modes.md)
- [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md) - [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md)
- [UORB Bridged to ROS 2](middleware/dds_topics.md)
- [모듈과 명령어](modules/modules_main.md) - [모듈과 명령어](modules/modules_main.md)
- [자동 튜닝](modules/modules_autotune.md) - [자동 튜닝](modules/modules_autotune.md)
- [명령어](modules/modules_command.md) - [명령어](modules/modules_command.md)
@@ -128,21 +128,21 @@ You add some "boilerplate" code to regularly listen for changes in the [uORB Top
- **px4_platform_common/module_params.h** to get the `DEFINE_PARAMETERS` macro: - **px4_platform_common/module_params.h** to get the `DEFINE_PARAMETERS` macro:
```cpp ```cpp
#include <px4_platform_common/module_params.h> #include <px4_platform_common/module_params.h>
``` ```
- **parameter_update.h** to access the uORB `parameter_update` message: - **parameter_update.h** to access the uORB `parameter_update` message:
```cpp ```cpp
#include <uORB/topics/parameter_update.h> #include <uORB/topics/parameter_update.h>
``` ```
- **Subscription.hpp** for the uORB C++ subscription API: - **Subscription.hpp** for the uORB C++ subscription API:
```cpp ```cpp
#include <uORB/Subscription.hpp> #include <uORB/Subscription.hpp>
``` ```
Derive your class from `ModuleParams`, and use `DEFINE_PARAMETERS` to specify a list of parameters and their associated parameter attributes. Derive your class from `ModuleParams`, and use `DEFINE_PARAMETERS` to specify a list of parameters and their associated parameter attributes.
매개변수의 이름은 매개변수 메타데이터 정의와 동일하여야 합니다. 매개변수의 이름은 매개변수 메타데이터 정의와 동일하여야 합니다.
@@ -194,7 +194,7 @@ void Module::parameters_update()
- `_parameter_update_sub.updated()` tells us if there is _any_ update to the `param_update` uORB message (but not what parameter is affected). - `_parameter_update_sub.updated()` tells us if there is _any_ update to the `param_update` uORB message (but not what parameter is affected).
- If there has been "some" parameter updated, we copy the update into a `parameter_update_s` (`param_update`), to clear the pending update. - If there has been "some" parameter updated, we copy the update into a `parameter_update_s` (`param_update`), to clear the pending update.
- Then we call `ModuleParams::updateParams()`. - Then we call `ModuleParams::updateParams()`.
This "under the hood" updates all parameter attributes listed in our `DEFINE_PARAMETERS` list. This "under the hood" updates all parameter attributes listed in our `DEFINE_PARAMETERS` list.
The parameter attributes (`_sys_autostart` and `_att_bias_max` in this case) can then be used to represent the parameters, and will be updated whenever the parameter value changes. The parameter attributes (`_sys_autostart` and `_att_bias_max` in this case) can then be used to represent the parameters, and will be updated whenever the parameter value changes.
@@ -267,12 +267,12 @@ YAML meta data is intended as a full replacement for the **.c** definitions.
- An example of YAML definitions being used can be found in the MAVLink parameter definitions: [/src/modules/mavlink/module.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/module.yaml). - An example of YAML definitions being used can be found in the MAVLink parameter definitions: [/src/modules/mavlink/module.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/mavlink/module.yaml).
- YAML 파일은 다음을 추가하여 cmake 빌드 시스템에 등록됩니다. - YAML 파일은 다음을 추가하여 cmake 빌드 시스템에 등록됩니다.
```cmake ```cmake
MODULE_CONFIG MODULE_CONFIG
module.yaml module.yaml
``` ```
to the `px4_add_module` section of the `CMakeLists.txt` file of that module. to the `px4_add_module` section of the `CMakeLists.txt` file of that module.
#### 다중 인스턴스(템플릿) YAML 메타 데이터 #### 다중 인스턴스(템플릿) YAML 메타 데이터
@@ -20,7 +20,7 @@ This guide walks through the process of setting up the board and connecting to P
You will temporarily need the following hardware in order to log into your Jetson and get its IP address, after which you will be able to log in via SSH: You will temporarily need the following hardware in order to log into your Jetson and get its IP address, after which you will be able to log in via SSH:
- External display. - External display.
If your display doesn't have a mini HDMI connector you will also need a [Mini HDMI to HDMI converter](https://a.co/d/6N815N9) if your external display has HDMI input If your display doesn't have a mini HDMI connector you will also need a [Mini HDMI to HDMI converter](https://a.co/d/6N815N9) if your external display has HDMI input
- Ethernet cable - Ethernet cable
- Mouse and keyboard (the baseboard has 4 USB ports exposed from Jetson, two of which are USB 3.0) - Mouse and keyboard (the baseboard has 4 USB ports exposed from Jetson, two of which are USB 3.0)
@@ -45,11 +45,11 @@ This information comes from the [Holybro Pixhawk-Jetson Baseboard Documentation]
- 크기 - 크기
- 126 x 80 x 45mm (with Jetson Orin NX + Heatsink/Fan & FC Module) - 126 x 80 x 45mm (with Jetson Orin NX + Heatsink/Fan & FC Module)
- 126 x 80 x 22.9mm (without Jetson and FC Module) - 126 x 80 x 22.9mm (without Jetson and FC Module)
- 중량 - 중량
- 190g (with Jetson, Heatsink, Flight Controller, M.2 SSD, M.2 Wi-Fi Module) - 190g (with Jetson, Heatsink, Flight Controller, M.2 SSD, M.2 Wi-Fi Module)
::: :::
@@ -57,67 +57,67 @@ This information comes from the [Holybro Pixhawk-Jetson Baseboard Documentation]
- 2x Gigabit Ethernet Port - 2x Gigabit Ethernet Port
- Connected to both Jetson & Autopilot via Ethernet switch (RTL8367S) - Connected to both Jetson & Autopilot via Ethernet switch (RTL8367S)
- Ethernet Switch powered by the same circuit as the Pixhawk - Ethernet Switch powered by the same circuit as the Pixhawk
- 8-pin JST-GH - 8-pin JST-GH
- RJ45 - RJ45
- 2x MIPI CSI Camera Inputs - 2x MIPI CSI Camera Inputs
- 4 Lanes each - 4 Lanes each
- 22-Pin Raspberry Pi Cam FFC - 22-Pin Raspberry Pi Cam FFC
- 2x USB 3.0 Host Port - 2x USB 3.0 Host Port
- USB A - USB A
- 5A Current Limit - 5A Current Limit
- 2x USB 2.0 Host Port - 2x USB 2.0 Host Port
- 5-Pin JST-GH - 5-Pin JST-GH
- 0A Current Limit - 0A Current Limit
- USB 2.0 for Programming/Debugging - USB 2.0 for Programming/Debugging
- USB-C - USB-C
- 2 Key M 2242/2280 for NVMe SSD - 2 Key M 2242/2280 for NVMe SSD
- PCIEx4 - PCIEx4
- 2 Key E 2230 for WiFi/BT - 2 Key E 2230 for WiFi/BT
- PCIEx2 - PCIEx2
- USB - USB
- UART - UART
- I2S - I2S
- Mini HDMI Out - Mini HDMI Out
- 4x GPIO - 4x GPIO
- 6-pin JST-GH - 6-pin JST-GH
- CAN Port - CAN Port
- Connected to Autopilot's CAN2 (4 Pin JST-GH) - Connected to Autopilot's CAN2 (4 Pin JST-GH)
- SPI Port - SPI Port
- 7-Pin JST-GH - 7-Pin JST-GH
- I2C Port - I2C Port
- 4-Pin JST-GH - 4-Pin JST-GH
- I2S Port - I2S Port
- 7-Pin JST-GH - 7-Pin JST-GH
- 2x UART Port - 2x UART Port
- 1 for debug - 1 for debug
- 1 connected to Autopilot's telem2 - 1 connected to Autopilot's telem2
- Fan Power Port - Fan Power Port
@@ -129,13 +129,13 @@ This information comes from the [Holybro Pixhawk-Jetson Baseboard Documentation]
- Pixhawk Autopilot Bus Interface - Pixhawk Autopilot Bus Interface
- 100 Pin Hirose DF40 - 100 Pin Hirose DF40
- 50 Pin Hirose DF40 - 50 Pin Hirose DF40
- Redundant Digital Power Module Inputs - Redundant Digital Power Module Inputs
- I2C Power Monitor Support - I2C Power Monitor Support
- 2x 6-Pin Molex CLIK-Mate - 2x 6-Pin Molex CLIK-Mate
- Power Path Selector - Power Path Selector
@@ -143,68 +143,68 @@ This information comes from the [Holybro Pixhawk-Jetson Baseboard Documentation]
- 정격 전압 - 정격 전압
- 최대 입력 전압: 6V - 최대 입력 전압: 6V
- USB 전원 입력: 4.75~5.25V - USB 전원 입력: 4.75~5.25V
- Full GPS Plus Safety Switch Port - Full GPS Plus Safety Switch Port
- 10-Pin JST-GH - 10-Pin JST-GH
- Secondary (GPS2) Port - Secondary (GPS2) Port
- 6-Pin JST-GH - 6-Pin JST-GH
- 2x CAN Ports - 2x CAN Ports
- 4-Pin JST-GH - 4-Pin JST-GH
- 3x Telemetry Ports with Flow Control - 3x Telemetry Ports with Flow Control
- 2x 6-Pin JST-GH - 2x 6-Pin JST-GH
- 1 is connected to Jetson's `UART1` Port - 1 is connected to Jetson's `UART1` Port
- 16 PWM Outputs - 16 PWM Outputs
- 2x 10-Pin JST-GH - 2x 10-Pin JST-GH
- UART4 & I2C Port - UART4 & I2C Port
- 6-Pin JST-GH - 6-Pin JST-GH
- 2x Gigabit Ethernet Port - 2x Gigabit Ethernet Port
- Connected to both Jetson & Autopilot via Ethernet switch (RTL8367S) - Connected to both Jetson & Autopilot via Ethernet switch (RTL8367S)
- 8-Pin JST-GH - 8-Pin JST-GH
- RJ45 - RJ45
- AD & IO - AD & IO
- 8-Pin JST-GH - 8-Pin JST-GH
- USB 2.0 - USB 2.0
- USB-C - USB-C
- 4-Pin JST-GH - 4-Pin JST-GH
- DSM Input - DSM Input
- 3-Pin JST-ZH 1.5mm Pitch - 3-Pin JST-ZH 1.5mm Pitch
- RC In - RC In
- PPM/SBUS - PPM/SBUS
- 5-Pin JST-GH - 5-Pin JST-GH
- SPI Port - SPI Port
- External Sensor Bus (SPI5) - External Sensor Bus (SPI5)
- 11-Pin JST-GH - 11-Pin JST-GH
- 2x Debug Port - 2x Debug Port
- 1 for FMU - 1 for FMU
- 1 for IO - 1 for IO
- 10-Pin JST-SH - 10-Pin JST-SH
::: :::
@@ -218,7 +218,7 @@ The Jetson has separate input power circuitry from the Pixhawk autopilot:
- 8V/3A Minimum (Depends on Usage and Peripherals) - 8V/3A Minimum (Depends on Usage and Peripherals)
- Voltage Rating: 7-21V (3S-4S) - Voltage Rating: 7-21V (3S-4S)
- Jetson Baseboard onboard BEC is rated for 7-21V (3S-4S). - Jetson Baseboard onboard BEC is rated for 7-21V (3S-4S).
Note that the external UBEC-12A can be used for applications above 4S Note that the external UBEC-12A can be used for applications above 4S
During development using the following wired power supply is recommended: During development using the following wired power supply is recommended:
@@ -698,7 +698,7 @@ On the following screen, confirm your selected device:
- Choose `Pre-config` for the OEM Configuration (this will skip Ubuntu first time setup screens after reboot). - Choose `Pre-config` for the OEM Configuration (this will skip Ubuntu first time setup screens after reboot).
- Choose your preferred username and password (and write them down). - Choose your preferred username and password (and write them down).
These will be used as your login credentials to Jetpack. These will be used as your login credentials to Jetpack.
- Choose `NVMe` as the storage device because the board has separate SSD for storage. - Choose `NVMe` as the storage device because the board has separate SSD for storage.
![SDK Manager installation storage and OEM config page](../../assets/companion_computer/holybro_pixhawk_jetson_baseboard/nvidia_sdkmanager_3.png) ![SDK Manager installation storage and OEM config page](../../assets/companion_computer/holybro_pixhawk_jetson_baseboard/nvidia_sdkmanager_3.png)
@@ -922,95 +922,95 @@ These instructions approximately mirror the [PX4 Ethernet setup](../advanced_con
Next we modify the Jetson IP address to be on the same network as the Pixhawk: Next we modify the Jetson IP address to be on the same network as the Pixhawk:
1. Make sure `netplan` is installed. 1. Make sure `netplan` is installed.
You can check by running the following command: You can check by running the following command:
```sh ```sh
netplan -h netplan -h
``` ```
If not, install it using the commands: If not, install it using the commands:
```sh ```sh
sudo apt update sudo apt update
sudo apt install netplan.io sudo apt install netplan.io
``` ```
2. Check `system_networkd` is running: 2. Check `system_networkd` is running:
```sh ```sh
sudo systemctl status systemd-networkd sudo systemctl status systemd-networkd
``` ```
You should see output like below if it is active: You should see output like below if it is active:
```sh ```sh
● systemd-networkd.service - Network Configuration ● systemd-networkd.service - Network Configuration
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled) Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-09-11 23:32:44 EDT; 23min ago Active: active (running) since Wed 2024-09-11 23:32:44 EDT; 23min ago
TriggeredBy: ● systemd-networkd.socket TriggeredBy: ● systemd-networkd.socket
Docs: man:systemd-networkd.service(8) Docs: man:systemd-networkd.service(8)
Main PID: 2452 (systemd-network) Main PID: 2452 (systemd-network)
Status: "Processing requests..." Status: "Processing requests..."
Tasks: 1 (limit: 18457) Tasks: 1 (limit: 18457)
Memory: 2.7M Memory: 2.7M
CPU: 157ms CPU: 157ms
CGroup: /system.slice/systemd-networkd.service CGroup: /system.slice/systemd-networkd.service
└─2452 /lib/systemd/systemd-networkd └─2452 /lib/systemd/systemd-networkd
Sep 11 23:32:44 ubuntu systemd-networkd[2452]: lo: Gained carrier Sep 11 23:32:44 ubuntu systemd-networkd[2452]: lo: Gained carrier
Sep 11 23:32:44 ubuntu systemd-networkd[2452]: wlan0: Gained IPv6LL Sep 11 23:32:44 ubuntu systemd-networkd[2452]: wlan0: Gained IPv6LL
Sep 11 23:32:44 ubuntu systemd-networkd[2452]: eth0: Gained IPv6LL Sep 11 23:32:44 ubuntu systemd-networkd[2452]: eth0: Gained IPv6LL
Sep 11 23:32:44 ubuntu systemd-networkd[2452]: Enumeration completed Sep 11 23:32:44 ubuntu systemd-networkd[2452]: Enumeration completed
Sep 11 23:32:44 ubuntu systemd[1]: Started Network Configuration. Sep 11 23:32:44 ubuntu systemd[1]: Started Network Configuration.
Sep 11 23:32:44 ubuntu systemd-networkd[2452]: wlan0: Connected WiFi access point: Verizon_7YLWWD (78:67:0e:ea:a6:0> Sep 11 23:32:44 ubuntu systemd-networkd[2452]: wlan0: Connected WiFi access point: Verizon_7YLWWD (78:67:0e:ea:a6:0>
Sep 11 23:34:16 ubuntu systemd-networkd[2452]: eth0: Re-configuring with /run/systemd/network/10-netplan-eth0.netwo> Sep 11 23:34:16 ubuntu systemd-networkd[2452]: eth0: Re-configuring with /run/systemd/network/10-netplan-eth0.netwo>
Sep 11 23:34:16 ubuntu systemd-networkd[2452]: eth0: DHCPv6 lease lost Sep 11 23:34:16 ubuntu systemd-networkd[2452]: eth0: DHCPv6 lease lost
Sep 11 23:34:16 ubuntu systemd-networkd[2452]: eth0: Re-configuring with /run/systemd/network/10-netplan-eth0.netwo> Sep 11 23:34:16 ubuntu systemd-networkd[2452]: eth0: Re-configuring with /run/systemd/network/10-netplan-eth0.netwo>
Sep 11 23:34:16 ubuntu systemd-networkd[2452]: eth0: DHCPv6 lease lost Sep 11 23:34:16 ubuntu systemd-networkd[2452]: eth0: DHCPv6 lease lost
``` ```
If `system_networkd` is not running, it can be enabled using: If `system_networkd` is not running, it can be enabled using:
```sh ```sh
sudo systemctl start systemd-networkd sudo systemctl start systemd-networkd
sudo systemctl enable systemd-networkd sudo systemctl enable systemd-networkd
``` ```
3. Open the Netplan configuration file (so we can set up a static IP for the Jetson). 3. Open the Netplan configuration file (so we can set up a static IP for the Jetson).
The Netplan configuration file is usually located in the `/etc/netplan/` directory and named something like `01-netcfg.yaml` (the name can vary). The Netplan configuration file is usually located in the `/etc/netplan/` directory and named something like `01-netcfg.yaml` (the name can vary).
Below we use `nano` to open the file, but you can use your preferred text editor: Below we use `nano` to open the file, but you can use your preferred text editor:
```sh ```sh
sudo nano /etc/netplan/01-netcfg.yaml sudo nano /etc/netplan/01-netcfg.yaml
``` ```
4. Modify the yaml configuration, by overwriting the contents with the following information and then saving: 4. Modify the yaml configuration, by overwriting the contents with the following information and then saving:
```sh ```sh
network: network:
version: 2 version: 2
renderer: networkd renderer: networkd
ethernets: ethernets:
eth0: eth0:
dhcp4: no dhcp4: no
addresses: addresses:
- 10.41.10.1/24 - 10.41.10.1/24
routes: routes:
- to: 0.0.0.0/0 - to: 0.0.0.0/0
via: 10.41.10.254 via: 10.41.10.254
nameservers: nameservers:
addresses: addresses:
- 10.41.10.254 - 10.41.10.254
``` ```
This gives the Jetson a static IP address on the Ethernet interface of `10.41.10.1` . This gives the Jetson a static IP address on the Ethernet interface of `10.41.10.1` .
5. Apply the changes using the following command: 5. Apply the changes using the following command:
```sh ```sh
sudo netplan apply sudo netplan apply
``` ```
The Pixhawk Ethernet address is set to `10.41.10.2` by default, which is on the same subnet. The Pixhawk Ethernet address is set to `10.41.10.2` by default, which is on the same subnet.
We can test our changes above by pinging the Pixhawk from within the Jetson terminal: We can test our changes above by pinging the Pixhawk from within the Jetson terminal:
@@ -1221,15 +1221,15 @@ Assuming the client is set up as defined above:
- (Serial connection) Start the agent on `/dev/ttyTHS1`: - (Serial connection) Start the agent on `/dev/ttyTHS1`:
```sh ```sh
sudo MicroXRCEAgent serial --dev /dev/ttyTHS1 -b 921600 sudo MicroXRCEAgent serial --dev /dev/ttyTHS1 -b 921600
``` ```
- (Ethernet) Start the agent on UDP port `8888`: - (Ethernet) Start the agent on UDP port `8888`:
```sh ```sh
MicroXRCEAgent udp4 -p 8888 MicroXRCEAgent udp4 -p 8888
``` ```
If your agent and client are connected and no nodes are running, you should see output similar to this in the Agent terminal: If your agent and client are connected and no nodes are running, you should see output similar to this in the Agent terminal:
+14 -14
View File
@@ -38,9 +38,9 @@ A frame configuration can define everything about a vehicle, from it's geometry
When you're bringing up a new vehicle though, the frame will usually contain a fairly minimal configuration: When you're bringing up a new vehicle though, the frame will usually contain a fairly minimal configuration:
- Frames named with "Generic" define the vehicle type, number of rotors, and "placeholder" rotor positions. - Frames named with "Generic" define the vehicle type, number of rotors, and "placeholder" rotor positions.
After selecting the airframe you define the actual geometry and then configure outputs. After selecting the airframe you define the actual geometry and then configure outputs.
- Frames named with model/brand will define the vehicle type, number of rotors, actual rotor positions, and motor directions. - Frames named with model/brand will define the vehicle type, number of rotors, actual rotor positions, and motor directions.
After selecting the airframe you usually still have to configure outputs. After selecting the airframe you usually still have to configure outputs.
::: :::
@@ -52,7 +52,7 @@ This ensures that all ESC provide exactly the same output for a given input (ide
The final step is [Motor Configuration](../config/actuators.md#motor-configuration): The final step is [Motor Configuration](../config/actuators.md#motor-configuration):
- [Reverse any motors](../config/actuators.md#reversing-motors) that don't match the spin direction configured in the Geometry. - [Reverse any motors](../config/actuators.md#reversing-motors) that don't match the spin direction configured in the Geometry.
For DShot ESC you can do this through the Acuator Testing UI. For DShot ESC you can do this through the Acuator Testing UI.
- PWM, OneShot, and CAN ESC, set the motor input limits for disarmed, low and high speed (not needed for DShot ESC) - PWM, OneShot, and CAN ESC, set the motor input limits for disarmed, low and high speed (not needed for DShot ESC)
Relevant topics: Relevant topics:
@@ -123,14 +123,14 @@ Tuning is the final step, carried out only after most other setup and configurat
- [Autotune](../config/autotune_mc.md) — Automates tuning PX4 rate and attitude controllers (recommended). - [Autotune](../config/autotune_mc.md) — Automates tuning PX4 rate and attitude controllers (recommended).
::: info ::: info
Automatic tuning works on frames that have reasonable authority and dynamics around all the body axes. Automatic tuning works on frames that have reasonable authority and dynamics around all the body axes.
It has primarily been tested on racing quads and X500, and is expected to be less effective on tricopters with a tiltable rotor. It has primarily been tested on racing quads and X500, and is expected to be less effective on tricopters with a tiltable rotor.
Manual tuning using these guides are only needed if there is a problem with autotune: Manual tuning using these guides are only needed if there is a problem with autotune:
- [MC PID Tuning (Manual/Basic)](../config_mc/pid_tuning_guide_multicopter_basic.md) — Manual tuning basic how to. - [MC PID Tuning (Manual/Basic)](../config_mc/pid_tuning_guide_multicopter_basic.md) — Manual tuning basic how to.
- [MC PID Tuning Guide (Manual/Detailed)](../config_mc/pid_tuning_guide_multicopter.md) — Manual tuning with detailed explanation. - [MC PID Tuning Guide (Manual/Detailed)](../config_mc/pid_tuning_guide_multicopter.md) — Manual tuning with detailed explanation.
::: :::
@@ -138,7 +138,7 @@ Tuning is the final step, carried out only after most other setup and configurat
- [MC Filter/Control Latency Tuning](../config_mc/filter_tuning.md) — Trade off control latency and noise filtering. - [MC Filter/Control Latency Tuning](../config_mc/filter_tuning.md) — Trade off control latency and noise filtering.
- [MC Setpoint Tuning (Trajectory Generator)](../config_mc/mc_trajectory_tuning.md) - [MC Setpoint Tuning (Trajectory Generator)](../config_mc/mc_trajectory_tuning.md)
- [MC Jerk-limited Type Trajectory](../config_mc/mc_jerk_limited_type_trajectory.md) - [MC Jerk-limited Type Trajectory](../config_mc/mc_jerk_limited_type_trajectory.md)
- [Multicopter Racer Setup](../config_mc/racer_setup.md) - [Multicopter Racer Setup](../config_mc/racer_setup.md)
@@ -167,7 +167,7 @@ Yes but it must be physically feasible. E.g. if you make a quadrotor where all m
- [Flight Controller Peripherals](../peripherals/index.md) - Setup specific sensors, optional sensors, actuators, and so on. - [Flight Controller Peripherals](../peripherals/index.md) - Setup specific sensors, optional sensors, actuators, and so on.
- [Advanced Configuration](../advanced_config/index.md) - Factory/OEM calibration, configuring advanced features, less-common configuration. - [Advanced Configuration](../advanced_config/index.md) - Factory/OEM calibration, configuring advanced features, less-common configuration.
- Vehicle-Centric Config/Tuning: - Vehicle-Centric Config/Tuning:
- **Multicopter Config/Tuning** - **Multicopter Config/Tuning**
- [Helicopter Config/Tuning](../config_heli/index.md) - [Helicopter Config/Tuning](../config_heli/index.md)
- [Fixed Wing Config/Tuning](../config_fw/index.md) - [Fixed Wing Config/Tuning](../config_fw/index.md)
- [VTOL Config/Tuning](../config_vtol/index.md) - [VTOL Config/Tuning](../config_vtol/index.md)
@@ -26,13 +26,13 @@ ARF 키트는 PX4와 호환되는 대부분의 비행 콘트롤러를 지원합
The Holybro [X500 V2 Kit](https://holybro.com/collections/x500-kits) includes almost all the required components: The Holybro [X500 V2 Kit](https://holybro.com/collections/x500-kits) includes almost all the required components:
- X500V2 프레임 키트 - X500V2 프레임 키트
- Body - Full Carbon Fiber Top & Bottom plate (144 x 144mm, 2mm thick) - Body - Full Carbon Fiber Top & Bottom plate (144 x 144mm, 2mm thick)
- Arm - High strength & ultra-lightweight 16mm carbon fiber tubes - Arm - High strength & ultra-lightweight 16mm carbon fiber tubes
- Landing gear - 16mm & 10mm diameter carbon fiber tubes - Landing gear - 16mm & 10mm diameter carbon fiber tubes
- Platform board - With mounting holes for GPS & popular companion computer - Platform board - With mounting holes for GPS & popular companion computer
- 이중 10mm Ø 로드 x 250mm 롱 레일 마운팅 시스템 - 이중 10mm Ø 로드 x 250mm 롱 레일 마운팅 시스템
- 2개의 배터리 스트랩이 있는 배터리 마운트 - 2개의 배터리 스트랩이 있는 배터리 마운트
- 설치용 수공구 - 설치용 수공구
- Holybro Motors - 2216 KV880 x6 (superseded - check [spare parts list](https://holybro.com/products/spare-parts-x500-v2-kit) for current version). - Holybro Motors - 2216 KV880 x6 (superseded - check [spare parts list](https://holybro.com/products/spare-parts-x500-v2-kit) for current version).
- Holybro BLHeli S ESC 20A x4 (superseded - check [spare parts list](https://holybro.com/products/spare-parts-x500-v2-kit) for current version). - Holybro BLHeli S ESC 20A x4 (superseded - check [spare parts list](https://holybro.com/products/spare-parts-x500-v2-kit) for current version).
- Propellers - 1045 x4 (superseded - check [spare parts list](https://holybro.com/products/spare-parts-x500-v2-kit) for current version). - Propellers - 1045 x4 (superseded - check [spare parts list](https://holybro.com/products/spare-parts-x500-v2-kit) for current version).
@@ -93,92 +93,92 @@ Tools are included to do the assembly, however you may need:
Estimate time to assemble is 55 min (25 minutes for frame, 30 minutes for autopilot installation/configuration) Estimate time to assemble is 55 min (25 minutes for frame, 30 minutes for autopilot installation/configuration)
1. Start by assembling the payload & battery holder. 1. Start by assembling the payload & battery holder.
Push the rubbers into grippers (Do not use sharp items to push them in!). Push the rubbers into grippers (Do not use sharp items to push them in!).
Next, pass the holders through the holder bars with the battery holder bases as Figure 3. Next, pass the holders through the holder bars with the battery holder bases as Figure 3.
![Landing Figure 1: Components](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/payload_holder_required_stuff.png) ![Landing Figure 1: Components](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/payload_holder_required_stuff.png)
_Figure 2_: Payload holder components _Figure 2_: Payload holder components
![Landing Figure 2: Assembled](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/payload_holder_assembled.png) ![Landing Figure 2: Assembled](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/payload_holder_assembled.png)
_Figure 3_: Payload holder assembled _Figure 3_: Payload holder assembled
2. The next is to go for attaching the bottom plate to the payload holder. 2. The next is to go for attaching the bottom plate to the payload holder.
You will need the parts as shown in Figure 4. You will need the parts as shown in Figure 4.
Then mount the base for power distribution board using nylon nuts as Figure 5. Then mount the base for power distribution board using nylon nuts as Figure 5.
Finally using 8 hex screws you can join the bottom plate to the payload holder (Figure 7) Finally using 8 hex screws you can join the bottom plate to the payload holder (Figure 7)
![Materials to attach bottom plate](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/topplate_holder_stuff.png) ![Materials to attach bottom plate](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/topplate_holder_stuff.png)
_Figure 4_: Needed Materials _Figure 4_: Needed Materials
![PDB mountbase](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/powerboard-mountbase.png) ![PDB mountbase](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/powerboard-mountbase.png)
_Figure 5_: PDB mount base _Figure 5_: PDB mount base
![PDB attachment](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/pdb_bottom_plate.png) ![PDB attachment](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/pdb_bottom_plate.png)
_Figure 6_: Mounted pdb with nylon nuts _Figure 6_: Mounted pdb with nylon nuts
![Bottom plate Final](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/bottom_plate_holder_final.png) ![Bottom plate Final](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/bottom_plate_holder_final.png)
_Figure 7_: Mounted Plate on payload holder _Figure 7_: Mounted Plate on payload holder
3. Let's gather the stuff needed for mounting landing gear as Figure 8. 3. Let's gather the stuff needed for mounting landing gear as Figure 8.
Use the hex screws to join landing gears to the bottom plate. Use the hex screws to join landing gears to the bottom plate.
You also need to open three hex screws on each of the leg stands so you can push them into carbon fiber pipes. You also need to open three hex screws on each of the leg stands so you can push them into carbon fiber pipes.
Do not forget to tighten them back again. Do not forget to tighten them back again.
![Attach Landing Gear Stuff](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/landing_gear_materials.png) ![Attach Landing Gear Stuff](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/landing_gear_materials.png)
_Figure 8_: Required parts for landing gear attachment _Figure 8_: Required parts for landing gear attachment
![Lanfing great to bottom plate](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/attached_landing_gear.png) ![Lanfing great to bottom plate](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/attached_landing_gear.png)
_Figure 9_: Landing gear attachment to the body _Figure 9_: Landing gear attachment to the body
4. We will gather all the arms now to mount the top plate. 4. We will gather all the arms now to mount the top plate.
Please pay attention that the motor numbers on arms are a match with the ones mentioned on the top plate. Please pay attention that the motor numbers on arms are a match with the ones mentioned on the top plate.
Fortunately, motors are mounted and ESCs have been connected in advance. Fortunately, motors are mounted and ESCs have been connected in advance.
Start by passing through all the screws as you have the arms fixed in their own places (They have a guide as shown in Figure 11 to ensure they are in place) and tighten all nylon nuts a bit. Start by passing through all the screws as you have the arms fixed in their own places (They have a guide as shown in Figure 11 to ensure they are in place) and tighten all nylon nuts a bit.
Then you can connect XT30 power connectors to the power board. Then you can connect XT30 power connectors to the power board.
Please keep in mind that the signal wires have to be passed through the top plate such that we can connect them later to Pixhawk. Please keep in mind that the signal wires have to be passed through the top plate such that we can connect them later to Pixhawk.
<img src="../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/needed_stuff_top_plate.png" width="700" title="Arms and top plate materials"> <img src="../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/needed_stuff_top_plate.png" width="700" title="Arms and top plate materials">
_Figure 10_: Connecting arms needed materials. _Figure 10_: Connecting arms needed materials.
<img src="../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/guide_for_arm_mount.png" width="700" title="Guide for the arms mount"> <img src="../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/guide_for_arm_mount.png" width="700" title="Guide for the arms mount">
_Figure 11_: Guide for the arms mount _Figure 11_: Guide for the arms mount
5. Tighten all 16 screws and nuts by using both hex wrench and nut driver. 5. Tighten all 16 screws and nuts by using both hex wrench and nut driver.
![Top plae mounted](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/finalized_top_plate.png) ![Top plae mounted](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/finalized_top_plate.png)
_Figure 12_: Mounted top plate _Figure 12_: Mounted top plate
6. Next you can mount your pixhawk on the top plate by using the stickers. 6. Next you can mount your pixhawk on the top plate by using the stickers.
It is recommended to have the direction of your Pixhawk's arrow the same as the one mentioned on the top plate. It is recommended to have the direction of your Pixhawk's arrow the same as the one mentioned on the top plate.
![Flight controller mounting stickers](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/pixhawk5x_stickertapes.png) ![Flight controller mounting stickers](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/pixhawk5x_stickertapes.png)
_Figure 13_: Sticker tapes on Pixhawk _Figure 13_: Sticker tapes on Pixhawk
7. If you want to mount the GPS on the companion computer plate, you can now secure the GPS mount onto it using 4 screws and nuts. 7. If you want to mount the GPS on the companion computer plate, you can now secure the GPS mount onto it using 4 screws and nuts.
<img src="../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/gps_mount_plate.png" width="400" title="Secure GPS mount onto companion plate"> <img src="../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/gps_mount_plate.png" width="400" title="Secure GPS mount onto companion plate">
_Figure 14_: Secure GPS mount onto companion plate _Figure 14_: Secure GPS mount onto companion plate
8. 테이프를 사용하여 GPS를 GPS 마스트 상단에 붙이고 GPS 마스트를 장착합니다. 8. 테이프를 사용하여 GPS를 GPS 마스트 상단에 붙이고 GPS 마스트를 장착합니다.
Make sure the arrow on the gps is pointing forward (Figure 15). Make sure the arrow on the gps is pointing forward (Figure 15).
<img src="../../assets/airframes/multicopter/x500_holybro_pixhawk4/gps2.jpg" width="400" title="Figure 16: GPS and mast"> <img src="../../assets/airframes/multicopter/x500_holybro_pixhawk4/gps2.jpg" width="400" title="Figure 16: GPS and mast">
_Figure 15_: GPS and mast _Figure 15_: GPS and mast
9. Finally, you can connect the Pixhawk interfaces such as telemetry radio to 'TELEM1' and motors signal cables accordingly. 9. Finally, you can connect the Pixhawk interfaces such as telemetry radio to 'TELEM1' and motors signal cables accordingly.
@@ -204,14 +204,14 @@ First update the firmware, airframe, and actuator mappings:
- [Airframe](../config/airframe.md) - [Airframe](../config/airframe.md)
You will need to select the _Holybro X500 V2_ airframe (**Quadrotor x > Holybro 500 V2**) You will need to select the _Holybro X500 V2_ airframe (**Quadrotor x > Holybro 500 V2**)
![QGroundControl - Select HolyBro 500 airframe](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/x500v2_airframe_qgc.png) ![QGroundControl - Select HolyBro 500 airframe](../../assets/airframes/multicopter/x500_v2_holybro_pixhawk5x/x500v2_airframe_qgc.png)
- [Actuators](../config/actuators.md) - [Actuators](../config/actuators.md)
- You should not need to update the vehicle geometry (as this is a preconfigured airframe). - You should not need to update the vehicle geometry (as this is a preconfigured airframe).
- Assign actuator functions to outputs to match your wiring. - Assign actuator functions to outputs to match your wiring.
- Test the configuration using the sliders. - Test the configuration using the sliders.
그리고, 설치후에 필수적인 설정 작업과 보정 작업을 진행하여야 합니다. 그리고, 설치후에 필수적인 설정 작업과 보정 작업을 진행하여야 합니다.
+15 -15
View File
@@ -20,12 +20,12 @@ Key airframe features:
- Removable V tail or conventional tail options included - Removable V tail or conventional tail options included
- Threaded inserts in the wings and fuselage top for external mounting - Threaded inserts in the wings and fuselage top for external mounting
- Numerous mounting features - Numerous mounting features
- Top antenna hole - Top antenna hole
- Top GPS cover - Top GPS cover
- Side "T" antenna mounts - Side "T" antenna mounts
- Rear electronics tray - Rear electronics tray
- Front facing "action cam" cutout - Front facing "action cam" cutout
- Front facing FPV camera cutout - Front facing FPV camera cutout
- Removable wings - Removable wings
- Low stall speed - Low stall speed
- Gentle handling - Gentle handling
@@ -69,10 +69,10 @@ Key build features
- [6s2p 18650 LiIon flight battery](https://www.upgradeenergytech.com/product-page/6s-22-2v-5600mah-30c-dark-lithium-liion-drone-battery) (select XT60 connector) - [6s2p 18650 LiIon flight battery](https://www.upgradeenergytech.com/product-page/6s-22-2v-5600mah-30c-dark-lithium-liion-drone-battery) (select XT60 connector)
- [Custom designed 3D printed parts](https://github.com/PX4/PX4-user_guide/raw/main/assets/airframes/fw/reptile_dragon_2/rd2_3d_printed_parts.zip) - [Custom designed 3D printed parts](https://github.com/PX4/PX4-user_guide/raw/main/assets/airframes/fw/reptile_dragon_2/rd2_3d_printed_parts.zip)
- ARK6X carrier mount - ARK6X carrier mount
- Holybro Pixhawk 5x carrier mount - Holybro Pixhawk 5x carrier mount
- FPV pod and camera mount - FPV pod and camera mount
- Pitot static probe "plug" adapter - Pitot static probe "plug" adapter
- [Custom designed power distribution PCB](https://github.com/PX4/PX4-user_guide/raw/main/assets/airframes/fw/reptile_dragon_2/xt30_power_distro_pcb.zip) - [Custom designed power distribution PCB](https://github.com/PX4/PX4-user_guide/raw/main/assets/airframes/fw/reptile_dragon_2/xt30_power_distro_pcb.zip)
@@ -426,15 +426,15 @@ Prior to the first flight, a comprehensive preflight must be conducted.
I recommend checking the following items: I recommend checking the following items:
- Sensor calibration (QGC) - Sensor calibration (QGC)
- Mag calibration - Mag calibration
- Accelerometer calibration - Accelerometer calibration
- 대기속도 보정 - 대기속도 보정
- Level horizon calibration - Level horizon calibration
- Check control surface deflection - Check control surface deflection
- Right stick -> Right aileron goes up, left aileron goes down - Right stick -> Right aileron goes up, left aileron goes down
- Left stick -> Left aileron goes up, right aileron goes down - Left stick -> Left aileron goes up, right aileron goes down
- Stick back -> elevator goes up - Stick back -> elevator goes up
-Stick forward -> elevator goes down -Stick forward -> elevator goes down
- Left rudder -> Rudder goes left - Left rudder -> Rudder goes left
- Right rudder -> Rudder goes right - Right rudder -> Rudder goes right
- Check Px4 inputs (in `stabilized mode`) - Check Px4 inputs (in `stabilized mode`)
+3 -3
View File
@@ -98,11 +98,11 @@ The mapping between flight controller outputs and specific controls/motors depen
Assembly information is covered in several sections: Assembly information is covered in several sections:
- [Basic Assembly](../assembly/index.md) contains topics shows the setup of core components for a number of popular [flight controllers](../flight_controller/index.md). - [Basic Assembly](../assembly/index.md) contains topics shows the setup of core components for a number of popular [flight controllers](../flight_controller/index.md).
가이드가 없는 비행 컨트롤러는 일반적으로 거의 같은 방법으로 설정됩니다(거의 항상 유사한 설정 가이드가 포함됨). 가이드가 없는 비행 컨트롤러는 일반적으로 거의 같은 방법으로 설정됩니다(거의 항상 유사한 설정 가이드가 포함됨).
- [Peripherals](../peripherals/index.md) contains information about other peripherals, including [Airspeed Sensors](../sensor/airspeed.md). - [Peripherals](../peripherals/index.md) contains information about other peripherals, including [Airspeed Sensors](../sensor/airspeed.md).
- [Airframes Reference > VTOL](../airframes/airframe_reference.md#vtol) explains which flight controller outputs must be connected to different flight controls for each airframe configuration: - [Airframes Reference > VTOL](../airframes/airframe_reference.md#vtol) explains which flight controller outputs must be connected to different flight controls for each airframe configuration:
- 정의된 기체의 구성을 선택하십시오. 이는 비행을 위하여 사전 튜닝이 충분하기 때문입니다(미세 조정만 필요할 수 있음). - 정의된 기체의 구성을 선택하십시오. 이는 비행을 위하여 사전 튜닝이 충분하기 때문입니다(미세 조정만 필요할 수 있음).
- 그렇지 않으면, 기체와 일치하는 "일반 기체"를 선택하십시오. - 그렇지 않으면, 기체와 일치하는 "일반 기체"를 선택하십시오.
In addition, build logs showing how others have set up different types of vehicles are provided as sub topics. In addition, build logs showing how others have set up different types of vehicles are provided as sub topics.
For example see [FunCub QuadPlane](../frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md). For example see [FunCub QuadPlane](../frames_vtol/vtol_quadplane_fun_cub_vtol_pixhawk.md).
+277
View File
@@ -0,0 +1,277 @@
# dds_topics.yaml — PX4 Topics Exposed to ROS 2
:::info
This document is [auto-generated](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/msg/generate_msg_docs.py) from the source code.
:::
The [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) file specifies which uORB message definitions are compiled into the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) module when [PX4 is built](../middleware/uxrce_dds.md#code-generation), and hence which topics are available for ROS 2 applications to subscribe or publish (by default).
This document shows a markdown-rendered version of [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), listing the publications, subscriptions, and so on.
## Publications
| Topic | 형식 | Rate Limit |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
| `/fmu/out/register_ext_component_reply` | [px4_msgs::msg::RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md) | |
| `/fmu/out/arming_check_request` | [px4_msgs::msg::ArmingCheckRequest](../msg_docs/ArmingCheckRequest.md) | 5.0 |
| `/fmu/out/mode_completed` | [px4_msgs::msg::ModeCompleted](../msg_docs/ModeCompleted.md) | 50.0 |
| `/fmu/out/battery_status` | [px4_msgs::msg::BatteryStatus](../msg_docs/BatteryStatus.md) | 1.0 |
| `/fmu/out/collision_constraints` | [px4_msgs::msg::CollisionConstraints](../msg_docs/CollisionConstraints.md) | 50.0 |
| `/fmu/out/estimator_status_flags` | [px4_msgs::msg::EstimatorStatusFlags](../msg_docs/EstimatorStatusFlags.md) | 5.0 |
| `/fmu/out/failsafe_flags` | [px4_msgs::msg::FailsafeFlags](../msg_docs/FailsafeFlags.md) | 5.0 |
| `/fmu/out/manual_control_setpoint` | [px4_msgs::msg::ManualControlSetpoint](../msg_docs/ManualControlSetpoint.md) | 25.0 |
| `/fmu/out/message_format_response` | [px4_msgs::msg::MessageFormatResponse](../msg_docs/MessageFormatResponse.md) | |
| `/fmu/out/position_setpoint_triplet` | [px4_msgs::msg::PositionSetpointTriplet](../msg_docs/PositionSetpointTriplet.md) | 5.0 |
| `/fmu/out/sensor_combined` | [px4_msgs::msg::SensorCombined](../msg_docs/SensorCombined.md) | |
| `/fmu/out/timesync_status` | [px4_msgs::msg::TimesyncStatus](../msg_docs/TimesyncStatus.md) | 10.0 |
| `/fmu/out/vehicle_land_detected` | [px4_msgs::msg::VehicleLandDetected](../msg_docs/VehicleLandDetected.md) | 5.0 |
| `/fmu/out/vehicle_attitude` | [px4_msgs::msg::VehicleAttitude](../msg_docs/VehicleAttitude.md) | |
| `/fmu/out/vehicle_control_mode` | [px4_msgs::msg::VehicleControlMode](../msg_docs/VehicleControlMode.md) | 50.0 |
| `/fmu/out/vehicle_command_ack` | [px4_msgs::msg::VehicleCommandAck](../msg_docs/VehicleCommandAck.md) | |
| `/fmu/out/vehicle_global_position` | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) | 50.0 |
| `/fmu/out/vehicle_gps_position` | [px4_msgs::msg::SensorGps](../msg_docs/SensorGps.md) | 50.0 |
| `/fmu/out/vehicle_local_position` | [px4_msgs::msg::VehicleLocalPosition](../msg_docs/VehicleLocalPosition.md) | 50.0 |
| `/fmu/out/vehicle_odometry` | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md) | |
| `/fmu/out/vehicle_status` | [px4_msgs::msg::VehicleStatus](../msg_docs/VehicleStatus.md) | 5.0 |
| `/fmu/out/airspeed_validated` | [px4_msgs::msg::AirspeedValidated](../msg_docs/AirspeedValidated.md) | 50.0 |
| `/fmu/out/vtol_vehicle_status` | [px4_msgs::msg::VtolVehicleStatus](../msg_docs/VtolVehicleStatus.md) | |
| `/fmu/out/home_position` | [px4_msgs::msg::HomePosition](../msg_docs/HomePosition.md) | 5.0 |
## Subscriptions
| Topic | 형식 |
| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| /fmu/in/register_ext_component_request | [px4_msgs::msg::RegisterExtComponentRequest](../msg_docs/RegisterExtComponentRequest.md) |
| /fmu/in/unregister_ext_component | [px4_msgs::msg::UnregisterExtComponent](../msg_docs/UnregisterExtComponent.md) |
| /fmu/in/config_overrides_request | [px4_msgs::msg::ConfigOverrides](../msg_docs/ConfigOverrides.md) |
| /fmu/in/arming_check_reply | [px4_msgs::msg::ArmingCheckReply](../msg_docs/ArmingCheckReply.md) |
| /fmu/in/message_format_request | [px4_msgs::msg::MessageFormatRequest](../msg_docs/MessageFormatRequest.md) |
| /fmu/in/mode_completed | [px4_msgs::msg::ModeCompleted](../msg_docs/ModeCompleted.md) |
| /fmu/in/config_control_setpoints | [px4_msgs::msg::VehicleControlMode](../msg_docs/VehicleControlMode.md) |
| /fmu/in/distance_sensor | [px4_msgs::msg::DistanceSensor](../msg_docs/DistanceSensor.md) |
| /fmu/in/manual_control_input | [px4_msgs::msg::ManualControlSetpoint](../msg_docs/ManualControlSetpoint.md) |
| /fmu/in/offboard_control_mode | [px4_msgs::msg::OffboardControlMode](../msg_docs/OffboardControlMode.md) |
| /fmu/in/onboard_computer_status | [px4_msgs::msg::OnboardComputerStatus](../msg_docs/OnboardComputerStatus.md) |
| /fmu/in/obstacle_distance | [px4_msgs::msg::ObstacleDistance](../msg_docs/ObstacleDistance.md) |
| /fmu/in/sensor_optical_flow | [px4_msgs::msg::SensorOpticalFlow](../msg_docs/SensorOpticalFlow.md) |
| /fmu/in/goto_setpoint | [px4_msgs::msg::GotoSetpoint](../msg_docs/GotoSetpoint.md) |
| /fmu/in/telemetry_status | [px4_msgs::msg::TelemetryStatus](../msg_docs/TelemetryStatus.md) |
| /fmu/in/trajectory_setpoint | [px4_msgs::msg::TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) |
| /fmu/in/vehicle_attitude_setpoint | [px4_msgs::msg::VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) |
| /fmu/in/vehicle_mocap_odometry | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md) |
| /fmu/in/vehicle_rates_setpoint | [px4_msgs::msg::VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) |
| /fmu/in/vehicle_visual_odometry | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md) |
| /fmu/in/vehicle_command | [px4_msgs::msg::VehicleCommand](../msg_docs/VehicleCommand.md) |
| /fmu/in/vehicle_command_mode_executor | [px4_msgs::msg::VehicleCommand](../msg_docs/VehicleCommand.md) |
| /fmu/in/vehicle_thrust_setpoint | [px4_msgs::msg::VehicleThrustSetpoint](../msg_docs/VehicleThrustSetpoint.md) |
| /fmu/in/vehicle_torque_setpoint | [px4_msgs::msg::VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) |
| /fmu/in/actuator_motors | [px4_msgs::msg::ActuatorMotors](../msg_docs/ActuatorMotors.md) |
| /fmu/in/actuator_servos | [px4_msgs::msg::ActuatorServos](../msg_docs/ActuatorServos.md) |
| /fmu/in/aux_global_position | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) |
| /fmu/in/fixed_wing_longitudinal_setpoint | [px4_msgs::msg::FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md) |
| /fmu/in/fixed_wing_lateral_setpoint | [px4_msgs::msg::FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) |
| /fmu/in/longitudinal_control_configuration | [px4_msgs::msg::LongitudinalControlConfiguration](../msg_docs/LongitudinalControlConfiguration.md) |
| /fmu/in/lateral_control_configuration | [px4_msgs::msg::LateralControlConfiguration](../msg_docs/LateralControlConfiguration.md) |
## Subscriptions Multi
None
## Not Exported
These messages are not listed in the yaml file.
They are not build into the module, and hence are neither published or subscribed.
:::details
See messages
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [EventV0](../msg_docs/EventV0.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [RoverThrottleSetpoint](../msg_docs/RoverThrottleSetpoint.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [GimbalDeviceAttitudeStatus](../msg_docs/GimbalDeviceAttitudeStatus.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [RoverAttitudeSetpoint](../msg_docs/RoverAttitudeSetpoint.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [InputRc](../msg_docs/InputRc.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [Event](../msg_docs/Event.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [RoverSteeringSetpoint](../msg_docs/RoverSteeringSetpoint.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [RoverVelocityStatus](../msg_docs/RoverVelocityStatus.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [Ping](../msg_docs/Ping.md)
- [LedControl](../msg_docs/LedControl.md)
- [Wind](../msg_docs/Wind.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [Gripper](../msg_docs/Gripper.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [LandingGear](../msg_docs/LandingGear.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [RoverRateSetpoint](../msg_docs/RoverRateSetpoint.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [RoverVelocitySetpoint](../msg_docs/RoverVelocitySetpoint.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [Rpm](../msg_docs/Rpm.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [TransponderReport](../msg_docs/TransponderReport.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [Mission](../msg_docs/Mission.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [RoverPositionSetpoint](../msg_docs/RoverPositionSetpoint.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
:::
+7 -9
View File
@@ -38,7 +38,7 @@ The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is gen
The agent has no dependency on client code. The agent has no dependency on client code.
It can be built standalone or in a ROS 2 workspace, or installed as a snap package on Ubuntu. It can be built standalone or in a ROS 2 workspace, or installed as a snap package on Ubuntu.
When PX4 is built, a code generator uses the uORB message definitions in the source tree ([PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg)) to compile support for the subset of uORB topics in [PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) into [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client). When PX4 is built, a code generator uses the uORB message definitions in the source tree ([PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg)) to compile support for the subset of uORB topics in [/src/modules/uxrce_dds_client/dds_topics.yaml](../middleware/dds_topics.md) into [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client).
PX4 main or release builds automatically export the set of uORB messages definitions in the build to an associated branch in [PX4/px4_msgs](https://github.com/PX4/px4_msgs). PX4 main or release builds automatically export the set of uORB messages definitions in the build to an associated branch in [PX4/px4_msgs](https://github.com/PX4/px4_msgs).
@@ -326,13 +326,11 @@ ROS_DOMAIN_ID=3 PX4_UXRCE_DDS_PORT=9999 PX4_UXRCE_DDS_NS=drone make px4_sitl gz_
## Supported uORB Messages ## Supported uORB Messages
The set of [PX4 uORB topics](../msg_docs/index.md) that are exposed through the client are set in [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml). The set of [PX4 uORB topics](../msg_docs/index.md) that are exposed through the client are set in [dds_topics.yaml](../middleware/dds_topics.md).
The topics are release specific (support is compiled into [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) at build time). The topics are release specific (support is compiled into [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) at build time).
While most releases should support a very similar set of messages, to be certain you would need to check the yaml file for your particular release. While most releases should support a very similar set of messages, to be certain you would need to check the yaml file for your particular release.
<!-- Jublish the set we use?: https://github.com/PX4/px4_msgs/issues/22 -->
Note that ROS 2/DDS needs to have the _same_ message definitions that were used to create the uXRCE-DDS client module in the PX4 Firmware in order to interpret the messages. Note that ROS 2/DDS needs to have the _same_ message definitions that were used to create the uXRCE-DDS client module in the PX4 Firmware in order to interpret the messages.
The message definitions are stored in the ROS 2 interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs), and they are automatically synchronized by CI on the `main` and release branches. The message definitions are stored in the ROS 2 interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs), and they are automatically synchronized by CI on the `main` and release branches.
Note that all the messages from PX4 source code are present in the repository, but only those listed in `dds_topics.yaml` will be available as ROS 2 topics. Note that all the messages from PX4 source code are present in the repository, but only those listed in `dds_topics.yaml` will be available as ROS 2 topics.
@@ -349,21 +347,21 @@ Therefore,
``` ```
::: info ::: info
Technically, [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) completely defines the relationship between PX4 uORB topics and ROS 2 messages. Technically, [dds_topics.yaml](../middleware/dds_topics.md) completely defines the relationship between PX4 uORB topics and ROS 2 messages.
For more information see [DDS Topics YAML](#dds-topics-yaml) below. For more information see [DDS Topics YAML](#dds-topics-yaml) below.
::: :::
## Customizing the Namespace ## Customizing the Namespace
Custom topic and service namespaces can be applied at build time (changing [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml)) or at runtime (which is useful for multi vehicle operations): Custom topic and service namespaces can be applied at build time (changing [dds_topics.yaml](../middleware/dds_topics.md)) or at runtime (which is useful for multi vehicle operations):
- One possibility is to use the `-n` option when starting the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) from command line. - One possibility is to use the `-n` option when starting the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) from command line.
This technique can be used both in simulation and real vehicles. This technique can be used both in simulation and real vehicles.
- A custom namespace can be provided for simulations (only) by setting the environment variable `PX4_UXRCE_DDS_NS` before starting the simulation. - A custom namespace can be provided for simulations (only) by setting the environment variable `PX4_UXRCE_DDS_NS` before starting the simulation.
:::info :::info
Changing the namespace at runtime will append the desired namespace as a prefix to all `topic` fields in [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) and all [service servers](#dds-ros-2-services). Changing the namespace at runtime will append the desired namespace as a prefix to all `topic` fields in [dds_topics.yaml](../middleware/dds_topics.md) and all [service servers](#dds-ros-2-services).
Therefore, commands like: Therefore, commands like:
```sh ```sh
@@ -420,7 +418,7 @@ Deadline, lifespan, and lease durations are also all set to "default".
## DDS Topics YAML ## DDS Topics YAML
The PX4 yaml file [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) defines the set of PX4 uORB topics that are built into firmware and published. The PX4 [dds_topics.yaml](../middleware/dds_topics.md) file defines the set of PX4 uORB topics that are built into firmware and published.
More precisely, it completely defines the relationship/pairing between PX4 uORB and ROS 2 messages. More precisely, it completely defines the relationship/pairing between PX4 uORB and ROS 2 messages.
The file is structured as follows: The file is structured as follows:
@@ -549,7 +547,7 @@ Take a look at the [client startup section](#starting-the-client) to learn how t
#### New file for setting which topics are published #### New file for setting which topics are published
The list of topics that are published and subscribed for a particular firmware is now managed by the [dds_topic.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) configuration file, which replaces [urtps_bridge_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/release/1.13/msg/tools/urtps_bridge_topics.yaml) The list of topics that are published and subscribed for a particular firmware is now managed by the [dds_topics.yaml](../middleware/dds_topics.md) configuration file, which replaces [urtps_bridge_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/release/1.13/msg/tools/urtps_bridge_topics.yaml)
See [Supported uORB Messages](#supported-uorb-messages) and [DDS Topics YAML](#dds-topics-yaml) sections for more information. See [Supported uORB Messages](#supported-uorb-messages) and [DDS Topics YAML](#dds-topics-yaml) sections for more information.
+119 -119
View File
@@ -29,151 +29,151 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
2. Create a new C file in that directory named **px4_simple_app.c**: 2. Create a new C file in that directory named **px4_simple_app.c**:
- 기본 헤더를 페이지 상단에 복사합니다. - 기본 헤더를 페이지 상단에 복사합니다.
이것은 기여한 모든 파일에 첨부하여야 합니다. 이것은 기여한 모든 파일에 첨부하여야 합니다.
```c ```c
/**************************************************************************** /****************************************************************************
* *
* Copyright (c) 2012-2022 PX4 Development Team. All rights reserved. * Copyright (c) 2012-2022 PX4 Development Team. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the * the documentation and/or other materials provided with the
* distribution. * distribution.
* 3. Neither the name PX4 nor the names of its contributors may be * 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software * used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
* *
****************************************************************************/ ****************************************************************************/
``` ```
- 기본 헤더 아래에 다음 코드를 복사합니다. - 기본 헤더 아래에 다음 코드를 복사합니다.
이것은 기여한 모든 파일에 첨부하여야 합니다. 이것은 기여한 모든 파일에 첨부하여야 합니다.
```c ```c
/** /**
* @file px4_simple_app.c * @file px4_simple_app.c
* Minimal application example for PX4 autopilot * Minimal application example for PX4 autopilot
* *
* @author Example User <mail@example.com> * @author Example User <mail@example.com>
*/ */
#include <px4_platform_common/log.h> #include <px4_platform_common/log.h>
__EXPORT int px4_simple_app_main(int argc, char *argv[]); __EXPORT int px4_simple_app_main(int argc, char *argv[]);
int px4_simple_app_main(int argc, char *argv[]) int px4_simple_app_main(int argc, char *argv[])
{ {
PX4_INFO("Hello Sky!"); PX4_INFO("Hello Sky!");
return OK; return OK;
} }
``` ```
:::tip :::tip
The main function must be named `<module_name>_main` and exported from the module as shown. The main function must be named `<module_name>_main` and exported from the module as shown.
::: :::
:::tip :::tip
`PX4_INFO` is the equivalent of `printf` for the PX4 shell (included from **px4_platform_common/log.h**). `PX4_INFO` is the equivalent of `printf` for the PX4 shell (included from **px4_platform_common/log.h**).
There are different log levels: `PX4_INFO`, `PX4_WARN`, `PX4_ERR`, `PX4_DEBUG`. There are different log levels: `PX4_INFO`, `PX4_WARN`, `PX4_ERR`, `PX4_DEBUG`.
Warnings and errors are additionally added to the [ULog](../dev_log/ulog_file_format.md) and shown on [Flight Review](https://logs.px4.io/). Warnings and errors are additionally added to the [ULog](../dev_log/ulog_file_format.md) and shown on [Flight Review](https://logs.px4.io/).
::: :::
3. Create and open a new _cmake_ definition file named **CMakeLists.txt**. 3. Create and open a new _cmake_ definition file named **CMakeLists.txt**.
아래 텍스트를 복사하십시오. 아래 텍스트를 복사하십시오.
```cmake ```cmake
############################################################################ ############################################################################
# #
# Copyright (c) 2015 PX4 Development Team. All rights reserved. # Copyright (c) 2015 PX4 Development Team. All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions # modification, are permitted provided that the following conditions
# are met: # are met:
# #
# 1. Redistributions of source code must retain the above copyright # 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer. # notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright # 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in # notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the # the documentation and/or other materials provided with the
# distribution. # distribution.
# 3. Neither the name PX4 nor the names of its contributors may be # 3. Neither the name PX4 nor the names of its contributors may be
# used to endorse or promote products derived from this software # used to endorse or promote products derived from this software
# without specific prior written permission. # without specific prior written permission.
# #
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE. # POSSIBILITY OF SUCH DAMAGE.
# #
############################################################################ ############################################################################
px4_add_module( px4_add_module(
MODULE examples__px4_simple_app MODULE examples__px4_simple_app
MAIN px4_simple_app MAIN px4_simple_app
STACK_MAIN 2000 STACK_MAIN 2000
SRCS SRCS
px4_simple_app.c px4_simple_app.c
DEPENDS DEPENDS
) )
``` ```
The `px4_add_module()` method builds a static library from a module description. 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`). - The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`).
- The `MAIN` block lists the entry point of the module, which registers the command with NuttX so that it can be called from the PX4 shell or SITL console. - The `MAIN` block lists the entry point of the module, which registers the command with NuttX so that it can be called from the PX4 shell or SITL console.
:::tip :::tip
The `px4_add_module()` format is documented in [PX4-Autopilot/cmake/px4_add_module.cmake](https://github.com/PX4/PX4-Autopilot/blob/main/cmake/px4_add_module.cmake). <!-- NEED px4_version --> The `px4_add_module()` format is documented in [PX4-Autopilot/cmake/px4_add_module.cmake](https://github.com/PX4/PX4-Autopilot/blob/main/cmake/px4_add_module.cmake). <!-- NEED px4_version -->
::: :::
::: info ::: info
If you specify `DYNAMIC` as an option to `px4_add_module`, a _shared library_ is created instead of a static library on POSIX platforms (these can be loaded without having to recompile PX4, and shared to others as binaries rather than source code). If you specify `DYNAMIC` as an option to `px4_add_module`, a _shared library_ is created instead of a static library on POSIX platforms (these can be loaded without having to recompile PX4, and shared to others as binaries rather than source code).
Your app will not become a builtin command, but ends up in a separate file called `examples__px4_simple_app.px4mod`. Your app will not become a builtin command, but ends up in a separate file called `examples__px4_simple_app.px4mod`.
You can then run your command by loading the file at runtime using the `dyn` command: `dyn ./examples__px4_simple_app.px4mod` You can then run your command by loading the file at runtime using the `dyn` command: `dyn ./examples__px4_simple_app.px4mod`
::: :::
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)). 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)).
아래 텍스트를 복사하십시오. 아래 텍스트를 복사하십시오.
``` ```
menuconfig EXAMPLES_PX4_SIMPLE_APP menuconfig EXAMPLES_PX4_SIMPLE_APP
bool "px4_simple_app" bool "px4_simple_app"
default n default n
---help--- ---help---
Enable support for px4_simple_app Enable support for px4_simple_app
``` ```
## 애플리케이션/펌웨어 빌드 ## 애플리케이션/펌웨어 빌드
+11 -11
View File
@@ -347,7 +347,7 @@ CONFIG_DRIVERS_RPM_CAPTURE=y
Additionally, to enable the module: Additionally, to enable the module:
- Set [ICE_EN](../advanced_config/parameter_reference.md#ICE_EN) - Set [ICE_EN](../advanced_config/parameter_reference.md#ICE_EN)
to true and adjust the other `ICE_` module parameters according to your needs. to true and adjust the other `ICE_` module parameters according to your needs.
- Set [RPM_CAP_ENABLE](../advanced_config/parameter_reference.md#RPM_CAP_ENABLE) to true. - Set [RPM_CAP_ENABLE](../advanced_config/parameter_reference.md#RPM_CAP_ENABLE) to true.
The module outputs control signals for ignition, throttle, and choke, The module outputs control signals for ignition, throttle, and choke,
@@ -367,8 +367,8 @@ The state machine:
- Checks if [Rpm.msg](../msg_docs/Rpm.md) is updated to know if the engine is running - Checks if [Rpm.msg](../msg_docs/Rpm.md) is updated to know if the engine is running
- Allows for user inputs from: - Allows for user inputs from:
- AUX{N} - AUX{N}
- Arming state in [VehicleStatus.msg](../msg_docs/VehicleStatus.md) - Arming state in [VehicleStatus.msg](../msg_docs/VehicleStatus.md)
The module publishes [InternalCombustionEngineControl.msg](../msg_docs/InternalCombustionEngineControl.md). The module publishes [InternalCombustionEngineControl.msg](../msg_docs/InternalCombustionEngineControl.md).
@@ -484,7 +484,7 @@ The normal log is always a superset of the mission log.
The implementation uses two threads: The implementation uses two threads:
- The main thread, running at a fixed rate (or polling on a topic if started with -p) and checking for - The main thread, running at a fixed rate (or polling on a topic if started with -p) and checking for
data updates data updates
- The writer thread, writing data to the file - The writer thread, writing data to the file
In between there is a write buffer with configurable size (and another fixed-size buffer for In between there is a write buffer with configurable size (and another fixed-size buffer for
@@ -688,9 +688,9 @@ There are 2 environment variables used for configuration: `replay`, which must b
the log file to be replayed. The second is the mode, specified via `replay_mode`: the log file to be replayed. The second is the mode, specified via `replay_mode`:
- `replay_mode=ekf2`: specific EKF2 replay mode. It can only be used with the ekf2 module, but allows the replay - `replay_mode=ekf2`: specific EKF2 replay mode. It can only be used with the ekf2 module, but allows the replay
to run as fast as possible. to run as fast as possible.
- Generic otherwise: this can be used to replay any module(s), but the replay will be done with the same speed as the - Generic otherwise: this can be used to replay any module(s), but the replay will be done with the same speed as the
log was recorded. log was recorded.
The module is typically used together with uORB publisher rules, to specify which messages should be replayed. The module is typically used together with uORB publisher rules, to specify which messages should be replayed.
The replay module will just publish all messages that are found in the log. It also applies the parameters from The replay module will just publish all messages that are found in the log. It also applies the parameters from
@@ -842,12 +842,12 @@ it into a more usable form, and publishes it for the rest of the system.
The provided functionality includes: The provided functionality includes:
- Read the output from the sensor drivers (`SensorGyro`, etc.). - Read the output from the sensor drivers (`SensorGyro`, etc.).
If there are multiple of the same type, do voting and failover handling. If there are multiple of the same type, do voting and failover handling.
Then apply the board rotation and temperature calibration (if enabled). And finally publish the data; one of the Then apply the board rotation and temperature calibration (if enabled). And finally publish the data; one of the
topics is `SensorCombined`, used by many parts of the system. topics is `SensorCombined`, used by many parts of the system.
- Make sure the sensor drivers get the updated calibration parameters (scale & offset) when the parameters change or - Make sure the sensor drivers get the updated calibration parameters (scale & offset) when the parameters change or
on startup. The sensor drivers use the ioctl interface for parameter updates. For this to work properly, the on startup. The sensor drivers use the ioctl interface for parameter updates. For this to work properly, the
sensor drivers must already be running when `sensors` is started. sensor drivers must already be running when `sensors` is started.
- Do sensor consistency checks and publish the `SensorsStatusImu` topic. - Do sensor consistency checks and publish the `SensorsStatusImu` topic.
### 구현 ### 구현
+20 -20
View File
@@ -25,38 +25,38 @@ Other examples in Python can be found here: [integrationtests/python_src/px4_it/
1. Open the terminal and go to `~/catkin_ws/src` directory 1. Open the terminal and go to `~/catkin_ws/src` directory
```sh ```sh
roscd # Should cd into ~/catkin_ws/devel roscd # Should cd into ~/catkin_ws/devel
cd .. cd ..
cd src cd src
``` ```
2. In the `~/catkin_ws/src` directory create a new package named `offboard_py` (in this case) with the `rospy` dependency: 2. In the `~/catkin_ws/src` directory create a new package named `offboard_py` (in this case) with the `rospy` dependency:
```sh ```sh
catkin_create_pkg offboard_py rospy catkin_create_pkg offboard_py rospy
``` ```
3. Build the new package in the `~/catkin_ws/` directory: 3. Build the new package in the `~/catkin_ws/` directory:
```sh ```sh
cd .. # Assuming previous directory to be ~/catkin_ws/src cd .. # Assuming previous directory to be ~/catkin_ws/src
catkin build catkin build
source devel/setup.bash source devel/setup.bash
``` ```
4. You should now be able to cd into the package by using: 4. You should now be able to cd into the package by using:
```sh ```sh
roscd offboard_py roscd offboard_py
``` ```
5. To store your Python files, create a new folder called `/scripts` on the package: 5. To store your Python files, create a new folder called `/scripts` on the package:
```sh ```sh
mkdir scripts mkdir scripts
cd scripts cd scripts
``` ```
## 코드 ## 코드
+31 -31
View File
@@ -37,63 +37,63 @@ To build and run the example:
2. Create and navigate into a new colcon workspace directory using: 2. Create and navigate into a new colcon workspace directory using:
```sh ```sh
mkdir -p ~/ws_offboard_control/src/ mkdir -p ~/ws_offboard_control/src/
cd ~/ws_offboard_control/src/ cd ~/ws_offboard_control/src/
``` ```
3. Clone the [px4_msgs](https://github.com/PX4/px4_msgs) repo to the `/src` directory (this repo is needed in every ROS 2 PX4 workspace!): 3. Clone the [px4_msgs](https://github.com/PX4/px4_msgs) repo to the `/src` directory (this repo is needed in every ROS 2 PX4 workspace!):
```sh ```sh
git clone https://github.com/PX4/px4_msgs.git git clone https://github.com/PX4/px4_msgs.git
# checkout the matching release branch if not using PX4 main. # checkout the matching release branch if not using PX4 main.
``` ```
4. Clone the example repository [px4_ros_com](https://github.com/PX4/px4_ros_com) to the `/src` directory: 4. Clone the example repository [px4_ros_com](https://github.com/PX4/px4_ros_com) to the `/src` directory:
```sh ```sh
git clone https://github.com/PX4/px4_ros_com.git git clone https://github.com/PX4/px4_ros_com.git
``` ```
5. Source the ROS 2 development environment into the current terminal and compile the workspace using `colcon`: 5. Source the ROS 2 development environment into the current terminal and compile the workspace using `colcon`:
:::: tabs :::: tabs
::: tab humble ::: tab humble
```sh ```sh
cd .. cd ..
source /opt/ros/humble/setup.bash source /opt/ros/humble/setup.bash
colcon build colcon build
``` ```
::: :::
::: tab foxy ::: tab foxy
```sh ```sh
cd .. cd ..
source /opt/ros/foxy/setup.bash source /opt/ros/foxy/setup.bash
colcon build colcon build
``` ```
::: :::
:::: ::::
6. Source the `local_setup.bash`: 6. Source the `local_setup.bash`:
```sh ```sh
source install/local_setup.bash source install/local_setup.bash
``` ```
7. Launch the example. 7. Launch the example.
``` ```
ros2 run px4_ros_com offboard_control ros2 run px4_ros_com offboard_control
``` ```
The vehicle should arm, ascend 5 metres, and then wait (perpetually). The vehicle should arm, ascend 5 metres, and then wait (perpetually).
+140 -140
View File
@@ -28,7 +28,7 @@ The agent acts as a proxy for the client to publish and subscribe to topics in t
The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is generated at build time and included in PX4 firmware by default. The PX4 [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) is generated at build time and included in PX4 firmware by default.
It includes both the "generic" micro XRCE-DDS client code, and PX4-specific translation code that it uses to publish to/from uORB topics. It includes both the "generic" micro XRCE-DDS client code, and PX4-specific translation code that it uses to publish to/from uORB topics.
The subset of uORB messages that are generated into the client are listed in [PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml). The subset of uORB messages that are generated into the client are specified in [dds_topics.yaml](../middleware/dds_topics.md).
The generator uses the uORB message definitions in the source tree: [PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg) to create the code for sending ROS 2 messages. The generator uses the uORB message definitions in the source tree: [PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg) to create the code for sending ROS 2 messages.
ROS 2 applications need to be built in a workspace that has the _same_ message definitions that were used to create the uXRCE-DDS client module in the PX4 Firmware. ROS 2 applications need to be built in a workspace that has the _same_ message definitions that were used to create the uXRCE-DDS client module in the PX4 Firmware.
@@ -97,48 +97,48 @@ To install ROS 2 and its dependencies:
1. Install ROS 2. 1. Install ROS 2.
:::: tabs :::: tabs
::: tab humble ::: tab humble
To install ROS 2 "Humble" on Ubuntu 22.04: To install ROS 2 "Humble" on Ubuntu 22.04:
```sh ```sh
sudo apt update && sudo apt install locales sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8 sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8 export LANG=en_US.UTF-8
sudo apt install software-properties-common sudo apt install software-properties-common
sudo add-apt-repository universe sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update && sudo apt upgrade -y sudo apt update && sudo apt upgrade -y
sudo apt install ros-humble-desktop sudo apt install ros-humble-desktop
sudo apt install ros-dev-tools sudo apt install ros-dev-tools
source /opt/ros/humble/setup.bash && echo "source /opt/ros/humble/setup.bash" >> .bashrc source /opt/ros/humble/setup.bash && echo "source /opt/ros/humble/setup.bash" >> .bashrc
``` ```
The instructions above are reproduced from the official installation guide: [Install ROS 2 Humble](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html). The instructions above are reproduced from the official installation guide: [Install ROS 2 Humble](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html).
You can install _either_ the desktop (`ros-humble-desktop`) _or_ bare-bones versions (`ros-humble-ros-base`), _and_ the development tools (`ros-dev-tools`). You can install _either_ the desktop (`ros-humble-desktop`) _or_ bare-bones versions (`ros-humble-ros-base`), _and_ the development tools (`ros-dev-tools`).
::: :::
::: tab foxy ::: tab foxy
To install ROS 2 "Foxy" on Ubuntu 20.04: To install ROS 2 "Foxy" on Ubuntu 20.04:
- Follow the official installation guide: [Install ROS 2 Foxy](https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html). - Follow the official installation guide: [Install ROS 2 Foxy](https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html).
You can install _either_ the desktop (`ros-foxy-desktop`) _or_ bare-bones versions (`ros-foxy-ros-base`), _and_ the development tools (`ros-dev-tools`). You can install _either_ the desktop (`ros-foxy-desktop`) _or_ bare-bones versions (`ros-foxy-ros-base`), _and_ the development tools (`ros-dev-tools`).
::: :::
:::: ::::
2. Some Python dependencies must also be installed (using **`pip`** or **`apt`**): 2. Some Python dependencies must also be installed (using **`pip`** or **`apt`**):
```sh ```sh
pip install --user -U empy==3.3.4 pyros-genmsg setuptools pip install --user -U empy==3.3.4 pyros-genmsg setuptools
``` ```
### Setup Micro XRCE-DDS Agent & Client ### Setup Micro XRCE-DDS Agent & Client
@@ -155,22 +155,22 @@ To setup and start the agent:
2. Enter the following commands to fetch and build the agent from source: 2. Enter the following commands to fetch and build the agent from source:
```sh ```sh
git clone -b v2.4.2 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git git clone -b v2.4.2 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
cd Micro-XRCE-DDS-Agent cd Micro-XRCE-DDS-Agent
mkdir build mkdir build
cd build cd build
cmake .. cmake ..
make make
sudo make install sudo make install
sudo ldconfig /usr/local/lib/ sudo ldconfig /usr/local/lib/
``` ```
3. Start the agent with settings for connecting to the uXRCE-DDS client running on the simulator: 3. Start the agent with settings for connecting to the uXRCE-DDS client running on the simulator:
```sh ```sh
MicroXRCEAgent udp4 -p 8888 MicroXRCEAgent udp4 -p 8888
``` ```
The agent is now running, but you won't see much until we start PX4 (in the next step). The agent is now running, but you won't see much until we start PX4 (in the next step).
@@ -187,31 +187,31 @@ To start the simulator (and client):
1. Open a new terminal in the root of the **PX4 Autopilot** repo that was installed above. 1. Open a new terminal in the root of the **PX4 Autopilot** repo that was installed above.
:::: tabs :::: tabs
::: tab humble ::: tab humble
- Start a PX4 [Gazebo](../sim_gazebo_gz/index.md) simulation using: - Start a PX4 [Gazebo](../sim_gazebo_gz/index.md) simulation using:
```sh ```sh
make px4_sitl gz_x500 make px4_sitl gz_x500
``` ```
::: :::
::: tab foxy ::: tab foxy
- Start a PX4 [Gazebo Classic](../sim_gazebo_classic/index.md) simulation using: - Start a PX4 [Gazebo Classic](../sim_gazebo_classic/index.md) simulation using:
```sh ```sh
make px4_sitl gazebo-classic make px4_sitl gazebo-classic
``` ```
::: :::
:::: ::::
The agent and client are now running they should connect. The agent and client are now running they should connect.
@@ -261,52 +261,52 @@ To create and build the workspace:
2. Create and navigate into a new workspace directory using: 2. Create and navigate into a new workspace directory using:
```sh ```sh
mkdir -p ~/ws_sensor_combined/src/ mkdir -p ~/ws_sensor_combined/src/
cd ~/ws_sensor_combined/src/ cd ~/ws_sensor_combined/src/
``` ```
::: info ::: info
A naming convention for workspace folders can make it easier to manage workspaces. A naming convention for workspace folders can make it easier to manage workspaces.
::: :::
3. Clone the example repository and [px4_msgs](https://github.com/PX4/px4_msgs) to the `/src` directory (the `main` branch is cloned by default, which corresponds to the version of PX4 we are running): 3. Clone the example repository and [px4_msgs](https://github.com/PX4/px4_msgs) to the `/src` directory (the `main` branch is cloned by default, which corresponds to the version of PX4 we are running):
```sh ```sh
git clone https://github.com/PX4/px4_msgs.git git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git git clone https://github.com/PX4/px4_ros_com.git
``` ```
4. Source the ROS 2 development environment into the current terminal and compile the workspace using `colcon`: 4. Source the ROS 2 development environment into the current terminal and compile the workspace using `colcon`:
:::: tabs :::: tabs
::: tab humble ::: tab humble
```sh ```sh
cd .. cd ..
source /opt/ros/humble/setup.bash source /opt/ros/humble/setup.bash
colcon build colcon build
``` ```
::: :::
::: tab foxy ::: tab foxy
```sh ```sh
cd .. cd ..
source /opt/ros/foxy/setup.bash source /opt/ros/foxy/setup.bash
colcon build colcon build
``` ```
::: :::
:::: ::::
This builds all the folders under `/src` using the sourced toolchain. This builds all the folders under `/src` using the sourced toolchain.
#### Running the Example #### Running the Example
@@ -322,42 +322,42 @@ In a new terminal:
1. Navigate into the top level of your workspace directory and source the ROS 2 environment (in this case "Humble"): 1. Navigate into the top level of your workspace directory and source the ROS 2 environment (in this case "Humble"):
:::: tabs :::: tabs
::: tab humble ::: tab humble
```sh ```sh
cd ~/ws_sensor_combined/ cd ~/ws_sensor_combined/
source /opt/ros/humble/setup.bash source /opt/ros/humble/setup.bash
``` ```
::: :::
::: tab foxy ::: tab foxy
```sh ```sh
cd ~/ws_sensor_combined/ cd ~/ws_sensor_combined/
source /opt/ros/foxy/setup.bash source /opt/ros/foxy/setup.bash
``` ```
::: :::
:::: ::::
2. Source the `local_setup.bash`. 2. Source the `local_setup.bash`.
```sh ```sh
source install/local_setup.bash source install/local_setup.bash
``` ```
3. Now launch the example. 3. Now launch the example.
Note here that we use `ros2 launch`, which is described below. Note here that we use `ros2 launch`, which is described below.
```sh ```sh
ros2 launch px4_ros_com sensor_combined_listener.launch.py ros2 launch px4_ros_com sensor_combined_listener.launch.py
``` ```
If this is working you should see data being printed on the terminal/console where you launched the ROS listener: If this is working you should see data being printed on the terminal/console where you launched the ROS listener:
@@ -385,18 +385,18 @@ If you were to use incompatible [message versions](../middleware/uorb.md#message
1. Include the [Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) into the example workspace or a separate workspace by running the following script: 1. Include the [Message Translation Node](../ros2/px4_ros2_msg_translation_node.md) into the example workspace or a separate workspace by running the following script:
```sh ```sh
cd /path/to/ros_ws cd /path/to/ros_ws
/path/to/PX4-Autopilot/Tools/copy_to_ros_ws.sh . /path/to/PX4-Autopilot/Tools/copy_to_ros_ws.sh .
``` ```
2. Build and run the translation node: 2. Build and run the translation node:
```sh ```sh
colcon build colcon build
source install/local_setup.bash source install/local_setup.bash
ros2 run translation_node translation_node_bin ros2 run translation_node translation_node_bin
``` ```
## Controlling a Vehicle ## Controlling a Vehicle
@@ -405,7 +405,7 @@ To control applications, ROS 2 applications:
- subscribe to (listen to) telemetry topics published by PX4 - subscribe to (listen to) telemetry topics published by PX4
- publish to topics that cause PX4 to perform some action. - publish to topics that cause PX4 to perform some action.
The topics that you can use are defined in [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), and you can get more information about their data in the [uORB Message Reference](../msg_docs/index.md). The topics that you can use are defined in [dds_topics.yaml](../middleware/dds_topics.md), and you can get more information about their data in the [uORB Message Reference](../msg_docs/index.md).
For example, [VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) can be used to get the vehicle global position, while [VehicleCommand](../msg_docs/VehicleCommand.md) can be used to command actions such as takeoff and land. For example, [VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) can be used to get the vehicle global position, while [VehicleCommand](../msg_docs/VehicleCommand.md) can be used to command actions such as takeoff and land.
The [ROS 2 Example applications](#ros-2-example-applications) examples below provide concrete examples of how to use these topics. The [ROS 2 Example applications](#ros-2-example-applications) examples below provide concrete examples of how to use these topics.
@@ -456,13 +456,13 @@ Therefore, ROS 2 nodes that want to interface with PX4 must take care of the fra
- To rotate a vector from ENU to NED two basic rotations must be performed: - To rotate a vector from ENU to NED two basic rotations must be performed:
- first a pi/2 rotation around the `Z`-axis (up), - first a pi/2 rotation around the `Z`-axis (up),
- then a pi rotation around the `X`-axis (old East/new North). - then a pi rotation around the `X`-axis (old East/new North).
- To rotate a vector from NED to ENU two basic rotations must be performed: - To rotate a vector from NED to ENU two basic rotations must be performed:
- - first a pi/2 rotation around the `Z`-axis (down), - - first a pi/2 rotation around the `Z`-axis (down),
- then a pi rotation around the `X`-axis (old North/new East). Note that the two resulting operations are mathematically equivalent. - then a pi rotation around the `X`-axis (old North/new East). Note that the two resulting operations are mathematically equivalent.
- To rotate a vector from FLU to FRD a pi rotation around the `X`-axis (front) is sufficient. - To rotate a vector from FLU to FRD a pi rotation around the `X`-axis (front) is sufficient.
@@ -720,17 +720,17 @@ Therefore,
- If you're using a main or release version of PX4 you can get the message definitions by cloning the interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs) into your workspace. - If you're using a main or release version of PX4 you can get the message definitions by cloning the interface package [PX4/px4_msgs](https://github.com/PX4/px4_msgs) into your workspace.
- If you're creating or modifying uORB messages you must manually update the messages in your workspace from your PX4 source tree. - If you're creating or modifying uORB messages you must manually update the messages in your workspace from your PX4 source tree.
Generally this means that you would update [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), clone the interface package, and then manually synchronize it by copying the new/modified message definitions from [PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg) to its `msg` folders. Generally this means that you would update [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), clone the interface package, and then manually synchronize it by copying the new/modified message definitions from [PX4-Autopilot/msg](https://github.com/PX4/PX4-Autopilot/tree/main/msg) to its `msg` folders.
Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/ros2_ws/src/`, then the command might be: Assuming that PX4-Autopilot is in your home directory `~`, while `px4_msgs` is in `~/ros2_ws/src/`, then the command might be:
```sh ```sh
rm ~/ros2_ws/src/px4_msgs/msg/*.msg rm ~/ros2_ws/src/px4_msgs/msg/*.msg
cp ~/PX4-Autopilot/mgs/*.msg ~/ros2_ws/src/px4_msgs/msg/ cp ~/PX4-Autopilot/mgs/*.msg ~/ros2_ws/src/px4_msgs/msg/
``` ```
::: info ::: info
Technically, [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) completely defines the relationship between PX4 uORB topics and ROS 2 messages. Technically, [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) completely defines the relationship between PX4 uORB topics and ROS 2 messages.
For more information see [uXRCE-DDS > DDS Topics YAML](../middleware/uxrce_dds.md#dds-topics-yaml). For more information see [uXRCE-DDS > DDS Topics YAML](../middleware/uxrce_dds.md#dds-topics-yaml).
::: :::
@@ -739,11 +739,11 @@ Therefore,
Custom topic and service namespaces can be applied at build time (changing [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml)) or at runtime (useful for multi vehicle operations): Custom topic and service namespaces can be applied at build time (changing [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml)) or at runtime (useful for multi vehicle operations):
- One possibility is to use the `-n` option when starting the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) from command line. - One possibility is to use the `-n` option when starting the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) from command line.
This technique can be used both in simulation and real vehicles. This technique can be used both in simulation and real vehicles.
- A custom namespace can be provided for simulations (only) by setting the environment variable `PX4_UXRCE_DDS_NS` before starting the simulation. - A custom namespace can be provided for simulations (only) by setting the environment variable `PX4_UXRCE_DDS_NS` before starting the simulation.
:::info :::info
Changing the namespace at runtime will append the desired namespace as a prefix to all `topic` fields in [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) and all [service servers](#px4-ros-2-service-servers). Changing the namespace at runtime will append the desired namespace as a prefix to all `topic` fields in [dds_topics.yaml](../middleware/dds_topics.md) and all [service servers](#px4-ros-2-service-servers).
Therefore, commands like: Therefore, commands like:
```sh ```sh
@@ -780,7 +780,7 @@ The service servers that are built into the PX4 [uxrce_dds_client](../modules/mo
- `/fmu/vehicle_command` (definition: [`px4_msgs::srv::VehicleCommand`](https://github.com/PX4/px4_msgs/blob/main/srv/VehicleCommand.srv).) - `/fmu/vehicle_command` (definition: [`px4_msgs::srv::VehicleCommand`](https://github.com/PX4/px4_msgs/blob/main/srv/VehicleCommand.srv).)
This service can be called by ROS 2 applications to send PX4 [VehicleCommand](../msg_docs/VehicleCommand.md) uORB messages and receive PX4 [VehicleCommandAck](../msg_docs/VehicleCommandAck.md) uORB messages in response. This service can be called by ROS 2 applications to send PX4 [VehicleCommand](../msg_docs/VehicleCommand.md) uORB messages and receive PX4 [VehicleCommandAck](../msg_docs/VehicleCommandAck.md) uORB messages in response.
All PX4 service names follow the convention `{extra_namespace}/fmu/{server_specific_name}` where `{extra_namespace}` is the same [custom namespace](#customizing-the-namespace) that can be given to the PX4 topics. All PX4 service names follow the convention `{extra_namespace}/fmu/{server_specific_name}` where `{extra_namespace}` is the same [custom namespace](#customizing-the-namespace) that can be given to the PX4 topics.
@@ -973,38 +973,38 @@ The standard installation should include all the tools needed by ROS 2.
If any are missing, they can be added separately: If any are missing, they can be added separately:
- **`colcon`** build tools should be in the development tools. - **`colcon`** build tools should be in the development tools.
It can be installed using: It can be installed using:
```sh ```sh
$ git clone https://github.com/PX4/px4_ros_com.git ~/px4_ros_com_ros2/src/px4_ros_com $ git clone https://github.com/PX4/px4_ros_com.git ~/px4_ros_com_ros2/src/px4_ros_com
$ git clone https://github.com/PX4/px4_msgs.git ~/px4_ros_com_ros2/src/px4_msgs $ git clone https://github.com/PX4/px4_msgs.git ~/px4_ros_com_ros2/src/px4_msgs
``` ```
- The Eigen3 library used by the transforms library should be in the both the desktop and base packages. - The Eigen3 library used by the transforms library should be in the both the desktop and base packages.
It should be installed as shown: It should be installed as shown:
:::: tabs :::: tabs
::: tab humble ::: tab humble
```sh ```sh
sudo apt install ros-humble-eigen3-cmake-module sudo apt install ros-humble-eigen3-cmake-module
``` ```
::: :::
::: tab foxy ::: tab foxy
```sh ```sh
$ cd ~/px4_ros_com_ros2/src/px4_ros_com/scripts $ cd ~/px4_ros_com_ros2/src/px4_ros_com/scripts
$ source build_ros2_workspace.bash $ source build_ros2_workspace.bash
``` ```
::: :::
:::: ::::
### ros_gz_bridge not publishing on the \clock topic ### ros_gz_bridge not publishing on the \clock topic