Cannot connect to Anafi UKR via Ethernet (Olympe Python) — "Device or resource busy" / Segmentation fault

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 .whl inside a ubuntu:22.04 Docker container on manylinux_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.pyawrite, 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.1 succeeds 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.SkyControllerUKR and olympe.SkyController — both exhibit the same failures.

Questions

  1. What is the recommended approach to connect to the Anafi UKR with Python? Is there a specific QuickStart I can Follow?
  2. Is the Broken pipe on the MUX handshake a known issue with Olympe 8.3.3 when connecting over Ethernet?
  3. The AttributeError: 'SkyControllerUKR' object has no attribute '_media' appears with both olympe.SkyControllerUKR and olympe.SkyController. Is this a known bug in Olympe 8.3.3, and is there a workaround?
  4. Any ideas on what could cause the segfault in networking.py? Could this be a threading/initialization race condition?

Any help is appreciated. Thanks!

Hello towr,
Thanks for reaching out with such a detailed explanation of your problem
The issue you have is triggering me a version incompatibility
Among all the information you gave me, you seem to have not mentioned the versions of the Drone + Sky. Could you please retrieve them?
I’ll invest it on my side

Hi,

I have a same issue.
I have compile Olympe (8.3.3) on a Rasberry PI5.
The Skycontroller and Drone are the firmware 8.3.4 installed.

So, I have the same error that @towr

Thanks.

Pierre

Hi Meryl,

Thanks for looking into this!

I have the same versions as @pierre-flying. Skycontroller and freeflight at 8.3.4, drone was 8.3.2 just updated to 8.3.4 but problem persists. Olympe is version 8.3.3

I have test also with a PC with ubuntu 22.
I have install parrot_olympe-8.3.3-py3-none-manylinux_2_31_x86_64.whl and it’s the same :frowning:

Hi again,
We cannot reproduce your issue internally
We tried with 2 different sets, without succeeding to fail

So that may be something with your setup
Do you have freeflight8 connected too? Do you have a firewall? Both prevent the connection from working out

@Meryl :

In my case :
I have Freeflight8 connected but I have tested without and it’s the same.
I have desactivate firewall on my Ubuntu 22

For information, I have :

  • PC portable Dell with Ubuntu 22 LTS installed with Python 10.

I have created an venv and when I check if Olympe is ok with following code :
python -c ‘import olympe; print(“Installation OK”)’

I have setup the ip address 192.168.53.100 on my laptop and connected to Skycontroller with RJ-45.
When I ping on 192.168.53.1…it’s ok

@Meryl Could it be a problem that the Python wheel is 8.3.3 while the rest (Drone + controller) is 8.3.4?

Nope, 8.3.3 Olympe is compatible with 8.3.4 Drone&SkyController

After investigating what the mux logs are telling, it is an error log that happens when the device is already in a non correct state, for example if it has been disconnected a bad way before. Because it means that there is no mux context anymore, so you can’t init it. But I suppose you also have the error when starting afresh, right?

First, we all agree you set up your python venv the right way? if you tap “import olympe” in a python3 terminal, you don’t have errors, right?

Then, could you both please reboot your sky and drone, no freeflight connected (shutdown the tablet, put it far away), shutdown your firewall, and try your script with the debug log level activated

olympe.log.update_config(
    {
        "loggers": {
            "olympe": {"level": "INFO", "handlers": ["console"]},
            "ulog": {"level": "DEBUG", "handlers": ["console"]},
        },
    }
)

and give the logs back
Try one with Olympe level logs at DEBUG, the other with Ulog

We’ll hope there will be hints

Hi,

My log :
ParrotUKR.pdf (60.4 KB)

@Meryl

It’s not possible to launch Freeflight and get video flux (RJ-45) on same time ?

These logs worked perfectly fine though, we’ve got all the logs of a proper connection and disconnection

Secondly, nope, we can’t even maintain a connection with the Sky if it is connected to a FF, because there is only 1 “controller” port, which is either the laptop or FF

Thanks for the reply.

So if I want to connect the Samsung tablet to control the drone and receive telemetry data via RJ-45… is that not possible?

Hi,
It is possible to access the live stream from your laptop when connected to your SkyController via RJ-45, while using FreeFlight 8.
If you only need the video stream, you can use a standard media player such as VLC, MPV, or FFmpeg, and connect to the following URL:

VLC

vlc rtsp://192.168.53.1:554/live-front

MPV

mpv --no-cache --profile=low-latency -v --rtsp-transport=udp rtsp://192.168.53.1:554/live-front

ffplay

ffplay rtsp://192.168.53.1:554/live-front

If you want both the video stream and the live metadata (e.g. drone position, orientation, battery level and more; view the full list here: Embedded Video Metadata - 7.7), you can download GroundSDK-tools and run PDrAW (Parrot player) here: Overview - 7.7
There is also a tool called pdraw-vsink that allows you to easily access video frames along with their associated metadata and process them:
GitHub - Parrot-Developers/pdraw: Parrot Drones Audio and Video Vector · GitHub
Regards,
Mathieu

Hi,

Thanks for this information.

So, I launch :

  • Freeflight 8
  • I connect a PC or Rasberry P5 to RJ-45
  • I launch GroundSDK-tools and run PDrAW or pdraw-vsink to extract telemetry

It’s right ?

Hi,
Yes.

Sorry but I don’t have GroundSDK-tools source on Sharepoint SDK8 directory.

Where I can download it ?

Hi,
Documentation is on the Sharepoint SDK8 directory, but source code is directly on Parrot GitHub: Parrot for Developers · GitHub.

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.