3D Robotics

As we prepare to migrate our current LabVIEW groundstation from ArduPilot to supporting ArduPilot Mega, we're taking the opportunity to rethink its architecture and code base.

Right now it's written in LabVIEW, a visual programming environment that has the advantage of rapid development and easy-to-make instrument displays, as well as being cross-platform. But the problem with it is that the development tools aren't free (indeed, the ones that can create an executable file start at $1,249!), and distributing the files requires users to download a runtime engine and serial driver. As a result, we don't have as much community participation in the ground station as we do in most of our other projects.

Over the past year, we've been looking for an alternative with free and good development tools. It needs to be cross-platform, compatible with open source code standards, and appropriate for a ground station (ie, able to handle a rich visual environment and to talk directly with the serial port). Eventually a good candidate emerged in Nokia's Qt application and UI framework, and I'd like to present it here for community feedback.

You can see a glimpse of Qt above, but here's the description from the site:

"Qt is a cross-platform application and UI framework. Using Qt, you can write web-enabled applications once and deploy them across desktop, mobile and embedded operating systems without rewriting the source code.


Note that it's cross platform on more than just computers--it will also run on phones, too, which introduces the possibility of an ArduPilot GCS on Android or some other smartphone, which would be very cool. Also, we intend to integrate the current ArduPilot configuration utility into the GCS, so one desktop program can handle all the ArduPilot functions, from mission planning to real-time data display, including integrated Google Earth and video handling and image processing.

So what do you think? Is this a good code foundation for a full-featured groundstation? Does Qt look like something you'd adopt for the right project?

[UPDATE: See this Swiss team's MAV groundstation for an example of what Qt can do. Nice! It's open source, so we can build on it if we want.]

E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • It would be cool if you could use HTML 5, though maybe a bit early in the development cycle. We have built some basic robot controller interfaces based on a simple AJAX (Javascript + XML) interface, so the browser acts as the client, and system is VERY cross-platform without any code changes, from iPhone to Google phone to Blackberry to Firefox, IE, etc, and the code is pretty simple. We're even doing microcontroller firmware updates via the browser, and I've been thinking about how we might do the KML linkage.

    Here's a brief description:

    HTTP-based robot interface
    HTTP-based admin functions
  • Admin
    look nice Dydx, would you like to share more info and code?
  • I developed this ground station GUI a while ago using Qt under linux. I found it quite easy to get used to Qt for developing UIs. I developed the graphical components using openGL and hooked them into Qt containers.

    My main goal was to make a groundstation that was fully OS independent with minimal dependencies. This solution met this goal pretty well.


  • Thank you Guido, you are repeating what I have already said as well.
  • Chris, I've not browsed their code, but the site says "C++, Qt 4.6 based".

    IMHO, I would not go for a C++ solution, unless you have lot (really really lot) of experience (in all team members), and lots of time -- good if you have graduate students, bad if you have hobbysts (of work to do :)

    That said, I won't rule out using their work as a base. Not by using their code as is, of course, but studying what they did with Qt and recreating similar functinality. Qt has similar methods in its C++ and Py bindings -- except that the Python one are far more simple, and the resulting code is simpler and shorter by an order of magnitude.
    Don't get worried about performance: we wrote a real time, multi-station "dashboard" application, which showed real time stock market analysis, all in Python code.
    Still, I don't want to make the work ahead look simple. It would be a challenge, whatever the platform choice would be -- of course barring use of their code as is..
  • Chris i had a quick look and it is Qt 4.6 in c++.
  • 3D Robotics
    Guido, that's very good advice. Can you take a look at the Swiss QT project and see what you think of their code? Is it something you think we can build on (I'm not sure if it uses Python or not)?

    Warning: if we agree that the path you recommend is the right one, we may ask you for help!
  • I'm working with Python every day, and in the past I've got a fair experience with PyQt (50.000+ lines of code).
    What I can say is that Python + Qt is one of the best choices you can make, for a project like that.
    Not (only) for prototyping (unit tests are far more important than strong typing, if you're after reliability, which you should).
    The language is hugely productive, tools are free, learning curve is inviting.
    Qt is rich indeed (and complex, as are all frameworks like it)-- but is much better tamed by its Python bindings.
    And, last but not least, you have the option to use Python's numeric extensions (take a look to SciPy, for example), and to many really bright network framewoks.
  • Chris, I wish I could contribute UAV Playground to the ArduPilot project but I'm afraid this wouldn't be a good idea. I originally designed it for the Processing community and in its current release it implements a Processing based GUI. It's perfect if you want to use UAV Playground like a toolbox but it's actually not designed for a specific application – a GCS in this case.

    For my personal use I'm working on a GCS that uses Processing for components like the PFD and Apache Pivot for the user interaction. It's far from being released - if ever.
  • 3D Robotics
    Hi Jaron,

    Thanks for that, which is really helpful. Given that there is a already a codebase in your UAV Playground, would you recommend that we build on that for the Groundstation?

    As you'll see in the thread above, there is also already a groundstation codebase in Qt out there (and Jason Short has one in Flash+Python), so it's really a matter of choosing which one to build on.
This reply was deleted.