mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-03 13:48:54 +08:00
New Crowdin translations - uk (#24949)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
This commit is contained in:
co-authored by
Crowdin Bot
parent
7936937320
commit
8204331fa9
@@ -346,6 +346,7 @@ private:
|
||||
Наступні розділи надають список підтримуваних типів установок:
|
||||
|
||||
- GotoSetpointType: Плавне позиціонування та (за бажанням) керування курсом
|
||||
- [FwLateralLongitudinalSetpointType](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype): Direct control of lateral and longitudinal fixed wing dynamics
|
||||
- DirectActuatorsSetpointType: Пряме керування моторами та установками сервоприводів польотних поверхонь
|
||||
|
||||
:::tip
|
||||
@@ -360,7 +361,7 @@ The other setpoint types are currently experimental, and can be found in: [px4_r
|
||||
Цей тип установки наразі підтримується лише для багтрикоптерів.
|
||||
:::
|
||||
|
||||
Плавне керування позицією та (за бажанням) керуванням установками курсу за допомогою типу установки px4_ros2::GotoSetpointType.
|
||||
Smoothly control position and (optionally) heading setpoints with the [`px4_ros2::GotoSetpointType`](https://github.com/Auterion/px4-ros2-interface-lib/blob/main/px4_ros2_cpp/include/px4_ros2/control/setpoint_types/goto.hpp) setpoint type.
|
||||
Тип установки транслюється до плавних позиційних та курсових вирівнювачів на основі FMU, сформульованих з оптимальним за часом, максимальною швидкістю зміни прискорення, з обмеженнями швидкості та прискорення.
|
||||
|
||||
Найбільш тривіальне використання полягає в простому введенні 3D-позиції в метод оновлення:
|
||||
@@ -405,6 +406,137 @@ _goto_setpoint->update(
|
||||
max_heading_rate_rad_s);
|
||||
```
|
||||
|
||||
#### Fixed-Wing Lateral and Longitudinal Setpoint (FwLateralLongitudinalSetpointType)
|
||||
|
||||
<Badge type="warning" text="Fixed wing only" />
|
||||
|
||||
:::info
|
||||
This setpoint type is supported for fixed-wing vehicles and for VTOLs in fixed-wing mode.
|
||||
:::
|
||||
|
||||
Use the [`px4_ros2::FwLateralLongitudinalSetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1FwLateralLongitudinalSetpointType.html) to directly control the lateral and longitudinal dynamics of a fixed-wing vehicle — that is, side-to-side motion (turning/banking) and forward/vertical motion (speeding up and climbing/descending), respectively.
|
||||
This setpoint is streamed to the PX4 [_FwLateralLongitudinalControl_ module](../modules/modules_controller.md#fw-lat-lon-control), which decouples lateral and longitudinal inputs while ensuring that vehicle limits are respected.
|
||||
|
||||
To control the vehicle, at least one lateral **and** one longitudinal setpoint must be provided:
|
||||
|
||||
1. Of the longitudinal inputs: either `altitude` or `height_rate` must be finite to control vertical motion.
|
||||
If both are set to `NAN`, the vehicle will maintain its current altitude.
|
||||
2. Of the lateral inputs: at least one of `course`, `airspeed_direction`, or `lateral_acceleration` must be finite.
|
||||
|
||||
For a detailed description of the controllable parameters, please refer to message definitions ([FixedWingLateralSetpoint](../msg_docs/FixedWingLateralSetpoint.md) and [FixedWingLongitudinalSetpoint](../msg_docs/FixedWingLongitudinalSetpoint.md)).
|
||||
|
||||
##### Основне використання
|
||||
|
||||
This type has a number of update methods, each allowing you to specify an increasing number of setpoints.
|
||||
|
||||
The simplest method is `updateWithAltitude()`, which allows you to specify a `course` and `altitude` target setpoint:
|
||||
|
||||
```cpp
|
||||
const float altitude_msl = 500.F;
|
||||
const float course = 0.F; // due North
|
||||
_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl, course);
|
||||
```
|
||||
|
||||
PX4 uses the setpoints to compute the _roll angle_, _pitch angle_ and _throttle_ setpoints that are sent to lower level controllers.
|
||||
Note that the commanded flight is expected to be relatively gentle/unaggressive when using this method.
|
||||
This is done as follows:
|
||||
|
||||
- Lateral control output:
|
||||
|
||||
course setpoint (set by user) → airspeed direction (heading) setpoint → lateral acceleration setpoint → roll angle setpoint.
|
||||
|
||||
- Longitudinal control output:
|
||||
|
||||
altitude setpoint (set by user) → height rate setpoint → pitch angle setpoint and throttle settings.
|
||||
|
||||
The `updateWithHeightRate()` method allows you to set a target `course` and `height_rate` (this is useful if the speed of ascent or descent matters, or needs to be dynamically controlled):
|
||||
|
||||
```cpp
|
||||
const float height_rate = 2.F;
|
||||
const float course = 0.F; // due North
|
||||
_fw_lateral_longitudinal_setpoint->updateWithHeightRate(height_rate, course);
|
||||
```
|
||||
|
||||
The `updateWithAltitude()` and `updateWithHeightRate()` methods allow you to additionally control the equivalent airspeed or lateral acceleration by specifying them as the third and fourth arguments, respectively:
|
||||
|
||||
```cpp
|
||||
const float altitude_msl = 500.F;
|
||||
const float course = 0.F; // due North
|
||||
const float equivalent_aspd = 15.F; // m/s
|
||||
const float lateral_acceleration = 2.F; // FRD, used as feedforward
|
||||
|
||||
_fw_lateral_longitudinal_setpoint->updateWithAltitude(altitude_msl,
|
||||
course,
|
||||
equivalent_aspd,
|
||||
lateral_acceleration);
|
||||
```
|
||||
|
||||
The equivalent airspeed and lateral acceleration arguments are defined as `std::optional<float>`, so you can omit any of them by passing `std::nullopt`.
|
||||
|
||||
:::tip
|
||||
If both lateral acceleration and course setpoints are provided, the lateral acceleration setpoint will be used as feedforward.
|
||||
:::
|
||||
|
||||
##### Full Control Using the Setpoint Struct
|
||||
|
||||
For full flexibility, you can create and pass a [`FwLateralLongitudinalSetpoint`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwLateralLongitudinalSetpoint.html) struct.
|
||||
Each field is templated with `std::optional<float>`.
|
||||
|
||||
:::tip
|
||||
If both course and airspeed direction are set: airspeed direction takes precedence, course is not controlled.
|
||||
Lateral acceleration is treated as feedforward if either course or airspeed direction are also finite.
|
||||
If both altitude and height rate are set: height rate takes precedence, altitude is not controlled.
|
||||
:::
|
||||
|
||||
```cpp
|
||||
px4_ros2::FwLateralLongitudinalSetpoint setpoint_s;
|
||||
|
||||
setpoint_s.withCourse(0.F);
|
||||
// setpoint_s.withAirspeedDirection(0.2F); // uncontrolled
|
||||
setpoint_s.withLateralAcceleration(2.F); // feedforward
|
||||
//setpoint_s.withAltitude(500.F); // uncontrolled
|
||||
setpoint_s.withHeightRate(2.F);
|
||||
setpoint_s.withEquivalentAirspeed(15.F);
|
||||
|
||||
_fw_lateral_longitudinal_setpoint->update(setpoint_s);
|
||||
```
|
||||
|
||||
The diagram below illustrates the interaction between the `FwLateralLongitudinalSetpointType` and PX4 when all inputs are set.
|
||||
|
||||

|
||||
|
||||
##### Advanced Configuration (Optional)
|
||||
|
||||
You can also pass a [`FwControlConfiguration`](https://auterion.github.io/px4-ros2-interface-lib/structpx4__ros2_1_1FwControlConfiguration.html) struct along with the setpoint to override default controller settings and constraints such as pitch limits, throttle limits, and target sink/climb rates.
|
||||
This is intended for advanced users:
|
||||
|
||||
```cpp
|
||||
px4_ros2::FwLateralLongitudinalSetpoint setpoint_s;
|
||||
|
||||
setpoint_s.withAirspeedDirection(0.F);
|
||||
setpoint_s.withLateralAcceleration(2.F); // feedforward
|
||||
setpoint_s.withAltitude(500.F);
|
||||
setpoint_s.withEquivalentAirspeed(15.F);
|
||||
|
||||
px4_ros2::FwControlConfiguration config_s;
|
||||
|
||||
config_s.withTargetClimbRate(3.F);
|
||||
config_s.withMaxAcceleration(5.F);
|
||||
config_s.withThrottleLimits(0.4F, 0.6F);
|
||||
|
||||
_fw_lateral_longitudinal_setpoint->update(setpoint_s, config_s);
|
||||
```
|
||||
|
||||
All configuration fields are defined as `std::optional<float>`.
|
||||
Unset values will default to the PX4 configuration.
|
||||
See [LateralControlConfiguration](../msg_docs/LateralControlConfiguration.md) and [FixedWingLongitudinalConfiguration](../msg_docs/LongitudinalControlConfiguration.md) for more information on configuration options.
|
||||
|
||||
:::info
|
||||
For safety, PX4 automatically limits configuration values to stay within the vehicle’s constraints.
|
||||
For example, throttle overrides are clamped to remain between [`FW_THR_MIN`](../advanced_config/parameter_reference.md#FW_THR_MIN)
|
||||
and [`FW_THR_MAX`](../advanced_config/parameter_reference.md#FW_THR_MAX).
|
||||
:::
|
||||
|
||||
#### Безпосереднє значення параметра Control (DirectActuatorsSetpointType)
|
||||
|
||||
Клапани можна безпосередньо керувати, використовуючи тип встановлення px4_ros2::DirectActuatorsSetpointType.
|
||||
@@ -416,11 +548,55 @@ _goto_setpoint->update(
|
||||
Якщо ви хочете керувати клапаном, який не контролює рух транспортного засобу, але, наприклад, сервопривід навантаження, подивіться нижче.
|
||||
:::
|
||||
|
||||
### Controlling a VTOL
|
||||
|
||||
<Badge type="warning" text="Experimental" />
|
||||
|
||||
To control a VTOL in an external flight mode, ensure you're returning the correct setpoint type based on the current flight configuration:
|
||||
|
||||
- Multicopter mode: use a setpoint type that is compatible with multicopter control. For example: either the [`GotoSetpointType`](#go-to-setpoint-gotosetpointtype) or the [`TrajectorySetpointType`](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1TrajectorySetpointType.html).
|
||||
- Fixed-wing mode: Use the [`FwLateralLongitudinalSetpointType`](#fixed-wing-lateral-and-longitudinal-setpoint-fwlaterallongitudinalsetpointtype).
|
||||
|
||||
As long as the VTOL remains in either multicopter or fixed-wing mode throughout the external mode, no additional handling is required.
|
||||
|
||||
If you would like to command a VTOL transition in your external mode, you need to use the [VTOL API](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1VTOL.html). The VTOL API provides the functionality to command a transition and query the current state of the vehicle.
|
||||
|
||||
Use this API with caution!
|
||||
Commanding transitions externally makes the user partially responsible for ensuring smooth and safe behavior, unlike onboard transitions (e.g. via RC switch) where PX4 handles the full process:
|
||||
|
||||
1. Ensure that both the `TrajectorySetpointType` and the `FwLateralLongitudinalSetpointType` are available to your mode.
|
||||
2. Create an instance of `px4_ros2::VTOL` in the constructor of your mode.
|
||||
3. To command a transition, you can use the `toMulticopter()` or `toFixedwing()` methods on your VTOL object to set the desired state.
|
||||
4. During transition, send the following combination of setpoints:
|
||||
|
||||
```cpp
|
||||
// Assuming the instance of the px4_ros2::VTOL object is called vtol
|
||||
|
||||
// Send TrajectorySetpointType as follows:
|
||||
Eigen::Vector3f acceleration_sp = vtol.computeAccelerationSetpointDuringTransition();
|
||||
Eigen::Vector3f velocity_sp{NAN, NAN, 0.f};
|
||||
|
||||
_trajectory_setpoint->update(velocity_sp, acceleration_sp);
|
||||
|
||||
// Send FwLateralLongitudinalSetpointType with lateral input to realign vehicle as desired
|
||||
|
||||
float course_sp = 0.F; // North
|
||||
|
||||
_fw_lateral_longitudinal_setpoint->updateWithAltitude(NAN, course_sp)
|
||||
```
|
||||
|
||||
This will ensure that the transition is handled properly within PX4.
|
||||
You can optionally pass a deceleration setpoint to `computeAccelerationSetpointDuringTransition()` to be used during back-transitions.
|
||||
|
||||
To check the current state of the vehicle, use the `getCurrentState()` method on your `px4_ros2::VTOL` object.
|
||||
|
||||
See [this external flight mode implementation](https://github.com/Auterion/px4-ros2-interface-lib/tree/main/examples/cpp/modes/vtol) for a practical example on how to use this API.
|
||||
|
||||
### Керування незалежним клапаном/сервоприводом
|
||||
|
||||
Якщо ви хочете керувати незалежним клапаном (сервоприводом), дотримуйтесь цих кроків:
|
||||
|
||||
1. Налаштуйте вивід
|
||||
1. [Configure the output](../payloads/generic_actuator_control.md#generic-actuator-control-with-mavlink).
|
||||
2. Створіть екземпляр px4_ros2::PeripheralActuatorControls у конструкторі вашого режиму.
|
||||
3. Викличте метод set(), щоб керувати клапаном(-ами).
|
||||
Це може бути зроблено незалежно від будь-яких активних встановлень.
|
||||
@@ -432,6 +608,7 @@ _goto_setpoint->update(
|
||||
- [OdometryGlobalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryGlobalPosition.html): Global position
|
||||
- [OdometryLocalPosition](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryLocalPosition.html): Local position, velocity, acceleration, and heading
|
||||
- [OdometryAttitude](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAttitude.html): Vehicle attitude
|
||||
- [OdometryAirspeed](https://auterion.github.io/px4-ros2-interface-lib/classpx4__ros2_1_1OdometryAirspeed.html): Airspeed
|
||||
|
||||
Наприклад, ви можете надати запит на поточну позицію автомобіля наступним чином:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user