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.


Features


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

Comments

  • Well after buying LabView of coarse I vote for Labview, BUT I go with whatever cycles the improvements faster. And also something that does not have a steep learning curve.
    Earl
  • I would vote for Java for the following reasons:
    - It has the biggest developper's community
    - It is truely cross-platform ( You could also have a J2ME flavor for mobile devices)
    - There are loads of very good free IDEs available (eclipse, netbeans, ...)
    - There are a lot of open source libraries available ( 3d graphics, 2D graphs,...)
    - It is much simpler/safer to program than C++
    - It could run as a tool in processing This would be useful during dev phases.
    - I don't believe garbage collection would be an issue for a GCS if it is reasonably well designed. At least not on most today's PC.
  • 3D Robotics
    @dydx: it's pretty much the features of our current ground station and configuration utility combined, with better Google Earth integration, voice synthesis and maybe the capacity for video display.
  • Thank you Guido, you are repeating what I have already said as well.
  • 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!
  • 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.
  • My personal opinion about Java
    - There seems to be more Java activity in the Open Source field than in any
    other programming language. This makes it easy to find somebody who has
    already solved your problem and is willing to share his solution.
    - Java is more forgivable than C/C++ thus complex application can be programmed
    and maintained by less skilled people.
    - You'll probably find more people out there who are using Java rather than
    C/C++ for their GUIs.
    - There's a lot already integrated into standard Java whereas in other languages
    you've got to link all kind of different libraries – and hope that they
    really link in the current version with your compiler on your platform...
    - Java is cross platform but applications aren't stand alone and therefore need
    a runtime environment being installed on the user's computer.
    - Java is not appropriate for real time programming - the garbage collection
    mechanism casually locks up the applications for a short time.
    - Java has poor video support.

    My personal opinion about Processing
    - Processing consists of an IDE and a collection of libraries that simplify Java
    programming. It's graphical oriented (2D, 3D, OpenGL...) and provides little
    or no support for GUI programming issues.
    - Through the IDE (which is BTW the same the Arduino uses) it has a relatively
    low entry level but in its whole is limited to small projects. You can't do
    any serious Java software development without a fully blown IDE - yes I know
    real programmers can with vi or Emacs.
    - You can use the Processing libraries in the Java IDE of your preference (like
    Eclipse or NetBeans) and integrate Processing funtionallity into any java
    based GUI like AWT, SWT, Swing or a GUI framework like Apache Pivot – that's
    what I do.

    My personal opinion about Qt
    I don't have any that I should publish because I never used it. As it is written
    in C++ some of the cons I see are listed above.
  • Just a little thinking on architecture. What is central to the issue is the data coming from/ going to the UAV. If possible make that a dataserver to other processes that can connect via UDP. Then the heavily graphic processes like (www.mindstarprods.com/aviation/G1000_More_Pictures.html) can either be developed in a reasonable performance graphic language separately - maybe in a different language than the server. Some of the graphics and interfaces that are really nice might even come from other OpenSource projects connecting to maybe various flight sims like FlightGear. We will certainly want a Primary Flight Display and Moving Map like the G1000 and then plenty of tabbed popups for changing the flight plan of the UAV. The interface to Google Maps/Earth is great and even the local satellite imagery can be downloaded into cache on your laptop. What I am suggesting is a number of separately developed apps that connect to the dataserver. Also, I do like the thought that maybe we can run some of these on smartphones eventually but for now, the expectation of a laptop or netbook is realistic. It is easy to want a lot of graphic "real estate". ..Comment
    Home     Shop Online     Installation Instructions
  • 3D Robotics
    Pete,

    Good point...I'll tell them.
This reply was deleted.