<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Thousand Thoughts</title>
	<atom:link href="http://www.thousand-thoughts.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thousand-thoughts.com</link>
	<description></description>
	<lastBuildDate>Sun, 28 Apr 2013 13:13:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Next Project</title>
		<link>http://www.thousand-thoughts.com/2013/03/next-project/</link>
		<comments>http://www.thousand-thoughts.com/2013/03/next-project/#comments</comments>
		<pubDate>Sun, 31 Mar 2013 21:21:25 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[games]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=1076</guid>
		<description><![CDATA[Not much to see, yet. But I thought I could tease a little bit.]]></description>
				<content:encoded><![CDATA[<p>Not much to see, yet. But I thought I could tease a little bit.</p>
<p><a href="http://www.thousand-thoughts.com/wp-content/uploads/shot01.png"><img class="aligncenter size-full wp-image-1077" alt="hs" src="http://www.thousand-thoughts.com/wp-content/uploads/shot01.png" width="1024" height="535" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2013/03/next-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sumatra Released on Google Play</title>
		<link>http://www.thousand-thoughts.com/2013/02/sumatra-released-on-google-play/</link>
		<comments>http://www.thousand-thoughts.com/2013/02/sumatra-released-on-google-play/#comments</comments>
		<pubDate>Sun, 17 Feb 2013 17:54:42 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google Play]]></category>
		<category><![CDATA[Sumatra]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=1050</guid>
		<description><![CDATA[Just published the first version of Sumatra on Google Play. I had to add a subtitle to avoid a naming clash in the store. So now it&#8217;s officially called &#8220;Sumatra: Jungle Escape&#8221;. It&#8217;s free. Have fun with it]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.thousand-thoughts.com/wp-content/uploads/Funktionsgrafik_final_scaled.png"><img class="aligncenter size-full wp-image-1052" alt="Sumatra banner" src="http://www.thousand-thoughts.com/wp-content/uploads/Funktionsgrafik_final_scaled.png" width="1024" height="500" /></a></p>
<p>Just published the first version of Sumatra on Google Play. I had to add a subtitle to avoid a naming clash in the store. So now it&#8217;s officially called &#8220;Sumatra: Jungle Escape&#8221;. It&#8217;s free.</p>
<p>Have fun with it <img src='http://www.thousand-thoughts.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="https://play.google.com/store/apps/details?id=com.thousandThoughts.Sumatra"> <img class="aligncenter" alt="Get it on Google Play" src="https://developer.android.com/images/brand/en_generic_rgb_wo_60.png" /><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2013/02/sumatra-released-on-google-play/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LEAP</title>
		<link>http://www.thousand-thoughts.com/2013/01/leap/</link>
		<comments>http://www.thousand-thoughts.com/2013/01/leap/#comments</comments>
		<pubDate>Thu, 31 Jan 2013 17:47:11 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[device]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[Leap]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=1045</guid>
		<description><![CDATA[Look what just arrived: And it works like a charm. Look here for more information. &#160;]]></description>
				<content:encoded><![CDATA[<p>Look what just arrived:<a href="http://www.thousand-thoughts.com/wp-content/uploads/20130131_184157.jpg"><img class="aligncenter size-large wp-image-1046" alt="20130131_184157" src="http://www.thousand-thoughts.com/wp-content/uploads/20130131_184157-1024x768.jpg" width="960" height="720" /></a></p>
<p>And it works like a charm.</p>
<p>Look <a title="Leap Motion" href="https://leapmotion.com/" target="_blank">here </a>for more information.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2013/01/leap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WIP Shots</title>
		<link>http://www.thousand-thoughts.com/2013/01/wip-shots/</link>
		<comments>http://www.thousand-thoughts.com/2013/01/wip-shots/#comments</comments>
		<pubDate>Mon, 21 Jan 2013 17:58:28 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[Dota2]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[Space Game]]></category>
		<category><![CDATA[Sumatra]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=1036</guid>
		<description><![CDATA[I&#8217;m short on time, so I&#8217;ll just drop some picures from my currently active projects. Yes, there is still stuff going on here]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m short on time, so I&#8217;ll just drop some picures from my currently active projects. Yes, there is still stuff going on here <img src='http://www.thousand-thoughts.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://www.thousand-thoughts.com/wp-content/uploads/bridge_03.png"><img class="aligncenter size-large wp-image-1037" title="bridge_03" src="http://www.thousand-thoughts.com/wp-content/uploads/bridge_03-1024x541.png" alt="" width="960" height="507" /></a><a href="http://www.thousand-thoughts.com/wp-content/uploads/sumatra_screen_03.png"><img class="aligncenter size-full wp-image-1038" title="sumatra_screen_03" src="http://www.thousand-thoughts.com/wp-content/uploads/sumatra_screen_03.png" alt="" width="788" height="433" /></a><a href="http://www.thousand-thoughts.com/wp-content/uploads/gauntlet_preview.png"><img class="aligncenter size-medium wp-image-1039" title="gauntlet_preview" src="http://www.thousand-thoughts.com/wp-content/uploads/gauntlet_preview-254x300.png" alt="" width="254" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2013/01/wip-shots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another Podcast Appearance</title>
		<link>http://www.thousand-thoughts.com/2012/10/1021/</link>
		<comments>http://www.thousand-thoughts.com/2012/10/1021/#comments</comments>
		<pubDate>Mon, 15 Oct 2012 16:32:44 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=1021</guid>
		<description><![CDATA[Tobias invited me to another issue of the about:games podcast (German language only, sorry ) and I was glad to participate. This time, tobias tried something new by forming a &#8220;group of regulars&#8221; from listeners of the podcast. Nice people, &#8230; <a href="http://www.thousand-thoughts.com/2012/10/1021/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.thousand-thoughts.com/wp-content/uploads/DRDTk.png"><img class="aligncenter size-full wp-image-1022" title="DRDTk" src="http://www.thousand-thoughts.com/wp-content/uploads/DRDTk.png" alt="" width="512" height="111" /></a></p>
<p>Tobias invited me to <a title="about:games" href="http://www.about-gamescast.de/2012/10/15/folge-36-der-aboutgames-virtuelle-stammtisch-episode-1/" target="_blank">another issue of the about:games podcast</a> (German language only, sorry <img src='http://www.thousand-thoughts.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> ) and I was glad to participate. This time, tobias tried something new by forming a &#8220;group of regulars&#8221; from listeners of the podcast. Nice people, interesting topics; a pleasant evening it was.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2012/10/1021/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Impressions from Gamescom Cologne</title>
		<link>http://www.thousand-thoughts.com/2012/08/impressions-from-gamescom-cologne/</link>
		<comments>http://www.thousand-thoughts.com/2012/08/impressions-from-gamescom-cologne/#comments</comments>
		<pubDate>Mon, 20 Aug 2012 09:31:54 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[Gamescom]]></category>
		<category><![CDATA[Hawken]]></category>
		<category><![CDATA[Nicolas Knoll]]></category>
		<category><![CDATA[Retro]]></category>
		<category><![CDATA[Tobias Knoll]]></category>
		<category><![CDATA[Valve]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=989</guid>
		<description><![CDATA[Yesterday we (Tobias from about:games, his brother Nicolas, my girlfriend and me) made a small trip to the Gamescom in Cologne. Despite the suffocating heat the place was quite crowded. The exhibition halls were air-conditioned but the walk from the &#8230; <a href="http://www.thousand-thoughts.com/2012/08/impressions-from-gamescom-cologne/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.thousand-thoughts.com/wp-content/uploads/gamescom_01.jpg"><img class="aligncenter size-large wp-image-995" title="gamescom_01" src="http://www.thousand-thoughts.com/wp-content/uploads/gamescom_01-1024x448.jpg" alt="" width="960" height="420" /></a></p>
<p>Yesterday we (Tobias from <a title="about:games" href="http://www.about-gamescast.de/" target="_blank">about:games</a>, his brother Nicolas, my girlfriend and me) made a small trip to the <a title="Gamescom" href="http://www.gamescom.de/de/gamescom/home/index.php" target="_blank">Gamescom</a> in Cologne. Despite the suffocating heat the place was quite crowded. The exhibition halls were air-conditioned but the walk from the parking area to the entrance was agonizing enough.</p>
<p>For me, personally, there weren&#8217;t much highlights, since I do not anticipate those large game titles like most people. It was rather the atmosphere which attracted me: so many gaming people, playing, talking about games, watching trailers&#8230; I was sightseeing.</p>
<p><span id="more-989"></span></p>
<p><figure id="attachment_997" aria-labelledby="figcaption_attachment_997" class="wp-caption aligncenter" style="width: 970px"><a href="http://www.thousand-thoughts.com/wp-content/uploads/gamescom_02.jpg"><img class=" wp-image-997" title="gamescom_02" src="http://www.thousand-thoughts.com/wp-content/uploads/gamescom_02-1024x448.jpg" alt="" width="960" height="420" /></a><figcaption id="figcaption_attachment_997" class="wp-caption-text">The Valve stand. No Dota2, no Portal nor TF2 either. Just some really cool indie games. Valve, I love you for your modesty.<br /></figcaption></figure><figure id="attachment_999" aria-labelledby="figcaption_attachment_999" class="wp-caption aligncenter" style="width: 970px"><a href="http://www.thousand-thoughts.com/wp-content/uploads/gamescom_hawken.jpg"><img class=" wp-image-999 " title="gamescom_hawken" src="http://www.thousand-thoughts.com/wp-content/uploads/gamescom_hawken-1024x448.jpg" alt="" width="960" height="420" /></a><figcaption id="figcaption_attachment_999" class="wp-caption-text">We played the alpha version of Hawken.</figcaption></figure><figure id="attachment_1001" aria-labelledby="figcaption_attachment_1001" class="wp-caption alignnone" style="width: 970px"><a href="http://www.thousand-thoughts.com/wp-content/uploads/20120819_124834-e1345484393637.jpg"><img class=" wp-image-1001 " title="20120819_124834" src="http://www.thousand-thoughts.com/wp-content/uploads/20120819_124834-e1345484393637-1024x514.jpg" alt="" width="960" height="481" /></a><figcaption id="figcaption_attachment_1001" class="wp-caption-text">I haven&#8217;t played guitar for years. Maybe this is my last hope of getting back to it.</figcaption></figure><figure id="attachment_1004" aria-labelledby="figcaption_attachment_1004" class="wp-caption aligncenter" style="width: 970px"><a href="http://www.thousand-thoughts.com/wp-content/uploads/gamescom_retro.jpg"><img class=" wp-image-1004 " title="gamescom_retro" src="http://www.thousand-thoughts.com/wp-content/uploads/gamescom_retro-1024x448.jpg" alt="" width="960" height="420" /></a><figcaption id="figcaption_attachment_1004" class="wp-caption-text">Good old days. I really liked the retro area.</figcaption></figure></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2012/08/impressions-from-gamescom-cologne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Few Updates</title>
		<link>http://www.thousand-thoughts.com/2012/06/a-few-updates/</link>
		<comments>http://www.thousand-thoughts.com/2012/06/a-few-updates/#comments</comments>
		<pubDate>Thu, 21 Jun 2012 10:20:51 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[Failsafe]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flxmp]]></category>
		<category><![CDATA[Sumatra]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Vessel]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=943</guid>
		<description><![CDATA[I hadn&#8217;t much time for blogging since I finished my thesis. I was looking for a job (and I still am). But since I have also spent a lot of time twiddling around with Unity and .NET (independently), I guess &#8230; <a href="http://www.thousand-thoughts.com/2012/06/a-few-updates/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I hadn&#8217;t much time for blogging since I finished my thesis. I was looking for a job (and I still am). But since I have also spent a lot of time twiddling around with Unity and .NET (independently), I guess this is not a good excuse. I think it was partly laziness and partly&#8230; ok, it was mainly lazyness, but I wrote this, which shows that I&#8217;ve overcome it.</p>
<p>Anyway, here are some updates on what is currently going on with my private projects (with screenshots <img src='http://www.thousand-thoughts.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ):</p>
<p><span id="more-943"></span></p>
<p><strong>Failsafe (working title):</strong> This is the second name for my Metroidvania platform game I started long ago with flixel. At the beginning it was called Vessel, but then suddenly the indie developer Strange Loop Games announced their steampunk platformer with fluid mechanics, also called Vessel, so I had to abandon that name. The work on this project had been repeatedly interrupted by more important things, so it&#8217;s still not finished. However, most of the game relevant mechanics are done. What&#8217;s left are the boss fights and, well, all of the level design, which is the most fun part in my oppinion. I also built my own small level editor in PyQt. But there is one thing that&#8217;s bugging me: The whole project is done in Flash. I have learned a lot about ActionScript and how the FlashPlayer is working but the recent Flash updates introduced some really strange bugs and crashes which is really annoying. I used to be a Flash fanboy but by now I think it wouldn&#8217;t hurt to check out some alternatives.</p>
<p><a href="http://www.thousand-thoughts.com/wp-content/uploads/screen2.png"><img class="alignnone size-thumbnail wp-image-953" title="screen2" src="http://www.thousand-thoughts.com/wp-content/uploads/screen2-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.thousand-thoughts.com/wp-content/uploads/screen3.png"><img class="alignnone size-thumbnail wp-image-954" title="screen3" src="http://www.thousand-thoughts.com/wp-content/uploads/screen3-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.thousand-thoughts.com/wp-content/uploads/editor.png"><img class="alignnone size-thumbnail wp-image-952" title="editor" src="http://www.thousand-thoughts.com/wp-content/uploads/editor-150x150.png" alt="" width="150" height="150" /></a></p>
<p><strong>Sumatra (working title):</strong> Actually I&#8217;d have to announce this separately. I don&#8217;t because that would make me feel like everything I started before Sumatra is unimportant. Sumatra is my first project in Unity and also my first mobile game. I&#8217;m planning to release it on Android and iOS. It is basically a Canabalt clone. I wanted to start with something small  and simple, get it actually done and see what happens. In Sumatra you play as an orangutan fleeing from the progressing deforestation. You&#8217;re swinging from branch to branch collecting bananas and try not fall off the trees while they are getting cut down beneath you.</p>
<p><a href="http://www.thousand-thoughts.com/wp-content/uploads/sumatra_2.png"><img class="alignnone size-medium wp-image-957" title="sumatra_2" src="http://www.thousand-thoughts.com/wp-content/uploads/sumatra_2-300x187.png" alt="" width="300" height="187" /></a> <a href="http://www.thousand-thoughts.com/wp-content/uploads/sumatra_1.png"><img class="alignnone size-medium wp-image-958" title="sumatra_1" src="http://www.thousand-thoughts.com/wp-content/uploads/sumatra_1-300x187.png" alt="" width="300" height="187" /></a></p>
<p><strong>flxmp:</strong> I started flxmp primarily to play XM tracks in Failsafe. Of course, other developers who make retro-styled games could benefit from it as well. Unfortunatelly, I hadn&#8217;t enough time to implement the whole effects-assortment of the XM format. I hoped, I could finish all features until version 0.2 (current version is 0.15). So flxmp remained untouched for about half a year. I don&#8217;t know if that will change in the following months.</p>
<p>That should be enough for now. Now, as usual, back to work <img src='http://www.thousand-thoughts.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2012/06/a-few-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>As a Guest at About:Games</title>
		<link>http://www.thousand-thoughts.com/2012/04/as-a-guest-at-aboutgames/</link>
		<comments>http://www.thousand-thoughts.com/2012/04/as-a-guest-at-aboutgames/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 10:41:36 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=934</guid>
		<description><![CDATA[Tobias and Ralf from about:games invited me to a podcast (in German). We talk about game development as a profession and the game industry. You can listen to it here.]]></description>
				<content:encoded><![CDATA[<p>Tobias and Ralf from <a href="http://www.about-gamescast.de/" target="_blank">about:games</a> invited me to a podcast (in German). We talk about game development as a profession and the game industry.</p>
<p>You can listen to it <a href="http://www.about-gamescast.de/2012/04/02/folge-11-spielentwicklung-als-beruf/" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2012/04/as-a-guest-at-aboutgames/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Sensor Fusion Tutorial</title>
		<link>http://www.thousand-thoughts.com/2012/03/android-sensor-fusion-tutorial/</link>
		<comments>http://www.thousand-thoughts.com/2012/03/android-sensor-fusion-tutorial/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 12:47:53 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[complementary filter]]></category>
		<category><![CDATA[Sensor Fusion]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=804</guid>
		<description><![CDATA[While working on my master thesis, I&#8217;ve made some experiences with sensors in Android devices and I thought  I&#8217;d share them with other Android developers stumbling over my blog. In my work I was developing a head tracking component for &#8230; <a href="http://www.thousand-thoughts.com/2012/03/android-sensor-fusion-tutorial/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While working on my <a title="Publications" href="http://www.thousand-thoughts.com/publications/">master thesis</a>, I&#8217;ve made some experiences with sensors in Android devices and I thought  I&#8217;d share them with other Android developers stumbling over my blog. In my work I was developing a head tracking component for a prototype system. Since it had to adapt audio output to the orientation of the users head, it required to respond quickly and be accurate at the same time.</p>
<p>I used my Samsung Galaxy S2 and decided to use its gyroscope in conjunction with the accelerometer and the magnetic field sensor in order to measure the user&#8217;s head rotations both, quickly and accurately. To acheive this I implemented a complementary filter to get rid of the gyro drift and the signal noise of the accelerometer and magnetometer. The following tutorial describes in detail how it&#8217;s done.</p>
<p><span id="more-804"></span></p>
<p>There are already several tutorials on how to get sensor data from the Android API, so I&#8217;ll skip the details on android sensor basics and focus on the sensor fusion algorithm. The <a href="http://developer.android.com/reference/android/hardware/SensorManager.html" target="_blank">Android API Reference </a>is also a very helpful entry point regarding the acquisition of sensor data. This tutorial is based on the Android API version 10 (platform 2.3.3), by the way.</p>
<p>This article is divided into two parts. The first part covers the theoretical background of a complementary filter for sensor signals as described by Shane Colton <a href="http://web.mit.edu/scolton/www/filter.pdf">here</a>. The second part describes the implementation in the Java programming laguage. Everybody who thinks the theory is boring and wants to start programing right away can skip directly to the second part. The first part is interesting for people who develop on other platforms than Android, iOS for example, and want to get better results out of the sensors of their devices.</p>
<p><strong>Update (March 22, 2012):</strong><br />
I&#8217;ve created a small Android project which contains the whole runnable code from this tutorial. You can download it here:<br />
<a href="http://www.thousand-thoughts.com/wp-content/uploads/SensorFusion1.zip">SensorFusion1.zip</a></p>
<p><strong>Update (April 4, 2012):</strong><br />
Added a small bugfix in the examples GUI code.</p>
<p><strong>Update (July 9, 2012):</strong><br />
Added a bugfix regarding angle transitions between 179° &lt;&#8211;&gt; -179°. Special thanks to<strong> J.W. Alexandar Qiu</strong> who pointed it out and published the soultion!</p>
<p><strong>Update (September 25, 2012):</strong><br />
Published the code under the <a href="http://opensource.org/licenses/mit-license.php" target="_blank">MIT-License</a> (license note added in code), which allows you to do with it pretty much everything you want. No need to ask me first <img src='http://www.thousand-thoughts.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Sensor Fusion via Complementary Filter</h2>
<p>Before we start programming, I want to explain briefly how our sensor fusion approach works. The common way to get the attitude of an Android device is to use the <em>SensorManager.getOrientation()</em> method to get the three orientation angles. These two angles are based on the accelerometer and magenotmeter output. In simple terms, the acceletometer provides the gravitiy vector (the vector pointing towards the centre of the earth) and the magnetometer works as a compass. The Information from both sensors suffice to calculate the device&#8217;s orientation. However both sensor outputs are inacurate, expecially the output from the magnetic field sensor which includes a lot of noise.</p>
<p>The gyroscope in the device is far more accurate and has a very short response time. Its downside is the dreaded gyro drift. The gyro provides the angular rotation speeds for all three axes. To get the actual orientation those speed values need to be integrated over time.  This is done by multiplying the angular speeds with the time interval between the last and the current sensor output. This yields a rotation increment. The sum of all rotation increments yields the absolut orientation of the device. During this process small errors are introduced in each iteration. These small errors add up over time resulting in a constant slow rotation of the calculated orientation, the gyro drift.</p>
<p>To avoid both, gyro drift and noisy orientation, the gyroscope output is applied only for orientation changes in short time intervals, while the magnetometer/acceletometer data is used as support information over long periods of time. This is equivalent to low-pass filtering of the accelerometer and magnetic field sensor signals and high-pass filtering of the gyroscope signals. The overall sensor fusion and filtering looks like this:</p>
<p><a href="http://www.thousand-thoughts.com/wp-content/uploads/sensor_fusion.png"><img class="aligncenter size-full wp-image-846" title="sensor_fusion" alt="" src="http://www.thousand-thoughts.com/wp-content/uploads/sensor_fusion.png" width="600" height="205" /></a></p>
<p>So what exactly does high-pass and low-pass filtering of the sensor data mean? The sensors provide their data at (more or less) regular time intervals. Their values can be shown as signals in a graph with the time as the x-axis, similar to an audio signal. The low-pass filtering of the noisy accelerometer/magnetometer signal (<em>accMagOrientation</em> in the above figure) are orientation angles averaged over time within a constant time window.</p>
<p>Later in the implementation, this is accomplished by slowly introducing new values from the accelerometer/magnetometer to the absolute orientation:</p>
<pre class="brush: java; gutter: true">// low-pass filtering: every time a new sensor value is available
// it is weighted with a factor and added to the absolute orientation
accMagOrientation = (1 - factor) * accMagOrientation + factor * newAccMagValue;</pre>
<p>The high-pass filtering of the integrated gyroscope data is done by replacing the filtered high-frequency component from <em>accMagOrientation</em> with the corresponding gyroscope orientation values:</p>
<pre class="brush: java; gutter: true">fusedOrientation =
    (1 - factor) * newGyroValue;    // high-frequency component
    + factor * newAccMagValue;      // low-frequency component</pre>
<p>In fact, this is already our finished comlementary filter.</p>
<p>Assuming that the device is turned 90° in one direction and after a short time turned back to its initial position, the intermediate signals in the filtering process would look something like this:</p>
<p style="text-align: left;"><a href="http://www.thousand-thoughts.com/wp-content/uploads/sensor_data.png"><img class="aligncenter size-full wp-image-888" title="sensor_data" alt="" src="http://www.thousand-thoughts.com/wp-content/uploads/sensor_data.png" width="600" height="389" /></a></p>
<p style="text-align: left;">
<p style="text-align: left;">Notice the gyro drift in the integrated gyroscope signal. It results from the small irregularities in the original angular speed. Those little deviations add up during the integration and cause an additional undesireable slow rotation of the gyroscope based orientation.</p>
<p style="text-align: left;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2012/03/android-sensor-fusion-tutorial/feed/</wfw:commentRss>
		<slash:comments>93</slash:comments>
		</item>
		<item>
		<title>Master Thesis &#8230; Printed</title>
		<link>http://www.thousand-thoughts.com/2012/03/master-thesis-printed/</link>
		<comments>http://www.thousand-thoughts.com/2012/03/master-thesis-printed/#comments</comments>
		<pubDate>Sat, 03 Mar 2012 17:13:16 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Master Thesis]]></category>
		<category><![CDATA[monolith]]></category>
		<category><![CDATA[print]]></category>

		<guid isPermaLink="false">http://www.thousand-thoughts.com/?p=759</guid>
		<description><![CDATA[Finally, here it is. My finished thesis&#8230; &#8230;in print&#8230; Actually&#8230; &#8230;looking at it this way&#8230; &#8230; &#8230; &#8230;Whoa!]]></description>
				<content:encoded><![CDATA[<table border="0" align="center">
<tbody>
<tr>
<td><a href="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134655.jpg"><img class="alignright size-full wp-image-768" title="20120303_134655" src="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134655.jpg" alt="" width="250" height="188" /></a></td>
<td><a href="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134720.jpg"><img class="alignright size-full wp-image-770" title="20120303_134720" src="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134720.jpg" alt="" width="250" height="188" /></a></td>
</tr>
<tr>
<td align="center"><strong>Finally, here it is. My finished thesis&#8230;</strong></td>
<td align="center"><strong>&#8230;in print&#8230;</strong></td>
</tr>
</tbody>
</table>
<p><span id="more-759"></span></p>
<table style="margin-top: 10px;" border="0" align="center">
<tbody>
<tr>
<td><a href="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134813.jpg"><img class="alignright size-full wp-image-771" title="20120303_134813" src="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134813.jpg" alt="" width="250" height="188" /></a></td>
<td><a href="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134833.jpg"><img class="alignright size-full wp-image-772" title="20120303_134833" src="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134833.jpg" alt="" width="250" height="188" /></a></td>
</tr>
<tr>
<td align="center"><strong>Actually&#8230;</strong></td>
<td align="center"><strong>&#8230;looking at it this way&#8230;</strong></td>
</tr>
</tbody>
</table>
<table style="margin-top: 10px;" border="0" align="center">
<tbody>
<tr>
<td><a href="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134845.jpg"><img class="alignright size-full wp-image-773" title="20120303_134845" src="http://www.thousand-thoughts.com/wp-content/uploads/20120303_134845.jpg" alt="" width="250" height="188" /></a></td>
<td><a href="http://www.thousand-thoughts.com/wp-content/uploads/20120303_135145.jpg"><img class="alignright size-full wp-image-774" title="20120303_135145" src="http://www.thousand-thoughts.com/wp-content/uploads/20120303_135145.jpg" alt="" width="250" height="188" /></a></td>
</tr>
<tr>
<td align="center"><strong>&#8230;</strong></td>
<td align="center"><strong>&#8230;</strong></td>
</tr>
</tbody>
</table>
<table style="margin-top: 10px;" width="640" border="0" align="center">
<tbody>
<tr>
<td><a href="http://www.thousand-thoughts.com/wp-content/uploads/thesis_monolith.png"><img class="size-full wp-image-775 aligncenter" title="thesis_monolith" src="http://www.thousand-thoughts.com/wp-content/uploads/thesis_monolith.png" alt="" width="250" height="188" /></a></td>
</tr>
<tr>
<td align="center"><strong>&#8230;Whoa!</strong></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.thousand-thoughts.com/2012/03/master-thesis-printed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
