<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Nonpolynomial Labs</title>
 
 <link href="http://www.nonpolynomial.com/" />
 <updated>2012-10-21T16:50:52-07:00</updated>
 <id>http://www.nonpolynomial.com/</id>
 <author>
   <name>Kyle Machulis</name>
   <email>kyle at nonpolynomial dot com</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/nonpolynomiallabs" /><feedburner:info uri="nonpolynomiallabs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Upcoming Speaking Engagements and Project Updates</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/2fO8p5RUNwk/" />
   <updated>2012-10-21T17:42:10-07:00</updated>
   <id>http://www.nonpolynomial.com/2012/10/21/updates-and-speaking</id>
   <content type="html">&lt;p&gt;Time for more speaking updates!&lt;/p&gt;
&lt;CENTER&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/aes2012.jpg' /&gt;&lt;/CENTER&gt;
&lt;p&gt;I&amp;#8217;ll be part of a panel on &lt;a href='http://www.aes.org/events/133/gameaudio/?ID=3261'&gt;using biometrics for generative game audio at AES&lt;/a&gt;, on Friday, October 26th, at 2pm. Should be fun!&lt;/p&gt;

&lt;p&gt;Also, I&amp;#8217;ve just moved a lot of the health driver projects I currently maintain to the &lt;a href='http://www.github.com/openyou'&gt;OpenYou organization on github&lt;/a&gt;. The hope is to get more developers working on these projects, versus having the world waiting on me to have time to work on things. There&amp;#8217;s more information available at &lt;a href='http://www.openyou.org/2012/10/21/openyou-github-org/'&gt;the post on openyou.org&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/2fO8p5RUNwk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2012/10/21/updates-and-speaking/</feedburner:origLink></entry>
 
 <entry>
   <title>Keepon Control via Kinect</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/qnhCuivrAu0/" />
   <updated>2011-11-16T00:12:09-08:00</updated>
   <id>http://www.nonpolynomial.com/2011/11/16/keepon-control-via-kinect</id>
   <content type="html">&lt;p&gt;And the hits just keep on comin&amp;#8217;.&lt;/p&gt;
&lt;CENTER&gt;&lt;object width='420' height='315'&gt;&lt;param name='movie' value='http://www.youtube.com/v/6XhbYWLnsq0?version=3&amp;amp;hl=en_US' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed width='420' src='http://www.youtube.com/v/6XhbYWLnsq0?version=3&amp;amp;hl=en_US' allowfullscreen='true' type='application/x-shockwave-flash' height='315' allowscriptaccess='always' /&gt;&lt;/object&gt;&lt;/CENTER&gt;
&lt;p&gt;I threw this together this evening, in about 4 hours from top to bottom (code + video). Yay open source. Project uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arduino + Keepoff &lt;a href='http://www.github.com/qdot/keepoff'&gt;http://www.github.com/qdot/keepoff&lt;/a&gt; - Control of Keepon Robot&lt;/li&gt;

&lt;li&gt;Processing &lt;a href='http://www.processing.org'&gt;http://www.processing.org&lt;/a&gt; - tying the whole thing together&lt;/li&gt;

&lt;li&gt;OSCP5 &lt;a href='http://www.sojamo.de/oscP5'&gt;http://www.sojamo.de/oscP5&lt;/a&gt; - talk to python script that&amp;#8217;s controlling arduino, already had that written so didn&amp;#8217;t write serial controls in Processing&lt;/li&gt;

&lt;li&gt;GSVideo &lt;a href='http://gsvideo.sourceforge.net'&gt;http://gsvideo.sourceforge.net&lt;/a&gt; - for webcam (filming keepon)&lt;/li&gt;

&lt;li&gt;SimpleOpenNI &lt;a href='http://code.google.com/p/simple-openni'&gt;http://code.google.com/p/simple-openni&lt;/a&gt; - kinect recording and skeleton tracking in processing&lt;/li&gt;

&lt;li&gt;libfreenect &lt;a href='http://www.openkinect.org'&gt;http://www.openkinect.org&lt;/a&gt; - Cross platform kinect access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Processing running on Linux, X Forwarded to OS X because apparently it&amp;#8217;s impossible to get good screencast software on linux.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s missing the side to side bend sensor because I&amp;#8217;m still not quite sure how that motor message works yet, but this is good enough for a first demo.&lt;/p&gt;

&lt;p&gt;Code is, as usual, available at&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.github.com/qdot/keepoff'&gt;http://www.github.com/qdot/keepoff&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, why goth dance? This is a running joke we had at &lt;a href='http://www.artandcode.com/3d'&gt;the Art and Code conference at CMU last month&lt;/a&gt;. For those not familiar with the youtube meme, see &lt;a href='http://www.youtube.com/watch?v=PvNrjcg3WjA'&gt;http://www.youtube.com/watch?v=PvNrjcg3WjA&lt;/a&gt; at your own risk. I figured that I might as well turn it into a way to demo new hardware. Other A&amp;amp;&amp;amp;C people, consider the (velvet, tear stained) gauntlet thrown down.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/qnhCuivrAu0" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2011/11/16/keepon-control-via-kinect/</feedburner:origLink></entry>
 
 <entry>
   <title>Keepon Hacking Proof of Concept</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/oAdyHHetFK4/" />
   <updated>2011-11-14T00:12:09-08:00</updated>
   <id>http://www.nonpolynomial.com/2011/11/14/keepon-hacking-proof-of-concept</id>
   <content type="html">&lt;p&gt;We have Keepon control!&lt;/p&gt;
&lt;CENTER&gt;&lt;object width='420' height='315'&gt;&lt;param name='movie' value='http://www.youtube.com/v/P0u2lakH5nc?version=3&amp;amp;hl=en_US' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed width='420' src='http://www.youtube.com/v/P0u2lakH5nc?version=3&amp;amp;hl=en_US' allowfullscreen='true' type='application/x-shockwave-flash' height='315' allowscriptaccess='always' /&gt;&lt;/object&gt;&lt;/CENTER&gt;
&lt;p&gt;Yay! Thanks to &lt;a href='http://www.nonpolynomial.com/2011/11/09/mykeepon-hacking/#comment-359766077'&gt;mAngO on the comment thread for my last keepon post&lt;/a&gt;, we now know that grounding out the bus during keepon&amp;#8217;s powerup allows you to act as the master to the bus! This means we can now control the motors and sound, as can be seen in the video above. I&amp;#8217;m just controlling motors there, using the &lt;a href='http://charlie-roberts.com/Control/'&gt;Control Program for Android&lt;/a&gt; to send OSC messages to a python script I wrote. The python talks to the USB serial port, and the arduino turns the commands coming over serial into I2C to go to keepon.&lt;/p&gt;

&lt;p&gt;All the source code for this is available in completely raw, uncommented form at&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.github.com/qdot/keepoff'&gt;http://www.github.com/qdot/keepoff&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, that&amp;#8217;s the first part finished. Now it&amp;#8217;s on to polishing things out and figuring out the rest of the parts of the hardware we don&amp;#8217;t have access to yet. I&amp;#8217;m keeping &lt;a href='http://www.github.com/qdot/keepoff/issues'&gt;the github issues list&lt;/a&gt; updated with things we have left to do.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/oAdyHHetFK4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2011/11/14/keepon-hacking-proof-of-concept/</feedburner:origLink></entry>
 
 <entry>
   <title>Everything You Ever Wanted to Know about MyKeepon Except for the Parts I Don't Know About Yet</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/YAmcKgSyUE4/" />
   <updated>2011-11-09T17:15:09-08:00</updated>
   <id>http://www.nonpolynomial.com/2011/11/09/mykeepon-hacking</id>
   <content type="html">&lt;B&gt;UPDATE 2011-11-14:&lt;/B&gt;
&lt;p&gt;Keepon hacking has made a major step! Thanks to &lt;a href='http://www.nonpolynomial.com/2011/11/09/mykeepon-hacking/#comment-359766077'&gt;mAngO on the comment thread for my last keepon post&lt;/a&gt;, we now know that grounding out the bus during keepon&amp;#8217;s powerup allows you to act as the master to the bus! &lt;a href='http://www.nonpolynomial.com/2011/11/14/keepon-hacking-proof-of-concept/'&gt;There&amp;#8217;s a Proof of Concept video posted on youtube now.&lt;/a&gt;. I&amp;#8217;m leaving the rest of this post as it was when I first wrote it for history sake, but the information in it plus knowing that you just need to hold down the I2C lines for a second when the keepon powers up are enough to actually get control going. The reverse engineering document and code in the keepoff repository will be updated to reflect this information.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I&amp;#8217;m really not sure I&amp;#8217;ve never spent so much time cursing at something so adorable. The past week has been yelling, crying, and generally losing my emotional shit toward a few servos wrapped in a weird, sticky plasticy skin, better known as the MyKeepon Dancing Robot.&lt;/p&gt;

&lt;p&gt;How better to atone for my sin of the vivisection of the most adorable christmas toy this year, than writing up what I found. That way, future generations can avoid the pain inflicted on it, and the pain it inflicted on me.&lt;/p&gt;

&lt;p&gt;But good lord, it&amp;#8217;s so fucking CUTE.&lt;/p&gt;

&lt;p&gt;Usually I wouldn&amp;#8217;t write this up until after I had things completely finished, but I gave myself a week deadline for that, and that deadline passed 2 days ago. I&amp;#8217;m still in the middle of a few different ideas for reversing it, but those could take a while (stupid real life getting in the way of toy hacking), so I figured I&amp;#8217;d dump what information I do have now.&lt;/p&gt;

&lt;h2 id='resources'&gt;Resources&lt;/h2&gt;

&lt;p&gt;Before I get into technical descriptions, the current resources available for updates on keepon hacking are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.github.com/qdot/keepoff'&gt;The Keepoff Project Github Site&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='https://github.com/qdot/keepoff/blob/master/doc/keepon_reverse_engineering.asciidoc'&gt;Keepon Reverse Engineering Doc&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.twitter.com/qdot'&gt;My twitter account for real time updates&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.flickr.com/photos/qdot76367'&gt;My flickr account, for pictures when I remember to upload them&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='default_interfaces_ie_what_its_supposed_to_do'&gt;Default Interfaces (i.e. What It&amp;#8217;s Supposed to Do)&lt;/h2&gt;

&lt;p&gt;The MyKeepon robot isn&amp;#8217;t the most complicated toy in the world. The main selling points of the toy are that it&amp;#8217;s cute, it&amp;#8217;s interactive, it can dance to your music, and it&amp;#8217;s cute.&lt;/p&gt;
&lt;CENTER&gt;&lt;a title='photo.JPG by qdot76367, on Flickr' href='http://www.flickr.com/photos/qdot76367/6326487862/'&gt;&lt;img width='180' src='http://farm7.static.flickr.com/6214/6326487862_2f74c73eec_m.jpg' alt='photo.JPG' height='240' /&gt;&lt;/a&gt;&lt;/CENTER&gt;
&lt;p&gt;To establish the interactive cuteness, the following interfaces are available to users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 Front Buttons, for switching between &amp;#8220;Touch&amp;#8221; and &amp;#8220;Music&amp;#8221; mode&lt;/li&gt;

&lt;li&gt;5 Body Buttons, inside the skin of the keepon. 4 around the sides, one on the top of the head.&lt;/li&gt;

&lt;li&gt;A Microphone in the nose&lt;/li&gt;
&lt;/ul&gt;
&lt;CENTER&gt;&lt;a title='photo.JPG by qdot76367, on Flickr' href='http://www.flickr.com/photos/qdot76367/6325747781/'&gt;&lt;img width='240' src='http://farm7.static.flickr.com/6031/6325747781_19068f41db_m.jpg' alt='photo.JPG' height='180' /&gt;&lt;/a&gt;&lt;/CENTER&gt;
&lt;p&gt;There&amp;#8217;s 4 degrees of freedom in movement for the MyKeepon (X-Axis horizontal, Y-Axis up, Z-axis thru):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base rotation, that rotates the whole bot around the Y-Axis.&lt;/li&gt;

&lt;li&gt;X-Axis bend, for bending the head/body left/right&lt;/li&gt;

&lt;li&gt;Z-Axis bend, for bending the head/body forward/back&lt;/li&gt;

&lt;li&gt;Y-Axis compression, for &amp;#8216;squatting&amp;#8217; (action when top of head button is tapped)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A speaker is also available for playing sounds. There is no volume knob, sounds are always on, and always loud. The secondary market for keepons with volume knobs installed is going to be killer.&lt;/p&gt;

&lt;h2 id='keepon_states'&gt;Keepon States&lt;/h2&gt;

&lt;p&gt;MyKeepon has 3 states when powered on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Touch - Pays attention to buttons, looks around&lt;/li&gt;

&lt;li&gt;Music - Listens for music, or dances to rhythm tapped out using head button&lt;/li&gt;

&lt;li&gt;Sleep - Processor(s) in low power state, can be brought out of sleep by hitting music button or tapping head, which causes reset line to be pulled.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='mechanisms_and_power'&gt;Mechanisms and Power&lt;/h2&gt;

&lt;p&gt;Keepon runs on a 12v supply, using either 8AA batteries in what has to be the worst enclosure I&amp;#8217;ve ever had the displeasure of jamming batteries into, or using a 12v plug, not sold with the device (though they give a TON of info about the plug sizes needed in the manual, a surprising, rarely seen bit of information). The 12V runs to the motors, and is stepped down to 3.3v for the internal circuit.&lt;/p&gt;
&lt;CENTER&gt;&lt;a title='photo.JPG by qdot76367, on Flickr' href='http://www.flickr.com/photos/qdot76367/6326491472/'&gt;&lt;img width='180' src='http://farm7.static.flickr.com/6221/6326491472_d923ca47ba_m.jpg' alt='photo.JPG' height='240' /&gt;&lt;/a&gt;&lt;/CENTER&gt;
&lt;p&gt;Each of the motors has an encoding mechanism on it, but I haven&amp;#8217;t really done much work figuring out exactly what it is yet. I believe the largest motor for turning the base is a regular gear motor (see encoding conjecture below), but the bend motors may be small servos.&lt;/p&gt;
&lt;CENTER&gt;&lt;a title='photo.JPG by qdot76367, on Flickr' href='http://www.flickr.com/photos/qdot76367/6325743721/'&gt;&lt;img width='240' src='http://farm7.static.flickr.com/6219/6325743721_6cf38e9db2_m.jpg' alt='photo.JPG' height='180' /&gt;&lt;/a&gt;&lt;/CENTER&gt;
&lt;p&gt;On the circuit board, there are 3 pins (see picture below) that come in contact with this piece that&amp;#8217;s mounted on top of the battery pack. It&amp;#8217;s used to recenter the bot on boot, as no state may be available for motors to know their postion at time of last power off. The bot being centered is the only position where the middle pin won&amp;#8217;t have an electrical contact with one of the outer pins on the circuit board. This accounts for part of the &amp;#8220;startup time&amp;#8221; mentioned in the keepon manual.&lt;/p&gt;

&lt;h2 id='circuits_and_chips'&gt;Circuits and Chips&lt;/h2&gt;

&lt;p&gt;There&amp;#8217;s one main circuit board in the MyKeepon, with 2 very odd processors.&lt;/p&gt;
&lt;CENTER&gt;&lt;a title='Keepon circuit by qdot76367, on Flickr' href='http://www.flickr.com/photos/qdot76367/6296272375/'&gt;&lt;img width='500' src='http://farm7.static.flickr.com/6031/6296272375_8de75e398b.jpg' alt='Keepon circuit' height='375' /&gt;&lt;/a&gt;&lt;/CENTER&gt;
&lt;p&gt;The microprocessors are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Padauk P234CS20 (P234 chip in a SOP20 package)&lt;/li&gt;

&lt;li&gt;Padauk P232CS14 (P232 chip in a SOP14 package)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Their data sheets describe them as FPPAs, or &amp;#8220;Field Programmable Processor Arrays&amp;#8221;. I have no idea how this makes them special. They&amp;#8217;re dual core, hence the &amp;#8220;processor array&amp;#8221;, but other than that, they look like they&amp;#8217;re One Time Programmable, hence the Field Programmable part being&amp;#8230; questionable at best. Also, as marcan found, &lt;a href='https://twitter.com/#!/marcan42/status/131869545903296512'&gt;they tend to straight up lift figures and paragraphs from the PIC datasheets&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The two processors talk to each other via I2C. The PS232 deals with sound and encoders and is the slave node on the I2C bus, while the PS234 handles driving the h-bridges, main processing (including handling button presses), and is the master node on the I2C bus. There&amp;#8217;s more info on this communication in the next section.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s 3 H-Bridges, running to the motors listed earlier.&lt;/p&gt;

&lt;h2 id='i2c_bus_and_protocol'&gt;I2C Bus and Protocol&lt;/h2&gt;

&lt;p&gt;The MyKeepon developers have been nice enough to provide pads to access the I2C bus between the processors. Looking at the board with the solder mask facing up, it&amp;#8217;s on the lower left hand side of the board, marked with a gigantic smilie face. So they were damn well aware of what they were doing.&lt;/p&gt;

&lt;p&gt;For those not familiar with the I2C Bus, there&amp;#8217;s a good tutorial at &lt;a href='http://www.i2c-bus.org/'&gt;http://www.i2c-bus.org/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The pads exist on the bus between the processors, meaning that you can see how the master node addresses the slave node. I2C addresses are for &amp;#8220;devices&amp;#8221;, and there can be up to 127 devices on the bus, that can be written to/read from. As of this writing, only 2 devices have been found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;0x52 - Sound&lt;/li&gt;

&lt;li&gt;0x55 - Motors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To trigger a sound, an message is written by the master node to the bus in the format &amp;#8220;0x01 0xWW&amp;#8221;, where WW is the index of a sound. The following indexes are known so far (though more sounds are certainly available, they just haven&amp;#8217;t been mapped yet):&lt;/p&gt;

&lt;p&gt;Motor messages are 3 bytes, of the format &amp;#8220;0xUU 0xWW 0xVV&amp;#8221;, where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;0xUU: Motor Index&lt;/li&gt;

&lt;li&gt;0xWW: Motor Position?&lt;/li&gt;

&lt;li&gt;0xVV: Unknown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To retreive information about the motors, a read request for 12 bytes is sent to device 0x55. In normal communications between the processors, this request is sent every ~15ms by the master node. Format of the returned information is currenly unknown.&lt;/p&gt;

&lt;p&gt;Information about button presses (either body or base buttons) and input from the microphone do not seem to be relayed across the I2C bus.&lt;/p&gt;

&lt;h2 id='accessing_the_i2c_bus'&gt;Accessing the I2C Bus&lt;/h2&gt;

&lt;p&gt;Since the protocol of the I2C bus is (mostly) known, the problem becomes talking to the devices on the bus. The tap exists in between the chips, and the master node does not seem to have the capabilities to work on a multimaster bus (not to mention, the default animations being timing based means we can&amp;#8217;t stop moves we don&amp;#8217;t want from being sent). When the device is asleep, the data and clock lines are pulled to ground, meaning we can&amp;#8217;t actually communicate to any of the other devices.&lt;/p&gt;

&lt;p&gt;The only current solution seems to be to lift the I2C pins on one of the chips. This seems like the wrong thing to do, since the pads are obviously available and there&amp;#8217;s a smilie face above them, letting on that there&amp;#8217;s some way to easily access the hardware on the board.&lt;/p&gt;

&lt;h2 id='simple_modifications'&gt;Simple Modifications&lt;/h2&gt;
&lt;CENTER&gt;&lt;a title='photo.JPG by qdot76367, on Flickr' href='http://www.flickr.com/photos/qdot76367/6326494230/'&gt;&lt;img width='180' src='http://farm7.static.flickr.com/6034/6326494230_3462cb3a72_m.jpg' alt='photo.JPG' height='240' /&gt;&lt;/a&gt;&lt;/CENTER&gt;
&lt;p&gt;I&amp;#8217;ve only made a couple of small modications so far. The first is running a wire from the I2C pads out of the bot. I dremeled a small hole in the back near the plug outlet, and made sure the wire had a LOT of play inside the bot, since turning pulls it around inside.&lt;/p&gt;

&lt;p&gt;The second is putting a switch in between the speaker wires. This allows for the sound to be turned off, which is a huge blessing when you&amp;#8217;re just trying to watch the bus. A rheostat could also be installed to turn the volume down. There&amp;#8217;s a good amount of room for installation of the rheostat inside the device.&lt;/p&gt;

&lt;h2 id='whats_left_to_do'&gt;What&amp;#8217;s Left to Do&lt;/h2&gt;

&lt;p&gt;The protocol is known for the motors and sound banks, outside of what the 12 byte return from the motor device is. I&amp;#8217;ve actually got a board where I&amp;#8217;ve lifted the I2C pins on the slave processor, and am going to see whether I can communicate directly with it. Everything I&amp;#8217;m using that talks I2C doesn&amp;#8217;t deal with arbitration of a multi-master bus, so it could very well be that the master node on-board will arbitrate correctly if another node interrupts, but I haven&amp;#8217;t figured out whether or not that is true yet. It really does seem like there should be an easier, non-pin-removing way to speak to the chips on the bus, and I&amp;#8217;m really hoping no one follows my lead on pin lifting before we figure it out.&lt;/p&gt;

&lt;p&gt;However, once all that&amp;#8217;s done, we should have a completely USB controllable keepon, which I then have all sorts of ideas for, except NO NOT THAT you pervert.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/YAmcKgSyUE4" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2011/11/09/mykeepon-hacking/</feedburner:origLink></entry>
 
 <entry>
   <title>Console Controls Usage and the Kinect SDK</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/TPHXVgHz92Y/" />
   <updated>2011-06-16T15:15:09-07:00</updated>
   <id>http://www.nonpolynomial.com/2011/06/16/console-controls-usage-and-the-kinect-sdk</id>
   <content type="html">&lt;p&gt;Oh frabjous fucking day. The &lt;a href='http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/default.aspx'&gt;Microsoft Kinect SDK is out&lt;/a&gt;. Along with a license that takes a &lt;a href='http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/faq.aspx'&gt;very, very nasty FAQ to explain&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On this big day in UI development, let&amp;#8217;s take a look over the current console controls landscape, and what it means to non-game developers.&lt;/p&gt;

&lt;p&gt;Why focus on game consoles controls? They&amp;#8217;ve driven down sensor prices like crazy, due to mass manufacturing and required price points for game sales. They&amp;#8217;ve established more than a few careers of non-game-developers now. Uses of the kinect and the wiimote for projects not pertaining to their original console have been all over the media lately. Keeping a forecast of where development for these technologies is going means we have a better idea of how to ride the wave when it comes.&lt;/p&gt;

&lt;h2 id='disclaimers'&gt;Disclaimers&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In terms of licensing issues, I am not a lawyer. I do not play one on TV. However, I do have a lawyer fursona.&lt;/li&gt;

&lt;li&gt;While I am part of the OpenKinect project, I do not speak for others involved in the project. All opinions expressed here are my own, and all cursing is far fucking better than anyone else on the project could turn out, so while I may share my source code, I&amp;#8217;m not giving them rights to that.&lt;/li&gt;

&lt;li&gt;I strive to keep all the information as correct as possible, but, well, I&amp;#8217;ve been drinking.&lt;/li&gt;

&lt;li&gt;I am not a game developer. I am a reverse engineer that specializes in controls and interface devices. My view of this hardware is purely from the driver and capabilities side.&lt;/li&gt;

&lt;li&gt;I have not directly used the Move SDK or Kinect SDK. But I have read some articles and created very strong opinions, which means they are valid for internet consumption.&lt;/li&gt;

&lt;li&gt;This article is only about reversing/using alternative console controllers, not about reversing consoles themselves. There&amp;#8217;s a completely different history to that which would take much more than a blog post to cover, though I will admit that it does have some influence on the information here..&lt;/li&gt;
&lt;/ul&gt;
&lt;!--more--&gt;
&lt;h2 id='nintendo_wiimote'&gt;Nintendo Wiimote&lt;/h2&gt;

&lt;p&gt;The WiiMote was first out of the gate, so let&amp;#8217;s start with it.&lt;/p&gt;
&lt;CENTER&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/kinect-wiimote.jpg' /&gt;&lt;/CENTER&gt;
&lt;p&gt;You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100hz update for 4 IR points with 4 bits of depth @ 1024x768&lt;/li&gt;

&lt;li&gt;3-axis Accelerometer&lt;/li&gt;

&lt;li&gt;Bluetooth Communication&lt;/li&gt;

&lt;li&gt;3-axis Gyro with WiiMotion Plus&lt;/li&gt;

&lt;li&gt;Extensible Control Port&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='what_nintendo_provide_in_terms_of_software'&gt;What Nintendo provide in terms of software&lt;/h3&gt;

&lt;p&gt;Nothing.&lt;/p&gt;

&lt;h3 id='what_the_community_provides_in_terms_of_software'&gt;What the community provides in terms of software&lt;/h3&gt;

&lt;p&gt;The &lt;a href='http://wiibrew.org/wiki/Wiimote'&gt;Wiimote protocols have been reversed and known for years&lt;/a&gt;, and there&amp;#8217;s availability in pretty much every language you can think of.&lt;/p&gt;

&lt;h3 id='what_nintendo_thinks_of_nongame_developers'&gt;What Nintendo thinks of non-game developers&lt;/h3&gt;

&lt;p&gt;Are you Zelda? Are you Mario? No. No you are not. Therefore, go fuck yourself.&lt;/p&gt;

&lt;p&gt;Nintendo hasn&amp;#8217;t put out anything in terms of press releases about the DIY community during the lifetime of the Wiimote. They&amp;#8217;re happy to let them live seperately, and that&amp;#8217;s a fine strategy. Nintendo has to put zero into support, they aren&amp;#8217;t actively stopping people from using the wiimote, and developers can survive on their own.&lt;/p&gt;

&lt;h3 id='where_nintendo_is_going_with_it'&gt;Where Nintendo is going with it&lt;/h3&gt;

&lt;p&gt;Honestly? Not real sure here. With the upcoming release of the WiiU controller, there wasn&amp;#8217;t a lot of talk about Nintendo&amp;#8217;s flaily controls strategy.&lt;/p&gt;

&lt;h3 id='where_the_community_is_going_with_it'&gt;Where the community is going with it&lt;/h3&gt;

&lt;p&gt;Where haven&amp;#8217;t they? There&amp;#8217;s &lt;a href='http://johnnylee.net/projects/wii/'&gt;Johnny Lee&amp;#8217;s demos&lt;/a&gt;, there&amp;#8217;s &lt;a href='http://www.colorsaregood.de/index.php?cont=4&amp;amp;inhalt=oioo'&gt;sex toys&lt;/a&gt;, there&amp;#8217;s more &amp;#8220;generative art&amp;#8221; than you could shake a wiimote at. The Wiimote is as ubiquitous as alternative controls get these days.&lt;/p&gt;

&lt;p&gt;With the WiiMotion Plus, it even turns into a nice IMU. The WiiMote still has some life to it as a cheap, extensible sensor platform, especially with the amount of prior usage it has seen already. Outside of a somewhat flakey bluetooth interface, the &amp;#8220;just works&amp;#8221;ness of it will keep it alive for a while to come.&lt;/p&gt;

&lt;h2 id='nintendo_wiiu_controller'&gt;Nintendo WiiU Controller&lt;/h2&gt;

&lt;p&gt;I don&amp;#8217;t even know if this&amp;#8217;ll exist in a year, but it&amp;#8217;s been announced, so might as well talk about it.&lt;/p&gt;
&lt;CENTER&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/kinect-wiiu.jpg' /&gt;&lt;/CENTER&gt;
&lt;p&gt;You Get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A 6.2inch screen&lt;/li&gt;

&lt;li&gt;No idea on communications method, but enough bandwidth to pipe over video in real time&lt;/li&gt;

&lt;li&gt;Joystick&lt;/li&gt;

&lt;li&gt;3-axis Accel/Gyro&lt;/li&gt;

&lt;li&gt;Front Facing Camera&lt;/li&gt;

&lt;li&gt;Probably other stuff that I&amp;#8217;m missing or they&amp;#8217;ll add.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='what_nintendo_provide_in_terms_of_software'&gt;What Nintendo provide in terms of software&lt;/h3&gt;

&lt;p&gt;Well, it&amp;#8217;s not gonna come out for another 18 months, so I have no idea. It may not even look the same by then.&lt;/p&gt;

&lt;h3 id='where_nintendos_going_with_it'&gt;Where Nintendo&amp;#8217;s going with it&lt;/h3&gt;

&lt;p&gt;I&amp;#8230; don&amp;#8217;t know, and I don&amp;#8217;t think that&amp;#8217;s good. It&amp;#8217;s almost &lt;em&gt;too&lt;/em&gt; integrated, when we&amp;#8217;re already seeing new controllers that provide both physical controls and a detachable screen.&lt;/p&gt;
&lt;CENTER&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/kinect-livid.jpg' /&gt;&lt;/CENTER&gt;&lt;CENTER&gt;&lt;small&gt;Above: &lt;a href='http://lividinstruments.com/'&gt;Livid Instruments Controller&lt;/a&gt; integrated with iPad&lt;/small&gt;&lt;/CENTER&gt;
&lt;p&gt;These are using tablets that, by the release time of the WiiU, should be under $100. Between the Android OpenAccessories SDK and whatever Apple decides to do, this will be far beyond replicated by release. Not only that, the rumors are flying about the WiiU only working with one controller per console.&lt;/p&gt;

&lt;p&gt;In the end, it&amp;#8217;s really too far out to make accurate predictions for this, though that&amp;#8217;s obviously not stopping me from trying. I thought the GBA interface to Gamecube games was great, but, well, it could still be a GBA after that too. This&amp;#8230; Who knows. It doesn&amp;#8217;t seems as mind breaking at the Wiimote did, but then again, you only get to one-up the joystick once.&lt;/p&gt;

&lt;h3 id='what_nintendo_think_of_nongame_developers'&gt;What Nintendo think of non-game developers&lt;/h3&gt;

&lt;p&gt;You still won&amp;#8217;t be Mario or Zelda, so you can still go fuck yourself.&lt;/p&gt;

&lt;p&gt;More important this time though, why would it be easier for you to work with Nintendo&amp;#8217;s hardware than with a tablet and another accessory? Nintendo has already proven time and time again they don&amp;#8217;t care to support developers outside of console games. Doesn&amp;#8217;t seem like this will gain community traction in its current state.&lt;/p&gt;

&lt;h2 id='playstation_move'&gt;Playstation Move&lt;/h2&gt;

&lt;p&gt;Sony&amp;#8217;s entry into the gaming market: a wand with a light on it.&lt;/p&gt;
&lt;CENTER&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/kinect-move.jpg' /&gt;&lt;/CENTER&gt;
&lt;p&gt;You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A wand with a light on it&lt;/li&gt;

&lt;li&gt;Bluetooth connection&lt;/li&gt;

&lt;li&gt;Accelerometer&lt;/li&gt;

&lt;li&gt;Gyro&lt;/li&gt;

&lt;li&gt;EyeToy Camera to watch wand with light on it&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='what_sony_provides_in_terms_of_software'&gt;What Sony provides in terms of software&lt;/h3&gt;

&lt;p&gt;The &lt;a href='http://us.playstation.com/ps3/playstation-move/move-me/'&gt;MoveMe SDK&lt;/a&gt;, announced at GDC, not yet released. This allows you to get full real-time 3d positioning from Move controllers.&lt;/p&gt;

&lt;p&gt;It requires you to get this information via a network connection to your PS3. The tracking algorithms are locked onto the PS3, and you have to have the console running special server software to use the SDK.&lt;/p&gt;

&lt;p&gt;To develop for the Move, you have a minimum investment of around $600, for the controller plus the console. A fanboy would tell you that you also get a Blu-Ray player out of that. I am not a fanboy.&lt;/p&gt;

&lt;h3 id='what_the_community_provides_in_terms_of_software'&gt;What the community provides in terms of software&lt;/h3&gt;

&lt;p&gt;There&amp;#8217;s the &lt;a href='http://code.google.com/p/moveonpc/'&gt;MoveOnPC project&lt;/a&gt;, which is an effort to create open source drivers for using the Move as a control mechanism. They&amp;#8217;re not real far along yet, but the project is at least active.&lt;/p&gt;

&lt;h3 id='what_sony_think_of_nongame_developers'&gt;What Sony think of non-game developers&lt;/h3&gt;

&lt;p&gt;&amp;#8220;Absolutely adorable&amp;#8221; is about the best thing I can think of. They think the homebrew and DIY community is cute, and they seem to view homebrew devs, much like their customers, as lesser beings. Weirder still, they seem to harbor both fear and disdain at the same time. For instance, as seen through the way they released the SDK. They&amp;#8217;re making SURE you have to have a console, and that you only get what they want, and getting to their algos will require both hardware and software reversing.&lt;/p&gt;

&lt;h3 id='where_sonys_going_with_it'&gt;Where Sony&amp;#8217;s going with it&lt;/h3&gt;

&lt;p&gt;Same idea as the Wiimote, except more accurate positioning. Build plastic toys around it, use those as controls. Oh boy.&lt;/p&gt;

&lt;h3 id='where_the_community_is_going_with_it'&gt;Where the community is going with it&lt;/h3&gt;

&lt;p&gt;This turns the Nintendo view around&amp;#8230; Does the community really care? I haven&amp;#8217;t seen bounties out for the Move. I haven&amp;#8217;t seen message boards filled with people working on it. This time, it seems like the company would be insulting the community with the way they released their SDK, but the community doesn&amp;#8217;t even care in the first place.&lt;/p&gt;

&lt;h2 id='microsoft_kinect'&gt;Microsoft Kinect&lt;/h2&gt;

&lt;p&gt;For the Kinect, we&amp;#8217;ve got so many different solutions out there now that I&amp;#8217;m actually splitting them into their own sections.&lt;/p&gt;
&lt;CENTER&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/kinect-teardown.jpg' /&gt;&lt;/CENTER&gt;
&lt;p&gt;You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;640x480 RGB @ 30hz&lt;/li&gt;

&lt;li&gt;320x240 Depth @ 30hz, .5-4m depth range&lt;/li&gt;

&lt;li&gt;USB 2.0 High Speed Connection&lt;/li&gt;

&lt;li&gt;Microphone Array&lt;/li&gt;

&lt;li&gt;LED, Accelerometer&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='microsoft_kinect__openkinect'&gt;Microsoft Kinect - OpenKinect&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://www.openkinect.org'&gt;OpenKinect&lt;/a&gt; was the project that sprung up around the &lt;a href='http://www.adafruit.com/blog/2010/11/10/we-have-a-winner-open-kinect-drivers-released-winner-will-use-3k-for-more-hacking-plus-an-additional-2k-goes-to-the-eff/'&gt;OpenKinect Bounty hosted by Adafruit Industries&lt;/a&gt; in November 2010. If you&amp;#8217;ve like a more in-depth history, check out &lt;a href='http://fora.tv/2011/05/21/Kyle_Machulis_OpenKinect'&gt;my presentation on it at Maker Faire 2011&lt;/a&gt;.&lt;/p&gt;
&lt;CENTER&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/kinect-openkinect.png' /&gt;&lt;/CENTER&gt;
&lt;p&gt;As I said in the intro, while I am part of the OpenKinect project, what I am stating about the project here is my own opinion, and does not speak for other members of the project.&lt;/p&gt;

&lt;h3 id='what_openkinect_provides'&gt;What OpenKinect provides&lt;/h3&gt;

&lt;p&gt;An open-source, cross-platform method for accessing raw data coming off of the kinect. Nothing more, nothing less. It was the first to publically provide access to images, leds, and accelerometers on all major platforms. Audio support is in the works, and has been taken to the proof of concept stage.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s been talk of including processing algorithms created by the open source community, in a seperate library. This part of the project has not yet taken shape, though, and most concentration lies in finishing the driver.&lt;/p&gt;

&lt;h3 id='what_openkinect_think_of_nongame_developers'&gt;What OpenKinect think of non-game developers&lt;/h3&gt;

&lt;p&gt;Not to sound harsh, but they just don&amp;#8217;t. They don&amp;#8217;t really think about any kind of specific developer. The driver exists to be just the driver, and this is the simplest way to serve that goal. You take it and do whatever you want with it. Have fun.&lt;/p&gt;

&lt;p&gt;What this means is that, unlike OpenNI and Microsoft&amp;#8217;s SDK, OpenKinect is the easiest way to get the raw data from the camera. If you are interested in doing something other than skeleton tracking, this makes it the lowest barrier to entry.&lt;/p&gt;

&lt;h3 id='where_openkinect_is_going_with_it'&gt;Where OpenKinect is going with it&lt;/h3&gt;

&lt;p&gt;At this point, it&amp;#8217;s all about finishing providing the features of the camera. This mostly has to do with the audio core, as the camera features are fairly well covered.&lt;/p&gt;

&lt;p&gt;In terms of what will happen with OpenKinect now that the Microsoft SDK is out, I think the answer is &amp;#8220;not much&amp;#8221;. There&amp;#8217;s a fork of OpenNI&amp;#8217;s sensor library that uses OpenKinect to talk to the kinect and provide the rest of the OpenNI capabilities for that camera. MS has no interest in supporting non-windows 7 platforms, so there will certainly still be a place for OpenKinect in the Kinect ecosystem.&lt;/p&gt;

&lt;p&gt;Not only that, Windows has been by far the hardest platform to deal with for development and support for OpenKinect. I actually hope that we can build an API wrapper around the MS SDK, to make it fit with OpenKinect without having to switch out drivers. However, having not read much of the MS SDK documentation as of yet, this remains to be seen.&lt;/p&gt;

&lt;p&gt;Also, with the licensing terms as they currently are, OpenKinect remains commercially viable on all platforms, while Microsoft&amp;#8217;s SDK specifically prohibits that kind of usage.&lt;/p&gt;

&lt;h2 id='microsoft_kinect__primesenseopenni'&gt;Microsoft Kinect - PrimeSense/OpenNI&lt;/h2&gt;

&lt;p&gt;A few weeks after the OpenKinect project put out the source for their library, depth camera chip manufacturer &lt;a href='http://www.primesense.com'&gt;PrimeSense&lt;/a&gt; followed suit with their own SDK, known as &lt;a href='http://www.openni.org'&gt;OpenNI&lt;/a&gt;.&lt;/p&gt;
&lt;CENTER&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/kinect-openni.png' /&gt;&lt;/CENTER&gt;
&lt;p&gt;OpenNI is both a library and an initiative. The library is the implementation of a standard that PrimeSense is pushing to be a standard SDK for future depth sensors. The initiative part includes multiple companies on board with this standard.&lt;/p&gt;

&lt;h3 id='what_primesense_provides'&gt;What PrimeSense provides&lt;/h3&gt;

&lt;p&gt;PrimeSense provides 3 different libraries, all cross-platform, with varying open/closed source policies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sensor - Hardware access library. Their version only supports their PrimeSense SDK camera, but there&amp;#8217;s a version that&amp;#8217;s build on top of OpenKinect for kinect access. Open Source.&lt;/li&gt;

&lt;li&gt;OpenNI - This is supposed to be an &amp;#8220;abstraction library for depth cameras&amp;#8221;. Which I guess translates into &amp;#8220;huge C++ beast&amp;#8221;. It&amp;#8217;s a way to abstract depth camera information so you can use anything providing depth data with any program that will take depth data. Seeing the only consumer depth cameras are PrimeSense&amp;#8217;s, this works out well for them. Open Source.&lt;/li&gt;

&lt;li&gt;NITE - This is PrimeSense&amp;#8217;s body/skeleton tracking library. Unlike Microsoft&amp;#8217;s algorithms, NITE requires a calibration pose to find skeletons, meaning you have to stand in front of the camera and hold your arms in a certain way for it to find you in the scene. This can be flakey sometimes. Unlike Microsoft&amp;#8217;s libraries, NITE is available for commercial use. It is closed source, but the binaries are free.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id='what_they_think_of_nongame_developers'&gt;What they think of non-game developers&lt;/h3&gt;

&lt;p&gt;Developers, via OpenNI, are marketing for PrimeSense.&lt;/p&gt;

&lt;p&gt;Funny enough, PrimeSense doesn&amp;#8217;t actually care about game developers. It&amp;#8217;s not really even their domain. Primesense wants to own the home theatre remote control market, hence their focus on things like the Asus Wavi Xtion. The battle for being able to control your media consumption is far larger than the battle to control how you flail in front of your TV and call it control. More people watch TV and movies than play video games, and the amount of hours logged on watching activities is exponentially higher. TV Remotes are getting unwieldy now, so the next step that is apparently logical to someone with money is that we now wave our hands around to start and stop our movies, or change our channels.&lt;/p&gt;

&lt;p&gt;On top of this, PrimeSense is not a camera company, they are a chip company. They need to be able to sell their chip in large quantities to people who will manufacture cameras with it. Therefore, if developers make applications with OpenNI/NITE, and OpenNI/NITE will &amp;#8220;just work&amp;#8221; with any PrimeSense camera, then PrimeSense gets to claim they are &amp;#8220;open&amp;#8221;, and anyone that manufactures a camera with a PrimeSense chip will have access to all the applications that&amp;#8217;ve already been written by other developers.&lt;/p&gt;

&lt;h3 id='where_theyre_going_with_it'&gt;Where they&amp;#8217;re going with it&lt;/h3&gt;

&lt;p&gt;OpenNI/NITE is another weapon in the battle for the home theatre as home information hub. That&amp;#8217;s why PrimeSense wants the chip and software everywhere, not just in kinects. So, they&amp;#8217;re betting both for and against Microsoft at the same time, which is a very interesting position to be in.&lt;/p&gt;

&lt;p&gt;If NITE doesn&amp;#8217;t support non-calibration poses very soon, it&amp;#8217;s going to lose out to SDKs that do. MS has proven you can track bodies without calibration, even if it does take thousands of hours of video to analyze through advanced algorithms. Now that MS&amp;#8217;s SDK is out and does not require calibration poses, people&amp;#8217;s expectations are quickly going to change. NITE still has a foothold on the commercial licensing side, but that doesn&amp;#8217;t help much for consumer expectations of product.&lt;/p&gt;

&lt;h2 id='microsoft_kinect__microsofts_sdk'&gt;Microsoft Kinect - Microsoft&amp;#8217;s SDK&lt;/h2&gt;

&lt;p&gt;On June 16th 2011, &lt;a href='http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/'&gt;Microsoft released their own SDK for the kinect&lt;/a&gt;, much to the surprise of just about everyone, since there had been no communication since March about it.&lt;/p&gt;
&lt;CENTER&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/kinect-mssdk.png' /&gt;&lt;/CENTER&gt;
&lt;p&gt;As of this writing, the SDK is still considered &amp;#8220;beta&amp;#8221;, and is only available for non-commercial use.&lt;/p&gt;

&lt;h3 id='what_microsoft_provides'&gt;What Microsoft provides&lt;/h3&gt;

&lt;p&gt;Seamless skeleton tracking, which is a huge deal. While the algorithms have been released and replicated in open source, the advantage that MS has here is big data. Thousands of hours of training sets to send through the algorithm so that it can find any body type, meaning that people can walk in and out of the scene and instantly be recognized and tracked. Seriously fucking &lt;em&gt;BIG&lt;/em&gt; deal.&lt;/p&gt;

&lt;p&gt;There is also access to the audio system, which no project has gotten a complete hold on yet. OpenKinect has some access to the raw audio stream, but Microsoft provides a voice SDK that allows developers to identify and position users based on sound.&lt;/p&gt;

&lt;h3 id='what_they_think_of_nongame_developers'&gt;What they think of non-game developers&lt;/h3&gt;

&lt;p&gt;With the beta licensing terms, developers are somewhere between fanboys and marketing. Open Source developers are back on the bad side, too.&lt;/p&gt;

&lt;p&gt;The &lt;a href='http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/faq.aspx'&gt;Beta SDK FAQ&lt;/a&gt; is chock full of interesting issues, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not being able to distribute applications standalone, users must also download SDK to get the runtimes&lt;/li&gt;

&lt;li&gt;No commercial use, and on top of that, due to the fact that MS cannot predict the usage of the kinect SDK, all SDK derived applications should not be considered &amp;#8220;allowed under the SDK&amp;#8221;.&lt;/li&gt;

&lt;li&gt;Microsoft owns the right to say what software you can use the hardware with, and using the kinect with anything outside of the SDK is not allowed. Even with this wording in place, the MSDN Channel 9 launch video lauded all of the open source applications currently available for the kinect.&lt;/li&gt;

&lt;li&gt;The SDK will not run on Virtual Machines&lt;/li&gt;

&lt;li&gt;Refusal for any SDK derived application code to be released under copyleft licenses (GPL, etc&amp;#8230;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, you can write kinect apps for yourself, then you can upload videos of those apps to show off how awesome the SDK is, but redistribution is not allowed, and neither is selling. There&amp;#8217;s no word on when a commercial SDK will be available or how much it will cost.&lt;/p&gt;

&lt;p&gt;Of course, MS can&amp;#8217;t really track most of what they claim in the FAQ, but it seems to be worded in a very predatory way. It&amp;#8217;s still better than Sony&amp;#8217;s &amp;#8220;lock down the algorithms on the console&amp;#8221; idea, and it&amp;#8217;s not really enforcable for a lot of projects. Whether anyone but nerds like me will give a shit about that is a completely different question that we&amp;#8217;re not going to answer because it&amp;#8217;s my blog and I&amp;#8217;m the center of the universe here.&lt;/p&gt;

&lt;h3 id='where_theyre_going_with_it'&gt;Where they&amp;#8217;re going with it&lt;/h3&gt;

&lt;p&gt;Everywhere, and into everything, as fast as possible. Which, for a company the size of Microsoft, will not be all that quick. There&amp;#8217;s already talk of Windows 8 shipping with kinect drivers.&lt;/p&gt;

&lt;p&gt;With the algorithms and samples Microsoft has put out in their SDK, they&amp;#8217;ve jumped way ahead of the other solutions in the NUI game. Without the calibration pose requirement, MS SDK programs should &amp;#8220;just work&amp;#8221; for people coming in to/out of the scene. It adds access to the audio core that no other solution can get anywhere near at the moment. For the time being, MS is now winning the NUI game in terms of capabilities available to developers.&lt;/p&gt;

&lt;p&gt;At least, for developers want to make non-distributable demos. Since the license is still non-commercial only, that&amp;#8217;s all they&amp;#8217;re going to win. This could end up pissing off the industry enough that they find some way to replicate it without Microsoft&amp;#8217;s terms. At that point, we have a very fun war on our hands.&lt;/p&gt;

&lt;h3 id='where_the_community_is_going_with_it'&gt;Where the community is going with it&lt;/h3&gt;

&lt;p&gt;There&amp;#8217;s not much of a community to speak of since it&amp;#8217;s been out all of 10 hours as I write this. While I know &lt;a href='http://www.codeplex.com'&gt;CodePlex&lt;/a&gt; is huge, I&amp;#8217;ve never really dealt with the MS Open Source Community, or, well, any MS community period in the past decade or so. I guess we&amp;#8217;ll see what happens. I&amp;#8217;m certainly interested to see how the cultural philosophies of OpenKinect versus MS SDK influence the projects that come out of them.&lt;/p&gt;

&lt;p&gt;For a better perspective on this, I defer to &lt;a href='http://nui.joshland.org/'&gt;Josh Blake&lt;/a&gt;, who I am signing up to write an article on it before even asking him. Hi Josh!&lt;/p&gt;

&lt;h2 id='conclusion'&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;So, that&amp;#8217;s how I see things going for creative outside development on console controls for the time being. Take it with a variable sized grain of salt.&lt;/p&gt;

&lt;p&gt;For the wiimote, it&amp;#8217;s gonna keep dropping from an already fairly cheap price, and the fact that you don&amp;#8217;t have to solder things to it makes it very handy for prototyping. It&amp;#8217;ll live for a while longer.&lt;/p&gt;

&lt;p&gt;I wouldn&amp;#8217;t be surprised if the move never sees the light of day in the maker community. It&amp;#8217;s just not getting any sort of traction from either side, and it seems easy enough to just replicate at some point.&lt;/p&gt;

&lt;p&gt;For the Kinect, MS has a good grip on the NUI market now. However, there are many other uses for depth cameras that don&amp;#8217;t require a body to be in front of it. 3d modeling, robotics, art, etc&amp;#8230; Yes, the kinect was made to track bodies, and that&amp;#8217;s what the camera range and other properties of the camera reflect. While the MS SDK will make access the raw data easier on windows, it won&amp;#8217;t completely overtake the Kinect development world.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;ll also be interesting to see if the open source community can figure out a way to source enough data to train their own algorithms, and provide MS with some competition. We&amp;#8217;ve thrown this idea around at the &lt;a href='http://www.meetup.com/3DVision/'&gt;SF 3D Vision Meetup&lt;/a&gt; and in the &lt;a href='http://openkinect.org/wiki/IRC'&gt;OpenKinect IRC channel&lt;/a&gt;, but that&amp;#8217;s a huge undertaking. It signals the next big move for the open source community though. We&amp;#8217;ve proven out big code, and see huge projects released as open source. Now it&amp;#8217;s time to start playing more with open big data.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/TPHXVgHz92Y" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2011/06/16/console-controls-usage-and-the-kinect-sdk/</feedburner:origLink></entry>
 
 <entry>
   <title>Upcoming Speaking Engagements</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/CCFy2Ezbk8s/" />
   <updated>2011-05-13T21:12:12-07:00</updated>
   <id>http://www.nonpolynomial.com/2011/05/13/upcoming-speaking-engagements</id>
   <content type="html">&lt;p&gt;This summer is shaping up to be a busy one&amp;#8230;&lt;/p&gt;
&lt;CENTER&gt;&lt;A HREF='http://makerfaire.com'&gt;&lt;IMG SRC='http://images.nonpolynomial.com/openyou.org/blog/makerfaire.gif' /&gt;&lt;/A&gt;&lt;/CENTER&gt;
&lt;p&gt;I&amp;#8217;m speaking at &lt;a href='http://www.makerfaire.com'&gt;Maker Faire&lt;/a&gt;. Twice, even!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2011-05-21 3:30pm - &lt;a href='http://www.openyou.org'&gt;OpenYou.org&lt;/a&gt; Presentation, Health 2.0 Stage&lt;/li&gt;

&lt;li&gt;2011-05-21 6:00pm - &lt;a href='http://www.openkinect.org'&gt;OpenKinect&lt;/a&gt; Presentation, Main Stage&lt;/li&gt;
&lt;/ul&gt;
&lt;CENTER&gt;&lt;A HREF='http://quantifiedself.com/conference/'&gt;&lt;IMG SRC='http://images.nonpolynomial.com/openyou.org/blog/qs_conf.png' /&gt;&lt;/A&gt;&lt;/CENTER&gt;
&lt;p&gt;Then there&amp;#8217;s the &lt;a href='http://quantifiedself.com/conference'&gt;Quantified Self Conference&lt;/a&gt; on May 28-29th, 2011, at the Computer History Museum in Mountain View, CA. There&amp;#8217;s no central presentation, but honestly, I probably won&amp;#8217;t stop talking at any point during the 2 days, as I have a table at the expo, plus will be helping out with the health hardware session and the hackathon.&lt;/p&gt;
&lt;CENTER&gt;&lt;A HREF='http://en.www.netexplorateur.org/'&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/netexplore_zoom.jpg' /&gt;&lt;/A&gt;&lt;/CENTER&gt;
&lt;p&gt;On June 23rd, I&amp;#8217;ll be doing a presentation on the &lt;a href='http://www.openkinect.org'&gt;OpenKinect&lt;/a&gt; project at &lt;a href='http://en.www.netexplorateur.org/'&gt;NetExplorateur Zoom 2011&lt;/a&gt; in Paris.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/CCFy2Ezbk8s" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2011/05/13/upcoming-speaking-engagements/</feedburner:origLink></entry>
 
 <entry>
   <title>XIO - Novint's Gaming Exoskeleton</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/V_nRsp72h1o/" />
   <updated>2011-04-24T23:12:21-07:00</updated>
   <id>http://www.nonpolynomial.com/2011/04/24/xio-novints-gaming-exoskeleton</id>
   <content type="html">&lt;p&gt;I&amp;#8217;m not really used to writing about hardware that&amp;#8217;s hardly to prototype stage yet, but damn, I cannot wait &amp;#8216;til this comes out so I can start reverse engineering it.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.novint.com'&gt;Novint&lt;/a&gt;, the company that manufacturers the &lt;a href='http://novint.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=39&amp;amp;Itemid=175'&gt;Falcon&lt;/a&gt; haptic device (that I wrote/maintain the cross-platform &lt;a href='http://www.github.com/qdot/libnifalcon'&gt;libnifalcon&lt;/a&gt; for - if you aren&amp;#8217;t familiar with the falcon, &lt;a href='http://www.nonpolynomial.com/2008/03/25/everything-i-know-about-the-novint-falcon-as-of-march-2008/'&gt;check out this rather exhaustive article I wrote on it a couple of years ago&lt;/a&gt;), recently announced a merger with another company.&lt;/p&gt;

&lt;p&gt;The other company in the deal, Forcetek Enterprises, doesn&amp;#8217;t even seem to exist outside of the PR about this merger (&lt;em&gt;UPDATE:&lt;/em&gt; &lt;a href='http://www.forcetekusa.com/'&gt;Ok, I actually found their old website finally.&lt;/a&gt; Apparently this was shown at E3?). Successful stealth mode.&lt;/p&gt;

&lt;p&gt;What came out of the merger&amp;#8230;&lt;/p&gt;
&lt;CENTER&gt;&lt;A HREF='http://novint.com/index.php?option=com_content&amp;view=article&amp;id=76&amp;Itemid=178'&gt;&lt;IMG SRC='http://images.nonpolynomial.com/nonpolynomial.com/blog/xioarm.jpg' /&gt;&lt;/A&gt;&lt;/CENTER&gt;
&lt;p&gt;is a partial exoskeleton for gaming.&lt;/p&gt;

&lt;p&gt;The XIO is a sleeve exoskeleton that allows you to feel forces throughout the arm, versus just through the hand like the Novint Falcon. There is actuation along the arm and elbow, meaning much larger force distribution and a much more immersive feel. In applied terms, this means that you&amp;#8217;ll be able to feel things like gun kickback all the way through your shoulder, versus just your hand. You can also do interesting things like simulating weight and fatigue in the arms by restricting certain movements.&lt;/p&gt;

&lt;p&gt;This combined with depth cameras like the kinect could be HUGE. Players would have both full body tracking AND at least partial body actuation, which is better than the &amp;#8220;flail without feedback&amp;#8221; option we&amp;#8217;ve had for years with the Power Glove/P5/Wiimote/Kinect/Move.&lt;/p&gt;

&lt;p&gt;The demo video below shows a full VR rig built from consumer hardware, using&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vuzix HMD&lt;/li&gt;

&lt;li&gt;XIO&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.tngames.com'&gt;TNGames Third Space Vest&lt;/a&gt; (&lt;a href='http://www.github.com/qdot/libthirdspacevest'&gt;Which I also write drivers for!&lt;/a&gt;)&lt;/li&gt;

&lt;li&gt;Some new gun controller&lt;/li&gt;
&lt;/ul&gt;
&lt;CENTER&gt;&lt;object width='480' height='390'&gt;&lt;param name='movie' value='http://www.youtube.com/v/lV3j2Yxv7jY?fs=1&amp;amp;hl=en_US' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed width='480' src='http://www.youtube.com/v/lV3j2Yxv7jY?fs=1&amp;amp;hl=en_US' allowfullscreen='true' type='application/x-shockwave-flash' height='390' allowscriptaccess='always' /&gt;&lt;/object&gt;&lt;/CENTER&gt;
&lt;p&gt;The XIO is supposed to integrate with Novint&amp;#8217;s &lt;em&gt;F-Gen&lt;/em&gt; drivers. F-Gen is an abstract programmer layer (similar to &lt;a href='http://sites.google.com/site/carlkenner/glovepie'&gt;GlovePIE&lt;/a&gt;) made to implement haptics on top of arbitrary games, instead of doing direct game integration (which Novint has with things like Source Engine games and the Penumbra series). This allows users to possibly script haptics to whatever game they want. How well this works, I have no idea, but it means that any game the falcon supports should also be supported by the XIO on release.&lt;/p&gt;

&lt;p&gt;Novint&amp;#8217;s yet again done a horrible job of the PR with this one, as it looks like no one has really picked up the news yet even though the press release happened over a week ago, and now all of the images on the front page of their site are broken. &lt;a href='http://www.twitter.com/tomlucient'&gt;Novint&amp;#8217;s CEO even changed his twitter account on the launch&lt;/a&gt; for reasons I&amp;#8217;m not real sure of.&lt;/p&gt;

&lt;p&gt;That said, I&amp;#8217;ve been incredibly happy with Novint&amp;#8217;s quality of engineering on the Falcon. Novint knows how to make extensible hardware, as they&amp;#8217;ve shown with the grip and firmware system on the falcon. It was a joy to reverse engineer, and I&amp;#8217;m hoping that follows onto this as well. I can&amp;#8217;t wait to get my hands on (and in) the XIO.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/V_nRsp72h1o" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2011/04/24/xio-novints-gaming-exoskeleton/</feedburner:origLink></entry>
 
 <entry>
   <title>np_epoc v0.2 released</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/SbvnhMyCYig/" />
   <updated>2011-03-14T00:12:09-07:00</updated>
   <id>http://www.nonpolynomial.com/2011/03/14/np_epoc-v02-released</id>
   <content type="html">&lt;p&gt;Did some work this weekend on making np_epoc a little more usable, since v0.1 had VID/PID and encryption keys hardcoded to the headset I have.&lt;/p&gt;
&lt;a title='np_epoc by qdot76367, on Flickr' href='http://www.flickr.com/photos/qdot76367/5080605788/'&gt;&lt;img width='410' src='http://farm5.static.flickr.com/4013/5080605788_eb455a1daa.jpg' alt='np_epoc' height='500' /&gt;&lt;/a&gt;
&lt;p&gt;VID/PID and key are now selectable by users. You can also get a device count to make sure you have the VID/PID pair set up correctly.&lt;/p&gt;

&lt;p&gt;Hopefully key and ID detection will be done by &lt;a href='http://www.github.com/qdot/emokit'&gt;emokit&lt;/a&gt; soon, but that&amp;#8217;s going to take a little more work since we&amp;#8217;re not yet sure how the key is deduced on connection.&lt;/p&gt;

&lt;p&gt;&lt;a href='https://sourceforge.net/projects/nplabs/files/np_epoc/0.2/'&gt;Binaries are available on the sourceforge NP Labs release site.&lt;/a&gt; Currently I&amp;#8217;ve only got OS X 10.6 Max 5 binaries up. Pd has been tested on linux, works fine, but the source package is&amp;#8230; not the best at the moment, so I&amp;#8217;ll hopefully have OS X and Linux Pd binaries up soon. I&amp;#8217;m still trying to figure out how I&amp;#8217;m going to build the binaries for windows at all, since VS10 is giving me some problems against flext.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/SbvnhMyCYig" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2011/03/14/np_epoc-v02-released/</feedburner:origLink></entry>
 
 <entry>
   <title>Taking over Emokit lead</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/fsLJHfRIr50/" />
   <updated>2011-02-25T15:01:09-08:00</updated>
   <id>http://www.nonpolynomial.com/2011/02/25/taking-over-emokit-lead</id>
   <content type="html">&lt;p&gt;They say he who dies with the most maintainerships&amp;#8230; dies very tired.&lt;/p&gt;
&lt;CENTER&gt;&lt;A HREF='http://www.github.com/qdot/emokit/'&gt;&lt;IMG SRC='http://images.nonpolynomial.com/openyou.org/blog/emotiv.gif' /&gt;&lt;/A&gt;&lt;/CENTER&gt;
&lt;p&gt;The &lt;a href='http://www.github.com/qdot/emokit/'&gt;emokit&lt;/a&gt; project, started by &lt;a href='http://daeken.com/'&gt;Daeken&lt;/a&gt;, aims to provide a free driver to access raw data coming from the Emotiv EPOC headset. However, he&amp;#8217;s been really busy being awesome elsewhere lately, so after picking up the decode key for the special pre-release unit, writing a C implementation of the library, and fielding some support emails, I (Kyle) have finally just gone ahead and taken the lead maintainer role on the project.&lt;/p&gt;

&lt;p&gt;Many thanks go to &lt;a href='http://daeken.com/'&gt;Daeken&lt;/a&gt; for the initial work on getting the library and community together, and hopefully he&amp;#8217;ll come back to visit at some point.&lt;/p&gt;

&lt;p&gt;The new main repo is at&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.github.com/qdot/emokit/'&gt;http://www.github.com/qdot/emokit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next big steps for the project are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Isolating the power level readings&lt;/li&gt;

&lt;li&gt;Finishing up and formalizing the C library&lt;/li&gt;

&lt;li&gt;Getting a full v0.1 release out&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also develop the &lt;a href='http://www.github.com/qdot/np_epoc/'&gt;np_epoc external for Max/Pd&lt;/a&gt;. I expect that I&amp;#8217;ll be updating the external along with anything we get done with the headset itself, so keep an eye on that &lt;a href='http://www.nonpolynomial.com/externals/'&gt;on my personal externals page&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/fsLJHfRIr50" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2011/02/25/taking-over-emokit-lead/</feedburner:origLink></entry>
 
 <entry>
   <title>Introducing OpenYou.org</title>
   <link href="http://feedproxy.google.com/~r/nonpolynomiallabs/~3/a1uJ9mIG6XY/" />
   <updated>2011-02-24T22:37:21-08:00</updated>
   <id>http://www.nonpolynomial.com/2011/02/24/openyou</id>
   <content type="html">&lt;CENTER&gt;
&lt;div style='background:#009900;width:150px;height:93px;'&gt; 
  &lt;A HREF='http://www.openyou.org'&gt;&lt;IMG SRC='http://images.nonpolynomial.com/openyou.org/site/openyoutranssmall.png' /&gt;&lt;/A&gt; 
&lt;/div&gt; 
  &lt;/CENTER&gt;
&lt;p&gt;It&amp;#8217;s been a while since I&amp;#8217;ve started up a new website, and I found myself doing enough work on health hardware that I decided to spin it out into its own site. Not to mention, there&amp;#8217;s already a ton of drivers and software out there, but there&amp;#8217;s been no central place to record it thus far. &lt;a href='http://www.openyou.org'&gt;openyou.org&lt;/a&gt; will feature posts about open source health technology, as well as information on library and driver projects to give developers and users new ways to learn about themselves via code.&lt;/p&gt;

&lt;p&gt;Hopefully I manage to keep it up a little better than I have here and &lt;a href='http://www.slashdong.org'&gt;slashdong&lt;/a&gt; lately, too.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/nonpolynomiallabs/~4/a1uJ9mIG6XY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://www.nonpolynomial.com/2011/02/24/openyou/</feedburner:origLink></entry>
 
 
</feed>
