Cannot connect to Anafi UKR via Ethernet (Python Olympe) — “Device or resource busy” / Segmentation fault
Hello,
I am trying to connect to the Parrot Anafi UKR Sky Controller via a direct Ethernet cable between my laptop and the controller, using Olympe (version 8.3.3). I can successfully ping the controller at 192.168.53.1, so the network link itself is up.
However, when I run my Python script, I consistently get one of two failure modes and I cannot get the connection to succeed.
Setup
- Hardware: Parrot Anafi UKR + Sky Controller UKR
- Connection: Direct Ethernet cable, laptop ↔ controller
- Olympe version: 8.3.3 (installed via
.whlinside aubuntu:22.04Docker container onmanylinux_2_31_x86_64) - Python: 3.10
- Controller IP:
192.168.53.1(confirmed reachable via ping)
Script
import olympe
from os import environ
SKYCTRL_IP = environ.get("DRONE_IP", "192.168.53.1")
skyctrl = olympe.SkyControllerUKR(SKYCTRL_IP)
# Also tried
# skyctrl = olympe.SkyController(SKYCTRL_IP)
assert skyctrl.connect()
assert skyctrl.disconnect()
Failure mode 1 — “Broken pipe” then “Device or resource busy” → connection timeout
The most common failure. The handshake fails immediately with a broken pipe, then Olympe retries for ~45 seconds and eventually times out:
root@a749e9e911f7:/workdir# python3 src/towr_anafi_ukr/example_controller_test.py
>> Try to connect to Parrot UKR
2026-03-26 14:03:00,973 [INFO] olympe.backend - _create_pomp_loop - Creating pomp loop
2026-03-26 14:03:00,975 [INFO] olympe.backend - _do_create - device callbacks have been added to arsdk_ctrl
2026-03-26 14:03:00,975 [INFO] olympe.scheduler - _create_pomp_loop - Creating pomp loop
2026-03-26 14:03:00,989 [ERROR] ulog - mux - mux_send_handshake err=32(Broken pipe)
2026-03-26 14:03:00,990 [ERROR] ulog - arsdkctrl_mux - arsdkctrl_backend_mux_new:600: mux_channel_open err=32(Broken pipe)
2026-03-26 14:03:00,990 [ERROR] olympe.backend - _retry_connect - arsdkctrl_backend_mux_new: -32
2026-03-26 14:03:01,009 [ERROR] olympe.drone - __call__ - Unhandled exception
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/olympe/utils/__init__.py", line 102, in __call__
return self.func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/olympe/arsdkng/cmd_itf.py", line 579, in _on_device_removed
self._reset_instance()
File "/usr/local/lib/python3.10/dist-packages/olympe/mixins/media.py", line 74, in _reset_instance
if self._media is not None:
AttributeError: 'SkyControllerUKR' object has no attribute '_media'
2026-03-26 14:03:01,009 [ERROR] olympe.backend - _run_task_list - Unhandled exception in async task function
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 485, in _run_task_list
ret = f(*args, **kwds)
File "/usr/local/lib/python3.10/dist-packages/olympe/arsdkng/controller.py", line 1145, in _on_device_removed
super()._on_device_removed()
File "/usr/local/lib/python3.10/dist-packages/olympe/utils/__init__.py", line 92, in <lambda>
lambda *args, **kwds: self._method_call(obj, *args, **kwds)
File "/usr/local/lib/python3.10/dist-packages/olympe/utils/__init__.py", line 96, in _method_call
return self.__call__(this, *args, **kwds)
File "/usr/local/lib/python3.10/dist-packages/olympe/utils/__init__.py", line 102, in __call__
return self.func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/olympe/arsdkng/cmd_itf.py", line 579, in _on_device_removed
self._reset_instance()
File "/usr/local/lib/python3.10/dist-packages/olympe/mixins/media.py", line 74, in _reset_instance
if self._media is not None:
AttributeError: 'SkyControllerUKR' object has no attribute '_media'
2026-03-26 14:03:01,015 [INFO] olympe.drone - _create_pomp_loop - Creating pomp loop
2026-03-26 14:03:01,016 [INFO] olympe.update - _create_pomp_loop - Creating pomp loop
2026-03-26 14:03:01,016 [INFO] olympe.flightplan - _create_pomp_loop - Creating pomp loop
2026-03-26 14:03:01,020 [INFO] olympe.media - _create_pomp_loop - Creating pomp loop
2026-03-26 14:03:01,021 [INFO] olympe.missions - _create_pomp_loop - Creating pomp loop
2026-03-26 14:03:03,002 [INFO] olympe.drone - connection_state - ConnectionState: ConnectionState.Created --> ConnectionState.Created
2026-03-26 14:03:03,031 [INFO] olympe.drone - connection_state - Called by _reset_instance:585
2026-03-26 14:03:03,992 [ERROR] olympe.backend - aconnect - Failed to connect to b'192.168.53.1':4321: Device or resource busy
2026-03-26 14:03:03,992 [INFO] olympe.backend - _retry_connect - CtrlBackendMuxIp failed to connect to 192.168.53.1
...
...
2026-03-26 14:03:41,131 [INFO] olympe.drone - connection_state - ConnectionState: ConnectionState.Created --> ConnectionState.Created
2026-03-26 14:03:41,132 [INFO] olympe.drone - connection_state - Called by _reset_instance:585
2026-03-26 14:03:43,022 [ERROR] olympe.backend - aconnect - Failed to connect to b'192.168.53.1':4321: Device or resource busy
2026-03-26 14:03:43,022 [INFO] olympe.backend - _retry_connect - CtrlBackendMuxIp failed to connect to 192.168.53.1
2026-03-26 14:03:43,143 [INFO] olympe.drone - connection_state - ConnectionState: ConnectionState.Created --> ConnectionState.Created
2026-03-26 14:03:43,145 [INFO] olympe.drone - connection_state - Called by _reset_instance:585
2026-03-26 14:03:45,154 [INFO] olympe.drone - connection_state - ConnectionState: ConnectionState.Created --> ConnectionState.Created
2026-03-26 14:03:45,156 [INFO] olympe.drone - connection_state - Called by _reset_instance:585
2026-03-26 14:03:46,025 [ERROR] olympe.backend - aconnect - Failed to connect to b'192.168.53.1':4321: Device or resource busy
2026-03-26 14:03:46,025 [INFO] olympe.backend - _retry_connect - CtrlBackendMuxIp failed to connect to 192.168.53.1
2026-03-26 14:03:46,030 [INFO] olympe.drone - connection_state - ConnectionState: ConnectionState.Created --> ConnectionState.Timeout
2026-03-26 14:03:46,035 [INFO] olympe.drone - connection_state - Called by connect:1056
2026-03-26 14:03:46,035 [ERROR] olympe.drone - connect - Connection to device '192.168.53.1' has failed. Disconnecting...
2026-03-26 14:03:46,035 [INFO] olympe.drone - connection_state - ConnectionState: ConnectionState.Timeout --> ConnectionState.Disconnecting
2026-03-26 14:03:46,037 [INFO] olympe.drone - connection_state - Called by _adisconnect:1101
2026-03-26 14:03:46,038 [WARNING] olympe.drone - _disconnect_impl - There is no device to disconnect from
2026-03-26 14:03:46,038 [INFO] olympe.drone - connection_state - ConnectionState: ConnectionState.Disconnecting --> ConnectionState.Error
2026-03-26 14:03:46,039 [INFO] olympe.drone - connection_state - Called by _disconnect_impl:1073
Traceback (most recent call last):
File "/workdir/src/towr_anafi_ukr/example_controller_test.py", line 14, in <module>
2026-03-26 14:03:46,040 [INFO] olympe.drone - disconnect - Disconnection from device 'b'192.168.53.1'' has failed
assert skyctrl.connect()
AssertionError
2026-03-26 14:03:46,061 [INFO] olympe.scheduler - _destroy_pomp_loop - Pomp loop has been destroyed: subscribers_thread
2026-03-26 14:03:46,071 [INFO] olympe.flightplan - _destroy_pomp_loop - Pomp loop has been destroyed: Thread-5
2026-03-26 14:03:46,071 [INFO] olympe.update - _destroy_pomp_loop - Pomp loop has been destroyed: Thread-4
2026-03-26 14:03:46,109 [INFO] olympe.missions - _destroy_pomp_loop - Pomp loop has been destroyed: Thread-7
2026-03-26 14:03:46,180 [INFO] olympe.media - _destroy_pomp_loop - Pomp loop has been destroyed: Thread-6
2026-03-26 14:03:46,282 [INFO] olympe.backend - _destroy_pomp_loop - Pomp loop has been destroyed: Thread-2
2026-03-26 14:03:46,288 [INFO] olympe.drone - _destroy_pomp_loop - Pomp loop has been destroyed: Thread-3
There is also an AttributeError: 'SkyControllerUKR' object has no attribute '_media' thrown from olympe/mixins/media.py during _reset_instance. Not sure if that is a symptom or a separate bug.
Failure mode 2 — Segmentation fault during initialization
Occasionally (seemingly non-deterministically) the script crashes with a segfault before it even attempts the connection, during the creation of the SkyControllerUKR object:
root@a749e9e911f7:/workdir# python3 src/towr_anafi_ukr/example_controller_test.py
>> Try to connect to Parrot UKR
2026-03-26 14:06:56,205 [INFO] olympe.backend - _create_pomp_loop - Creating pomp loop
2026-03-26 14:06:56,210 [INFO] olympe.backend - _do_create - device callbacks have been added to arsdk_ctrl
2026-03-26 14:06:56,211 [INFO] olympe.scheduler - _create_pomp_loop - Creating pomp loop
2026-03-26 14:06:56,234 [INFO] olympe.drone - _create_pomp_loop - Creating pomp loop
2026-03-26 14:06:56,237 [INFO] olympe.update - _create_pomp_loop - Creating pomp loop
2026-03-26 14:06:56,239 [INFO] olympe.flightplan - _create_pomp_loop - Creating pomp loop
2026-03-26 14:06:56,244 [INFO] olympe.media - _create_pomp_loop - Creating pomp loop
Fatal Python error: Segmentation fault
Thread 0x00007fffceffd640 (most recent call first):
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 556 in _wait_and_process
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 543 in run
File "/usr/lib/python3.10/threading.py", line 1016 in _bootstrap_inner
File "/usr/lib/python3.10/threading.py", line 973 in _bootstrap
Thread 0x00007fffcf7fe640 (most recent call first):
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 556 in _wait_and_process
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 543 in run
File "/usr/lib/python3.10/threading.py", line 1016 in _bootstrap_inner
File "/usr/lib/python3.10/threading.py", line 973 in _bootstrap
Thread 0x00007fffcffff640 (most recent call first):
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 556 in _wait_and_process
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 543 in run
File "/usr/lib/python3.10/threading.py", line 1016 in _bootstrap_inner
File "/usr/lib/python3.10/threading.py", line 973 in _bootstrap
Thread 0x00007fffd4cf2640 (most recent call first):
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 556 in _wait_and_process
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 543 in run
File "/usr/lib/python3.10/threading.py", line 1016 in _bootstrap_inner
2026-03-26 14:06:56,247 [INFO] olympe.missions - _create_pomp_loop - Creating pomp loop
File "/usr/lib/python3.10/threading.py", line 973 in _bootstrap
Thread 0x00007fffd55f3640 (most recent call first):
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 556 in _wait_and_process
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 543 in run
File "/usr/lib/python3.10/threading.py", line 1016 in _bootstrap_inner
File "/usr/lib/python3.10/threading.py", line 973 in _bootstrap
Current thread 0x00007fffd5df4640 (most recent call first):
File "/usr/local/lib/python3.10/dist-packages/olympe/networking.py", line 341 in awrite
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/_task.py", line 132 in step
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 290 in run_async
File "/usr/local/lib/python3.10/dist-packages/olympe/networking.py", line 328 in write
File "/usr/local/lib/python3.10/dist-packages/olympe/networking.py", line 964 in write
File "/usr/local/lib/python3.10/dist-packages/olympe/arsdkng/backend.py", line 409 in _tx_cb
File "/usr/local/lib/python3.10/dist-packages/olympe/utils/__init__.py", line 102 in __call__
File "/usr/local/lib/python3.10/dist-packages/olympe/utils/__init__.py", line 96 in _method_call
File "/usr/local/lib/python3.10/dist-packages/olympe/utils/__init__.py", line 92 in <lambda>
File "/usr/local/lib/python3.10/dist-packages/olympe_deps/__init__.py", line 146 in <lambda>
File "/usr/local/lib/python3.10/dist-packages/olympe/arsdkng/backend.py", line 362 in _retry_connect
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/_task.py", line 132 in step
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/_task.py", line 200 in _wakeup
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 485 in _run_task_list
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 547 in run
File "/usr/lib/python3.10/threading.py", line 1016 in _bootstrap_inner
File "/usr/lib/python3.10/threading.py", line 973 in _bootstrap
Thread 0x00007ffffae52640 (most recent call first):
File "/usr/lib/python3.10/threading.py", line 324 in wait
File "/usr/lib/python3.10/queue.py", line 180 in get
File "/usr/local/lib/python3.10/dist-packages/logness/__init__.py", line 178 in _background_log_handle
File "/usr/lib/python3.10/threading.py", line 953 in run
File "/usr/lib/python3.10/threading.py", line 1016 in _bootstrap_inner
File "/usr/lib/python3.10/threading.py", line 973 in _bootstrap
Thread 0x00007fffff45f000 (most recent call first):
File "/usr/lib/python3.10/threading.py", line 320 in wait
File "/usr/lib/python3.10/threading.py", line 607 in wait
File "/usr/lib/python3.10/threading.py", line 940 in start
File "/usr/local/lib/python3.10/dist-packages/olympe/concurrent/__init__.py", line 178 in start
File "/usr/local/lib/python3.10/dist-packages/olympe/mission.py", line 232 in __init__
File "/usr/local/lib/python3.10/dist-packages/olympe/mixins/mission.py", line 46 in __init__
File "/usr/local/lib/python3.10/dist-packages/olympe/mixins/ipproxy.py", line 172 in __init__
File "/usr/local/lib/python3.10/dist-packages/olympe/controller.py", line 202 in __init__
File "/usr/local/lib/python3.10/dist-packages/olympe/controller.py", line 212 in __init__
File "/workdir/src/towr_anafi_ukr/example_controller_test.py", line 13 in <module>
Extension modules: google.protobuf.pyext._message, numpy._core._multiarray_umath, numpy.linalg._umath_linalg (total: 3)
Segmentation fault
The segfault originates in olympe/networking.py → awrite, called from _retry_connect in olympe/arsdkng/backend.py.
What I have tried
- Read and followed UnafiUKR steps in your docs at
/olympe/userguide/advanced/physical_drone.html#connect-to-a-drone-through-a-skycontroller - Verified
ping 192.168.53.1succeeds from inside the Docker container. - Confirmed the controller is powered on and the drone is attached.
- Tried running the script multiple times; the broken-pipe / busy error is consistent, the segfault is intermittent.
- Tried both
olympe.SkyControllerUKRandolympe.SkyController— both exhibit the same failures.
Questions
- What is the recommended approach to connect to the Anafi UKR with Python? Is there a specific QuickStart I can Follow?
- Is the
Broken pipeon the MUX handshake a known issue with Olympe 8.3.3 when connecting over Ethernet? - The
AttributeError: 'SkyControllerUKR' object has no attribute '_media'appears with botholympe.SkyControllerUKRandolympe.SkyController. Is this a known bug in Olympe 8.3.3, and is there a workaround? - Any ideas on what could cause the segfault in
networking.py? Could this be a threading/initialization race condition?
Any help is appreciated. Thanks!