<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Jom (Pornthep) Preechayasomboon</title>
		<link>//prnthp.github.io</link>
		<atom:link href="//prnthp.github.io/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>ROS &amp; ROS CSereal</title>
        <description>&lt;p&gt;A major part of the Bishop’s Hand project is a robust logging backend in for recording kinematic data from Unity. We chose ROS as our backend.&lt;/p&gt;

&lt;h3 id=&quot;ros&quot;&gt;ROS?&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;//ros.org&quot;&gt;ROS&lt;/a&gt; “The Robot Operating System (ROS) is a set of software libraries and tools that help you build robot applications. From drivers to state-of-the-art algorithms, and with powerful developer tools, ROS has what you need for your next robotics project. And it’s all open source.”&lt;/p&gt;

&lt;h3 id=&quot;why-ros&quot;&gt;Why ROS?&lt;/h3&gt;
&lt;p&gt;What sold me (or &lt;a href=&quot;//rombokas.com/eric&quot;&gt;who&lt;/a&gt; sold me) was the communication framework provided by ROS. ROS is mainly driven by a message passing system: any number of &lt;em&gt;nodes&lt;/em&gt; can pass messages to any number of other nodes through &lt;em&gt;roscore&lt;/em&gt;. A node can publish to a &lt;em&gt;topic&lt;/em&gt; and not care whether anyone is listening or not. Likewise, another node can subscribe and listen to your topic at their own leisure. A node can be anything: a sensor, a motor driver, a user interface, a simulation or in this case: Unity.&lt;/p&gt;

&lt;h3 id=&quot;rosserial&quot;&gt;rosserial&lt;/h3&gt;
&lt;p&gt;A caveat: ROS almost exclusively runs on Linux. The release cycles are even tied to Canonical’s Ubuntu release cycle (with LTS releases too!). So how do we set up a node on Windows? The answer is &lt;a href=&quot;//github.com/ros-drivers/rosserial&quot;&gt;rosserial&lt;/a&gt;: a collection of drivers for running ros-like nodes on embedded systems such as the Arduino and Teensy. Forget about robots, we now have middleware for easily connecting multiple &lt;em&gt;subsystems&lt;/em&gt; of hardware and software. &lt;strong&gt;Imagine, if you will, a robot ROS node equipped with binocular vision, streaming sensor data and images to another powerful computing node running an active neural network. The computing node could relay commands back to the robot and at the same time stream video to a machine running a Unity ROS node providing 3D vision through VR, overlaid with a 3D mecha like console.&lt;/strong&gt; Just thinking about the foundations for making those communication systems work with each other is a nightmare - ROS to the rescue!
&lt;img src=&quot;/images/meka.jpg&quot; alt=&quot;Meka&quot; /&gt;&lt;em&gt;This, but in VR!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/roscsereal.png&quot; alt=&quot;ROSCSereal&quot; /&gt;&lt;em&gt;ROSCSereal Logo&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;ros-csereal&quot;&gt;ROS CSereal&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;//github.com/prnthp/ros-csereal-plugin&quot;&gt;ROS CSereal&lt;/a&gt; is a plugin I developed for Unity with rosserial-windows. It provides a simple plug-n-play interface for sending poses (transforms) of gameObjects and other data (vectors, strings, floats) and receiving the same sort of data.&lt;/p&gt;

&lt;p&gt;Behold: A pressure sensor being read by a Teensy 3.5 publishing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/pressure&lt;/code&gt; via rosserial, which applies torque via ROSCSereal to a pendulum simulated with PhysX in Unity! Amazeballs!&lt;/p&gt;
&lt;iframe width=&quot;650&quot; height=&quot;300&quot; src=&quot;https://www.youtube.com/embed/WfNqcGOS5-s&quot; frameborder=&quot;0&quot; gesture=&quot;media&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;em&gt;Also ROS2 is coming very soon and it supports windows and this will all be quite moot.&lt;/em&gt;&lt;/p&gt;
</description>
				<pubDate>Thu, 02 Nov 2017 00:00:00 +0000</pubDate>
				<link>//prnthp.github.io/2017/11/02/ROS-CSereal/</link>
				<guid isPermaLink="true">//prnthp.github.io/2017/11/02/ROS-CSereal/</guid>
			</item>
		
			<item>
				<title>Anomalies in the Rift</title>
        <description>&lt;p&gt;Here I describe some issues with the Oculus Rift hardware when used for motion tracking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Touch controllers turn off or go into standby when not interacted with.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We use the controller to track the orientation of an object that will be stationary (untouched) most of the time over a long duration. The Touch controller will go to sleep or turn off after ~1 minute of inactivity, we have to manually depress a button on the controller to wake it up again. Taping a button down does not work.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Current solution&lt;/em&gt; Manually depressing buttons once in a while or before starting sessions that require moving the controller&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calibrated home (origin) of coordinate system changes over each session.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our calibration procedure involves calibrating the coordinate frame of a real world robot to the Rift’s coordinate system. However, the Rift’s coordinate frame changes every once in a while - sometimes after temporarily losing tracking and sometimes after the controllers go into standby. This shouldn’t happen because ground-truth should be achievable by the cameras and the only (precalibrated) unknown is the floor “height”.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Current solution&lt;/em&gt; Run our calibration between sessions and base all data on real world robot’s coordinate frame.&lt;/p&gt;
</description>
				<pubDate>Fri, 27 Oct 2017 00:00:00 +0000</pubDate>
				<link>//prnthp.github.io/2017/10/27/Anomalies-in-the-Rift/</link>
				<guid isPermaLink="true">//prnthp.github.io/2017/10/27/Anomalies-in-the-Rift/</guid>
			</item>
		
			<item>
				<title>Sensuator&amp;copy; - Thailand</title>
        <description>&lt;p&gt;Instead of having a proper vacation in Thailand, I decided to dabble into silicone molding, casting and soft robotics in general. I ordered some silicone rubber and some tubing, and here’s what I found out while trying to make a Sensuator©.&lt;/p&gt;

&lt;h3 id=&quot;the-mold&quot;&gt;The Mold&lt;/h3&gt;
&lt;p&gt;I started off with drawing the end result first: the black parts are conductive rubber and the translucent parts are normal Shore 20 A silicone rubber. The plan was to experiment with changes in conductivity during bending or deformation.
&lt;img src=&quot;/images/sensuator1.PNG&quot; alt=&quot;Sensuator&quot; /&gt;&lt;em&gt;The Sensuator© CAD&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The actual 3d printed mold was made using boolean body operations. There are some ribbed features on the bottom of the mold to serve as registration features.
&lt;img src=&quot;/images/sensuator_mold.PNG&quot; alt=&quot;Sensuator Mold&quot; /&gt;&lt;em&gt;The mold&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;lost-wax-silicone-casting&quot;&gt;Lost-Wax Silicone Casting&lt;/h3&gt;
&lt;p&gt;If you’re aware of lost-wax casting (the metal casting technique) then lost-wax silicone casting is a simplified version of that. As mentioned &lt;a href=&quot;//groups.csail.mit.edu/drl/wiki/images/2/27/Homberg_et_al._-_2015_-_Haptic_Identification_of_Objects_using_a_Modular_Soft_Robotic_Gripper.pdf&quot;&gt;here&lt;/a&gt;, lost-wax silicone casting is useful for creating hollow features without having to join two separate silicone castings. The most useful benefit is the strength due to the absence of a seam: delamination occurs at the seams when parts are made from two pieces and joined later.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/waxcores.jpg&quot; alt=&quot;Wax Cores&quot; /&gt;&lt;em&gt;The silicone wax core mold, and the wax cores themselves.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In theory, it seems straight-forward: make a mold that can hold the wax in place and pour in silicone around it. Then remove the wax by melting it out. In practice, however, as someone who has had wax melted on stuff before might say, wax a bitch to clean. This becomes a nuisance when your wax is enclosed in silicone with only small holes to evacuate. I tried blasting hot water through the casting and massaging the wax out, but could only get about 90% out. It was even worse when I first tried with only one opening. If your goal is to have a cavity with a waxy interior then lost-wax casting is great.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/sensuatorv1.jpg&quot; alt=&quot;Sensuator V1&quot; /&gt;&lt;em&gt;The milky white wax has covered the whole casting inside and out - it’s virtually impossible to totally remove&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With a thin layer of wax covering the entire interior (and exterior) surface of the Sensuator©, conductivity was completely gone between the inner fluid and the conductive rubber, rendering the casting into just a another soft robotics expanding bladder.&lt;/p&gt;

&lt;p&gt;There are, however, &lt;a href=&quot;//www.freemanwax.com/soluble-waxes.html&quot;&gt;soluble waxes&lt;/a&gt; that are used to make hollow carbon fiber parts. This &lt;em&gt;might&lt;/em&gt; make it easier to flush the wax out.&lt;/p&gt;

&lt;h3 id=&quot;conductive-silicone&quot;&gt;Conductive Silicone&lt;/h3&gt;
&lt;p&gt;Conductive silicone is actually readily available, but it’s absurdly &lt;a href=&quot;//siliconesolutions.com/ss-24.html&quot;&gt;expensive&lt;/a&gt;. Luckily there’s a guy who spent 2 years doing extensive trial-and-error to make &lt;a href=&quot;//www.comingle.io/&quot;&gt;conductive sex toys&lt;/a&gt;. He has a detailed &lt;a href=&quot;//www.instructables.com/id/Silc-Circuits-High-Performance-Conductive-Silicone/&quot;&gt;instructable&lt;/a&gt; explaining the process to make conductive silicone rubber.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/carbonfiber.jpg&quot; alt=&quot;Carbon fiber&quot; /&gt;&lt;em&gt;A piece of carbon fiber cloth&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The only ingredient for conductive silicone other than the silicone itself is carbon fiber. So I acquired some old carbon fiber cloth and cut it up into short 3-6 mm strands. &lt;strong&gt;Wear a respirator while doing this, the strands are extremely light and easily become airborne.&lt;/strong&gt; Following the guide, I stirred in the strands into recently poured silicone rubber until the multimeter read less than 1kOhm. And it works! However the rubber becomes a lot tougher, probably close to Shore 60 A, and the mixture is a lot harder to pour/inject.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/conductivething.jpg&quot; alt=&quot;Conductive Silicone&quot; /&gt;&lt;em&gt;Conductive Silicone!&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;sensuator-01&quot;&gt;Sensuator 0.1&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/sensuatorv3.jpg&quot; alt=&quot;Sensuator&quot; /&gt;&lt;em&gt;Non-working prototype sensuator&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I never got a Sensuator to work properly, although I do have a solid plan to get one to Sensuate™. For the pictured prototype, instead of lost-wax casting, I opted for a simpler lamination procedure with a multi-step cast: cast an open cavity, remove the wax core and flip the casting to seal the top (bottom) in the mold. Unfortunately, the conductive silicone still does not make electrical contact with the inner fluid. The conductive silicone itself has a resistance of about 150-300 Ohms, depending on your tongue angle. The plan for the next cast is to place a conductive wire that connects the inner fluid to the conductive silicone. I already tested this by sticking a wire right through the conductive silicone into the cavity from the outside. That way, I measured a meaningful resistance of the fluid but it leaks.&lt;/p&gt;

&lt;h3 id=&quot;useful-notes&quot;&gt;Useful Notes&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;Food grade silicone takes about 4 hours to cure, but can be demolded after the first 40 minutes or so. (Depending on heat and ambient moisture)&lt;/li&gt;
  &lt;li&gt;To get enclosed parts or multiple materials, add more silicone after the demold time, the silicone can hold its shape.&lt;/li&gt;
  &lt;li&gt;Carbon fiber strands are extremely lightweight and can be breathed in quite easily.&lt;/li&gt;
  &lt;li&gt;The carbon fiber strands act as a matrix to strengthen or toughen the silicone rubber, increasing the hardness significantly. The same technique but done with typical polymer fibers instead, is used to strengthen rubber.&lt;/li&gt;
&lt;/ol&gt;
</description>
				<pubDate>Thu, 21 Sep 2017 00:00:00 +0000</pubDate>
				<link>//prnthp.github.io/2017/09/21/Adventure-Pneudraulique/</link>
				<guid isPermaLink="true">//prnthp.github.io/2017/09/21/Adventure-Pneudraulique/</guid>
			</item>
		
			<item>
				<title>Why I hate SolidWorks API</title>
        <description>&lt;p&gt;Maybe later.&lt;/p&gt;
</description>
				<pubDate>Sat, 05 Aug 2017 00:00:00 +0000</pubDate>
				<link>//prnthp.github.io/2017/08/05/why-i-hate-solidworks-api/</link>
				<guid isPermaLink="true">//prnthp.github.io/2017/08/05/why-i-hate-solidworks-api/</guid>
			</item>
		
	</channel>
</rss>
