It's winter again and I did not update my blog for half a year. Evil me. Let's change this...

CCC Camp 2011

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:

Qngctrl

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.

Qngctrl

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... ;)

The time is near... The Chaos Communication Camp 2011 will start the 10th August and continue until the 14th August in Finowfurt near Berlin, Germany Europe, Earth, Milkyway!

Chaos Communication Camp 2011 Trailer from elektropunk on Vimeo.

The Chaos Communication Camp 2011 is an international, five-day open-air event for hackers and associated life-forms. It provides a relaxed atmosphere for free exchange of technical, social, and political ideas. The Camp has everything you need: power, internet, food and fun. Bring your tent and participate!

Make sure to join us in the UAVP-NG Village at the Chaos Communication Camp 2011 in Finowfurt!

Hi all!

As you probably know, neighter Taarek nor I ever flew anything before we found out about quadcopters. We were real noobs when we started with the stuff and trough having flown the old UAVP and the commercial MK we both never had a lot of pilot experience.

Switching to the UAVP-NG did not really help the issue. As a test pilot you are never sure if the fault was yours or if the software or hardware failed... ;)

Still after a while you get a bit of feeling for piloting and it seems that Taarek finally got the groove. Using a not so heavy NG probably helped too as we did this using our new Mini-NG, which you can see on the following picture:

amir-mini-ng-ready2.jpg

Using the above Mini-NG it has suddenly become quite easy to fly pirouttes and I did a small movies of Taarek's first stunts. Flying NG is fun... ;)

UAVP-NG - The OS Multicopter: Taarek's first pirouettes from Amir Guindehi on Vimeo.

These are Taarek's first pirouttes flown with my brand new Mini-NG

Best regards!
- Amir

Hi all,

I would not let you miss the great photo Timo has shot showing the size differences between our normal size NG (HW-0.22) and the Mini-NG (HW-0.22-mini):

Mini-NG-size-comparision.jpg

Cheers!
- Amir

Hello everybody!

Finally I found the time to update my blog! End of last month we had the 5. NG Developer Meeting in Heidelberg. Ben and Volker organized the event and it was a lot of fun! Peoples from all over Europe showed up and we had 3 days of BBQ, discussions and flying.

Now, a month later some of the movies shot have been cut and posted to the net. Below you find Robert's and my moving pictures of the event.

UAVP-NG - The OS Multicopter: 5. Developer Meeting in Heidelberg from Amir Guindehi on Vimeo.

This is a summary movie of the 5. NG Developer Meeting in Heidelberg, which took place the 27./28./29. May 2011

NG UAVP Meeting Heidelberg from Rob Robot on Vimeo.

Short Movie of the NG UAVP Meeting in Heidelberg Germany from 27 to 29th May 2011

I would like to thank all visitors and special thanks goes to Volker and Ben for organizing the great event!

Best regards!
- Amir

Hi guys,

Timo did some very nice shots of an fully assembled Mini-NG, which I could not let you miss:

mini-ng-fullyassembled-spida.jpg


Cheers!
- Amir

Hello everybody!

It has been a while since my last post, again. In the meantime we survived winter and had a lot of fun at the 27c3, the yearly CCC Congress in Berlin.

Spring is coming - and as every year, we need something new to play with... ;)

The new Mini-NG hardware has arrived!

Over winter time Volker redesigned our original HW-0.22 into a HW-0.22-mini. The new hardware is fully feature compatible to the old one, is running the normal NGOS and was shrunk to a size of 5.5cm x 5.5cm on 4 layers!

The RC-Controller was moved to a small separate PCB so that only folks needing additional DSL channels or servo channels will have to use it. The functions of the SB-Controller are provided by the LPC itself.

Here are the first shots of the PCBs...

Top side:

HW-0.22-mini-top.JPG

And bottom side:

HW-0.22-mini-bottom.JPG

Next, we will test the new PCBs and should everything work out, we will make them available in the NG Shop. Please note that the boards need to have a LISL acceleromenter directly soldered to the board. This means you need hot air to solder it by youself.

Our first Mini-NG prototype was airborne in december 2010 at the 27c3 congress!

A fully assembled HW-0.22-mini (this is our prototype which was airborne at 27c3) looks like this (courtesy of KeyOz):

HW-0.22-mini-assembled.jpg

Volker did a great job and the new Mini-NG looks nice and cute (at least for my humble eyes)!

We hope to be able to provide Mini-NGs with pre-soldered LISL and eventually even with pre-soldered LISL and ADXRS620 gyros in limited numbers in the NG Shop.

Check the NG Forum for Project News on that.

Cheers!
- Amir

NG-badge.png

The Next Generation Multicopter team would like to announce the source code release of NGOS - The NG Operating System under a GPLv3 license after 3.5 years of intense development time.

Check out the UAVP-NG homepage for more informations!


Official binaries:

* http://ng.uavp.ch/moin/Download

Release source code repository:

* https://pub.uavp.ch/svn/releases

List of supported platforms:

  • NG HW-0.10
  • NG HW-0.20
  • NG HW-0.21
  • NG HW-0.22
  • NG HW-0.22-mini
For a complete list of changes refer to the Release Notes at http://ng.uavp.ch/moin/Download

uavp-ng-flang-clean-small-600.jpg

The Beginning

This project was started in summer 2007, half a year after the original UAVP, also a GPL project, was released. All over the world UAVPs started to get built. At that time, many of us started dreaming of bigger and more powerful processors, peripherals and sensors. The current projects available at that time seemed not to be able to scale according to our needs, so the idea of something new was born. In April 2008, about a year later, there were about 500 UAVPs airborne around the world.

Having flown most of the other open projects available at that time some of us decided that they did not offer the resources we wished to have on our copters. Especially when looking into the future it seemed that none of them had the scaling possibilities needed. Studying the available processors we realized that we needed to switch processor types to get the computing power we dreamed of. Neither PIC nor Atmel could provide what we needed.

In the end we decided to go for an ARM7 and started the Next Generation Multicopter Project.

Our Goal

The development of a free Open Source Multicopter software and hardware framework for further research based on a high performance 32bit ARM7 RISC CPU.

The Story

We started work in August 2007 as a small team which met on IRC. The first hardware (HW-0.10) went airborne in January 2008. The software has been extended with a lot of new features after that. We then worked on a new hardware revision (HW-0.20) in summer 2008 and the first prototypes were produced some weeks before the 25C3 congress. The new hardware got airborne in December 2008. After 25C3 we improved the flight control software immensely and started working on the peripheral controllers software support for the new hardware. Having tested and flown HW-0.20 a lot we decided to improve the hardware in summer 2009 and so we started work on the next hardware revision (HW-0.21). We finished that in June 2009 and produced enough boards for all beta testers and developers to thoroughly test the hard and software. The new hardware got airborne in August 2009. Discovering small problems and print issues we decided to produce one last hardware revision 0.22 fixing those before a final release. We hoped to produce this revision before 26C3 and have it ready for a first public release at 26C3. We succeeded and did a hardware release with HW-0.22 at the 26C3 Congress in Berlin.

Finally having a stable hardware platform out in the green, we started working on the source code immediately after returning from the 26C3. Cleaning out the source, commenting and polishing while still implementing new bells and whistles took the time from then until today.

Be aware that this still is work in progress. We decided that it's time to let everybody play with it, now that the hardware has reached a stable state but this is still a very livid project and new hardware revisions and software changes have to be expected any day... ;)

The Design Principles

The design principles of the NG project are simple:

"Complexity, modularity and encapsulation where performance allows it, simplicity and directness where performance requires it."

This has led to a quite complex framework which we started calling the NG Operating System. The system uses abstraction and complex pointer tables where necessity requires it and performance allows it. It uses global variables and breaks encapsulation where performance requires it. We use classic Open Source tools like the autotools suite, gcc and gnu make. We adhere to common C design rules. And we try to provide a user friendly interface with features like help for commands and verbose error messages.

The Key Features

The NGOS has a design rather different from most available flight control software. Instad of building a fully synchronous system as most did, we built a fully asynchronous system which only synchronizes when needed. This allows for a much more modular design and also allowed us to implement modern operating system like features.

A Multicopter only flies as good as its algorithms allow. Since the model is inherently unstable the closed-loop control algorithm is most critical for flying. People tend to have different ideas about the right algorithms. In order to allow different developers to implement different algorithms and to help compare them we designed the NG controller framework.

Our NGOS uses a modular, pluggable extension framework for closed-loop control algorithms, called controllers, and allows for several of them to be implemented at the same time using a simple abstract programming interface. This enables simple extensions to the system's closed-loop control algorithms by people not used to firmware and system programming. The modular controller framework is coupled with a modular configuration framework, allowing each Controller to have a different set of parameters in different configurations. Several controllers have been implemented. We have a good flying heading hold controller, a Kalman filter based integral controller with a lot of features like PT1-compensation and more and last but not least a port of the old Wolferl-controller from the old UAVP, which, BTW, flies very good with a closed-loop running at 1kHz... ;)

The system allows multiple interactive command shells and their spawned commands to be used concurrently on the different physical i/o devices. This means you can log in to your NG several times through one of the two UARTs or the USB port. Other available character devices could be supported as well. The shell command interface is also very modular and allows developers to add new commands quickly for debugging and testing purposes. A command can "take over its controlling tty", which allows an implemented shell command to put the shell to sleep, take over the physical i/o device and start doing with it what it likes. This allows for implementing new communication protocols (for ground station communication or similar) side by side with older and/or different protocols without having side effects or worse.

Controllers and configurations can be manipulated online using one of mentioned shells above. The controllers output the results of their calculations to a physical hardware abstraction layer called HAL which uses a similar modular framework as the controllers. Different multicopter models (eg. QuadCopter, OktoCopter et al.) can be implemented and flown using different HALs. Different flight styles can be implemented this way as well (X-mode, Reverse-Mode). It's even possible to mix different actors (eg. i2c bl-controllers, pwm-servos and i2c-servos) to control models different from the common multicopters. We already support a whole bunch of HALs (quad, quadX, quadR, Y6, X8, X8X) and new ones are implemented easily.

The above is tightly coupled with a behavior system which allows the user to configure arbitrary behavior rules using simple behavior conditions and behavior actions. Users can customize these behavior rules according to their needs. A behavior rule is defined by a behavior condition (which can have arguments) which, when triggered, executes a defined behavior action (which can have arguments too). Conditions and actions are arbitrary functions implemented separately in the NG framework. The implemented console commands can be used to inspect the currently defined behaviors as well as the predefined conditions and actions. Users are able to define custom new behaviors using the predefined conditions and actions. As each condition and action can receive user chosen parameters these allow further customization by the user.

If you ponder the above behavior concept you will see that every and all of the current UAV features can be mapped to behavior rules. You need calibration on channel 5? You want your camera to make a photo when channel 8 goes to 100%? You would like to turn on the lights, when you have reached 10m or more... it's all possible.

The NGOS supports several different types of RC receivers. It supports the normal sum-signal input as well as the faster sum-signal from the ACT 4+2XS 2.4GHz sum-signal receiver. Furthermore it supports the proprietary serial DSL protocol from ACT which allows us to attach any ACT DSL receiver to the NG. ACT produces great cheap and expensive PPM, PCM, SPCM and 2.4GHz receivers and most of them have a DSL interface. The NGOS contains an rc-mixer which allows to mix several rc input signals in different ways. Currently a primary and a secondary device are supported which can be mixed as teacher/student or for diversity. As the DSL protocol contains the signal quality received the diversity mixer can mix the two signals accordingly. If in teacher/student mode, the mode can be switched using arbitrary behavior rules defined by the above user configurable behavior system.

The NGOS

Do you wonder why we call the firmware an Operating System? Now, we all agree, it _is_ a firmware, but it has become a firmware with many, many operating system like features. The NGOS does hardware probing on startup and activates hardware dependent interrupt handlers. It outputs bootup messages while starting. It is split into user, system and irq context, the closed-loop controller is running on the system level, the user mode shells have to use system calls to use privileged opcode. Furthermore it has a timer scheduler and a task scheduler with a process table, it has a device table and it has tools to inspect all of them. The NGOS's device-probing dependent interrupt handlers could be called drivers. The started consoles implemented as cooperative shell tasks in user context (which are able to fork off commands) executed by a round-robin scheduler conclude the operating system like features.

The Developers and Users

Essentially the NGOS provides a simple API for controllers, configurations, HALs and behaviors programming for developers while giving users of the system very broad possibilities to customize their multicopter and the available features. This way the whole system will be interesting to users and developers with its unique options and possibilities.

The firmware is built modular and enables different closed-loop control algorithms to run side by side to allow different developers to share and compare their algorithms and designs. The abstract closed-loop controller framework allows non-programmers like mathematicians, closed-loop engineers and similar minded folks to implement new closed-loop control algorithms without having to understand more than input and output structures of their algorithms.

The Catch ;)

Please be aware that much of this source code was written by a single person - me. I am an EE engineer specialised in computer sience, system programming, network protocols, high-availability, clustering and security. I'm in no way a specialist for closed-loop controls, embedded system programming and aeronautics. Please be aware of this when studying the chosen solutions and implementations in these fields. I'm sure many experts out there could contribute a lot better solutions.

This all was - and still is - a very interesting experience and a lot of fun for me and I learned more about embedded programming and closed-loop control than I ever imagined I would... ;)

Your Contribution

If you would like to contribute to the project make sure to check the development page in the NG wiki.
It can be found at http://ng.uavp.ch/moin/Development

Thanks

I would like to mentions some great guys who joined our team and contributed to improve hardware and software to where we stand:

  • Markus Bechtold
  • Michael Buhr
  • Axel Burri
  • Patrick Schmid
  • Nabil Sayegh
  • Ralf Hager
  • Stefan Agner
  • Tim Pambor
  • Nabil Sayegh

Also special thanks goes to Wolfgang Mahringer who built the original UAVP and infected many of us with the multicopter virus and to Bernd Richter who infected us with a lot of new ideas and who was a great source of information and knowledge to us.

The Spirit

We hope to be able to provide a platform for experiments, new ideas and research for all Multicopter fans out there!

Best regards!
- Amir Guindehi & The NG Team

Archives

Communication

Syndication

Atom 1.0
RSS 2.0 GeoURL

W3C XHTML 1.0 W3C CSS Creative Commons License

get hCard

Add to Technorati Favorites
OpenID enabled
Powered by Movable Type 4.1

Del.icio.us Tags

Find recent content on the main index or look in the archives to find all content.