Wednesday, March 31, 2010

Dog and Birds - Hawkboards and BeagleBoard

The HawkBoard costs about 1/2 the price of a BeagleBoard, only on special though. So I killed 2 birds with 1 stone and got 2 of them from Special Computing and 1 BeagleBoard from DigiKey.

They both used $30 delivery mechanisms - UPS Express Saver and USPS International Express. The postal service beat the courier by a day since the courier does not deliver to the remote areas every day.

Anyway everything is finally here and the hawkboard is the easiest to get started with since it has an on-board serial connector - no soldering needed. I got Ubuntu installed with this guide and the following modification:

1) Load the kernel using - bootp 0xc0700000 [ip]:uImage
2) Slight changes in bootline – added mem=128M
3) bootm from 0xc0700000
4) The global chmod 777 prevents you from using sudo. You need to chmod 4755 on /usr/bin/sudo and 440 on /etc/sudoers.
Otherwise ubuntu jaunty just works and I even have my favourite Python to play with on the tiny board. Nothing of this form factor has afforded me this pleasure in the past. Next step is to install some components of ROS on it and start building the LocalHawk - localized UAV version of the GlobalHawk.

Sunday, March 28, 2010

EarthHour - working together and version control

Yesterday I had the pleasure of observing EarthHour at Adelaide HackerSpace. We managed to make a few volts from various magnet and coils of wire contraptions. We have indeed come a long way in understanding electromagnetic induction since Faraday threw the magnet out of his wire coil in frustration.

The first set up used a coil and few magnets along the spokes of a bike. That produced way too few volts and there was talk about the joule thief. I had brought along one of my brushless DC motors and with 6-diodes forming a 3-phase bridge you could run it as a generator.
Working together with other people is always fun and I strongly believe that the group is much more than the sum of the individuals forming it (in signal processing speak - there are cross-terms). The tools needed to work in different groups can be different. Hence I have ended up learning a fair few languages and currently a fair few version control systems.

Recently I set up Bazaar for the Lyx-Outline project on window. TortoiseBzr came to the party, but it did not solve the Launchpad authentication issue. I had to use Putty tools (PuttyGen and Pageant) to generate and lodge the ssh keys so that I could perform pushes to the repository. Hopefully this work will encourage me to write my thesis nicely formatted in Lyx.
Lastly the vision project I started in hackerspace with my cheap webcams to detect depth has progressed slightly and acquired some robot os camera calibration code and a checkerboard. May be my quadcopter will be able perceive depth and fly by vision and landmarks much like a pigeon.

Tuesday, March 23, 2010

Keeping it grounded - Tether for flying machines

I have 3 different flying machines sitting on my desk now.
  1. Dual-Contrarotor Chinook Style Helicopter
  2. Single-Contrarotor non-swash plate Helicopter
  3. The Quadcopter in build phase
I would like to make a flight controller flexible enough to fly all three from the same set of hardware, just different bits of software. The blades for the quadcopter arrived recently and with them health and safety concerns about unruly and out-of-control flying machines. To perform motion tests and calibration we had been contemplating a controlled flight platform I finally sketched one up and took it to the machine shop. Hopefully it will be fabricated in a month or so and ready for use with the helicopters and any other aerial platforms the department may have.

Sunday, March 21, 2010

Living in the LiveCD - Frugal Linux

The openembedded huge bitbakes were running uncomfortably slow in the virtual machine. So I decided to install linux on USB and take it from there. The Karmic installer unfortunately put grub on my Vista boot disk while I wasn't looking , what a naughty koala.

So I do have BootRec to fix the boot sector on my Windows recovery CD, just for the kicks and performance feel I decided to live in the liveCD instead. I have a couple of build VMs on the windows drive, I installed virualbox and started up some VM's for persistent work. The virtualbox booted at least 4 times faster than in windows, they must have done some nice optimizations in the linux build.

The verdex new kernel build is going very very slowly. Since bitbake is based on Gentoo portage and I have done Gentoo stage 1 installs, from experience this will take a whole day or so. I hope I don't have to repeat the same experience with the BeagleBoard, since there is a prebuilt ubuntu distro from the arm port. At least the beagle-board is much cheaper than the Gumstix and the shipping is tolerably inexpensive. Now the very competitive HawkBoard is also in the market.

Saturday, March 20, 2010

Smart-Dart - Dartboard of the future with physics and motion tracking

Watching slightly drunk people playing darts at the Exeter is always like watching a knife thrower at Cirque de Soleil. The darts can easily go astray. We were planning to put the clicker out of job at the door by using blob-tracking to count people going in an out of the pub. Now we can also use similar techniques to track darts and sound early warnings if the dart is going to miss the board and hit the person sitting at the table a couple of metres away.

The tracking can also be used capture the flight and dynamics of the dart and suitability of different weight distributions for different people's throwing style and arm-strength. We can capture all trajectories and scores in cricket style. If the board location and calibration is accurate enough, then this technique in conjunction with some pressure sensors under the board can be used for automatic score keeping. Note I am considering a real and serious (read sharp-tipped) dart board not some electronic wannabe like the ones for soft-tip.

Thursday, March 18, 2010

Passing the buck - load sharing with rich client side applications

There is all this talk about cloud computing and distributed, load balanced high availability global clusters ... so on. All these deliver applications to the browser or some similar thin client interpreting and presenting the data be it via Flash or JavaScript or Java or SilverLight. The presentation technology can be used to share some of the computational load and background/stream network tasks to give the users the fuzzy highly responsive and interactive feel. The client side has the big advantage of having direct access to one of the nicest parallel processors - the GPU.

A do a lot of experimenting with Geographic data and WorldWind. I met Ben at the FOSS4G in Sydney and he demonstrated the GeoSciML based core library demo. I wanted to move some of the tasks such as graphing and core image analysis from the server side to the client side to allow heavier user loads on the server and minimize retransmissions, allowing users to do further client side operations on cached data without explicitly having to download core images. Of course to do all this the user system needs to have generous GPU and CPU grunt, but that is cheap these days. The user side transfer helps scale the system on peak loads, JNLP based deployment help keep all user instances of analysis code in sync much like a browser based application currently in use.

The first attempt was to get some of the GML(with geosci extensions) parsed and added as icons into worldwind. I got that done tonight, further digging of the data delivery system is needed to get some of the core images out and build a virtual analysis toolkit with JAI on the client side. So here is an unexciting screenshot of some core locations, hope to have more detailed info soon.

Saturday, March 13, 2010

Fun with AR - Models on a card

Recently I have been playing with point tracking and object recognition in images. A natural thing to look at will be Augmented Reality and all the stuff being done with overlaying 3d renders on video. I got a nice toolkit called BuildAR and played around with some hand drawn targets being tracked.

As a more complex demo I would like to build a tracked sculpting surface which lets you carve or shape a virtual blob with real world hand movements and 3d dexterity. Very similar to the 3d graffiti shown here.

2 more cheap webcams are on the way so I can pretty easily do a 3d setup like in the video for sculpting on a table. The same setup can be used for vision based control system for the quad using OpenCV Posit.

Progress on arduino based electronic speed control

Things went a bit out of control on Friday night. Human programming is too complex to predict and error check. Thankfully the arduino is straight forward, on Saturday the masters student and I tested the motor speed control by sending bytes over i2c to the arduino. It worked like a charm, the masters student is a bit sensitive to the noise from the motors we have to get him some earmuffs.

I also got some super cheap USB webcams , the USB host on the gumstix picks it up. Need to update the kernel and try the uvc video drivers. At this low webcam cost we may even be able to do stereo. Anyway it's my birthday any gadget presents and body armor is welcome.

The techs in the machine shop liked fabrice's workmanship on the frame . The balance is good and the stuff looks firmly in place. They are going to build a see-saw tether with a universal joint to flight test the quad under controlled conditions.

Wednesday, March 3, 2010

Choosing how to choose keypoints - SIFT, SURF and HARRIS

OTB Features multiple keypoint detectors for image matching purposes. I have talked about SIFT and SURF in before, I recently added the simpler Harris to the disparity map plugin. All 3 work to some extent, Harris manages to produce thousands of keypoints with default parameters and cause memory errors. Something I will definitely have to fix.

Otherwise the long awaited graphical filter connector plugin should be the one I will work on next. I have enough single plugin blocks to make a chaining tool useful. Leave me some notes on which elements you would like to see in it.

Monday, March 1, 2010

Completed Autopilot Boards and Frame

Completed autopilot system on Twitpic
The quadcopter has finally taken shape. All the carbon-fibre struts are now attached and the flight boards are boxed up. We got all the LiPo's and chargers and everything works as expected. The lab power supplies cannot push the requires current to run the motors so for flight testing the LiPo's will be essential. It will also give us an idea on how the lift/weight ratio will be and how much angular momentums we will have to deal with. The motors run PPM pulsed from the signal generator.

Completed quad frame on TwitpicAs discussed before the Arduino will be producing the PPM pulse in-flight. The encoding uses 0-250 in byte to achieve stepped PPM time shift from 1ms to 2ms. This leaves 5 bytes to address separate motors, we have only 4, we might use the additional byte to trigger the camera or a parachute release output.

The current issue is getting a camera to work with a Verdex, we might have gone with an entirely separate camera subsystem, but that makes it difficult to syncronize the clocks. A USB camera attached to the Gumstix will have to do for now, they are cheaper and lighter than a full camera. The lightest option will be a phone style integrated camera but that can wait.

Concepcion, Chile. Mega earthquake (M8.3) hit this city this ... on Twitpic

We can atleast attempt to stream pictures from the Quad to WorldWind, should not be rocket science, since pictures of earthquake in Chile are coming in via twitter. We can even pull the telemetry and locate the quad over the flight area. So I modelled the quad in Blender with some success and plenty of help from the propellor modelling tutorial. WorldWind now has shapefile support as well, making mission planning easier. Only if we had a quad as big as the one I rendered.