ModalAI Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login
    1. Home
    2. qt
    Q
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 4
    • Best 0
    • Controversial 0
    • Groups 0

    qt

    @qt

    0
    Reputation
    1
    Profile views
    4
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    qt Unfollow Follow

    Latest posts made by qt

    • RE: PX4 -> QGC connection through USB for VOXL2

      The readme to help you use my scripts :

      ./readme.md :

      # VOXL USB NCM Setup for ModalAI Starling 2 Max
      
      ## Context & Objective
      
      > This repository provides scripts and configuration files to enable **USB NCM** (Network Control Model) networking between a **ModalAI Starling 2 Max** drone and a **Linux PC**.
      The goal is to transfer files faster than **Wi-Fi** or **ADB**, using a direct USB Ethernet link. **USB NCM** creates a virtual Ethernet interface over USB, allowing high-speed IP communication for **SSH**, `rsync`, or other tools.
      
      ---
      
      ## Features
      
      Automatic configuration of USB NCM on both drone and PC.
      Systemd services to persist configuration across reboots.
      NetworkManager drop-in to prevent interference on the PC.
      IP addressing and MTU tuning for optimal performance.
      
      ## Installation
      
      Run the orchestrator script from the root of this repository:
      
      ```bash
      chmod +x config-voxl-usb-ncm.sh # Already executable normally
      ./config-voxl-usb-ncm.sh
      

      Options

      • --pc : Configure only the PC.
      • --drone : Configure only the drone (requires adb).
      • --uninstall : Stops and disables services, removes scripts, and cleans NetworkManager configuration.

      Exemples

      # Install on both PC and drone
      ./config-voxl-usb-ncm.sh
      
      # Install only on PC
      ./config-voxl-usb-ncm.sh --pc
      
      # Install only on drone
      ./config-voxl-usb-ncm.sh --drone
      
      # Uninstall everything
      ./config-voxl-usb-ncm.sh --uninstall
      
      # Uninstall only on PC
      ./config-voxl-usb-ncm.sh --pc --uninstall
      
      # Uninstall only on drone
      ./config-voxl-usb-ncm.sh --drone --uninstall
      
      

      Configuration Details

      • IP Addresses
        • Drone: 10.55.0.1/30 on usb0
        • PC: 10.55.0.2/30 on enx* (USB Ethernet interface)
      • MTU
        • Default: 1500 (After some tests, 1500 seems to be the maximum for NCM in USB2.1)
      • Systemd Services
        • Drone: voxl-usb-ncm.service (oneshot, sets up USB gadget and configures usb0)
        • PC: voxl-usb-ncm.service (persistent, monitors enx* and configures IP)
      • NetworkManager
        • Adds /etc/NetworkManager/conf.d/unmanaged.conf which prevents NetworkManager from interfering with the USB interface.

      How to Connect

      Once installed and both devices are connected via USB:

      # It will ask password
      ssh root@10.55.0.1
      
      # We can put the password in parameter by using sshpass.
      # By default, the password on the drone is oelinux123.
      sshpass -p oelinux123 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@10.55.0.1
      

      File Transfer with rsync

      # Example to copy a folder from PC to drone:
      rsync -ah --info=progress2 --partial --inplace /path/to/local/folder root@10.55.0.1:/path/on/drone/
      
      # Example to copy a folder from drone to pc:
      rsync -ah --info=progress2 --partial --inplace root@10.55.0.1:/path/to/drone/folder /path/on/pc
      

      File Overview

      • File : on_drone/voxl-usb-ncm-setup.sh
        • Destination : /usr/local/sbin/ on drone
        • Purpose : Creates USB gadget NCM function, configures usb0 with IP 10.55.0.1/30 and MTU
      • File : on_drone/voxl-usb-ncm.service
        • Destination : /etc/systemd/system/ on drone
        • Purpose : Runs setup script at boot (oneshot)
      • File : on_pc/voxl-usb-ncm-setup.sh
        • Destination : /usr/local/sbin/ on PC
        • Purpose : Monitors enx* interface, assigns IP 10.55.0.2/30
      • File : on_pc/voxl-usb-ncm.service
        • Destination : /etc/systemd/system/ on PC
        • Purpose : Starts monitoring script at boot
      • File : on_pc/unmanaged.conf
        • Destination : /etc/NetworkManager/conf.d/
        • Purpose : Marks enx* interfaces as unmanaged
      • File : config-voxl-usb-ncm.sh
        • Purpose : Orchestrates installation/uninstallation on PC and drone
      posted in Ask your questions right here!
      Q
      qt
    • RE: PX4 -> QGC connection through USB for VOXL2

      To enable the NCM gadget on drone (an ethernet over usb protocol), I created a systemclt service on the drone and on the PC.
      That's not perfect, but in my case with my pc ubuntu it works. I can use the usb-c wire to communicate with the drone via NCM protocol. I did that to have a better data rate and it is the case since I have now 40 M Bytes/s.

      I can't share files but here are the code blocks without any warranty. I hope it can help (sorry for the very long message :)) :

      ./config-voxl-usb-ncm.sh

      #!/usr/bin/env bash
      set -euo pipefail
      
      # Minimal orchestrator for PC and Drone install/uninstall.
      # - PC: installs systemd service, setup script, and NetworkManager drop-in
      # - Drone: pushes files via adb and enables systemd service
      # FLAGS:
      #   --pc        Only operate on the PC
      #   --drone     Only operate on the drone (via adb)
      #   --uninstall Uninstall instead of install
      #
      # Defaults: if neither --pc nor --drone is provided, both are processed.
      
      ROOT_DIR="$(dirname "$(realpath "$0")")"
      ON_PC_DIR="${ROOT_DIR}/on_pc"
      ON_DRONE_DIR="${ROOT_DIR}/on_drone"
      
      SERVICE="voxl-usb-ncm.service"
      SETUP="voxl-usb-ncm-setup.sh"
      
      
      show_help() {
          echo "Usage: $0 [OPTION]"
          echo
          echo "Minimal orchestrator for PC and Drone install/uninstall."
          echo "- PC: installs systemd service, setup script, and NetworkManager drop-in"
          echo "- Drone: pushes files via adb and enables systemd service"
          echo
          echo "Options:"
          echo "  --pc           Install configuration on PC only"
          echo "  --drone        Install configuration on Drone only (requires adb)"
          echo "  --uninstall    Remove configuration from both PC and Drone"
          echo "  --help         Show this help message"
          echo
          echo "Examples:"
          echo "  $0             Install on both PC and Drone"
          echo "  $0 --pc        Install only on PC"
          echo "  $0 --uninstall Remove all configuration"
      }
      
      do_pc_install() {
        echo "[INFO][PC] Installing setup script..."
        sudo install -m 0755 "${ON_PC_DIR}/${SETUP}" /usr/local/sbin/
      
        echo "[INFO][PC] Installing systemd service..."
        sudo install -m 0644 "${ON_PC_DIR}/${SERVICE}" /etc/systemd/system/
      
        echo "[INFO][PC] Reloading systemd and enabling service..."
        sudo systemctl daemon-reload
        sudo systemctl enable --now "${SERVICE}"
      
        echo "[INFO][PC] Adding NetworkManager unmanaged config..."
        sudo install -d -m 0755 /etc/NetworkManager/conf.d
        sudo install -m 0644 "${ON_PC_DIR}/unmanaged.conf" /etc/NetworkManager/conf.d/
      
        echo "[INFO][PC] Restarting NetworkManager..."
        sudo systemctl restart NetworkManager
      
        echo "[INFO][PC] Install complete."
      }
      
      do_pc_uninstall() {
        echo "[INFO][PC] Uninstalling..."
        sudo systemctl disable --now "${SERVICE}" || true
        sudo rm -f /etc/systemd/system/"${SERVICE}"
        sudo rm -f /usr/local/sbin/${SETUP}
        sudo rm -f /etc/NetworkManager/conf.d/unmanaged.conf
        sudo systemctl daemon-reload
        sudo systemctl restart NetworkManager
        echo "[INFO][PC] Uninstall complete."
      }
      
      do_drone_install() {
        echo "[INFO][DRONE] Preparing adb (root + remount)..."
        adb root
        adb remount
      
        echo "[INFO][DRONE] Pushing setup script..."
        adb push "${ON_DRONE_DIR}/${SETUP}" /data/local/tmp/${SETUP}
        adb shell "mkdir -p /usr/local/sbin && cp /data/local/tmp/${SETUP} /usr/local/sbin/ && chmod 0755 /usr/local/sbin/${SETUP}"
      
        echo "[INFO][DRONE] Pushing systemd service..."
        adb push "${ON_DRONE_DIR}/${SERVICE}" /data/local/tmp/${SERVICE}
        adb shell "cp /data/local/tmp/${SERVICE} /etc/systemd/system/${SERVICE} && chmod 0644 /etc/systemd/system/${SERVICE}"
      
        echo "[INFO][DRONE] Enabling service..."
        adb shell "systemctl daemon-reload && systemctl enable --now ${SERVICE}"
      
        echo "[INFO][DRONE] Install complete."
      }
      
      do_drone_uninstall() {
        echo "[INFO][DRONE] Uninstalling..."
        adb root
        adb remount
        adb shell "systemctl disable --now ${SERVICE} || true"
        adb shell "rm -f /etc/systemd/system/${SERVICE} /usr/local/sbin/${SETUP} || true"
        adb shell "systemctl daemon-reload"
        echo "[INFO][DRONE] Uninstall complete."
      }
      
      
      # Arg parsing
      TARGET_PC=false
      TARGET_DRONE=false
      DO_UNINSTALL=false
      
      for arg in "$@"; do
        case "$arg" in
          --help) show_help; exit 0 ;;
          --pc) TARGET_PC=true ;;
          --drone) TARGET_DRONE=true ;;
          --uninstall) DO_UNINSTALL=true ;;
          *)
            echo "[ERROR] Unknown argument: $arg";
            show_help;
            exit 1 ;;
        esac
      done
      
      # Default to both if none selected
      if ! $TARGET_PC && ! $TARGET_DRONE; then
        TARGET_PC=true
        TARGET_DRONE=true
      fi
      
      # Execute
      if $DO_UNINSTALL; then
        $TARGET_PC && do_pc_uninstall
        $TARGET_DRONE && do_drone_uninstall
      else
        $TARGET_PC && do_pc_install
        $TARGET_DRONE && do_drone_install
      fi
      
      echo "[INFO] All done."
      

      ./on_drone/voxl-usb-ncm-setup.sh

      #!/bin/bash
      
      # ──────────────────────────────────────────────────────────────────────────────
      # Variables
      # ──────────────────────────────────────────────────────────────────────────────
      PTH_USB="/sys/kernel/config/usb_gadget/g1"
      PTH_USB_CONF="$PTH_USB/configs/c.1"
      PTH_USB_NCM="$PTH_USB/functions/ncm.0"
      
      # Network point-to-point USB NCM
      DRONE_IP_CIDR="${DRONE_IP_CIDR:-10.55.0.1/30}" # IP/mask drone usb0
      MTU="${MTU:-1500}"                             # After some tests, 1500 seems to be the maximum for NCM in USB2.1
      
      # ──────────────────────────────────────────────────────────────────────────────
      log(){ echo "[voxl-usb-ncm] $*"; }
      
      for i in {1..20}; do
        if [ -d "$PTH_USB" ] && [ -d "$PTH_USB_CONF" ]; then
          break
        fi
        [ $i -eq 1 ] && log "Wait configfs/gadget…"
        sleep 0.5
      done
      [ -d "$PTH_USB" ]  || { log "Don't find gadget $PTH_USB"; exit 1; }
      [ -d "$PTH_USB_CONF" ] || { log "Don't find config $PTH_USB_CONF"; exit 1; }
      
      # Create NCM function if it doesn't exist
      [ -d "$PTH_USB_NCM" ] || mkdir -p "$PTH_USB_NCM"
      
      # Link NCM function to USB gadget config if it's not already done
      if [ ! -L "$PTH_USB_CONF/ncm" ]; then
        log "Symlink NCM → config"
        ln -s "$PTH_USB_NCM" "$PTH_USB_CONF/ncm"
      fi
      
      # Update USB gadget to take into account the new NCM function
      echo "" > "$PTH_USB/UDC"
      
      check_usb0="ip link show usb0 > /dev/null 2>&1"
      if ! eval "$check_usb0"; then
          sleep 0.5
          if ! eval "$check_usb0"; then
              log "usb0 doesn't exist after NCM setup"
              exit 1
          fi
      fi
      log "usb0 added successfully after NCM setup"
      
      # Config network usb0 (idempotente)
      log "Configuration network usb0: $DRONE_IP_CIDR (mtu=$MTU)"
      ip link set usb0 up || true
      ip addr flush dev usb0 || true
      ip addr add "$DRONE_IP_CIDR" dev usb0
      ip link set usb0 mtu "$MTU" || true
      
      # Small TCP optimisations
      [ -w /proc/sys/net/ipv4/tcp_mtu_probing ] && echo 1 > /proc/sys/net/ipv4/tcp_mtu_probing || true
      [ -w /proc/sys/net/core/rmem_max ] && echo 16777216 > /proc/sys/net/core/rmem_max || true
      [ -w /proc/sys/net/core/wmem_max ] && echo 16777216 > /proc/sys/net/core/wmem_max || true
      
      log "USB NCM configuration done !"
      exit 0
      

      ./on_drone/voxl-usb-ncm.service

      [Unit]
      Description=VOXL USB NCM setup (add NCM function and bring up usb0)
      After=multi-user.target sys-kernel-config.mount
      Requires=sys-kernel-config.mount
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/usr/local/sbin/voxl-usb-ncm-setup.sh
      
      [Install]
      WantedBy=multi-user.target
      

      ./on_pc/unmanaged.conf

      [keyfile]
      unmanaged-devices=interface-name:enx*
      

      ./on_pc/voxl-usb-ncm-setup.sh

      #!/bin/bash
      
      IP="10.55.0.2/30"
      CONFIGURED_IFACE=""
      LOGGER_TAG="[voxl-usb-ncm]"
      
      log() {
        /usr/bin/logger -t "$LOGGER_TAG" "$1"
      }
      
      log "Service started"
      
      while true; do
        IFACE=$(ls /sys/class/net | grep '^enx' | head -n1)
        if [ -n "$IFACE" ]; then
          if [ "$IFACE" != "$CONFIGURED_IFACE" ]; then
            log "Detected new interface: $IFACE"
            /usr/sbin/ip addr flush dev "$IFACE" || log "Failed to flush IP addresses on $IFACE"
            /usr/sbin/ip addr add "$IP" dev "$IFACE" || log "Failed to assign IP $IP to $IFACE"
            /usr/sbin/ip link set "$IFACE" up || log "Failed to bring up $IFACE"
            /usr/sbin/ip route del default dev "$IFACE" 2>/dev/null || log "No default route to delete for $IFACE"
            log "Configured $IFACE with $IP"
            CONFIGURED_IFACE="$IFACE"
          fi
        else
          if [ -n "$CONFIGURED_IFACE" ]; then
            log "Interface $CONFIGURED_IFACE disconnected"
          fi
          CONFIGURED_IFACE=""
        fi
        sleep 2
      done
      

      ./on_pc/voxl-usb-ncm.service

      [Unit]
      Description=Watch for USB NCM interface and configure it
      After=network.target
      ConditionPathExists=/usr/local/sbin/voxl-usb-ncm-setup.sh
      
      [Service]
      Type=simple
      ExecStart=/usr/local/sbin/voxl-usb-ncm-setup.sh
      Restart=always
      RestartSec=2
      
      [Install]
      WantedBy=multi-user.target
      
      posted in Ask your questions right here!
      Q
      qt
    • Time Of Flight (TOF) camera output FPS divided by 5 after upgrading from SDK 1.5.0 to SDK 1.6.3 (Starling2 Max C29)

      I would like to report a probable bug related to the TOF camera on my Starling 2 Max (configuration C29).
      I was previously running SDK 1.5.0, and the TOF camera was operating correctly at the frame rate specified in the file "/etc/modalai/voxl-camera-server.conf".
      I recently upgraded from SDK 1.5.0 to SDK 1.6.3 (I didn't try other SDK versions).
      Since then, the TOF camera runs at a frequency divided by 5. I tested this using the CLI inspection tool with the command "voxl-inspect-cam tof_depth" for different FPS values (same results in VOXL-Portal). I have not changed anything on the drone except the "fps" parameter in the configuration file "/etc/modalai/voxl-camera-server.conf".
      Here is my TOF camera configuration:

      "type": "pmd-tof-liow2",
      "name": "tof",
      "enabled":      true,
      "camera_id":    3,
      "fps":  10,
      "en_rotate":    true,
      "ae_mode":      "off",
      "gain_min":     0,
      "gain_max":     0,
      "exposure_max_us":      6000,
      "standby_enabled":      false,
      "decimator":    5
      

      Here are the results from "voxl-inspect-cam tof_depth" for different FPS values:

      fps = 5
      | Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
      | tof_depth |   43200 |  180 |  240 | 48.00 |    0 |       26 |     28.1  |  1.0 |    0.3 | RAW8
      
      fps = 10
      | Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
      | tof_depth |   43200 |  180 |  240 | 24.00 |    0 |       28 |     27.2  |  2.0 |    0.7 | RAW8
      
      fps = 15
      | Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
      | tof_depth |   43200 |  180 |  240 | 16.00 |    0 |       16 |     28.6  |  3.0 |    1.0 | RAW8
      
      fps = 20
      | Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
      | tof_depth |   43200 |  180 |  240 | 12.00 |    0 |       21 |     27.8  |  4.0 |    1.4 | RAW8
      
      fpx = 30
      | Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
      | tof_depth |   43200 |  180 |  240 |  8.00 |    0 |       13 |     26.8  |  6.0 |    2.1 | RAW8
      
      fps = 60
      | Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
      | tof_depth |   43200 |  180 |  240 |  4.00 |    0 |      288 |     10.0  | 12.0 |    4.1 | RAW8
      
      
      fps = (8, 12, 25, 35, 40, 45, 50, 65, 70, 75, 80, 85, 90, 100, 120, 135, 140, 150, 180)
      
      | Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
      | tof_depth | Server Disconnected
      
      

      Looking at the code in "src/hal3_camera_mgr.cpp", it seems expected that other frame rates do not work anymore. Here is the relevant section:

      if (configInfo.type == SENSOR_TOF){
          if (configInfo.fps != 5 && configInfo.fps != 10 && configInfo.fps != 15 && configInfo.fps != 30 && configInfo.fps != 45){
              M_ERROR("Invalid TOF framerate: %d, must be either 5, 10, 15, 30, or 45\n", configInfo.fps);
              return -1;
          }
      }
      
      if (configInfo.type == SENSOR_TOF_LIOW2){
          if (configInfo.fps != 5 && configInfo.fps != 10 && configInfo.fps != 15 && configInfo.fps != 20 && configInfo.fps != 30 && configInfo.fps != 60){
              M_ERROR("Invalid TOF framerate: %d, must be either 5, 10, 15, 20, 30, or 60\n", configInfo.fps);
              return -1;
          }
      }
      

      Below are the full version details for SDK 1.6.3 (where the issue occurs):

      voxl2:~$ 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:          MRB-D0012-4-V2-C29-T9-M28-X0
      ────────────────────────────────────────────────────────────────────────────────
      voxl-suite:   1.6.3
      ────────────────────────────────────────────────────────────────────────────────
      Packages:
      Repo:  http://voxl-packages.modalai.com/ ./dists/qrb5165/sdk-1.6/binary-arm64/
      Last Updated: 2026-03-09 17:52:53
      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.2
      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-bind-spektrum             0.1.1
      voxl-camera-calibration        0.6.1
      voxl-camera-server             2.2.19
      voxl-cassie-ros2               0.0.1
      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.6
      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-r0
      ────────────────────────────────────────────────────────────────────────────────
      

      Below are the full version details for SDK 1.5.0 (where the TOF camera worked as expected):

      ────────────────────────────────────────────────────────────────────────────────
      system-image: 1.8.04-M0054-14.1a-perf
      kernel:       #1 SMP PREEMPT Mon Mar 24 22:31:58 UTC 2025 4.19.125
      ────────────────────────────────────────────────────────────────────────────────
      hw platform:  M0054
      mach.var:     1.0.1
      SKU:          MRB-D0012-4-V2-C29-T9-M28-X0
      ────────────────────────────────────────────────────────────────────────────────
      voxl-suite:   1.5.0
      ────────────────────────────────────────────────────────────────────────────────
      Packages:
      Repo:  http://voxl-packages.modalai.com/ ./dists/qrb5165/sdk-1.5/binary-arm64/
      Last Updated: 2026-02-05 12:12:50
      List:
      libfc-sensor                1.0.7
      libmodal-cv                 0.5.18
      libmodal-exposure           0.1.4
      libmodal-journal            0.2.6
      libmodal-json               0.4.7
      libmodal-pipe               2.13.2
      libqrb5165-io               0.5.0
      libvoxl-cci-direct          0.3.3
      libvoxl-cutils              0.1.5
      modalai-slpi                1.2.0
      mv-voxl                     0.1-r0
      qrb5165-bind                0.1-r0
      qrb5165-dfs-server          0.2.0
      qrb5165-imu-server          1.1.3
      qrb5165-mini-tof-server     0.2.2
      qrb5165-rangefinder-server  0.1.5
      qrb5165-slpi-test-sig       01-r0
      qrb5165-system-tweaks       0.3.6
      qrb5165-tflite              2.8.0-2
      voxl-bind-spektrum          0.1.1
      voxl-camera-calibration     0.6.0
      voxl-camera-server          2.2.4
      voxl-cassie-ros2            0.0.1
      voxl-ceres-solver           2:1.14.0-10
      voxl-configurator           1.0.2
      voxl-cpu-monitor            0.6.0
      voxl-cross-template         0.0.1
      voxl-docker-support         1.3.1
      voxl-elrs                   0.4.7
      voxl-esc                    1.5.4
      voxl-feature-tracker        0.5.2
      voxl-flow-server            0.3.6
      voxl-gphoto2-server         0.0.10
      voxl-joystick-server        0.0.6
      voxl-jpeg-turbo             2.1.3-7
      voxl-lepton-server          1.3.3
      voxl-lepton-tracker         0.0.4
      voxl-libgphoto2             0.0.4
      voxl-libuvc                 1.0.7
      voxl-logger                 0.5.3
      voxl-mavcam-manager         0.6.0
      voxl-mavlink                0.1.5
      voxl-mavlink-server         1.4.9
      voxl-microdds-agent         3.0.0-0
      voxl-modem                  1.1.8
      voxl-mongoose               7.7.0-2
      voxl-mpa-to-ros             0.3.9
      voxl-mpa-tools              1.4.0
      voxl-open-vins              0.4.19
      voxl-open-vins-server       0.3.12
      voxl-opencv                 4.5.5-3
      voxl-osd                    0.1.8
      voxl-portal                 0.7.11
      voxl-px4                    1.14.0-2.0.105
      voxl-px4-params             0.7.5
      voxl-qvio-server            1.2.0
      voxl-remote-id              0.0.9
      voxl-reset-slpi             0.0.1
      voxl-ros2-humble            0.0.3
      voxl-state-estimator        0.0.5
      voxl-streamer               0.7.5
      voxl-suite                  1.5.0
      voxl-tag-detector           0.0.5
      voxl-tflite-server          0.4.1
      voxl-utils                  1.4.8
      voxl-uvc-server             0.1.7
      voxl-vision-hub             1.8.23
      voxl-vtx                    1.4.7
      voxl-wavemux                0.0.1
      voxl2-io                    0.0.3
      voxl2-system-image          1.8.04-r0
      voxl2-wlan                  1.0-r0
      ────────────────────────────────────────────────────────────────────────────────
      

      Between versions 2.2.4 and 2.2.19 of the "voxl-camera-server" repository, I extracted the commits that modified the file "src/hal3_camera_mgr.cpp":

      a7f5ea0 | 2025-12-10 | Eric Katzfey | Fixed the rest of the compiler warnings for the qrb5165-2 build
      aa7b12d | 2025-12-05 | Alex Kushleyev | fix boson buffer pre-allocation size - the extra allocation should only be done in raw preview mode
      f461dc0 | 2025-11-11 | Tom Martinson | Merge branch 'ar0144-rotate-encoded' into dev
      3189b6b | 2025-11-10 | Alex Kushleyev | add option to invert boson output via a command
      a3ac28e | 2025-11-10 | Tom Martinson | add new ar0144 rotated sensor type
      bfce3c3 | 2025-11-10 | Alex Kushleyev | move some misp init code from camera mgr to misp
      25fe9b6 | 2025-11-10 | Alex Kushleyev | load body to imu extrinsics from file
      5289342 | 2025-11-07 | Alex Kushleyev | remove hist ae option; add manual and auto=lme_msv
      a279e3d | 2025-11-06 | Jacob Camarillo | Remove unused OSD code
      51cceec | 2025-11-06 | Alex Kushleyev | fix the neutral point of UV in monochrome YUVs from 127 to 128 for mono images sent to encoder
      d1a9da8 | 2025-10-30 | Alex Kushleyev | Add an option to rotate AR0144 encoded video
      86e1476 | 2025-10-29 | Alex Kushleyev | enable buffer recycling and camera customer register reinit for recovery
      2b9816f | 2025-10-29 | Alex Kushleyev | Add boson 14bit support
      cda94c2 | 2025-10-09 | zauberflote | Enable misp in stereo config
      eeda888 | 2025-09-25 | Alex Kushleyev | enable rotation of imx412 and imx664 via en_rotate config option. using cci direct to set the readout direction
      52643e8 | 2025-09-17 | Alex Kushleyev | fix bayer publish stride; enable publishing bayer images via shared ion buffers
      2a2c14d | 2025-09-17 | Alex Kushleyev | Merge branch 'dev' into fix-encoder-dynamic-low-bitrate
      dd7565a | 2025-09-16 | james | v2.2.7 remove voxl-cpu-monitor as build dependency and some general cleanups
      a435e8c | 2025-09-08 | Alex Kushleyev | enable low fps to be set dynamically without having it set in the camera config (less than 1.5mbps for h264 and less than 3.0mbps for h265
      272fe47 | 2025-09-03 | Alex Kushleyev | add a test colormap for boson using _color stream
      1d81a46 | 2025-08-21 | Alex Kushleyev | fix pipe json for AR0144 Color from YUV to RGB
      51afcb4 | 2025-08-21 | Alex Kushleyev | only read camera calibration if eis is enabled; add option to disable AWB on individual misp channels; add hooks for using RGB images instead of YUV for AWB
      1c3e99e | 2025-08-14 | Alex Kushleyev | add imx214 misp supported resolutions
      2390f20 | 2025-07-30 | modaljc | enable boson misp encoded by default instead of boson small encoded
      50a27ba | 2025-07-30 | Alex Kushleyev | Merge branch 'dev' of gitlab.com:voxl-public/voxl-sdk/services/voxl-camera-server into dev
      bbc9b89 | 2025-07-30 | Alex Kushleyev | add boson support to MISP; fix real-time fps control
      96c6a0d | 2025-07-22 | james | v2.2.5 fix stereo cam pair going out of sync due to too high of an allowed discrepancy
      055e11a | 2025-06-16 | Alex Kushleyev | clean up before merge to dev
      effc3e8 | 2025-06-12 | Alex Kushleyev | add eis params and minor cleanup
      

      @Alex-Kushleyev and modalai team, what can I do to fix that ?
      Let me know if you need additional logs or tests.
      Thanks in advence

      posted in Support Request Format for Best Results
      Q
      qt
    • RE: Poor GPS Fix

      Hello everyone,

      We’ve been following this discussion with great interest — especially the insights about the mast kit and the copper shielding solution. We also tried similar approaches on our side and wanted to share our results to contribute to the thread.

      We purchased four Starling 2 Max drones for our project at the beginning of the year, and like others here, we are experiencing difficulties with GPS stability outdoors. To mitigate interference, we designed and 3D-printed our own GPS mount to move the antenna away from the main body, and we added a copper shielding layer around it.

      We then tested the u-blox M10 GPS outside, under clear sky conditions, with the drone powered on (connected via Wi-Fi to use VOXL-Portal). Over about 10 minutes, the best observation we captured showed 18 satellites with an average SNR around 30–35 dB.
      vlcsnap-2025-07-25-14h33m43s700.png
      image474.png

      However, despite these results, we still cannot achieve a stable outdoor localization, which currently prevents us from flying the drones properly outside. At this point, we’re unsure whether the problem comes mainly from the GPS performance or possibly from the barometer.

      We’d really appreciate:

      • Being included in your support list for this GPS issue, since it affects multiple units on our side (as mentioned by @Alex-Kushleyev).
      • Any guidance or recommendations on how to debug further (extra shielding, hardware setup, barometer validation, software settings, etc.).

      Thanks a lot to the ModalAI team and to the community for the shared ideas — we hope our feedback helps others as well.

      Best regards,

      Quentin

      posted in PX4 Autonomy Developer Kit
      Q
      qt