I’m delighted to announce the release of the first beta of the plane 4.0.0 release.
The 4.0.0 release of ArduPilot plane is a major release. It contains thousands of changes, some large and some small, developed over the last year. Key changes include:
support STM32H7 MCUs (Durandal and CubeOrange currently)
QAUTOTUNE mode
in-flight compass calibration
support for dynamic node allocation server in UAVCAN
support for SLCAN pass-through
support for up to 10 battery backends
support for MAVLink message intervals
initial support for onboard Lua scripting
automatic remount of microSD cards
support for additional RC input on any UART
support for WS2812 LEDs
new simulators: Morse, Webots, SilentWings, Scrimmage
added AFS_MAX_RANGE for limiting vehicle range
added support for @READONLY in embedded parameter lists
added SERIALn_OPTIONS for inversion, half-duplex and swap
added support for reversible blheli32 ESCs
added GPS timing jitter correction
added Sum battery backend type
added fuel flow battery battery types
support landing gear control based on altitude
added loiter-to-alt approach for quadplane landing
added REVERSE_THROTTLE RCn_OPTION
added crow brakes for differential spoilers
support newer versions of JSBSim in SITL
added RObotis servo support
added UAVCAN servo support
added failure timer for quadplane forward transitions
added KDECAN and ToshibaCAN support
added RM3100 compass support
support new Invensense IMUs
many small improvements to tailsitter support
added QACRO mode
improved watchdog logging
improved EKF compass handling based on WMM data
added AP_Periph CAN peripheral firmware system
added IBUS R/C input support
support yaw from GPS
support DLVR I2C airspeed sensors
fixed FrSky telem packet loss
fixed SUMD for 16 channels via pulse input
support UAVCAN buzzers, safety switch, safety LED and airspeed
added NTF_BUZZ_VOLUME parameter
There are hundreds of other changes as well. I expect the beta period for this release to be quite long, and I would greatly appreciate as many test reports as possible. Please submit test results both for successful and unsuccessful tests by replying on this topic.
A huge thank you to everyone who has contributed to this release. We’ve had a lot of new contributors and it is great working with such a fantastic community.
@tridge This seems to have broken compatibility with my LW20/C rangefinder.
All was working normally on Plane 3.9.11, using the recommended params here
No longer works after flashing this release (reads only zero’s). Flashed back to 3.9.11 and it works again right away.
are you connecting the LW20 on I2C or UART?
Can you also tell me what flight controller you are using, and which port on that flight controller it is attached to. A tlog of it failing would be good, along with a tlog of it working with 3.9.11.
Cheers, Tridge
btw, regarding the LightWare Lidars on I2C, one of the new features of 4.0 is that it now talks to native LightWare I2C protocol, which means you don’t need to reconfigure the Lidar for “legacy” access when you buy it.
I talked with the HiTech guys at Intergeo yesterday and they showed me their range of UAVCAN servos. Do you have any experience with them? They claim to have Ardupilot compatibility, but I do not even see how the different actuator functions (servo mapping) should be handled. I would be glad to test, and give feedback.
@vbnhu I have been working with them for a while now. The servos are fully functional with current ArduPilot releases, though I will say development seems to still be active.
The servo mapping is simply taking the effective PWM output channel, shifting by -1 (UAVCAN Actuator ID 0 corresponds to Servo Channel 1) and sending a scaled unitless command packed in a UAVCAN actuator array command. This means that the actuator function (servo mapping) is handled through the normal channels. UAVCAN servos are currently just layered on top of the PWM channel outputs. There is a bitmask to enable UAVCAN outputs within the array command corresponding to particular PWM channels.
There is a programmer (DPC-CAN) from Hitec necessary for configuring their servos, setting up Actuator IDs and CAN IDs, limits, and telemetry settings. The servos do not fully implement some of UAVCAN’s amenities, like editing parameters via UAVCAN GUI or automatic node allocation. The programmer is necessary to overcome this limitation.
A current oddity is that all servos must have a CAN ID matching that of the autopilot (Node ID 10) as they only listen to commands from an identical ID.
Servo telemetry is implemented, mainly providing a 0-100% load indicator. This part in particular is still maturing. ArduPilot does not currently support servo telemetry, so the lack of a matured telemetry system does not have a very great effect yet.
Correction: while Ardupilot requires ESC index shifting for UAVCAN ESCs due to 0 indexing on the UAVCAN side, the actuators (servos) do not require it. I mixed up the two when writing, my apologies.