-
Notifications
You must be signed in to change notification settings - Fork 13.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added Zero Turn Lawnmower model #22717
Conversation
Hey I will take a look! Thanks for the contribution :). |
I updated .gitmodules and gz submodule to reflect latest changes there (pointed it to "main" in PX4/PX4-gazebo-models). @frede791 @dagar @PerFrivik - now when PX4/PX4-gazebo-models#27 is merged, this one needs a review and a push. |
@slgrobotics @dagar @PerFrivik The PX4/PX4-gazebo-models#27 PR has been merged so this is ready for review. |
Waiting for PX4/PX4-gazebo-models#30 to be completed. |
I will take a look at this on Friday (16.02). |
Seems to be working fine 👍, but I am wondering a bit about the servos, I did not quite understand what they are doing in the sim. Regarding the naming convention, I will talk with Matthias. Mission also works well. |
@PerFrivik - about the servos, I explained their function in this PR above and in the setup script comments. Let me know if this is not clear/sufficient. "Note: And when it comes to the sim, real lawnmowers have cutter decks and maybe other actuators, so the suggested sim configuration makes at least some available to users who will take DD Guidance code and will start modifying it to their needs. |
Hey @slgrobotics I was just a bit confused, because when I ran the sim only 2 servos showed up, but you mentioned 4 separate things that should be controlled that are not wheels. |
@PerFrivik - well, I wouldn't expect generic Differential Drive Guidance control output anything beyond the two wheels values. The servos/actuators are there:
Overall, planting a hint or example code in a component that serves as a baseline for future extension by users is a way to complement documentation (which is always lacking). To me, the goal of this PR is to contribute a useful model and to help you further debug/tune your Guidance control. I am fine with whatever changes make sense to the Team, no worries. |
To reiterate: I was not sure about naming logic in airframes folder, so 5005_gz_lawnmower can be changed to fit common practices. I think that having a 5* naming group for agricultural machines (or even all rovers) makes sense. Please come to an agreement and state the name you want here - I will do the renaming then. Thanks! |
@slgrobotics I will take another look at it today, then I think we would be ready to merge 👍 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Except the airframe number and a small comment for clarity, I think this is a nice addition to PX4!
I think if we want to change the convention, we should do it for all of them. |
@PerFrivik - I accepted your changes and did all the renaming. I also pulled the latest hash of gz_models (fixes the "pose>" issue in R1 model). The tree builds (as described initially). There's still unresolved issue #22767 - for testing just add back A couple pending PRs should not interfere with testing or merging - https://github.com/PX4/PX4-gazebo-models/pulls |
@slgrobotics perfect! I will approve this PR as soon as the CI is done running. |
BTW, I tried it in "Go There" mode, it seems to work. It starts moving very slowly, then accelerates OK, and when reaching the destination WP - moves around in "Hold" state. When running a mission, the rover turns well towards the waypoint, but fails to move. Here is a simple plan I used: |
Let me test and see what the issue is. |
Okay, so mission does work, the issue is that with my current waypoint logic, the rover needs to go below a certain angle threshold to start driving, but since the vehicle angular rate that gets commanded its proportional to the angle error, towards the end the rover gets quite slow. This is something I need to fix, maybe I can introduce a minimal angular rate for the turning state, I will think about it, thank you! Either way, this is unrelated to your PR and I think we can merge it now. |
Works all right
RDD_WHL_SPEED has new name: RDD_WHEEL_SPEED
Co-authored-by: Per Frivik <[email protected]>
Co-authored-by: Per Frivik <[email protected]>
also pulled latest GZ models hash
* Added Lawnmower airframe * Update 5005_gz_lawnmower Works all right * Update 5005_gz_lawnmower RDD_WHL_SPEED has new name: RDD_WHEEL_SPEED * Update ROMFS/px4fmu_common/init.d-posix/airframes/5005_gz_lawnmower Co-authored-by: Per Frivik <[email protected]> * Update ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt Co-authored-by: Per Frivik <[email protected]> * Renamed 5005_gz_lawnmower to 4011_gz_lawnmower also pulled latest GZ models hash --------- Co-authored-by: Per Frivik <[email protected]>
* Added Lawnmower airframe * Update 5005_gz_lawnmower Works all right * Update 5005_gz_lawnmower RDD_WHL_SPEED has new name: RDD_WHEEL_SPEED * Update ROMFS/px4fmu_common/init.d-posix/airframes/5005_gz_lawnmower Co-authored-by: Per Frivik <[email protected]> * Update ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt Co-authored-by: Per Frivik <[email protected]> * Renamed 5005_gz_lawnmower to 4011_gz_lawnmower also pulled latest GZ models hash --------- Co-authored-by: Per Frivik <[email protected]>
* Added Lawnmower airframe * Update 5005_gz_lawnmower Works all right * Update 5005_gz_lawnmower RDD_WHL_SPEED has new name: RDD_WHEEL_SPEED * Update ROMFS/px4fmu_common/init.d-posix/airframes/5005_gz_lawnmower Co-authored-by: Per Frivik <[email protected]> * Update ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt Co-authored-by: Per Frivik <[email protected]> * Renamed 5005_gz_lawnmower to 4011_gz_lawnmower also pulled latest GZ models hash --------- Co-authored-by: Per Frivik <[email protected]>
PX4:ver Add base type compare px4_fmu-v6x:Use hwbasecmp px4_fmu-v6x:HAVE_PM2 set by PX4_MFT_PM2 in manifest px4_fmu-v6x:rc.board_sensors Use BOARD_HAS_HW_SPLIT_VERSIONING nxp Support BOARD_HAS_HW_SPLIT_VERSIONING px4_fmu-v6xrt:Use BOARD_HAS_HW_SPLIT_VERSIONING & common PAB manifest px4_fmu-v5x:Use BOARD_HAS_HW_SPLIT_VERSIONING & common PAB manifest boards: arkv6x migrate to split versioning dataman: Move before using variable definitions check: Changing the order of messages and events ekf2-agp: reset to measurement on fusion timeout ekf2-agp: ensure logging of AGP aid_src topic ekf2-agp: follow measurement reset dataman: use correct size for dataman compat key mission: renaming dataman_id to mission_dataman_id dataman: extend for double storage geofence and safe points mavlink_mission: add alternating storage for geofence and safe points on upload This way the old points are kept on an upload error. mavlink_mission: publish mission topic at startup mission_base: make sure to always update state on mission topic update mission_base: fix validity on abort landing ina238: set shunt calibration to desired value if readback is incorrect (#22237) * refactor driver to dynamically check registers and do reset if register does not match desired value * have seen various times where shunt calibration was reset in air --------- Signed-off-by: RomanBapst <[email protected]> gimbal: Change the IF statement to a SWITCH statement matrix: fix internal include chain AxisAngle use Vector3<T> instead of Vector<T, 3> matrix: return value simplifications matrix: Slice templated on const and non-const matrix cases to avoid casting const to non-const with `const_cast<Matrix<Type, M, N>*>(data)` NuttX with h7 adc clock Backports stm32h7:ADC STM32_RCC_D3CCIPR_ADCSEL->STM32_RCC_D3CCIPR_ADCSRC stm32h7:adc Dynamically set clock prescaler & BOOST The ADC peripheral can only support up to 50MHz on rev V silicon and 36MHz on Y silicon. The existing driver always used no prescaler and kept boost setting at 0. cpuload: Fix wrong idle thread load When the CPU load monitor is started while already running, then the idle thread last_times[0] is reset to the last 1 second, rather than since when the CPU load monitor was last started. The remaining threads are not impacted, since their last_times[i] is reset to zero here. This results in the idle thread having a lower than real CPU load, with the remaining CPU time being wrongly attributed as scheduler load. fmu-6x: fix Telem2 without flow control When flow control is used together with DMA, we need to add a pulldown to CTS. Without it, it assumes flow control and gets stuck when CTS is not connected. Signed-off-by: Julian Oes <[email protected]> px4_fmu-v6x:Add Sensor set 8 Change FMU-v6x REV 6 IMU Order Change IMU Order, make adis16470 in 1st priority. ICP201: Fix B2 version not return in bootup config fix FunctionActuatorSet: if a param is set to NaN, it should be ignored MAVLink spec: https://mavlink.io/en/messages/common.html#MAV_CMD_DO_SET_ACTUATOR Previously, a command was overwriting all other indexes. commander: send ack for VEHICLE_CMD_DO_SET_ACTUATOR fmu-v6xrt: hotfix for sdio crash when reading multiblock to unaligned memory ekf2: let drag fusion affect the complete state vector This improves tilt estimation and can extend the inertial dead-reckoning validity period ekf2-drag: do not generate Kalman gain to save flash Bugfix removed conversion from rpm to rad s bat_sim: parameter for disabling battery simulator drivers/uavcannode: add indicated airspeed Signed-off-by: dirksavage88 <[email protected]> battery: make time remaining estimation dependent on level flight cha… (#22401) * battery: make time remaining estimation dependent on level flight characteristis for FW * battery: fix that FW flight is also correctly detected when vehicle_status is not updated Signed-off-by: Silvan Fuhrer <[email protected]> * FixedwingPositionControl: Move constant to header file * flight phase estimation: use tecs height rate reference to check for level flight --------- Signed-off-by: Silvan Fuhrer <[email protected]> Co-authored-by: Silvan Fuhrer <[email protected]> mc_att_control: remove direct setting of att sp in Stabilized Instead of directly setting the attitude setpoint for usage inside the same module only publish it to the uorb topic, which is subscribed to in the same module. Signed-off-by: Silvan Fuhrer <[email protected]> mc_attitude_control: move attitude setpoint pulling to right before usage Signed-off-by: Silvan Fuhrer <[email protected]> params: change return type of param_modify_on_import to enum Return early in param_import_callback() with 1 if we do a param_set in the param translation. Signed-off-by: Silvan Fuhrer <[email protected]> FLightTaskAuto: limit nudging speed based on distance sensor v6x board_sensors: publish system_power if ADC_ADS1115_EN is enabled PWMOut/px4io: correct automatic servo/motor configuration messages Lanbao driver: correct rangefinder type to IR boards: new ARK Septentrio GPS CAN node(ark_septentrio-gps) * update gps submodule with sbf fix * ARK Septentrio GPS initial commit Auto: Change 1G to a more accurate value tuning_tools: Change 1G to a more accurate value update all px4board kconfig Differential Drive Guidance: Add guidance also add dependency on control allocation parameter CA_R_REV Differential Drive Guidance: Added mission logic Differential Drive Guidance Differential Drive Guidance Differential Guidance: Inlcude library Differential Guidance: Compiles, does not work though Differential Guidance: Works somewhat Differential Guidance: Temp Differential Guidance: Tuning Differeital Drive Guidance: Remove waypoint mover Differential Guidance: Fixed accuracy issue by converting from float to double Differential Guidance: rebased on differentialdrive and improved waypoint accuracy Temp Differential Guidance: cleanup temp DifferentialDriveControl: only save required parts of uORB message Rename differential drive setpoint topics Rename module differential_drive_control -> differential_drive DifferentialDrive: remove trailing zeros from prameter metadata DifferentialDrive: Rework structure 3 Components Guidance - Control - Allocation with their corresponding uORB interface. Fixed guidance logic and added feedforward term to compute the angular velocity added acro mode Acro mode is manual mode, but with rate control Fixed bug in the guidance logic After smoothing the linera velocity setpoint, the EKF has trouble initializing, becuase the acceleration is too smooth, to combat this issue, there is a 1 second delay when initializing the mission mode cleanup + updated acro Added spoolup and removed temporary timeout for EKF DifferentialDrive: move spoolup consideration to the main module Update submodule GPSDrivers to latest Mon Feb 12 12:39:19 UTC 2024 - GPSDrivers in PX4/Firmware (17ff40898c683e1fe96ff9e2d2790594d188f872): https://github.com/PX4/PX4-GPSDrivers/commit/3393191fbb842f8e13a3f296218efec832640112 - GPSDrivers current upstream: https://github.com/PX4/PX4-GPSDrivers/commit/f48cc01d31607baa4963bde090f530b44df3de12 - Changes: https://github.com/PX4/PX4-GPSDrivers/compare/3393191fbb842f8e13a3f296218efec832640112...f48cc01d31607baa4963bde090f530b44df3de12 f48cc01 2024-02-08 Julian Oes - ubx: separate config for jamming monitor bc72f55 2024-02-08 Julian Oes - sbf: simplify odd define Co-authored-by: PX4 BuildBot <[email protected]> boards: update all NuttX defconfigs RTL: change when to set a heading setpoint, generally leave it up to the executer -remove RTL_HDG_MD -only set heading setpoint in Navigator::RTL once above landing point, or when RTL is triggered close to it -never set a heading during RTL if weather vane is enabled Signed-off-by: Silvan Fuhrer <[email protected]> RTL: use dest.yaw instead of a separate heading_sp RTL: clean up naming of function arguments Signed-off-by: Silvan Fuhrer <[email protected]> RTL: write out weather vane in comments (instead of WV) Signed-off-by: Silvan Fuhrer <[email protected]> Update src/modules/navigator/mission_block.cpp Co-authored-by: Matthias Grob <[email protected]> simulation/gz_bridge: enable navsat plugin for accurate positioning of real life maps in Gazebo (#22638) * publish the global groundtruth from the navsat callback and rearrange the local groundtruth as the altitude reference now has a dependency on the global groundtruth being initialized --------- Signed-off-by: frederik <[email protected]> Update submodule gz to latest Tue Feb 13 12:39:17 UTC 2024 - gz in PX4/Firmware (c9ad60e3cceedc218fa7b94ca1ae3632fda68b60): https://github.com/PX4/PX4-gazebo-models/commit/c78f7f01417168e8faab7a83ade2129c0d26b39d - gz current upstream: https://github.com/PX4/PX4-gazebo-models/commit/f1c461fffb8567d6f0af770fb533f60f6ec62c22 - Changes: https://github.com/PX4/PX4-gazebo-models/compare/c78f7f01417168e8faab7a83ade2129c0d26b39d...f1c461fffb8567d6f0af770fb533f60f6ec62c22 f1c461f 2024-02-08 frederik - increase monocam clipping distance 6d5db73 2024-02-07 Sergei Grichine - Added Zero Turn Lawnmower model (#27) 5332071 2024-02-06 Frederik Markus - add navsat plugin to worlds and navsat sensor to models (#26) ROMFS: rc.simulator EKF2 setup specific to gazebo classic FixedwingPositionControl: Only warn user when roll is reduced for a longer period of time FixedwingPositionControl: Used corrected npfg roll output in path mode Update GPS drivers to contain the astyle fix rover build: correct differential drive kconfig name ekf2: only populate gnss pos aid src status if ref initialized - this is a minor logging improvement when plotting the position from the beginning of the log (often a replay session) drivers/batt_smbus: fix BQ40Z80 timeout problem (#22751) Co-authored-by: cyril.calvez <[email protected]> RTL: publish a status message on currently chosen RTL point FeasibilityChecker: Add new TakeoffLandAvailable option ADd a new misison feasiblity checker option to check if a proper landing approach is defined when in air. There must be at least a mission landing or a VTOL approach defined in order for the mission to be accepted. Else, use the same logic as in MIS_TKO_LAND_REQ=4 ekf: fix measurementUpdate comment typo Navigator: fix VTOL land waypoint calculation The setpoint.yaw can be NAN, and this made the calculated land point NAN as well. Looking at the current yaw is anyway a better way to approximate the course over ground that fundamentally should be used. Signed-off-by: Silvan Fuhrer <[email protected]> StickTiltXY: Fix too high maximum tilt problem And add unit tests. ekf2: set attitude validity flag using centralized function ekf2: fix EV height bias predict call - needs to be called every iteration ekf2: move fuseVelPosHeight() -> fuseDirectStateMeasurement() - don't bother keeping bad_vel_{N,E,D} and bad_pos_{N,E,D} fault status bits ekf2: split vel_pos_fusion.cpp ekf2: velocity/position fusion helper minor consistency cleanup ekf2: move vel/pos reset helpers Navigator: Prevent busy-looping if Dataman read/write times out MissionBase did not initialize its mission data, thus could enter an infinite loop in updateDatamanCache() if the initMission() failed to read the mission off, for example, due to the SDCard storage task taking longer than the timeout to respond. This change constrains the loading loop and resets the mission data even if the data write failed. ekf2: declination fusion don't use uninitialized parameter (EKF2_MAG_DECL) Added special muorb startup ordering in px4_init for posix platform Fix build error for Qurt platform in pab_manifest.c Fixed unresolved symbol error for qurt platform due to missing sbus library Changed order of service startup in SLPI DSP muorb since parameter library now needs work queues Fixed and added Qurt platform dsp_hitl driver Added param system command to voxl2 slpi build Fix fly_forward_in_posctl() timing MAVSDK test: increase offboard position threshold This is a workaround to hotfix CI but the root cause is #22792 (MAVSDK test failing after EKF change, accelerometer simulation issues not learned anymore?) MAVSDK test: Fix fly_forward_in_altctl() timing MAVSDK tests: shorten Position, Altitude control flights We get more than 5 meter away much quicker. Added Zero Turn Lawnmower model (#22717) * Added Lawnmower airframe * Update 5005_gz_lawnmower Works all right * Update 5005_gz_lawnmower RDD_WHL_SPEED has new name: RDD_WHEEL_SPEED * Update ROMFS/px4fmu_common/init.d-posix/airframes/5005_gz_lawnmower Co-authored-by: Per Frivik <[email protected]> * Update ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt Co-authored-by: Per Frivik <[email protected]> * Renamed 5005_gz_lawnmower to 4011_gz_lawnmower also pulled latest GZ models hash --------- Co-authored-by: Per Frivik <[email protected]> baro static pressure compensation tuning: remove dependency to baro bias `estimator_baro_bias` requires to have GNSS and baro hgt active and GNSS as the reference. This is quite restrictive. Instead, we can simply use a high-passed version of the baro error. ROMFS: respect kconfig for including romfs files (airframes, etc) (#22571) * ROMFS: respect kconfig for including romfs files (airframes, etc) * ROMFS: only add R1 airframe with differential drive control * ROMFS: adapt to differential drive module renaming --------- Co-authored-by: Matthias Grob <[email protected]> matrix: remove bold printing of diagonal elements As this was not working in NSH. Signed-off-by: Silvan Fuhrer <[email protected]> Update injectxmlparams.py Add extraction of Boolean attributes in injectxmlparams.py. ekf2: use Joseph stabilized covariance update ekf2: use Joseph stabilized update in direct state observations update EKF2 change indicator ekf2: ZeroGyroUpdate move to fuseDirectStateMeasurement fmu-v6xrt: Increase lpwork stack size geo: correct unit test fix gimbal driver for mavlink gimbal v2 input and AUX output The main problem was that during initial negotiation the client would request the gimbal_manager_information from px4 but px4 would never send it because in this configuration the device_compid was set to 0. Jenkinsfile: correct typo, missing comma Introduced in 2c81c9fdea0f589f4021a549d86969dc317327fa ekf2: allow wind dead-reckoning after manual position reset Reset velocity using airspeed and start navigating FW Attitude Controller: fix manual yaw rate setpoint limit (#22812) Signed-off-by: Silvan Fuhrer <[email protected]> ekf2-mag_auto: always use mag 3D after takeoff ekf2 sensor_sim: set correct world mag field ekf2: fix unit tests failing due to mag fusion changes ekf2: update change indicator Update to latest sitl gazebo camera bmp388: Driver print out start BMP390 identifier when detected mantis-edu: remove duplicate RC define netman: generate default config if file doesn't exist ENOENT returns if the file doesn't exist yet, when using mtd /fs/mtd_net always exist. On a filesystem you've to generate the file so if ENOENT returns we've to regenerate the default config as well. nuttx: update apps Add minimal Skynode RC13 config to the PAB manifest mag calibration: minor cleanup (#22830) fmu-v6xrt: update px4board enables vtol v6x-rt: fix rover build regression Update submodule gz to latest Tue Mar 5 12:39:22 UTC 2024 - gz in PX4/Firmware (5f8f0213a807d327a30a7df05e58f7887cf936ab): https://github.com/PX4/PX4-gazebo-models/commit/222833656802532ec2271986a65fd198cfa48259 - gz current upstream: https://github.com/PX4/PX4-gazebo-models/commit/6b4ed09d1b495fbff663f098979cc046df013abd - Changes: https://github.com/PX4/PX4-gazebo-models/compare/222833656802532ec2271986a65fd198cfa48259...6b4ed09d1b495fbff663f098979cc046df013abd 6b4ed09 2024-02-23 Sergei Grichine - Added IMU sensor noise to the model, to avoid STALE messages (#34) 953e02b 2024-02-22 frede791 - add imu sensor model noise yaw_est: force set gyro bias when at rest The gyro bias estimate from EFK2 is really good when at rest and should be used by the yaw estimator to prevent heading drifts due to poor heading observability. FW Position Controller: do not publish roll angle constrain warning in VTOL transition (#22842) * FW Position Control: some cosmetical changes Signed-off-by: Silvan Fuhrer <[email protected]> * FW Position Control: disable roll constraining warning in VTOL transition In transitions it is expected that the roll is constrained, and instead of defining an aribitrary threshold let's rather disable the user warning in that case. Signed-off-by: Silvan Fuhrer <[email protected]> * FW Pos C: define magic numbers for roll constraining warning as constants Signed-off-by: Silvan Fuhrer <[email protected]> --------- Signed-off-by: Silvan Fuhrer <[email protected]> sensor/vehicle_magnetometer: sensor update loop limit iterations - place upper bound to prevent looping indefinitely (high publish rate, etc) mag_bias_estimator: sensor update loop limit iterations sensors/vehicle_acceleration: sensor update loop limit iterations sensors/vehicle_air_data: sensor update loop limit iterations sensors/vehicle_angular_velocity: sensor update loop limit iterations sensors/vehicle_imu: sensor update loop limit iterations ICP201: increase config delay VTOL: treat Descend mode as Land (#22843) * vtol_type: enable pusher assist also in Descend mode Signed-off-by: Silvan Fuhrer <[email protected]> * vtol_type: treat Descend as Land for pusher assist Signed-off-by: Silvan Fuhrer <[email protected]> --------- Signed-off-by: Silvan Fuhrer <[email protected]> ekf2: fix joseph covariance update for Schmidt-Kalman filter If part of the Kalman gain is zeroed, the first step of the joseph update does not produce a symmetrical matrix. ekf2: update change indicator ekf2: fix mag and wind covariance prediction ekf2: update change indicator Moving from Qurt specific icm4266p driver to mainline version FW Pos Controller: do not publish roll angle constrained warning if landed (#22850) Signed-off-by: Silvan Fuhrer <[email protected]> Navigator: remove vtol_takeoff special handling for RTL (#22844) We had a special handling for RTL triggered in vtol_takeoff state. The idea is to wait until the VTOL Takeoff is completed and only then switch to RTL. On a second thought this special handling isn't really necessary and for the sake of simplicity should be removed. This also removes the side effect of the indicated flight mode after RTL being set to VTOL_Takeoff again. Signed-off-by: Silvan Fuhrer <[email protected]> mission_base: Do not initialize mission from dataman. only listen on mission topic mission_base: clean up mission check evaluation geofence: publish status of loaded geofence mission_base: Only run mission feasibility if the geofence module is ready mission_base: check mission feasibility again, if geofence has changed. MissionResult uorb: fix wrong int types MissionFeasibiltyChecker: Do not delete uorb data on reset. mission_base: Run feasibility checker only after first global position has been published missionFeasibilityChecker: Fix tests mission_base: Force mission validity check on activation FW Position Control: control_backtransition(): always track line from start (#22853) Remove option to track from previous wp to reduce complexity and fix case where prev=current point and the line following broke down. Signed-off-by: Silvan Fuhrer <[email protected]> boards/mro/ctrl-zero-classic: corrections for mRo Control Zero Classic Board (#22745) - Build target changed from STM32H743II to STM32H743ZI - Missing external SPI interface added - Nonexistent I2C3 interface removed - I2C4 pins changed - Red and Green LED lights remapped - Missing ADC inputs added and already present ones corrected - CAN Silent interfaces corrected - Power pins corrected and Level Shifter pin added to enable ICM20948 - Buzzer pin remapped - HRT channel and PPM pin changed - RSSI input remapped - ICM20602 and BMI088 pins corrected - Serial ports remapped uORB: make queue size (ORB_QUEUE_LENGTH) completely static (#22815) Previously uORB queue size was an awkward mix of runtime configurable (at advertise or IOCTL before allocate), but effectively static with all queue size settings (outside of test code) actually coming from the topic declaration (presently ORB_QUEUE_LENGTH in the .msg). This change finally resolves the inconsistency making the queue size fully static. Additionally there were some corner cases that the muorb and orb communicator implementation were not correctly handling. This PR provides fixes for those issues. Also correctly sets remote queue lengths now based on the topic definitions. * Made setting of uORB topic queue size in based on topic definition only * Fixes to the ModalAI muorb implementation * Removed libfc sensor from format checks * msg/TransponderReport.msg ORB_QUEUE_LENGTH 8->16 (was set to higher in AdsbConflict.h --------- Co-authored-by: Eric Katzfey <[email protected]> Co-authored-by: Daniel Agar <[email protected]> drivers: broadcom AFBR update to API 1.5.6 boards: ARK Flow fix typo mission_base: land_start_item invalid only when negative. (#22856) rtl: land_start_item invalid only when negative. Update src/modules/navigator/rtl.cpp rtl_direct: Move the time estimation calculation into a separate helper class rtl_direct_mission_land: add time estimation for RTL mission land rtl: reduce time estimate calculations rtl_direct_mission: rtl_estimate for fixedwing land is diagonal rtl_direct: Rtl estimate only needs valid destination, not home position rtl_direct_mission_land: fix abs/rel usage of item.altitude Signed-off-by: Silvan Fuhrer <[email protected]> rtl direct: fix setting of previous altitude (abs vs rel) Signed-off-by: Silvan Fuhrer <[email protected]> mission: The mission check on activation should only be performed for a mission, not RTL. We need to make sure that when the RTL is triggered, it should not reevaluate it, as when it was valid but evaluated to false on activation, it can't do a RTL. parameters: support for an optional remote parameter database (#22836) The voxl2 has a split architecture. PX4 runs on a posix platform and a Qurt platform. The two communicate uorb topics back and forth with the muorb module. But each has it's own parameters database and they need to stay in sync with each other. This PR adds support to keep the 2 parameter databases in sync. The main parameters database running on Linux has file system support while the Qurt one does not. The Linux side is considered the primary and the Qurt side is considered the remote. boards/modalai/voxl2: Add new capabilities to Qurt platform HITL driver * Added new sensor control options and test capability in dsp_hitl * HITL working in VIO mode only * Fixed units on GPS HIL input mavlink: OPEN_DRONE_ID_SYSTEM stream publish operator altitude in geodetic frame (#22866) Tiltrotor: disable MC yaw fade out during front transition blending Signed-off-by: Silvan Fuhrer <[email protected]> rtl_direct: fix on_inactive() Signed-off-by: Silvan Fuhrer <[email protected]> Commander: make low remaining flight time configurable and fix clearing condition (#22863) * Commander: make low remaining flight time configurable and do not clear - add _ACT param to disable/warning/RTL this feature - publish rtl flight time estimate also in RTL, and thus fix re-validation - make failure message clearer, distinguish from battery low * battery check: add hysteresis for declaring battery_low_remaining_time false again --------- Signed-off-by: Silvan Fuhrer <[email protected]> Co-authored-by: KonradRudin <[email protected]> vtol: only publish generic warning through mavlink to safe flash (#22870) Signed-off-by: Silvan Fuhrer <[email protected]> uxrce_dds_client: refactor init to retry indefinitely - move init from UxrceddsClient to init() method so that retry is possible for both serial and UDP init uxrce_dds_client: optimizations and instrumentation - skip ping session if data flowing bidirectionally - add perf counters for loop time and interval - skip blocking poll if there's input data to read dataman: Add client sync perf counter and increase default timeout to 5s update msg_files to PARENT_SCOPE (#22800) add load_mon support for Qurt platform (#22883) - Added check in commander to see if CPU load monitoring has been disabled before signalling overload mro-zero classic: remove gyro fft module to save flash (#22878) Signed-off-by: Silvan Fuhrer <[email protected]> commander: low flight time failsafe: set UserTakeoverAllowed::Auto to enter Hold first (#22887) Signed-off-by: Silvan Fuhrer <[email protected]> ekf2: new yaw derivation Instead of euler angles, compute measurement jacobian using a small global perturbation around the vertical axis update change indicator ekf2: remove old yaw 321 and 312 derivations mc_wind_estimator_tuning: optionally use GNSS velocity Sometimes GNSS is logged but not used Commander: set vehicle_status.failsafe flag only if action for failed check is more than warning Signed-off-by: Silvan Fuhrer <[email protected]> EstimatorCheck: GNSS data fusion stopped as INFO if local position is already invalid Helps to reduce spamming of less important warnings. Signed-off-by: Silvan Fuhrer <[email protected]> Commander: trigger warning when arming denied due to check failure Signed-off-by: Silvan Fuhrer <[email protected]> Commander enums: capitalize flight mode names Signed-off-by: Silvan Fuhrer <[email protected]> Commander enums: capitalize battery level key words Signed-off-by: Silvan Fuhrer <[email protected]> Commander enums: shorten failsafe event messages Such that the focus is on the important keywords. Signed-off-by: Silvan Fuhrer <[email protected]> failsafe: set cause to generic when fallback mode is activated Previously when triggering low battery RTL and then losing GPS, the fallback to Descend would still have low battery as cause. EKF: Change a typo mpc: add possibility to generate tilt using full 3D accel Using full 3D acceleration provides better horizontal acceleration tracking but also creates a sometimes unwanted behavior because the tilt is directly coupled with the vertical acceleration setpoint. SMART_BATTERY_INFO to BATTERY_INFO (#22875) * Update submodule mavlink to latest Wed Mar 13 01:02:16 UTC 2024 - mavlink in PX4/Firmware (497327e916103ef05ff8f08f47d33b9a19bc28d7): https://github.com/mavlink/mavlink/commit/c4a5c497379ca873f73abe691a033641a6a5a817 - mavlink current upstream: https://github.com/mavlink/mavlink/commit/a3558d6b335d930fc01816fd168d16b3f38ed434 - Changes: https://github.com/mavlink/mavlink/compare/c4a5c497379ca873f73abe691a033641a6a5a817...a3558d6b335d930fc01816fd168d16b3f38ed434 a3558d6b 2024-03-07 Hamish Willee - common - DO_FENCE_ENABLE/PARACHUTE fix (#2090) b9730e0f 2024-03-06 olliw42 - update RADIO_RC_CHANNELS to latest, remove all mlrs from storm32.xml (#1919) 7fed0268 2024-03-06 Patrick José Pereira - common: MAV_CMD_DO_SET_SYS_CMP_ID: Add first version (#2082) 2909b481 2024-03-06 Hamish Willee - Update Pymavlink (#2089) e9b532a9 2024-03-05 Randy Mackay - common: add set-camera-source command (#2079) bcdbeb7f 2024-03-01 auturgy - Allow individual fences to be enabled and disabled (#2085) 2f8403d1 2024-02-29 Hamish Willee - MAV_CMD_ODID_SET_EMERGENCY - (#2086) daa59c02 2024-02-22 Peter Barker - common.xml: add a command to deal with safety switch (#2081) 977332e2 2024-02-14 Hamish Willee - COMPONENT_INFORMATION_BASIC - add manufacturer date (#2078) 4fef7de2 2024-02-07 Randy Mackay - Common: rename SMART_BATTERY_INFO to BATTERY_INFO and add SOH (#2070) 3865b311 2024-02-01 Hamish Willee - FLIGHT_INFORMATION - description to match PX4 (#2067) f80e6818 2024-01-31 KonradRudin - development.xml: merge both MAV_CMD enums together (#2074) * SMART_BATTERY_INFO to BATTERY_INFO on new mavlink module * Update src/modules/mavlink/streams/BATTERY_INFO.hpp * fix trivial whitespace --------- Co-authored-by: PX4 BuildBot <[email protected]> Co-authored-by: Daniel Agar <[email protected]> sd_bench: Display maximum time for maximum write time navigator: update mission after changing home position (#22834) ekf2: fix gnss yaw unit test ekf2: add no gyro bias estimate test case This makes the ekf unstable and creates NANs during initialization ekf2: fix direct state measurement update for suboptimal K case The duration of a unit test had to be increased because the incorrect covariance matrix update, was making the unit test passing faster (over-optimistic variance). ekf: update change indicator mpc: fix PositionControl unit test The unit test assumes the position controller is in "decoupled" mode mathlib: utilities refactor float to function template (for optional double precision usage) Co-authored-by: Mathieu Bresciani <[email protected]> boards: ark septentrio update flash size and enable ekf2 boards/px4/fmu-v5x: default remove systemcmds/sd_stress to save flash uavcan: publish new can interface status as uorb topic (#22873) uORB: SubscriptionBlocking purged the broken attempt to set the mutex protocol in constructor uORB: fix for uORB communicator, only send most recent data for new subscription (#22893) add `.editorconfig` for consistent code style across editors (#22916) EditorConfig is a well-known convention to share style settings across different editors. Adding one will make it easier for new contributors or people who like to use a different editor to contribute. boards/px4/fmu-v5x: remove sd_stress & reflect to reduce flash usage gps: fix incorrect task id in module startup New platform independent Serial interface (#21723) boards/px4/fmu-v5x: remove legacy rover_pos_control to reduce flash usage VOXL2: HRT updates for synchronization with Qurt time (#22881) - Added offset to Posix hrt time to account for synchronization with Qurt hrt time - Added new Kconfig to configure synchronization of HRT timestamps on VOXL2 - Moved voxl2 libfc sensor library submodule from muorb module to boards directory - Added check to make sure hrt_elapsed_time can never be negative code: add more style options in `.editorconfig` px4io: don't output on disabled PWM pins Same logic as on the FMU PWM updateOutputs() in PWMOut.cpp px4iofirmware: don't switch to disarmed or failsafe value on disabled PWM outputs If the output is set to 0 then the FMU had this channel disabled/no function mapped to it. In that case we do not want to suddenly start outputing failsafe or disarmed signals. mixer_module: send a last sample out after all outputs were disabled This matters for PWM when the last output gets disabled on either FMU or IO it would just keep on running. Also when rebooting with a parameters reset or new airframe with no mapped outputs it would previously keep outputting PWM with the disarmed value of the new airframe e.g. 1000us which is a safety hazard because servos could break the physical limit of the model or miscalibrated ESCs spinning motors. Signal generator (#22666) Add option to generate sine chirp signals for fixed-wing system identification Add SYS_AUTOSTART touch in voxl-px4-start boards/holybro/kakuteh7: fix icm42688p IMU - the mass-produced kakuteH7 did not use ICM20689 IMU ekf2: gps control lazily check yaw_failure() only after in_air fw_att_control: bitwise and should be logical and (#22933) Signed-off-by: Julian Oes <[email protected]> Battery parameters: clarify empty, full voltage description boards: unify comments for voltage deviders NuttX with pr-h7-serial-logic-error backport commander: improve failsafe messaging Signed-off-by: Claudio Micheli <[email protected]> failsafe framework: inform about failsafe action Additions to the Serial UART API (#22953) - Added an empty constructor, setPort, and validatePort functions for Serial API - Changed GPS to not allocate Serial object dynamically - Moved access check on serial port name into the Serial API - Improved the Qurt platform validatePort Serial function to implement a more rigorous check. Added safety check to the setPort Serial function to make sure it isn't called after the port has been already opened. Qurt termios decoy (#22954) * Added decoy termios support to Qurt so that ghst parser in RC library can be used. No termios is actually needed but has to be there for the parser to work gps: fix Septentrino serial read (#22936) For Septententrino we seem to sometimes fill the buffer pretty full. If we ask for too much, readAtLeast will fail completely and make the GPS discovery logic fall over. Therefore, let's not ask for too much and just read what we can given the available buffer. Signed-off-by: Julian Oes <[email protected]> drivers: barometer: ms5837 fix compilation error Fixes MS5837.cpp:343:29: error: 'T' was not declared in this scope by using last temperature instead drivers: tap_esc: fix Werror=maybe-uninitialized compilation examples: matlab_csv_serial: fix compilation Update uORB definition and sprintf float formatting systemcmds: microbench: %s doesn't except nullptr use "null" instead systemcmds: reflect: write return needs to be used for werror checks drivers: transponder: don't free pre-allocated memory drivers: uavcan: fix werror uninitialized error drivers: vector: Fix PX4 SITL x86 compilation drivers: bmi088_i2c: Enforce I2C driver can only be used when SPI version isn't selected Solves multiple references compilation errors drivers: cyphal: Fix ARM/x86 printf werror portability error v6x-rt: Split ITCM static and auto-generated functions kconfig: Add dependencies modules: zenoh: remove broken serial config and update topics cmake: all allyes target for better CI coverage Currently only v6x-rt and SITL are supported But targets with label allyes will try to enable all kconfig symbols Port CRSF RC driver to new Serial UART API (#22917) * Added implementations of Rx Tx swap and single wire for new UART API needed by CRSF driver * Added inverted mode to Serial interface API boards: new hkust nxt-fc board support (#22961) logger: make logging of rtl_status not optional Signed-off-by: Silvan Fuhrer <[email protected]> logger: reduce interval of rtl_status logging Signed-off-by: Silvan Fuhrer <[email protected]> px4io: remove special handling for HITL In HITL the actuators should not be mapped and they are in lockdown. We should not reconfigure disarmed, min, max PWM values without updating the actual output values because the IO will consider the last outputs before the FMU was rebooted with the configuration of the new boot. This can result in spinning motors when switching to SIH. px4iofirmware: refactor to only have one PWM output code path This removes the duplication with unexpected differences and allows to consistently handle the output instead of overriding the output for some specific cases which leads to unexpected corner cases. E.g. disabled outputs suddenly outputing PWM in lockdown. px4iofirmware: simplify lockdown logic px4iofirmware: reuse existing disarmed logic for lockdown and `should_always_enable_pwm` The existing disarmed logic already handles disabled outputs it makes sense to reuse it and not have lockdown handled differently resulting in unexpeced corner cases. Build new IO firmware binaries battery: weigh voltage based estimate more when it's low This is a minimal change to make it harder to crash a vehicle with an empty battery if the capacity was set wrong. The disadvantage is that the state of charge estimate will fluctuate more under load. We need better documentation and improvements to the estimation. boards/modalai/voxl2: added device specifier to gps start line Jenkinsfile - dual-deploy uorb graph and failsafe to vitepress (#22943) px4io: Fix dependency problem caused by #22957 Serial: removed the validateBaudrate function from nuttx and posix platforms and just send out a warning it baudrate is non-standard (#22969) - Fix some Qurt platform build issues uncovered when changing the posix version of SerialImpl gz-bridge: use correct prev_timestamp for dt calc - with the addition of the navsat plugin in PR#22638, the callback would reassign the previous timestamp used in the calculations of the angular_velocity causing derivative type noise in the groundtruth measurements Memsic MMC5983MA magnetometer driver msg: update VehicleCommand.msg MAV_CMD_DO_REPOSITION comment Added missing MAV_CMD_DO_REPOSITION parameters, from MAVlink Docs. ekf2: use global definition of quaternion error ekf2: improve tilt leveling speed Starting with no yaw uncertainty makes the tilt more observable when using fake position fusion during the quasi-stationary alignment phase. ekf2: integrate mag heading into mag 3D ekf2: limit mag heading fusion to prevent heading overconfidence ekf2: do not continuously use mag decl fusion when GNSS fusion is active This prevents over-constraining the heading from mag fusion. An incorrect mag yaw rotation can be absorbed as a declination error. ekf2: remove option to continuously fuse mag declination Declination fusion is only used when not observable (no global aiding). ekf2: update change indicator Navigator: remove unused method Signed-off-by: Silvan Fuhrer <[email protected]> FeasibilityChecks: only require both or neither TO/LND when landed Signed-off-by: Silvan Fuhrer <[email protected]> Mission params: update description of MIS_TKO_LAND_REQ Signed-off-by: Silvan Fuhrer <[email protected]> drivers: rc_input only publish if more than 0 rc channels filled (fixes GHST auto scan) px4_fmu-v6x:Add Holybro Pixhawk Jetson Baseboard ver 0x100 Send mavlink manual control buttons field in manual control input topic (#22988) Pass along button states from manual control mavlink message in new buttons field in manual control input topic Vuepress removal /changes for vitepress (#22972) * Vuepress removal /changes for vitepress * generate_msg_docs.py - README is index in vitepress Update NuttX Move Voxl from microdds client to uxrce dds client Enabled voxl2-slpi dsp_sbus driver in build drivers: broadcom AFBR fix close to ground false readings mission_base: fix to set the end of mission item always, if the mission can't be properly loaded or started FW position control: catapult/hand-launch: do not cut throttle if not landed Signed-off-by: Silvan Fuhrer <[email protected]> FW position control: catapult/hand-launch: enable without launch detection Signed-off-by: Silvan Fuhrer <[email protected]> TECS: check if integrator update is finit prior applying Signed-off-by: Silvan Fuhrer <[email protected]> MissionBase: hasMissionLandStart should only return true if mission is valid Signed-off-by: Silvan Fuhrer <[email protected]> RT: only chose mission RTL if mission is valid Signed-off-by: Silvan Fuhrer <[email protected]> remove PGA460 from COMMON_DISTANCE_SENSOR remove LIS2MDL from COMMON_MAGNETOMETER boards: ARK Pi6X Initial Commit airframes: Droneblocks DEXI 5 delete SYS_MC_EST_GROUP - introduce per module parameters (EKF2_EN, LPE_EN, ATT_EN) - add basic checks to prevent EKF2 + LPE running simultaneously Added high rate esc_status logging to the high rate logging category along with actuator_outputs_debug. Both of these really help diagnosing odd flight behavior / crashes on VOXL2. Also changed the logger start commands in the VOXL2 standard and HITL startup scripts. lib/rc/dsm: update proto init to have reset incorporated as well (#22995) * update voxl2-slpi spektrum_rc driver Voxl new board specific module (voxl_save_cal_params) to save calibration parameters (#22993) * Added Voxl board specific module to save calibration parameters in QGC format Document vehicle attitude message Add python script to translate C param to new yaml file order yaml fileds ekf2: migrate param to yaml logger: add timesync_status to default logged topics Signed-off-by: Beniamino Pozzan <[email protected]> Update CMakeLists.txt - included lawn world Added lawn world to make process to allow gz sim building like "make px4_sitl gz_r1_rover_lawn" Updated GZ submodule to the latest hash (d754381) remove clip_limit contraint on INT16_MAX Fix up notes boxes for docs (#22999) * Fix up notes boxes for docs * Update markdownout.py * Update markdownout.py * Update markdownout.py ekf2: set horizon using specific parameter Some sensors can have their delay included in the timestamp. In this case, the buffer cannot be sized using the _DELAY parameter. Voxl ESC driver update (#23022) * Made Serial API open the UART in NON BLOCKING mode * Updated voxl_esc driver to latest from ModalAI fork * Ported voxl_esc driver over to new Serial UART API * Removed voxl_esc serial abstraction since new Serial API is already a serial abstraction ekf2: move yaw_estimator and derivation to dedicated folder drivers/optical_flow/paw3902: fix RegisterRead udelay drivers/optical_flow/paa3905: fix RegisterRead udelay fw offboard control mode: altitude control enabled (#23041) adsb: warnings fixes & remove UTM_GLOBAL_POSITION (#21663) - warn about full traffic conflict buffer at 1/60hz. - add conflict expiry for buffer. - use only events for buffer full warning. mavlink_log_critical no longer needed. - use icao address for conflict warnings id, stop using uas_id. UTM_GLOBAL_POSITION assumed deprecated. - stop spamming when buffer is full - fix warning wording if buffer is full. - remove UTM_GLOBAL_POSITION Fixes failing unit test: * [adsbTest] Reduce conflict timestamps - not enough time has passed in ci - failed ci output - (passes locally with make tests TESTFILTER=AdsbConflict) - Timestamp: 6000000000 - Time now: 457720038 - Time since timestamp: 0 - Old Conflict warning expired: 0 - -------------------- - adsb_conflict._traffic_state 0 - ../../src/lib/adsb/AdsbConflictTest.cpp:244: Failure - Value of: adsb_conflict._traffic_state == TRAFFIC_STATE::REMIND_CONFLICT - Actual: false - Expected: true bmp388: check bus return code after register read Check I2C/SPI bus transfer function return code after register read operation. Signed-off-by: Tero Salminen <[email protected]> baro comp: set hpf optional CMakeLists: install_python_requirements allow --break-system-packages PM Selector Auterion: remove INA226_SHUNT value reset (skynode only) autopilot_tester: use normal VTOL mission for airspeed blockage test Signed-off-by: Silvan Fuhrer <[email protected]> autopilot_tester: reduce mission distance for wind world Signed-off-by: Silvan Fuhrer <[email protected]> autopilot_tester: for mission end timeout check take speed factor into account And increase the (simulation time) timeouts. Signed-off-by: Silvan Fuhrer <[email protected]> ekf2_params: reduce "short" description imu consistency: don't scale param threshold simulation/gz_bridge: eliminate implicit float conversion VSCode: add EditorConfig extension to recommended and devcontainer.json fix to orientation offsets for scaled yaw, removed unused param Signed-off-by: dirksavage88 <[email protected]> Shift vertical orientation above scaling yaw operation, cp angle sign change Signed-off-by: dirksavage88 <[email protected]> drivers/magnetometer: new ST IIS2MDC Magnetometer driver commander: set correct health component when reporting errors commander: fix check for availability of high latency link Signed-off-by: RomanBapst <[email protected]> high_latency_stream: fixed bug where fields were not updating - topic update was checked twice in the same loop and thus the second time the topic would never indicate to have updated Co-authored-by: RomanBapst <[email protected]> mavlink: fix handling of transmission enable/disable Co-authored-by: RomanBapst <[email protected]> commander: improve handling high latency link lost/regain mavlink: use high_latency_data_link_lost as backup to normal data_link mavlink: don't send events over Iridium mavlink: don't send command ACK for internal commands over Iridium iridiumsbd: update logic for detecting if the modem is not responsive mavlink: use high_latency_data_link_lost as backup to normal data_link telemetry: enable iridium high_latency_stream: heading taken from vehicle_attitude topic commander: fixed format mavlink: added back gimbal v1 protocol command high_latency_stream: minor PR fix telemetry: removed iridium driver mavlink: fixed compilation error after var renaming MC Auto: add fixed yaw mode estimatorCheck: get param only if handle is valid px4_cli: Added px4_get_parameter_value function overload for float type mavlink: Added parsing of CLI option to configure HL frequency mavlink: Added MAV_{i}_HL_FREQ parameter boards: removed CONFIG_SYSTEMCMDS_REFLECT from Sky-Drones AIRLink board support FW Position Controller: fix Altitude mode without valid z reference (e.g. no GPS) Signed-off-by: Silvan Fuhrer <[email protected]> imxrt: flexpwm remove 1:1 mapping requirement LogMessage.msg - expand out descriptive string (#23054) commander: Use PX4_STACK_ADJUSTED to increase stack for 64-bit targets Signed-off-by: Jukka Laitinen <[email protected]> ekf2: Only reset to GNSS heading if necessary When North-East (e.g.: GNSS pos/vel) aiding is active, the heading estimate is constrained and consistent with the vel/pos aiding. Reset to GNSS heading should only occur if no N-E aiding is active or if the filter is not yes aligned. Otherwise, just wait for the consistency check to pass again (will pass at some point if the heading uncertainty of the filter is getting too high). libevents: update submodule And remove obsolete libevents_definitions.h ekf2: GPS yaw only invalidate yaw_align if stopping due to fusion failure boards: update ark_pi6x EKF delays boards: add iis2mdc mag to ark pi6x gps: add ZED-F9P-15B boards: ark rtk gps safety led open drain gps: split enum after rebase Signed-off-by: Julian Oes <[email protected]> drivers/ins/vectornav: add missing sensor_gps velocity magnitude NuttX with imxrt_sd-preflight backport px4_fmu-v6xrt:Support_MMCSD_MULTIBLOCK with preflight sensors/vehicle_angular_velocity: silence gyro selection fallback warning (PX4_WARN -> PX4_DEBUG) - this warning was to catch any potential errors in sensor selection relative to what's actually available, we don't need to complain about initial selection before the EKF selector is available sd_bench: Add U option for forcing byte aligned Co-authored-by: David Sidrane <[email protected]> ekf2: move EV files to aid_sources/external_vision ekf2: move auxvel file to aid_sources/auxvel ekf2: move drag_fusion file to aid_sources/drag ekf2: move GNSS files to aid_sources/gnss ekf2: move optical flow files to aid_sources/optical_flow ekf2: move gravity fusion file to aid_sources/gravity ekf2: move baro height file to aid_sources/barometer ekf2: move sideslip fusion file to aid_sources/sideslip ekf2: move airspeed fusion file to aid_sources/airspeed ekf2: move range finder files to aid_sources/range_finder ekf2: move output predictor to output_predictor/ ekf2: move mag fusion to aid_sources/magnetometer ekf2: move aux global position fusion to aid_sources/aux_global_position ekf2: move bias estimators to bias_estimtor/ ekf2: move fake_height, fake_pos, zero_innovation_heading to aid_sources/ ekf2: move terrain estimator and derivation to terrain_estimator/ ekf2: move IMU down sampler to imu_down_sampler/ ekf2: move baro dynamic pressure compensation to aid_sources/barometer ekf2: delete unused Ekf::resetImuBias() ekf2: move Ekf::resetQuatStateYaw() to yaw_fusion.cpp ekf2: move gyro/accel/wind covariance reset helpers to covariance.cpp ekf2: ekf_helper.cpp remove duplicate method comments (comment on declaration only, not definition) drivers: adis16507 reschedule reset after failed self test fix mavlink: cmd_logging_{start,stop}_acknowledgement flags were not reset Regression from https://github.com/PX4/PX4-Autopilot/pull/23043 Also avoids a race condition by making sure the command ack is handled before sending out the mavlink message (in case an external component reacts immediately to the mavlink message). Tools: skip submodule check in CLion Same as what's required for VSCode. Signed-off-by: Julian Oes <[email protected]> mavlink_ftp: handle relative paths correctly by ensuring there's a '/' in between when concatenating the path with _root_dir. mavlink_ftp: ensure there's enough space for the 2. path in _workRename Prevents accessing invalid memory when reading ptr + oldpath_sz + 1 and oldpath_sz fills out the whole or N-1 bytes of the payload. mavlink_ftp: do not store reply on kErrNoSessionsAvailable This would interfere with an existing ongoing session TECS: allow for fast descend up to maximum airspeed. Use pitch control loop to control max airspeed while giving minimal throttle. TECS: increase airspeed control limit for fast descend TECS: enable specific energy weights to have a value up to 2 TECS:use tas_setpoint instead of measured tas for specific kinetic energy calculation gps: Change the IF statement to a SWITCH statement quadchute: fixed sign for handling altitude resets Signed-off-by: RomanBapst <[email protected]> boards: ark septentrio gps add iis2mdc increased uxrce-dds stack size to prevent overflow gps: add note to param This notes the reference yaw angle for the Septentrio Mosaic-H. It's unfortunately a bit tricky in that Unicore has the main antenna in front by default while Septentrio decided to put the aux antenna in front. Signed-off-by: Julian Oes <[email protected]> fmu-v6xrt: Enable debug features for more verbose hardfault output fmu-v6xrt: Add I2C driver launcher Removed obsolete voxl 2 board default parameter setting Minor updates to the VOXL 2 board README file uxcre_dds_client: use topic name as defined in the dds_topics.yaml to register stream VectorNav.cpp - fix docs link to usage guide increase lp default stack to 2000 Signed-off-by: dirksavage88 <[email protected]> style(editorconfig): update newline setting The setting wasn't consistent with the one used in the Visual Studio Code settings, which caused different newline formatting depending on whether the user uses Visual Studio Code or another editor that uses EditorConfig. boards: ark cannode add ADIS16507 driver mRo Control Zero Classic: Definition for GPS2 by default added px4/fmu-v6x: set mavlink dialect to development wind_est_replay: fix cov matrix format and data indexing wind_est_replay: allow setting the initial scale factor ekf2: merge mag_3d_control + mag_control ekf2: mag control always populate estimator aid src ekf2: mag fusion don't update all states or tilt by default - cleanup some of the legacy mag flags integrationtests: mavros/mission_test.py bump yaw_error_std threshold (heading init is delayed, but not wrong) mag_ctrl: do not fuse synthetic mag but do not zero the innovation mag_ctrl: combine common conditions for mag_hdg and mag_3d ekf2: symforce zero more efficiently (#23133) - increase symforce CppConfig zero_initialization_sparsity_threshold so that a Matrix setZero() call is performed instead of individually zeroing Co-authored-by: bresch <[email protected]> Update NuttX Fixes imxrt1170 mpu config for extra checks dronecan: SocketCAN driver check size before copying Avoids memory corruption if we get packets to big hardfault_log: Add jump to 0x0 & write 0x0 faults [mavlink] Parameter to always start on USB (#22234) * usb: Added parameter to enable always starting mavlink on USB. Refactored cdcacm_init into a module and added a paramter to allow always starting mavlink on USB, also added a paramter to choose the mode. The current default behavior is to wait and listen for data on USB and auto-detect the protocol (mavlink, nsh, ublox). This results in the mavlink stream not starting until something else on the mavlink network sends a packet first. The new default behavior is to always start mavlink. Added parameters MAV_USB_ENABLE -- default 1 (always start mavlink on USB) MAV_USE_MODE -- default 3 (onboard) * added 3 retries for opening serial port in mavlink, removed sleep before sercon * added DRIVERS_CDCACM_AUTOSTART to ark-v6x default.px4board * added CONFIG_DRIVERS_CDCACM_AUTOSTART=y to default.px4board for boards with CONFIG_CDCACM in their nsh/defconfig * format * remove PGA460 from COMMON_DISTANCE_SENSOR to save flash * remove LIS2MDL from COMMON_MAGNETOMETER to save flash * disable CONFIG_DRIVERS_CDCACM_AUTOSTART for fmu-v5 protected.px4board * moved and renamed parameters, removed mode logic in mavlink * changed parameter names, added mode none * remove parameters from mavlink drivers/imu: new Murata SCH16T IMU driver (#22914) --------- Co-authored-by: alexklimaj <[email protected]> boards: arkv6x ark_pi6x change mavlink dialect to development HomePosition: Add minimum position change needed to be recognised as new home position boards: ark: pi6x: CONFIG_DRIVERS_CDCACM_AUTOSTART=y (#23163) tools/bootloader: add force-erase option If the STM32H7 fails to program or erase a full chunk of 256 bytes, the ECC check will trigger a busfault when trying to read from it. To speed up erasing and optimize wear, we read before erasing to check if it actually needs erasing. That's when a busfault happens and the erase time outs. The workaround is to add an option to do a full erase without check. Credit goes to: https://github.com/ArduPilot/ardupilot/pull/22090 And the protocol option added to the bootloader is the same as for ArduPilot, so compatible. Signed-off-by: Julian Oes <[email protected]> bootloader: add bootloader version This adds a new protocol extension which allows to get the bootloader version. The bootloader version is different from the bootloader protocol revision which has stabilized at 5 and is not easy to update unless a bootloader is actually breaking the protocol. The reason being that both the Python script as well as the uploader used in QGC will not attempt to load firmware if they don't know the bootloader version, so it could basically be considered a "breaking" protocol revision. Signed-off-by: Julian Oes <[email protected]> px_uploader.py: clean up various tidbits Includes: - Remove some of the outdated Python2 checks and compatibility. - Try not catch all exceptions but only the expected ones. Otherwise, this makes it really hard to debug if anything unexpected actually goes wrong. - Make use of fstrings. - Make output slightly prettier. Signed-off-by: Julian Oes <[email protected]> bootloader: track ArduPilot protocol Just so we don't conflict on these commands in the future. bootloader: remove unused/duplicate defines px_uploader: catch serial exception correctly Signed-off-by: Julian Oes <[email protected]> boards: update all bootloaders commander: add check for 5V overcurrent Docs for camera_feedback module (#23103) * Docs for camera_feedback module * Update src/modules/camera_feedback/CameraFeedback.cpp * Update src/modules/camera_feedback/CameraFeedback.cpp wind_est_replay: report scale instead of inverse_scale The estimator internally estimates the scale inverse, but the interface should be the scale as "airspeed_corrected = scale * airspeed" cdcacm_autostart: handle USB power only (#23183) msg-rates-setpoint: fix frame name NED -> FRD RTL_mission_fast: continue mission if RTL is triggered while in Mission Signed-off-by: Silvan Fuhrer <[email protected]> RTL_mission_reverse: start from previous WP if RTL is triggered while in Mission Signed-off-by: Silvan Fuhrer <[email protected]> RTL_status: improve comment Signed-off-by: Silvan Fuhrer <[email protected]> MAVLink: remove never used `_mavlink_link_termination_allowed` VTOL Standard: fix transition pusher motor slew rate Signed-off-by: Silvan Fuhrer <[email protected]> VTOL: remove _dt passing as it's no longer used (and was wrong) Signed-off-by: Silvan Fuhrer <[email protected]> CameraFeedback: shorten line length such that documentation parser works This broke in 4f64acb3524d39967bd7f516ae2ebfe4be5246bc and was also flagged by CI in the pr and since then. camera_trigger: module docs for camera trigger driver (#23104) HealthCheck: added health check for logger to report if it's running (#22781) Jankinsfile-compile: add missing comma after `ark_pi6x_default` nxp/imxrt_common/main:Fix Breakage from a9962dc bootloader/common/bl.c:Fixed Wrong vec_base caculation - only effects imxrt px4_fmu-v6xrt & bootloader:Bootloader enusres that ITCM memory is writable before jump to APP Update px4_fmu-v6xrt Bootloader integrationtests: mavros increase threshold for yaw_error_std boards: px4_fmu-v5x_test disable payload_deliverer module to save flash boards: px4_fmu-v6c_default disable gyro_fft module to save flash boards: sky-drones_smartap-airlink_default disable gyro_fft module to save flash QuRT: Increased the size of the memory heap available to qurt platform (#23194) * Increased the size of the memory heap available to qurt platform mavsdk_tests: increase acceptance radius for position check on offboard landing Signed-off-by: Silvan Fuhrer <[email protected]> ekf2: only trigger position timeout reset when hpos fusion is active Navigator: increase default of MIS_DIST_1WP to 10km The previous default of 900m leads to many warnings if left unchanged, especially if the vehicle is already in-air when the Mission is started. Signed-off-by: Silvan Fuhrer <[email protected]> ROMFS: remove MIS_DIST_1WP customizations in airframes Signed-off-by: Silvan Fuhrer <[email protected]> [Fix][hkust_nxt-dual]:board hkust_nxt-dual fix hw_config.h missing APP_RESERVATION_SIZE param (#23204) px4_fmuv6xrt: bidirectional dshot driver drivers: dshot: prepare to extend for bidrectional dshot imxrt: dshot add 1060 support and use channels instead of timers dshot: fix clearing out esc status imxrt: dshot improve state machine reduce's no response count dshot: bdshot fix esc offline/online checks imxrt: move flexio irq handler to itcm imxrt: dshot fix erpm calculation by implementing 3-bit exponent and 9-bit period dshot: refactoring dshot: telemetry esc_status use sequential numbering for each motor channel != telemetry_index, we've to count from 0 and increment for each enabled ESC bsondump: add check if bson document size is set to zero and set to decoded size (#23088) uORB: ORBSet don't allow duplicate insertion * fixes a small memory leak in uORBManager.cpp (if using ORB_COMMUNICATOR) ekf2-mag: always add process noise until initial value ekf2-mag: turn around update_all_states condition Non-functional ekf2-mag: remove immediate declination fusion after reset ekf2-mag: do not use yaw emergency estimator to reset mag states On slowly moving vehicles (e.g.: boats, rovers), the yaw estimator has worse convergence than the main EKF. Resetting the mag states using the yaw estimator as reference can lead to poor heading. Also, the EKF can recover really well from initially incorrect mag states. ekf2-mag: do not limit the earth mag field estimate The EKF can recover from an initial bad earth mag field estimate. Constraining the field is not necessary and can lead to an unpredicted behavior of the filter. Declination fusion is safe to run even when the horizontal field is 0 ekf2-mag: do not reset when NE aiding is active ekf2-mag: do not reset on WMM change when NE aiding is active The mag field states are observed. No need to reset them. ekf2-mag: with NE aiding, constrain heading drift only before takeoff After takeoff, the heading is easily observable fix commander: make sure to count all valid mags in preflight check Previously, if a mag was not required (not index 0 and not used by ekf), it was not counted in num_enabled_and_valid_calibration. If a user set SYS_HAS_MAG to e.g. 3, it would then trigger a preflight failure, even if there were 3 calibrated and enabled mags. ekf2: add mag type init In this mode, the mag is used to inilialize the heading. During flight, the heading is predicted using gyros and corrected by GNSS measurements if available. fmu-v6xrt: Fix flash configuration Fixes correct dummy cycle count of 20 fmu-v6xrt: Support RC telemetry Patch for issue #22818 (#23170) When calling "differential_drive stop" a missing return statement was causing a segmentation fault due to access to already freed memory. vscode cmake-variants fix ark_septentrio-gps (#23222) Fix float and uint64_t comparison (#23199) fix: ControlAllocator float and int comparison bug There was an incorrect comparison between a float variable `dt` and a `uint64_t` value representing 5 milliseconds (`5_ms`). As a result, `do_update` could never become true even if the last torque setpoint was received more than 5 milliseconds before. To solve this, the `5_ms` value has been converted to seconds (0.005f) for the comparison with `dt`. boards: ark-pi6x remove ekf delay param defaults (#23177) drivers/imu: sch16t improvements (#23221) * individual perf counters for frame errors * don't treat saturation as an error * added parameters for gyro/accel LPF and decimation ratio lib/world_magnetic_model: fetch_noaa_table.py refactor and scaling improvements - upate to NOAA grid API to build WMM table in one pass - refactor declination/inclination/totalintensity table printing to shared method - compute scaling factor to maximize resolution simplify world_magnetic_model interface (degrees in, degrees out) - this hopefully helps avoid accidental mis-use - try to clarify units everywhere mavlink_receiver: put all message handling in the same function mavlink: use reference instead of pointer to access the MAVLink instance from protocol classes Only close server when errno is not EINTR ekf2: merge mag yaw angle observability into heading consistency - the additional hyteresis logic for "yaw angle observable" was needed when it controlled time dependent mag_3d ekf2: stopMagFusion() reset yaw_align if mag heading was active - we also need to clear mag_aligned_in_flight Remove argparse from the requirements.txt. The argparse module has been builtin to Python since Python 3.2, released in 2011 (see https://docs.python.org/3/whatsnew/3.2.html). Further, the argparse pip module has not been released or updated since 2015, and lacks some of the features of the modern, built-in argparse. Drop the pip installed version in favor of the built-in version. Signed-off-by: Chris Lalancette <[email protected]> Makefile: add missing bootloader targets Quite a few were missing, and everything on one line was hard to diff. boards: update all bootloaders arch.sh: Fix syntax error Fix error of script failing with following error: PX4-Autopilot/Tools/setup/arch.sh: line 99: syntax error near unexpected token `;' battery: reset current filter when transitioning to FW (#22256) VTOLs consume a lot more power in hover copared to fixed-wing fligt. The remaining flight time thus should reset if one switches from MC to FW, as otherwise it takes several minutes until the estimate goes down. AttitudeSetpoint.msg: FRD instead of NED for body frame Signed-off-by: Silvan Fuhrer <[email protected]> FW position control: specify modes where FW_PN_R_SLEW_MAX applies Signed-off-by: Silvan Fuhrer <[email protected]> VTOL tailsitter: fix motor spike to 0 when finishing front transition Signed-off-by: Silvan Fuhrer <[email protected]> VTOL Tailsitter: add front transition throttle blending Signed-off-by: Silvan Fuhrer <[email protected]> VTOL Tailsitter: fix motor spikes to 0 when starting back transition Signed-off-by: Silvan Fuhrer <[email protected]> VTOL Tailsitter: set differential thrust to 0 in first 50ms of front transition Signed-off-by: Silvan Fuhrer <[email protected]> VTOL Tailsitter: add back transition throttle blending Signed-off-by: Silvan Fuhrer <[email protected]> VTOL Tailsitter: treat back transition abort like a front transition for throttle blending. Signed-off-by: Silvan Fuhrer <[email protected]> VTOL Tailsitter: remove throttle spike also for quad-chute Signed-off-by: Silvan Fuhrer <[email protected]> Rover Ackermann module (#23024) New module handling Ackermann rover guidance and control. Only enabled in SITL and in the rover builds for now. platforms: nuttx: SerialImpl: fix hang if baudrate is 0 (#23238) Update ubuntu.sh with Linux Mint 21.3 version boards/px4/fmu-v{5,6}x: do not enable mavlink on ethernet for skynode boards/px4/fmu-v{5,6}x: enable uxrce_dds_client on ethernet by default boards: change default IP from 192.168.0.3 to 10.41.10.2 192.168.0.x is often used by routers for WIFI/ethernet networks, and thus can create conflicts. This can happen for example if a companion is connected to the …
* Added Lawnmower airframe * Update 5005_gz_lawnmower Works all right * Update 5005_gz_lawnmower RDD_WHL_SPEED has new name: RDD_WHEEL_SPEED * Update ROMFS/px4fmu_common/init.d-posix/airframes/5005_gz_lawnmower Co-authored-by: Per Frivik <[email protected]> * Update ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt Co-authored-by: Per Frivik <[email protected]> * Renamed 5005_gz_lawnmower to 4011_gz_lawnmower also pulled latest GZ models hash --------- Co-authored-by: Per Frivik <[email protected]>
Solved Problem
This PR contributes full-size Zero Turm Lawnmower model to existing collection of Gazebo Ignition models. While crude visually, it tries to simulate masses, inertia and friction of an actual full-size machine.
Used Husqvarna Z254 dimensions.
This model works fine with current Differential Drive Controller (#22402) and my own fork (https://github.com/slgrobotics/PX4-Autopilot). It can be driven manually.
Please see PX4/PX4-gazebo-models#27 for actual SDF file
Testing:
You may need to repeat the "make" command twice, if the GZ SIM doesn't show the model (common problem)
At this point you can arm the robot in QGroundControl and drive it manually.
Note:
My robot has PCA9685 PWM driver and all functions are controlled now by directly publishing actuator_servos message. Wheels are 0 and 1, then goes cutter deck clutch (2), gas engine throttle (3), "mission strobe" (4), alarm horn (5) and two extra channels. Model works for me without any changes, as is, and is helpful in tuning and debugging.
I was not sure about naming logic in airframes folder, so 5005_gz_lawnmower can be changed to fit common practices. I think that having a 5* naming group for agricultural machines (or even all rovers) makes sense.
@dagar @PerFrivik - please take a look, as discussed earlier.