Skip to content

PX4 Autonomy Developer Kit

21 Topics 141 Posts

Product related questions and answers

  • Poor GPS Fix

    23
    0 Votes
    23 Posts
    11k Views
    Luis CarpiL
    For the past two years, I've made a living designing and integrating VOXL2-based systems for clients across Europe. In many cases, I've demonstrated autonomous flight capabilities to customers only to later recommend that they move away from the platform. I've even rebuilt equivalent systems at roughly 30–40% of the cost while delivering many of the same capabilities and, in some cases, a more reliable development experience. Ironically, a significant portion of my business exists because of the problems I've had to solve within the VOXL2 ecosystem. If you're considering VOXL2 for research or commercial work, I would strongly encourage you to carefully evaluate the platform before committing to it. Until ModalAI demonstrates a stronger commitment to documentation, software quality, hardware quality control, and customer support, I believe there are better alternatives for most developers. The following are the most consistent issues I've encountered. 1. Outdated and Incomplete Documentation Much of the documentation is outdated, incomplete, or simply incorrect. This creates a frustrating development experience where AI language models, developers, and even experienced robotics engineers are all relying on inaccurate information—not because the tools are wrong, but because the official documentation is. The result is wasted engineering time, unnecessary debugging, and teams losing confidence in otherwise competent engineers who end up chasing problems that originate from incorrect documentation rather than their own mistakes. 2. Quality Control Problems I've encountered multiple instances of hardware being shipped with incorrect labeling or configuration. The most surprising example was ESC boards intended for 4S batteries being labeled as 6S versions, and vice versa. Mistakes of this nature should never pass quality control. What was even more disappointing was the response. Rather than issuing a recall or offering replacements, I was effectively told to live with the problem. I shared that experience with my clients, and it ultimately contributed to the cancellation of an order for ten additional units. Poor customer support doesn't just damage individual relationships—it costs future business. 3. Weak Peripheral Ecosystem The surrounding hardware ecosystem feels underdeveloped for a premium platform. GPS shielding is inadequate, and many of the peripherals appear to be low-cost outsourced components with inconsistent quality. Signal integrity and EMI-related issues occur far more frequently than they should at this price point. 4. Thermal Design and Open-Source Accessibility One of the more surprising design decisions is that the Qualcomm compute board ships without active cooling. The apparent assumption is that propeller wash during flight will provide sufficient airflow. That may be true under ideal conditions, but it overlooks how many developers actually use the platform. Bench testing, indoor development, simulation, calibration, and autonomous software development often involve long periods where the aircraft is powered but stationary. I have a fan blowing into it but the device needs to have a cpu fan anyway. Developers coming from more traditional PX4 companion computer architectures also don't expect CPU temperatures to directly influence flight performance, because those systems typically separate the flight controller from the companion computer. On VOXL2, thermal throttling can become part of the flight stack's behavior, which is not obvious to new users. Compounding this issue is the difficulty of navigating ModalAI's platform-specific source code. While ModalAI works closely with PX4, locating and understanding the relevant code paths is far more difficult than it should be. This makes debugging platform-specific behavior unnecessarily time-consuming. 5. Confusing Feature Organization Several features behave in ways that are poorly documented or unintuitive. A common example is Vision Hub, where enabling certain functionality can unexpectedly cause the aircraft to fly a figure-eight trajectory as on by default. While there may be technical reasons for this behavior, they are not communicated clearly enough, leaving many users wondering whether they have misconfigured the system. Because a take off leads toe a fly away which makes the user think the PX4 paramers are incorrect when really they just left a demo code on in their system. 6. Non-Standard ESC Calibration The VOXL ESC calibration process differs significantly from standard PX4 workflows. As a result, it is often unclear whether calibration has completed successfully or whether changes have actually propagated through the PX4 stack. This ambiguity complicates troubleshooting and increases development time. 7. Excessive Platform-Specific Customization ModalAI has introduced a significant number of custom modifications to the PX4 ecosystem. While customization isn't inherently bad, many of these changes make the platform harder to understand, maintain, and debug. Instead of benefiting from the familiarity of standard PX4 workflows, developers frequently have to learn ModalAI-specific behaviors that add complexity without delivering proportional value. 8. Proprietary Cable Ecosystem The shielded 22-pin coax FFC cables are sold without publicly available pinout documentation. As a result, customers are forced to purchase expensive replacement cables instead of fabricating or repairing what is, in reality, a relatively inexpensive component. Publishing the pinout would save customers time and money without negatively impacting the platform. I could continue, but these are the recurring issues I encounter across professional deployments. If your goal is to make meaningful progress in research or commercial development, I believe most teams are better served by alternative platforms. If you choose to use VOXL2, I would recommend limiting it to the areas where it genuinely excels—primarily as a companion computer for its four-camera multiplexer and out of the box deployment of open vins. That is their business moat and for the drones mentioned above I spent 80% of my time having to do charge the client to solve this problem. The difference is i use parts at 50% the cost and make profit because I spend more time listening to the needs of my client and fostering relationship with other companies to foster a collaborative environment in the ecosystem of engineering development. Even then, I'm not convinced it represents good value. The weight savings rarely justify the cost, particularly as newer, lighter companion computers continue to emerge with more open software stacks, better documentation, and a significantly more developer-friendly ecosystem. None of these criticisms are impossible to fix. Most are engineering, documentation, or customer support issues rather than fundamental hardware limitations. However, until those issues are addressed, I find it difficult to recommend VOXL2 for anything beyond niche use cases. EMI Shielding on the device is very poor. This is by design
  • voxl-mapper alternative

    1
    0 Votes
    1 Posts
    816 Views
    No one has replied
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    15 Views
    No one has replied
  • Alternative batteries

    1
    0 Votes
    1 Posts
    761 Views
    No one has replied
  • Zenoh on voxl-2

    3
    0 Votes
    3 Posts
    2k Views
    voxl-phoenixV
    @Beniamino-Pozzan Thank you so much for the info, I wanted to try it and realised foxy has no support and with Ubuntu 18.04 on voxl-2 it is not possible to use any other ROS-2 installations easily. I will use ros2 plugin by keeping microdds as default middleware. I hope newer ROS versions will be available for VOXL-2.
  • voxl-px4 build error

    4
    0 Votes
    4 Posts
    2k Views
    R
    Hi @Eric-Katzfey yes, i can see lrwxrwxrwx 1 1000 1000 7 Feb 11 16:00 hexagon-link -> ld.qcld and also -rw-rw-rw- 1 1000 1000 46687200 Feb 11 16:00 ld.qcld So it seems " ld.qcld'" is not executable. then I made it executable using. "chmod +x /home/4.1.0.4/tools/HEXAGON_Tools/8.4.05/Tools/bin/ld.qcld" Then, it seems the voxl-PX4 build is working. Thank you for the help. root@798402fd070f:/usr/local/workspace# ./build.sh *** Starting build *** Setting up the Hexagon SDK environment locally HEXAGON_SDK_ROOT is : /home/4.1.0.4 Setting up the QAIC binary for the platform make: Entering directory '/home/4.1.0.4/ipc/fastrpc/qaic' make: 'bin/qaic' is up to date. make: Leaving directory '/home/4.1.0.4/ipc/fastrpc/qaic' Could not find Androd ndk at /home/4.1.0.4/tools/android-ndk-r19c Please refer to /home/4.1.0.4/docs/tools/setup.html for installing the missed components *** Starting dependencies build *** -- The C compiler identification is GNU 7.5.0 -- The CXX compiler identification is GNU 9.4.0 -- Check for working C compiler: /home/4.1.0.4/tools/linaro64/bin/aarch64-linux-gnu-gcc -- Check for working C compiler: /home/4.1.0.4/tools/linaro64/bin/aarch64-linux-gnu-gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: /usr/local/workspace/px4-firmware/boards/modalai/voxl2/libfc-sensor-api/build Scanning dependencies of target fc_sensor [ 50%] Building C object CMakeFiles/fc_sensor.dir/src/fc_sensor_stub.c.o [100%] Linking C shared library libfc_sensor.so [100%] Built target fc_sensor *** End of dependencies build *** *** Starting apps processor build *** -- PX4 version: v1.14.0-2.0.94-dev (1.14.0) -- Found PythonInterp: /usr/bin/python3 (found suitable version "3.8.10", minimum required is "3") -- PX4 config file: /usr/local/workspace/px4-firmware/boards/modalai/voxl2/default.px4board -- PLATFORM posix -- LINUX_TARGET y -- TOOLCHAIN aarch64-linux-gnu -- ROMFSROOT px4fmu_common -- ROOTFSDIR /data/px4 -- PX4 config: modalai_voxl2_default -- PX4 platform: posix -- PX4 lockstep: disabled -- The CXX compiler identification is GNU 7.5.0 -- The C compiler identification is GNU 7.5.0 -- The ASM compiler identification is GNU -- Found assembler: /home/4.1.0.4/tools/linaro64/bin/aarch64-linux-gnu-gcc -- Check for working CXX compiler: /home/4.1.0.4/tools/linaro64/bin/aarch64-linux-gnu-g++ -- Check for working CXX compiler: /home/4.1.0.4/tools/linaro64/bin/aarch64-linux-gnu-g++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Check for working C compiler: /home/4.1.0.4/tools/linaro64/bin/aarch64-linux-gnu-gcc -- Check for working C compiler: /home/4.1.0.4/tools/linaro64/bin/aarch64-linux-gnu-gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- cmake build type: RelWithDebInfo -- ccache enabled (export CCACHE_DISABLE=1 to disable) -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/drivers/linux_pwm_out/module.yaml for VOXL2 -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/drivers/pca9685_pwm_out/module.yaml for VOXL2 -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/drivers/pwm_out/module.yaml for VOXL2 -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/modules/simulation/pwm_out_sim/module_hil.yaml for VOXL2 -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/modules/simulation/pwm_out_sim/module_sim.yaml for VOXL2 -- ROMFS: ROMFS/px4fmu_common Architecture: amd64 ==> CPACK_INSTALL_PREFIX = @DEB_INSTALL_PREFIX@ -- Configuring done -- Generating done -- Build files have been written to: /usr/local/workspace/px4-firmware/build/modalai_voxl2_default [0/562] git submodule src/modules/microdds_client/Micro-XRCE-DDS-Client [2/562] git submodule src/drivers/gps/devices [6/562] git submodule src/modules/mavlink/mavlink [64/562] Performing configure step for 'libmicroxrceddsclient_project' -- libmicroxrceddsclient_project configure command succeeded. See also /usr/local/workspace/px4-firmware/build/modalai_voxl2_default/src/modules/microdds_client/src/libmicroxrceddsclient_project-stamp/libmicroxrceddsclient_project-configure-*.log [555/562] Performing build step for 'libmicroxrceddsclient_project' -- libmicroxrceddsclient_project build command succeeded. See also /usr/local/workspace/px4-firmware/build/modalai_voxl2_default/src/modules/microdds_client/src/libmicroxrceddsclient_project-stamp/libmicroxrceddsclient_project-build-*.log [556/562] Performing install step for 'libmicroxrceddsclient_project' -- libmicroxrceddsclient_project install command succeeded. See also /usr/local/workspace/px4-firmware/build/modalai_voxl2_default/src/modules/microdds_client/src/libmicroxrceddsclient_project-stamp/libmicroxrceddsclient_project-install-*.log [562/562] Linking CXX executable bin/px4 /* Auto Magically Generated file */ /* Do not edit! */ #pragma once #define PX4_GIT_VERSION_STR "5e6a8c257371b6c45e55662daac5fe9fbd08040b" #define PX4_GIT_VERSION_BINARY 0x5e6a8c257371b6c4 #define PX4_GIT_TAG_STR "v1.14.0-2.0.94-dev-dirty" #define PX4_GIT_BRANCH_NAME "" #define PX4_GIT_OEM_VERSION_STR "" #define PX4_GIT_TAG_OR_BRANCH_NAME "v1.14.0-2.0.94-dev-dirty" // special variable: git tag, release or master branch #define MAVLINK_LIB_GIT_VERSION_STR "3ee5382d0c96134b0e1c250d8c2d54bfed0166fa" #define MAVLINK_LIB_GIT_VERSION_BINARY 0x3ee5382d0c96134b #define NUTTX_GIT_VERSION_STR "3f77354c0dc88793a47ff3b57595195ab45f7ba9" #define NUTTX_GIT_VERSION_BINARY 0x3f77354c0dc88793 #define NUTTX_GIT_TAG_STR "v11.0.0" *** End of apps processor build *** *** Starting qurt slpi build *** -- PX4 version: v1.14.0-2.0.94-dev (1.14.0) -- Found PythonInterp: /usr/bin/python3 (found suitable version "3.8.10", minimum required is "3") -- PX4 config file: /usr/local/workspace/px4-firmware/boards/modalai/voxl2-slpi/default.px4board -- PLATFORM qurt -- TOOLCHAIN qurt -- ROMFSROOT px4fmu_common -- PX4 config: modalai_voxl2-slpi_default -- PX4 platform: qurt -- The CXX compiler identification is Clang 10.0.0 -- The C compiler identification is Clang 10.0.0 -- The ASM compiler identification is unknown -- Found assembler: /home/4.1.0.4/tools/HEXAGON_Tools/8.4.05/Tools/bin/hexagon-clang -- Check for working CXX compiler: /home/4.1.0.4/tools/HEXAGON_Tools/8.4.05/Tools/bin/hexagon-clang++ -- Check for working CXX compiler: /home/4.1.0.4/tools/HEXAGON_Tools/8.4.05/Tools/bin/hexagon-clang++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - failed -- Detecting CXX compile features -- Detecting CXX compile features - done -- Check for working C compiler: /home/4.1.0.4/tools/HEXAGON_Tools/8.4.05/Tools/bin/hexagon-clang -- Check for working C compiler: /home/4.1.0.4/tools/HEXAGON_Tools/8.4.05/Tools/bin/hexagon-clang -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - failed -- Detecting C compile features -- Detecting C compile features - done -- Warning: Did not find file Compiler/-ASM -- cmake build type: RelWithDebInfo -- ccache enabled (export CCACHE_DISABLE=1 to disable) -- Mavlink include directory: /usr/local/workspace/px4-firmware/../build/modalai_voxl2_default/mavlink/standard -- Mavlink include directory: /usr/local/workspace/px4-firmware/../build/modalai_voxl2_default/mavlink/common -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/drivers/linux_pwm_out/module.yaml for VOXL2 -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/drivers/pca9685_pwm_out/module.yaml for VOXL2 -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/drivers/pwm_out/module.yaml for VOXL2 -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/modules/simulation/pwm_out_sim/module_hil.yaml for VOXL2 -- Skipping pwm file path /usr/local/workspace/px4-firmware/src/modules/simulation/pwm_out_sim/module_sim.yaml for VOXL2 Architecture: amd64 ==> CPACK_INSTALL_PREFIX = @DEB_INSTALL_PREFIX@ -- Configuring done -- Generating done -- Build files have been written to: /usr/local/workspace/px4-firmware/build/modalai_voxl2-slpi_default [0/724] git submodule src/drivers/gps/devices [724/724] Linking CXX shared library platforms/qurt/libpx4.so /* Auto Magically Generated file */ /* Do not edit! */ #pragma once #define PX4_GIT_VERSION_STR "5e6a8c257371b6c45e55662daac5fe9fbd08040b" #define PX4_GIT_VERSION_BINARY 0x5e6a8c257371b6c4 #define PX4_GIT_TAG_STR "v1.14.0-2.0.94-dev-dirty" #define PX4_GIT_BRANCH_NAME "" #define PX4_GIT_OEM_VERSION_STR "" #define PX4_GIT_TAG_OR_BRANCH_NAME "v1.14.0-2.0.94-dev-dirty" // special variable: git tag, release or master branch #define MAVLINK_LIB_GIT_VERSION_STR "3ee5382d0c96134b0e1c250d8c2d54bfed0166fa" #define MAVLINK_LIB_GIT_VERSION_BINARY 0x3ee5382d0c96134b #define NUTTX_GIT_VERSION_STR "3f77354c0dc88793a47ff3b57595195ab45f7ba9" #define NUTTX_GIT_VERSION_BINARY 0x3f77354c0dc88793 #define NUTTX_GIT_TAG_STR "v11.0.0" *** End of qurt slpi build *** /usr/local/workspace User ID is 1000 Group ID is 1000 *** End of build *** root@798402fd070f:/usr/local/workspace# ls
  • GPS and VL53L1 not working

    3
    0 Votes
    3 Posts
    1k Views
    Eric KatzfeyE
    @jefersonsilva If you let it sit for a long time does it eventually find satellites and get a fix?
  • Spectrum SPM9545 binding

    3
    0 Votes
    3 Posts
    1k Views
    J
    @Eric-Katzfey Worked! Thanks a lot
  • Tips on how to control using Python?

    1
    0 Votes
    1 Posts
    755 Views
    No one has replied
  • SLAM and PX4 Autonomy Development Drone

    1
    0 Votes
    1 Posts
    899 Views
    No one has replied
  • voxl_esc tone bug and question

    8
    0 Votes
    8 Posts
    2k Views
    TjarkT
    @Alex-Kushleyev I tested it and it works nice (I didn't test the 255 but I expect that should work). I already figured that the frequencies are now multiples of 10Hz with some minimum value (I don't know which one but at least below -p 10 I don't hear the frequency drop anymore). So it ranges up to 2550Hz. And I think you also adjusted the duration to be multiples of 10ms to match with the format of the ESC parameters? Regarding the usage change, I understand if you don't want to create a breaking change. But I think it would be good when the print_usage matches with the actual use. It took me some trial and error to get it working. Maybe also an idea to use -f for the frequency because -p refers to period which is not correct anymore and it is now already changing the functionality of the tone generation (you could even let -p in it to keep it backwards compatible but that maybe makes it unnecessarily complicated). And also good to allow the ESC mapping to go up to 15. For us it is sufficient to use the startup tone. But I played around a little bit with the tone generation and if you use it using the qshell commands you need to wait the duration of the tone to send a new tone (as the qshell command immediately returns and it doesn't accept a command while the sound is still playing) which makes it difficult to get the timing right in playing a tune. I don't know what the end goal should be of this but if it is playing custom tunes using the commands this is something to keep in mind I think. I had some fun trying to play the Imperial March on the ESCs which kind of works but not as smooth as the startup sound can play.
  • Camera server keep crashing everytime it is launched

    25
    0 Votes
    25 Posts
    8k Views
    Alex KushleyevA
    @Jetson-Nano , OK it seems we have two parallel threads going. please see my reply to the other thread https://forum.modalai.com/topic/3688/vision-sensors-not-detected-in-voxl2 and test it step by step as I suggested (reducing fps of imx214 camera first, then disabling sensors one by one) Alex
  • Native Barometer and GPS height estimation bad

    5
    0 Votes
    5 Posts
    2k Views
    VinnyV
    HI @Jeffrey-Mao Another consideration for baro is active airflow. We typically provide a "cap" on our baros in our drones or flight-decks to ensure it is not exposed to sunlight (as Eric stated) but also active airflow which can show up like air pressure noise. Our 3D models repository has a 3D file of this cap, in this case for FlightCore to give you an example: https://storage.googleapis.com/modalai_public/modal_drawings/Flight_Core_Barometer_Cap.STEP Hope this helps.
  • lockstep HITL

    3
    0 Votes
    3 Posts
    1k Views
    W
    @Eric-Katzfey Thank you for such a quick response! Saved me a few hours down the wrong rabbit hole.
  • 0 Votes
    19 Posts
    5k Views
    ModeratorM
    @Stefan-Amundarain what do the flight logs tell you?
  • Starling gone rogue (uncontrollable) in Position flight mode

    8
    1 Votes
    8 Posts
    5k Views
    M
    @Eric-Katzfey Hi, The first change of flight mode to "Altitude" was because of the loss of control of pilot (see it from the "Manual Control Output") on the drone. This wasn't happened first time, I experienced the same before this flight too. The steps you provided aren't suitable, I can't do the flights like "Manual" and then verify everything everytime, this is a random behavior, even if I try in the manual mode and get a good flight, I can still experience the bad flight afterwards. When I get the bad VIO data, I get the message of "invalid setpoints" in the log and over the QGC too and the drone goes into the "altitude" mode. But, the problem I shared here is the loss of control over the drone, drone kept going upwards and even pulling the throttle to "0" isn't bring the drone to ground. You can clearly see, even in the altitude flight mode (2nd time), the drone still kept going upwards at "0" throttle. Please get us a fix for this.
  • Failure on build customized px4 firmware repo

    5
    0 Votes
    5 Posts
    2k Views
    Alex KushleyevA
    @enrico-bandera-0 Awesome! I am glad you figured it out.
  • Landing Sensor on PX4 Autonomy Developer Kit

    4
    0 Votes
    4 Posts
    2k Views
    James StrawsonJ
    @frafrat Hi. The sensor is integrated into the VOXL SDK and raw data can be viewed through ADB or SSH with the voxl-inspect-rangefinders command line tool. All PX4 Autonomy Dev kids have this sensor. That data is sent from qrb5165-rangefinder-server to PX4 via voxl-mavlink-server. To enable in PX4 set the PX4 EKF2_RNG_CTRL param to 1. You will likely need to fiddle with PX4's other rangefinder params to achieve the behavior you want. Best, James
  • 0 Votes
    13 Posts
    4k Views
    E
    @Eric-Katzfey thanks, I completed all steps successfully and also built the px4 image for voxl2 Thanks a lot for your help Enrico
  • Custom px4-firmware build on StarlingV2

    microdds client voxl-px4 px4-firmware ros2
    8
    0 Votes
    8 Posts
    3k Views
    Zachary Lowell 0Z
    @smilon said in Custom px4-firmware build on StarlingV2: I ran into an issue while installing the newly built voxl-px4 which states it depends on libfc-sensor(>=1.0.5) and I only have (1.0.4) on my system. @Eric-Katzfey I saw you authored some commits on libfc-sensor-api, do you have any clue how I can update? 1 Reply Last reply about 3 hours ago Reply @smilon I would recommend using ros2 wrapper around mavsdk instead of mavros, that is what we have done in the past as mavros and ros1 are both depricated and not supported anymore. Anyways, goodluck with the project!