Firmware dev looking to build an autonomous farm surveillance drone, where do I start?

Hi, I’m Nicolau, nice to meet you all! I’m new to this forum. I’m a Control and Automation Engineering student, and my career has always been focused on software and firmware development, but I have no experience with drones, planes, or any other flying objects haha. I recently got the urge to build an autonomous drone project to monitor some animals I keep on a small farm, and I saw it as a great opportunity to learn more about the subject. I don’t understand the physics involved yet, but my end goal is to optimize the drone’s movement according to my needs. I’d like to study the main types of motors used, direction changes, and movement synchronization — could anyone point me to where I should start? I’m feeling a bit lost about all this.

Thanks!

Hi there!
Personal recommendation: Just get some hardware and mess with it.
I can recommend the Holybro X500, but do not expect to do any fast flying with it.
But there are hundreds of great products to get to know the basics.
If you have a bit more specific question on what you want to learn, it would be easier to answer this question.

Since you already have a firmware/control background, I would approach this less as “learn every drone component first” and more as learning the control stack one layer at a time.

A useful progression would be:

  1. Start in simulation before changing real hardware. Get a PX4 multicopter flying manually and autonomously in SITL.
  2. Understand the basic control hierarchy: position → velocity → attitude → angular rate → actuator/motor output.
  3. Learn what the estimator provides to those controllers — attitude, position, velocity — and where IMU/GNSS data enters the system.
  4. Then experiment with missions and Offboard control. For your farm use case, something simple like autonomous waypoint coverage is a much better first target than immediately trying to optimize the complete trajectory.
  5. Only after you can reproduce the same behavior reliably in simulation would I move to hardware and start changing control behavior.

One thing that helped me when looking at autonomous systems is not only asking “did it fly?”, but also “can I explain from the log why it made each important state/control transition?”

That habit becomes very useful once you start modifying controllers or autonomous behavior, because otherwise it is surprisingly easy to confuse a guidance problem, estimator problem, control problem and hardware problem.

For a first milestone, I would keep it very small: SITL → takeoff → waypoint route over a simulated farm area → return/land → inspect the ULog and reconstruct what happened.

Once that works, the next question becomes much clearer: whether you want to focus on flight-control development, path planning, perception, or the higher-level autonomy layer.

Mostly agree here, except that I would not go down the rabbit hole of offboard, unless you require absolute control.
Offboard is quite old, and not very nicely supported, and you have to be very careful about safety.

I’d recommend using the PX4 ROS2 control interface, as its more beginner friendly.

Good point thanks for the correction.

For someone starting from a firmware/control background, the PX4 ROS 2 Control Interface is probably the better path to introduce first, and Offboard can remain an option later if the application actually requires that level of external control.

I also like that distinction for the learning sequence: start with the supported abstraction, understand the control architecture and logging first, then move toward lower-level/external control only when there is a concrete reason to do so.

Thanks for adding that.