It's winter again and I did not update my blog for half a year. Evil me. Let's change this...
Let me start with this summer's CCC Camp, which was a great event and everybody who joined us in the UAVP-Village in Finowfurth had a lot of fun. If you head over here, then you will find some pictures of the event.
After the camp we had a nasty surprise, when we found out that our new hardware HW-0.22-mini-r2 of the Mini-NG had a non recoverable bug on the PCB. It was nobody's fault in special, we all should have take more care in checking the changes, which have been done. To make up to our users, who already got a revision 2 board, we replaced them for free with a HW-0.22-mini-r3 board, produced immediately after we found out about the bug.
The new HW-0.22-mini-r3 of the Mini-NG performs admirably and many of us are now flying these boards, which offer exactly the same features as the big HW-0.22 tower, except that it's only one board with 55x55mm.
In the meantime we also developed new features for NGOS. Having received my new ACT 2.4GHz Kit with Diversity on both sender and receiver side together with telemetry, we decided that it would be time to support the telemetry system from ACT (M-Bus) and Multiplex (M-Link). Both systems are essentially identical. The new NGOS supports up to 14 different on-board values to be transmited on the back channel to the sender. The user is free to define which of the 14 slots should transmit which on-board data. A ACT UDP or a Multiplex sender is able to show these slots on his display to the pilot. Documentation and configuration examples can be found here, in the extensive NGOS documentation.
Having completed my new Mini-NG with all sensors, including GPS and compass, I decided to give Position Hold, Coming Home and Waypoint flying a bit of priority.
Having already completed the new NGCTRL2 communication protocol in summer, I decided to give Qngctrl a update and visualize all the new navigation stuff using the new features of NGCTRL2.
NGCTRL2 is a framed packet based communication protocol, where each packet may contain an arbitrary amount of data-sets which in turn each contain a type and a payload. The packet content is encoded with the COBS (Constant Overhead Byte Stuffing) algorithm making sure we only use up 1 byte in 256 for byte stuffing (worst case) which in turn makes sure we can always detect our framing byte and also assures, that we may use all possible byte values inside the packet. The COBS encoded packet content then gets a XOR checksum and a framing byte at the end and is sent over the unsecured serial connection.
Each of the NGCTRL2 data-set packed into a packet contain a type value, describing the payload type and it's implicit length. libng, our PC client library for NGOS communication has a poll() API allowing client applications to easily receive and parse the NGCTRL2 packets. As each data-set contains a type field, a client can request arbitrary dump intervals for each data-set type. A NGOS is even able to send data-sets which were not even requested by a client, thus allowing NGOS to inform a client of events happening on the copter side.
I've implemented waypoint flying on the NGOS side by giving NGOS a new waypoint table, which describes the coordinates of the available waypoints. The table can be manipulated with the normal "show" and "set" commands in the NGOS shells. There is a new suite of shell commands starting which the keyword "nav", allowing the user to issue navigational commands like "nav position-hold" or "nav fly-waypoint-fdw". The amir-ng controller was changed to understands the concepts of target, waypoint and it's navigation algorithms were adapted to be able to fly with different behaviors. Each waypoint is defined by it's coordinates, a dwell time and a action and argument, which will allow for a lot of new cool features in the future. At the moment, we only know two actions called "reach, next" and "reach, dwell, next". More actions are to be expected.
On the client side I implemented a new GPS Map view, which visualizes all navigational information received from a NGOS and displays it's position, it's target, it's waypoints as well as all navigational data needed to calculate the curse, consisting of target deviation and target distance. A nice small navigational control shows the headings of the different target/waypoints/home positions and also shows the result of the navigation algorithm for debugging purposes.
This is the above mentioned GPS Map. At that moment it shows a NG flying in a simulated flight using real GPS data and currently doing waypoint flying forward with 5 waypoints currently heading towards the first of them:
As you can see the GUI not only shows multiple waypoints and targets but also many of the on-board states like the battery voltage and the controller flight state. These get transmitted to the client whenever they change. Altitude Height controls are missing yet and will be implemented soon.
In the meantime our hardware developers were busy too and they redesigned the Mini-NG in HW-0.23-mini-r0. The new prototype will use the MPU6050 3D acc and gyro sensors and features an on-board GPS. First prototypes have been built and we hope to bring some of them to 28C3.
Last but not least work on our next-generation hardware platform HW-0.30 has begun. It will feature 2 STM32 CPUs with single precision FPU running at 168MHz combined with a dual-port RAM for fast direct memory communication. We hope to port NGOS to the STM32 architecture during summer 2012 and so support multiple architectures within one source code.
Currently everybody is preparing and packing for the 28C3, this years Chaos Communication Congress in Berlin where we will participate as every year.
On the 28C3 we plan to work on the NGOS software for the upcoming HW-0.23-mini release. Also we plan to further develop HW-0.30. Everybody interested in our project is invited to visit us at 28C3.
Besides our new hardware revisions, some developers are currently working on new brushless-controllers, a controller for lights called NGlight and other fun projects. We're looking forward to discuss, improve upon and show prototypes of them on 28C3.
28C3, we're incoming... ;)