Back to Projects you can startEdge AIJetsonRobotics

A drone that flies without GPS: Jetson Orin Nano and RealSense D435i

Andrew Bernas built an F450 quadcopter that flies set patterns with no GPS, using Isaac ROS Visual SLAM on a Jetson Orin Nano and a RealSense D435i. Parts, wiring, PX4 parameters and the accuracy check from the MIT-licensed project.

6 min read ai StoreLabs

Project card: a drone that flies without GPS, Jetson Orin Nano, RealSense D435i, PX4

Andrew Bernas built a quadcopter that navigates where GPS is unavailable, working out its position from a camera instead. A RealSense D435i depth camera feeds NVIDIA Isaac ROS Visual SLAM on a Jetson Orin Nano, and the pose goes to a PX4 flight controller that flies set patterns on its own.[1][3] The project is open source under the MIT licence, with a parts list, wiring tables, every PX4 parameter and a method to check accuracy against motion capture.[1][2][4][5] Here is the build, with the manufacturer specs for the two key parts.

The project at a glance

Item Detail
Built by Andrew Bernas; the project ran from August 2024 to June 2025[1]
Published Hackster.io, 22 June 2025, rated Advanced, about 7 days of work; full tutorial on the author's site[6][1]
Licence MIT[5]
Goal Fly autonomously with no GPS, using visual-inertial odometry for position[1][3]
Brain NVIDIA Jetson Orin Nano Developer Kit, JetPack 6.2[2]
Eyes RealSense D435i depth camera with built-in IMU[1]
Diagram: RealSense D435i over USB to Jetson Orin Nano running Isaac ROS Visual SLAM and MAVROS, then TELEM2 to a Pixhawk running PX4
Figure 1. How position flows from the camera to the motors, drawn by us from the author's tutorial.[2][3]

Parts list

Qty Part, as listed by the author[1]
1 F450 quadcopter kit
1 NVIDIA Jetson Orin Nano Developer Kit
1 Intel RealSense D435i depth camera
1 PX4 flight controller: Pixhawk 2.1 Cube Blue
1 Pololu 9 V, 5 A voltage regulator
1 USB to UART converter

Two more things the setup guide relies on: an NVMe SSD in the Jetson, for container images and recorded data, and a separate 7 to 20 V supply for the Jetson, which the author gives a maximum draw of 36 W.[2]

The camera: RealSense D435i

From RealSense's own product page:[7]

Spec D435i
Depth technology Stereo, global shutter
Ideal range 0.3 m to 3 m
Depth accuracy Under 2% at 2 m
Depth field of view 87° × 58°
Depth output Up to 1280 × 720, up to 90 fps
Colour camera 1920 × 1080 at 30 fps, rolling shutter
Motion sensor BMI055 IMU, time-stamped to line up with the depth data
Connector, size USB-C (USB 3.1 Gen 1), 90 × 25 × 25 mm

The computer: Jetson Orin Nano

NVIDIA rates the Jetson Orin Nano Super Developer Kit at 67 INT8 TOPS, with a 1024-core Ampere GPU, a 6-core Arm Cortex-A78AE CPU, 8 GB of LPDDR5 at 102 GB/s, and 7 to 25 W.[8] NVIDIA says owners of the original Orin Nano Developer Kit get the Super performance with a JetPack software update.[8] The author switches it on with the MAXN SUPER power mode, below.[2]

Wiring

Wiring: TELEM2 pin 2 UART5_TX to adapter RXD, pin 3 UART5_RX to adapter TXD
Figure 2. The serial link between flight controller and Jetson.[2]
  • Camera to Jetson: USB.[2]
  • Flight controller to Jetson: the flight controller's TELEM2 port through a USB to UART adapter. TELEM2 pin 2 (UART5_TX) goes to the adapter's RXD, pin 3 (UART5_RX) to its TXD.[2]
  • Why not the Jetson's own pins? In the author's tests the Jetson's GPIO serial link to the flight controller was unreliable, possibly from a noisy data line, so the tutorial recommends the USB adapter.[2]

Jetson setup

  1. Install JetPack 6.2. cat /etc/nv_tegra_release should show release R36, revision 4.3.[2]
  2. Maximum performance: sudo /usr/bin/jetson_clocks, then sudo /usr/sbin/nvpmodel -m 2 for MAXN SUPER mode.[2]
  3. Docker without sudo: add your user to the docker group.[2]
  4. SSD: fit the NVMe drive, format it as ext4, mount it at /ssd through /etc/fstab, and move Docker's data directory onto it.[2]
  5. Isaac ROS: clone isaac_ros_common at release-3.2, set the image to ros2_humble.realsense, generate the GPU CDI spec, clone the VSLAM-UAV repository and build the container.[2]
  6. Camera firmware: the tutorial requires RealSense firmware 5.13.0.50 and warns that other versions may not work with the Isaac ROS image. Test the camera with realsense-viewer.[2]

Tune the camera's IMU

  • Calibrate (optional): librealsense's rs-imu-calibration tool walks you through six positions of the camera. Write the result to the camera's EEPROM.[2]
  • Measure the noise: record the IMU standing still for at least 3 hours, then run an Allan variance analysis with allan_ros2 on a desktop computer. Copy the four values it gives (gyro and accelerometer noise density and random walk) into the VSLAM launch script.[2]

PX4 parameters

Set in QGroundControl on PX4 v1.15.4:[2]

Parameter Value Purpose
MAV_1_CONFIG TELEM2 Talk to the Jetson over TELEM2
UXRCE_DDS_CFG 0
SER_TEL2_BAUD 921600
EKF2_HGT_REF Vision Use the camera pose instead of GPS
EKF2_EV_DELAY 50.0 ms
EKF2_GPS_CTRL 0
EKF2_BARO_CTRL Disabled
EKF2_RNG_CTRL Disable range fusion
EKF2_REQ_NSATS 5
MAV_USEHILGPS Enabled
EKF2_MAG_TYPE None

To check the link, add your user to the dialout group, reboot, and connect with MAVProxy on /dev/ttyUSB0 at 921600 baud.[2]

First flight

  1. Start the Isaac ROS container and run vslam_launch.sh.[3]
  2. In a second terminal, start the mavrospy container and launch mavrospy.launch.py.[3]
  3. Optional: watch /mavros/vision_pose/pose_cov to see the pose coming in, and test fly in POSITION mode first.[3]
  4. Switch to OFFBOARD and the drone flies the pattern on its own. The default is a square; the others are circle, figure8 and spiral, each also in a "_head" version where the drone faces the way it moves.[3]

In the author's demo video, motion-capture cameras are visible, but they only record the true position for checking afterwards. In flight the drone relies on visual-inertial odometry and the flight controller's own IMU, fused in an extended Kalman filter.[3]

Check the accuracy

If you have a motion-capture system, the repository includes a validation routine. The author uses Qualisys; the configuration also supports VICON, OptiTrack, NOKOV, VRPN and Motion Analysis. You record the VSLAM pose and the motion-capture pose during a flight, convert both to CSV, and a script plots them in 3D and reports the root mean square error for position and orientation.[4] The tutorial does not publish the author's own error figures.[4]

Want to build it?

We don't stock the Jetson Orin Nano or the RealSense D435i yet. Ask us and we will quote the parts in the author's list.

Credit: project, tutorial and code by Andrew Bernas (MIT licence). Diagrams are our own drawings of the published setup.

Sources

  1. Andrew Bernas, GPS-Denied UAV with Visual SLAM: overview and components
  2. Andrew Bernas, VSLAM UAV: Hardware Setup
  3. Andrew Bernas, VSLAM UAV: Flight Demo
  4. Andrew Bernas, VSLAM UAV: Validation
  5. Andrew Bernas, bandofpv/VSLAM-UAV (GitHub, MIT licence)
  6. Andrew Bernas, GPS-Denied Drone with NVIDIA Jetson Orin Nano (Hackster.io)
  7. RealSense, RealSense Depth Camera D435i: details and tech specs
  8. NVIDIA, Jetson Orin Nano Super Developer Kit

Keep reading

More projects.