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
- Intuitive C++ class library
- Portability across desktop and embedded operating systems
- Integrated development tools with cross-platform IDE
- High runtime performance and small footprint on embedded"
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.]
Comments
- 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.
Good point...I'll tell them.
Chris, it would be great if you could ask Ning not to pre-fill links with "http://" . It was that which broke the link. Everyone has to delete that pre-fill nearly every time they make a link on the site.
My 2 bits worth....
Rgrds
I think we should the let the wheel of technologies discussion after defining exactly what the community wants and needs.
So in my opinion what I think is the most important is to be able to have a scalable platform, while maintaining the complexity hidden behind a easy to understand and customisable GUI. Why? lets face it, every one wants to his own GCS layout. Obviously any solution should be multi-platform (Win, macOS and Linux) and the development tools should be freely available.
git clone git://pixhawk.ethz.ch/groundstation.git