I'm considering Aero-Astro grad school and am looking into acquiring a drone hardware platform to implement GNC/ PNT/ autonomy papers like those I might see from, e.g., the Navigation and Autonomous Vehicles group at Stanford, the Robust Robotics group at MIT or the Model Based Robotics Systems group at MIT. My current plan is to take a PX4/Ardupilot based drone and modify the code as needed to implement the concepts of a given paper.

Which of these firmware stacks, if any, is more popular in aerial GNC/PNT/autonomy research environments, and beyond algorithms themselves, are any kinds of low-level/ infrastructural modifications made to the firmware stack? When implementing a new idea for a given paper, do researchers in this space generally start by modifying the public repo, or do they have their own forks with some levels of improved infrastructure, broadly defined, that they use as a starting point?


1 Answer 1


It is usually a combination of 2 different pieces software. Generally a higher level software which implements most of your autonomy, advanced navigation algorithms, and a lower level software which deals with interfacing the motors, a simple state estimator, and accepts waypoint commands.

Most common is ROS for the higher level software, and a PX4 for lower level. They are also frequently run on separate computers. With ROS running on something beefier like a TX2 or Intel Nuc, and the px4 software running on a pixhawk.

Generally the way it is set up is that your pixhawk is connected to the motors, and connected to your bigger computer via a serial link. It receives waypoint commands from your more powerful computer. And does the necessary logic to convert them to motor RPMS. It is also running a basic state estimator which can fuse data from your more advanced algorithms running on the stronger computer.

Regarding research most of the work is done on the higher level/ROS side. It is rare that someone makes a modification to the PX4 firmware. Most labs have a set of frameworks in place to take care of motion planning, SLAM, decision making, and more. So when someone wants to implement a new idea they can modify existing code, or just re-implement 1 module. Rather than having to write the whole system from scratch. Since it is mostly ROS that is pretty easy to do.

Note that ROS + Px4 is probably the most common combination, but different labs may have different things. I know certain groups at MIT use ROS, and sometimes a custom middleware solution based off of LCM.

  • $\begingroup$ Thanks for the explanation @edwinem. As a follow up, can you think of any recent projects or papers where the complete project code was published, including whatever applications were running atop ROS? Or, any place where the hardware setup between for the 2 processors that you describe is published? These problems can be thought through, but taking advantage of what already's out there is always prefered with finite time/budget. $\endgroup$ Commented Sep 10, 2020 at 21:38
  • 1
    $\begingroup$ MAVROS is typically used for ROS<-->PX4 communication. ETH ASL lab has a paper explaining how to setup a drone and link to their ROS projects. Though for the lower level autopilot they use DJI's system. HKUST aerial lab has github.com/HKUST-Aerial-Robotics/Teach-Repeat-Replan, but again its ROS<--> DJI. Both UPenn and RPG Zurich post a lot of their individual packages, but don't show how the whole system fits together. $\endgroup$
    – edwinem
    Commented Sep 10, 2020 at 22:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.