Hi all,
It’s been suggested that I bring my survey to ROS discourse. I’m Lucas, an undergrad in the MATRIX Lab at the University of Maryland, and we’ve been building Jacob’s Ladder, a modular UAV command-and-control framework on ROS 2 Humble and PX4. Missions are written entirely in ROS 2 and run on PX4 external modes, so the same code flies in Gazebo SITL and on our Jetson Orin NX hardware with no rewrites.
Repo: GitHub - CursedRock17/Jacob_Ladder · GitHub
The piece I’m testing most right now is jl_mission: one C++ external mode sits behind every mission file, owns arm, takeoff, and land, and checks the setpoints coming from a Python mission runner before relaying them to PX4. The Python missions are meant to read like the code blocks elementary school kids use to learn basic actions, e.g. “takeoff”, “go forward (2.0 meters)”, “hover (5 seconds)”, “land”, just as simple Python functions with the external modes under the hood. We’re doing this because undergrads have a hard time getting into the drone space, since you need to know electrical systems, mechanical design, aerodynamics, programming fundamentals, and now AI/ML. This gives them an easier starting point, and because it’s an open-source codebase with external modes under the hood, they can expand on it as they go. Each mission runs as its own systemd service (jl_mission@<file>), so the same file goes from SITL to the Jetson unchanged.
A few runs from simulation (front approach, precision landing, approach into precision landing, and a smooth ArUco-guided planner):




Where I’d most value feedback:
- Is the main README a clear enough entry point for someone new to the project?
- Does our use of external modes and the mode executor match how you’d structure it?
- Is guarding the Python runner’s setpoints inside a single C++ external mode a sensible split, or would you validate them somewhere else?
- Anything in the sim-to-real workflow (Gazebo to Jetson) you’d do differently?
Part of the code was written with help from AI tools, so blunt reviews are very welcome. Happy to share real flight video too, and I’d be glad to give a short demo at a future group meeting if that’s useful.
Thanks,
Lucas