<?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>LMNts</title>
	<atom:link href="http://lmnts.lmnarchitects.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://lmnts.lmnarchitects.com</link>
	<description></description>
	<lastBuildDate>Wed, 18 Jan 2012 08:53:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Cabinet of Curiosities</title>
		<link>http://lmnts.lmnarchitects.com/news/cabinet-of-curiosities/</link>
		<comments>http://lmnts.lmnarchitects.com/news/cabinet-of-curiosities/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 18:04:54 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design Technology]]></category>
		<category><![CDATA[Still Life]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=1017</guid>
		<description><![CDATA[LMNts&#8217; third blog post and image are up on Metropolis Magazine&#8217;s POV blog where Scott Crawford shares his thoughts on a design technology Cabinet of Curiosities.  Be sure to also checkout Confessions of a Design Technology Evangelical and Re-Upping on Design Technology if you haven&#8217;t already.]]></description>
			<content:encoded><![CDATA[<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/01/CabinetofCuriosities.jpg" rel="shadowbox[sbpost-1017];player=img;"><img class="alignleft size-large wp-image-1018" title="CabinetofCuriosities" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/01/CabinetofCuriosities-1024x682.jpg" alt="" width="1024" height="682" /></a></p>
<p>LMNts&#8217; third blog post and image are up on <a href="http://www.metropolismag.com/pov/">Metropolis Magazine&#8217;s POV blog</a> where <a href="http://lmnts.lmnarchitects.com/author/scrawford/">Scott Crawford</a> shares his thoughts on a design technology <a href="http://www.metropolismag.com/pov/20120115/cabinet-of-curiosities#more-22566">Cabinet of Curiosities</a>.  Be sure to also checkout <a title="Field Notes on Metropolis" href="http://www.metropolismag.com/pov/20111204/field-notes">Confessions of a Design Technology Evangelical</a> and <a href="http://www.metropolismag.com/pov/20111103/re-upping-on-design-technology">Re-Upping on Design Technology</a> if you haven&#8217;t already.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/cabinet-of-curiosities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grasshopper Canvas with Kinect Interaction: Part 3</title>
		<link>http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3/</link>
		<comments>http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:26:19 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[Interaction]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Grasshopper]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=986</guid>
		<description><![CDATA[This post - part of a series of 3 posts on the Kinect Multitouch Interaction - is a detailed technical walkthrough of the code we implemented to support touch from depth.  The downloadable code that this post refers to is in Part 2 in the series.  This post is meant to serve as a foundational primer for the major modules of the code that build up the touch-from-depth interaction.]]></description>
			<content:encoded><![CDATA[<p>As we mentioned in the <a title="Grasshopper Canvas with Kinect Interaction: Part 2" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-2">previous post</a>, a complete code walk-through for the Kinect SDK is beyond the scope of this blog post.   Microsoft has <a title="Microsoft Kinect for PC SDK Quickstarts" href="http://channel9.msdn.com/Series/KinectSDKQuickstarts">some great documentation and support for getting up and running with the SDK</a>.  That said, let&#8217;s cover the main event loop for the TouchGestures source code we are providing on top of Microsoft&#8217;s code&#8230;</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Kinect-Multitouch-MissionMode-Event-Loop1.png" rel="shadowbox[sbpost-986];player=img;"><img class="alignleft  wp-image-992" title="Kinect-Multitouch-MissionMode-Event Loop" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Kinect-Multitouch-MissionMode-Event-Loop1.png" alt="" width="278" height="346" /></a>The basic steps in our touch-as-depth software can be summarized by the flowchart at left.  For each mode of operation (SurfaceCalibration, ExtentsCalibration, and MissionMode), the data flow is slightly different.  The flowchart displayed is that of the typical MissionMode flow loop.   Let&#8217;s go over these one by one&#8230;</p>
<p>Depth information is gathered frame-by-frame from the Kinect.  These depth points are stored in the depth buffer.  Next, the base interaction surface is found in relation to the location of the Kinect (as determined by the SurfaceCalibration routine).  During MissionMode, if it&#8217;s the first pass through, all the depth data is adjusted relative to the calibration matrix.  In all subsequent frames, this depth data is then compared relative to the surface to determine whether or not there is a &#8220;touch&#8221; event.  The raw touch-from-depth data is then filtered using a custom mean filter that weeds out some of the extraneous noise&#8230;some, but not all.  Connected 8 component labeling is used to disambiguate one finger from another.  Particle analysis is then performed to figure out exactly which points are &#8220;touch&#8221; points and which are noise&#8230;at this point, the data should not be noisy.  Now that we have the touch points, we need to make sure they line up with the spots in the real world.  The raw points as seen by the Kinect are then transformed relative to the tracked space (as determined by the ExtentsCalibration routine).  Finally, a filter is applied to the frame-to-frame behavior of the points to determined their mapped keyboard and mouse event.  Rinse and repeat&#8230;as fast as possible.  Now let&#8217;s go through each of the steps in more detail&#8230;<span id="more-986"></span></p>
<h3>SurfaceCalibration Mode</h3>
<p>Once you have placed your Kinect relative to the surface (a table, a wall, a chair, etc.) you want to track touch on, you need to get some very accurate readings about depth.  This is a one-time calibration&#8230;unless you move your Kinect or change the surface, in which case you will need to re-calibrate.  The <em>SurfaceCalibration</em> mode is responsible for modeling the interaction surface over multiple frames and a fixed spatial resolution of 640&#215;480 depth points.  The <a title="Using a Depth Camera as a Touch Sensor" href="http://research.microsoft.com/en-us/um/people/awilson/publications/WilsonITS2010/WilsonITS2010.html">methodology of modeling the surface and extracting touch information</a> that we use is explained very clearly by Andy Wilson of Microsoft Research.  Unfortunately, the process does not calculate depth information adaptively.  Hence, any objects placed on the interaction surface during calibration will be modeled as being part of the touch space.  It is important to keep the field-of-view devoid of interference from direct light sources and objects (even a few seconds of interference would yield result in errors of ~10% in calibration).</p>
<p><em>SurfaceCalibration</em> mode involves a single step as soon as the depth buffer is ready and locked.  This step contains the routine <code>(Gelib_DoSurfaceCalibration)</code> that translates the depth values to millimeters and stores the cumulative sum over a period.  The number of frames to track the depth values (defined by <code>DUMPFOR</code> parameter) and the frame interval (defined by <code>DUMPEVERY</code> parameter) are specified in the header file <code>TouchGestures.h</code>.  The calibration routine shows a progress bar.  Once the depth values are gathered, the final depth data for each pixel (one of 640&#215;480) are calculated by finding the average values (dividing each pixel accumulated value by <code>DUMPFOR</code>).  The average depth values are stored in the file <code>DepthAverage.dump</code> (our file format uses a semicolon-space-newline delimitation).  The <code>SurfaceCalibration.exe</code> application may be terminated as soon as this file is generated (or as soon as the progress bar indicates completion).  At this point, the Kinect should be calibrated relative to your surface and you are ready to tell the Kinect what the boundaries of your tracked space are&#8230;for that you switch to:</p>
<h3>ExtentsCalibration Mode</h3>
<p>During the <em>ExtentsCalibration</em> mode, the system works in partial Mission mode.  Touch gestures are processed but not translated and emulated as mouse events.  Instead, touch points are recorded for a certain time period and the corresponding co-ordinates are logged in a file.</p>
<p>Upon initialization and depth buffer filled event, the first step is to read the surface calibration depth values as an <code>IMAGE</code> structure from the stored file <code>DepthAverage.dump</code>. The <code>IMAGE</code> data structure is defined as a 2D unsigned short integer array with sizes specified as <code>DWIDTH</code> and <code>DHEIGHT</code> (640, 480).</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code11.png" rel="shadowbox[sbpost-986];player=img;"><img class="size-full wp-image-994 aligncenter" title="code1" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code11.png" alt="" width="600" height="70" /></a>The image analysis and processing routines are similar to that of the MissionMode and will be explained in that section. The additional function <code>(CALIBRATION Gelib_CalibrateExtents( CALIBRATION C ) )</code> displays and logs the touch points in the sequence. The five points are iterated through a counter <code>(cIteration)</code> and the calibration mode swaps to regular mode <code>(qswap = 0)</code> once the calibration is completed&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code2.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-995" title="code2" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code2.png" alt="" width="600" height="176" /></a></p>
<p>The <code>Calout</code> data structure contains the calibration reference points.  These points are stored in the <code>Calibration.dat</code> file.  The data flow switches to touch display mode hence forth (displays transformed touch points and does not translate and emulate mouse events).</p>
<p>Transforming touch points: An affine transform of the touch points is performed to translate the touch points from the depth space to the table space&#8230;</p>
<p style="text-align: center;"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Table-to-Depth-Calibration.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter  wp-image-988" title="Table-to-Depth-Calibration" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Table-to-Depth-Calibration.png" alt="" width="600" height="406" /></a></p>
<p>The depth space is defined as the 2D region as seen by the Kinect depth camera (this is different from the 2D video space seen by the Kinect). This is expected to be a subset of the table space which is the physical 2D region of the glass top over the table. The transforms applied are:</p>
<p>1. Translation in <code>X,Y</code> direction:  <code>T[C0(x,y)]</code> towards &amp; relative to the table space origin of <code>C0</code>.<br />
2. Scale in <code>X,Y</code> direction:<code> S[M(x,y))]</code> towards the upper boundaries of the table space.</p>
<p>The above process determines factors to calculate the transformation offset and scale factors. The translation offset and scale factors are then applied to any incoming touch particle set over a loop&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code3.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-996" title="code3" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code3.png" alt="" width="600" height="133" /></a></p>
<p>The <code>gestureCanvas</code> image is necessary for debugging and visualizing the touch points in real time by assigning the gesture points to a square 5&#215;5 super pixel.</p>
<h3>Mission Mode</h3>
<p>The Mission Mode is the run time mode that tracks touch gestures in real time and translates it to keyboard and mouse events for the Windows 7 OS.</p>
<p><strong>Reading Surface Calibration Values</strong><br />
During the system boot-up (Frames = 0), after the global run time variables are initialized, the surface calibration values are read off of the <code>DepthAverage.dump</code> file&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code4.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-997" title="code4" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code4.png" alt="" width="600" height="54" /></a></p>
<p><code>gSurface</code> is an image data structure that holds the average depth values of the table surface obtained during calibration. Following this, the calibration reference co-ordinates obtained from the ExtentsCalibration Mode is read back from the file <code>Calibration.dat</code> and stored in the structure <code>Calout</code>. For each calibration co-ordinate obtained from the file, an envelope bounding box (rectangular) is applied and the co-ordinates are redefined. This is done to adjust for any rotational shifts in the Z-axis during calibration (please note: this is not a transform, but a linear extrapolation).<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code5.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-998" title="code5" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code5.png" alt="" width="600" height="220" /></a></p>
<p><strong>Calculating Touch from Depth</strong></p>
<p>Following the above operations of reading the calibration files and loading it in the run time memory variables, the conversion of depth image to touch is performed by calling:<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code6.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-999" title="code6" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code6.png" alt="" width="600" height="36" /></a></p>
<p>The output of the <code>Gelib_CalcTouchImage</code> function is an image structure containing binary touch information (a 640&#215;480 array of 0s and 255s). The function takes inputs of the buffer containing depth information passed on to the application from the SDK as a memory pointer, bounding box co-ordinates for the calibration points (this is required to exclude points outside the touch space), the constants <code>DSURFACE_TOL</code> and <code>FINGER</code> passed through the GUI.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code7.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1009" title="code7" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code7.png" alt="" width="600" height="336" /></a></p>
<p>The touch image is calculated by first reducing the depth buffer and extracting the masked depth values (by a logical bitwise &amp;0x0ffff).  Again, following Andy Wilson&#8217;s work, the classification of depth values as touch is <a title="Using a Depth Camera as a Touch Sensor" href="http://research.microsoft.com/en-us/um/people/awilson/publications/WilsonITS2010/WilsonITS2010.html">explained in detail here</a>.</p>
<p>The values of <code>Dmax</code> and <code>Dmin</code> are calculated as shown in the code snippet above. <code>Dmax</code> is the maximum value of depth beyond which any value of depth is classified as not belonging to the touch range. <code>Dmin</code> is the minimum depth value below which depth values do not count as meaningful touch values. The small range of values between <code>Dmax</code> and <code>Dmin</code> is classified as a valid touch point. (Note: To avoid spurious calibration parameters to be counted in the process, any value of Depth equaling 0 or greater than 1200 is classified as a non-touch point). <code>Dmax</code> can be assumed to be the actual surface value as calculated during the surface calibration procedure. However, owing to temporal depth noise, a tolerance parameter <code>(DSURFACE_TOL)</code> is included in the calculation of <code>Dmax</code>. The thickness of your finger dictates the <code>Dmin</code> calculation. We include the parameter <code>FINGER</code> to determine the <code>Dmin</code> value.</p>
<p><strong>2D Spatial Depth Filter</strong></p>
<p>As recommended by A. Wilson, a 2D separable mean filter (without weights) is implemented to remove boundary noise during interactions&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code8.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1000" title="code8" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code8.png" alt="" width="600" height="56" /></a></p>
<p>The kernel size is fixed at 9&#215;9 (although this is configurable using the GUI).  A binary threshold is applied following the two stages of filtering.  The threshold is adjustable from the MissionMode GUI.  A value of 96 to 128 worked well at the time of testing.</p>
<p><strong>Connected Component Labeling</strong></p>
<p>The process of identifying blobs of connected particles (in this case, separate one finger from another in the touch space) and labeling them progressively for each frame is known as <a title="Connected Component Labeling on Wikipedia" href="http://en.wikipedia.org/wiki/Connected-component_labeling">Connected Component Labeling (CCL for short)</a>. The algorithm used here is 8 connected (Moore Neighborhood) component labeling. Check out the Wikipedia entry for more info.  Our algorithm (borrowing heavily from the standard) is implemented here:<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code9.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1001" title="code9" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code9.png" alt="" width="600" height="54" /></a></p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Connected-8-Kernel.png" rel="shadowbox[sbpost-986];player=img;"><img class="alignleft  wp-image-989" title="Connected-8 Kernel" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Connected-8-Kernel-300x300.png" alt="" width="240" height="240" /></a>The CCL algorithm is run in two passes.  The first pass labels each valid pixel incrementally depending on the 8-connectivity rule.  The second pass creates an equivalence table for labels that are associated with the same particle but have a different primary value (a primary value is the dominant value in the particle).  The connected-8 kernel is defined as&#8230;</p>
<p>First Pass: For each pixel (represented by the solid black cell), the surrounding connected pixels are compared with the current pixel. The smallest label above 0 in the connected 8 kernel is assigned as the new label for the current pixel. If the smallest label in the kernel cannot be found (probably connected by zeros), then the pixel value is assigned a new label which is defined as a counter.</p>
<p>Second pass: The first pass output is rerun to derive the equivalence table. The equivalence table associates boundary particles that may have a different label than the primary value of the particle. The same procedure of 8-connecting is applied and the table structure is formed based on the variance in pixel values between the current pixel and the surrounding pixels. Once the association is derived, the equivalence table is normalized and the frame is redrawn. The resulting output is a well-connected and a uniquely labeled blob set.</p>
<p><strong>Particle Analysis</strong></p>
<p>Particle analysis deals with performing morphology and intensity based parameter measurements on binary images.  Typical operations involve measuring areas, lengths, coordinates, chords and axes, shape equivalence and shape features.  Before particle analysis, Histogram-based thresholding and equalization is done to remove small particles and noise.  Currently, the threshold is a fixed parameter of 32, which means that any particle with less than 32 pixels area is ignored for gesture calculations.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code10.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1002" title="code10" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code10.png" alt="" width="600" height="54" /></a></p>
<p>We limit the particle analysis operations in this application to a “bounding-box and center point” approach.  More accurate measurements are unnecessary considering the errors in touch registration.  For each particle identified as a label, the bounding box and center values are found as the maximum and minimum values in X and Y direction.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code111.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1003" title="code11" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code111.png" alt="" width="600" height="424" /></a></p>
<p>The particle analysis structure P returns the measured values for each valid particle back to the application.</p>
<p><strong>Detecting Gestures and Emulating I/O Device Actions</strong></p>
<p>The particle structure is used as the input to the gesture filter switch-case structure.  Based on the number of particles detected (label count from the particle analysis routine), the gesture filter redirects I/O control (typically mouse actions or keyboard events) to the corresponding functions.  These functions process gestures temporally and spatially, hence the accuracy of gesture detection depends on well-trained coefficients (these coefficients are currently hard-wired in the source code.  These can be exposed as controls during the Surface Calibration process or as a completely different calibration/training process.  Coefficients maybe determined as OTP values (hard-wired), dynamic and linear values or intelligence based values such as using neural networks).  At the time of writing, up to 5 particles per frame are handled by the gesture filter (up to five fingers or five cases in the switch-case structure), although there is no limit to the number of particles (<code>NUM_PARTICLES parameter</code>) that the particle analysis method can process and the gesture filter can handle.</p>
<p><strong></strong>For multi-user interactions, it may be necessary to process multiple particles through deeper particle measurements (palm recognition etc.).  This would also require the Windows Multipoint SDK for multi-mouse interactions.  This should get easier in the future.</p>
<p>For the moment, our gesture detection mechanism is designed in a way to facilitate smooth hand off between gestures and gesture fade-in and fade-out.  As an example, there may be cases where a two-finger zoom gesture may transition and fade-out from 2 particles to 1 particle followed by 0.  These transitions have been accounted for in the gesture tracking mechanism.  Here&#8217;s a breakdown of how each gesture works&#8230;</p>
<p><strong><em>Idle mode</em>:</strong> During the idle mode, the gesture filter and class variables are initialized and the filter waits for a valid gesture particle set.  Any value of the number of particles above 1 is assumed to be a valid gesture. In addition, all emulation events are reset (mouse buttons are released).  In order to avoid spurious gesture resets to case 0 (noisy frames), a time out counter is set.  For any value of the time out beyond 3 (3 frames) the previous gesture is assumed to have completed.  Certain gestures like Select/Move have special time out values that are unique to the behavior of those interactions.  Every gesture case also keeps track of the previous gesture in the <code>pGesture</code> variable (which acts a lot like a state machine).</p>
<p><strong><em>Select/Move mode</em>:</strong> This mode (<code>case 1</code>) handles gestures such as Select/Move components and delete component as well as (left and right) mouse click gestures.</p>
<p><strong><em>Handling Mouse Right Click</em>:</strong>The right click event is handled based on a timed gesture response.  This is required to differentiate between gesture transitions as well as other single particle gestures.  The right click event is determined based on the <code>dtTimeout</code>counter value&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code12.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1004" title="code12" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code12.png" alt="" width="600" height="113" /></a></p>
<p><strong><em>Component Select, Move and Delete</em>:  </strong>The <code>Gelib_SelectElement</code> function processes all touch gestures that require translation to corresponding events on the Grasshopper canvas.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code13.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1005" title="code13" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code13.png" alt="" width="600" height="45" /></a></p>
<p>The select gesture is valid when the spatial difference between the current touch point and the previous touch point (the previous frame) is less than a tolerance value defined by <code>SE_TOLERANCE</code>.  The tolerance value is set to a strict 1 currently.  To distinguish between spurious or stray touch points, we track the gesture for stability.  If the current touch point is stable for 10 frames, the gesture is locked down by setting the mouse pointer position at the translated position and a &#8220;mouse left-click and hold&#8221; event is sent to the operating system.  For the 11th frame (special case), the mouse pointer is jittered for a pixel in the Y direction to ensure that the component information (usually achieved by mouse hover) is displayed.<strong><br />
</strong></p>
<p><code></code>The component move gesture is opposite in implementation to the move gesture.  In this case, we check if the difference in coordinates of the current and previous touch point is above a certain threshold <code>(SE_TOLERANCE + 2)</code> and proceed to send the &#8220;mouse left-click and hold&#8221; event to the OS.  The delete component gesture is also implemented under the same category wherein we check if the difference in current and previous touch coordinates is above the delete threshold of <code>DE_TOLERANCE</code>.  Once the threshold limit is hit, the delete gesture identifier proceed to a binary encoded style state machine that tracks for successive gestures (back and forth movement of the finger).  After 3 successive move gestures (back and forth), the gesture recognition loop proceeds to send the &#8220;Delete&#8221; key event to the OS.</p>
<p><strong><em>Zoom</em>:</strong> The two finger zoom gesture is similar in implementation to the Select/Move mode&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code14.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1006" title="code14" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code14.png" alt="" width="600" height="54" /></a></p>
<p>On function entry, the floating point distance between the two fingers is calculated.  This is required to differentiate between a zoom in and zoom out gesture. For each frame, the current distance between the fingers and the previous frame‟s distance between the fingers are compared.  If the difference is positive, the gesture is a zoom-out.  In this case, the mouse-scroll event is sent to the OS with a positive <code>WHEEL_DELTA</code>.  A zoom counter in each case is incremented to verify switching between one zoom-mode to the other.</p>
<p><strong><em>Pan:</em></strong> Cases 4 and 5 are used in tandem for the pan mode.  The pan gesture is a 5 finger gesture, however there may be instances where two fingers combine to one particle and yield 4 particle gestures.  In those cases, the gesture filter operates in the same pan canvas mode.  The start of the gesture however requires 5 unique particles&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code16.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1008" title="code16" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code16.png" alt="" width="600" height="54" /></a></p>
<p>The actual mouse position is determined as the average <code>X</code> and <code>Y</code> position of each of the (4 or) 5 particles passed as the parameter to the Pan Canvas function.  The pan canvas gesture is easily susceptible to temporal noise owing to the inconsistency in the ability to determine a fixed mouse pointer coordinate.  To nullify this problem, a 2 point frame average of the coordinates is calculated as the final pan point.  Whenever the current touch point changes position, the movement delta values in <code>X</code> and <code>Y</code> directions are calculated.  If the delta values exceed a threshold <code>(PAN_TOLERANCE)</code>, the pan gesture is simulated by a mouse right-click and hold event.</p>
<p><strong><em>Drag-wire and add connection</em>:</strong> This is a 3 finger gesture similar to the move gesture with the additional shift key event included with the mouse left click hold event.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code15.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1007" title="code15" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code15.png" alt="" width="600" height="56" /></a></p>
<p>It is important to identify the optimum relative positioning of the 3 fingers on the touch space.  For natural interaction the index finger, middle finger and the thumb are used.  The middle finger shall be used as the actual pointer position for the gesture.  To calculate the validity of this condition, a conditional check is performed on the 3 coordinates passed to the function.  Following the classification of the touch points, the final touch point (unfortunately, it&#8217;s the middle finger) is extracted and checked for motion across frames using the same method described for the move gesture.  The shift key is also held in addition to the &#8220;Left-Click-Hold&#8221; event.  The 3 finger hold gesture is implemented as well for the sake of uniformity in behavior.</p>
<h3>Related Posts</h3>
<p><a title="Grasshopper Canvas with Kinect Interaction: Part 2" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-2">Grasshopper Canvas with Kinect Interaction: Part 2</a></p>
<p><a title="Grasshopper Canvas with Kinect Interaction: Part 1" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-meet-kinect/">Grasshopper Canvas with Kinect Interaction: Part 1</a></p>
<p><a title="Grasshopper Canvas Real Estate" href="http://lmnts.lmnarchitects.com/interaction/ghcanvas-real-estate/">Grasshopper Canvas Real Estate</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grasshopper Canvas with Kinect Interaction: Part 2</title>
		<link>http://lmnts.lmnarchitects.com/featured/grasshopper-canvas-with-kinect-interaction-part-2/</link>
		<comments>http://lmnts.lmnarchitects.com/featured/grasshopper-canvas-with-kinect-interaction-part-2/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:25:06 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Interaction]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Grasshopper]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=976</guid>
		<description><![CDATA[Over the past year, we've made the Microsoft Kinect sense touch - and in turn, gestures - which we then used to control the Grasshopper canvas via keyboard and mouse events.  We've had a lot of fun building Kinect Multitouch Interactions but - being an architecture firm - we can only spend so much time developing the code.  We think we've created a solid foundation and would like to share with the broader community to use, modify, and extend.  Obviously, Grasshopper is only one possible application and we'd love to see what others could do.  In the spirit of openness, we're providing the complete source.]]></description>
			<content:encoded><![CDATA[<div id="attachment_984" class="wp-caption aligncenter" style="width: 584px"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Kinect-Multitouch-TouchEvent-Process.png" rel="shadowbox[sbpost-976];player=img;"><img class=" wp-image-984 " title="Kinect-Multitouch-TouchEvent-Process" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Kinect-Multitouch-TouchEvent-Process.png" alt="" width="574" height="322" /></a><p class="wp-caption-text">1.Kinect Sensor | 2.Raw Depth Image | 3.Segmented Depth Image | 4.After Lowpass Filter | 5.Connected Component Labeling | 6.Particle Analysis | 7n.Gesture Filters | 8.Keyboard/Mouse Events</p></div>
<p>In our <a title="Grasshopper Meets Kinect" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-meet-kinect///">previous post</a>, we talked about our efforts to use the Microsoft Kinect to control a large-scale table-top interface running Grasshopper.  In short: we used the Kinect to sense touch and gestures&#8230;which we then used to control the canvas via keyboard and mouse events.  We&#8217;ve had a lot of fun building Kinect Multitouch Interactions but &#8211; being an architecture firm &#8211; we can only spend so much time developing the code.  We think we&#8217;ve created a solid foundation and would like to share with the broader community to use, modify, and extend.  Obviously, Grasshopper is only one possible application and we&#8217;d love to see how others will use this interaction.  So, in the spirit of openness, we&#8217;re providing the complete source &#8211; as well as Visual Studio solution files &#8211; downloadable below.  It&#8217;s our hope that those of you reading this will adapt and improve on what we&#8217;ve started.</p>
<p><strong>BE WARNED</strong>:  Before you jump in and try this at home, we  encourage you to read this post (and the next one) to get a sense of how we went about this.  Rest assured, downloading and compiling our sample code is not a terribly complex endeavor, provided you have some experience with linking and building applications.  You&#8217;ll need to have some experience with C/C++ programming&#8230;so please read the detailed technical descriptions included in the SDK (and in these posts).</p>
<p>To get started, you&#8217;ll need the following&#8230;</p>
<p><strong>Prerequisites/Dependencies</strong></p>
<p>1. <a title="Microsoft Kinect - Go buy one" href="http://www.xbox.com/en-US/kinect">Microsoft Kinect</a> for XBox with external power source and USB cables.<br />
2. Microsoft Windows 7 or later.<br />
3. <a title="Kinect for Windows PC SDK Download" href="http://kinectforwindows.org/download/">Kinect for Windows PC SDK</a> with drivers.  We used the first public beta.<br />
4. <a title="Microsoft .NET Framework 4.0" href="http://www.microsoft.com/download/en/details.aspx?id=17851">Microsoft .NET Framework 4.0</a>.<br />
5. <a title="Microsoft Visual Studio" href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions">VisualStudio 2010</a> IDE or similar.  <a title="Visual Studio Express" href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express">Express editions</a> should work fine.<br />
6. Our source code, which includes the Visual Studio Solution files&#8230;scroll down.</p>
<p><strong>Optional Equipment</strong></p>
<p>7. Projector (or similar) display.  Our setup, while not expensive, is a bit exotic.<br />
8. Kinect stabilizing mount (for walls, tables and ceilings).</p>
<h3>Kinect Multitouch Interaction Source and Examples</h3>
<p><a title="GNU General Public License" href="http://www.gnu.org/licenses/gpl.html"><img class="alignleft size-full wp-image-991" title="gplv3-127x51" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/gplv3-127x51.png" alt="" width="127" height="51" /></a>Kinect Multitouch Interaction by <a rel="cc:attributionURL" href="http://lmnts.lmnarchitects.com">LMNts</a> is copyleft and licensed under the <a title="GNU General Public License" href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>.</p>
<p title="GNU General Public License"><strong>Obligatory Disclaimer/Terms and Conditions of Use:</strong>  By downloading, you agree to use this software at your own risk.  Under no circumstances shall LMN or LMNts be liable for direct, indirect, special, incidental, or consequential damages resulting from the use, misuse, or inability to use this software.  The software is provided &#8220;as is,&#8221; whereas we cannot provide a guarantee of support.  LMNts does not guarantee that this software is bug-free or that it will solve all your problems&#8230;</p>
<p><pre><pre>&nbsp;&nbsp;&nbsp;&nbsp;This program is free software: you can redistribute it and/or modify
&nbsp;&nbsp;&nbsp;&nbsp;it under the terms of the GNU General Public License as published by
&nbsp;&nbsp;&nbsp;&nbsp;the Free Software Foundation, either version 3 of the License, or
&nbsp;&nbsp;&nbsp;&nbsp;(at your option) any later version.

&nbsp;&nbsp;&nbsp;&nbsp;This program is distributed in the hope that it will be useful,
&nbsp;&nbsp;&nbsp;&nbsp;but WITHOUT ANY WARRANTY; without even the implied warranty of
&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp;&nbsp;See the
&nbsp;&nbsp;&nbsp;&nbsp;GNU General Public License for more details.</pre></pre><br />
<a href="http://lmnts.lmnarchitects.com/wp-content/plugins/download-monitor/download.php?id=19">Download LMNts-KinectMultiTouchGestures, 206.09 kB </a></p>
<p>Ok, let&#8217;s get into the fun details of how this works&#8230;<span id="more-976"></span></p>
<h3>Hardware Setup</h3>
<p>There are a great number of possible configurations and methods of display, from as simple as tracking touch on a standard LCD monitor to registering touch on the surface of a wall or a chair.  In our example, we used a large ground glass table and a giant mirror to project the interactive workspace and UI from beneath the table.  Our goal was to create a poor man&#8217;s Microsoft Surface.  As it&#8217;s unlikely that you will have a similar setup, let&#8217;s assume you want to project onto a standard table from above.  The table top should typically be capable of allowing light from the projector to be dispersed on the surface to facilitate viewing but not exhibit excessive specular behavior.  That&#8217;s a fancy way of saying: you will need a table with a dull surface finish and position the projector at an angle (adjusting the image keystone) so that it doesn&#8217;t bounce light directly back into the depth sensor.  This is important since the Kinect sensor operates by projecting infra-red light through the field of view; light bouncing off any reflective surface would be reproduced as noise or invalid depth data.  You don&#8217;t want that.</p>
<p>If you set this up on a table, the RGBD sensor (ie: Kinect) should be installed overhead with a field of view covering the table top.  While the minimum distance of the sensor (distance to table) is restricted by the Kinect&#8217;s capabilities (typically around 0.75m), the maximum distance to table determines the accuracy of touch calculations.  A typical depth value (and recommended) is 1.00 m for the specific table dimensions.  You will want to mount the Kinect in such a way as it cannot be moved or disturbed&#8230;even small vibrations cause noise in the depth data and could throw off the interaction.</p>
<p>If you set this up on a wall (or similar surface), the above rules still apply, but you will want to be careful to position the Kinect where its view of the surface won&#8217;t be occluded by users standing directly in the way.  Our touch implementation is based on line-of-sight&#8230;overhead mounting works best for wall interaction as well.</p>
<h3>Software Setup</h3>
<p>A complete walkthrough of the Microsoft Kinect PC SDK is well beyond the scope of this post.  Microsoft has <a title="Microsoft Kinect for PC SDK Quickstarts" href="http://channel9.msdn.com/Series/KinectSDKQuickstarts">some great documentation and support for getting up and running with the SDK</a>.  For clarity, we&#8217;ve built our the demo interaction around Microsoft&#8217;s SkeletalViewer sample code (a popular place to start for good reason).  We have NOT included Microsoft&#8217;s source, so it will be necessary to link and recompile with the actual Microsoft SDK if you want to make major changes.  The VisualStudio Solution file is setup to link to the necessary dependencies, but you will have to copy the relevant sources from the SDK into the project folder of your choosing.</p>
<p>The source code is written in C++ and targeting the .NET framework 4.0.  We have included the three executable builds:</p>
<p><em>SurfaceCalibration.exe</em><br />
<em>ExtentsCalibration.exe</em><br />
<em>MissionMode.exe</em></p>
<p>Each of these builds is a modified version of the main TouchGestures sample code.  The sample included in our download builds the MissionMode executable by default.  (Should you like to rebuild SurfaceCalibration.exe or ExtentsCalibration.exe, the TouchGestures.h contains a globally defined switch that will trigger #ifndef code in the implementation&#8230;after building, simply rename the execs).</p>
<p>The executables should be run in the following order (one at a time):</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/LMNts-Kinect-Multitouch-Surface-Calibration.png" rel="shadowbox[sbpost-976];player=img;"><img class="alignleft  wp-image-985" title="LMNts-Kinect-Multitouch-Surface Calibration" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/LMNts-Kinect-Multitouch-Surface-Calibration-300x276.png" alt="" width="168" height="155" /></a>1.  <em>SurfaceCalibration.exe</em> – necessary for depth estimation across the interaction surface.  This utility calibrates the Kinect relative to a surface in its field of view.   Once the executable completes, a dump file called <code>DepthAverage.dump</code> is created in the Release folder containing the depth information in millimeters for each of the 640&#215;480 pixels.</p>
<p>2.  <em>ExtentsCalibration.exe</em> – is required to map the 2D table top space to the projected interaction space (in our case, the Grasshopper canvas).   Build and run this executable.  If you are using a projector, move the window directly over the area you wish to track.   This executable displays a square pixelated area on the display which acts as the target point to be mapped onto the 2D depth space (which is normally restricted to a subset of the Kinect&#8217;s field-of-view).  Once the square is displayed <a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/LMNts-Kinect-Extents-Calibration.png" rel="shadowbox[sbpost-976];player=img;"><img class="alignright  wp-image-987" title="LMNts - Kinect - Extents Calibration" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/LMNts-Kinect-Extents-Calibration-300x226.png" alt="" width="270" height="203" /></a>(starting bottom-right and moving clockwise for each corner, ending in the center),  you are expected to touch and hold the square for a few seconds until it moves to the next calibration location.  Watch carefully: the better the tracking, the quicker it moves.  This continues until all the 5 points are displayed and logged by the calibration utility.  At the end of the process, a data file called <code>Calibration.dat</code> is created in the Release directory containing the co-ordinates logged during the extents calibration process.  <a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/UI-Controls.png" rel="shadowbox[sbpost-976];player=img;"><img class="alignleft size-medium wp-image-990" title="UI-Controls" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/UI-Controls-300x252.png" alt="" width="300" height="252" /></a></p>
<p>The controls in the UI are required to adjust the touch parameters and thresholds during image processing: this section displays the frame rate, provides control sliders to modify the <code>DSurface</code>, Finger and Mean filter threshold value.  The filter kernel size can also be modified using the text control box (we&#8217;ll explain these terms in the next post).  The default values in the UI are usually sufficient for a typical use case but, depending on where you position the Kinect relative to the tracked area, you may need to adjust the parameters to remove some of the noise.</p>
<p>3.  <em>MissionMode.exe</em> – this is the sample touch and image processing executable that processes touch inputs, identifies and translates the touch inputs as gestures and mouse events on the Grasshopper canvas.  This executable should always be open and running to enable touch gestures tracking, but it does not need to be coincident with the tracked area.  The window displays the touch points at ~30 frames per second.   This exe should only be run once the calibration procedure is complete.   In our example, the Grasshopper canvas can be pushed to the display space (in our case: the table) and the fun begins.</p>
<h3><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Grasshopper-Kinect-Touch-Gestures1.png" rel="shadowbox[sbpost-976];player=img;"><img class="aligncenter size-full wp-image-979" title="Grasshopper-Kinect-Touch-Gestures1" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Grasshopper-Kinect-Touch-Gestures1.png" alt="" width="590" height="400" /></a></h3>
<p>So that&#8217;s the overview.  If you are testing this out with Grasshopper (which we recommend), the above gestures are implemented and should work fine without any changes to the code.  In <a title="Grasshopper Canvas with Kinect Interaction: Part 3" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3">our next post</a>, we&#8217;ll unpack and walk through each of the code functions in greater detail&#8230;</p>
<h3>Related Posts</h3>
<p><a title="Grasshopper Canvas with Kinect Interaction: Part 3" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3">Grasshopper Canvas with Kinect Interaction: Part 3</a></p>
<p><a title="Grasshopper Canvas with Kinect Interaction: Part 1" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-meet-kinect/">Grasshopper Canvas with Kinect Interaction: Part 1</a></p>
<p><a title="Grasshopper Canvas Real Estate" href="http://lmnts.lmnarchitects.com/interaction/ghcanvas-real-estate/">Grasshopper Canvas Real Estate</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/featured/grasshopper-canvas-with-kinect-interaction-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy Holidays 2011 from LMN</title>
		<link>http://lmnts.lmnarchitects.com/news/happy-holidays-2011-from-lmn/</link>
		<comments>http://lmnts.lmnarchitects.com/news/happy-holidays-2011-from-lmn/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 20:49:32 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[Media]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Holiday Card]]></category>
		<category><![CDATA[LMN]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=981</guid>
		<description><![CDATA[Happy Holidays 2011 from everyone at LMN.  
This Holiday Season, LMNers lit candles...LOTS of candles.  The video was directed, shot, edited and produced by: cbaker, jbeaver, scrawford, cgrammens, kgregga, thenderson, ahunter, kkimura, amacdonald, and gshaw.]]></description>
			<content:encoded><![CDATA[<p><script type='text/javascript' src='http://content.bitsontherun.com/players/U6dUoXCn-Cj8XUjwC.js?exp=1328368073&sig=484dae8b74f86f0ea2071b7bf836f391'></script></p>
<p>This Holiday Season, LMNers lit candles&#8230;LOTS of candles.  The video was directed, shot, edited and produced by: cbaker, jbeaver, scrawford, cgrammens, kgregga, thenderson, ahunter, kkimura, amacdonald, and gshaw.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/happy-holidays-2011-from-lmn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Confessions of a Design Technology Evangelical</title>
		<link>http://lmnts.lmnarchitects.com/news/field-notes/</link>
		<comments>http://lmnts.lmnarchitects.com/news/field-notes/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 15:35:02 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design Technology]]></category>
		<category><![CDATA[Still Life]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=972</guid>
		<description><![CDATA[Guest blogging at Metropolis Magazine, Dan organizes his Field Notes.  (Meanwhile, the Design Desk Liberation Front launches another photographic assault).  For an pseudo-retro-iconoclastic-interlude to all this computational fetishism, go read the Confessions of a Design Technology Evangelical.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/StillLife02-crop2.jpg" rel="shadowbox[sbpost-972];player=img;"><img class="aligncenter size-large wp-image-974" title="StillLife02-crop2" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/StillLife02-crop2-1024x768.jpg" alt="" width="614" height="461" /></a></p>
<p>Guest blogging at <a title="Metropolis Magazine" href="http://www.metropolismag.com">Metropolis Magazine</a>, <a title="Dan Belcher's Posts on LMNts" href="http://lmnts.lmnarchitects.com/author/dbelcher/">dbelcher</a> organizes his <a title="Field Notes on Metropolis" href="http://www.metropolismag.com/pov/20111204/field-notes">Field Notes</a>.  (Meanwhile, the Desk Liberation Front launches another photographic assault).  For an pseudo-iconoclastic-interlude to all this computational fetishism, go read the <a title="Field Notes on Metropolis" href="http://www.metropolismag.com/pov/20111204/field-notes">Confessions of a Design Technology Evangelical</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/field-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Still Life with Design Technology</title>
		<link>http://lmnts.lmnarchitects.com/news/still-life-design-technology/</link>
		<comments>http://lmnts.lmnarchitects.com/news/still-life-design-technology/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 19:45:40 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design Technology]]></category>
		<category><![CDATA[Still Life]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=954</guid>
		<description><![CDATA[George Shaw - managing partner at LMN - on Re-Upping on Design Technology: a bit of history on the ideas and projects that led to LMNts.  In Metropolis Magazine's POV section.]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/StillLife01.png" rel="shadowbox[sbpost-954];player=img;"><img class="aligncenter size-large wp-image-955" title="Still Life with Design Technology" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/StillLife01-1024x783.png" alt="" width="553" height="423" /></a><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/StillLife01.png" rel="shadowbox[sbpost-954];player=img;"><br />
</a>George Shaw &#8211; managing partner at LMN &#8211; writes about <a title="Re-Upping on Design Technology" href="http://www.metropolismag.com/pov/20111103/re-upping-on-design-technology">Re-Upping on Design Technology</a>: a bit of history on the ideas and projects that led to LMNts.  In<a title="Metropolis Magazine POV" href="http://www.metropolismag.com/pov/page/2"> Metropolis Magazine&#8217;s POV section</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/still-life-design-technology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Energy Monitoring 101: Open Standards</title>
		<link>http://lmnts.lmnarchitects.com/featured/energy-monitoring-101-open-standards/</link>
		<comments>http://lmnts.lmnarchitects.com/featured/energy-monitoring-101-open-standards/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 15:31:37 +0000</pubDate>
		<dc:creator>dbelcher</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Hardware Reviews]]></category>
		<category><![CDATA[Building Performance]]></category>
		<category><![CDATA[Energy Monitoring]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Opto22]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=881</guid>
		<description><![CDATA[In almost every architectural project we undertake at LMN, we urge the client to seriously consider sub-metering and energy monitoring.  After years of recommending this, we decided to "eat our own dog food."  We wanted to understand the underlying costs, infrastructure changes, and digital tools necessary for proper energy monitoring so - for our office - we put together our own customized solution based upon open standards hardware and software.  Here's a detailed account of how it's going...]]></description>
			<content:encoded><![CDATA[<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/09/LMNEMULogo.png" rel="shadowbox[sbpost-881];player=img;"><img class="alignleft size-full wp-image-883" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/09/LMNEMULogo.png" alt="" width="300" height="120" /></a>In almost every architectural project we undertake at LMN, we urge the client to seriously consider sub-metering and energy monitoring.  Though far too often fodder for the Value-Engineering (VE) chopping block, monitoring resources like gas, water, steam and electricity is the first and fundamental step in understanding the patterns of use (and abuse) of natural resources in buildings.  Sub-metering and energy monitoring allow owners, maintenance managers, and occupants to better understand how and where they are burning kWs, kBTUs, gallons, etc.  Armed with that information, you can start to make the decisions that lead to energy savings, quickly paying for the upfront cost of the monitoring system itself.  So that&#8217;s all well and good.  Most people know all about that.  After years of recommending this to our clients, we decided to &#8220;eat our own dog food,&#8221; as the saying goes; we decided to bite the bullet and install our own Energy Monitoring Units (EMUs) in our offices.</p>
<p>We have three major goals with this project: First &#8211; and key to why we went about this the way we did &#8211; we wanted to understand the underlying costs, infrastructure changes, and digital tools necessary for proper energy monitoring.  The first goal will also have the added benefit of allowing us to tinker with our setup as much as we like&#8230;something you may have noticed (if you read this blog regularly) that we enjoy doing. Second, we want to understand our current usage and gather a baseline before we make any changes to our behavior.  Finally, we want to quantify our progress as we begin to take Energy Conservation Measures (ECMs) &#8211; a fancy way of saying: &#8220;forming better habits&#8221;.   In this post, we&#8217;ll address the first two goals directly and come back to the third goal (ECMs) in a future post&#8230;<span id="more-881"></span></p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/LMN-EMU-Opto22.png" rel="shadowbox[sbpost-881];player=img;"><img class="alignleft size-full wp-image-943" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/LMN-EMU-Opto22.png" alt="" width="130" height="272" /></a>First, the hardware.  We shopped around a bit for electrical Energy Monitoring Units.   From the start, we were looking for an EMU that would allow us to learn as much about the process of monitoring as we could.   There are many commercial-grade units available on the market, but most are very expensive and worse: some require purchasing additional software (sometimes through subscription) just to view the data the EMUs record.  With these systems, there&#8217;s the considerable upfront cost for the equipment and installation, plus &#8211; to add insult to injury &#8211; the cost of the software to boot.  What we wanted was something purpose built, interoperable, and open.  After some shopping, we found the <a title="Opto22 Energy Monitoring Units" href="http://www.opto22.com/site/emu_system.aspx">OptoEMU</a>.  <a title="Opto22" href="http://www.opto22.com/">Opto22</a>&#8216;s open standards philosophy appealed to us: all their systems run on non-proprietary communication standards like Ethernet and IP.  This means that one could integrate their EMUs into an existing monitoring system, purchase a subscription to a data-logging service (such as <a title="Pulse Energy" href="http://www.pulseenergy.com/">Pulse Energy</a>), or roll your own system at any scale you want.  We chose the latter, without precluding the option of scaling it up.  (Baby steps.  Baby steps).  Our office occupies two floors and has four quadrants fed by four electrical panels that roughly correspond to the quadrants (over the course of 30+ years in the building, there might be some cross wiring&#8230;but we&#8217;ll find out soon enough).  We decided to test out our proposed system on one quadrant of the office to make sure that we had all the software and hardware setup before we scaled the system up to the rest of the office.  So we bought one of the Opto22 EMUs and had a professional electrician install it in our electrical room.</p>
<p>We called up Opto22 and explained our electrical setup and they recommended starting with a single EMU (shown above left) and three current transformers (CTs).  Out of the box, the OptoEMU is straightforward.  The installation instructions were easy to follow so we went ahead and had our electrician install one EMU in our quadrant (thanks to Tim and Josh of <a title="North Star Electric" href="http://www.yelp.com/biz/north-star-electric-seattle">North Star Electric</a> for doing a quick and professional job of installing the EMUs and CTs.)  Once installed, we plugged the EMU into our network backbone and assigned it a static IP-address.  At that point, the EMU was acting a lot like your typical wireless router: you can use any web-browser to access the firmware on the device to configure its settings.  All we needed were the correct current ratios from the electrician.  Just a couple of fields and you&#8217;re up and running.  (The browser configuration tool is also where you can setup your data-logging service if you choose to use a third-party such as Pulse).  Rather than use a third-party logging service, we decided to do this ourselves.  This will take a bit of explaining&#8230;</p>
<p style="text-align: left;"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/LMN-EMU-Schematic-Diagram.png" rel="shadowbox[sbpost-881];player=img;"><img class="aligncenter size-full wp-image-945" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/LMN-EMU-Schematic-Diagram.png" alt="" width="600" height="249" /></a></p>
<p style="text-align: left;">Second, the software.  We downloaded the <a title="OptoEMU Sensor .NET Toolkit" href="http://opto22.com/site/downloads/dl_drilldown.aspx?aid=4133">OptoEMU Sensor .NET Toolkit</a> from Opto22&#8242;s website.  We used the toolkit to write our own custom polling and logging software that runs on a dedicated machine on our network.  The application polls each of the EMUs once per minute (even though the OptoEMUs can sample at a much faster rate)<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/LMN-EMU-Monitoring.png" rel="shadowbox[sbpost-881];player=img;"><img class="alignleft size-medium wp-image-946" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/LMN-EMU-Monitoring-240x300.png" alt="" width="192" height="240" /></a> and records the current kW value and a time-stamp to a SQL database running on the same computer.  This monitoring software also handles the e-mail digest system (see below).  Once we had tested this setup with one EMU, scaling it to four EMUs was very easy.  The downside of this approach is that it requires a dedicated computer on the network to handle the logging.  However, this computer serves double-duty as the Database and the Webserver.  Once all the software was up and running, we were confident enough to purchase the remaining three OptoEMUs and monitor the rest of the office.</p>
<p style="text-align: left;">The data logging continues, ad infinitum, but each morning &#8211; at <a title="Why 10:10 am?" href="http://en.wikipedia.org/wiki/10:10">10:10 am</a> &#8211; the software sends an e-mail to LMN employees with the averages from the previous day.  The e-mail separates out averages for the day and for the night.  As we start to better understand our consumption, we plan to set up alerts for unusual demands or steep trends.  The e-mail is useful, but nowhere near as useful as the interactive chart we have setup to view the data&#8230;</p>
<p style="text-align: center;"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/LMN-EMU-Graph.png" rel="shadowbox[sbpost-881];player=img;"><img class="aligncenter size-large wp-image-941" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/LMN-EMU-Graph-1024x467.png" alt="" width="614" height="280" /></a></p>
<p style="text-align: left;">The interactive chart allows any user to track variable time-scales (from one minute to one year) broken out by quadrant.  The user can highlight any point in the chart and get the kW reading at that minute.  The embeddable chart is a mash-up of html, pHp, jQuery and the Google Chart Tools API.  Before assembling this mix, we looked at <a title="Pachube" href="https://pachube.com/">Pachube</a>, <a title="Pulse Energy" href="http://www.pulseenergy.com/">Pulse Energy</a>, and <a title="Wattvision" href="http://www.wattvision.com/">Wattvision</a>.  All three had their advantages and disadvantages, but none was exactly what we wanted.  In short: we just wanted to do this ourselves and we didn&#8217;t think it would be that difficult.  Even though Google had &#8220;retired&#8221; <a title="Google PowerMeter" href="http://www.google.com/powermeter/about/">PowerMeter</a>, they had left intact the <a title="Google Chart Tools" href="http://code.google.com/apis/chart/">graphing API</a> that they used to construct all their various data visualization systems&#8230;from <a title="Google Chart API in action" href="http://www.google.com/finance">finance</a> to <a title="Google Analytics" href="http://www.google.com/analytics/">web analytics</a>.  The only piece that was a bit of a challenge was the Annotation feature&#8230;</p>
<p style="text-align: left;">Users can annotate the chart much like a stock-ticker records historical events relevant to spikes or troughs in the data.  A button at the bottom of the graph brings up a calendar (we would have liked this to be a mouse-click on the graph itself, but this proved difficult to do with the ChartTools) and a text-field.  <a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/LMN-EMU-Annotation-2.png" rel="shadowbox[sbpost-881];player=img;"><img class="alignright size-medium wp-image-947" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/LMN-EMU-Annotation-2-298x300.png" alt="Energy Flow Annotation" width="298" height="300" /></a>The viewer can then enter in some information (a guess of end-use, a significant event, etc.) that is viewable to anyone who checks the graph.  We are using this feature to figure out which plug-loads are responsible for specific spikes&#8230;we also think it will be a great feature for recording intentional ECMs that we will implement in the future.</p>
<p>All four EMUs have been up and running for about a month now.  What are we learning?  As you can see from the chart above, our 5 West quadrant consumes considerably more energy compared to the other three quadrants.  This is because 5W is the home of our servers.  We know that the plotters and printers could probably go into sleep mode earlier in the evening than they do now.  We know that lights are responsible for a large chunk of our consumption.  However, all of this is low-hanging fruit.  What we are focused on now is collecting baseline data of our typical behavior so that we can better assess the effectiveness of future conservation measures.  We&#8217;ve learned that energy monitoring doesn&#8217;t have to be overly expensive or complex &#8211; that you can right-size a solution to an organization of any scale.  We are also learning that it&#8217;s difficult to resist the urge to make changes right away, especially when we have such high-resolution data at our fingertips.</p>
<p>What next?  We plan to continue collecting baseline data as long as we can (how long is up for debate within the office).  We plan to embed the interactive graph into our intranet.  We also plan to use our experience to get more monitoring and sub-metering into our built projects.  We plan to start playing around with more interesting ways to interact and consume near real-time data &#8211; perhaps hooking up the feed to Arduino to change the color of ambient lighting relative to consumption?  Maybe triggering an air-horn hidden near our SysAdmin&#8217;s desk if the servers are out-of-control energy hogs?  (Just kidding Chad).  Whatever we end up doing, we plan to use this data to change our habits and consume energy in a smarter way.</p>
<p>We&#8217;ll return to the EMUs in a future post and let you know how things are going&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/featured/energy-monitoring-101-open-standards/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DIVA is Awesome and Everyone Should Use It</title>
		<link>http://lmnts.lmnarchitects.com/featured/diva-review/</link>
		<comments>http://lmnts.lmnarchitects.com/featured/diva-review/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 21:20:44 +0000</pubDate>
		<dc:creator>scrawford</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Parametrics]]></category>
		<category><![CDATA[Simulation]]></category>
		<category><![CDATA[Software Reviews]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Building Performance]]></category>
		<category><![CDATA[daylight]]></category>
		<category><![CDATA[Grasshopper]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=889</guid>
		<description><![CDATA[We've been playing around with the DIVA plugin for Rhino and Grasshopper for the past month.  DIVA stands for Design Iterate Validate Adapt which is similar to the approach that we take with parametric modeling.  

By looking at a large number of iterations it often is possible to tease out patterns of performance which can help to find a "satisficing" solution and help designers to develop a better intuition about how to approach a problem.]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been playing around with the <a href="http://diva-for-rhino.com/">DIVA plugin for Rhino and Grasshopper</a> for the past month and wanted to share some of our experiences.  The DIVA plugin is being developed by <a href="http://www.gsd.harvard.edu/research/gsdsquare/">Harvard University&#8217;s GSD-Squared Research Initiative</a> and we are greatly appreciative of their efforts to make daylight simulation more accessible.</p>
<p>DIVA stands for Design Iterate Validate Adapt which is similar to the approach that we take with <a href="http://lmnts.lmnarchitects.com/category/parametrics/">parametric modeling</a>.  We&#8217;ve found that we tend to learn more about a design problem when we look at a large number of iterations as opposed to just choosing the best of three.  With this approach it often is possible to tease out patterns of performance which can help in developing a better intuition about how to find an optimized solution to a problem.</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/Fenestration-Studies.jpg" rel="shadowbox[sbpost-889];player=img;"><img class="alignleft size-large wp-image-896" title="Fenestration-Studies" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/Fenestration-Studies-1024x740.jpg" alt="" width="1024" height="740" /></a></p>
<p>One of DIVA&#8217;s capabilities is to run <a href="http://www.daysim.com">DAYSIM</a> climate-based metrics, such as Useful Daylight Index(UDI) and Daylight Autonomy(DA), which use weather data to calculate lighting performance over the course of the entire year.  Looking at a design&#8217;s daylighting performance in this way can help to identify the overall effectiveness of a daylighting solution and give an idea of potential energy savings.  An example of this is a study we ran with DIVA that looked at the relationship between ceiling height, window size, percent glazing and a floorplate&#8217;s Useful Daylight Index(UDI).<span id="more-889"></span></p>
<p><script type='text/javascript' src='http://content.bitsontherun.com/players/8zOgRvaP-CJC7qAWq.js?exp=1328368073&sig=a21b935255a2d2a13240982faaf8cb86'></script></p>
<p>The first thing you&#8217;ll notice from the above animation is that false color graphics are awesome.  Well, at least they are to us.  They never fail to get people excited even if the viewer has no idea what they&#8217;re depicting.  This is a problem.  Yes, we want people to look at what we show them, but it&#8217;s also important that they understand how to read the graphics.  The general rule is that bright colors correspond to higher illuminance levels or better daylight distribution, but we&#8217;ve also found that it can be useful to use different color gradients for different metrics so that it is obvious to the viewer that we&#8217;re showing something different.  It is important to get both clients and designers to look at these graphics as a tool for improving the design rather than just another form of documentation.*</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/ILLUM-vs-UDI-comparison.jpg" rel="shadowbox[sbpost-889];player=img;"><img class="alignleft size-large wp-image-899" title="ILLUM-vs-UDI-comparison" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/ILLUM-vs-UDI-comparison-1024x426.jpg" alt="" width="1024" height="426" /></a></p>
<p>The advantage of using a tool like Grasshopper is that we can automate most if not all of the simulation process.  Using techniques similar to those we used for exploring the <a href="http://lmnts.lmnarchitects.com/parametrics/mm-panels/">panel geometry of the Cleveland Medical Mart</a>, we were able to get the definition to iterate through each analysis on its own so that we could set it to run overnight.</p>
<p>A challenge that came out of this process was creating all of the annotations for each iteration.  Normally, we would do this manually in something like InDesign if we only had a handful of simulations to run.  In the above animation there were over 40 simulations which would&#8217;ve meant a lot of bookkeeping and data entry.  To get around this we collected text from various parts of the Grasshopper definition and then displayed that text in the viewport using our <a href="http://lmnts.lmnarchitects.com/featured/ghanalysis-grid/">analysis key definition</a>.  Initially, we were baking all of the geometry and text into Rhino and then rendering it, but later realized it was much faster to use the ViewCaptureToFile command.</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/file-parameter-naming-key.001-e1318031947755.png" rel="shadowbox[sbpost-889];player=img;"><img class="alignleft size-large wp-image-891" title="file parameter naming key" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/file-parameter-naming-key.001-e1318031947755.png" alt="" width="692" height="214" /></a>The filename for each image became a record of the parameter settings for that iteration.  Each parameter is separated by a character, in this case &#8220;^&#8221;, and then there is a panel component in Grasshopper that records what each value relates to.  It&#8217;s definitely not the easiest thing to read, but it has proven helpful many times.  The results file that DIVA generates is also named using this same system.</p>
<p>The results of a simulation are returned as an output of the DIVA Analysis component, but it is also possible to use the Grasshopper Read File component to load the results into the definition.  This approach requires a few additional components to specify the file path and remove the unneeded data (<a href="http://lmnts.lmnarchitects.com/wp-content/plugins/download-monitor/download.php?id=18">Download importDIVAResults.ghx, 20.93 kB </a>).  Using this method makes it possible to quickly switch between the different results files.  A problem we&#8217;ve had with the UDI 100-2000lux results is that 100 lux is lower than we want our minimum to be while the 2000 lux is an acceptable maximum.  Recently, we created a custom range by subtracting the UDI&gt;2000 results from the Daylight Autonomy results which allows us to specify the minimum through the Daylight Autonomy settings and then use the UDI&gt;2000 results as our maximum.</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/importDIVAresults.jpg" rel="shadowbox[sbpost-889];player=img;"><img class="alignleft size-large wp-image-900" title="importDIVAresults" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/importDIVAresults-1024x351.jpg" alt="" width="1024" height="351" /></a></p>
<p>&nbsp;</p>
<p>Simulation analysis has the potential to become more prevalent in the design process as it is further integrated with the 3D modeling work flow especially in the case of parametric modeling.  It&#8217;s becoming more apparent how effective parametric modeling is for exploring a multitude of design iterations and with the integration of simulation analysis those iterations can be judged against yet another metric.  We&#8217;re looking forward to the release of <a href="http://jakubiec.net/papers/bs2011_diva20_jakubiec,reinhart.pdf">DIVA 2.0</a> which will include thermal analysis capabilities through the use of EnergyPlus and seeing how that additional metric influences something like the relationships we explored above.</p>
<p>*CAUTION:  False color graphics are sometimes considered &#8220;eye candy&#8221; presumably because they look so sweet!  As with real candy, you risk making someone sick if you force them to consume too much.  Always pair with a healthy dose of explanation and annotation.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/featured/diva-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flexible Grids in Self-Structure Exhibition</title>
		<link>http://lmnts.lmnarchitects.com/fabrication/flexible-grids-exhibition/</link>
		<comments>http://lmnts.lmnarchitects.com/fabrication/flexible-grids-exhibition/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 21:33:29 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[Fabrication]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Alaris30]]></category>
		<category><![CDATA[Grasshopper]]></category>
		<category><![CDATA[Objet]]></category>
		<category><![CDATA[pattern]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=865</guid>
		<description><![CDATA[Our flexible grid research project is currently being exhibited at Le Lieu du Design in Paris.  While preparing materials for the exhibition we decided to try and build a longer version of the flexible grid.  Our previous grid prints were sized to take up roughly half of the print bed (5"x7") of our Objet Alaris30, but for the exhibit we wanted something bigger.  We ended up being able to get an 8"x20" version, and learned a number of lessons along the way.]]></description>
			<content:encoded><![CDATA[<p>Our <a title="3D Printing Flexible Grids" href="http://lmnts.lmnarchitects.com/fabrication/printed-flexgrids/">flexible grid research project</a> is currently being exhibited at <a href="http://www.lelieududesign.com/" target="_blank">Le Lieu du Design</a> in Paris.  We appreciate Elodie Ternaux of <a title="materio" href="http://www.materio.com/">matériO</a> asking us to be part of this exhibition.  Please send us photos if you happen to see the exhibit.</p>
<p><script type='text/javascript' src='http://content.bitsontherun.com/players/Gunp917R-CJC7qAWq.js?exp=1328368073&sig=745096dd54b5f8d3beca0e067a3f6ab4'></script></p>
<p>While preparing materials for the exhibition we decided to try and build a longer version of the flexible grid.  Our previous grid prints were sized to take up roughly half of the print bed (5&#8243;x7&#8243;).  The resolution of the meshes that we used for those prints were creating large .STL files (&gt;200MB) so when we tried to create a print the size of the entire bed (8&#8243;x10&#8243;) the Objet Studio software would crash.</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/09/foldedGRID-overall.png" rel="shadowbox[sbpost-865];player=img;"><img class="alignleft size-large wp-image-866" title="foldedGRID-overall" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/09/foldedGRID-overall-1024x576.png" alt="" width="1024" height="576" /></a></p>
<p>We revisited this problem and played around with different mesh resolutions that allowed us to still achieve the separation and movement between the parts but with much smaller file sizes.  After that we stacked three copies of the 8&#8243;x10&#8243; print and then connected them together at alternating ends to create a 8&#8243;x30&#8243; print.<span id="more-865"></span></p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/09/foldedGRID-foldCloseup-e1316629292175.png" rel="shadowbox[sbpost-865];player=img;"><img class="alignleft size-large wp-image-867" title="foldedGRID-foldCloseup" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/09/foldedGRID-foldCloseup-e1316629292175-1024x478.png" alt="" width="1024" height="478" /></a></p>
<p>The connection between the three layers had to be manually modeled in Rhino because of the rotation that the pieces have to go through when the grid is folded.  It took a few test prints to get the pieces to not fuse together.  The bigger issue arose when we tried to clean the 8&#8243;x30&#8243; print and realized how delicate the vertically oriented rings became.<br />
<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/09/slicing.jpg" rel="shadowbox[sbpost-865];player=img;"><img class="alignleft size-medium wp-image-868" title="slicing" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/09/slicing-300x160.jpg" alt="" width="300" height="160" /></a>The majority of the rings are sliced horizontally which gives them good structural integrity, but the slices running through the rings that occur at the fold create the perfect weak spot for the ring to break along.  Unfortunately, we learned this after experiencing a number of fractures which reduced our final print to 8&#8243;x20&#8243;.  Still much bigger than earlier prints.</p>
<p>Like any other fabrication process, the use of a 3d printer requires an understanding of the underlying material properties which is something these studies are just beginning to inform us about.  We&#8217;ll have to see if we can find a use for that fragile cross-section in future prints.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/fabrication/flexible-grids-exhibition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LMNts at Build Boston</title>
		<link>http://lmnts.lmnarchitects.com/news/buildboston2011/</link>
		<comments>http://lmnts.lmnarchitects.com/news/buildboston2011/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 17:41:07 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=862</guid>
		<description><![CDATA[Stephen Van Dyck and Scott Crawford of LMN Architects will be presenting some recent work at this year’s Build Boston conference on November 17 as part of a session about Generative Design.  The event is sponsored by the AIA’s Technology in Architectural Practice (TAP) group. http://www.buildboston.com http://network.aia.org/technologyinarchitecturalpractice/Home/]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="Build Boston logo" src="http://www.buildboston.com/ResPlus/images/BodyAll/BB_Logo_Head1.jpg" alt="" width="590" height="94" /></p>
<p>Stephen Van Dyck and Scott Crawford of LMN Architects will be presenting some recent work at this year’s Build Boston conference on November 17 as part of a session about Generative Design.  The event is sponsored by the AIA’s Technology in Architectural Practice (TAP) group.<br />
<a href=" http://www.buildboston.com"></p>
<p>http://www.buildboston.com</a></p>
<p><a href="http://network.aia.org/technologyinarchitecturalpractice/Home/">http://network.aia.org/technologyinarchitecturalpractice/Home/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/buildboston2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

