mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-06-13 21:20:04 +08:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6d75bc315f | |||
| 183c324108 | |||
| e63026ce2c | |||
| e4505448db |
@@ -89,9 +89,7 @@ jobs:
|
||||
. /opt/ros/galactic/setup.bash
|
||||
mkdir -p /opt/px4_ws/src
|
||||
cd /opt/px4_ws/src
|
||||
# On a PR, target the branch we're merging into (main or release/X.Y).
|
||||
# On a direct push, fall back to the branch we're running on.
|
||||
BRANCH="${GITHUB_BASE_REF:-$GITHUB_REF_NAME}"
|
||||
BRANCH="${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}"
|
||||
REPO_URL="https://github.com/Auterion/px4-ros2-interface-lib.git"
|
||||
if git ls-remote --heads "$REPO_URL" "$BRANCH" | grep -q "$BRANCH"; then
|
||||
echo "Cloning px4-ros2-interface-lib with matching branch: $BRANCH"
|
||||
|
||||
+20
-57
@@ -2,82 +2,45 @@
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our community include:
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall community
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address, without their explicit permission
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
## Our Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at coc@dronecode.org. All complaints will be reviewed and investigated promptly and fairly.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at lorenz@px4.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the community.
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
|
||||
@@ -9,16 +9,11 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/PX4/PX4-Autopilot/releases"><img src="https://img.shields.io/github/release/PX4/PX4-Autopilot.svg" alt="Release"></a>
|
||||
<a href="https://zenodo.org/badge/latestdoi/22634/PX4/PX4-Autopilot"><img src="https://zenodo.org/badge/22634/PX4/PX4-Autopilot.svg" alt="DOI"></a>
|
||||
<a href="https://discord.gg/dronecode"><img src="https://img.shields.io/discord/1022170275984457759?label=discord&logo=discord&logoColor=white&color=5865F2" alt="Discord"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/PX4/PX4-Autopilot/releases"><img src="https://img.shields.io/github/release/PX4/PX4-Autopilot.svg" alt="Releases"></a>
|
||||
<a href="https://www.bestpractices.dev/projects/6520"><img src="https://www.bestpractices.dev/projects/6520/badge" alt="OpenSSF Best Practices"></a>
|
||||
<a href="https://insights.linuxfoundation.org/project/px4"><img src="https://insights.linuxfoundation.org/api/badge/health-score?project=px4" alt="LFX Health Score"></a>
|
||||
<a href="https://insights.linuxfoundation.org/project/px4"><img src="https://insights.linuxfoundation.org/api/badge/contributors?project=px4" alt="LFX Contributors"></a>
|
||||
<a href="https://insights.linuxfoundation.org/project/px4"><img src="https://insights.linuxfoundation.org/api/badge/active-contributors?project=px4" alt="LFX Active Contributors"></a>
|
||||
<a href="https://zenodo.org/badge/latestdoi/22634/PX4/PX4-Autopilot"><img src="https://zenodo.org/badge/22634/PX4/PX4-Autopilot.svg" alt="DOI"></a>
|
||||
<a href="https://github.com/PX4/PX4-Autopilot/actions/workflows/build_all_targets.yml"><img src="https://github.com/PX4/PX4-Autopilot/actions/workflows/build_all_targets.yml/badge.svg?branch=main" alt="Build Targets"></a>
|
||||
<a href="https://discord.gg/dronecode"><img src="https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield" alt="Discord"></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
@@ -104,22 +99,6 @@ make px4_sitl
|
||||
|
||||
We welcome contributions of all kinds — bug reports, documentation, new features, and code reviews. Please read the [Contribution Guide](https://docs.px4.io/main/en/contribute/) to get started.
|
||||
|
||||
## Citation
|
||||
|
||||
If you use PX4 in academic work, please cite it. BibTeX:
|
||||
|
||||
```bibtex
|
||||
@software{px4_autopilot,
|
||||
author = {Meier, Lorenz and {The PX4 Contributors}},
|
||||
title = {{PX4 Autopilot}},
|
||||
publisher = {Zenodo},
|
||||
doi = {10.5281/zenodo.595432},
|
||||
url = {https://px4.io}
|
||||
}
|
||||
```
|
||||
|
||||
The DOI above is a Zenodo concept DOI that always resolves to the latest release. For a version-pinned citation, see the [Zenodo record](https://doi.org/10.5281/zenodo.595432) or our [`CITATION.cff`](CITATION.cff).
|
||||
|
||||
## Governance
|
||||
|
||||
The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://www.dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship — no single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](LICENSE) license, so you are free to use, modify, and distribute it in your own projects.
|
||||
|
||||
@@ -651,10 +651,6 @@ else
|
||||
. ${R}etc/init.d/rc.autostart.post
|
||||
fi
|
||||
|
||||
#
|
||||
# Lock read-only parameters (if configured for this board).
|
||||
#
|
||||
param lock
|
||||
|
||||
set BOARD_BOOTLOADER_UPGRADE ${R}etc/init.d/rc.board_bootloader_upgrade
|
||||
if [ -f $BOARD_BOOTLOADER_UPGRADE ]
|
||||
|
||||
@@ -13,7 +13,6 @@ CONFIG_MODULES_NAVIGATOR=n
|
||||
CONFIG_MODULES_UXRCE_DDS_CLIENT=n
|
||||
CONFIG_SYSTEMCMDS_ACTUATOR_TEST=n
|
||||
CONFIG_SYSTEMCMDS_BSONDUMP=n
|
||||
CONFIG_SYSTEMCMDS_I2CDETECT=y
|
||||
CONFIG_SYSTEMCMDS_PERF=n
|
||||
CONFIG_SYSTEMCMDS_TOPIC_LISTENER=n
|
||||
CONFIG_SYSTEMCMDS_VER=n
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB |
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 119 KiB |
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 203 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 270 KiB |
+1
-1
@@ -323,7 +323,6 @@
|
||||
- [RFD900 (SiK) Telemetry Radio](telemetry/rfd900_telemetry.md)
|
||||
- [ThunderFly TFSIK01 Telemetry Radio](telemetry/tfsik_telemetry.md)
|
||||
- [HolyBro (SIK) Telemetry Radio](telemetry/holybro_sik_radio.md)
|
||||
- [HolyBro SiK Long Range Telemetry Radio](telemetry/holybro_sik_longrange.md)
|
||||
- [Telemetry Wifi](telemetry/telemetry_wifi.md)
|
||||
- [ESP8266 WiFi Module](telemetry/esp8266_wifi_module.md)
|
||||
- [ESP32 WiFi Module](telemetry/esp32_wifi_module.md)
|
||||
@@ -469,6 +468,7 @@
|
||||
- [Gazebo Models Repository](sim_gazebo_gz/gazebo_models.md)
|
||||
- [Multi-Vehicle Sim](sim_gazebo_gz/multi_vehicle_simulation.md)
|
||||
- [SIH Simulation](sim_sih/index.md)
|
||||
- [Hawkeye Visualizer](sim_hawkeye/index.md)
|
||||
- [Gazebo Classic Simulation](sim_gazebo_classic/index.md)
|
||||
- [Vehicles](sim_gazebo_classic/vehicles.md)
|
||||
- [Worlds](sim_gazebo_classic/worlds.md)
|
||||
|
||||
@@ -358,62 +358,6 @@ This ensures that metadata is always up-to-date with the code running on the veh
|
||||
This process is the same as for [events metadata](../concept/events_interface.md#publishing-event-metadata-to-a-gcs).
|
||||
For more information see [PX4 Metadata (Translation & Publication)](../advanced/px4_metadata.md)
|
||||
|
||||
## Read-Only Parameters
|
||||
|
||||
Integrators who productize PX4 can lock down parameters so that end users cannot change safety-critical or product-defining settings.
|
||||
This works in two phases:
|
||||
|
||||
1. **Build time** — a YAML file in the board directory declares _which_ parameters are read-only.
|
||||
2. **Run time** — `param lock` in the startup script activates enforcement.
|
||||
|
||||
Before the lock, all parameters (including those on the read-only list) can be freely set by startup scripts (`rc.board_defaults`, airframe scripts, `config.txt`, etc.).
|
||||
After the lock, any attempt to modify a read-only parameter is rejected.
|
||||
|
||||
### Configuration
|
||||
|
||||
Create `boards/<vendor>/<board>/readonly_params.yaml` with the following format:
|
||||
|
||||
```yaml
|
||||
# mode: 'block' = listed params are read-only (all others writable)
|
||||
# mode: 'allow' = only listed params are writable (all others read-only)
|
||||
mode: block
|
||||
parameters:
|
||||
- SYS_AUTOSTART
|
||||
- SYS_AUTOCONFIG
|
||||
- BAT1_N_CELLS
|
||||
```
|
||||
|
||||
The two modes are:
|
||||
|
||||
- **`block`**: The listed parameters are read-only; all other parameters remain writable.
|
||||
- **`allow`**: Only the listed parameters are writable; all others become read-only.
|
||||
|
||||
All parameter names in the list are validated at build time — the build will fail if any listed parameter does not exist in the firmware.
|
||||
Boards without this file have no read-only enforcement (fully backward compatible).
|
||||
|
||||
### Locking
|
||||
|
||||
The `param lock` command is called in `rcS` after all startup scripts have finished setting parameters.
|
||||
Before this call, startup scripts can freely use `param set-default` and `param set` on any parameter, including those on the read-only list.
|
||||
After `param lock`, the read-only list is enforced.
|
||||
|
||||
To set a specific locked value, use `param set-default` in a board startup script (e.g. `rc.board_defaults`) to set the desired default _before_ the lock activates.
|
||||
|
||||
### Enforcement (after lock)
|
||||
|
||||
Read-only parameters are enforced at all entry points:
|
||||
|
||||
- **`param set`** and **`param set-default`** shell commands return an error.
|
||||
- **MAVLink PARAM_SET** returns a `MAV_PARAM_ERROR_READ_ONLY` error to the GCS.
|
||||
- **`param_set()`**, **`param_set_default_value()`** C API calls return `PX4_ERROR`.
|
||||
- **`param reset`** silently skips read-only parameters (since `param_reset_all` loops over all params).
|
||||
- **`param import`** / **`param load`** from file silently skips read-only parameters.
|
||||
|
||||
### Notes
|
||||
|
||||
- The read-only list is compiled into firmware as a `constexpr` array, so there is zero runtime overhead when the list is empty.
|
||||
- If no `readonly_params.yaml` file exists for a board, `param lock` is a no-op.
|
||||
|
||||
## Further Information
|
||||
|
||||
- [Finding/Updating Parameters](../advanced_config/parameters.md)
|
||||
|
||||
@@ -127,7 +127,7 @@ Configure the emitter type of the vehicle.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | 0 | 19 | | 14 | |
|
||||
| ✓ | 0 | 15 | | 14 | |
|
||||
|
||||
### ADSB_GPS_OFF_LAT (`INT32`) {#ADSB_GPS_OFF_LAT}
|
||||
|
||||
@@ -18498,7 +18498,7 @@ parameters.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 0 | 4 | | 0 | |
|
||||
| | 0 | 3 | | 0 | |
|
||||
|
||||
### COM_ARMABLE (`INT32`) {#COM_ARMABLE}
|
||||
|
||||
@@ -23916,7 +23916,7 @@ Mode 6 is intended for use with a ground control station (not necessarily an RTK
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | 0 | 6 | | 0 | |
|
||||
| ✓ | 0 | 1 | | 0 | |
|
||||
|
||||
### GPS_UBX_PPK (`INT32`) {#GPS_UBX_PPK}
|
||||
|
||||
@@ -28571,7 +28571,7 @@ MAVLink airframe type.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 0 | 23 | | 0 | |
|
||||
| | 0 | 22 | | 0 | |
|
||||
|
||||
### MAV_USEHILGPS (`INT32`) {#MAV_USEHILGPS}
|
||||
|
||||
@@ -28828,7 +28828,7 @@ Heading behavior in autonomous modes.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 0 | 5 | | 0 | |
|
||||
| | 0 | 4 | | 0 | |
|
||||
|
||||
### NAV_ACC_RAD (`FLOAT`) {#NAV_ACC_RAD}
|
||||
|
||||
@@ -37782,7 +37782,7 @@ TeraRanger Rangefinder (i2c).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | 0 | 5 | | 0 | |
|
||||
| ✓ | 0 | 3 | | 0 | |
|
||||
|
||||
### SENS_EN_VL53L0X (`INT32`) {#SENS_EN_VL53L0X}
|
||||
|
||||
@@ -43972,7 +43972,7 @@ Selects what type of mode is enabled, if any
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | 0 | 3 | | 0 | |
|
||||
| ✓ | 0 | 2 | | 0 | |
|
||||
|
||||
### VOXL_ESC_PUB_BST (`INT32`) {#VOXL_ESC_PUB_BST}
|
||||
|
||||
|
||||
@@ -41,6 +41,13 @@ Key features:
|
||||
|
||||
See [Log Analysis using Flight Review](../log/flight_review.md) for an introduction.
|
||||
|
||||
### Hawkeye (3D Flight Replay)
|
||||
|
||||
[Hawkeye](../sim_hawkeye/index.md) can replay ULog files as 3D flight visualisations.
|
||||
Its ghost mode overlays two flights at different opacities for visual comparison (e.g. before/after PID tuning), and it supports multi-drone side-by-side playback.
|
||||
|
||||
See [Hawkeye ULog Replay](../sim_hawkeye/index.md#ulog-replay) for details.
|
||||
|
||||
### Foxglove
|
||||
|
||||
[Foxglove](https://foxglove.dev/) is a purpose-built robotics observation platform that works natively with ULog.
|
||||
|
||||
+191
-191
@@ -95,207 +95,207 @@ They are not build into the module, and hence are neither published or subscribe
|
||||
|
||||
::: details See messages
|
||||
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
|
||||
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [RaptorInput](../msg_docs/RaptorInput.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [RaptorStatus](../msg_docs/RaptorStatus.md)
|
||||
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [EscEepromRead](../msg_docs/EscEepromRead.md)
|
||||
- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [IrlockReport](../msg_docs/IrlockReport.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [EstimatorStates](../msg_docs/EstimatorStates.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [SensorAccel](../msg_docs/SensorAccel.md)
|
||||
- [SensorAirflow](../msg_docs/SensorAirflow.md)
|
||||
- [Vtx](../msg_docs/Vtx.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [AdcReport](../msg_docs/AdcReport.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [RangingBeacon](../msg_docs/RangingBeacon.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [TuneControl](../msg_docs/TuneControl.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [RaptorInput](../msg_docs/RaptorInput.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [GpioIn](../msg_docs/GpioIn.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [SensorAirflow](../msg_docs/SensorAirflow.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [OrbitStatus](../msg_docs/OrbitStatus.md)
|
||||
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [Vtx](../msg_docs/Vtx.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [SensorAccel](../msg_docs/SensorAccel.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [DeviceInformation](../msg_docs/DeviceInformation.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
|
||||
- [GainCompression](../msg_docs/GainCompression.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [AdcReport](../msg_docs/AdcReport.md)
|
||||
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
|
||||
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
|
||||
- [Cpuload](../msg_docs/Cpuload.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [GpioIn](../msg_docs/GpioIn.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [DeviceInformation](../msg_docs/DeviceInformation.md)
|
||||
- [OrbitStatus](../msg_docs/OrbitStatus.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [GpioConfig](../msg_docs/GpioConfig.md)
|
||||
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [HeaterStatus](../msg_docs/HeaterStatus.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
|
||||
- [EscEepromRead](../msg_docs/EscEepromRead.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [RaptorStatus](../msg_docs/RaptorStatus.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [IrlockReport](../msg_docs/IrlockReport.md)
|
||||
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
|
||||
- [RangingBeacon](../msg_docs/RangingBeacon.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [HeaterStatus](../msg_docs/HeaterStatus.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [TuneControl](../msg_docs/TuneControl.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [GainCompression](../msg_docs/GainCompression.md)
|
||||
:::
|
||||
|
||||
@@ -0,0 +1,147 @@
|
||||
# Hawkeye Flight Visualiser
|
||||
|
||||
[Hawkeye](https://github.com/PX4/Hawkeye) is a real-time 3D flight visualiser for PX4.
|
||||
It connects to any MAVLink source (SITL or hardware) and renders vehicle state from [`HIL_STATE_QUATERNION`](https://mavlink.io/en/messages/common.html#HIL_STATE_QUATERNION) messages.
|
||||
|
||||
::: tip
|
||||
Hawkeye is the recommended visualiser for [SIH Simulation](../sim_sih/index.md) (which doesn't have a default visualiser).
|
||||
:::
|
||||
|
||||
Note that Hawkeye is not a simulator — it doesn't model physics or generate sensor data — it only renders what PX4 is doing.
|
||||
|
||||
Hawkeye has no runtime dependencies.
|
||||
It is built in in C with [Raylib](https://www.raylib.com/).
|
||||
|
||||
## Features
|
||||
|
||||
- Real-time 3D rendering of vehicle state via MAVLink
|
||||
- Multi-vehicle swarm visualisation (up to 16 vehicles simultaneously)
|
||||
- ULog replay with ghost mode for visual flight comparison (e.g. before/after PID tuning)
|
||||
- Vehicle models: quadrotor, hexarotor, fixed-wing, tailsitter, VTOL, rover, ROV
|
||||
- Three camera modes: Chase, FPV, Free (WASD fly)
|
||||
- Orthographic views (sidebar and fullscreen)
|
||||
- HUD with compass, attitude indicator, and telemetry badges
|
||||
- Theme engine with built-in themes (Grid, Rez, Snow)
|
||||
|
||||
## Installation
|
||||
|
||||
### macOS (Homebrew)
|
||||
|
||||
```sh
|
||||
brew tap PX4/px4
|
||||
brew install PX4/px4/hawkeye
|
||||
```
|
||||
|
||||
### Linux (Debian/Ubuntu)
|
||||
|
||||
Download the `.deb` package from the [latest release](https://github.com/PX4/Hawkeye/releases/latest):
|
||||
|
||||
```sh
|
||||
sudo dpkg -i hawkeye_*_amd64.deb
|
||||
```
|
||||
|
||||
### From Source (All Platforms)
|
||||
|
||||
```sh
|
||||
git clone --recursive https://github.com/PX4/Hawkeye.git
|
||||
cd Hawkeye
|
||||
make release
|
||||
```
|
||||
|
||||
The binary is placed at `build/hawkeye`.
|
||||
|
||||
On Linux, the following packages are required:
|
||||
|
||||
```sh
|
||||
sudo apt install build-essential cmake libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libgl-dev
|
||||
```
|
||||
|
||||
On Windows, use Visual Studio with the C/C++ workload and CMake.
|
||||
|
||||
## Usage with SIH SITL
|
||||
|
||||
### Single Vehicle
|
||||
|
||||
In one terminal, start SIH:
|
||||
|
||||
```sh
|
||||
make px4_sitl_sih sihsim_quadx
|
||||
```
|
||||
|
||||
In another terminal, start Hawkeye:
|
||||
|
||||
```sh
|
||||
hawkeye
|
||||
```
|
||||
|
||||
Hawkeye connects on UDP port **19410** by default — the same port SIH sends `HIL_STATE_QUATERNION` on.
|
||||
|
||||
### Multi-Vehicle
|
||||
|
||||
Each SIH instance sends visualisation data on port `19410 + N` (where N is the instance number).
|
||||
Launch multiple SIH instances, then start Hawkeye with the vehicle count:
|
||||
|
||||
```sh
|
||||
hawkeye -n 3
|
||||
```
|
||||
|
||||
### Vehicle Type Selection
|
||||
|
||||
By default, Hawkeye renders a quadrotor.
|
||||
Use flags to select a different model:
|
||||
|
||||
| Flag | Vehicle |
|
||||
| ----- | --------------------- |
|
||||
| `-mc` | Multicopter (default) |
|
||||
| `-fw` | Fixed-wing |
|
||||
| `-ts` | Tailsitter |
|
||||
|
||||
Example for fixed-wing:
|
||||
|
||||
```sh
|
||||
hawkeye -fw
|
||||
```
|
||||
|
||||
## ULog Replay
|
||||
|
||||
Hawkeye can replay flight logs for post-flight review:
|
||||
|
||||
```sh
|
||||
hawkeye --replay flight.ulg
|
||||
```
|
||||
|
||||
### Ghost Mode
|
||||
|
||||
Overlay a second flight at reduced opacity for visual comparison:
|
||||
|
||||
```sh
|
||||
hawkeye --replay flight_after.ulg --ghost flight_before.ulg
|
||||
```
|
||||
|
||||
This is useful for comparing flights before and after tuning changes.
|
||||
|
||||
## CLI Reference
|
||||
|
||||
| Option | Description |
|
||||
| --------------------------- | ------------------------------------- |
|
||||
| `-udp <port>` | Set UDP listen port (default: 19410) |
|
||||
| `-n <count>` | Number of vehicles to visualise |
|
||||
| `-origin <lat> <lon> <alt>` | Set map origin |
|
||||
| `-mc` | Multicopter model |
|
||||
| `-fw` | Fixed-wing model |
|
||||
| `-ts` | Tailsitter model |
|
||||
| `--replay <file.ulg>` | Replay a ULog file |
|
||||
| `--ghost <file.ulg>` | Overlay a ghost flight for comparison |
|
||||
|
||||
## Camera Controls
|
||||
|
||||
| Mode | Description |
|
||||
| ----- | ------------------------------------ |
|
||||
| Chase | Follows behind the vehicle (default) |
|
||||
| FPV | First-person view from the vehicle |
|
||||
| Free | Fly freely with WASD + mouse |
|
||||
|
||||
## See Also
|
||||
|
||||
- [Hawkeye GitHub Repository](https://github.com/PX4/Hawkeye)
|
||||
- [SIH Simulation](../sim_sih/index.md) — the headless simulator Hawkeye is designed to visualise
|
||||
+16
-18
@@ -74,27 +74,25 @@ The `px4_sitl` target will work, but will also build Gazebo libraries.
|
||||
### Visualization (Optional) {#sitl-visualization}
|
||||
|
||||
SIH is intentionally headless by default.
|
||||
If you need a visual aid to see what the vehicle is doing you can use QGroundControl to track path over ground, and/or jMAVSim as a 3D viewer.
|
||||
If you need a visual aid to see what the vehicle is doing you can use QGroundControl to track path over ground, and/or [Hawkeye](../sim_hawkeye/index.md) as a 3D viewer.
|
||||
|
||||
#### QGroundControl
|
||||
|
||||
QGC auto-connects on UDP port 14550. Open QGC while SIH is running and the vehicle appears on the map view with attitude, position, and telemetry.
|
||||
|
||||
#### jMAVSim (3D Display-Only)
|
||||
#### Hawkeye (3D Visualiser)
|
||||
|
||||
jMAVSim can render a 3D view of the vehicle using MAVLink position data. No physics are simulated in jMAVSim — it is display-only.
|
||||
[Hawkeye](../sim_hawkeye/index.md) renders a real-time 3D view of the vehicle using MAVLink position data. No physics are simulated in Hawkeye — it is a visualiser only.
|
||||
|
||||
In a separate terminal, run:
|
||||
|
||||
```sh
|
||||
./Tools/simulation/jmavsim/jmavsim_run.sh -p 19410 -u -q -o
|
||||
hawkeye
|
||||
```
|
||||
|
||||
Flags:
|
||||
Hawkeye connects on UDP port 19410 by default (the same port SIH sends `HIL_STATE_QUATERNION` on).
|
||||
|
||||
- `-a` for airplane model
|
||||
- `-t` for tailsitter model
|
||||
- `-o` enable display-only mode.
|
||||
|
||||
See [jMAVSim Display-Only Mode](../sim_jmavsim/index.md#display-only-mode) for details.
|
||||
Use `-fw` for fixed-wing or `-ts` for tailsitter models. See the [Hawkeye docs](../sim_hawkeye/index.md) for multi-vehicle visualisation and ULog replay.
|
||||
|
||||
### Environment Configuration
|
||||
|
||||
@@ -148,14 +146,14 @@ See [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](../middleware/uxrce_dds.md) for full setu
|
||||
|
||||
PX4 SITL opens the following UDP ports (all instance-aware, offset by instance number N).
|
||||
|
||||
| PX4 sends to (remote) | PX4 listens on (local) | Use for | Instance offset |
|
||||
| --------------------- | ---------------------- | ------------------------------- | ----------------------------------------- |
|
||||
| **14550** | 18570 (+N) | QGroundControl, GCS tools | Yes |
|
||||
| **14540** (+N) | 14580 (+N) | MAVSDK, MAVROS, offboard APIs | Yes (capped at 14549 for 10+ instances) |
|
||||
| **14030** (+N) | 14280 (+N) | Onboard camera/payload | Yes |
|
||||
| **13280** (+N) | 13030 (+N) | Gimbal control | Yes |
|
||||
| **19410** (+N) | 19450 (+N) | jMAVSim display-only (SIH only) | Yes |
|
||||
| **8888** | - | uXRCE-DDS / ROS 2 | No (use DDS namespace for multi-instance) |
|
||||
| PX4 sends to (remote) | PX4 listens on (local) | Use for | Instance offset |
|
||||
| --------------------- | ---------------------- | ----------------------------- | ----------------------------------------- |
|
||||
| **14550** | 18570 (+N) | QGroundControl, GCS tools | Yes |
|
||||
| **14540** (+N) | 14580 (+N) | MAVSDK, MAVROS, offboard APIs | Yes (capped at 14549 for 10+ instances) |
|
||||
| **14030** (+N) | 14280 (+N) | Onboard camera/payload | Yes |
|
||||
| **13280** (+N) | 13030 (+N) | Gimbal control | Yes |
|
||||
| **19410** (+N) | 19450 (+N) | Hawkeye visualizer (SIH only) | Yes |
|
||||
| **8888** | - | uXRCE-DDS / ROS 2 | No (use DDS namespace for multi-instance) |
|
||||
|
||||
QGC auto-connects on port **14550** by default. MAVSDK connects on **14540**. No manual port configuration needed for single-instance use.
|
||||
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
# Holybro SiK Telemetry Radio - Long Range
|
||||
|
||||
This Holybro SiK Long Range Telemetry Radio is a small, light, and inexpensive open-source radio platform with an extended range (~20km) compared to the standard model.
|
||||
|
||||
This radio is plug-and-play, ready for all Pixhawk Standard and other similar flight controllers, providing the easiest way to set up a telemetry connection between your controller and a ground station.
|
||||
It uses open-source firmware that has been specially designed to work well with MAVLink packets and to be integrated with PX4, ArduPilot, Mission Planner and QGroundControl.
|
||||
|
||||
The radios are available in 915 MHz or 433 MHz versions.
|
||||
Please purchase the model that is appropriate for your country/region.
|
||||
|
||||

|
||||
|
||||
## Where to Buy
|
||||
|
||||
- [Holybro SiK Telemetry Radio - Long Range](https://holybro.com/collections/telemetry-radios/products/sik-telemetry-radio-1w)
|
||||
|
||||
## Features
|
||||
|
||||
- 1W maximum RF output and up to 20km range (compared to 100mW/300m for the short range version).
|
||||
- Open-source SIK firmware
|
||||
- Plug-n-play for Pixhawk Standard Flight Controllers
|
||||
- The Easiest way to connect your controller and Ground Station
|
||||
- Interchangeable air and ground radio
|
||||
- 6-position JST-GH connector
|
||||
|
||||
## Specification
|
||||
|
||||
- 1 W maximum output power (adjustable) -117 dBm receive sensitivity
|
||||
- RP-SMA connector
|
||||
- 2-way full-duplex communication through adaptive TDM UART interface
|
||||
- Transparent serial link
|
||||
- MAVLink protocol framing
|
||||
- Frequency Hopping Spread Spectrum (FHSS) Configurable duty cycle
|
||||
- Error correction corrects up to 25% of bit errors Open-source SIK firmware
|
||||
- Configurable through Mission Planner & APM Planner
|
||||
- FT230X USB to BASIC UART IC
|
||||
- USB Type C connector
|
||||
- XT30 power connector for 7~28V DC input
|
||||
|
||||
## LEDs Indicators Status
|
||||
|
||||
The radios have four status LEDs.
|
||||
The USB `RX` and `TX` LEDs indicate the status of reception and transmission of the USB port.
|
||||
The `RADIO` and `ACT` two LED lights indicate the status of the RF circuit.
|
||||
|
||||
- USB-TX LED (orange):
|
||||
- Blinking: USB port has data transmission
|
||||
- Off: USB port has no data transmission
|
||||
- USB-RX LED (orange):
|
||||
- Blinking: USB port has data reception
|
||||
- Off: USB port has no data reception
|
||||
- Radio LED (Green)
|
||||
- Blinking: Searching for another radio
|
||||
- Solid: Link is established with another radio
|
||||
- ACT LED (Red)
|
||||
- Flashing: Transmitting data
|
||||
- Solid: In firmware update mode
|
||||
|
||||

|
||||
|
||||
## Connecting to Flight Controller
|
||||
|
||||
Supply the power (7~28V) to the radio via the XT30 connector.
|
||||
Use the 6-pin JST-GH connector that comes with the radio to connect the radio to your flight controller's `TELEM1` port.
|
||||
|
||||
Note that `TELEM2` can also be used, but you may need to [configure the telemetry port](../peripherals/mavlink_peripherals.md) on some flight controllers.
|
||||
|
||||
## Connecting to a PC or Ground Station
|
||||
|
||||
First, power the module with a 7~28V DC source.
|
||||
Then, connect the radio to your Windows PC or Ground Station using a Type-C USB cable.
|
||||
|
||||
The necessary drivers should be installed automatically, and the radio will appear as a new “USB Serial Port” in the Windows Device Manager under Ports (COM & LPT).
|
||||
The Mission Planner's COM Port selection drop-down should also include the newly added COM port.
|
||||
|
||||
## Packages Include
|
||||
|
||||
### Single Radio
|
||||
|
||||
- 1W Radio modules with antennas (1)
|
||||
- High-gain omnidirectional antenna (1)
|
||||
- Male Type-C to male Type-C USB cable (1)
|
||||
- Male XT30 to female XT30 adapter cable (1)
|
||||
- Male XT30 to female XT60 adapter cable (1)
|
||||
- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC)
|
||||
- Rubber damping grommet (3)
|
||||
|
||||

|
||||
|
||||
### Pair Radios
|
||||
|
||||
- 1W Radio modules with antennas (2)
|
||||
- High-gain omnidirectional antenna (2)
|
||||
- Male Type-C to male Type-C USB cable (1)
|
||||
- Male XT30 to female XT30 adapter cable (1)
|
||||
- Male XT30 to female XT60 adapter cable (1)
|
||||
- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC)
|
||||
- Rubber damping grommet (3)
|
||||
|
||||

|
||||
@@ -6,7 +6,6 @@ PX4 supports a number of types of telemetry radios:
|
||||
|
||||
- [SiK Radio](../telemetry/sik_radio.md) based firmware (more generally, any radio with a UART interface should work).
|
||||
- [HolyBro SiK Telemetry Radio](../telemetry/holybro_sik_radio.md)
|
||||
- [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md)
|
||||
- [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md)
|
||||
- [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md)
|
||||
- <del>_HKPilot Telemetry Radio_</del> (Discontinued)
|
||||
|
||||
@@ -14,7 +14,6 @@ Hardware for the SiK radio can be obtained from various manufacturers/stores in
|
||||
## Vendors
|
||||
|
||||
- [Holybro Telemetry Radio](../telemetry/holybro_sik_radio.md)
|
||||
- [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md)
|
||||
- [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md)
|
||||
- [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md)
|
||||
- <del>_HKPilot Telemetry Radio_</del> (Discontinued)
|
||||
|
||||
File diff suppressed because one or more lines are too long
Submodule platforms/nuttx/NuttX/nuttx updated: dcd640cdc8...29450774d7
@@ -31,33 +31,4 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <board_config.h>
|
||||
|
||||
#if defined(CONFIG_I2C)
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
struct i2c_master_s;
|
||||
|
||||
struct i2c_msg_s {
|
||||
uint32_t frequency;
|
||||
uint16_t addr;
|
||||
uint16_t flags;
|
||||
uint8_t *buffer;
|
||||
int length;
|
||||
};
|
||||
|
||||
#define I2C_M_READ 0x0001
|
||||
|
||||
#define I2C_TRANSFER(dev, msgs, count) px4_qurt_i2c_transfer(dev, msgs, count)
|
||||
|
||||
struct i2c_master_s *px4_i2cbus_initialize(int bus);
|
||||
int px4_i2cbus_uninitialize(struct i2c_master_s *dev);
|
||||
int px4_qurt_i2c_transfer(struct i2c_master_s *dev, struct i2c_msg_s *msgs, unsigned count);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* CONFIG_I2C */
|
||||
// Placeholder
|
||||
|
||||
@@ -40,7 +40,6 @@ set(QURT_LAYER_SRCS
|
||||
main.cpp
|
||||
qurt_log.cpp
|
||||
SerialImpl.cpp
|
||||
px4_i2c.cpp
|
||||
)
|
||||
|
||||
add_library(px4_layer
|
||||
@@ -49,4 +48,3 @@ add_library(px4_layer
|
||||
|
||||
target_link_libraries(px4_layer PRIVATE work_queue)
|
||||
target_link_libraries(px4_layer PRIVATE drivers_board)
|
||||
target_link_libraries(px4_layer PRIVATE drivers__device)
|
||||
|
||||
@@ -1,164 +0,0 @@
|
||||
/****************************************************************************
|
||||
*
|
||||
* Copyright (C) 2022 ModalAI, Inc. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name PX4 nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file px4_i2c.cpp
|
||||
*
|
||||
* NuttX-compatible I2C API shim for QuRT/SLPI.
|
||||
* Implements px4_i2cbus_initialize/uninitialize and I2C_TRANSFER
|
||||
* on top of the QuRT device::I2C callback infrastructure by deriving
|
||||
* from device::I2C to access its protected transfer methods.
|
||||
*/
|
||||
|
||||
#include <px4_platform_common/px4_config.h>
|
||||
#include <px4_platform_common/log.h>
|
||||
#include <px4_arch/micro_hal.h>
|
||||
|
||||
#if defined(CONFIG_I2C)
|
||||
|
||||
#include <lib/drivers/device/qurt/I2C.hpp>
|
||||
|
||||
/**
|
||||
* Minimal derived class that exposes the protected I2C::transfer()
|
||||
* and I2C::set_device_address() for use by the compatibility shim.
|
||||
*/
|
||||
class I2CShim : public device::I2C
|
||||
{
|
||||
public:
|
||||
I2CShim(int bus) :
|
||||
I2C(0, "i2c_shim", bus, 0x01, 100000)
|
||||
{}
|
||||
|
||||
int do_transfer(uint8_t addr, const uint8_t *send, unsigned send_len,
|
||||
uint8_t *recv, unsigned recv_len)
|
||||
{
|
||||
set_device_address(addr, false);
|
||||
return transfer(send, send_len, recv, recv_len);
|
||||
}
|
||||
};
|
||||
|
||||
struct i2c_master_s {
|
||||
I2CShim *shim;
|
||||
};
|
||||
|
||||
struct i2c_master_s *px4_i2cbus_initialize(int bus)
|
||||
{
|
||||
auto *shim = new I2CShim(bus);
|
||||
|
||||
if (shim == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (shim->init() != PX4_OK) {
|
||||
delete shim;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto *dev = new i2c_master_s;
|
||||
|
||||
if (dev == nullptr) {
|
||||
delete shim;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
dev->shim = shim;
|
||||
return dev;
|
||||
}
|
||||
|
||||
int px4_i2cbus_uninitialize(struct i2c_master_s *dev)
|
||||
{
|
||||
if (dev != nullptr) {
|
||||
delete dev->shim;
|
||||
delete dev;
|
||||
}
|
||||
|
||||
return PX4_OK;
|
||||
}
|
||||
|
||||
int px4_qurt_i2c_transfer(struct i2c_master_s *dev, struct i2c_msg_s *msgs, unsigned count)
|
||||
{
|
||||
if (dev == nullptr || dev->shim == nullptr || msgs == nullptr || count == 0) {
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
unsigned i = 0;
|
||||
|
||||
while (i < count) {
|
||||
struct i2c_msg_s *msg = &msgs[i];
|
||||
|
||||
// Check for write+read pair to the same address (common i2cdetect pattern)
|
||||
if ((i + 1 < count) &&
|
||||
!(msg->flags & I2C_M_READ) &&
|
||||
(msgs[i + 1].flags & I2C_M_READ) &&
|
||||
(msg->addr == msgs[i + 1].addr)) {
|
||||
|
||||
int ret = dev->shim->do_transfer(msg->addr,
|
||||
msg->buffer, msg->length,
|
||||
msgs[i + 1].buffer, msgs[i + 1].length);
|
||||
|
||||
if (ret != PX4_OK) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
i += 2;
|
||||
|
||||
} else if (msg->flags & I2C_M_READ) {
|
||||
// Single read
|
||||
int ret = dev->shim->do_transfer(msg->addr,
|
||||
nullptr, 0,
|
||||
msg->buffer, msg->length);
|
||||
|
||||
if (ret != PX4_OK) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
i++;
|
||||
|
||||
} else {
|
||||
// Single write
|
||||
int ret = dev->shim->do_transfer(msg->addr,
|
||||
msg->buffer, msg->length,
|
||||
nullptr, 0);
|
||||
|
||||
if (ret != PX4_OK) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
return PX4_OK;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_I2C */
|
||||
@@ -49,7 +49,7 @@ parameters:
|
||||
default: 0
|
||||
reboot_required: true
|
||||
min: 0
|
||||
max: 3
|
||||
max: 2
|
||||
VOXL_ESC_SDIR1:
|
||||
description:
|
||||
short: UART ESC ID 1 Spin Direction Flag
|
||||
|
||||
@@ -16,4 +16,4 @@ parameters:
|
||||
default: 0
|
||||
reboot_required: true
|
||||
min: 0
|
||||
max: 5
|
||||
max: 3
|
||||
|
||||
@@ -126,7 +126,7 @@ parameters:
|
||||
6: Ground Control Station (UART2 outputs NMEA)
|
||||
default: 0
|
||||
min: 0
|
||||
max: 6
|
||||
max: 1
|
||||
reboot_required: true
|
||||
GPS_UBX_BAUD2:
|
||||
description:
|
||||
|
||||
@@ -93,7 +93,7 @@ parameters:
|
||||
default: 14
|
||||
reboot_required: true
|
||||
min: 0
|
||||
max: 19
|
||||
max: 15
|
||||
ADSB_MAX_SPEED:
|
||||
description:
|
||||
short: ADSB-Out Vehicle Max Speed
|
||||
|
||||
@@ -158,12 +158,10 @@ out:
|
||||
}
|
||||
|
||||
void
|
||||
I2C::set_device_address(int address, bool log)
|
||||
I2C::set_device_address(int address)
|
||||
{
|
||||
if ((_i2c_fd != PX4_ERROR) && (_set_i2c_address != NULL)) {
|
||||
if (log) {
|
||||
PX4_INFO("Set i2c address 0x%x, fd %d", address, _i2c_fd);
|
||||
}
|
||||
PX4_INFO("Set i2c address 0x%x, fd %d", address, _i2c_fd);
|
||||
|
||||
pthread_mutex_lock(_mutex);
|
||||
_set_i2c_address(_i2c_fd, address);
|
||||
|
||||
@@ -103,7 +103,7 @@ protected:
|
||||
*/
|
||||
virtual int probe() { return PX4_OK; }
|
||||
|
||||
virtual void set_device_address(int address, bool log = true);
|
||||
virtual void set_device_address(int address);
|
||||
|
||||
/**
|
||||
* Perform an I2C transaction to the device.
|
||||
|
||||
@@ -98,16 +98,6 @@ add_custom_command(OUTPUT ${generated_serial_params_file} ${generated_module_par
|
||||
COMMENT "Generating serial_params.c"
|
||||
)
|
||||
|
||||
# readonly params config (used by both px_process_params.py and px_generate_params.py)
|
||||
set(READONLY_PARAMS_CONFIG "${PX4_BOARD_DIR}/readonly_params.yaml")
|
||||
if(EXISTS ${READONLY_PARAMS_CONFIG})
|
||||
set(READONLY_PARAMS_ARG "--readonly-config" "${READONLY_PARAMS_CONFIG}")
|
||||
set(READONLY_PARAMS_DEPEND "${READONLY_PARAMS_CONFIG}")
|
||||
else()
|
||||
set(READONLY_PARAMS_ARG "")
|
||||
set(READONLY_PARAMS_DEPEND "")
|
||||
endif()
|
||||
|
||||
set(parameters_xml ${PX4_BINARY_DIR}/parameters.xml)
|
||||
set(parameters_json ${PX4_BINARY_DIR}/parameters.json)
|
||||
add_custom_command(OUTPUT ${parameters_xml} ${parameters_json} ${parameters_json}.xz
|
||||
@@ -118,7 +108,6 @@ add_custom_command(OUTPUT ${parameters_xml} ${parameters_json} ${parameters_json
|
||||
--compress
|
||||
--overrides ${PARAM_DEFAULT_OVERRIDES}
|
||||
--board ${PX4_BOARD}
|
||||
${READONLY_PARAMS_ARG}
|
||||
#--verbose
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${PX4_SOURCE_DIR}/Tools/validate_json.py
|
||||
--schema-file ${PX4_SOURCE_DIR}/src/modules/mavlink/mavlink/component_information/parameter.schema.json
|
||||
@@ -128,26 +117,21 @@ add_custom_command(OUTPUT ${parameters_xml} ${parameters_json} ${parameters_json
|
||||
DEPENDS
|
||||
${generated_serial_params_file}
|
||||
${generated_module_params_file}
|
||||
${READONLY_PARAMS_DEPEND}
|
||||
px4params/srcparser.py
|
||||
px4params/srcscanner.py
|
||||
px4params/jsonout.py
|
||||
px4params/xmlout.py
|
||||
px4params/readonly_config.py
|
||||
px_process_params.py
|
||||
COMMENT "Generating parameters.xml"
|
||||
)
|
||||
add_custom_target(parameters_xml DEPENDS ${parameters_xml})
|
||||
|
||||
# generate px4_parameters.hpp
|
||||
|
||||
add_custom_command(OUTPUT px4_parameters.hpp
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/px_generate_params.py
|
||||
--xml ${parameters_xml} --dest ${CMAKE_CURRENT_BINARY_DIR}
|
||||
${READONLY_PARAMS_ARG}
|
||||
DEPENDS
|
||||
${PX4_BINARY_DIR}/parameters.xml
|
||||
${READONLY_PARAMS_DEPEND}
|
||||
px_generate_params.py
|
||||
templates/px4_parameters.hpp.jinja
|
||||
)
|
||||
|
||||
@@ -175,23 +175,6 @@ __EXPORT const char *param_name(param_t param);
|
||||
*/
|
||||
__EXPORT bool param_is_volatile(param_t param);
|
||||
|
||||
/**
|
||||
* Obtain the read-only state of a parameter.
|
||||
*
|
||||
* @param param A handle returned by param_find or passed by param_foreach.
|
||||
* @return true if the parameter is read-only
|
||||
*/
|
||||
__EXPORT bool param_is_readonly(param_t param);
|
||||
|
||||
/**
|
||||
* Lock all read-only parameters.
|
||||
*
|
||||
* Before this call, read-only parameters can be freely modified (e.g. by
|
||||
* startup scripts). After this call, any attempt to set, set-default, or
|
||||
* reset a read-only parameter will be rejected.
|
||||
*/
|
||||
__EXPORT void param_lock_readonly(void);
|
||||
|
||||
/**
|
||||
* Test whether a parameter's value has changed from the default.
|
||||
*
|
||||
|
||||
@@ -413,11 +413,6 @@ param_set_internal(param_t param, const void *val, bool mark_saved, bool notify_
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
if (param_is_readonly(param)) {
|
||||
PX4_WARN("param %s is read-only", param_name(param));
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
int result = -1;
|
||||
bool param_changed = false;
|
||||
perf_begin(param_set_perf);
|
||||
@@ -549,11 +544,6 @@ int param_set_default_value(param_t param, const void *val)
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
if (param_is_readonly(param)) {
|
||||
PX4_WARN("param %s is read-only", param_name(param));
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
int result = PX4_ERROR;
|
||||
|
||||
|
||||
@@ -625,10 +615,6 @@ static int param_reset_internal(param_t param, bool notify = true, bool autosave
|
||||
return false;
|
||||
#endif
|
||||
|
||||
if (param_is_readonly(param)) {
|
||||
return 0; // silently skip — param_reset_all loops over all params
|
||||
}
|
||||
|
||||
bool param_found = user_config.contains(param);
|
||||
|
||||
if (handle_in_range(param)) {
|
||||
|
||||
@@ -96,26 +96,6 @@ bool param_is_volatile(param_t param)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool params_locked = false;
|
||||
|
||||
bool param_is_readonly(param_t param)
|
||||
{
|
||||
if (params_locked && handle_in_range(param)) {
|
||||
for (const auto &p : px4::parameters_readonly) {
|
||||
if (static_cast<px4::params>(param) == p) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void param_lock_readonly()
|
||||
{
|
||||
params_locked = true;
|
||||
}
|
||||
|
||||
size_t param_size(param_t param)
|
||||
{
|
||||
if (handle_in_range(param)) {
|
||||
|
||||
@@ -82,8 +82,6 @@ class JsonOutput():
|
||||
|
||||
if param.GetVolatile():
|
||||
curr_param['volatile'] = True
|
||||
if param.GetReadonly():
|
||||
curr_param['readOnly'] = True
|
||||
|
||||
last_param_name = param.GetName()
|
||||
for code in param.GetFieldCodes():
|
||||
|
||||
@@ -104,8 +104,7 @@ If a listed parameter is missing from the Firmware see: [Finding/Updating Parame
|
||||
if bitmask_list:
|
||||
result += bitmask_output
|
||||
# Format the ranges as a table.
|
||||
is_readonly = param.GetReadonly()
|
||||
result += f"Reboot | minValue | maxValue | increment | default | unit | Read-Only\n--- | --- | --- | --- | --- | --- | ---\n{'✓' if reboot_required else ' ' } | {min_val} | {max_val} | {increment} | {def_val} | {unit} | {'✓' if is_readonly else ' '}\n\n"
|
||||
result += f"Reboot | minValue | maxValue | increment | default | unit\n--- | --- | --- | --- | --- | ---\n{'✓' if reboot_required else ' ' } | {min_val} | {max_val} | {increment} | {def_val} | {unit} | \n\n"
|
||||
|
||||
self.output = result
|
||||
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
"""
|
||||
Shared helper to load readonly parameter configuration from YAML.
|
||||
"""
|
||||
import sys
|
||||
|
||||
try:
|
||||
import yaml
|
||||
except ImportError as e:
|
||||
print("Failed to import yaml: " + str(e))
|
||||
print("")
|
||||
print("You may need to install it using:")
|
||||
print(" pip3 install --user pyyaml")
|
||||
print("")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def load_readonly_params(readonly_config, all_param_names):
|
||||
"""
|
||||
Load readonly parameter config and return the set of readonly param names.
|
||||
|
||||
@param readonly_config: path to readonly_params.yaml
|
||||
@param all_param_names: set of all known parameter names
|
||||
@return: set of readonly parameter names
|
||||
"""
|
||||
if readonly_config is None:
|
||||
return set()
|
||||
|
||||
with open(readonly_config, 'r') as f:
|
||||
config = yaml.safe_load(f)
|
||||
|
||||
mode = config.get('mode', 'block')
|
||||
listed_params = set(config.get('parameters', []))
|
||||
|
||||
# Validate that all listed parameters actually exist
|
||||
unknown = listed_params - all_param_names
|
||||
if unknown:
|
||||
print("Error: readonly_params.yaml lists unknown parameters: %s" % ', '.join(sorted(unknown)))
|
||||
sys.exit(1)
|
||||
|
||||
if mode == 'block':
|
||||
# Listed params are read-only
|
||||
return listed_params
|
||||
elif mode == 'allow':
|
||||
# Only listed params are writable, all others are read-only
|
||||
return all_param_names - listed_params
|
||||
else:
|
||||
print("Error: readonly_params.yaml has unknown mode '%s' (expected 'block' or 'allow')" % mode)
|
||||
sys.exit(1)
|
||||
@@ -61,7 +61,6 @@ class Parameter(object):
|
||||
self.category = ""
|
||||
self.volatile = False
|
||||
self.boolean = False
|
||||
self.readonly = False
|
||||
|
||||
def GetName(self):
|
||||
return self.name
|
||||
@@ -81,9 +80,6 @@ class Parameter(object):
|
||||
def GetBoolean(self):
|
||||
return self.boolean
|
||||
|
||||
def GetReadonly(self):
|
||||
return self.readonly
|
||||
|
||||
def SetField(self, code, value):
|
||||
"""
|
||||
Set named field value
|
||||
@@ -114,12 +110,6 @@ class Parameter(object):
|
||||
"""
|
||||
self.boolean = True
|
||||
|
||||
def SetReadonly(self):
|
||||
"""
|
||||
Set readonly flag
|
||||
"""
|
||||
self.readonly = True
|
||||
|
||||
def SetCategory(self, category):
|
||||
"""
|
||||
Set param category
|
||||
|
||||
@@ -43,8 +43,6 @@ class XMLOutput():
|
||||
xml_param.attrib["volatile"] = "true"
|
||||
if param.GetBoolean():
|
||||
xml_param.attrib["boolean"] = "true"
|
||||
if param.GetReadonly():
|
||||
xml_param.attrib["readonly"] = "true"
|
||||
if (param.GetCategory()):
|
||||
xml_param.attrib["category"] = param.GetCategory()
|
||||
last_param_name = param.GetName()
|
||||
|
||||
@@ -18,15 +18,13 @@ except ImportError as e:
|
||||
sys.exit(1)
|
||||
|
||||
import os
|
||||
from px4params.readonly_config import load_readonly_params
|
||||
|
||||
def generate(xml_file, dest='.', readonly_config=None):
|
||||
def generate(xml_file, dest='.'):
|
||||
"""
|
||||
Generate px4 param source from xml.
|
||||
|
||||
@param xml_file: input parameter xml file
|
||||
@param dest: Destination directory for generated files
|
||||
@param readonly_config: path to readonly_params.yaml (optional)
|
||||
None means to scan everything.
|
||||
"""
|
||||
# pylint: disable=broad-except
|
||||
@@ -41,9 +39,6 @@ def generate(xml_file, dest='.', readonly_config=None):
|
||||
|
||||
params = sorted(params, key=lambda name: name.attrib["name"])
|
||||
|
||||
all_param_names = set(p.attrib["name"] for p in params)
|
||||
readonly_params = load_readonly_params(readonly_config, all_param_names)
|
||||
|
||||
script_path = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
# for jinja docs see: http://jinja.pocoo.org/docs/2.9/api/
|
||||
@@ -60,14 +55,13 @@ def generate(xml_file, dest='.', readonly_config=None):
|
||||
template = env.get_template(template_file)
|
||||
with open(os.path.join(
|
||||
dest, template_file.replace('.jinja','')), 'w') as fid:
|
||||
fid.write(template.render(params=params, readonly_params=readonly_params))
|
||||
fid.write(template.render(params=params))
|
||||
|
||||
if __name__ == "__main__":
|
||||
arg_parser = argparse.ArgumentParser()
|
||||
arg_parser.add_argument("--xml", help="parameter xml file")
|
||||
arg_parser.add_argument("--dest", help="destination path", default=os.path.curdir)
|
||||
arg_parser.add_argument("--readonly-config", help="path to readonly_params.yaml", default=None)
|
||||
args = arg_parser.parse_args()
|
||||
generate(xml_file=args.xml, dest=args.dest, readonly_config=args.readonly_config)
|
||||
generate(xml_file=args.xml, dest=args.dest)
|
||||
|
||||
# vim: set et fenc=utf-8 ff=unix sts=4 sw=4 ts=4 :
|
||||
|
||||
@@ -47,7 +47,7 @@ from __future__ import print_function
|
||||
import sys
|
||||
import os
|
||||
import argparse
|
||||
from px4params import srcscanner, srcparser, injectxmlparams, xmlout, markdownout, jsonout, readonly_config
|
||||
from px4params import srcscanner, srcparser, injectxmlparams, xmlout, markdownout, jsonout
|
||||
|
||||
import lzma #to create .xz file
|
||||
import json
|
||||
@@ -102,10 +102,6 @@ def main():
|
||||
default="{}",
|
||||
metavar="OVERRIDES",
|
||||
help="a dict of overrides in the form of a json string")
|
||||
parser.add_argument("--readonly-config",
|
||||
default=None,
|
||||
metavar="FILENAME",
|
||||
help="path to readonly_params.yaml")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -147,18 +143,6 @@ def main():
|
||||
param.default = val
|
||||
print("OVERRIDING {:s} to {:s}!!!!!".format(name, val))
|
||||
|
||||
# Mark readonly parameters
|
||||
if args.readonly_config:
|
||||
all_param_names = set()
|
||||
for group in param_groups:
|
||||
for param in group.GetParams():
|
||||
all_param_names.add(param.GetName())
|
||||
readonly_params = readonly_config.load_readonly_params(args.readonly_config, all_param_names)
|
||||
for group in param_groups:
|
||||
for param in group.GetParams():
|
||||
if param.GetName() in readonly_params:
|
||||
param.SetReadonly()
|
||||
|
||||
output_files = []
|
||||
|
||||
# Output to XML file
|
||||
|
||||
@@ -47,13 +47,5 @@ static constexpr params parameters_volatile[] = {
|
||||
{% endfor %}
|
||||
};
|
||||
|
||||
static constexpr params parameters_readonly[] = {
|
||||
{% for param in params %}
|
||||
{%- if param.attrib["name"] in readonly_params %}
|
||||
params::{{ param.attrib["name"] }},
|
||||
{%- endif -%}
|
||||
{% endfor %}
|
||||
};
|
||||
|
||||
|
||||
} // namespace px4
|
||||
|
||||
@@ -141,6 +141,17 @@ void ModeChecks::checkAndReport(const Context &context, Report &reporter)
|
||||
reporter.clearCanRunBits((NavModes)reporter.failsafeFlags().mode_req_mission);
|
||||
}
|
||||
|
||||
if (reporter.failsafeFlags().offboard_control_signal_lost && reporter.failsafeFlags().mode_req_offboard_signal != 0) {
|
||||
/* EVENT
|
||||
* @description
|
||||
* The offboard component is not sending setpoints or the required estimate (e.g. position) is missing.
|
||||
*/
|
||||
reporter.armingCheckFailure((NavModes)reporter.failsafeFlags().mode_req_offboard_signal, health_component_t::system,
|
||||
events::ID("check_modes_offboard_signal"),
|
||||
events::Log::Error, "No offboard signal");
|
||||
reporter.clearCanRunBits((NavModes)reporter.failsafeFlags().mode_req_offboard_signal);
|
||||
}
|
||||
|
||||
if (reporter.failsafeFlags().home_position_invalid && reporter.failsafeFlags().mode_req_home_position != 0) {
|
||||
/* EVENT
|
||||
*/
|
||||
|
||||
@@ -40,9 +40,6 @@ void OffboardChecks::checkAndReport(const Context &context, Report &reporter)
|
||||
reporter.failsafeFlags().offboard_control_signal_lost = true;
|
||||
|
||||
offboard_control_mode_s offboard_control_mode;
|
||||
const NavModes affected_modes = (NavModes)reporter.failsafeFlags().mode_req_offboard_signal;
|
||||
const bool has_affected_modes = affected_modes != NavModes::None;
|
||||
bool has_specific_reason = false;
|
||||
|
||||
if (_offboard_control_mode_sub.copy(&offboard_control_mode)) {
|
||||
|
||||
@@ -55,63 +52,16 @@ void OffboardChecks::checkAndReport(const Context &context, Report &reporter)
|
||||
|
||||
if (offboard_control_mode.position && reporter.failsafeFlags().local_position_invalid) {
|
||||
offboard_available = false;
|
||||
has_specific_reason = true;
|
||||
|
||||
if (has_affected_modes) {
|
||||
/* EVENT
|
||||
* @description
|
||||
* Offboard position control requires a valid local position estimate.
|
||||
*/
|
||||
reporter.armingCheckFailure(affected_modes, health_component_t::system,
|
||||
events::ID("check_modes_offboard_no_local_position"),
|
||||
events::Log::Error, "Offboard requires local position");
|
||||
reporter.clearCanRunBits(affected_modes);
|
||||
}
|
||||
|
||||
} else if (offboard_control_mode.velocity && reporter.failsafeFlags().local_velocity_invalid) {
|
||||
offboard_available = false;
|
||||
has_specific_reason = true;
|
||||
|
||||
if (has_affected_modes) {
|
||||
/* EVENT
|
||||
* @description
|
||||
* Offboard velocity control requires a valid local velocity estimate.
|
||||
*/
|
||||
reporter.armingCheckFailure(affected_modes, health_component_t::system,
|
||||
events::ID("check_modes_offboard_no_local_velocity"),
|
||||
events::Log::Error, "Offboard requires local velocity");
|
||||
reporter.clearCanRunBits(affected_modes);
|
||||
}
|
||||
|
||||
} else if ((offboard_control_mode.acceleration || offboard_control_mode.attitude)
|
||||
&& reporter.failsafeFlags().attitude_invalid) {
|
||||
} else if (offboard_control_mode.acceleration && reporter.failsafeFlags().attitude_invalid) {
|
||||
// OFFBOARD acceleration handled by position controller
|
||||
offboard_available = false;
|
||||
has_specific_reason = true;
|
||||
|
||||
if (has_affected_modes) {
|
||||
/* EVENT
|
||||
* @description
|
||||
* Offboard acceleration and attitude control require a valid attitude estimate.
|
||||
*/
|
||||
reporter.armingCheckFailure(affected_modes, health_component_t::system,
|
||||
events::ID("check_modes_offboard_no_attitude"),
|
||||
events::Log::Error, "Offboard requires attitude estimate");
|
||||
reporter.clearCanRunBits(affected_modes);
|
||||
}
|
||||
}
|
||||
|
||||
// This is a mode requirement, no need to report
|
||||
reporter.failsafeFlags().offboard_control_signal_lost = !offboard_available;
|
||||
}
|
||||
|
||||
if (reporter.failsafeFlags().offboard_control_signal_lost && !has_specific_reason && has_affected_modes) {
|
||||
/* EVENT
|
||||
* @description
|
||||
* The offboard component is not sending recent setpoints.
|
||||
*/
|
||||
reporter.armingCheckFailure(affected_modes, health_component_t::system,
|
||||
events::ID("check_modes_offboard_signal_lost"),
|
||||
events::Log::Error, "No offboard signal");
|
||||
reporter.clearCanRunBits(affected_modes);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -507,7 +507,7 @@ parameters:
|
||||
4: Terminate
|
||||
default: 0
|
||||
min: 0
|
||||
max: 4
|
||||
max: 3
|
||||
COM_PARACHUTE:
|
||||
description:
|
||||
short: Require MAVLink parachute system to be present and healthy
|
||||
|
||||
@@ -105,7 +105,7 @@ FixedwingAttitudeControl::vehicle_manual_poll(const float yaw_body)
|
||||
pitch_body = constrain(pitch_body,
|
||||
-radians(_param_fw_man_p_max.get()), radians(_param_fw_man_p_max.get()));
|
||||
|
||||
const Quatf q_sp_rp = Eulerf(roll_body, pitch_body, 0.f);
|
||||
const Quatf q_sp_rp = AxisAnglef(roll_body, pitch_body, 0.f);
|
||||
const Quatf q_sp_yaw(cosf(yaw_body / 2.f), 0.f, 0.f, sinf(yaw_body / 2.f));
|
||||
Quatf q = q_sp_yaw * q_sp_rp;
|
||||
|
||||
|
||||
@@ -140,9 +140,6 @@ MavlinkParametersManager::handle_message(const mavlink_message_t *msg)
|
||||
PX4_ERR("param types mismatch param: %s", name);
|
||||
send_error(MAV_PARAM_ERROR_TYPE_MISMATCH, name, -1, msg->sysid, msg->compid);
|
||||
|
||||
} else if (param_is_readonly(param)) {
|
||||
PX4_WARN("param %s is read-only", name);
|
||||
send_error(MAV_PARAM_ERROR_READ_ONLY, name, -1, msg->sysid, msg->compid);
|
||||
|
||||
} else {
|
||||
// According to the mavlink spec we should always acknowledge a write operation.
|
||||
|
||||
@@ -72,7 +72,7 @@ parameters:
|
||||
23: VTOL Tailsitter
|
||||
default: 0
|
||||
min: 0
|
||||
max: 23
|
||||
max: 22
|
||||
MAV_USEHILGPS:
|
||||
description:
|
||||
short: Use/Accept HIL GPS message even if not in HIL mode
|
||||
|
||||
@@ -15,7 +15,7 @@ parameters:
|
||||
5: yaw fixed
|
||||
default: 0
|
||||
min: 0
|
||||
max: 5
|
||||
max: 4
|
||||
- group: Multicopter Attitude Control
|
||||
definitions:
|
||||
MPC_YAWRAUTO_MAX:
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace i2cdetect
|
||||
|
||||
int detect(int bus)
|
||||
{
|
||||
PX4_INFO("Scanning I2C bus: %d", bus);
|
||||
printf("Scanning I2C bus: %d\n", bus);
|
||||
|
||||
int ret = PX4_ERROR;
|
||||
|
||||
@@ -62,17 +62,15 @@ int detect(int bus)
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
// Line buffer for building up output
|
||||
char line[80];
|
||||
int pos = 0;
|
||||
|
||||
PX4_INFO(" 0 1 2 3 4 5 6 7 8 9 a b c d e f");
|
||||
printf(" 0 1 2 3 4 5 6 7 8 9 a b c d e f\n");
|
||||
|
||||
for (int i = 0; i < 128; i += 16) {
|
||||
pos = snprintf(line, sizeof(line), "%02x: ", i);
|
||||
printf("%02x: ", i);
|
||||
|
||||
for (int j = 0; j < 16; j++) {
|
||||
|
||||
fflush(stdout);
|
||||
|
||||
uint8_t addr = i + j;
|
||||
|
||||
unsigned retry_count = 0;
|
||||
@@ -117,14 +115,14 @@ int detect(int bus)
|
||||
} while (retry_count++ < retries);
|
||||
|
||||
if (found) {
|
||||
pos += snprintf(line + pos, sizeof(line) - pos, "%02x ", addr);
|
||||
printf("%02x ", addr);
|
||||
|
||||
} else {
|
||||
pos += snprintf(line + pos, sizeof(line) - pos, "-- ");
|
||||
printf("-- ");
|
||||
}
|
||||
}
|
||||
|
||||
PX4_INFO("%s", line);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
px4_i2cbus_uninitialize(i2c_dev);
|
||||
|
||||
@@ -81,7 +81,6 @@ static int do_import(const char *param_file_name = nullptr);
|
||||
static int do_show(const char *search_string, bool only_changed);
|
||||
static int do_show_for_airframe();
|
||||
static int do_show_all();
|
||||
static int do_show_locked();
|
||||
static int do_show_quiet(const char *param_name);
|
||||
static int do_show_index(const char *index, bool used_index);
|
||||
static void do_show_print(void *arg, param_t param);
|
||||
@@ -139,7 +138,6 @@ $ reboot
|
||||
PRINT_MODULE_USAGE_COMMAND_DESCR("show", "Show parameter values");
|
||||
PRINT_MODULE_USAGE_PARAM_FLAG('a', "Show all parameters (not just used)", true);
|
||||
PRINT_MODULE_USAGE_PARAM_FLAG('c', "Show only changed params (unused too)", true);
|
||||
PRINT_MODULE_USAGE_PARAM_FLAG('l', "Show only locked (read-only) params", true);
|
||||
PRINT_MODULE_USAGE_PARAM_FLAG('q', "quiet mode, print only param value (name needs to be exact)", true);
|
||||
PRINT_MODULE_USAGE_ARG("<filter>", "Filter by param name (wildcard at end allowed, eg. sys_*)", true);
|
||||
|
||||
@@ -181,8 +179,6 @@ $ reboot
|
||||
PRINT_MODULE_USAGE_ARG("<index>", "Index: an integer >= 0", false);
|
||||
PRINT_MODULE_USAGE_COMMAND_DESCR("find", "Show index of a param");
|
||||
PRINT_MODULE_USAGE_ARG("<param>", "param name", false);
|
||||
|
||||
PRINT_MODULE_USAGE_COMMAND_DESCR("lock", "Lock read-only params (reject future set/reset)");
|
||||
}
|
||||
|
||||
int
|
||||
@@ -272,9 +268,6 @@ param_main(int argc, char *argv[])
|
||||
} else if (!strcmp(argv[2], "-a")) {
|
||||
return do_show_all();
|
||||
|
||||
} else if (!strcmp(argv[2], "-l")) {
|
||||
return do_show_locked();
|
||||
|
||||
} else if (!strcmp(argv[2], "-q")) {
|
||||
if (argc >= 4) {
|
||||
return do_show_quiet(argv[3]);
|
||||
@@ -412,11 +405,6 @@ param_main(int argc, char *argv[])
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!strcmp(argv[1], "lock")) {
|
||||
param_lock_readonly();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
print_usage();
|
||||
@@ -520,7 +508,7 @@ do_save_default()
|
||||
static int
|
||||
do_show(const char *search_string, bool only_changed)
|
||||
{
|
||||
PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved, l = locked\n");
|
||||
PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved\n");
|
||||
// also show unused params if we show non-default values only
|
||||
param_foreach(do_show_print, (char *)search_string, only_changed, !only_changed);
|
||||
PX4_INFO_RAW("\n %u/%u parameters used.\n", param_count_used(), param_count());
|
||||
@@ -543,30 +531,13 @@ do_show_for_airframe()
|
||||
static int
|
||||
do_show_all()
|
||||
{
|
||||
PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved, l = locked\n");
|
||||
PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved\n");
|
||||
param_foreach(do_show_print, nullptr, false, false);
|
||||
PX4_INFO_RAW("\n %u parameters total, %u used.\n", param_count(), param_count_used());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
do_show_print_locked(void *arg, param_t param)
|
||||
{
|
||||
if (param_is_readonly(param)) {
|
||||
do_show_print(arg, param);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
do_show_locked()
|
||||
{
|
||||
PX4_INFO_RAW("Symbols: x = used, + = saved, * = unsaved, l = locked\n");
|
||||
param_foreach(do_show_print_locked, nullptr, false, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
do_show_quiet(const char *param_name)
|
||||
{
|
||||
@@ -636,9 +607,8 @@ do_show_index(const char *index, bool used_index)
|
||||
return 1;
|
||||
}
|
||||
|
||||
PX4_INFO_RAW("index %d: %c %c %c %s [%d,%d] : ", i, (param_used(param) ? 'x' : ' '),
|
||||
PX4_INFO_RAW("index %d: %c %c %s [%d,%d] : ", i, (param_used(param) ? 'x' : ' '),
|
||||
param_value_unsaved(param) ? '*' : (param_value_is_default(param) ? ' ' : '+'),
|
||||
param_is_readonly(param) ? 'l' : ' ',
|
||||
param_name(param), param_get_used_index(param), param_get_index(param));
|
||||
|
||||
switch (param_type(param)) {
|
||||
@@ -707,9 +677,8 @@ do_show_print(void *arg, param_t param)
|
||||
}
|
||||
}
|
||||
|
||||
PX4_INFO_RAW("%c %c %c %s [%d,%d] : ", (param_used(param) ? 'x' : ' '),
|
||||
PX4_INFO_RAW("%c %c %s [%d,%d] : ", (param_used(param) ? 'x' : ' '),
|
||||
param_value_unsaved(param) ? '*' : (param_value_is_default(param) ? ' ' : '+'),
|
||||
param_is_readonly(param) ? 'l' : ' ',
|
||||
param_name(param), param_get_used_index(param), param_get_index(param));
|
||||
|
||||
/*
|
||||
@@ -802,11 +771,6 @@ do_set(const char *name, const char *val, bool fail_on_not_found)
|
||||
return (fail_on_not_found) ? 1 : 0;
|
||||
}
|
||||
|
||||
if (param_is_readonly(param)) {
|
||||
PX4_ERR("Parameter %s is read-only.", name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set parameter if type is known and conversion from string to value turns out fine
|
||||
*/
|
||||
@@ -874,14 +838,6 @@ do_set_custom_default(const char *name, const char *val, bool silent_fail)
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
if (param_is_readonly(param)) {
|
||||
if (!silent_fail) {
|
||||
PX4_ERR("Parameter %s is read-only.", name);
|
||||
}
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
// Set parameter if type is known and conversion from string to value turns out fine
|
||||
switch (param_type(param)) {
|
||||
case PARAM_TYPE_INT32: {
|
||||
|
||||
Reference in New Issue
Block a user