voxl-ardupilot crashing on mission planner reconnect
-
We've found that mission planner does not always reconnect to the autopilot after a reboot so we have adopted a policy to disconnect and reconnect mission planner after performing a reboot. We have found that this causes voxl-ardupilot to crash.
Steps:
- Mission Planner is connected to the ardupilot instance over radio link
- Restart ardupilot, through either the mission planner interface or systemctl restart
- Disconnect mission planner
- Reconnect Mission Planner
Mission Planner will reconnect but when it tries to download the params list from the autopilot the data stream stops and the motors beep indicating loss of signal from the autopilot. Restarting voxl-ardupilot with systemctl resolves the issue but this is a consistent problem.
Performing a full power cycle does not recreate this issue. Mission Planner can be disconnected and reconnected without issue.
systemctl status voxl-ardupilot - Before crash
voxl2 (M0054):~$ systemctl status voxl-ardupilot ● voxl-ardupilot.service - ArduPilot Loaded: loaded (/etc/systemd/system/voxl-ardupilot.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2026-07-28 18:59:14 UTC; 2min 52s ago Process: 2173 ExecStartPre=/bin/sleep 1 (code=exited, status=0/SUCCESS) Main PID: 2320 (voxl-ardupilot) Tasks: 8 (limit: 4915) CGroup: /system.slice/voxl-ardupilot.service ├─2320 /bin/bash /usr/bin/voxl-ardupilot └─2323 /usr/bin/ardupilot Jul 28 18:59:13 m0054 systemd[1]: Starting ArduPilot... Jul 28 18:59:14 m0054 systemd[1]: Started ArduPilot. Jul 28 18:59:14 m0054 voxl-ardupilot[2320]: Starting up Jul 28 18:59:14 m0054 voxl-ardupilot[2320]: Got data msg before configuration completesystemctl status voxl-ardupilot - After crash
● voxl-ardupilot.service - ArduPilot Loaded: loaded (/etc/systemd/system/voxl-ardupilot.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2026-07-28 19:07:34 UTC; 1min 40s ago Process: 6178 ExecStartPre=/bin/sleep 1 (code=exited, status=0/SUCCESS) Main PID: 6199 (voxl-ardupilot) Tasks: 8 (limit: 4915) CGroup: /system.slice/voxl-ardupilot.service ├─6199 /bin/bash /usr/bin/voxl-ardupilot └─6200 /usr/bin/ardupilot Jul 28 19:09:07 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:08 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:09 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:09 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:10 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:11 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:12 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:13 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:14 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:14 m0054 voxl-ardupilot[6199]: Got response cb 0 Jul 28 19:09:15 m0054 voxl-ardupilot[6199]: Got response cb 0 voxl2 (M0054):~$voxl-version
voxl2 (M0054):~$ voxl-version ──────────────────────────────────────────────────────────────────────────────── system-image: 1.8.06-M0054-14.1a-perf kernel: #1 SMP PREEMPT Wed Oct 22 04:13:18 UTC 2025 4.19.125 ──────────────────────────────────────────────────────────────────────────────── hw platform: M0054 mach.var: 1.0.1 SKU: MCCA-M0054-C0-T0-M0-X0 ──────────────────────────────────────────────────────────────────────────────── voxl-suite: 1.6.3 ──────────────────────────────────────────────────────────────────────────────── Packages: Repo: http://voxl-packages.modalai.com/ ./dists/qrb5165/sdk-1.6/binary-arm64/ Last Updated: 2026-07-28 17:00:51 List: libfc-sensor 1.0.9 libmodal-cv 0.6.0 libmodal-exposure 0.1.4 libmodal-flow 1.0.3 libmodal-journal 0.2.7 libmodal-json 0.4.8 libmodal-pipe 2.14.11 libqrb5165-io 0.6.3 libvoxl-cci-direct 0.3.3 libvoxl-codec 0.0.5 libvoxl-cutils 0.1.6 modalai-slpi 1.2.2 mv-voxl 0.1-r0 qrb5165-bind 0.1-r0 qrb5165-dfs-server 0.2.0 qrb5165-mini-tof-server 0.2.2 qrb5165-rangefinder-server 0.1.6 qrb5165-slpi-test-sig 01-r0 qrb5165-tflite 2.17.2 voxl-ardupilot 4.8.0-8ed7441c voxl-bind-spektrum 0.1.1 voxl-camera-calibration 0.6.1 voxl-camera-server 2.2.25 voxl-ceres-solver 2:2.0.0-2 voxl-configurator 1.1.5 voxl-cpu-monitor 0.7.7 voxl-docker-support 1.3.1 voxl-elrs 1.1.0 voxl-esc 1.5.7 voxl-esptool 0.2.0 voxl-feature-tracker 0.5.2 voxl-flow-server 0.3.6 voxl-gphoto2-server 0.0.10 voxl-imu-server 2.0.1 voxl-io-server 0.0.8 voxl-jpeg-turbo 2.1.3-7 voxl-lepton-server 1.3.3 voxl-lepton-tracker 0.0.4 voxl-libgeographic 1.0.0 voxl-libgphoto2 0.0.4 voxl-libuvc 1.0.7 voxl-logger 0.6.1 voxl-mavcam-manager 0.6.0 voxl-mavlink 0.1.6 voxl-mavlink-server 1.4.14 voxl-microdds-agent 3.0.0-0 voxl-modem 1.2.3 voxl-mongoose 7.19.0 voxl-mpa-to-ros 0.3.9 voxl-mpa-to-ros2 0.0.7 voxl-mpa-tools 1.5.8 voxl-nano-tracker 0.1.7 voxl-open-vins-server 0.6.0 voxl-opencv 4.5.5-3 voxl-osd 0.3.8 voxl-portal 0.8.7 voxl-px4 1.14.0-2.0.133 voxl-px4-params 0.9.0 voxl-qvio-server 1.2.3 voxl-remote-id 0.0.9 voxl-reset-slpi 0.0.1 voxl-ros2-foxy 0.0.1 voxl-state-estimator 0.0.6 voxl-streamer 0.8.0 voxl-suite 1.6.3 voxl-tag-detector 0.1.0 voxl-tflite-server 0.5.1 voxl-utils 2.0.2 voxl-uvc-server 0.1.7 voxl-vision-hub 1.9.21 voxl-vtx 2.0.2 voxl-wavemux 0.0.3 voxl2-io 0.0.3 voxl2-security-hardening-utls 1.0-r0 voxl2-system-image 1.8.06-r0 voxl2-wlan 1.0-r0voxl-inspect-services
voxl2 (M0054):~$ voxl-inspect-services Scanning services... Service Name | Enabled | Running | CPU Usage ─────────────────────────────────────────────────────────────────── docker-autorun | Disabled | Not Running | modallink-relink | Disabled | Not Running | voxl-ardupilot | Enabled | Running | 0.0% voxl-camera-server | Enabled | Running | 0.0% voxl-cpu-monitor | Enabled | Running | 0.0% voxl-dfs-server | Disabled | Not Running | voxl-dma-latency | Enabled | Running | voxl-feature-tracker | Disabled | Not Running | voxl-flow-server | Disabled | Not Running | voxl-imu-server | Enabled | Running | 3.5% voxl-io-server | Disabled | Not Running | voxl-lepton-server | Disabled | Not Running | voxl-lepton-tracker | Disabled | Not Running | voxl-logger | Disabled | Not Running | voxl-mavcam-manager | Disabled | Not Running | voxl-mavlink-server | Enabled | Running | 0.0% voxl-microdds-agent | Enabled | Running | voxl-mini-tof-server | Disabled | Not Running | voxl-modem-doodle | Enabled | Running | 0.0% voxl-modem | Enabled | Running | 1.8% voxl-nano-tracker | Disabled | Not Running | voxl-open-vins-server | Disabled | Not Running | voxl-osd | Disabled | Not Running | voxl-portal | Enabled | Running | 0.0% voxl-px4 | Disabled | Not Running | voxl-qvio-server | Disabled | Not Running | voxl-rangefinder-server | Disabled | Not Running | voxl-remote-id | Disabled | Not Running | voxl-softap | Disabled | Not Running | voxl-state-estimator | Disabled | Not Running | voxl-static-ip-watcher | Disabled | Not Running | voxl-static-ip | Disabled | Not Running | voxl-streamer | Disabled | Not Running | voxl-tag-detector | Disabled | Not Running | voxl-tflite-server | Disabled | Not Running | voxl-time-sync | Disabled | Not Running | voxl-uvc-server | Disabled | Not Running | voxl-vision-hub | Enabled | Running | 1.8% voxl-vrx | Disabled | Not Running | voxl-vtx | Disabled | Not Running | voxl-wait-for-fs | Enabled | Completed |voxl-mavlink-server.cfg
/** * voxl-mavlink-server Configuration File * * primary_static_gcs_ip & secondary_static_gcs_ip * These configure voxl-mavlink-server to automatically try to connect to * up to two known static GCS units. Set to empty or NULL if you don't want * to use this and you want the GCS to initialize the connection instead. * Note the default IP for the primary link is 192.168.8.10 which is the * first IP that VOXL DHCP serves when connecting in wifi softap mode. * * DON'T set either of these ip addresses to localhost, these are meant * for external ground control stations. For mavsdk and mavros communication * locally, set the 'en_localhost_mavlink_udp' flag in voxl-vision-hub's * /etc/modalai/voxl-vision-hub.conf file instead. * * primary_static_gcs_ip_port & secondary_static_gcs_ip_port * UDP port numbers for the static GCS IPs above, default to 14550 each, respectively * * Settings for running voxl-px4 on SLPI: * onboard_port_to_autopilot - UDP port to send high-rate onboard data to SLPI * onboard_port_from_autopilot - UDP port to receive high-rate onboard data from SLPI * gcs_port_to_autopilot - UDP port to send normal-rate gcs data to SLPI * gcs_port_from_autopilot - UDP port to receive normal-rate gcs data from SLPI * * Settings for running an external autopilot connected via UART: * en_external_uart_ap - set to true to enable an external flight controller * autopilot_uart_bus - uart bus, default 1 for VOXL2 * autopilot_uart_baudrate - default 921600 * autopilot_mission_delay_start - default -1 (off), >0 means to delay mission start for X seconds * autopilot_mission_delay_sound - play esc chime tone/behavior, true=on false=off * autopilot_mission_notif_dur - visual notification using motor spin, duration in seconds * en_external_fc_timesync - enable responding to timesync messages * (enabled by default) * en_external_ap_heartbeat - enable automatic sending of heartbeat * gcs_timeout_s - time without heartbeat to consider GCS disconnected * * udp_mtu - maximum transfer unit for UDP packets back to GCS. voxl-mavlink-server * will bundle up backets for the GCS into a single UDP packet with * a maxium size of this. This saves network traffic drastically. * Set to 0 to disable this feature and send one UDP packet per msg. * * * External FC field is for QRB5165 only. Set to true to enable UART * communication to an external flight controller, otherwise a UDP interface * will be started to talk to voxl-px4 on localhost which is the default behavior. * Select UART port 1 to go through the legacy B2B connector, that's the port exposed by the * M0125 and M0141 accessory boards. Use port 12 to go through the ESC port (J18). * */ { "primary_static_gcs_ip": "10.223.0.12", "primary_static_gcs_ip_port": 14550, "secondary_static_gcs_ip": "10.223.0.202", "secondary_static_gcs_ip_port": 14550, "onboard_port_to_autopilot": 14556, "onboard_port_from_autopilot": 14557, "gcs_port_to_autopilot": 14558, "gcs_port_from_autopilot": 14559, "en_external_uart_ap": false, "autopilot_uart_bus": 1, "autopilot_uart_baudrate": 921600, "autopilot_mission_delay_start": -1, "autopilot_mission_delay_sound": false, "autopilot_mission_force_restart": 0, "autopilot_mission_notif_dur": 0.1, "en_external_ap_timesync": 1, "en_external_ap_heartbeat": 1, "udp_mtu": 500, "gcs_timeout_s": 4.5 } -
I do not have a Windows computer handy so cannot really try Mission Planner. I tried to recreate this with QGroundControl but don't see it. Can you try with QGroundControl just to see what happens? Does it look like the 'systemctl restart voxl-ardupilot' is working reliably?
-
Can you try upgrading to the latest VOXL SDK to see if that helps?
-
What if you disconnect Mission Planner before trying the voxl-ardupilot restart?
-
I do not have a Windows computer handy so cannot really try Mission Planner. I tried to recreate this with QGroundControl but don't see it. Can you try with QGroundControl just to see what happens? Does it look like the 'systemctl restart voxl-ardupilot' is working reliably?
I do not have a Windows computer handy so cannot really try Mission Planner. I tried to recreate this with QGroundControl but don't see it. Can you try with QGroundControl just to see what happens? Does it look like the 'systemctl restart voxl-ardupilot' is working reliably?
stemctl restart voxl-ardupilot does work, this is our normal solution for this issue. We don't use QGC, will have to install it to test.
What if you disconnect Mission Planner before trying the voxl-ardupilot restart?
Mentioned this in my post, we've tried this, but it does not change the behavior.
Can you try upgrading to the latest VOXL SDK to see if that helps?
Right now we can't get the FLIR Hadron 640 to work on any other SDK.
-
I'll probably have to recreate this and then debug it. I won't be able to do that until I get back from travel the week after next. Here's something from Codex that you could try:
With Mission Planner closed, add this to its config.xml: <UseMavFtpParams>False</UseMavFtpParams> Then restart Mission Planner and repeat the exact sequence. This forces the legacy MAVLink parameter protocol instead of the packed MAVFTP download. Interpretation: - Failure disappears: strongly implicates MAVFTP burst traffic and the QURT/SLPI backpressure path. - Failure remains: investigate the broader reconnect/SLPI lifecycle rather than MAVFTP specifically. - QGroundControl works consistently: also supports the Mission Planner MAVFTP-trigger theory, though it would not prove MP is defective. -
My only guess at this point is that it may be timing related. I would try each step, wait a long time, then try the next step. Maybe something is taking too long and the system is not yet ready for the next step. But that's just a guess.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login