<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12197915</id><updated>2011-04-22T02:50:18.392+02:00</updated><title type='text'>Thesis Update</title><subtitle type='html'>Master Thesis Project simulating material removal and rapid prototyping including haptics.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12197915.post-112722821253552479</id><published>2005-09-20T16:51:00.000+02:00</published><updated>2005-09-20T16:58:34.596+02:00</updated><title type='text'>Future Work</title><content type='html'>&lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-weight: bold;"&gt;Additional Feedback&lt;/span&gt;&lt;/p&gt;            The force feedback was difficult to feel during testing. The vibration caused by the drill     made feeling some forces impossible. Many errors were caused when the feedback could not be felt. Adding sound to the program could increase the experience. Sound could give the user additional feedback. For example, the closer the distance between two objects the higher the frequency.&lt;o:p&gt;&lt;/o:p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;b style=""&gt;Density&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;A density property exists in the octree structure but is currently unused.&lt;span style=""&gt;  &lt;/span&gt;This is when collisions occur with a leaf node and should be viewed as object persistence.&lt;span style=""&gt;  &lt;/span&gt;Currently, leaf nodes are removed after a collision between a leaf node and the cursor object occurs.&lt;span style=""&gt;  &lt;/span&gt;The possible extension is to modify a counter when collisions occur and only remove the leaf when the counter expires.&lt;span style=""&gt;  &lt;/span&gt;This can be extended to represent 3D data with density information.&lt;br /&gt;&lt;/p&gt;       &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;b style=""&gt;Graphics improvements&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;The current program displays the maximum haptics workspace as the screen dimensions.&lt;span style=""&gt;  &lt;/span&gt;This should be changed to better fit the drilling area.&lt;span style=""&gt;  &lt;/span&gt;A zoom feature is not implemented and the current camera angle rotations are controlled by the keyboard.&lt;span style=""&gt;  &lt;/span&gt;Ideally the haptic device should control this.&lt;span style=""&gt;  &lt;/span&gt;The haptics could be used to position the viewing angle by capturing the motion of the haptics endpoint.&lt;span style=""&gt;  &lt;/span&gt;Rotations could also be obtained from the orientation of the haptic device.&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;The marching cubes algorithm needs to be adjusted.&lt;span style=""&gt;  &lt;/span&gt;Holes appear in the current implementation.&lt;span style=""&gt;  &lt;/span&gt;The problem is when one branch has all 8 leaf nodes removed.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;       &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;b style=""&gt;Alternative Device&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;Stronger force feedback should be tested to prevent removing desired material.&lt;span style=""&gt;  &lt;/span&gt;Currently the forces provide the user with the knowledge that the desired shape is near but the user can easily overpower the force feedback.&lt;span style=""&gt;  &lt;/span&gt;Larger haptic devices from SensAble Technologies provide increased forces. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;The program should be easily scalable to work with a larger device by SensAble.&lt;span style=""&gt;  &lt;/span&gt;The other devices are capable of rendering stronger forces and have greater accuracy.&lt;span style=""&gt;  &lt;/span&gt;The levels of force would have to be adjusted in an extended program but most other features are similar between all SensAble devices because they all can use the OpenHaptics Toolkit and the HDAPI.&lt;/p&gt;       &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;b style=""&gt;Voxelization&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0.5in;"&gt;It is possible to precompute the collision space of for the STL object. &lt;span style=""&gt; &lt;/span&gt;The octree object would be modified to store the shape of the STL object.&lt;span style=""&gt;  &lt;/span&gt;This could remove using the SWIFT collision detection package with the tradeoff being that the resolution of the octree would determine the accuracy of the final shape.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-112722821253552479?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/112722821253552479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=112722821253552479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112722821253552479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112722821253552479'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/09/future-work.html' title='Future Work'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-112568380083141565</id><published>2005-09-02T19:56:00.000+02:00</published><updated>2005-09-02T19:56:40.856+02:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/11/5140/640/test1.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/11/5140/320/test1.jpg'&gt;&lt;/a&gt;&lt;br /&gt;August Test 1: Torus&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-112568380083141565?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/112568380083141565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=112568380083141565' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112568380083141565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112568380083141565'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/09/august-test-1-torus.html' title=''/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-112448693011981964</id><published>2005-08-19T23:26:00.000+02:00</published><updated>2005-08-19T23:28:50.126+02:00</updated><title type='text'>Spam</title><content type='html'>Due to unsolicited posting I have disabled anonymous posting.  I can be reached by email or members of blogspot.com are allowed to post.  I encourage anyone with questions or comments to post or contact me.  I am very interested in hearing feedback about this site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-112448693011981964?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/112448693011981964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=112448693011981964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112448693011981964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112448693011981964'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/08/spam.html' title='Spam'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-112437877963804929</id><published>2005-08-18T17:15:00.000+02:00</published><updated>2005-08-18T17:26:22.346+02:00</updated><title type='text'>Testing Issue</title><content type='html'>I have been testing for over 2 weeks. What has become apparent is the tool calibration does not work.  I have been trying to troubleshoot this problem to no avail.  The transformation matrix that is generated from the code varies.  The endpoint position calculated can vary by 5 - 10 mm.  I have halted further testing until this can be resolved.&lt;br /&gt;&lt;br /&gt;I have checked matrix multiplication, both order and differences between column major and row major.  I have upgraded the API and reinstalled the drivers that the haptic device uses.  I tried hard coding the translation determined from measuring.  This did not work either.  I am leaning towards the hardware being defective or that the haptic device is not capable of giving the required accuracy.&lt;br /&gt;&lt;br /&gt;Sample Test pictures and screenshots available &lt;a href="http://io.uwplatt.edu/%7Eosowskit/files/"&gt;here&lt;/a&gt; as long as my student account stays open.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-112437877963804929?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/112437877963804929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=112437877963804929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112437877963804929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112437877963804929'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/08/testing-issue.html' title='Testing Issue'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-112223830502904586</id><published>2005-07-24T13:36:00.000+02:00</published><updated>2005-07-24T22:51:45.036+02:00</updated><title type='text'>Marching Cubes</title><content type='html'>I realized after reading through other research papers that implementing the Marching Cubes algorithm into my project would not be difficult.  The octree data structure is ideal for adding the marching cubes technique. &lt;br /&gt;&lt;br /&gt;The octree structure has branch and leaf nodes.  The leaf nodes could be viewed as vertices rather than cubes.  The leaf nodes are updated to reflect whether they are outside, are on the border or inside of the object.  Each branch keeps track of 8 children and whether a child should be drawn.  This reduces branches that need to be visited when drawing the object.  If a branch has one child that is on the border, then the current branch should be drawn.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.essi.fr/%7Elingrand/MarchingCubes/algo.html"&gt;Source code&lt;/a&gt; was obtained that provides a lookup table with 256 entries.  This is because there are 2^8 possible combinations.  These can be reduced to around 15 general cases due to rotations but a lookup table lists all triangles that should be drawn for each case.&lt;br /&gt;&lt;br /&gt;The triangles are formed using midway points between the vertices.  There are 8 vertices for a cube and there are 12 midway points.  These points are referenced in the lookup table.  Normals can then be computed from the order of the midpoints.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-112223830502904586?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/112223830502904586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=112223830502904586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112223830502904586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112223830502904586'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/07/marching-cubes.html' title='Marching Cubes'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-112188803468566177</id><published>2005-07-20T21:11:00.000+02:00</published><updated>2005-07-20T21:33:54.690+02:00</updated><title type='text'>Kinematic Chain</title><content type='html'>The order of matrix multiplication is crutial for obtaining correct orientation and position information. The kinematic chain is the order that the transformation matrices are multiplied in order to move between coordinate systems.&lt;br /&gt;&lt;br /&gt;The haptic device has an internal kinematic chain that we will not explore, but we will use the haptics coordinate at (0,0,0) using the right hand rule and with no rotation. Having the haptic device directly in front of you. The x-axis is positive to the right. The y-axis is positive to the ceiling. The z-axis is positive in the direction away from the haptic device.&lt;br /&gt;&lt;br /&gt;The haptics has a base coordinate system that we will use as the world coordinate system. Transformations are calculated in the following ways&lt;br /&gt;&lt;br /&gt;Haptics (World Zero)              -- This is identity 4x4 matrix&lt;br /&gt;Stylus (Center of Rotation) -- Calculated and Returned from HD - HD_Current_Transform&lt;br /&gt;Tool Tip (TCP)                       -- Calibrated from reading in points&lt;br /&gt;WorkPiece (Orientation)      -- Read in from calibration subroutine&lt;br /&gt;&lt;br /&gt;Kinematic Chain&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tool Tip to Haptics &lt;/span&gt;&lt;br /&gt; &lt;br /&gt; T = Tool Tip x Stylus&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tool Tip to WorkPiece&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;T = Tool Tip x Stylus x inverse(WorkPiece)&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-112188803468566177?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/112188803468566177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=112188803468566177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112188803468566177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112188803468566177'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/07/kinematic-chain.html' title='Kinematic Chain'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-112188099188371873</id><published>2005-07-20T19:15:00.000+02:00</published><updated>2005-07-20T20:05:19.510+02:00</updated><title type='text'>Freeze</title><content type='html'>&lt;span style="font-size:100%;"&gt;Last week I put a freeze on development. No new features will be implemented in this system. The next phase of the project is testing. This week of coding is dedicated to making cosmetic changes and increasing reliability. Current features to wrap up include combining getting the dimensions and coordinate system of the stock material and creating a bounding box around the &lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;STL/TRI object&lt;/span&gt;&lt;span style="font-size:100%;"&gt; and fitting it into the &lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;octree object.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;The console based interface is getting updated to use GLUI. This puts a java looking panel in an openGl window. This plugs in nicely with existing code. The GLUI allows programmers to build buttons, panels, etc. manually with the same effect as with windows forms.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Force Rendering&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The problem with force rendering was solved by changing a setting used with the SWIFT collision detection package. There are two options offered when creating the workspace for the collision detection. Sorting deals with the way the program sorts the objects to try to optimize the search.&lt;br /&gt;&lt;br /&gt;Broad Phase offers the option to create tight bounding boxes around the object. This optimizes the query phase. If the object position is not inside of the bounding box, then no test is made and data will be returned from a query. This reduces the amount of computation by closely representing the object by the bounding boxes.&lt;br /&gt;&lt;br /&gt;However, this causes a problem when making queries. There are various queries offered by the package and most allow the user to specify a threshold as to when the function should return a value. This doesn't work when the Broad Phase option is selected. When option is disabled, then queries return the distance between objects within the set tolerence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-112188099188371873?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/112188099188371873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=112188099188371873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112188099188371873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112188099188371873'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/07/freeze.html' title='Freeze'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-112066104009420159</id><published>2005-07-06T16:26:00.000+02:00</published><updated>2005-07-06T16:44:00.100+02:00</updated><title type='text'>Force Smoothing</title><content type='html'>The haptic device does not react well to the forces sent by the project.  According to the haptics documentation, buzzing occurs when the haptic device can't render the forces.  This can occur when the force is too high, there direction changes or the difference between forces is too great.  The documentation recommends smoothing the forces.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Force with STL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The SWIFT collision detection package has a funtion that returns the normal vector between two objects.  This can be used as the direction of the force vector.  The distance between the objects is returned as well.  The smoothing will keep track of past forces and take an average of the forces.  Weights will be adjusted to ensure a smooth performance.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Force with octree&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The force vector will be in the opposite direction of motion.  The negative of the velocity vector is used to simulate resistance when contacting a cell.  &lt;br /&gt;&lt;br /&gt;A possible enhancement to this technique is adding a counter to the cells.  Currently  a cell is removed the first time contact is made with the tooltip.  The counter could be used to remove the cell only when the counter reaches a certain limit.  This would  delay the removal and allow the force to be rendered for a longer time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-112066104009420159?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/112066104009420159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=112066104009420159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112066104009420159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112066104009420159'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/07/force-smoothing.html' title='Force Smoothing'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-112065992074853632</id><published>2005-07-06T16:18:00.000+02:00</published><updated>2005-07-06T16:25:20.756+02:00</updated><title type='text'>Initializing the Stock Material</title><content type='html'>Professor Horsch provided me with code to create a transformation matrix from reading in 3 points; origin, x-axis and y-axis.  The code was included into the project but could not be tested until the haptic to screen mapping was working.  After fixing the mapping last week the code was tested.&lt;br /&gt;&lt;br /&gt;The matrix mulitplication needed is as follows:&lt;br /&gt;&lt;br /&gt;Translation from default haptic TCP to desired Tooltip * &lt;br /&gt;Current Transformation Matrix from world center point to TCP * &lt;br /&gt;inverted Transformation Matrix from world center point to origin of stock material&lt;br /&gt;&lt;br /&gt;After this multiplication, the coordinates can be used as input to the collision detection algorithms.  This does not take into account orientation of the tooltip, and this doesn't matter is the tooltip is a sphere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-112065992074853632?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/112065992074853632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=112065992074853632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112065992074853632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/112065992074853632'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/07/initializing-stock-material.html' title='Initializing the Stock Material'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111987342547426060</id><published>2005-06-27T13:51:00.000+02:00</published><updated>2005-06-27T13:57:05.483+02:00</updated><title type='text'>Week Update 24, 2005</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Progress&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This week I resolved the issue where the drawn graphic cursor position and actual haptic cursor position were different.  The haptics and and collision detection algorithms were correct, but the cursor was drawn with an extra offset.  This was because code from the project &lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;simpleHapticScene&lt;/span&gt;&lt;/span&gt; was used in &lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;stlViewer&lt;/span&gt;&lt;/span&gt; to draw the cursor.  The code was copied into the &lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;prototype&lt;/span&gt;&lt;/span&gt; project unchanged.  &lt;br /&gt;&lt;br /&gt;The original code multiplies the current openGL matrix with the modelview matrix and then the transform from the haptics to get the cursor into the correct position.  In prototype the openGL draw is different.  It uses a glLookAt() function rather than glFrustrum().  By eliminating the extra matrix multiplication, the cursor appears at the correct position.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Project &lt;span style="font-style:italic;"&gt;prototype&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The octree structure was incorporated into the project.  The octree structure is different from the voxel structure, so I will introduce a new keyword &lt;span style="font-weight:bold;"&gt;octree object&lt;/span&gt;.  An octree divides a cube into 8 sub cubes recursively.  Each node has 8 children and a link back to the parent node.  The root is the beginning node with the maximum coordinates of the stock material.  &lt;br /&gt;&lt;br /&gt;The advantage of using an octree is that it is meant to have better performance when searching for a specific cell.  My implementation keeps track of whether its children should be drawn or checked for collisions.  This is achieved by having a boolean variable for each child and only visiting child nodes that are set.  Children nodes update the parent when they are updated.  For example, a collision is detected and a leaf node must be removed.  The cell sets a variable so that it is marked removed and then tells its’ parent node that it is no longer active.  The parent node checks the rest of the children if there are any cells that are still active.  If there aren’t it will tell its’ parent that it is no longer active.&lt;br /&gt;&lt;br /&gt; The initial performance of the collision detection and drawing of the cells were as expected.  Collisions with the octree object and the haptics cursor were detected and handled without noticeable drag.  The code was tested first without haptic feedback and then with haptic feedback and the system seemed to perform the same.&lt;br /&gt;&lt;br /&gt;Statistics&lt;br /&gt;&lt;br /&gt;The numbers I use are not exact and are often estimated.  I use worst case or simple cases to compare performance.  The observations are not meant to be exact or always true, but are meant to justify the use of octrees.  &lt;br /&gt;&lt;br /&gt; I didn’t like using the &lt;span style="font-weight:bold;"&gt;voxel object&lt;/span&gt; because every cycle of the openGL thread would visit every cell in the voxel object.  Although it would only check a variable whether it would have to be drawn, it was still at least 128^3 (~2,000,000) checks.  This doesn’t include the operations if the cell had to be drawn.  When drawing the outer shell, the octree had to check (~225,000) cells.  This is a saving of about a factor of 10.  &lt;br /&gt;&lt;br /&gt; On the other hand, if every cell must be drawn then it is likely that the voxel object would outperform the octree object.  The octree would have to check nearly 4.5 million cells.  This is an extreme case and this project would never draw every cell because the inside of the octree object is hollow.  Another reason that the performance shouldn’t be that bad is that all cells that are inside of the STL/TRI object will not be drawn.  I assume on average the STL/TRI object will take up at least 50% of the space.&lt;br /&gt;&lt;br /&gt; The memory requirement for the voxel object is higher than the voxel object because each level has 8 children.  Each node also has position coordinates and other variables.  The voxel object is an array of unsigned char 128^3.  &lt;br /&gt;&lt;br /&gt;It must be noted that there is no drawing optimization.  Both techniques simply draw every cell whether it is visible to the viewer or not.  This could be optimized by raytracing or similar techniques to only draw cells that are visible from the viewing angle.&lt;br /&gt;&lt;br /&gt;A concern is overheating the processor.  When drawing the octree object with 5 levels, the cpu runs around 60 – 80% @ 1600 Mhz.  However, the voxel object and the octree object both cause the cpu to run at 100% when it has 128^3 cubes/leaf nodes.  The bottleneck for the voxel object is drawing the cells.  The bottleneck for the octree seems to be the collision detection.  The next step is testing the number of checks for a collision with the octree because this could be an area for optimization.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111987342547426060?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111987342547426060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111987342547426060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111987342547426060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111987342547426060'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/06/week-update-24-2005.html' title='Week Update 24, 2005'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111953047286133102</id><published>2005-06-23T14:26:00.000+02:00</published><updated>2005-06-23T14:41:12.866+02:00</updated><title type='text'>Spheres, Cubes and Collisions</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Assumption&lt;/span&gt;:&lt;br /&gt;   The drill bit is spherical.  All vectors from the origin with the length of the radius will fall along the edge of the sphere.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Process&lt;/span&gt;:&lt;br /&gt;   This also works in the opposite direction.  A vector &lt;span style="font-style:italic;"&gt;SampleVector&lt;/span&gt; from a point outside of the sphere to the origin will cross the border of the sphere.  If the radius of the sphere is subtracted from the vector &lt;span style="font-style:italic;"&gt;SampleVector&lt;/span&gt;, this will return the distance from the initial position to the border of the sphere.  This distance to the edge of the sphere will provide collision detection.&lt;br /&gt;&lt;br /&gt;Using this we can calculate the distance from the center point of a cube to the edge of the sphere.  The vector from the centerpoint of the cube to the centerpoint of the sphere is created.  The vector is then shortened by the length of the radius.  The position is checked to see if it lies within the coordinates of the cube.  If it is then a collision occurs.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Note&lt;/span&gt;:  The cube is a set dimension.  It would make more sense to use a Marching Cubes type algorithm, but this should be seen as an improvement to the system.  The project will remove the voxel, that is not draw the voxel, when the edge of the sphere reaches the center of the cube.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111953047286133102?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111953047286133102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111953047286133102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111953047286133102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111953047286133102'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/06/spheres-cubes-and-collisions.html' title='Spheres, Cubes and Collisions'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111927124149446476</id><published>2005-06-20T14:30:00.000+02:00</published><updated>2005-06-20T15:05:16.706+02:00</updated><title type='text'>Initial Reaction to Visual and Haptic feedback</title><content type='html'>The TCP position and the collision points with the &lt;strong&gt;voxel object&lt;/strong&gt; and &lt;strong&gt;STL/TRI object&lt;/strong&gt; do not match.  The collisions occur and forces can be rendered, but it seems to be a scaling issue or an error in the matrix transformations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Observation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The program removes &lt;span style="font-weight:bold;"&gt;voxels&lt;/span&gt; from the &lt;span style="font-weight:bold;"&gt;voxel shell&lt;/span&gt; when collisions occur.  It also renders a force when a collision occurs between the cursor and the STL/TRI object.  &lt;br /&gt;&lt;br /&gt;I observed that trying to remove voxels was difficult without forcefeedback.  The drilling device is attached to the haptic device and is proving difficult to maneuver.  The tool is not a free moving device and is restricted.  It also moves easier along certain axes.  &lt;br /&gt;&lt;br /&gt;The TCP seems easier to swing left to right along the XZ plane.  This can provide stability but it often results in a path that is circular rather then linear.  Moving directly in one direction is difficult.&lt;br /&gt;&lt;br /&gt;Today I included the force feedback when a collision occurs with the voxel object.  This immediately increased my ability to stay in contact with the voxel object.  As stated before, the virtual tooltip was not in contact with the voxel object when collisions occured.  In a sense I could only tell if a collision occured if I removed voxels.  Based on that knowledge I would try to remove neighboring voxels.  This was not trivial.  What this suggests is that the haptic feedback maybe as important as visual feedback.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Next Step&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Resolve the issue of difference between visual and haptic collision points&lt;br /&gt;Move Voxel object and use Matrix math to get TCP to voxel coordinate system&lt;br /&gt;Move STL/TRI object inside of Voxel object.  This should be only one Transformation&lt;br /&gt;Enhance viewing; angle, position, mobility&lt;br /&gt;Move octree implementation from &lt;em&gt;&lt;strong&gt;stlViewer&lt;/strong&gt;&lt;/em&gt; to &lt;em&gt;&lt;strong&gt;Prototype&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;SOON TESTING!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111927124149446476?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111927124149446476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111927124149446476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111927124149446476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111927124149446476'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/06/initial-reaction-to-visual-and-haptic.html' title='Initial Reaction to Visual and Haptic feedback'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111840111521393220</id><published>2005-06-10T12:32:00.000+02:00</published><updated>2005-06-10T15:09:05.006+02:00</updated><title type='text'>Week Update June 10, 2005</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Coordinates&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;prototype&lt;/span&gt;&lt;/span&gt; project is able to read in coordinates of &lt;span style="font-weight: bold;"&gt;stock material&lt;/span&gt; and both create a new coordinate system and the transformation matrix (&lt;span style="font-weight: bold;"&gt;voxel coordinate system&lt;/span&gt;).   It still has a problem that the &lt;span style="font-weight: bold;"&gt;voxel object&lt;/span&gt; is not displayed correctly after multiplying the voxel coordinate system.  The voxel object seems rotated across the z-axis.&lt;br /&gt;&lt;br /&gt;Collision detection with the voxel object requires moving the tooltip to the voxel coordinate system. This should be the multiplication of the two matrices. This will be tested next week.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Octrees&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I spent an afternoon modifying the code of the &lt;span style="font-weight: bold;"&gt;octree &lt;/span&gt;to see if I could reduce the memory requirement when running 7 levels. The octree causes two main problems; large memory requirement and the processor runs at 100% when drawing the voxel shell.&lt;br /&gt;&lt;br /&gt;I reduced the size of each node from 104 bytes to 80 bytes. This was accomplished by changing the type of the vectors from doubles to floats. The affect was minimal and it is unlikely to increase the performance beyond the current state. A reduction of 40 bytes would be required to provide a noticeable difference.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;General Plans/Clarification&lt;br /&gt;&lt;/span&gt; &lt;ul&gt;   &lt;li&gt;The STL/TRI file will be loaded.  The system will get the bounding box of the object.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Next the coordinates from the stock material will be read in. The system will create the voxel object with these coordinates. Then, the STL/TRI object will be situated into the voxel object.&lt;/span&gt;&lt;/li&gt;&lt;/span&gt;&lt;/span&gt;&lt;/ul&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;The STL/TRI file will not be scaled and it is assumed that the voxel object will fit around the STL/TRI object. The STL/TRI object can be rotated to fit into the voxel object, but the assumption is that it is possible to fit the object inside of the voxel object.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Force Rendering&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Only collisions with the STL/TRI object render force feedback. The haptic device buzzes when rendering feedback. The method for rendering forces will have to be refined to reduce this. It is possible that the Omni haptic is not capable of rendering these forces to the tooltip. The extra translations might be causing the buzzing.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;New Terminology&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;ul&gt; &lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;voxel coordinate system&lt;/span&gt;&lt;/span&gt;&lt;/li&gt; &lt;/span&gt;&lt;/span&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111840111521393220?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111840111521393220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111840111521393220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111840111521393220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111840111521393220'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/06/week-update-june-10-2005.html' title='Week Update June 10, 2005'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111815296043576823</id><published>2005-06-07T15:54:00.000+02:00</published><updated>2005-06-07T16:02:40.440+02:00</updated><title type='text'>Remaining issues</title><content type='html'>&lt;strong&gt;Voxel object:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Read in coordinates of &lt;strong&gt;Stock Material &lt;/strong&gt;to get correct orientation, size and position.&lt;br /&gt;Find bounding box for &lt;strong&gt;STL/TRI object&lt;/strong&gt;. &lt;br /&gt;Fix &lt;strong&gt;&lt;em&gt;Prototype&lt;/em&gt;&lt;/strong&gt; cursor and voxel removal.&lt;br /&gt;Detect collisions and generate forces.&lt;br /&gt;&lt;br /&gt;The voxel object will be rotated and translated.  This will affect the current method because it relies on the voxel object starting at the origin. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;STL/TRI object:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Scaling of STL/TRI object to fit inside of Voxel object.&lt;br /&gt;Convert TRI files into STL files.  Assure that the project can read STL files.&lt;br /&gt;Smooth forces, the current problem is vibration.  This is a common issue and is documented in the OHTK programmers API.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111815296043576823?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111815296043576823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111815296043576823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111815296043576823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111815296043576823'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/06/remaining-issues.html' title='Remaining issues'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111773179191983694</id><published>2005-06-02T18:18:00.000+02:00</published><updated>2005-06-02T19:03:11.923+02:00</updated><title type='text'>Pre Demo Update</title><content type='html'>Welcome to June!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Top News:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Realigning the TCP&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The drilling tool has been attached to the haptic device.  The greater part of today was spent realigning the &lt;strong&gt;TCP&lt;/strong&gt; position.  The old TCP was at the tip of the stylus pen which was only a z translation.  The offset of the drilling tool and the angle of which it is attached requires a translation in all three axes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Octrees&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This week I decided to convert the voxel shell into an octree.  Collision detection and simulating cell removal have not been integrated yet.  It is not clear whether there is an improvement over using the old way.  The memory requirement of an octree might offset the benefit of optimized drawing. &lt;br /&gt;&lt;br /&gt;Currently 7 levels is the limit for my machine which amounts to the 128^3.  The processor runs at 100% using both methods.  The real test will be on the deformable shape.  I plan on writing code to allow both techniques to be used.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111773179191983694?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111773179191983694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111773179191983694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111773179191983694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111773179191983694'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/06/pre-demo-update.html' title='Pre Demo Update'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111703864663103398</id><published>2005-05-25T17:35:00.000+02:00</published><updated>2005-05-29T18:34:53.206+02:00</updated><title type='text'>Solutions to Previous Issues</title><content type='html'>&lt;u&gt;Coordinate Mapping:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The coordinate mapping seems to work now. Code from &lt;strong&gt;&lt;em&gt;simplehapticscene&lt;/em&gt;&lt;/strong&gt; was incorporated into the project &lt;em&gt;&lt;strong&gt;prototype.&lt;/strong&gt; &lt;/em&gt;This gets the dimensions of the haptic workspace and creates the openGl viewing frustrum from these dimensions.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Collisions and Forces:&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;/u&gt;&lt;br /&gt;Collisions with the haptic cursor and the &lt;strong&gt;TRI object &lt;/strong&gt;have been tested. There are scaling issues between the actual contact points of the TRI object and the cursor. The cursor can also&lt;br /&gt;&lt;br /&gt;Collisions occur and forces are rendered. The &lt;strong&gt;SWIFT&lt;/strong&gt; package has a function to query the distance to collision. This will also return a normal vector in the direction of the collision. This is the direction to render the force.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Orientation&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Prototype&lt;/em&gt;&lt;/strong&gt; currently reads in 3 points from the stock material to create the final translation thanks to code provided by Professor Horsch. This is created by reading in three points, the origin, a point along the positive x-axis and a point along the positive y-axis. The program calculates the coordinate system from these points. &lt;em&gt;This will have to be documented later.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This code will be extended to read in a fourth point with an added restriction. This code is meant to get the orientation. I will extend the code to allow the dimensions to be read in. the fourth point will be along the x-axis. The restriction is that all points will have to be at corners.&lt;br /&gt;&lt;br /&gt;This means that the stock material does not have to have a specific starting position. Once the stock material is secured to the working surface, the position is read in. This can be extended to allow the workpiece to be moved after the drilling process has been started. This assumes that the origin was not removed. Repositioning the workpiece can cause accuracy issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111703864663103398?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111703864663103398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111703864663103398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111703864663103398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111703864663103398'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/solutions-to-previous-issues.html' title='Solutions to Previous Issues'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111662315556847947</id><published>2005-05-20T22:40:00.000+02:00</published><updated>2005-05-20T23:05:55.573+02:00</updated><title type='text'>Week Update May 20, 2005</title><content type='html'>&lt;u&gt;Unofficial News:&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;/u&gt;&lt;br /&gt;Last week's weekly update somehow got lost, or never written, so this is a two week update.  In my opinion the project is progressing well.  Later next month the drilling device should be attached and tested.  The project now incorporates the collision detection package SWIFT.  The system doesn't seem slow.  However, the ultimate test will be loading the &lt;strong&gt;STL file&lt;/strong&gt; and surrounding it with the &lt;strong&gt;voxel shell&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Voxel Headache:&lt;/u&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;The &lt;strong&gt;voxel shell&lt;/strong&gt; is the main problem with the system.  This is because its shape is dynamic.  The &lt;strong&gt;STL &lt;/strong&gt;or&lt;strong&gt; TRI objects&lt;/strong&gt; are compiled by &lt;strong&gt;openGl&lt;/strong&gt; using display lists.  The objects are first loaded into a temporary storage, then stored using openGl display lists.  The display list stores the shape at compile time.  The program does not need to store the object after the shape is given to openGl.  Drawing the shape is then only one line of code.&lt;br /&gt;&lt;br /&gt;Another issue is finding which cells of the voxel object need to be updated after a collision occurs.  If the sphere contacts only a part of a voxel, should it be removed?  What other issues exist?&lt;br /&gt;&lt;br /&gt;&lt;u&gt;SWIFT News:&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;/u&gt;&lt;br /&gt;The package was incorporated into &lt;strong&gt;&lt;em&gt;stlViewer&lt;/em&gt; &lt;/strong&gt;first and then into &lt;strong&gt;&lt;em&gt;Prototype&lt;/em&gt;&lt;/strong&gt;.  Under &lt;strong&gt;&lt;em&gt;Prototype&lt;/em&gt;&lt;/strong&gt; the collision detection algorithm did not seem to slow down the system.  This needs more testing, but this is a very good sign.  The step of voxelizing the STL object will be left out of the system unless a noticable system lag occurs.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Status:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;SWIFT Collision detection is tested and working.&lt;br /&gt;TRI files are used to load the objects. &lt;br /&gt;The haptic device can move the cursor on screen.&lt;br /&gt;HDAPI  is used to update position, force and use collision detection&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Issues:&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;/u&gt;&lt;br /&gt;Mapping haptic coordinates to the screen.&lt;br /&gt;Test collision detection with haptic cursor and TRI object.&lt;br /&gt;Surround STL/TRI object with voxel shell.&lt;br /&gt;Moving voxel shell, coordinate system, calibration, other related issues.&lt;br /&gt;Generate correct force &lt;em&gt;vector&lt;/em&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111662315556847947?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111662315556847947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111662315556847947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111662315556847947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111662315556847947'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/week-update-may-20-2005.html' title='Week Update May 20, 2005'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111653543391889067</id><published>2005-05-19T22:26:00.000+02:00</published><updated>2005-05-19T22:43:53.923+02:00</updated><title type='text'>Implementing SWIFT</title><content type='html'>Project &lt;strong&gt;stlViewer&lt;/strong&gt; was modified to incorporate the &lt;strong&gt;SWIFT&lt;/strong&gt; package. The project uses SWIFT to load two spherical objects from a given &lt;strong&gt;TRI file&lt;/strong&gt;.  The SWIFT source code was modified to allow the vertex data to be retreived from it.  The program has a TRI file reader and stores data as a mesh.  A function was added to return a struct, SOLID, that contains the array of every face and each face having 3 vertices.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;stlViewer &lt;/strong&gt;loads the two sphere objects and draws them using &lt;strong&gt;openGl&lt;/strong&gt;.  One sphere can be moved and when a collision occurs the console prints that a collision has occured.  &lt;br /&gt;&lt;br /&gt;SWIFT will be linked with &lt;strong&gt;haptic thread&lt;/strong&gt;. The haptics thread will send the rotation and translation information to the &lt;strong&gt;graphics thread&lt;/strong&gt; and the SWIFT package. This is because the only moving object is the haptic device/drilling tool. The SWIFT package offers a function that returns the distance between the two objects. This will be used as a spring force.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111653543391889067?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111653543391889067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111653543391889067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111653543391889067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111653543391889067'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/implementing-swift.html' title='Implementing SWIFT'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111608081401297346</id><published>2005-05-14T15:50:00.000+02:00</published><updated>2005-05-14T17:05:26.850+02:00</updated><title type='text'>Building SWIFT: Issues and Tips</title><content type='html'>&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Package Details:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The SWIFT collision detection package is available from the &lt;a href="http://www.cs.unc.edu/~geom/index.shtml"&gt;UNC&lt;/a&gt; software page. The download is in the form of a ZIP file. The ZIP file contains the source code, documentation and an example project. Compiling the example project in .Net 2003 is straightforward after unpacking the ZIP file. The files are written in C++. The files swift.h and swift.lib must be included into a project to use the SWIFT collision detection package.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Rebuilding SWIFT:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;The thesis project requires using a multi-threaded DLL runtime library because of the OpenHaptics Toolkit. The example SWIFT file is set to build using the single threaded runtime library. To test the SWIFT library the example project was build using the multi-threaded DLL option. To successfully build the example and the thesis project with the SWIFT library included, the SWIFT package must be rebuilt.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Rebuilding Source Code&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open Project file swift.dsw&lt;/li&gt;&lt;li&gt;Change Build Configuration from Debug to Release&lt;/li&gt;&lt;li&gt;Change Project Properties-&gt;C/C++-&gt;Code Generation-&gt;Runtime Library &lt;/li&gt;&lt;ul&gt;&lt;li&gt;Multi-threaded DLL (/MD)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Build Project&lt;/li&gt;&lt;ul&gt;&lt;li&gt;If Link errors occur see below &lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;Including the SWIFT library into Existing Projects &lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Check that Project Properties&lt;/li&gt;&lt;ul&gt;&lt;li&gt;C/C++-&gt;Code Generation-&gt;Runtime Library is set to Multi-threaded DLL (/MD)&lt;/li&gt;&lt;li&gt;C/C++-&gt;General-&gt;Additional Include Directories add path to &lt;strong&gt;swift.h&lt;/strong&gt; header file. (ex. ..\swift\include\ )&lt;/li&gt;&lt;li&gt;Linker-&gt;General-&gt;Additional Library Directories add path to the rebuilt &lt;strong&gt;swift.lib&lt;/strong&gt; file. (ex. ...\swift\release\ )&lt;/li&gt;&lt;li&gt;Linker-&gt;Input-&gt;Additional Dependencies add &lt;strong&gt;swift.lib &lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Include swift.h &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;Possible Error Messages VC++ .Net 2003&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If Link errors occur and complain about missing files it is caused by switching the runtime libraries. The missing files are a part of Visual Studio 6. If you don't have Visual Studio 6, trying searching the internet for the files or find someone with a copy of these files. Copy the Library and DLL files from a Visual Studio Directory to the windows/system32 directory or place them in the project folder.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111608081401297346?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111608081401297346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111608081401297346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111608081401297346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111608081401297346'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/building-swift-issues-and-tips.html' title='Building SWIFT: Issues and Tips'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111590374991495802</id><published>2005-05-12T14:48:00.000+02:00</published><updated>2005-05-12T15:15:49.930+02:00</updated><title type='text'>STL files and Collision Detection</title><content type='html'>&lt;strong&gt;Swift Custom File Formats&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;The UNC collision detection packages offer speed and flexibility.  The file types that are used contain all the sets of vertices and faces that represent the object.  The faces for this project will be triangles, although this is not a requirement.  The UNC collision detection package SWIFT uses a specialized file format named TRI.  All vertices are listed, then the faces are built from references these vertices.&lt;br /&gt;&lt;br /&gt;The format for a TRI file is&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;TRI&lt;br /&gt;nv&lt;int&gt; = number of vertices&lt;br /&gt;nf&lt;int&gt; = number of faces&lt;br /&gt;coordinates&lt;real&gt; = list of the vertex position coordinates as reals.&lt;br /&gt;There are 3*nv coordinates.&lt;br /&gt;face indices&lt;int&gt; = list of the vertex indices given in CCW orientation&lt;br /&gt;for each face. There are 3*nf indices.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The main difference between STL files and TRI files are the way they represent the triangles.  STL files specify coordinates for each vertex in each triangle (face).  This is inefficient because in a closed object a vertex can share multiple faces.  The vertex is repeated.  The TRI file format, among others, lists all possible vertices first.  Then, the triangle faces are created by referencing 3 vertices.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Affect &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;There is a file format TRIS that is similar to an STL file.  Techniques on converting STL files will be researched.  Currently I have found a program to convert a STL file to an .OBJ file.&lt;br /&gt;&lt;br /&gt;For an explanation of why the project needs collision detection, see &lt;a href="http://hapticprogress.blogspot.com/2005/04/force-rendering-and-collision.html"&gt;force-rendering-and-collision.html&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;[1] Ehman, Stephan.  SWIFT &lt;em&gt;Speedy Walking via Improved Feature Testing. Application Manual. &lt;a href="http://www.cs.unc.edu/"&gt;http://www.cs.unc.edu/&lt;/a&gt;􀀀 geom/SWIFT/ &lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111590374991495802?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111590374991495802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111590374991495802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111590374991495802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111590374991495802'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/stl-files-and-collision-detection.html' title='STL files and Collision Detection'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111573076667397021</id><published>2005-05-10T14:50:00.000+02:00</published><updated>2005-05-10T15:12:46.716+02:00</updated><title type='text'>Possible Collision Detection Solutions</title><content type='html'>Since the &lt;strong&gt;HLAPI&lt;/strong&gt; cannot be modified it cannot be used in this project.  This means that we don't get the benefit of automatic collision detection and haptics rendering provided by the HLAPI.  A collision detection package must be incorporated into the project to help render forces when contact with the &lt;strong&gt;STL object&lt;/strong&gt; occurs.  UNC chapel hill's &lt;a href="http://www.cs.unc.edu/~geom/index.shtml"&gt;team gamma&lt;/a&gt; has an impressive page on Collision Detection, Haptics and Robotics. Professor Horsch has suggested implementing one of the two packages:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SWIFT &lt;/li&gt;&lt;li&gt;PQP&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;SWIFT claims speed, while PQP seems to be easier to implement.  Both packages will be explored over the next few weeks.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111573076667397021?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111573076667397021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111573076667397021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111573076667397021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111573076667397021'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/possible-collision-detection-solutions.html' title='Possible Collision Detection Solutions'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111541279695630222</id><published>2005-05-06T22:42:00.000+02:00</published><updated>2005-05-12T17:26:03.383+02:00</updated><title type='text'>Week Update May 6, 2005</title><content type='html'>&lt;u&gt;&lt;strong&gt;Project Prototype:&lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;Voxels&lt;br /&gt;The &lt;strong&gt;voxel object &lt;/strong&gt;was incorporated into the project. Currently it is an example provided by Prof. Horsch. The code will be modified to create the cuboid &lt;strong&gt;voxel shell&lt;/strong&gt;. The voxel object will have to surround the &lt;strong&gt;STL object&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Forces and Collision&lt;br /&gt;When a collision occurs a force will be sent to the haptic device. The focus of the next few weeks will be resetting and adjusting forces.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Project stlViewer:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Voxel object was modified.  Each voxel is now drawn as a 3D coordinate using 3 lines rather than 6 planes. &lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Progress&lt;/strong&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/u&gt;A drilling tool was provided by Prof. Dr. Horsch. Next week I will enlist the help of the Darmstadt machining lab to attach the tool to the haptic device&lt;br /&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Outlook&lt;/strong&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;By June 3 demo&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Align voxel object and STL Import voxel object using haptic device. &lt;/li&gt;&lt;li&gt;Feedback to simulate a collision and resist penetration. &lt;/li&gt;&lt;/ul&gt;Next phase&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Drilling tool should be attached. &lt;/li&gt;&lt;li&gt;Experiment drilling with simple shapes&lt;/li&gt;&lt;li&gt;Collision Detection with STL object &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111541279695630222?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111541279695630222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111541279695630222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111541279695630222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111541279695630222'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/week-update-may-6-2005.html' title='Week Update May 6, 2005'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111540994991814888</id><published>2005-05-06T21:01:00.000+02:00</published><updated>2005-05-06T23:16:14.740+02:00</updated><title type='text'>Thread Safety .. or Ignoring Thread Safety</title><content type='html'>&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br /&gt;The &lt;strong&gt;voxel object&lt;/strong&gt; needs to be drawn by the graphics thread and updated by the haptics thread. The Haptics Programmers PDF suggests creating a snapshot for shared data because the haptics thread runs considerably faster and can change the data while the graphics thread is attempting to draw the object. Creating a snapshot would mean that at the worst case a 3D array 128^3 would have to be copied 60 times per second.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Partial Solutions and Assumptions:&lt;/strong&gt;&lt;br /&gt;The graphics thread is a read-only thread while the haptics thread is a write-only thread. The collision detection exists in the haptic thread so the data needs to be correct. The proposed solution is to overlook the possibility of inconsistant data for the graphic thread and have one object shared between the two threads. It is unknown if there will be a noticable display lag in the graphics thread. This issue will be tracked throughout the course of the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111540994991814888?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111540994991814888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111540994991814888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111540994991814888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111540994991814888'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/thread-safety-or-ignoring-thread.html' title='Thread Safety .. or Ignoring Thread Safety'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111520025960795674</id><published>2005-05-04T11:34:00.000+02:00</published><updated>2005-06-07T16:13:40.563+02:00</updated><title type='text'>Terms and Definitions</title><content type='html'>&lt;strong&gt;Callback &lt;/strong&gt;-- Function that is set to run on the scheduler. These can set responses to user events or query device state. They can be Asynchronous or Synchronous. &lt;a href="http://hapticprogress.blogspot.com/2005/04/callbacks-and-scheduler-from-hdapi.html"&gt;callbacks-and-scheduler-from-hdapi&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Graphics Thread &lt;/strong&gt;-- see Scheduler&lt;br /&gt;&lt;strong&gt;Haptic Device&lt;/strong&gt; -- Phantom Omni 6 DOF device. Can render force feedback in 3 dimensions. &lt;a href="http://hapticprogress.blogspot.com/2005/04/sensable-omni-phantom"&gt;sensable-omni-phantom&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Haptic Thread&lt;/strong&gt; -- see Scheduler&lt;br /&gt;&lt;strong&gt;HDAPI&lt;/strong&gt; --Haptic Device API. This allows low a level interface with the haptic device. see &lt;a href="http://hapticprogress.blogspot.com/2005/04/hdapi-vs-hlapi.html"&gt;hdapi-vs-hlapi&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;HLAPI&lt;/strong&gt; -- Haptic Library API. This builds on top of the HDAPI and allows collision detection based on openGL methods. see &lt;a href="http://hapticprogress.blogspot.com/2005/04/hdapi-vs-hlapi.html"&gt;hdapi-vs-hlapi&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Octree &lt;/strong&gt;-- Storage technique for representing 3D objects. This is an extension from quadtrees. A cube is divided into 8 equal sized cubes. There are multiple levels each level having 8 children. This storage technique is meant to enhance performace by reducing cells to check. Eg. An array would check each item in the array. An octree is meant to quickly dismiss branches that are unnecessary.&lt;br /&gt;&lt;strong&gt;OpenGl &lt;/strong&gt;-- A graphics programming API allowing 2 and 3 dimensional manipulation. multi-language multi-platform&lt;br /&gt;&lt;strong&gt;Scheduler &lt;/strong&gt;-- This is an infinite loop that responds to events based on callbacks. Events can be from user devices or based on idle time. The scheduler will execute at a set frequency. openGl and the HDAPI use seperate schedulers. OpenGl is around 60 Hz while the Haptic scheduler is at 1000 Hz. &lt;a href="http://hapticprogress.blogspot.com/2005/04/callbacks-and-scheduler-from-hdapi.html"&gt;callbacks-and-scheduler-from-hdapi&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;STL file&lt;/strong&gt; -- STereoLithography. A triangle mesh that forms a shell of a solid object. All faces are listed. Each face has a normal vector and then 3 vectors with 3 coordinates each. see &lt;a href="http://hapticprogress.blogspot.com/2005/05/stl-files-and-collision-detection.html"&gt;stl-files-and-collision-detection&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;STL Object&lt;/strong&gt; -- This represents the desired shape in the virtual environment consisting of openGL triangles. The triangle data is loaded from an STL file. Forces should be rendered to prevent the tool tip to penetrate this shape.&lt;br /&gt;&lt;strong&gt;Stock Material &lt;/strong&gt;-- Real world drilling material. This will be simulated by the &lt;strong&gt;Voxel Object&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;SWIFT &lt;/strong&gt;-- University of North Carolina's collision detection package. &lt;a href="http://www.cs.unc.edu/~geom/SWIFT/"&gt;SWIFT&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;TCP&lt;/strong&gt; -- Tool Center Point. This is the endpoint of the kinematic chain representing the tooltip of the Haptic device.&lt;br /&gt;&lt;strong&gt;TRI file&lt;/strong&gt; -- a file consisting of faces and vertex points that represent a triangle mesh that forms a shell of a solid object. First all unique vertice positions are listed. Then all triangles are formed by referencing 3 listed vertice positions. see &lt;a href="http://hapticprogress.blogspot.com/2005/05/stl-files-and-collision-detection.html"&gt;stl-files-and-collision-detection&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Voxel&lt;/strong&gt; -- Volume Pixel, used to represent 3D objects. see &lt;a href="http://hapticprogress.blogspot.com/2005/04/voxels-what-to-know.html"&gt;voxels-what-to-know&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Voxel Object&lt;/strong&gt; -- The 3D array that surrounds the STL Object and simulates the &lt;strong&gt;Stock Material&lt;/strong&gt;. Each cell has a value associated with it 0 is Empty, 1 is Inner, and 2 is the Body. Cells marked Body are the only cells drawn. The Voxel object starts as a cuboid shell.&lt;br /&gt;&lt;strong&gt;Voxel Shell &lt;/strong&gt;-- All cells of the &lt;strong&gt;Voxel Object&lt;/strong&gt; that have value Body. This simulates the current progress and should mirror the actual milling material.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;u&gt;Programs:&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;u&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;stlViewer&lt;/em&gt;: &lt;/strong&gt;Initial project. First was used to load and display &lt;strong&gt;STL objects&lt;/strong&gt; from a file. Then &lt;strong&gt;haptics &lt;/strong&gt;were added. &lt;strong&gt;Voxels &lt;/strong&gt;were added next. Collision detection and force rendering were explored using this project. This project relies on the &lt;strong&gt;HLAPI&lt;/strong&gt;. This project was converted into &lt;strong&gt;&lt;em&gt;prototype&lt;/em&gt;. &lt;/strong&gt;Recently this was extended to use the &lt;strong&gt;SWIFT collision detection package.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;prototype&lt;/em&gt;: &lt;/strong&gt;working Project. This is the conversion of the project &lt;strong&gt;&lt;em&gt;stlViewer&lt;/em&gt;&lt;/strong&gt; to use the &lt;strong&gt;HDAPI&lt;/strong&gt;. This will have custom force rendering and the SWIFT collision detection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111520025960795674?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111520025960795674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111520025960795674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111520025960795674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111520025960795674'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/terms-and-definitions.html' title='Terms and Definitions'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111511560864827433</id><published>2005-05-03T12:03:00.000+02:00</published><updated>2005-05-03T12:20:08.650+02:00</updated><title type='text'>Force Assumptions and Method</title><content type='html'>The haptic device can only render forces in 3 dimensions. The tooltip has no torque feedback so for this project the milling must be perpendicular to the real world material (voxel object). When the tool center point (TCP) enters the voxel object then force rendering starts.&lt;br /&gt;&lt;br /&gt;First the &lt;strong&gt;force axis &lt;/strong&gt;and &lt;strong&gt;force direction &lt;/strong&gt;are computed from the initial &lt;strong&gt;contact point&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Force axis &lt;/strong&gt;-- The x, y or z plane that the force will be rendered in&lt;/li&gt;&lt;li&gt;&lt;strong&gt;force direction &lt;/strong&gt;-- The direction in the plane to render the force. initial point - current point&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;While the TCP lies within the voxel object the &lt;strong&gt;force axis &lt;/strong&gt;and &lt;strong&gt;force direction &lt;/strong&gt;will remain the same. The user must exit the voxel object to reset the &lt;strong&gt;force axis.&lt;/strong&gt;&lt;/p&gt;Proper use of the milling--&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tool is held perpendicular to the voxel object at all times&lt;/li&gt;&lt;li&gt;Milling at an angle will cause unexpected results and is unsafe!&lt;/li&gt;&lt;li&gt;The tool should be exited from the voxel shell when changing the milling axis&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111511560864827433?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111511560864827433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111511560864827433' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111511560864827433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111511560864827433'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/force-assumptions-and-method.html' title='Force Assumptions and Method'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111507394163720437</id><published>2005-05-03T00:34:00.000+02:00</published><updated>2005-05-03T11:07:05.860+02:00</updated><title type='text'>Force Rendering and HLAPI News</title><content type='html'>Professor Horsch and I sent an email to the support department at SensAble to check if the HLAPI (Haptic Library API) could be modified to move the tool center point. I was informed by Prof. Horsch that currently the HLAPI cannot be modified. The next release of the development kit is set for July/August and this feature may be included.&lt;br /&gt;&lt;br /&gt;The project will use the HDAPI (Haptic Device API) and all forces will be rendered manually. There will be different forces.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A lock position -- This could be used to 'hang' the tool. Force would be applied to prevent the tool from moving. This point would be away from the material&lt;/li&gt;&lt;li&gt;Constant friction -- this might assist the overall experience. **will explain if included**&lt;/li&gt;&lt;li&gt;Voxel Contact -- The force cannot be too great, but the user must feel contact with the voxel shell. The voxel shell is deformable. Force Rendered in opposite direction of mill direction&lt;/li&gt;&lt;li&gt;STL Voxel Shell -- **If included** Provide stronger feedback, yet not highest level&lt;/li&gt;&lt;li&gt;STL object -- Highest resisting force&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The initial point of contact with the voxel shell can be tracked. While still in contact with voxels, the force is rendered in the vector from current position to initial point of contact. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Assumption&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Voxel object has collapsing outer shell. In the end all voxels in the voxel object should lie inside of the STL Object.&lt;/p&gt;&lt;p&gt;STL Voxels **if included** are not drawn&lt;/p&gt;&lt;p&gt;&lt;strong&gt;New Issue&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Collision Detection for STL object - Cylinder to set of static triangle planes &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111507394163720437?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111507394163720437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111507394163720437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111507394163720437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111507394163720437'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/force-rendering-and-hlapi-news.html' title='Force Rendering and HLAPI News'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111497020437069364</id><published>2005-05-01T13:21:00.000+02:00</published><updated>2005-05-06T20:10:00.450+02:00</updated><title type='text'>Week Update April 29, 2005</title><content type='html'>&lt;strong&gt;Current Work:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Prototype &lt;/strong&gt;project was created. This is the combination of &lt;strong&gt;stlViewer&lt;/strong&gt;, &lt;strong&gt;cubeTest, slidingContact &lt;/strong&gt;and&lt;strong&gt; &lt;/strong&gt;various parts from other haptics example projects. The &lt;strong&gt;Prototype&lt;/strong&gt; project is the conversion of &lt;strong&gt;stlViewer &lt;/strong&gt;to use the HDAPI&lt;br /&gt;&lt;br /&gt;Currently the project inputs an STL file. It has simple lighting and graphics. The viewing angle is controlled by the keyboard, but rotations aren't included. The haptic interface is setup, but forces are not yet rendered. The outline for the &lt;strong&gt;Prototype &lt;/strong&gt;project follows the example project &lt;strong&gt;slidingContact. &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;New Issues/Questions:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Collision Detection between cursor (cylinder) and STL object (triangle planes)&lt;/li&gt;&lt;li&gt;Attaching drilling tool to haptic device&lt;/li&gt;&lt;li&gt;Fitting STL object into an imported Voxel Shell &lt;/li&gt;&lt;ul&gt;&lt;li&gt;Scaling&lt;/li&gt;&lt;li&gt;Orientation&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Method for computing Forces&lt;/li&gt;&lt;ul&gt;&lt;li&gt;How? -- hdSet (...) -- &lt;/li&gt;&lt;li&gt;What are the max forces? &lt;/li&gt;&lt;li&gt;How the forces change between contact with objects&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111497020437069364?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111497020437069364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111497020437069364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111497020437069364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111497020437069364'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/05/week-update-april-29-2005.html' title='Week Update April 29, 2005'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111443115916527365</id><published>2005-04-25T14:04:00.000+02:00</published><updated>2005-04-25T15:25:11.266+02:00</updated><title type='text'>Timeline Update -- Phase 1</title><content type='html'>Phase 1 is now complete!&lt;br /&gt;&lt;br /&gt;This phase was to determine whether the project was possible. It explored different graphics components based on openGL. It also focused on current trends in research related to haptics and visual representation. The scope and major hurdles for the project were determined. The project will proceed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Issues Encountered:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Issues encountered have either been resolved or a work around exists. One issue was the discovery of the limit of the haptic device. The force feedback is only in 3 dimensions. A fully functional system must incorporate at least 5 degrees of freedom feedback. To overcome this issue, all drilling be done perpendicular to the drilling plane.&lt;br /&gt;&lt;br /&gt;Another issue was moving the tool center point (TCP) of the haptic device. As stated in other posts, the TCP must be at the drilling endpoint. Using the HDAPI the TCP can be moved and have forces generated based on the new position. The remaining issue is that the HLAPI cannot be used without modifying its source code. Using the HDAPI requires custom collision detection and force rendering.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Accomplishments:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;An openGL graphic environment was created. An ASCII STL file can be loaded. Force feedback can be generated using the STL file. A voxel shell can be loaded into the environment and the haptic device can simulate removing pieces. Camera angles can be moved.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Known Issues:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Haptic to viewing transformation/mapping&lt;br /&gt;Must implement custom force/collision detection -- HLAPI cannot be used&lt;br /&gt;How to attach drilling device to haptic device.&lt;br /&gt;Drawing 100,000 Voxels is upper limit of machine&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Skills and Knowledge Acquired:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;programming with openGL&lt;br /&gt;What voxels are and their costs and benefits&lt;br /&gt;how to incorporate API's into existing code&lt;br /&gt;what callbacks are and how they interact with a scheduler&lt;br /&gt;Interact with developers using Sensable Developers Forum&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111443115916527365?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111443115916527365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111443115916527365' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111443115916527365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111443115916527365'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/timeline-update-phase-1.html' title='Timeline Update -- Phase 1'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111443062900379866</id><published>2005-04-25T14:01:00.000+02:00</published><updated>2005-04-25T15:23:23.570+02:00</updated><title type='text'>Week Update April 22, 2005</title><content type='html'>&lt;strong&gt;Resolve&lt;/strong&gt;&lt;strong&gt;d Issues:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;StlViewer&lt;/strong&gt; was modified to allow the haptic cursor to interact with the voxel shell. The problem was matching the coordinate systems. The voxel shell was drawn incorrectly. When the original voxelization pyramid was used, the cursor interacted with voxel object.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Remaining Issues:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Must migrate to HDAPI&lt;br /&gt;Determining the correct scale of the voxel shell around the STL object.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Questions:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;How to resolve system lag, mainly openGL optimizations can Oct trees be used?&lt;br /&gt;Should STL object be voxelized for 3 layer collision detection?&lt;br /&gt;Collision Detection -- Voxel based, Cylinder to Plane&lt;br /&gt;How to attach drilling device to haptic device?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Answered Questions:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Workspace to graphics mapping. See Post for &lt;strong&gt;&lt;a href="http://hapticprogress.blogspot.com/2005/04/haptic-device-to-graphic-mapping.html"&gt;Workspace Mapping&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;Would there be a benefit from using VTK. See Post &lt;a href="http://hapticprogress.blogspot.com/2005/04/visualization-toolkit-vtk-to-integrate.html"&gt;&lt;strong&gt;VTK&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111443062900379866?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111443062900379866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111443062900379866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111443062900379866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111443062900379866'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/week-update-april-22-2005.html' title='Week Update April 22, 2005'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111416402632144675</id><published>2005-04-22T11:36:00.000+02:00</published><updated>2005-04-22T12:00:26.323+02:00</updated><title type='text'>Force Rendering and Collision Detection -- Plan</title><content type='html'>The HDAPI allows the HD_CURRENT_FORCE variable to be set.  This provides the developer with control of custom force rendering.  The &lt;strong&gt;SlidingContact&lt;/strong&gt; example creates a force field around two sphere objects.  Collision detection is used to update the force on the cursor object and then sent to the haptic device.&lt;br /&gt;&lt;br /&gt;Our prototype system will take advantage of custom force control and collision detection.  The collision detection will be divided into either 2 or 3 stages.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The first stage is a collision between the cursor and the voxel shell.  &lt;/li&gt;&lt;li&gt;The second stage would involve voxelizing the STL object.  This stage is meant to reduce the number of collision checks by creating a rough outer shell of the STL object.  This stage is only needed if the collision detection between the STL file and the cursor proves to be too expensive. &lt;/li&gt;&lt;li&gt;The last stage is to do collision detection between the cursor (tooltip) and the STL object.  This is an expensive operation because STL files are normally not optimized.  A sample STL file rendered had 1600 facets.  Various collision detection algorithms will be explored for this issue.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Voxels are used in this program to represent 3D shapes as well as provide quick collision detection.  A collision between the cursor and the voxel object can be detected by checking the coordinates of the cursor.  If it lies within the voxel coordinates a collision has occured.  The voxels that are within the cursor coordinates can be checked whether they are part of the body or are free.&lt;/p&gt;&lt;p&gt;An important assumption is that the STL object will lie within the voxel object.  Collision detection between the cursor and the STL object only needs to be done when the cursor lies within the voxel space.  The STL object is static and a voxel representation can be created but only to reduce the number of collision checks.  The voxel object will have a changing shape and the goal is to represent the STL object as voxels.  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111416402632144675?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111416402632144675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111416402632144675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111416402632144675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111416402632144675'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/force-rendering-and-collision.html' title='Force Rendering and Collision Detection -- Plan'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111409072676589796</id><published>2005-04-21T15:01:00.000+02:00</published><updated>2005-04-22T14:48:43.856+02:00</updated><title type='text'>Haptic Device to Graphic Mapping</title><content type='html'>For the past few weeks, I have been struggling to convert the haptic work coordinates to the graphic coordinates. I have been modifying code given in the haptic examples. The &lt;strong&gt;simpleHapticScene&lt;/strong&gt; example provides code to generate the cursor on the screen.&lt;br /&gt;&lt;br /&gt;The problem was having the coordinate system of the haptic cursor interact with the voxel shell. The cursor could be drawn to the screen, but when the cursor should have crossed into the voxel shell nothing happened.&lt;br /&gt;&lt;br /&gt;Project &lt;strong&gt;stlViewer &lt;/strong&gt;took code from a voxelization project. This took a geometric pyramid and created a voxel shape from this. Dr. Horsch modified this to distinguish the outer shell and the inner body, where the outer shell voxels are drawn. Our project will only require a voxel shell without the need for the voxelization step. I modified the code to create a cube that was 127^3 with only the outer shell drawn.&lt;br /&gt;&lt;br /&gt;The next step was allowing the keyboard to move the cursor in the virtual environment and remove voxels when a collision occured. I modified the code provided by Dr. Horsch to activate the invisible voxels surrounding the one that was removed. When a collision occured with a voxel, its neighbors that were not drawn before had there type changed to be on the border.&lt;br /&gt;&lt;br /&gt;The haptic toolkit provides a way to get the final transformation. There are two levels, the HL and the HD. The HL provides a proxy transformation that is the calculated with an extra translation. The HD provides the exact transformation; that is, it provides the machine values.&lt;br /&gt;&lt;br /&gt;Today I found out that I was multiplying by the wrong transformations. The code provided by &lt;strong&gt;simplehapticscene&lt;/strong&gt; to draw the haptic cursor uses a mapping technique to draw the cursor. I have struggled to get this to work, so instead I took the HD_CURRENT_TRANSFORM and generated the cursor at that position.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111409072676589796?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111409072676589796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111409072676589796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111409072676589796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111409072676589796'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/haptic-device-to-graphic-mapping.html' title='Haptic Device to Graphic Mapping'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111391951384235321</id><published>2005-04-19T14:42:00.000+02:00</published><updated>2005-04-19T16:05:13.843+02:00</updated><title type='text'>Callbacks and the Scheduler -- From a HDAPI viewpoint</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;The Scheduler is the thread controlling the haptic device.  This is the main interface and runs at 1000Hz.  Queries such as position or state must be accessed by calls to the scheduler.   The scheduler allows get and set operations to many hardware variables, i.e. position or force.&lt;/p&gt;&lt;p&gt;The HD requires creating CallBacks to be run on the scheduler.   Some Events are predefined, but the custom functions can also be passed to the scheduler.  The CallBacks can be sent to run every frame, scheduled by the programmer, or triggered by predefined events.  &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Asynchronous -- "return immediately after being scheduled" represent haptic effects&lt;/li&gt;&lt;li&gt;Synchronous   -- "only return after they are completed, ...application thread waits for a synchronous call before continuing." Use to get snapshot of state/variables&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;[1] OpenHaptics Toolkit - Programmer's Guide 5-5 37/118&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;CallBacks have two return types.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;HD_CALLBACK_CONTINUE -- The CallBack will be rescheduled to run on next tick&lt;/li&gt;&lt;li&gt;HD_CALLBACK_DONE -- Will not be rescheduled&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Examples&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:85%;"&gt;hdScheduleSynchronous(DeviceStateCallback, &amp;state, HD_MIN_SCHEDULER_PRIORITY);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;hdScheduleAsynchronous(AForceSettingCallback, (void*)0, HD_DEFAULT_SCHEDULER_PRIORITY&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:85%;"&gt;);&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111391951384235321?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111391951384235321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111391951384235321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111391951384235321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111391951384235321'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/callbacks-and-scheduler-from-hdapi.html' title='Callbacks and the Scheduler -- From a HDAPI viewpoint'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111390496861116785</id><published>2005-04-19T11:29:00.000+02:00</published><updated>2005-04-19T13:45:26.606+02:00</updated><title type='text'>HLAPI -- Forces and Collision Detection</title><content type='html'>The section called HDAPI vs. HLAPI mentioned that the HL used openGl to render haptic feedback. The HL commands to capture the shapes are wrapped around existing openGL code.&lt;br /&gt;&lt;br /&gt;Depth Buffer -- The HL reads the openGl depth buffer to calculate the geometry and render forces. "The depth buffer is used for hidden surface removal." [1]&lt;br /&gt;&lt;br /&gt;Depth buffer shapes are less accurate than feedback buffer shapes although in nearly all&lt;br /&gt;applications, the difference in accuracy is undetectable. [2]&lt;br /&gt;&lt;br /&gt;Feedback Buffer -- "Capture geometric primitieves" Commands that generate points, lines and polygons. [1]&lt;br /&gt;&lt;br /&gt;If you are rendering lines and points to be used as constraints, you must use a feedbackbuffer shape since depth buffer shapes cannot capture points and lines.[2]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] The OpenHaptics™ Toolkit: A Library for Adding 3D Touch™ Navigation and Haptics to Graphics Applications&lt;br /&gt;Brandon Itkowitz* Josh Handley† Weihang Zhu&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[2] OHTK Programmer's Guide 7-12 page 62/118&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111390496861116785?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111390496861116785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111390496861116785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111390496861116785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111390496861116785'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/hlapi-forces-and-collision-detection.html' title='HLAPI -- Forces and Collision Detection'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111368667080369817</id><published>2005-04-16T23:24:00.000+02:00</published><updated>2005-04-16T23:24:30.803+02:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/11/5140/640/march2005%20157.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/11/5140/320/march2005%20157.jpg'&gt;&lt;/a&gt;&lt;br /&gt;SensAble Omni Phantom&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111368667080369817?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111368667080369817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111368667080369817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111368667080369817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111368667080369817'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/sensable-omni-phantom.html' title=''/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111368392674312149</id><published>2005-04-16T22:23:00.000+02:00</published><updated>2005-04-16T22:38:46.746+02:00</updated><title type='text'>Visualization ToolKit (VTK) -- To integrate or not to integrate</title><content type='html'>"The Visualization ToolKit (VTK) is an open source, freely available software system for 3D computer graphics, image processing, and visualization..."&lt;br /&gt;&lt;span style="font-size:85%;"&gt;VTK Home Page &lt;/span&gt;&lt;a href="http://www.vtk.org/"&gt;&lt;span style="font-size:85%;"&gt;http://www.vtk.org/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; 16 April 2005&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;The initial phase of the project was to determine whether to design a system bottom up or to modify an existing engine. The VTK provides many features, automatic lighting, an STL file reader, and a marching cubes implementation. Using the VTK marching cubes implementation would decrease design time but is not crutial to the system. I have implemented an ASCII STL reader.&lt;br /&gt;&lt;br /&gt;The control of openGL is hidden from the programmer and this is the main downside of using this system. Integrating the controls of the haptic device would be required and it is unknown if it is possible or . Another issue is the workspace to graphics mapping. Since the openGL calls are hidden, it is unclear whether the model transformation matrix is accessible.&lt;br /&gt;&lt;br /&gt;At this point in time, the risks of switching to the VTK outweigh the benefits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111368392674312149?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111368392674312149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111368392674312149' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111368392674312149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111368392674312149'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/visualization-toolkit-vtk-to-integrate.html' title='Visualization ToolKit (VTK) -- To integrate or not to integrate'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111367721389510823</id><published>2005-04-16T20:45:00.000+02:00</published><updated>2005-04-16T20:48:09.816+02:00</updated><title type='text'>HDAPI vs. HLAPI</title><content type='html'>The HDAPI provides low-level access to the haptic device, enables haptics programmers to render forces directly, offers control over configuring the runtime behavior of the drivers, and provides convenient utility features and debugging aids.&lt;br /&gt;&lt;br /&gt;The HLAPI provides high-level haptic rendering and is designed to be familiar to OpenGL® API programmers. It allows significant reuse of existing OpenGL code and greatly simplifies synchronization of the haptics and graphics threads. The PHANTOM Device Drivers support all shipping PHANTOM devices.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;3D TOUCH™ SDK OPENHAPTICS™ TOOLKIT PROGRAMMER’S GUIDE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;2004 SensAble Technologies&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111367721389510823?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111367721389510823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111367721389510823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111367721389510823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111367721389510823'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/hdapi-vs-hlapi.html' title='HDAPI vs. HLAPI'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111367710520695186</id><published>2005-04-16T20:39:00.000+02:00</published><updated>2005-04-16T22:19:19.140+02:00</updated><title type='text'>Voxels -- What to Know</title><content type='html'>Definition:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The term voxel is short for volume pixel. Pixels represent only two dimensions. Voxels allow objects to be represented in 3 dimensions. Voxels are used to represent volume data, such as CAT scans and MRIs.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In Use:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A 3 dimension array will represent the voxels. The array type will be an unsigned char, where a zero is outside of the object, a one would represent the outer shell of the object, a two would represent the undrawn inside of the object. &lt;/li&gt;&lt;li&gt;The memory size will increase with resolution (ex. 128 cells in each x, y and z coordinates as an unsigned char)&lt;/li&gt;&lt;li&gt;Voxelization is the process of converting a set of geometric shapes into a voxel representation. A problem is finding a ratio of memory size to resolution. One technique for voxelization is presented by&lt;br /&gt;&lt;span style="font-size:85%;"&gt;E. Karabassi, G. Papaioannou, T. Theoharis, "A Fast Depth Buffer Based Voxelization Algorithm,&lt;br /&gt;Journal of Graphics Tools", ACM, 4(4), pp.5-10, 1999.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Project Specific Assumptions:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The real world material will be represented by a voxel shell. The material will be cuboid, not required to be cubic. The original object does not require voxelization, because of its shape. The STL object could be voxelized to enhance collision detection. &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;if tooltip is within voxel coordinates &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;check for collision with voxel outer shell&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;check for collision with STL voxel shell&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;use other collision detection to check for contact with STL&lt;br /&gt;object &lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Voxels are used because of quick collision detection. The position of where an object collides with the voxel shell can be checked easily. X, Y and Z coordinates with the offsets figured in will determine which cells need to be checked. If any cells have a value of one, being part of the outer shell, then a collision has occured.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111367710520695186?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111367710520695186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111367710520695186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111367710520695186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111367710520695186'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/voxels-what-to-know.html' title='Voxels -- What to Know'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12197915.post-111365355028033736</id><published>2005-04-16T12:31:00.000+02:00</published><updated>2005-04-16T14:47:03.980+02:00</updated><title type='text'>Week update April 15, 2005</title><content type='html'>&lt;strong&gt;Current Issues:&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mapping the Cursor/haptic device Workspace to Screen coordinates. &lt;/li&gt;&lt;li&gt;Including tooltip transformation: Current Projects rely on Haptic Library to Render forces. The translation for the tooltip requires the projects moving away from the Haptic Library(HL) API and using the Haptic Device(HD) API. The HL is a high level library that automates most processes, including capturing and rendering forces. The HD requires callbacks to be written to simulate forces and provide collision detection.&lt;/li&gt;&lt;li&gt;Collision Detection techniques&lt;/li&gt;&lt;li&gt;Migrate working systems to HD&lt;/li&gt;&lt;li&gt;Calculate and Generate custom forces&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Current State of System&lt;/strong&gt;: Projects&lt;/p&gt;&lt;p&gt;&lt;strong&gt;stlViewer&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The haptic tooltip can be drawn on the screen&lt;/li&gt;&lt;li&gt;Loads STL object&lt;/li&gt;&lt;li&gt;Loads a voxel shell, the shell is updated when contact occurs with cursor&lt;/li&gt;&lt;li&gt;Allows cursor control with keyboard or haptic interface &lt;/li&gt;&lt;li&gt;With keyboard control, voxel shell can be deformed&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Issues:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Relies on HL to capture shapes from OpenGL calls&lt;/li&gt;&lt;li&gt;Must migrate to HD&lt;/li&gt;&lt;li&gt;Does not include tooltip transformation&lt;/li&gt;&lt;li&gt;haptic cursor does not interact with voxel shell correctly&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Various Toolkit Examples:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Slidingcontact &lt;/strong&gt;has been modified to demonstrate the possibility of adding the translation using HD. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;cubeTest &lt;/strong&gt;loads a STL file and allows haptic feedback. The forces are rendered by the openGL viewing matrix. If the viewing matrix shows the virtual model at an angle, then the forces will correspond to the viewing shape not the actual shape. This project uses HL and has a mapping of the workspace to visual display. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Questions:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;How to map workspace&lt;/li&gt;&lt;li&gt;Collision Detection -- Voxel based, Cylinder to Plane &lt;/li&gt;&lt;li&gt;How to resolve system lag, mainly openGL optimizations can Oct trees be used&lt;/li&gt;&lt;li&gt;Should STL object be voxelized for 3 layer collision detection&lt;/li&gt;&lt;li&gt;Would there be a benefit from using VTK &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12197915-111365355028033736?l=hapticprogress.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hapticprogress.blogspot.com/feeds/111365355028033736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12197915&amp;postID=111365355028033736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111365355028033736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12197915/posts/default/111365355028033736'/><link rel='alternate' type='text/html' href='http://hapticprogress.blogspot.com/2005/04/week-update-april-15-2005.html' title='Week update April 15, 2005'/><author><name>Tosowski</name><uri>http://www.blogger.com/profile/17965293205578346663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
