In our discussion the other day about what programming language to use for our next generation of ArduPilot Ground Control Station (GCS), I mentioned the PixHawk GCS, which is written in Qt. I've been in touch with Lorenz Meier, the team leader, and he's been super helpful in explaining the project and sharing code (see below). We're considering basing the ArduPilot Mega GCS on this code, so this is an opportunity for the community here to check out the code and evaluate how appropriate it is for us.
PixHawk in a general-purpose Micro Air Vehicle (MAV) platform. The first version is a small coaxial helicopter that won first prize in the 2009 European Micro Air Vehicle Indoor Autonomy Competition. It's got an x86 computer onboard, running Linux. Since then, the project has expanded to include a quadcopter and a full open source robotics computer vision toolkit.
Here's a video showing the progress to the competition win:
Although there are lots of impressive aspects of the project that may be of use to us, we're now focusing on the groundstation. Here, from the project's website, is the project description:
"The groundstation is the only interface to an autonomous operating
robot. Even when not operating autonomously, e.g. during system tests,
just a joystick or the remote control is not enough as measurement
values have to be available in real-time and configuration settings have
to be changed.
Features
- Multi-MAV support
- Support for rotary and fixed-wing (Airplanes, helicopters, coaxial and quadrotor designs)
- Joystick control
- Voice/Audio output tested on Mac
Implementation
- Cross-platform: Windows, Linux, MacOs, Maemo
- Open Source (GPLv3+)
- C++, Qt 4.6 based
- Look and Feel completely customizable
Supported Hardware
- Any PC/Mac
- iPad
- Smartphones (iPhone, Nokia N900, currently untested)"
Here are some other views of the interface:
Engineer view
Parameter / Settings / MAVLink View
Pilot view
The source code (in zip and rar forms) is now hosted here.
There is a very complete API, with documentation here.
They're just cleaning up the code a bit, and once they do the latest versions will be hosted on github here.
I'm no programmer, but I've been very impressed by what I've seen so far. Rather than reinvent the wheel, I'm leaning towards recommending that our team start with PixHawk
Comments
Earl
Thanks for the reply.
I hadn't considered all of the communication decoding.
I think I saw someone from your group post to the ROS mailing list regarding LCM:
https://code.ros.org/discuss/ros-users/browse_frm/thread/927/3349
I understand your requirements better now
I doubt that you can reproduce a complex application in HTML/5 easily, because there is much more going on under the hood regarding the communication decoding - alone the serial hardware access is probably not possible.
The OpenGL is crucial for a responsive UI, if your HTML/5 interpreter has hardware acceleration / supports OpenVG, then it's of course also fine.
IPC is actually not any more the main intercomm framework. Instead we're using LCM or ROS, there is support for both.
However ROS is over-estimated for aerial robotics, because on MAVs it doesn't offer that many reusable packages (ground robots have quite different requirements) and because of its installation overhead and size I dont't think it's the right choice for any OMAP3 based MAV. We're using it however on an Intel Core 2 DUO based system.
We probably will provide the CAD files for the airframe. However Acrylics is heavy and prone to break, so I'm not sure if it is the right choice besides for mechanical prototyping.
-it seems most of the current implementation could easily be reproduced in HTML/5, the exception being the graphing component, since aside from flot and a few other javascript libraries I'm not aware of a good graphing component for the web
-I don't see where the need for OpenGL in the current interface is helpful, I do see where it could be helpful for certain elements of a GCS though - I read in the PixHawk site it's the HUD, which I assume is the horizon widget (?)
-the choice of CMU's IPC is neat - but if the PicHawk developers could respond, I 'm curious why alternatives such as ROS were ruled out, several bots seem to be moving from IPC to ROS since most of the IPC functionality is provided there - along with many of the tools PixHawk is building and wants to integrate e.g. the sensor playback utilities, OpenCV vision interfaces, etc.
-If possible, it would be helpful if PixHawk provided the CAD files to allow others to cut their own airframes from acrylic or carbon fiber - I started a to build a quad as a hobbyist a few months ago until my wife decided I should be focused on other tasks, since I have access to a laser cutter it would be much quicker to get up and running again with debugged cut files
Anyway, neat project, and nice to see ardupilot is progressing their GCS away from LabView
Sorry for the inconvience while you attempted to compile it. Please note that this is alpha software, which means that it is heavily improved each day. The compile errors should be resolved by now if you install SDL (follow the links below to learn how).
The developer's documentation should help you install dependencies:
http://pixhawk.ethz.ch/software/groundstation#development
And this feed will keep you posted about changes/improvements:
In general you will want to use GIT as a developer (binaries will follow soon), because it will make your life way easier to follow changes and it'll allow you also to commit contributions more easily.
feed://github.com/pixhawk/groundcontrol/commits/master.atom
And for all those who just want to use it: There is a preview video of the GCS in action!
http://pixhawk.ethz.ch/videos
I thought I would take a look at Qt and the GS source etc.. After successful install of Qt, I tried to compile the GS source, but I received a string of compile build errors for header files not found....
Has anyone had success in compiling the source? I am using OSX.
Below is extract of compile errors:
...
...
...
WARNING: Failure to find: src/comm/ViconTarsusProtocol.cc
WARNING: Failure to find: src/comm/ViconTarsusProtocol.h
WARNING: Failure to find: src/comm/TarsusField.h
WARNING: Failure to find: src/comm/TarsusFieldDescriptor.h
WARNING: Failure to find: src/comm/TarsusFieldTriplet.h
WARNING: Failure to find: src/comm/TarsusRigidBody.h
WARNING: Failure to find: src/comm/TarsusStream.h
Project MESSAGE: Qt version>
Project MESSAGE: Building for Mac OS X
WARNING: Failure to find: src/comm/ViconTarsusProtocol.cc
WARNING: Failure to find: src/comm/ViconTarsusProtocol.h
WARNING: Failure to find: src/comm/TarsusField.h
WARNING: Failure to find: src/comm/TarsusFieldDescriptor.h
WARNING: Failure to find: src/comm/TarsusFieldTriplet.h
WARNING: Failure to find: src/comm/TarsusRigidBody.h
WARNING: Failure to find: src/comm/TarsusStream.h
...
...
...
In file included from src/ui/MainWindow.h:49,
from src/Core.h:38,
from src/main.cc:32:
src/comm/MAVLinkProtocol.h:43:22: error: protocol.h: No such file or directory
In file included from src/ui/MainWindow.h:50,
from src/Core.h:38,
from src/main.cc:32:
src/comm/AS4Protocol.h:42:22: error: protocol.h: No such file or directory
In file included from src/ui/JoystickWidget.h:35,
from src/ui/MainWindow.h:55,
from src/Core.h:38,
from src/main.cc:32:
src/input/JoystickInput.h:38:17: error: SDL.h: No such file or directory
In file included from src/main.cc:32:
src/Core.h:41:33: error: ViconTarsusProtocol.h: No such file or directory
src/comm/MAVLinkProtocol.h:68: error: 'mavlink_message_t' has not been declared
src/comm/MAVLinkProtocol.h:70: error: 'mavlink_message_t' has not been declared
src/comm/MAVLinkProtocol.h:88: error: 'mavlink_message_t' has not been declared
src/input/JoystickInput.h:60: error: ISO C++ forbids declaration of 'SDL_Joystick' with no type
src/input/JoystickInput.h:60: error: expected ';' before '*' token
src/input/JoystickInput.h:70: error: 'SDL_Event' does not name a type
src/Core.h:72: error: ISO C++ forbids declaration of 'ViconTarsusProtocol' with no type
src/Core.h:72: error: expected ';' before '*' token
make[1]: *** [obj/main.o] Error 1
make[1]: Leaving directory `/Users/seanmcd/Downloads/pixhawk-groundcontrol-1af6665'
make: *** [debug] Error 2
make: Leaving directory `/Users/seanmcd/Downloads/pixhawk-groundcontrol-1af6665'
Exited with code 2.
Error while building project mavground
When executing build step 'Make'