Compare commits

..

219 Commits

Author SHA1 Message Date
Ramon Roche a7e0f69d9e ci: debug with tmate
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-10 14:03:16 -07:00
Ramon Roche 09be71bce4 docs: update failsafe web metadata
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-10 13:33:31 -07:00
Ramon Roche 9fcfe538da ci: debug failsafe web
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-10 12:42:53 -07:00
Ramon Roche 1a56f79f2f ci: fix uorb graphs sort
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-10 11:52:34 -07:00
Ramon Roche 9ff5860c49 tools: sorted uorb graphs
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-10 11:23:52 -07:00
Ramon Roche 5dc041664b cmake: generate sorted dds topics metadata
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-10 08:26:27 -07:00
Ramon Roche 93fbea353d git: ignore metadata dep lib
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-10 06:48:21 -07:00
Ramon Roche 82a0f1ac17 docs: uorb graph updates
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 15:49:27 -07:00
Ramon Roche 3f14c1e3d4 tools: msg docs and dds docs
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 15:34:13 -07:00
Ramon Roche d912aac860 tools: generate dds topics to output_dir
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 15:33:51 -07:00
Ramon Roche b02215a529 docs: update dds_topics
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 15:25:12 -07:00
Ramon Roche 110d3da3fc tools: remove whitespace trimming
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 14:48:55 -07:00
Ramon Roche fe013702e3 docs: update uorb messages
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 14:48:29 -07:00
Ramon Roche e379b66717 tools: msg metadata strip ending whitespace
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 14:34:50 -07:00
Ramon Roche bd4856a4f2 build: generate uorb message documentation
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 14:21:11 -07:00
Ramon Roche e73de6914b drivers: update ll40ls_pwm module name
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 13:43:54 -07:00
Ramon Roche c1f23cf13d ci: only run on pull request
* runs all scripts
* runs on the exact commit not the merge commit

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-09 13:43:08 -07:00
Ramon Roche fa4c77cb11 docs: update module reference metadata 2025-06-05 11:51:15 -07:00
Ramon Roche 91bafed906 docs: update parameter reference metadata 2025-06-05 11:50:57 -07:00
Ramon Roche 742d3c3835 docs: metadata: update uORB graph JSONs 2025-06-05 11:50:09 -07:00
Ramon Roche 1a92ae05c1 ci: check for metadata changes
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-05 10:24:24 -07:00
Ramon Roche bdb0e4270c ci: updates branch name strategy
fixes #24866

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-05 06:43:23 -07:00
PX4BuildBot 7008cb0aeb Tweak words 2025-06-05 06:43:01 -07:00
PX4BuildBot 04e1c603f7 Hide unsupported list in twistie 2025-06-05 06:43:01 -07:00
PX4BuildBot 91ee9f437f Fix up rate-limit and title 2025-06-05 06:43:01 -07:00
PX4BuildBot 5e35856033 Generate dds yaml as part of msg_docs generation 2025-06-05 06:43:01 -07:00
Peter van der Perk b8fa208bb5 Update NuttX
Fixes RT117X OCRAM M7 memory freeze
2025-06-05 06:03:59 -07:00
Hamish Willee 48c54afc85 ArmingCheckXxxx.msg - uorb docs 2025-06-05 17:56:30 +10:00
Matthias Grob fdc4766da6 Make sure vehicle_thrust_setpoint is always published before vehicle_torque_setpoint
After f0b05ea7cf
the control allocator only has a callback on the torque setpoint and even though this should work
I'm paranoid and would like to avoid surprises by always publishing the thrust before torque
then the samples that were published together are also allocated together.
2025-06-05 08:46:30 +02:00
Hamish Willee ff2b82dc51 Move commands into microservices 2025-06-05 11:39:40 +10:00
Hamish Willee 485cfa0c0f Fix broken link 2025-06-05 11:39:40 +10:00
Hamish Willee 39e51b2a6b Apply suggestions from code review
Co-authored-by: Julian Oes <julian@oes.ch>
2025-06-05 11:39:40 +10:00
Hamish Willee d1e7f01994 Docs: add skeleton topic for indicating protocol support 2025-06-05 11:39:40 +10:00
Niklas Hauser 6d35ad5d9b [uavcan] Fix safety state not getting published (#24972) 2025-06-04 09:20:34 -08:00
Hamish Willee 6095fc710c Update rcS - fix trivial typo (#24963) 2025-06-04 09:07:44 -08:00
Alexis Guijarro 82c2e6c159 3dr_ctrl-zero-h7-oem-revg: Adding missing module which prevented the USB interface to start 2025-06-04 11:43:26 -04:00
Matthias Grob 84cb748080 esc_calibration: simplify the logic and consider battery only connected if there's no message timeout and the connected flag is set 2025-06-04 17:11:33 +02:00
Don Gagne 7018e1b74b Fix reporting of connected battery 2025-06-04 17:11:33 +02:00
Matthias Grob 7e055656b0 uavcan esc: translate temperature field from Kelvin to Celsius 2025-06-04 16:44:16 +02:00
Seungbin Lee 8e399ed78e Update jfi_telemetry.md
Change the range from 500 meters to 1000 meters.
2025-06-04 17:18:51 +10:00
bresch e487d59521 Vehicle_odometry: protect angular_velocity field against aliasing
Accumulate delta-angles between each publication to get the correct
angular velocity between two attitudes
2025-06-04 09:01:33 +02:00
Hamish Willee 09d734955d Add ignore errors 2025-06-04 12:39:33 +10:00
Hamish Willee 3a4dc784eb Fix up badges refering to main/v116 to just be 116 2025-06-04 12:39:33 +10:00
Hamish Willee c3946ff56f Add FW release note to Main release notes 2025-06-04 12:39:33 +10:00
Hamish Willee ee49469cb6 Remove content of main 2025-06-04 12:39:33 +10:00
Hamish Willee 265ab85414 prettier 2025-06-04 12:39:33 +10:00
Ramon Roche ae93d931d6 docs: second pass at 1.16 release notes
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-06-04 12:39:33 +10:00
bresch 0e32b155f3 ekf2: simplify names of scoped variables 2025-06-03 09:22:32 +02:00
bresch c33d79cfb4 ekf2: move gnss_checks to their own class 2025-06-03 09:22:32 +02:00
bresch 2dbce4d958 ekf2: replace defines with enum class 2025-06-03 09:22:32 +02:00
bresch 5332010b13 ekf2: move on ground GNSS checks to separate function 2025-06-03 09:22:32 +02:00
Silvan 66fe3aa2b3 ControlAllocator: only run allocator on torque updates, not thrust
Signed-off-by: Silvan <silvan@auterion.com>
2025-06-02 09:26:13 -07:00
Silvan f0b05ea7cf ControlAllocator: only use torque, not thrust sp as callback item
Signed-off-by: Silvan <silvan@auterion.com>
2025-06-02 09:26:13 -07:00
Niklas Hauser 3971db3cb4 [iis2mdc] Help device detection by retrying probing 2025-06-02 16:54:15 +02:00
Niklas Hauser 56d53b60c0 [bmp388] Initialize multiple times with delay 2025-06-02 16:54:15 +02:00
Silvan Fuhrer cff5ecfd88 ICE: allow throttle setpoint to be set to NAN to stop motor without disarming
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2025-06-02 16:50:30 +02:00
Silvan Fuhrer ed15258abb ICE: small cosmetic changes and make message definition clearer
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2025-06-02 16:50:30 +02:00
GuillaumeLaine 99f974e82e docs: update uxrce_dds rate_limit example to reflect firmware values 2025-06-02 12:01:40 +02:00
GuillaumeLaine 17cadf7739 dds_topics: set more sensible ROS2 publication rate limits 2025-06-02 12:01:40 +02:00
Mahima Yoga 2110da73ad Commander: don't reset Home position if landed during a (uncompleted) mission. (#24902) 2025-06-02 10:50:03 +02:00
Marco Hauswirth 8d3c94c947 Baro offset calibration based on GNSS height (#24859)
* apply offset to baro sensors based on gnss measurements when gnss is selected as hgt-ref

* always calibrate baro with gnss if new param SENS_BAR_AUTOCAL is set accordingly

* always do baro-gnss calibration when AUTOCALIB is set, but ensure epv is small enough and gnss data is consistent with baro

* avoid update and reset in the same step

* minor change of constexpr usage
2025-06-02 08:38:11 +02:00
Beniamino Pozzan a2c23acc65 fix (msp_ods): clear buffers before writing and adjust sizes (#24951)
Signed-off-by: Beniamino Pozzan <beniamino.pozzan@gmail.com>
2025-06-01 18:33:09 -08:00
PX4 Build Bot 5c6645e6ef New Crowdin translations - zh-CN (#24950)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-06-02 07:43:39 +10:00
PX4 Build Bot 8204331fa9 New Crowdin translations - uk (#24949)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-06-02 07:43:29 +10:00
PX4 Build Bot 7936937320 New Crowdin translations - ko (#24948)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-06-02 07:43:23 +10:00
Bastian Jäger 7f569542a2 feat: allow PX4_UXRCE_DDS_NS override with empty sting (#24921) 2025-05-31 20:55:10 +01:00
Ramon Roche d24893a847 tools: update docker_run.sh to use px4-dev
updates to use the latest px4 development container

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-05-31 11:41:30 -07:00
lgf b7f07a1ff7 manifest: Add AmovLab ICF6
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-05-29 13:06:19 -07:00
Peter van der Perk 1656278b5e Update NuttX 2025-05-29 05:15:18 -04:00
Peter van der Perk 64b9b52eb4 tropic-community: Update PX4 config 2025-05-29 05:15:18 -04:00
Peter van der Perk a89ec34e95 tropic-community: Add DTCM to heap move vectors to ITCM 2025-05-29 05:15:18 -04:00
Jacob Dahl e338d8713b docs: add gazebo plugins doc (#24904)
* docs: add gazebo plugins doc

* add to sidebar and summary

* prettier and link to sources

* review feedback

* Minor subedit and crosslink

* Update docs/en/sim_gazebo_gz/plugins.md

---------

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2025-05-29 09:03:33 +10:00
mahima-yoga 029e0a7740 DOCS: add OdometryAirspeed docs 2025-05-28 15:47:50 +02:00
mahima-yoga 255216e471 DOCS: VTOL API documentation in px4-ros2-interface-lib 2025-05-28 15:47:50 +02:00
mahima-yoga 418b653160 DOCS: add FwLateralLongitudinalSetpointType documentation in px4-ros2-interface-lib 2025-05-28 15:47:50 +02:00
Niklas Hauser 62c9bf8a47 [uavcan] Param for interface mask of ESC actuators 2025-05-28 15:03:59 +02:00
chfriedrich98 38bcc50127 differential: centralize mode management, resets and checks 2025-05-28 09:03:27 +02:00
chfriedrich98 d5dc0a7eb8 differential: update position control 2025-05-28 09:03:27 +02:00
chfriedrich98 ac80958cc5 differential: seperate actuator control 2025-05-28 09:03:27 +02:00
Roman Bapst b26dd4d3f3 Commander: Introduce global_position_relaxed (#24280)
To separate accuracy requirements for VTOL hover and cruise.

- global_position_relaxed refers to having a valid horizontal velocity aid source 
in the estimator and a set global reference position, but poses no requirements 
on the accuracy of the provided position estimate. 
- Auto flight modes Mission, Loiter and RTL, while in fixed-wing mode, 
only require the relaxed global position going forward
- COM_POS_FS_EPH is thus no longer used on fixed-wing vehicles (resp. VTOL in FW)
- rename failsafe_flags.local_position_accuracy_low to failsafe_flags.position_accuracy_low
---------

Signed-off-by: RomanBapst <bapstroman@gmail.com>
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Co-authored-by: Silvan <silvan@auterion.com>
2025-05-28 08:16:10 +02:00
Hamish Willee eb72925045 Docs Metadata updates (#24929)
* Failsafe metadata update

* docs: update module reference metadata

* docs: update parameter reference metadata

* docs: metadata: update uORB graph JSONs

* uorb message metadata updates

* Add new uorb topics to sidebar

* Remove uorb topics that no longer exist

* fix up resulting docs links

---------

Co-authored-by: PX4BuildBot <bot@pixhawk.org>
2025-05-28 12:23:02 +10:00
Abhishek Choithani effcb32a3e Contibuting to docs - open editor on linux (#24907)
* Update docs.md

Tested on Ubuntu

* Fix layout

---------

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2025-05-28 11:39:23 +10:00
Hamish Willee ba11f75067 CellularStatus.msg - fix to standard (#24928)
* CellularStatus.msg - fix to standard

* Update CellularStatus.msg

---------

Co-authored-by: PX4BuildBot <bot@pixhawk.org>
2025-05-28 10:34:22 +10:00
Matthias Grob ce9bb0dc6b multicopter defaults: use PX4 default <2g ublox GNSS dynamic model also for multirotors
It currently defaults to 1g for multirotors, which works in most cases. However, during extended high-acceleration flight (e.g. in Stabilized mode), the limited dynamic model can upset the EKF, causing repeated resets due to data inconsistencies. Recovery is sometimes quick but can also be too slow to maintain position after high acceleration flight. This issue was observed on an 850mm vehicle, not a racer.
2025-05-27 15:27:32 +02:00
Mahima Yoga 4abe2d1dab Navigator: allow executing a disarm command during a mission 2025-05-27 13:26:30 +02:00
GuillaumeLaine e1167f0888 dds_topics: rate limit BatteryStatus ROS2 publication to 1 Hz 2025-05-27 13:21:56 +02:00
GuillaumeLaine b7702d3604 docs: uxrce_dds rate_limit option 2025-05-27 13:21:56 +02:00
GuillaumeLaine 238dffcd1b uxrce_client: add option to set polling rate limit per topic 2025-05-27 13:21:56 +02:00
Niklas Hauser 8c6d7235e4 [drivers] Allow swapping RX/TX pins of DShot Telemetry 2025-05-27 11:07:29 +02:00
Jacob Dahl 3bbe3e5268 logger: add new mask for high rate sensors 2025-05-27 08:09:28 +02:00
Julian Oes c9145a24b4 holybro: hard-select CAM1 for now
I don't think there is an easy way to hook this up to RC input at the
moment, so I'm setting it fixed to CAM1 for now.
2025-05-27 13:30:57 +12:00
Julian Oes 9595f12327 holybro: fixup Wing system power setup
I don't think we have a way to explicitly detect if BAT1 or BAT2
"bricks" are correct, so we have to assume they are, and rely on the
voltage/current shown.

Additionally, we can now power cycle sensor power.
2025-05-27 13:30:57 +12:00
Julian Oes 7c77cfa6e1 holybro: match AP flash layout
That way the ArduPilot bootloader works with PX4.
2025-05-27 13:30:57 +12:00
chfriedrich98 0d9cb1f048 ackermann: only control relevant setpoints in manual modes 2025-05-26 15:56:24 +02:00
chfriedrich98 a129a29793 ackermann: split modes into seperate folder 2025-05-26 15:56:24 +02:00
chfriedrich98 47a9b552f8 ackermann: centralize mode management, resets and checks 2025-05-26 15:56:24 +02:00
chfriedrich98 cd486b2da6 ackermann: update position control 2025-05-26 15:56:24 +02:00
chfriedrich98 45540455fe ackermann: separate actuator control 2025-05-26 15:56:24 +02:00
Silvan ea94bc11eb DDS topics: add FW highlevel interfaces
Signed-off-by: Silvan <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
mahima-yoga 8a5e5a411a msgs: Clean up message definitions and descriptions
- Add versioning to interfacing messages
- Add header description
- Add units, frame and range wherever possible
- Add [norm] and @range indentifiers
2025-05-26 14:47:38 +02:00
Silvan 8c1f7ec7c0 rename FWPositionController to FWModeManager
Signed-off-by: Silvan <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
Silvan Fuhrer 259e7d1d53 FWModeManger: remove throttle spike during flaring by waiting with height rate change
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
Silvan Fuhrer 2600946172 FW Attitude Controller: Wheel controller rework
add RunwayControl messge to pass wheel steering controls to wheel controller

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>

Runway takeoff: specify that RWTO_TKOFF is directly applied during takeoff

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>

msg/RateCtrlStatus: remove unused wheel_rate_integ field

The wheel rate controller is not run in the moduels that are now
running the MC/FW rate controllers, so thsi field canot be filled.

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>

wheel rate controller: use speed scaler quadratically on integrator

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>

wheel yaw controller: use a time constant of 0.1

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>

FW Attitude Controller: lock heading setpoint for wheels to initial heading

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
Silvan a849ab9de5 FW: Re-organize param sections for FW params
Params that are used by FW Mode Manager
- FW NPFG: NPFG params, should be renamed to FW Lateral Control once moved to the lat/lon controller
- FW Auto Takeoff
- FW Auto Landing

Params used by Fw Lat/Long Controller:
- FW Lateral Control
- FW Longitudinal Control

Params used by both:
- FW General

Params used by Performance model:
- FW Performance (could be moerged with FW General?)

Signed-off-by: Silvan <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
Silvan Fuhrer 83280dcfec TECS: protect against NAN in pitch integrator by limiting tas input to min tas
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
mahima-yoga 817b0191e7 NPFG: add unit tests and add back feasible bearing check back 2025-05-26 14:47:38 +02:00
Silvan 0ea109ff5d perfromance model: add FW_AIRSPD_FLP_SC to reduce with flaps
Signed-off-by: Silvan <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
Silvan 3e3f10f5bc VehicleAttitudeSetpoint.msg: remove reset_integral and fw_control_yaw_wheel
Signed-off-by: Silvan <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
Silvan 0276f66b18 TECS: harden interface for NAN altitude input
Signed-off-by: Silvan <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
RomanBapst 779a55c6dc FW Position Controller rework
- split up old module into two, one handling setpoint generation, one control
- add lateral and longitudinal control setpoints topics that can also be
injected from companion computer
- add configuration topics that (optionally) configure the controller
with limits and momentary settings

Signed-off-by: RomanBapst <bapstroman@gmail.com>
2025-05-26 14:47:38 +02:00
murata,katsutoshi 52f0ef927d dataman_client: Combine type declarations and processing (#23593) 2025-05-24 13:24:13 -08:00
Hamish Willee b4b3c2a4a1 VehicleCommand.msg - update to new docs standards (#24855) 2025-05-24 16:03:04 +10:00
Alexander Lerach 134ee7b640 dds: clean up timesync 2025-05-23 11:30:55 +02:00
Alex Klimaj 31ab3f0ac9 boards: ark_fpv add vtol att control (#24767)
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
2025-05-22 17:57:13 -08:00
Peter van der Perk 65c180852f i2c_launcher: Dehardcode battery index 2025-05-22 12:09:05 -07:00
Balduin f067d7a6d8 Loong: Pitch tuning 2025-05-22 14:43:42 +02:00
PX4 Build Bot 44013e351c New Crowdin translations - ko (#24893)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-22 08:12:42 +10:00
PX4 Build Bot 1277cf28bb New Crowdin translations - uk (#24894)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-22 07:50:01 +10:00
PX4 Build Bot 700ad7e49f New Crowdin translations - zh-CN (#24895)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-22 07:49:55 +10:00
Niklas Hauser cc199aa807 [board] Disable buzzer on Skynode base boards 2025-05-21 17:43:12 +02:00
Matthias Grob a9f7f00844 batteryCheck: refine low battery reporting sevirity
To make sure QGC also shows a box and reads out for "low battery"
and make events and mavlink_log reports consistent.

Low - Critical
Critical - Critical
Emergency - Emergency
2025-05-21 16:08:27 +02:00
mahima-yoga fa168c4d4f address review comments 2025-05-21 16:08:27 +02:00
mahima-yoga d44991f33a batteryCheck: change log level to 'warning' for low and critical battery. 2025-05-21 16:08:27 +02:00
mahima-yoga 0b3b5d9450 framework: only log "Failsafe activated" when failsafe action =! Warn. 2025-05-21 16:08:27 +02:00
Matthias Grob 30df381f0e multicopter_autonomous_params: adjust yaw acceleration and maximum rate for exclusive use with HeadingSmoothing 2025-05-21 13:25:46 +02:00
Matthias Grob a8f5b6dc1b FlightTaskOrbit: also use HeadingSmoothing to avoid steps during the approach 2025-05-21 13:25:46 +02:00
Matthias Grob 70ad2e6fe5 FlightTaskAuto: Smooth yaw follow-up, bring back necessary previous yaw setpoint and reset smoothing when yaw is not locked 2025-05-21 13:25:46 +02:00
Dawid Rudy 508dc030b8 Smooth yaw by limiting acceleration 2025-05-21 13:25:46 +02:00
Marco Hauswirth 2cc9221aae Revert "add flash-analysis for auterion_fmu-v6s board (#24885)" (#24896)
This reverts commit 9e45f077b1.
2025-05-21 11:49:26 +02:00
Hamish Willee 54ddb14137 Update meta docs (#24892)
* docs: update module reference metadata

* Update failsafe metadata in docs

* Update parameter metadata

* Fix up uorb graphs based on main

* SUMMARY.md - and radio control for modules

* Add alternate sidebar

---------

Co-authored-by: PX4BuildBot <bot@pixhawk.org>
2025-05-21 15:42:05 +10:00
Matthias Grob 0b3fc0a62d SIH: add Hexacopter X
to enable easy simulation of a motor failure.
2025-05-20 13:23:08 +02:00
Marco Hauswirth 9e45f077b1 add flash-analysis for auterion_fmu-v6s board (#24885) 2025-05-20 12:00:29 +02:00
Hamish Willee c2f872c558 docs: put RC modules into their own category (#24847) 2025-05-20 07:34:20 +02:00
Michael Smith 0f2012ba06 MSP_OSD Update: Add original battery status msg. (#24872)
Co-authored-by: Michael <mfs3ee@gmail.com>
2025-05-19 16:01:02 -08:00
Alexander Lerach 77894b7c83 ci/boards: add itcm checker, update ITCM mapping of v6xrt and tropic-community 2025-05-19 07:44:35 -07:00
Julian Oes 4126dde11f mavsdk_tests: bump to v3.4.0
This should fix some of the lockups and segfaults we see.
2025-05-19 07:37:02 -07:00
Julian Oes d4be5d3ff0 mavsdk_tests: add events to log 2025-05-19 07:37:02 -07:00
Julian Oes 1f65cc46b9 mavsdk_tests: bump MAVSDK to v3.3.4 2025-05-19 07:37:02 -07:00
Julian Oes 56eb9bcc18 mavsdk_tests: workaround race condition
PX4 needs a bit of time to process an uploaded mission before it is
ready to accept the mission mode.

Therefore, we need to wait a bit.

Alternatively, we could wait on the mission progress arriving properly,
but this sleep is simple enough for now.
2025-05-19 07:37:02 -07:00
Julian Oes e19d245355 mavsdk_tests: remove hacks for rally points
We can now just use MAVSDK to upload rally points.
2025-05-19 07:37:02 -07:00
Julian Oes 66deae172d mavsdk_tests: update to MAVSDK 3.0.0 2025-05-19 07:37:02 -07:00
PX4 Build Bot e50d5d8567 New Crowdin translations - zh-CN (#24875)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-18 10:57:05 +10:00
PX4 Build Bot 98a37d8e5d New Crowdin translations - ko (#24873)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-18 10:56:53 +10:00
PX4 Build Bot 740cd2e40d New Crowdin translations - uk (#24874)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-18 10:56:18 +10:00
Li-Tianming 815a339684 MSP_OSD code changes to support OpenIPC, DJI O3/O4 OSD rendering (#24695)
* Change MSP_OSD message content and rendering process

* Finish MSP_OSD battery message construct

* Finish MSP_OSD `display message` construct

	HOL|DSAM|N

* Finish MSP_FC_VARIANT(0x02) message

	BTFL

* Finish MSP_OSD RSSI message
	📶10%

* Finish MSP_OSD GPS message
	🛰 10
	🌐000.000000
	🌐00.000000

* Finish MSP_OSD PITCH ROLL  message
        🔃-10.5
	🔁13.2

* Change struct filed name

* Change OSD message postion

* Finish MSP_OSD PITCH Altitude  message
	🔝15.2

* Finish MSP_OSD distanceToHome  message
	🏠5000

* Add Hide/Show option for ALT and homeDist

* Format the code by `make format`

* Clean up stray text

* Remove other commented out dead code

* Change `sprintf()` to `snprintf()`

* Add msg field comment in `display_message` construct

* Init str buffer to 0, Change refresh rate back to 100ms

* Explicit conversion float to double

---------

Co-authored-by: Li.Tianming <Li.Tianming@example.com>
Co-authored-by: Li.Tianming <Li.Tianming>
2025-05-16 11:33:40 -08:00
Ramon Roche 38548ded12 ci: build all with px4-dev container
pull from github registry ghcr.io

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-05-16 09:54:49 -07:00
Ramon Roche 4c369be95e ci: make sure we run when we need to
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-05-16 09:54:49 -07:00
Ramon Roche e6433d443c ci: use native arch builders
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-05-16 09:54:49 -07:00
alexcekay ab6c6ac769 ci: fix failsafe_sim for newer GCC versions 2025-05-16 09:54:49 -07:00
alexcekay 01c23f635f ci: fix flash analysis for newer GCC versions 2025-05-16 09:54:49 -07:00
alexcekay c1ffdc8e3e ci: use dev-container for nuttx targets 2025-05-16 09:54:49 -07:00
Hamish Willee d1ff1a4c1d Docs: uorb graph gen for 5x and 6x (#24856)
Co-authored-by: PX4BuildBot <bot@pixhawk.org>
2025-05-16 08:44:37 +10:00
Matthias Grob df65e5bced docs events_interface: fix entire paragraph being declared code by accident (#24860) 2025-05-16 08:40:21 +10:00
Ramon Roche 4e8760097d ci: build px4-dev containers on demand
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-05-15 21:24:35 +02:00
PX4 Build Bot cadf69f73c New Crowdin translations - zh-CN (#24854)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-15 12:27:25 +10:00
PX4 Build Bot 9b8fe45e04 New Crowdin translations - ko (#24852)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-15 12:27:10 +10:00
PX4 Build Bot 524a10512b New Crowdin translations - uk (#24853)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-15 12:25:46 +10:00
Julian Oes 36bfcf5ec2 boards: keep INA238 shunt value for Skynode
This is an attempt to keep backwards compatible with Auterion's power
monitor which uses a shunt value of 0.0003 and not 0.0005.
2025-05-15 11:04:21 +12:00
Vincent Poon 5a76868cff Change INA238_SHUNT Default Value for Consistency
Change INA238_SHUNT Default Value from 0.0003 to 0.0005 for Consistency with INA226 & INA228.
2025-05-15 11:04:21 +12:00
Hamish Willee fa2b8cbd49 RC driver config Kconfig -typo (#24848) 2025-05-14 10:10:44 -08:00
Julian Oes 47cb1133c3 boards: add new target for Kakute H7 with dual IMU 2025-05-14 08:00:17 -07:00
Julian Oes bf9167da50 ina238: actually run it
Without this the driver would not run when started from the
i2c_launcher.
2025-05-14 07:34:02 -07:00
Julian Oes abf903a851 ina2xx: params require reboot 2025-05-14 07:34:02 -07:00
Julian Oes 117f198891 ina228/ina238: correctly set ADC range
It turns out that we set the ADC range incorrectly leading to the
measured current being capped at a certain level as the ADC on the
sensor saturates.

Instead, we need to set the range according to the formula given in the
interface datasheet.
2025-05-14 07:34:02 -07:00
Hamish Willee 3af9a3f76e Add Niklas Debugging Video to GDB and hard fault sections (#24845) 2025-05-14 17:52:59 +10:00
Hamish Willee 79660d0a39 Amov f410 (#24841)
* add amov_F410_drone

* add amov f410 drone [200~catalogue

* Basic subedit

* Further subediting

* Add parameter file

* Update local param file

---------

Co-authored-by: lgf <1969354053@qq.com>
2025-05-14 13:44:41 +10:00
Hamish Willee a426d27ff8 Fixup multi vehicle sim (gazebo) plus intro page images for linux/dronecode (#24840)
* Fix up site logos on front page

* Fix up rendering mult-vehicle sim
2025-05-14 12:05:12 +10:00
maksimdrachov c79fe7292a Grippers: added electro-magnetic gripper (#24833)
* Grippers: added electro-magnetic gripper

* Update docs/en/peripherals/gripper_servo.md

* Update docs/en/peripherals/gripper_servo.md

---------

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2025-05-14 11:20:23 +10:00
Hamish Willee db10fe6a97 Docs update metadata (#24839)
* Docs: Failsafe simulator update

* docs: update module reference metadata

* docs: update parameter reference metadata

* git commit -m 'docs: metadata: update uORB graph JSONs'

---------

Co-authored-by: PX4BuildBot <bot@pixhawk.org>
2025-05-14 10:53:40 +10:00
PX4 Build Bot 8adb439b58 New Crowdin translations - zh-CN (#24829)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-14 09:22:33 +10:00
PX4 Build Bot 2b7710122e New Crowdin translations - ko (#24827)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-14 09:22:19 +10:00
Jacob Dahl 7ac85d8f99 adis16507: enhance driver to handle and recover from all failure modes (#24691)
* adis16507: enhance driver to handle and recover from all failure modes
- Clean up driver
- Add optional hardware reset
- Fix scale and range for 125 deg/s variant
- Handle communication errors when read returns zeroes
- Improved perf counters

* change prints to PX4_DEBUG, define BURST_READ_CMD, do both soft and hard reset, use ScheduleNow instead of 1ms delay, change read/write stall period to SPI_STALL value
2025-05-13 09:42:19 -06:00
chfriedrich98 ce9dd237a9 rover: handle invalid bearing setpoint 2025-05-13 10:23:35 +02:00
chfriedrich98 1857920a5f rover: clean up velocity setpoint 2025-05-13 10:23:35 +02:00
chfriedrich98 b727ce86a0 rover: clean up speed terminology 2025-05-13 10:23:35 +02:00
Jacob Dahl 1d5e58b948 mavlink: set system clock from SYSTEM_TIME (#24807)
* mavlink: set system clock from SYSTEM_TIME message if behind by more than 60 seconds
2025-05-12 16:11:16 -08:00
Balduin f01aade729 ZMO airframe: update parameters (#24803)
* ZMO airframe: update parameters

Including some parameters we found useful during the tests over the
previous months:

 - various controller & transition tuning refinements
 - remove battery capacity (not reliable enough w battery degradation)
 - airspeed scale
 - rotor configs:
    - remove everything related to rotors 3 and 4 (which don't exist)
    - set moment coefficients explicitly even if at default
 - Increase roll limit (FW_R_LIM, FD_FAIL_R)
 - min and max airspeeds
 - tilt servo min and default PWM values

* ZMO airframe: address review

 - explicitly set CA_ROTOR3_* to 0 (as these are set in the parent
   13100 which describes a quadrotor)
 - remove ASPD_SCALE_1 (close enough to default, and better to have
   slightly low reading)
 - remove MPC_ACC_HOR_MAX (= default)
 - remove MPC_TILTMAX_AIR (was temporary)
 - remove SENS_EN_SF1XX (= default)

* ZMO airframe: update tilt setup

to describe a setup where tilt servos can provide yaw torque in both
directions in multicopter mode.

* ZMO airframe: wording
2025-05-12 12:13:35 +02:00
PX4 Build Bot d04d6af696 New Crowdin translations - uk (#24828)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-11 12:24:56 +10:00
Jacob Dahl a8618691f0 docs: gz: update docs for multi vehicle simulation (#24822) 2025-05-10 20:20:14 +01:00
Matthias Grob 406f0bb470 Fix cellular_status message definition (#24662)
* msg: fix cellular_status definition

12 * Update msg/CellularStatus.msg

* cellular_status: remove confusing reference to roaming

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2025-05-08 15:07:11 +02:00
Hamish Willee 6bca750ab3 crowdin_docs.yml - ignore the param reference 2025-05-07 19:29:57 -07:00
Jacob Dahl 050425af25 gz: specify custom world coordinates (#24813)
gz: allow custom world coordinates with environment variables and update the docs
2025-05-07 20:36:40 +02:00
Ramon Roche 688e6aafae ci: introduce px4-dev container with multi arch support (#24022) 2025-05-07 12:12:27 -04:00
chfriedrich98 2d23fda77d rtl_direct: fix function naming 2025-05-07 17:42:07 +02:00
chfriedrich98 4e436cc64e rover: update land detector 2025-05-07 17:42:07 +02:00
chfriedrich98 771d09b968 navigator: reset next WP in mission fast reverse 2025-05-07 17:42:07 +02:00
chfriedrich98 b78b063fd8 rover: skip to LAND on direct RTL activation 2025-05-07 17:42:07 +02:00
chfriedrich98 f13f9b2240 rover: update rtl time estimator 2025-05-07 17:42:07 +02:00
Beat Küng fee575f944 docs: update integration tests (#24671)
* docs: update integration tests

Updates for https://github.com/PX4/PX4-Autopilot/pull/22494.
Transferred from https://github.com/PX4/PX4-user_guide/pull/2970.

* Apply suggestions from code review

* Update docs/en/test_and_ci/integration_testing_ros1_mavros.md

---------

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2025-05-07 13:52:03 +10:00
Matthias Grob 87db286a88 pps_capture_params: clarify description (#24641) 2025-05-07 11:15:20 +10:00
Ramon Roche b851c3728c ci: avoid multiple builds with concurrency checks
Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2025-05-06 20:59:26 -04:00
Hamish Willee 93408cc4e2 Update main.md release to indicate may be out of date on a branch (#24810) 2025-05-07 10:57:46 +10:00
Seungbin Lee 881d58b79f [Doc] Update JFI Telemetry v1.1 Changes (#24747)
* update jfi image

* Update jfi_telemetry.md

* update images

* File size compression

---------

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2025-05-07 10:37:32 +10:00
PX4 Build Bot 76a772354c New Crowdin translations - ko (#24797)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-07 10:07:34 +10:00
PX4 Build Bot 3eaba5f9eb New Crowdin translations - uk (#24798)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-07 10:07:02 +10:00
PX4 Build Bot 2d30a010f4 New Crowdin translations - zh-CN (#24799)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-07 10:06:44 +10:00
Roman Shtylman fed1b338c0 Update ulog_file_format.md (#24809)
* Update ulog_file_format.md

Update Known Parser Implementations with updated information for Foxglove and the typescript parser

* Update docs/en/dev_log/ulog_file_format.md
2025-05-07 08:59:22 +10:00
bresch 6b8bf80423 ekf2-mag: never skip post-takeoff mag yaw reset 2025-05-06 11:24:31 -04:00
chfriedrich98 4e17c5496c mecanum: streamline flow of information 2025-05-05 11:38:17 +02:00
chfriedrich98 04512ee91f mecanum: separate velocity control 2025-05-05 11:38:17 +02:00
Julian Oes 3c39095271 [Sponsored by Holybro] Support for Kakute H743-Wing (#24669)
* hrt: Fix PPM input on channel 2

The CCMR1_PPM define for PPM input on channel 2 was incorrectly set to 2,
which was setting bits for channel 1 instead of channel 2. This prevented
PPM input from functioning properly on channel 2.

Changed CCMR1_PPM for channel 2 from 2 to (1 << 8), which correctly
configures the CC2S bits for input capture mode on TI2.

This fixes an issue noted in the existing code comment:
"FIXME! There is an interaction in the CCMR registers that prevents
using Chan 1 as the timer and chan 2 as the PPM"

Tested on STM32H743 with PPM input on PC7 (TIM8_CH2).

* rc_input: enable sharing serial and PPM pin

By setting RC_SERIAL_PORT_SHARED_PPM_PIN_GPIO_RX it is now possible to
use the same pin on the STM32 for PPM input as well as serial input.

* boards: Add support for Holybro KakuteH7-Wing
2025-05-04 14:44:11 -08:00
Jacob Dahl 2fece23c64 gz small improvements (#24761)
* gz: print version number in init, remove gst plugin spam, rename function

* fix 0 timestamp issue by waiting for clock callback before subscribing to other topics. Refactor to cleanup topic subscriptions

* format

* change gzerr to gzwarn
2025-05-04 14:41:19 -08:00
Silvan 918848095a ROMFS: exclude 4020_holybro_px4vision_v1_5 from v6x builds to save flash
Signed-off-by: Silvan <silvan@auterion.com>
2025-05-02 13:37:18 +02:00
Marco Hauswirth f0fdf0b53b EKF2: distinguish airspeed source and use synthetic for wind
Enable wind-dead-reckoning with airspeed source to synthetic airspeed
2025-05-02 13:37:18 +02:00
Silvan 6d12b04bb0 VTOL: do central handling of airspeed measurement
- only use data from airspeed_validated topic if source is SENSOR
    - add 1s timeout (set to NAN if older)
    - use FW_USE_AIRSPD consitently (treat the same as CAS=NAN)

Signed-off-by: Silvan <silvan@auterion.com>
2025-05-02 13:37:18 +02:00
Silvan f7bb5d13f7 At every consumation of AirspeedValidated, check for SOURCE
Signed-off-by: Silvan <silvan@auterion.com>
2025-05-02 13:37:18 +02:00
Marco Hauswirth 5842c991ec AirspeedSelector: add synthetic airspeed option
Synthetic airspeed is calculated based on the thrust setpoint
and the thrust<->airpseed model as configured in the parameters.
2025-05-02 13:37:18 +02:00
Marco Hauswirth c3c863ad95 AirspeedSelector: clean up in preparation of synthetic airspeed 2025-05-02 13:37:18 +02:00
bresch e7250bc8d5 ekf2: do not let mag heading and declination update xy gyro biases
This can destabilize the tilt estimate when the mag field is disturbed
2025-05-02 10:23:43 +02:00
bresch a40377e544 ekf2: always update IMU filters 2025-05-02 10:23:43 +02:00
bresch 6a105bcbdb ekf2-grav: accelerate tilt alignment 2025-05-02 10:23:43 +02:00
bresch c59101e8ed ekf2-gravity: do not estimate accel bias when gravity fusion is active
Gravity fusion uses the bias corrected accelerometer data to correct the
tilt estimate. We should not continue to estimate the accel bias when
this is active as it creates an unwanted feedback loop.
2025-05-02 10:23:43 +02:00
bresch ee30b70a3c ekf2-gravity: start based on accel LPF instead of peak hold
This prevent rapid switching in presence of noise and the innovation
filter is good at rejecting spikes
2025-05-02 10:23:43 +02:00
bresch 6ec6f1b297 ekf2-decl: do not always update tilt 2025-05-02 10:23:43 +02:00
PX4 Build Bot ef0f0884f0 New Crowdin translations - uk (#24714)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-02 09:33:50 +10:00
Balduin ea93019b62 Docs: gazebo moving platform (#24720)
* Docs: add moving platform

documenting the addition in #24471

* Moving platform docs: address review

 - Release note, write release in docs
 - Describe configuration also in main gazebo sim docs, syntax section
 - Tip that plugin can be used in other worlds, linking to plugin readme

* Update docs/en/sim_gazebo_gz/index.md

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>

---------

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2025-05-02 08:51:21 +10:00
Hamish Willee 9cf3e83197 VehicleCommand.msg - takeoff & global position (#24574)
* VehicleCommand.msg - takeoff & global position

* Apply suggestions from code review

* Update msg/versioned/VehicleCommand.msg

* Update msg/versioned/VehicleCommand.msg

* Update msg/versioned/VehicleCommand.msg

* Update msg/versioned/VehicleCommand.msg

* Update msg/versioned/VehicleCommand.msg

* Update msg/versioned/VehicleCommand.msg
2025-05-01 18:37:46 +10:00
Hamish Willee 9e6e2df15c docs_bug_report.yml - fix errors (#24790) 2025-05-01 13:56:07 +10:00
Hamish Willee 1a4a44a223 Add docs issue template (#24788) 2025-05-01 13:36:17 +10:00
936 changed files with 29562 additions and 18124 deletions
-3
View File
@@ -3,6 +3,3 @@ contact_links:
- name: Support Question
url: https://docs.px4.io/main/en/contribute/support.html#forums-and-chat
about: For questions about using PX4 or related components, please use the discuss forum and discord server
- name: Documentation Issue
url: https://github.com/PX4/PX4-user_guide/issues
about: If you found an issue in documentation, please submit it directly to the docs repository issues
@@ -0,0 +1,33 @@
name: 📑 Documentation Bug report
description: Create a report to help us improve the docs
title: "[Docs] [Bug] "
labels: ["Documentation 📑"]
body:
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of the bug.
placeholder: |
# A PR to fix the bug is often better than adding this issue!
#
# If you can't create a PR please provide the following:
# - What page and/or section has the problem
# - What is the problem - missing information, incorrect information?
# - Suggested fixes, links to corresponding code PRs
# - Any additional context
validations:
required: true
- type: input
attributes:
label: Page URL
description: The URL of the problem page.
validations:
required: false
- type: textarea
attributes:
label: Screenshot / Media
description: Add screenshot / media if you have them
validations:
required: false
+20 -9
View File
@@ -18,10 +18,14 @@ on:
- 'docs/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
group_targets:
name: Scan for Board Targets
@@ -30,7 +34,6 @@ jobs:
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
timestamp: ${{ steps.set-timestamp.outputs.timestamp }}
tagname: ${{ steps.set-tag.outputs.tagname }}
branchname: ${{ steps.set-branch.outputs.branchname }}
steps:
- uses: actions/checkout@v4
@@ -51,7 +54,13 @@ jobs:
run: echo "::set-output name=timestamp::$(date +"%Y%m%d%H%M%S")"
- id: set-branch
run: echo "::set-output name=branchname::${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}"
run: |
echo "branchname=${{
github.event_name == 'pull_request' &&
format('pr-{0}', github.event.pull_request.number) ||
github.head_ref ||
github.ref_name
}}" >> $GITHUB_OUTPUT
- name: Debug Matrix Output
if: runner.debug == '1'
@@ -61,9 +70,9 @@ jobs:
echo "$(./Tools/ci/generate_board_targets_json.py --group --verbose)"
setup:
name: Build Group [${{ matrix.group }}]
name: Build Group [${{ matrix.group }}][${{ matrix.arch == 'nuttx' && 'x86' || 'arm64' }}]
# runs-on: ubuntu-latest
runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}",spot=false]
runs-on: [runs-on,"runner=8cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",spot=false]
needs: group_targets
strategy:
matrix: ${{ fromJson(needs.group_targets.outputs.matrix) }}
@@ -98,7 +107,7 @@ jobs:
- name: Building [${{ matrix.group }}]
run: |
./Tools/ci/build_all_runner.sh ${{matrix.targets}}
./Tools/ci/build_all_runner.sh ${{matrix.targets}} ${{matrix.arch}}
- name: Arrange Build Artifacts
run: |
@@ -116,7 +125,7 @@ jobs:
artifacts:
name: Upload Artifacts to S3
# runs-on: ubuntu-latest
runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}",spot=false]
runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
needs: [setup, group_targets]
if: contains(fromJSON('["main", "stable", "beta"]'), needs.group_targets.outputs.branchname)
steps:
@@ -144,10 +153,12 @@ jobs:
release:
name: Create Release and Upload Artifacts
permissions:
contents: write
# runs-on: ubuntu-latest
runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}",spot=false]
runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
needs: [setup, group_targets]
if: startsWith(github.ref, 'refs/tags/v')
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4
+1 -1
View File
@@ -9,7 +9,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
+1 -1
View File
@@ -9,7 +9,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
+3 -6
View File
@@ -9,14 +9,14 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
jobs:
build:
runs-on: macos-14
runs-on: macos-latest
strategy:
matrix:
config: [
@@ -32,8 +32,7 @@ jobs:
- uses: actions/checkout@v4
- name: setup
run: |
./Tools/setup/macos.sh
run: ./Tools/setup/macos.sh; ./Tools/setup/macos.sh
- name: Prepare ccache timestamp
id: ccache_cache_timestamp
@@ -41,14 +40,12 @@ jobs:
run: |
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
message("::set-output name=timestamp::${current_date}")
- name: ccache cache files
uses: actions/cache@v4
with:
path: ~/.ccache
key: macos_${{matrix.config}}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}}
restore-keys: macos_${{matrix.config}}-ccache-
- name: setup ccache
run: |
mkdir -p ~/.ccache
+4 -1
View File
@@ -12,11 +12,14 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
env:
RUNS_IN_DOCKER: true
jobs:
build_and_test:
name: Build and Test
+148 -67
View File
@@ -1,4 +1,3 @@
name: Container build
on:
@@ -10,35 +9,144 @@ on:
- 'release/**'
tags:
- 'v*'
paths-ignore:
- 'docs/**'
- '.github/**'
pull_request:
branches:
- '**'
paths-ignore:
- 'docs/**'
- '.github/**'
- '*'
paths:
- '.github/workflows/dev_container.yml'
- 'Tools/setup/ubuntu.sh'
- 'Tools/setup/requirements.txt'
- 'Tools/setup/Dockerfile'
- 'Tools/setup/docker-entrypoint.sh'
workflow_dispatch:
inputs:
px4_version:
description: 'Container tag (e.g. v1.16.0)'
required: true
type: string
deploy_to_registry:
description: 'Whether to push built images to the registry'
required: false
type: boolean
default: false
jobs:
build:
name: Build and Push Container
runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
setup:
name: Set Tags and Variables
permissions:
contents: read
runs-on: [runs-on,"runner=1cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",spot=false,extras=s3-cache]
outputs:
px4_version: ${{ steps.px4_version.outputs.px4_version }}
meta_tags: ${{ steps.meta.outputs.tags }}
meta_labels: ${{ steps.meta.outputs.labels }}
steps:
- uses: runs-on/action@v1
- uses: actions/checkout@v4
with:
fetch-tags: true
submodules: false
fetch-depth: 0
- name: Set PX4 Tag
id: px4-tag
# If manual dispatch, take the userprovided input
- name: Set PX4 Tag Version
id: px4_version
run: |
echo "tag=$(git describe --tags --match 'v[0-9]*')" >> $GITHUB_OUTPUT
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "px4_version=${{ github.event.inputs.px4_version }}" >> $GITHUB_OUTPUT
else
echo "px4_version=$(git describe --tags --match 'v[0-9]*')" >> $GITHUB_OUTPUT
fi
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/PX4/px4-dev
px4io/px4-dev
tags: |
type=raw,enable=true,value=${{ steps.px4_version.outputs.px4_version }},priority=1000
build:
name: Build Container (${{ matrix.arch }})
permissions:
contents: read
packages: write
needs: setup
strategy:
matrix:
include:
- platform: linux/arm64
arch: arm64
runner: arm64
- platform: linux/amd64
arch: amd64
runner: x64
runs-on: [runs-on,"runner=8cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",spot=false,extras=s3-cache]
steps:
- uses: runs-on/action@v1
- uses: actions/checkout@v4
with:
fetch-tags: true
submodules: false
fetch-depth: 0
- name: Login to Docker Hub
uses: docker/login-action@v3
if: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }}
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
if: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }}
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
platforms: ${{ matrix.platform }}
- name: Build and Load Container Image
uses: docker/build-push-action@v6
id: docker
with:
context: Tools/setup
tags: |
ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-${{ matrix.arch }}
px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-${{ matrix.arch }}
labels: ${{ needs.setup.outputs.meta_labels }}
platforms: ${{ matrix.platform }}
load: false
push: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }}
provenance: false
cache-from: type=gha,version=1
cache-to: type=gha,version=1,mode=max
deploy:
name: Deploy To Registry
permissions:
contents: read
packages: write
runs-on: [runs-on,"runner=8cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",spot=false,extras=s3-cache]
needs: [build, setup]
if: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }}
steps:
- uses: runs-on/action@v1
- uses: actions/checkout@v4
with:
fetch-tags: true
submodules: false
fetch-depth: 0
- name: Login to Docker Hub
uses: docker/login-action@v3
if: github.event_name != 'pull_request'
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -50,58 +158,31 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/PX4/px4-dev
${{ (github.event_name != 'pull_request') && 'px4io/px4-dev' || '' }}
tags: |
type=raw,enable=true,value=${{ steps.px4-tag.outputs.tag }},priority=1000
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and load container image
uses: docker/build-push-action@v6
id: docker
with:
context: Tools/setup
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: |
linux/amd64
load: true
push: false
cache-from: type=s3,blobs_prefix=cache/${{ github.repository }}/,manifests_prefix=cache/${{ github.repository }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,blobs_prefix=cache/${{ github.repository }}/,manifests_prefix=cache/${{ github.repository }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
- name: Get Tag Name
id: tag_name
- name: Verify Images Exist Before Creating Manifest
run: |
echo "::set-output name=tag_name::$(echo '${{ fromJSON(steps.docker.outputs.metadata)['image.name'] }}' | sed 's/,.*$//')"
docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 || echo "⚠️ Warning: No ARM64 image found!"
docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 || echo "⚠️ Warning: No AMD64 image found!"
docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 || echo "⚠️ Warning: No ARM64 image found!"
docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 || echo "⚠️ Warning: No AMD64 image found!"
- name: make quick_check
uses: addnab/docker-run-action@v3
with:
image: ${{ steps.tag_name.outputs.tag_name }}
options: -v ${{ github.workspace }}:/workspace
run: |
cd /workspace
git config --global --add safe.directory /workspace
make px4_sitl_default
make px4_fmu-v6x_default
- name: Create and Push Multi-Arch Manifest for Docker Hub
run: |
docker manifest create px4io/px4-dev:${{ needs.setup.outputs.px4_version }} \
--amend px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 \
--amend px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64
- name: Push container image
uses: docker/build-push-action@v6
with:
context: Tools/setup
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: |
linux/amd64
provenance: mode=max
push: ${{ github.event_name != 'pull_request' }}
cache-from: type=s3,blobs_prefix=cache/${{ github.repository }}/,manifests_prefix=cache/${{ github.repository }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }}
cache-to: type=s3,blobs_prefix=cache/${{ github.repository }}/,manifests_prefix=cache/${{ github.repository }}/,region=${{ env.RUNS_ON_AWS_REGION }},bucket=${{ env.RUNS_ON_S3_BUCKET_CACHE }},mode=max
docker manifest annotate px4io/px4-dev:${{ needs.setup.outputs.px4_version }} px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 --arch arm64
docker manifest annotate px4io/px4-dev:${{ needs.setup.outputs.px4_version }} px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 --arch amd64
docker manifest push px4io/px4-dev:${{ needs.setup.outputs.px4_version }}
- name: Create and Push Multi-Arch Manifest for GHCR
run: |
docker manifest create ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }} \
--amend ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 \
--amend ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64
docker manifest annotate ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }} ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 --arch arm64
docker manifest annotate ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }} ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 --arch amd64
docker manifest push ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}
+13 -1
View File
@@ -1,6 +1,18 @@
name: Docs - Deploy PX4 User Guide
on:
push:
branches:
- 'main'
- 'release/**'
paths:
- 'docs/en/**'
pull_request:
branches:
- '*'
paths:
- 'docs/en/**'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
@@ -68,7 +80,7 @@ jobs:
- name: Deploy
run: |
git clone --single-branch --branch main --depth 1 https://${{ secrets.PX4BUILTBOT_PERSONAL_ACCESS_TOKEN }}@github.com/PX4/docs.px4.io.git
# make it an orphan branch
# make it an orphan branch
cd docs.px4.io
CURRENT_DATETIME=$(date +'%Y%m%d_%H_%M')
git checkout --orphan "${CURRENT_DATETIME}_main"
-114
View File
@@ -1,114 +0,0 @@
name: Docs - Deploy PX4 User Guide to AWS
on:
push:
branches:
- "main"
- "release/**"
paths:
- "docs/en/**"
- "docs/zh/**"
- "docs/uk/**"
- "docs/ko/**"
pull_request:
paths:
- "docs/en/**"
- "docs/zh/**"
- "docs/uk/**"
- "docs/ko/**"
permissions:
contents: read
actions: read
id-token: write # for AWS OIDC
concurrency:
group: docs-deploy
cancel-in-progress: false
jobs:
build:
runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache]
outputs:
branchname: ${{ steps.set-branch.outputs.branchname }}
releaseversion: ${{ steps.set-version.outputs.releaseversion }}
steps:
- uses: runs-on/action@v1
- name: Checkout
uses: actions/checkout@v4
- id: set-branch
run: echo "branchname=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
- id: set-version
run: |
branch="${{ steps.set-branch.outputs.branchname }}"
if [[ "$branch" == "main" ]]; then
version="main"
else
version="v${branch#release/}"
fi
echo "releaseversion=$version" >> $GITHUB_OUTPUT
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: ./docs/yarn.lock
- name: Install dependencies
run: yarn install --frozen-lockfile --cwd ./docs
- name: Build with VitePress
working-directory: ./docs
env:
BRANCH_NAME: ${{ steps.set-version.outputs.releaseversion }}
run: |
npm run docs:build_ubuntu
touch .vitepress/dist/.nojekyll
npm run docs:sitemap
- name: Upload artifact
if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.merged) || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v4
with:
name: px4_docs_build
path: docs/.vitepress/dist/
retention-days: 1
deploy:
if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.merged) || github.event_name == 'workflow_dispatch' }}
needs: build
runs-on: ubuntu-latest
steps:
- name: Download Artifact
uses: actions/download-artifact@v4
with:
name: px4_docs_build
path: ~/_book
- name: Configure AWS from OIDC
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-west-2
- name: Sanity check AWS credentials
run: aws sts get-caller-identity
- name: Upload HTML with short cache
run: |
aws s3 sync ~/_book/ s3://px4-docs/${{ needs.build.outputs.releaseversion }}/ \
--delete \
--exclude "*" --include "*.html" \
--cache-control "public, max-age=60"
- name: Upload assets with long cache
run: |
aws s3 sync ~/_book/ s3://px4-docs/${{ needs.build.outputs.releaseversion }}/ \
--delete \
--exclude "*.html" \
--cache-control "public, max-age=86400, immutable"
+47
View File
@@ -0,0 +1,47 @@
name: Docs Metadata
permissions:
contents: write
on:
pull_request: {}
jobs:
metadata-check:
name: ${{ matrix.name }}
runs-on: [runs-on,runner=2cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=true]
container:
image: ghcr.io/px4/px4-dev:v1.16.0-ondemand
strategy:
fail-fast: false
matrix:
include:
- name: uORB Graphs
script: Tools/ci/metadata_uorb_graph.sh
- name: Failsafe Web
script: Tools/ci/metadata_failsafe_web.sh --debug
- name: uORB Messages
script: Tools/ci/metadata_msg_docs.sh
- name: Parameter Reference
script: Tools/ci/metadata_parameters.sh
- name: Airframe Reference
script: Tools/ci/metadata_airframe.sh
- name: Module Reference
script: Tools/ci/metadata_modules.sh
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
persist-credentials: true
- name: Mark all directories safe for Git
run: git config --system --add safe.directory '*'
- name: Run ${{ matrix.name }} metadata check
run: ${{ matrix.script }} --test-only
- name: Setup tmate session
if: ${{ failure() }}
uses: mxschmitt/action-tmate@v3
@@ -3,7 +3,7 @@ name: EKF Change Indicator
on:
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
+5 -3
View File
@@ -9,7 +9,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
@@ -27,7 +27,7 @@ jobs:
"failsafe_web",
]
container:
image: px4io/px4-dev-nuttx-focal:2022-08-12
image: px4io/px4-dev:v1.16.0-ondemand
options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined
steps:
- name: Install Node v20.18.0
@@ -39,11 +39,13 @@ jobs:
with:
fetch-depth: 0
- name: Git ownership workaround
run: git config --system --add safe.directory '*'
- name: Install empscripten
run: |
git clone https://github.com/emscripten-core/emsdk.git _emscripten_sdk
cd _emscripten_sdk
git checkout 4.0.15
./emsdk install latest
./emsdk activate latest
+3 -3
View File
@@ -14,7 +14,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
@@ -28,7 +28,7 @@ jobs:
name: Analyzing ${{ matrix.target }}
runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
container:
image: px4io/px4-dev-nuttx-focal
image: px4io/px4-dev:v1.16.0-ondemand
strategy:
matrix:
target: [px4_fmu-v5x, px4_fmu-v6x]
@@ -80,7 +80,7 @@ jobs:
id: bloaty-step
with:
bloaty-file-args: ./with-change.elf -- ./before-change.elf
bloaty-additional-args: -d sections,compileunits -s vm -n 20
bloaty-additional-args: -d sections,symbols -s vm -n 20
output-to-summary: true
- name: Generate output
+61
View File
@@ -0,0 +1,61 @@
name: ITCM check
permissions:
contents: read
on:
push:
branches:
- 'main'
paths-ignore:
- 'docs/**'
- '.github/**'
pull_request:
branches:
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
jobs:
check_itcm:
name: Checking ${{ matrix.target }}
runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
container:
image: px4io/px4-dev:v1.16.0-ondemand
strategy:
fail-fast: false
matrix:
include:
- target: px4_fmu-v5x
scripts: >
boards/px4/fmu-v5x/nuttx-config/scripts/itcm_gen_functions.ld
boards/px4/fmu-v5x/nuttx-config/scripts/itcm_static_functions.ld
- target: px4_fmu-v6xrt
scripts: >
boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_functions_includes.ld
boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_static_functions.ld
- target: nxp_tropic-community
scripts: >
boards/nxp/tropic-community/nuttx-config/scripts/itcm_functions_includes.ld
boards/nxp/tropic-community/nuttx-config/scripts/itcm_static_functions.ld
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
- name: Git ownership workaround
run: git config --system --add safe.directory '*'
- name: Build Target
run: make ${{ matrix.target }}
- name: Copy built ELF
run: cp ./build/**/*.elf ./built.elf
- name: Install itcm-check dependencies
run: pip3 install -r Tools/setup/optional-requirements.txt --break-system-packages
- name: Execute the itcm-check
run: python3 Tools/itcm_check.py --elf-file built.elf --script-files ${{ matrix.scripts }}
+1 -1
View File
@@ -9,7 +9,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
+1 -1
View File
@@ -9,7 +9,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
+2 -2
View File
@@ -9,7 +9,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
@@ -31,7 +31,7 @@ jobs:
- name: Build PX4 and Run Test [${{ matrix.config }}]
uses: addnab/docker-run-action@v3
with:
image: px4io/px4-dev-nuttx-focal:2022-08-12
image: px4io/px4-dev:v1.16.0-ondemand
options: -v ${{ github.workspace }}:/workspace
run: |
cd /workspace
+1 -1
View File
@@ -9,7 +9,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
+4 -8
View File
@@ -11,11 +11,13 @@ on:
- 'main'
paths-ignore:
- 'docs/**'
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
jobs:
build:
@@ -31,12 +33,6 @@ jobs:
- name: Git Ownership Workaround
run: git config --system --add safe.directory '*'
- name: Update ROS Keys
run: |
sudo rm /etc/apt/sources.list.d/ros2.list && \
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
- name: Install gazebo
run: |
apt update && apt install -y gazebo11 libgazebo11-dev gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly libgstreamer-plugins-base1.0-dev
@@ -85,7 +81,7 @@ jobs:
. /opt/ros/galactic/setup.bash
mkdir -p /opt/px4_ws/src
cd /opt/px4_ws/src
git clone --recursive --branch release/1.16 https://github.com/Auterion/px4-ros2-interface-lib.git
git clone --recursive https://github.com/Auterion/px4-ros2-interface-lib.git
cd ..
# Copy messages to ROS workspace
"${PX4_DIR}/Tools/copy_to_ros_ws.sh" "$(pwd)"
+1 -1
View File
@@ -8,7 +8,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
+1 -1
View File
@@ -14,7 +14,7 @@ on:
- '.github/**'
pull_request:
branches:
- '**'
- '*'
paths-ignore:
- 'docs/**'
- '.github/**'
+3
View File
@@ -109,3 +109,6 @@ src/systemcmds/topic_listener/listener_generated.cpp
# colcon
log/
keys/
# metadata dependencies
_emscripten_sdk/
+3 -3
View File
@@ -301,11 +301,11 @@ CONFIG:
buildType: MinSizeRel
settings:
CONFIG: holybro_durandal-v1_default
holybro_kakuteh7-wing_default:
short: holybro_kakuteh7-wing
holybro_kakuteh7dualimu_default:
short: holybro_kakuteh7dualimu
buildType: MinSizeRel
settings:
CONFIG: holybro_kakuteh7-wing_default
CONFIG: holybro_kakuteh7dualimu_default
matek_h743-slim_default:
short: matek_h743-slim
buildType: MinSizeRel
+6 -1
View File
@@ -300,6 +300,8 @@ uorb_graphs:
@$(MAKE) --no-print-directory px4_fmu-v2_default uorb_graph
@$(MAKE) --no-print-directory px4_fmu-v4_default uorb_graph
@$(MAKE) --no-print-directory px4_fmu-v5_default uorb_graph
@$(MAKE) --no-print-directory px4_fmu-v5x_default uorb_graph
@$(MAKE) --no-print-directory px4_fmu-v6x_default uorb_graph
@$(MAKE) --no-print-directory px4_sitl_default uorb_graph
px4io_update:
@@ -377,7 +379,10 @@ module_documentation:
extract_events:
@$(MAKE) --no-print-directory px4_sitl_default metadata_extract_events ver_gen
px4_metadata: parameters_metadata airframe_metadata module_documentation extract_events
msg_docs:
@$(MAKE) --no-print-directory px4_sitl_default metadata_msg_documentation ver_gen
px4_metadata: parameters_metadata airframe_metadata module_documentation extract_events msg_docs
doxygen:
@mkdir -p "$(SRC_DIR)"/build/doxygen
@@ -0,0 +1,47 @@
#!/bin/sh
#
# @name HexarotorX SITL for SIH
#
# @type Hexarotor x
# @class Copter
#
# @maintainer Matthias Grob <maetugr@gmail.com>
#
. ${R}etc/init.d/rc.mc_defaults
PX4_SIMULATOR=${PX4_SIMULATOR:=sihsim}
PX4_SIM_MODEL=${PX4_SIM_MODEL:=hex}
param set-default SENS_EN_GPSSIM 1
param set-default SENS_EN_BAROSIM 1
param set-default SENS_EN_MAGSIM 1
param set SIH_VEHICLE_TYPE 4
# Symmetric hexacopter X clockwise motor numbering
param set-default CA_ROTOR_COUNT 6
param set-default CA_ROTOR0_PX 0.866
param set-default CA_ROTOR0_PY 0.5
param set-default CA_ROTOR1_PX 0
param set-default CA_ROTOR1_PY 1
param set-default CA_ROTOR1_KM -0.05
param set-default CA_ROTOR2_PX -0.866
param set-default CA_ROTOR2_PY 0.5
param set-default CA_ROTOR3_PX -0.866
param set-default CA_ROTOR3_PY -0.5
param set-default CA_ROTOR3_KM -0.05
param set-default CA_ROTOR4_PX 0
param set-default CA_ROTOR4_PY -1
param set-default CA_ROTOR5_PX 0.866
param set-default CA_ROTOR5_PY -0.5
param set-default CA_ROTOR5_KM -0.05
param set-default PWM_MAIN_FUNC1 101
param set-default PWM_MAIN_FUNC2 102
param set-default PWM_MAIN_FUNC3 103
param set-default PWM_MAIN_FUNC4 104
param set-default PWM_MAIN_FUNC5 105
param set-default PWM_MAIN_FUNC6 106
param set-default EKF2_GPS_DELAY 0
@@ -109,6 +109,7 @@ px4_add_romfs_files(
10041_sihsim_airplane
10042_sihsim_xvert
10043_sihsim_standard_vtol
10044_sihsim_hex
17001_flightgear_tf-g1
17002_flightgear_tf-g2
+24 -20
View File
@@ -1,15 +1,13 @@
#!/bin/sh
# shellcheck disable=SC2154
echo "INFO [init] Gazebo simulator"
# Enforce minimum gz version as Harmonic (gz-sim8)
MIN_GZ_VERSION="8.0.0"
GZ_SIM_VERSION=$(gz sim --versions 2>/dev/null | head -n 1 | tr -d ' ')
if [ -z "$GZ_SIM_VERSION" ]; then
echo "ERROR [init] Gazebo gz sim not found. Please install gz-harmonic"
exit 1
echo "ERROR [init] Gazebo gz sim not found. Please install gz-harmonic"
exit 1
fi
# Use sort compare, check that MIN_GZ_VERSION is ordered last
@@ -17,6 +15,8 @@ if [ "$(printf '%s\n' "$GZ_SIM_VERSION" "$MIN_GZ_VERSION" | sort -V | head -n1)"
gz_command="gz"
gz_sub_command="sim"
echo "INFO [init] Gazebo simulator $GZ_SIM_VERSION"
# Specify render engine if `GZ_SIM_RENDER_ENGINE` is set
# (for example, if you want to use Ogre 1.x instead of Ogre 2.x):
if [ -n "${PX4_GZ_SIM_RENDER_ENGINE}" ]; then
@@ -24,19 +24,15 @@ if [ "$(printf '%s\n' "$GZ_SIM_VERSION" "$MIN_GZ_VERSION" | sort -V | head -n1)"
gz_sub_command="${gz_sub_command} --render-engine ${PX4_GZ_SIM_RENDER_ENGINE}"
fi
else
echo "ERROR [init] Gazebo gz sim version is too old ($GZ_SIM_VERSION). Minimum required version is $MIN_GZ_VERSION"
exit 1
echo "ERROR [init] Gazebo version too hold ($GZ_SIM_VERSION). Minimum required version is $MIN_GZ_VERSION"
exit 1
fi
# Look for an already running world
get_gz_world() {
gz_world=$( ${gz_command} topic -l | grep -m 1 -e "^/world/.*/clock" | sed 's/\/world\///g; s/\/clock//g' )
}
# If not standalone
# If not standalone launch the world
if [ -z "${PX4_GZ_STANDALONE}" ]; then
get_gz_world
# Look for an already running world
gz_world=$( ${gz_command} topic -l | grep -m 1 -e "^/world/.*/clock" | sed 's/\/world\///g; s/\/clock//g' )
# shellcheck disable=SC2153
if [ -z "${gz_world}" ] && [ -n "${PX4_GZ_WORLD}" ]; then
@@ -70,13 +66,6 @@ fi
# Wait for Gazebo world to be ready before proceeding
check_scene_info() {
get_gz_world
if [ -n "${PX4_GZ_STANDALONE}" ] && [ -n "${gz_world}" ]; then
PX4_GZ_WORLD=${gz_world}
fi
SERVICE_INFO=$(${gz_command} service -i --service "/world/${PX4_GZ_WORLD}/scene/info" 2>&1)
if echo "$SERVICE_INFO" | grep -q "Service providers"; then
return 0
@@ -100,6 +89,21 @@ while [ $ATTEMPTS -gt 0 ]; do
sleep 1
done
# World is ready, check if custom location is provided
if [ -n "${PX4_HOME_LAT}" ] || [ -n "${PX4_HOME_LON}" ] || [ -n "${PX4_HOME_ALT}" ]; then
# must have all three
if [ -z "${PX4_HOME_LAT}" ] || [ -z "${PX4_HOME_LON}" ] || [ -z "${PX4_HOME_ALT}" ]; then
echo "ERROR [init] PX4_HOME_LAT, PX4_HOME_LON and PX4_HOME_ALT must all be set"
exit 1
fi
echo "INFO [init] Setting world origin to lat: ${PX4_HOME_LAT}, lon: ${PX4_HOME_LON}, alt: ${PX4_HOME_ALT}"
${gz_command} service -s "/world/${PX4_GZ_WORLD}/set_spherical_coordinates" \
--reqtype gz.msgs.SphericalCoordinates \
--reptype gz.msgs.Boolean \
--timeout 1000 \
--req "surface_model: EARTH_WGS84, latitude_deg: ${PX4_HOME_LAT}, longitude_deg: ${PX4_HOME_LON}, elevation: ${PX4_HOME_ALT}" > /dev/null 2>&1
fi
# Start gz_bridge - either spawn a model or connect to existing one
if [ -n "${PX4_SIM_MODEL#*gz_}" ] && [ -z "${PX4_GZ_MODEL_NAME}" ]; then
# Spawn a model
+15 -9
View File
@@ -190,9 +190,6 @@ param set-default SYS_FAILURE_EN 1
# does not go below 50% by default, but failure injection can trigger failsafes.
param set-default COM_LOW_BAT_ACT 3
# set default IP to localhost
param set-default UXRCE_DDS_AG_IP 2130706433 # 127.0.0.1
# Adapt timeout parameters if simulation runs faster or slower than realtime.
if [ -n "$PX4_SIM_SPEED_FACTOR" ]; then
@@ -298,10 +295,15 @@ then
# for multi intances setup, add namespace prefix
uxrce_dds_ns="-n px4_$px4_instance"
fi
if [ -n "$PX4_UXRCE_DDS_NS" ]
then
# Override namespace if environment variable is defined
uxrce_dds_ns="-n $PX4_UXRCE_DDS_NS"
if [ "${PX4_UXRCE_DDS_NS+x}" ]; then
# Override, as variable is set (empty or not)
if [ -n "$PX4_UXRCE_DDS_NS" ]; then
# Override namespace if environment variable is non-empty
uxrce_dds_ns="-n $PX4_UXRCE_DDS_NS"
else
# Clear namespace if variable is empty
uxrce_dds_ns=""
fi
fi
if [ -n "$ROS_DOMAIN_ID" ]
then
@@ -317,7 +319,7 @@ then
uxrce_dds_port="$PX4_UXRCE_DDS_PORT"
fi
uxrce_dds_client start -t udp -p $uxrce_dds_port $uxrce_dds_ns
uxrce_dds_client start -t udp -h 127.0.0.1 -p $uxrce_dds_port $uxrce_dds_ns
if param greater -s MNT_MODE_IN -1
then
@@ -340,7 +342,11 @@ then
gyro_calibration start
fi
payload_deliverer start
# Payload deliverer module if gripper is enabled
if param compare -s PD_GRIPPER_EN 1
then
payload_deliverer start
fi
if param compare -s ICE_EN 1
then
@@ -7,6 +7,7 @@
#
# @board px4_fmu-v2 exclude
# @board bitcraze_crazyflie exclude
# @board px4_fmu-v6x exclude
#
. ${R}etc/init.d/rc.mc_defaults
+2 -1
View File
@@ -15,7 +15,8 @@ control_allocator start
#
fw_rate_control start
fw_att_control start
fw_pos_control start
fw_mode_manager start
fw_lat_lon_control start
airspeed_selector start
#
@@ -13,8 +13,6 @@ param set-default MAV_TYPE 1
#
# Default parameters for fixed wing UAVs.
#
# there is a 2.5 factor applied on the _FS thresholds if for invalidation
param set-default COM_POS_FS_EPH 50
param set-default COM_VEL_FS_EVH 3
param set-default COM_POS_LOW_EPH 50
@@ -20,7 +20,5 @@ param set-default NAV_ACC_RAD 2
param set-default RTL_RETURN_ALT 30
param set-default RTL_DESCEND_ALT 10
param set-default GPS_UBX_DYNMODEL 6
# lower RNG_FOG since MC are expected to fly closer over obstacles
param set-default EKF2_RNG_FOG 1.0
+2 -1
View File
@@ -27,7 +27,8 @@ fi
fw_rate_control start vtol
fw_att_control start vtol
fw_pos_control start vtol
fw_mode_manager start
fw_lat_lon_control start vtol
fw_autotune_attitude_control start vtol
# Start Land Detector
@@ -10,9 +10,6 @@ set VEHICLE_TYPE vtol
# MAV_TYPE_VTOL_FIXEDROTOR 22
param set-default MAV_TYPE 22
# there is a 2.5 factor applied on COM_POS_FS_EPH if for invalidation
param set-default COM_POS_FS_EPH 50
param set-default COM_POS_LOW_EPH 50
param set-default MIS_TAKEOFF_ALT 20
+6 -2
View File
@@ -39,7 +39,7 @@ set VEHICLE_TYPE none
# Airframe parameter versioning
# Value set to 1 by default but can optionally be overridden in the airframe configuration startup script.
# Airframe maintainers can ensure a reset to the airframe defaults during an update by increasing by one.
# e.g. add line "set PARAM_DEFAULTS_VER 2" in your airframe file to build the first update that enfoces a reset.
# e.g. add line "set PARAM_DEFAULTS_VER 2" in your airframe file to build the first update that enforces a reset.
set PARAM_DEFAULTS_VER 1
#
@@ -560,7 +560,11 @@ else
px4flow start -X &
fi
payload_deliverer start
# Payload deliverer module if gripper is enabled
if param compare -s PD_GRIPPER_EN 1
then
payload_deliverer start
fi
if param compare -s ICE_EN 1
then
+3 -3
View File
@@ -27,9 +27,9 @@ do
# - An old .msg version exists
# - A translation header exists and is included
# Ignore changes to comments or constants
content_a=$(git show "${BASE_COMMIT}:${file}" | grep -o '^[^#]*' | grep -v =)
content_b=$(git show "${HEAD_COMMIT}:${file}" | grep -o '^[^#]*' | grep -v =)
# Ignore changes to comments or constants and trim whitespace
content_a=$(git show "${BASE_COMMIT}:${file}" | grep -o '^[^#]*' | grep -v = | sed 's/^ *//;s/[ \t]*$//')
content_b=$(git show "${HEAD_COMMIT}:${file}" | grep -o '^[^#]*' | grep -v = | sed 's/^ *//;s/[ \t]*$//')
if [ "${content_a}" == "${content_b}" ]; then
echo "No version update required for ${file}"
continue
+7 -6
View File
@@ -86,21 +86,17 @@ def process_target(px4board_file, target_name):
assert platform, f"PLATFORM not found in {px4board_file}"
if platform not in excluded_platforms:
# get the container based on the platform and toolchain
container = 'ghcr.io/px4/px4-dev:v1.16.0-ondemand'
if platform == 'posix':
container = 'px4io/px4-dev-base-focal:2021-09-08'
group = 'base'
if toolchain:
if toolchain.startswith('aarch64'):
container = 'px4io/px4-dev-aarch64:2022-08-12'
group = 'aarch64'
elif toolchain == 'arm-linux-gnueabihf':
container = 'px4io/px4-dev-armhf:2023-06-26'
group = 'armhf'
else:
if verbose: print(f'unmatched toolchain: {toolchain}')
elif platform == 'nuttx':
container = 'px4io/px4-dev-nuttx-focal:2022-08-12'
group = 'nuttx'
else:
if verbose: print(f'unmatched platform: {platform}')
@@ -124,7 +120,7 @@ if(verbose):
# - Events
metadata_targets = ['airframe_metadata', 'parameters_metadata', 'extract_events']
grouped_targets['base'] = {}
grouped_targets['base']['container'] = 'px4io/px4-dev-base-focal:2021-09-08'
grouped_targets['base']['container'] = 'ghcr.io/px4/px4-dev:v1.16.0-ondemand'
grouped_targets['base']['manufacturers'] = {}
grouped_targets['base']['manufacturers']['px4'] = []
grouped_targets['base']['manufacturers']['px4'] += metadata_targets
@@ -206,6 +202,7 @@ if (args.group):
if(verbose):
print(f'=:Architectures: [{grouped_targets.keys()}]')
for arch in grouped_targets:
runner = 'x64' if arch == 'nuttx' else 'arm64'
if(verbose):
print(f'=:Processing: [{arch}]')
temp_group = []
@@ -223,6 +220,7 @@ if (args.group):
"container": grouped_targets[arch]['container'],
"targets": targets,
"arch": arch,
"runner": runner,
"group": group_name,
"len": len(grouped_targets[arch]['manufacturers'][man])
})
@@ -240,6 +238,7 @@ if (args.group):
"container": grouped_targets[arch]['container'],
"targets": targets,
"arch": arch,
"runner": runner,
"group": group_name,
"len": len(chunk),
})
@@ -260,6 +259,7 @@ if (args.group):
"container": grouped_targets[arch]['container'],
"targets": targets,
"arch": arch,
"runner": runner,
"group": group_name,
"len": temp_len
})
@@ -277,6 +277,7 @@ if (args.group):
"container": grouped_targets[arch]['container'],
"targets": targets,
"arch": arch,
"runner": runner,
"group": group_name,
"len": len(chunk),
})
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
#
# metadata_airframe.sh — generate and sync PX4 airframe reference documentation
#
# Usage:
# Tools/ci/metadata_airframe.sh [--test-only] [--debug]
#
# Options:
# --test-only Run make target and comparison; exit 1 if diffs found, without copying file
# --debug Show full make output and debug info for comparison
#
set -euo pipefail
shopt -s nullglob
# Parse flags
test_only=false
debug=false
while [[ $# -gt 0 ]]; do
case "$1" in
--test-only) test_only=true; shift ;;
--debug) debug=true; shift ;;
*) echo "Usage: $0 [--test-only] [--debug]"; exit 2 ;;
esac
done
# Paths and make target
make_target="airframe_metadata"
src_file="build/px4_sitl_default/docs/airframes.md"
dest_file="docs/en/airframes/airframe_reference.md"
# Run make target
if [ "$debug" = true ]; then
echo "🔧 Running 'make $make_target' (verbose)"
make $make_target
else
echo "🔧 Running 'make $make_target'"
make $make_target > /dev/null 2>&1
fi
# Verify build output
if [[ ! -f "$src_file" ]]; then
echo "❌ Generated file not found: $src_file"
exit 1
fi
echo "🔍 Comparing airframe reference docs"
# Compare files
if cmp -s "$src_file" "$dest_file"; then
echo "✅ Airframe reference is up to date."
exit 0
else
if [ "$debug" = true ]; then
echo "DEBUG: cmp -s '$src_file' '$dest_file'; echo \$?"
fi
echo "⚠️ Airframe reference needs updating."
if [ "$test_only" = true ]; then
exit 1
fi
# Copy over updated file
echo "📂 Copying updated airframe_reference.md"
cp -v "$src_file" "$dest_file"
echo "🚨 Airframe docs updated; commit the change:"
echo " git status -s $dest_file"
echo " git add $dest_file"
echo " git commit -m 'docs: update airframe reference metadata'"
exit 1
fi
+112
View File
@@ -0,0 +1,112 @@
#!/usr/bin/env bash
#
# metadata_failsafe_web.sh — build and sync failsafe webapp metadata files
#
# Usage:
# Tools/ci/metadata_failsafe_web.sh [--test-only] [--debug]
#
# Options:
# --test-only Run build and comparison; exit 1 if diffs found, without copying files
# --debug Show full build output and debug info for file comparisons and EMSDK install
#
set -euo pipefail
shopt -s nullglob
# Parse flags
test_only=false
debug=false
while [[ $# -gt 0 ]]; do
case "$1" in
--test-only) test_only=true; shift ;;
--debug) debug=true; shift ;;
*) echo "Usage: $0 [--test-only] [--debug]"; exit 2 ;;
esac
done
# Paths and commands
build_cmd="make failsafe_web"
src_dir="build/px4_sitl_default_failsafe_web"
dest_dir="docs/public/config/failsafe"
# Ensure Emscripten SDK is available
if ! command -v emcc >/dev/null 2>&1; then
echo "🔧 Emscripten not found. Ensuring EMSDK is installed."
# Clone SDK only if not already present
if [ ! -d "_emscripten_sdk" ]; then
if [ "$debug" = true ]; then
git clone https://github.com/emscripten-core/emsdk.git _emscripten_sdk
else
git clone https://github.com/emscripten-core/emsdk.git _emscripten_sdk > /dev/null 2>&1
fi
fi
pushd _emscripten_sdk >/dev/null
if [ "$debug" = true ]; then
./emsdk install latest
./emsdk activate latest
else
./emsdk install latest > /dev/null 2>&1
./emsdk activate latest > /dev/null 2>&1
fi
popd >/dev/null
# Load environment into current shell
if [ "$debug" = true ]; then
# shellcheck source=/dev/null
. ./_emscripten_sdk/emsdk_env.sh
else
# shellcheck source=/dev/null
. ./_emscripten_sdk/emsdk_env.sh > /dev/null 2>&1
fi
fi
# Build step
if [ "$debug" = true ]; then
echo "🔧 Running build: $build_cmd"
$build_cmd
else
echo "🔧 Running build"
$build_cmd > /dev/null 2>&1
fi
# Gather built files
src_files=("$src_dir"/*.{js,wasm,json})
if [ ${#src_files[@]} -eq 0 ]; then
echo "❌ No generated files found in $src_dir. Build failed or path wrong."
exit 1
fi
# Prepare destination
echo "🔍 Checking failsafe web metadata"
mkdir -p "$dest_dir"
changed=()
for src in "${src_files[@]}"; do
name=$(basename "$src")
dst="$dest_dir/$name"
if [[ ! -f "$dst" ]]; then
[ "$debug" = true ] && echo "DEBUG: missing $dst"
changed+=("$name")
elif ! cmp -s "$src" "$dst"; then
[ "$debug" = true ] && echo "DEBUG: cmp -s '$src' '$dst'; echo \$?"
changed+=("$name")
fi
done
if [ ${#changed[@]} -eq 0 ]; then
echo "✅ All failsafe web metadata files are in sync."
exit 0
fi
echo "⚠️ Detected updates in:"
for f in "${changed[@]}"; do echo " - $f"; done
if [ "$test_only" = true ]; then
echo "🚨 Failsafe web metadata needs update; rerun without --test-only to apply."
exit 1
fi
echo "📂 Copying updated files"
for f in "${changed[@]}"; do cp -v "$src_dir/$f" "$dest_dir/$f"; done
echo "🚨 Failsafe web metadata updated; please commit changes."
exit 1
+99
View File
@@ -0,0 +1,99 @@
#!/usr/bin/env bash
#
# metadata_modules.sh - generate and sync PX4 module reference documentation
#
# Usage:
# Tools/ci/metadata_modules.sh [--test-only] [--debug]
#
# Options:
# --test-only Run make target and comparison; exit 1 if diffs found, without copying files
# --debug Show full make output and debug info for file comparisons
#
set -euo pipefail
shopt -s nullglob
# Parse flags
test_only=false
debug=false
while [[ $# -gt 0 ]]; do
case "$1" in
--test-only) test_only=true; shift ;;
--debug) debug=true; shift ;;
*) echo "Usage: $0 [--test-only] [--debug]"; exit 2 ;;
esac
done
# Paths and make target
make_target="module_documentation"
src_dir="build/px4_sitl_default/docs/modules"
dest_dir="docs/en/modules"
# Run make target
if [ "$debug" = true ]; then
echo "🔧 Running 'make $make_target' (verbose)"
make $make_target
else
echo "🔧 Running 'make $make_target'"
make $make_target > /dev/null 2>&1
fi
# Verify build output
src_files=("$src_dir"/*)
if [ ${#src_files[@]} -eq 0 ]; then
echo "❌ No generated module docs found in $src_dir. Build failed or path wrong."
exit 1
fi
# ─── Strip trailing whitespace from all generated module docs (unless test-only) ─────────────
if [ "$test_only" = false ]; then
echo "✂️ Removing trailing whitespace from generated module docs"
for src in "${src_files[@]}"; do
sed -i 's/[[:space:]]\+$//' "$src"
done
else
[ "$debug" = true ] && echo "🧪 Test-only mode: skipping whitespace removal"
fi
echo "🔍 Checking module reference docs in $dest_dir"
mkdir -p "$dest_dir"
changed=()
for src in "${src_files[@]}"; do
name=$(basename "$src")
dst="$dest_dir/$name"
if [[ ! -e "$dst" ]]; then
[ "$debug" = true ] && echo "DEBUG: missing $dst"
changed+=("$name")
else
# Use diff -q -b (ignore whitespace changes) and --strip-trailing-cr (ignore CRLF vs LF)
if ! diff -q -b --strip-trailing-cr "$src" "$dst" > /dev/null; then
[ "$debug" = true ] && echo "DEBUG: diff -q -b --strip-trailing-cr '$src' '$dst' (exit_code=$?)"
changed+=("$name")
fi
fi
done
if [ ${#changed[@]} -eq 0 ]; then
echo "✅ All module reference docs are up to date."
exit 0
fi
echo "⚠️ Detected updates in module docs:"
for f in "${changed[@]}"; do echo " - $f"; done
if [ "$test_only" = true ]; then
echo "🚨 Module reference docs need updating; rerun without --test-only to apply."
exit 1
fi
echo "📂 Copying updated module docs to $dest_dir"
for f in "${changed[@]}"; do
cp -rv "$src_dir/$f" "$dest_dir/$f"
done
echo "🚨 Module reference docs updated; please commit changes:"
echo " git status -s $dest_dir"
echo " git add $dest_dir/*"
echo " git commit -m 'docs: update module reference metadata'"
exit 1
+97
View File
@@ -0,0 +1,97 @@
#!/usr/bin/env bash
#
# metadata_msg_docs.sh — generate and sync uORB message reference documentation
#
# Usage:
# Tools/ci/metadata_msg_docs.sh [--test-only] [--debug]
#
# Options:
# --test-only Run make target and comparison; exit 1 if diffs found, without copying files
# --debug Show full make output and debug info for file comparisons
#
set -euo pipefail
shopt -s nullglob
# Parse flags
test_only=false
debug=false
while [[ $# -gt 0 ]]; do
case "$1" in
--test-only) test_only=true; shift ;;
--debug) debug=true; shift ;;
*) echo "Usage: $0 [--test-only] [--debug]"; exit 2 ;;
esac
done
# Paths and make target
make_target="msg_docs"
src_dir="build/px4_sitl_default/msg_docs"
dest_dir="docs/en/msg_docs"
middleware_dir="docs/en/middleware"
# Run make target
if [ "$debug" = true ]; then
echo "🔧 Running 'make $make_target' (verbose)"
make $make_target
else
echo "🔧 Running 'make $make_target'"
make $make_target > /dev/null 2>&1
fi
# Verify build output
src_files=("$src_dir"/*)
if [ ${#src_files[@]} -eq 0 ]; then
echo "❌ No files found in $src_dir. Build target '$make_target' failed or path is wrong."
exit 1
fi
echo "🔍 Checking uORB message docs in $dest_dir"
mkdir -p "$dest_dir"
changed=()
for src in "${src_files[@]}"; do
name=$(basename "$src")
# special-case dds_topics.md
if [[ "$name" == "dds_topics.md" ]]; then
dst="$middleware_dir/$name"
else
dst="$dest_dir/$name"
fi
if [[ ! -f "$dst" ]]; then
[ "$debug" = true ] && echo "DEBUG: missing $dst"
changed+=("$name")
elif ! cmp -s "$src" "$dst"; then
[ "$debug" = true ] && echo "DEBUG: cmp -s '$src' '$dst'; echo \$?"
changed+=("$name")
fi
done
if [ ${#changed[@]} -eq 0 ]; then
echo "✅ All uORB message docs are up to date."
exit 0
fi
echo "⚠️ Detected updates in the following docs:"
for f in "${changed[@]}"; do echo " - $f"; done
if [ "$test_only" = true ]; then
echo "🚨 uORB message docs need updating! Rerun without --test-only to apply changes."
exit 1
fi
echo "📂 Copying updated doc files to $dest_dir"
for f in "${changed[@]}"; do
if [[ "$f" == "dds_topics.md" ]]; then
cp -v "$src_dir/$f" "$middleware_dir/$f"
else
cp -v "$src_dir/$f" "$dest_dir/$f"
fi
done
echo "🚨 uORB message docs updated; please commit changes:"
echo " git status -s $dest_dir"
echo " git add $dest_dir/*"
echo " git commit -m 'docs: update uORB message reference docs'"
exit 1
+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env bash
#
# metadata_parameters.sh — generate and sync PX4 parameter reference documentation
#
# Usage:
# Tools/ci/metadata_parameters.sh [--test-only] [--debug]
#
# Options:
# --test-only Run make target and comparison; exit 1 if diffs found, without copying file
# --debug Show full make output and debug info for comparison
#
set -euo pipefail
# Parse flags
test_only=false
debug=false
while [[ $# -gt 0 ]]; do
case "$1" in
--test-only) test_only=true; shift ;;
--debug) debug=true; shift ;;
*) echo "Usage: $0 [--test-only] [--debug]"; exit 2 ;;
esac
done
# Paths and make target
make_target="parameters_metadata"
src_file="build/px4_sitl_default/docs/parameters.md"
dest_file="docs/en/advanced_config/parameter_reference.md"
# Run make target
if [ "$debug" = true ]; then
echo "🔧 Running 'make $make_target' (verbose)"
make $make_target
else
echo "🔧 Running 'make $make_target'"
make $make_target > /dev/null 2>&1
fi
# ─── Strip trailing whitespace from the newly generated Markdown ────────────────────────────────
echo "✂️ Removing trailing whitespace from $src_file"
sed -i 's/[[:space:]]\+$//' "$src_file"
# Verify build output
if [[ ! -f "$src_file" ]]; then
echo "❌ Generated file not found: $src_file"
exit 1
fi
echo "🔍 Comparing parameter docs"
# Compare files
if cmp -s "$src_file" "$dest_file"; then
echo "✅ Parameter reference is up to date."
exit 0
else
if [ "$debug" = true ]; then
echo "DEBUG: cmp -s '$src_file' '$dest_file'; echo \$?"
fi
echo "⚠️ Parameter reference needs updating."
if [ "$test_only" = true ]; then
exit 1
fi
# Copy over updated file
echo "📂 Copying updated parameter_reference.md"
cp -v "$src_file" "$dest_file"
echo "🚨 Parameter docs updated; commit the change:"
echo " git status -s $dest_file"
echo " git add $dest_file"
echo " git commit -m 'docs: update parameter reference metadata'"
exit 1
fi
+108
View File
@@ -0,0 +1,108 @@
#!/usr/bin/env bash
#
# update_uorb_graphs.sh — generate, compare, and sync uORB graph JSONs
#
# Usage:
# ./scripts/update_uorb_graphs.sh [--test-only] [--debug]
#
# Options:
# --test-only Run generation and comparison only; exit 1 if diffs found, without copying files
# --debug Echo debug info for missing or differing files and show full make output
#
# Examples:
# # CI mode: fail if docs need updates
# ./scripts/update_uorb_graphs.sh --test-only
#
# # Developer mode: regenerate and sync JSONs
# ./scripts/update_uorb_graphs.sh
#
set -euo pipefail
shopt -s nullglob
# Parse flags
test_only=false
debug=false
while [[ $# -gt 0 ]]; do
case "$1" in
--test-only)
test_only=true
shift
;;
--debug)
debug=true
shift
;;
*)
echo "Usage: $0 [--test-only] [--debug]"
exit 2
;;
esac
done
# Paths
graph_dir="Tools/uorb_graph"
dest_dir="docs/public/middleware"
# Generate uORB graphs (conditionally silent)
if [ "$debug" = true ]; then
echo "🔧 Generating uORB message graphs (verbose output)"
make uorb_graphs
else
echo "🔧 Generating uORB message graphs"
make uorb_graphs > /dev/null 2>&1
fi
# Verify generation
src_files=("$graph_dir"/*.json)
if [ ${#src_files[@]} -eq 0 ]; then
echo "❌ No JSON files found in $graph_dir. Generation failed or path is wrong."
exit 1
fi
echo "🔍 Checking for updated uORB graph JSONs"
mkdir -p "$dest_dir"
changed=()
for src in "${src_files[@]}"; do
name=$(basename "$src")
dst="$dest_dir/$name"
if [[ ! -f "$dst" ]]; then
[ "$debug" = true ] && echo "DEBUG: $dst missing"
changed+=("$name")
elif ! cmp -s "$src" "$dst"; then
[ "$debug" = true ] && echo "DEBUG: cmp -s '$src' '$dst'; echo \$?"
changed+=("$name")
fi
done
if [ ${#changed[@]} -eq 0 ]; then
echo "✅ All uORB graph JSONs are already in sync."
exit 0
fi
echo "⚠️ Detected updates in the following files:"
for name in "${changed[@]}"; do
echo " - $name"
done
if [ "$test_only" = true ]; then
echo
echo "🚨 uORB graph docs need updating! Rerun without --test-only to apply changes."
exit 1
fi
echo
echo "📂 Copying updated files over"
for name in "${changed[@]}"; do
cp -v "$graph_dir/$name" "$dest_dir/$name"
done
echo
echo "🚨 uORB graph docs need updating! Review above, then run:"
echo " git status -s $dest_dir/"
echo " git add $dest_dir/*.json"
echo " git commit -m 'docs: metadata: update uORB graph JSONs'"
exit 1
+21 -19
View File
@@ -4,8 +4,8 @@ mkdir artifacts
cp **/**/*.px4 artifacts/
cp **/**/*.elf artifacts/
for build_dir_path in build/*/ ; do
build_dir_path=${build_dir_path::${#build_dir_path}-1}
build_dir=${build_dir_path#*/}
build_dir=${build_dir::${#build_dir}-1}
mkdir artifacts/$build_dir
find artifacts/ -maxdepth 1 -type f -name "*$build_dir*"
# Airframe
@@ -26,21 +26,23 @@ for build_dir_path in build/*/ ; do
echo "----------"
done
# general metadata
mkdir artifacts/_general/
cp artifacts/px4_sitl_default/airframes.xml artifacts/_general/
# Airframe
cp artifacts/px4_sitl_default/airframes.xml artifacts/_general/
# Parameters
cp artifacts/px4_sitl_default/parameters.xml artifacts/_general/
cp artifacts/px4_sitl_default/parameters.json artifacts/_general/
cp artifacts/px4_sitl_default/parameters.json.xz artifacts/_general/
# Actuators
cp artifacts/px4_sitl_default/actuators.json artifacts/_general/
cp artifacts/px4_sitl_default/actuators.json.xz artifacts/_general/
# Events
cp artifacts/px4_sitl_default/events/all_events.json.xz artifacts/_general/
# ROS 2 msgs
cp artifacts/px4_sitl_default/events/all_events.json.xz artifacts/_general/
# Module Docs
ls -la artifacts/_general/
if [ -d artifacts/px4_sitl_default ]; then
# general metadata
mkdir artifacts/_general/
cp artifacts/px4_sitl_default/airframes.xml artifacts/_general/
# Airframe
cp artifacts/px4_sitl_default/airframes.xml artifacts/_general/
# Parameters
cp artifacts/px4_sitl_default/parameters.xml artifacts/_general/
cp artifacts/px4_sitl_default/parameters.json artifacts/_general/
cp artifacts/px4_sitl_default/parameters.json.xz artifacts/_general/
# Actuators
cp artifacts/px4_sitl_default/actuators.json artifacts/_general/
cp artifacts/px4_sitl_default/actuators.json.xz artifacts/_general/
# Events
cp artifacts/px4_sitl_default/events/all_events.json.xz artifacts/_general/
# ROS 2 msgs
cp artifacts/px4_sitl_default/events/all_events.json.xz artifacts/_general/
# Module Docs
ls -la artifacts/_general/
fi
+2 -22
View File
@@ -2,19 +2,7 @@
if [ -z ${PX4_DOCKER_REPO+x} ]; then
echo "guessing PX4_DOCKER_REPO based on input";
if [[ $@ =~ .*px4_fmu.* ]]; then
# nuttx-px4fmu-v{1,2,3,4,5}
PX4_DOCKER_REPO="px4io/px4-dev-nuttx-focal:2022-08-12"
elif [[ $@ =~ .*navio2.* ]] || [[ $@ =~ .*raspberry.* ]] || [[ $@ =~ .*beaglebone.* ]] || [[ $@ =~ .*pilotpi.default ]] || [[ $@ =~ .*navigator.* ]]; then
# beaglebone_blue_default, emlid_navio2_default, px4_raspberrypi_default, scumaker_pilotpi_default, bluerobotics_navigator_default
PX4_DOCKER_REPO="px4io/px4-dev-armhf:2023-06-26"
elif [[ $@ =~ .*pilotpi.arm64 ]]; then
# scumaker_pilotpi_arm64
PX4_DOCKER_REPO="px4io/px4-dev-aarch64:2022-08-12"
elif [[ $@ =~ .*navio2.* ]] || [[ $@ =~ .*raspberry.* ]] || [[ $@ =~ .*bebop.* ]]; then
# posix_rpi_cross, posix_bebop_default
PX4_DOCKER_REPO="px4io/px4-dev-armhf:2023-06-26"
elif [[ $@ =~ .*clang.* ]] || [[ $@ =~ .*scan-build.* ]]; then
if [[ $@ =~ .*clang.* ]] || [[ $@ =~ .*scan-build.* ]]; then
# clang tools
PX4_DOCKER_REPO="px4io/px4-dev-clang:2021-02-04"
elif [[ $@ =~ .*tests* ]]; then
@@ -27,17 +15,9 @@ fi
# otherwise default to nuttx
if [ -z ${PX4_DOCKER_REPO+x} ]; then
PX4_DOCKER_REPO="px4io/px4-dev-nuttx-focal:2022-08-12"
PX4_DOCKER_REPO="px4io/px4-dev:v1.16.0-ondemand"
fi
# docker hygiene
#Delete all stopped containers (including data-only containers)
#docker rm $(docker ps -a -q)
#Delete all 'untagged/dangling' (<none>) images
#docker rmi $(docker images -q -f dangling=true)
echo "PX4_DOCKER_REPO: $PX4_DOCKER_REPO";
PWD=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+185
View File
@@ -0,0 +1,185 @@
#! /usr/bin/env python3
"""
Checks if the functions that should be mapped to ITCM are contained in the built ELF file.
This helps against linker scripts that "rot" as the linker does not warn in case of a function
not existing. Thus, it is possible to forget to update the linker script after a code update.
The tool uses the DWARF debug info and the ELF symbol table section to identify which functions
exist in the built ELF file.
It is expected that the linker scripts that are analyzed by the tool are linker script include
files that only contain the name of the sections (functions) that should be mapped to ITCM in
the following format:
```
*(.text.arm_ack_irq)
*(.text.arm_doirq)
*(.text._ZN4uORB12DeviceMaster19getDeviceNodeLockedEPK12orb_metadatah)
*(.text._ZN3Ekf20controlGravityFusionERKN9estimator9imuSampleE)
[...]
```
A specific entry in the linker script file can be ignored by adding a comment, as shown in the following example:
```
*(.text.arm_ack_irq) /* itcm-check-ignore */
```
"""
import argparse
import re
from elftools.elf.elffile import ELFFile
from elftools.elf.sections import SymbolTableSection
from elftools.dwarf.die import DIE
from pathlib import Path
from typing import List, Set
def die_get_funcs_rec(die: DIE, ret: Set[str]):
"""
Recursively gets the mangled and demangled name of all functions in the given `die`.
:param die: DIE to be processed. Is gathered recursively after passing a top DIE.
:param ret: Output set where all function names are added to.
"""
if die.tag in ("DW_TAG_subprogram", "DW_TAG_inlined_subroutine"):
link_name_att = die.attributes.get("DW_AT_linkage_name")
name_att = die.attributes.get("DW_AT_name")
if link_name_att:
ret.add(link_name_att.value.decode("utf-8"))
if name_att:
ret.add(name_att.value.decode("utf-8"))
# Recurse into the DIE children
for child in die.iter_children():
die_get_funcs_rec(child, ret)
def get_elf_symbols_from_debug(elf_path: Path) -> Set[str]:
"""
Gets all functions contained in the built ELF file using the DWARF debug info.
:param elf_path: Path to the ELF file.
:return: The names of the contained functions.
"""
ret = set()
with open(elf_path, 'rb') as f:
elf = ELFFile(f)
if not elf.has_dwarf_info():
print("ELF does not have debug info. Compile with debug info.")
exit(1)
dwarf_info = elf.get_dwarf_info()
for CU in dwarf_info.iter_CUs():
top_die = CU.get_top_DIE()
die_get_funcs_rec(top_die, ret)
return ret
def get_elf_symbols_from_sections(elf_path: Path) -> Set[str]:
"""
Gets all functions contained in the built ELF file using the symbol table section.
:param elf_path: Path to the ELF file.
:return: The names of the contained functions.
"""
ret = set()
with open(elf_path, 'rb') as f:
elf = ELFFile(f)
for section in elf.iter_sections():
if isinstance(section, SymbolTableSection):
for sym in section.iter_symbols():
ret.add(sym.name)
return ret
def is_section_supported(section: str) -> bool:
"""
Returns whether this type of section can be checked.
:param section: Name of the section that should be checked for support.
:return: Whether the type of section is supported.
"""
not_supported_sections = [".isra", ".part", ".constprop"]
return not any(not_supported in section for not_supported in not_supported_sections)
def get_input_sections(script_path: Path) -> List[str]:
"""
Gets all sections (named after the functions) that should be mapped to ITCM according
to the linker script.
:param script_path: Path of the linker script.
:return: The names of the sections
"""
ret = []
section_pattern = re.compile(r"^\*\(\.([a-zA-Z0-9_\.]+)\)$")
ignored_marker = "itcm-check-ignore"
with open(script_path, 'r') as f:
for line in f:
match = section_pattern.match(line)
if match and ignored_marker not in line:
section_name = match.group(1).replace("text.", "")
if is_section_supported(section_name):
ret.append(section_name)
return ret
def check_itcm(elf_path: Path, script_paths: List[Path]):
"""
Checks if all the functions that should be mapped to ITCM are contained in the built ELF file.
:param elf_path: Path of the ELF file.
:param script_paths: Path of all linker scripts that should be checked.
"""
elf_symbols_from_debug = get_elf_symbols_from_debug(elf_path)
elf_symbols_from_sections = get_elf_symbols_from_sections(elf_path)
elf_symbols = elf_symbols_from_debug.union(elf_symbols_from_sections)
input_sections = []
for script_path in script_paths:
script_input_sections = get_input_sections(script_path)
if script_input_sections:
input_sections.extend(script_input_sections)
else:
print(f"No input sections found in {script_path}, please check if the path is correct.")
check_passed = True
for input_section in input_sections:
if input_section not in elf_symbols:
check_passed = False
print(f"Section: {input_section} not found in the ELF file!")
if check_passed:
print("ITCM check passed!")
exit(0)
else:
print("ITCM check failed!")
exit(1)
def main():
parser = argparse.ArgumentParser(description="Checks if functions marked for ITCM mapping exist in the ELF file.")
parser.add_argument(
"--elf-file",
help="Path of the compiled ELF file",
type=Path,
required=True
)
parser.add_argument(
"--script-files",
help="Paths of the linker script files",
nargs="+",
type=Path,
required=True
)
args = parser.parse_args()
check_itcm(args.elf_file, args.script_files)
if __name__ == '__main__':
main()
+109
View File
@@ -2,6 +2,7 @@
"""
Generate docs from .msg files
Also generates docs/en/middleware/dds_topics.md from dds_topics.yaml
"""
import os
@@ -9,6 +10,109 @@ import argparse
import sys
import yaml
def sort_dds_topics(topics):
return sorted(
topics,
key=lambda pub: pub["type"].rsplit("::", 1)[-1]
)
def generate_dds_yaml_doc(allMessageFiles, output_dir):
"""
Generates human readable version of dds_topics.yaml.
Default output is to docs/en/middleware/dds_topics.md
"""
output_file = 'dds_topics.md'
dds_markdown = ""
if not os.path.isdir(output_dir):
print("Output directory not found")
sys.exit(1)
dds_file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../src/modules/uxrce_dds_client/dds_topics.yaml")
output_file_path = os.path.join(output_dir, output_file)
try:
with open(dds_file_path, 'r') as file:
data = yaml.safe_load(file)
# Get messages and topics that are not published by default
# Start by getting all that are published.
all_messages_in_source = set()
all_message_types =set()
all_topics =set()
for message in data["publications"]:
all_message_types.add(message['type'].split("::")[-1])
all_topics.add(message['topic'].split('/')[-1])
for message in data["subscriptions"]:
all_message_types.add(message['type'].split("::")[-1])
all_topics.add(message['topic'].split('/')[-1])
if data["subscriptions_multi"]: # There is none now
dds_markdown += "None\n"
for message in data["subscriptions_multi"]:
all_message_types.add(message['type'].split("::")[-1])
all_topics.add(message['topic'].split('/')[-1])
for message in allMessageFiles:
all_messages_in_source.add(message.split('/')[-1].split('.')[0])
messagesNotExported = sorted(all_messages_in_source - all_message_types)
# write out the dds file
dds_markdown="""# dds_topics.yaml — PX4 Topics Exposed to ROS 2
::: info
This document is [auto-generated](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/msg/generate_msg_docs.py) from the source code.
:::
The [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) file specifies which uORB message definitions are compiled into the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) module when [PX4 is built](../middleware/uxrce_dds.md#code-generation), and hence which topics are available for ROS 2 applications to subscribe or publish (by default).
This document shows a markdown-rendered version of [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), listing the publications, subscriptions, and so on.
## Publications
Topic | Type| Rate Limit
--- | --- | ---
"""
for message in sort_dds_topics(data["publications"]):
type = message['type']
px4Type=type.split("::")[-1]
dds_markdown += f"`{message['topic']}` | [{type}](../msg_docs/{px4Type}.md) | {message.get('rate_limit','')}\n"
dds_markdown += "\n## Subscriptions\n\nTopic | Type\n--- | ---\n"
for message in sort_dds_topics(data["subscriptions"]):
type = message['type']
px4Type=type.split("::")[-1]
dds_markdown += f"{message['topic']} | [{type}](../msg_docs/{px4Type}.md)\n"
dds_markdown += "\n## Subscriptions Multi\n\n"
if not data["subscriptions_multi"]: # There is none now
dds_markdown += "None\n"
else:
print("Warning - we now have subscription_multi data - check format")
dds_markdown += "Topic | Type\n--- | ---\n"
for message in sort_dds_topics(data["subscriptions_multi"]):
dds_markdown += f"{message['topic']} | {message['type']}\n"
if messagesNotExported:
# Print the topics that are not exported to DDS
dds_markdown += "\n## Not Exported\n\nThese messages are not listed in the yaml file.\nThey are not build into the module, and hence are neither published or subscribed."
dds_markdown += "\n\n::: details See messages\n"
for item in sorted(messagesNotExported):
dds_markdown += f"\n- [{item}](../msg_docs/{item}.md)"
dds_markdown += "\n:::\n" # End of details block
with open(output_file_path, 'w') as content_file:
content_file.write(dds_markdown)
except yaml.YAMLError as exc:
print(f"Error parsing YAML: {exc}")
except FileNotFoundError:
print(f"Error: {dds_file_path} not found.")
def get_msgs_list(msgdir):
"""
Makes a list of relative paths of .msg files in the given directory
@@ -30,8 +134,10 @@ def get_msgs_list(msgdir):
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Generate docs from .msg files')
parser.add_argument('-d', dest='dir', help='output directory', required=True)
parser.add_argument('--dds_topics', dest='dds_topics', help='Generate dds yaml doc', action='store_true')
args = parser.parse_args()
output_dir = args.dir
@@ -42,6 +148,9 @@ if __name__ == "__main__":
msg_files = get_msgs_list(msg_path)
msg_files.sort()
if args.dds_topics:
generate_dds_yaml_doc(msg_files, output_dir)
versioned_msgs_list = ''
unversioned_msgs_list = ''
+11 -11
View File
@@ -40,25 +40,25 @@ The generated files will be written to the `modules` directory.
## Categories
"""
for category in sorted(module_groups):
result += "- [%s](modules_%s.md)\n" % (category.capitalize(), category)
result += f"- [{category.capitalize()}](modules_{category}.md)\n"
self._outputs['main'] = result
for category in sorted(module_groups):
result = "# Modules Reference: %s\n" % category.capitalize()
result = f"# Modules Reference: {category.capitalize()}\n\n"
subcategories = module_groups[category]
if len(subcategories) > 1:
result += 'Subcategories:\n'
for subcategory in subcategories:
result += 'Subcategories:\n\n'
for subcategory in sorted(subcategories):
if subcategory == '':
continue
subcategory_label = subcategory.replace('_', ' ').title()
subcategory_file_name = category+'_'+subcategory
result += '- [%s](modules_%s.md)\n' % (subcategory_label, subcategory_file_name)
result += f'- [{subcategory_label}](modules_{subcategory_file_name}.md)\n'
# add a sub-page for the subcategory
result_subpage = '# Modules Reference: %s (%s)\n' % \
(subcategory_label, category.capitalize())
result_subpage = f'# Modules Reference: {subcategory_label} ({category.capitalize()})\n'
result_subpage += self._ProcessModules(subcategories[subcategory])
self._outputs[subcategory_file_name] = result_subpage
@@ -68,14 +68,14 @@ The generated files will be written to the `modules` directory.
def _ProcessModules(self, module_list):
result = ''
for module in module_list:
result += "## %s\n" % module.name()
result += "Source: [%s](https://github.com/PX4/PX4-Autopilot/tree/main/src/%s)\n\n" % (module.scope(), module.scope())
result += f"\n## {module.name()}\n\n"
result += f"Source: [{module.scope()}](https://github.com/PX4/PX4-Autopilot/tree/main/src/{module.scope()})\n\n"
doc = module.documentation()
if len(doc) > 0:
result += "%s\n" % doc
result += f"{doc}\n"
usage_string = module.usage_string()
if len(usage_string) > 0:
result += '<a id="%s_usage"></a>\n### Usage\n```\n%s\n```\n' % (module.name(), usage_string)
result += f'### Usage {{#{module.name()}_usage}}\n\n```\n{usage_string}\n```\n'
return result
def Save(self, dirname):
+2 -2
View File
@@ -12,11 +12,11 @@ class ModuleDocumentation(object):
"""
# If you add categories or subcategories, they also need to be added to the
# TOC in https://github.com/PX4/PX4-user_guide/blob/main/en/SUMMARY.md
# TOC in https://github.com/PX4/PX4-Autopilot/blob/main/docs/en/SUMMARY.md
valid_categories = ['driver', 'estimator', 'controller', 'system',
'communication', 'command', 'template', 'simulation', 'autotune']
valid_subcategories = ['', 'camera', 'distance_sensor', 'imu', 'ins', 'airspeed_sensor',
'magnetometer', 'baro', 'optical_flow', 'rpm_sensor', 'transponder']
'magnetometer', 'baro', 'optical_flow', 'radio_control','rpm_sensor', 'transponder']
max_line_length = 80 # wrap lines that are longer than this
+5 -2
View File
@@ -8,22 +8,25 @@ ENV LC_ALL=C.UTF-8
ENV DISPLAY=:99
ENV TERM=xterm
ENV TZ=UTC
ENV RUNS_IN_DOCKER=true
# SITL UDP PORTS
EXPOSE 14556/udp
EXPOSE 14557/udp
# Install Shell Script Entrypoint
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
# Install PX4 Requirements
COPY requirements.txt /tmp/requirements.txt
COPY ubuntu.sh /tmp/ubuntu.sh
RUN touch /.dockerenv
RUN bash /tmp/ubuntu.sh --no-sim-tools
# Make sure git is ok with your local copy
RUN git config --global --add safe.directory '*'
# create user with id 1001 (jenkins docker workflow default)
# Create user with id 1001 (jenkins docker workflow default)
RUN useradd --shell /bin/bash -u 1001 -c "" -m user && usermod -a -G dialout user
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
+10 -2
View File
@@ -1,19 +1,27 @@
#!/bin/bash
GREEN='\033[0;32m'
NO_COLOR='\033[0m' # No Color
SCRIPTID="${GREEN}[docker-entrypoint.sh]${NO_COLOR}"
echo -e "$SCRIPTID Starting"
# Start virtual X server in the background
# - DISPLAY default is :99, set in dockerfile
# - Users can override with `-e DISPLAY=` in `docker run` command to avoid
# running Xvfb and attach their screen
if [[ -x "$(command -v Xvfb)" && "$DISPLAY" == ":99" ]]; then
echo "[docker-entrypoint.sh] Starting Xvfb"
echo -e "$SCRIPTID Starting Xvfb"
Xvfb :99 -screen 0 1600x1200x24+32 &
fi
# Check if the ROS_DISTRO is passed and use it
# to source the ROS environment
if [ -n "${ROS_DISTRO}" ]; then
echo "[docker-entrypoint.sh] ROS: ${ROS_DISTRO}"
echo -e "$SCRIPTID ROS: ${ROS_DISTRO}"
source "/opt/ros/$ROS_DISTRO/setup.bash"
fi
echo -e "$SCRIPTID ($( uname -m ))"
exec "$@"
-2
View File
@@ -42,8 +42,6 @@ else
echo "Installing PX4 general dependencies (homebrew px4-dev)"
brew tap PX4/px4
brew install px4-dev
# lock down gcc to v9 for v1.16 branch
brew install gcc-arm-none-eabi
brew install ncurses
brew install python-tk
fi
+1
View File
@@ -1 +1,2 @@
pyelftools>=0.32,<1
symforce>=0.9.0
+34 -16
View File
@@ -27,9 +27,12 @@ do
fi
done
echo "[ubuntu.sh] Starting..."
echo "[ubuntu.sh] arch: $INSTALL_ARCH"
# detect if running in docker
if [ -f /.dockerenv ]; then
echo "Running within docker, installing initial dependencies";
if [ "$RUNS_IN_DOCKER" = "true" ]; then
echo "[ubuntu.sh] Running within docker, installing initial dependencies";
apt-get --quiet -y update && DEBIAN_FRONTEND=noninteractive apt-get --quiet -y install \
ca-certificates \
gnupg \
@@ -47,7 +50,7 @@ DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
# check requirements.txt exists (script not run in source tree)
REQUIREMENTS_FILE="requirements.txt"
if [[ ! -f "${DIR}/${REQUIREMENTS_FILE}" ]]; then
echo "FAILED: ${REQUIREMENTS_FILE} needed in same directory as ubuntu.sh (${DIR})."
echo "[ubuntu.sh] FAILED: ${REQUIREMENTS_FILE} needed in same directory as ubuntu.sh (${DIR})."
return 1
fi
@@ -55,10 +58,8 @@ fi
# check ubuntu version
# otherwise warn and point to docker?
UBUNTU_RELEASE="`lsb_release -rs`"
echo "Ubuntu ${UBUNTU_RELEASE}"
echo
echo "Installing PX4 general dependencies"
echo "[ubuntu.sh] Ubuntu ${UBUNTU_RELEASE}"
echo "[ubuntu.sh] Installing PX4 general dependencies"
sudo apt-get update -y --quiet
sudo DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends install \
@@ -91,7 +92,7 @@ sudo DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends i
# Python3 dependencies
echo
echo "Installing PX4 Python3 dependencies"
echo "[ubuntu.sh] Installing PX4 Python3 dependencies"
PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}')
REQUIRED_VERSION="3.11"
if [[ "$(printf '%s\n' "$REQUIRED_VERSION" "$PYTHON_VERSION" | sort -V | head -n1)" == "$REQUIRED_VERSION" ]]; then
@@ -109,18 +110,18 @@ fi
if [[ $INSTALL_NUTTX == "true" ]]; then
echo
echo "Installing NuttX dependencies"
echo "[ubuntu.sh] NuttX Installing Dependencies ($INSTALL_ARCH)"
sudo apt-get update -y --quiet
sudo DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends install \
automake \
binutils-dev \
bison \
build-essential \
curl \
clang \
clang-tidy \
clang-format \
flex \
g++-multilib \
gcc-arm-none-eabi \
gcc-multilib \
gdb-multiarch \
genromfs \
gettext \
@@ -139,6 +140,8 @@ if [[ $INSTALL_NUTTX == "true" ]]; then
libstdc++-arm-none-eabi-newlib \
libtool \
libunwind-dev \
lldb \
lld \
pkg-config \
screen \
texinfo \
@@ -147,6 +150,21 @@ if [[ $INSTALL_NUTTX == "true" ]]; then
vim-common \
;
if [[ "${INSTALL_ARCH}" == "x86_64" ]]; then
sudo DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends install \
g++-multilib \
gcc-arm-none-eabi \
gcc-multilib \
;
fi
if [[ "${INSTALL_ARCH}" == "aarch64" ]]; then
sudo DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends install \
g++-aarch64-linux-gnu \
g++-arm-linux-gnueabihf \
;
fi
if [ -n "$USER" ]; then
# add user to dialout group (serial port access)
sudo usermod -aG dialout $USER
@@ -157,7 +175,7 @@ fi
if [[ $INSTALL_SIM == "true" ]]; then
echo
echo "Installing PX4 simulation dependencies"
echo "[ubuntu.sh] Installing PX4 simulation dependencies"
# General simulation dependencies
sudo DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends install \
@@ -182,8 +200,8 @@ if [[ $INSTALL_SIM == "true" ]]; then
fi
else
# Expects Ubuntu 22.04 > by default
echo "Gazebo (Harmonic) will be installed"
echo "Earlier versions will be removed"
echo "[ubuntu.sh] Gazebo (Harmonic) will be installed"
echo "[ubuntu.sh] Earlier versions will be removed"
# Add Gazebo binary repository
sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
+21 -10
View File
@@ -59,7 +59,7 @@ def get_N_colors(N, s=0.8, v=0.9):
def topic_filename(topic):
MSG_PATH = 'msg/'
file_list = os.listdir(MSG_PATH)
file_list = sorted(os.listdir(MSG_PATH))
msg_files = [file.replace('.msg', '') for file in file_list if file.endswith(".msg")]
if topic in msg_files:
@@ -369,12 +369,14 @@ class Graph(object):
if not scope.is_empty():
scopes_with_topic[name] = scope
# scopes_with_topic = sorted(scopes_with_topic)
self._print_ambiguities = ambiguous_topics
if use_topic_pubsub_union:
self._print_topics = subscribed_topics | published_topics
self._print_topics = sorted(subscribed_topics | published_topics)
self._print_scopes = scopes_with_topic
else:
self._print_topics = subscribed_topics & published_topics
self._print_topics = sorted(subscribed_topics & published_topics)
# cull scopes to only those that pub or sub to a topic that has both
intersect_scopes = {}
@@ -392,7 +394,7 @@ class Graph(object):
log.debug('ignoring excluded path '+path)
return
entries = os.listdir(path)
entries = sorted(os.listdir(path))
# check if entering a new scope
cmake_file = 'CMakeLists.txt'
@@ -685,8 +687,8 @@ class OutputJSON(object):
# edges
for name,scope in output_scopes.items():
for topic in scope.publications:
for name,scope in sorted(output_scopes.items(), key=lambda kv: kv[0]):
for topic in sorted(scope.publications):
if topic in output_topics:
edge = {}
edge['source'] = 'm_'+name
@@ -695,8 +697,8 @@ class OutputJSON(object):
edge['style'] = 'dashed'
edges.append(edge)
for name,scope in output_scopes.items():
for topic in scope.subscriptions:
for name,scope in sorted(output_scopes.items(), key=lambda kv: kv[0]):
for topic in sorted(scope.subscriptions):
if topic in output_topics:
edge = {}
edge['source'] = 't_'+topic
@@ -723,10 +725,16 @@ if "__main__" == __name__:
log.setLevel(logging.DEBUG)
print("set log level to DEBUG")
print('')
print('== Starting uorb_graph/create.py ==')
if args.file:
print(' =Filename:', os.path.basename(args.file))
# ignore topics that are subscribed/published by many topics, but are not really
# useful to show in the graph
topic_blacklist = [ 'parameter_update', 'mavlink_log', 'log_message' ]
print('Excluded topics: '+str(topic_blacklist))
print(' =Excluded Topics: '+str(topic_blacklist))
if len(args.modules) == 0:
scope_whitelist = []
@@ -757,7 +765,7 @@ if "__main__" == __name__:
if 0 < len(args.exclude_path):
path_blacklist = args.exclude_path
if path_blacklist:
print('Excluded Path: '+str(path_blacklist))
print(' =Excluded Path: '+str(path_blacklist))
graph.build(source_paths, path_blacklist=path_blacklist, use_topic_pubsub_union=args.use_topic_union, merge_depends=args.merge_depends)
@@ -784,3 +792,6 @@ if "__main__" == __name__:
pass
else:
print('Error: unknown output format '+args.output)
print("== Completed uorb_graph/create.py ==")
print("")
@@ -10,6 +10,7 @@ CONFIG_DRIVERS_BAROMETER_DPS310=y
CONFIG_DRIVERS_BATT_SMBUS=y
CONFIG_DRIVERS_CAMERA_CAPTURE=y
CONFIG_DRIVERS_CAMERA_TRIGGER=y
CONFIG_DRIVERS_CDCACM_AUTOSTART=y
CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y
CONFIG_COMMON_DISTANCE_SENSOR=y
CONFIG_DRIVERS_DSHOT=y
@@ -41,7 +42,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+2 -1
View File
@@ -46,7 +46,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+2 -2
View File
@@ -56,7 +56,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
@@ -76,7 +77,6 @@ CONFIG_MODULES_MC_POS_CONTROL=y
CONFIG_MODULES_MC_RATE_CONTROL=y
CONFIG_MODULES_NAVIGATOR=y
CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000
CONFIG_MODULES_PAYLOAD_DELIVERER=y
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_ROVER_POS_CONTROL=y
CONFIG_MODULES_SENSORS=y
@@ -6,8 +6,3 @@ CONFIG_DRIVERS_SW_CRYPTO=y
# CONFIG_EKF2_AUX_GLOBAL_POSITION is not set
CONFIG_PUBLIC_KEY0="../../../Tools/test_keys/key0.pub"
CONFIG_PUBLIC_KEY1="../../../Tools/test_keys/rsa2048.pub"
CONFIG_MODULES_FW_ATT_CONTROL=n
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n
CONFIG_MODULES_FW_POS_CONTROL=n
CONFIG_MODULES_FW_RATE_CONTROL=n
CONFIG_MODULES_VTOL_ATT_CONTROL=n
+2 -2
View File
@@ -37,7 +37,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
@@ -56,7 +57,6 @@ CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
CONFIG_MODULES_MC_POS_CONTROL=y
CONFIG_MODULES_MC_RATE_CONTROL=y
CONFIG_MODULES_NAVIGATOR=y
CONFIG_MODULES_PAYLOAD_DELIVERER=y
CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_SENSORS=y
-5
View File
@@ -5,8 +5,3 @@ CONFIG_DRIVERS_SW_CRYPTO=y
# CONFIG_EKF2_AUX_GLOBAL_POSITION is not set
CONFIG_PUBLIC_KEY0="../../../Tools/test_keys/key0.pub"
CONFIG_PUBLIC_KEY1="../../../Tools/test_keys/rsa2048.pub"
CONFIG_MODULES_FW_ATT_CONTROL=n
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n
CONFIG_MODULES_FW_POS_CONTROL=n
CONFIG_MODULES_FW_RATE_CONTROL=n
CONFIG_MODULES_VTOL_ATT_CONTROL=n
@@ -34,25 +34,75 @@
#pragma once
// DMAMUX1 Using at most 8 Channels on DMA1 -------- Assigned
#define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 // 1 DMA1:37 IIM-42653
#define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 // 2 DMA1:38 IIM-42653
#define DMAMAP_USART1_RX DMAMAP_DMA12_USART1RX_0 // 3 DMA1:41 GPS1
#define DMAMAP_USART1_TX DMAMAP_DMA12_USART1TX_0 // 4 DMA1:42 GPS1
#define DMAMAP_USART6_RX DMAMAP_DMA12_USART6RX_0 // 5 DMA1:71 RC
#define DMAMAP_USART6_TX DMAMAP_DMA12_USART6TX_0 // 6 DMA1:72 RC
// Timer 4 (DMAMAP_DMA12_TIM4UP_0) // 7 DMA1:32 TIM4UP/TIM4CH1-4
// Timer 5 (DMAMAP_DMA12_TIM5UP_0) // 8 DMA1:50 TIM5UP/TIM5CH1-4
// V
// Timer 4 Channel 1 /* DMA1:29 TIM4CH1 */
#define DMAMAP_SPI1_RX DMAMAP_DMA12_SPI1RX_0 /* 1 DMA1:37 IIM-42653 */
#define DMAMAP_SPI1_TX DMAMAP_DMA12_SPI1TX_0 /* 2 DMA1:38 IIM-42653 */
//#define DMAMAP_SPI2_RX DMAMAP_DMA12_SPI2RX_0 /* 3 DMA1:39 ICM-42688-P */
//#define DMAMAP_SPI2_TX DMAMAP_DMA12_SPI2TX_0 /* 4 DMA1:40 ICM-42688-P */
#define DMAMAP_USART1_RX DMAMAP_DMA12_USART1RX_0 /* DMA1:41 GPS1 */
#define DMAMAP_USART1_TX DMAMAP_DMA12_USART1TX_0 /* DMA1:42 GPS1 */
//#define DMAMAP_USART3_RX DMAMAP_DMA12_USART3RX_0 /* DMA1:45 DEBUG */
//#define DMAMAP_USART3_TX DMAMAP_DMA12_USART3TX_0 /* DMA1:46 DEBUG */
// Timer 8 Channel 1 /* DMA1:47 TIM8CH1 */
// Timer 8 Channel 2 /* DMA1:48 TIM8CH2 */
// Timer 8 Channel 3 /* DMA1:49 TIM8CH3 */
// Timer 8 Channel 4 /* DMA1:50 TIM8CH4 */
// Timer 5 Channel 1 /* DMA1:55 TIM5CH1 */
// Timer 5 Channel 2 /* DMA1:56 TIM5CH2 */
// Timer 5 Channel 3 /* DMA1:57 TIM5CH3 */
// Timer 5 Channel 4 /* DMA1:58 TIM5CH4 */
// #define DMAMAP_UART4_RX DMAMAP_DMA12_UART4RX_0 /* DMA1:63 UART4 */
// #define DMAMAP_UART4_TX DMAMAP_DMA12_UART4TX_0 /* DMA1:64 UART4 */
#define DMAMAP_USART6_RX DMAMAP_DMA12_USART6RX_0 /* 5 DMA1:71 RC */
// #define DMAMAP_USART6_TX DMAMAP_DMA12_USART6TX_0 /* 6 DMA1:72 RC */
// Assigned in timer_config.cpp
// Timer 4 /* 7 DMA1:32 TIM4UP */
// Timer 5 /* 8 DMA1:50 TIM5UP */
// DMAMUX2 Using at most 8 Channels on DMA2 -------- Assigned
#define DMAMAP_USART2_RX DMAMAP_DMA12_USART2RX_1 // 1 DMA2:43 VTX
#define DMAMAP_UART5_RX DMAMAP_DMA12_UART5RX_1 // 2 DMA2:65 VTX
#define DMAMAP_UART5_TX DMAMAP_DMA12_UART5TX_1 // 3 DMA2:66 VTX
#define DMAMAP_UART7_RX DMAMAP_DMA12_UART7RX_1 // 4 DMA2:79 TELEM1
#define DMAMAP_UART7_TX DMAMAP_DMA12_UART7TX_1 // 5 DMA2:80 TELEM1
#define DMAMAP_USART3_RX DMAMAP_DMA12_USART3RX_1 // 6 DMA2:45 DEBUG
#define DMAMAP_USART3_TX DMAMAP_DMA12_USART3TX_1 // 7 DMA2:46 DEBUG
// available
// V
// Timer 4 Channel 1 /* DMA2:29 TIM4CH1 */
#define DMAMAP_USART2_RX DMAMAP_DMA12_USART2RX_1 /* 3 DMA2:43 TELEM3 */
#define DMAMAP_USART2_TX DMAMAP_DMA12_USART2TX_1 /* 4 DMA2:44 TELEM3 */
#define DMAMAP_USART3_RX DMAMAP_DMA12_USART3RX_1 /* 3 DMA2:45 DEBUG */
#define DMAMAP_USART3_TX DMAMAP_DMA12_USART3TX_1 /* 4 DMA2:46 DEBUG */
// Timer 8 Channel 1 /* DMA2:47 TIM8CH1 */
// Timer 8 Channel 2 /* DMA2:48 TIM8CH2 */
// Timer 8 Channel 3 /* DMA2:49 TIM8CH3 */
// Timer 8 Channel 4 /* DMA2:50 TIM8CH4 */
// Timer 5 Channel 1 /* DMA2:55 TIM5CH1 */
// Timer 5 Channel 2 /* DMA2:56 TIM5CH2 */
// Timer 5 Channel 3 /* DMA2:57 TIM5CH3 */
// Timer 5 Channel 4 /* DMA2:58 TIM5CH4 */
//#define DMAMAP_SPI3_RX DMAMAP_DMA12_SPI3RX_1 /* 1 DMA2:61 BMI088 */
//#define DMAMAP_SPI3_TX DMAMAP_DMA12_SPI3TX_1 /* 2 DMA2:62 BMI088 */
#define DMAMAP_UART5_RX DMAMAP_DMA12_UART5RX_1 /* 5 DMA2:65 TELEM2 */
#define DMAMAP_UART5_TX DMAMAP_DMA12_UART5TX_1 /* 6 DMA2:66 TELEM2 */
#define DMAMAP_UART7_RX DMAMAP_DMA12_UART7RX_1 /* 7 DMA1:79 TELEM1 */
#define DMAMAP_UART7_TX DMAMAP_DMA12_UART7TX_1 /* 8 DMA1:80 TELEM1 */
// DMAMUX2 Using at most 8 Channels on BDMA -------- Assigned
#define DMAMAP_SPI6_RX DMAMAP_BDMA_SPI6_RX // 1 BDMA:11 SPI J11
#define DMAMAP_SPI6_TX DMAMAP_BDMA_SPI6_TX // 2 BDMA:12 SPI J11
// V
#define DMAMAP_SPI6_RX DMAMAP_BDMA_SPI6_RX /* 1 BDMA:11 SPI J11 */
#define DMAMAP_SPI6_TX DMAMAP_BDMA_SPI6_TX /* 2 BDMA:12 SPI J11 */
+2 -1
View File
@@ -260,6 +260,8 @@ CONFIG_USART1_TXDMA=y
CONFIG_USART2_BAUD=57600
CONFIG_USART2_RXBUFSIZE=600
CONFIG_USART2_RXDMA=y
CONFIG_USART2_TXBUFSIZE=1500
CONFIG_USART2_TXDMA=y
CONFIG_USART3_BAUD=57600
CONFIG_USART3_RXBUFSIZE=180
CONFIG_USART3_RXDMA=y
@@ -270,7 +272,6 @@ CONFIG_USART6_BAUD=57600
CONFIG_USART6_RXBUFSIZE=600
CONFIG_USART6_RXDMA=y
CONFIG_USART6_TXBUFSIZE=1500
CONFIG_USART6_TXDMA=y
CONFIG_USBDEV=y
CONFIG_USBDEV_BUSPOWERED=y
CONFIG_USBDEV_MAXPOWER=500
+2 -1
View File
@@ -37,7 +37,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_FIGURE_OF_EIGHT=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
@@ -26,3 +26,6 @@ nshterm /dev/ttyS3 &
# Start the time_persistor to cyclically store the RTC in FRAM
time_persistor start
# Start the ESC telemetry
dshot telemetry -d /dev/ttyS5 -x
+2 -1
View File
@@ -3,7 +3,8 @@ CONFIG_MODE_NAVIGATOR_VTOL_TAKEOFF=n
CONFIG_MODULES_AIRSPEED_SELECTOR=n
CONFIG_MODULES_FW_ATT_CONTROL=n
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n
CONFIG_MODULES_FW_POS_CONTROL=n
CONFIG_MODULES_FW_MODE_MANAGER=n
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n
CONFIG_MODULES_FW_RATE_CONTROL=n
CONFIG_MODULES_VTOL_ATT_CONTROL=n
CONFIG_COMMON_RC=y
+2 -1
View File
@@ -2,7 +2,8 @@ CONFIG_MODULES_AIRSPEED_SELECTOR=n
CONFIG_MODULES_FLIGHT_MODE_MANAGER=n
CONFIG_MODULES_FW_ATT_CONTROL=n
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=n
CONFIG_MODULES_FW_POS_CONTROL=n
CONFIG_MODULES_FW_MODE_MANAGER=n
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=n
CONFIG_MODULES_FW_RATE_CONTROL=n
CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=n
CONFIG_MODULES_MC_ATT_CONTROL=n
+2 -1
View File
@@ -42,7 +42,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+2 -1
View File
@@ -30,7 +30,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
@@ -49,7 +49,8 @@ CONFIG_MODULES_UUV_ATT_CONTROL=y
CONFIG_MODULES_UUV_POS_CONTROL=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MC_ATT_CONTROL=y
+2 -1
View File
@@ -38,7 +38,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
CONFIG_MODULES_GYRO_FFT=y
+2 -2
View File
@@ -20,7 +20,6 @@ CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_IMU_BOSCH_BMI088=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20948=y
CONFIG_DRIVERS_IMU_INVENSENSE_IIM42652=y
CONFIG_DRIVERS_IMU_INVENSENSE_IIM42653=y
CONFIG_COMMON_INS=y
CONFIG_COMMON_LIGHT=y
CONFIG_COMMON_MAGNETOMETER=y
@@ -43,7 +42,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+2 -9
View File
@@ -12,17 +12,10 @@ else
fi
iim42652 -s -R 22 start
bmi088 -A -R 29 -s start
if ! bmi088 -G -R 29 -s start
then
iim42653 -s -b 2 -R 22 start
fi
bmi088 -G -R 29 -s start
if ! ist8310 -I -R 18 start
then
iis2mdc -I -R 37 start
fi
ist8310 -I -R 18 start
bmp581 -s start
icp201xx -I start
-1
View File
@@ -42,7 +42,6 @@ constexpr px4_spi_bus_t px4_spi_buses[SPI_BUS_MAX_BUS_ITEMS] = {
initSPIBus(SPI::Bus::SPI2, {
initSPIDevice(DRV_GYR_DEVTYPE_BMI088, SPI::CS{GPIO::PortG, GPIO::Pin2}, SPI::DRDY{GPIO::PortG, GPIO::Pin3}),
initSPIDevice(DRV_ACC_DEVTYPE_BMI088, SPI::CS{GPIO::PortH, GPIO::Pin5}, SPI::DRDY{GPIO::PortA, GPIO::Pin10}),
initSPIDevice(DRV_IMU_DEVTYPE_IIM42653, SPI::CS{GPIO::PortD, GPIO::Pin12}, SPI::DRDY{GPIO::PortA, GPIO::Pin10}),
}, {GPIO::PortI, GPIO::Pin11}),
// initSPIBus(SPI::Bus::SPI3,{
// // no devices
+2 -1
View File
@@ -50,7 +50,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+2 -1
View File
@@ -50,7 +50,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+2 -1
View File
@@ -49,7 +49,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
@@ -50,7 +50,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+2 -1
View File
@@ -46,7 +46,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+2 -1
View File
@@ -32,7 +32,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+2 -1
View File
@@ -39,7 +39,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+1 -1
View File
@@ -10,4 +10,4 @@
# fi
# DShot telemetry is always on UART7
# dshot telemetry /dev/ttyS5
# dshot telemetry -d /dev/ttyS5
+2 -1
View File
@@ -41,7 +41,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+1 -1
View File
@@ -10,4 +10,4 @@
# fi
# DShot telemetry is always on UART7
# dshot telemetry /dev/ttyS5
# dshot telemetry -d /dev/ttyS5
+2 -1
View File
@@ -44,7 +44,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+1 -1
View File
@@ -9,4 +9,4 @@ then
fi
# DShot telemetry is always on UART7
dshot telemetry /dev/ttyS5
dshot telemetry -d /dev/ttyS5
@@ -5,8 +5,6 @@ CONFIG_BOARD_SERIAL_GPS2="/dev/ttyS1"
CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS2"
CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS3"
CONFIG_BOARD_SERIAL_TEL3="/dev/ttyS5"
CONFIG_BOARD_SERIAL_RC="/dev/ttyS4"
CONFIG_BOARD_CONSTRAINED_FLASH=y
CONFIG_DRIVERS_ADC_BOARD_ADC=y
CONFIG_DRIVERS_BAROMETER_BMP280=y
CONFIG_DRIVERS_BAROMETER_GOERTEK_SPA06=y
@@ -37,7 +35,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
@@ -62,6 +61,7 @@ CONFIG_MODULES_VTOL_ATT_CONTROL=y
CONFIG_SYSTEMCMDS_BSONDUMP=y
CONFIG_SYSTEMCMDS_DMESG=y
CONFIG_SYSTEMCMDS_HARDFAULT_LOG=y
CONFIG_SYSTEMCMDS_LED_CONTROL=y
CONFIG_SYSTEMCMDS_MFT=y
CONFIG_SYSTEMCMDS_NSHTERM=y
CONFIG_SYSTEMCMDS_PARAM=y
+1 -1
View File
@@ -74,7 +74,7 @@
#define BOARD_TYPE 1105
#define BOARD_FLASH_SECTORS (14)
#define BOARD_FLASH_SIZE (16 * 128 * 1024)
#define APP_RESERVATION_SIZE (2 * 128 * 1024)
#define APP_RESERVATION_SIZE (1 * 128 * 1024)
#define OSC_FREQ 16
+2 -1
View File
@@ -45,7 +45,8 @@ CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_POS_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
+1 -1
View File
@@ -9,4 +9,4 @@ then
fi
# DShot telemetry is always on UART7
dshot telemetry /dev/ttyS5
dshot telemetry -d /dev/ttyS5
@@ -0,0 +1,3 @@
CONFIG_BOARD_TOOLCHAIN="arm-none-eabi"
CONFIG_BOARD_ARCHITECTURE="cortex-m7"
CONFIG_BOARD_ROMFSROOT=""
@@ -0,0 +1,93 @@
CONFIG_BOARD_TOOLCHAIN="arm-none-eabi"
CONFIG_BOARD_ARCHITECTURE="cortex-m7"
CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS3"
CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS0"
CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS1"
CONFIG_BOARD_SERIAL_TEL3="/dev/ttyS2"
CONFIG_BOARD_SERIAL_RC="/dev/ttyS4"
CONFIG_BOARD_SERIAL_TEL4="/dev/ttyS5"
CONFIG_DRIVERS_ADC_BOARD_ADC=y
CONFIG_DRIVERS_BATT_SMBUS=y
CONFIG_DRIVERS_BAROMETER_INVENSENSE_ICP201XX=y
CONFIG_DRIVERS_CAMERA_CAPTURE=y
CONFIG_DRIVERS_CAMERA_TRIGGER=y
CONFIG_DRIVERS_CDCACM_AUTOSTART=y
CONFIG_DRIVERS_OSD_ATXXXX=y
CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y
CONFIG_COMMON_DISTANCE_SENSOR=y
CONFIG_DRIVERS_DSHOT=y
CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM42688P=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM45686=y
CONFIG_COMMON_LIGHT=y
CONFIG_COMMON_MAGNETOMETER=y
CONFIG_COMMON_OPTICAL_FLOW=y
CONFIG_DRIVERS_PWM_OUT=y
CONFIG_DRIVERS_RC_INPUT=y
CONFIG_COMMON_TELEMETRY=y
CONFIG_DRIVERS_TONE_ALARM=y
CONFIG_DRIVERS_UAVCAN=y
CONFIG_BOARD_UAVCAN_INTERFACES=1
CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE=6
CONFIG_MODULES_AIRSPEED_SELECTOR=y
CONFIG_MODULES_ATTITUDE_ESTIMATOR_Q=y
CONFIG_MODULES_BATTERY_STATUS=y
CONFIG_MODULES_CAMERA_FEEDBACK=y
CONFIG_MODULES_COMMANDER=y
CONFIG_MODULES_CONTROL_ALLOCATOR=y
CONFIG_MODULES_DATAMAN=y
CONFIG_MODULES_EKF2=y
# CONFIG_EKF2_AUX_GLOBAL_POSITION is not set
# CONFIG_EKF2_AUXVEL is not set
# CONFIG_EKF2_BARO_COMPENSATION is not set
# CONFIG_EKF2_DRAG_FUSION is not set
# CONFIG_EKF2_GNSS_YAW is not set
# CONFIG_EKF2_SIDESLIP is not set
CONFIG_MODULES_ESC_BATTERY=y
CONFIG_MODULES_EVENTS=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_FW_ATT_CONTROL=y
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_FW_MODE_MANAGER=y
CONFIG_MODULES_FW_LATERAL_LONGITUDINAL_CONTROL=y
CONFIG_MODULES_FW_RATE_CONTROL=y
CONFIG_MODULES_GIMBAL=y
CONFIG_MODULES_GYRO_CALIBRATION=y
CONFIG_MODULES_GYRO_FFT=y
CONFIG_MODULES_LAND_DETECTOR=y
CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y
CONFIG_MODULES_LOAD_MON=y
CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
CONFIG_MODULES_MC_POS_CONTROL=y
CONFIG_MODULES_MC_RATE_CONTROL=y
CONFIG_MODULES_NAVIGATOR=y
CONFIG_NUM_MISSION_ITMES_SUPPORTED=1000
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_SENSORS=y
CONFIG_MODULES_TEMPERATURE_COMPENSATION=y
CONFIG_MODULES_VTOL_ATT_CONTROL=y
CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y
CONFIG_SYSTEMCMDS_BSONDUMP=y
CONFIG_SYSTEMCMDS_DMESG=y
CONFIG_SYSTEMCMDS_DUMPFILE=y
CONFIG_SYSTEMCMDS_GPIO=y
CONFIG_SYSTEMCMDS_HARDFAULT_LOG=y
CONFIG_SYSTEMCMDS_LED_CONTROL=y
CONFIG_SYSTEMCMDS_MFT=y
CONFIG_SYSTEMCMDS_NSHTERM=y
CONFIG_SYSTEMCMDS_PARAM=y
CONFIG_SYSTEMCMDS_REBOOT=y
CONFIG_SYSTEMCMDS_SYSTEM_TIME=y
CONFIG_SYSTEMCMDS_TOP=y
CONFIG_SYSTEMCMDS_TOPIC_LISTENER=y
CONFIG_SYSTEMCMDS_TUNE_CONTROL=y
CONFIG_SYSTEMCMDS_UORB=y
CONFIG_SYSTEMCMDS_USB_CONNECTED=y
CONFIG_SYSTEMCMDS_VER=y
CONFIG_SYSTEMCMDS_WORK_QUEUE=y
@@ -0,0 +1,13 @@
{
"board_id": 5409,
"magic": "PX4FWv1",
"description": "Firmware for the KakuteH7 board",
"image": "",
"build_time": 0,
"summary": "KAKUTEH7",
"version": "0.1",
"image_size": 0,
"image_maxsize": 1835008,
"git_identity": "",
"board_revision": 0
}
@@ -0,0 +1,30 @@
#!/bin/sh
#
# board specific defaults
#------------------------------------------------------------------------------
# transision from params file to flash-based params (2022-08)
if [ -f $PARAM_FILE ]
then
param load $PARAM_FILE
param save
# create a backup
mv $PARAM_FILE ${PARAM_FILE}.bak
reboot
fi
param set-default BAT1_V_DIV 11.2
param set-default BAT1_A_PER_V 59.5
# system_power unavailable
param set-default CBRK_SUPPLY_CHK 894281
# Select the Generic 250 Racer by default
param set-default SYS_AUTOSTART 4050
# use EKF2 without mag
param set-default SYS_HAS_MAG 0
# and enable gravity fusion
param set-default EKF2_IMU_CTRL 7
param set-default IMU_GYRO_RATEMAX 2000
@@ -0,0 +1,12 @@
#!/bin/sh
#
# KakuteH7 specific board extras init
#------------------------------------------------------------------------------
if ! param compare OSD_ATXXXX_CFG 0
then
atxxxx start -s
fi
# DShot telemetry is always on UART7
dshot telemetry -d /dev/ttyS5
@@ -0,0 +1,13 @@
#!/bin/sh
#
# Holybro KakuteH7 dual IMU specific board sensors init
#------------------------------------------------------------------------------
board_adc start
# The KakuteH7 dual IMU comes by default with an ICM2688P and ICM45686.
# We start the ICM45686 first to have it as the primary by default.
icm45686 -R 0 -s start
icm42688p -R 0 -s start
# ICP20100 baro on external I2C1
icp201xx -X -a 0x64 start

Some files were not shown because too many files have changed in this diff Show More