LWN.net Logo

LWN.net Weekly Edition for November 1, 2012

RTLWS: Realtime Linux for aircraft

By Jake Edge
October 31, 2012

While there was much discussion about realtime Linux at this year's Real Time Linux Workshop (RTLWS)—unsurprisingly—there were few presentations on actually using it. Karl Kufieta's talk on how the realtime kernel was used for aircraft control was one of the exceptions. Kufieta described both the hardware and software components used by him and his colleagues at the University of Braunschweig to develop a Linux-based unmanned aerial vehicle (UAV).

Several different aircraft designs have been used by the University over the years, Kufieta said, for applications ranging from agricultural surveying to boundary layer measurements in Antarctica. Their designs go beyond traditional aircraft to, for example, a helium balloon that won an international challenge to navigate into a building and out through its chimney.

As might be guessed, weight is an important factor. They chose a Gumstix board with an OMAP 3 for the main processor, with a separate data acquisition processor for sensor data. That setup weighs 60g including the GPS antenna. It currently draws less than 2.5 watts, but that should come down once they figure out how to use some of the OMAP power-saving features, he said.

The main processor handles the control algorithms, image processing, and navigation. The data acquisition processor talks to various sensors, actuators, gyroscopes, the GPS, and so on. The two processors communicate over an SPI bus. Depending on the application, there can be more than one data acquisition processor, all of which communicate via CAN bus. In that scenario, one of the data acquisition processors communicates all of the sensor data to the OMAP via SPI messages. This design allows switching to different main processors without changing the design of the rest of the system.

The system is programmed using Simulink, which is an object-oriented simulation and modeling language with a drag-and-drop GUI interface, Kufieta said. It is integrated with MATLAB, which was used to develop some of the navigation and control code. Simulink can generate C code, which can be targeted to run atop an operating system (i.e. on Linux on the main processor) or to run without an operating system for the data acquisition processors. GCC is then used to build the generated code for the ARM processors.

Their goal was to run the Simulink code, particularly the Kalman filter used for navigation, on realtime Linux. To do so, they used the Simulink Real-time Workshop combined with the 2.6.33.9 realtime kernel. Linux has lots of advantages for the project over various commercial alternatives, including drivers for many of the devices (e.g. webcam, WiFi, UMTS), libraries for image processing and other needed tasks, along with support for SSH and other network protocols. The disadvantage is that it "may be a bit complex", and that the delays in thread execution might be too large for their needs.

As it turned out, their testing showed an upper bound of 62µs for the thread execution delay. That was using a "super simple model", but even when running thousands of these simple realtime tasks, the WiFi was still working well, 500-byte SPI messages could be sent in less than a millisecond, and the non-realtime data logging component, which writes debugging data to an SD card, was able to keep up.

To control an airplane, there is a wide variety of complex code that needs to be run. There are equations to turn the various forces measured by the sensors into vectors. The navigation information then needs to be used to determine what kinds of changes to make based on the current position and attitude of the plane. Position and attitude information is derived from a number of different sources, including GPS, an inertial measurement unit (IMU), accelerometers, gyroscopes, and pressure sensors. Those measurements feed into a model that is used to control the actuators to fly the plane.

The Kalman filter is used to rectify the high-frequency, lower accuracy data from the IMU, accelerometers, gyroscopes, and so on, with the low-frequency, but much more accurate GPS data. The IMU and other data can be sampled at 1kHz, though they are currently sampling at 100Hz, while the GPS data is available at roughly 1Hz rates. The Kalman filter then combines that data (along with an estimate of its accuracy) to determine position.

The processing is broken up into several realtime threads, each running at its own realtime priority, based on 10ms slots. The highest priority task reads the UART (IMU and GPU) and SPI bus (other sensors), while the others implement processing with a granularity of 100Hz, 10Hz, and 1Hz. In addition, when the GPS reading is available, that wakes up another thread that may take more than 10ms, which means that it will span multiple slots. The time budget was tight, Kufieta said, until they turned on optimization; now the whole model can run with only 60% CPU utilization on the OMAP 3.

So far, all of the testing has been ground-based, using Simulink's "external mode" to simulate the inputs, and observe the outputs. That allowed the team to "see it fly" in a simulated environment. The first flight tests are planned for later this year. But the question they set out with—"can we run this on realtime Linux?"—has clearly been answered in the affirmative.

[ I would like to thank OSADL and the RTLWS for supporting my travel to Chapel Hill for the conference. ]

Comments (11 posted)

Collaborative coding with Collide and friends

By Nathan Willis
October 31, 2012

Google became the latest entrant into the online code editor races in July, when it released Collide as an open source project. Collide is a lightweight integrated development environment (IDE) that is notable for its support of concurrent editing by multiple users. Although its feature set is slim in comparison to some of the more established offerings, it might still find a niche role to fill — if only because the competition is equally limited when it comes to key features like collaboration.

Originally, Collide was a project that Google was reported to be developing as yet another public service among its existing throngs of web applications. Thomas Claburn at InformationWeek speculated that it was the "Brightly" IDE for Google's Dart language, although Brightly was not announced officially; reports of its existence stem from mentions in a forwarded internal email. Whatever Collide was originally intended to be, however, it will never become. Google closed down the branch office that was developing it in July 2012, and the code was released under the Apache 2.0 license by developer Scott Blum.

Blum has continued to post and respond to questions on the project's Google Groups mailing list, but development has slowed to a trickle. Nevertheless, the application is trivial to install. It requires Java 7 on the machine that will act as the server (i.e., hosting the files to be edited); clients access the editing session from their browser. Exactly which browsers are compatible remains a tad murky; some users have reported success with Firefox while others have not. Chrome and Chromium are the safe choices.

Edit-o-rama

The code is provided as a tar archive that can be unpacked and launched without system-wide installation. The launcher is a shell script named collide; although there is no documentation, reading the script reveals that you can specify a session password by appending -password=foo . This is an important distinction because one must specify a password in order for users on other machines to join in. The script starts up a web server session running locally on port 8080; without password protection, only connections from localhost are accepted.

[Collide]

Collide presents a sign-in screen to every browser, either asking for a name or for a name followed by the password, depending on whether a password was assigned at start-up (users can enter any identifier they want for the name, since it is only used to identify them to other participants in the session). From there, all users have a tree view into the directory from which the server was launched. A collapsible user list sits in the lower right hand corner, in which you can see the self-selected user names and (more importantly) Collide-assigned colors of everyone in the session. The actual editing features provided are respectable: line numbering, syntax highlighting, auto-completion, and real-time file tree manipulation (meaning that added, deleted, and moved files are relayed to all of the clients immediately, without requiring a reload).

From a collaboration standpoint, the editor relays changes faster than one can type, which is about the only real requirement. Granted, Collide does not offer TLS/SSL encryption or strong authentication, so it is most likely to be used in LAN environments where latency is not an issue. The UI only distinguishes between concurrent editors by altering the cursor color, however. This makes it harder to keep track of where other users are in the document than it is in other collaborative editors (some of which, for example, use different text background colors for each user).

There is also a Collide extension available for Chrome that adds JavaScript debugging and real-time editing of "live" CSS. Currently JavaScript, Python, CSS, and HTML are the only languages supported by the syntax highlighter, although there are hooks for enterprising developers to add others — incomplete highlighting code for Dart and XML is buried in the source tree.

Reportedly, there were other features that had been working while Collide was still an active internal project, but just did not make it through the cleanup process before the code was released to the public — including showing other users' text selections. The team decided to forgo implementing persistent user identity and authentication in light of the fact that there are already hosted web services that offer that functionality.

Everybody, edit now

As it is, Collide provides a fast-and-dirty editing option for locally-connected teams or for pair-programming exercises. Developers using Collide will already have to have another means of discussing what they do — either out loud or through other chat applications. But if that list of restrictions sounds like it makes Collide a weak offering, consider that the other major collaborative code editors are equally limited in one way or anther.

The most widely discussed in recent years was Mozilla's Bespin. As invariably happens to the browser-maker's projects these days, Bespin underwent Mozilla's spontaneous-renaming process, becoming Skywriter, then it was shut down. But the code was handed over to the ACE editor, which sits at the heart of the popular Cloud9 collaborative editing service.

ACE offers a similar in-browser editing experience to Collide's, plus additional features like breakpoints and code folding (i.e., collapsing blocks of code for the sake of readability), but its collaboration features are an add-on implemented by Cloud9. Although real-time collaboration was a feature during the project's tenure at Mozilla, it is not supported in the downloadable version. ACE is also designed to be an embeddable component served by an existing web server; it is not built for rapid deployment or ad-hoc usage. Mozilla's Kevin Dangoor told one ACE user that interested parties would be welcome to contribute real-time collaboration code, but that was in early 2011, and there does not appear to have been any progress on that front since.

Of course, there are numerous other open source online IDE projects. Adobe has Brackets, which is focused on supporting HTML and JavaScript. The Eclipse project has Orion, which is arguably the closest in design to Collide, in that it can run as a local Java server without the prerequisite to start another web server. Orion incorporates code validation, cross-file searching, and a number of other helpful features, but collaborative editing is not among them.

With the other projects outstripping Collide in terms of traditional IDE features; Collide's primary strength is its multi-user editing. But it does not look like the project has any forward momentum of its own, and in spite of Blum's early comments, there has not been substantial further development. On the contrary, Collide developer Jaime Yap said on Google Plus that

We want the Collide opensourcing to serve as reference implementations for cool technologies, features, and interaction concepts we want to see exist in actual web-IDE services. These existing web-IDE services could leverage technology in the Collide stack. Longer term, some enterprising group could fork the Collide codebase and use it to bootstrap their own competing service.

But at this point, it simply does not look like the other web-based IDE projects are interested.

The reason why may be obvious to anyone active in an existing open source project — real-time collaborative editing's main competition is the simplicity offered by distributed version control. There may be a handful of situations where having multiple developers working on a single chunk of code all at once is advantageous, but it is far from the norm. Real-time collaboration requires that the participants work simultaneously and at the same pace, and it makes separating out individual contributions difficult or impossible. Apart from dedicated hack-a-thon events or tutorial sessions, this simply is not the most efficient way for individual developers to work.

Nevertheless, for hack-a-thons and tutorials, Collide could prove to be a valuable asset. There is little administrative overhead and a connection to the outside Internet is not required. It would be gratifying to see Collide take on a new life as an open source effort; some have noted that it builds on the real-time features of the "love it or hate it" Google Wave, which itself is now an Apache Incubator project in search of a killer application. But more likely is a future where Collide joins Wave among the ranks of "slick ideas that never took off" — an unfortunate fate, and one made worse by the fact that the other online IDE projects have yet to deliver an equivalent to Collide's key feature.

Comments (13 posted)

Roll your own fundraising drive with Selfstarter

By Nathan Willis
October 31, 2012

Free software projects in search of a fundraising model now have yet another alternative to consider: Selfstarter, a Ruby-on-Rails application built to emulate Kickstarter-style donation drives in a self-hosted environment. It provides a simple crowd-funding framework, but one that can be adapted to a number of fundraising scenarios. Although it is not the only free software option, it does have its advantages.

Fundraising for free software development has been a popular topic of late. In August, we covered Adam Dingle and Jim Nelson's survey of the available approaches at GUADEC, which centered on a comparison between the popular pre-funding donation model used at Kickstarter and the pay-what-you-like post-funding model used by the Humble Bundle. In September, we looked at Bradley Kuhn's report at LinuxCon North America about the Software Freedom Conservancy's (SFC) successful drives to raise funds tied to specific developer contracts.

MediaGoblin and constituent-relations-management

Since then, at least one well-known project has launched a large-scale campaign of its own: Chris Webber, lead developer of the MediaGoblin web publishing platform, is trying to raise funds to support himself for one year's worth of full-time development. As Webber explained on his blog, the campaign is run through the Free Software Foundation (FSF), but it required some engineering effort to support several features missing from the FSF's base fundraising platform. Specifically, Webber wanted a donor rewards system, the ability to send email updates to donors, and an automatically-updating "progress bar" that tracked the total as pledges came in. All three features are found on the Kickstarter platform. In addition, Webber wanted a custom theme to match the MediaGoblin site, which of course is not supported on Kickstarter.

The software powering the donation drive is CiviCRM, which the FSF adopted in 2010, after having promoted its development as a "high priority project" for several years. CiviCRM is used by several other organizations in the free software community, including the GNOME Foundation, Wikimedia Foundation, and Mozilla. In an email, Webber noted that some of the CiviCRM modifications used to deploy the MediaGoblin drive were trivial — such as the progress bar, which uses a simple AJAX query to the CiviCRM back-end.

Whether the remaining changes constitute an interesting enough module to make into a formal extension or patch set remains an open question. "I think we did a good job of making something that was feature-compatible with Kickstarter, but part of that was also working on things as in terms of looks," he said. "I'd be interested in someone building on that work to make something that people could much more easily click-and-go make a fundraising campaign. Would CiviCRM be a good fit for that? It seems like it's working well for us, but then again, I'm not the one running it."

CiviCRM is a not a lightweight package; it is intended to serve as a "relationship management" system over the long term — which in human terms means multiple years. It also needs to be integrated with another content management system like Joomla! or Drupal; installing and maintaining it introduces considerable overhead if all one is interested in is a one-shot fundraising drive.

Self-starting start-ups

In contrast, the Selfstarter application is designed for rapid deployment. The company behind its development is Lockitron, a start-up created to build and sell a smartphone-based keyless door lock system. When the company's project proposal was rejected for inclusion on Kickstarter, the team wrote a work-alike and hosted the fundraising drive independently. The drive was evidently a success; the site reports that well over 1400% of its target amount was raised, and the entire first round of pre-orders is sold out.

Selfstarter is built for Ruby 1.9.2, and is designed to be deployed on production servers using Heroku (although Heroku is optional, but recommended). The code is available from a GitHub repository; after cloning the repository the basic setup can be installed with bundle install --without production and the necessary databases (by default, SQLite) created with rake db:migrate, both of which should be old hat to Rails developers.

Fresh out of the box, Selfstarter does require quite a bit of customization. The config/settings.yml file includes all of the campaign settings, from the project name and fundraising goal to the strings displayed for the various messages (for example, whether donors are called "donors" or "backers," and the note explaining what to expect when the campaign ends).

Selfstarter supports only Amazon payments, though the README file explains that this and several other limitations were choices made for simplicity when Lockitron wrote the application for its own campaign. Similarly, it supports embedding Vimeo videos, using Google Analytics, and has configuration variables for Facebook and Twitter "share buttons."

Adding support for additional payment systems, video embedding, and sharing services are all among the first requests filed on the issue tracker. They will probably not prove difficult, but the fact that the current values are hardcoded in simply illustrates that Selfstarter is a young project that still requires manual configuration. The same is true of the theming and CSS styling; all of the media assets and stylesheets are simple to locate, but radically altering the layout of the pages will require a bit more work.

The area in which Selfstarter really needs further development is in its support for different styles of campaign. The Lockitron campaign is built around a single product, offered at a single price. That may work well for the majority of product-driven drives, but it does not offer donors the choice of levels that many Kickstarter campaigns use to "up-sell" potential backers. Tracking donor movements between levels and statistics on average donations is unimplemented. Selfstarter is also built around the assumption that the campaign is an all-or-nothing funding proposition (that is, if the target amount is not met, no one will be charged). This is the Kickstarter model, but others may prefer to take a different approach.

Selfstarter also does not implement user accounts, strong authentication, or provisions for emailing donors. The value of features like emailing donors is debatable, although it is a popular way to keep buzz alive in Kickstarter drives. The developers do say that they welcome patches for these and other features, however.

Getting your kicks

With its current feature set, Selfstarter has the makings of a decent funding platform for independent projects. But independent projects are hard for potential donors to discover — a drive run by a well-known entity like the FSF is likely to garner discussion, but for new projects, waiting for visitors flush with cash to stumble across the campaign site is a worrisome proposition.

One intriguing possibility on this front was raised in a thread on the Selfstarter issue tracker. User elf-pavlik asked whether Selfstarter could be merged with the similar open source crowdfunding project Catarse. Diogo Biazus from the Catarse team replied that Selfstarter's identity as a self-hosted fundraising platform made it significantly different from Catarse's model, which involves maintaining a curated stable of multiple projects. But the two could still find a way to interoperate, he said:

So, why not create a channel in Catarse, where we could receive projects from the Selfstarter? In this fashion, Selfstarter could evolve to be the Catarse's entry point to new projects (as an Engine) without losing it's original identity of simple-project platform.

That concept is interesting because it would help any free-software-focused crowdfunding efforts balance the benefits and risks of going-it-alone. As Dingle observed in his GUADEC talk, a pool of multiple fundraising projects hosted at one site is easier for users to find, but it makes smaller and less well-known projects harder to find on the site itself, because the "cool" projects grab most of the attention. The possibility of a hybrid model, where individual projects could run their own campaigns but still be accessible from a central service, might help.

Of course, regardless of whether the campaign is self-hosted, run by the FSF, or promoted on a specialty Web service, the trickiest part of the fundraising drive is not the software component — it is marketing the campaign to donors and convincing them to open their wallets. Selfstarter and similar efforts cannot do that part, though they can take developers' minds off of the implementation problem, which is at least a start.

Comments (2 posted)

Page editor: Jonathan Corbet

Inside this week's LWN.net Weekly Edition

  • Security: Holes in SSL certificate validation; New vulnerabilities in exim, java, kdelibs, mozilla, ...
  • Kernel: NUMA scheduling; Relocating RCU callbacks; Thoughts on the ext4 panic.
  • Distributions: Fedora and LVM; Yocto, Linaro, sposkpat, ...
  • Development: Processing 2.0; Motif; Opened Captions; ARM64 OpenJDK; ...
  • Announcements: Jailbreaking legal for smartphones, not tablets; Privacy in Ubuntu 12,.10; LPC 2013; ...
Next page: Security>>

Copyright © 2012, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds