I have noticed an issue with Olympe SDK v7.4.2 where the CPU load of one thread in the Python process creeps from < 10% load (of one core) to 100% load (still of one core). This results in events of Olympe being delayed, e.g. a button press of the SkyController is registered only after ~10 seconds, which makes it unusable after 100% is reached and the drone has to be emergency landed.
This is a known issue in the 7.X release series that we’ve been aware of lately. This issue should be fixed in the upcoming 7.5 release that should land in late December / early January.
thank you for your quick reply. I am glad to hear that this issue is known and it is being worked on.
In the meantime, is there a known fix or workaround? Would you be able to provide a pre-release with only the fix, or only a commit or even some instructions how i could fix Olympe myself?
In the meantime, is there a known fix or workaround? Would you be able to provide a pre-release with only the fix, or only a commit or even some instructions how i could fix Olympe myself?
There is no workaround and the fix is composed of multiple commits so it wouldn’t be that simple to share it independently. Anyway, a 7.5.0-rc1 is planned for next week so you shouldn’t have to wait for the 7.5.0 final.
The 7.5.0-rc1 of Anafi Ai and GroundSDK has been delayed and we’re usually trying to keep all SDK components in sync. I’ll try to release Olympe 7.5.0-rc1 ASAP and keep you informed here.
Core: Debundle the Python protobuf dependency
Core: Fix concurrency issues
Media: fix media downloading issues
SDK: Allow command ACK and expectation reception order inversion
SDK: Improved dicovery timeout handling
Video: fix raw video frames decoding
Changelog
olympe:
[DEBUG] bitfields: ignore bits outiside bitfield mask
[DEBUG] arsdk: avoid unnecessary copies while decoding
[DEBUG] http: fix missing ConnectionClosed event handling
[DEBUG] fix internal pomp context fds unregistering
[DEBUG] media: improve wait_for_pending_download behavior
[DEBUG] video: remove strides from raw video frames
[DEBUG] protobuf: don't accumulate repeated fields
[DEBUG] protobuf: fix command ACK and expectation order inversion
[DEVMINOR] remove dead code and add some __repr__
[DEVMINOR] update controller name
[DEVMINOR] fix typo in example comment
[DEBUG] fix missing protobuf modules
[DEVMINOR] update README
[DEV] add time_function to PilotingCommand class
[DEV] debundle google.protobuf
[DEBUG] update to protobuf 3.19
[DEVMINOR] arsdk: validate message parameters names
[DEBUG] fix MultipleExpectation notifications
[DEBUG] fix sequence of commands expectations
[DEBUG] arsdk: allow command ACK and expectation order inversion
[BUGFIX] fix thread leaks
[DEBUG] controller: add missing Future cancelation
[DEBUG] fix Futures registration
[DEBUG] discovery: rework timeout handling
[DEBUG] fix missing expectation cancellation
[DEBUG] concurrent: fix timers callback scheduling
[DEBUG] fix expectation cancellation
arsdk-xml:
[DEV] ardrone3/StartPilotedPOIV2/mode: add locked_once_gimbal
[DEV] Add esc too hot autolanding trigger reason
[DEV] add amsl reference command
[DEV] ardrone3: deprecate PositionChanged
[DEV] rename WaypointTooFar to FirstWayPointTooFar
[DEV] common.xml: add FlightPlanState WaypointTooFar
[DEVMINOR] DRI: add ASTM F341122 US DRI regulation support
[DEV] camera2: replace start_timestamp by duration_ms in photo/video states
[DEVMINOR] deprecate ardrone3 NavigateHomeStateChanged
libvideo-metadata:
[DEVMINOR] move all LTIC/LFIC functions to liblic
[DEVMINOR] Remove unnecessary whitespace
[DEBUG] vmeta_session: do not return an error when REC_UDTA_KEY_TITLE is not a date
[DEV] LTIC: add flag to enable verbose mode
pdraw:
[DEBUG] Gles2Renderer: secure access to the listener and timers
[WARNINGFIX] fix clang-format 11
[DEV] libpdraw: add video presentation statistics
[DEVMINOR] libpdraw: events pomp_msg* should be const
[DEVMINOR] libpdraw: code format fix
[DEBUG] CodedVideoMedia: fix memory leak on error
[DEV] libpdraw: update frame timestamps
Thanks for the update. Testing it now.
During installation there is a small issue with protobuf dependency. Olympe states to require protobuf v3.19.4, but this gives an error in ‘import olympe’: ModuleNotFoundError: No module named ‘google.protobuf.message_factory’
The fix is simple: pip insall --upgrade protobuf
It will complain about a version mismatch with Olympe, but i ignored it. Now import of olympe works.
The CPU load seems to be stable now, highest thread in my application is now ~19%, which i believe is the on of the video decoders. The main event thread of Olympe is below that, which is very nice. Thanks for the fix. Together with the CPU load issue, also the issue where the SkyController becomes unresponsive is gone now.