tag:blogger.com,1999:blog-171883752024-03-08T07:11:39.056+08:00Adrian Boeing: BlogAlso check out <a href="http://www.adrianboeing.com">Adrian Boeing's webpage</a>.Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.comBlogger256125tag:blogger.com,1999:blog-17188375.post-82979667216156056942019-04-13T21:56:00.002+08:002019-04-13T21:58:41.073+08:00Interoperable autonomous mining<div dir="ltr" style="text-align: left;" trbidi="on">
I was speaking to someone recently who asked me why I stopped blogging - and timely enough, the Future of Mining conference happened to record a recent short speech and published it on youtube.
The video describing Epiroc Autonomous Pit Viper blasthole drills performance and the future of autonomous interoperability is below.
<iframe width="560" height="315" src="https://www.youtube.com/embed/sR2X6klVcVw" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
I'm not used to summarising so much in 10 minutes, but I briefly discuss the business impact of autonomous blasthole drills, increased production, increased quality, and more consistent performance. I make the argument that autonomy is a critical first step prior to realising an integrated operation: essentially you can not achieve consistent real-time control of your fleet if your reliant on the variability of manned operators, and without the information (rich data plus semantics) produced by autonomous equipment. To achieve the objective of a zero-entry (no people) integrated mine you will need to automate all the mining equipment, and waiting for a single supplier to achieve this means delayed realisation of the business case. Collaboration of multiple suppliers enables best-of-breed and flexibility ensuring we see a fully autonomous and integrated mine sooner.
<br /> <br />
I'll start blogging again now - covering some of my backlog from the last few years on autonomous mining, but also back to some technical topics as well. Stay tuned.
<br /></div>
Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com3tag:blogger.com,1999:blog-17188375.post-8540634239160825252012-11-04T22:17:00.000+08:002012-11-04T22:20:08.784+08:00Back-substitution and inverting matriciesMatrix triangulation and back-substitution algorithms can be used in combination with gaussian elimination to solve systems of equations or to find the inverse of a matrix. I <a href="http://adrianboeing.blogspot.com.au/2012/11/gaussian-elimination.html">previously covered gaussian elimination</a>, continuing on we can now solve the systems of equations using <a href="http://en.wikipedia.org/wiki/Triangular_matrix#Forward_and_back_substitution">back substitution</a>.
<br/><br/>
The matrix we had to solve was:
<pre>
1 2 1 4 13
0 -4 2 -5 2
0 0 -5 -7.5 -35
0 0 0 -9 -18
</pre>
First we normalise the upper-triangle matrix, by simply dividing each row such that the leading coefficient is one:
<pre>
1 2 1 4 13
0 1 -0.5 1.2 -0.5
0 0 1 1.5 7
0 0 0 1 2
</pre>
(this simplifies the back-substitution, but we can skip/combine this step with the back-substitution)<br/><br/>
For back-substitution we work our way backwards from the bottom of the matrix to the top, progressively eliminating each variable. As with gaussian elimination we select a pivot row, and subtract that from the rows above it. First, we start with the last row, and subtract 1.5 times that row from the row above.
<pre>
1 2 1 4 13
0 1 -0.5 1.2 -0.5
0 0 1 0 4 <-- subtract pivot row * 1.5
0 0 0 1 2 <-- pivot
</pre>
Similarly, we continue on to the second row, subtracting 1.2 times, and the top row, subtracting four times.
<pre>
1 2 1 0 5 <-- subtract pivot row * 4
0 1 -0.5 0 -3 <-- subtract pivot row * 1.2
0 0 1 0 4
0 0 0 1 2 <-- pivot
</pre>
Again, we repeat the process for the third column:
<pre>
1 2 0 0 1
0 1 0 0 -1
0 0 1 0 4 <-- pivot
0 0 0 1 2
</pre>
And finally, the second column:
<pre>
1 0 0 0 3
0 1 0 0 -1 <-- pivot
0 0 1 0 4
0 0 0 1 2
</pre>
Now we have our solution to the system of equations from <a href="http://adrianboeing.blogspot.com.au/2012/11/gaussian-elimination.html">our original gaussian elimination problem</a>.<br/>
a = 3, b = -1, c = 4 and d = 2.<br/>
In words/pseudo-code, the process is:
<ul>
<li>Pivot through all the rows, starting from the bottom to the top
<li>For each row above the pivot, calculate how many times we need to subtract the pivot row from this row.
<li>For each element in the row, subtract the corresponding element from the pivot row, multiplied by the value above.
</ul>
In code:
<pre style='color:#000000;background:#ffffff;'><span style='color:#800000; font-weight:bold; '>for</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>int</span> p<span style='color:#808030; '>=</span>n<span style='color:#808030; '>-</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>;</span>p<span style='color:#808030; '>></span><span style='color:#008c00; '>0</span><span style='color:#800080; '>;</span>p<span style='color:#808030; '>-</span><span style='color:#808030; '>-</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span> <span style='color:#696969; '>//pivot backwards through all the rows</span>
<span style='color:#800000; font-weight:bold; '>for</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>int</span> r<span style='color:#808030; '>=</span>p<span style='color:#808030; '>-</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>;</span>r<span style='color:#808030; '>></span><span style='color:#808030; '>=</span><span style='color:#008c00; '>0</span><span style='color:#800080; '>;</span>r<span style='color:#808030; '>-</span><span style='color:#808030; '>-</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span> <span style='color:#696969; '>//for each row above the pivot</span>
<span style='color:#800000; font-weight:bold; '>float</span> multiple <span style='color:#808030; '>=</span> mat<span style='color:#808030; '>[</span>r<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>p<span style='color:#808030; '>]</span> <span style='color:#808030; '>/</span> mat<span style='color:#808030; '>[</span>p<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>p<span style='color:#808030; '>]</span><span style='color:#800080; '>;</span> <span style='color:#696969; '>//how many multiples of the pivot row do we need (to subtract)?</span>
<span style='color:#800000; font-weight:bold; '>for</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>int</span> c<span style='color:#808030; '>=</span>p<span style='color:#808030; '>-</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>;</span>c<span style='color:#808030; '><</span>m<span style='color:#800080; '>;</span>c<span style='color:#808030; '>+</span><span style='color:#808030; '>+</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span>
mat<span style='color:#808030; '>[</span>r<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>c<span style='color:#808030; '>]</span> <span style='color:#808030; '>=</span> mat<span style='color:#808030; '>[</span>r<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>c<span style='color:#808030; '>]</span> <span style='color:#808030; '>-</span> mat<span style='color:#808030; '>[</span>p<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>c<span style='color:#808030; '>]</span><span style='color:#808030; '>*</span>multiple<span style='color:#800080; '>;</span> <span style='color:#696969; '>//subtract the pivot row element (multiple times)</span>
<span style='color:#800080; '>}</span>
<span style='color:#800080; '>}</span>
<span style='color:#800080; '>}</span>
</pre>
(complete <a href="http://dzone.com/snippets/matrix-operations-gaussian">code here</a>)<br/><br/>
This process can be applied to find the <a href="http://en.wikipedia.org/wiki/Gauss%E2%80%93Jordan_elimination#Application_to_finding_inverses">inverse of a general matrix</a>.
Beginning with any matrix we want to invert, we augment it with the identity matrix.
For example:
<pre>
2 4 -2 1 0 0
4 9 -3 0 1 0
-2 -3 7 0 0 1
</pre>
Now we can apply <a href="http://adrianboeing.blogspot.com.au/2012/11/gaussian-elimination.html">gaussian elimination</a> to generate:
<pre>
2 4 -2 1 0 0
0 1 1 -2 1 0
0 0 4 3 -1 1
</pre>
The normalise the upper triangle to get:
<pre>
1 2 -1 0.5 0 0
0 1 1 -2 1 0
0 0 1 0.75 -0.25 0.25
</pre>
And finally, back-substitution to get our solved inverse:
<pre>
1 0 0 6.8 -2.8 0.75
0 1 0 -2.8 1.2 -0.25
0 0 1 0.75 -0.25 0.25
</pre>
In this entire discussion I have left out ill-conditioned and singular matrices, but I'll leave modifying the code for that as an exercise for the reader.Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com2tag:blogger.com,1999:blog-17188375.post-76725379508423615932012-11-04T21:25:00.000+08:002012-11-05T08:17:07.995+08:00Gaussian Elimination<a href="http://en.wikipedia.org/wiki/Gaussian_elimination">Gaussian Elimination</a> is an elementary transformation that converts a matrix into a triangle, or row-reduced echelon form (RREF). It forms the basis of a number of operations in linear algebra to solve systems of equations, invert matrices, and minimize systems of equations among other things (I'll cover these in later posts). The Gaussian Elimination algorithm itself is straight-forward (you probably learnt it in high school).
Given a system of equations, e.g.
<pre>
a + 2b + c + 4d = 13
2a + 4c + 3d = 28
4a + 2b + 2c + d = 20
-3a + b + 3c + 2d = 6
</pre>
We can form an augmented matrix to represent it, and use Gaussian elimination to solve it. The goal is to produce a <a href="http://en.wikipedia.org/wiki/Triangular_matrix#Examples">triangle-matrix</a> representation, so that we can solve the equations by back-substitution. In other words, we want to (eventually) have one row represent each variable, and for all other rows, that variable should be zero. (i.e. solved). Gaussian elimination takes us part of the way there by giving us a set of equations with a starting point which we can then later solve.<br/><br/>
Representing the above equations as a matrix, we have:
<pre>
1 2 1 4 13
2 0 4 3 28
4 2 2 1 20
-3 1 3 2 6
</pre>
The first step is to select a pivot row, which we can use to eliminate/reduce the other rows. When we eliminate the other rows, we want the that variables value to be 0.
In this example, we pick the first row, and then subtract that twice from the row below, to ensure that the row below will have zero a's.
<pre>
1 2 1 4 13 <-- pivot
0 -4 2 -5 2 <-- subtract pivot row * 2
4 2 2 1 20
-3 1 3 2 6
</pre>
Likewise, four times the third tow, and negative three times the final row.
<pre>
1 2 1 4 13 <-- pivot
0 -4 2 -5 2
0 -6 -2 -15 -32 <-- subtract pivot row * 4
0 7 6 14 45 <-- subtract pivot row * -3
</pre>
Great. Our first variable (a) has been eliminated.
We now repeat this step, starting from the second row, with the variable 'b'. We don't want to use the first row, as we want to preserve that row's representation of the 'a' variable.
<pre>
1 2 1 4 13
0 -4 2 -5 2 <-- pivot
0 0 -5 -7.5 -35 <-- subtract pivot row * 1.5
0 0 9.5 5.2 48 <-- subtract pivot row * -1.75
</pre>
Now, we repeat the process again, starting from the third row.
<pre>
1 2 1 4 13
0 -4 2 -5 2
0 0 -5 -7.5 -35 <-- pivot
0 0 0 -9 -18 <-- subtract pivot row * -1.9
</pre>
Done.
In pseudo-code/words, the algorithm is:
<ul>
<li>For each row (except the last), select a pivot. (In my example, I just take the first available row each time)
<li>For each row that is below the pivot, calculate the number of times we need to subtract the row (i.e. divide)
<li>For each element in this row, subtract the corresponding element in the pivot row, multiplied by the value we calculated above.
</ul>
The code to achieve this is:
<pre style='color:#000000;background:#ffffff;'><span style='color:#696969; '>//input a m (col) by n (row) matrix ('mat')</span>
<span style='color:#696969; '>//p is the pivot - which row we will use to eliminate</span>
<span style='color:#800000; font-weight:bold; '>for</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>int</span> p<span style='color:#808030; '>=</span><span style='color:#008c00; '>0</span><span style='color:#800080; '>;</span>p<span style='color:#808030; '><</span>n<span style='color:#808030; '>-</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>;</span>p<span style='color:#808030; '>+</span><span style='color:#808030; '>+</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span> <span style='color:#696969; '>//pivot through all the rows</span>
<span style='color:#800000; font-weight:bold; '>for</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>int</span> r<span style='color:#808030; '>=</span>p<span style='color:#808030; '>+</span><span style='color:#008c00; '>1</span><span style='color:#800080; '>;</span> r <span style='color:#808030; '><</span> n<span style='color:#800080; '>;</span> r<span style='color:#808030; '>+</span><span style='color:#808030; '>+</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span> <span style='color:#696969; '>//for each row that isn't the pivot</span>
<span style='color:#800000; font-weight:bold; '>float</span> multiple <span style='color:#808030; '>=</span> mat<span style='color:#808030; '>[</span>r<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>p<span style='color:#808030; '>]</span> <span style='color:#808030; '>/</span> mat<span style='color:#808030; '>[</span>p<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>p<span style='color:#808030; '>]</span><span style='color:#800080; '>;</span> <span style='color:#696969; '>//how many multiples of the pivot row do we need (to eliminate this row)?</span>
<span style='color:#800000; font-weight:bold; '>for</span> <span style='color:#808030; '>(</span><span style='color:#800000; font-weight:bold; '>int</span> c <span style='color:#808030; '>=</span> <span style='color:#008c00; '>0</span><span style='color:#800080; '>;</span> c<span style='color:#808030; '><</span>m<span style='color:#800080; '>;</span> c<span style='color:#808030; '>+</span><span style='color:#808030; '>+</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span> <span style='color:#696969; '>//for each element in this row</span>
mat<span style='color:#808030; '>[</span>r<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>c<span style='color:#808030; '>]</span> <span style='color:#808030; '>=</span> mat<span style='color:#808030; '>[</span>r<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>c<span style='color:#808030; '>]</span> <span style='color:#808030; '>-</span> mat<span style='color:#808030; '>[</span>p<span style='color:#808030; '>]</span><span style='color:#808030; '>[</span>c<span style='color:#808030; '>]</span><span style='color:#808030; '>*</span>multiple<span style='color:#800080; '>;</span> <span style='color:#696969; '>//subtract the pivot row element (multiple times)</span>
<span style='color:#800080; '>}</span>
<span style='color:#800080; '>}</span>
<span style='color:#800080; '>}</span>
</pre>
<a href="http://dzone.com/snippets/matrix-operations-gaussian">(full code here)</a>
<a href="http://adrianboeing.blogspot.com.au/2012/11/back-substitution-and-inverting.html">Next time, we continue on to solve the equations - available here</a>! (2,4,-1,3)Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com0tag:blogger.com,1999:blog-17188375.post-57143669338827535922012-09-30T23:01:00.001+08:002012-11-04T22:19:43.283+08:00Mining Robotics: An overview survey<div dir="ltr" style="text-align: left;" trbidi="on">
Robotics is typically associated with manufacturing robotics (e.g. PUMA arm), military robotics (e.g. Predator UAV), and more recently consumer robots (e.g. Roomba), medical/healthcare (e.g. Da Vinci) and the automotive industry (e.g. driverless cars). Not many are aware of the prevalence of robotics in the mining industry and the steps the industry has taken towards automation and autonomous robots.
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnj4X-czKEs8q7GUBrYDemCLwJ2S_Tlw5FZkIKG3Oc4PS4ZLc0iHaD976UWTEf9tIGCwjxVCqMrSGpS7_5XbX22H3nnDGHq2kGQP-kRHMy4eVGRLAWt3i1wcSuQIgx9sZrxll1/s1600/automatedwestangelas.jpeg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="124" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnj4X-czKEs8q7GUBrYDemCLwJ2S_Tlw5FZkIKG3Oc4PS4ZLc0iHaD976UWTEf9tIGCwjxVCqMrSGpS7_5XbX22H3nnDGHq2kGQP-kRHMy4eVGRLAWt3i1wcSuQIgx9sZrxll1/s200/automatedwestangelas.jpeg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Autonomous mining</td></tr>
</tbody></table>
<br />
The mining industry is a world-leader in autonomy, for example Rio Tinto's Western Australia operations has the worlds largest fleet of autonomous vehicles (150 autonomous trucks) - significantly larger than any operational system in the military. Rio's Western Australia operations are all controlled from a operation centre, which controls 40 mines, 30 pits, trains, power stations, and ports all based thousands of kilometres away. In terms of data, the WA system generates around 2.4 terabytes per minute of data. There is quite a lot of intelligence and innovation involved.
<br />
<br />
Overall, mining can be broadly broken up into a few key phases:
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZjXQC55ZWk00TUEAMP3DMOlrP8on6xcjl8Kqr5imEn_BQ2TNHfgd9R6EVk4ywGsXeLnglGcC-VBqFg4YDenTGqlNtV626WBeWXGaR9DVyks7fz4qTeOu9u1jUNvVyTv2fMUax/s1600/miningprocess.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="110" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZjXQC55ZWk00TUEAMP3DMOlrP8on6xcjl8Kqr5imEn_BQ2TNHfgd9R6EVk4ywGsXeLnglGcC-VBqFg4YDenTGqlNtV626WBeWXGaR9DVyks7fz4qTeOu9u1jUNvVyTv2fMUax/s200/miningprocess.png" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Mining process</td></tr>
</tbody></table>
<ul>
<li>Exploration, assessment and planning. In this phase, new resources are identified and a new mine site is designed and constructed.
</li>
<li>Drill and blast, material is extracted from the ore.
</li>
<li>Load and haul, material is taken from the point of extraction to the processing plant.
</li>
<li>Processing, where the material is converted/crushed into a more useful (sellable) form.
</li>
<li>Transportation, where the product is loaded and transported, usually via rail to a port and then on to a ship to its final destination.
</li>
<li>Stockpiling, occurs at various points in varying quantities where appropriate.
</li>
</ul>
At each of these steps some kind of machine is involved, and I'll give you a brief overview of the machines and some of the relevant research or commercial automation systems available.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh36BnC79FK6is51vI-S7v21Ks4Q0wXsQVrwg049G2AyJsy8D88iHVFaTd2yf-yaabceafHvRv_b67QdznhMwctCWjdSHUFaDSWJHapuFg7eBEowcJDfmXTLQeZSzuYqCufdMVm/s1600/exploration-small.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh36BnC79FK6is51vI-S7v21Ks4Q0wXsQVrwg049G2AyJsy8D88iHVFaTd2yf-yaabceafHvRv_b67QdznhMwctCWjdSHUFaDSWJHapuFg7eBEowcJDfmXTLQeZSzuYqCufdMVm/s200/exploration-small.jpg" width="200" /></a></div>
Exploration and <a href="http://en.wikipedia.org/wiki/Remote_sensing">remote sensing</a> is a massive research area in itself in other industries, and mining is no different. UAV's are seeing use in aerial surveys on mine sites, with large data sets fusing visual (photogramatery), infrared, <a href="http://en.wikipedia.org/wiki/Lidar">LIDAR</a>, <a href="http://en.wikipedia.org/wiki/Interferometric_synthetic_aperture_radar">InSAR</a>, <a href="http://en.wikipedia.org/wiki/Gravity_gradiometry">gradiometry</a>, seismic and other geodesic measurements.
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjKBgDPa_FnPhSdCkgVOt8am1hKSy2L1gavafk31YWSP8hnLZOKurcSF10AOAVQjIl3yQ5jsPK7OTER-WgQRGop95R2Tmz4GxGud4iijZJSZOJTlajqGQV00ira4QYXBG0Bo_M/s1600/westang_scan-small.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjKBgDPa_FnPhSdCkgVOt8am1hKSy2L1gavafk31YWSP8hnLZOKurcSF10AOAVQjIl3yQ5jsPK7OTER-WgQRGop95R2Tmz4GxGud4iijZJSZOJTlajqGQV00ira4QYXBG0Bo_M/s200/westang_scan-small.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">West Angelas mine LIDAR scan</td></tr>
</tbody></table>On the ground new sensor fusion systems are being developed to classify the mine and ore structure and to identify the richest ore deposits. Combining all this data into an overall mine model is a difficult machine learning task. The <a href="http://www.acfr.usyd.edu.au/rtcma/">Rio Tinto Center for Mine Automation</a> are doing active research in this field, and the <a href="http://www.gatewing.com/">Gatewing X100</a> is an example of an UAV used for mapping in mining.
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwL_0-KFI9Lw93Ncqt7__CA_hb0FLFJ0MI-nyD-kCg-CTug5jy6fXXy7PLBMAPpM4qu7fAB6-WRcucjt59FjZXWKzIxdJM3gVC3obcH9UTSuf5z-B_Ky2QVgoT8uO6OJmFuq-y/s1600/rcs_drill.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwL_0-KFI9Lw93Ncqt7__CA_hb0FLFJ0MI-nyD-kCg-CTug5jy6fXXy7PLBMAPpM4qu7fAB6-WRcucjt59FjZXWKzIxdJM3gVC3obcH9UTSuf5z-B_Ky2QVgoT8uO6OJmFuq-y/s200/rcs_drill.jpg" width="200" /></a></div>
Drill and blasting is a mining-specific operation and there has been significant advancement in robotics in this area due to the operational hazards involved with this line of work. Robots can accurately drill holes that won't collapse and are easy to load, and <a href="http://www.atlascopco.com/rcs/">Atlas CopCo</a> and <a href="http://www.flandersinc.com/products-innovations/flanders-products/ardvarc/">Flanders</a> both have commercial automation systems for drilling which are well on their way to delivering autonomous drill rigs in the near future (<a href="http://www.itnews.com.au/News/312004,rio-tinto-advances-autonomous-drill-project.aspx">trial drilling systems have been in use on production sites since 2008</a>). Atlas Copco first started their work in automated drill rigs in the 1980's and now has over 2,500 machines running their control system technology.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJvf0JOIcHS5wmpMmj-FUYebztaS3NkNVVEB5fVG2IiM1JRtnB9p4bSxSPXPXJoaedZAowPJyIIMoMaHuuQ5AQweXl01Rt3-0IjHmSb0RIYziNdJyct4cOmwv8O9mF6JVDmxk3/s1600/arcap.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJvf0JOIcHS5wmpMmj-FUYebztaS3NkNVVEB5fVG2IiM1JRtnB9p4bSxSPXPXJoaedZAowPJyIIMoMaHuuQ5AQweXl01Rt3-0IjHmSb0RIYziNdJyct4cOmwv8O9mF6JVDmxk3/s200/arcap.png" width="200" /></a></div>
The load and haul stage is perhaps the most interesting as it is the first area where autonomous vehicles are used in regular production environments. Whilst autonomous loading is still an area of research (See these CSIRO projects on <a href="http://research.ict.csiro.au/research/labs/autonomous-systems/field-robotics/mining-robotics/dragline-automation">dragline</a> and <a href="http://research.ict.csiro.au/research/labs/autonomous-systems/field-robotics/mining-robotics/shovel-loading-automation">shovel loading</a> automation), there are plenty of commercial automation systems for haul vehicles.
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_UJ4jzNuPyxwl-ZE6xfUcAwP8NZw3uq-p4jRbVeVXPB9l_H-65F8gB4QEOU6iysM9Wc9_j4qmdNOGT9Ja9EKIzoi44ffyvSlmle7sZZiV_cOvU9cGAerOkyIMelnv9GFhyrJN/s1600/scooptram.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="106" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_UJ4jzNuPyxwl-ZE6xfUcAwP8NZw3uq-p4jRbVeVXPB9l_H-65F8gB4QEOU6iysM9Wc9_j4qmdNOGT9Ja9EKIzoi44ffyvSlmle7sZZiV_cOvU9cGAerOkyIMelnv9GFhyrJN/s200/scooptram.png" width="200" /></a></div>
This includes <a href="http://catminestarsystem.com/capability_sets/command/packages/autonomous">CAT Minestar Command</a>, <a href="http://www.atlascopco.us/usus/products/navigationbyproduct/Product.aspx?id=1515262&productgroupid=1401308">Atlas-Copco Scooptram</a>, <a href="http://www.miningandconstruction.sandvik.com/sandvik/0120/Internet/Global/S003715.nsf/LUSL/SLFrameForm14D46ACF97A3ECCAEC12577D20067E35F?OpenDocument">Sandvik Automine</a>, <a href="http://www.komatsu.com/ce/currenttopics/v09212/index.html">Komatsu Frontrunner</a>.
<a href="http://www.mineware.com/">Mineware</a> provide shovel and dragline automation systems, with LIDAR systems that build digital terrain maps on the fly. <a href="http://www.autonomoussolutions.com/Industrial">Autonomous Solutions</a> has a number of autonomous vehicles, including trucks and dozers.
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGnwULLV30t8xRqWzPZMqt3ek2VmpwH-IygCtkiRPHaiuZ_NzsiAX2WP9Dh-792C25td0PzBnBLzCtipOGjtuXyWXMYJAybem4NQySPl_0tH7YtShcunb2qqxa1555OR-VDXTL/s1600/komatsu_autonomoushaulage.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="118" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGnwULLV30t8xRqWzPZMqt3ek2VmpwH-IygCtkiRPHaiuZ_NzsiAX2WP9Dh-792C25td0PzBnBLzCtipOGjtuXyWXMYJAybem4NQySPl_0tH7YtShcunb2qqxa1555OR-VDXTL/s200/komatsu_autonomoushaulage.jpeg" width="200" /></a></div>
Continuous miners and long wall mining have seen <a href="http://www.lascautomation.com/longwall-automation-technology.html">multiple</a> <a href="http://www.frc.ri.cmu.edu/~axs/miner.html">automation systems</a> including commercial systems from Eickhoff and <a href="https://mining.cat.com/products/underground-mining/longwall/automation">CAT</a>. Excavators are no stranger to automation, <a href="http://www.frc.ri.cmu.edu/~axs/mass_ex.html">CMU</a> automated excavators and truck dumping back in the late 90's, and work is ongoing at <a href="http://www.pwri.go.jp/eindex.html">PWRI in Japan</a> and Hyundai research. The range of commercially available autonomous mining vehicles put military UGV's and automotive companies to shame.
<br />
<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYl8j7lfmdywwfXBy2ZCKmAM0LRYOz3GUYMR7i9ehBxLyiLlbPmgM0weJu3ExdlvHr84zc7z8fkMXgVwuenPygb-ary046-_5f9e4CoRd4ZMkJfnhSn7ajxjgvpgZATTm_pHlp/s1600/Rocklogic_CAD-small.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYl8j7lfmdywwfXBy2ZCKmAM0LRYOz3GUYMR7i9ehBxLyiLlbPmgM0weJu3ExdlvHr84zc7z8fkMXgVwuenPygb-ary046-_5f9e4CoRd4ZMkJfnhSn7ajxjgvpgZATTm_pHlp/s200/Rocklogic_CAD-small.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Transmin Rocklogic</td></tr>
</tbody></table>
Processing plants have been fully automated, although for many metals, (e.g. iron ore), there isn't much too the process in the first place. Companies such as Metso have fully automated crushers, conveyors, and also include <a href="http://www.metso.com/miningandconstruction/mm_proc.nsf/WebWID/WTB-041208-2256F-8CDAA?OpenDocument">computer vision systems to identify and classify rocks/froth/bubbles, etc</a>. <a href="http://www.flsmidth.com/en-US/Services+and+Capabilities/Automation">FLSmidth</a> and <a href="http://www.calibreglobal.com.au/Services/Technology/Automation">Calibre</a> Transmin have developed automation systems for rock breakers are available allowing the <a href="http://www.rocklogic.com.au/">rockbreaker to automatically park and deploy</a>. In-Pit Crushing and Conveying (IPCC) systems allow parts of the plant to be mobile, and even these systems have been largely automated by companies such as Sandvik.
<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRBzdeXtUpjuAnK24FiHE_HRTuRfOl4ohKq4Rw2YlY4VNsSKzhQ65uMCaGQZ3nUBRbIAezNB0mnS16NGv1M38p1CvOccOV5wT-DpM51JcFp13mlTfiCqp522T3y5SGFgnXjEgl/s1600/autonomous_train.jpeg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRBzdeXtUpjuAnK24FiHE_HRTuRfOl4ohKq4Rw2YlY4VNsSKzhQ65uMCaGQZ3nUBRbIAezNB0mnS16NGv1M38p1CvOccOV5wT-DpM51JcFp13mlTfiCqp522T3y5SGFgnXjEgl/s200/autonomous_train.jpeg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Autonomous train</td></tr>
</tbody></table>
Transporting material from the mine is usually performed by a train, and <a href="http://en.wikipedia.org/wiki/List_of_driverless_trains">autonomous trains have been around for a while</a>. In fact, <a href="http://www.lkab.com/en/">LKAB</a> have been running driverless trains since the 1970's. The main difference in modern mining applications being that the goal is now fully autonomous operation, and that the trains can stretch many kilometres in length, making control a more difficult problem. Major miners such as <a href="http://www.riotinto.com/media/5157_21665.asp">Rio Tinto are automating the trains in Western Australia</a>, with companies such as <a href="http://www.ansaldo-sts.com/">Ansaldo STS</a> and <a href="http://www.nyab.com/">New York Air Brakes</a> providing the technology.
<br />
<br />
Finally, with stockpiling <a href="http://en.wikipedia.org/wiki/Stacker">Stacker</a>-<a href="http://en.wikipedia.org/wiki/Reclaimer">Reclaimers</a> have been automated, with companies such as <a href="http://www.thyssenkrupp.com/">ThyssenKrupp</a> and <a href="http://www.isam-ag.com/stacker_reclaimers">iSAM</a> leading the way
<br />
<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP5zr6YHL_zpNvFN_U0uR7RUbj6-mXxWO2cEXMqDogDA95gN_kuKZs6cPgbCLBeWNJe-OcmucRalKHxCiTZ0TlnQWTJjeCRucZqd65reUQkJ2Rd-r0xcgstwdMaQwyLIAZvXJd/s1600/rio-roc.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP5zr6YHL_zpNvFN_U0uR7RUbj6-mXxWO2cEXMqDogDA95gN_kuKZs6cPgbCLBeWNJe-OcmucRalKHxCiTZ0TlnQWTJjeCRucZqd65reUQkJ2Rd-r0xcgstwdMaQwyLIAZvXJd/s200/rio-roc.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Rio Tinto - Remote Operation Center</td></tr>
</tbody></table>
Overall there are a large amount of automated and autonomous mining equipment available, and projects such as <a href="http://www.riotinto.com/ourapproach/17203_mine_of_the_future.asp">Rio Tinto's mine of the future</a> at <a href="http://en.wikipedia.org/wiki/West_Angelas_mine">West Angelas</a> and <a href="http://en.wikipedia.org/wiki/Yandicoogina_mine">Yandicoogina</a> sites, <a href="http://www.miningaustralia.com.au/news/world-s-largest-iron-ore-mine-to-go-truckless?utm_source=SilverpopMailing&utm_medium=email&utm_campaign=Mining%20Australia%20Newsletter%20-%20send%20-%3E%2012/09/2012%2012:19:23%20PM&utm_content=">Vale's Carajas Serra Sul S11D site</a> and <a href="http://www.nautilusminerals.com/s/Projects-Solwara.asp">Nautilus's Solwara underwater mining</a> are all pushing towards fully autonomous sites where we may see no humans involved in operating future mine sites.
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9RmB3WhWMuE4D_S8etV7c9aDYmvSUnSfgzRUqsZzLHXsHhXbMu78v_0TvF6ekvKNN2n1QhmSCDIRVwpqNqDpzVQVGPOEnICvZ230RI1koKCkBAl0piMCvJ0QTFlfGZ-XivoGo/s1600/minepicture-small.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9RmB3WhWMuE4D_S8etV7c9aDYmvSUnSfgzRUqsZzLHXsHhXbMu78v_0TvF6ekvKNN2n1QhmSCDIRVwpqNqDpzVQVGPOEnICvZ230RI1koKCkBAl0piMCvJ0QTFlfGZ-XivoGo/s200/minepicture-small.jpg" width="152" /></a></div>
So if you want to find out more about robotics and automation research in mining there are a few great places to start:
<br />
<ul>
<li>Major miners such as <a href="http://www.riotinto.com/ourproducts/20170_technology_and_innovation.asp">Rio Tinto</a> and BHP have innovation centres all around the world.
</li>
<li>Australia's <a href="http://research.ict.csiro.au/research/labs/autonomous-systems/field-robotics/mining-robotics">CSIRO</a>, <a href="http://www.acfr.usyd.edu.au/rtcma/">Australian Centre for Field Robotics</a>, <a href="http://www.acarp.com.au/">Australia Coal Association Research Program</a> and the <a href="http://www.ausimm.com.au/">AusIMM</a>. <a href="http://en.wikipedia.org/wiki/West_Angelas_mine">West Angelas</a> is a notable site.
</li>
<li>South Africa's <a href="http://www.csir.co.za/mineral_resources/">CSIR</a> have a strong mining research focus, and <a href="http://www.aga-tic.com/agatic/">AngloGold have an innovation centre</a>. <a href="http://en.wikipedia.org/wiki/Finsch_diamond_mine">Finsch underground mine</a> is a notable site.
</li>
<li>North America, the <a href="http://www.cmic-ccim.org/en/index.asp">Canada Mining Innovation Council</a>.
</li>
<li>South America, <a href="http://www.vale.com/en-us/conheca-a-vale/destaques/pages/vale-investe-na-pesquisa-da-mineracao-do-futuro-1.aspx">Vale</a> has a number of research centers. <a href="http://en.wikipedia.org/wiki/El_Teniente">El Teniente</a> is a notable site.
</li>
<li>In Europe <a href="http://www.ltu.se/research/I-fokus-just-nu/from-hard-rock-to-heavy-metal/Europeisk-storsatsning-pa-djupa-gruvor-1.89758?l=en">LTU</a> are a major research institute in mining automation. <a href="http://en.wikipedia.org/wiki/Kiruna_Mine">Kiruna</a> is a notable site.
</li>
</ul>
The future of mining is autonomous robots, and we are well on our way!</div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com2tag:blogger.com,1999:blog-17188375.post-31125345239520004512012-08-05T18:04:00.000+08:002012-08-05T23:20:36.356+08:00Programming linksWell overdue for a catchup post on the non-graphics programming side of things, so here we go:
<ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-gaQTB25AujQebS2-iuGro09YW4jnI3GLmkuxJWLAwVL_oFoGf1JhLwGpwOqw9eAEF9cI_zh1V0c8q-DZtQ_GonNELXSFEJwiPUIJO1DnaFayeFK4ddDMBo68-37oqSXHidCF/s1600/pe101-preview.jpg" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="149" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-gaQTB25AujQebS2-iuGro09YW4jnI3GLmkuxJWLAwVL_oFoGf1JhLwGpwOqw9eAEF9cI_zh1V0c8q-DZtQ_GonNELXSFEJwiPUIJO1DnaFayeFK4ddDMBo68-37oqSXHidCF/s200/pe101-preview.jpg" /></a></div>
<li>Ange Albertini put together a fantastic overview of the
<a href="http://code.google.com/p/corkami/wiki/PE101?show=content">Windows Portable Executable (PE) file format</a>. He also has a great page on <a href="http://code.google.com/p/corkami/wiki/x86oddities">x86 oddities</a>.
<li>OS Dev has a short <a href="http://wiki.osdev.org/D_Bare_Bones">tutorial on writing an Operating System kernel in the D programming language</a>
<li>Leo Meyerovich and Ari Rabkin have an amazing <a href="http://www.eecs.berkeley.edu/~lmeyerov/projects/socioplt/viz/rank.html">interactive visualization and comparison of different programming languages</a>
<li>If you haven't visited Rosetta Code for a while there are now a <a href="http://rosettacode.org/wiki/Category:Programming_Tasks">very large comparison of programming tasks in multiple languages</a>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgarI3fD7mly95c8OE33er-DIxQ2EJzKUWd7GFQ1CD8nOCkHPR4EtNa8gb44sPDMYCjHZbmH-w26vLlgXeGD0A1-yLctM7WSF98EeCBYZu2KQ77TkXSW9LV13Vw4YtpxDz0essT/s1600/blocky.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="73" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgarI3fD7mly95c8OE33er-DIxQ2EJzKUWd7GFQ1CD8nOCkHPR4EtNa8gb44sPDMYCjHZbmH-w26vLlgXeGD0A1-yLctM7WSF98EeCBYZu2KQ77TkXSW9LV13Vw4YtpxDz0essT/s200/blocky.png" /></a></div>
<li><a href="http://code.google.com/p/blockly/?redir=1">Google Blocky</a> is a visual web-based programming language. Drag & drop function blocks together.
<li><a href="http://luajit.org/">LuaJIT</a> is a just in time compiler for Lua.
<li><a href="http://www.eclipse.org/koneki/ldt/">Lua Development Kit</a> is a eclipse plugin to provide a Lua IDE.
<li>Microsoft have relased <a href="http://msdn.microsoft.com/en-us/roslyn">Roslyn compiler API</a> letting you interact with the Microsoft compilers intermediary language.
<li>Marc Feeley wrote a one file <a href="http://www.iro.umontreal.ca/~felipe/IFT2030-Automne2002/Complements/tinyc.c">tiny c compiler</a>.
<li>Clang has a free <a href="http://clang-analyzer.llvm.org/">Static Analyzer</a> for C and Objective C programs. (has XCode support).
<li>Andy Wingo wrote an indepth post <a href="http://wingolog.org/archives/2011/08/02/a-closer-look-at-crankshaft-v8s-optimizing-compiler">inspecting the Google V8 javascript optimizing compiler</a>
<li><a href="http://www.dwheeler.com/sloccount/">SLOCCount</a> is a neat tool for calculating the number of Lines of Code in your project, and other metrics. Other great tools for software metrics and code counting are <a href="http://cccc.sourceforge.net/">CCCC</a>, <a href="http://www.verifysoft.com/en_cmtx.html">CMT</a> and the <a href="http://www.maultech.com/chrislott/resources/cmetrics/">C metrics collection</a>.
<li><a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV</a> is a graphical front-end for the gcov code coverage testing tool.
<li><a href="http://www.codersnotes.com/sleepy/very-sleepy-0-8">Very Sleepy windows profiler v0.8 has been released</a>.
<li>Lucas van Dijk has a short <a href="http://return1.net/blog/2012/May/3/introduction-to-threads-with-c11">tutorial on threads with C++11</a>
<li>The <a href="http://src.chromium.org/viewvc/chrome/trunk/src/base/">Google Chrome Framework</a> is quite comprehensive and multiplatform.
<li><a href="https://github.com/facebook/folly/blob/master/folly/docs/Overview.md
">Folly (Facebook Open Source Library)</a> provides a number of extensions over the STL and C++11.
<li>The <a href="http://pocoproject.org/features.html">POCO library</a> provides a solid framework for applications with signal/slots, zip, cryptography, database, logging, networking, and multiprocessing functions. The basic and complete editions are free and open source, however the professional edition is commercial.
<li>Ian Boyd has a great post on <a href="http://programmers.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed/145633#145633">Hasing functions</a>. <a href="http://code.google.com/p/smhasher/wiki/MurmurHash3">Murmur hash</a> gives good results as it is fast to compute and results in very few collisions. (CRC32 provides less collisions though)
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoHGy7GNrOEhnstjaBJykYepSoD1gyxbVK0qAkDWldRyTBEPC5MvLsLwcN8cseQzJJhQ3foPilUcnsoQfUOlQ_yj30vekOkmHZrwLGTAAhDLIgdq6rrfiLa5WDQrtKCK72qU5O/s1600/bwt.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="138" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoHGy7GNrOEhnstjaBJykYepSoD1gyxbVK0qAkDWldRyTBEPC5MvLsLwcN8cseQzJJhQ3foPilUcnsoQfUOlQ_yj30vekOkmHZrwLGTAAhDLIgdq6rrfiLa5WDQrtKCK72qU5O/s200/bwt.png" /></a></div>
<li>Santhosh Kumar wrote an interesting post on <a href="http://blog.avadis-ngs.com/2012/04/elegant-exact-string-match-using-bwt-2/">exact string match using the Burrows Wheeler transform</a>, which includes a good visual description of the BWT (used often for <a href="http://adrianboeing.blogspot.com.au/2011/01/executable-compression.html">compression</a>).
<li>John Cook has a small collection of <a href="http://www.johndcook.com/stand_alone_code.html">random number generators for C++, C# and Python</a> including gamma, Weibull, Chi-square, Student-t, Cauchy, etc, etc.
<li><a href="http://code.google.com/p/miniz/">miniz</a> is a single file compression library for ZLIB, ZIP and PNG files.
<li><a href="http://tukaani.org/xz/embedded.html">XZ Embedded</a> is a small decompressor for the XZ file format for embedded platforms.
<li><a href="http://synergy-foss.org/wiki/%CE%9CSynergy"> μSynergy</a> is a lightweight embedded client for Synergy (mouse sharing).
<li>Quinten Lansu wrote a fantastic tutorial on <a href="http://knight666.com/blog/serialization-using-protobuf/">serialisation using Google's Protobuf</a>
<li>Some nice <a href="http://hpneo.github.com/gmaps/examples.html">examples of how to generate various google maps</a> including geocodes, events, markers, routes, etc.
<li>Steve Hanov has a post on <a href="http://stevehanov.ca/blog/index.php?id=132">A/B testing</a>.
<li>The <a href="http://throwtheswitch.org/white-papers/unity-intro.html">Unity test framework for C</a> is fairly easy to use.
<li><a href="http://algowiki.net/wiki/index.php?title=Main_Page">AlgoWiki</a> has a nice collection of algorithms
<li>And finally, David Joyner, Minh Van Nguyen, and Nathann Cohen have released an <a href="http://code.google.com/p/graphbook/">free open source book on graph algorithms</a> covering everyones favourites from Dijkstra and Floyd-Roy-Warshall to Huffman codes, Priority queues, and specific problems such as graph coloring and travelling salesman.
</ul>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com2tag:blogger.com,1999:blog-17188375.post-61349258824324593862012-07-31T23:38:00.000+08:002012-07-31T23:38:22.797+08:00Mid year pointWell, its a bit over the mid year point, and the blog posts have been lower than usual.
There are a number of things that I will do longer posts on, which have happened in the last six months:
<ul>
<li>The <a href="http://onlinelibrary.wiley.com/doi/10.1002/rob.21434/abstract">WAMbot Journal of Field Robotics article</a> was accepted and published, which has been the subject of a number of <a href="http://adrianboeing.blogspot.com/search/label/magic2010">previous posts on MAGIC2010</a>. I've put together a few posts on the navigation system (A*, <a href="http://adrianboeing.blogspot.com/2012/03/elastic-band-realtime-pathfinding.html">Elastic bands</a>, <a href="http://adrianboeing.blogspot.com.au/2012/05/dynamic-window-algorithm-motion.html">DWA</a>), but still nothing on the system architecture, hardware, exploration, AI, HMI, comms, SLAM, and overall experiences. So plenty of material left to go.
<li>A paper on the Navigation system has been accepted for publication.
<li>A paper on using <a href="http://pal.sf.net/">Physics Abstraction Layer</a> for evolving robot control programs has been accepted for publication.
<li>I finally uploaded the code to <a href="http://improvcv.sf.net/">ImprovCV</a> and <a href="http://sourceforge.net/projects/subsim/">SubSim</a>.
<li>I gave a guest lecture on realtime raytracing with WebGL, and another on intelligent systems and automation in mining
<li>I've been doing a little bit of HTML5 and <a href="http://threejs.org/">three.js</a> work, which hopefully will turn into a few posts
<li>As per usual, I've been collecting a large list of interesting links from around the web, that will form a number of catchup posts.
</ul>
Hopefully more from me soon...Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com0tag:blogger.com,1999:blog-17188375.post-29098710743266319032012-06-07T23:21:00.000+08:002012-06-07T23:21:37.054+08:00GPU Technology Conference 2012<div dir="ltr" style="text-align: left;" trbidi="on">
nVidia's <a href="http://www.gputechconf.com/gtcnew/on-demand-gtc.php">GPU Technology Conference</a> is over, and a number of presentation slides have been uploaded. There were a quite a few interesting talks relating to graphics, robotics and simulation:
<br />
<ul>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij_o64RK3MxFCGsYRB0Dzuh9CQo3BBSxQ6MPpGdrT6rO48dSU9HYbgxOoRHkB97p77pjLW12qr6U_gwkymk7Fk33vev_wtMDJhfT7pTpVKuM3Xh6Uc21aRNE2keSVAOKqbE6c1/s1600/fire.jpg" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="108" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij_o64RK3MxFCGsYRB0Dzuh9CQo3BBSxQ6MPpGdrT6rO48dSU9HYbgxOoRHkB97p77pjLW12qr6U_gwkymk7Fk33vev_wtMDJhfT7pTpVKuM3Xh6Uc21aRNE2keSVAOKqbE6c1/s200/fire.jpg" /></a>
<li>Simon Green from nVidia and Christopher Horvath from Pixar presented 'Flame On: Real-Time Fire Simulation for Video Games'. It starts with a recent history of research on CG fluid systems, and gives five tips on better looking fire: 1. Get the colors right (e.g. radiation model), 2. Use high quality advection (not just bilinear filtering), 3. Post process with glow and motion blur. 4. Add noise. 5. Add light scattering and embers. They then go into more detail on Tip #1 looking at the physics behind the black-body radiation in a fire, and the color spectrum.
</li>
<li>Elmar Westphal of PGI/JCNS-TA Scientific IT-Systems presented 'Multiparticle Collision Dynamics on one or more GPUs', about multiparticle collision dynamics GPU code. He starts by explaining the overall algorithm, and explaining step-by-step what performs well on the GPU. Specific GPU optimisations explained include spatial subdivision lists, reordering particles in memory, hash collisions, and finally dividing workload between multiple GPU's. An interesting read.
</li>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6AlIVkZ1ZHHT7d9OIS6eRCaXtC-eBUItA7Nm1vBVJX-pdJJmTehHcqvAFBwioCHv3R3FxFbAtSVXtMmt9Hrk9rvz-eNkZVW1lSqMZ05nK6ShFOeU3EmQEYZ-uVj5WST2fOr9z/s1600/sailfish.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="128" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6AlIVkZ1ZHHT7d9OIS6eRCaXtC-eBUItA7Nm1vBVJX-pdJJmTehHcqvAFBwioCHv3R3FxFbAtSVXtMmt9Hrk9rvz-eNkZVW1lSqMZ05nK6ShFOeU3EmQEYZ-uVj5WST2fOr9z/s200/sailfish.png" /></a>
<li>Michal Januszewski from the University of Silesia in Katowice introduces '<a href="http://sailfish.us.edu.pl/">Sailfish</a>: Lattice Boltzmann Fluid Simulations with GPUs and Python'. He explains lattice boltzmann fluid simulation, and some of the different configurations of lattice connectivity and collision operators. Moves into code generation examples, and gives a brief explanation of how the GPU implementation works.
</li>
<li>Nikos Sismanis, Nikos Pitsianis and Xiaobai Sun (Aristotle University, Duke University) cover 'Efficient k-NN Search Algorithms on GPUs'. Starts with an overview of sorting and K-Nearest Neighbour (KNN) search algorithm solutions, including ANN (approximate NN) and <a href="http://lshkit.sourceforge.net/">lshkit</a> and moves into results including a comparison of <a href="http://thrust.github.com/">thrust::sort</a> with Truncated Bitonic sort. Software is available at <a href="http://autogpu.ee.auth.gr/">http://autogpu.ee.auth.gr/</a>.
</li>
<li>Thomas True of nVidia explains 'Best Practices in GPU-Based Video Processing' and covers overlapping copy-to-host and copy-to-device operations, and an example of processing bayer pattern images.
</li>
<li>Scott Rostrup, Shweta Srivastava, and Kishore Singhal from Synopsys Inc. explain 'Tree Accumulations on GPU' using parallel scatter, <a href="http://adrianboeing.blogspot.com.au/2010/08/using-parallel-reduction-to-optimize.html">parallel reduce</a> and parallel scan algorithms.
</li>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLfOEAZo9sdh6PAiV9KbiYGU6fOsZTGKWwvGJbPhx87mSxtjE8AhpIadxEXa1Py8rb287wEPXETD3GUvjtSF66QMcBjDQAhAMgzW0hcNdqxgIuHxgijBD5jS5LX4N_ofZEVfKx/s1600/mayafluid.jpg" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="138" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLfOEAZo9sdh6PAiV9KbiYGU6fOsZTGKWwvGJbPhx87mSxtjE8AhpIadxEXa1Py8rb287wEPXETD3GUvjtSF66QMcBjDQAhAMgzW0hcNdqxgIuHxgijBD5jS5LX4N_ofZEVfKx/s200/mayafluid.jpg" /></a>
<li>Wil Braithwaite from nVidia presents an interesting talk on 'Interacting with Huge Particle Simulations in Maya using the GPU'. He begins with a brief runthrough of the workings of the CUDA SPH example, and then moves onto the particle system including Maya's body forces (uniform, radial, vortex), shape representations (implicit, covex hull, signed distance fields, displacement maps), collision response, SPH equations, and finally data transfer. Ends with a brief overview of rendering the particles in screen space. Neat.
</li>
<li>David McAllister and James Bigler (nVidia) cover the OptiX internals in 'OptiX Out-of-Core and CPU Rendering' including PTX code generation and optimisation, and converting the OptiX backend to support CPU's via <a href="http://code.google.com/p/gpuocelot/">Ocelot</a> and LLVM. An interesting result, LLVM does better at optimising "megafunctions" than small functions, but not entirely unexpected given how LLVM works. The presentation finishes with an overview of paging and a tip on bounding volume heirarchies. Good to see Ocelot in the mainstream.
</li>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNeJLA0_rfpEi35xLWZWkULl0n-K-SP5iprK7guKbLraMI6SQAZaz1II2sS692G4LVm_KKXSpS4T4AtbkIB4oqin4P9DYMcCQ2BMKX89imVBzQa9sPKKnMfwe9lxO5ZwFf3bsF/s1600/stochasticrendering.jpg" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="62" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNeJLA0_rfpEi35xLWZWkULl0n-K-SP5iprK7guKbLraMI6SQAZaz1II2sS692G4LVm_KKXSpS4T4AtbkIB4oqin4P9DYMcCQ2BMKX89imVBzQa9sPKKnMfwe9lxO5ZwFf3bsF/s200/stochasticrendering.jpg" /></a>
<li>Eric Enderton and Morgan McGuire from nVidia explain 'Stochastic Rasterization' (ala 'screen door transparency' rendering) via MSAA for motion blur, depth of field and order-independent transparency, by using a geometry shader to bound the shape and motion of each tri in screen space, and setting up the MSAA masks. Nice.
</li>
<li>Cliff Woolley presents 'Profiling and Tuning OpenACC Code' (by adding pragmas to C / Fortran code, ala OpenMP) using an example of <a href="http://adrianboeing.blogspot.com.au/2010/02/solving-linear-systems.html">Jacobi iteration</a>, and there were a number of other talks on the topic.
</li>
<li>Christopher Bergström introduced '<a href="http://www.pathscale.com/ENZO">PathScale ENZO</a>' the alternative to CUDA and OpenCL.
</li>
<li>Phillip Miller from nVidia did an broad coverage of 'GPU Ray Tracing'. He starts with a myths and claimed facts on GPU raytracing, highlights some commercial GPU raytracers (and the open source <a href="http://www.luxrender.net/wiki/Luxrender_and_OpenCL">OpenCL LuxRenderer</a>) and goes into some details that are better explained in the OptiX Out-of-Core presentation.
</li>
<li>Phillip Miller follows with 'Advanced Rendering Solutions' where he takes a look at <a href="http://blog.irayrender.com/">nVidia's iray</a>, and where they believe they can introduce new capabilities for design studios and find a middle ground with re-lighting and physcially based rendering.
</li>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVopU9Zb3vTz-wYI4ereicaViFwpmMCJMq4koRMdQ2H0zRgRfdEREGZUY04xv9IifOsMy13mN-rPDTx6eRQ-cOZWGeaT0DZheB_m3NzhRyouk2r71yC7R8qHD09fkxWpyYK9jm/s1600/gpuraytrace.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="97" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVopU9Zb3vTz-wYI4ereicaViFwpmMCJMq4koRMdQ2H0zRgRfdEREGZUY04xv9IifOsMy13mN-rPDTx6eRQ-cOZWGeaT0DZheB_m3NzhRyouk2r71yC7R8qHD09fkxWpyYK9jm/s200/gpuraytrace.png" /></a>
<li>Peter Messmer presents 'CUDA Libraries and Ecosystem Overview', where he provides an overview of the linear algebra cuBLAS and cuSPARSE libraries performance, then moves to signal processing with cuFFT and NPP/VSIP for image processing, next is random numbers via cuRAND and finally ties things up with Thrust.
</li>
<li>Jeremie Papon and Alexey Abramov discuss the 'Oculus real-time modular cognitive visual system' including GPU accelerated stereo disparity matching, likelihood maps and image segmentation with a parallel metropolis algorithm.
</li>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzDDytuVo_qelB99iLkSCur8SMxMdeKZNDxAmxqaVN901Mx4elBB05Vri1NEsusbsnYS4Ltx-DEC3cozV8KFs8kzPolePPWIRnHQQmIj43kQKGKe7vrDNittaqu3BdiS0txIZ3/s1600/ocean.jpg" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="122" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzDDytuVo_qelB99iLkSCur8SMxMdeKZNDxAmxqaVN901Mx4elBB05Vri1NEsusbsnYS4Ltx-DEC3cozV8KFs8kzPolePPWIRnHQQmIj43kQKGKe7vrDNittaqu3BdiS0txIZ3/s200/ocean.jpg" /></a>
<li>Jérôme Graindorge and Julien Houssay from Alyotech present 'Real Time GPU-Based Maritime Scenes Simulation' beginning with ocean simulation and rendering from FFT based wave simulation using HF and LF heightmap components. They then cover rendering the mesh, scene illumination and tone mapping, and a sneak peak at boat interaction. The <a href="http://www.youtube.com/watch?v=sf6EVn2Zgk4">ocean simulation video</a> is neat.
</li>
<li>Dan Negrut from the Simulation-Based Engineering Lab at the University of Wisconsin–Madison gives an overview of the labs multibody dynamics work in 'From Sand Dynamics to Tank Dynamics' including friction, compliant bodies, multi-physics (fluid/solid interactions), SPH, GPU solution to the cone complementary problem, ellipsoid-ellipsoid CCD, multi-CPU simulation, and finally vehicle track simulation in sand. Wow. Code is available on the <a href="http://sbel.wisc.edu/">Simulation-Based Engineering Lab website</a>.
</li>
<li>Max Rietmann of USI Lugano looks at seismology (earthquake simulation) in 'Faster Finite Elements for Wave Propagation Codes' and describes parallising FEM methods for GPUs in SPECFEM3D.
</li>
<li> Dustin Franklin from GE introduces GE's MilSpec ruggedised Kepler-based GPU solutions and <a href="http://real-time.ccur.com/concurrent_redhawk_linux.aspx">Concurrent Redhawk6</a> in 'Sensor Processing with Rugged Kepler GPUs'. Looks at some example applications including hyperspectral imaging, mosaicing, 360 degree vision, synthetic aperture radar processing, and space-time adaptive processing for moving target identification.
</li>
<li>Graham Sanborn of FunctionBay presents 'Particle Dynamics with MBD and FEA Using CUDA' and gives a brief overview of their combined CPU/GPU multi-body FEA system and briefly describes the contact, contact force, and integration steps.
</li>
<li>Ritesh Patel and Jason Mak of University of California-Davis cover the Burrows-Wheeler Transform, Move-to-Front Transform and Huffman Coding in 'Lossless Data Compression on GPUs'. They find merge sort for BWT performs best on the GPU, explain the parallel MTF transform and Huffman in illustrative detail and tie things up with benchmarks, unfortunately GPU is 2.78x slower than CPU.
</li>
<li>Nikolai Sakharnykh and Nikolay Markovskiy from NVIDIA provide an
indepth explanation of their GPU implementation of solving <a href="http://en.wikipedia.org/wiki/Alternating_direction_implicit_method">ADI</a> with tridiagonal systems in '3D ADI Method for Fluid Simulation on Multiple GPUs'.
</li>
<li>Enrico Mastrostefano, Massimo Bernaschi, and Massimiliano Fatica investigate breadth first search in 'Large Graph on multi-GPUs' and describe how best to parallelise it across multiple GPU's by using adjacency lists and level frontiers to minimise the data exchange.
</li>
<li>Bob Zigon from Beckman Coulter presents '1024 bit Parallel Rational Arithmetic Operators for the GPU' and covers exact 1024 bit rational arithmetic (add,sub,mul,div) for the GPU. Get the <a href="http://www.blogger.com/www.zigonstuff.com/cuda">1024 bit arithmetic code here</a>.
</li>
<li>Roman Sokolov and Andrei Tchouprakov of D4D Technologies discuss 'Warped parallel nearest neighbor searches using kd-trees' where they take a SIMD style approach by grouping tree searches via voting (ballot)
</li>
<li>David Luebke from nVidia takes a broad look at CG in 'Computational Graphics: An Overview of Graphics Research @ NVIDIA'
and provides an overview of research which is featured in a number of previous talks and other GTC talks including edge aware shading, ambient occlusion via volumes and raycasting, stochastic rendering, improved image sampling and reconstruction, global illumination, and <a href="http://code.google.com/p/cudaraster/">CUDA based rasterization</a>.
</li>
<li>Johanna Beyer and Markus Hadwiger from King Abdullah University of Science and Technology discuss 'Terascale Volume Visualization in Neuroscience' where each cubic mm of the brain scanned with an electron microscope generates 800 tereabytes of data. The idea here is to leverage the virtual memory manager to do all the intelligent caching work, rather than a specialised spatial datastructure for the volume rendering.
</li>
<li>Mark Kilgard introduces the NV_path_rendering extension in 'GPU-Accelerated Path Rendering', and demonstrates using the GPU to render PDF, flash, clipart, etc. Contains some sample code.
</li>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfeO1YJAOIhL5e_Q0wSrA-VPzDnF6nkHoADS7k_tSdvYCVIYoGUe124jvoZ9ccpqo5QcGGdUrExEM382SLypakRL0xae1eQwTQGuEZDuFAAfwlE-vOW7Wwc_txq7PfP26YWuKh/s1600/gpuvelodyne.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="131" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfeO1YJAOIhL5e_Q0wSrA-VPzDnF6nkHoADS7k_tSdvYCVIYoGUe124jvoZ9ccpqo5QcGGdUrExEM382SLypakRL0xae1eQwTQGuEZDuFAAfwlE-vOW7Wwc_txq7PfP26YWuKh/s200/gpuvelodyne.png" /></a>
<li>Janusz Będkowski from the Warsaw University of Technology presented 'Parallel Computing In Mobile Robotics For RISE' a full GPGPU solution for processing mobile robot laser scan data through to navigation. Starts with data registration into a decomposed grid which is then used for scan matching with point-to-point Iterative Closest Point. Next is estimating surface normals using principle component analysis, demonstrated on velodyne datasets. This is used to achieve point-to-plane ICP and he demonstrates a 6D SLAM loop-closure. Finishes it all off with a simple gradient based GPU path planner.
</li>
</ul>
Note that in recent days more presentation PDF's have been uploaded so there is still plenty to look through, and with all the content it's difficult to look through it all - take a look yourself!
I'll leave you with a video from the GTC 2012 keynote on <a href="http://industrialarithmetic.blogspot.com/2012/05/rendering-galaxies.html">rendering colliding galaxies</a>:
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/aByz-mxOXJM" width="560"></iframe></div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com4tag:blogger.com,1999:blog-17188375.post-89807410535705017762012-05-09T22:31:00.000+08:002012-05-09T22:35:09.201+08:00Graphics links postIts been a while since I've done a link post, (almost five months) so time to catch up!
From the demoscene and WebGL world we have:
<ul>
<li><a href="http://www.webgl.com/2012/03/webgl-demo-google-search-3d-graph/">Google released WebGL 3d graphs</a>
<li><a href="http://www.youtube.com/watch?v=N22QT1OySAA&cc=1">Moleman 2 demoscene documentary trailer</a>, and the <a href="http://molemanfilm.com/about-moleman/about-moleman-1/">documentaries themselves</a>.
<li>Jochen Wilhelmy (Digi/Alcatraz) gave a talk at Revision on <a href="http://www.youtube.com/watch?v=ejlz-SVVd-U&list=PL2EEF025A89BAA0FC&index=6&feature=plpp_video">Exporting 3D scenes from Maya to WebGL using clang and llvm </a> with <a href="http://www.inka3d.com/">Inka3d</a>.
<li>The <a href="http://demoscene.ru/plasticator/Plasticator_demotool.html">Plasticator open source 64k demo tool</a>
<li>In an attempt to out-do themselves, Farbrausch released the code to <a href="https://github.com/farbrausch/fr_public/tree/master/altona_wz4">Werkkzeug4</a>
<li>Nop Jiarathanakul has a collection of source code at github on <a href="https://github.com/prutsdomj/WebGL-RayMarch/blob/master/shader/render.glsl">raymarching distance fields in WebGL</a>
<li><a href="http://sway-4k.bitsnbites.eu/index.html">Sway4k WebGL demo</a>
<li><a href="https://github.com/kusma/rocket">Rocket synchronises music and events/parmateres</a> with a number of interpolation modes.
<li><a href="http://jsdo.it/c5h12/dhSg">WebGL particle love hearts</a>, very pretty.
<li>Martti Nurmikari's <a href="http://elsewhere.stc.cx/demoprogramming/">demoscene source code for Brainstorm demos</a>
<li> Riccardo Gerosa wrote a nice post on <a href="http://www.postronic.org/h3/pid65.html">raymarching ocean waves with WebGL</a>
<li>It's worth visiting the <a href="http://www.khronos.org/webcl/">WebCL website</a> as it is being constantly updated with new examples from Samsung and Nokia.
<li>The <a href="http://dev.opera.com/articles/view/an-introduction-to-webgl/">Opera guide to WebGL</a>
<li>Iñigo Quílez has a lovely video on <a href="http://www.youtube.com/watch?v=ogFAHvYatWs&feature=player_embedded">making music with maths</a>.
</ul>
In games we have:
<ul>
<li>Fabien Sanglard posted <a href="http://fabiensanglard.net/anotherWorld_code_review/index.php">a code review of Another World</a> with a nice explanation of the VM and graphics, well worth a read!
<li>AltDev posted <a href="http://www.altdevblogaday.com/2012/02/27/altdevconf-session-videos/">AltDevConf videos</a>, including videos on PowerVR, Dynamic GI, Behaviour Trees, C#, Influence AI, and more.
<li><a href="http://jordanmechner.com/blog/2012/03/prince-of-persia-source-code-found/">Prince of Persia source code found</a>, you can <a href="https://github.com/jmechner/Prince-of-Persia-Apple-II">download the PoP code for Apple II</a>.
<li>Angry Fish Studios has a visual post on <a href="http://www.angryfishstudios.com/2011/04/adventures-in-bitmasking/">representing tilemaps efficiently with bitmasks</a>
<li>Gijs-Jan Roelofs posted code and an explanation on <a href="http://www.codepoke.net/2011/12/27/opengl-libgdx-laser-fx/">generating laser FX in OpenGL</a>
<li>Angelo Pesce has an interesting post on<a href="http://c0de517e.blogspot.com.au/2012/02/normalmaps-everywhere.html">normal maps</a>
<li>A short list of <a href="http://blog.icare3d.org/2011/06/free-3d-meshes-links.html">free 3d games models</a>
<li><a href="http://hge.relishgames.com/overview.html">Haaf's 2d Game Engine</a> has a <a href="http://hg.icculus.org/icculus/hge-unix/">Haaf's Game Engine unix port</a>.
<li><a href="http://crytek.com/cryengine/presentations">Crytek presentations</a>. Enough said.
<li><a href="http://www.insomniacgames.com/category/research-development/">Insomniac games research page</a>.
<li>The <a href="http://cdn.flamehaus.com/Valve_Handbook_LowRes.pdf">Valve handbook for new employees</a> and <a href="http://blogs.valvesoftware.com/abrash/valve-how-i-got-here-what-its-like-and-what-im-doing-2/">Michael Abrash's post on working at Valve</a>.
<li>On the lighter side, a <a href="http://www.youtube.com/watch?v=WTpldq3myV0&sns=fb">bearded dragon playing the ant crusher game</a>
</ul>
In tools and research we have:
<ul>
<li>A link collection of all the <a href="http://sigcourses.blogspot.com/">SIGGRAPH course notes</a>
<li><a href="http://imgtec.com/powervr/insider/powervr-sdk-docs.asp">PowerVR articles</a> on everything from OpenRL (open ray tracing library) to PVR texture compression and parallax bumpmapping. A mini (PowerVR) version of ATI and nVidia's article and tools collection.
<li><a href="http://www.gnuplotting.org/">GNU Plotting</a> covers tips and tricks for generating graphs and plots with GNU plot.
<li>Autodesk's free <a href="http://labs.autodesk.com/utilities/photo_scene_editor/">photofly</a> lets you create 3d models from photos.
<li><a href="http://insight3d.sourceforge.net/">Insight3D</a> is an open source image based modeling (3D models from photos) software package.
<li><a href="http://www.openframeworks.cc/gallery/">openFrameworks</a> is a cross-platform C++ toolkit for making realtime visual productions, interfacing to OpenGL, GLEW, FMOD, FreeType, Quicktime, etc.
<li><a href="http://sourceforge.net/projects/fxgen/">FXGen</a> is an open source procedural texture generator.
<li><a href="http://libnoise.sourceforge.net/docs/classnoise_1_1module_1_1Perlin.html">libnoise</a> is an open source noise (e.g. perlin) generator.
<li>Robert Schneider maintains a list of <a href="http://www.robertschneiders.de/meshgeneration/software.html">mesh generation software</a> for all your triangulation and surface, grid, tetrahedron generation needs.
<li>Cyril Crassin posted his thesis on <a href="http://blog.icare3d.org/2012/01/phd-thesis-gigavoxels.html">GigaVoxels</a>.
<li><a href="http://3d-coat.com/voxel-sculpting/">3D voxel sculpting with 3d-coat</a>.
<li><a href="http://www.pixologic.com/sculptris/">Sculptris</a> is 3D sculpting software, similar to Zbrush.
<li><a href="http://animal.sourceforge.net/">AN IMAging Library</a> supports a number of file formats, and also simple image operations such as distance transforms.
<li> Pedro Felzenszwalb has some <a href="http://www.cs.brown.edu/~pff/dt/">image distance transform code</a>
<li> Sander van Rossen's open source <a href="http://sandervanrossen.blogspot.com.au/2011/06/winforms-graph-library.html">Winforms</a> library for node/graph based user interfaces.
</ul>
And other interesting things:
<ul>
<li><a href="http://math.stackexchange.com/questions/54506/is-this-batman-equation-for-real">The batman equation</a>.
<li>An interesting <a href="http://bitcast-r.v1.sjc1.bitgravity.com/slashfilm/wp/wp-content/images/3D-Movie-Timeline-Medium.jpg">timeline of 3D in movies</a>
<li>Andy Sloane explains his <a href="http://a1k0n.net/2011/07/20/donut-math.html">Donut ascii renderer</a> and provides the code for the curious.
<li>A short youtube <a href="http://www.youtube.com/watch?&v=L_W-IXqoxHA">presentation on how your eye works and blindspots</a>
<li>Take the online <a href="http://www.xrite.com/custom_page.aspx?PageID=77&Lang=en">color challenge</a>, how well can you see hue?
</ul>
I'll leave you with the winning 64k intro from Revision:
<iframe width="560" height="315" src="http://www.youtube.com/embed/UchVsOVxYXQ" frameborder="0" allowfullscreen></iframe>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com0tag:blogger.com,1999:blog-17188375.post-90110755749766029222012-05-08T22:17:00.000+08:002012-05-08T22:18:27.275+08:00Dynamic Window Algorithm motion planning<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnuW_THrrc3aUAGEokmsS-DAp1HoPJ62BzZ1SH9KpYc5Z-8NncwMb2PyGhB_SCAzdKUURmAaRMpQskpiMh5IoJLtr1zNirLeZdjAgJU_cmQ50s8TxiAEYbkCFHFtqtsp3kYijf/s1600/dwa.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="160" width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnuW_THrrc3aUAGEokmsS-DAp1HoPJ62BzZ1SH9KpYc5Z-8NncwMb2PyGhB_SCAzdKUURmAaRMpQskpiMh5IoJLtr1zNirLeZdjAgJU_cmQ50s8TxiAEYbkCFHFtqtsp3kYijf/s200/dwa.png" /></a></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
Most robots have a set of navigation algorithms for <a href="http://en.wikipedia.org/wiki/Motion_planning">motion planning</a> that execute at different frequencies, global path planners (e.g. <a href="http://adrianboeing.blogspot.com.au/2010/08/star-pathplanning.html">A*</a>, ~0.1 Hz), mid-level path deformation (e.g. <a href="http://adrianboeing.blogspot.com.au/2012/03/elastic-band-realtime-pathfinding.html">elastic band</a>, ~5Hz), and collision / obstacle avoidance algorithms (~20Hz), which will be the last step before actuator control.<br/> For MAGIC 2010, we used the <a href="http://en.wikipedia.org/wiki/Dynamic_window_approach">Dynamic Window Approach</a>.<br/> (Note <a href="http://www.ros.org/wiki/navigation">the ROS navigation stack</a> offers the same algorithm configurations, but of-course didn't exist at the time we had to develop the <a href="http://www.wambot.org/">WAMbot</a> codebase).
There are three common approaches used for local trajectory planning:
<br />
<ul>
<li> <a href="http://www.calerga.com/products/Sysquake/robotnav.html">Potential-field</a> based, where each obstacle has an obstacle 'force field' for repelling the robot, and the goal has a attraction field. (A similar approach is '<a href="http://en.wikipedia.org/wiki/Vector_Field_Histogram">Vector-fields</a>', and Virtual Force Field)
</li>
<li> Dynamics based, where the algorithm consider the robots dynamics in calculating a solution. (e.g. <a href="http://en.wikipedia.org/wiki/Velocity_obstacle">Velocity Obstacles</a> and <a href="http://en.wikipedia.org/wiki/Dynamic_window_approach">Dynamic Window Approach</a>)
</li>
<li> Sampling based, where various collision free states are sampled and then combined. (e.g. Reachability graph, <a href="http://en.wikipedia.org/wiki/Probabilistic_roadmap">Probabilistic roadmaps</a>)
</li>
</ul>
The Dynamic Window Approach is a velocity-based local planner that calculates the optimal collision-free ('admissible') velocity for a robot required to reach its goal. It translates a cartesian goal (x,y) into a velocity (v,w) command for a mobile robot.
<br/><br/>
There are two main goals, calculate a valid velocity search space, and select the optimal velocity. The search space is constructed from the set of velocities which produce a safe trajectory (i.e. allow the robot to stop before colliding), given the set of velocities the robot can achieve in the next time slice given its dynamics ('dynamic window'). The optimal velocity is selected to maximize the robots clearance, maximize the velocity and obtain the heading closest to the goal.
<br/><br/>
Its easier to explain if we look at the code first. In pseudo-code the DWA is:
<pre>
<code>
BEGIN DWA(robotPose,robotGoal,robotModel)
desiredV = calculateV(robotPose,robotGoal)
laserscan = readScanner()
allowable_v = generateWindow(robotV, robotModel)
allowable_w = generateWindow(robotW, robotModel)
for each v in allowable_v
for each w in allowable_w
dist = find_dist(v,w,laserscan,robotModel)
breakDist = calculateBreakingDistance(v)
if (dist > breakDist) //can stop in time
heading = hDiff(robotPose,goalPose, v,w)
clearance = (dist-breakDist)/(dmax - breakDist)
cost = costFunction(heading,clearance, abs(desired_v - v))
if (cost > optimal)
best_v = v
best_w = w
optimal = cost
set robot trajectory to best_v, best_w
END
</code>
</pre>
Now to explain:
<br />
<ol>
<li>First, we can calculate the desired velocity to the goal based on our current position, and the destination. (e.g. go fast if we are far away, slow if we are close. Use <a href="http://en.wikipedia.org/wiki/Equations_of_motion">Equations of Motion</a>, see <a href="http://adrianboeing.blogspot.com.au/2010/09/circular-motion-in-2d-for-graphics-and.html">Circular motion for a mobile robot</a>).
</li>
<li>Select the allowable velocities (linear 'v', and angular 'w') given the vehicles dynamics, e.g. allowable_v ranges from the current velocity subtract the robots maximum deceleration * timeslice to the current velocity plus the robots maximum acceleration * timeslice, or more compact: [v-a.t,v+a.t], likewise for angular velocity.
</li>
<li>Search through all the allowable velocities
</li>
<li>For each velocity, determine the closest obstacle for the proposed robot velocity (i.e. collision detection along the trajectory)
</li>
<li>Determine if the distance to the closest obstacle is within the robots breaking distance. If the robot will not be able to stop in time, disregard this proposed robot velocity.
</li>
<li>Otherwise, the velocity is 'admissible', so we can now calculate the values required for the objective function. In our case, the robots heading and clearance.
</li>
<li>Calculate the 'cost' for the proposed velocity. If the cost is better than anything else so far, set this as our best option.
</li>
<li>Finally, set the robots desired trajectory to the best proposed velocity.
</li>
</ol>
If you've read all the other posts, you should now know enough to implement your own mobile robot navigation system, or at least understand a bit more about the algorithms in the ROS navigation stack.</div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com2tag:blogger.com,1999:blog-17188375.post-68106352979991075162012-04-16T22:06:00.000+08:002012-04-16T22:06:27.670+08:00Transmin Rocklogic wins WAITTA 2012 Innovation Award<div dir="ltr" style="text-align: left;" trbidi="on">Transmin's <a href="http://en.wikipedia.org/wiki/Rockbreaker">rockbreaker</a> automation product, Rocklogic, has won the 2012 WAITTA Innovation award. <br />
<a href="http://www.sciencewa.net.au/topics/industry-a-resources/item/1353-crash-avoidance-technology-used-in-rock-breaking-robots">ScienceWA covered the story</a>.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpyE92ITx2dkXfVLtiWfCqo1YWcZ0ZjYLrbEl8cTAD8dDkkf57P82uBBt_KGjxc3pCbf04Qku9dgc5XHvNBRGrV7n-I4Ie-3wZQ8unQyAZVv7gP3e0a2P92iUSgUR_2xFTG-K8/s1600/IMG_1448_Rocklogic+On+Stage-small.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="295" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpyE92ITx2dkXfVLtiWfCqo1YWcZ0ZjYLrbEl8cTAD8dDkkf57P82uBBt_KGjxc3pCbf04Qku9dgc5XHvNBRGrV7n-I4Ie-3wZQ8unQyAZVv7gP3e0a2P92iUSgUR_2xFTG-K8/s320/IMG_1448_Rocklogic+On+Stage-small.jpg" width="320" /></a></div><br />
Rocklogic features a number of world-first innovations, including tight integration with vehicle automation products allowing the rockbreaker to efficiently interleave operations with <a href="http://en.wikipedia.org/wiki/Haul_truck">haul trucks</a> or <a href="http://en.wikipedia.org/wiki/Loader_(equipment)">loaders</a>. In addition, Rocklogic is the first system for hydraulic booms to allow automated parking and deploy, as well as an active collision avoidance system.<br />
<br />
It's been the product of many hours of hard work to bring to market, so it is fantastic to receive this recognition.<br />
<br />
On to the nationals!<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/JOQL9wfvHyc" width="560"></iframe></div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com4tag:blogger.com,1999:blog-17188375.post-7616443902334193142012-04-15T23:58:00.002+08:002012-04-16T00:58:02.972+08:00Farbraush Demo ToolsFarbrausch released the <a href="https://github.com/farbrausch/fr_public">source code to all their demo tools, including kkrunchy, ktg and werkkzeug3</a>. And following the move, <a href="http://digestingduck.blogspot.com.au/2012/04/demopaja-sources.html">Moppi Productions released the Demopaja source code</a>. A good day for demoscene coders.<br />
<br />
For more info on these tools take a look at the <a href="http://moppi.inside.org/demopaja/index.html">Demopaja documentation</a> and <a href="http://support.werkkzeug.com/3te/gettingstarted.html">werkkzeug3 documentation</a>. (FYI, <a href="http://de.wikipedia.org/wiki/Werkzeug">werkkzeug is a german</a>/elite-speak word for "tool", or literally a work-thing). <a href="http://llg.cubic.org/docs/farbrauschDemos/">Dirk Jagdmann has a nice online presentation on the Farbraush/Elitegroup demotool approach</a>, and Dierk 'Chaos' Ohlerich has a number of good presentations:<br />
<ul><li><a href="http://www.scene.org/file.php?file=/resources/seminars/code/asm03_-_dierk_chaos_ohlerich_-_a_history_of_farbrausch_tools_-_xvid.avi&fileinfo">A history of Farbrausch tools</a> at Assembly 2003. (avi download)<br />
<li><a href="http://www.scene.org/file.php?file=/parties/2004/assembly04/assemblytv/seminars/a_workshop_of_.werkkzeug1.avi&fileinfo"> A workshop of .werkkzeug1</a> at Assembly 2004. (avi download)<br />
<li><a href="http://www.demoscene.tv/page.php?id=172&lang=uk&vsmaction=view_prod&id_prod=13597"> From .kkrieger to debris. Procedural Content Generation Taken to Extremes</a> NVScene 2008.<br />
<li>and <a href="http://www.scene.org/file.php?file=/parties/2004/assembly04/assemblytv/seminars/kkrieger-content_creation_in_96kb.avi">.kkrieger - Content creation in 96kb</a> presented by Thomas Mahlke and Christoph Muetze at Assembly 2004.<br />
</ul>
Over the years I've collected a number of great snippets of tips'n'tricks from various bits of FR code that have been opened (e.g. <a href="http://www.xyzw.de/c190.html">this gem by Dierk 'Chaos' Ohlerich on FPU intrinsics</a>), now you can get it all in one big collection.
As the FR release is just a big dump of all the material, here are a few relevant posts to help you decipher what is going on:
<ul><li>kkrunchy - A 64K executable compressor, see <a href="http://www.farbrausch.de/~fg/seminars/index.html"> Fabian 'ryg' Giesen's presentations on compression</a>, and more info on his <a href="http://fgiesen.wordpress.com/2011/01/24/x86-code-compression-in-kkrunchy/">blog post on how kkrunchy works</a>. For more general background, I did a post a while ago on <a href="http://adrianboeing.blogspot.com.au/2011/01/executable-compression.html">executable compression and various compression algorithms</a>.<br />
<li>V2 - A software synthesizer by <a href="http://kebby.org/">Tammo "kb" Hinrichs</a>, who used to have some great articles on his site describing how V2 worked. There are backups of his articles 'The Workings of fr-08's Sound System' here: <a href="http://in4k.untergrund.net/various%20web%20articles/fr08snd1.htm">Part 1: The Concept</a>,<a href="http://in4k.untergrund.net/various%20web%20articles/fr08snd2.htm">Part 2: Why are SMF Files Smaller?</a>, <a href="http://in4k.untergrund.net/various%20web%20articles/fr08snd3.htm">Part 3: The Basic System</a> and <a href="http://in4k.untergrund.net/various%20web%20articles/fr08snd4.htm">Part 4: Let's Talk About Synthesizers</a>. Related, is this <a href="http://zine.bitfellas.org/article.php?zine=14&id=35">article on 4klang a 4k synthesizer</a> and an <a href="http://www.adrianboeing.com/tools.html#tinysynth">article I wrote on the basics of sound/instrument generation including wave generation (sin, square, etc.), ADSR envelopes, and modulation/filtering</a>.<br />
<li>ktg - Texture generator, not aware of much content on this from FR themselves, but thats probably because there are excellent articles on this by <a href="http://conspiracy.hu/articles/1/">Ile / Aardbei 'Generating textures for 64k intros'</a> (ATG is still my favourite texture generator), and the more in-depth <a href="http://in4k.untergrund.net/html_articles/hugi%2019%20-%20pxgen.htm">'Texture Generation For 64k Intros' by Nicholas Nash (Paradox / Vivid)</a>.<br />
<li>genthree - Code for Candytron, with the beginnings of the half-edge mesh generator (see '20021211: neue meshes' in diary.txt) that is described in some recent blog posts by Fabian 'ryg' Giesen in <a href="http://fgiesen.wordpress.com/2012/02/21/half-edge-based-mesh-representations-theory/">Half edge theory</a> and <a href="http://fgiesen.wordpress.com/2012/03/24/half-edge-based-mesh-representations-practice/">practice</a>. <br />
<li>lekktor - FR's failed dead-code removal tool, described in this <a href="http://fgiesen.wordpress.com/2012/04/08/metaprogramming-for-madmen/">blog post by Fabian 'ryg' Giesen</a>.<br />
</ul>I'll leave you with some of Farbrausch and Moopi's favourite productions to inspire you to decipher the code: <iframe width="560" height="315" src="http://www.youtube.com/embed/mxfmxi-boyo" frameborder="0" allowfullscreen></iframe> <iframe width="420" height="315" src="http://www.youtube.com/embed/Lv-MqEPLYZs" frameborder="0" allowfullscreen></iframe>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com0tag:blogger.com,1999:blog-17188375.post-4449004033408741422012-04-07T22:57:00.001+08:002012-04-10T23:46:03.981+08:00Game Developers Conference 2012 - Technical summary<div dir="ltr" style="text-align: left;" trbidi="on">GDC2012 is over, and this year there are a huge number of available presentations. You can download the <a href="http://www.gdcvault.com/free/gdc-12">Game Developer Conference 2012 presentations from the GDC vault</a>, <a href="http://www.iguanademos.com/Jare/wp/?p=2583">Jare / Iguana has also kept a link collection from GDC 2012</a>. I've looked over all the technical publications available and put together this summary post. (Edit: I've updated this to cover some maths, physics, and graphics material I missed on the first pass - thanks Johan & Eric)<br />
<br />
<b>I'll start with graphics.</b><br />
<br />
Louis Bavoil / nVidia and Johan Andersson / DICE have a presentation on "Stable SSAO in Battlefield 3 with Selective Temporal Filtering", ambient occlusion is a well established technique now, but they apply a quick way to use past data and the differences in Z buffer states between frames to intelligently reuse the AO results. They also look at filters and optimising blur functions. Similar to established tricks in the realtime raytracing demoscene.<br />
<br />
Eban Cook / Naughty Dog presented "Creating Flood Effects in Uncharted 3", a technical artist look at water effects. Unfortunately realtime fluid simulation wasn't used, instead Houdini was used to pre-generate the game content. An overview of the shaders for water, water particles, froth particles, and lighting is given.<br />
<div class="separator" style="clear: both; text-align: center;"><span id="goog_1040353553"></span><span id="goog_1040353554"></span></div><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9d62HnNgyXGvv_gmyaslgn3i41E_wR93epadZomcUG63JnR3QVpS1U8H6f4Km-BIBZS0WQCPPqn3MKjp5FHOeE8AyuCrI07aYt7SMqrrJmWefaZDTJX3g-safLGviQOaqIbNy/s1600/Cupisz_Robert_Light_Probe_Interpolation2.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9d62HnNgyXGvv_gmyaslgn3i41E_wR93epadZomcUG63JnR3QVpS1U8H6f4Km-BIBZS0WQCPPqn3MKjp5FHOeE8AyuCrI07aYt7SMqrrJmWefaZDTJX3g-safLGviQOaqIbNy/s200/Cupisz_Robert_Light_Probe_Interpolation2.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Light probe interpolation</td></tr>
</tbody></table><br />
Robert Cupisz / Unity discussed light probes, "Light probe interpolation using tetrahedral tessellations", in terms of choosing the appropriate probe and weights using Delaunay Triangulation / Tetrahedrons and <a href="http://adrianboeing.blogspot.com.au/2010/01/barycentric-coordinates.html">Barycentric Coordinates</a> by dividing scenes into convex hulls. Also covers projecting onto the nearest convex hull, covers it all with a fair bit of maths, this would be of interest to physics / collision detection programmers too. There is a collection of nice links and some sample code at the end.<br />
<br />
Matthijs De Smedt / Nixxes covers "Deus Ex is in the Details" using DX11 tech. Covers AA (FXAA DLAA MLAA), SSAO, DOF (Gaussian blur), tessellation and soft-shadows.<br />
<br />
Colt McAnlis / Google investigates post-compressing DXT textures in his talk "DXT is not enough", trying to out-do zipped DXT's with delta encoding. More info at this <a href="http://www.sebbylive.com/projects/texture-compression/improving-dxt-compression-file-sizes/">blog post</a> or skip it all and download the <a href="http://code.google.com/p/crunch/">DXT CRUNCH compressor here</a>.<br />
<br />
Matt Swoboda / Sony & Fairlight delves into <a href="http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm">Signed Distance Fields</a>, a demoscene hot-topic last year, with the talk "Advanced Procedural Rendering in DirectX 11". Investigates converting polgyon mesh data and particle data into signed distance fields. Takes an in-depth look into a optimised marching cubes implementation for a fluid simulation with smooth particle hydrodynamics (SPH), and how to use signed distance fields to do ambient occlusion.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4Ajz7us5cn8ImoGeyEqvFcuelsXIg1A918MQNWLpA1mXrLNgPa0BOyfNmvt3_4aT3lxhSpeGIW1Ei9VgUr172a2dv2QkGV89iBdlPW2knlL8_MCCKTxGAngVGa7K4GIDWCrmg/s1600/GDC2012_PracticalPBRinRealtime2.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4Ajz7us5cn8ImoGeyEqvFcuelsXIg1A918MQNWLpA1mXrLNgPa0BOyfNmvt3_4aT3lxhSpeGIW1Ei9VgUr172a2dv2QkGV89iBdlPW2knlL8_MCCKTxGAngVGa7K4GIDWCrmg/s200/GDC2012_PracticalPBRinRealtime2.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Physically based rendering in realtime </td></tr>
</tbody></table><br />
Yoshiharu Gotanda / <a href="http://research.tri-ace.com/">tri-Ace research</a> makes a case for physically based rendering with a Blinn-Phong model in the presentation "Practical Physically Based Rendering in Real-time". An indepth look at the BRDF formulation they use. <br />
<br />
Wolfgang Engel, Igor Lobanchikov and Timothy Martin / Confetti present "Dynamic Global Illumination from many Lights", just a bunch of pictures, not much information.<br />
<br />
Carlos Gonzalez Ochoa / Naughty Dog covers "Water Technology of Uncharted". Covers the shader, animating the normal maps flow, and simulating the ocean water with Gerstner waves, b-spline waves, and wave particles. They go on to look at LOD with "Irregular Geometry Clipmaps" including fixing T joints, and then culling, skylights and underwater fog. Next physics, attaching objects (buoyant), and point queries. Finally, SPU optimization. Quite comprehensive.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit8Fv1MMPfM2r4LU7UTSxv45tDhjxFA2FxKdpywIMJCih8_IMoMzrgp9TaYAE6JYTxuX4MlQOeE4w1CeJdJeOZK2pHr6544WjY4GSvewx72czP9UD0tACRrksrGGS2JM_5TaJq/s1600/Gonzalez-Ochoa_Carlos_Water_Technology_Uncharted.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="94" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit8Fv1MMPfM2r4LU7UTSxv45tDhjxFA2FxKdpywIMJCih8_IMoMzrgp9TaYAE6JYTxuX4MlQOeE4w1CeJdJeOZK2pHr6544WjY4GSvewx72czP9UD0tACRrksrGGS2JM_5TaJq/s200/Gonzalez-Ochoa_Carlos_Water_Technology_Uncharted.png" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Water technology of Uncharted</td></tr>
</tbody></table><br />
Ben Hanke / SlantSixGames describes the bone code in "Rigging a Resident Evil". Transforms are described with 9 functions and processed with an optimising compiler, allowing fast retargeting of animations.<br />
<br />
Scott Kircher / Volition Inc expands on Inferred Lighting in "Lighting & Simplifying Saints Row: The Third" by looking into lighting for rain, foliage, dynamic decals, and radial ambient occlusion. Then moves on to automated mesh simplification using iterative edge contraction and takes an indepth look at selecting an appropriate error metric. <br />
<br />
Nathan Reed / Sucker Punch Productions discusses "Ambient Occlusion Fields and Decals in Infamous 2", going into depth on how to solve the artifacts of this approach.<br />
<br />
Marshall Robin / Naughty Dog covers the effects system tools in "Effects Techniques Used in Uncharted 3: Drake’s Deception". <br />
<br />
Niklas Smedberg / Epic Games looks at PowerVR GPU processing pipeline and capabilities in "Bringing AAA graphics to mobile platforms" and provides a number of tricks'n'tips on optimising the performance of the mobile GPU, and highlights the cheap operations. In short: AA (fast), hidden surface removal (fast), alpha test (slow), render targets (slow), texture lookups (slow). Takes a more detailed look at material shaders, god rays, and character shadows. All in all, pretend its ~2002, and you'll be right.<br />
<br />
Mickael Gilabert / Ubisoft and Nikolay Stefanov / Massive cover the GI system in Far Cry 3 in "Deferred Radiance Transfer Volumes". Light probes get precomputed directional radiance transfer data from a custom raytracer stored using spherical harmonics. Source code for the relighting system is presented, along with optimisations by using volume textures. <br />
<br />
John McDonald / nVidia explains CPU/GPU synching for buffers in "Don’t Throw it all Away: Efficient Buffer Management" and provides advice on buffer creation flags.<br />
<br />
Bryan Dudash / nVidia suggests using average normals to overcome tesselation issues in "My Tessellation Has Cracks!". <br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVHxFW4oDyni4m9WiVVO10vapiqnyf2tV0Na2NIFf9WHdfJU0GQFN1zX9NQTtwc5Hik4HdbepCZ33XQ9MoHghfB4vniyMr_3OnwwPL7YB7iuKzKoOfpTQZKPXeF5k7hDpcwSRY/s1600/GDC2012_Mastering_DirectX11_with_Unity.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVHxFW4oDyni4m9WiVVO10vapiqnyf2tV0Na2NIFf9WHdfJU0GQFN1zX9NQTtwc5Hik4HdbepCZ33XQ9MoHghfB4vniyMr_3OnwwPL7YB7iuKzKoOfpTQZKPXeF5k7hDpcwSRY/s200/GDC2012_Mastering_DirectX11_with_Unity.png" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Mastering DX11 with Unity</td></tr>
</tbody></table><br />
Renaldas Zioma / Unity and Simon Green / nVidia present "Mastering DirectX 11 with Unity". Starts by looking into Unity's physically based shaders (<a href="http://en.wikipedia.org/wiki/Oren%E2%80%93Nayar_reflectance_model">Oren-Nayar</a>, Cook-Torrance, and energy conservation, then blurry reflections and combining normal maps). Next up, Catmull-Clark Subdivision, tetrahedra light probes (See Robert Cupisz's talk), HBAO, APEX destruction, Hair simulation with guide hairs, Explosions using signed distance fields with noise and color gradients,and finally velocity buffer motion blur. <br />
<br />
Tobias Persson / Bitsquid discusses lighting billboards in "Practical Particle Lighting". Looks at normal generation and per-pixel lighting for billboards (including code snippets), applying shadow maps with a domain shader, and shadow casting <br />
<br />
Karl Hillesland / AMD investigates realtime <a href="http://ptex.us/">Ptex (per-face texture mapping)</a> in "Ptex and Vector Displacement in AMD Demos", and efficient retrieval from the texture atlas, including all MIPs.<br />
<br />
Jay McKee / AMD presents the "Technology Behind AMD’s<br />
Leo Demo". He details some of the code behind the forward rendering of 3000 dynamic light sources using a depth pre-pass, light culling (tile-based compute shader to output light list), and light accumulation with materials phase. Basically moves the light management code from CPU to GPU.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCKmd-nihQ-fqGxHsNfIewdonS6olHMWkWE2xKi0WDOxt8aJjDxQkoYiz6qWba5b4rcMliXnB-80Cnbn3CxOPBNfdNhTzdAs_6kE_Ijoai_wTBv9c3INakniYvRfsNnBEiPps2/s1600/GDC12_Terrain_in_Battlefield3.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="97" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCKmd-nihQ-fqGxHsNfIewdonS6olHMWkWE2xKi0WDOxt8aJjDxQkoYiz6qWba5b4rcMliXnB-80Cnbn3CxOPBNfdNhTzdAs_6kE_Ijoai_wTBv9c3INakniYvRfsNnBEiPps2/s200/GDC12_Terrain_in_Battlefield3.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Terrain in Battlefield 3</td></tr>
</tbody></table><br />
Mattias Widmark / DICE presents "Terrain in Battlefield 3: A modern, complete and scalable system". Begins with an overview of the features for the terrain system (heightfield based, procedurally generated, spline decals, decoration (tree,rock,grass), destruction, water), and presents their quadtree terrain data structure, paying particular attention to LOD. Next, CPU/GPU performance is investigated, and a clip-map based virtual texture system is presented. The large terrain data set is managed by intelligently streaming data to the required detail ('blurriness'), and co-locating data (heighfield/color/mask lumped together, next to the next level of relevant LOD data), which is also compressed (RLE/DXT1). Nodes are then prioritized based on distance, culling, and updates (e.g. destruction). Finally, mesh generation, stitching and tessellation with displacement on the GPU.<br />
<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/QxJacxI4_oE" width="560"></iframe><br />
<br />
<b>Moving on to physics.</b><br />
<br />
Erin Catto covers "Diablo 3 Ragdolls", including representing ragdoll bones, initialising ragdolls from animations, and interacting kinematic and dynamic objects. <br />
<br />
François Antoine / Epic talks about Gears of Wars 3 destruction physics in "Pushing for Large Scale Destruction FX" and suggests using particles for dust and debrie, and simplifying meshes for destruction.<br />
<br />
Stephen Frye / EA looks at ragdolls in the presentation "Tackling Physics". Highlights aspects of ragdolls that look unrealistic, and suggests adding joint limits and motorized constraints at joints to simulate muscles. Gives two approaches to solving the control problem, first using external forces, second calculating the appropriate torque from world space.<br />
<br />
Graham Rhodes / Applied Research Associates presents "Computational Geometry" where he looks at half-edge data structures for triangulating a polygon, splitting a face, splitting an edge, intersection of an edge and a plane and generating a convex hull.<br />
<br />
Richard Tonge / nVidia covers "Solving Rigid Body Contacts" and starts with a gentle introduction to rigid body state space and progressively builds a signal-block-diagram of solving a single contact restraint. Then looks at each block in the diagram and deciphers the physics behind it. He then looks at solving multiple contacts, and explains why you can't apply a linear solver to the problem (contacts break), and presents the LCP, and an alternative approach; sequential impulses. He then gives a whirlwind tour of GPU solvers.<br />
<br />
Gino van den Bergen / DTECTA presents "Collision Detection", first covering shapes, then configuration space, distance tests, Seperating Axis Tests, and takes a closer look at the GJK algorithm.<br />
<br />
Jim Van Verth / Insomniac gives a nice introduction to Navier Stokes in "Fluid Techniques", breaking down the terms for external forces, viscocity, advection and pressure visually. Then looks at three major representations for fluids, grid, particle and surface (wave) based. <br />
<br />
Takahiro Harada / AMD examines how heterogeneous compute architectures can achieve large scale dynamic simulations in "Toward A Large Scale Simulation". Begins with an overview of GPU architecture, and GPU rigid body simulation in three key phases: broad-phase, narrow-phase and constraint solving for a system of 128,000 particles and 12,000 convex bodies. He presents a design for overcoming data transfer and minimising synchronisation points whilst dividing the workload between CPU and GPU. <br />
<br />
Erwin Coumans / AMD investigates destructive physics in the aptly titled "Destruction". He begins with generating voroni diagrams for shattering geometry and boolean operations, and moves into generating collision shapes with convex decomposition and tetrahedralization. Then moves on to realtime approaches with real-time booleans and breakable constraints and finite element <br />
methods.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/gwBnToGDL6A" width="560"></iframe><br />
<br />
<b>Looking at AI.</b><br />
<br />
Bobby Anguelov / IO Interactive, Gabriel Leblanc / Eidos-Montréal and Shawn Harris / Big Huge Games present "Animation-Driven Locomotion For Smoother Navigation". They start with the standard motion graphs and transitioning/blending between animation cycles. Then take an indepth look at footstep planning (IK, Foot sliding) and come up with a system for deciding where steps should be taken to fulfil the navigation goal. They then investigate modifying navigation paths to better fit the animation cycles, and finish by looking into collision avoidance.<br />
<br />
Daniel Brewer / Digital Extremes looks at agent perception, reaction, combat chatter, buddy systems and collision avoidance using velocity space <a href="http://gamma.cs.unc.edu/ORCA/">Optimal Reciprocal Collision Avoidance</a> in "Building Better Baddies".<br />
<br />
Brian Magerko / Georgia Tech covers "How to Teach Game AI from Scratch" including competitions (Mario AI, Google Ants, Poker AI, Starcraft AI).<br />
<br />
Dave Mark / Intrinsic and Kevin Dill / Lockheed Martin investigate some examples (snipers, guards) of Utility-Based AI in "Embracing The Dark Art of Mathematical Modeling in Game AI".<br />
<br />
Kasper Fauerby / IO Interactive explains "Crowds in Hitman:Absolution" including cell maps, boids, animation and PS3 implementation details. The crowd AI uses a state machine with steering behaviours (pending walk, walk, panic), and behaviour 'zones' with information from the navigation system to select behaviours. <a href="http://grail.cs.washington.edu/projects/graph-optimal-control/">Near-optimal Character Animation with Continuous Control</a> was used for animation.<br />
<br />
Elan Ruskin / Valve looks at empowering writers and dialog in TF2, Left4Dead, etc, in "Rule Databases for Contextual Dialog and Game Logic". Begins with player triggered lines (extended by environment, memory etc.) and avoiding fill-in-the-blank dialog by using databases. Rules, queries, responses and writers tools are examined next, and ties things off with database query optimisations.<br />
<br />
Mike Robbins / Gas Powered Games examines "Neural Networks in Supreme Commander 2", with 34 inputs and 15 output actions and a single hidden layer (98 neurons), with a fitness function composed from 17 inputs trained to control combat platoons. <br />
<br />
Ben Sunshine-Hill / Havok investigates LOD for AI in "Perceptually Driven Simulation", and makes a case for using probability of noticing a difference instead of distance as a LOD measure, and presents a market-based "LOD trader" for selecting the appropriate LOD given the constraints on hand. <br />
<br />
<b>Moving along to programming and math.</b><br />
<br />
Adisak Pochanayon / Netherrealm covers debugging and timing issues in "Runtime CPU Spike Detection using Manual and Compiler-Automated Instrumentation". First up, manual instrumentation and wrapper functions, Then <a href="http://research.microsoft.com/en-us/projects/detours/">detours</a>, and automated instrumentation (compiler flags) with an indepth look at the 360. Finally, profiling with threshold functions.<br />
<br />
Pete Isensee / Microsoft details how rvalue in C++11 (T&&) can eliminate temporaries in "Faster C++: Move Construction and Perfect Forwarding".<br />
<br />
Scott Selfon / Microsoft reviews audio compression technologies in "The State of Ady0 Cmprshn", starting with time-domain compression with PCM (raw, A-Law, U-Law, ADPCM), then frequency-domain compression and discusses the artifacts generated by both, then evaluates the performance of different codecs. <br />
<br />
Robin Green / Microsoft and Manny Ko / Dreamworks present "Frames, Quadratures and Global Illumination: New Math for Games". Beings with a review of spherical harmonics, Haar wavelets, and Radial basis functions. Builds up to 'Spherical Needlet' wavelets, by exploring different basis functions ('frames')<br />
<br />
Gino van den Bergen / DTECTA presents dual-numbers in "Math for Game Programmers: Dual Numbers", beginning with a look at complex numbers. Automatic differentiation with dual numbers is then described, with code, and examined in curve tangents, directed line geometry (triangle/ray intersections, plucker coordinates, angles), and rigid body transforms/skinning (dual quaternions).<br />
<br />
Jim Van Verth / Insomniac explains rotation formats in "Understanding Rotations", including angle (2d) Euler angles, Axis-angle, Matrix (2d/3d), complex (2d) and Quaternion (3d). Interpolation is considered for each case (including slerp).<br />
<br />
Eric Lengyel / Terathon presents <a href="http://en.wikipedia.org/wiki/Exterior_algebra">exterior (Grassmann) algebra</a> in "Fundamentals of Grassmann Algebra". This includes the wedge product, bivectors, trivectors and multivectors. Moves on to cross product transforms, dual-basis 'anti-vectors', regressive 'antiwedge' product, and demonstrates how these can be used in homogeneous and plucker coordinate systems. This leads on to basic intersections (line, plane, point) and distances (point plane, two lines) and finally ray-triangle intersection using bivectors to avoid barycentric coordinates.<br />
<br />
Squirrel Eiserloh / TrueThought presents "Interpolation and Splines". Takes us back to basics by looking at averaging and blending, and moves onto interpolation. Begins with quadratic and cubic Bézier curves, then moves into splines and discusses continuity. Cubic Hermite splines are up next, and how to convert between Bézier and Hermite, then Catmull-Rom splines and finishes with the more general Caridnal splines. <br />
<br />
John O’Brien / Insomniac covers "Math for Gameplay / AI". Starts with object intersection tests (sphere-sphere, sphere-plane, AABB-AABB, AABB-ray, capsules-capsule, capsule-ray) and projecting onto a plane in a gun turrent AI example. Next up, Bayes' Theorem and conditional probability, followed by fuzzy logic.<br />
<br />
<b>The Web up next</b><br />
<br />
Corey Clark and Daniel Montgomery present "Building a Multi-threaded Web-Based Game Engine" covering both client side (WebGL, WebSockets, etc) and server side (NodeJS, Hosting, etc).<br />
<br />
Michael Weilbacher / Microsoft looks at server issues in "Dedicated Servers in Gears of War 3".<br />
<br />
Michael Goddard "Developing a Javascript Game Engine"<br />
using component based architecture. Takes an indepth look at events/promises and loading content.<br />
<br />
Mike Dailly / YoYo investigates packing textures and command list execution for improving performance in "The Voodoo Art of Dynamic WebGL".<br />
<br />
Marc O’Morain / Swrve takes a look at a number of issues (including iOS multitouch) in "Building Browser Based Games Using HTML5".<br />
<br />
<b>And rounding up everything else</b><br />
<br />
Caruso Daniel explains the "Forza Motorsport Pipeline". Importing assets into the game.<br />
<br />
GuayvJean-Francois investigates sound diffraction and absorption in "Real-time sound propagation".<br />
<br />
Mike Lewis presents the challenges of multithreading for MMOs "Managing the Masses".<br />
<br />
Sean Ahern looks at building better game engine tools in "It stinks and I don't like it"<br />
<br />
Clara Fernández-Vara, Jesper Juul, and Noah Wardrip-Fruin make a case that "Game Education Needs Game History"<br />
<br />
Chris Jurney presents his idea "Motion Blobs", a fast and crude kinect data "gesture" system, essentially an extension of the typical 2D approach to 3D. Steps are to calculate motion via background subtraction, filtering (open/close), labeling, and then correlation.<br />
<br />
Alexander Lucas explains automated testing at Bioware in "The Automation Trap And How Bioware Engineers Quality"<br />
<br />
Alex Mejia looks at camera movement in "Saints Row : The Third real time capture tools".<br />
<br />
Scott Philips presents "Designing Over the Top SAINTS ROW: THE THIRD Postmortem", and highlights the importance of pre-visualization and playtesting.<br />
<br />
Ron Pieket / Insomniac looks at eliminating downtime in "Developing Imperfect Software" via a 'Structured Binary' approach to building engine data by taking advantage of a Data Definition Language.<br />
<br />
Benson Russell takes a look at Naughty Dog's approach to polish in "The last 10, going from good to awesome", in essence longer alpha and beta tests.<br />
<br />
Luke Muscat takes a look at the lessons learnt while updating Fruit Ninja in "Iterating Design And Fighting Fires: Updating Fruit Ninja And Jetpack Joyride"<br />
<br />
Tatyana Dyshlova talks about managing 300+ artists working on 500 car models in "Racing to the Finish"<br />
<br />
<b>Summary</b><br />
Quite a collection this year, but overall seems to be less exciting content than previous years. For graphics, it seems that signed distance fields and physically based rendering is the new theme, AI is still playing catchup and character animation cycles are still a hot topic, following that theme, physics is also looking at characters and ragdolls, with destruction being the hot topic, and the web is focusing on WebGL. </div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com1tag:blogger.com,1999:blog-17188375.post-34640886491447074302012-03-29T23:40:00.000+08:002012-03-29T23:40:36.703+08:00Elastic Band - Realtime pathfinding deformation<div dir="ltr" style="text-align: left;" trbidi="on">I've covered global path planners before including <a href="http://adrianboeing.blogspot.com.au/2010/08/star-pathplanning.html">A* path planning</a> and <a href="http://adrianboeing.blogspot.com.au/2010/08/dijkstra.html">Dijkstra</a>. These path planners will give you a result, but if something alters the desired path (such as an object crosses the path, which you need to avoid) you need to recompute the whole path again. Algorithms such as <a href="http://en.wikipedia.org/wiki/D*#D.2A_Lite">D* lite</a> allow efficient re-computation. However, the elastic band method allows the existing path to be used, and just adjusted to handle deformations. Or, more formally, elastic band path planning enables realtime modifications to a precomputed path that consider additional obstacles (or cost functions) not considered during the original paths computation. <br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUS1_gtCjgJU6y0P6rzoHvSYQTWniJz85H0qSjOgHpSlm703YHBIT26EmDsd8YxEyB3otwGJ-P_q141sSYULy5veO0foPRM-zqz0IX4Q-bLi_gyvJl3BueqTJk7O0ZlsFmKK1H/s1600/12.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUS1_gtCjgJU6y0P6rzoHvSYQTWniJz85H0qSjOgHpSlm703YHBIT26EmDsd8YxEyB3otwGJ-P_q141sSYULy5veO0foPRM-zqz0IX4Q-bLi_gyvJl3BueqTJk7O0ZlsFmKK1H/s320/12.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Elastic band - Global path in blue, bubbles as colored circles,<br />
and the red path is the one generated by the elastic band algorithm.</td></tr>
</tbody></table><br />
The easiest way to describe it in games terminology is to have an entire path turned into particles that follow boid-like (flocking) rules. The best part, is that since it is essentially based on particles, means that you can re-use code from a particle system or physics engine you may have available. If your from the games background, you can use player/entity interchangeably with my use of the word 'robot'.<br />
<br />
The 'elastic band' is a created from a set of 'bubbles'. A bubble contains a radius, a position, the coordinates of the closest obstacle to the bubble and a velocity.<br />
<br />
The way it works is that an 'elastic band' is initialised with the partial path from the global path planner. The centre of each bubble is assigned to a point along the global path. (For optimisation purposes, a sparse version of the global path is typically used). <br />
<br />
If the elastic band does not contain the robots current position, then the robots present position is inserted, provided it will align with the desired path. <br />
<br />
For every bubble in the path we determine the total external and internal forces acting on it, and apply them and create/remove bubbles as necessary.<br />
This is done by:<br />
<ul><li>Creating a new bubble if the distance to the next bubble is greater than a predefined constant. In effect this constant determines the discretization of the path.<br />
</li>
<li>Determining the closest obstacle to the bubble and calculating the radius. This is achieved by using a spatial partitioning algorithm to determine the closest obstacle by its Euclidean distance. The radius is assigned to this distance, limited to a maximum.<br />
</li>
<li>Calculating the external repulsion force from the closest obstacle. The magnitude of this force is scaled to be a function of its distance limited by an upper bound, such that closer obstacles exert a greater pressure. (i.e. (max - r) / r )<br />
</li>
<li>Calculating the internal cohesion force from the previous and following bubbles in the path. This is simply the sum of the normalised vectors to the previous and following bubbles centres.<br />
</li>
<li>Updating the bubble state by applying the forces and velocities to calculate the new bubble position. I used a higher order integrator with hand-tuned dampening terms. In addition, a low pass filter is applied to the position update to reduce the influence of the forces.<br />
</li>
</ul>Finally, bubbles are removed if they are too close to each other. The entire band is then checked for continuity, ensuring that each bubble is greater than the robots size. If this criteria is not fulfilled the robot is halted, as it will not be able to get to its destination without colliding. <br />
<br />
The bubble that is a set distance infront of the robot is selected to generate the next trajectory input. The angle between the current bubble and the next bubble is calculated and used to modulate the vehicles desired velocity. This causes the vehicle to reduce its speed when it approaches a sharp turn. <br />
<br />
In pseudo-code the algorithm is as follows: <br />
<code><pre>eb[0] = path.start
i = 0
for each point along path
if dist(eb[i],point)> c
eb.add(point)
while robot not at path.goal
for each bubble b in eb
f_e = b.pos – closestObstacle(b)
f_i = (b.pos – eb[b.i – 1].pos) + (b.pos – eb[b.i + 1].pos)
b.integrate(f_e+f_i,b.vel) //update velocity from forces
b.dampen(b.vel) //filter state
b.integrate(b.vel,b.pos)
dist = abs(b.pos – eb[b.i + 1].pos)
if dist > c
eb.add(midpoint(b,eb[b.i+1]))
if dist < c_min
eb.remove(b)
tmp_goal = eb.closestbubble(path.robot + lookahead) //set goal from robot position
set robot trajectory to tmp_goal
</pre>
</code>
Thanks to Sushil who did all the hard work in implementing this for MAGIC2010.</div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com1tag:blogger.com,1999:blog-17188375.post-84039557734504444482012-03-20T22:26:00.004+08:002012-03-29T23:12:05.750+08:00Collision Avoidance in Mining Conference<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDfG6srC7ohx67JT2u91ZJ2U7JRq2QaWwl4YTtSlMJW2AEJqZH2t6Q0TE6sxIyDLPAfBqjmQBQWA0U0lO0gcE1ZBxLv7iQno3fDyypFZztUhK7A0T81vjj8iR9cLFpNdE9G4p2/s1600/Screen+shot+2012-03-29+at+10.34.57+PM.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDfG6srC7ohx67JT2u91ZJ2U7JRq2QaWwl4YTtSlMJW2AEJqZH2t6Q0TE6sxIyDLPAfBqjmQBQWA0U0lO0gcE1ZBxLv7iQno3fDyypFZztUhK7A0T81vjj8iR9cLFpNdE9G4p2/s320/Screen+shot+2012-03-29+at+10.34.57+PM.png" width="320" /></a></div>I gave a presentation on the <a href="http://rocklogic.com.au/">Transmin Rocklogic rockbreaker collision avoidance system</a> at the <a href="http://www.iir.com.au/conferences/mining-resources/metals-minerals/collision-avoidance-in-mining">3rd Collision Avoidance in Mining Conference</a> held in Fremantle. <br />
<br />
The speakers were:<br />
<ul><li>Simon Ridge - Department of Mines and Petroleum: provided an overview of regulation and risk management in WA.<br />
</li>
<li>Stewart Bell - Department of Employment, Economic Development and Innovation: provided an overview of collision incidents in Queensland, and made an <a href="http://mines.industry.qld.gov.au/673.htm">announcement indicating Queensland may make collision avoidance technology mandatory</a>.<br />
</li>
<li>David Quayle - Industrea: discussed systems integration issues in mining, and contrasted it with aerospace and the automotive industry.<br />
</li>
<li>Patrick Glynn - CSIRO: provided an overview of the development of collision avoidance technology in mining, and discussed CSIRO's old <a href="http://research.ict.csiro.au/research/labs/autonomous-systems/field-robotics/mining-robotics/load-haul-dump-lhd-automation">LHD automation project</a>. <br />
</li>
<li>Luke Schelosky - SafeMine: discussed <a href="http://www.safe-mine.com/">SafeMine</a>'s proximity / collision detection products.<br />
</li>
<li>Marcus Punch: discussed functional safety standards (e.g. SIL), the standards that the industry is moving towards, and the "Proven-In-Use" clause for the latest 61508.2 standard. <br />
</li>
<li>Matthew Watson - Rio Tinto Iron Ore: discussed issues in rolling out technology and how it affects operators ('users'), managers, and maintenance personal.<br />
</li>
<li>Rhys Sherborne - APS: gave an overview of <a href="http://www.apsmining.com/">Automated Positioning System</a> machine guidance products.<br />
</li>
<li>Harland Attwood - Javpac: introduced a new physical barrier product designed to separate heavy vehicle traffic.<br />
</li>
<li>Peter Woodford - LSM: discussed cameras and operator visibility.<br />
</li>
<li>Elliot Duff - CSIRO: gave an overview of projects at the <a href="http://www.ict.csiro.au/page.php?cid=8">Autonomous Systems Laboratory</a>.<br />
</li>
<li>Nicky Guenther - SICK: presented a new range of SICK products for proximity detection and provided a comparison with RADAR products.<br />
</li>
<li>Adrian Boeing - Transmin: Rocklogic collision avoidance system, and installation case study.<br />
</li>
<li>Robin Burgess-Limerick - UQ: Operator cognitive load.<br />
</li>
<li>Natalie Tindale - MB solutions: Operator fatigue.<br />
</li>
</ul>For me the highlight was CSIRO's <a href="http://research.ict.csiro.au/research/labs/autonomous-systems/field-robotics/field-robotics">Autonomous Systems Labs robotics</a> and SLAM work, particularly on the North Parkes mine site. Since they don't have a YouTube video of their work on the <a href="http://www.youtube.com/user/AutonomousSystemsLab">ASL channel</a>, here is something similar: <br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/8HdgliagAds" width="420"></iframe></div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com0tag:blogger.com,1999:blog-17188375.post-19002497474382937252012-02-22T22:34:00.004+08:002012-03-29T22:26:28.429+08:00Blender 2.49 and intersecting objects<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB_BMRM9iQxjZ7HxvqkR0X6_NkaKmH1hDjaKfSdm-wFvkrXKxNGfOhFNktei7rsYFHlI4jBAEKGRd5VMhx1dTxesU8HPW2xMVNhkQobfjRbGn_VIYpezVA0vBZa5GJTTXSNhcz/s1600/1-intersect.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB_BMRM9iQxjZ7HxvqkR0X6_NkaKmH1hDjaKfSdm-wFvkrXKxNGfOhFNktei7rsYFHlI4jBAEKGRd5VMhx1dTxesU8HPW2xMVNhkQobfjRbGn_VIYpezVA0vBZa5GJTTXSNhcz/s200/1-intersect.png" width="200" /></a></div>Blender is a great tool for the price (free), but it is certainly very difficult to use, especially in an engineering context. So here are a few scripts and techniques to make life a little easier.<br />
<br />
First, boolean operations are useful in a number of situations, such as welding or splitting faces based on intersecting objects. An example:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyFLzbai_3-sMM0eCo8rsvl95RikEG5BqZtcmpW8b5SemJI41x08lk9BrctsKlfaJJiMJbODEbCnnudoVcqZpR3Edm2yGlXecW3V-V52qaUXcLpPcWQ6SMh0eFjoNJuOtmml4B/s1600/2-join2.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyFLzbai_3-sMM0eCo8rsvl95RikEG5BqZtcmpW8b5SemJI41x08lk9BrctsKlfaJJiMJbODEbCnnudoVcqZpR3Edm2yGlXecW3V-V52qaUXcLpPcWQ6SMh0eFjoNJuOtmml4B/s200/2-join2.png" width="188" /></a></div><ul><li> Create two planes (create plane, create another plane and rotate/translate it so they intersect (g-grab to translate, r-to rotate))<br />
</li>
<li>Select both objects (note: if you want to split a single mesh, switch to edit mode, select one set of the faces you want to intersect, and split the mesh ('p' to separate), then later you can re-join objects into a single mesh with 'ctrl j')<br />
</li>
<li> Select the boolean operations (press w) and choose 'intersect' this will create a third object. <br />
</li>
</ul><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKw4P0w4H_bEyVFGleazwd4vx5K7mtU7452w9mT9mTWPLr55dLu1x_nmkzgWtw8TtPEx4su4r1SUu7ignpeNbquVD9RYm3kv0K_gzP__hurqBlNwxcQLUkHXxyW3_bgZqzq85l/s1600/4-final.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKw4P0w4H_bEyVFGleazwd4vx5K7mtU7452w9mT9mTWPLr55dLu1x_nmkzgWtw8TtPEx4su4r1SUu7ignpeNbquVD9RYm3kv0K_gzP__hurqBlNwxcQLUkHXxyW3_bgZqzq85l/s200/4-final.png" width="180" /></a></div>You may want this intersection point in the original two planes. If so, select the intersection and duplicate it (shift-d) chose the intersection, and join it to one of the planes, then choose the duplicate intersection and join it to the other plane. If you want one object with both these planes as one mesh, then just join (ctrl j) all objects. Edit the mesh, and create new faces (use f) by selecting the appropriate vertices.<br />
<div class="separator" style="clear: both; text-align: center;"></div><br />
And thats it. (Note: I triangulated my mesh.)<br />
<br />
Now for some scripts: <br />
<ul><li> In Blender 2.4x, it is difficult to specify an object location, or to move a group of objects (without parenting/un-parenting them all the time, or suffering 'multi-user' problems). I created a <a href="http://snippets.dzone.com/posts/show/15097">Blender script to translate and resize a group of objects mesh data</a> that speeds up the process.<br />
</li>
<li> Understanding what is happening with your data can be troublesome, so here is a small <a href="http://snippets.dzone.com/posts/show/15099">script that prints the location data for a selected vertex</a>.<br />
</li>
</ul></div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com1tag:blogger.com,1999:blog-17188375.post-75635483984350641002012-01-12T22:22:00.000+08:002012-01-12T22:22:24.559+08:00Kinect viewer with HTML5 canvas<div dir="ltr" style="text-align: left;" trbidi="on">I wanted to create a web-based Kinect viewer that would work on multiple platforms, including Android mobile phones and iPhones. To this end, I created a HTML5 canvas particle viewer for Kinect data using my very limited javascript knowledge and a lot of <a href="http://mrdoob.com/">Mr. doob's</a> knowledge. <br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8NFTadyDVGBLax8XL8O1eB2Anw1FJCtJs9EZitV8FFTQdSxEKiCv_BSGfUtsMnk0MUCcMIA3BaAo5Pe6eIjxmLCgaF918z4Aw71WTSmaIDwP9GXOvTkyoqM2u4hNRNxOjWq60/s1600/kinectparticles.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8NFTadyDVGBLax8XL8O1eB2Anw1FJCtJs9EZitV8FFTQdSxEKiCv_BSGfUtsMnk0MUCcMIA3BaAo5Pe6eIjxmLCgaF918z4Aw71WTSmaIDwP9GXOvTkyoqM2u4hNRNxOjWq60/s200/kinectparticles.png" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Kinect HTML5 particle image</td></tr>
</tbody></table><br />
Take a look at the <a href="http://www.adrianboeing.com/demoscene/test/particleimage/canvas_particles_image.html">HTML5 Kinect particle image viewer</a>.<br />
<br />
Using libfreenect I captured the depth and color data, used Imagemagik and an Automator script to process and stich the images, and <a href="http://threejs.org/">threejs</a> to render.<br />
<br />
You can extract data from an image by rendering it to a hidden canvas element, and then reading the canvas image data. To avoid errors, the image data should only be read after the full image has been loaded, as per the callback function in loadTexture.<br />
<code><br />
function getImageData( image ) {<br />
var canvas = document.createElement( 'canvas' );<br />
canvas.width = image.width;<br />
canvas.height = image.height;<br />
var context = canvas.getContext( '2d' );<br />
context.drawImage( image, 0, 0 );<br />
return context.getImageData( 0, 0, image.width, image.height );<br />
}<br />
<br />
function getPixel( imagedata, x, y ) {<br />
var position = ( x + imagedata.width * y ) * 4, data = imagedata.data;<br />
return { r: data[ position ], g: data[ position + 1 ], b: data[ position + 2 ], a: data[ position + 3 ] };<br />
}<br />
<br />
var texture, imagedata;<br />
texture = THREE.ImageUtils.loadTexture( "textures/sprites/spark1.png", new THREE.UVMapping(), function ( event ) {<br />
imagedata = getImageData( texture.image );<br />
} );<br />
</code><br />
<br />
To run the system locally, avoiding some of Chromes very annoying security settings, you can just use python to run a simple webserver:<br />
<code><br />
python -m SimpleHTTPServer<br />
</code><br />
<br />
I recorded a short data sequence and rendered to sprites to create this final 3d home move with the Kinect (too slow for my phone to render). I believe this is the first web-based kinect video ever made, youtube3d anyone?<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://www.adrianboeing.com/demoscene/test/particleimage/canvas_particles_kinect_sprite_anim.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZhoValFB_iSrFThMYrBBxYZjxO78KWRyZft_u-coZOvjmT_44OFhe9OmMry2mwHkJt7lZTWEayR4YbWCTLMg87Wdz0PopZ4BrrzMCS6VyH7B6j23GPcKsSs7g4yjUJa59yohF/s320/kinectsprite.png" width="320" /></a></div><br />
<br />
<a href="http://www.adrianboeing.com/demoscene/test/particleimage/canvas_particles_kinect_sprite_anim.html">Animated 3D kinect data with HTML sprites</a><br />
<br />
Next time, I might try WebGL...</div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com1tag:blogger.com,1999:blog-17188375.post-92107993391439581782012-01-11T21:25:00.000+08:002012-01-11T21:25:24.634+08:002011 Wrapup<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgodZEhqjnxFd6IMA2sw8KpCokI1mR7TD_Y_kIKMDCHr1UWDqSGHaOW2AowTrHloGzvQN6LZr9L6h9EhCHV5EGdReDML7jq8t37ubzq5EPFPvaXxBwkRc0M4fSmeUQDEGf0vQhS/s1600/Fire-Works-Happy-New-Year-2012-small.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgodZEhqjnxFd6IMA2sw8KpCokI1mR7TD_Y_kIKMDCHr1UWDqSGHaOW2AowTrHloGzvQN6LZr9L6h9EhCHV5EGdReDML7jq8t37ubzq5EPFPvaXxBwkRc0M4fSmeUQDEGf0vQhS/s200/Fire-Works-Happy-New-Year-2012-small.jpg" width="200" /></a></div>Looking back, 2011 was certainly a quieter year than 2010. Personal life got busy in the later half of the year, so less was posted. My job also took a less technical turn as I moved away from software development.<br />
By far my most popular posts concerned my analysis of some popular demo scene effects and WebGL:<br />
<ul><li>The most popular posts were on <a href="http://adrianboeing.blogspot.com/2011/02/ripple-effect-in-webgl.html">Ripple effect</a>, <a href="http://adrianboeing.blogspot.com/2011/01/raycasting-two-planes-in-webgl.html">Raycasting planes</a>, <a href="http://adrianboeing.blogspot.com/2011/01/twist-effect-in-webgl.html">Twist effect</a>, <a href="http://adrianboeing.blogspot.com/search?q=effect">many more demoscene effects explained</a>.<br />
</li>
<li><a href="http://pouet.net/prod.php?which=57739">The self-explanatory demo</a>, was well received, scratching into the top of the month for pouet for a while, and coming 3rd at the Mozzila demoparty. This animates the explanation behind a number of the demo effects.<br />
</li>
<li><a href="http://adrianboeing.blogspot.com/2011/05/slides-on-demoscene-and-webgl-demo.html">Slides</a> on a guest lecture that cover some of the details of these effects again.<br />
</li>
</ul>Otherwise, a survey / summary post on <a href="http://adrianboeing.blogspot.com/2011/01/executable-compression.html">exe compression for multiple platforms</a> was well read, and my <a href="http://adrianboeing.blogspot.com/2011/09/civilization-5-casualfast-game-mod-for.html">Civ 5 casual game mod</a> proved popular too.<br />
<br />
I will try to post a bit more about work and the mining industry, not because these are popular posts, but because there is so little information about this field on the web. I hope to post more about robotics and graphics (raytracing), and will try to open source and post about some of my past work.</div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com0tag:blogger.com,1999:blog-17188375.post-63737085210302937932011-12-12T22:11:00.000+08:002011-12-12T22:11:39.796+08:00GPU and Graphics catchup post<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on">It has been a long while since I've done a graphics related post, so here is a bit of a backlog from the last few months of graphics and GPU links:<br />
<ul><li><a href="https://github.com/TTimo/doom3.gpl">Doom 3 source code</a><br />
</li>
<li><a href="http://kevinkarsch.com/publications/sa11.html">Kevin Karsh's work on rendering objects into photos</a> is definitely worth a look if you haven't already seen it.<br />
</li>
<li><a href="http://www.webupd8.org/2011/09/gtk-32-released-with-html5-allows.html">GTK now supports a HTML5 target</a>.<br />
</li>
<li><a href="http://imgtec.com/powervr/insider/powervr-sdk-docs.asp">PowerVR</a> have a great collection of articles, a nice resource to add alongside nVidia and AMD's developer zones.</li>
<li><a href="http://www.khronos.org/news/press/khronos-releases-opencl-1.2-specification">OpenCL 1.2</a> was released.</li>
<li><a href="http://code.google.com/p/sfera/">Sfera</a> an open source OpenCL realtime pathtracing game</li>
<li>A great <a href="http://www.youtube.com/watch_popup?v=XVTga6GmbGw&vq=medium#t=74">projection onto a building facade in Berlin</a>.<br />
</li>
<li><a href="http://www.streamcomputing.eu/blog/2011-09-28/the-current-state-of-webcl/">WebCL</a> has been making good progress. <a href="http://www.geeks3d.com/20110822/webcl-nokia-extension-for-firefox-6-and-kernel-toy/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+TheGeeksOf3d+%28The+Geeks+Of+3D%29">Nokia released a WebCL plugin</a>.<br />
</li>
<li>Epic Games posted a nice long <a href="http://www.youtube.com/watch?v=C08yJ8_R3j4">video of the work involved in creating content for Gears of War</a>.<br />
</li>
<li>Fixstars released a short <a href="http://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/contents.html">OpenCL programming book</a></li>
<li><a href="http://www.cs.cmu.edu/afs/cs/academic/class/15869-f11/www/">Content for CMU Graphics and Imaging Architectures</a> have been released.</li>
<li><a href="http://thejit.org/">Javascript info toolkit</a> makes awesome visualizations of charts, graphs, and trees.</li>
<li>Progress is being made to run <a href="http://www.eetimes.com/electronics-news/4230602/OpenCL-gets-upgrade--Altera-tips-FPGA-tool?pageNumber=1">OpenCL on a FPGA by Altera</a>.</li>
<li><a href="http://www.xnormal.net/1.aspx">Xnormal</a> creates normal maps, and now supports OpenRL.</li>
<li>A nice <a href="http://lodev.org/cgtutor/randomnoise.html">tutorial on generating texture maps with noise</a> using shaders.</li>
<li><a href="http://www.disneyanimation.com/technology/opensource.html">Disney's open source</a> collection has been updated - uv-less texture mapping, scripting/server tools, particle file formats, and the Dynamica Maya plug-in for the Bullet physics engine.</li>
<li><a href="http://gpgpu.org/2011/12/07/intel-spmd-compiler-version-1-1-released">Intel SPMD v1.1</a> parallel compiler was released.</li>
<li>Intel's <a href="http://software.intel.com/en-us/articles/opencl-sdk/">OpenCL SDK</a> has seen a number of updates.</li>
<li><a href="http://software.intel.com/en-us/articles/intel-cilk-plus/">Intel Cilk</a> is a new parallel extension for C++.<br />
</li>
<li><a href="http://code.google.com/p/cudpp/">Cuda performance primitives</a> has reached release 2.0<br />
</li>
<li><a href="http://www.streamcomputing.eu/blog/2011-08-03/aparapi-is-opencl-in-java/">Adarapi</a> lets you write OpenCL with Java.<br />
</li>
<li>A nice <a href="http://matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp">description of the GIF file format</a></li>
<li>A new release of <a href="http://www.ctrl-alt-test.fr/?p=358">ShaderMinifier</a> to help reduce your shader file size.</li>
<li><a href="http://code.google.com/p/glintercept/">GL intercept</a> is a nifty tool that logs all your applications OpenGL calls. <br />
</li>
<li><a href="http://parse.ele.tue.nl/publications?tag=GPU">PARSE research group</a> have a number of interesting GPU image processing projects, including Hough Transforms and Speed Sign Detection. <br />
</li>
<li><a href="http://tideart.com/">TideArt</a> has interesting graphics related articles and tutorials.</li>
</ul></div>Finally, I'll leave you with a fantastic <a href="http://pouet.net/prod.php?which=57449">64kb demo by Fairlight and Alcatraz</a> that placed 2nd at Assembly 2011. <iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/69Xjc7eklxE" width="560"></iframe> </div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com1tag:blogger.com,1999:blog-17188375.post-8604295149970922152011-11-29T22:14:00.002+08:002012-01-12T21:52:03.334+08:00Remotely Operated Mining<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy6LNOlGmPqu5d1TLGOZQLnJoRausUzLT5pdBPWVygEk6FgXNvIR7gZK9s_xuHEnZMU0ZAkuD5FEPbU9GtT6jWAp0kVpwJF4Bb7Reg-MH83LBApQWL1Lco5FLNKIiVbxawW4UR/s1600/image_mini.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy6LNOlGmPqu5d1TLGOZQLnJoRausUzLT5pdBPWVygEk6FgXNvIR7gZK9s_xuHEnZMU0ZAkuD5FEPbU9GtT6jWAp0kVpwJF4Bb7Reg-MH83LBApQWL1Lco5FLNKIiVbxawW4UR/s1600/image_mini.jpeg" /></a></div>I gave a presentation on the <a href="http://www.transmin.com.au/">Transmin</a> <a href="http://www.rocklogic.com.au/">Rocklogic rock breaker automation system</a> at the <a href="http://www.informa.com.au/conferences/mining/operations/remotely-operated-mining-projects">Remotely Operated Mining Projects</a> conference. All in all it was a fairly decent conference focused around the theme of remote operations for mining, focusing predominantly on integrated planning, remote operation technology, and the design and construction of remote operation centers.<br />
<br />
Talks were given by:<br />
<ul><li> Greg Lilleyman, Rio Tinto - an overview of remote operations<br />
</li>
<li> Matthew Michalewicz, SolveIT - integrated planning for mature organizations, interesting overview of some of the wine industry supply chain issues<br />
</li>
<li>Patrick Warrand, Wesfarmers Premier Coal - a open overview of issues for 'small' mining operations (Note: Small is of course a relative term compared to the massive operations of BHP and Rio)<br />
</li>
<li>Jeremy Newman, Schneider Electric - a suppliers point of view to automation<br />
</li>
<li>Jock Cunningham, CSIRO - an overview of CSIRO activity in mining, and their SLAM technology. (<a href="http://www.wambot.org/">WAMBOT</a> was multi-agent SLAM, CSIRO does automotive SLAM and a novel handheld indoor SLAM 'Zebedee')<br />
</li>
<li>Brendon, Leica Geosystems - an overview of <a href="http://www.autonomoussolutions.com/">Autonomous Solutions Inc</a> (they do lots of autonomous systems for military and agriculture), and <a href="http://www.locatacorp.com/">Locata</a> - a GPS alternative<br />
</li>
<li>David Beck, <a href="http://www.beckengineering.com.au/">Beck Engineering</a> - a case study of Simulation Aided Engineering<br />
</li>
<li><a href="http://www.adrianboeing.com/">Adrian Boeing</a>, <a href="http://www.transmin.com.au/">Transmin</a> - remotely operated rockbreaking<br />
</li>
<li>David Cavanagh, Integrated Energy - an overview of remote operation center designs for oil and gas, and mining<br />
</li>
<li>Lucas van Latum, Modular Mining - Goal orientated planning and the <a href="http://en.wikipedia.org/wiki/OODA_loop">Observe-Orientate-Decide-Act</a> loop<br />
</li>
<li>Reuben Kooperman and Peter Hunt - architecture for Remote Operation Centers (or Integrated Planning Centers) - including two buildings I go past on a regular basis and never fully realised what goes on inside - the City of Stirling building, and the ECU Joondalup library.<br />
</li>
<li>Mike Lomman, <a href="http://www.opxsolutions.com/">OpX Solutions</a> - planning considering bottlenecks<br />
</li>
<li>Andrew Jessett, <a href="http://www.mineware.com.au/">MineWare</a> - realtime dragline and shovel monitoring and support/maintenance orientated ROC's.<br />
</li>
<li>David Hattrick, Oracle Corporation - Oracles approach to managing mining data and information<br />
</li>
<li>Richard Taylor, Concept AV - Video walls<br />
</li>
</ul>I put the Rocklogic animation up on youtube, it's pretty neat. Gives a short overview of the systems features - Remote operation, collision avoidance, automated movements (auto-park, auto-deploy), etc. <iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/JOQL9wfvHyc" width="560"></iframe></div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com0tag:blogger.com,1999:blog-17188375.post-11454861203609415842011-11-23T21:24:00.002+08:002011-11-29T21:30:12.024+08:00PDF tools<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTzvBKSKHzy7MVKOg0KfBALzIuqpcUDmgTM4J77vpRlbMYMw70p3gdu4_OV-_deeucF44HEdLqsTfWcE_hQ2jEoXifs_rtYVohsQT1Bgh_-f0bm3s0nQImIFREvFZORjtuF2Kp/s1600/pdf-file-logo-icon.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTzvBKSKHzy7MVKOg0KfBALzIuqpcUDmgTM4J77vpRlbMYMw70p3gdu4_OV-_deeucF44HEdLqsTfWcE_hQ2jEoXifs_rtYVohsQT1Bgh_-f0bm3s0nQImIFREvFZORjtuF2Kp/s200/pdf-file-logo-icon.jpg" width="200" /></a></div>PDF files are the standard document distribution format. PDF has long left other file formats in the dust. However, there are always a number of operations that people like to make to PDF's ranging from just creating them, to splitting or merging to applying a watermark or foreground stamp.<br />
<br />
There are a number of great free tools to do all this work.<br />
<br />
<li> <a href="http://sourceforge.net/projects/pdfcreator/">PDF Creator</a> lets you create PDF files in Windows. Another popular alternative is <a href="http://www.cutepdf.com/">CutePDF</a>. For Apple Mac, under OSX you can simply print straight to PDF.<br />
</li><br />
<li> Splitting/bursting and merging/combining PDFs I feel is best done with a dedicated tool, <a href="http://www.pdfsam.org/">PDFSAM - Split and Merge</a>. Under OSX, you can actually use the sidebar of preview to move pages around, and drag in PDFs to merge, or pages to remove. If you have a lot of pages to do PDFSAM is a wiser choice, otherwise for smaller tasks Preview is fine.<br />
</li><br />
<li> Compression of PDFs under OSX is also straight forward, you just need to open the PDF in preview, and then under Quartz filter choose "Reduce File Size". Under windows, you can use PDFTK, more on this later.<br />
</li><br />
<li> Annotation of PDFs, again with OSX, preview gives you a small set of annotation tools. Under windows, you can use PDFTK. (Low cost / free for some-things aternatives are <a href="http://www.tracker-software.com/product/pdf-xchange-viewer">PDF-Xchange viewer</a> and <a href="http://www.foxitsoftware.com/Secure_PDF_Reader/">Foxit Reader</a>)<br />
</li><br />
<li> Watermarking and Stamps are best done with PDFTK.<br />
</li><br />
<li> Encryption can be done with PDFTK, and under OSX, preview has an encrypt option.<br />
</li><br />
<br />
<br />
Of course for those with cash, Adobe's tools are the best choice, but <a href="http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/">pdftk</a> is a fantastic free alternative, if you don't mind a bit of command line typing.<br />
<br />
An example of putting a foreground stamp onto every PDF with pdftk:<br />
<ul><li> Generate a PDF where you would like to apply the stamp to (i.e. the source)<br />
</li>
<li> Create a stamp PDF. This should have the stamp you wish to apply (e.g. "DRAFT") and be a transparent PDF. Microsoft Word will generate transparent PDFs by default, so you can create your stamp in Word.<br />
</li>
<li> Apply the stamp to the source PDF using pdftk, for example:<br />
<pre>pdftk in.pdf stamp stamp.pdf output out.pdf
</pre></li>
</ul><br />
Enjoy!</div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com2tag:blogger.com,1999:blog-17188375.post-41818468607555812312011-09-25T13:02:00.000+08:002011-09-25T13:02:22.995+08:00Robotics competitions and courses<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnxLiP2uIBVs0hCknryOjHLmAt11qvPDai6_F071jTQpXPV5WpzhqDPV6oYaq_C5ObRMxQhast5ZZrKZf3MljN5hyd6ics82nMoiVnXBNKj5buLNQY396icOt3TKi31O80mtZp/s1600/samplechallengeoriginal.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnxLiP2uIBVs0hCknryOjHLmAt11qvPDai6_F071jTQpXPV5WpzhqDPV6oYaq_C5ObRMxQhast5ZZrKZf3MljN5hyd6ics82nMoiVnXBNKj5buLNQY396icOt3TKi31O80mtZp/s320/samplechallengeoriginal.jpg" width="320" /></a></div>Sounds like it is competition season again.<br />
<ul><li><a href="http://www.uavoutbackchallenge.com.au/2011/">UAV outback challenge</a> where an unmanned ariel vehicle needs to find a person and drop supplies off to them. Registrations are due on the 27th September!<br />
</li>
<li><a href="http://www.nasa.gov/offices/oct/early_stage_innovation/centennial_challenges/sample_return_robot/index.html">NASA Sample Return Centennial Challenge</a>, a 1.5 million dollar prize competition to have robots autonomously explore a region, collect samples, and bring them back to base. Registration due in January, with the competition set for June. Only 8 months before the deadline when they announced the competition details - what are they thinking? <br />
</li>
<li><a href="http://solutionsinperception.org/overView.html">The ICRA solutions in perception challenge</a> (May 2012), this doesn't seem too difficult - Identify and classify a set of objects, where you are given some training data/time. Use any sensor(s) you like.<br />
</li>
<li>Australian <a href="http://www.cisra.com.au/extremeimaging.html">CiSRA ExtremeImaging competition</a> an interesting computer-photography competition, due October this year, finals in November.<br />
</li>
</ul>Many more are listed <a href="http://robots.net/rcfaq.html">at the robot contests and competitions FAQ</a>. To get you up to speed with robotics, there are some great free courses being run. The stanford <a href="http://ml-class.org/">Machine Learning course</a> and the <a href="http://www.ai-class.com/">Introduction to AI class</a> are both free to register, and start now! The ESA <a href="http://sophia.estec.esa.int/socis2011/">summer of code in space</a> already started last month, but it is worth keeping an eye on for next time.</div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com0tag:blogger.com,1999:blog-17188375.post-55119057845438759742011-09-12T22:17:00.000+08:002011-09-12T22:17:13.467+08:00Civilization 5 - Casual/fast game mod for Apple Mac OSX<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwzfM-Jd0apqnLZUT9xQGj26egwmVr0Gyu5yJ0jHGhyWf-rFYo-thT1ykqjoAB6WS1bu6h0RmdsiC90LMM8zety42UL_yihVHasIUr_IUdJsYCYy1M4gd9QtvNYo5nWpsQVBhf/s1600/civ5-small.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwzfM-Jd0apqnLZUT9xQGj26egwmVr0Gyu5yJ0jHGhyWf-rFYo-thT1ykqjoAB6WS1bu6h0RmdsiC90LMM8zety42UL_yihVHasIUr_IUdJsYCYy1M4gd9QtvNYo5nWpsQVBhf/s320/civ5-small.jpg" width="320" /></a></div>I rarely have enough spare time these days to be able to play a game, let alone identify a block of time large enough to dedicate to a game like Civilization 5 - which can take up to 12 hours to play a fast game. So I decided to create a mod for Civ 5 that would significantly speed up gameplay and enable a game to be completed in a few hours.<br />
<br />
Modding the game isn't directly supported under OSX, however it can be done.<br />
<br />
First, edit MainMenu.lua, located in:<br />
<pre>~/Library/Application Support/Steam/SteamApps/common/sid meier's civilization v/Assets/UI/FrontEnd
</pre><br />
Comment the following line: (add a '--' to the start)<br />
<pre>Controls.ModsButton:SetHide( true );
</pre><br />
Copy a mod you have downloaded into the:<br />
<pre>~/Documents/Aspyr/Sid Meier's Civilization 5/MODS
</pre>directory.<br />
<br />
You will need to unzip/extract them before they will work.<br />
If it is a civ5mod file, simply rename it to .7z, and you can use StuffitExpander or any similar tool to extract the folder.<br />
<br />
Start Civ5, and you should see a 'MOD' option on the menu.<br />
<br />
Creating your own mods is easy enough if you know how. Armed with a decent text editor and the console you can create mods under OSX. Begin by reading <a href="http://www.weplayciv.com/forums/entry.php?22-The-way-to-a-man-s-heart-is-through-his-modinfo-and-civ5mod-files.&">Dale's explanation of modinfo files</a>. Next, the <a href="http://wiki.2kgames.com/civ5/index.php/Main_Page">2K games Civilization 5 wiki</a> is a good place to visit, in particular the <a href="http://wiki.2kgames.com/civ5/index.php/XML_Reference">Civ 5 XML reference guide</a>. Finally, the <a href="http://kael.civfanatics.net/files/ModdersGuide.pdf">civfanatics modders guide</a> provides an excellent overview of creating a mod.<br />
<br />
You can use the command line 'md5' program to generate the MD5 hashes required for the modinfo file. (And <a href="http://www.string-functions.com/case.aspx">online lower-to-uppercase conversion</a>)<br />
<br />
You can download my simple <a href="http://www.adrianboeing.com/files/Casual%20Mod.zip">casual gaming mod for Civilization 5 here</a>. It replaces the standard 'quick' game. At the beginning of the game, you will find most things only take one turn to complete. Things will start to settle down quickly though in classical times.</div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com4tag:blogger.com,1999:blog-17188375.post-10229105599895876592011-09-06T21:51:00.015+08:002012-01-11T21:58:34.751+08:00Eureka Prize for WAMbot<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHQXr7ZtivW0Ivr9WwT4jyXj3PJjdVFqunpPafR3sA06QtFMznWsO0KNU7CvAsP7h4HoNlx6T4QUilnxwVQeF4y1X4lfV_CW6V-gi0WKvyMjLauTelGV9wf8EWyatckEDViS7V/s1600/1103_WAMbot.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHQXr7ZtivW0Ivr9WwT4jyXj3PJjdVFqunpPafR3sA06QtFMznWsO0KNU7CvAsP7h4HoNlx6T4QUilnxwVQeF4y1X4lfV_CW6V-gi0WKvyMjLauTelGV9wf8EWyatckEDViS7V/s1600/1103_WAMbot.JPG" /></a></div>The Australian <a href="http://www.wambot.org/">WAMbot robot</a> was <a href="http://eureka.australianmuseum.net.au/2AFE70D0-76D3-11E0-A87E005056B06558?DISPLAYENTRY=true">selected as a finalist to the Eureka prize</a> (Australia's top science prize) in the defence category. The awards ceremony took place in Sydney, at the Hordern Pavilion. <br />
<br />
It was an interesting event, showcasing the best of Australian science. Stiff competition meant the first place in the Defence category was snatched away by Prof Abdesselam Bouzerdoum who has done fantastic work in novel sensing systems.<br />
<br />
Maybe next time.</div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com3tag:blogger.com,1999:blog-17188375.post-9787067455997636322011-09-06T21:06:00.000+08:002012-01-12T21:51:31.060+08:00AIMEX<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv3nOgmugfnLM2e0YZ6Lqz94zwUW5zry2bL6EPEhJgjm3AQSJyxPKky4zWmUgEc2BI2gIvHr8z-Z_Z8cTWIblh_HxKIcJrjIGiB54-_daYaVQ5mv19tLQ1v4nfBG25KjrDnWzG/s1600/IMG_1618-small.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv3nOgmugfnLM2e0YZ6Lqz94zwUW5zry2bL6EPEhJgjm3AQSJyxPKky4zWmUgEc2BI2gIvHr8z-Z_Z8cTWIblh_HxKIcJrjIGiB54-_daYaVQ5mv19tLQ1v4nfBG25KjrDnWzG/s200/IMG_1618-small.JPG" width="200" /></a></div>I visited the <a href="http://www.aimex.com.au/">Asia-Pacific International Mining Exhibition (AIMEX)</a>, held every four years. There was a lot of interesting technology on display, with a strong presence of simulators, drills and long-wall gear. Being mining, a lot of very large machines were on display, and the exhibition hall was huge. Automation also had a small presence.<br />
<br />
Atlas-Copco had a set of their autonomous drill rig simulators on display, and I managed to get a chance to go through the process. Drilling is a non-trivial task, and it takes at least two weeks for an operator to familiarize themselves with the process. The autonomous drill system certainly makes it easier to operate the equipment, but the drill holes still have to be lined up manually - arguably the most challenging task.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD9ge5nirl3PjUVADUjbfTDhRPrT_gBd4d4na1i-sYGsKE3Y9CW-VxH0mrtkHXm6UVXJdzzVBwF1bPiG8OpuQm0noXSfxbDxrujlf6SSoZC3ytjshMqEM22E5f6fhq6LmzLPL8/s1600/IMG_1621-small.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD9ge5nirl3PjUVADUjbfTDhRPrT_gBd4d4na1i-sYGsKE3Y9CW-VxH0mrtkHXm6UVXJdzzVBwF1bPiG8OpuQm0noXSfxbDxrujlf6SSoZC3ytjshMqEM22E5f6fhq6LmzLPL8/s200/IMG_1621-small.JPG" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Atlas Copco Autonomous Drill console</td></tr>
</tbody></table><br />
Eickhoff had a demonstration of their automated long-wall system, that uses the <a href="http://indurad.com/">Indurad</a> radar system. <br />
<br />
CAT were displaying some of their new autonomous equipment, soon to be installed in <br />
<a href="http://www.miningaustralia.com.au/news/cat-sign-autonomous-truck-deal-with-fortescue">Western Australia at FMG's Solomon mine</a>. CAT is always a slow mover to adopt technology but it is interesting to see how fast this technology is being adopted by the major Australian miners, now including Rio Tinto, BHP, Newcrest and FMG.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYdcjgZ7S6YjFJGyE5_IFhun-UyGt6OUsxxtECffle8dXcEV2mulQX6trLmjm0fsPq3TGkZS3s3GaR_agLq3jzYCD3F2HHzoFMc_u8zj_ndEMCfL42wEGh5FDsHySw0qG5CiSa/s1600/IMG_1626-small.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYdcjgZ7S6YjFJGyE5_IFhun-UyGt6OUsxxtECffle8dXcEV2mulQX6trLmjm0fsPq3TGkZS3s3GaR_agLq3jzYCD3F2HHzoFMc_u8zj_ndEMCfL42wEGh5FDsHySw0qG5CiSa/s200/IMG_1626-small.JPG" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Eickhoff longwall automation </td></tr>
</tbody></table><br />
Below is a video of the CAT system I captured at AIMEX. Apparently this system actually does realtime path planning and adjustment as opposed to following a pre-programmed path like other (Sandvik) systems.<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/NMXe-TRmz14" width="420"></iframe><br />
<br />
You can watch some more videos of autonomous mine vehicles on youtube:<br />
<ul><li><a href="http://www.youtube.com/watch?v=fLngT2Si1SY">CAT 'command' system for haul trucks</a> and <a href="http://www.youtube.com/watch?v=-Y1xgkavUrw">MineGem</a>. (See <a href="http://research.ict.csiro.au/research/labs/autonomous-systems/field-robotics/mining-robotics/load-haul-dump-lhd-automation">CSIRO's work on LHD</a>)<br />
</li>
<li><a href="http://www.youtube.com/watch?v=ShBMIoQk6Wc">Atlas-Copco scooptram for loaders</a> (See <a href="http://msl.mine.queensu.ca/groups/msl/wiki/88cfa/Joshua_Marshall.html"> Joshua Marshall's work on Scooptram</a>)<br />
</li>
<li><a href="http://www.youtube.com/watch?v=AnK2AkTcFjI">Sanvik Automine for loaders</a>.<br />
</li>
</ul></div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com16tag:blogger.com,1999:blog-17188375.post-92226487370279545692011-09-04T20:13:00.000+08:002011-09-04T20:13:04.633+08:00Mozilla Demopart - The Self Explanatory Demo<div dir="ltr" style="text-align: left;" trbidi="on"><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR48ehAlKhgtimF8sDKH0wFKETPD5cmy60MqFJVa5V5bUc7vC_qolUttIaQ0zTqP2JOWgonlGuJOBo-iT6kWXXRU0ezYEdfR8grvalQI0f7wi45qaMwIkV0izpj7uWXqrNiW83/s1600/helperslide384.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR48ehAlKhgtimF8sDKH0wFKETPD5cmy60MqFJVa5V5bUc7vC_qolUttIaQ0zTqP2JOWgonlGuJOBo-iT6kWXXRU0ezYEdfR8grvalQI0f7wi45qaMwIkV0izpj7uWXqrNiW83/s200/helperslide384.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Self-Explanatory Demo</td></tr>
</tbody></table>With the help of Chris Mylrae (music) I put together a last minute entry to the Mozilla Demoparty demo competition. You can see our entry <a href="https://demoparty.mozillalabs.com/gallery/88/the-self-explanatory-demo">The Self Explanatory Demo</a>. It derives and explains a number of oldschool demoscene effects, including the XOR bitplasma, sin/cos plasma, ripples, inteference, and tunnel effect. It also shows the origin of equations for radius of a circle, sine and cosine, tan and arctan, and 3d projection. In essence, it is an animated version of the demo effect explanations on this blog.<br />
<br />
Overall, the demo placed in <a href="http://mozillalabs.com/blog/2011/09/we-got-the-winners">third place in the html5 WebGL demo competition</a>. The <a href="https://demoparty.mozillalabs.com/gallery/81/webgl-water">winning single-effect entry WebGL water</a> is well worth a look.<br />
<br />
To put together my entry in the two days I had I used, <a href="https://github.com/mrdoob/three.js/">three.js</a>.<br />
There is now a new <a href="http://learningthreejs.com/">tutorial site for three.js</a>, it is definitely worth taking a look at.<br />
<br />
Finally, I'll leave you with an amazing 64k production, 'uncovering static' by Fairlight and Alcatraz.<br />
<iframe allowfullscreen="" frameborder="0" height="345" src="http://www.youtube.com/embed/69Xjc7eklxE" width="560"></iframe></div>Adrianhttp://www.blogger.com/profile/18234365657251895049noreply@blogger.com0